From 700c72f165f0751e6c620780a9225c9b22476e88 Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Mon, 15 Jul 2019 16:08:39 -0700 Subject: [PATCH] 3 more cards, and some effect streamlining --- .../modifiers/evaluator/MinEvaluator.java | 21 +++++++ .../lotro/cards/set40/dwarven/Card40_012.java | 58 +++++++++++++++++++ .../lotro/cards/set40/dwarven/Card40_013.java | 37 ++++++++++++ .../lotro/cards/set40/dwarven/Card40_014.java | 48 +++++++++++++++ .../condition/CardStackedCondition.java | 25 ++++++++ 5 files changed, 189 insertions(+) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MinEvaluator.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_012.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_013.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_014.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardStackedCondition.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MinEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MinEvaluator.java new file mode 100644 index 000000000..f76929b1a --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MinEvaluator.java @@ -0,0 +1,21 @@ +package com.gempukku.lotro.cards.modifiers.evaluator; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; + +public class MinEvaluator implements Evaluator { + private int _limit; + private Evaluator _evaluator; + + public MinEvaluator(Evaluator evaluator, int limit) { + _evaluator = evaluator; + _limit = limit; + } + + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { + return Math.max(_limit, _evaluator.evaluateExpression(gameState, modifiersQuerying, cardAffected)); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_012.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_012.java new file mode 100644 index 000000000..73ef0258e --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_012.java @@ -0,0 +1,58 @@ +package com.gempukku.lotro.cards.set40.dwarven; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.PutCardFromStackedIntoHandEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseStackedCardsEffect; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.effects.DrawCardsEffect; + +import java.util.Collection; + +/** + * Title: Dwarven Frenzy + * Set: Second Edition + * Side: Free + * Culture: Dwarven + * Twilight Cost: 1 + * Type: Event - Maneuver + * Card Number: 1R12 + * Game Text: Exert X Dwarves twice to take X [DWARVEN] cards stacked on [DWARVEN] conditions into hand (and draw + * X cards if the fellowship is at a mountain or underground site). + */ +public class Card40_012 extends AbstractEvent { + public Card40_012() { + super(Side.FREE_PEOPLE, 1, Culture.DWARVEN, "Dwarven Frenzy", Phase.MANEUVER); + } + + @Override + public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + final PlayEventAction action = new PlayEventAction(self); + action.appendCost( + new ChooseAndExertCharactersEffect( + action, playerId, 0, Integer.MAX_VALUE, 2, Race.DWARF) { + @Override + protected void cardsToBeExertedCallback(Collection characters) { + int exertedDwarves = characters.size(); + action.appendEffect( + new ChooseStackedCardsEffect(action, playerId, exertedDwarves, exertedDwarves, Filters.and(Culture.DWARVEN, CardType.CONDITION), Culture.DWARVEN) { + @Override + protected void cardsChosen(LotroGame game, Collection stackedCards) { + for (PhysicalCard stackedCard : stackedCards) { + action.appendEffect(new PutCardFromStackedIntoHandEffect(stackedCard)); + } + } + }); + if (Filters.or(Keyword.MOUNTAIN, Keyword.UNDERGROUND).accepts(game.getGameState(), game.getModifiersQuerying(), game.getGameState().getCurrentSite())) { + action.appendEffect( + new DrawCardsEffect(action, playerId, exertedDwarves)); + } + } + }); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_013.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_013.java new file mode 100644 index 000000000..8caa5d0ea --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_013.java @@ -0,0 +1,37 @@ +package com.gempukku.lotro.cards.set40.dwarven; + +import com.gempukku.lotro.cards.AbstractPermanent; +import com.gempukku.lotro.cards.modifiers.evaluator.CountStackedEvaluator; +import com.gempukku.lotro.cards.modifiers.evaluator.LimitEvaluator; +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.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Dwarven Ire + * Set: Second Edition + * Side: Free + * Culture: Dwarven + * Twilight Cost: 2 + * Type: Condition - Support Area + * Card Number: 1R13 + * Game Text: Each Dwarf is damage +1 for each card stacked on this condition (limit +2). + */ +public class Card40_013 extends AbstractPermanent { + public Card40_013() { + super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.DWARVEN, Zone.SUPPORT, "Dwarven Ire", null, true); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + KeywordModifier keywordModifier = new KeywordModifier(self, Race.DWARF, null, Keyword.DAMAGE, + new CountStackedEvaluator(2, self, Filters.any)); + return Collections.singletonList(keywordModifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_014.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_014.java new file mode 100644 index 000000000..d5ce2d6ee --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/dwarven/Card40_014.java @@ -0,0 +1,48 @@ +package com.gempukku.lotro.cards.set40.dwarven; + +import com.gempukku.lotro.cards.AbstractPermanent; +import com.gempukku.lotro.cards.modifiers.evaluator.AddEvaluator; +import com.gempukku.lotro.cards.modifiers.evaluator.LimitEvaluator; +import com.gempukku.lotro.cards.modifiers.evaluator.MinEvaluator; +import com.gempukku.lotro.cards.modifiers.evaluator.VitalityEvaluator; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; +import com.gempukku.lotro.logic.modifiers.condition.CardStackedCondition; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Dwarven Vigor + * Set: Second Edition + * Side: Free + * Culture: Dwarven + * Twilight Cost: 1 + * Type: Condition - Support Area + * Card Number: 1R14 + * Game Text: While there is a [DWARVEN] card stacked on this condition, each Dwarf is strength +1 for each point of vitality over 3 that he has. + */ +public class Card40_014 extends AbstractPermanent { + public Card40_014(){ + super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.DWARVEN, Zone.SUPPORT, "Dwarven Vigor", null, true); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + StrengthModifier modifier = new StrengthModifier(self, Race.DWARF, + new CardStackedCondition(1, self, Culture.DWARVEN), + new Evaluator() { + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { + return Math.max(0, modifiersQuerying.getVitality(gameState, cardAffected) - 3); + } + }); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardStackedCondition.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardStackedCondition.java new file mode 100644 index 000000000..dc8d7b20b --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardStackedCondition.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.logic.modifiers.condition; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class CardStackedCondition implements Condition { + private Filter _stackedOn; + private Filter _cardStacked; + private int _minimumCount; + + public CardStackedCondition(int minimumCount, Filterable stackedOn, Filterable... cardStacked) { + _minimumCount = minimumCount; + _stackedOn = Filters.and(stackedOn); + _cardStacked = Filters.and(cardStacked); + } + + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return Filters.findFirstActive(gameState, modifiersQuerying, _stackedOn, Filters.hasStacked(_minimumCount, _cardStacked)) != null; + } +}