Some FotR cards

This commit is contained in:
marcin.sciesinski
2019-09-17 23:59:33 -07:00
parent a7ceb203ff
commit ad1f593ca4
26 changed files with 694 additions and 1001 deletions

View File

@@ -181,6 +181,603 @@
}
}
},
"1_126": {
"title": "Hunt Them Down!",
"culture": "isengard",
"cost": 3,
"type": "event",
"keyword": "maneuver",
"effects": {
"type": "event",
"effect": {
"type": "addKeyword",
"filter": "choose(uruk-hai)",
"keyword": "fierce",
"until": "start(regroup)"
}
}
},
"1_127": {
"title": "*Lurtz",
"subtitle": "Servant of Isengard",
"culture": "isengard",
"cost": 7,
"type": "minion",
"race": "uruk-hai",
"strength": 13,
"vitality": 3,
"site": 5,
"keyword": [
"archer",
"damage+1"
],
"effects": {
"type": "activated",
"phase": "maneuver",
"condition": {
"type": "canSpot",
"filter": "another,uruk-hai"
},
"effect": {
"type": "addKeyword",
"filter": "self",
"keyword": "fierce",
"until": "start(regroup)"
}
}
},
"1_128": {
"title": "Lurtz's Battle Cry",
"culture": "isengard",
"cost": 1,
"type": "event",
"keyword": "skirmish",
"effects": {
"type": "event",
"effect": [
{
"type": "modifyStrength",
"filter": "choose(uruk-hai)",
"amount": -1,
"memorize": "chosenUrukHai"
},
{
"type": "addKeyword",
"filter": "memory(chosenUrukHai)",
"keyword": "damage+1"
}
]
}
},
"1_129": {
"title": "The Misadventure of Mr. Underhill",
"culture": "isengard",
"cost": 2,
"type": "condition",
"keyword": "support area",
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(uruk-hai)"
}
},
{
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "companion",
"condition": {
"type": "location",
"filter": "not(sanctuary)"
},
"amount": 2
}
}
]
},
"1_130": {
"title": "No Ordinary Storm",
"culture": "isengard",
"cost": 1,
"type": "condition",
"keyword": "support area",
"effects": {
"type": "trigger",
"trigger": {
"type": "played",
"filter": "your,weather,condition"
},
"effect": {
"type": "exert",
"filter": "choose(culture(gandalf),or(companion,ally))"
}
}
},
"1_131": {
"title": "*Orthanc Assassin",
"culture": "isengard",
"cost": 5,
"type": "minion",
"race": "uruk-hai",
"strength": 10,
"vitality": 3,
"site": 5,
"keyword": [
"archer",
"damage+1"
]
},
"1_132": {
"title": "Parry",
"culture": "isengard",
"cost": 2,
"type": "event",
"keyword": "maneuver",
"condition": {
"type": "canSpot",
"filter": "uruk-hai"
},
"effects": {
"type": "event",
"effect": [
{
"type": "chooseActiveCards",
"filter": "choose(possession)",
"text": "Choose possession to cancel strength bonuses from",
"memorize": "chosenPossession"
},
{
"type": "addModifier",
"modifier": {
"type": "cancelStrengthBonusFrom",
"filter": "memory(chosenPossession)"
},
"until": "start(regroup)"
}
]
}
},
"1_133": {
"title": "Saruman's Ambition",
"culture": "isengard",
"cost": 0,
"type": "condition",
"keyword": "support area",
"effects": [
{
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "your,culture(isengard),event",
"amount": -1
}
},
{
"type": "activated",
"phase": "skirmish",
"cost": {
"type": "discard",
"filter": "self"
},
"effect": {
"type": "modifyStrength",
"filter": "choose(uruk-hai)",
"amount": 2
}
}
]
},
"1_134": {
"title": "Saruman's Chill",
"culture": "isengard",
"cost": 1,
"type": "condition",
"keyword": [
"spell",
"weather"
],
"target": "site,not(hasAttached(name(Saruman's Chill)))",
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(culture(isengard),minion)"
}
},
{
"type": "trigger",
"trigger": {
"type": "movesFrom",
"filter": "self"
},
"effect": {
"type": "exert",
"filter": "all(hobbit,companion)"
}
},
{
"type": "trigger",
"trigger": {
"type": "endOfTurn"
},
"effect": {
"type": "discard",
"filter": "self"
}
}
]
},
"1_135": {
"title": "Saruman's Frost",
"culture": "isengard",
"cost": 2,
"type": "condition",
"keyword": [
"spell",
"weather"
],
"target": "site,not(hasAttached(name(Saruman's Frost)))",
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(culture(isengard),minion)"
}
},
{
"type": "modifier",
"modifier": {
"type": "modifyStrength",
"filter": "hobbit,companion",
"condition": {
"type": "location",
"filter": "hasAttached(self)"
}
}
},
{
"type": "trigger",
"trigger": {
"type": "endOfTurn"
},
"effect": {
"type": "discard",
"filter": "self"
}
}
]
},
"1_136": {
"title": "Saruman's Power",
"culture": "isengard",
"cost": 2,
"type": "event",
"keyword": [
"spell",
"shadow"
],
"effects": {
"type": "event",
"cost": {
"type": "exert",
"filter": "choose(culture(isengard),minion)"
},
"effect": {
"type": "discard",
"filter": "all(condition)"
}
}
},
"1_137": {
"title": "Saruman's Reach",
"culture": "isengard",
"cost": 0,
"type": "event",
"keyword": [
"search",
"maneuver"
],
"effects": {
"type": "event",
"cost": {
"type": "exert",
"filter": "choose(uruk-hai)"
},
"effect": {
"type": "choice",
"player": "fp",
"texts": [
"Exert 2 companions",
"Put on The One Ring"
],
"effects": [
{
"type": "exert",
"filter": "choose(companion)",
"count": 2
},
{
"type": "putOnRing"
}
]
}
}
},
"1_138": {
"title": "Saruman's Snows",
"culture": "isengard",
"cost": 2,
"type": "condition",
"keyword": [
"spell",
"weather"
],
"target": "site",
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(culture(isengard),minion)"
}
},
{
"type": "modifier",
"modifier": {
"type": "cantPlayPhaseEventsOrPhaseSpecialAbilities",
"condition": {
"type": "location",
"filter": "hasAttached(self)"
}
}
},
{
"type": "trigger",
"trigger": {
"type": "endOfTurn"
},
"effect": {
"type": "discard",
"filter": "self"
}
}
]
},
"1_139": {
"title": "Savagery To Match Their Numbers",
"culture": "isengard",
"cost": 0,
"type": "event",
"keyword": "skirmish",
"effects": {
"type": "event",
"effect": {
"type": "choice",
"texts": [
"Make an Uruk-hai strength +2",
"Make an Uruk-hai strength +4 and fierce until the regroup phase"
],
"effects": [
{
"type": "modifyStrength",
"filter": "choose(uruk-hai)",
"amount": 2
},
{
"type": "conditional",
"condition": {
"type": "canSpot",
"count": 5,
"filter": "companion"
},
"effect": [
{
"type": "modifyStrength",
"filter": "choose(uruk-hai)",
"amount": 4,
"until": "start(regroup)",
"memorize": "chosenUrukHai"
},
{
"type": "addKeyword",
"filter": "memory(chosenUrukHai)",
"keyword": "fierce",
"until": "start(regroup)"
}
]
}
]
}
}
},
"1_140": {
"title": "Spies of Saruman",
"culture": "isengard",
"cost": 2,
"type": "condition",
"target": "site",
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(culture(isengard),minion)"
}
},
{
"type": "modifier",
"modifier": {
"type": "skipPhase",
"condition": {
"type": "location",
"filter": "hasAttached(self)"
},
"phase": "archery"
}
},
{
"type": "trigger",
"trigger": {
"type": "endOfTurn"
},
"effect": {
"type": "discard",
"filter": "self"
}
}
]
},
"1_141": {
"title": "Their Arrows Enrage",
"culture": "isengard",
"cost": 1,
"type": "condition",
"keyword": "support area",
"condition": {
"type": "canSpot",
"filter": "or(name(Saruman),uruk-hai)"
},
"effects": {
"type": "modifier",
"modifier": {
"type": "modifyStrength",
"filter": "archer,or(companion,ally)",
"amount": -1
}
}
},
"1_142": {
"title": "Traitor's Voice",
"culture": "isengard",
"cost": 2,
"type": "condition",
"keyword": [
"search",
"support area"
],
"condition": {
"type": "canSpot",
"filter": "uruk-hai"
},
"effects": {
"type": "trigger",
"trigger": {
"type": "condition",
"condition": [
{
"type": "perTurnLimit",
"limit": 1
},
{
"type": "or",
"condition": [
{
"type": "canSpotBurdens",
"amount": 5
},
{
"type": "canSpot",
"filter": "exhausted,ring bearer"
}
]
}
]
},
"effect": [
{
"type": "incrementPerTurnLimit",
"limit": 1
},
{
"type": "addModifier",
"modifier": {
"type": "modifyMoveLimit",
"amount": -1
},
"until": "endOfTurn"
}
]
}
},
"1_143": {
"title": "Troop of Uruk-hai",
"culture": "isengard",
"cost": 5,
"type": "minion",
"race": "uruk-hai",
"strength": 9,
"vitality": 4,
"site": 5,
"keyword": "damage+1",
"effects": {
"type": "modifier",
"modifier": {
"type": "cancelStrengthBonusTo",
"filter": "character,inSkirmishAgainst(self)",
"from": "weapon"
}
}
},
"1_144": {
"title": "Uruk Bloodlust",
"culture": "isengard",
"cost": 3,
"type": "condition",
"keyword": "support area",
"effects": {
"type": "activatedTrigger",
"trigger": {
"type": "winsSkirmish",
"filter": "your,uruk-hai",
"memorize": "winner"
},
"cost": {
"type": "removeTwilight"
},
"effect": {
"type": "heal",
"filter": "memory(winner)"
}
}
},
"1_145": {
"title": "Uruk Brood",
"culture": "isengard",
"cost": 4,
"type": "minion",
"race": "uruk-hai",
"strength": 9,
"vitality": 2,
"site": 5,
"keyword": "damage+1",
"effects": {
"type": "activated",
"phase": "skirmish",
"cost": {
"type": "removeTwilight",
"amount": 2
},
"effect": [
{
"type": "chooseHowManyToSpot",
"filter": "another,uruk-hai",
"memorize": "spottedUrukHai"
},
{
"type": "modifyStrength",
"filter": "self",
"amount": {
"type": "forEachInMemory",
"memory": "spottedUrukHai"
}
}
]
}
},
"1_158": {
"title": "Uruk-hai Raiding Party",
"culture": "isengard",

View File

@@ -1,41 +0,0 @@
package com.gempukku.lotro.cards.set1.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.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 3
* Type: Event
* Game Text: Maneuver: Make an Uruk-hai fierce until the regroup phase.
*/
public class Card1_126 extends AbstractEvent {
public Card1_126() {
super(Side.SHADOW, 3, Culture.ISENGARD, "Hunt Them Down!", Phase.MANEUVER);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose an Uruk-hai", Race.URUK_HAI) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard urukHai) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new KeywordModifier(self, Filters.sameCard(urukHai), Keyword.FIERCE), Phase.REGROUP));
}
}
);
return action;
}
}

