diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeAssignedToSkirmishModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeAssignedToSkirmishModifier.java index e26d7b80b..7d26223db 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeAssignedToSkirmishModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeAssignedToSkirmishModifier.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; @@ -13,6 +14,10 @@ public class CantBeAssignedToSkirmishModifier extends AbstractModifier { super(source, "Can't be assigned to skirmish", affectFilter, new ModifierEffect[]{ModifierEffect.ASSIGNMENT_MODIFIER}); } + public CantBeAssignedToSkirmishModifier(PhysicalCard source, Condition condition, Filter affectFilter) { + super(source, "Can't be assigned to skirmish", affectFilter, condition, new ModifierEffect[]{ModifierEffect.ASSIGNMENT_MODIFIER}); + } + @Override public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) { return false; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/HasToMoveIfPossibleModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/HasToMoveIfPossibleModifier.java deleted file mode 100644 index e30881786..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/HasToMoveIfPossibleModifier.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.gempukku.lotro.cards.modifiers; - -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; - -public class HasToMoveIfPossibleModifier extends AbstractModifier { - public HasToMoveIfPossibleModifier(PhysicalCard source) { - super(source, "Has to move if possible", null, new ModifierEffect[]{ModifierEffect.MOVE_LIMIT_MODIFIER}); - } - - @Override - public boolean hasToMoveIfPossible() { - return true; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/SpecialFlagModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/SpecialFlagModifier.java new file mode 100644 index 000000000..b283ba174 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/SpecialFlagModifier.java @@ -0,0 +1,20 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; + +public class SpecialFlagModifier extends AbstractModifier { + private ModifierFlag _modifierFlag; + + public SpecialFlagModifier(PhysicalCard source, ModifierFlag modifierFlag) { + super(source, "Special flag set", null, new ModifierEffect[]{ModifierEffect.SPECIAL_FLAG_MODIFIER}); + _modifierFlag = modifierFlag; + } + + @Override + public boolean hasFlagActive(ModifierFlag modifierFlag) { + return modifierFlag == _modifierFlag; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java index e384858f0..f40249268 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java @@ -18,6 +18,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.WoundCharactersEffect; import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; @@ -58,7 +59,7 @@ public class Card1_001 extends AbstractAttachable { @Override public List getOptionalBeforeActions(final String playerId, LotroGame game, Effect effect, final PhysicalCard self) { if (effect.getType() == EffectResult.Type.WOUND - && !game.getGameState().isCancelRingText()) { + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) { WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) { List actions = new LinkedList(); @@ -93,7 +94,7 @@ public class Card1_001 extends AbstractAttachable { public List getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) { if (effect.getType() == EffectResult.Type.WOUND && game.getGameState().isWearingRing() - && !game.getGameState().isCancelRingText()) { + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) { WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) { RequiredTriggerAction action = new RequiredTriggerAction(self); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java index 2424b397f..5daf5571a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java @@ -17,6 +17,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.WoundCharactersEffect; import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; @@ -57,7 +58,7 @@ public class Card1_002 extends AbstractAttachable { public List getOptionalBeforeActions(final String playerId, LotroGame game, Effect effect, final PhysicalCard self) { if (game.getGameState().getCurrentPhase() == Phase.SKIRMISH && effect.getType() == EffectResult.Type.WOUND - && !game.getGameState().isCancelRingText()) { + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) { WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) { List actions = new LinkedList(); @@ -92,7 +93,7 @@ public class Card1_002 extends AbstractAttachable { public List getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) { if (effect.getType() == EffectResult.Type.WOUND && game.getGameState().isWearingRing() - && !game.getGameState().isCancelRingText()) { + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) { WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) { List actions = new LinkedList(); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java index ce38d947e..6aae90e29 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java @@ -3,15 +3,16 @@ package com.gempukku.lotro.cards.set1.wraith; import com.gempukku.lotro.cards.AbstractResponseEvent; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.Skirmish; import com.gempukku.lotro.logic.effects.AssignmentEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.UnrespondableEffect; @@ -55,17 +56,9 @@ public class Card1_224 extends AbstractResponseEvent { protected void cardSelected(PhysicalCard nazgul) { PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()); action.appendEffect(new AssignmentEffect(playerId, ringBearer, Collections.singletonList(nazgul), "Return to Its Master effect")); - game.getGameState().setCancelRingText(true); - game.getActionsEnvironment().addUntilStartOfPhaseActionProxy( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.END_OF_PHASE - && lotroGame.getGameState().getCurrentPhase() == Phase.SKIRMISH) - game.getGameState().setCancelRingText(false); - return null; - } - }, Phase.REGROUP); + action.appendEffect( + new AddUntilEndOfPhaseModifierEffect( + new SpecialFlagModifier(self, ModifierFlag.RING_TEXT_INACTIVE), Phase.SKIRMISH)); } }); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_068.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_068.java index 79c4e3bb8..1af65834b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_068.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_068.java @@ -18,9 +18,7 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.WoundCharactersEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.*; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; @@ -50,6 +48,12 @@ public class Card3_068 extends AbstractMinion { List modifiers = new LinkedList(); modifiers.add( new CantTakeWoundsModifier(self, + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); + } + }, Filters.and( Filters.sameCard(self), new Filter() { @@ -59,7 +63,14 @@ public class Card3_068 extends AbstractMinion { } }))); modifiers.add( - new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self))); + new CantBeAssignedToSkirmishModifier(self, + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); + } + }, + Filters.sameCard(self))); modifiers.add( new KeywordModifier(self, Filters.race(Race.URUK_HAI), Keyword.FIERCE)); return modifiers; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_069.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_069.java index 4ceb3d001..3c35dd494 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_069.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_069.java @@ -15,7 +15,9 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.effects.AssignmentEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; @@ -46,6 +48,12 @@ public class Card3_069 extends AbstractMinion { List modifiers = new LinkedList(); modifiers.add( new CantTakeWoundsModifier(self, + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); + } + }, Filters.and( Filters.sameCard(self), new Filter() { @@ -55,7 +63,14 @@ public class Card3_069 extends AbstractMinion { } }))); modifiers.add( - new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self))); + new CantBeAssignedToSkirmishModifier(self, + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); + } + }, + Filters.sameCard(self))); return modifiers; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java index 4ea8637cd..f16a063bf 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java @@ -20,6 +20,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.WoundCharactersEffect; import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; @@ -57,7 +58,7 @@ public class Card4_001 extends AbstractAttachable { new Condition() { @Override public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { - return !gameState.isCancelRingText() && gameState.isWearingRing(); + return !modifiersQuerying.hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE) && gameState.isWearingRing(); } }, 2)); @@ -67,7 +68,7 @@ public class Card4_001 extends AbstractAttachable { @Override protected List getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) { if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self) - && !game.getGameState().isCancelRingText()) { + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) { ActivateCardAction action = new ActivateCardAction(self, Keyword.SKIRMISH); action.appendCost( new AddBurdenEffect(self, 1)); @@ -96,7 +97,7 @@ public class Card4_001 extends AbstractAttachable { public List getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) { if (effect.getType() == EffectResult.Type.WOUND && game.getGameState().isWearingRing() - && !game.getGameState().isCancelRingText()) { + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) { WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) { RequiredTriggerAction action = new RequiredTriggerAction(self); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_030.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_030.java index 98420cacf..2d01e9ac9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_030.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_030.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set4.dunland; import com.gempukku.lotro.cards.AbstractAttachable; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.HasToMoveIfPossibleModifier; +import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; @@ -11,6 +11,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.Action; import java.util.Collections; @@ -44,7 +45,7 @@ public class Card4_030 extends AbstractAttachable { new DiscardCardsFromPlayEffect(self, self)); action.appendEffect( new AddUntilEndOfPhaseModifierEffect( - new HasToMoveIfPossibleModifier(self), Phase.REGROUP)); + new SpecialFlagModifier(self, ModifierFlag.HAS_TO_MOVE_IF_POSSIBLE), Phase.REGROUP)); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_033.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_033.java index 6af94f62f..c6ea3a0ae 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_033.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_033.java @@ -9,11 +9,15 @@ import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; @@ -40,7 +44,14 @@ public class Card4_033 extends AbstractMinion { @Override public List getAlwaysOnModifiers(PhysicalCard self) { return Collections.singletonList( - new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self))); + new CantBeAssignedToSkirmishModifier(self, + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); + } + }, + Filters.sameCard(self))); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_173.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_173.java index 891d50bf7..d318064a1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_173.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_173.java @@ -16,6 +16,7 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; @@ -49,11 +50,18 @@ public class Card4_173 extends AbstractMinion { new Condition() { @Override public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { - return gameState.getCurrentPhase() == Phase.ARCHERY; + return gameState.getCurrentPhase() == Phase.ARCHERY && !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); } }, Filters.sameCard(self))); modifiers.add( - new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self))); + new CantBeAssignedToSkirmishModifier(self, + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE); + } + }, + Filters.sameCard(self))); return modifiers; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_174.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_174.java new file mode 100644 index 000000000..34ccec071 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_174.java @@ -0,0 +1,67 @@ +package com.gempukku.lotro.cards.set4.isengard; + +import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; +import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * Set: The Two Towers + * Side: Shadow + * Culture: Isengard + * Twilight Cost: 2 + * Type: Artifact + * Strength: +2 + * Game Text: Plays on Saruman. He is fierce and damage +1. Maneuver: Make the first sentence of Saruman's game text + * not apply until the regroup phase. + */ +public class Card4_174 extends AbstractAttachable { + public Card4_174() { + super(Side.SHADOW, CardType.ARTIFACT, 2, Culture.ISENGARD, Keyword.STAFF, "Saruman's Staff", true); + } + + @Override + protected Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { + return Filters.name("Saruman"); + } + + @Override + public List getAlwaysOnModifiers(PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new StrengthModifier(self, Filters.hasAttached(self), 2)); + modifiers.add( + new KeywordModifier(self, Filters.hasAttached(self), Keyword.FIERCE)); + modifiers.add( + new KeywordModifier(self, Filters.hasAttached(self), Keyword.DAMAGE)); + return modifiers; + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.MANEUVER, self, 0) + && !game.getModifiersQuerying().hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE)) { + ActivateCardAction action = new ActivateCardAction(self, Keyword.MANEUVER); + action.appendEffect( + new AddUntilStartOfPhaseModifierEffect( + new SpecialFlagModifier(self, ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE), Phase.REGROUP)); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index 6b8dfb633..b406077fd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -29,7 +29,6 @@ public class GameState { private int _moveCount; private boolean _fierceSkirmishes; private boolean _wearingRing; - private boolean _cancelRingText; private Map _playerPosition = new HashMap(); private Map> _cardTokens = new HashMap>(); @@ -90,14 +89,6 @@ public class GameState { return _wearingRing; } - public void setCancelRingText(boolean cancelRingText) { - _cancelRingText = cancelRingText; - } - - public boolean isCancelRingText() { - return _cancelRingText; - } - public PlayerOrder getPlayerOrder() { return _playerOrder; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index fc45b0768..b74a61c18 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -206,7 +206,7 @@ public abstract class AbstractModifier implements Modifier { } @Override - public boolean hasToMoveIfPossible() { + public boolean hasFlagActive(ModifierFlag modifierFlag) { return false; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index 4abe5aaa3..02d64f14c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -82,5 +82,5 @@ public interface Modifier { public int getSpotCount(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter, int result); - public boolean hasToMoveIfPossible(); + public boolean hasFlagActive(ModifierFlag modifierFlag); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java index 1c0a9d2e9..20aaf7690 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java @@ -4,5 +4,8 @@ public enum ModifierEffect { KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, WOUND_MODIFIER, PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, - LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER + LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, + + + SPECIAL_FLAG_MODIFIER } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierFlag.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierFlag.java new file mode 100644 index 000000000..e8ea3b9b8 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierFlag.java @@ -0,0 +1,5 @@ +package com.gempukku.lotro.logic.modifiers; + +public enum ModifierFlag { + HAS_TO_MOVE_IF_POSSIBLE, RING_TEXT_INACTIVE, SARUMAN_FIRST_SENTENCE_INACTIVE +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index 27a4a8d5e..75fc81bf1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -469,9 +469,9 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } @Override - public boolean hasToMoveIfPossible() { - for (Modifier modifier : getModifiers(ModifierEffect.MOVE_LIMIT_MODIFIER)) - if (modifier.hasToMoveIfPossible()) + public boolean hasFlagActive(ModifierFlag modifierFlag) { + for (Modifier modifier : getModifiers(ModifierEffect.SPECIAL_FLAG_MODIFIER)) + if (modifier.hasFlagActive(modifierFlag)) return true; return false; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index 47e3cddba..f7506f1c6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -25,7 +25,7 @@ public interface ModifiersQuerying { public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card); - + // Move limit public int getMoveLimit(GameState gameState, int baseMoveLimit); // Twilight cost @@ -80,5 +80,5 @@ public interface ModifiersQuerying { public int getSpotCount(GameState gameState, Filter filter, int inPlayCount); - public boolean hasToMoveIfPossible(); + public boolean hasFlagActive(ModifierFlag modifierFlag); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/FellowshipPlayerChoosesToMoveOrStayGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/FellowshipPlayerChoosesToMoveOrStayGameProcess.java index 4fdc84732..deb5af713 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/FellowshipPlayerChoosesToMoveOrStayGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/FellowshipPlayerChoosesToMoveOrStayGameProcess.java @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.processes.GameProcess; import com.gempukku.lotro.logic.timing.processes.turn.ShadowPhasesGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.general.EndOfPhaseGameProcess; @@ -22,7 +23,7 @@ public class FellowshipPlayerChoosesToMoveOrStayGameProcess implements GameProce public void process() { final GameState gameState = _game.getGameState(); if (gameState.getMoveCount() < _game.getModifiersQuerying().getMoveLimit(gameState, 2)) { - if (_game.getModifiersQuerying().hasToMoveIfPossible()) { + if (_game.getModifiersQuerying().hasFlagActive(ModifierFlag.HAS_TO_MOVE_IF_POSSIBLE)) { _nextProcess = new MovementGameProcess(_game, new EndOfPhaseGameProcess(_game, Phase.REGROUP, new ShadowPhasesGameProcess(_game)));