From b1b81b65cbf197bdee61e9cf60f7f335c6bb9463 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 29 Sep 2011 04:42:15 +0000 Subject: [PATCH] "Throw Yourself in Next Time" --- .../gempukku/lotro/cards/PlayConditions.java | 22 ++++- .../modifiers/CantExertWithCardModifier.java | 24 +++++ .../lotro/cards/set2/moria/Card2_071.java | 46 ++++++++++ .../logic/modifiers/AbstractModifier.java | 5 ++ .../lotro/logic/modifiers/Modifier.java | 2 + .../lotro/logic/modifiers/ModifierEffect.java | 2 +- .../lotro/logic/modifiers/ModifiersLogic.java | 90 ++----------------- .../logic/modifiers/ModifiersQuerying.java | 2 + 8 files changed, 108 insertions(+), 85 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_071.java 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 0fb67082c..1f0176391 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 @@ -7,6 +7,7 @@ import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.LotroCardBlueprint; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.PhysicalCardVisitor; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.effects.PlayCardEffect; @@ -93,8 +94,25 @@ public class PlayConditions { return false; } - public static boolean canExert(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) { - return (modifiersQuerying.getVitality(gameState, card) > 1); + public static boolean canExert(final PhysicalCard source, final GameState gameState, final ModifiersQuerying modifiersQuerying, Filter... filters) { + return canExert(source, gameState, modifiersQuerying, 1, filters); + } + + public static boolean canExert(final PhysicalCard source, final GameState gameState, final ModifiersQuerying modifiersQuerying, final int times, Filter... filters) { + final Filter filter = Filters.and(filters); + return gameState.iterateActiveCards( + new PhysicalCardVisitor() { + @Override + public boolean visitPhysicalCard(PhysicalCard physicalCard) { + return filter.accepts(gameState, modifiersQuerying, physicalCard) + && (modifiersQuerying.getVitality(gameState, physicalCard) > times) + && modifiersQuerying.canBeExerted(gameState, source, physicalCard); + } + }); + } + + public static boolean canExert(PhysicalCard source, GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) { + return canExert(source, gameState, modifiersQuerying, Filters.sameCard(card)); } public static boolean winsSkirmish(EffectResult effectResult, PhysicalCard character) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java new file mode 100644 index 000000000..42c683c30 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java @@ -0,0 +1,24 @@ +package com.gempukku.lotro.cards.modifiers; + +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.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersLogic; + +public class CantExertWithCardModifier extends AbstractModifier { + private Filter _preventExertWithFilter; + + public CantExertWithCardModifier(PhysicalCard source, Filter affectFilter, Filter preventExertWithFilter) { + super(source, "Affected by exertion preventing effect", affectFilter, new ModifierEffect[]{ModifierEffect.WOUND_MODIFIER}); + _preventExertWithFilter = preventExertWithFilter; + } + + @Override + public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result) { + if (_preventExertWithFilter.accepts(gameState, modifiersLogic, source)) + return false; + return result; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_071.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_071.java new file mode 100644 index 000000000..f4abec6d2 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_071.java @@ -0,0 +1,46 @@ +package com.gempukku.lotro.cards.set2.moria; + +import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.modifiers.CantExertWithCardModifier; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.common.Side; +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.modifiers.Modifier; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Mines of Moria + * Side: Shadow + * Culture: Moria + * Twilight Cost: 0 + * Type: Condition + * Game Text: To play, spot a [MORIA] Orc. Plays on a Hobbit companion. Bearer may be exerted only by Shadow cards. + */ +public class Card2_071 extends AbstractAttachable { + public Card2_071() { + super(Side.SHADOW, CardType.CONDITION, 0, Culture.MORIA, null, "Throw Yourself in Next Time"); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, Filter additionalAttachmentFilter, int twilightModifier) { + return super.checkPlayRequirements(playerId, game, self, additionalAttachmentFilter, twilightModifier) + && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.race(Race.ORC)); + } + + @Override + protected Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { + return Filters.and(Filters.race(Race.HOBBIT), Filters.type(CardType.COMPANION)); + } + + @Override + public List getAlwaysOnModifiers(PhysicalCard self) { + return Collections.singletonList(new CantExertWithCardModifier(self, Filters.hasAttached(self), Filters.not(Filters.side(Side.SHADOW)))); + } +} 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 28f21345a..b61736001 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 @@ -100,6 +100,11 @@ public abstract class AbstractModifier implements Modifier { return result; } + @Override + public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard exertionSource, PhysicalCard card, boolean result) { + return result; + } + @Override public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite) { return allyOnCurrentSite; 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 120a01ff9..cc8385ab8 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 @@ -41,6 +41,8 @@ public interface Modifier { public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result); + public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result); + public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite); public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result); 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 fb0413fdf..0534a4f30 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 @@ -3,5 +3,5 @@ package com.gempukku.lotro.logic.modifiers; public enum ModifierEffect { KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_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, ALL_MODIFIER + LOOK_OR_REVEAL_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 8912852f8..e4e5cde2e 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 @@ -161,11 +161,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) return false; } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) - return false; - } boolean result = physicalCard.getBlueprint().hasKeyword(keyword); @@ -173,10 +168,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.hasKeyword(gameState, this, physicalCard, keyword, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result = modifier.hasKeyword(gameState, this, physicalCard, keyword, result); - } return result; } @@ -187,21 +178,12 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) return 0; } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) - return 0; - } int result = physicalCard.getBlueprint().getKeywordCount(keyword); for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.getKeywordCount(gameState, this, physicalCard, keyword, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result = modifier.getKeywordCount(gameState, this, physicalCard, keyword, result); - } return Math.max(0, result); } @@ -210,8 +192,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { int result = baseArcheryTotal; for (Modifier modifier : getModifiers(ModifierEffect.ARCHERY_MODIFIER)) result = modifier.getArcheryTotal(gameState, this, side, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - result = modifier.getArcheryTotal(gameState, this, side, result); return Math.max(0, result); } @@ -220,9 +200,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { int result = baseMoveLimit; for (Modifier modifier : getModifiers(ModifierEffect.MOVE_LIMIT_MODIFIER)) result = modifier.getMoveLimit(gameState, this, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - result = modifier.getMoveLimit(gameState, this, result); - return Math.max(1, result); } @@ -234,11 +211,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { && appliesStrengthModifier(gameState, modifier.getSource())) result = modifier.getStrength(gameState, this, physicalCard, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier) - && appliesStrengthModifier(gameState, modifier.getSource())) - result = modifier.getStrength(gameState, this, physicalCard, result); - } return Math.max(0, result); } @@ -250,10 +222,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, modifierSource, modifier)) result = modifier.appliesStrengthModifier(gameState, this, modifierSource, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, modifierSource, modifier)) - result = modifier.appliesStrengthModifier(gameState, this, modifierSource, result); - } return result; } @@ -264,10 +232,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.getVitality(gameState, this, physicalCard, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result = modifier.getVitality(gameState, this, physicalCard, result); - } return Math.max(0, result); } @@ -278,10 +242,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.getTwilightCost(gameState, this, physicalCard, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result = modifier.getTwilightCost(gameState, this, physicalCard, result); - } return Math.max(0, result); } @@ -292,10 +252,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.getPlayOnTwilightCost(gameState, this, physicalCard, target, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result = modifier.getPlayOnTwilightCost(gameState, this, physicalCard, target, result); - } return Math.max(0, result); } @@ -306,10 +262,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.getRoamingPenalty(gameState, this, physicalCard, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) - result = modifier.getRoamingPenalty(gameState, this, physicalCard, result); - } return Math.max(0, result); } @@ -320,10 +272,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, card, modifier)) result = modifier.isOverwhelmedByStrength(gameState, this, card, strength, opposingStrength, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - result = modifier.isOverwhelmedByStrength(gameState, this, card, strength, opposingStrength, result); - } return result; } @@ -334,9 +282,15 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, card, modifier)) result = modifier.canTakeWound(gameState, this, card, result); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { + return result; + } + + @Override + public boolean canBeExerted(GameState gameState, PhysicalCard source, PhysicalCard card) { + boolean result = true; + for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) { if (affectsCardWithSkipSet(gameState, card, modifier)) - result = modifier.canTakeWound(gameState, this, card, result); + result = modifier.canBeExerted(gameState, this, source, card, result); } return result; } @@ -349,10 +303,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { if (affectsCardWithSkipSet(gameState, card, modifier)) allyOnCurrentSite = modifier.isAllyOnCurrentSite(gameState, this, card, allyOnCurrentSite); } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - allyOnCurrentSite = modifier.isAllyOnCurrentSite(gameState, this, card, allyOnCurrentSite); - } return allyOnCurrentSite; } @@ -362,9 +312,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { for (Modifier modifier : getModifiers(ModifierEffect.ARCHERY_MODIFIER)) if (affectsCardWithSkipSet(gameState, card, modifier)) result = modifier.addsToArcheryTotal(gameState, this, card, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - result = modifier.addsToArcheryTotal(gameState, this, card, result); return result; } @@ -374,8 +321,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { boolean result = true; for (Modifier modifier : getModifiers(ModifierEffect.ACTION_MODIFIER)) result = modifier.canPlayAction(gameState, this, action, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - result = modifier.canPlayAction(gameState, this, action, result); return result; } @@ -384,8 +329,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { boolean result = false; for (Modifier modifier : getModifiers(ModifierEffect.ACTION_MODIFIER)) result = modifier.shouldSkipPhase(gameState, this, phase, playerId, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - result = modifier.shouldSkipPhase(gameState, this, phase, playerId, result); return result; } @@ -393,7 +336,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { public boolean isValidFreePlayerAssignments(GameState gameState, Map> assignments) { boolean result = true; - for (Modifier modifier : getModifiers(ModifierEffect.ASSIGNMENT_MODIFIER)) { result = modifier.isValidFreePlayerAssignments(gameState, this, assignments, result); for (Map.Entry> assignment : assignments.entrySet()) { @@ -401,13 +343,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result); } } - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { - result = modifier.isValidFreePlayerAssignments(gameState, this, assignments, result); - for (Map.Entry> assignment : assignments.entrySet()) { - if (affectsCardWithSkipSet(gameState, assignment.getKey(), modifier)) - result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result); - } - } return result; } @@ -417,9 +352,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { for (Modifier modifier : getModifiers(ModifierEffect.DISCARD_FROM_PLAY_MODIFIER)) if (affectsCardWithSkipSet(gameState, card, modifier)) result = modifier.canBeDiscardedFromPlay(gameState, this, card, source, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - result = modifier.canBeDiscardedFromPlay(gameState, this, card, source, result); return result; } @@ -429,9 +361,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) if (affectsCardWithSkipSet(gameState, card, modifier)) result = modifier.canBeHealed(gameState, this, card, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - if (affectsCardWithSkipSet(gameState, card, modifier)) - result = modifier.canBeHealed(gameState, this, card, result); return result; } @@ -460,9 +389,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { for (Modifier modifier : getModifiers(ModifierEffect.DISCARD_FROM_PLAY_MODIFIER)) if (!modifier.canLookOrRevealCardsInHand(gameState, this, playerId)) return false; - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - if (!modifier.canLookOrRevealCardsInHand(gameState, this, playerId)) - return false; return true; } 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 a35218d69..7c39b3d41 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 @@ -36,6 +36,8 @@ public interface ModifiersQuerying { public boolean canTakeWound(GameState gameState, PhysicalCard card); + public boolean canBeExerted(GameState gameState, PhysicalCard exertionSource, PhysicalCard card); + public boolean isAllyOnCurrentSite(GameState gameState, PhysicalCard card); public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card);