View File

@@ -1,50 +0,0 @@
package com.gempukku.lotro.cards.set1.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.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.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 7
* Type: Minion • Uruk-Hai
* Strength: 13
* Vitality: 3
* Site: 5
* Game Text: Archer. Damage +1. Maneuver: Spot another Uruk-hai to make Lurtz fierce until the regroup phase.
*/
public class Card1_127 extends AbstractMinion {
public Card1_127() {
super(7, 13, 3, 5, Race.URUK_HAI, Culture.ISENGARD, "Lurtz", "Servant of Isengard", true);
addKeyword(Keyword.ARCHER);
addKeyword(Keyword.DAMAGE, 1);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& Filters.canSpot(game, Race.URUK_HAI, Filters.not(self))) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new KeywordModifier(self, self, Keyword.FIERCE), Phase.REGROUP));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,46 +0,0 @@
package com.gempukku.lotro.cards.set1.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.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 1
* Type: Event
* Game Text: Skirmish: Make an Uruk-hai strength -1 and damage +1.
*/
public class Card1_128 extends AbstractEvent {
public Card1_128() {
super(Side.SHADOW, 1, Culture.ISENGARD, "Lurtz's Battle Cry", Phase.SKIRMISH);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose an Uruk-hai", Race.URUK_HAI) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard urukHai) {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(urukHai), -1)));
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new KeywordModifier(self, Filters.sameCard(urukHai), Keyword.DAMAGE)));
}
}
);
return action;
}
}

