diff --git a/src/magic/card/Akroma_s_Memorial.java b/src/magic/card/Akroma_s_Memorial.java new file mode 100644 index 0000000000..65d98a01a4 --- /dev/null +++ b/src/magic/card/Akroma_s_Memorial.java @@ -0,0 +1,26 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; +import magic.model.MagicAbility; + +public class Akroma_s_Memorial { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | + MagicAbility.Flying.getMask() | + MagicAbility.FirstStrike.getMask() | + MagicAbility.Vigilance.getMask() | + MagicAbility.Trample.getMask() | + MagicAbility.Haste.getMask() | + MagicAbility.ProtectionFromBlack.getMask() | + MagicAbility.ProtectionFromRed.getMask(); + } + }; +} diff --git a/src/magic/card/Asceticism.java b/src/magic/card/Asceticism.java index 51f291efab..c1b920714e 100644 --- a/src/magic/card/Asceticism.java +++ b/src/magic/card/Asceticism.java @@ -15,9 +15,22 @@ import magic.model.event.MagicPayManaCostEvent; import magic.model.event.MagicPermanentActivation; import magic.model.event.MagicTiming; import magic.model.target.MagicRegenerateTargetPicker; +import magic.model.MagicAbility; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Asceticism { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.CannotBeTheTarget.getMask(); + } + }; + public static final MagicPermanentActivation A1 = new MagicPermanentActivation( new MagicCondition[]{MagicManaCost.ONE_GREEN.getCondition()}, new MagicActivationHints(MagicTiming.Pump,true), diff --git a/src/magic/card/Ashenmoor_Liege.java b/src/magic/card/Ashenmoor_Liege.java index 6017efdcb5..9789f431ab 100644 --- a/src/magic/card/Ashenmoor_Liege.java +++ b/src/magic/card/Ashenmoor_Liege.java @@ -7,8 +7,38 @@ import magic.model.action.MagicChangeLifeAction; import magic.model.event.MagicEvent; import magic.model.stack.MagicItemOnStack; import magic.model.trigger.MagicWhenTargetedTrigger; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Ashenmoor_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_BLACK_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_RED_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicWhenTargetedTrigger T = new MagicWhenTargetedTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicItemOnStack target) { diff --git a/src/magic/card/Aven_Mimeomancer.java b/src/magic/card/Aven_Mimeomancer.java index eb8a5be577..0cb6b78725 100644 --- a/src/magic/card/Aven_Mimeomancer.java +++ b/src/magic/card/Aven_Mimeomancer.java @@ -3,16 +3,23 @@ package magic.card; import magic.model.MagicCounterType; import magic.model.MagicGame; import magic.model.MagicPlayer; +import magic.model.MagicAbility; import magic.model.MagicPermanent; import magic.model.action.MagicChangeCountersAction; import magic.model.action.MagicPermanentAction; +import magic.model.action.MagicAddStaticAction; import magic.model.choice.MagicMayChoice; import magic.model.choice.MagicTargetChoice; import magic.model.event.MagicEvent; import magic.model.target.MagicBecomeTargetPicker; import magic.model.trigger.MagicAtUpkeepTrigger; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Aven_Mimeomancer { + public static final MagicAtUpkeepTrigger T = new MagicAtUpkeepTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer data) { @@ -31,11 +38,52 @@ public class Aven_Mimeomancer { } @Override - public void executeEvent(final MagicGame game,final MagicEvent event,final Object data[],final Object[] choiceResults) { + public void executeEvent( + final MagicGame game, + final MagicEvent event, + final Object data[], + final Object[] choiceResults) { if (MagicMayChoice.isYesChoice(choiceResults[0])) { event.processTargetPermanent(game,choiceResults,1,new MagicPermanentAction() { public void doAction(final MagicPermanent creature) { game.doAction(new MagicChangeCountersAction(creature,MagicCounterType.Feather,1,true)); + game.doAction(new MagicAddStaticAction(creature, new MagicStatic( + MagicLayer.SetPT, + MagicTargetFilter.TARGET_CREATURE) { + @Override + public void getPowerToughness( + final MagicGame game, + final MagicPermanent permanent, + final MagicPowerToughness pt) { + pt.power = 3; + pt.toughness = 1; + } + @Override + public boolean accept( + final MagicGame game, + final MagicPermanent source, + final MagicPermanent target) { + return target.getId() == creature.getId() && target.getCounters(MagicCounterType.Feather) > 0; + } + })); + game.doAction(new MagicAddStaticAction(creature, new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE) { + @Override + public long getAbilityFlags( + final MagicGame game, + final MagicPermanent permanent, + final long flags) { + return flags | MagicAbility.Flying.getMask(); + } + @Override + public boolean accept( + final MagicGame game, + final MagicPermanent source, + final MagicPermanent target) { + return target.getId() == creature.getId() && target.getCounters(MagicCounterType.Feather) > 0; + } + })); } }); } diff --git a/src/magic/card/Balefire_Liege.java b/src/magic/card/Balefire_Liege.java index da30be06d9..8658b9ca12 100644 --- a/src/magic/card/Balefire_Liege.java +++ b/src/magic/card/Balefire_Liege.java @@ -13,9 +13,36 @@ import magic.model.choice.MagicTargetChoice; import magic.model.event.MagicEvent; import magic.model.stack.MagicCardOnStack; import magic.model.trigger.MagicWhenSpellIsPlayedTrigger; - +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Balefire_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_RED_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_WHITE_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicWhenSpellIsPlayedTrigger T = new MagicWhenSpellIsPlayedTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicCardOnStack data) { diff --git a/src/magic/card/Bellowing_Tanglewurm.java b/src/magic/card/Bellowing_Tanglewurm.java new file mode 100644 index 0000000000..6a9304b684 --- /dev/null +++ b/src/magic/card/Bellowing_Tanglewurm.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; +import magic.model.MagicAbility; + +public class Bellowing_Tanglewurm { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_GREEN_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Intimidate.getMask(); + } + }; +} diff --git a/src/magic/card/Bloodmark_Mentor.java b/src/magic/card/Bloodmark_Mentor.java new file mode 100644 index 0000000000..743d2728e6 --- /dev/null +++ b/src/magic/card/Bloodmark_Mentor.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; +import magic.model.MagicAbility; + +public class Bloodmark_Mentor { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_RED_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.FirstStrike.getMask(); + } + }; +} diff --git a/src/magic/card/Boartusk_Liege.java b/src/magic/card/Boartusk_Liege.java new file mode 100644 index 0000000000..de5b8f8f1b --- /dev/null +++ b/src/magic/card/Boartusk_Liege.java @@ -0,0 +1,35 @@ +package magic.card; + +import magic.model.MagicPowerToughness; +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Boartusk_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_RED_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_GREEN_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; +} diff --git a/src/magic/card/Captain_of_the_Watch.java b/src/magic/card/Captain_of_the_Watch.java index 775a01a279..e879cb7c57 100644 --- a/src/magic/card/Captain_of_the_Watch.java +++ b/src/magic/card/Captain_of_the_Watch.java @@ -4,12 +4,43 @@ import magic.data.TokenCardDefinitions; import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.MagicPlayer; +import magic.model.MagicSubType; +import magic.model.MagicPowerToughness; import magic.model.action.MagicPlayTokenAction; import magic.model.event.MagicEvent; import magic.model.trigger.MagicWhenComesIntoPlayTrigger; - +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; +import magic.model.MagicAbility; public class Captain_of_the_Watch { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_SOLDIER_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_SOLDIER_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Vigilance.getMask(); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicWhenComesIntoPlayTrigger T = new MagicWhenComesIntoPlayTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPlayer player) { diff --git a/src/magic/card/Cemetery_Reaper.java b/src/magic/card/Cemetery_Reaper.java index d23fd267db..ea7d96b83f 100644 --- a/src/magic/card/Cemetery_Reaper.java +++ b/src/magic/card/Cemetery_Reaper.java @@ -21,8 +21,24 @@ import magic.model.event.MagicPayManaCostTapEvent; import magic.model.event.MagicPermanentActivation; import magic.model.event.MagicTiming; import magic.model.target.MagicGraveyardTargetPicker; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Cemetery_Reaper { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_ZOMBIE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicPermanentActivation A = new MagicPermanentActivation( new MagicCondition[]{MagicCondition.CAN_TAP_CONDITION,MagicManaCost.TWO_BLACK.getCondition()}, new MagicActivationHints(MagicTiming.Token), diff --git a/src/magic/card/Creakwood_Liege.java b/src/magic/card/Creakwood_Liege.java index f8a4c8449a..0873db7771 100644 --- a/src/magic/card/Creakwood_Liege.java +++ b/src/magic/card/Creakwood_Liege.java @@ -7,9 +7,37 @@ import magic.model.MagicPlayer; import magic.model.action.MagicPlayTokenAction; import magic.model.event.MagicEvent; import magic.model.trigger.MagicAtUpkeepTrigger; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Creakwood_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_BLACK_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_GREEN_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicAtUpkeepTrigger T = new MagicAtUpkeepTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer data) { diff --git a/src/magic/card/Cumber_Stone.java b/src/magic/card/Cumber_Stone.java new file mode 100644 index 0000000000..82b2c39756 --- /dev/null +++ b/src/magic/card/Cumber_Stone.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Cumber_Stone { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_CREATURE_YOUR_OPPONENT_CONTROLS) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.power -= 1; + } + }; +} diff --git a/src/magic/card/Death_Baron.java b/src/magic/card/Death_Baron.java new file mode 100644 index 0000000000..992ba5a255 --- /dev/null +++ b/src/magic/card/Death_Baron.java @@ -0,0 +1,26 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.MagicSubType; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Death_Baron { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean accept(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return filter.accept(game, source.getController(), target) && + (target.hasSubType(MagicSubType.Skeleton) || + (source != target && target.hasSubType(MagicSubType.Zombie))); + } + }; +} diff --git a/src/magic/card/Deathbringer_Liege.java b/src/magic/card/Deathbringer_Liege.java index 064b345350..542ddd2594 100644 --- a/src/magic/card/Deathbringer_Liege.java +++ b/src/magic/card/Deathbringer_Liege.java @@ -15,9 +15,36 @@ import magic.model.stack.MagicCardOnStack; import magic.model.target.MagicDestroyTargetPicker; import magic.model.target.MagicTapTargetPicker; import magic.model.trigger.MagicWhenSpellIsPlayedTrigger; - +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Deathbringer_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_BLACK_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_WHITE_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicWhenSpellIsPlayedTrigger T = new MagicWhenSpellIsPlayedTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicCardOnStack data) { diff --git a/src/magic/card/Eldrazi_Monument.java b/src/magic/card/Eldrazi_Monument.java index cb4f35572e..cd4d80fa07 100644 --- a/src/magic/card/Eldrazi_Monument.java +++ b/src/magic/card/Eldrazi_Monument.java @@ -4,14 +4,38 @@ import magic.model.MagicGame; import magic.model.MagicPermanent; import magic.model.MagicPlayer; import magic.model.MagicType; +import magic.model.MagicLayer; +import magic.model.MagicPowerToughness; import magic.model.action.MagicSacrificeAction; import magic.model.choice.MagicTargetChoice; import magic.model.event.MagicEvent; import magic.model.event.MagicSacrificePermanentEvent; import magic.model.trigger.MagicAtUpkeepTrigger; - +import magic.model.target.MagicTargetFilter; +import magic.model.mstatic.MagicStatic; +import magic.model.MagicAbility; public class Eldrazi_Monument { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | + MagicAbility.Flying.getMask() | + MagicAbility.Indestructible.getMask(); + } + }; + + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + }; + public static final MagicAtUpkeepTrigger T = new MagicAtUpkeepTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer data) { diff --git a/src/magic/card/Elesh_Norn__Grand_Cenobite.java b/src/magic/card/Elesh_Norn__Grand_Cenobite.java new file mode 100644 index 0000000000..0582fdd7df --- /dev/null +++ b/src/magic/card/Elesh_Norn__Grand_Cenobite.java @@ -0,0 +1,27 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Elesh_Norn__Grand_Cenobite { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(2); + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_CREATURE_YOUR_OPPONENT_CONTROLS) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(-2); + } + }; +} diff --git a/src/magic/card/Fires_of_Yavimaya.java b/src/magic/card/Fires_of_Yavimaya.java index ee6a9af3af..b1109bb32c 100644 --- a/src/magic/card/Fires_of_Yavimaya.java +++ b/src/magic/card/Fires_of_Yavimaya.java @@ -14,8 +14,20 @@ import magic.model.event.MagicPermanentActivation; import magic.model.event.MagicSacrificeEvent; import magic.model.event.MagicTiming; import magic.model.target.MagicPumpTargetPicker; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Fires_of_Yavimaya { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Haste.getMask(); + } + }; public static final MagicPermanentActivation A = new MagicPermanentActivation( MagicCondition.NONE, new MagicActivationHints(MagicTiming.Pump), diff --git a/src/magic/card/Glen_Elendra_Liege.java b/src/magic/card/Glen_Elendra_Liege.java new file mode 100644 index 0000000000..36c55f8bbf --- /dev/null +++ b/src/magic/card/Glen_Elendra_Liege.java @@ -0,0 +1,35 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Glen_Elendra_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_BLACK_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_BLUE_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; +} diff --git a/src/magic/card/Glory_of_Warfare.java b/src/magic/card/Glory_of_Warfare.java new file mode 100644 index 0000000000..0daee42020 --- /dev/null +++ b/src/magic/card/Glory_of_Warfare.java @@ -0,0 +1,23 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Glory_of_Warfare { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + if (game.hasTurn(permanent.getController())) { + pt.power += 2; + } else { + pt.toughness += 2; + } + } + }; +} diff --git a/src/magic/card/Goblin_Chieftain.java b/src/magic/card/Goblin_Chieftain.java new file mode 100644 index 0000000000..183ff59eeb --- /dev/null +++ b/src/magic/card/Goblin_Chieftain.java @@ -0,0 +1,37 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Goblin_Chieftain { + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_GOBLIN_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Haste.getMask(); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_GOBLIN_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; +} diff --git a/src/magic/card/Godhead_of_Awe.java b/src/magic/card/Godhead_of_Awe.java index 9a4468ed48..e7b40d3457 100644 --- a/src/magic/card/Godhead_of_Awe.java +++ b/src/magic/card/Godhead_of_Awe.java @@ -18,8 +18,8 @@ public class Godhead_of_Awe { pt.toughness = 1; } @Override - public boolean accept(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { - return source != target && filter.accept(game, source.getController(), target); + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; } }; } diff --git a/src/magic/card/Honor_of_the_Pure.java b/src/magic/card/Honor_of_the_Pure.java new file mode 100644 index 0000000000..4e30aa48bc --- /dev/null +++ b/src/magic/card/Honor_of_the_Pure.java @@ -0,0 +1,20 @@ + +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Honor_of_the_Pure { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_WHITE_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + }; +} diff --git a/src/magic/card/Kinsbaile_Cavalier.java b/src/magic/card/Kinsbaile_Cavalier.java new file mode 100644 index 0000000000..b33648b063 --- /dev/null +++ b/src/magic/card/Kinsbaile_Cavalier.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Kinsbaile_Cavalier { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_KNIGHT_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.DoubleStrike.getMask(); + } + }; +} diff --git a/src/magic/card/Knight_Exemplar.java b/src/magic/card/Knight_Exemplar.java new file mode 100644 index 0000000000..7327561f6f --- /dev/null +++ b/src/magic/card/Knight_Exemplar.java @@ -0,0 +1,36 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Knight_Exemplar { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_KNIGHT_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_KNIGHT_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Indestructible.getMask(); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; +} diff --git a/src/magic/card/Kulrath_Knight.java b/src/magic/card/Kulrath_Knight.java new file mode 100644 index 0000000000..d4f3de1da9 --- /dev/null +++ b/src/magic/card/Kulrath_Knight.java @@ -0,0 +1,23 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Kulrath_Knight { + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOUR_OPPONENT_CONTROLS) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.CannotAttackOrBlock.getMask(); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return target.hasCounters(); + } + }; +} diff --git a/src/magic/card/Levitation.java b/src/magic/card/Levitation.java new file mode 100644 index 0000000000..ae60cd0b1c --- /dev/null +++ b/src/magic/card/Levitation.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Levitation { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Flying.getMask(); + } + }; +} diff --git a/src/magic/card/Lord_of_the_Unreal.java b/src/magic/card/Lord_of_the_Unreal.java new file mode 100644 index 0000000000..fbc3a1ccb7 --- /dev/null +++ b/src/magic/card/Lord_of_the_Unreal.java @@ -0,0 +1,28 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Lord_of_the_Unreal { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_ILLUSION_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_ILLUSION_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.CannotBeTheTarget.getMask(); + } + }; +} diff --git a/src/magic/card/Madrush_Cyclops.java b/src/magic/card/Madrush_Cyclops.java new file mode 100644 index 0000000000..3db130dc4d --- /dev/null +++ b/src/magic/card/Madrush_Cyclops.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Madrush_Cyclops { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Haste.getMask(); + } + }; +} diff --git a/src/magic/card/Merfolk_Sovereign.java b/src/magic/card/Merfolk_Sovereign.java index 9ad520f594..52f6a7ef0e 100644 --- a/src/magic/card/Merfolk_Sovereign.java +++ b/src/magic/card/Merfolk_Sovereign.java @@ -4,6 +4,7 @@ import magic.model.MagicAbility; import magic.model.MagicGame; import magic.model.MagicPayedCost; import magic.model.MagicPermanent; +import magic.model.MagicPowerToughness; import magic.model.MagicSource; import magic.model.action.MagicPermanentAction; import magic.model.action.MagicSetAbilityAction; @@ -15,8 +16,23 @@ import magic.model.event.MagicPermanentActivation; import magic.model.event.MagicTapEvent; import magic.model.event.MagicTiming; import magic.model.target.MagicUnblockableTargetPicker; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Merfolk_Sovereign { + public static final MagicStatic S = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_MERFOLK_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicPermanentActivation A = new MagicPermanentActivation( new MagicCondition[]{MagicCondition.CAN_TAP_CONDITION}, new MagicActivationHints(MagicTiming.Attack), diff --git a/src/magic/card/Murkfiend_Liege.java b/src/magic/card/Murkfiend_Liege.java index 8f61eba117..43d595121d 100644 --- a/src/magic/card/Murkfiend_Liege.java +++ b/src/magic/card/Murkfiend_Liege.java @@ -9,11 +9,38 @@ import magic.model.event.MagicEvent; import magic.model.target.MagicTarget; import magic.model.target.MagicTargetFilter; import magic.model.trigger.MagicAtUpkeepTrigger; - +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; import java.util.Collection; public class Murkfiend_Liege { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_GREEN_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_BLUE_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicAtUpkeepTrigger T = new MagicAtUpkeepTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPlayer data) { diff --git a/src/magic/card/Razorjaw_Oni.java b/src/magic/card/Razorjaw_Oni.java new file mode 100644 index 0000000000..14813d4c5e --- /dev/null +++ b/src/magic/card/Razorjaw_Oni.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Razorjaw_Oni { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_BLACK_CREATURE) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.CannotBlock.getMask(); + } + }; +} diff --git a/src/magic/card/Tolsimir_Wolfblood.java b/src/magic/card/Tolsimir_Wolfblood.java index 0605e1e127..70cb0044c4 100644 --- a/src/magic/card/Tolsimir_Wolfblood.java +++ b/src/magic/card/Tolsimir_Wolfblood.java @@ -13,8 +13,36 @@ import magic.model.event.MagicEvent; import magic.model.event.MagicPermanentActivation; import magic.model.event.MagicTapEvent; import magic.model.event.MagicTiming; +import magic.model.MagicPowerToughness; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Tolsimir_Wolfblood { + public static final MagicStatic S1 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_GREEN_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; + public static final MagicStatic S2 = new MagicStatic( + MagicLayer.ModPT, + MagicTargetFilter.TARGET_WHITE_CREATURE_YOU_CONTROL) { + @Override + public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { + pt.add(1); + } + @Override + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; + } + }; public static final MagicPermanentActivation A = new MagicPermanentActivation( new MagicCondition[]{MagicCondition.CAN_TAP_CONDITION}, new MagicActivationHints(MagicTiming.Token), diff --git a/src/magic/card/True_Conviction.java b/src/magic/card/True_Conviction.java new file mode 100644 index 0000000000..8bf4b9cc94 --- /dev/null +++ b/src/magic/card/True_Conviction.java @@ -0,0 +1,21 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; +import magic.model.MagicAbility; + +public class True_Conviction { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | + MagicAbility.DoubleStrike.getMask() | + MagicAbility.LifeLink.getMask(); + } + }; +} diff --git a/src/magic/card/Urabrask_the_Hidden.java b/src/magic/card/Urabrask_the_Hidden.java index 4501d50b6b..dcbc1f7744 100644 --- a/src/magic/card/Urabrask_the_Hidden.java +++ b/src/magic/card/Urabrask_the_Hidden.java @@ -5,8 +5,20 @@ import magic.model.MagicPermanent; import magic.model.event.MagicEvent; import magic.model.event.MagicTapEvent; import magic.model.trigger.MagicWhenOtherComesIntoPlayTrigger; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; public class Urabrask_the_Hidden { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.Haste.getMask(); + } + }; public static final MagicWhenOtherComesIntoPlayTrigger T = new MagicWhenOtherComesIntoPlayTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent otherPermanent) { diff --git a/src/magic/card/Veteran_Armorer.java b/src/magic/card/Veteran_Armorer.java index 620820fc50..1fdb74f0d0 100644 --- a/src/magic/card/Veteran_Armorer.java +++ b/src/magic/card/Veteran_Armorer.java @@ -16,8 +16,8 @@ public class Veteran_Armorer { pt.toughness += 1; } @Override - public boolean accept(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { - return source != target && filter.accept(game, source.getController(), target); + public boolean condition(final MagicGame game,final MagicPermanent source,final MagicPermanent target) { + return source != target; } }; } diff --git a/src/magic/card/Windbrisk_Raptor.java b/src/magic/card/Windbrisk_Raptor.java new file mode 100644 index 0000000000..1436f619d8 --- /dev/null +++ b/src/magic/card/Windbrisk_Raptor.java @@ -0,0 +1,19 @@ +package magic.card; + +import magic.model.MagicGame; +import magic.model.MagicPermanent; +import magic.model.MagicLayer; +import magic.model.MagicAbility; +import magic.model.mstatic.MagicStatic; +import magic.model.target.MagicTargetFilter; + +public class Windbrisk_Raptor { + public static final MagicStatic S = new MagicStatic( + MagicLayer.Ability, + MagicTargetFilter.TARGET_ATTACKING_CREATURE_YOU_CONTROL) { + @Override + public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,final long flags) { + return flags | MagicAbility.LifeLink.getMask(); + } + }; +} diff --git a/src/magic/model/variable/MagicStaticLocalVariable.java b/src/magic/model/variable/MagicStaticLocalVariable.java index 0a9e2f7618..7206766ab8 100644 --- a/src/magic/model/variable/MagicStaticLocalVariable.java +++ b/src/magic/model/variable/MagicStaticLocalVariable.java @@ -20,236 +20,41 @@ import java.util.EnumSet; public class MagicStaticLocalVariable extends MagicDummyLocalVariable { private static final MagicLocalVariable INSTANCE=new MagicStaticLocalVariable(); + + public static final MagicLocalVariable getInstance() { + return INSTANCE; + } - private static int akromasMemorial; - private static int angelicShield; - private static int asceticism; - private static int ashenmoorLiege; - private static int balefireLiege; - private static int bellowingTanglewurm; - private static int bloodmarkMentor; - private static int boartuskLiege; - private static int captainOfTheWatch; - private static int cemeteryReaper; - private static int creakwoodLiege; - private static int cumberStone; - private static int deathBaron; - private static int deathbringerLiege; - private static int eldraziMonument; - private static int eleshNorn; - private static int firesOfYavimaya; - private static int glenElendraLiege; - private static int gloriousAnthem; - private static int gloryOfWarfare; - private static int goblinChieftain; - private static int godheadOfAwe; - private static int honorOfThePure; - private static int kinsbaileCavalier; - private static int knightExemplar; - private static int kulrathKnight; - private static int levitation; - private static int lordOfTheUnreal; - private static int madrushCyclops; - private static int merfolkSovereign; - private static int murkfiendLiege; - private static int razorjawOni; // You can't be target of spells or abilities your opponent controls. private static int spiritOfTheHearth; - private static int tolsimirWolfblood; - private static int trueConviction; - private static int urabraskTheHidden; - private static int veteranArmorer; - private static int windbriskRaptor; + + public static void initializeCardDefinitions() { + final CardDefinitions definitions=CardDefinitions.getInstance(); + spiritOfTheHearth=definitions.getCard("Spirit of the Hearth").getIndex(); + } public static boolean canTarget(final MagicPlayer controller) { return controller.getCount(spiritOfTheHearth) == 0; } - private static int getOtherCount(final int cardDefinitionIndex,final MagicPermanent permanent,final int count) { - return permanent.getCardDefinition().getIndex() != cardDefinitionIndex ? count : count - 1; - } - - private static int getOtherCount(final int cardDefinitionIndex,final MagicPermanent permanent,final MagicPlayer controller) { - final int count = controller.getCount(cardDefinitionIndex); - return count == 0 ? 0 : getOtherCount(cardDefinitionIndex,permanent,count); - } - - @Override + @Override public void getPowerToughness(final MagicGame game,final MagicPermanent permanent,final MagicPowerToughness pt) { - - final MagicPlayer controller=permanent.getController(); - final MagicPlayer opponent=game.getOpponent(controller); - for (final MagicPermanentStatic mpstatic : game.getStatics()) { final MagicStatic mstatic = mpstatic.getStatic(); - if (mstatic.accept(game, mpstatic.getPermanent(), permanent)) { + if (mstatic.accept(game, mpstatic.getPermanent(),permanent)) { mstatic.getPowerToughness(game, permanent, pt); } } - - // Power and toughness change. - if (permanent.getCounters(MagicCounterType.Feather)>0) { - pt.power=3; - pt.toughness=1; - } - - // Power or toughness increase. - //pt.toughness += controller.getCount(angelicShield); - //pt.toughness += getOtherCount(veteranArmorer,permanent,controller); - int count = controller.getCount(gloryOfWarfare); - if (count > 0) { - if (game.hasTurn(controller)) { - pt.power += count * 2; - } else { - pt.toughness += count * 2; - } - } - pt.power -= opponent.getCount(cumberStone); - - // Power and toughness increase. - int both = permanent.getCounters(MagicCounterType.PlusOne)-permanent.getCounters(MagicCounterType.MinusOne); - - both += controller.getCount(eldraziMonument); - //both += controller.getCount(gloriousAnthem); - - count = controller.getCount(captainOfTheWatch); - if (count > 0 && permanent.hasSubType(MagicSubType.Soldier)) { - both += getOtherCount(captainOfTheWatch,permanent,count); - } - count = controller.getCount(deathBaron); - if (count > 0 ) { - if (permanent.hasSubType(MagicSubType.Skeleton)) { - both += controller.getCount(deathBaron); - } - if (count > 0 && permanent.hasSubType(MagicSubType.Zombie)) { - both += getOtherCount(deathBaron,permanent,count); - } - } - count = controller.getCount(cemeteryReaper); - if (count > 0 && permanent.hasSubType(MagicSubType.Zombie)) { - both += getOtherCount(cemeteryReaper,permanent,count); - } - count = controller.getCount(goblinChieftain); - if (count > 0 && permanent.hasSubType(MagicSubType.Goblin)) { - both += getOtherCount(goblinChieftain,permanent,count); - } - count=controller.getCount(knightExemplar); - if (count > 0 && permanent.hasSubType(MagicSubType.Knight)) { - both += getOtherCount(knightExemplar,permanent,count); - } - count = controller.getCount(lordOfTheUnreal); - if (count > 0 && permanent.hasSubType(MagicSubType.Illusion)) { - both += controller.getCount(lordOfTheUnreal); - } - count = controller.getCount(merfolkSovereign); - if (count > 0 && permanent.hasSubType(MagicSubType.Merfolk)) { - both += getOtherCount(merfolkSovereign,permanent,count); - } - count = controller.getCount(eleshNorn); - both += getOtherCount(eleshNorn,permanent,count) * 2; - both -= opponent.getCount(eleshNorn) * 2; - - final int colorFlags=permanent.getColorFlags(); - if (MagicColor.Black.hasColor(colorFlags)) { - both += getOtherCount(ashenmoorLiege,permanent,controller); - both += getOtherCount(creakwoodLiege,permanent,controller); - both += getOtherCount(deathbringerLiege,permanent,controller); - both += getOtherCount(glenElendraLiege,permanent,controller); - } - if (MagicColor.Blue.hasColor(colorFlags)) { - both += getOtherCount(glenElendraLiege,permanent,controller); - both += getOtherCount(murkfiendLiege,permanent,controller); - } - if (MagicColor.Green.hasColor(colorFlags)) { - both += getOtherCount(boartuskLiege,permanent,controller); - both += getOtherCount(creakwoodLiege,permanent,controller); - both += getOtherCount(murkfiendLiege,permanent,controller); - both += getOtherCount(tolsimirWolfblood,permanent,controller); - } - if (MagicColor.Red.hasColor(colorFlags)) { - both += getOtherCount(ashenmoorLiege,permanent,controller); - both += getOtherCount(boartuskLiege,permanent,controller); - both += getOtherCount(balefireLiege,permanent,controller); - } - if (MagicColor.White.hasColor(colorFlags)) { - both += getOtherCount(balefireLiege,permanent,controller); - both += getOtherCount(deathbringerLiege,permanent,controller); - both += getOtherCount(tolsimirWolfblood,permanent,controller); - both += controller.getCount(honorOfThePure); - } - - pt.power += both; - pt.toughness += both; - } + } @Override public long getAbilityFlags(final MagicGame game,final MagicPermanent permanent,long flags) { - if (permanent.isCreature()) { - final MagicPlayer controller=permanent.getController(); - - for (final MagicPermanentStatic mpstatic : game.getStatics()) { - final MagicStatic mstatic = mpstatic.getStatic(); - if (mstatic.accept(game, mpstatic.getPermanent(), permanent)) { - flags = mstatic.getAbilityFlags(game, permanent, flags); - } + for (final MagicPermanentStatic mpstatic : game.getStatics()) { + final MagicStatic mstatic = mpstatic.getStatic(); + if (mstatic.accept(game, mpstatic.getPermanent(), permanent)) { + flags = mstatic.getAbilityFlags(game, permanent, flags); } - - if (controller.getCount(akromasMemorial)>0) { - flags|=MagicAbility.Flying.getMask() | - MagicAbility.FirstStrike.getMask()| - MagicAbility.Vigilance.getMask()| - MagicAbility.Trample.getMask()| - MagicAbility.Haste.getMask()| - MagicAbility.ProtectionFromBlack.getMask()| - MagicAbility.ProtectionFromRed.getMask(); - } - if (controller.getCount(eldraziMonument)>0) { - flags|=MagicAbility.Flying.getMask() | - MagicAbility.Indestructible.getMask(); - } - if (controller.getCount(trueConviction)>0) { - flags|=MagicAbility.DoubleStrike.getMask() | - MagicAbility.LifeLink.getMask(); - } - if (controller.getCount(asceticism) > 0 || - (controller.getCount(lordOfTheUnreal) > 0 && permanent.hasSubType(MagicSubType.Illusion))) { - flags |= MagicAbility.CannotBeTheTarget.getMask(); - } - if (controller.getCount(bellowingTanglewurm)>0&&MagicColor.Green.hasColor(permanent.getColorFlags())) { - flags|=MagicAbility.Intimidate.getMask(); - } - if (controller.getCount(bloodmarkMentor)>0&&MagicColor.Red.hasColor(permanent.getColorFlags())) { - flags|=MagicAbility.FirstStrike.getMask(); - } - if (controller.getCount(captainOfTheWatch)>0&&permanent.hasSubType(MagicSubType.Soldier)) { - flags|=MagicAbility.Vigilance.getMask(); - } - if (controller.getCount(firesOfYavimaya)>0|| - controller.getCount(madrushCyclops)>0|| - controller.getCount(urabraskTheHidden)>0|| - (controller.getCount(goblinChieftain)>0&&permanent.hasSubType(MagicSubType.Goblin))) { - flags|=MagicAbility.Haste.getMask(); - } - if (getOtherCount(knightExemplar,permanent,controller)>0&&permanent.hasSubType(MagicSubType.Knight)) { - flags|=MagicAbility.Indestructible.getMask(); - } - if (game.getOtherPlayerCount(kulrathKnight,controller)>0&&permanent.hasCounters()) { - flags|=MagicAbility.CannotAttackOrBlock.getMask(); - } - if (controller.getCount(levitation)>0||permanent.getCounters(MagicCounterType.Feather)>0) { - flags|=MagicAbility.Flying.getMask(); - } - if ((controller.getCount(kinsbaileCavalier)>0&&permanent.hasSubType(MagicSubType.Knight))) { - flags|=MagicAbility.DoubleStrike.getMask(); - } - if (game.getCount(razorjawOni)>0&&MagicColor.Black.hasColor(permanent.getColorFlags())) { - flags|=MagicAbility.CannotBlock.getMask(); - } - if (controller.getCount(windbriskRaptor)>0&&permanent.isAttacking()) { - flags|=MagicAbility.LifeLink.getMask(); - } - } - + } return flags; } @@ -262,50 +67,4 @@ public class MagicStaticLocalVariable extends MagicDummyLocalVariable { } return flags; } - - public static final MagicLocalVariable getInstance() { - return INSTANCE; - } - - public static void initializeCardDefinitions() { - final CardDefinitions definitions=CardDefinitions.getInstance(); - akromasMemorial=definitions.getCard("Akroma's Memorial").getIndex(); - angelicShield=definitions.getCard("Angelic Shield").getIndex(); - asceticism=definitions.getCard("Asceticism").getIndex(); - ashenmoorLiege=definitions.getCard("Ashenmoor Liege").getIndex(); - balefireLiege=definitions.getCard("Balefire Liege").getIndex(); - bellowingTanglewurm=definitions.getCard("Bellowing Tanglewurm").getIndex(); - bloodmarkMentor=definitions.getCard("Bloodmark Mentor").getIndex(); - boartuskLiege=definitions.getCard("Boartusk Liege").getIndex(); - captainOfTheWatch=definitions.getCard("Captain of the Watch").getIndex(); - cemeteryReaper=definitions.getCard("Cemetery Reaper").getIndex(); - creakwoodLiege=definitions.getCard("Creakwood Liege").getIndex(); - cumberStone=definitions.getCard("Cumber Stone").getIndex(); - deathBaron=definitions.getCard("Death Baron").getIndex(); - deathbringerLiege=definitions.getCard("Deathbringer Liege").getIndex(); - eldraziMonument=definitions.getCard("Eldrazi Monument").getIndex(); - eleshNorn=definitions.getCard("Elesh Norn, Grand Cenobite").getIndex(); - firesOfYavimaya=definitions.getCard("Fires of Yavimaya").getIndex(); - glenElendraLiege=definitions.getCard("Glen Elendra Liege").getIndex(); - gloriousAnthem=definitions.getCard("Glorious Anthem").getIndex(); - gloryOfWarfare=definitions.getCard("Glory of Warfare").getIndex(); - goblinChieftain=definitions.getCard("Goblin Chieftain").getIndex(); - godheadOfAwe=definitions.getCard("Godhead of Awe").getIndex(); - honorOfThePure=definitions.getCard("Honor of the Pure").getIndex(); - kinsbaileCavalier=definitions.getCard("Kinsbaile Cavalier").getIndex(); - knightExemplar=definitions.getCard("Knight Exemplar").getIndex(); - kulrathKnight=definitions.getCard("Kulrath Knight").getIndex(); - levitation=definitions.getCard("Levitation").getIndex(); - lordOfTheUnreal=definitions.getCard("Lord of the Unreal").getIndex(); - madrushCyclops=definitions.getCard("Madrush Cyclops").getIndex(); - merfolkSovereign=definitions.getCard("Merfolk Sovereign").getIndex(); - murkfiendLiege=definitions.getCard("Murkfiend Liege").getIndex(); - razorjawOni=definitions.getCard("Razorjaw Oni").getIndex(); - spiritOfTheHearth=definitions.getCard("Spirit of the Hearth").getIndex(); - tolsimirWolfblood=definitions.getCard("Tolsimir Wolfblood").getIndex(); - trueConviction=definitions.getCard("True Conviction").getIndex(); - urabraskTheHidden=definitions.getCard("Urabrask the Hidden").getIndex(); - veteranArmorer=definitions.getCard("Veteran Armorer").getIndex(); - windbriskRaptor=definitions.getCard("Windbrisk Raptor").getIndex(); - } } diff --git a/src/magic/test/TestStatics.java b/src/magic/test/TestStatics.java index b9fa27b0c2..316b5e795d 100644 --- a/src/magic/test/TestStatics.java +++ b/src/magic/test/TestStatics.java @@ -32,6 +32,7 @@ class TestStatics extends TestGameBuilder { createPermanent(game,P,"Phyrexian Crusader",false,3); addToHand(P,"Glorious Anthem",2); addToHand(P,"Godhead of Awe",2); + addToHand(P,"Tolsimir Wolfblood",1); P = opponent;