diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java index 48816fc57..3c6cc083c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java @@ -56,6 +56,14 @@ public class ProxyingModifier implements Modifier { return false; } + @Override + public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) { + Modifier modifier = getProxiedModifier(gameState, modifiersQuerying); + if (modifier != null) + return modifier.isKeywordRemoved(gameState, modifiersQuerying, physicalCard, keyword); + return false; + } + @Override public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { Modifier modifier = getProxiedModifier(gameState, modifiersQuerying); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/elven/Card2_016.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/elven/Card2_016.java new file mode 100644 index 000000000..add8ba919 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/elven/Card2_016.java @@ -0,0 +1,61 @@ +package com.gempukku.lotro.cards.set2.elven; + +import com.gempukku.lotro.cards.AbstractPermanent; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.RequiredTriggerAction; +import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; +import com.gempukku.lotro.logic.modifiers.CompositeModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.RemoveKeywordModifier; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * Set: Mines of Moria + * Side: Free + * Culture: Elven + * Twilight Cost: 1 + * Type: Condition + * Game Text: To play, spot an Elf. Plays to your support area. Each Uruk-hai is strength -2 and loses all damage + * bonuses. Discard this condition during the regroup phase. + */ +public class Card2_016 extends AbstractPermanent { + public Card2_016() { + super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.ELVEN, Zone.FREE_SUPPORT, "A Blended Race"); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { + return super.checkPlayRequirements(playerId, game, self, twilightModifier) + && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ELF)); + } + + @Override + public Modifier getAlwaysOnEffect(PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new StrengthModifier(null, null, -2)); + modifiers.add( + new RemoveKeywordModifier(null, null, Keyword.DAMAGE)); + return new CompositeModifier(self, Filters.race(Race.URUK_HAI), modifiers); + } + + @Override + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (effectResult.getType() == EffectResult.Type.START_OF_PHASE + && game.getGameState().getCurrentPhase() == Phase.REGROUP) { + RequiredTriggerAction action = new RequiredTriggerAction(self, null, "Discard this condition"); + action.appendEffect( + new DiscardCardsFromPlayEffect(self, self)); + return Collections.singletonList(action); + } + return 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 db691e300..59a57cf2b 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 @@ -44,6 +44,11 @@ public abstract class AbstractModifier implements Modifier { return _affectFilter != null && _affectFilter.accepts(gameState, modifiersQuerying, physicalCard); } + @Override + public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) { + return false; + } + @Override public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { return result; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java index 31bf615fa..71f52525d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java @@ -60,6 +60,15 @@ public class CompositeModifier implements Modifier { return _affectFilter.accepts(gameState, modifiersQuerying, physicalCard); } + @Override + public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) { + for (Modifier modifier : _modifiers) + if (modifier.isKeywordRemoved(gameState, modifiersQuerying, physicalCard, keyword)) + return true; + + return false; + } + @Override public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { for (Modifier modifier : _modifiers) 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 c6ab25a0d..a78426b7d 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 @@ -23,6 +23,8 @@ public interface Modifier { public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result); + public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword); + public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result); public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, boolean result); 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 2175d0480..a08e84ad9 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 @@ -156,7 +156,19 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public boolean hasKeyword(GameState gameState, PhysicalCard physicalCard, Keyword keyword) { + for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + 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); + for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) { if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) result = modifier.hasKeyword(gameState, this, physicalCard, keyword, result); @@ -170,6 +182,17 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public int getKeywordCount(GameState gameState, PhysicalCard physicalCard, Keyword keyword) { + for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) { + if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + 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)) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveKeywordModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveKeywordModifier.java new file mode 100644 index 000000000..84f18abc4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveKeywordModifier.java @@ -0,0 +1,20 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; + +public class RemoveKeywordModifier extends AbstractModifier { + private Keyword _keyword; + + public RemoveKeywordModifier(PhysicalCard physicalCard, Filter affectFilter, Keyword keyword) { + super(physicalCard, "Loses " + keyword.getHumanReadable() + "keyword(s)", affectFilter, new ModifierEffect[]{ModifierEffect.KEYWORD_MODIFIER}); + _keyword = keyword; + } + + @Override + public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) { + return _keyword == keyword; + } +} diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 0cdb064f4..f71d14d00 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -1,4 +1,8 @@
+26 Sept. 2011
+- Changed the cost-to-effect actions to follow the "do as much as possible" route, rathern than can/can't do.
+- Only the site where the fellowship currently is, has its text affecting game.
+    
 24 Sept. 2011
 - Visually separated Free People and Shadow cards in deck builder.
 - Game no longer freezes when FP overwhelms minions in skirmish.