mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
- Fix for Ripple not setting activating player
- Convert Force of Will to AFs
This commit is contained in:
@@ -2,6 +2,8 @@ Name:Force of Will
|
|||||||
ManaCost:3 U U
|
ManaCost:3 U U
|
||||||
Types:Instant
|
Types:Instant
|
||||||
Text:no text
|
Text:no text
|
||||||
|
A:SP$ Counter | Cost$ 3 U U | Type$ Spell | Destination$ Graveyard | SpellDescription$ Counter target spell.
|
||||||
|
SVar:AltCost:PayLife<1> ExileFromHand<1/Card.Blue>$You may pay 1 life and exile a blue card from your hand rather than pay CARDNAME's mana cost.
|
||||||
SVar:RemAIDeck:True
|
SVar:RemAIDeck:True
|
||||||
SVar:Rarity:Uncommon
|
SVar:Rarity:Uncommon
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/force_of_will.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/force_of_will.jpg
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Vision Skeins
|
|||||||
ManaCost:1 U
|
ManaCost:1 U
|
||||||
Types:Instant
|
Types:Instant
|
||||||
Text:no text
|
Text:no text
|
||||||
A:SP$Draw | Cost$ 1 U | NumCards$ 2 | SpellDescription$ Each player draws two cards. | SubAbility$ OppDraw/2
|
A:SP$Draw | Cost$ 1 U | Defined$ Each | NumCards$ 2 | SpellDescription$ Each player draws two cards.
|
||||||
SVar:Rarity:Common
|
SVar:Rarity:Common
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/vision_skeins.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/vision_skeins.jpg
|
||||||
SetInfo:DIS|Common|http://magiccards.info/scans/en/di/36.jpg
|
SetInfo:DIS|Common|http://magiccards.info/scans/en/di/36.jpg
|
||||||
|
|||||||
@@ -1567,121 +1567,6 @@ public class CardFactory_Instants {
|
|||||||
card.addSpellAbility(spell);
|
card.addSpellAbility(spell);
|
||||||
}//*************** END ************ END **************************
|
}//*************** END ************ END **************************
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
|
||||||
else if(cardName.equals("Force of Will")) {
|
|
||||||
final SpellAbility spell = new Spell(card) {
|
|
||||||
private static final long serialVersionUID = 7960371805654673281L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resolve() {
|
|
||||||
SpellAbility sa = AllZone.Stack.pop();
|
|
||||||
AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlay() {
|
|
||||||
if(AllZone.Stack.size() == 0) return false;
|
|
||||||
|
|
||||||
//see if spell is on stack and that opponent played it
|
|
||||||
Player opponent = card.getController().getOpponent();
|
|
||||||
SpellAbility sa = AllZone.Stack.peek();
|
|
||||||
|
|
||||||
return sa.isSpell() && opponent.equals(sa.getSourceCard().getController())
|
|
||||||
&& CardFactoryUtil.isCounterable(sa.getSourceCard());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlayAI() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
spell.setDescription("Counter target spell.");
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append(card.getName()).append(" - Counter target spell.");
|
|
||||||
spell.setStackDescription(sb.toString());
|
|
||||||
|
|
||||||
final SpellAbility alt = new Spell(card) {
|
|
||||||
private static final long serialVersionUID = -8643870743780757816L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resolve() {
|
|
||||||
SpellAbility sa = AllZone.Stack.pop();
|
|
||||||
AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlay() {
|
|
||||||
if(AllZone.Stack.size() == 0) return false;
|
|
||||||
|
|
||||||
//see if spell is on stack and that opponent played it
|
|
||||||
Player opponent = card.getController().getOpponent();
|
|
||||||
SpellAbility sa = AllZone.Stack.peek();
|
|
||||||
|
|
||||||
PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getController());
|
|
||||||
CardList list = new CardList(hand.getCards());
|
|
||||||
list = list.filter(new CardListFilter() {
|
|
||||||
public boolean addCard(Card c) {
|
|
||||||
return c.isBlue() && !c.equals(card);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return sa.isSpell() && opponent.equals(sa.getSourceCard().getController())
|
|
||||||
&& CardFactoryUtil.isCounterable(sa.getSourceCard()) && list.size() >= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlayAI() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
alt.setDescription("You may pay 1 life and exile a blue card from your hand rather than pay Force of Will's mana cost.");
|
|
||||||
StringBuilder sb2 = new StringBuilder();
|
|
||||||
sb2.append(card.getName()).append(" - Counter target spell.");
|
|
||||||
alt.setStackDescription(sb2.toString());
|
|
||||||
alt.setManaCost("0");
|
|
||||||
|
|
||||||
final Input exileBlue = new Input() {
|
|
||||||
private static final long serialVersionUID = 8692998689009712987L;
|
|
||||||
int stop = 1;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void showMessage() {
|
|
||||||
AllZone.Display.showMessage("Select a blue card");
|
|
||||||
ButtonUtil.disableAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void selectButtonCancel() {
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void selectCard(Card c, PlayerZone zone) {
|
|
||||||
if(c.isBlue() && zone.is(Constant.Zone.Hand)
|
|
||||||
&& !c.equals(card)) {
|
|
||||||
AllZone.GameAction.exile(c);
|
|
||||||
card.getController().loseLife(1, card);
|
|
||||||
|
|
||||||
count++;
|
|
||||||
if(count == stop) {
|
|
||||||
AllZone.Stack.add(alt);
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}//selectCard()
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
alt.setBeforePayMana(exileBlue);
|
|
||||||
|
|
||||||
card.clearSpellAbility();
|
|
||||||
card.addSpellAbility(alt);
|
|
||||||
card.addSpellAbility(spell);
|
|
||||||
}//*************** END ************ END **************************
|
|
||||||
|
|
||||||
|
|
||||||
//*************** START *********** START **************************
|
//*************** START *********** START **************************
|
||||||
else if(cardName.equals("Stroke of Genius"))
|
else if(cardName.equals("Stroke of Genius"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2772,6 +2772,9 @@ public class GameAction {
|
|||||||
|
|
||||||
if(sa == null) return;
|
if(sa == null) return;
|
||||||
|
|
||||||
|
// Ripple causes a crash because it doesn't set the activatingPlayer in this entrance
|
||||||
|
if (sa.getActivatingPlayer() == null)
|
||||||
|
sa.setActivatingPlayer(AllZone.HumanPlayer);
|
||||||
playSpellAbilityForFree(sa);
|
playSpellAbilityForFree(sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user