diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index 0dd4d61b2e4..64d39872810 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -123,6 +123,11 @@ public class AiAttackController { } for (SpellAbility sa : c.getSpellAbilities()) { if (sa.getApi() == ApiType.Animate) { + if (sa.hasParam("Crew")) { + if (!ComputerUtilCombat.canCrew(defender, sa)) { + continue; + } + } if (ComputerUtilCost.canPayCost(sa, defender) && sa.getRestrictions().checkOtherRestrictions(c, sa, defender)) { Card animatedCopy = CardFactory.copyCard(c, true); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 56b3b7747d5..291d0d69345 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -45,6 +45,7 @@ import forge.game.trigger.Trigger; import forge.game.trigger.TriggerHandler; import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; +import forge.util.TextUtil; import forge.util.collect.FCollection; import java.util.ArrayList; @@ -2376,6 +2377,25 @@ public class ComputerUtilCombat { } return original; } + + /** + * Returns true if the given player p can crew a vehicle with the crew spell ability crewSA. + * @param p player to test + * @param crewSa Crew spell ability on an artifact vehicle + * @return true if a vehicle can be crewed at this moment, false otherwise + */ + public final static boolean canCrew(Player p, SpellAbility crewSa) { + int totPower = 0; + for (Card c : p.getZone(ZoneType.Battlefield).getCards()) { + if (c.isCreature() && !c.isTapped()) { + totPower += c.getCurrentPower(); + } + } + + int crewReq = Integer.parseInt(TextUtil.split(crewSa.getParam("CostDesc"), ' ', 3)[1]); + + return totPower >= crewReq; + } }