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