View File

@@ -1,41 +0,0 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.common.*;
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.AbstractExtraPlayCostModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
import com.gempukku.lotro.logic.modifiers.condition.NotCondition;
import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Condition
* Game Text: To play, exert an Uruk-hai. Plays to your support area. The twilight cost of each companion played to a site which is not a sanctuary is +2.
*/
public class Card1_129 extends AbstractPermanent {
public Card1_129() {
super(Side.SHADOW, 2, CardType.CONDITION, Culture.ISENGARD, "The Misadventure of Mr. Underhill");
}
@Override
public List<? extends AbstractExtraPlayCostModifier> getExtraCostToPlay(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new ExertExtraPlayCostModifier(self, self, null, Race.URUK_HAI));
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new TwilightCostModifier(self, CardType.COMPANION,
new NotCondition(new LocationCondition(Keyword.SANCTUARY)), 2));
}
}

View File

@@ -1,40 +0,0 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.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.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 1
* Type: Condition
* Game Text: Plays to your support area. Each time you play a weather condition, exert a [GANDALF] companion or [GANDALF] ally.
*/
public class Card1_130 extends AbstractPermanent {
public Card1_130() {
super(Side.SHADOW, 1, CardType.CONDITION, Culture.ISENGARD, "No Ordinary Storm");
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Filters.and(Keyword.WEATHER, CardType.CONDITION, Filters.owner(self.getOwner())))) {
final RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new ChooseAndExertCharactersEffect(action, self.getOwner(), 1, 1, Culture.GANDALF, Filters.or(CardType.COMPANION, CardType.ALLY)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,25 +0,0 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 5
* Type: Minion • Uruk-Hai
* Strength: 10
* Vitality: 3
* Site: 5
* Game Text: Archer. Damage +1.
*/
public class Card1_131 extends AbstractMinion {
public Card1_131() {
super(5, 10, 3, 5, Race.URUK_HAI, Culture.ISENGARD, "Orthanc Assassin", null, true);
addKeyword(Keyword.ARCHER);
addKeyword(Keyword.DAMAGE);
}
}

View File

@@ -1,46 +0,0 @@
package com.gempukku.lotro.cards.set1.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.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.CancelStrengthBonusSourceModifier;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Event
* Game Text: Maneuver: Spot an Uruk-hai to cancel the strength bonus from a possession until the regroup phase.
*/
public class Card1_132 extends AbstractEvent {
public Card1_132() {
super(Side.SHADOW, 2, Culture.ISENGARD, "Parry", Phase.MANEUVER);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return Filters.canSpot(game, Race.URUK_HAI);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose possession", CardType.POSSESSION) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard possession) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new CancelStrengthBonusSourceModifier(self, Filters.sameCard(possession)), Phase.REGROUP));
}
}
);
return action;
}
}

