- 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
This commit is contained in:
jendave
2011-08-06 08:49:19 +00:00
parent 106d9ca7ac
commit c30116b306
9 changed files with 92 additions and 366 deletions

View File

@@ -3,6 +3,7 @@ ManaCost:B G
Types:Creature Zombie Leech Types:Creature Zombie Leech
Text:no text Text:no text
PT:2/2 PT:2/2
K:abPump PayLife<2>:+2/+2
SVar:Rarity:Common SVar:Rarity:Common
SVar:Picture:http://www.wizards.com/global/images/magic/general/putrid_leech.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/putrid_leech.jpg
End End

View File

@@ -3,6 +3,7 @@ ManaCost:1
Types:Artifact Types:Artifact
Text:no text Text:no text
K:abDrawCards 1 Sac<1/CARDNAME>:1:Draw a card.:Pyrite Spellbomb - Controller draws a card. 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:Rarity:Common
SVar:Picture:http://www.wizards.com/global/images/magic/general/pyrite_spellbomb.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/pyrite_spellbomb.jpg
End End

View File

@@ -3,6 +3,7 @@ ManaCost:2 G G
Types:Creature Beast Types:Creature Beast
Text:no text Text:no text
PT:4/4 PT:4/4
K:abGainLife Sac<1/BEAST>:4
SVar:Rarity:Rare SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/ravenous_baloth.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/ravenous_baloth.jpg
End End

View File

@@ -3,6 +3,7 @@ ManaCost:1
Types:Artifact Types:Artifact
Text:no text Text:no text
K:abDrawCards 1 Sac<1/CARDNAME>:1:Draw a card.:Sunbeam Spellbomb - Controller draws a card. 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:Rarity:Common
SVar:Picture:http://www.wizards.com/global/images/magic/general/sunbeam_spellbomb.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/sunbeam_spellbomb.jpg
End End

View File

@@ -1,7 +1,8 @@
Name:Zuran Orb Name:Zuran Orb
ManaCost:0 ManaCost:0
Types:Artifact Types:Artifact
Text:0: Sacrifice a land to gain 2 life. Text:no text
K:abGainLife Sac<1/Land>:2
SVar:Rarity:Uncommon SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/zuran_orb.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/zuran_orb.jpg
End End

View File

