diff --git a/res/cardsfolder/serpent_warrior.txt b/res/cardsfolder/serpent_warrior.txt index 4daeb6f6370..8f39beadd96 100644 --- a/res/cardsfolder/serpent_warrior.txt +++ b/res/cardsfolder/serpent_warrior.txt @@ -3,6 +3,7 @@ ManaCost:2 B Types:Creature Snake Warrior Text:When CARDNAME enters the battlefield, you lose 3 life. PT:3/3 +K:etbLoseLife:3 SVar:Rarity:Common SVar:Picture:http://resources.wizards.com/magic/cards/9ed/en-us/card83364.jpg SetInfo:8ED|Common|http://magiccards.info/scans/en/8e/161.jpg diff --git a/src/forge/Card.java b/src/forge/Card.java index 107d3b3adb7..c472de9dfc0 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -1112,6 +1112,13 @@ public class Card extends MyObservable { manaAbility.clear(); } + public Spell_Permanent getSpellPermanent() { + for(SpellAbility sa:spellAbility) { + if(sa instanceof Spell_Permanent) return (Spell_Permanent)sa; + } + return null; + } + public void clearSpellKeepManaAbility() { spellAbility.clear(); } diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index f0346963975..0f6e8b67c8e 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -2938,6 +2938,42 @@ public class CardFactory implements NewConstants { card.addComesIntoPlayCommand(etbGainLife); } // etbGainLife + // Generic enters the battlefield lose life + // there is also code in Spell_Permanent canPlayAI to handle that part + if (hasKeyword(card, "etbLoseLife") != -1) { + int n = hasKeyword(card, "etbLoseLife"); + + String parse = card.getKeyword().get(n).toString(); + card.removeIntrinsicKeyword(parse); + + String k[] = parse.split(":"); + + final int num = Integer.parseInt(k[1]); + card.getSpellPermanent().setLoseLifeAmount(num); + + // performs the gain + final SpellAbility etbLoseLifeAbility = new Ability(card, "0") { + @Override + public void resolve() { + card.getController().loseLife(num, card); + } + }; + + // when the card enters the battlefield + Command etbLoseLife = new Command() { + private static final long serialVersionUID = -6797619430597211329L; + + public void execute() { + StringBuilder sb = new StringBuilder(); + sb.append(card.getController()).append(" loses "+num+" life"); + etbLoseLifeAbility.setStackDescription(sb.toString()); + + AllZone.Stack.add(etbLoseLifeAbility); + } + }; + card.addComesIntoPlayCommand(etbLoseLife); + } // etbLoseLife + // Generic destroy all card /* Cards converted to AF_DestroyAll diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index 289d821ccc6..f0e63ac067c 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -1551,7 +1551,7 @@ public class CardFactory_Creatures { card.addComesIntoPlayCommand(intoPlay); }//*************** END ************ END ************************** - + /* //*************** START *********** START ************************** else if(cardName.equals("Serpent Warrior")) { SpellAbility summoningSpell = new Spell_Permanent(card) { @@ -1586,7 +1586,7 @@ public class CardFactory_Creatures { }; card.addComesIntoPlayCommand(intoPlay); }//*************** END ************ END ************************** - + */ //*************** START *********** START ************************** else if(cardName.equals("Eviscerator")) { diff --git a/src/forge/Spell_Permanent.java b/src/forge/Spell_Permanent.java index 8f6d37d6b6c..9fe0d6201ca 100644 --- a/src/forge/Spell_Permanent.java +++ b/src/forge/Spell_Permanent.java @@ -7,6 +7,11 @@ public class Spell_Permanent extends Spell { private boolean willChampion = false; private String championType = null; + private int loseLifeAmount; + + public void setLoseLifeAmount(int a) { + loseLifeAmount = a; + } ///////////////////// /////// @@ -186,6 +191,10 @@ public class Spell_Permanent extends Spell { if( (o == null) || !(cl.size() > 0) || !AllZone.getZone(getSourceCard()).is(Constant.Zone.Hand)) return false; } + + if(!(AllZone.ComputerPlayer.getLife() > (loseLifeAmount+3))) { + return false; + } return super.canPlayAI(); }//canPlayAI()