Migrated Sauron cards in set 6 to hjson

This commit is contained in:
MarcinSc
2024-04-22 23:39:44 +07:00
parent e41842d94c
commit 00c0f59465
13 changed files with 241 additions and 762 deletions

View File

@@ -1,52 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 0
* Type: Possession • Hand Weapon
* Strength: +1
* Game Text: Bearer must be an [SAURON] Orc. Each time bearer wins a skirmish, you may add (1) for each site
* you control.
*/
public class Card6_098 extends AbstractAttachable {
public Card6_098() {
super(Side.SHADOW, CardType.POSSESSION, 0, Culture.SAURON, PossessionClass.HAND_WEAPON, "Banner of the Eye");
}
@Override
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Filters.and(Culture.SAURON, Race.ORC);
}
@Override
public int getStrength() {
return 1;
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, self.getAttachedTo())) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
int count = Filters.countActive(game, Filters.siteControlled(playerId));
action.appendEffect(
new AddTwilightEffect(self, count));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,50 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 3
* Type: Minion • Wraith
* Strength: 7
* Vitality: 2
* Site: 4
* Game Text: Twilight. Skirmish: Exert this minion to make a [SAURON] or twilight minion strength +1 for each twilight
* minion you can spot.
*/
public class Card6_099 extends AbstractMinion {
public Card6_099() {
super(3, 7, 2, 4, Race.WRAITH, Culture.SAURON, "Corpse Lights");
addKeyword(Keyword.TWILIGHT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)
&& PlayConditions.canSelfExert(self, game)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
new CountActiveEvaluator(CardType.MINION, Keyword.TWILIGHT),
CardType.MINION, Filters.or(Culture.SAURON, Keyword.TWILIGHT)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,67 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
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.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.effects.ChoiceEffect;
import com.gempukku.lotro.logic.effects.RemoveBurdenEffect;
import com.gempukku.lotro.logic.effects.SpotEffect;
import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier;
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: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 1
* Type: Minion • Wraith
* Strength: 5
* Vitality: 1
* Site: 4
* Game Text: Twilight. Damage +1. To play this minion, remove a burden or spot a twilight minion.
*/
public class Card6_100 extends AbstractMinion {
public Card6_100() {
super(1, 5, 1, 4, Race.WRAITH, Culture.SAURON, "Dead Ones");
addKeyword(Keyword.TWILIGHT);
addKeyword(Keyword.DAMAGE);
}
@Override
public List<? extends AbstractExtraPlayCostModifier> getExtraCostToPlay(LotroGame game, final PhysicalCard self) {
return Collections.singletonList(
new AbstractExtraPlayCostModifier(self, "Extra cost to play", self) {
@Override
public void appendExtraCosts(LotroGame game, CostToEffectAction action, PhysicalCard card) {
List<Effect> possibleCosts = new LinkedList<>();
possibleCosts.add(
new RemoveBurdenEffect(self.getOwner(), self));
possibleCosts.add(
new SpotEffect(1, CardType.MINION, Keyword.TWILIGHT) {
@Override
public String getText(LotroGame game) {
return "Spot a twilight minion";
}
});
action.appendCost(
new ChoiceEffect(action, self.getOwner(), possibleCosts));
}
@Override
public boolean canPayExtraCostsToPlay(LotroGame game, PhysicalCard card) {
return (game.getGameState().getBurdens() >= 1
|| PlayConditions.canSpot(game, CardType.MINION, Keyword.TWILIGHT));
}
});
}
}

View File

@@ -1,91 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
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.AbstractMinion;
import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 4
* Type: Minion • Orc
* Strength: 11
* Vitality: 3
* Site: 6
* Game Text: Maneuver: Exert this minion twice to make the Free Peoples player name 3 cultures. Wound each companion
* and ally not of a named culture.
*/
public class Card6_101 extends AbstractMinion {
public Card6_101() {
super(4, 11, 3, 6, Race.ORC, Culture.SAURON, "Gate Picket", null, true);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, final LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& PlayConditions.canSelfExert(self, 2, game)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendCost(
new SelfExertEffect(action, self));
final Set<String> possibleCultures = new LinkedHashSet<>();
for (Culture culture : Culture.values())
if (culture.isOfficial())
possibleCultures.add(culture.getHumanReadable());
action.appendEffect(
new PlayoutDecisionEffect(game.getGameState().getCurrentPlayerId(),
new MultipleChoiceAwaitingDecision(1, "Name first spared culture", possibleCultures.toArray(new String[possibleCultures.size()])) {
@Override
protected void validDecisionMade(int index, String result) {
possibleCultures.add(result);
final Culture firstCulture = Culture.findCultureByHumanReadable(result);
action.insertEffect(
new PlayoutDecisionEffect(game.getGameState().getCurrentPlayerId(),
new MultipleChoiceAwaitingDecision(1, "Name second spared culture", possibleCultures.toArray(new String[possibleCultures.size()])) {
@Override
protected void validDecisionMade(int index, String result) {
possibleCultures.add(result);
final Culture secondCulture = Culture.findCultureByHumanReadable(result);
action.insertEffect(
new PlayoutDecisionEffect(game.getGameState().getCurrentPlayerId(),
new MultipleChoiceAwaitingDecision(1, "Name third spared culture", possibleCultures.toArray(new String[possibleCultures.size()])) {
@Override
protected void validDecisionMade(int index, String result) {
Culture thirdCulture = Culture.findCultureByHumanReadable(result);
action.insertEffect(
new WoundCharactersEffect(self,
Filters.and(
Filters.or(CardType.COMPANION, CardType.ALLY),
Filters.not(Filters.or(firstCulture, secondCulture, thirdCulture))
)));
}
}));
}
}));
}
}));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,51 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
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.AbstractMinion;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 3
* Type: Minion • Orc
* Strength: 9
* Vitality: 3
* Site: 6
* Game Text: Maneuver: Exert this minion twice and spot another [SAURON] minion to discard a condition.
*/
public class Card6_102 extends AbstractMinion {
public Card6_102() {
super(3, 9, 3, 6, Race.ORC, Culture.SAURON, "Gate Sentry");
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& PlayConditions.canSelfExert(self, 2, game)
&& PlayConditions.canSpot(game, Culture.SAURON, CardType.MINION, Filters.not(self))) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendCost(
new SelfExertEffect(action, self));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.CONDITION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,48 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 8
* Type: Minion • Troll
* Strength: 13
* Vitality: 4
* Site: 6
* Game Text: Fierce. While you can spot a Troll, Gate Troll's twilight cost is -4. For each other [SAURON] minion
* you can spot, this minion is strength +1.
*/
public class Card6_103 extends AbstractMinion {
public Card6_103() {
super(8, 13, 4, 6, Race.TROLL, Culture.SAURON, "Gate Troll", null, true);
addKeyword(Keyword.FIERCE);
}
@Override
public int getTwilightCostModifier(LotroGame game, PhysicalCard self, PhysicalCard target) {
if (Filters.canSpot(game, Race.TROLL))
return -4;
return 0;
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new StrengthModifier(self, self, null, new CountActiveEvaluator(Culture.SAURON, CardType.MINION, Filters.not(self))));
}
}

View File

@@ -1,72 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.modifiers.evaluator.CountCulturesEvaluator;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 4
* Type: Minion • Orc
* Strength: 11
* Vitality: 3
* Site: 6
* Game Text: Shadow: Exert this minion to draw X cards and add (X), where X is the number of Free Peoples cultures
* you spot over 2.
*/
public class Card6_104 extends AbstractMinion {
public Card6_104() {
super(4, 11, 3, 6, Race.ORC, Culture.SAURON, "Orc Insurgent", null, true);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(final String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canSelfExert(self, game)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendEffect(
new UnrespondableEffect() {
@Override
protected void doPlayEffect(LotroGame game) {
int x = new CountCulturesEvaluator(2, 1, Side.FREE_PEOPLE).evaluateExpression(game, null);
if (x > 0)
action.appendEffect(
new PlayoutDecisionEffect(playerId,
new IntegerAwaitingDecision(1, "Choose number of FP cultures you wish to spot, over 2", 0, x, x) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);
action.appendEffect(
new DrawCardsEffect(action, playerId, spotCount));
action.appendEffect(
new AddTwilightEffect(self, spotCount));
}
}));
}
});
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,51 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
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.ExhaustCharacterEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromHandEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 1
* Type: Condition
* Game Text: Plays to your support area. Regroup: Exert a [SAURON] Orc to play a Nazgul or [SAURON] minion.
* Its twilight cost is -4 and it comes into play exhausted.
*/
public class Card6_105 extends AbstractPermanent {
public Card6_105() {
super(Side.SHADOW, 1, CardType.CONDITION, Culture.SAURON, "Peril");
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(final String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0)
&& PlayConditions.canExert(self, game, Culture.SAURON, Race.ORC)
&& PlayConditions.canPlayFromHand(playerId, game, -4, CardType.MINION, Filters.or(Race.NAZGUL, Culture.SAURON))) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.SAURON, Race.ORC));
action.appendEffect(
new ChooseAndPlayCardFromHandEffect(playerId, game, -4, CardType.MINION, Filters.or(Race.NAZGUL, Culture.SAURON)) {
@Override
protected void afterCardPlayed(PhysicalCard cardPlayed) {
action.appendEffect(
new ExhaustCharacterEffect(self, action, cardPlayed));
}
});
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,59 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
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.AbstractMinion;
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 10
* Type: Minion • Troll
* Strength: 14
* Vitality: 5
* Site: 6
* Game Text: Fierce. While you can spot a Troll, this minion's twilight cost is -4. Skirmish: Discard a [SAURON] card
* from hand to make this minion strength +1.
*/
public class Card6_106 extends AbstractMinion {
public Card6_106() {
super(10, 14, 5, 6, Race.TROLL, Culture.SAURON, "Troll of Udûn");
addKeyword(Keyword.FIERCE);
}
@Override
public int getTwilightCostModifier(LotroGame game, PhysicalCard self, PhysicalCard target) {
if (Filters.canSpot(game, Race.TROLL))
return -4;
return 0;
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)
&& PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.SAURON)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.SAURON));
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, self, 1)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,50 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 1
* Type: Possession • Hand Weapon
* Strength: +2
* Game Text: Bearer must be a [SAURON] Troll. When you play this possession, you may draw a card.
*/
public class Card6_107 extends AbstractAttachable {
public Card6_107() {
super(Side.SHADOW, CardType.POSSESSION, 1, Culture.SAURON, PossessionClass.HAND_WEAPON, "Troll's Chain");
}
@Override
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Filters.and(Culture.SAURON, Race.TROLL);
}
@Override
public int getStrength() {
return 2;
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, self)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new DrawCardsEffect(action, playerId, 1));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,47 +0,0 @@
package com.gempukku.lotro.cards.set6.sauron;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.effects.AddBurdenEffect;
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Ents of Fangorn
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 3
* Type: Minion • Wraith
* Strength: 8
* Vitality: 2
* Site: 4
* Game Text: Twilight. Regroup: Spot another [SAURON] or twilight minion and discard this minion to add a burden.
*/
public class Card6_108 extends AbstractMinion {
public Card6_108() {
super(3, 8, 2, 4, Race.WRAITH, Culture.SAURON, "Wisp of Pale Sheen");
addKeyword(Keyword.TWILIGHT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0)
&& PlayConditions.canSpot(game, Filters.not(self), CardType.MINION, Filters.or(Culture.SAURON, Keyword.TWILIGHT))
&& PlayConditions.canSelfDiscard(self, game)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfDiscardEffect(self));
action.appendEffect(
new AddBurdenEffect(self.getOwner(), self, 1));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -23,18 +23,24 @@
type: Possession
strength: 1
itemclass: Hand weapon
#target: a [sauron] Orc
/*requires: {
}
target: culture(sauron),orc
effects: [
{
}
{
}
]*/
{
type: trigger
optional: true
trigger: {
type: winsSkirmish
filter: bearer
}
effect: {
type: addTwilight
amount: {
type: forEachYouCanSpot
filter: controlledSite
}
}
}
]
gametext: Bearer must be a [sauron] Orc.<br>Each time bearer wins a skirmish, you may add (1) for each site you control.
lore: Stony-faced they were, with dark window-holes staring north and east and west, and each window was full of sleepless eyes.
promotext: ""
@@ -72,17 +78,24 @@
vitality: 2
site: 4
keywords: Twilight
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: activated
phase: skirmish
cost: {
type: exert
filter: self
}
effect: {
type: modifyStrength
filter: choose(or(culture(sauron),twilight),minion)
amount: {
type: forEachYouCanSpot
filter: twilight,minion
}
}
}
]
gametext: <b>Twilight</b>.<br><b>Skirmish:</b> Exert this minion to make a [sauron] or twilight minion strength +1 for each twilight minion you can spot.
lore: I tried once; but you cannot reach them. Only shapes to see, perhaps, not to touch.'
promotext: ""
@@ -123,17 +136,27 @@
Twilight
Damage+1
]
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: extraCost
cost: {
type: choice
texts: [
Remove a burden
Spot a twilight minion
]
effects: [
{
type: removeBurdens
}
{
type: spot
filter: choose(twilight,minion)
}
]
}
}
]
gametext: <b>Twilight</b>. <b>Damage +1</b>.<br>To play this minion, remove a burden or spot a twilight minion.
lore: The Dead can't really be there! Is it some devilry hatched in the Dark Land?'
promotext: ""
@@ -170,17 +193,31 @@
strength: 11
vitality: 3
site: 6
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: activated
phase: maneuver
cost: {
type: exert
filter: self
times: 2
}
effect: [
{
type: chooseActiveCards
player: fp
filter: choose(or(companion,ally))
count: 0-3
text: Choose up to 3 characters of cultures you want to spare, characters of not chosen cultures will get wounded
memorize: chosenCharacters
}
{
type: wound
filter: all(or(companion,ally),not(cultureFromMemory(chosenCharacters)))
}
]
}
]
gametext: <b>Maneuver:</b> Exert this minion twice to make the Free Peoples player name 3 cultures. Wound each companion and ally not of a named culture.
lore: Now the watch-towers, which had fallen into decay, were repaired, and filled with arms, and garrisoned with ceaseless vigilance.
promotext: ""
@@ -217,17 +254,25 @@
strength: 9
vitality: 3
site: 6
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: activated
phase: maneuver
cost: {
type: exert
filter: self
times: 2
}
requires: {
type: canSpot
filter: another,culture(sauron),minion
}
effect: {
type: discard
filter: choose(condition)
}
}
]
gametext: <b>Maneuver:</b> Exert this minion twice and spot another [sauron] minion to discard a condition.
lore: In it there was a single gate of iron, and upon its battlement sentinels paced unceasingly.
promotext: ""
@@ -265,17 +310,27 @@
vitality: 4
site: 6
keywords: Fierce
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: modifyOwnCost
requires: {
type: canSpot
filter: troll
}
amount: -4
}
{
type: modifier
modifier: {
type: modifyStrength
filter: self
amount: {
type: forEachYouCanSpot
filter: another,culture(sauron),minion
}
}
}
]
gametext: <b>Fierce</b>.<br>While you can spot a Troll, Gate Troll's twilight cost is -4.<br>For each other [sauron] minion you can spot, this minion is strength +1.
lore: This was Cirith Gorgor, the Haunted Pass, the entrance to the land of the Enemy.
promotext: ""
@@ -312,17 +367,36 @@
strength: 11
vitality: 3
site: 6
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: activated
phase: shadow
cost: {
type: exert
filter: self
}
effect: [
{
type: chooseANumber
text: Choose value for X
from: 0
to: {
type: forEachFPCulture
over: 2
}
memorize: chosenNumber
}
{
type: drawCards
count: memory(chosenNumber)
}
{
type: addtwilight
amount: memory(chosenNumber)
}
]
}
]
gametext: <b>Shadow:</b> Exert this minion to draw X cards and add (X), where X is the number of Free Peoples cultures you spot over 2.
lore: You've spoken more than enough, Uglúk,' sneered the evil voice. 'I wonder how they would like it in Lugbúrz.'
promotext: ""
@@ -356,17 +430,28 @@
twilight: 1
type: Condition
keywords: Support Area
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: activated
phase: regroup
cost: {
type: exert
filter: choose(culture(sauron),orc)
}
effect: [
{
type: play
filter: choose(or(nazgul,culture(sauron)),minion)
cost: -4
memorize: playedMinion
}
{
type: exhaust
filter: memory(playedMinion)
}
]
}
]
gametext: Plays to your support area.<br><b>Regroup:</b> Exert a [sauron] Orc to play a Nazgûl or [sauron] minion. Its twilight cost is -4 and it comes into play exhausted.
lore: A winged Nazgûl awaits us northward on the east-bank.'
promotext: ""
@@ -404,17 +489,30 @@
vitality: 5
site: 6
keywords: Fierce
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: modifyOwnCost
requires: {
type: canSpot
filter: troll
}
amount: -4
}
{
type: activated
phase: skirmish
cost: {
type: discardFromHand
forced: false
filter: choose(culture(sauron))
}
effect: {
type: modifyStrength
filter: self
amount: 1
}
}
]
gametext: <b>Fierce</b>.<br>While you can spot a Troll, this minion's twilight cost is -4.<br><b>Skirmish:</b> Discard a [sauron] card from hand to make this minion strength +1.
lore: ...Trolls are only counterfeits, made by the Enemy in the Great Darkness, in mockery of Ents....'
promotext: ""
@@ -449,18 +547,20 @@
type: Possession
strength: 2
itemclass: Hand weapon
#target: a [sauron] Troll
/*requires: {
}
target: culture(sauron),troll
effects: [
{
}
{
}
]*/
{
type: trigger
optional: true
trigger: {
type: played
filter: self
}
effect: {
type: drawCards
}
}
]
gametext: Bearer must be a [sauron] Troll.<br>When you play this possession, you may draw a card.
lore: Trolls they were, but filled with the evil will of their master.
promotext: ""
@@ -498,17 +598,23 @@
vitality: 2
site: 4
keywords: Twilight
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: activated
phase: regroup
requires: {
type: canSpot
filter: another,or(culture(sauron),twilight),minion
}
cost: {
type: discard
filter: self
}
effect: {
type: addBurdens
}
}
]
gametext: <b>Twilight</b>.<br><b>Regroup:</b> Spot another [sauron] or twilight minion and discard this minion to add a burden.
lore: They do not see what lies ahead / When Sun has failed and Moon is dead.'
promotext: ""
@@ -546,17 +652,27 @@
vitality: 4
site: 6
keywords: Fierce
/*requires: {
}
effects: [
{
}
{
}
]*/
{
type: modifyOwnCost
requires: {
type: canSpot
filter: troll
}
amount: -4
}
{
type: modifier
modifier: {
type: modifyStrength
filter: self
amount: {
type: forEachYouCanSpot
filter: another,culture(sauron),minion
}
}
}
]
gametext: <b>Fierce</b>.<br>While you can spot a Troll, Gate Troll's twilight cost is -4.<br>For each other [sauron] minion you can spot, this minion is strength +1.
lore: ...what the plague did you bring us here for?'
promotext: ""

View File

@@ -13,9 +13,10 @@ import org.json.simple.JSONObject;
public class ChooseActiveCards implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize", "text");
FieldUtils.validateAllowedFields(effectObject, "count", "player", "filter", "memorize", "text");
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
final String player = FieldUtils.getString(effectObject.get("player"), "player", "you");
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)");
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize");
if (memorize == null)
@@ -24,6 +25,6 @@ public class ChooseActiveCards implements EffectAppenderProducer {
if (text == null)
throw new InvalidCardDefinitionException("You need to define text to show");
return CardResolver.resolveCards(filter, valueSource, memorize, "you", text, environment);
return CardResolver.resolveCards(filter, valueSource, memorize, player, text, environment);
}
}