Some Sauron cards

This commit is contained in:
marcin.sciesinski
2019-08-07 12:06:43 -07:00
parent 4121b388a7
commit a107a8a9ce
8 changed files with 514 additions and 1 deletions

View File

@@ -0,0 +1,89 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.cards.effects.SelfExertEffect;
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.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision;
import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Title: *Barad-dur Captain
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 5
* Type: Minion - Orc
* Strength: 11
* Vitality: 3
* Home: 6
* Card Number: 1R213
* Game Text: When you play this minion, name a Free Peoples culture.
* While skirmishing a character of the named culture, this minion is damage +1.
* Skirmish: Exert Barad-dur Captain to wound a character it is skirmishing.
*/
public class Card40_213 extends AbstractMinion {
public Card40_213() {
super(5, 11, 3, 6, Race.ORC, Culture.SAURON, "Barad-dur Captain", null, true);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, self)) {
final RequiredTriggerAction action = new RequiredTriggerAction(self);
List<String> possibleCultures = new LinkedList<String>();
for (Culture value : Culture.values()) {
if (value.isFP())
possibleCultures.add(value.getHumanReadable());
}
final String[] cultures = possibleCultures.toArray(new String[0]);
action.appendEffect(
new PlayoutDecisionEffect(self.getOwner(),
new MultipleChoiceAwaitingDecision(1, "Choose a Free Peoples Culture", cultures) {
@Override
protected void validDecisionMade(int index, String result) {
final Culture culture = Culture.findCultureByHumanReadable(result);
action.appendEffect(
new AddUntilEndOfTurnModifierEffect(
new KeywordModifier(self, self, new SpotCondition(self, Filters.inSkirmishAgainst(Filters.character, culture)), Keyword.DAMAGE, 1)));
}
}));
return Collections.singletonList(action);
}
return null;
}
@Override
protected List<? extends Action> getExtraPhaseActions(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 ChooseAndWoundCharactersEffect(action, playerId, 1, 1, Filters.character, Filters.inSkirmishAgainst(self)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,79 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.PreventableEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
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.OptionalTriggerAction;
import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.CharacterWonSkirmishResult;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Title: *Bound to This Fate
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 2
* Type: Condition - Support Area
* Card Number: 1U214
* Game Text: Each time a [SAURON] minion wins a skirmish, you may make that minion fierce until the regroup phase.
* The Free Peoples player may exert a character of a different culture than the losing companion to prevent this.
*/
public class Card40_214 extends AbstractPermanent {
public Card40_214() {
super(Side.SHADOW, 2, CardType.CONDITION, Culture.SAURON, Zone.SUPPORT, "Bound to This Fate", null, true);
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, final LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, Culture.SAURON, CardType.MINION)) {
final CharacterWonSkirmishResult winResult = (CharacterWonSkirmishResult) effectResult;
final PhysicalCard winner = winResult.getWinner();
final OptionalTriggerAction action = new OptionalTriggerAction(self);
action.setText("Make " + GameUtils.getFullName(winner) + " fierce");
action.appendEffect(
new PreventableEffect(
action, new AddUntilStartOfPhaseModifierEffect(
new KeywordModifier(self, winner, Keyword.FIERCE), Phase.REGROUP) {
@Override
public String getText(LotroGame game) {
return "Make " + GameUtils.getFullName(winner) + " fierce";
}
}, GameUtils.getFreePeoplePlayer(game),
new PreventableEffect.PreventionCost() {
@Override
public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) {
final Collection<PhysicalCard> losers = Filters.filter(winResult.getInvolving(), game.getGameState(), game.getModifiersQuerying(), Side.FREE_PEOPLE, CardType.COMPANION);
List<Culture> loserCultures = new LinkedList<Culture>();
for (PhysicalCard loser : losers) {
loserCultures.add(loser.getBlueprint().getCulture());
}
return new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.character, Filters.not(Filters.or(loserCultures.toArray(new Culture[0])))) {
@Override
public String getText(LotroGame game) {
return "Exert character of a different culture than the losing companion";
}
};
}
}));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,75 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.actions.AttachPermanentAction;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
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.GameUtils;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Title: Ever Watchful
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 0
* Type: Condition - Companion
* Card Number: 1C216
* Game Text: To play, exert a [SAURON] tracker. Limit 1 per companion.
* Each time the fellowship moves, the Free Peoples player must add (1) or exert this companion.
*/
public class Card40_216 extends AbstractAttachable {
public Card40_216() {
super(Side.SHADOW, CardType.CONDITION, 0, Culture.SAURON, null, "Ever Watchful");
}
@Override
protected Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Filters.and(CardType.COMPANION, Filters.not(Filters.hasAttached(Filters.name("Ever Watchful"))));
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, Filter additionalAttachmentFilter, int twilightModifier) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, additionalAttachmentFilter, twilightModifier)
&& PlayConditions.canExert(self, game, Culture.SAURON, Keyword.TRACKER);
}
@Override
public AttachPermanentAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, Filterable additionalAttachmentFilter, int twilightModifier) {
final AttachPermanentAction action = super.getPlayCardAction(playerId, game, self, additionalAttachmentFilter, twilightModifier);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.SAURON, Keyword.TRACKER));
return action;
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.moves(game, effectResult)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
List<Effect> possibleEffects = new ArrayList<Effect>(2);
possibleEffects.add(
new AddTwilightEffect(self, 1));
possibleEffects.add(
new ExertCharactersEffect(action, self, self.getAttachedTo()));
action.appendEffect(
new ChoiceEffect(action, GameUtils.getFreePeoplePlayer(game), possibleEffects));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,43 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.modifiers.MinionSiteNumberModifier;
import com.gempukku.lotro.cards.modifiers.conditions.MinThreatCondition;
import com.gempukku.lotro.cards.modifiers.evaluator.ForEachThreatEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.NegativeEvaluator;
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.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Title: Fires Raged Unchecked
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 1
* Type: Condition - Support Area
* Card Number: 1R217
* Game Text: The site number of each [SAURON] Orc is -1 for each threat.
* While you can spot 3 threats, each [SAURON] Orc that is not roaming is strength +1.
*/
public class Card40_217 extends AbstractPermanent {
public Card40_217() {
super(Side.SHADOW, 1, CardType.CONDITION, Culture.SAURON, Zone.SUPPORT, "Fires Raged Unchecked");
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
MinionSiteNumberModifier siteNumber = new MinionSiteNumberModifier(self, Filters.and(Culture.SAURON, Race.ORC), null,
new NegativeEvaluator(new ForEachThreatEvaluator()));
StrengthModifier strength = new StrengthModifier(self, Filters.and(Culture.SAURON, Race.ORC, Filters.not(Filters.roamingMinion)),
new MinThreatCondition(3), 1);
return Arrays.asList(siteNumber, strength);
}
}

View File

@@ -0,0 +1,54 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.common.*;
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.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Title: *Gathering Evil
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 2
* Type: Condition - Support Area
* Card Number: 1U218
* Game Text: At the beginning of each Shadow phase, if you cannot spot more than 2 Free Peoples cultures,
* you may play a [SAURON] minion from your draw deck or discard pile.
*/
public class Card40_218 extends AbstractPermanent {
public Card40_218() {
super(Side.SHADOW, 2, CardType.CONDITION, Culture.SAURON, Zone.SUPPORT, "Gathering Evil");
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.SHADOW)
&& !PlayConditions.canSpotFPCultures(game, 3, playerId)
&& (PlayConditions.canPlayFromDeck(playerId, game, Culture.SAURON, CardType.MINION)
|| PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, CardType.MINION))) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
List<Effect> possibleEffects = new ArrayList<Effect>(2);
possibleEffects.add(
new ChooseAndPlayCardFromDeckEffect(playerId, Culture.SAURON, CardType.MINION));
possibleEffects.add(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.MINION));
action.appendEffect(
new ChoiceEffect(action, playerId, possibleEffects));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,88 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
import com.gempukku.lotro.cards.effects.SelfExertEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator;
import com.gempukku.lotro.cards.modifiers.evaluator.MinEvaluator;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
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.OptionalTriggerAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.AddThreatsEffect;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Title: *The Great Eye, Wreathed in Flame
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 3
* Type: Minion
* Strength: 6
* Vitality: 4
* Home: 6
* Card Number: 1R219
* Game Text: Cunning.
* When you play The Great Eye, add a threat for each companion over 4.
* Each time the Ring-bearer puts on The One Ring, you may reveal this card from hand to add a burden.
* Skirmish: Exert The Great Eye to make a [SAURON] minion strength +2.
*/
public class Card40_219 extends AbstractMinion {
public Card40_219() {
super(3, 6, 4, 6, null, Culture.SAURON, "The Great Eye", "Wreathed in Flame", true);
addKeyword(Keyword.CUNNING);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, self)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddThreatsEffect(self.getOwner(), self,
new MinEvaluator(new CountSpottableEvaluator(4, (Integer) null, CardType.COMPANION), 0)));
return Collections.singletonList(action);
}
return null;
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggersFromHand(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.PUT_ON_THE_ONE_RING) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new RevealCardsFromYourHandEffect(self, playerId, self));
action.appendEffect(
new AddBurdenEffect(playerId, self, 1));
return Collections.singletonList(action);
}
return null;
}
@Override
protected List<? extends Action> getExtraPhaseActions(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, 2, Culture.SAURON, CardType.MINION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,83 @@
package com.gempukku.lotro.cards.set40.sauron;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.actions.AttachPermanentAction;
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
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.GameUtils;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Title: It Will Destroy Them All
* Set: Second Edition
* Side: Shadow
* Culture: Sauron
* Twilight Cost: 1
* Type: Condition - Companion
* Card Number: 1R221
* Game Text: To play, exert a [SAURON] Orc. Limit 1 per companion.
* Each time bearer is assigned to a skirmish, the Free Peoples player must add a burden or make bearer strength -2 until the regroup phase.
*/
public class Card40_221 extends AbstractAttachable {
public Card40_221() {
super(Side.SHADOW, CardType.CONDITION, 1, Culture.SAURON, null, "It Will Destroy Them All");
}
@Override
protected Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Filters.and(CardType.COMPANION, Filters.not(Filters.hasAttached(Filters.name("It Will Destroy Them All"))));
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, Filter additionalAttachmentFilter, int twilightModifier) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, additionalAttachmentFilter, twilightModifier)
&& PlayConditions.canExert(self, game, Culture.SAURON, Race.ORC);
}
@Override
public AttachPermanentAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, Filterable additionalAttachmentFilter, int twilightModifier) {
final AttachPermanentAction action = super.getPlayCardAction(playerId, game, self, additionalAttachmentFilter, twilightModifier);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.SAURON, Race.ORC));
return action;
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.assignedToSkirmish(game, effectResult, null, Filters.hasAttached(self))) {
final String freePeoplePlayer = GameUtils.getFreePeoplePlayer(game);
RequiredTriggerAction action = new RequiredTriggerAction(self);
List<Effect> possibleEffects = new ArrayList<Effect>(2);
possibleEffects.add(
new AddBurdenEffect(freePeoplePlayer, self, 1));
possibleEffects.add(
new AddUntilStartOfPhaseModifierEffect(
new StrengthModifier(self, Filters.hasAttached(self), -2), Phase.REGROUP) {
@Override
public String getText(LotroGame game) {
return "Make bearer strength -2 until the regroun phase";
}
});
action.appendEffect(
new ChoiceEffect(action, freePeoplePlayer, possibleEffects));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -252,4 +252,6 @@ gl_theOneRing,1_2
40_190,1_216
40_191,1_217
40_192,1_218
40_200,2_80
40_200,2_80
40_215,1_246
40_220,1_250