View File

@@ -1,50 +0,0 @@
package com.gempukku.lotro.cards.set1.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.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 0
* Type: Condition
* Game Text: Plays to your support area. The twilight cost of your [ISENGARD] events is -1. Skirmish: Discard this
* condition to make an Uruk-hai strength +2.
*/
public class Card1_133 extends AbstractPermanent {
public Card1_133() {
super(Side.SHADOW, 0, CardType.CONDITION, Culture.ISENGARD, "Saruman's Ambition");
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new SelfDiscardEffect(self));
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 2, Race.URUK_HAI));
return Collections.singletonList(action);
}
return null;
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new TwilightCostModifier(self, Filters.and(Culture.ISENGARD, CardType.EVENT, Filters.owner(self.getOwner())), -1));
}
}

View File

@@ -1,71 +0,0 @@
package com.gempukku.lotro.cards.set1.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.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: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 1
* Type: Condition
* Game Text: Spell. Weather. To play, exert a [ISENGARD] minion. Plays on a site. Limit 1 per site. Each Hobbit who
* moves from this site must exert. Discard this condition at the end of the turn.
*/
public class Card1_134 extends AbstractAttachable {
public Card1_134() {
super(Side.SHADOW, CardType.CONDITION, 1, Culture.ISENGARD, null, "Saruman's Chill");
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, Filters.hasAttached(self))) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(new ExertCharactersEffect(action, self, Filters.and(CardType.COMPANION, Race.HOBBIT)));
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;
}
}

