diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java index 7a977dd6f..02335dae7 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java @@ -331,7 +331,8 @@ public class PlayConditions { } public static boolean canRemoveAnyCultureTokens(LotroGame game, int count, Filterable... fromFilters) { - return Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.and(fromFilters, Filters.hasAnyCultureTokens(count))); + return !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS) + && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.and(fromFilters, Filters.hasAnyCultureTokens(count))); } public static boolean canRemoveTokens(LotroGame game, PhysicalCard from, Token token) { @@ -339,10 +340,12 @@ public class PlayConditions { } public static boolean canRemoveTokens(LotroGame game, PhysicalCard from, Token token, int count) { - return game.getGameState().getTokenCount(from, token) >= count; + return !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS) + && game.getGameState().getTokenCount(from, token) >= count; } public static boolean canRemoveTokens(LotroGame game, Token token, int count, Filterable... fromFilters) { - return Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.and(fromFilters, Filters.hasToken(token, count))).size() > 0; + return !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS) + && Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.and(fromFilters, Filters.hasToken(token, count))).size() > 0; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddTokenEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddTokenEffect.java index 3cc9d7b10..72e220d16 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddTokenEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddTokenEffect.java @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.Token; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Effect; @@ -26,7 +27,7 @@ public class AddTokenEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return _target.getZone().isInPlay(); + return _target.getZone().isInPlay() && !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReinforceTokenEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReinforceTokenEffect.java index 6adb026de..5a6228092 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReinforceTokenEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReinforceTokenEffect.java @@ -1,10 +1,14 @@ package com.gempukku.lotro.cards.effects; import com.gempukku.lotro.common.Token; +import com.gempukku.lotro.filters.Filter; 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.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; public class ReinforceTokenEffect extends ChooseActiveCardEffect { private Token _token; @@ -15,7 +19,13 @@ public class ReinforceTokenEffect extends ChooseActiveCardEffect { } public ReinforceTokenEffect(PhysicalCard source, String playerId, Token token, int count) { - super(source, playerId, "Choose card to reinforce", Filters.owner(playerId), Filters.hasToken(token)); + super(source, playerId, "Choose card to reinforce", Filters.owner(playerId), Filters.hasToken(token), + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return !modifiersQuerying.hasFlagActive(gameState, ModifierFlag.CANT_TOUCH_CULTURE_TOKENS); + } + }); _token = token; _count = count; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemoveTokenEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemoveTokenEffect.java index 5406ace44..8a21c5ee6 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemoveTokenEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemoveTokenEffect.java @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.Token; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Effect; @@ -26,7 +27,8 @@ public class RemoveTokenEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return game.getGameState().getTokenCount(_target, _token) >= _count; + return game.getGameState().getTokenCount(_target, _token) >= _count + && !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS); } @Override @@ -41,13 +43,17 @@ public class RemoveTokenEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - int tokenCount = game.getGameState().getTokenCount(_target, _token); - int removeTokens = Math.min(tokenCount, _count); - if (removeTokens > 0) { - game.getGameState().removeTokens(_target, _token, removeTokens); - game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " removed " + removeTokens + " " + _token + " token" + ((removeTokens > 1) ? "s" : "") + " from " + GameUtils.getCardLink(_target)); - } + if (!game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS)) { + int tokenCount = game.getGameState().getTokenCount(_target, _token); + int removeTokens = Math.min(tokenCount, _count); + if (removeTokens > 0) { + game.getGameState().removeTokens(_target, _token, removeTokens); + game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " removed " + removeTokens + " " + _token + " token" + ((removeTokens > 1) ? "s" : "") + " from " + GameUtils.getCardLink(_target)); + } - return new FullEffectResult(removeTokens == _count, removeTokens == _count); + return new FullEffectResult(removeTokens == _count, removeTokens == _count); + } else { + return new FullEffectResult(false, false); + } } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndRemoveCultureTokensFromCardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndRemoveCultureTokensFromCardEffect.java index 25e7f92dc..814e29fee 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndRemoveCultureTokensFromCardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndRemoveCultureTokensFromCardEffect.java @@ -7,6 +7,7 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; public class ChooseAndRemoveCultureTokensFromCardEffect extends ChooseActiveCardEffect { private Token _token; @@ -20,6 +21,9 @@ public class ChooseAndRemoveCultureTokensFromCardEffect extends ChooseActiveCard @Override protected Filter getExtraFilterForPlaying(LotroGame game) { + if (game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.CANT_TOUCH_CULTURE_TOKENS)) + return Filters.none; + if (_token != null) return Filters.hasToken(_token, _count); else diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/site/Card13_194.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/site/Card13_194.java index 10ab3e4be..62d0ce215 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/site/Card13_194.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/site/Card13_194.java @@ -2,6 +2,10 @@ package com.gempukku.lotro.cards.set13.site; import com.gempukku.lotro.cards.AbstractNewSite; import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; +import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier; /** * Set: Bloodlines @@ -15,5 +19,8 @@ public class Card13_194 extends AbstractNewSite { addKeyword(Keyword.MOUNTAIN); } - // TODO - make this card work + @Override + public Modifier getAlwaysOnModifier(PhysicalCard self) { + return new SpecialFlagModifier(self, ModifierFlag.CANT_TOUCH_CULTURE_TOKENS); + } } 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 index 7dc3bbb79..bb4285eb2 100644 --- 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 @@ -9,6 +9,7 @@ public enum ModifierFlag { RING_BEARER_CANT_TAKE_THREAT_WOUNDS, SKIRMISH_ORDER_BY_FIRST_SHADOW_PLAYER, CANT_PREVENT_WOUNDS, + CANT_TOUCH_CULTURE_TOKENS, TRANSFERS_FOR_FREE, SHADOW_PLAYER_REPLACED_CURRENT_SITE }