diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gandalf/Card15_033.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gandalf/Card15_033.java new file mode 100644 index 000000000..fd7604e2b --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gandalf/Card15_033.java @@ -0,0 +1,60 @@ +package com.gempukku.lotro.cards.set15.gandalf; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.actions.PlayEventAction; +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.game.state.Skirmish; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +/** + * Set: The Hunters + * Side: Free + * Culture: Gandalf + * Twilight Cost: 2 + * Type: Event • Skirmish + * Game Text: Spell. Spot Gandalf and an unbound companion skirmishing a minion to use Gandalf’s resistance to resolve + * that skirmish instead of that companion’s strength. + */ +public class Card15_033 extends AbstractEvent { + public Card15_033() { + super(Side.FREE_PEOPLE, 2, Culture.GANDALF, "One Last Surprise", Phase.SKIRMISH); + addKeyword(Keyword.SPELL); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { + return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile) + && PlayConditions.canSpot(game, Filters.gandalf) + && PlayConditions.canSpot(game, Filters.unboundCompanion, Filters.inSkirmishAgainst(CardType.MINION)); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + PlayEventAction action = new PlayEventAction(self); + final PhysicalCard gandalf = Filters.findFirstActive(game.getGameState(), game.getModifiersQuerying(), Filters.gandalf); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + final Skirmish skirmish = game.getGameState().getSkirmish(); + if (skirmish != null) { + skirmish.setFpStrengthOverrideEvaluator( + new Evaluator() { + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { + return modifiersQuerying.getResistance(gameState, gandalf); + } + }); + } + } + }); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java index 668fdcd5c..d83bd17e1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.game.state; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import java.util.HashSet; import java.util.Set; @@ -10,6 +11,8 @@ public class Skirmish { private Set _shadowCharacters; private boolean _cancelled; + private Evaluator _fpStrengthOverrideEvaluator; + private Set _removedFromSkirmish = new HashSet(); public Skirmish(PhysicalCard fellowshipCharacter, Set shadowCharacters) { @@ -17,6 +20,14 @@ public class Skirmish { _shadowCharacters = shadowCharacters; } + public Evaluator getFpStrengthOverrideEvaluator() { + return _fpStrengthOverrideEvaluator; + } + + public void setFpStrengthOverrideEvaluator(Evaluator fpStrengthOverrideEvaluator) { + _fpStrengthOverrideEvaluator = fpStrengthOverrideEvaluator; + } + public PhysicalCard getFellowshipCharacter() { return _fellowshipCharacter; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java index fcab553b1..52e85f988 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java @@ -8,7 +8,9 @@ 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.game.state.Skirmish; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; public class RuleUtils { public static int calculateFellowshipArcheryTotal(LotroGame game) { @@ -64,10 +66,15 @@ public class RuleUtils { } public static int getFellowshipSkirmishStrength(LotroGame game) { - if (game.getGameState().getSkirmish() == null) + final Skirmish skirmish = game.getGameState().getSkirmish(); + if (skirmish == null) return 0; - PhysicalCard fpChar = game.getGameState().getSkirmish().getFellowshipCharacter(); + final Evaluator overrideEvaluator = skirmish.getFpStrengthOverrideEvaluator(); + if (overrideEvaluator != null) + return overrideEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), null); + + PhysicalCard fpChar = skirmish.getFellowshipCharacter(); if (fpChar == null) return 0;