"Throw Yourself in Next Time"

This commit is contained in:
marcins78@gmail.com
2011-09-29 04:42:15 +00:00
parent 6262298fad
commit b1b81b65cb
8 changed files with 108 additions and 85 deletions

View File

@@ -7,6 +7,7 @@ import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.LotroCardBlueprint; import com.gempukku.lotro.game.LotroCardBlueprint;
import com.gempukku.lotro.game.PhysicalCard; 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.GameState;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.effects.PlayCardEffect; import com.gempukku.lotro.logic.effects.PlayCardEffect;
@@ -93,8 +94,25 @@ public class PlayConditions {
return false; return false;
} }
public static boolean canExert(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) { public static boolean canExert(final PhysicalCard source, final GameState gameState, final ModifiersQuerying modifiersQuerying, Filter... filters) {
return (modifiersQuerying.getVitality(gameState, card) > 1); 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) { public static boolean winsSkirmish(EffectResult effectResult, PhysicalCard character) {

View File

@@ -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;
}
}

View File

@@ -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<? extends Modifier> getAlwaysOnModifiers(PhysicalCard self) {
return Collections.singletonList(new CantExertWithCardModifier(self, Filters.hasAttached(self), Filters.not(Filters.side(Side.SHADOW))));
}
}

View File

@@ -100,6 +100,11 @@ public abstract class AbstractModifier implements Modifier {
return result; return result;
} }
@Override
public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard exertionSource, PhysicalCard card, boolean result) {
return result;
}
@Override @Override
public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite) { public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite) {
return allyOnCurrentSite; return allyOnCurrentSite;

View File

@@ -41,6 +41,8 @@ public interface Modifier {
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result); 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 boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite);
public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result); public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result);

View File

@@ -3,5 +3,5 @@ package com.gempukku.lotro.logic.modifiers;
public enum ModifierEffect { public enum ModifierEffect {
KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, WOUND_MODIFIER, 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, 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
} }

View File

