diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java index fc01ff79c7f..16cfaa14cdf 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java @@ -255,6 +255,16 @@ public class DamageDealEffect extends DamageBaseEffect { protected void internalDamageDeal(SpellAbility sa, Card sourceLKI, Card c, int dmg, CardDamageMap damageMap) { final Card hostCard = sa.getHostCard(); final Player activationPlayer = sa.getActivatingPlayer(); + int excess = 0; + int dmgToTarget = 0; + if (sa.hasParam("ExcessDamage") || (sa.hasParam("ExcessSVar"))) { + int lethal = c.getLethalDamage(); + if (sourceLKI.hasKeyword(Keyword.DEATHTOUCH)) { + lethal = Math.min(lethal, 1); + } + dmgToTarget = Math.min(lethal, dmg); + excess = dmg - dmgToTarget; + } if (sa.hasParam("Remove")) { c.setDamage(0); @@ -263,11 +273,6 @@ public class DamageDealEffect extends DamageBaseEffect { } else { if (sa.hasParam("ExcessDamage") && (!sa.hasParam("ExcessDamageCondition") || sourceLKI.isValid(sa.getParam("ExcessDamageCondition").split(","), activationPlayer, hostCard, sa))) { - int lethal = c.getLethalDamage(); - if (sourceLKI.hasKeyword(Keyword.DEATHTOUCH)) { - lethal = Math.min(lethal, 1); - } - int dmgToTarget = Math.min(lethal, dmg); damageMap.put(sourceLKI, c, dmgToTarget); @@ -276,10 +281,13 @@ public class DamageDealEffect extends DamageBaseEffect { list.addAll(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("ExcessDamage"), sa)); if (!list.isEmpty()) { - damageMap.put(sourceLKI, list.get(0), dmg - dmgToTarget); + damageMap.put(sourceLKI, list.get(0), excess); } } else { damageMap.put(sourceLKI, c, dmg); + if (sa.hasParam("ExcessSVar")) { + hostCard.setSVar(sa.getParam("ExcessSVar"), Integer.toString(excess)); + } } } }