diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index dcf2ecd07e2..5e2b7a98a93 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1253,7 +1253,7 @@ public class AiController { for (final SpellAbility sa : getOriginalAndAltCostAbilities(all)) { // Don't add Counterspells to the "normal" playcard lookups - if (sa.getApi() == ApiType.Counter && skipCounter) { + if (skipCounter && sa.getApi() == ApiType.Counter) { continue; } sa.setActivatingPlayer(player); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index ed6393b1461..f1fd594487b 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -1019,18 +1019,6 @@ public class ComputerUtil { int defense = 0; boolean grantIndestructible = false; boolean grantShroud = false; - if (saviourApi == ApiType.Pump || saviourApi == ApiType.PumpAll) { - defense = saviour.hasParam("NumDef") ? - AbilityUtils.calculateAmount(saviour.getHostCard(), saviour.getParam("NumDef"), saviour) : 0; - final List keywords = saviour.hasParam("KW") ? - Arrays.asList(saviour.getParam("KW").split(" & ")) : new ArrayList(); - if (keywords.contains("Indestructible")) { - grantIndestructible = true; - } - if (keywords.contains("Hexproof") || keywords.contains("Shroud")) { - grantShroud = true; - } - } if (topStack == null) { return objects; @@ -1051,20 +1039,36 @@ public class ComputerUtil { } else if (topStack.hasParam("ValidCards")) { CardCollectionView battleField = aiPlayer.getCardsIn(ZoneType.Battlefield); objects = CardLists.getValidCards(battleField, topStack.getParam("ValidCards").split(","), source.getController(), source); + } else { + return threatened; } } else { objects = topStack.getTargets().getTargets(); - if (tgt != null) { - final ArrayList canBeTargeted = new ArrayList(); - for (Object o : objects) { - if (o instanceof Card) { - final Card c = (Card) o; - if (c.canBeTargetedBy(topStack)) { - canBeTargeted.add(c); - } + final ArrayList canBeTargeted = new ArrayList(); + for (Object o : objects) { + if (o instanceof Card) { + final Card c = (Card) o; + if (c.canBeTargetedBy(topStack)) { + canBeTargeted.add(c); } } - objects = canBeTargeted; + } + if (canBeTargeted.isEmpty()) { + return threatened; + } + objects = canBeTargeted; + } + + if (saviourApi == ApiType.Pump || saviourApi == ApiType.PumpAll) { + defense = saviour.hasParam("NumDef") ? + AbilityUtils.calculateAmount(saviour.getHostCard(), saviour.getParam("NumDef"), saviour) : 0; + final List keywords = saviour.hasParam("KW") ? + Arrays.asList(saviour.getParam("KW").split(" & ")) : new ArrayList(); + if (keywords.contains("Indestructible")) { + grantIndestructible = true; + } + if (keywords.contains("Hexproof") || keywords.contains("Shroud")) { + grantShroud = true; } } @@ -1274,7 +1278,7 @@ public class ComputerUtil { } } } - + Iterables.addAll(threatened, ComputerUtil.predictThreatenedObjects(aiPlayer, saviour, topStack.getSubAbility())); return threatened; } diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index a7790e4752f..ad4b19567f5 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -796,7 +796,7 @@ public class PlayerControllerAi extends PlayerController { if (!ai.getGame().getStack().isEmpty()) { final List objects = ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), null); for (Card c : blockers) { - if (objects.contains(c) && blockers.contains(c)) { + if (objects.contains(c)) { untappedCreats.add(c); } }