@@ -161,11 +161,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
return false; 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); boolean result = physicalCard.getBlueprint().hasKeyword(keyword);
@@ -173,10 +168,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.hasKeyword(gameState, this, physicalCard, keyword, result); 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; return result;
} }
@@ -187,21 +178,12 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword)) if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
return 0; 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); int result = physicalCard.getBlueprint().getKeywordCount(keyword);
for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) { for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.getKeywordCount(gameState, this, physicalCard, keyword, result); 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); return Math.max(0, result);
} }
@@ -210,8 +192,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
int result = baseArcheryTotal; int result = baseArcheryTotal;
for (Modifier modifier : getModifiers(ModifierEffect.ARCHERY_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.ARCHERY_MODIFIER))
result = modifier.getArcheryTotal(gameState, this, side, result); 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); return Math.max(0, result);
} }
@@ -220,9 +200,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
int result = baseMoveLimit; int result = baseMoveLimit;
for (Modifier modifier : getModifiers(ModifierEffect.MOVE_LIMIT_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.MOVE_LIMIT_MODIFIER))
result = modifier.getMoveLimit(gameState, this, result); result = modifier.getMoveLimit(gameState, this, result);
for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER))
result = modifier.getMoveLimit(gameState, this, result);
return Math.max(1, result); return Math.max(1, result);
} }
@@ -234,11 +211,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
&& appliesStrengthModifier(gameState, modifier.getSource())) && appliesStrengthModifier(gameState, modifier.getSource()))
result = modifier.getStrength(gameState, this, physicalCard, result); 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); return Math.max(0, result);
} }
@@ -250,10 +222,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, modifierSource, modifier)) if (affectsCardWithSkipSet(gameState, modifierSource, modifier))
result = modifier.appliesStrengthModifier(gameState, this, modifierSource, result); 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; return result;
} }
@@ -264,10 +232,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.getVitality(gameState, this, physicalCard, result); 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); return Math.max(0, result);
} }
@@ -278,10 +242,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.getTwilightCost(gameState, this, physicalCard, result); 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); return Math.max(0, result);
} }
@@ -292,10 +252,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.getPlayOnTwilightCost(gameState, this, physicalCard, target, result); 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); return Math.max(0, result);
} }
@@ -306,10 +262,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.getRoamingPenalty(gameState, this, physicalCard, result); 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); return Math.max(0, result);
} }
@@ -320,10 +272,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, card, modifier)) if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.isOverwhelmedByStrength(gameState, this, card, strength, opposingStrength, result); 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; return result;
} }
@@ -334,9 +282,15 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, card, modifier)) if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.canTakeWound(gameState, this, card, result); 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)) if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.canTakeWound(gameState, this, card, result); result = modifier.canBeExerted(gameState, this, source, card, result);
} }
return result; return result;
} }
@@ -349,10 +303,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
if (affectsCardWithSkipSet(gameState, card, modifier)) if (affectsCardWithSkipSet(gameState, card, modifier))
allyOnCurrentSite = modifier.isAllyOnCurrentSite(gameState, this, card, allyOnCurrentSite); 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; return allyOnCurrentSite;
} }
@@ -362,9 +312,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
for (Modifier modifier : getModifiers(ModifierEffect.ARCHERY_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.ARCHERY_MODIFIER))
if (affectsCardWithSkipSet(gameState, card, modifier)) if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.addsToArcheryTotal(gameState, this, card, result); 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; return result;
} }
@@ -374,8 +321,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
boolean result = true; boolean result = true;
for (Modifier modifier : getModifiers(ModifierEffect.ACTION_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.ACTION_MODIFIER))
result = modifier.canPlayAction(gameState, this, action, result); result = modifier.canPlayAction(gameState, this, action, result);
for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER))
result = modifier.canPlayAction(gameState, this, action, result);
return result; return result;
} }
@@ -384,8 +329,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
boolean result = false; boolean result = false;
for (Modifier modifier : getModifiers(ModifierEffect.ACTION_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.ACTION_MODIFIER))
result = modifier.shouldSkipPhase(gameState, this, phase, playerId, result); 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; return result;
} }
@@ -393,7 +336,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
public boolean isValidFreePlayerAssignments(GameState gameState, Map<PhysicalCard, List<PhysicalCard>> assignments) { public boolean isValidFreePlayerAssignments(GameState gameState, Map<PhysicalCard, List<PhysicalCard>> assignments) {
boolean result = true; boolean result = true;
for (Modifier modifier : getModifiers(ModifierEffect.ASSIGNMENT_MODIFIER)) { for (Modifier modifier : getModifiers(ModifierEffect.ASSIGNMENT_MODIFIER)) {
result = modifier.isValidFreePlayerAssignments(gameState, this, assignments, result); result = modifier.isValidFreePlayerAssignments(gameState, this, assignments, result);
for (Map.Entry<PhysicalCard, List<PhysicalCard>> assignment : assignments.entrySet()) { for (Map.Entry<PhysicalCard, List<PhysicalCard>> assignment : assignments.entrySet()) {
@@ -401,13 +343,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result); 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<PhysicalCard, List<PhysicalCard>> assignment : assignments.entrySet()) {
if (affectsCardWithSkipSet(gameState, assignment.getKey(), modifier))
result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result);
}
}
return result; return result;
} }
@@ -417,9 +352,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
for (Modifier modifier : getModifiers(ModifierEffect.DISCARD_FROM_PLAY_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.DISCARD_FROM_PLAY_MODIFIER))
if (affectsCardWithSkipSet(gameState, card, modifier)) if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.canBeDiscardedFromPlay(gameState, this, card, source, result); 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; return result;
} }
@@ -429,9 +361,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER))
if (affectsCardWithSkipSet(gameState, card, modifier)) if (affectsCardWithSkipSet(gameState, card, modifier))
result = modifier.canBeHealed(gameState, this, card, result); 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; return result;
} }
@@ -460,9 +389,6 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
for (Modifier modifier : getModifiers(ModifierEffect.DISCARD_FROM_PLAY_MODIFIER)) for (Modifier modifier : getModifiers(ModifierEffect.DISCARD_FROM_PLAY_MODIFIER))
if (!modifier.canLookOrRevealCardsInHand(gameState, this, playerId)) if (!modifier.canLookOrRevealCardsInHand(gameState, this, playerId))
return false; return false;
for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER))
if (!modifier.canLookOrRevealCardsInHand(gameState, this, playerId))
return false;
return true; return true;
} }

View File

@@ -36,6 +36,8 @@ public interface ModifiersQuerying {
public boolean canTakeWound(GameState gameState, PhysicalCard card); 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 isAllyOnCurrentSite(GameState gameState, PhysicalCard card);
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card); public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card);