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 4fbf12b2ae9..4ee4ddf7623 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -65,27 +65,27 @@ public class DamageDealAi extends DamageAiBase { return SpecialCardAi.SarkhanTheMad.considerDig(ai, sa); } - if (damage.equals("X") && sa.getSVar(damage).equals("Count$ChosenNumber")) { - int energy = ai.getCounters(CounterEnumType.ENERGY); - for (SpellAbility s : source.getSpellAbilities()) { - if ("PayEnergy".equals(s.getParam("AILogic"))) { - energy += AbilityUtils.calculateAmount(source, s.getParam("CounterNum"), sa); - break; - } - } - for (; energy > 0; energy--) { - if (damageTargetAI(ai, sa, energy, false)) { - dmg = ComputerUtilCombat.getEnoughDamageToKill(sa.getTargetCard(), energy, source, false, false); - if (dmg > energy || dmg < 1) { - continue; // in case the calculation gets messed up somewhere - } - root.setSVar("EnergyToPay", "Number$" + dmg); - return true; - } - } - return false; - } if (damage.equals("X")) { + if (sa.getSVar(damage).equals("Count$ChosenNumber")) { + int energy = ai.getCounters(CounterEnumType.ENERGY); + for (SpellAbility s : source.getSpellAbilities()) { + if ("PayEnergy".equals(s.getParam("AILogic"))) { + energy += AbilityUtils.calculateAmount(source, s.getParam("CounterNum"), sa); + break; + } + } + for (; energy > 0; energy--) { + if (damageTargetAI(ai, sa, energy, false)) { + dmg = ComputerUtilCombat.getEnoughDamageToKill(sa.getTargetCard(), energy, source, false, false); + if (dmg > energy || dmg < 1) { + continue; // in case the calculation gets messed up somewhere + } + root.setSVar("EnergyToPay", "Number$" + dmg); + return true; + } + } + return false; + } if (sa.getSVar(damage).equals("Count$xPaid")) { // Life Drain if ("XLifeDrain".equals(logic)) { @@ -111,7 +111,7 @@ public class DamageDealAi extends DamageAiBase { final String damage = sa.getParam("NumDmg"); int dmg = AbilityUtils.calculateAmount(source, damage, sa); - if (damage.equals("X")) { + if (damage.equals("X") || sourceName.equals("Crater's Claws")) { if (sa.getSVar(damage).equals("Count$xPaid") || sourceName.equals("Crater's Claws")) { dmg = ComputerUtilCost.getMaxXValue(sa, ai, sa.isTrigger()); @@ -542,13 +542,6 @@ public class DamageDealAi extends DamageAiBase { sa.getTargets().add(enemy); } return true; - } else if ("DamageAfterPutCounter".equals(logic) - && sa.getParent() != null - && "P1P1".equals(sa.getParent().getParam("CounterType"))) { - // assuming the SA parent is of PutCounter type. Perhaps it's possible to predict counter multipliers here somehow? - final String amountStr = sa.getParent().getParamOrDefault("CounterNum", "1"); - final int amount = AbilityUtils.calculateAmount(source, amountStr, sa); - dmg += amount; } // AssumeAtLeastOneTarget is used for cards with funky targeting implementation like Fight with Fire which would @@ -557,11 +550,7 @@ public class DamageDealAi extends DamageAiBase { return false; } - immediately = immediately || ComputerUtil.playImmediately(ai, sa); - - if (!(sa.getParent() != null && sa.getParent().isTargetNumberValid())) { - sa.resetTargets(); - } + sa.resetTargets(); // target loop TargetChoices tcs = sa.getTargets(); @@ -622,6 +611,8 @@ public class DamageDealAi extends DamageAiBase { } } + immediately = immediately || ComputerUtil.playImmediately(ai, sa); + int totalTargetedSoFar = -1; while (sa.canAddMoreTarget()) { if (totalTargetedSoFar == tcs.size()) { diff --git a/forge-gui/res/cardsfolder/d/domris_ambush.txt b/forge-gui/res/cardsfolder/d/domris_ambush.txt index cd856ca47ca..027ee50ce4a 100644 --- a/forge-gui/res/cardsfolder/d/domris_ambush.txt +++ b/forge-gui/res/cardsfolder/d/domris_ambush.txt @@ -1,8 +1,8 @@ Name:Domri's Ambush ManaCost:R G Types:Sorcery -A:SP$ PutCounter | Cost$ R G | ValidTgts$ Creature.YouCtrl | CounterType$ P1P1 | TgtPrompt$ Select target creature you control to put a +1/+1 counter | SubAbility$ DBDamage | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control. -SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget | AILogic$ DamageAfterPutCounter +A:SP$ PutCounter | Cost$ R G | ValidTgts$ Creature.YouCtrl | CounterType$ P1P1 | TgtPrompt$ Select target creature you control to put a +1/+1 counter | SubAbility$ DBDamage | AILogic$ PowerDmg | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control. +SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget | AILogic$ PowerDmg SVar:X:ParentTargeted$CardPower DeckHas:Ability$Counters Oracle:Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control.