diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FpSkirmishResistanceStrengthOverrideModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FpSkirmishResistanceStrengthOverrideModifier.java new file mode 100644 index 000000000..629037fbf --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FpSkirmishResistanceStrengthOverrideModifier.java @@ -0,0 +1,34 @@ +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.Condition; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; + +public class FpSkirmishResistanceStrengthOverrideModifier extends AbstractModifier { + private static Evaluator _resistanceEvaluator = + new Evaluator() { + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { + return modifiersQuerying.getResistance(gameState, cardAffected); + } + }; + + public FpSkirmishResistanceStrengthOverrideModifier(PhysicalCard source, Filterable affectFilter, Condition condition) { + super(source, null, affectFilter, condition, ModifierEffect.SKIRMISH_STRENGTH_EVALUATOR_MODIFIER); + } + + @Override + public String getText(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + return "Uses resistance instead of strength when resolving skirmish"; + } + + @Override + public Evaluator getFpSkirmishStrengthOverrideEvaluator(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard fpCharacter) { + return _resistanceEvaluator; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/wraith/Card20_309.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/wraith/Card20_309.java new file mode 100644 index 000000000..091853961 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/wraith/Card20_309.java @@ -0,0 +1,30 @@ +package com.gempukku.lotro.cards.set20.wraith; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.FpSkirmishResistanceStrengthOverrideModifier; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Names; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.modifiers.Modifier; + +/** + * 4 + * •Ulaire Nertea, Twilight Fiend + * Ringwraith Minion • Nazgul + * 9 3 3 + * Twilight. Characters skirmishing Ulaire Nertea use resistance instead of strength to resolve skirmishes. + */ +public class Card20_309 extends AbstractMinion { + public Card20_309() { + super(4, 9, 3, 3, Race.NAZGUL, Culture.WRAITH, Names.nertea, "Twilight Fiend", true); + addKeyword(Keyword.TWILIGHT); + } + + @Override + public Modifier getAlwaysOnModifier(PhysicalCard self) { + return new FpSkirmishResistanceStrengthOverrideModifier(self, Filters.and(Filters.character, Filters.inSkirmishAgainst(self)), null); + } +} 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 1bf3a0ede..3859db407 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 @@ -6,6 +6,7 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; @@ -349,7 +350,12 @@ public abstract class AbstractModifier implements Modifier { } @Override - public boolean lostAllKeywords(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard card) { + public boolean lostAllKeywords(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) { return false; } + + @Override + public Evaluator getFpSkirmishStrengthOverrideEvaluator(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard fpCharacter) { + return null; + } } 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 956c74367..49052d4d2 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 @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; @@ -139,5 +140,7 @@ public interface Modifier { public int getInitiativeHandSizeModifier(GameState gameState, ModifiersQuerying modifiersQuerying); - public boolean lostAllKeywords(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard card); + public boolean lostAllKeywords(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card); + + Evaluator getFpSkirmishStrengthOverrideEvaluator(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard fpCharacter); } 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 df1778ed8..9747898a1 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 @@ -2,6 +2,7 @@ package com.gempukku.lotro.logic.modifiers; public enum ModifierEffect { SIGNET_MODIFIER, STRENGTH_MODIFIER, + SKIRMISH_STRENGTH_EVALUATOR_MODIFIER, STRENGTH_BONUS_SOURCE_MODIFIER, STRENGTH_BONUS_TARGET_MODIFIER, VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_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 0871710b0..cfdf56c15 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 @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; @@ -233,6 +234,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return result; } + @Override + public Evaluator getFpStrengthOverrideEvaluator(GameState gameState, PhysicalCard fpCharacter) { + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.SKIRMISH_STRENGTH_EVALUATOR_MODIFIER, fpCharacter)) { + Evaluator evaluator = modifier.getFpSkirmishStrengthOverrideEvaluator(gameState, this, fpCharacter); + if (evaluator != null) + return evaluator; + } + return null; + } + private boolean affectsCardWithSkipSet(GameState gameState, PhysicalCard physicalCard, Modifier modifier) { if (!_skipSet.contains(modifier) && physicalCard != null) { _skipSet.add(modifier); 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 1a4aebb7f..a3895398f 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 @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; @@ -25,6 +26,8 @@ public interface ModifiersQuerying { public Collection getModifiersAffecting(GameState gameState, PhysicalCard card); + public Evaluator getFpStrengthOverrideEvaluator(GameState gameState, PhysicalCard fpCharacter); + public boolean hasTextRemoved(GameState gameState, PhysicalCard card); // Keywords 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 c382dbef2..cd82529af 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 @@ -74,6 +74,10 @@ public class RuleUtils { if (fpChar == null) return 0; + final Evaluator fpStrengthOverrideEvaluator = game.getModifiersQuerying().getFpStrengthOverrideEvaluator(game.getGameState(), fpChar); + if (fpStrengthOverrideEvaluator != null) + return fpStrengthOverrideEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), fpChar); + final Evaluator overrideEvaluator = skirmish.getFpStrengthOverrideEvaluator(); if (overrideEvaluator != null) return overrideEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), fpChar);