From c30116b306f5c9cef4322d2f2df5edb1951c7dc2 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 08:49:19 +0000 Subject: [PATCH] - Updated the following to their appropriate keyword: Putrid Leech, Pyrite Spellbomb, Ravenous Baloth, Sunbeam Spellbomb, Zuran Orb - Updated Ability_Activated to only accept abCost constructor - Updated the following cards to use the newer consructor: AEther Spellbomb, Lifespark Spellbomb, Necrogen Bomb, Bottle of Suleiman, Barl's Cage, Sakura-Tribe Elder, Tradewind Rider, Kargan Dragonlord, Singing Tree, Elephant Graveyard - Updated Sakura-Tribe to be able to activate even if there are no basics left in library. - Updated logic in canPlay() of Activated_Ability --- res/cardsfolder/putrid_leech.txt | 1 + res/cardsfolder/pyrite_spellbomb.txt | 1 + res/cardsfolder/ravenous_baloth.txt | 1 + res/cardsfolder/sunbeam_spellbomb.txt | 1 + res/cardsfolder/zuran_orb.txt | 3 +- src/forge/Ability_Activated.java | 28 ++-- src/forge/CardFactory.java | 183 +++++---------------- src/forge/CardFactory_Creatures.java | 220 ++++---------------------- src/forge/CardFactory_Lands.java | 20 +-- 9 files changed, 92 insertions(+), 366 deletions(-) diff --git a/res/cardsfolder/putrid_leech.txt b/res/cardsfolder/putrid_leech.txt index d6d0ed875a1..aabc70e4eef 100644 --- a/res/cardsfolder/putrid_leech.txt +++ b/res/cardsfolder/putrid_leech.txt @@ -3,6 +3,7 @@ ManaCost:B G Types:Creature Zombie Leech Text:no text PT:2/2 +K:abPump PayLife<2>:+2/+2 SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/putrid_leech.jpg End diff --git a/res/cardsfolder/pyrite_spellbomb.txt b/res/cardsfolder/pyrite_spellbomb.txt index 3ef6ff6310f..a1417bc698b 100644 --- a/res/cardsfolder/pyrite_spellbomb.txt +++ b/res/cardsfolder/pyrite_spellbomb.txt @@ -3,6 +3,7 @@ ManaCost:1 Types:Artifact Text:no text K:abDrawCards 1 Sac<1/CARDNAME>:1:Draw a card.:Pyrite Spellbomb - Controller draws a card. +K:abDamageTgtCP R Sac<1/CARDNAME>:2 SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/pyrite_spellbomb.jpg End diff --git a/res/cardsfolder/ravenous_baloth.txt b/res/cardsfolder/ravenous_baloth.txt index 83be6a37402..555a89af7e5 100644 --- a/res/cardsfolder/ravenous_baloth.txt +++ b/res/cardsfolder/ravenous_baloth.txt @@ -3,6 +3,7 @@ ManaCost:2 G G Types:Creature Beast Text:no text PT:4/4 +K:abGainLife Sac<1/BEAST>:4 SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/ravenous_baloth.jpg End diff --git a/res/cardsfolder/sunbeam_spellbomb.txt b/res/cardsfolder/sunbeam_spellbomb.txt index 25aac2caef7..9927b970b1d 100644 --- a/res/cardsfolder/sunbeam_spellbomb.txt +++ b/res/cardsfolder/sunbeam_spellbomb.txt @@ -3,6 +3,7 @@ ManaCost:1 Types:Artifact Text:no text K:abDrawCards 1 Sac<1/CARDNAME>:1:Draw a card.:Sunbeam Spellbomb - Controller draws a card. +K:abGainLife W Sac<1/CARDNAME>:5 SVar:Rarity:Common SVar:Picture:http://www.wizards.com/global/images/magic/general/sunbeam_spellbomb.jpg End diff --git a/res/cardsfolder/zuran_orb.txt b/res/cardsfolder/zuran_orb.txt index 96b952a15f3..7f7e7fe1209 100644 --- a/res/cardsfolder/zuran_orb.txt +++ b/res/cardsfolder/zuran_orb.txt @@ -1,7 +1,8 @@ Name:Zuran Orb ManaCost:0 Types:Artifact -Text:0: Sacrifice a land to gain 2 life. +Text:no text +K:abGainLife Sac<1/Land>:2 SVar:Rarity:Uncommon SVar:Picture:http://www.wizards.com/global/images/magic/general/zuran_orb.jpg End diff --git a/src/forge/Ability_Activated.java b/src/forge/Ability_Activated.java index 600475da587..f7de0446410 100644 --- a/src/forge/Ability_Activated.java +++ b/src/forge/Ability_Activated.java @@ -3,21 +3,8 @@ package forge; abstract public class Ability_Activated extends SpellAbility implements java.io.Serializable { - /** - * - */ private static final long serialVersionUID = 1L; - public Ability_Activated(Card sourceCard) { - this(sourceCard, ""); - } - - // todo: remove this constructor when everything uses the abCost system - public Ability_Activated(Card sourceCard, String manaCost) { - super(SpellAbility.Ability, sourceCard); - setManaCost(manaCost); - } - public Ability_Activated(Card sourceCard, Ability_Cost abCost, Target tgt) { super(SpellAbility.Ability, sourceCard); setManaCost(abCost.getMana()); @@ -29,13 +16,16 @@ abstract public class Ability_Activated extends SpellAbility implements java.io. @Override public boolean canPlay() { Card c = getSourceCard(); - if(c.isCreature() == true) { - CardList Silence = AllZoneUtil.getPlayerCardsInPlay(AllZone.GameAction.getOpponent(getSourceCard().getController())); - Silence = Silence.getName("Linvala, Keeper of Silence"); - return AllZone.GameAction.isCardInPlay(c) && !c.isFaceDown() && Silence.size() == 0; + if (c.isFaceDown() && isIntrinsic()) // Intrinsic abilities can't be activated by face down cards + return false; + + if(c.isCreature()) { + CardList Silence = AllZoneUtil.getPlayerCardsInPlay(AllZone.GameAction.getOpponent(getSourceCard().getController())); + Silence = Silence.getName("Linvala, Keeper of Silence"); + if (Silence.size() != 0) + return false; } - return AllZone.GameAction.isCardInPlay(c) && !c.isFaceDown(); + return AllZone.GameAction.isCardInPlay(c); //TODO: make sure you can't play the Computer's activated abilities - //TODO: should summoning sickness be checked here as well? } } diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index bae9cf367c6..a68d90773ec 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -3780,7 +3780,7 @@ public class CardFactory implements NewConstants { spDesc[0] = abCost.toString() + spDesc[0]; - final SpellAbility abDraw = new Ability_Activated(card, abCost.getMana()) { + final Ability_Activated abDraw = new Ability_Activated(card, abCost, abTgt) { private static final long serialVersionUID = -206739246009089196L; private int ncards; @@ -4198,7 +4198,7 @@ public class CardFactory implements NewConstants { } } - final SpellAbility abLoseLife = new Ability_Activated(card, abCost.getMana()) + final Ability_Activated abLoseLife = new Ability_Activated(card, abCost, abTgt) { private static final long serialVersionUID = -936369754466156082L; @@ -4487,7 +4487,7 @@ public class CardFactory implements NewConstants { stDesc[0] = cardName + " - you gain life"; } } - final SpellAbility abGainLife = new Ability_Activated(card, abCost.getMana()) + final Ability_Activated abGainLife = new Ability_Activated(card, abCost, abTgt) { private static final long serialVersionUID = -936369754466156082L; @@ -7197,11 +7197,15 @@ public class CardFactory implements NewConstants { //*************** START *********** START ************************** else if(cardName.equals("AEther Spellbomb")) { - - final Ability ability = new Ability(card, "U") { - @Override + Ability_Cost abCost = new Ability_Cost("U Sac<1/CARDNAME>", cardName, true); + String[] valid = {"Creature"}; + Target abTgt = new Target("TgtV", "Target a creature to bounce", valid); + final Ability_Activated ability = new Ability_Activated(card, abCost, abTgt) { + private static final long serialVersionUID = 1L; + + @Override public boolean canPlay() { - return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); + return AllZone.GameAction.isCardInPlay(card); } @Override @@ -7226,23 +7230,24 @@ public class CardFactory implements NewConstants { if(!target[0].isToken()) AllZone.GameAction.moveTo(hand, target[0]); else AllZone.getZone(target[0]).remove(target[0]); } - AllZone.GameAction.sacrifice(getSourceCard()); }//resolve() };//SpellAbility ability.setDescription("U, Sacrifice AEther Spellbomb: Return target creature to its owner's hand."); card.addSpellAbility(ability); - ability.setBeforePayMana(CardFactoryUtil.input_targetCreature(ability)); }//*************** END ************ END ************************** //*************** START *********** START ************************** else if(cardName.equals("Lifespark Spellbomb")) { - final SpellAbility ability = new Ability_Activated(card, "G") { + Ability_Cost abCost = new Ability_Cost("G Sac<1/CARDNAME>", cardName, true); + String[] valid = {"Land"}; + Target abTgt = new Target("TgtV", "Target a land to animate", valid); + final Ability_Activated ability = new Ability_Activated(card, abCost, abTgt) { private static final long serialVersionUID = -5744842090293912606L; @Override public boolean canPlay() { - return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); + return AllZone.GameAction.isCardInPlay(card); } @Override @@ -7293,90 +7298,24 @@ public class CardFactory implements NewConstants { }; AllZone.EndOfTurn.addUntil(untilEOT); - AllZone.GameAction.sacrifice(getSourceCard()); }//resolve() };//SpellAbility card.addSpellAbility(ability); ability.setDescription("G, Sacrifice Lifespark Spellbomb: Target land becomes a 3/3 Creature until end of turn. It is still a land."); - ability.setBeforePayMana(CardFactoryUtil.input_targetType(ability, "Land")); }//*************** END ************ END ************************** - //*************** START *********** START ************************** - else if(cardName.equals("Pyrite Spellbomb")) { - - final SpellAbility ability = new Ability_Activated(card, "R") { - private static final long serialVersionUID = 1L; - - @Override - public boolean canPlay() { - return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); - } - - @Override - public boolean canPlayAI() { - Random r = new Random(); - if(r.nextFloat() <= Math.pow(.6667, card.getAbilityUsed())) return true; - else return false; - } - - @Override - public void chooseTargetAI() { - CardList list = CardFactoryUtil.AI_getHumanCreature(2, card, true); - list.shuffle(); - - if(list.isEmpty() || AllZone.Human_Life.getLife() < 5 + 2) setTargetPlayer(Constant.Player.Human); - else setTargetCard(list.get(0)); - }//chooseTargetAI - - @Override - public void resolve() { - if(getTargetCard() != null) { - if(AllZone.GameAction.isCardInPlay(getTargetCard()) - && CardFactoryUtil.canTarget(card, getTargetCard())) getTargetCard().addDamage(2, - card); - } else AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(2,card); - AllZone.GameAction.sacrifice(getSourceCard()); - }//resolve() - };//Ability_Activated - - ability.setBeforePayMana(CardFactoryUtil.input_targetCreaturePlayer(ability, true, false)); - ability.setDescription("R, Sacrifice Pyrite Spellbomb: Pyrite Spellbomb deals 2 damage to target creature or player."); - card.addSpellAbility(ability); - }//*************** END ************ END ************************** - - - //*************** START *********** START ************************** - else if(cardName.equals("Sunbeam Spellbomb")) { - final Ability ability = new Ability(card, "W") { - @Override - public boolean canPlay() { - return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); - } - - @Override - public boolean canPlayAI() { - return (AllZone.GameAction.getPlayerLife(Constant.Player.Computer).getLife() < 7); - } - - @Override - public void resolve() { - AllZone.GameAction.gainLife(card.getController(), 5); - AllZone.GameAction.sacrifice(getSourceCard()); - }//resolve() - };//SpellAbility - ability.setDescription("W, Sacrifice Sunbeam Spellbomb: You gain 5 life."); - ability.setStackDescription(card.getName() + " - " + card.getController() + " gains 5 life."); - card.addSpellAbility(ability); - } //*************** END ************ END ************************** - - //*************** START *********** START ************************** else if(cardName.equals("Necrogen Spellbomb")) { - final Ability ability = new Ability(card, "B") { - @Override + Ability_Cost abCost = new Ability_Cost("B Sac<1/CARDNAME>", cardName, true); + String[] valid = {"player"}; + Target abTgt = new Target("TgtV","Target player discards a card", valid); + final Ability_Activated ability = new Ability_Activated(card, abCost, abTgt) { + private static final long serialVersionUID = -5712428914792877529L; + + @Override public boolean canPlay() { - return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); + return AllZone.GameAction.isCardInPlay(card); } @Override @@ -7396,11 +7335,9 @@ public class CardFactory implements NewConstants { if(Constant.Player.Computer.equals(getTargetPlayer())) AllZone.GameAction.discardRandom(getTargetPlayer(), this); else AllZone.InputControl.setInput(CardFactoryUtil.input_discard(this)); - AllZone.GameAction.sacrifice(getSourceCard()); }//resolve() };//SpellAbility ability.setDescription("B, Sacrifice Necrogen Spellbomb: Target player discards a card."); - ability.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability)); card.addSpellAbility(ability); } //*************** END ************ END ************************** @@ -9440,7 +9377,8 @@ public class CardFactory implements NewConstants { * put a 5/5 colorless Djinn artifact creature token with flying * onto the battlefield. */ - final SpellAbility ability = new Ability_Activated(card, "1") { + Ability_Cost abCost = new Ability_Cost("1 Sac<1/CARDNAME>", cardName, true); + final SpellAbility ability = new Ability_Activated(card, abCost, null) { private static final long serialVersionUID = -5741302550353410000L; @Override @@ -9470,8 +9408,6 @@ public class CardFactory implements NewConstants { choice = choices[MyRandom.random.nextInt(2)]; } - AllZone.GameAction.sacrifice(card); - if( (flip == true && choice.equals("heads")) || (flip == false && choice.equals("tails"))) { JOptionPane.showMessageDialog(null, "Bottle of Suleiman - Win! - "+player+" puts a 5/5 Flying Djinn in play.", "Bottle of Suleiman", JOptionPane.PLAIN_MESSAGE); CardFactoryUtil.makeToken("Djinn", "C 5 5 Djinn", card, "", new String[] {"Creature", "Artifact", "Djinn"}, 5, 5, new String[] {"Flying"}); @@ -9484,55 +9420,11 @@ public class CardFactory implements NewConstants { };//SpellAbility card.addSpellAbility(ability); - ability.setDescription("1: Flip a coin. Win: Put 5/5 Djinn in play. Lose: Does 5 damage to you."); + ability.setDescription("1, Sacrifice Bottle of Suleiman: Flip a coin. Win: Put 5/5 Djinn in play. Lose: Does 5 damage to you."); ability.setStackDescription("Bottle of Suleiman - flip a coin"); }//*************** END ************ END ************************** - - //*************** START *********** START ************************** - else if(cardName.equals("Zuran Orb")) { - final SpellAbility ability = new Ability_Activated(card,"0") { - private static final long serialVersionUID = 6349074098650435648L; - public boolean canPlayAI() { - if( CardFactoryUtil.getLandsInPlay(Constant.Player.Computer).size() > 0 ) { - if( AllZone.GameAction.getPlayerLife(Constant.Player.Computer).getLife() < 5 ) { - return true; - } - else { - return false; - } - } - else return false; - } - public void chooseTargetAI() { - Card target = null; - target = CardFactoryUtil.getWorstLand(Constant.Player.Computer); - setTargetCard(target); - }//chooseTargetAI() - public void resolve() { - AllZone.GameAction.gainLife(card.getController(), 2); - AllZone.GameAction.sacrifice(getTargetCard()); - } - };//SpellAbility - - Input runtime = new Input() { - private static final long serialVersionUID = -64941510699003443L; - - public void showMessage() { - ability.setStackDescription(card +" - Sacrifice a land to gain 2 life."); - PlayerZone play = AllZone.getZone(Constant.Zone.Play,card.getController()); - CardList choice = new CardList(play.getCards()); - choice = choice.getType("Land"); - stopSetNext(CardFactoryUtil.input_sacrifice(ability,choice,"Select a land to sacrifice.")); - } - }; - - ability.setStackDescription("Zuran Orb - Gain 2 life."); - card.addSpellAbility(ability); - ability.setBeforePayMana(runtime); - }//*************** END ************ END ************************** - - + //*************** START *********** START ************************** else if(cardName.equals("Lodestone Bauble")) { /* 1, Tap, Sacrifice Lodestone Bauble: Put up to four target basic @@ -10495,7 +10387,14 @@ public class CardFactory implements NewConstants { //*************** START *********** START ************************** else if(cardName.equals("Barl's Cage")) { - final SpellAbility ability = new Ability_Activated(card, "3") { + Target target = new Target("TgtV"); + target.setVTSelection("Select target creature."); + final String Tgts[] = {"Creature"}; + target.setValidTgts(Tgts); + + final Ability_Cost cost = new Ability_Cost("3", card.getName(), true); + + final SpellAbility ability = new Ability_Activated(card, cost, target) { private static final long serialVersionUID = 8941566961041310961L; @Override @@ -10528,16 +10427,6 @@ public class CardFactory implements NewConstants { }//resolve() };//SpellAbility - Target target = new Target("TgtV"); - target.setVTSelection("Select target creature."); - final String Tgts[] = {"Creature"}; - target.setValidTgts(Tgts); - - ability.setTarget(target); - - final Ability_Cost cost = new Ability_Cost("3", card.getName(), true); - ability.setPayCosts(cost); - card.addSpellAbility(ability); }//*************** END ************ END ************************** diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index ecf6a0a6465..35371d42579 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -8141,29 +8141,31 @@ public class CardFactory_Creatures { //*************** START *********** START ************************** else if(cardName.equals("Sakura-Tribe Elder")) { + Ability_Cost abCost = new Ability_Cost("Sac<1/CARDNAME>", cardName, true); + //tap sacrifice - final SpellAbility ability = new Ability_Activated(card, "0") { + final SpellAbility ability = new Ability_Activated(card, abCost, null) { private static final long serialVersionUID = 1135117614484689768L; @Override public boolean canPlayAI() { //sacrifice Sakura-Tribe Elder if Human has any creatures - CardList list = new CardList(AllZone.Human_Play.getCards()); - list = list.getType("Creature"); - return list.size() != 0; + CardList creature = new CardList(AllZone.Human_Play.getCards()); + creature = creature.getType("Creature"); + PlayerZone library = AllZone.getZone(Constant.Zone.Library, card.getController()); + CardList basic = new CardList(library.getCards()); + basic = basic.getType("Basic"); + return creature.size() > 0 && basic.size() != 0; } @Override public void chooseTargetAI() { - AllZone.GameAction.sacrifice(card); + //AllZone.GameAction.sacrifice(card); } @Override public boolean canPlay() { - PlayerZone library = AllZone.getZone(Constant.Zone.Library, card.getController()); - CardList list = new CardList(library.getCards()); - list = list.getType("Basic"); - return list.size() > 0 && super.canPlay(); + return super.canPlay(); }//canPlay() @Override @@ -8222,26 +8224,8 @@ public class CardFactory_Creatures { AllZone.GameAction.shuffle(card.getController()); }//resolve() };//SpellAbility - - Input runtime = new Input() { - private static final long serialVersionUID = 1959709104655340395L; - boolean once = true; - - @Override - public void showMessage() { - //this is necessary in order not to have a StackOverflowException - //because this updates a card, it creates a circular loop of observers - if(once) { - once = false; - AllZone.GameAction.sacrifice(card); - AllZone.Stack.add(ability); - - stop(); - } - }//showMessage() - }; + card.addSpellAbility(ability); - ability.setBeforePayMana(runtime); ability.setDescription("Sacrifice Sakura-Tribe Elder: Search your library for a basic land card, put that card into play tapped, then shuffle your library."); ability.setStackDescription("Search your library for a basic land card, put that card into play tapped, then shuffle your library."); }//*************** END ************ END ************************** @@ -13528,7 +13512,14 @@ public class CardFactory_Creatures { //*************** START *********** START ************************** else if(cardName.equals("Tradewind Rider")) { - final SpellAbility a1 = new Ability_Activated(card, "0") { + Target target = new Target("TgtV"); + target.setVTSelection("Select target permanent to return to owner's hand."); + final String Tgts[] = {"Permanent"}; + target.setValidTgts(Tgts); + + final Ability_Cost cost = new Ability_Cost("T tapXType<2/Creature>", card.getName(), true); + + final SpellAbility bounce = new Ability_Activated(card, cost, target) { private static final long serialVersionUID = 3438865371487994984L; @Override @@ -13621,44 +13612,8 @@ public class CardFactory_Creatures { };//a1 - Target target = new Target("TgtV"); - target.setVTSelection("Select target permanent to return to owner's hand."); - final String Tgts[] = {"Permanent"}; - target.setValidTgts(Tgts); - - a1.setTarget(target); - - final Ability_Cost cost = new Ability_Cost("T tapXType<2/Creature>", card.getName(), true); - a1.setPayCosts(cost); - - //card.clearSpellAbility(); - card.addSpellAbility(a1); - a1.setDescription("tap, Tap two untapped creatures you control: Return target permanent to its owner's hand."); - - /* - Input runtime = new Input() { - - - private static final long serialVersionUID = 5673846456179861542L; - - @Override - public void showMessage() { - CardList all = new CardList(); - all.addAll(AllZone.Human_Play.getCards()); - all.addAll(AllZone.Computer_Play.getCards()); - all = all.filter(new CardListFilter() { - public boolean addCard(Card c) { - return (c.isPermanent()) && CardFactoryUtil.canTarget(card, c); - } - }); - - stopSetNext(CardFactoryUtil.input_targetSpecific(a1, all, "Return target permanent", true, - false)); - } - }; - a1.setBeforePayMana(runtime); - - */ + bounce.setDescription("tap, Tap two untapped creatures you control: Return target permanent to its owner's hand."); + card.addSpellAbility(bounce); }//*************** END ************ END ************************** @@ -17391,54 +17346,6 @@ public class CardFactory_Creatures { //**************END****************END*********************** - //****************************START***************** - else if(cardName.equals("Putrid Leech")) { - final SpellAbility ability = new Ability_Activated(card, "0") - { - private static final long serialVersionUID = 2092968545127233062L; - - public void resolve() - { - //TODO: make this part of the cost - AllZone.GameAction.getPlayerLife(card.getController()).subtractLife(2,card); - final Command EOT = new Command() { - private static final long serialVersionUID = -8840812331316327448L; - - public void execute() { - if(AllZone.GameAction.isCardInPlay(card)) { - card.addTempAttackBoost(-2); - card.addTempDefenseBoost(-2); - } - } - }; - card.addTempAttackBoost(2); - card.addTempDefenseBoost(2); - AllZone.EndOfTurn.addUntil(EOT); - card.setAbilityUsed(card.getAbilityUsed() + 1); - } - - - public boolean canPlay() { - return super.canPlay() && (CardFactoryUtil.canUseAbility(card)); - } - - - public boolean canPlayAI() - { - Combat c = ComputerUtil.getAttackers(); - CardList list = new CardList(c.getAttackers()); - - //could this creature attack?, if attacks, do not use ability - return AllZone.Computer_Life.getLife() > 5 && list.contains(card) && AllZone.Phase.getPhase().equals(Constant.Phase.Main1); - } - }; - ability.setDescription("Pay 2 life: Putrid Leech gets +2/+2 until end of turn. Activate this ability only once each turn."); - ability.setStackDescription(card + " - gets +2/+2 until end of turn."); - card.addSpellAbility(ability); - } - //**************END****************END*********************** - - //*************** START *********** START ************************** else if(cardName.equals("Borderland Ranger") || cardName.equals("Sylvan Ranger") || cardName.equals("Civic Wayfinder") || cardName.equals("Pilgrim's Eye")) { @@ -18699,7 +18606,9 @@ public class CardFactory_Creatures { //*************** START *********** START ************************** else if (cardName.equals("Kargan Dragonlord")) { - final SpellAbility ability = new Ability_Activated(card, "R") { + Ability_Cost abCost = new Ability_Cost("R", cardName, true); + + final SpellAbility ability = new Ability_Activated(card, abCost, null) { private static final long serialVersionUID = -2252408767635375616L; @Override @@ -19337,66 +19246,6 @@ public class CardFactory_Creatures { }//*************** END ************ END ************************** - //*************** START *********** START ************************** - else if(cardName.equals("Ravenous Baloth")) { - final SpellAbility ability = new Ability_Activated(card,"0") { - - private static final long serialVersionUID = 4242089395799673253L; - public boolean canPlayAI() { - CardList creats = AllZoneUtil.getCreaturesInPlay(Constant.Player.Computer); - creats = creats.filter(new CardListFilter() - { - public boolean addCard(Card c) - { - return c.getType().contains("Beast") || c.getKeyword().contains("Changeling") - && CardFactoryUtil.canTarget(card, c); - } - }); - if( creats.size() > 0) { - if (AllZone.GameAction.getPlayerLife(Constant.Player.Computer).getLife() < 5 ) { - CardListUtil.sortAttackLowFirst(creats); - setTargetCard(creats.get(0)); - return true; - } - else { - return false; - } - } - else return false; - } - - public void resolve() { - AllZone.GameAction.gainLife(card.getController(), 4); - AllZone.GameAction.sacrifice(getTargetCard()); - } - };//SpellAbility - - Input runtime = new Input() { - - private static final long serialVersionUID = 6566691243159414430L; - - public void showMessage() { - //ability.setStackDescription(card +" - Sacrifice a land to gain 2 life."); - PlayerZone play = AllZone.getZone(Constant.Zone.Play, card.getController()); - CardList choice = new CardList(play.getCards()); - choice = choice.filter(new CardListFilter() - { - public boolean addCard(Card c) - { - return c.getType().contains("Beast") || c.getKeyword().contains("Changeling") - && CardFactoryUtil.canTarget(card, c); - } - }); - stopSetNext(CardFactoryUtil.input_sacrifice(ability,choice,"Select a Beast to sacrifice.")); - } - }; - ability.setDescription("Sacrifice a Beast: You gain 4 life."); - ability.setStackDescription(card + " - You gain 4 life."); - card.addSpellAbility(ability); - ability.setBeforePayMana(runtime); - }//*************** END ************ END ************************** - - //*************** START *********** START ************************** else if(cardName.equals("Myr Galvanizer")) { @@ -19525,7 +19374,14 @@ public class CardFactory_Creatures { //*************** START *********** START ************************** else if(cardName.equals("Singing Tree")) { - final SpellAbility ability = new Ability_Activated(card, "0") { + Target target = new Target("TgtV"); + target.setVTSelection("Select target attacking creature."); + final String Tgts[] = {"Creature.attacking"}; + target.setValidTgts(Tgts); + + final Ability_Cost cost = new Ability_Cost("T", card.getName(), true); + + final SpellAbility ability = new Ability_Activated(card, cost, target) { private static final long serialVersionUID = 3750045284339229395L; @Override @@ -19581,16 +19437,6 @@ public class CardFactory_Creatures { }//resolve() };//SpellAbility - Target target = new Target("TgtV"); - target.setVTSelection("Select target attacking creature."); - final String Tgts[] = {"Creature.attacking"}; - target.setValidTgts(Tgts); - - ability.setTarget(target); - - final Ability_Cost cost = new Ability_Cost("T", card.getName(), true); - ability.setPayCosts(cost); - card.addSpellAbility(ability); }//*************** END ************ END ************************** diff --git a/src/forge/CardFactory_Lands.java b/src/forge/CardFactory_Lands.java index 4abc2a749d6..0d72718e6aa 100644 --- a/src/forge/CardFactory_Lands.java +++ b/src/forge/CardFactory_Lands.java @@ -3731,6 +3731,13 @@ class CardFactory_Lands { //*************** START ********** START ************************* else if(cardName.equals("Elephant Graveyard")) { + Target target = new Target("TgtV"); + target.setVTSelection("Select target Elephant."); + final String Tgts[] = {"Creature.Elephant"}; + target.setValidTgts(Tgts); + + final Ability_Cost cost = new Ability_Cost("T", card.getName(), true); + final Card[] tgt = new Card[1]; final Command untilEOT = new Command() { private static final long serialVersionUID = -5392534004045270599L; @@ -3740,7 +3747,7 @@ class CardFactory_Lands { } }; - final SpellAbility ability = new Ability_Activated(card, "0") { + final SpellAbility ability = new Ability_Activated(card, cost, target) { private static final long serialVersionUID = -3783236452506062253L; @Override @@ -3764,17 +3771,6 @@ class CardFactory_Lands { }; ability.setDescription("tap: Regenerate target Elephant."); - - Target target = new Target("TgtV"); - target.setVTSelection("Select target Elephant."); - final String Tgts[] = {"Creature.Elephant"}; - target.setValidTgts(Tgts); - - ability.setTarget(target); - - final Ability_Cost cost = new Ability_Cost("T", card.getName(), true); - ability.setPayCosts(cost); - card.addSpellAbility(ability); }//*************** END ************ END **************************