diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_041.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_041.java index f785a996e..66731ffa9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_041.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_041.java @@ -10,10 +10,7 @@ import com.gempukku.lotro.logic.cardtype.AbstractAlly; import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision; import com.gempukku.lotro.logic.effects.*; import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.timing.Effect; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; +import com.gempukku.lotro.logic.timing.*; import java.util.ArrayList; import java.util.Collections; @@ -29,11 +26,11 @@ import java.util.List; * Strength: 8 * Vitality: 4 * Card Number: 1R41 - * Game Text: At the start of each of your turns, heal each Rivendell ally or heal Elrond twice. - * Regroup: Exert Elrond twice to reveal the top card of any draw deck. If it is a Free Peoples card, you may heal - * a companion. If it is a Shadow card, you may discard a condition. + * Game Text: At the start of each of your turns, heal each Rivendell ally. + * Regroup: Exert Elrond twice to reveal the top card of your draw deck. If it is an [ELVEN] card, you may discard it + * to heal a companion. If it is a Shadow card, you may discard it to discard a Shadow condition. */ -public class Card40_041 extends AbstractAlly{ +public class Card40_041 extends AbstractAlly { public Card40_041() { super(4, SitesBlock.SECOND_ED, 0, 8, 4, Race.ELF, Culture.ELVEN, "Elrond", "Peredhil", true); addKeyword(Keyword.RIVENDELL); @@ -43,23 +40,13 @@ public class Card40_041 extends AbstractAlly{ public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { if (TriggerConditions.startOfTurn(game, effectResult)) { RequiredTriggerAction action = new RequiredTriggerAction(self); - List possibleEffects = new ArrayList(2); - possibleEffects.add( + action.appendEffect( new HealCharactersEffect(self, CardType.ALLY, Keyword.RIVENDELL) { @Override public String getText(LotroGame game) { return "Heal each Rivendell ally"; } }); - possibleEffects.add( - new ChooseAndHealCharactersEffect(action, self.getOwner(), 1, 1, 2, self) { - @Override - public String getText(LotroGame game) { - return "Heal Elrond twice"; - } - }); - action.appendEffect( - new ChoiceEffect(action, self.getOwner(), possibleEffects)); return Collections.singletonList(action); } return null; @@ -76,42 +63,50 @@ public class Card40_041 extends AbstractAlly{ new SelfExertEffect(action, self)); action.appendCost( new SelfExertEffect(action, self)); - action.appendEffect( - new PlayoutDecisionEffect(playerId, - new MultipleChoiceAwaitingDecision(1, "Choose a player to reveal top card of deck of", allPlayers) { - @Override - protected void validDecisionMade(int index, String player) { - action.appendEffect( - new RevealTopCardsOfDrawDeckEffect(self, player, 1) { - @Override - protected void cardsRevealed(List revealedCards) { - if (revealedCards.size()>0) { - PhysicalCard firstCard = revealedCards.get(0); - if (Filters.and(Side.FREE_PEOPLE).accepts(game, - firstCard)) { + action.appendCost( + new RevealTopCardsOfDrawDeckEffect(self, playerId, 1) { + @Override + protected void cardsRevealed(List revealedCards) { + if (revealedCards.size() > 0) { + PhysicalCard firstCard = revealedCards.get(0); + if (Filters.and(Side.FREE_PEOPLE).accepts(game, + firstCard)) { + action.appendCost( + new OptionalEffect(action, playerId, + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + action.appendCost( + new DiscardTopCardFromDeckEffect(self, playerId, false)); action.appendEffect( - new OptionalEffect(action, playerId, - new ChooseAndHealCharactersEffect(action, playerId, 1, 1, CardType.COMPANION)) { - @Override - public String getText(LotroGame game) { - return "Heal a companion"; - } - }); - } else { - action.appendEffect( - new OptionalEffect(action, playerId, - new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1,1, CardType.CONDITION) { - @Override - public String getText(LotroGame game) { - return "Discard a condition"; - } - })); + new ChooseAndHealCharactersEffect(action, playerId, 1, 1, CardType.COMPANION)); } - } + + @Override + public String getText(LotroGame game) { + return "Discard the revealed card to heal a companion"; + } + })); + } else { + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + action.appendCost( + new DiscardTopCardFromDeckEffect(self, playerId, false)); + action.appendEffect( + new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Side.SHADOW, CardType.CONDITION)); + } + + @Override + public String getText(LotroGame game) { + return "Discard the revealed card to discard a shadow condition"; } }); } - })); + } + } + }); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_045.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_045.java index 27b59d884..b04791a29 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_045.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_045.java @@ -7,13 +7,12 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.cardtype.AbstractAlly; -import com.gempukku.lotro.logic.effects.HealCharactersEffect; -import com.gempukku.lotro.logic.effects.RevealTopCardsOfDrawDeckEffect; -import com.gempukku.lotro.logic.effects.SelfExertEffect; +import com.gempukku.lotro.logic.effects.*; import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.PlayConditions; import com.gempukku.lotro.logic.timing.TriggerConditions; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; import java.util.Collections; import java.util.List; @@ -29,7 +28,8 @@ import java.util.List; * Vitality: 3 * Card Number: 1R45 * Game Text: At the start of each of your turns, heal each Lothlorien ally. - * Skirmish: Exert Galadriel to reveal the top card of your draw deck. Make a minion skirmishing an Elf strength -X, where X is the twilight cost of the revealed card. + * Skirmish: Exert Galadriel to reveal the top card of your draw deck. If it is an [ELVEN] card, you may discard it + * to make a minion skirmishing an Elf strength -2. */ public class Card40_045 extends AbstractAlly { public Card40_045() { @@ -60,12 +60,26 @@ public class Card40_045 extends AbstractAlly { @Override protected void cardsRevealed(List revealedCards) { if (revealedCards.size() > 0) { - PhysicalCard revealedCard = revealedCards.get(0); - int twilightCost = revealedCard.getBlueprint().getTwilightCost(); - if (twilightCost > 0) - action.appendEffect( - new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, -twilightCost, - CardType.MINION, Filters.inSkirmishAgainst(Race.ELF))); + if (Filters.and(Culture.ELVEN).accepts(game, + revealedCards.get(0))) { + action.appendCost( + new OptionalEffect(action, playerId, + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + action.appendCost( + new DiscardTopCardFromDeckEffect(self, playerId, false)); + action.appendEffect( + new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, -2, + CardType.MINION, Filters.inSkirmishAgainst(Race.ELF))); + } + + @Override + public String getText(LotroGame game) { + return "Discard the revealed card to make a minion skirmishing an Elf strength -2"; + } + })); + } } } }); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_047.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_047.java index b231394d2..7226b2597 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_047.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/elven/Card40_047.java @@ -4,15 +4,21 @@ import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Race; +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.ActivateCardAction; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.cardtype.AbstractCompanion; import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect; +import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.SelfExertEffect; import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.OverwhelmedByMultiplierModifier; import com.gempukku.lotro.logic.modifiers.RemoveKeywordModifier; +import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.PlayConditions; import com.gempukku.lotro.logic.timing.TriggerConditions; import com.gempukku.lotro.logic.timing.results.AssignAgainstResult; @@ -30,29 +36,42 @@ import java.util.List; * Vitality: 3 * Resistance: 9 * Card Number: 1R47 - * Game Text: Glorfindel may not be overwhelmed unless his strength is tripled. - * Each time a Nazgul is assigned to skirmish Glorfindel, that Nazgul is prevented from being fierce until the regroup phase. + * Game Text: To play, spot 3 Elves. + * While skirmishing a Nazgul, Glorfindel may not be overwhelmed unless his strength is tripled. + * Skirmish: Exert Glorfindel to make a Nazgul he is skirmishing lose fierce and unable to gain fierce until the regroup phase. */ -public class Card40_047 extends AbstractCompanion{ +public class Card40_047 extends AbstractCompanion { public Card40_047() { super(4, 9, 3, 9, Culture.ELVEN, Race.ELF, null, "Glorfindel", "Emissary of the Valar", true); } + @Override + public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { + return Filters.canSpot(game, 3, Race.ELF); + } + @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - OverwhelmedByMultiplierModifier modifier = new OverwhelmedByMultiplierModifier(self, self, 3); + OverwhelmedByMultiplierModifier modifier = new OverwhelmedByMultiplierModifier(self, Filters.and(self, Filters.inSkirmishAgainst(Race.NAZGUL)), 3); return Collections.singletonList(modifier); } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.assignedAgainst(game, effectResult, null, self, Race.NAZGUL)) { - AssignAgainstResult assignedAgainst = (AssignAgainstResult) effectResult; - PhysicalCard nazgul = assignedAgainst.getAssignedCard(); - RequiredTriggerAction action = new RequiredTriggerAction(self); + public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) + && PlayConditions.canSelfExert(self, game)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new SelfExertEffect(action, self)); action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new RemoveKeywordModifier(self, nazgul, Keyword.FIERCE), Phase.REGROUP)); + new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.inSkirmishAgainst(self)) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard card) { + action.appendEffect( + new AddUntilStartOfPhaseModifierEffect( + new RemoveKeywordModifier(self, card, Keyword.FIERCE), Phase.REGROUP)); + } + }); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_216.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_216.java index 6fc3eda23..536c170b1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_216.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_216.java @@ -30,7 +30,7 @@ import java.util.List; * Type: Condition - Companion * Card Number: 1C216 * Game Text: To play, exert a [SAURON] tracker. Limit 1 per companion. - * Each time the fellowship moves, the Free Peoples player must add (1) or exert this companion. + * Each time the fellowship moves, the Free Peoples player must add (3) or exert this companion. */ public class Card40_216 extends AbstractAttachable { public Card40_216() { @@ -39,7 +39,7 @@ public class Card40_216 extends AbstractAttachable { @Override public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Filters.and(CardType.COMPANION, Filters.not(Filters.hasAttached(Filters.name("Ever Watchful")))); + return Filters.and(CardType.COMPANION, Filters.not(Filters.hasAttached(Filters.name(getName())))); } @Override @@ -59,7 +59,7 @@ public class Card40_216 extends AbstractAttachable { RequiredTriggerAction action = new RequiredTriggerAction(self); List possibleEffects = new ArrayList(2); possibleEffects.add( - new AddTwilightEffect(self, 1)); + new AddTwilightEffect(self, 3)); possibleEffects.add( new ExertCharactersEffect(action, self, self.getAttachedTo())); action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java index 47074e2a9..69ced750a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java @@ -1,16 +1,20 @@ package com.gempukku.lotro.cards.set40.sauron; 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.ActivateCardAction; import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.effects.AddTwilightEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; +import com.gempukku.lotro.logic.effects.*; +import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier; +import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier; import com.gempukku.lotro.logic.modifiers.evaluator.ForEachThreatEvaluator; import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.PlayConditions; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -22,7 +26,9 @@ import java.util.List; * Twilight Cost: 3 * Type: Condition - Support Area * Card Number: 1U238 - * Game Text: To play, spot a [SAURON] Orc. Shadow: Discard this condition to add (1) for each threat. + * Game Text: To play, exert a [SAURON] minion. + * Shadow: Discard this condition to add (1) for each threat. + * Maneuver: Spot a [SAURON] minion, 6 companions, and remove (2) (or 2 threats) to wound a companion (except the Ring-bearer.) */ public class Card40_238 extends AbstractPermanent { public Card40_238() { @@ -31,7 +37,13 @@ public class Card40_238 extends AbstractPermanent { @Override public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canSpot(game, Culture.SAURON, Race.ORC); + return PlayConditions.canExert(self, game, Culture.SAURON, CardType.MINION); + } + + @Override + public List getExtraCostToPlayModifiers(LotroGame game, PhysicalCard self) { + return Collections.singletonList( + new ExertExtraPlayCostModifier(self, self, null, Culture.SAURON, CardType.MINION)); } @Override @@ -45,6 +57,22 @@ public class Card40_238 extends AbstractPermanent { new AddTwilightEffect(self, new ForEachThreatEvaluator())); return Collections.singletonList(action); } + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0) + && PlayConditions.canSpot(game, Culture.SAURON, CardType.MINION) + && PlayConditions.canSpot(game, 6, CardType.COMPANION) + && (game.getGameState().getTwilightPool() >= 2 || PlayConditions.canRemoveThreat(game, self, 2))) { + ActivateCardAction action = new ActivateCardAction(self); + List possibleCosts = new ArrayList<>(2); + possibleCosts.add( + new RemoveTwilightEffect(2)); + possibleCosts.add( + new RemoveThreatsEffect(self, 2)); + action.appendCost( + new ChoiceEffect(action, playerId, possibleCosts)); + action.appendEffect( + new ChooseAndWoundCharactersEffect(action, playerId, 1, 1, CardType.COMPANION, Filters.not(Filters.ringBearer))); + return Collections.singletonList(action); + } return null; } }