From 41d2c28891c12fce800ac636a14bca7e7f42ee8e Mon Sep 17 00:00:00 2001 From: tool4ever Date: Fri, 5 Apr 2024 15:22:45 +0200 Subject: [PATCH] Update some scripts (#4949) * Simplify bad effects --- .../main/java/forge/ai/PlayerControllerAi.java | 4 ++-- .../main/java/forge/ai/ability/DestroyAi.java | 1 + .../src/main/java/forge/ai/ability/PumpAi.java | 18 ------------------ .../java/forge/ai/simulation/GameCopier.java | 2 +- .../java/forge/game/ability/AbilityUtils.java | 2 +- .../ability/effects/ControlSpellEffect.java | 4 ---- .../forge/game/ability/effects/PumpEffect.java | 14 ++++++++++++-- .../main/java/forge/game/player/Player.java | 10 +++++----- .../java/forge/game/player/PlayerProperty.java | 2 +- .../main/java/forge/game/zone/MagicStack.java | 2 +- .../res/cardsfolder/a/ashnods_battle_gear.txt | 5 +---- forge-gui/res/cardsfolder/a/aven_shrine.txt | 8 +++----- forge-gui/res/cardsfolder/c/cabal_shrine.txt | 8 +++----- .../res/cardsfolder/d/dong_zhou_the_tyrant.txt | 7 +++---- forge-gui/res/cardsfolder/d/dwarven_shrine.txt | 8 +++----- forge-gui/res/cardsfolder/e/endoskeleton.txt | 5 +---- forge-gui/res/cardsfolder/e/ether_well.txt | 13 ++++++------- .../res/cardsfolder/e/everglove_courier.txt | 5 +---- .../res/cardsfolder/e/expel_from_orazca.txt | 11 +++++------ .../res/cardsfolder/f/flamestick_courier.txt | 5 +---- .../res/cardsfolder/f/flowstone_armor.txt | 5 +---- .../res/cardsfolder/f/frightshroud_courier.txt | 5 +---- .../res/cardsfolder/g/ghosthelm_courier.txt | 5 +---- forge-gui/res/cardsfolder/i/invoke_justice.txt | 5 ++--- forge-gui/res/cardsfolder/n/nantuko_shrine.txt | 8 +++----- forge-gui/res/cardsfolder/o/oblivion_sower.txt | 8 +++----- .../res/cardsfolder/p/pattern_matcher.txt | 6 ++---- .../res/cardsfolder/p/pearlspear_courier.txt | 5 +---- ...rgg_dean_of_chaos_augusta_dean_of_order.txt | 2 +- .../res/cardsfolder/s/sewers_of_estark.txt | 2 +- forge-gui/res/cardsfolder/s/sirens_ruse.txt | 12 ++++-------- forge-gui/res/cardsfolder/s/spirit_shield.txt | 5 +---- forge-gui/res/cardsfolder/s/stench_of_evil.txt | 2 +- forge-gui/res/cardsfolder/s/sweep_away.txt | 13 ++++++------- .../res/cardsfolder/t/tawnoss_weaponry.txt | 6 +----- .../res/cardsfolder/t/touch_of_moonglove.txt | 4 ++-- .../res/cardsfolder/t/traveling_plague.txt | 6 ++---- forge-gui/res/cardsfolder/t/typhoon.txt | 2 +- .../cardsfolder/z/zedruu_the_greathearted.txt | 6 ++---- forge-gui/res/cardsfolder/z/zelyon_sword.txt | 5 +---- 40 files changed, 88 insertions(+), 158 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 268d311e81b..0f8f59d9dc9 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -774,8 +774,8 @@ public class PlayerControllerAi extends PlayerController { } break; case "BetterTgtThanRemembered": - if (source.hasRemembered()) { - Card rem = (Card) source.getFirstRemembered(); + if (source.hasGainControlTarget()) { + Card rem = source.getGainControlTargets().get(0); // avoid pumping opponent creature if (!rem.isInPlay() || rem.getController().isOpponentOf(source.getController())) { return true; diff --git a/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java b/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java index 829e27d5de1..de29d785a27 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java @@ -259,6 +259,7 @@ public class DestroyAi extends SpellAbilityAi { } } } else { + // TODO look for "exiled until leaves" of own stuff choice = ComputerUtilCard.getMostExpensivePermanentAI(list); } //option to hold removal instead only applies for single targeted removal diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 540414f922e..7134f0e078a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -21,7 +21,6 @@ import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; -import forge.game.staticability.StaticAbility; import forge.game.zone.ZoneType; import org.apache.commons.lang3.StringUtils; @@ -320,23 +319,6 @@ public class PumpAi extends PumpAiBase { } } - if ("ContinuousBonus".equals(aiLogic)) { - // P/T bonus in a continuous static ability - for (StaticAbility stAb : source.getStaticAbilities()) { - if ("Continuous".equals(stAb.getParam("Mode"))) { - if (stAb.hasParam("AddPower")) { - attack += AbilityUtils.calculateAmount(source, stAb.getParam("AddPower"), stAb); - } - if (stAb.hasParam("AddToughness")) { - defense += AbilityUtils.calculateAmount(source, stAb.getParam("AddToughness"), stAb); - } - if (stAb.hasParam("AddKeyword")) { - keywords.addAll(Lists.newArrayList(stAb.getParam("AddKeyword").split(" & "))); - } - } - } - } - if ((numDefense.contains("X") && defense == 0) || (numAttack.contains("X") && attack == 0 && !isBerserk)) { return false; } diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index 156947d3839..65cb4de08d5 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -88,7 +88,7 @@ public class GameCopier { newPlayer.setLifeLostLastTurn(origPlayer.getLifeLostLastTurn()); newPlayer.setLifeLostThisTurn(origPlayer.getLifeLostThisTurn()); newPlayer.setLifeGainedThisTurn(origPlayer.getLifeGainedThisTurn()); - newPlayer.setCommitedCrimeThisTurn(origPlayer.getCommitedCrimeThisTurn()); + newPlayer.setCommitedCrimeThisTurn(origPlayer.getCommittedCrimeThisTurn()); newPlayer.setLifeStartedThisTurnWith(origPlayer.getLifeStartedThisTurnWith()); newPlayer.setDamageReceivedThisTurn(origPlayer.getDamageReceivedThisTurn()); newPlayer.setActivateLoyaltyAbilityThisTurn(origPlayer.getActivateLoyaltyAbilityThisTurn()); 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 b212e8f1c30..b8dbddb36bc 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2228,7 +2228,7 @@ public class AbilityUtils { return doXMath(calculateAmount(c, sq[player.hasThreshold() ? 1 : 2], ctb), expr, c, ctb); } if (sq[0].equals("CommittedCrimeThisTurn")) { - return doXMath(calculateAmount(c, sq[player.getCommitedCrimeThisTurn() > 0 ? 1 : 2], ctb), expr, c, ctb); + return doXMath(calculateAmount(c, sq[player.getCommittedCrimeThisTurn() > 0 ? 1 : 2], ctb), expr, c, ctb); } if (sq[0].equals("ExtraTurn")) { return doXMath(calculateAmount(c, sq[game.getPhaseHandler().getPlayerTurn().isExtraTurn() ? 1 : 2], ctb), expr, c, ctb); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java index 31e7b9f5e37..700fc0fd86c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlSpellEffect.java @@ -88,10 +88,6 @@ public class ControlSpellEffect extends SpellAbilityEffect { } } - if (!tgtC.equals(sa.getHostCard()) && !sa.getHostCard().getGainControlTargets().contains(tgtC)) { - sa.getHostCard().addGainControlTarget(tgtC); - } - if (remember) { source.addRemembered(tgtC); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index ea0f0d3bac7..770ee02ef91 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -116,6 +116,8 @@ public class PumpEffect extends SpellAbilityEffect { @Override public void run() { + host.removeGainControlTargets(gameCard); + gameCard.removePTBoost(timestamp, 0); boolean updateText = gameCard.removeCanBlockAny(timestamp); updateText |= gameCard.removeCanBlockAdditional(timestamp); @@ -132,6 +134,9 @@ public class PumpEffect extends SpellAbilityEffect { game.fireEvent(new GameEventCardStatsChanged(gameCard)); } }; + if ("UntilUntaps".equals(duration)) { + host.addGainControlTarget(gameCard); + } addUntilCommand(sa, untilEOT); } game.fireEvent(new GameEventCardStatsChanged(gameCard)); @@ -264,8 +269,13 @@ public class PumpEffect extends SpellAbilityEffect { sb.append(" each combat"); } - if (!"Permanent".equals(sa.getParam("Duration"))) { - sb.append(" until end of turn."); + String duration = sa.getParam("Duration"); + if (!"Permanent".equals(duration)) { + if ("UntilUntaps".equals(duration)) { + sb.append(" for as long as CARDNAME remains tapped."); + } else { + sb.append(" until end of turn."); + } } else { sb.append("."); } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 6cca4c5883b..42b6460b2f9 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -99,7 +99,7 @@ public class Player extends GameEntity implements Comparable { private int lifeGainedThisTurn; private int lifeGainedTimesThisTurn; private int lifeGainedByTeamThisTurn; - private int commitedCrimeThisTurn; + private int committedCrimeThisTurn; private int numManaShards; private int numPowerSurgeLands; private int numLibrarySearchedOwn; //The number of times this player has searched his library @@ -3800,7 +3800,7 @@ public class Player extends GameEntity implements Comparable { public void commitCrime() { //boolean firstTime = this.commitedCrimeThisTurn == 0; - commitedCrimeThisTurn++; + committedCrimeThisTurn++; // Run triggers final Map runParams = AbilityKey.mapFromPlayer(this); @@ -3808,10 +3808,10 @@ public class Player extends GameEntity implements Comparable { } - public int getCommitedCrimeThisTurn() { - return commitedCrimeThisTurn; + public int getCommittedCrimeThisTurn() { + return committedCrimeThisTurn; } public void setCommitedCrimeThisTurn(int v) { - commitedCrimeThisTurn = v; + committedCrimeThisTurn = v; } } diff --git a/forge-game/src/main/java/forge/game/player/PlayerProperty.java b/forge-game/src/main/java/forge/game/player/PlayerProperty.java index 27658242532..8e52fed7a7d 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerProperty.java +++ b/forge-game/src/main/java/forge/game/player/PlayerProperty.java @@ -86,7 +86,7 @@ public class PlayerProperty { return false; } } else if (property.equals("committedCrimeThisTurn")) { - if (player.getCommitedCrimeThisTurn() < 1) return false; + if (player.getCommittedCrimeThisTurn() < 1) return false; } else if (property.equals("isMonarch")) { if (!player.isMonarch()) { return false; diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 4c85f5185a4..3a62527f307 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -831,7 +831,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable