diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_222.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_222.java new file mode 100644 index 000000000..ad639b03c --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_222.java @@ -0,0 +1,69 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +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.GameState; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Mordor Archer Captain + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 7 + * Type: Minion - Orc + * Strength: 13 + * Vitality: 4 + * Home: 6 + * Card Number: 1R222 + * Game Text: Archer. Mordor Archer Captain's twilight cost is -1 for each [SAURON] archer you can spot. + * Archery: Exert Mordor Archer Captain twice and spot an unbound companion. That companion may not take wounds during the archery phase. + */ +public class Card40_222 extends AbstractMinion { + public Card40_222() { + super(7, 13, 4, 6, Race.ORC, Culture.SAURON, "Mordor Archer Captain", null, true); + addKeyword(Keyword.ARCHER); + } + + @Override + public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + return -Filters.countActive(gameState, modifiersQuerying, Culture.SAURON, Keyword.ARCHER); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.ARCHERY, self, 0) + && PlayConditions.canSelfExert(self, 2, game)) { + final ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 2, self)); + action.appendEffect( + new ChooseActiveCardEffect(self, playerId, "Choose unbound companion", Filters.unboundCompanion) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard card) { + action.appendEffect( + new AddUntilEndOfPhaseModifierEffect( + new CantTakeWoundsModifier(self, card))); + } + }); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_225.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_225.java new file mode 100644 index 000000000..6ada14565 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_225.java @@ -0,0 +1,58 @@ +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.SelfDiscardEffect; +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.effects.ChooseAndHealCharactersEffect; +import com.gempukku.lotro.logic.timing.Effect; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Bowcaster + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 1 + * Type: Minion - Orc + * Strength: 5 + * Vitality: 1 + * Home: 6 + * Card Number: 1C225 + * Game Text: Archer. To play, spot a [SAURON] minion. + * Response: If this minion is about to be killed during the archery phase, discard it to heal another [SAURON] archer. + */ +public class Card40_225 extends AbstractMinion { + public Card40_225() { + super(1, 5, 1, 6, Race.ORC, Culture.SAURON, "Orc Bowcaster"); + addKeyword(Keyword.ARCHER); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { + return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile) + && PlayConditions.canSpot(game, Culture.SAURON, CardType.MINION); + } + + @Override + public List getOptionalInPlayBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) { + if (TriggerConditions.isGettingKilled(effect, game, self) + && PlayConditions.isPhase(game, Phase.ARCHERY) + && PlayConditions.canSelfDiscard(self, game)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new SelfDiscardEffect(self)); + action.appendEffect( + new ChooseAndHealCharactersEffect(action, playerId, 1, 1, Culture.SAURON, Keyword.ARCHER, Filters.not(self))); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_226.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_226.java new file mode 100644 index 000000000..4625d48e4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_226.java @@ -0,0 +1,47 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; +import com.gempukku.lotro.cards.modifiers.conditions.NotCondition; +import com.gempukku.lotro.cards.modifiers.conditions.SpotCulturesCondition; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.common.Side; +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.SpotCondition; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Brute + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Minion - Orc + * Strength: 8 + * Vitality: 3 + * Home: 6 + * Card Number: 1C226 + * Game Text: While you can spot another [SAURON] minion and cannot spot more than 2 Free Peoples cultures, this minion is strength +2. + */ +public class Card40_226 extends AbstractMinion { + public Card40_226() { + super(3, 8, 3, 6, Race.ORC, Culture.SAURON, "Orc Brute"); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + StrengthModifier modifier = new StrengthModifier(self, self, + new AndCondition( + new SpotCondition(Culture.SAURON, CardType.MINION, Filters.not(self)), + new NotCondition(new SpotCulturesCondition(3, Side.FREE_PEOPLE))), 2); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_227.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_227.java new file mode 100644 index 000000000..24403b779 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_227.java @@ -0,0 +1,43 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +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.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Orc Marskman + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 2 + * Type: Minion - Orc + * Strength: 6 + * Vitality: 3 + * Home: 6 + * Card Number: 1C227 + * Game Text: Tracker. Archer. While you can spot 3 trackers, the minion archery total is +1. + */ +public class Card40_227 extends AbstractMinion { + public Card40_227() { + super(2, 6, 3, 6, Race.ORC, Culture.SAURON, "Orc Marksman", null, true); + addKeyword(Keyword.TRACKER); + addKeyword(Keyword.ARCHER); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + ArcheryTotalModifier modifier = new ArcheryTotalModifier(self, Side.SHADOW, + new SpotCondition(3, Keyword.TRACKER), 1); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_228.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_228.java new file mode 100644 index 000000000..d26ff7fa1 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_228.java @@ -0,0 +1,55 @@ +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.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.OptionalTriggerAction; +import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect; +import com.gempukku.lotro.logic.effects.RemoveThreatsEffect; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Miscreant + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Minion - Orc + * Strength: 8 + * Vitality: 3 + * Home: 6 + * Card Number: 1C228 + * Game Text: At the start of each skirmish involving this minion, you may remove a threat and spot another [SAURON] Orc + * to wound a companion this minion is skirmishing. + */ +public class Card40_228 extends AbstractMinion { + public Card40_228() { + super(3, 8, 3, 6, Race.ORC, Culture.SAURON, "Orc Miscreant"); + } + + @Override + public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (TriggerConditions.startOfPhase(game, effectResult, Phase.SKIRMISH) + && PlayConditions.canSpot(game, self, Filters.inSkirmish) + && PlayConditions.canRemoveThreat(game, self, 1) + && PlayConditions.canSpot(game, self, Culture.SAURON, Race.ORC, Filters.not(self))) { + OptionalTriggerAction action = new OptionalTriggerAction(self); + action.appendCost( + new RemoveThreatsEffect(self, 1)); + action.appendEffect( + new ChooseAndWoundCharactersEffect(action, playerId, 1, 1, CardType.COMPANION, Filters.inSkirmishAgainst(self))); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_229.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_229.java new file mode 100644 index 000000000..f3f44487b --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_229.java @@ -0,0 +1,48 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; +import com.gempukku.lotro.cards.modifiers.conditions.NotCondition; +import com.gempukku.lotro.cards.modifiers.conditions.SpotCulturesCondition; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Monstrosity + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 4 + * Type: Minion - Orc + * Strength: 11 + * Vitality: 3 + * Home: 6 + * Card Number: 1R229 + * Game Text: While you can spot another [SAURON] Orc and cannot spot more than 2 Free Peoples cultures, this minion is damage +1. + */ +public class Card40_229 extends AbstractMinion { + public Card40_229() { + super(4, 11, 3, 6, Race.ORC, Culture.SAURON,"Orc Monstrosity"); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + KeywordModifier modifier = new KeywordModifier(self, self, + new AndCondition( + new SpotCondition(Culture.SAURON, Race.ORC, Filters.not(self)), + new NotCondition(new SpotCulturesCondition(3, Side.FREE_PEOPLE)) + ), Keyword.DAMAGE, 1); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_230.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_230.java new file mode 100644 index 000000000..f43b23cc4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_230.java @@ -0,0 +1,49 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; +import com.gempukku.lotro.cards.modifiers.conditions.NotCondition; +import com.gempukku.lotro.cards.modifiers.conditions.SpotCulturesCondition; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.common.Side; +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.SpotCondition; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Ravager + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Minion - Orc + * Strength: 9 + * Vitality: 3 + * Home: 6 + * Card Number: 1U230 + * Game Text: Tracker. While you can spot another [SAURON] Orc and cannot spot more than 2 Free Peoples cultures, + * each character skirmishing this minion is strength -1. + */ +public class Card40_230 extends AbstractMinion { + public Card40_230() { + super(3, 9, 3, 6, Race.ORC, Culture.SAURON, "Orc Ravager"); + addKeyword(Keyword.TRACKER); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + StrengthModifier modifier = new StrengthModifier(self, Filters.inSkirmishAgainst(self), + new AndCondition( + new SpotCondition(Culture.SAURON, Race.ORC, Filters.not(self)), + new NotCondition(new SpotCulturesCondition(3, Side.FREE_PEOPLE))), -1); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_231.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_231.java new file mode 100644 index 000000000..a355e05d1 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_231.java @@ -0,0 +1,68 @@ +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.SelfExertEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect; +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.OptionalTriggerAction; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Orc Raveners + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 4 + * Type: Minion - Orc + * Strength: 11 + * Vitality: 3 + * Home: 6 + * Card Number: 1R231 + * Game Text: Tracker. When you play this minion, you may spot another [SAURON] minion to discard a condition. + * Maneuver: Exert this minion twice to play a [SAURON] condition from your discard pile. + */ +public class Card40_231 extends AbstractMinion { + public Card40_231() { + super(4, 11, 3, 6, Race.ORC, Culture.SAURON, "Orc Raveners", null, true); + addKeyword(Keyword.TRACKER); + } + + @Override + public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (TriggerConditions.played(game, effectResult, self) + && PlayConditions.canSpot(game, Culture.SAURON, CardType.MINION, Filters.not(self))) { + OptionalTriggerAction action = new OptionalTriggerAction(self); + action.appendEffect( + new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.CONDITION)); + return Collections.singletonList(action); + } + return null; + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0) + && PlayConditions.canSelfExert(self, 2, game) + && PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, CardType.CONDITION)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 2, self)); + action.appendEffect( + new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION)); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_232.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_232.java new file mode 100644 index 000000000..d3b369e35 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_232.java @@ -0,0 +1,51 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.SelfDiscardEffect; +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.ActivateCardAction; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Savage + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 2 + * Type: Minion - Orc + * Strength: 7 + * Vitality: 2 + * Home: 6 + * Card Number: 1C232 + * Game Text: Tracker. Regroup: Spot another [SAURON] Orc and discard this minion to make the Free Peoples player exert a companion. + */ +public class Card40_232 extends AbstractMinion { + public Card40_232() { + super(2, 7, 2, 6, Race.ORC, Culture.SAURON, "Orc Savage"); + addKeyword(Keyword.TRACKER); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0) + && PlayConditions.canSpot(game, Culture.SAURON, Race.ORC, Filters.not(self)) + && PlayConditions.canSelfDiscard(self, game)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new SelfDiscardEffect(self)); + action.appendEffect( + new ChooseAndExertCharactersEffect(action, GameUtils.getFreePeoplePlayer(game), 1, 1, CardType.COMPANION)); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_233.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_233.java new file mode 100644 index 000000000..30f79d01d --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_233.java @@ -0,0 +1,57 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.SelfExertEffect; +import com.gempukku.lotro.cards.modifiers.RoamingPenaltyModifier; +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.effects.ChooseAndWoundCharactersEffect; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Scouting Party + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 4 + * Type: Minion - Orc + * Strength: 9 + * Vitality: 3 + * Home: 6 + * Card Number: 1R233 + * Game Text: Tracker. The roaming penalty for each [SAURON] minion is -1. Skirmish: Exert this minion to wound a character it is skirmishing. + */ +public class Card40_233 extends AbstractMinion { + public Card40_233() { + super(4, 9, 3, 6, Race.ORC, Culture.SAURON, "Orc Scouting Party"); + addKeyword(Keyword.TRACKER); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + RoamingPenaltyModifier modifier = new RoamingPenaltyModifier(self, Filters.and(Culture.SAURON, CardType.MINION), -1); + return Collections.singletonList(modifier); + } + + @Override + protected List 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; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_234.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_234.java new file mode 100644 index 000000000..8ba27f11b --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_234.java @@ -0,0 +1,60 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.SelfExertEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.modifiers.DoesNotAddToArcheryTotalModifier; +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.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Sharpshooter + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 2 + * Type: Minion - Orc + * Strength: 7 + * Vitality: 2 + * Home: 6 + * Card Number: 1C234 + * Game Text: Tracker. Archer. + * Archery: Spot 3 trackers and exert this minion to exert an unbound companion; this minion does not add to the minion archery total. + */ +public class Card40_234 extends AbstractMinion { + public Card40_234() { + super(2, 7, 2, 6, Race.ORC, Culture.SAURON, "Orc Sharpshooter"); + addKeyword(Keyword.TRACKER); + addKeyword(Keyword.ARCHER); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.ARCHERY, self, 0) + && PlayConditions.canSpot(game, 3, Keyword.TRACKER) + && PlayConditions.canSelfExert(self, game)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new SelfExertEffect(action, self)); + action.appendEffect( + new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.unboundCompanion)); + action.appendEffect( + new AddUntilEndOfPhaseModifierEffect( + new DoesNotAddToArcheryTotalModifier(self, self))); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_235.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_235.java new file mode 100644 index 000000000..c6ccfab35 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_235.java @@ -0,0 +1,44 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.SidePlayerCantPlayPhaseEventsOrSpecialAbilitiesModifier; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; +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.SpotCondition; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Orc Skulker + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Minion - Orc + * Strength: 9 + * Vitality: 3 + * Home: 6 + * Card Number: 1U235 + * Game Text: Tracker. + * While you can spot 3 trackers, the Free Peoples player may not play skirmish events or use skirmish special abilities + * in skirmishes involving this minion. + */ +public class Card40_235 extends AbstractMinion { + public Card40_235() { + super(3, 9, 3, 6, Race.ORC, Culture.SAURON, "Orc Skulker", null, true); + addKeyword(Keyword.TRACKER); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + SidePlayerCantPlayPhaseEventsOrSpecialAbilitiesModifier modifier = new SidePlayerCantPlayPhaseEventsOrSpecialAbilitiesModifier( + self, new AndCondition(new SpotCondition(3, Keyword.TRACKER), new SpotCondition(self, Filters.inSkirmish)), + Side.FREE_PEOPLE, Phase.SKIRMISH); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_236.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_236.java new file mode 100644 index 000000000..d309b6735 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_236.java @@ -0,0 +1,41 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +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.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; + +import java.util.Collections; +import java.util.List; + +/** + * Title: Orc Stalker + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 4 + * Type: Minion - Orc + * Strength: 10 + * Vitality: 3 + * Home: 6 + * Card Number: 1C236 + * Game Text: Tracker. While you can spot 3 trackers, this minion is fierce. + */ +public class Card40_236 extends AbstractMinion { + public Card40_236() { + super(4, 10, 3, 6, Race.ORC, Culture.SAURON, "Orc Stalker"); + addKeyword(Keyword.TRACKER); + } + + @Override + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + KeywordModifier modifier = new KeywordModifier(self, self, + new SpotCondition(3, Keyword.TRACKER), Keyword.FIERCE, 1); + return Collections.singletonList(modifier); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_237.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_237.java new file mode 100644 index 000000000..b4d743a47 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_237.java @@ -0,0 +1,53 @@ +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.ExertCharactersEffect; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +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.RequiredTriggerAction; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.AssignAgainstResult; +import com.gempukku.lotro.logic.timing.results.AssignedToSkirmishResult; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Orc Villain + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Minion - Orc + * Strength: 8 + * Vitality: 3 + * Home: 6 + * Card Number: 1R237 + * Game Text: While you can spot another [SAURON] minion and cannot spot more than 2 Free Peoples cultures, each time + * this minion is assigned to skirmish a companion, that companion must exert. + */ +public class Card40_237 extends AbstractMinion { + public Card40_237() { + super(3, 8, 3, 6, Race.ORC, Culture.SAURON, "Orc Villain", null, true); + } + + @Override + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (TriggerConditions.assignedAgainst(game, effectResult, null, CardType.COMPANION, self) + && PlayConditions.canSpot(game, Culture.SAURON, CardType.MINION, Filters.not(self)) + && !PlayConditions.canSpotFPCultures(game, 3, self.getOwner())) { + AssignAgainstResult assignedResult = (AssignAgainstResult) effectResult; + RequiredTriggerAction action = new RequiredTriggerAction(self); + action.appendEffect( + new ExertCharactersEffect(action, self, CardType.COMPANION, Filters.in(assignedResult.getAgainst()))); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java new file mode 100644 index 000000000..ffc8ff063 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_238.java @@ -0,0 +1,51 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractPermanent; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.SelfDiscardEffect; +import com.gempukku.lotro.cards.modifiers.evaluator.ForEachThreatEvaluator; +import com.gempukku.lotro.common.*; +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.effects.AddTwilightEffect; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Title: *Sauron's Forces + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Condition - Support Area + * Card Number: 1U238 + * Game Text: To play, spot a [SAURON] Orc. Shadow: Discard this condition to add (1) for each threat. + */ +public class Card40_238 extends AbstractPermanent { + public Card40_238() { + super(Side.SHADOW, 3, CardType.CONDITION, Culture.SAURON, Zone.SUPPORT, "Sauron's Forces", null, true); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { + return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile) + && PlayConditions.canSpot(game, Culture.SAURON, Race.ORC); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0) + && PlayConditions.canSelfDiscard(self, game)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new SelfDiscardEffect(self)); + action.appendEffect( + new AddTwilightEffect(self, new ForEachThreatEvaluator())); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_239.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_239.java new file mode 100644 index 000000000..2254dab4d --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_239.java @@ -0,0 +1,45 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.effects.AddThreatsEffect; + +/** + * Title: Shadow in the East + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 1 + * Type: Event - Maneuver + * Card Number: 1C239 + * Game Text: Spot a [SAURON] minion to add a threat. Add an additional threat for each Free Peoples culture less than 4 you can spot. + */ +public class Card40_239 extends AbstractEvent { + public Card40_239() { + super(Side.SHADOW, 1, Culture.SAURON, "Shadow in the East", Phase.MANEUVER); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { + return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile) + && PlayConditions.canSpot(game, Culture.SAURON, CardType.MINION); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + PlayEventAction action = new PlayEventAction(self); + int fpCulturesCount = GameUtils.getSpottableFPCulturesCount(game.getGameState(), game.getModifiersQuerying(), playerId); + int threatCount = 1 + Math.max(0, 4 - fpCulturesCount); + action.appendEffect( + new AddThreatsEffect(playerId, self, threatCount)); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_241.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_241.java new file mode 100644 index 000000000..93c029b7b --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_241.java @@ -0,0 +1,37 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; +import com.gempukku.lotro.cards.modifiers.evaluator.ForEachThreatEvaluator; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; + +/** + * Title: Threat of Mordor + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 1 + * Type: Event - Skirmish + * Card Number: 1C241 + * Game Text: Make a [SAURON] minion strength +1 for each threat. + */ +public class Card40_241 extends AbstractEvent { + public Card40_241() { + super(Side.SHADOW, 1, Culture.SAURON, "Threat of Mordor", Phase.SKIRMISH); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, + new ForEachThreatEvaluator(), Culture.SAURON, CardType.MINION)); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_242.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_242.java new file mode 100644 index 000000000..ac5684ad8 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set40/sauron/Card40_242.java @@ -0,0 +1,40 @@ +package com.gempukku.lotro.cards.set40.sauron; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; +import com.gempukku.lotro.cards.modifiers.conditions.NotCondition; +import com.gempukku.lotro.cards.modifiers.conditions.SpotCulturesCondition; +import com.gempukku.lotro.cards.modifiers.evaluator.ConditionEvaluator; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; + +/** + * Title: War Cry of Mordor + * Set: Second Edition + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 1 + * Type: Event - Skirmish + * Card Number: 1C242 + * Game Text: Make a [SAURON] minion strength +2 (or strength +3 if you cannot spot more than 2 Free Peoples cultures.) + */ +public class Card40_242 extends AbstractEvent { + public Card40_242() { + super(Side.SHADOW, 1, Culture.SAURON, "War Cry of Mordor", Phase.SKIRMISH); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, + new ConditionEvaluator(2, 3, new NotCondition(new SpotCulturesCondition(3, Side.FREE_PEOPLE))), Culture.SAURON, CardType.MINION)); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt b/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt index 7e26f1580..666fd64d1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt @@ -254,4 +254,7 @@ gl_theOneRing,1_2 40_192,1_218 40_200,2_80 40_215,1_246 -40_220,1_250 \ No newline at end of file +40_220,1_250 +40_223,1_261 +40_223,1_262 +40_240,1_279 \ No newline at end of file