@@ -3,21 +3,8 @@ package forge;
abstract public class Ability_Activated extends SpellAbility implements java.io.Serializable { abstract public class Ability_Activated extends SpellAbility implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L; 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) { public Ability_Activated(Card sourceCard, Ability_Cost abCost, Target tgt) {
super(SpellAbility.Ability, sourceCard); super(SpellAbility.Ability, sourceCard);
setManaCost(abCost.getMana()); setManaCost(abCost.getMana());
@@ -29,13 +16,16 @@ abstract public class Ability_Activated extends SpellAbility implements java.io.
@Override @Override
public boolean canPlay() { public boolean canPlay() {
Card c = getSourceCard(); Card c = getSourceCard();
if(c.isCreature() == true) { if (c.isFaceDown() && isIntrinsic()) // Intrinsic abilities can't be activated by face down cards
CardList Silence = AllZoneUtil.getPlayerCardsInPlay(AllZone.GameAction.getOpponent(getSourceCard().getController())); return false;
Silence = Silence.getName("Linvala, Keeper of Silence");
return AllZone.GameAction.isCardInPlay(c) && !c.isFaceDown() && Silence.size() == 0; 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: make sure you can't play the Computer's activated abilities
//TODO: should summoning sickness be checked here as well?
} }
} }

View File

@@ -3780,7 +3780,7 @@ public class CardFactory implements NewConstants {
spDesc[0] = abCost.toString() + spDesc[0]; 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 static final long serialVersionUID = -206739246009089196L;
private int ncards; 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; private static final long serialVersionUID = -936369754466156082L;
@@ -4487,7 +4487,7 @@ public class CardFactory implements NewConstants {
stDesc[0] = cardName + " - you gain life"; 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; private static final long serialVersionUID = -936369754466156082L;
@@ -7197,11 +7197,15 @@ public class CardFactory implements NewConstants {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("AEther Spellbomb")) { else if(cardName.equals("AEther Spellbomb")) {
Ability_Cost abCost = new Ability_Cost("U Sac<1/CARDNAME>", cardName, true);
final Ability ability = new Ability(card, "U") { String[] valid = {"Creature"};
@Override 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() { public boolean canPlay() {
return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); return AllZone.GameAction.isCardInPlay(card);
} }
@Override @Override
@@ -7226,23 +7230,24 @@ public class CardFactory implements NewConstants {
if(!target[0].isToken()) AllZone.GameAction.moveTo(hand, target[0]); if(!target[0].isToken()) AllZone.GameAction.moveTo(hand, target[0]);
else AllZone.getZone(target[0]).remove(target[0]); else AllZone.getZone(target[0]).remove(target[0]);
} }
AllZone.GameAction.sacrifice(getSourceCard());
}//resolve() }//resolve()
};//SpellAbility };//SpellAbility
ability.setDescription("U, Sacrifice AEther Spellbomb: Return target creature to its owner's hand."); ability.setDescription("U, Sacrifice AEther Spellbomb: Return target creature to its owner's hand.");
card.addSpellAbility(ability); card.addSpellAbility(ability);
ability.setBeforePayMana(CardFactoryUtil.input_targetCreature(ability));
}//*************** END ************ END ************************** }//*************** END ************ END **************************
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Lifespark Spellbomb")) { 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; private static final long serialVersionUID = -5744842090293912606L;
@Override @Override
public boolean canPlay() { public boolean canPlay() {
return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); return AllZone.GameAction.isCardInPlay(card);
} }
@Override @Override
@@ -7293,90 +7298,24 @@ public class CardFactory implements NewConstants {
}; };
AllZone.EndOfTurn.addUntil(untilEOT); AllZone.EndOfTurn.addUntil(untilEOT);
AllZone.GameAction.sacrifice(getSourceCard());
}//resolve() }//resolve()
};//SpellAbility };//SpellAbility
card.addSpellAbility(ability); 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.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 ************************** }//*************** 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 ************************** //*************** START *********** START **************************
else if(cardName.equals("Necrogen Spellbomb")) { else if(cardName.equals("Necrogen Spellbomb")) {
final Ability ability = new Ability(card, "B") { Ability_Cost abCost = new Ability_Cost("B Sac<1/CARDNAME>", cardName, true);
@Override 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() { public boolean canPlay() {
return AllZone.GameAction.isCardInPlay(card) && !AllZone.Stack.getSourceCards().contains(card); return AllZone.GameAction.isCardInPlay(card);
} }
@Override @Override
@@ -7396,11 +7335,9 @@ public class CardFactory implements NewConstants {
if(Constant.Player.Computer.equals(getTargetPlayer())) AllZone.GameAction.discardRandom(getTargetPlayer(), this); if(Constant.Player.Computer.equals(getTargetPlayer())) AllZone.GameAction.discardRandom(getTargetPlayer(), this);
else AllZone.InputControl.setInput(CardFactoryUtil.input_discard(this)); else AllZone.InputControl.setInput(CardFactoryUtil.input_discard(this));
AllZone.GameAction.sacrifice(getSourceCard());
}//resolve() }//resolve()
};//SpellAbility };//SpellAbility
ability.setDescription("B, Sacrifice Necrogen Spellbomb: Target player discards a card."); ability.setDescription("B, Sacrifice Necrogen Spellbomb: Target player discards a card.");
ability.setBeforePayMana(CardFactoryUtil.input_targetPlayer(ability));
card.addSpellAbility(ability); card.addSpellAbility(ability);
} //*************** END ************ END ************************** } //*************** END ************ END **************************
@@ -9440,7 +9377,8 @@ public class CardFactory implements NewConstants {
* put a 5/5 colorless Djinn artifact creature token with flying * put a 5/5 colorless Djinn artifact creature token with flying
* onto the battlefield. * 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; private static final long serialVersionUID = -5741302550353410000L;
@Override @Override
@@ -9470,8 +9408,6 @@ public class CardFactory implements NewConstants {
choice = choices[MyRandom.random.nextInt(2)]; choice = choices[MyRandom.random.nextInt(2)];
} }
AllZone.GameAction.sacrifice(card);
if( (flip == true && choice.equals("heads")) || (flip == false && choice.equals("tails"))) { 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); 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"}); 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 };//SpellAbility
card.addSpellAbility(ability); 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"); ability.setStackDescription("Bottle of Suleiman - flip a coin");
}//*************** END ************ END ************************** }//*************** 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 ************************** //*************** START *********** START **************************
else if(cardName.equals("Lodestone Bauble")) { else if(cardName.equals("Lodestone Bauble")) {
/* 1, Tap, Sacrifice Lodestone Bauble: Put up to four target basic /* 1, Tap, Sacrifice Lodestone Bauble: Put up to four target basic
@@ -10495,7 +10387,14 @@ public class CardFactory implements NewConstants {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Barl's Cage")) { 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; private static final long serialVersionUID = 8941566961041310961L;
@Override @Override
@@ -10528,16 +10427,6 @@ public class CardFactory implements NewConstants {
}//resolve() }//resolve()
};//SpellAbility };//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); card.addSpellAbility(ability);
}//*************** END ************ END ************************** }//*************** END ************ END **************************

View File

@@ -8141,29 +8141,31 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Sakura-Tribe Elder")) { else if(cardName.equals("Sakura-Tribe Elder")) {
Ability_Cost abCost = new Ability_Cost("Sac<1/CARDNAME>", cardName, true);
//tap sacrifice //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; private static final long serialVersionUID = 1135117614484689768L;
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
//sacrifice Sakura-Tribe Elder if Human has any creatures //sacrifice Sakura-Tribe Elder if Human has any creatures
CardList list = new CardList(AllZone.Human_Play.getCards()); CardList creature = new CardList(AllZone.Human_Play.getCards());
list = list.getType("Creature"); creature = creature.getType("Creature");
return list.size() != 0; 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 @Override
public void chooseTargetAI() { public void chooseTargetAI() {
AllZone.GameAction.sacrifice(card); //AllZone.GameAction.sacrifice(card);
} }
@Override @Override
public boolean canPlay() { public boolean canPlay() {
PlayerZone library = AllZone.getZone(Constant.Zone.Library, card.getController()); return super.canPlay();
CardList list = new CardList(library.getCards());
list = list.getType("Basic");
return list.size() > 0 && super.canPlay();
}//canPlay() }//canPlay()
@Override @Override
@@ -8222,26 +8224,8 @@ public class CardFactory_Creatures {
AllZone.GameAction.shuffle(card.getController()); AllZone.GameAction.shuffle(card.getController());
}//resolve() }//resolve()
};//SpellAbility };//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); 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.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."); ability.setStackDescription("Search your library for a basic land card, put that card into play tapped, then shuffle your library.");
}//*************** END ************ END ************************** }//*************** END ************ END **************************
@@ -13528,7 +13512,14 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Tradewind Rider")) { 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; private static final long serialVersionUID = 3438865371487994984L;
@Override @Override
@@ -13621,44 +13612,8 @@ public class CardFactory_Creatures {
};//a1 };//a1
Target target = new Target("TgtV"); bounce.setDescription("tap, Tap two untapped creatures you control: Return target permanent to its owner's hand.");
target.setVTSelection("Select target permanent to return to owner's hand."); card.addSpellAbility(bounce);
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);
*/
}//*************** END ************ END ************************** }//*************** END ************ END **************************
@@ -17391,54 +17346,6 @@ public class CardFactory_Creatures {
//**************END****************END*********************** //**************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 ************************** //*************** START *********** START **************************
else if(cardName.equals("Borderland Ranger") || cardName.equals("Sylvan Ranger") else if(cardName.equals("Borderland Ranger") || cardName.equals("Sylvan Ranger")
|| cardName.equals("Civic Wayfinder") || cardName.equals("Pilgrim's Eye")) { || cardName.equals("Civic Wayfinder") || cardName.equals("Pilgrim's Eye")) {
@@ -18699,7 +18606,9 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if (cardName.equals("Kargan Dragonlord")) 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; private static final long serialVersionUID = -2252408767635375616L;
@Override @Override
@@ -19337,66 +19246,6 @@ public class CardFactory_Creatures {
}//*************** END ************ END ************************** }//*************** 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 ************************** //*************** START *********** START **************************
else if(cardName.equals("Myr Galvanizer")) else if(cardName.equals("Myr Galvanizer"))
{ {
@@ -19525,7 +19374,14 @@ public class CardFactory_Creatures {
//*************** START *********** START ************************** //*************** START *********** START **************************
else if(cardName.equals("Singing Tree")) { 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; private static final long serialVersionUID = 3750045284339229395L;
@Override @Override
@@ -19581,16 +19437,6 @@ public class CardFactory_Creatures {
}//resolve() }//resolve()
};//SpellAbility };//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); card.addSpellAbility(ability);
}//*************** END ************ END ************************** }//*************** END ************ END **************************

View File

@@ -3731,6 +3731,13 @@ class CardFactory_Lands {
//*************** START ********** START ************************* //*************** START ********** START *************************
else if(cardName.equals("Elephant Graveyard")) { 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 Card[] tgt = new Card[1];
final Command untilEOT = new Command() { final Command untilEOT = new Command() {
private static final long serialVersionUID = -5392534004045270599L; 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; private static final long serialVersionUID = -3783236452506062253L;
@Override @Override
@@ -3764,17 +3771,6 @@ class CardFactory_Lands {
}; };
ability.setDescription("tap: Regenerate target Elephant."); 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); card.addSpellAbility(ability);
}//*************** END ************ END ************************** }//*************** END ************ END **************************