diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json index 5f0d21939..9455ddfba 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json @@ -52,6 +52,125 @@ } } }, + "40_185": { + "title": "Blade Tip", + "culture": "wraith", + "cost": 0, + "type": "condition", + "keyword": "support area", + "effects": [ + { + "type": "activatedTrigger", + "trigger": { + "type": "winsSkirmish", + "filter": "nazgul", + "memorize": "winner" + }, + "effect": { + "type": "transfer", + "filter": "choose(self,zone(support))", + "where": "choose(character,inSkirmishAgainst(memory(winner)),not(hasAttached(name(Blade Tip))))" + } + }, + { + "type": "trigger", + "trigger": { + "type": "startOfPhase", + "phase": "fellowship" + }, + "effect": [ + { + "type": "wound", + "filter": "all(hasAttached(self),not(ring bearer))" + }, + { + "type": "conditional", + "condition": { + "type": "canSpot", + "filter": "hasAttached(self),ring bearer" + }, + "effect": { + "type": "addBurdens" + } + } + ] + } + ] + }, + "40_186": { + "title": "Dark Whispers", + "culture": "wraith", + "cost": 0, + "type": "event", + "keyword": "skirmish", + "condition": { + "type": "canSpotBurdens", + "amount": 3 + }, + "effects": { + "type": "event", + "effect": [ + { + "type": "modifyStrength", + "filter": "choose(nazgul)", + "amount": { + "type": "condition", + "condition": { + "type": "canSpotBurdens", + "amount": 6 + }, + "true": 3, + "false": 1 + }, + "memorize": "chosenNazgul" + }, + { + "type": "addKeyword", + "filter": "memory(chosenNazgul)", + "keyword": "damage", + "amount": { + "type": "condition", + "condition": { + "type": "canSpotBurdens", + "amount": 6 + }, + "true": 2, + "false": 1 + } + } + ] + } + }, + "40_187": { + "title": "DarklySwift", + "culture": "wraith", + "cost": 1, + "type": "event", + "keyword": "regroup", + "condition": { + "type": "canSpot", + "filter": "companion,resistanceLessThan(4)" + }, + "effects": { + "type": "event", + "cost": { + "type": "discard", + "filter": "choose(nazgul)" + }, + "effect": { + "type": "addBurdens", + "amount": { + "type": "condition", + "condition": { + "type": "canSpot", + "filter": "companion,resistanceLessThan(1)" + }, + "true": 2, + "false": 1 + } + } + } + }, "40_211": { "title": "*The Witch-king", "subtitle": "Greatest of the Nine", diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_183.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_183.java deleted file mode 100644 index 942cbf2a7..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_183.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.gempukku.lotro.cards.set40.wraith; - -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.TransferPermanentEffect; -import com.gempukku.lotro.logic.modifiers.CantHealModifier; -import com.gempukku.lotro.logic.modifiers.CantRemoveBurdensModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotCondition; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -/** - * Title: Black Breath - * Set: Second Edition - * Side: Shadow - * Culture: Ringwraith - * Twilight Cost: 1 - * Type: Condition - Support Area - * Card Number: 1U183 - * Game Text: Skirmish: Transfer this condition from your support area to a character skirmishing a Nazgul. Burdens and wounds may not be removed from bearer. - */ -public class Card40_183 extends AbstractPermanent { - public Card40_183() { - super(Side.SHADOW, 1, CardType.CONDITION, Culture.WRAITH, "Black Breath"); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0) - && self.getZone() == Zone.SUPPORT - && Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game, Race.NAZGUL).size() > 0 - && game.getGameState().getSkirmish().getFellowshipCharacter() != null) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect( - new TransferPermanentEffect(self, game.getGameState().getSkirmish().getFellowshipCharacter())); - return Collections.singletonList(action); - } - return null; - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList(); - modifiers.add( - new CantHealModifier(self, Filters.hasAttached(self))); - modifiers.add( - new CantRemoveBurdensModifier(self, new SpotCondition(Filters.ringBearer, Filters.hasAttached(self)), Filters.any)); - return modifiers; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_185.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_185.java deleted file mode 100644 index 4167b7870..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_185.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.gempukku.lotro.cards.set40.wraith; - -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddBurdenEffect; -import com.gempukku.lotro.logic.effects.TransferPermanentEffect; -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.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.effects.WoundCharactersEffect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Title: Blade Tip - * Set: Second Edition - * Side: Shadow - * Culture: Ringwraith - * Twilight Cost: 0 - * Type: Condition - Support Area - * Card Number: 1U185 - * Game Text: Response: If a Nazgul wins a skirmish, transfer this condition from your support area to the losing character. Limit 1 per character. Wound bearer at the start of each fellowship phase. (If bearer is the Ring-bearer, add a burden instead.) - */ -public class Card40_185 extends AbstractPermanent { - public Card40_185() { - super(Side.SHADOW, 0, CardType.CONDITION, Culture.WRAITH, "Blade Tip"); - } - - @Override - public List getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (TriggerConditions.winsSkirmish(game, effectResult, Filters.and(Filters.owner(self.getOwner()), Race.NAZGUL)) - && self.getZone() == Zone.SUPPORT - && game.getGameState().getSkirmish() != null && game.getGameState().getSkirmish().getFellowshipCharacter() != null - && Filters.canSpot(game, Filters.sameCard(game.getGameState().getSkirmish().getFellowshipCharacter()), Filters.not(Filters.hasAttached(Filters.name(getTitle()))))) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect( - new TransferPermanentEffect(self, game.getGameState().getSkirmish().getFellowshipCharacter())); - return Collections.singletonList(action); - } - return null; - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.startOfPhase(game, effectResult, Phase.FELLOWSHIP) - && self.getZone() == Zone.ATTACHED) { - boolean ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()) == self.getAttachedTo(); - RequiredTriggerAction action = new RequiredTriggerAction(self); - if (ringBearer) { - action.appendEffect(new AddBurdenEffect(self.getOwner(), self, 1)); - } else { - action.appendEffect(new WoundCharactersEffect(self, self.getAttachedTo())); - } - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_186.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_186.java deleted file mode 100644 index 3608f9396..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_186.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gempukku.lotro.cards.set40.wraith; - -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.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; - -/** - * Title: Dark Whispers - * Set: Second Edition - * Side: Shadow - * Culture: Ringwraith - * Twilight Cost: 0 - * Type: Event - Skirmish - * Card Number: 1R186 - * Game Text: Spot 3 burdens to make a Nazgul strength +1 and damage +1 or spot 6 burdens to make a Nazgul strength +3 and damage +2. - */ -public class Card40_186 extends AbstractEvent { - public Card40_186() { - super(Side.SHADOW, 0, Culture.WRAITH, "Dark Whispers", Phase.SKIRMISH); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return game.getGameState().getBurdens() >= 3; - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, final LotroGame game, final PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard nazgul) { - int burdens = game.getGameState().getBurdens(); - - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, Filters.sameCard(nazgul), (burdens >= 6) ? 3 : 1))); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new KeywordModifier(self, Filters.sameCard(nazgul), Keyword.DAMAGE, (burdens >= 6) ? 2 : 1))); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_187.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_187.java deleted file mode 100644 index 5c78dfe46..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/wraith/Card40_187.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.gempukku.lotro.cards.set40.wraith; - -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.AddBurdenEffect; -import com.gempukku.lotro.logic.modifiers.SpotCondition; -import com.gempukku.lotro.logic.modifiers.evaluator.ConditionEvaluator; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Title: Darkly Swift - * Set: Second Edition - * Side: Shadow - * Culture: Ringwraith - * Twilight Cost: 1 - * Type: Event - Regroup - * Card Number: 1U187 - * Game Text: Discard a Nazgul and spot a companion with 3 or less resistance to add a burden (or two burdens - * if you can spot a companion with 0 or less resistance.) - */ -public class Card40_187 extends AbstractEvent { - public Card40_187() { - super(Side.SHADOW, 1, Culture.WRAITH, "Darkly Swift", Phase.REGROUP); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canDiscardFromPlay(self, game, Race.NAZGUL) - && PlayConditions.canSpot(game, CardType.COMPANION, Filters.maxResistance(3)); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) { - PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new AddBurdenEffect(playerId, self, - new ConditionEvaluator(1, 2, new SpotCondition(CardType.COMPANION, Filters.maxResistance(0))))); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddBurdens.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddBurdens.java index 0a494bc14..40e711156 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddBurdens.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddBurdens.java @@ -1,13 +1,11 @@ package com.gempukku.lotro.cards.build.field.effect.appender; -import com.gempukku.lotro.cards.build.ActionContext; -import com.gempukku.lotro.cards.build.CardGenerationEnvironment; -import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; -import com.gempukku.lotro.cards.build.PlayerSource; +import com.gempukku.lotro.cards.build.*; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.cards.build.field.effect.EffectAppender; import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer; import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.AddBurdenEffect; import com.gempukku.lotro.logic.timing.Effect; @@ -19,7 +17,7 @@ public class AddBurdens implements EffectAppenderProducer { public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "amount", "player"); - final int amount = FieldUtils.getInteger(effectObject.get("amount"), "amount", 1); + final ValueSource amountSource = ValueResolver.resolveEvaluator(effectObject.get("amount"), 1, environment); final String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); @@ -28,6 +26,7 @@ public class AddBurdens implements EffectAppenderProducer { @Override protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { final String playerAddingBurden = playerSource.getPlayer(actionContext); + final int amount = amountSource.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); return new AddBurdenEffect(playerAddingBurden, actionContext.getSource(), amount); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddKeyword.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddKeyword.java index 6ae7fda7b..d032ded82 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddKeyword.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddKeyword.java @@ -24,7 +24,7 @@ import java.util.Collection; public class AddKeyword implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize", "keyword", "until"); + FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize", "keyword", "amount", "until"); final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); final String filter = FieldUtils.getString(effectObject.get("filter"), "filter"); @@ -37,7 +37,8 @@ public class AddKeyword implements EffectAppenderProducer { int value = 1; if (keywordSplit.length == 2) value = Integer.parseInt(keywordSplit[1]); - final int keywordValue = value; + + final ValueSource amount = ValueResolver.resolveEvaluator(effectObject.get("amount"), value, environment); MultiEffectAppender result = new MultiEffectAppender(); @@ -48,8 +49,9 @@ public class AddKeyword implements EffectAppenderProducer { @Override protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { final Collection cardsFromMemory = actionContext.getCardsFromMemory(memory); + final int keywordCount = amount.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); return new AddUntilModifierEffect( - new KeywordModifier(actionContext.getSource(), Filters.in(cardsFromMemory), keyword, keywordValue), until); + new KeywordModifier(actionContext.getSource(), Filters.in(cardsFromMemory), keyword, keywordCount), until); } });