diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_001.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_001.java deleted file mode 100644 index e561dfa9c..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_001.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -import com.gempukku.lotro.common.*; -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.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseOpponentEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 0 - * Type: Event • Maneuver - * Game Text: Spot a Dwarf to choose a Shadow player who must spot a race. Discard from play all minions of all other - * races. - */ -public class Card12_001 extends AbstractEvent { - public Card12_001() { - super(Side.FREE_PEOPLE, 0, Culture.DWARVEN, "Argument Ready to Hand", Phase.MANEUVER); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canSpot(game, Race.DWARF); - } - - @Override - public PlayEventAction getPlayEventCardAction(final String playerId, final LotroGame game, final PhysicalCard self) { - final Filter hasRace = new Filter() { - @Override - public boolean accepts(LotroGame game, PhysicalCard physicalCard) { - return physicalCard.getBlueprint().getRace() != null; - } - }; - - final PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseOpponentEffect(playerId) { - @Override - protected void opponentChosen(String opponentId) { - action.insertEffect( - new ChooseActiveCardEffect(self, opponentId, "Choose character with a race you wish to spare", Filters.character, hasRace) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.insertEffect( - new DiscardCardsFromPlayEffect(self.getOwner(), self, hasRace, CardType.MINION, Filters.not(card.getBlueprint().getRace()))); - } - }); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_002.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_002.java deleted file mode 100644 index 5283747e0..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_002.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.AbstractAttachableFPPossession; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndTransferAttachableEffect; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.RemoveKeywordModifier; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 0 - * Type: Possession • Armor - * Game Text: Bearer must be a Dwarf. Each minion skirmishing bearer loses all damage bonus. Skirmish: Discard this - * possession to transfer one of bearer's possessions to another eligible bearer. - */ -public class Card12_002 extends AbstractAttachableFPPossession { - public Card12_002() { - super(0, 0, 0, Culture.DWARVEN, PossessionClass.ARMOR, "Belt of Erebor"); - } - - @Override - public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Race.DWARF; - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new RemoveKeywordModifier(self, Filters.inSkirmishAgainst(Filters.hasAttached(self)), Keyword.DAMAGE)); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) - && PlayConditions.canSelfDiscard(self, game)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfDiscardEffect(self)); - action.appendEffect( - new ChooseAndTransferAttachableEffect(action, playerId, CardType.POSSESSION, self.getAttachedTo(), Filters.any)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java deleted file mode 100644 index 5e37e1abc..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.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.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.effects.DrawCardsEffect; -import com.gempukku.lotro.logic.modifiers.condition.CardPlayedInCurrentPhaseCondition; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 2 - * Type: Condition • Support Area - * Game Text: Each time a Dwarf wins a skirmish in which you played a [DWARVEN] event, you may draw a card. - */ -public class Card12_003 extends AbstractPermanent { - public Card12_003() { - super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.DWARVEN, "A Clamour of Many Voices"); - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.winsSkirmish(game, effectResult, Race.DWARF) - && new CardPlayedInCurrentPhaseCondition(Filters.owner(playerId), Culture.DWARVEN, CardType.EVENT).isFullfilled(game)) { - OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendEffect( - new DrawCardsEffect(action, playerId, 1)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_004.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_004.java deleted file mode 100644 index c26cee88a..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_004.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.effects.DrawCardsEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 0 - * Type: Event • Skirmish - * Game Text: Make a Dwarf strength +2. Then, if that Dwarf is at a battleground or mountain site, draw a card. - */ -public class Card12_004 extends AbstractEvent { - public Card12_004() { - super(Side.FREE_PEOPLE, 0, Culture.DWARVEN, "Durability", Phase.SKIRMISH); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) { - PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 2, Race.DWARF)); - if (PlayConditions.location(game, Filters.or(Keyword.BATTLEGROUND, Keyword.MOUNTAIN))) - action.appendEffect( - new DrawCardsEffect(action, playerId, 1)); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_006.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_006.java deleted file mode 100644 index 32eeb37b4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_006.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.SelfDiscardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; -import com.gempukku.lotro.logic.modifiers.evaluator.CardMatchesEvaluator; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 3 - * Type: Condition • Support Area - * Game Text: Toil 2. (For each [DWARVEN] character you exert when playing this, its twilight cost is -2) - * Skirmish: Discard this condition to make a Dwarf strength +3 (or +4 if he has resistance 4 or more). - */ -public class Card12_006 extends AbstractPermanent { - public Card12_006() { - super(Side.FREE_PEOPLE, 3, CardType.CONDITION, Culture.DWARVEN, "Dwarven Skill"); - addKeyword(Keyword.TOIL, 2); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) - && PlayConditions.canSelfDiscard(self, game)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfDiscardEffect(self)); - action.appendEffect( - new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, new CardMatchesEvaluator(3, 4, Filters.minResistance(4)), Race.DWARF)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_007.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_007.java deleted file mode 100644 index 140a14a17..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_007.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -import com.gempukku.lotro.logic.cardtype.AbstractCompanion; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseOpponentEffect; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Race; -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.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 2 - * Type: Companion • Dwarf - * Strength: 6 - * Vitality: 3 - * Resistance: 6 - * Game Text: When you play this companion during the fellowship phase, choose a Shadow player who must discard the - * top 2 cards of his or her draw deck. - */ -public class Card12_007 extends AbstractCompanion { - public Card12_007() { - super(2, 6, 3, 6, Culture.DWARVEN, Race.DWARF, null, "Dwarven Warrior"); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, self) - && PlayConditions.isPhase(game, Phase.FELLOWSHIP)) { - final RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new ChooseOpponentEffect(game.getGameState().getCurrentPlayerId()) { - @Override - protected void opponentChosen(String opponentId) { - action.appendEffect( - new DiscardTopCardFromDeckEffect(self, opponentId, 2, true)); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_008.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_008.java deleted file mode 100644 index 28789f1cc..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_008.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.SelfDiscardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; -import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 1 - * Type: Condition • Support Area - * Game Text: Skirmish: Discard this condition to make a Dwarf strength +1 for each of the following that is true: - * he is at a mountain or underground site; he has resistance 3 or more; he is bearing a possession; he is skirmishing - * a fierce minion. - */ -public class Card12_008 extends AbstractPermanent { - public Card12_008() { - super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.DWARVEN, "His Father's Charge"); - } - - @Override - public List getPhaseActionsInPlay(String playerId, final LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) - && PlayConditions.canSelfDiscard(self, game)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfDiscardEffect(self)); - action.appendEffect( - new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, - new Evaluator() { - @Override - public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) { - int bonus = 0; - if (PlayConditions.location(game, Filters.or(Keyword.MOUNTAIN, Keyword.UNDERGROUND))) - bonus++; - if (Filters.minResistance(3).accepts(game, cardAffected)) - bonus++; - if (Filters.hasAttached(CardType.POSSESSION).accepts(game, cardAffected)) - bonus++; - if (Filters.inSkirmishAgainst(CardType.MINION, Keyword.FIERCE).accepts(game, cardAffected)) - bonus++; - return bonus; - } - }, Race.DWARF)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_009.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_009.java deleted file mode 100644 index c7bff7066..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_009.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 1 - * Type: Condition • Support Area - * Game Text: Skirmish: Discard a [DWARVEN] card from hand and spot a minion skirmishing a Dwarf to make that minion - * fierce until the regroup phase. - */ -public class Card12_009 extends AbstractPermanent { - public Card12_009() { - super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.DWARVEN, "Loud and Strong"); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) - && PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.DWARVEN) - && PlayConditions.canSpot(game, CardType.MINION, Filters.inSkirmishAgainst(Race.DWARF))) { - final ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.DWARVEN)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a minion", CardType.MINION, Filters.inSkirmishAgainst(Race.DWARF)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.appendEffect( - 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/set12/dwarven/Card12_010.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_010.java deleted file mode 100644 index 66d2ff596..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_010.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -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.DrawCardsEffect; -import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 4 - * Type: Event • Fellowship - * Game Text: Toil 2. (For each [DWARVEN] character you exert when playing this, its twilight cost is -2) Spot 2 Dwarves - * to draw up to 4 cards. - */ -public class Card12_010 extends AbstractEvent { - public Card12_010() { - super(Side.FREE_PEOPLE, 4, Culture.DWARVEN, "No Pauses, No Spills", Phase.FELLOWSHIP); - addKeyword(Keyword.TOIL, 2); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canSpot(game, 2, Race.DWARF); - } - - @Override - public PlayEventAction getPlayEventCardAction(final String playerId, LotroGame game, PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new PlayoutDecisionEffect(playerId, - new IntegerAwaitingDecision(1, "Choose number of cards to draw", 1, 4, 4) { - @Override - public void decisionMade(String result) throws DecisionResultInvalidException { - int count = getValidatedResult(result); - action.appendEffect( - new DrawCardsEffect(action, playerId, count)); - } - })); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_012.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_012.java deleted file mode 100644 index 129b44956..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_012.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.SelfDiscardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 2 - * Type: Condition • Support Area - * Game Text: Each Dwarf is damage +1 for each possession he bears. Fellowship: Discard this condition to play - * a [DWARVEN] possession from your discard pile. - */ -public class Card12_012 extends AbstractPermanent { - public Card12_012() { - super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.DWARVEN, "Proud and Able", null, true); - } - - @Override - public java.util.List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return java.util.Collections.singletonList(new KeywordModifier(self, Race.DWARF, null, Keyword.DAMAGE, - new Evaluator() { - @Override - public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) { - return Filters.countActive(game, CardType.POSSESSION, Filters.attachedTo(cardAffected)); - } - })); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self) - && PlayConditions.canSelfDiscard(self, game) - && PlayConditions.canPlayFromDiscard(playerId, game, Culture.DWARVEN, CardType.POSSESSION)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfDiscardEffect(self)); - action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.DWARVEN, CardType.POSSESSION)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_013.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_013.java deleted file mode 100644 index 9021ba59f..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_013.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; -import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 0 - * Type: Event • Skirmish - * Game Text: Make a Dwarf strength +2 (or +2 for each possession he bears if he has resistance 4 or more). - */ -public class Card12_013 extends AbstractEvent { - public Card12_013() { - super(Side.FREE_PEOPLE, 0, Culture.DWARVEN, "Sharp Defense", Phase.SKIRMISH); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) { - PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, - new Evaluator() { - @Override - public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) { - if (game.getModifiersQuerying().getResistance(game, cardAffected) >= 4) { - return 2 * Filters.countActive(game, CardType.POSSESSION, Filters.attachedTo(cardAffected)); - } else { - return 2; - } - } - }, Race.DWARF)); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_014.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_014.java deleted file mode 100644 index 74d68e1a4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_014.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -import com.gempukku.lotro.common.*; -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.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 0 - * Type: Condition • Support Area - * Game Text: Each Dwarf gains muster. (At the start of the regroup phase, you may discard a card from hand to draw - * a card.) Each time the fellowship moves from a plains site, discard a card from your hand. - */ -public class Card12_014 extends AbstractPermanent { - public Card12_014() { - super(Side.FREE_PEOPLE, 0, CardType.CONDITION, Culture.DWARVEN, "Stalwart Support"); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new KeywordModifier(self, Race.DWARF, Keyword.MUSTER)); -} - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.movesFrom(game, effectResult, Keyword.PLAINS)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new ChooseAndDiscardCardsFromHandEffect(action, self.getOwner(), true, 1)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_015.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_015.java deleted file mode 100644 index c22597d5e..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_015.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.gempukku.lotro.cards.set12.dwarven; - -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.AbstractCompanion; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Black Rider - * Side: Free - * Culture: Dwarven - * Twilight Cost: 3 - * Type: Companion • Dwarf - * Strength: 7 - * Vitality: 3 - * Resistance: 6 - * Game Text: For each artifact and possession Thrarin bears, he is damage +1. - */ -public class Card12_015 extends AbstractCompanion { - public Card12_015() { - super(3, 7, 3, 6, Culture.DWARVEN, Race.DWARF, null, "Thrarin", "Smith of Erebor", true); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new KeywordModifier(self, self, null, Keyword.DAMAGE, new CountActiveEvaluator(Filters.or(CardType.POSSESSION, CardType.ARTIFACT), Filters.attachedTo(self)))); -} -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set12-Dwarven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Dwarven.hjson similarity index 59% rename from gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set12-Dwarven.hjson rename to gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Dwarven.hjson index 6db9696f2..f13c363bb 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set12-Dwarven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Dwarven.hjson @@ -22,13 +22,22 @@ twilight: 0 type: Event keywords: Maneuver - effects: { type: event - cost: { + requires: { + type: canSpot + filter: dwarf }, effect: [ { + type: chooseActiveCards + text: Choose a race to spare, all other will be discarded + filter: choose(minion,hasRace) + memorize: chosenMinion + } + { + type: discard + filter: all(minion,not(raceInMemory(chosenMinion))) } ] } @@ -65,8 +74,37 @@ twilight: 0 type: Possession itemclass: Armor - #target: a Dwarf + target: dwarf effects: [ + { + type: modifier + modifier: { + type: removeKeyword + filter: minion,inSkirmishAgainst(bearer) + keyword: damage + } + } + { + type: activated + phase: skirmish + cost: [ + { + type: memorizeActive + filter: bearer + memory: bearer + } + { + type: discard + filter: self + } + ] + effect: { + type: transfer + filter: choose(possession,attachedTo(memory(bearer))) + where: choose(character) + checkTarget: true + } + } ] gametext: Bearer must be a Dwarf.
Each minion skirmishing bearer loses all damage bonuses.
Skirmish: Discard this possession to transfer one of bearer's possessions to another eligible bearer. lore: We make good armour and keen swords....' @@ -102,6 +140,21 @@ type: Condition keywords: Support Area effects: [ + { + type: trigger + optional: true + trigger: { + type: winsSkirmish + filter: dwarf + } + requires: { + type: playedCardThisPhase + filter: your,culture(dwarven),event + } + effect: { + type: drawCards + } + } ] gametext: Each time a Dwarf wins a skirmish in which you played a [dwarven] event, you may draw a card. lore: ...crying strange news in the dawn. @@ -136,13 +189,23 @@ twilight: 0 type: Event keywords: Skirmish - effects: { type: event - cost: { - }, effect: [ { + type: modifyStrength + filter: choose(dwarf) + amount: 2 + } + { + type: conditional + requires: { + type: location + filter: or(battleground,mountain) + } + effect: { + type: drawCards + } } ] } @@ -180,8 +243,30 @@ type: Possession strength: 1 itemclass: Bracers - #target: a Dwarf + target: dwarf effects: [ + { + type: activatedTrigger + trigger: { + type: aboutToTakeWound + filter: bearer + } + cost: [ + { + type: memorizeActive + filter: bearer + memory: bearer + } + { + type: discard + filter: self + } + ] + effect: { + type: preventWound + filter: memory(bearer) + } + } ] gametext: Bearer must be a Dwarf.
Response: If bearer is about to take a wound, discard this possession to prevent that wound. lore: Dwarven-smiths forge bracers for fit and agility. @@ -220,6 +305,28 @@ Support Area ] effects: [ + { + type: activated + phase: skirmish + cost: { + type: discard + filter: self + } + effect: { + type: modifyStrength + filter: choose(dwarf) + memorize: chosenDwarf + amount: { + type: condition + condition: { + type: memoryMatches + filter: minResistance(4) + } + true: 4 + false: 3 + } + } + } ] gametext: Toil 2. (For each [dwarven] character you exert when playing this, its twilight cost is -2.)
Skirmish: Discard this condition to make a Dwarf strength +3 (or +4 if he has resistance 4 or more). lore: Gimli's axe-work on the Amon Hen hewed a mighty path through the Uruk-hai. @@ -258,6 +365,23 @@ vitality: 3 resistance: 6 effects: [ + { + type: trigger + trigger: { + type: played + filter: self + } + requires: { + type: phase + phase: fellowship + } + effect: { + type: discardTopCardsFromDeck + forced: true + deck: shadow + count: 2 + } + } ] gametext: When you play this companion during the fellowship phase, choose a Shadow player who must discard the top 2 cards of his or her draw deck. lore: Though Dáin rules Erebor as King Under the Mountain, many of his kindred continue to dwell in the Iron Hills. @@ -293,6 +417,63 @@ type: Condition keywords: Support Area effects: [ + { + type: activated + phase: skirmish + cost: { + type: discard + filter: self + } + effect: { + type: modifyStrength + filter: choose(dwarf) + memorize: chosenDwarf + amount: { + type: sum + source: [ + { + type: condition + condition: { + type: location + filter: or(mountain,underground) + } + true: 1 + false: 0 + } + { + type: condition + condition: { + type: memoryMatches + memory: chosenDwarf + filter: minResistance(3) + } + true: 1 + false: 0 + } + { + type: condition + condition: { + type: memoryMatches + memory: chosenDwarf + filter: hasAttached(possession) + } + true: 1 + false: 0 + } + { + type: condition + condition: { + type: memoryMatches + memory: chosenDwarf + filter: inSkirmishAgainst(fierce,minion) + } + true: 1 + false: 0 + } + ] + } + } + } ] gametext: Skirmish: Discard this condition to make a Dwarf strength +1 for each of the following that is true: he is at a mountain or underground site; he has resistance 3 or more; he is bearing a possession; he is skirmishing a fierce minion. lore: A sharpened axe does well to protect Dwarven honor. @@ -328,6 +509,25 @@ type: Condition keywords: Support Area effects: [ + { + type: activated + phase: skirmish + cost: { + type: discardFromHand + forced: false + filter: choose(culture(dwarven)) + } + requires: { + type: canSpot + filter: minion,inSkirmishAgainst(dwarf) + } + effect: { + type: addKeyword + filter: choose(minion,inSkirmishAgainst(dwarf)) + keyword: fierce + until: regroup + } + } ] gametext: Skirmish: Discard a [dwarven] card from hand and spot a minion skirmishing a Dwarf to make that minion fierce until the regroup phase. lore: Alas! My axe is notched: the forty-second had an iron collar on his neck.' @@ -365,13 +565,27 @@ Toil 2 Fellowship ] - effects: { type: event - cost: { - }, + requires: { + type: canSpot + filter: dwarf + count: 2 + } effect: [ { + type: chooseANumber + text: Choose how many cards to draw + from: 0 + to: 4 + memorize: chosenNumber + } + { + type: drawCards + count: { + type: fromMemory + memory: chosenNumber + } } ] } @@ -386,7 +600,7 @@ } } - 12_11: { + 12_11: { cardInfo: { imagePath: decipher/LOTR12011.jpg javaClass: true @@ -408,19 +622,21 @@ twilight: 0 type: Event keywords: Response - effects: { type: responseEvent trigger: { - - } - cost: { + type: winsSkirmish + filter: dwarf } effect: [ { + type: discardTopCardsFromDeck + forced: true + deck: shadow + count: 3 } ] - ] + } gametext: If a Dwarf wins a skirmish, make an opponent discard 3 cards from the top of his or her draw deck. lore: My folk have never had dealings with any of the servants of the Enemy.' promotext: "" @@ -455,6 +671,30 @@ type: Condition keywords: Support Area effects: [ + { + type: modifier + modifier: { + type: addKeyword + filter: dwarf + keyword: damage + amount: { + type: forEachHasAttached + filter: possession + } + } + } + { + type: activated + phase: fellowship + cost: { + type: discard + filter: self + } + effect: { + type: playCardFromDiscard + filter: choose(culture(dwarven),possession) + } + } ] gametext: Each Dwarf is damage +1 for each possession he bears.
Fellowship: Discard this condition to play a [dwarven] possession from your discard pile. lore: Dwarves' tongues run on when speaking of their handiwork, they say.' @@ -489,13 +729,27 @@ twilight: 0 type: Event keywords: Skirmish - effects: { type: event - cost: { - }, effect: [ { + type: modifyStrength + filter: choose(dwarf) + memorize: chosenDwarf + amount: { + type: condition + condition: { + type: memoryMatches + memory: chosenDwarf + filter: minResistance(4) + } + true: { + type: forEachHasAttached + filter: possession + multiplier: 2 + } + false: 2 + } } ] } @@ -533,6 +787,25 @@ type: Condition keywords: Support Area effects: [ + { + type: modifier + modifier: { + type: addKeyword + filter: dwarf + keyword: muster + } + } + { + type: trigger + trigger: { + type: movesFrom + filter: plains + } + effect: { + type: discardFromHand + forced: true + } + } ] gametext: Each Dwarf gains muster. (At the start of the regroup phase, you may discard a card from hand to draw a card.)
Each time the fellowship moves from a plains site, discard a card from your hand. lore: ...I am glad to have you standing nigh....' @@ -572,6 +845,18 @@ vitality: 3 resistance: 6 effects: [ + { + type: modifier + modifier: { + type: addKeyword + filter: self + keyword: damage + amount: { + type: forEachHasAttached + filter: or(artifact,possession) + } + } + } ] gametext: For each artifact and possession Thrarin bears, he is damage +1. lore: Like many other representatives who have come to Rivendell, Thrarin the smith brings troubling news from the East. diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java index fc3914c5f..7fd7c48ce 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java @@ -248,18 +248,37 @@ public class ValueResolver { final Filterable on1 = onFilter.getFilterable(actionContext); return new MultiplyEvaluator(multiplier.getEvaluator(actionContext), new CountStackedEvaluator(on1, filterableSource.getFilterable(actionContext))); }; + } else if (type.equalsIgnoreCase("forEachHasAttached")) { + FieldUtils.validateAllowedFields(object, "filter", "over", "limit", "multiplier", "divider"); + final String filter = FieldUtils.getString(object.get("filter"), "filter"); + final ValueSource overSource = resolveEvaluator(object.get("over"), 0, environment); + final ValueSource limitSource = resolveEvaluator(object.get("limit"), Integer.MAX_VALUE, environment); + final ValueSource multiplier = resolveEvaluator(object.get("multiplier"), 1, environment); + final ValueSource divider = resolveEvaluator(object.get("divider"), 1, environment); + final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); + return actionContext -> + (Evaluator) (game, cardAffected) -> { + Filterable filterable = filterableSource.getFilterable(actionContext); + return evaluateNumber( + Filters.countActive(game, Filters.attachedTo(cardAffected), filterable), + overSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext), + multiplier.getEvaluator(actionContext), divider.getEvaluator(actionContext), + game, cardAffected); + }; } else if (type.equalsIgnoreCase("forEachYouCanSpot")) { FieldUtils.validateAllowedFields(object, "filter", "over", "limit", "multiplier", "divider"); final String filter = FieldUtils.getString(object.get("filter"), "filter"); final ValueSource overSource = resolveEvaluator(object.get("over"), 0, environment); final ValueSource limitSource = resolveEvaluator(object.get("limit"), Integer.MAX_VALUE, environment); final ValueSource multiplier = resolveEvaluator(object.get("multiplier"), 1, environment); - final int divider = FieldUtils.getInteger(object.get("divider"), "divider", 1); + final ValueSource divider = resolveEvaluator(object.get("divider"), 1, environment); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); - return actionContext -> new DivideEvaluator(divider, - new MultiplyEvaluator(multiplier.getEvaluator(actionContext), - new CountSpottableEvaluator(overSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext), - filterableSource.getFilterable(actionContext)))); + return actionContext -> + (Evaluator) (game, cardAffected) -> evaluateNumber( + Filters.countSpottable(game, filterableSource.getFilterable(actionContext)), + overSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext), + multiplier.getEvaluator(actionContext), divider.getEvaluator(actionContext), + game, cardAffected); } else if (type.equalsIgnoreCase("forEachInDiscard")) { FieldUtils.validateAllowedFields(object, "filter", "multiplier", "limit"); final String filter = FieldUtils.getString(object.get("filter"), "filter"); @@ -570,4 +589,13 @@ public class ValueResolver { } throw new InvalidCardDefinitionException("Unable to resolve an evaluator"); } + + private static int evaluateNumber(int value, Evaluator over, Evaluator limit, Evaluator multiplier, Evaluator divider, + LotroGame game, PhysicalCard cardAffected) { + int result = Math.max(0, value - over.evaluateExpression(game, cardAffected)); + result = Math.min(limit.evaluateExpression(game, cardAffected), result); + result *= multiplier.evaluateExpression(game, cardAffected); + result /= divider.evaluateExpression(game, cardAffected); + return result; + } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index 47bfd40dd..26206c815 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -14,8 +14,11 @@ import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import com.gempukku.lotro.logic.modifiers.evaluator.SingleMemoryEvaluator; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult; +import com.google.common.base.Predicates; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; public class FilterFactory { private final Map simpleFilters = new HashMap<>(); @@ -99,6 +102,8 @@ public class FilterFactory { } return Filters.none; })); + simpleFilters.put("hasrace", + (actionContext -> (Filter) (game, physicalCard) -> physicalCard.getBlueprint().getRace() != null)); simpleFilters.put("idinstored", (actionContext -> (Filter) (game, physicalCard) -> { @@ -425,6 +430,12 @@ public class FilterFactory { throw new InvalidCardDefinitionException("Unknown race definition in filter: " + parameter + ". Do not use race() for races; instead just list the race by itself."); }); + parameterFilters.put("raceinmemory", + (parameter, environment) -> actionContext -> { + Set races = actionContext.getCardsFromMemory(parameter).stream().map( + (Function) physicalCard -> physicalCard.getBlueprint().getRace()).filter(Predicates.notNull()).collect(Collectors.toSet()); + return (Filter) (game, physicalCard) -> races.contains(physicalCard.getBlueprint().getRace()); + }); parameterFilters.put("regionnumber", (parameter, environment) -> { int min, max;