From f88efd8fc4856f23610c81c29e3efe7e4e3385e1 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 30 Aug 2011 16:15:09 +0000 Subject: [PATCH] "Parry" --- .../CancelStrengthBonusModifier.java | 18 ++++++ .../lotro/cards/set1/isengard/Card1_132.java | 57 +++++++++++++++++++ .../logic/modifiers/AbstractModifier.java | 5 ++ .../lotro/logic/modifiers/Modifier.java | 2 + .../lotro/logic/modifiers/ModifiersLogic.java | 12 +++- .../logic/modifiers/ModifiersQuerying.java | 4 +- 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java new file mode 100644 index 000000000..0d4b47272 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java @@ -0,0 +1,18 @@ +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.ModifiersLogic; + +public class CancelStrengthBonusModifier extends AbstractModifier { + public CancelStrengthBonusModifier(PhysicalCard source, Filter affectFilter) { + super(source, "Cancel strength bonus", affectFilter); + } + + @Override + public boolean appliesStrengthModifier(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard modifierSource, boolean result) { + return false; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java new file mode 100644 index 000000000..d8ee81aed --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java @@ -0,0 +1,57 @@ +package com.gempukku.lotro.cards.set1.isengard; + +import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +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.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Set: The Fellowship of the Ring + * Side: Shadow + * Culture: Isengard + * Twilight Cost: 2 + * Type: Event + * Game Text: Maneuver: Spot an Uruk-hai to cancel the strength bonus from a possession until the regroup phase. + */ +public class Card1_132 extends AbstractLotroCardBlueprint { + public Card1_132() { + super(Side.SHADOW, CardType.EVENT, Culture.ISENGARD, "Parry", "1_132"); + addKeyword(Keyword.MANEUVER); + } + + @Override + public int getTwilightCost() { + return 2; + } + + @Override + public List getPlayablePhaseActions(String playerId, LotroGame game, final PhysicalCard self) { + if (PlayConditions.canPlayShadowCardDuringPhase(game.getGameState(), game.getModifiersQuerying(), Phase.MANEUVER, self) + && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.URUK_HAI))) { + final PlayEventAction action = new PlayEventAction(self); + action.addEffect( + new ChooseActiveCardEffect(playerId, "Choose possession", Filters.type(CardType.POSSESSION)) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard possession) { + action.addEffect( + new AddUntilStartOfPhaseModifierEffect( + new CancelStrengthBonusModifier(self, Filters.sameCard(possession)), Phase.REGROUP)); + } + } + ); + + 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 f4d9a105d..ca3371c0d 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 @@ -45,6 +45,11 @@ public abstract class AbstractModifier implements Modifier { return result; } + @Override + public boolean appliesStrengthModifier(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard modifierSource, boolean result) { + return result; + } + @Override public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { return result; 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 34ec65378..abeb81c20 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 @@ -18,6 +18,8 @@ public interface Modifier { public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result); + public boolean appliesStrengthModifier(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard modifierSource, boolean result); + public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result); public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int 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 35fb4df92..42a567ec0 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 @@ -134,12 +134,22 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { public int getStrength(GameState gameState, PhysicalCard physicalCard) { int result = physicalCard.getBlueprint().getStrength(); for (Modifier modifier : _modifiers) { - if (affectsCardWithSkipSet(gameState, physicalCard, modifier)) + if (affectsCardWithSkipSet(gameState, physicalCard, modifier) + && appliesStrengthModifier(gameState, modifier.getSource())) result = modifier.getStrength(gameState, this, physicalCard, result); } return result; } + private boolean appliesStrengthModifier(GameState gameState, PhysicalCard modifierSource) { + boolean result = true; + for (Modifier modifier : _modifiers) { + if (affectsCardWithSkipSet(gameState, modifierSource, modifier)) + result = modifier.appliesStrengthModifier(gameState, this, modifierSource, result); + } + return result; + } + @Override public int getVitality(GameState gameState, PhysicalCard physicalCard) { int result = physicalCard.getBlueprint().getVitality(); 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 40920182d..41e85355a 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 @@ -22,10 +22,10 @@ public interface ModifiersQuerying { public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target); - public int getVitality(GameState gameState, PhysicalCard physicalCard); - public int getStrength(GameState gameState, PhysicalCard physicalCard); + public int getVitality(GameState gameState, PhysicalCard physicalCard); + public boolean isOverwhelmedByStrength(GameState gameState, PhysicalCard card, int strength, int opposingStrength); public boolean canTakeWound(GameState gameState, PhysicalCard card);