mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- Convert Permanent Multikickers to Script
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
Name:Apex Hawks
|
||||
ManaCost:2 W
|
||||
Types:Creature Bird
|
||||
Text:Apex Hawks enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
Text:no text
|
||||
PT:2/2
|
||||
K:Flying
|
||||
K:Multikicker 1 W
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ XKicked | SpellDescription$ CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/apex_hawks.jpg
|
||||
SetInfo:WWK|Common|http://magiccards.info/scans/en/wwk/2.jpg
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
Name:Enclave Elite
|
||||
ManaCost:2 U
|
||||
Types:Creature Merfolk Soldier
|
||||
Text:Enclave Elite enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
Text:no text
|
||||
PT:2/2
|
||||
K:Islandwalk
|
||||
K:Multikicker 1 U
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ XKicked | SpellDescription$ CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/enclave_elite.jpg
|
||||
SetInfo:WWK|Common|http://magiccards.info/scans/en/wwk/27.jpg
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
Name:Everflowing Chalice
|
||||
ManaCost:0
|
||||
Types:Artifact
|
||||
Text:Everflowing Chalice enters the battlefield with a charge counter on it for each time it was kicked.
|
||||
Text:
|
||||
K:Multikicker 2
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ Charge | CounterNum$ XKicked | SpellDescription$ Everflowing Chalice enters the battlefield with a charge counter on it for each time it was kicked.
|
||||
A:AB$ Mana | Cost$ T | Produced$ 1 | Amount$ X | References$ X | SpellDescription$ Add 1 to your mana pool for each charge counter on CARDNAME.
|
||||
SVar:X:Count$CardCounters.CHARGE
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:RemAIDeck:True
|
||||
SVar:Rarity:Uncommon
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/everflowing_chalice.jpg
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
Name:Gnarlid Pack
|
||||
ManaCost:1 G
|
||||
Types:Creature Beast
|
||||
Text:Gnarlid Pack enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
Text:no text
|
||||
PT:2/2
|
||||
K:Multikicker 1 G
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ XKicked | SpellDescription$ CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/gnarlid_pack.jpg
|
||||
SetInfo:WWK|Common|http://magiccards.info/scans/en/wwk/101.jpg
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
Name:Joraga Warcaller
|
||||
ManaCost:G
|
||||
Types:Creature Elf Warrior
|
||||
Text:Joraga Warcaller enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
Text:no text
|
||||
PT:1/1
|
||||
K:Multikicker 1 G
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ XKicked | SpellDescription$ CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
S:Mode$ Continuous | Affected$ Creature.Elf+Other+YouCtrl | AddPower$ X | AddToughness$ X | Description$ Other Elf creatures you control get +1/+1 for each +1/+1 counter on CARDNAME.
|
||||
SVar:X:Count$CardCounters.P1P1
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:RemRandomDeck:True
|
||||
SVar:Rarity:Rare
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/joraga_warcaller.jpg
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
Name:Quag Vampires
|
||||
ManaCost:B
|
||||
Types:Creature Vampire Rogue
|
||||
Text:Quag Vampires enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
Text:no text
|
||||
PT:1/1
|
||||
K:Swampwalk
|
||||
K:Multikicker 1 B
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ XKicked | SpellDescription$ CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/quag_vampires.jpg
|
||||
SetInfo:WWK|Common|http://magiccards.info/scans/en/wwk/63.jpg
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
Name:Skitter of Lizards
|
||||
ManaCost:R
|
||||
Types:Creature Lizard
|
||||
Text:Skitter of Lizards enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
Text:no text
|
||||
PT:1/1
|
||||
K:Haste
|
||||
K:Multikicker 1 R
|
||||
K:ETBReplacement:Other:Multikicked
|
||||
SVar:Multikicked:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ XKicked | SpellDescription$ CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
SVar:Rarity:Common
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/skitter_of_lizards.jpg
|
||||
SetInfo:WWK|Common|http://magiccards.info/scans/en/wwk/91.jpg
|
||||
|
||||
@@ -107,20 +107,6 @@ class CardFactoryArtifacts {
|
||||
card.addSpellAbility(ab1);
|
||||
} // *************** END ************ END **************************
|
||||
|
||||
// *************** START *********** START **************************
|
||||
else if (cardName.equals("Everflowing Chalice")) {
|
||||
final Command comesIntoPlay = new Command() {
|
||||
private static final long serialVersionUID = 4245563898487609274L;
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
card.addCounter(CounterType.CHARGE, card.getMultiKickerMagnitude(), true);
|
||||
card.setMultiKickerMagnitude(0);
|
||||
}
|
||||
};
|
||||
card.addComesIntoPlayCommand(comesIntoPlay);
|
||||
} // *************** END ************ END **************************
|
||||
|
||||
// *************** START *********** START **************************
|
||||
else if (cardName.equals("Scroll Rack")) {
|
||||
class AbilityScrollRack extends AbilityActivated {
|
||||
@@ -211,125 +197,5 @@ class CardFactoryArtifacts {
|
||||
ability.setStackDescription(sbStack.toString());
|
||||
card.addSpellAbility(ability);
|
||||
} // *************** END ************ END **************************
|
||||
|
||||
// *************** START *********** START **************************
|
||||
else if (cardName.equals("Temporal Aperture")) {
|
||||
/*
|
||||
* 5, Tap: Shuffle your library, then reveal the top card. Until end
|
||||
* of turn, for as long as that card remains on top of your library,
|
||||
* play with the top card of your library revealed and you may play
|
||||
* that card without paying its mana cost. (If it has X in its mana
|
||||
* cost, X is 0.)
|
||||
*/
|
||||
final Card[] topCard = new Card[1];
|
||||
|
||||
final Ability freeCast = new Ability(card, SpellManaCost.ZERO) {
|
||||
|
||||
@Override
|
||||
public boolean canPlay() {
|
||||
final PlayerZone lib = card.getController().getZone(ZoneType.Library);
|
||||
return super.canPlay() && ((lib.size() > 0) && lib.get(0).equals(topCard[0]));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
final Card freeCard = topCard[0];
|
||||
final Player player = card.getController();
|
||||
if (freeCard != null) {
|
||||
if (freeCard.isLand()) {
|
||||
if (player.canPlayLand()) {
|
||||
player.playLand(freeCard);
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "You can't play any more lands this turn.", "",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
} else {
|
||||
Singletons.getModel().getGame().getActionPlay().playCardWithoutManaCost(freeCard, player);
|
||||
}
|
||||
} else {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("Error in ").append(cardName).append(". freeCard is null");
|
||||
JOptionPane.showMessageDialog(null, sb.toString(), "", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
freeCast.setDescription("Play the previously revealed top card of your library for free.");
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(cardName).append(" - play card without paying its mana cost.");
|
||||
freeCast.setStackDescription(sb.toString());
|
||||
|
||||
class AbilityTemporalAperture extends AbilityActivated {
|
||||
public AbilityTemporalAperture(final Card ca, final Cost co, final Target t) {
|
||||
super(ca, co, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbilityActivated getCopy() {
|
||||
AbilityActivated res = new AbilityTemporalAperture(getSourceCard(),
|
||||
getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
|
||||
CardFactoryUtil.copySpellAbility(this, res);
|
||||
return res;
|
||||
}
|
||||
|
||||
private static final long serialVersionUID = -7328518969488588777L;
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
final PlayerZone lib = card.getController().getZone(ZoneType.Library);
|
||||
if (lib.size() > 0) {
|
||||
|
||||
// shuffle your library
|
||||
card.getController().shuffle();
|
||||
|
||||
// reveal the top card
|
||||
topCard[0] = lib.get(0);
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("Revealed card:\n").append(topCard[0].getName());
|
||||
JOptionPane.showMessageDialog(null, sb.toString(), card.getName(), JOptionPane.PLAIN_MESSAGE);
|
||||
|
||||
card.addSpellAbility(freeCast);
|
||||
card.addExtrinsicKeyword("Play with the top card of your library revealed.");
|
||||
Singletons.getModel().getGame().getEndOfTurn().addUntil(new Command() {
|
||||
private static final long serialVersionUID = -2860753262177388046L;
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
card.removeSpellAbility(freeCast);
|
||||
card.removeExtrinsicKeyword("Play with the top card of your library revealed.");
|
||||
}
|
||||
});
|
||||
}
|
||||
} // resolve
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
final Cost abCost = new Cost(card, "5 T", true);
|
||||
final AbilityActivated ability = new AbilityTemporalAperture(card, abCost, null);
|
||||
|
||||
final StringBuilder sbStack = new StringBuilder();
|
||||
sbStack.append(card).append(" - Shuffle your library, then reveal the top card.");
|
||||
ability.setStackDescription(sbStack.toString());
|
||||
|
||||
final StringBuilder sbDesc = new StringBuilder();
|
||||
sbDesc.append(abCost).append("Shuffle your library, then reveal the top card. ");
|
||||
sbDesc.append("Until end of turn, for as long as that card remains on top of your ");
|
||||
sbDesc.append("library, play with the top card of your library revealed ");
|
||||
sbDesc.append("and you may play that card without paying its mana cost. ");
|
||||
sbDesc.append("(If it has X in its mana cost, X is 0.)");
|
||||
ability.setDescription(sbDesc.toString());
|
||||
|
||||
card.addSpellAbility(ability);
|
||||
} // *************** END ************ END **************************
|
||||
}
|
||||
}
|
||||
|
||||
@@ -397,31 +397,6 @@ public class CardFactoryCreatures {
|
||||
card.addDestroyCommand(destroy);
|
||||
}
|
||||
|
||||
private static void getCard_MultikickerP1P1(final Card card, final String cardName) {
|
||||
final AbilityStatic ability = new AbilityStatic(card, SpellManaCost.ZERO) {
|
||||
@Override
|
||||
public void resolve() {
|
||||
card.addCounter(CounterType.P1P1, card.getMultiKickerMagnitude(), true);
|
||||
card.setMultiKickerMagnitude(0);
|
||||
}
|
||||
};
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(cardName);
|
||||
sb.append(" enters the battlefield with a +1/+1 counter ");
|
||||
sb.append("on it for each time it was kicked.");
|
||||
ability.setStackDescription(sb.toString());
|
||||
|
||||
final Command comesIntoPlay = new Command() {
|
||||
private static final long serialVersionUID = 4245563898487609274L;
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
Singletons.getModel().getGame().getStack().addSimultaneousStackEntry(ability);
|
||||
|
||||
}
|
||||
};
|
||||
card.addComesIntoPlayCommand(comesIntoPlay);
|
||||
}
|
||||
private static void getCard_SurturedGhoul(final Card card) {
|
||||
final int[] numCreatures = new int[1];
|
||||
final int[] sumPower = new int[1];
|
||||
@@ -759,9 +734,6 @@ public class CardFactoryCreatures {
|
||||
getCard_ApocalypseHydra(card);
|
||||
} else if (cardName.equals("Kinsbaile Borderguard")) {
|
||||
getCard_KinsbaileBorderguard(card);
|
||||
} else if (cardName.equals("Gnarlid Pack") || cardName.equals("Apex Hawks") || cardName.equals("Enclave Elite")
|
||||
|| cardName.equals("Quag Vampires") || cardName.equals("Skitter of Lizards") || cardName.equals("Joraga Warcaller")) {
|
||||
getCard_MultikickerP1P1(card, cardName);
|
||||
} else if (cardName.equals("Sutured Ghoul")) {
|
||||
getCard_SurturedGhoul(card);
|
||||
} else if (cardName.equals("Phyrexian Dreadnought")) {
|
||||
|
||||
Reference in New Issue
Block a user