From 813219df2d688b8a33c494f78e74b94d16e3108a Mon Sep 17 00:00:00 2001 From: Zzooouhh Date: Wed, 22 Nov 2017 11:28:36 +0100 Subject: [PATCH] Some changes to how Defensive Formation handles lethal damage --- .../main/java/mage/game/combat/CombatGroup.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Mage/src/main/java/mage/game/combat/CombatGroup.java b/Mage/src/main/java/mage/game/combat/CombatGroup.java index 277233119d8..f64863280fa 100644 --- a/Mage/src/main/java/mage/game/combat/CombatGroup.java +++ b/Mage/src/main/java/mage/game/combat/CombatGroup.java @@ -276,10 +276,12 @@ public class CombatGroup implements Serializable, Copyable { if (attacker == null) { return; } + boolean oldRuleDamage = false; Player player = game.getPlayer(attacker.getControllerId()); for (Permanent defensiveFormation : game.getBattlefield().getAllActivePermanents(defendingPlayerId)) { // for handling Defensive Formation if (defensiveFormation.getAbilities().containsKey(ControllerAssignCombatDamageToBlockersAbility.getInstance().getId())) { player = game.getPlayer(defendingPlayerId); + oldRuleDamage = true; break; } } @@ -297,6 +299,7 @@ public class CombatGroup implements Serializable, Copyable { } Map assigned = new HashMap<>(); if (blocked) { + boolean excessDamageToDefender = true; for (UUID blockerId : blockerOrder) { Permanent blocker = game.getPermanent(blockerId); if (blocker != null) { @@ -311,12 +314,20 @@ public class CombatGroup implements Serializable, Copyable { damage = 0; break; } - int damageAssigned = player.getAmount(lethalDamage, damage, "Assign damage to " + blocker.getName(), game); + int damageAssigned = 0; + if (!oldRuleDamage) { + damageAssigned = player.getAmount(lethalDamage, damage, "Assign damage to " + blocker.getName(), game); + } else { + damageAssigned = player.getAmount(0, damage, "Assign damage to " + blocker.getName(), game); + if (damageAssigned < lethalDamage) { + excessDamageToDefender = false; // all blockers need to have lethal damage assigned before it can trample over to the defender + } + } assigned.put(blockerId, damageAssigned); damage -= damageAssigned; } } - if (damage > 0 && hasTrample(attacker)) { + if (damage > 0 && hasTrample(attacker) && excessDamageToDefender) { defenderDamage(attacker, damage, game); } else if (!blockerOrder.isEmpty()) { // Assign the damge left to first blocker