diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index d91e7bfcf3d..79972bd4b45 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -290,6 +290,11 @@ public class ChangeZoneAi extends SpellAbilityAi { if (!activateForCost && list.isEmpty()) { return false; } + if ("Atarka's Command".equals(source.getName()) + && (list.size() < 2 || ai.getLandsPlayedThisTurn() < 1)) { + // be strict on playing lands off charms + return false; + } String num = sa.getParam("ChangeNum"); if (num != null) { diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index 7be2c686607..b2f72270501 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -213,7 +213,10 @@ public class DamageDealAi extends DamageAiBase { */ private boolean damageTargetAI(final Player ai, final SpellAbility saMe, final int dmg, final boolean immediately) { final TargetRestrictions tgt = saMe.getTargetRestrictions(); - + if ("Atarka's Command".equals(saMe.getHostCard().getName())) { + // playReusable in damageChooseNontargeted wrongly assumes that CharmEffect options are re-usable + return this.shouldTgtP(ai, saMe, dmg, false); + } if (tgt == null) { return this.damageChooseNontargeted(ai, saMe, dmg); } diff --git a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java index 3e222fd4f8f..6dcd238d949 100644 --- a/forge-ai/src/main/java/forge/ai/ability/EffectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/EffectAi.java @@ -149,6 +149,17 @@ public class EffectAi extends SpellAbilityAi { } } randomReturn = threatened; + } else if (logic.equals("NoGain")) { + // basic logic to cancel GainLife on stack + if (game.getStack().isEmpty()) { + return false; + } + final SpellAbility topStack = game.getStack().peekAbility(); + if (topStack.getActivatingPlayer() == ai.getOpponent() && topStack.getApi() == ApiType.GainLife) { + return true; + } else { + return false; + } } else if (logic.equals("Fight")) { CardCollection humCreatures = ai.getOpponent().getCreaturesInPlay(); humCreatures = CardLists.getTargetableCards(humCreatures, sa); diff --git a/forge-gui/res/cardsfolder/a/atarkas_command.txt b/forge-gui/res/cardsfolder/a/atarkas_command.txt index 560c41cb37c..1fdd0863f40 100644 --- a/forge-gui/res/cardsfolder/a/atarkas_command.txt +++ b/forge-gui/res/cardsfolder/a/atarkas_command.txt @@ -2,11 +2,10 @@ Name:Atarka's Command ManaCost:R G Types:Instant A:SP$ Charm | Cost$ R G | Choices$ DBNoLife,DBDamage,DBLand,DBPumpAll | CharmNum$ 2 | SpellDescription$ Choose two - Your opponents can't gain life this turn; CARDNAME deals 3 damage to each opponent; You may put a land card from your hand onto the battlefield; Creatures you control get +1/+1 and gain reach until end of turn. -SVar:DBNoLife:DB$ Effect | Name$ Atarka's Command Effect | StaticAbilities$ STCantGain | SpellDescription$ Your opponents can't gain life this turn. +SVar:DBNoLife:DB$ Effect | Name$ Atarka's Command Effect | StaticAbilities$ STCantGain | AILogic$ NoGain | SpellDescription$ Your opponents can't gain life this turn. SVar:STCantGain:Mode$ Continuous | EffectZone$ Command | Affected$ Player.Opponent | AddKeyword$ You can't gain life. | Description$ Your opponents can't gain life. -SVar:DBDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 3 | SpellDescription$ CARDNAME deals 3 damage to each opponent. +SVar:DBDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 3 | AILogic$ Good | SpellDescription$ CARDNAME deals 3 damage to each opponent. SVar:DBLand:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | ChangeNum$ 1 | Optional$ You | SpellDescription$ You may put a land card from your hand onto the battlefield. SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +1 | NumDef$ +1 | KW$ Reach | SpellDescription$ Creatures you control get +1/+1 and gain reach until end of turn. -SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/atarkas_command.jpg Oracle:Choose two -\n• Your opponents can't gain life this turn.\n• Atarka's Command deals 3 damage to each opponent.\n• You may put a land card from your hand onto the battlefield.\n• Creatures you control get +1/+1 and gain reach until end of turn.