From 78f154d154f3c22d6f6b7f51e50d7543458790e4 Mon Sep 17 00:00:00 2001 From: MarcinSc Date: Tue, 14 May 2024 15:14:04 +0700 Subject: [PATCH] Migrated Raider cards in set 8 to hjson --- .../lotro/cards/set8/raider/Card8_049.java | 49 ------------ .../lotro/cards/set8/raider/Card8_050.java | 74 ----------------- .../lotro/cards/set8/raider/Card8_051.java | 60 -------------- .../lotro/cards/set8/raider/Card8_052.java | 48 ----------- .../lotro/cards/set8/raider/Card8_053.java | 59 -------------- .../lotro/cards/set8/raider/Card8_054.java | 61 -------------- .../lotro/cards/set8/raider/Card8_055.java | 57 ------------- .../lotro/cards/set8/raider/Card8_056.java | 57 ------------- .../lotro/cards/set8/raider/Card8_058.java | 59 -------------- .../lotro/cards/set8/raider/Card8_059.java | 79 ------------------- .../lotro/cards/set8/raider/Card8_060.java | 44 ----------- .../lotro/cards/set8/raider/Card8_061.java | 67 ---------------- .../lotro/cards/set8/raider/Card8_062.java | 43 ---------- .../lotro/cards/set8/raider/Card8_063.java | 40 ---------- .../lotro/cards/set8/raider/Card8_064.java | 55 ------------- .../lotro/cards/set8/raider/Card8_065.java | 69 ---------------- .../lotro/cards/set8/raider/Card8_066.java | 59 -------------- .../cards/official/set08/set08-raider.hjson | 35 -------- .../modifier/CantTakeArcheryWounds.java | 11 ++- .../requirement/CanPlayFromDiscard.java | 23 ++++++ .../requirement/RequirementFactory.java | 1 + .../com/gempukku/lotro/logic/GameUtils.java | 2 + 22 files changed, 31 insertions(+), 1021 deletions(-) delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_049.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_050.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_051.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_052.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_053.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_055.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_056.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_058.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_059.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_060.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_061.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_062.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_063.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_064.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_065.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_066.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set08/set08-raider.hjson create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanPlayFromDiscard.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_049.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_049.java deleted file mode 100644 index 463f9f346..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_049.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -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.AbstractMinion; -import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 6 - * Type: Minion • Man - * Strength: 12 - * Vitality: 3 - * Site: 4 - * Game Text: Corsair. Fierce. Skirmish: If you have initiative, remove a [RAIDER] token to discard a possession borne - * by a character skirmishing this minion. - */ -public class Card8_049 extends AbstractMinion { - public Card8_049() { - super(6, 12, 3, 4, Race.MAN, Culture.RAIDER, "Black Númenorean"); - addKeyword(Keyword.CORSAIR); - addKeyword(Keyword.FIERCE); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0) - && PlayConditions.hasInitiative(game, Side.SHADOW) - && PlayConditions.canRemoveTokens(game, Token.RAIDER, 1, Filters.any)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, Token.RAIDER, 1, Filters.any)); - action.appendEffect( - new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION, Filters.attachedTo(Filters.inSkirmishAgainst(self)))); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_050.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_050.java deleted file mode 100644 index e014304e7..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_050.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.*; -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.OptionalTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; -import com.gempukku.lotro.logic.effects.RemoveTokenEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 2 - * Type: Possession • Support Area - * Game Text: When you play this possession, you may add a [RAIDER] token here. Shadow: Remove X [RAIDER] tokens here - * to play a corsair from your discard pile; its twilight cost is -X. Discard this possession. - */ -public class Card8_050 extends AbstractPermanent { - public Card8_050() { - super(Side.SHADOW, 2, CardType.POSSESSION, Culture.RAIDER, "Black Sails of Umbar"); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self)) { - OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendEffect( - new AddTokenEffect(self, self, Token.RAIDER)); - return Collections.singletonList(action); - } - return null; - } - - @Override - public List getPhaseActionsInPlay(final String playerId, final LotroGame game, final PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) { - int tokens = game.getGameState().getTokenCount(self, Token.RAIDER); - if (PlayConditions.canPlayFromDiscard(playerId, game, -tokens, Keyword.CORSAIR)) { - final ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new PlayoutDecisionEffect(playerId, - new IntegerAwaitingDecision(1, "How many tokens you wish to remove?", 0, tokens, tokens) { - @Override - public void decisionMade(String result) throws DecisionResultInvalidException { - int tokens = getValidatedResult(result); - if (tokens > 0) - action.insertCost( - new RemoveTokenEffect(self, self, Token.RAIDER, tokens)); - action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, game, -tokens, Keyword.CORSAIR)); - action.appendEffect( - new SelfDiscardEffect(self)); - } - })); - return Collections.singletonList(action); - } - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_051.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_051.java deleted file mode 100644 index 498e341b6..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_051.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -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.AbstractMinion; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.SelfExertEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromHandEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 7 - * Type: Minion • Man - * Strength: 14 - * Vitality: 4 - * Site: 4 - * Game Text: Corsair. Enduring. Fierce. Shadow: Exert Castamir of Umbar and play a corsair to add 2 [RAIDER] tokens to - * a card that already has a [RAIDER] token on it. - */ -public class Card8_051 extends AbstractMinion { - public Card8_051() { - super(7, 14, 4, 4, Race.MAN, Culture.RAIDER, "Castamir of Umbar", null, true); - addKeyword(Keyword.CORSAIR); - addKeyword(Keyword.ENDURING); - addKeyword(Keyword.FIERCE); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0) - && PlayConditions.canSelfExert(self, game) - && PlayConditions.canPlayFromHand(playerId, game, Keyword.CORSAIR)) { - final ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfExertEffect(action, self)); - action.appendCost( - new ChooseAndPlayCardFromHandEffect(playerId, game, Keyword.CORSAIR)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new AddTokenEffect(self, card, Token.RAIDER, 2)); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_052.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_052.java deleted file mode 100644 index 531f67cff..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_052.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -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.cardtype.AbstractAttachable; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.condition.InitiativeCondition; - -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 0 - * Type: Possession • Ranged Weapon - * Strength: +2 - * Game Text: Bearer must be a corsair. While you have initiative, bearer is an archer and fierce. - */ -public class Card8_052 extends AbstractAttachable { - public Card8_052() { - super(Side.SHADOW, CardType.POSSESSION, 0, Culture.RAIDER, PossessionClass.RANGED_WEAPON, "Corsair Ballista"); - } - - @Override - public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Keyword.CORSAIR; - } - - @Override - public int getStrength() { - return 2; - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList<>(); - modifiers.add( - new KeywordModifier(self, Filters.hasAttached(self), new InitiativeCondition(Side.SHADOW), Keyword.ARCHER, 1)); - modifiers.add( - new KeywordModifier(self, Filters.hasAttached(self), new InitiativeCondition(Side.SHADOW), Keyword.FIERCE, 1)); - return modifiers; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_053.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_053.java deleted file mode 100644 index 332405834..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_053.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.common.Token; -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.OptionalTriggerAction; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.RemoveThreatsEffect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 3 - * Type: Minion • Man - * Strength: 8 - * Vitality: 2 - * Site: 4 - * Game Text: Corsair. When you play this minion, you may remove a threat to add 2 [RAIDER] tokens to a card that - * already has a [RAIDER] token on it. - */ -public class Card8_053 extends AbstractMinion { - public Card8_053() { - super(3, 8, 2, 4, Race.MAN, Culture.RAIDER, "Corsair Buccaneer"); - addKeyword(Keyword.CORSAIR); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self) - && PlayConditions.canRemoveThreat(game, self, 1)) { - final OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendCost( - new RemoveThreatsEffect(self, 1)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new AddTokenEffect(self, card, Token.RAIDER, 2)); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java deleted file mode 100644 index 6c5d14f2b..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.common.Token; -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.OptionalTriggerAction; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 3 - * Type: Minion • Man - * Strength: 8 - * Vitality: 2 - * Site: 4 - * Game Text: Corsair. When you play this minion, you may remove 2 culture tokens to add 2 [RAIDER] tokens to a card - * that already has a [RAIDER] token on it. - */ -public class Card8_054 extends AbstractMinion { - public Card8_054() { - super(3, 8, 2, 4, Race.MAN, Culture.RAIDER, "Corsair Freebooter"); - addKeyword(Keyword.CORSAIR); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self) - && PlayConditions.canRemoveAnyCultureTokens(game, 2, Filters.any)) { - final OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendCost( - new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 1, Filters.any)); - action.appendCost( - new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 1, Filters.any)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new AddTokenEffect(self, card, Token.RAIDER, 2)); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_055.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_055.java deleted file mode 100644 index 6b9339f6c..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_055.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -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.AbstractMinion; -import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 5 - * Type: Minion • Man - * Strength: 10 - * Vitality: 3 - * Site: 4 - * Game Text: Corsair. Skirmish: If you have initiative, remove a [RAIDER] token to make a corsair fierce until - * the regroup phase. - */ -public class Card8_055 extends AbstractMinion { - public Card8_055() { - super(5, 10, 3, 4, Race.MAN, Culture.RAIDER, "Corsair Gunners"); - addKeyword(Keyword.CORSAIR); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0) - && PlayConditions.hasInitiative(game, Side.SHADOW) - && PlayConditions.canRemoveTokens(game, Token.RAIDER, 1, Filters.any)) { - final ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, Token.RAIDER, 1, Filters.any)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose Corsair", Keyword.CORSAIR) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new AddUntilStartOfPhaseModifierEffect( - new KeywordModifier(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/set8/raider/Card8_056.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_056.java deleted file mode 100644 index 9ae379196..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_056.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; -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.OptionalTriggerAction; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 1 - * Type: Minion • Man - * Strength: 5 - * Vitality: 1 - * Site: 4 - * Game Text: Corsair. When you play this minion, if you have initiative, you may discard an ally to add 2 [RAIDER] - * tokens to a card that already has a [RAIDER] token on it. - */ -public class Card8_056 extends AbstractMinion { - public Card8_056() { - super(1, 5, 1, 4, Race.MAN, Culture.RAIDER, "Corsair Lookout"); - addKeyword(Keyword.CORSAIR); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self) - && PlayConditions.hasInitiative(game, Side.SHADOW) - && PlayConditions.canDiscardFromPlay(self, game, CardType.ALLY)) { - final OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendCost( - new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.ALLY)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new AddTokenEffect(self, card, Token.RAIDER, 2)); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_058.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_058.java deleted file mode 100644 index 063a51f3a..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_058.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.common.Token; -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.OptionalTriggerAction; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 2 - * Type: Minion • Man - * Strength: 6 - * Vitality: 2 - * Site: 4 - * Game Text: Corsair. When you play this minion, you may discard 2 cards from hand to add 2 [RAIDER] tokens to a card - * that already has a [RAIDER] token on it. - */ -public class Card8_058 extends AbstractMinion { - public Card8_058() { - super(2, 6, 2, 4, Race.MAN, Culture.RAIDER, "Corsair Plunderer"); - addKeyword(Keyword.CORSAIR); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self) - && PlayConditions.canDiscardFromHand(game, playerId, 2, Filters.any)) { - final OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendCost( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new AddTokenEffect(self, card, Token.RAIDER, 2)); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_059.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_059.java deleted file mode 100644 index 5c9628971..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_059.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.GameUtils; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.actions.OptionalTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.effects.AddTokenEffect; -import com.gempukku.lotro.logic.effects.AddTwilightEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.modifiers.Condition; -import com.gempukku.lotro.logic.modifiers.HasInitiativeModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotCondition; -import com.gempukku.lotro.logic.modifiers.condition.AndCondition; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 1 - * Type: Possession • Support Area - * Game Text: When you play this possession, you may add a [RAIDER] token here. While you can spot 6 [RAIDER] tokens - * and a [RAIDER] Man, the Shadow has initiative, regardless of the Free Peoples player’s hand. Regroup: Add (1) for - * each [RAIDER] token you can spot. Discard this possession. - */ -public class Card8_059 extends AbstractPermanent { - public Card8_059() { - super(Side.SHADOW, 1, CardType.POSSESSION, Culture.RAIDER, "Corsair War Galley"); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new HasInitiativeModifier(self, - new AndCondition( - new SpotCondition(Culture.RAIDER, Race.MAN), - new Condition() { - @Override - public boolean isFullfilled(LotroGame game) { - return GameUtils.getSpottableTokensTotal(game, Token.RAIDER) >= 6; - } - } - ), Side.SHADOW)); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self)) { - OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendEffect( - new AddTokenEffect(self, self, Token.RAIDER)); - return Collections.singletonList(action); - } - return null; - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0)) { - ActivateCardAction action = new ActivateCardAction(self); - - action.appendEffect( - new AddTwilightEffect(self, GameUtils.getSpottableTokensTotal(game, Token.RAIDER))); - action.appendEffect( - new SelfDiscardEffect(self)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_060.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_060.java deleted file mode 100644 index 555536063..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_060.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -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.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.modifiers.CantTakeArcheryWoundsModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotCondition; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 5 - * Type: Minion • Man - * Strength: 11 - * Vitality: 3 - * Site: 4 - * Game Text: Southron. Archer. While you can spot another [RAIDER] Man, Ring-bound companions cannot take archery - * wounds. - */ -public class Card8_060 extends AbstractMinion { - public Card8_060() { - super(5, 11, 3, 4, Race.MAN, Culture.RAIDER, "Haradrim Marksman", null, true); - addKeyword(Keyword.SOUTHRON); - addKeyword(Keyword.ARCHER); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new CantTakeArcheryWoundsModifier(self, - new SpotCondition(Filters.not(self), Culture.RAIDER, Race.MAN), - Filters.and(CardType.COMPANION, Keyword.RING_BOUND))); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_061.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_061.java deleted file mode 100644 index 256bba487..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_061.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.common.SitesBlock; -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.ChooseAndDiscardCardsFromHandEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.modifiers.HasInitiativeModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotCondition; -import com.gempukku.lotro.logic.modifiers.condition.AndCondition; -import com.gempukku.lotro.logic.modifiers.condition.LocationCondition; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 1 - * Type: Condition • Support Area - * Game Text: While you can spot a [RAIDER] minion at site 4K, the Shadow has initiative, regardless of the Free Peoples - * player’s hand. Response: If a companion is played, discard a [RAIDER] card from hand to add (5). - * Discard this condition. - */ -public class Card8_061 extends AbstractPermanent { - public Card8_061() { - super(Side.SHADOW, 1, CardType.CONDITION, Culture.RAIDER, "Haradwaith", null, true); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new HasInitiativeModifier(self, - new AndCondition( - new LocationCondition(Filters.siteNumber(4), Filters.siteBlock(SitesBlock.KING)), - new SpotCondition(Culture.RAIDER, CardType.MINION) - ), Side.SHADOW)); - } - - @Override - public List getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, CardType.COMPANION) - && PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.RAIDER)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.RAIDER)); - action.appendEffect( - new AddTwilightEffect(self, 5)); - action.appendEffect( - new SelfDiscardEffect(self)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_062.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_062.java deleted file mode 100644 index e92de5d89..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_062.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotBurdensCondition; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; - -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 5 - * Type: Minion • Man - * Strength: 11 - * Vitality: 3 - * Site: 4 - * Game Text: Easterling. While you can spot 4 burdens, Heavy Axeman is strength +4 and fierce. - */ -public class Card8_062 extends AbstractMinion { - public Card8_062() { - super(5, 11, 3, 4, Race.MAN, Culture.RAIDER, "Heavy Axeman", null, true); - addKeyword(Keyword.EASTERLING); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList<>(); - modifiers.add( - new StrengthModifier(self, self, new SpotBurdensCondition(4), 4)); - modifiers.add( - new KeywordModifier(self, self, new SpotBurdensCondition(4), Keyword.FIERCE, 1)); - return modifiers; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_063.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_063.java deleted file mode 100644 index 127d2bfe9..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_063.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -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.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.modifiers.CantTakeWoundsModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotCondition; -import com.gempukku.lotro.logic.modifiers.condition.AndCondition; -import com.gempukku.lotro.logic.modifiers.condition.NotCondition; -import com.gempukku.lotro.logic.modifiers.condition.PhaseCondition; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 3 - * Type: Condition • Support Area - * Game Text: While you can spot a mounted [RAIDER] Man, [RAIDER] Men cannot take wounds (except during skirmishes). - */ -public class Card8_063 extends AbstractPermanent { - public Card8_063() { - super(Side.SHADOW, 3, CardType.CONDITION, Culture.RAIDER, "Line of Defense"); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new CantTakeWoundsModifier(self, - new AndCondition( - new SpotCondition(Culture.RAIDER, Race.MAN, Filters.mounted), - new NotCondition(new PhaseCondition(Phase.SKIRMISH)) - ), Filters.and(Culture.RAIDER, Race.MAN))); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_064.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_064.java deleted file mode 100644 index 7272ba723..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_064.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -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.cardtype.AbstractAttachable; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.condition.InitiativeCondition; -import com.gempukku.lotro.logic.modifiers.condition.MinThreatCondition; -import com.gempukku.lotro.logic.modifiers.condition.OrCondition; - -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 3 - * Type: Possession • Mount - * Strength: +3 - * Game Text: Bearer must be a Southron. Bearer is fierce. While you have initiative or can spot 4 threats, bearer - * is damage +1. - */ -public class Card8_064 extends AbstractAttachable { - public Card8_064() { - super(Side.SHADOW, CardType.POSSESSION, 3, Culture.RAIDER, PossessionClass.MOUNT, "Mûmakil"); - } - - @Override - public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Keyword.SOUTHRON; - } - - @Override - public int getStrength() { - return 3; - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList<>(); - modifiers.add( - new KeywordModifier(self, Filters.hasAttached(self), Keyword.FIERCE)); - modifiers.add( - new KeywordModifier(self, Filters.hasAttached(self), - new OrCondition( - new InitiativeCondition(Side.SHADOW), - new MinThreatCondition(4) - ), Keyword.DAMAGE, 1)); - return modifiers; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_065.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_065.java deleted file mode 100644 index f18b7aceb..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_065.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.*; -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.*; -import com.gempukku.lotro.logic.effects.choose.ChooseAndPutCardFromDiscardOnTopOfDeckEffect; -import com.gempukku.lotro.logic.timing.Effect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 2 - * Type: Possession • Support Area - * Game Text: Shadow: Remove a threat or discard a [RAIDER] card from hand to add a [RAIDER] token here. - * Regroup: Remove 2 [RAIDER] tokens here to place a [RAIDER] card from your discard pile on top of your draw deck. - */ -public class Card8_065 extends AbstractPermanent { - public Card8_065() { - super(Side.SHADOW, 2, CardType.POSSESSION, Culture.RAIDER, "Ships of Great Draught"); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0) - && (PlayConditions.canRemoveThreat(game, self, 1) - || PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.RAIDER))) { - ActivateCardAction action = new ActivateCardAction(self); - List possibleCosts = new LinkedList<>(); - possibleCosts.add( - new RemoveThreatsEffect(self, 1) { - @Override - public String getText(LotroGame game) { - return "Remove a threat"; - } - }); - possibleCosts.add( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.RAIDER) { - @Override - public String getText(LotroGame game) { - return "Discard a RAIDER card from hand"; - } - }); - action.appendCost( - new ChoiceEffect(action, playerId, possibleCosts)); - action.appendEffect( - new AddTokenEffect(self, self, Token.RAIDER)); - return Collections.singletonList(action); - } - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0) - && PlayConditions.canRemoveTokens(game, self, Token.RAIDER, 2)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new RemoveTokenEffect(self, self, Token.RAIDER, 2)); - action.appendEffect( - new ChooseAndPutCardFromDiscardOnTopOfDeckEffect(action, playerId, 1, 1, Culture.RAIDER)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_066.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_066.java deleted file mode 100644 index ec5648ff4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_066.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.gempukku.lotro.cards.set8.raider; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.GameUtils; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision; -import com.gempukku.lotro.logic.effects.*; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Siege of Gondor - * Side: Shadow - * Culture: Raider - * Twilight Cost: 1 - * Type: Event • Skirmish - * Game Text: Make a corsair strength +1 for each [RAIDER] token you spot (limit +6). If you have initiative, you may - * place this event on top of your draw deck. - */ -public class Card8_066 extends AbstractEvent { - public Card8_066() { - super(Side.SHADOW, 1, Culture.RAIDER, "Wind That Sped Ships", Phase.SKIRMISH); - } - - @Override - public PlayEventAction getPlayEventCardAction(final String playerId, LotroGame game, final PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose Corsair", Keyword.CORSAIR) { - @Override - protected void cardSelected(final LotroGame game, final PhysicalCard card) { - int count = Math.min(6, GameUtils.getSpottableTokensTotal(game, Token.RAIDER)); - - IntegerAwaitingDecision spotDecision = new IntegerAwaitingDecision(1, "How many RAIDER tokens you wish to spot?", 0, count) { - @Override - public void decisionMade(String result) throws DecisionResultInvalidException { - int value = getValidatedResult(result); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, card, value))); - if (PlayConditions.hasInitiative(game, Side.SHADOW)) - action.appendEffect( - new OptionalEffect(action, playerId, - new PutPlayedEventOnTopOfDeckEffect(self))); - } - }; - spotDecision.setDefaultValue(count); - - action.appendEffect( - new PlayoutDecisionEffect(playerId, spotDecision)); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set08/set08-raider.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set08/set08-raider.hjson deleted file mode 100644 index 7e98f4ac4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set08/set08-raider.hjson +++ /dev/null @@ -1,35 +0,0 @@ -{ - 8_57: { - title: Corsair Marauder - culture: Raider - twilight: 4 - type: minion - race: Man - strength: 9 - vitality: 2 - site: 4 - keyword: Corsair - effects: { - type: trigger - optional: true - trigger: { - type: played - filter: self - } - requires: { - type: canSpot - filter: not(self),corsair - } - cost: { - type: discard - filter: choose(possession) - } - effect: { - type: addTokens - culture: raider - filter: choose(hasToken(raider)) - count: 2 - } - } - } -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantTakeArcheryWounds.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantTakeArcheryWounds.java index 099a5be07..3ab70b4a1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantTakeArcheryWounds.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantTakeArcheryWounds.java @@ -1,9 +1,6 @@ package com.gempukku.lotro.cards.build.field.effect.modifier; -import com.gempukku.lotro.cards.build.CardGenerationEnvironment; -import com.gempukku.lotro.cards.build.FilterableSource; -import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; -import com.gempukku.lotro.cards.build.ModifierSource; +import com.gempukku.lotro.cards.build.*; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.logic.modifiers.CantTakeArcheryWoundsModifier; import org.json.simple.JSONObject; @@ -11,13 +8,15 @@ import org.json.simple.JSONObject; public class CantTakeArcheryWounds implements ModifierSourceProducer { @Override public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(object, "filter"); + FieldUtils.validateAllowedFields(object, "filter", "requires"); + final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); final String filter = FieldUtils.getString(object.get("filter"), "filter"); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); return actionContext -> new CantTakeArcheryWoundsModifier(actionContext.getSource(), - filterableSource.getFilterable(actionContext)); + new RequirementCondition(requirements, actionContext), filterableSource.getFilterable(actionContext)); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanPlayFromDiscard.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanPlayFromDiscard.java new file mode 100644 index 000000000..c27c09128 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanPlayFromDiscard.java @@ -0,0 +1,23 @@ +package com.gempukku.lotro.cards.build.field.effect.requirement; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.FilterableSource; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.logic.timing.PlayConditions; +import org.json.simple.JSONObject; + +public class CanPlayFromDiscard implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "cost", "filter"); + + final int cost = FieldUtils.getInteger(object.get("count"), "count", 0); + final String filter = FieldUtils.getString(object.get("filter"), "filter"); + + final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); + + return (actionContext) -> PlayConditions.canPlayFromDiscard(actionContext.getPerformingPlayer(), actionContext.getGame(), cost, filterableSource.getFilterable(actionContext)); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java index cc629c11d..676919ef1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java @@ -17,6 +17,7 @@ public class RequirementFactory { requirementProducers.put("and", new AndRequirementProducer()); requirementProducers.put("or", new OrRequirementProducer()); requirementProducers.put("canmove", new CanMove()); + requirementProducers.put("canplayfromdiscard", new CanPlayFromDiscard()); requirementProducers.put("canselfbeplayed", new CanSelfBePlayed()); requirementProducers.put("canspot", new CanSpot()); requirementProducers.put("canspotburdens", new CanSpotBurdens()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java index 2d3e6b196..e2086709d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java @@ -230,6 +230,8 @@ public class GameUtils { } else if(memory.equals("shadow")) { found = getFirstShadowPlayer(context.getGame()); + } else if (memory.equals("self")) { + found = GameUtils.getAppendedNames(Collections.singleton(context.getSource())); } else { found = GameUtils.getAppendedNames(context.getCardsFromMemory(memory));