From 9dfb5cbcaaee07d31690047c2105e72d93f77f0c Mon Sep 17 00:00:00 2001 From: beholder Date: Tue, 27 Sep 2011 10:57:12 +0200 Subject: [PATCH] added MagicPermanentState.ExileAtEndOfCombat. added Angel token. added Geist of Saint Traft and Gallows Warden --- resources/magic/data/cards2.txt | 28 ++++++++++++ resources/magic/data/images.txt | 1 + src/magic/card/Gallows_Warden.java | 23 ++++++++++ src/magic/card/Geist_of_Saint_Traft.java | 45 +++++++++++++++++++ src/magic/data/TokenCardDefinitions.java | 15 +++++++ src/magic/model/MagicPermanentState.java | 1 + .../model/phase/MagicEndOfCombatPhase.java | 22 ++++++--- 7 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 src/magic/card/Gallows_Warden.java create mode 100644 src/magic/card/Geist_of_Saint_Traft.java diff --git a/resources/magic/data/cards2.txt b/resources/magic/data/cards2.txt index feccadd576..88f25e0462 100644 --- a/resources/magic/data/cards2.txt +++ b/resources/magic/data/cards2.txt @@ -3981,6 +3981,7 @@ converted=5 cost={4}{U} pt=3/3 ability=flying +static=player timing=fmain >Bloodcrazed Neonate @@ -4298,6 +4299,33 @@ converted=3 cost={2}{U} timing=counter +>Gallows Warden +image=http://magiccards.info/scans/en/isd/16.jpg +value=4 +rarity=U +type=Creature +subtype=Spirit +color=w +converted=5 +cost={4}{W} +pt=3/3 +ability=flying +static=player +timing=fmain + +>Geist of Saint Traft +image=http://magiccards.info/scans/en/isd/213.jpg +value=3 +rarity=M +type=Creature +subtype=Spirit,Cleric +color=wu +converted=3 +cost={1}{W}{U} +pt=2/2 +ability=hexproof +timing=main + >Morkrut Banshee image=http://magiccards.info/scans/en/isd/110.jpg value=4 diff --git a/resources/magic/data/images.txt b/resources/magic/data/images.txt index b734c861ad..329395fd1b 100644 --- a/resources/magic/data/images.txt +++ b/resources/magic/data/images.txt @@ -63,6 +63,7 @@ nine.gif;http://forums.mtgsalvation.com/images/smilies/mana9.gif x.gif;http://forums.mtgsalvation.com/images/smilies/manax.gif tapped.gif;http://forums.mtgsalvation.com/images/smilies/tap.gif >tokens +Angel4.jpg;http://magiccards.info/extras/token/conflux/angel.jpg Ape.jpg;http://forums.mtgsalvation.com/attachment.php?attachmentid=42431&stc=1&d=1173951187 Bat.jpg;http://img.photobucket.com/albums/v237/Xand0r/bat-token_guildpact_300.jpg Goblin1.jpg;http://img.photobucket.com/albums/v237/Xand0r/goblin-token_ravnica_300.jpg diff --git a/src/magic/card/Gallows_Warden.java b/src/magic/card/Gallows_Warden.java new file mode 100644 index 0000000000..59161749e6 --- /dev/null +++ b/src/magic/card/Gallows_Warden.java @@ -0,0 +1,23 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.target.MagicTargetFilter; +import magic.model.mstatic.MagicLayer; +import magic.model.mstatic.MagicStatic; + +public class Gallows_Warden { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_SPIRIT_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(0,1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; +} diff --git a/src/magic/card/Geist_of_Saint_Traft.java b/src/magic/card/Geist_of_Saint_Traft.java new file mode 100644 index 0000000000..18d6ffc523 --- /dev/null +++ b/src/magic/card/Geist_of_Saint_Traft.java @@ -0,0 +1,45 @@ +package magic.card; + +import magic.data.TokenCardDefinitions; +import magic.model.MagicCard; +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPermanentState; +import magic.model.MagicPlayer; +import magic.model.action.MagicChangeStateAction; +import magic.model.action.MagicPlayCardAction; +import magic.model.event.MagicEvent; +import magic.model.trigger.MagicWhenAttacksTrigger; + + +public class Geist_of_Saint_Traft { + public static final MagicWhenAttacksTrigger T = new MagicWhenAttacksTrigger() { + @Override + public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent creature) { + final MagicPlayer player = permanent.getController(); + return (permanent == creature) ? + new MagicEvent( + permanent, + player, + new Object[]{player}, + this, + player + " puts a 4/4 white Angel creature token with " + + "flying onto the battlefield tapped and attacking. " + + "Exile that token at end of combat."): + MagicEvent.NONE; + } + @Override + public void executeEvent( + final MagicGame game, + final MagicEvent event, + final Object data[], + final Object[] choiceResults) { + final MagicPlayer player = (MagicPlayer)data[0]; + final MagicCard card = MagicCard.createTokenCard(TokenCardDefinitions.ANGEL4_TOKEN_CARD,player); + final MagicPlayCardAction action = new MagicPlayCardAction(card,player,MagicPlayCardAction.TAPPED_ATTACKING); + //game.doAction(new MagicPlayCardAction(card,player,MagicPlayCardAction.TAPPED_ATTACKING)); + game.doAction(action); + game.doAction(new MagicChangeStateAction(action.getPermanent(),MagicPermanentState.ExileAtEndOfCombat,true)); + } + }; +} diff --git a/src/magic/data/TokenCardDefinitions.java b/src/magic/data/TokenCardDefinitions.java index 68c6af54cc..fd9e8b8e77 100644 --- a/src/magic/data/TokenCardDefinitions.java +++ b/src/magic/data/TokenCardDefinitions.java @@ -13,6 +13,20 @@ import java.util.List; public class TokenCardDefinitions { + public static final MagicCardDefinition ANGEL4_TOKEN_CARD=new MagicCardDefinition("Angel","Angel4") { + public void initialize() { + setToken(); + setValue(4); + addType(MagicType.Creature); + setSubTypes(new String[]{"Angel"}); + setCost(MagicManaCost.ZERO); + setColor(MagicColor.White); + setColoredType(); + setPowerToughness(4,4); + setAbility(MagicAbility.Flying); + } + }; + public static final MagicCardDefinition DRAGON4_TOKEN_CARD=new MagicCardDefinition("Dragon","Dragon4") { public void initialize() { setToken(); @@ -435,6 +449,7 @@ public class TokenCardDefinitions { }; public static final List TOKEN_CARDS=Arrays.asList( + ANGEL4_TOKEN_CARD, DRAGON4_TOKEN_CARD, DRAGON5_TOKEN_CARD, WORM_TOKEN_CARD, diff --git a/src/magic/model/MagicPermanentState.java b/src/magic/model/MagicPermanentState.java index e1f7e02342..82f8b6d96c 100644 --- a/src/magic/model/MagicPermanentState.java +++ b/src/magic/model/MagicPermanentState.java @@ -19,6 +19,7 @@ public enum MagicPermanentState { Kicked("kicked",""), Destroyed("destroyed",""), ReturnToOwnerAtEndOfTurn("return to owner at end of turn","{R}"), + ExileAtEndOfCombat("exile at end of combat","") ; public static final int CLEANUP_MASK= diff --git a/src/magic/model/phase/MagicEndOfCombatPhase.java b/src/magic/model/phase/MagicEndOfCombatPhase.java index a2987b4f22..1350a8b4a7 100644 --- a/src/magic/model/phase/MagicEndOfCombatPhase.java +++ b/src/magic/model/phase/MagicEndOfCombatPhase.java @@ -1,9 +1,12 @@ package magic.model.phase; import magic.model.MagicGame; +import magic.model.MagicLocationType; import magic.model.MagicPermanent; +import magic.model.MagicPermanentState; import magic.model.MagicPlayer; import magic.model.action.MagicRemoveFromCombatAction; +import magic.model.action.MagicRemoveFromPlayAction; public class MagicEndOfCombatPhase extends MagicPhase { @@ -29,13 +32,20 @@ public class MagicEndOfCombatPhase extends MagicPhase { public void executeEndOfPhase(final MagicGame game) { for (final MagicPlayer player : game.getPlayers()) { - - for (final MagicPermanent permanent : player.getPermanents()) { - - if (permanent.isAttacking()||permanent.isBlocking()) { - game.doAction(new MagicRemoveFromCombatAction(permanent)); + boolean changed; + do { + changed = false; + for (final MagicPermanent permanent : player.getPermanents()) { + if (permanent.hasState(MagicPermanentState.ExileAtEndOfCombat)) { + game.doAction(new MagicRemoveFromPlayAction(permanent,MagicLocationType.Exile)); + changed = true; + break; + } + else if (permanent.isAttacking()||permanent.isBlocking()) { + game.doAction(new MagicRemoveFromCombatAction(permanent)); + } } - } + } while (changed); } } } \ No newline at end of file