From a2de2ba7edb827b34e1614274daf40ce33fbad0c Mon Sep 17 00:00:00 2001 From: Michael Kamensky Date: Sat, 30 Oct 2021 17:37:38 +0300 Subject: [PATCH] - ChooseNumberAi: logic for By Invitation Only. --- forge-ai/src/main/java/forge/ai/AiController.java | 6 ++++++ .../main/java/forge/ai/ability/ChooseNumberAi.java | 14 +++++++++++++- .../cardsfolder/upcoming/by_invitation_only.txt | 3 +-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index d8728803d39..4eb070a1179 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1892,6 +1892,12 @@ public class AiController { return AbilityUtils.calculateAmount(source, source.getSVar("EnergyToPay"), sa); } else if ("Vermin".equals(logic)) { return MyRandom.getRandom().nextInt(Math.max(player.getLife() - 5, 0)); + } else if ("SweepCreatures".equals(logic)) { + int maxCreatures = 0; + for (Player opp : player.getOpponents()) { + maxCreatures = Math.max(maxCreatures, opp.getCreaturesInPlay().size()); + } + return Math.min(13, maxCreatures); } return max; } diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseNumberAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseNumberAi.java index 639baa92c40..2c5d603cfaa 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseNumberAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseNumberAi.java @@ -11,9 +11,21 @@ public class ChooseNumberAi extends SpellAbilityAi { @Override protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { - if (!sa.hasParam("AILogic")) { + String aiLogic = sa.getParamOrDefault("AILogic", ""); + + if (aiLogic.isEmpty()) { return false; + } else if (aiLogic.equals("SweepCreatures")) { + int ownCreatureCount = aiPlayer.getCreaturesInPlay().size(); + int oppMaxCreatureCount = 0; + for (Player opp : aiPlayer.getOpponents()) { + oppMaxCreatureCount = Math.max(oppMaxCreatureCount, opp.getCreaturesInPlay().size()); + } + + // TODO: maybe check if the AI is actually pressured and/or check the total value of the creatures on both sides of the board + return ownCreatureCount > oppMaxCreatureCount + 2 || ownCreatureCount < oppMaxCreatureCount; } + TargetRestrictions tgt = sa.getTargetRestrictions(); if (tgt != null) { sa.resetTargets(); diff --git a/forge-gui/res/cardsfolder/upcoming/by_invitation_only.txt b/forge-gui/res/cardsfolder/upcoming/by_invitation_only.txt index d87b6d52d3b..22bdd3f1b11 100644 --- a/forge-gui/res/cardsfolder/upcoming/by_invitation_only.txt +++ b/forge-gui/res/cardsfolder/upcoming/by_invitation_only.txt @@ -1,8 +1,7 @@ Name:By Invitation Only ManaCost:3 W W Types:Sorcery -A:SP$ ChooseNumber | Defined$ You | Min$ 0 | Max$ 13 | SubAbility$ DBSac | StackDescription$ SpellDescription | SpellDescription$ Choose a number between 0 and 13. Each player sacrifices that many creatures. +A:SP$ ChooseNumber | Defined$ You | Min$ 0 | Max$ 13 | SubAbility$ DBSac | AILogic$ SweepCreatures | StackDescription$ SpellDescription | SpellDescription$ Choose a number between 0 and 13. Each player sacrifices that many creatures. SVar:DBSac:DB$ Sacrifice | Defined$ Player | SacValid$ Creature | Amount$ X | StackDescription$ None SVar:X:Count$ChosenNumber -AI:RemoveDeck:All Oracle:Choose a number between 0 and 13. Each player sacrifices that many creatures.