View File

@@ -1,72 +0,0 @@
package com.gempukku.lotro.cards.set1.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.SelfDiscardEffect;
import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
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: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Condition
* Game Text: Spell. Weather. To play, exert a [ISENGARD] minion. Plays on a site. Limit 1 per site. Each Hobbit at
* this site is strength -2. Discard this condition at the end of the turn.
*/
public class Card1_135 extends AbstractAttachable {
public Card1_135() {
super(Side.SHADOW, CardType.CONDITION, 2, Culture.ISENGARD, null, "Saruman's Frost");
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, 1, Culture.ISENGARD, CardType.MINION));
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new StrengthModifier(self, Filters.and(Race.HOBBIT, CardType.COMPANION),
new LocationCondition(Filters.hasAttached(self)), -2));
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.endOfTurn(game, effectResult)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(new SelfDiscardEffect(self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,40 +0,0 @@
package com.gempukku.lotro.cards.set1.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.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Event
* Game Text: Spell. Shadow: Exert a [ISENGARD] minion to discard all conditions.
*/
public class Card1_136 extends AbstractEvent {
public Card1_136() {
super(Side.SHADOW, 2, Culture.ISENGARD, "Saruman's Power", Phase.SHADOW);
addKeyword(Keyword.SPELL);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canExert(self, game, Culture.ISENGARD, CardType.MINION);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.ISENGARD, CardType.MINION));
action.appendEffect(
new DiscardCardsFromPlayEffect(self.getOwner(), self, CardType.CONDITION));
return action;
}
}

View File

@@ -1,58 +0,0 @@
package com.gempukku.lotro.cards.set1.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.ChoiceEffect;
import com.gempukku.lotro.logic.effects.PutOnTheOneRingEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.LinkedList;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 0
* Type: Event
* Game Text: Search. Maneuver: Exert an Uruk-hai to make the opponent choose to either exert 2 companions or make the
* Ring-bearer put on The One Ring until the regroup phase.
*/
public class Card1_137 extends AbstractEvent {
public Card1_137() {
super(Side.SHADOW, 0, Culture.ISENGARD, "Saruman's Reach", Phase.MANEUVER);
addKeyword(Keyword.SEARCH);
}
@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, PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI));
List<Effect> possibleEffects = new LinkedList<Effect>();
possibleEffects.add(
new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 2, 2, CardType.COMPANION) {
@Override
public String getText(LotroGame game) {
return "Exert 2 companions";
}
});
possibleEffects.add(new PutOnTheOneRingEffect());
action.appendEffect(
new ChoiceEffect(action, game.getGameState().getCurrentPlayerId(), possibleEffects));
return action;
}
}

View File

@@ -1,70 +0,0 @@
package com.gempukku.lotro.cards.set1.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.RequiredTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
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: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Condition
* Game Text: Spell. Weather. To play, exert a [ISENGARD] minion. Plays on a site. No player may play skirmish events
* or use skirmish special abilities during skirmishes at this site. Discard this condition at the end of the turn.
*/
public class Card1_138 extends AbstractAttachable {
public Card1_138() {
super(Side.SHADOW, CardType.CONDITION, 2, Culture.ISENGARD, null, "Saruman's Snows");
addKeyword(Keyword.SPELL);
addKeyword(Keyword.WEATHER);
}
@Override
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return CardType.SITE;
}
@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, 1, Culture.ISENGARD, CardType.MINION));
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier(self, new LocationCondition(Filters.hasAttached(self)), Phase.SKIRMISH));
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.endOfTurn(game, effectResult)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(new SelfDiscardEffect(self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,53 +0,0 @@
package com.gempukku.lotro.cards.set1.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.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 0
* Type: Event
* Game Text: Skirmish: Make an Uruk-hai strength +2, or spot 5 companions to make an Uruk-hai strength +4 and fierce
* until the regroup phase.
*/
public class Card1_139 extends AbstractEvent {
public Card1_139() {
super(Side.SHADOW, 0, Culture.ISENGARD, "Savagery to Match Their Numbers", Phase.SKIRMISH);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, final LotroGame game, final PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose an Uruk-hai", Race.URUK_HAI) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard urukHai) {
if (PlayConditions.canSpot(game, 5, CardType.COMPANION)) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(urukHai), 4), Phase.REGROUP));
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new KeywordModifier(self, Filters.sameCard(urukHai), Keyword.FIERCE), Phase.REGROUP));
} else {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(urukHai), 2)));
}
}
});
return action;
}
}

