From f0f57cdf1ab92b2c15c6786156633efaa3006890 Mon Sep 17 00:00:00 2001 From: MarcinSc Date: Sun, 21 Apr 2024 23:41:43 +0700 Subject: [PATCH] Migrated Gandalf cards in set 5 to hjson --- .../lotro/cards/set5/gandalf/Card5_015.java | 80 ------ .../lotro/cards/set5/gandalf/Card5_016.java | 62 ----- .../lotro/cards/set5/gandalf/Card5_017.java | 73 ------ .../lotro/cards/set5/gandalf/Card5_018.java | 42 --- .../lotro/cards/set5/gandalf/Card5_019.java | 78 ------ .../lotro/cards/set5/gandalf/Card5_020.java | 64 ----- .../official/set05}/set05-Gandalf.hjson | 243 ++++++++++++++---- .../modifier/ModifierSourceFactory.java | 1 + ...tyCompanionCanParticipateInSkirmishes.java | 23 ++ ...anionParticipatesInSkirmishedModifier.java | 7 +- 10 files changed, 224 insertions(+), 449 deletions(-) delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_015.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_016.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_017.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_018.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_019.java delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_020.java rename gemp-lotr/gemp-lotr-cards/src/main/resources/{card-stubs => cards/official/set05}/set05-Gandalf.hjson (50%) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/UnhastyCompanionCanParticipateInSkirmishes.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_015.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_015.java deleted file mode 100644 index 771a13fee..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_015.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.gempukku.lotro.cards.set5.gandalf; - -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.cardtype.AbstractCompanion; -import com.gempukku.lotro.logic.effects.*; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.UnhastyCompanionParticipatesInSkirmishedModifier; -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: Battle of Helm's Deep - * Side: Free - * Culture: Gandalf - * Twilight Cost: 3 - * Type: Companion • Ent - * Strength: 8 - * Vitality: 4 - * Resistance: 6 - * Game Text: Unhasty. Assignment: Exert an unbound Hobbit or discard 2 cards from hand to allow Birchseed to skirmish. - * Fellowship: Exert Birchseed to Heal an unbound Hobbit. - */ -public class Card5_015 extends AbstractCompanion { - public Card5_015() { - super(3, 8, 4, 6, Culture.GANDALF, Race.ENT, null, "Birchseed", "Tall Statesman", true); - addKeyword(Keyword.UNHASTY); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self) - && PlayConditions.canSelfExert(self, game)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfExertEffect(action, self)); - action.appendEffect( - new ChooseAndHealCharactersEffect(action, playerId, Race.HOBBIT, Filters.unboundCompanion)); - return Collections.singletonList(action); - } - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.ASSIGNMENT, self) - && ( - PlayConditions.canExert(self, game, Race.HOBBIT, Filters.unboundCompanion) - || game.getGameState().getHand(playerId).size() >= 2)) { - ActivateCardAction action = new ActivateCardAction(self); - List possibleCosts = new LinkedList<>(); - possibleCosts.add( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.HOBBIT, Filters.unboundCompanion) { - @Override - public String getText(LotroGame game) { - return "Exert an unbound Hobbit"; - } - }); - possibleCosts.add( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2) { - @Override - public String getText(LotroGame game) { - return "Discard 2 cards from hand"; - } - }); - action.appendCost( - new ChoiceEffect(action, playerId, possibleCosts)); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new UnhastyCompanionParticipatesInSkirmishedModifier(self, self))); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_016.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_016.java deleted file mode 100644 index e43ea6338..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_016.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.gempukku.lotro.cards.set5.gandalf; - -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.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.CantTakeWoundsModifier; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Battle of Helm's Deep - * Side: Free - * Culture: Gandalf - * Twilight Cost: 5 - * Type: Event - * Game Text: Spell. Maneuver: Exert Gandalf 3 times to make an unbound companion with the Gandalf signet strength +5, - * defender +1, damage +2, and unable to take wounds until the regroup phase. - */ -public class Card5_016 extends AbstractEvent { - public Card5_016() { - super(Side.FREE_PEOPLE, 5, Culture.GANDALF, "Down From the Hills", Phase.MANEUVER); - addKeyword(Keyword.SPELL); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, 3, Filters.gandalf); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 3, Filters.gandalf)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose unbound companion", Filters.unboundCompanion, Signet.GANDALF) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new StrengthModifier(self, Filters.sameCard(card), 5), Phase.REGROUP)); - action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new KeywordModifier(self, Filters.sameCard(card), Keyword.DEFENDER, 1), Phase.REGROUP)); - action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new KeywordModifier(self, Filters.sameCard(card), Keyword.DAMAGE, 2), Phase.REGROUP)); - action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(card)), Phase.REGROUP)); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_017.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_017.java deleted file mode 100644 index 7ce66ea41..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_017.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.gempukku.lotro.cards.set5.gandalf; - -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.cardtype.AbstractCompanion; -import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChoiceEffect; -import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.UnhastyCompanionParticipatesInSkirmishedModifier; -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: Battle of Helm's Deep - * Side: Free - * Culture: Gandalf - * Twilight Cost: 2 - * Type: Companion • Ent - * Strength: 8 - * Vitality: 3 - * Resistance: 6 - * Game Text: Unhasty. Assignment: Exert an unbound Hobbit or discard 2 cards from hand to allow this companion - * to skirmish. - */ -public class Card5_017 extends AbstractCompanion { - public Card5_017() { - super(2, 8, 3, 6, Culture.GANDALF, Race.ENT, null, "Forest Guardian"); - addKeyword(Keyword.UNHASTY); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.ASSIGNMENT, self) - && ( - PlayConditions.canExert(self, game, Race.HOBBIT, Filters.unboundCompanion) - || game.getGameState().getHand(playerId).size() >= 2)) { - ActivateCardAction action = new ActivateCardAction(self); - List possibleCosts = new LinkedList<>(); - possibleCosts.add( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.HOBBIT, Filters.unboundCompanion) { - @Override - public String getText(LotroGame game) { - return "Exert an unbound Hobbit"; - } - }); - possibleCosts.add( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2) { - @Override - public String getText(LotroGame game) { - return "Discard 2 cards from hand"; - } - }); - action.appendCost( - new ChoiceEffect(action, playerId, possibleCosts)); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new UnhastyCompanionParticipatesInSkirmishedModifier(self, self))); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_018.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_018.java deleted file mode 100644 index 3283b6954..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_018.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gempukku.lotro.cards.set5.gandalf; - -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.ChooseAndWoundCharactersEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Battle of Helm's Deep - * Side: Free - * Culture: Gandalf - * Twilight Cost: 3 - * Type: Event - * Game Text: Spell. Maneuver: Spot 3 twilight tokens and exert Gandalf to wound a minion twice. - */ -public class Card5_018 extends AbstractEvent { - public Card5_018() { - super(Side.FREE_PEOPLE, 3, Culture.GANDALF, "Fury of the White Rider", Phase.MANEUVER); - addKeyword(Keyword.SPELL); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, Filters.gandalf) - && game.getGameState().getTwilightPool() >= 3; - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) { - PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.gandalf)); - action.appendEffect( - new ChooseAndWoundCharactersEffect(action, playerId, 1, 1, 2, CardType.MINION)); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_019.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_019.java deleted file mode 100644 index 213bd576a..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_019.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.gempukku.lotro.cards.set5.gandalf; - -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.AbstractCompanion; -import com.gempukku.lotro.logic.effects.*; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.UnhastyCompanionParticipatesInSkirmishedModifier; -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: Battle of Helm's Deep - * Side: Free - * Culture: Gandalf - * Twilight Cost: 4 - * Type: Companion • Ent - * Strength: 10 - * Vitality: 4 - * Resistance: 6 - * Game Text: Unhasty. Assignment: Exert an unbound Hobbit or discard 2 cards from hand to allow Lidenroot to skirmish. - * Skirmish: Exert Lidenroot to wound an [ISENGARD] minion he is skirmishing. - */ -public class Card5_019 extends AbstractCompanion { - public Card5_019() { - super(4, 10, 4, 6, Culture.GANDALF, Race.ENT, null, "Lindenroot", "Elder Shepherd", true); - addKeyword(Keyword.UNHASTY); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.ASSIGNMENT, self) - && ( - PlayConditions.canExert(self, game, Race.HOBBIT, Filters.unboundCompanion) - || game.getGameState().getHand(playerId).size() >= 2)) { - ActivateCardAction action = new ActivateCardAction(self); - List possibleCosts = new LinkedList<>(); - possibleCosts.add( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.HOBBIT, Filters.unboundCompanion) { - @Override - public String getText(LotroGame game) { - return "Exert an unbound Hobbit"; - } - }); - possibleCosts.add( - new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2) { - @Override - public String getText(LotroGame game) { - return "Discard 2 cards from hand"; - } - }); - action.appendCost( - new ChoiceEffect(action, playerId, possibleCosts)); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new UnhastyCompanionParticipatesInSkirmishedModifier(self, self))); - return Collections.singletonList(action); - } - if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) - && PlayConditions.canSelfExert(self, game)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfExertEffect(action, self)); - action.appendEffect( - new ChooseAndWoundCharactersEffect(action, playerId, 1, 1, Culture.ISENGARD, CardType.MINION, Filters.inSkirmishAgainst(self))); - return Collections.singletonList(action); - } - return null; - - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_020.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_020.java deleted file mode 100644 index b7b090d41..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gandalf/Card5_020.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.gempukku.lotro.cards.set5.gandalf; - -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.GameUtils; -import com.gempukku.lotro.logic.actions.CostToEffectAction; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.effects.PreventableEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.timing.Effect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Battle of Helm's Deep - * Side: Free - * Culture: Gandalf - * Twilight Cost: 3 - * Type: Event - * Game Text: Spell. Maneuver: Exert Gandalf to discard up to 2 shadow possessions. Any Shadow player may discard - * a minion to prevent this. - */ -public class Card5_020 extends AbstractEvent { - public Card5_020() { - super(Side.FREE_PEOPLE, 3, Culture.GANDALF, "Turn of the Tide", Phase.MANEUVER); - addKeyword(Keyword.SPELL); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, Filters.gandalf); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) { - PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.gandalf)); - action.appendEffect( - new PreventableEffect(action, - new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 0, 2, Side.SHADOW, CardType.POSSESSION) { - @Override - public String getText(LotroGame game) { - return "Discard up to 2 shadow possessions"; - } - }, GameUtils.getShadowPlayers(game), - new PreventableEffect.PreventionCost() { - @Override - public Effect createPreventionCostForPlayer(CostToEffectAction subAction, String playerId) { - return new ChooseAndDiscardCardsFromPlayEffect(subAction, playerId, 1, 1, CardType.MINION) { - @Override - public String getText(LotroGame game) { - return "Discard a minion"; - } - }; - } - } - )); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set05-Gandalf.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set05/set05-Gandalf.hjson similarity index 50% rename from gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set05-Gandalf.hjson rename to gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set05/set05-Gandalf.hjson index 1a3256628..ca0da7338 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set05-Gandalf.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set05/set05-Gandalf.hjson @@ -27,17 +27,49 @@ vitality: 4 resistance: 6 keywords: Unhasty - /*requires: { - - } effects: [ - { - - } - { - - } - ]*/ + { + type: activated + phase: assignment + cost: { + type: choice + texts: [ + Exert an unbound Hobbit + Discard 2 cards from hand + ] + effects: [ + { + type: exert + filter: choose(unbound,hobbit) + } + { + type: discardFromHand + forced: false + count: 2 + } + ] + } + effect: { + type: addModifier + modifier: { + type: unhastyCompanionCanParticipateInSkirmishes + filter: self + } + } + } + { + type: activated + phase: fellowship + cost: { + type: exert + filter: self + } + effect: { + type: heal + filter: choose(unbound,hobbit) + } + } + ] gametext: Unhasty.
Assignment: Exert an unbound Hobbit or discard 2 cards from hand to allow Birchseed to skirmish.
Fellowship: Exert Birchseed to heal an unbound Hobbit. lore: Slender and royal, he presided over many Entmoots. promotext: "" @@ -74,20 +106,45 @@ Spell Maneuver ] - /*requires: { - - } effects: { type: event cost: { - + type: exert + filter: choose(name(Gandalf)) + times: 3 }, effect: [ { - + type: modifyStrength + filter: choose(unbound,companion,signet(Gandalf)) + amount: 5 + until: regroup + memorize: chosenCompanion + } + { + type: addKeyword + filter: memory(chosenCompanion) + keyword: defender + amount: 1 + until: regroup + } + { + type: addKeyword + filter: memory(chosenCompanion) + keyword: damage + amount: 2 + until: regroup + } + { + type: addModifier + modifier: { + type: cantTakeWounds + filter: memory(chosenCompanion) + } + until: regroup } ] - }*/ + } gametext: Spell.
Maneuver: Exert Gandalf 3 times to make an unbound companion with the Gandalf signet strength +5, defender +1, damage +2, and unable to take wounds until the regroup phase. lore: Down leaped Shadowfax, like a deer.... promotext: "" @@ -125,17 +182,49 @@ vitality: 3 resistance: 6 keywords: Unhasty - /*requires: { - - } effects: [ - { - - } - { - - } - ]*/ + { + type: activated + phase: assignment + cost: { + type: choice + texts: [ + Exert an unbound Hobbit + Discard 2 cards from hand + ] + effects: [ + { + type: exert + filter: choose(unbound,hobbit) + } + { + type: discardFromHand + forced: false + count: 2 + } + ] + } + effect: { + type: addModifier + modifier: { + type: unhastyCompanionCanParticipateInSkirmishes + filter: self + } + } + } + { + type: activated + phase: fellowship + cost: { + type: exert + filter: self + } + effect: { + type: heal + filter: choose(unbound,hobbit) + } + } + ] gametext: Unhasty.
Assignment: Exert an unbound Hobbit or discard 2 cards from hand to allow this companion to skirmish. lore: We keep off strangers and the foolhardy; and we train and we teach, we walk and we weed.' promotext: "" @@ -172,20 +261,24 @@ Spell Maneuver ] - /*requires: { - - } effects: { type: event + requires: { + type: canSpotTwilight + amount: 3 + } cost: { - + type: exert + filter: choose(name(Gandalf)) }, effect: [ { - + type: wound + filter: choose(minion) + times: 2 } ] - }*/ + } gametext: Spell.
Maneuver: Spot 3 twilight tokens and exert Gandalf to wound a minion twice. lore: The White Rider was upon them, and the terror of his coming filled the enemy with madness. promotext: "" @@ -224,17 +317,61 @@ vitality: 4 resistance: 6 keywords: Unhasty - /*requires: { - - } effects: [ - { - - } - { - - } - ]*/ + { + type: activated + phase: assignment + cost: { + type: choice + texts: [ + Exert an unbound Hobbit + Discard 2 cards from hand + ] + effects: [ + { + type: exert + filter: choose(unbound,hobbit) + } + { + type: discardFromHand + forced: false + count: 2 + } + ] + } + effect: { + type: addModifier + modifier: { + type: unhastyCompanionCanParticipateInSkirmishes + filter: self + } + } + } + { + type: activated + phase: fellowship + cost: { + type: exert + filter: self + } + effect: { + type: heal + filter: choose(unbound,hobbit) + } + } + { + type: activated + phase: skirmish + cost: { + type: exert + filter: self + } + effect: { + type: wound + filter: choose(culture(isengard),minion,inSkirmishAgainst(self)) + } + } + ] gametext: Unhasty.
Assignment: Exert an unbound Hobbit or discard 2 cards from hand to allow Lindenroot to skirmish.
Skirmish: Exert Lindenroot to wound an [isengard] minion he is skirmishing. lore: A most well-founded and considerate Ent. promotext: "" @@ -271,20 +408,30 @@ Spell Maneuver ] - /*requires: { - - } effects: { type: event cost: { - + type: exert + filter: choose(name(Gandalf)) }, effect: [ { - + type: preventable + player: shadow + text: Would you like to discard a minion to prevent Free Player discarding up to 2 shadow possessions? + cost: { + type: discard + player: shadow + filter: choose(minion) + } + effect: { + type: discard + filter: choose(side(shadow),possession) + count: 0-2 + } } ] - }*/ + } gametext: Spell.
Maneuver: Exert Gandalf to discard up to 2 Shadow possessions. Any Shadow player may discard a minion to prevent this. lore: Indeed my friends, none of you have any weapon that could hurt me.' promotext: "" diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java index cf52d3ba1..603484410 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java @@ -80,6 +80,7 @@ public class ModifierSourceFactory { modifierProducers.put("shadowhasinitiative", new ShadowHasInitiative()); modifierProducers.put("shadowusesvitinsteadofstr", new ShadowUsesVitInsteadOfStr()); modifierProducers.put("skipphase", new SkipPhase()); + modifierProducers.put("unhastycompanioncanparticipateinskirmishes", new UnhastyCompanionCanParticipateInSkirmishes()); } public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/UnhastyCompanionCanParticipateInSkirmishes.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/UnhastyCompanionCanParticipateInSkirmishes.java new file mode 100644 index 000000000..9d3189716 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/UnhastyCompanionCanParticipateInSkirmishes.java @@ -0,0 +1,23 @@ +package com.gempukku.lotro.cards.build.field.effect.modifier; + +import com.gempukku.lotro.cards.build.*; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.logic.modifiers.UnhastyCompanionParticipatesInSkirmishedModifier; +import org.json.simple.JSONObject; + +public class UnhastyCompanionCanParticipateInSkirmishes implements ModifierSourceProducer { + @Override + public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "filter", "requires"); + + final String filter = FieldUtils.getString(object.get("filter"), "filter"); + final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); + + final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); + + return actionContext -> new UnhastyCompanionParticipatesInSkirmishedModifier(actionContext.getSource(), + new RequirementCondition(requirements, actionContext), + filterableSource.getFilterable(actionContext)); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/UnhastyCompanionParticipatesInSkirmishedModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/UnhastyCompanionParticipatesInSkirmishedModifier.java index 3590809ec..3fa905332 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/UnhastyCompanionParticipatesInSkirmishedModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/UnhastyCompanionParticipatesInSkirmishedModifier.java @@ -5,9 +5,12 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; public class UnhastyCompanionParticipatesInSkirmishedModifier extends AbstractModifier { - public UnhastyCompanionParticipatesInSkirmishedModifier(PhysicalCard source, Filterable affectFilter) { - super(source, "Can participate in archery and skirmishes", affectFilter, ModifierEffect.PRESENCE_MODIFIER); + this(source, null, affectFilter); + } + + public UnhastyCompanionParticipatesInSkirmishedModifier(PhysicalCard source, Condition condition, Filterable affectFilter) { + super(source, "Can participate in archery and skirmishes", affectFilter, condition, ModifierEffect.PRESENCE_MODIFIER); } @Override