diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index f5120fbcf80..1651cad4127 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1081,7 +1081,8 @@ public class AiController { if (!checkETBEffects(card, spell, null)) { return AiPlayDecision.BadEtbEffects; } - if (ComputerUtil.damageFromETB(player, card) >= player.getLife() && player.canLoseLife()) { + if (ComputerUtil.damageFromETB(player, card) >= player.getLife() && !player.cantLoseForZeroOrLessLife() + && player.canLoseLife()) { return AiPlayDecision.BadEtbEffects; } } @@ -1096,7 +1097,8 @@ public class AiController { CardCollection landsWannaPlay = getLandsToPlay(); if (landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand(null)) { Card land = chooseBestLandToPlay(landsWannaPlay); - if (ComputerUtil.damageFromETB(player, land) < player.getLife() || !player.canLoseLife()) { + if (ComputerUtil.damageFromETB(player, land) < player.getLife() || !player.canLoseLife() + || player.cantLoseForZeroOrLessLife() ) { game.PLAY_LAND_SURROGATE.setHostCard(land); final List abilities = new ArrayList(); abilities.add(game.PLAY_LAND_SURROGATE); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index 0328cdf97b6..d5c979ec672 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -177,7 +177,7 @@ public class ComputerUtilCost { amount = AbilityUtils.calculateAmount(source, payLife.getAmount(), sourceAbility); } - if ((ai.getLife() - amount) < remainingLife) { + if (ai.getLife() - amount < remainingLife && !ai.cantLoseForZeroOrLessLife()) { return false; } } @@ -322,6 +322,9 @@ public class ComputerUtilCost { for (final CostPart part : cost.getCostParts()) { if (part instanceof CostPayLife) { + if (!ai.cantLoseForZeroOrLessLife()) { + continue; + } final int remainingLife = ai.getLife(); final int lifeCost = ((CostPayLife) part).convertAmount(); if ((remainingLife - lifeCost) < 10) { diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index de1d6fd2d46..2cef1991eb5 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -212,7 +212,7 @@ public abstract class GameState { playerCards.put(kv.getKey(), processCardsForZone(value.isEmpty() ? new String[0] : value.split(";"), p)); } - if (life > 0) p.setLife(life, null); + if (life >= 0) p.setLife(life, null); for (Entry kv : playerCards.entrySet()) { if (kv.getKey() == ZoneType.Battlefield) { List cards = new ArrayList();