View File

@@ -1,68 +0,0 @@
package com.gempukku.lotro.cards.set1.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.RequiredTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ShouldSkipPhaseModifier;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
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: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Condition
* Game Text: To play, exert a [ISENGARD] minion. Plays on a site. While the fellowship is at this site, skip the
* archery phase. Discard this condition at the end of the turn.
*/
public class Card1_140 extends AbstractAttachable {
public Card1_140() {
super(Side.SHADOW, CardType.CONDITION, 2, Culture.ISENGARD, null, "Spies of Saruman");
}
@Override
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return CardType.SITE;
}
@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, 1, Culture.ISENGARD, CardType.MINION));
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new ShouldSkipPhaseModifier(self, new LocationCondition(Filters.hasAttached(self)), Phase.ARCHERY));
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.endOfTurn(game, effectResult)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(new SelfDiscardEffect(self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,37 +0,0 @@
package com.gempukku.lotro.cards.set1.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.cardtype.AbstractPermanent;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 1
* Type: Condition
* Game Text: To play, spot Saruman or an Uruk-hai. Plays to your support area. Each archer companion and archer ally
* is strength -1.
*/
public class Card1_141 extends AbstractPermanent {
public Card1_141() {
super(Side.SHADOW, 1, CardType.CONDITION, Culture.ISENGARD, "Their Arrows Enrage");
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return Filters.canSpot(game, Filters.or(Race.URUK_HAI, Filters.saruman));
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new StrengthModifier(self, Filters.and(Keyword.ARCHER, Filters.or(CardType.COMPANION, CardType.ALLY)), -1));
}
}

View File

@@ -1,45 +0,0 @@
package com.gempukku.lotro.cards.set1.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.RequiredTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
import com.gempukku.lotro.logic.modifiers.MoveLimitModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.List;
/**
* et: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Condition
* Game Text: Search. To play, spot an Uruk-hai. Plays to your support area. While the Ring-bearer is exhausted or you
* can spot 5 burdens, the move limit for this turn is -1 (to a minimum of 1).
*/
public class Card1_142 extends AbstractPermanent {
public Card1_142() {
super(Side.SHADOW, 2, CardType.CONDITION, Culture.ISENGARD, "Traitor's Voice");
addKeyword(Keyword.SEARCH);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return Filters.canSpot(game, Race.URUK_HAI);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
&& (game.getGameState().getBurdens() >= 5 || Filters.canSpot(game, Filters.ringBearer, Filters.exhausted))) {
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
new MoveLimitModifier(self,-1));
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
}
return null;
}
}

View File

@@ -1,37 +0,0 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 5
* Type: Minion • Uruk-Hai
* Strength: 9
* Vitality: 4
* Site: 5
* Game Text: Damage +1. A character skirmishing this minion does not gain strength bonuses from weapons.
*/
public class Card1_143 extends AbstractMinion {
public Card1_143() {
super(5, 9, 4, 5, Race.URUK_HAI, Culture.ISENGARD, "Troop of Uruk-hai");
addKeyword(Keyword.DAMAGE);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new CancelStrengthBonusTargetModifier(self, Filters.inSkirmishAgainst(self), Filters.weapon));
}
}

View File

