Set 2 Isengard cards
This commit is contained in:
@@ -17,8 +17,8 @@
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "cantLookOrRevealHand",
|
||||
"player": "owner",
|
||||
"hand": "shadowPlayer"
|
||||
"player": "shadowPlayer",
|
||||
"hand": "owner"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"2_39": {
|
||||
"side": "shadow",
|
||||
"cost": 2,
|
||||
"culture": "Isengard",
|
||||
"title": "Beyond the Height of Men",
|
||||
"type": "event",
|
||||
"keyword": "Maneuver",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(uruk-hai)"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "companion",
|
||||
"count": 6
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "all(side(free people),possession,or(armor,helm,shield))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "cantSpot",
|
||||
"filter": "companion",
|
||||
"count": 6
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "choose(possession,or(armor,helm,shield))"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"2_40": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"culture": "Isengard",
|
||||
"title": "Demands of the Sackville-Bagginses",
|
||||
"type": "condition",
|
||||
"keyword": "Support Area",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(isengard),minion"
|
||||
},
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "exerts",
|
||||
"filter": "culture(shire),ally"
|
||||
},
|
||||
"effect": {
|
||||
"type": "addTwilight",
|
||||
"amount": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_41": {
|
||||
"side": "shadow",
|
||||
"cost": 0,
|
||||
"culture": "Isengard",
|
||||
"title": "Evil Afoot",
|
||||
"type": "event",
|
||||
"keyword": "Shadow",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": [
|
||||
{
|
||||
"type": "exert",
|
||||
"filter": "choose(uruk-hai)"
|
||||
},
|
||||
{
|
||||
"type": "chooseHowManyBurdensToSpot",
|
||||
"memorize": "spottedBurdens"
|
||||
}
|
||||
],
|
||||
"effect": {
|
||||
"type": "shuffleCardsFromDiscardIntoDrawDeck",
|
||||
"count": {
|
||||
"type": "fromMemory",
|
||||
"memory": "spottedBurdens"
|
||||
},
|
||||
"filter": "choose(minion)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_42": {
|
||||
"side": "shadow",
|
||||
"site": 2,
|
||||
"cost": 2,
|
||||
"race": "Orc",
|
||||
"strength": 6,
|
||||
"culture": "Isengard",
|
||||
"vitality": 2,
|
||||
"title": "Goblin Man",
|
||||
"type": "minion",
|
||||
"effects": [
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "condition",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "underground"
|
||||
}
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "shadow",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "lookAtHand",
|
||||
"hand": "fp"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_43": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"strength": 2,
|
||||
"culture": "Isengard",
|
||||
"possession": "Hand Weapon",
|
||||
"title": "*Lurtz's Sword",
|
||||
"type": "possession",
|
||||
"target": "name(Lurtz)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "winsSkirmish",
|
||||
"filter": "bearer"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discardTopCardsFromDeck",
|
||||
"count": 2,
|
||||
"forced": true,
|
||||
"deck": "fp"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_44": {
|
||||
"side": "shadow",
|
||||
"cost": 0,
|
||||
"culture": "Isengard",
|
||||
"title": "No Business of Ours",
|
||||
"type": "condition",
|
||||
"keyword": "Support Area",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(isengard),minion"
|
||||
},
|
||||
"effects": {
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "cantLookOrRevealHand",
|
||||
"player": "fp",
|
||||
"hand": "shadowPlayer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_45": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"culture": "Isengard",
|
||||
"title": "Too Much Attention",
|
||||
"type": "event",
|
||||
"keyword": "Response",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(isengard),minion"
|
||||
},
|
||||
"effects": {
|
||||
"type": "responseEvent",
|
||||
"trigger": {
|
||||
"type": "putsOnRing"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discardTopCardsFromDeck",
|
||||
"count": 5,
|
||||
"forced": true,
|
||||
"deck": "fp"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_46": {
|
||||
"side": "shadow",
|
||||
"site": 5,
|
||||
"cost": 3,
|
||||
"race": "Uruk-Hai",
|
||||
"strength": 9,
|
||||
"culture": "Isengard",
|
||||
"vitality": 2,
|
||||
"title": "*Uruk Captain",
|
||||
"type": "minion",
|
||||
"keyword": "Damage",
|
||||
"effects": {
|
||||
"type": "activated",
|
||||
"phase": "shadow",
|
||||
"cost": [
|
||||
{
|
||||
"type": "removeTwilight",
|
||||
"amount": 1
|
||||
},
|
||||
{
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
}
|
||||
],
|
||||
"effect": {
|
||||
"type": "playCardFromDiscard",
|
||||
"filter": "choose(uruk-hai)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_47": {
|
||||
"side": "shadow",
|
||||
"site": 5,
|
||||
"cost": 3,
|
||||
"race": "Uruk-Hai",
|
||||
"strength": 7,
|
||||
"culture": "Isengard",
|
||||
"vitality": 2,
|
||||
"title": "Uruk Scout",
|
||||
"type": "minion",
|
||||
"keyword": [
|
||||
"Damage",
|
||||
"Tracker"
|
||||
],
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyRoamingPenalty",
|
||||
"filter": "culture(isengard),minion,your",
|
||||
"amount": -1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activatedTrigger",
|
||||
"trigger": {
|
||||
"type": "played",
|
||||
"filter": "event",
|
||||
"exertsRanger": true
|
||||
},
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "cancelEvent"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_48": {
|
||||
"side": "shadow",
|
||||
"cost": 2,
|
||||
"culture": "Isengard",
|
||||
"title": "Wizard Storm",
|
||||
"type": "condition",
|
||||
"keyword": [
|
||||
"Weather",
|
||||
"Spell"
|
||||
],
|
||||
"target": "site,not(hasAttached(name(Wizard Storm)))",
|
||||
"effects": [
|
||||
{
|
||||
"type": "extraCost",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(culture(isengard),minion)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "movesFrom",
|
||||
"filter": "hasAttached(self)"
|
||||
},
|
||||
"effect": {
|
||||
"type": "exert",
|
||||
"filter": "all(companion)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "endOfTurn"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 2
|
||||
* Type: Event
|
||||
* Game Text: Maneuver: Exert an Uruk-hai to discard an armor possession, helm possession, or shield possession (or all
|
||||
* such Free Peoples possessions if you can spot 6 companions).
|
||||
*/
|
||||
public class Card2_039 extends AbstractEvent {
|
||||
public Card2_039() {
|
||||
super(Side.SHADOW, 2, Culture.ISENGARD, "Beyond the Height of Men", Phase.MANEUVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
||||
return PlayConditions.canExert(self, game, Race.URUK_HAI);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
|
||||
PlayEventAction action = new PlayEventAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI));
|
||||
if (PlayConditions.canSpot(game, 6, CardType.COMPANION))
|
||||
action.appendEffect(
|
||||
new DiscardCardsFromPlayEffect(self.getOwner(), self,
|
||||
Filters.and(
|
||||
Side.FREE_PEOPLE,
|
||||
CardType.POSSESSION,
|
||||
Filters.or(
|
||||
PossessionClass.ARMOR,
|
||||
PossessionClass.HELM,
|
||||
PossessionClass.SHIELD
|
||||
))));
|
||||
else
|
||||
action.appendEffect(
|
||||
new ChooseAndDiscardCardsFromPlayEffect(
|
||||
action, playerId, 1, 1,
|
||||
CardType.POSSESSION,
|
||||
Filters.or(
|
||||
PossessionClass.ARMOR,
|
||||
PossessionClass.HELM,
|
||||
PossessionClass.SHIELD
|
||||
)));
|
||||
return action;
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
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.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
|
||||
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: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 1
|
||||
* Type: Condition
|
||||
* Game Text: To play, spot an [ISENGARD] minion. Plays to your support area. Each time a [SHIRE] ally exerts, add (1).
|
||||
*/
|
||||
public class Card2_040 extends AbstractPermanent {
|
||||
public Card2_040() {
|
||||
super(Side.SHADOW, 1, CardType.CONDITION, Culture.ISENGARD, "Demands of the Sackville-Bagginses");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
||||
return Filters.canSpot(game, Culture.ISENGARD, CardType.MINION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.forEachExerted(game, effectResult, Culture.SHIRE, CardType.ALLY)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddTwilightEffect(self, 1));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
||||
import com.gempukku.lotro.logic.effects.ForEachBurdenYouSpotEffect;
|
||||
import com.gempukku.lotro.logic.effects.ShuffleCardsFromDiscardIntoDeckEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseCardsFromDiscardEffect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 0
|
||||
* Type: Event
|
||||
* Game Text: Shadow: Exert an Uruk-hai and spot X burdens to shuffle X minions from your discard pile into your draw
|
||||
* deck.
|
||||
*/
|
||||
public class Card2_041 extends AbstractEvent {
|
||||
public Card2_041() {
|
||||
super(Side.SHADOW, 0, Culture.ISENGARD, "Evil Afoot", Phase.SHADOW);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
||||
return PlayConditions.canExert(self, game, Race.URUK_HAI);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayEventAction getPlayEventCardAction(final String playerId, LotroGame game, final PhysicalCard self) {
|
||||
final PlayEventAction action = new PlayEventAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI));
|
||||
action.appendEffect(
|
||||
new ForEachBurdenYouSpotEffect(playerId) {
|
||||
@Override
|
||||
protected void burdensSpotted(int burdensSpotted) {
|
||||
action.insertEffect(
|
||||
new ChooseCardsFromDiscardEffect(playerId, burdensSpotted, burdensSpotted, CardType.MINION) {
|
||||
@Override
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> cards) {
|
||||
action.insertEffect(
|
||||
new ShuffleCardsFromDiscardIntoDeckEffect(self, playerId, cards));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return action;
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
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.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.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.effects.LookAtOpponentsHandEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 2
|
||||
* Type: Minion • Orc
|
||||
* Strength: 6
|
||||
* Vitality: 2
|
||||
* Site: 2
|
||||
* Game Text: Discard this minion if underground. Shadow: Exert this minion to look at the Free Peoples player's hand.
|
||||
*/
|
||||
public class Card2_042 extends AbstractMinion {
|
||||
public Card2_042() {
|
||||
super(2, 6, 2, 2, Race.ORC, Culture.ISENGARD, "Goblin Man");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (game.getModifiersQuerying().hasKeyword(game, game.getGameState().getCurrentSite(), Keyword.UNDERGROUND)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new SelfDiscardEffect(self));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
|
||||
&& PlayConditions.canExert(self, game, self)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendEffect(
|
||||
new LookAtOpponentsHandEffect(playerId, game.getGameState().getCurrentPlayerId()));
|
||||
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
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.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
|
||||
import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession • Hand Weapon
|
||||
* Strength: +2
|
||||
* Game Text: Bearer must be Lurtz. He is damage +1. Each time Lurtz wins a skirmish, the Free Peoples player must
|
||||
* discard the top 2 cards of his or her draw deck.
|
||||
*/
|
||||
public class Card2_043 extends AbstractAttachable {
|
||||
public Card2_043() {
|
||||
super(Side.SHADOW, CardType.POSSESSION, 1, Culture.ISENGARD, PossessionClass.HAND_WEAPON, "Lurtz's Sword", null, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.name("Lurtz");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStrength() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
List<Modifier> modifiers = new LinkedList<Modifier>();
|
||||
modifiers.add(
|
||||
new KeywordModifier(self, Filters.hasAttached(self), Keyword.DAMAGE));
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.name("Lurtz"))) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new DiscardTopCardFromDeckEffect(self, game.getGameState().getCurrentPlayerId(), 2, true));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
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.cardtype.AbstractPermanent;
|
||||
import com.gempukku.lotro.logic.modifiers.FPPlayerCantLookAtShadowPlayersHandModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 0
|
||||
* Type: Condition
|
||||
* Game Text: To play, spot an [ISENGARD] minion. Plays to your support area. The Free Peoples player may not look at
|
||||
* or reveal cards in any Shadow player's hand.
|
||||
*/
|
||||
public class Card2_044 extends AbstractPermanent {
|
||||
public Card2_044() {
|
||||
super(Side.SHADOW, 0, CardType.CONDITION, Culture.ISENGARD, "No Business of Ours");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
||||
return Filters.canSpot(game, Culture.ISENGARD, CardType.MINION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new FPPlayerCantLookAtShadowPlayersHandModifier(self));
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
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.PlayUtils;
|
||||
import com.gempukku.lotro.logic.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent;
|
||||
import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 1
|
||||
* Type: Event
|
||||
* Game Text: Response: If the Ring-bearer puts on The One Ring, spot an [ISENGARD] minion to make the Free Peoples
|
||||
* player discard the top 5 cards of his or her draw deck.
|
||||
*/
|
||||
public class Card2_045 extends AbstractResponseEvent {
|
||||
public Card2_045() {
|
||||
super(Side.SHADOW, 1, Culture.ISENGARD, "Too Much Attention");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PlayEventAction> getPlayResponseEventAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.PUT_ON_THE_ONE_RING
|
||||
&& Filters.canSpot(game, Culture.ISENGARD, CardType.MINION)
|
||||
&& PlayUtils.checkPlayRequirements(game, self, Filters.any, 0, 0, false, false)) {
|
||||
PlayEventAction action = new PlayEventAction(self);
|
||||
action.appendEffect(
|
||||
new DiscardTopCardFromDeckEffect(self, game.getGameState().getCurrentPlayerId(), 5, true));
|
||||
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
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.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.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Uruk-Hai
|
||||
* Strength: 9
|
||||
* Vitality: 2
|
||||
* Site: 5
|
||||
* Game Text: Damage +1. Shadow: Remove (1) and exert Uruk Captain to play an Uruk-hai from your discard pile.
|
||||
*/
|
||||
public class Card2_046 extends AbstractMinion {
|
||||
public Card2_046() {
|
||||
super(3, 9, 2, 5, Race.URUK_HAI, Culture.ISENGARD, "Uruk Captain", null, true);
|
||||
addKeyword(Keyword.DAMAGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 1)
|
||||
&& PlayConditions.canExert(self, game, self)
|
||||
// There has to be playable Uruk-hai in discard pile
|
||||
&& PlayConditions.canPlayFromDiscard(playerId, game, 1, 0, Race.URUK_HAI)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new RemoveTwilightEffect(1));
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendEffect(
|
||||
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Race.URUK_HAI));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
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.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.effects.CancelEventEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.RoamingPenaltyModifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayEventResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Uruk-Hai
|
||||
* Strength: 7
|
||||
* Vitality: 2
|
||||
* Site: 5
|
||||
* Game Text: Tracker. Damage +1. The roaming penalty for each [ISENGARD] minion you play is -1. Response: If an event
|
||||
* is played that spots or exerts a ranger, exert this minion to cancel that event.
|
||||
*/
|
||||
public class Card2_047 extends AbstractMinion {
|
||||
public Card2_047() {
|
||||
super(3, 7, 2, 5, Race.URUK_HAI, Culture.ISENGARD, "Uruk Scout");
|
||||
addKeyword(Keyword.TRACKER);
|
||||
addKeyword(Keyword.DAMAGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(
|
||||
new RoamingPenaltyModifier(self, Filters.and(Culture.ISENGARD, CardType.MINION), -1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, CardType.EVENT)
|
||||
&& PlayConditions.canExert(self, game, self)) {
|
||||
PlayEventResult playEffect = (PlayEventResult) effectResult;
|
||||
if (playEffect.isRequiresRanger()) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendEffect(
|
||||
new CancelEventEffect(self, playEffect));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set2.isengard;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
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.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
|
||||
import com.gempukku.lotro.logic.effects.ExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Mines of Moria
|
||||
* Side: Shadow
|
||||
* Culture: Isengard
|
||||
* Twilight Cost: 2
|
||||
* Type: Condition
|
||||
* Game Text: Spell. Weather. To play, exert an [ISENGARD] minion. Plays on a site. Limit 1 per site. When
|
||||
* the fellowship moves from this site, every companion must exert. Discard this condition at the end of the turn.
|
||||
*/
|
||||
public class Card2_048 extends AbstractAttachable {
|
||||
public Card2_048() {
|
||||
super(Side.SHADOW, CardType.CONDITION, 2, Culture.ISENGARD, null, "Wizard Storm");
|
||||
addKeyword(Keyword.SPELL);
|
||||
addKeyword(Keyword.WEATHER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.and(CardType.SITE, Filters.not(Filters.hasAttached(Filters.name(getTitle()))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
||||
return PlayConditions.canExert(self, game, Culture.ISENGARD, CardType.MINION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends AbstractExtraPlayCostModifier> getExtraCostToPlay(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(
|
||||
new ExertExtraPlayCostModifier(self, self, null, Culture.ISENGARD, CardType.MINION));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.movesFrom(game, effectResult, self.getAttachedTo())) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new ExertCharactersEffect(action, self, CardType.COMPANION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
if (TriggerConditions.endOfTurn(game, effectResult)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(new SelfDiscardEffect(self));
|
||||
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ import java.util.Collection;
|
||||
public class ShuffleCardsFromDiscardIntoDrawDeck implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "where", "count");
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "count");
|
||||
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)");
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
|
||||
|
||||
@@ -9,16 +9,18 @@ import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayEventResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class PlayedTriggerCheckerProducer implements TriggerCheckerProducer {
|
||||
@Override
|
||||
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "on", "memorize");
|
||||
FieldUtils.validateAllowedFields(value, "filter", "on", "memorize", "exertsRanger");
|
||||
|
||||
final String filterString = FieldUtils.getString(value.get("filter"), "filter");
|
||||
final String onString = FieldUtils.getString(value.get("on"), "on");
|
||||
final String memorize = FieldUtils.getString(value.get("memorize"), "memorize");
|
||||
boolean exertsRanger = FieldUtils.getBoolean(value.get("exertsRanger"), "exertsRanger", false);
|
||||
final FilterableSource filter = environment.getFilterFactory().generateFilter(filterString, environment);
|
||||
final FilterableSource onFilter = (onString != null) ? environment.getFilterFactory().generateFilter(onString, environment) : null;
|
||||
return new TriggerChecker() {
|
||||
@@ -32,9 +34,16 @@ public class PlayedTriggerCheckerProducer implements TriggerCheckerProducer {
|
||||
} else {
|
||||
played = TriggerConditions.played(actionContext.getGame(), actionContext.getEffectResult(), filterable);
|
||||
}
|
||||
if (played && memorize != null) {
|
||||
PhysicalCard playedCard = ((PlayCardResult) actionContext.getEffectResult()).getPlayedCard();
|
||||
actionContext.setCardMemory(memorize, playedCard);
|
||||
|
||||
if (played) {
|
||||
PlayCardResult playCardResult = (PlayCardResult) actionContext.getEffectResult();
|
||||
if (exertsRanger && playCardResult instanceof PlayEventResult && !((PlayEventResult) playCardResult).isRequiresRanger())
|
||||
return false;
|
||||
|
||||
if (memorize != null) {
|
||||
PhysicalCard playedCard = playCardResult.getPlayedCard();
|
||||
actionContext.setCardMemory(memorize, playedCard);
|
||||
}
|
||||
}
|
||||
return played;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user