diff --git a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java index f0cf10e2205..5772ba2dfb4 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java @@ -181,7 +181,7 @@ public class CharmAi extends SpellAbilityAi { } else if (ai.canGainLife() && aiLife <= 5) { // critical Life try to gain more chosenList.add(gain); - } else if (!ai.canGainLife() && aiLife == 14 ) { + } else if (!ai.canGainLife() && aiLife == 14) { // ai cant gain life, but try to avoid falling to 13 // but if a opponent does control Tainted Remedy its irrelevant chosenList.add(oppTainted ? lose : gain); diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 18438a11640..47c18d7aa0e 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -2260,10 +2260,12 @@ public class GameAction { public void dealDamage(final boolean isCombat, final CardDamageMap damageMap, final CardDamageMap preventMap, final GameEntityCounterTable counterTable, final SpellAbility cause) { // Clear assigned damage if is combat - for (Map.Entry> et : damageMap.columnMap().entrySet()) { - final GameEntity ge = et.getKey(); - if (isCombat && ge instanceof Card) { - ((Card) ge).clearAssignedDamage(); + if (isCombat) { + for (Map.Entry> et : damageMap.columnMap().entrySet()) { + final GameEntity ge = et.getKey(); + if (ge instanceof Card) { + ((Card) ge).clearAssignedDamage(); + } } } @@ -2282,7 +2284,7 @@ public class GameAction { sum += e.getValue(); } - if (sourceLKI.hasKeyword(Keyword.LIFELINK)) { + if (sum > 0 && sourceLKI.hasKeyword(Keyword.LIFELINK)) { sourceLKI.getController().gainLife(sum, sourceLKI, cause); } } 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 7fe677a4580..f95a6bddfee 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 @@ -262,11 +262,20 @@ public class DamageDealEffect extends DamageBaseEffect { 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); + if (sa.hasParam("ExcessDamage") || sa.hasParam("ExcessSVar")) { + int lethalPW = 0; + int lethalCreature = 0; + if (c.isCreature()) { + lethalCreature = Math.max(0, c.getLethalDamage()); + if (sourceLKI.hasKeyword(Keyword.DEATHTOUCH)) { + lethalCreature = Math.min(lethalCreature, 1); + } } + if (c.isPlaneswalker()) { + lethalPW = c.getCurrentLoyalty(); + } + // 120.4a + int lethal = Math.min(lethalPW, lethalCreature); dmgToTarget = Math.min(lethal, dmg); excess = dmg - dmgToTarget; }