@@ -1,46 +0,0 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
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.effects.HealCharactersEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.CharacterWonSkirmishResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 3
* Type: Condition
* Game Text: Plays to your support area. Response: If your Uruk-hai wins a skirmish, remove (1) to heal him.
*/
public class Card1_144 extends AbstractPermanent {
public Card1_144() {
super(Side.SHADOW, 3, CardType.CONDITION, Culture.ISENGARD, "Uruk Bloodlust");
}
@Override
public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(final String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.and(Race.URUK_HAI, Filters.owner(playerId)))
&& game.getGameState().getTwilightPool() >= 1) {
CharacterWonSkirmishResult skirmishResult = ((CharacterWonSkirmishResult) effectResult);
final ActivateCardAction action = new ActivateCardAction(self);
action.setText("Heal " + GameUtils.getFullName(skirmishResult.getWinner()));
action.appendCost(new RemoveTwilightEffect(1));
action.appendEffect(
new HealCharactersEffect(self, skirmishResult.getWinner()));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,63 +0,0 @@
package com.gempukku.lotro.cards.set1.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.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.decisions.ForEachYouSpotDecision;
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 4
* Type: Minion <20> Uruk-Hai
* Strength: 9
* Vitality: 2
* Site: 5
* Game Text: Damage +1. Skirmish: Remove (2) to make this minion strength +1 for each other Uruk-hai you spot.
*/
public class Card1_145 extends AbstractMinion {
public Card1_145() {
super(4, 9, 2, 5, Race.URUK_HAI, Culture.ISENGARD, "Uruk Brood");
addKeyword(Keyword.DAMAGE, 1);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 2)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new RemoveTwilightEffect(2));
action.appendEffect(
new PlayoutDecisionEffect(playerId,
new ForEachYouSpotDecision(1, "Choose number of minions you wish to spot", game, Integer.MAX_VALUE, Filters.and(Race.URUK_HAI, Filters.not(self))) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, self, spotCount)));
}
}
));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,26 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.logic.modifiers.CancelStrengthBonusSourceModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import org.json.simple.JSONObject;
public class CancelStrengthBonusFrom implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "filter");
final String filter = FieldUtils.getString(object.get("filter"), "filter");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
return new CancelStrengthBonusSourceModifier(actionContext.getSource(),
filterableSource.getFilterable(actionContext));
}
};
}
}

View File

@@ -0,0 +1,29 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.logic.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import org.json.simple.JSONObject;
public class CancelStrengthBonusTo implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "filter", "from");
final String filter = FieldUtils.getString(object.get("filter"), "filter");
final String from = FieldUtils.getString(object.get("from"), "from");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final FilterableSource fromFilterableSource = environment.getFilterFactory().generateFilter(from, environment);
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
return new CancelStrengthBonusTargetModifier(actionContext.getSource(),
filterableSource.getFilterable(actionContext),
fromFilterableSource.getFilterable(actionContext));
}
};
}
}

View File

@@ -0,0 +1,28 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier;
import org.json.simple.JSONObject;
public class CantPlayPhaseEventsOrPhaseSpecialAbilities implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "phase", "condition");
final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
return new PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier(actionContext.getSource(),
new RequirementCondition(requirements, actionContext), phase);
}
};
}
}

View File

@@ -44,6 +44,9 @@ public class ModifierSourceFactory {
modifierProducers.put("cantplaycards", new CantPlayCards());
modifierProducers.put("canplaystackedcards", new CanPlayStackedCards());
modifierProducers.put("addsignet", new AddSignet());
modifierProducers.put("cantplayphaseeventsorphasespecialabilities", new CantPlayPhaseEventsOrPhaseSpecialAbilities());
modifierProducers.put("cancelstrengthbonusfrom", new CancelStrengthBonusFrom());
modifierProducers.put("cancelstrengthbonusto", new CancelStrengthBonusTo());
}
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {

View File

@@ -11,7 +11,11 @@ public class ConditionTrigger implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "condition");
final Requirement condition = environment.getRequirementFactory().getRequirement((JSONObject) value.get("condition"), environment);
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
return new TriggerChecker() {
@Override
public boolean isBefore() {
@@ -20,7 +24,12 @@ public class ConditionTrigger implements TriggerCheckerProducer {
@Override
public boolean accepts(ActionContext actionContext) {
return condition.accepts(actionContext);
for (Requirement requirement : requirements) {
if (!requirement.accepts(actionContext))
return false;
}
return true;
}
};
}