diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 770aa52158e..e3b5fc0f092 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -324,6 +324,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { private SpellAbility[] basicLandAbilities = new SpellAbility[MagicColor.WUBRG.length]; private int planeswalkerAbilityActivated; + private boolean planeswalkerActivationLimitUsed; private final ActivationTable numberTurnActivations = new ActivationTable(); private final ActivationTable numberGameActivations = new ActivationTable(); @@ -7149,11 +7150,19 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public void addPlaneswalkerAbilityActivated() { - planeswalkerAbilityActivated++; + // track if increased limit was used for activation because if there are also additional ones they can count on top + if (++planeswalkerAbilityActivated == 2 && StaticAbilityNumLoyaltyAct.limitIncrease(this)) { + planeswalkerActivationLimitUsed = true; + } + } + + public boolean planeswalkerActivationLimitUsed() { + return planeswalkerActivationLimitUsed; } public void resetActivationsPerTurn() { planeswalkerAbilityActivated = 0; + planeswalkerActivationLimitUsed = false; numberTurnActivations.clear(); } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java index b22803c1936..536c140727e 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java @@ -475,12 +475,15 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { } if (sa.isPwAbility()) { - final int initialLimit = StaticAbilityNumLoyaltyAct.limitIncrease(c) ? 1 : 0; - final int limit = StaticAbilityNumLoyaltyAct.additionalActivations(c, sa) + initialLimit; - int numActivates = c.getPlaneswalkerAbilityActivated(); - if (numActivates > limit) { - return false; + int limit = StaticAbilityNumLoyaltyAct.limitIncrease(c) ? 2 : 1; + + if (numActivates >= limit) { + // increased limit only counts if it's been used already + limit += StaticAbilityNumLoyaltyAct.additionalActivations(c, sa) - (limit == 1 || c.planeswalkerActivationLimitUsed() ? 0 : 1); + if (numActivates >= limit) { + return false; + } } }