mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- 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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")) {
|
||||
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;
|
||||
|
||||
final Ability ability = new Ability(card, "U") {
|
||||
@Override
|
||||
@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 **************************
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -8223,25 +8225,7 @@ public class CardFactory_Creatures {
|
||||
}//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 **************************
|
||||
|
||||
|
||||
@@ -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 **************************
|
||||
|
||||
|
||||
Reference in New Issue
Block a user