From 0243ac26edc203507935a84ab0cc14b6feec01b5 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Fri, 25 Jan 2013 14:01:18 +0000 Subject: [PATCH] "Avoid Being Seen" --- ...AddNoTwilightForCompanionMoveModifier.java | 19 +++++++++ .../lotro/cards/set20/gondor/Card20_181.java | 41 +++++++++++++++++++ .../logic/modifiers/AbstractModifier.java | 5 +++ .../lotro/logic/modifiers/Modifier.java | 2 + .../lotro/logic/modifiers/ModifierEffect.java | 2 + .../lotro/logic/modifiers/ModifiersLogic.java | 10 ++++- .../logic/modifiers/ModifiersQuerying.java | 4 +- .../turn/move/MovementGameProcess.java | 12 +++++- 8 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/AddNoTwilightForCompanionMoveModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/gondor/Card20_181.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/AddNoTwilightForCompanionMoveModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/AddNoTwilightForCompanionMoveModifier.java new file mode 100644 index 000000000..b907429bd --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/AddNoTwilightForCompanionMoveModifier.java @@ -0,0 +1,19 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.common.Filterable; +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.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersLogic; + +public class AddNoTwilightForCompanionMoveModifier extends AbstractModifier { + public AddNoTwilightForCompanionMoveModifier(PhysicalCard source, Filterable affectFilter) { + super(source, "Adds no twilight for move", affectFilter, null, ModifierEffect.MOVE_TWILIGHT_MODIFIER); + } + + @Override + public boolean addsTwilightForCompanionMove(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard companion) { + return false; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/gondor/Card20_181.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/gondor/Card20_181.java new file mode 100644 index 000000000..bc012ce4f --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/gondor/Card20_181.java @@ -0,0 +1,41 @@ +package com.gempukku.lotro.cards.set20.gondor; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.modifiers.AddNoTwilightForCompanionMoveModifier; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; + +/** + * 0 + * Avoid Being Seen + * Gondor Event • Fellowship + * To play, exert X [Gondor] rangers. + * Until the end of turn, add no twilight for each exerted ranger when the fellowship moves. + */ +public class Card20_181 extends AbstractEvent { + public Card20_181() { + super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "Avoid Being Seen", Phase.FELLOWSHIP); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + final PlayEventAction action = new PlayEventAction(self); + action.appendCost( + new ChooseAndExertCharactersEffect(action, playerId, 0, Integer.MAX_VALUE, Culture.GONDOR, Keyword.RANGER){ + @Override + protected void forEachCardExertedCallback(PhysicalCard character) { + action.appendEffect( + new AddUntilEndOfTurnModifierEffect( + new AddNoTwilightForCompanionMoveModifier(self, character))); + } + }); + return action; + } +} 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 79d2b0c6e..4b514ab9d 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 @@ -187,6 +187,11 @@ public abstract class AbstractModifier implements Modifier { return 0; } + @Override + public boolean addsTwilightForCompanionMove(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard companion) { + return true; + } + @Override public boolean addsToArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) { return true; 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 d9d224de1..f7084ea6e 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 @@ -76,6 +76,8 @@ public interface Modifier { public int getMoveLimitModifier(GameState gameState, ModifiersQuerying modifiersQuerying); + boolean addsTwilightForCompanionMove(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard companion); + public boolean addsToArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card); public boolean canPlayAction(GameState gameState, ModifiersQuerying modifiersQuerying, String performingPlayer, Action action); 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 30c0cfdce..df1778ed8 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 @@ -10,6 +10,8 @@ public enum ModifierEffect { LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, RETURN_TO_HAND_MODIFIER, TRANSFER_MODIFIER, LIBERATION_MODIFIER, + MOVE_TWILIGHT_MODIFIER, + EXTRA_ACTION_MODIFIER, EXTRA_COST_MODIFIER, INITIATIVE_MODIFIER, TEXT_MODIFIER, 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 fcc780c2a..fc9f1fd85 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 @@ -363,6 +363,14 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return Math.max(1, result); } + @Override + public boolean addsTwilightForCompanionMove(GameState gameState, PhysicalCard companion) { + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.MOVE_TWILIGHT_MODIFIER, companion)) + if (!modifier.addsTwilightForCompanionMove(gameState, this, companion)) + return false; + return true; + } + @Override public int getStrength(GameState gameState, PhysicalCard physicalCard) { LoggingThreadLocal.logMethodStart(physicalCard, "getStrength"); @@ -819,7 +827,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public boolean canAddBurden(GameState gameState, String performingPlayer, PhysicalCard source) { - for (Modifier modifier : getModifiers(gameState, ModifierEffect.BURDEN_MODIFIER)) { + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.BURDEN_MODIFIER, source)) { if (!modifier.canAddBurden(gameState, this, performingPlayer, source)) 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 5b27a6a85..f14ff9a8d 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 @@ -39,9 +39,11 @@ public interface ModifiersQuerying { public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card); - // Move limit + // Movement public int getMoveLimit(GameState gameState, int baseMoveLimit); + public boolean addsTwilightForCompanionMove(GameState gameState, PhysicalCard companion); + // Twilight cost public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, boolean ignoreRoamingPenalty); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java index dcfe17441..1f83e0907 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.logic.timing.processes.turn.move; import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.LotroCardBlueprint; import com.gempukku.lotro.game.PhysicalCard; @@ -11,6 +12,7 @@ import com.gempukku.lotro.logic.actions.SystemQueueAction; import com.gempukku.lotro.logic.effects.AddTwilightEffect; import com.gempukku.lotro.logic.effects.PlaySiteEffect; import com.gempukku.lotro.logic.effects.TriggeringResultEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.UnrespondableEffect; import com.gempukku.lotro.logic.timing.processes.GameProcess; import com.gempukku.lotro.logic.timing.results.WhenMoveFromResult; @@ -90,9 +92,15 @@ public class MovementGameProcess implements GameProcess { else if (siteNumber > 6 && siteNumber <= 9) siteTwilightCost += 6; } - int companionCount = Filters.countActive(gameState, game.getModifiersQuerying(), CardType.COMPANION); + int companionsAddingTwilightForMoveCount = Filters.countActive(gameState, game.getModifiersQuerying(), CardType.COMPANION, + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return modifiersQuerying.addsTwilightForCompanionMove(gameState, physicalCard); + } + }); - AddTwilightEffect effect = new AddTwilightEffect(null, siteTwilightCost + companionCount); + AddTwilightEffect effect = new AddTwilightEffect(null, siteTwilightCost + companionsAddingTwilightForMoveCount); effect.setSourceText("Moving"); action.insertEffect(effect); }