From 2924329e574ea20d4f58f3327877a0172d87e32e Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 26 Apr 2023 21:28:08 +0200 Subject: [PATCH] Fix AI assigning more than 1 dmg with trampling deathtouch attacker --- .../java/forge/ai/ComputerUtilCombat.java | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 60b7908160b..69ceee83ac3 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2059,31 +2059,23 @@ public class ComputerUtilCombat { if (block.size() == 1) { final Card blocker = block.getFirst(); + int dmgToBlocker = dmgCanDeal; - if (hasTrample) { - int dmgToKill = getEnoughDamageToKill(blocker, dmgCanDeal, attacker, true); + if (hasTrample && isAttacking) { // otherwise no entity to deliver damage via trample + dmgToBlocker = getEnoughDamageToKill(blocker, dmgCanDeal, attacker, true); - if (dmgCanDeal < dmgToKill) { - dmgToKill = Math.min(blocker.getLethalDamage(), dmgCanDeal); - } else { - dmgToKill = Math.max(blocker.getLethalDamage(), dmgToKill); + if (dmgCanDeal < dmgToBlocker) { + // can't kill so just put the lowest legal amount + dmgToBlocker = Math.min(blocker.getLethalDamage(), dmgCanDeal); } - if (!isAttacking) { // no entity to deliver damage via trample - dmgToKill = dmgCanDeal; - } - - final int remainingDmg = dmgCanDeal - dmgToKill; - + final int remainingDmg = dmgCanDeal - dmgToBlocker; // If Extra trample damage, assign to defending player/planeswalker (when there is one) if (remainingDmg > 0) { damageMap.put(null, remainingDmg); } - - damageMap.put(blocker, dmgToKill); - } else { - damageMap.put(blocker, dmgCanDeal); } + damageMap.put(blocker, dmgToBlocker); } // 1 blocker else { // Does the attacker deal lethal damage to all blockers