From 639c20123cfc9110e8eb6b9bf0edec693073a3fb Mon Sep 17 00:00:00 2001 From: TRT <> Date: Fri, 27 Jan 2023 10:34:56 +0100 Subject: [PATCH 1/2] Fix Agrus Kos free target selection for triggers --- forge-ai/src/main/java/forge/ai/PlayerControllerAi.java | 2 +- forge-gui/src/main/java/forge/player/PlayerControllerHuman.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 74b6b1bc93c..9468f0c5c93 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -1081,7 +1081,7 @@ public class PlayerControllerAi extends PlayerController { @Override public void orderAndPlaySimultaneousSa(List activePlayerSAs) { for (final SpellAbility sa : getAi().orderPlaySa(activePlayerSAs)) { - if (sa.isTrigger()) { + if (sa.isTrigger() && !sa.isCopied()) { if (prepareSingleSa(sa.getHostCard(), sa, true)) { ComputerUtil.playStack(sa, player, getGame()); } diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 655e12e6416..5be6ea181a3 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1935,7 +1935,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont } for (int i = orderedSAs.size() - 1; i >= 0; i--) { final SpellAbility next = orderedSAs.get(i); - if (next.isTrigger()) { + if (next.isTrigger() && !next.isCopied()) { HumanPlay.playSpellAbility(this, player, next); } else { if (next.isCopied()) { From 4162ec4cebfaa96f056bee44f4c54cfd284f80b4 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Fri, 27 Jan 2023 13:48:19 +0100 Subject: [PATCH 2/2] Clean up --- .../src/main/java/forge/ai/ability/DamageDealAi.java | 10 ++++------ .../main/java/forge/game/ability/AbilityUtils.java | 11 ----------- .../res/cardsfolder/h/hidetsugus_second_rite.txt | 2 -- 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index 4e17ebad454..72a10b7f736 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -738,11 +738,7 @@ public class DamageDealAi extends DamageAiBase { dump = true; } final int assignedDamage = dump ? dmg : ComputerUtilCombat.getEnoughDamageToKill(c, dmg, source, false, noPrevention); - if (assignedDamage <= dmg) { - sa.addDividedAllocation(c, assignedDamage); - } else { - sa.addDividedAllocation(c, dmg); - } + sa.addDividedAllocation(c, Math.min(assignedDamage, dmg)); dmg = dmg - assignedDamage; if (dmg <= 0) { break; @@ -752,10 +748,12 @@ public class DamageDealAi extends DamageAiBase { } } else if ("OppAtTenLife".equals(logic)) { for (final Player p : ai.getOpponents()) { - if (sa.canTarget(p) && p.getLife() == 10 && tcs.size() < tgt.getMaxTargets(source, sa)) { + if (sa.canTarget(p) && p.getLife() == 10) { tcs.add(p); + return true; } } + return false; } // TODO: Improve Damage, we shouldn't just target the player just because we can if (sa.canTarget(enemy) && tcs.size() < tgt.getMaxTargets(source, sa)) { diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 9df276d0a21..cbc04587ae3 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1961,17 +1961,6 @@ public class AbilityUtils { } // end ctb != null - if (sq[0].contains("OppsAtLifeTotal")) { - final int lifeTotal = calculateAmount(c, sq[1], ctb); - int number = 0; - for (final Player opp : player.getOpponents()) { - if (opp.getLife() == lifeTotal) { - number++; - } - } - return doXMath(number, expr, c, ctb); - } - //Count$SearchedLibrary. if (sq[0].contains("SearchedLibrary")) { int sum = 0; diff --git a/forge-gui/res/cardsfolder/h/hidetsugus_second_rite.txt b/forge-gui/res/cardsfolder/h/hidetsugus_second_rite.txt index 462a8221dac..58c18193101 100644 --- a/forge-gui/res/cardsfolder/h/hidetsugus_second_rite.txt +++ b/forge-gui/res/cardsfolder/h/hidetsugus_second_rite.txt @@ -3,6 +3,4 @@ ManaCost:3 R Types:Instant A:SP$ DealDamage | Cost$ 3 R | ValidTgts$ Player | TgtPrompt$ Select target player | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ10 | NumDmg$ 10 | AILogic$ OppAtTenLife | SpellDescription$ If target player has exactly 10 life, CARDNAME deals 10 damage to that player. SVar:X:TargetedPlayer$LifeTotal -SVar:Y:Count$OppsAtLifeTotal.10 -SVar:NeedsToPlayVar:Y GE1 Oracle:If target player has exactly 10 life, Hidetsugu's Second Rite deals 10 damage to that player.