Cards from set 14 (Expanded Middle-Earth) are in new system
This commit is contained in:
564
gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json
Normal file
564
gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json
Normal file
@@ -0,0 +1,564 @@
|
||||
{
|
||||
"14_1": {
|
||||
"title": "*Dain Ironfoot",
|
||||
"subtitle": "King Under the Mountain",
|
||||
"culture": "dwarven",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "dwarf",
|
||||
"strength": 7,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyCost",
|
||||
"filter": "another,or(dwarf,and(culture(gandalf),man))",
|
||||
"amount": -1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "regroup"
|
||||
},
|
||||
"cost": {
|
||||
"type": "discard",
|
||||
"filter": "choose(or(culture(dwarven),culture(gandalf)),condition)"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "choose(minion)"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_2": {
|
||||
"title": "*Elladan",
|
||||
"subtitle": "Son of Elrond",
|
||||
"culture": "elven",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "elf",
|
||||
"strength": 7,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyCost",
|
||||
"filter": "name(Elrohir)",
|
||||
"amount": -2
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyCost",
|
||||
"filter": "culture(elven),event",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "or(name(Elladan),name(Elrohir)),inSkirmish"
|
||||
},
|
||||
"amount": -2
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_3": {
|
||||
"title": "*Elrohir",
|
||||
"subtitle": "Son of Elrond",
|
||||
"culture": "elven",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "elf",
|
||||
"strength": 7,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyCost",
|
||||
"filter": "name(Elladan)",
|
||||
"amount": -2
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "played",
|
||||
"filter": "culture(elven),event"
|
||||
},
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "or(name(Elladan),name(Elrohir)),inSkirmish"
|
||||
},
|
||||
"effect": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "all(minion,inSkirmish)",
|
||||
"amount": -2
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_4": {
|
||||
"title": "*Gildor Inglorion",
|
||||
"subtitle": "Of the House of Finrod",
|
||||
"culture": "elven",
|
||||
"cost": 2,
|
||||
"type": "companion",
|
||||
"race": "elf",
|
||||
"strength": 6,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "archery"
|
||||
},
|
||||
"condition": {
|
||||
"type": "isMore",
|
||||
"firstNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "minion"
|
||||
},
|
||||
"secondNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "companion"
|
||||
}
|
||||
},
|
||||
"effect": {
|
||||
"type": "addKeyword",
|
||||
"filter": "all(companion)",
|
||||
"keyword": "archer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"14_5": {
|
||||
"title": "*Brand",
|
||||
"subtitle": "King of Dale",
|
||||
"culture": "gandalf",
|
||||
"cost": 2,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 6,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "or(dwarf,and(another,culture(gandalf),man))",
|
||||
"amount": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyArcheryTotal",
|
||||
"condition": {
|
||||
"type": "isMore",
|
||||
"firstNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "minion"
|
||||
},
|
||||
"secondNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "companion"
|
||||
}
|
||||
},
|
||||
"side": "free people",
|
||||
"amount": {
|
||||
"type": "subtract",
|
||||
"firstNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "minion"
|
||||
},
|
||||
"secondNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "companion"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_6": {
|
||||
"title": "*Grimbeorn",
|
||||
"subtitle": "Beorning Chieftain",
|
||||
"culture": "gandalf",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 4,
|
||||
"vitality": 5,
|
||||
"resistance": 6,
|
||||
"effects": [
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "startOfTurn"
|
||||
},
|
||||
"effect": {
|
||||
"type": "heal",
|
||||
"filter": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "maneuver"
|
||||
},
|
||||
"cost": [
|
||||
{
|
||||
"type": "exert",
|
||||
"filter": "self",
|
||||
"times": 2
|
||||
},
|
||||
{
|
||||
"type": "discardFromHand",
|
||||
"forced": false,
|
||||
"filter": "choose(minion)",
|
||||
"memorize": "discardedCard"
|
||||
}
|
||||
],
|
||||
"effect": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"amount": {
|
||||
"type": "printedStrengthFromMemory",
|
||||
"memory": "discardedCard"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_7": {
|
||||
"title": "*Duilin",
|
||||
"subtitle": "Ranger from Blackroot Vale",
|
||||
"culture": "gondor",
|
||||
"cost": 2,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 5,
|
||||
"vitality": 3,
|
||||
"resistance": 5,
|
||||
"keyword": "ranger",
|
||||
"effects": {
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "or(forest,river)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"14_8": {
|
||||
"title": "*Duinhir",
|
||||
"subtitle": "Tall Man of Blackroot Vale",
|
||||
"culture": "gondor",
|
||||
"cost": 2,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 6,
|
||||
"vitality": 3,
|
||||
"resistance": 5,
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "mount"
|
||||
},
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "winsSkirmish",
|
||||
"filter": "self"
|
||||
},
|
||||
"condition": {
|
||||
"type": "isMore",
|
||||
"firstNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "minion"
|
||||
},
|
||||
"secondNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "companion"
|
||||
}
|
||||
},
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "choose(minion,strengthLessThan(8))"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_9": {
|
||||
"title": "*Halbarad",
|
||||
"subtitle": "Ranger of the North",
|
||||
"culture": "gondor",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 7,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"keyword": "ranger",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifyOwnCost",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "ring bearer,resistanceMoreThan(8)"
|
||||
},
|
||||
"amount": -1
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "maneuver"
|
||||
},
|
||||
"cost": {
|
||||
"type": "discardFromHand",
|
||||
"filter": "choose(culture(gondor))",
|
||||
"forced": false
|
||||
},
|
||||
"effect": {
|
||||
"type": "heal",
|
||||
"filter": "choose(culture(gondor),companion)"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"14_10": {
|
||||
"title": "Furious Hillman",
|
||||
"culture": "men",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "man",
|
||||
"strength": 8,
|
||||
"vitality": 2,
|
||||
"site": 4,
|
||||
"effects": {
|
||||
"type": "activatedTrigger",
|
||||
"trigger": {
|
||||
"type": "played",
|
||||
"filter": "side(free people),event"
|
||||
},
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "another,culture(men)"
|
||||
},
|
||||
"cost": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "cancelEvent"
|
||||
}
|
||||
}
|
||||
},
|
||||
"14_11": {
|
||||
"title": "Swarming Hillman",
|
||||
"culture": "men",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "man",
|
||||
"strength": 8,
|
||||
"vitality": 2,
|
||||
"site": 4,
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "regroup"
|
||||
},
|
||||
"condition": {
|
||||
"type": "isMore",
|
||||
"firstNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "character,man"
|
||||
},
|
||||
"secondNumber": {
|
||||
"type": "maxOfRaces",
|
||||
"filter": "character,not(man)"
|
||||
}
|
||||
},
|
||||
"effect": {
|
||||
"type": "addModifier",
|
||||
"modifier": {
|
||||
"type": "modifyMoveLimit",
|
||||
"amount": -1
|
||||
},
|
||||
"until": "endOfTurn"
|
||||
}
|
||||
}
|
||||
},
|
||||
"14_12": {
|
||||
"title": "Half-troll of Far Harad",
|
||||
"culture": "orc",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "half-troll",
|
||||
"strength": 8,
|
||||
"vitality": 2,
|
||||
"site": 4,
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "assignment"
|
||||
},
|
||||
"condition": {
|
||||
"type": "isMore",
|
||||
"firstNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "companion"
|
||||
},
|
||||
"secondNumber": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "minion"
|
||||
}
|
||||
},
|
||||
"cost": {
|
||||
"type": "removeTwilight",
|
||||
"amount": 2
|
||||
},
|
||||
"effect": {
|
||||
"type": "playCardFromDiscard",
|
||||
"filter": "choose(culture(orc),orc)",
|
||||
"removedTwilight": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"14_13": {
|
||||
"title": "*Horror of Harad",
|
||||
"culture": "orc",
|
||||
"cost": 4,
|
||||
"type": "minion",
|
||||
"race": "half-troll",
|
||||
"strength": 9,
|
||||
"vitality": 3,
|
||||
"site": 4,
|
||||
"keyword": [
|
||||
"ambush+1",
|
||||
"damage+1",
|
||||
"fierce",
|
||||
"lurker",
|
||||
"muster",
|
||||
"toil+2"
|
||||
]
|
||||
},
|
||||
"14_14": {
|
||||
"title": "Uruk-hai Healer",
|
||||
"culture": "uruk-hai",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "uruk-hai",
|
||||
"strength": 8,
|
||||
"vitality": 2,
|
||||
"site": 5,
|
||||
"keyword": "damage+1",
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "startOfPhase",
|
||||
"phase": "assignment"
|
||||
},
|
||||
"effect": {
|
||||
"type": "duplicate",
|
||||
"effect": {
|
||||
"type": "heal",
|
||||
"filter": "choose(uruk-hai)",
|
||||
"count": "0-1"
|
||||
},
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "companion"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"14_15": {
|
||||
"title": "Uruk-hai Scout",
|
||||
"culture": "uruk-hai",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "uruk-hai",
|
||||
"strength": 8,
|
||||
"vitality": 2,
|
||||
"site": 5,
|
||||
"keyword": "damage+1",
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "played",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "choice",
|
||||
"texts": [
|
||||
"Choose keyword - Battleground",
|
||||
"Choose keyword - Mountain",
|
||||
"Choose keyword - Plains",
|
||||
"Choose keyword - Underground"
|
||||
],
|
||||
"effects": [
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "choose(currentSite)",
|
||||
"keyword": "battleground",
|
||||
"until": "endOfTurn"
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "choose(currentSite)",
|
||||
"keyword": "mountain",
|
||||
"until": "endOfTurn"
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "choose(currentSite)",
|
||||
"keyword": "plains",
|
||||
"until": "endOfTurn"
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "choose(currentSite)",
|
||||
"keyword": "underground",
|
||||
"until": "endOfTurn"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.dwarven;
|
||||
|
||||
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.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
|
||||
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: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Dwarven
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion • Dwarf
|
||||
* Strength: 7
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: Each of your other Dwarves and [GANDALF] Men is twilight cost -1. At the start of the regroup phase, you
|
||||
* may discard a [DWARVEN] or [GANDALF] condition from play to discard a minion from play.
|
||||
*/
|
||||
public class Card14_001 extends AbstractCompanion {
|
||||
public Card14_001() {
|
||||
super(3, 7, 3, 6, Culture.DWARVEN, Race.DWARF, null, "Dain Ironfoot", "King Under the Mountain", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new TwilightCostModifier(self,
|
||||
Filters.and(Filters.owner(self.getOwner()), Filters.not(self),
|
||||
Filters.or(Race.DWARF, Filters.and(Culture.GANDALF, Race.MAN))), -1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)
|
||||
&& PlayConditions.canDiscardFromPlay(self, game, CardType.CONDITION, Filters.or(Culture.DWARVEN, Culture.GANDALF))) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.CONDITION, Filters.or(Culture.DWARVEN, Culture.GANDALF)));
|
||||
action.appendEffect(
|
||||
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.MINION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.elven;
|
||||
|
||||
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.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.SpotCondition;
|
||||
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Elven
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion • Elf
|
||||
* Strength: 7
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: Elrohir is twilight cost -2. Each time you play an [ELVEN] event during a skirmish involving Elladan
|
||||
* or Elrohir, that event is twilight cost -2.
|
||||
*/
|
||||
public class Card14_002 extends AbstractCompanion {
|
||||
public Card14_002() {
|
||||
super(3, 7, 3, 6, Culture.ELVEN, Race.ELF, null, "Elladan", "Son of Elrond", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
List<Modifier> modifiers = new LinkedList<Modifier>();
|
||||
modifiers.add(
|
||||
new TwilightCostModifier(self, Filters.name("Elrohir"), -2));
|
||||
modifiers.add(
|
||||
new TwilightCostModifier(self,
|
||||
Filters.and(Filters.owner(self.getOwner()), CardType.EVENT, Culture.ELVEN),
|
||||
new SpotCondition(Filters.or(Filters.name("Elladan"), Filters.name("Elrohir")), Filters.inSkirmish), -2));
|
||||
return modifiers;
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.elven;
|
||||
|
||||
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.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.effects.SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
|
||||
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: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Elven
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion • Elf
|
||||
* Strength: 7
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: Elladan is twilight cost -2. Each time you play an [ELVEN] event during a skirmish involving Elrohir
|
||||
* or Elladan, each minion in that skirmish is strength -2.
|
||||
*/
|
||||
public class Card14_003 extends AbstractCompanion {
|
||||
public Card14_003() {
|
||||
super(3, 7, 3, 6, Culture.ELVEN, Race.ELF, null, "Elrohir", "Son of Elrond", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new TwilightCostModifier(self, Filters.name("Elladan"), -2));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Culture.ELVEN, CardType.EVENT)
|
||||
&& PlayConditions.canSpot(game, Filters.or(Filters.name("Elrohir"), Filters.name("Elladan")), Filters.inSkirmish)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect(self, -2, Filters.and(CardType.MINION, Filters.inSkirmish)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.elven;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
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.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Elven
|
||||
* Twilight Cost: 2
|
||||
* Type: Companion • Elf
|
||||
* Strength: 6
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: At the start of each archery phase, if you can spot more minions than companions, each of your companions
|
||||
* is an archer.
|
||||
*/
|
||||
public class Card14_004 extends AbstractCompanion {
|
||||
public Card14_004() {
|
||||
super(2, 6, 3, 6, Culture.ELVEN, Race.ELF, null, "Gildor Inglorion", "Of the House of Finrod", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ARCHERY)
|
||||
&& Filters.countActive(game, CardType.MINION)
|
||||
> Filters.countActive(game, CardType.COMPANION)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new KeywordModifier(self, Filters.and(Filters.owner(self.getOwner()), CardType.COMPANION), Keyword.ARCHER)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.gandalf;
|
||||
|
||||
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.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Condition;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Gandalf
|
||||
* Twilight Cost: 2
|
||||
* Type: Companion • Man
|
||||
* Strength: 6
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: Each of your Dwarves and other [GANDALF] Men is strength +1. While you can spot more minions
|
||||
* than companions, the fellowship archery total is +X, where X is the number of minions minus the number of companions.
|
||||
*/
|
||||
public class Card14_005 extends AbstractCompanion {
|
||||
public Card14_005() {
|
||||
super(2, 6, 3, 6, Culture.GANDALF, Race.MAN, null, "Brand", "King of Dale", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
List<Modifier> modifiers = new LinkedList<Modifier>();
|
||||
modifiers.add(
|
||||
new StrengthModifier(self,
|
||||
Filters.and(Filters.owner(self.getOwner()), Filters.not(self),
|
||||
Filters.or(Race.DWARF, Filters.and(Culture.GANDALF, Race.MAN))), 1));
|
||||
modifiers.add(
|
||||
new ArcheryTotalModifier(self, Side.FREE_PEOPLE,
|
||||
new Condition() {
|
||||
@Override
|
||||
public boolean isFullfilled(LotroGame game) {
|
||||
return Filters.countActive(game, CardType.MINION)
|
||||
> Filters.countActive(game, CardType.COMPANION);
|
||||
}
|
||||
}, new Evaluator() {
|
||||
@Override
|
||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
||||
return Filters.countActive(game, CardType.MINION)
|
||||
- Filters.countActive(game, CardType.COMPANION);
|
||||
}
|
||||
}
|
||||
));
|
||||
return modifiers;
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.gandalf;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
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.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.effects.HealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Gandalf
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion • Man
|
||||
* Strength: 4
|
||||
* Vitality: 5
|
||||
* Resistance: 6
|
||||
* Game Text: At the start of each turn, heal Grimbeorn. At the start of the maneuver phase, you may exert Grimbeorn
|
||||
* twice and discard a minion from hand to make Grimbeorn strength +X until the regroup phase, where X is that minion's
|
||||
* strength.
|
||||
*/
|
||||
public class Card14_006 extends AbstractCompanion {
|
||||
public Card14_006() {
|
||||
super(3, 4, 5, 6, Culture.GANDALF, Race.MAN, null, "Grimbeorn", "Beorning Chieftain", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfTurn(game, effectResult)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new HealCharactersEffect(self, self));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.MANEUVER)
|
||||
&& PlayConditions.canSelfExert(self, 2, game)
|
||||
&& PlayConditions.canDiscardFromHand(game, playerId, 1, CardType.MINION)) {
|
||||
final OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendCost(
|
||||
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, CardType.MINION) {
|
||||
@Override
|
||||
protected void cardsBeingDiscardedCallback(Collection<PhysicalCard> cardsBeingDiscarded) {
|
||||
for (PhysicalCard physicalCard : cardsBeingDiscarded) {
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, self, physicalCard.getBlueprint().getStrength()), Phase.REGROUP));
|
||||
}
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.gondor;
|
||||
|
||||
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.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 2
|
||||
* Type: Companion • Man
|
||||
* Strength: 5
|
||||
* Vitality: 3
|
||||
* Resistance: 5
|
||||
* Game Text: Ranger. While the fellowship is at a forest or river site, Duilin is strength +3.
|
||||
*/
|
||||
public class Card14_007 extends AbstractCompanion {
|
||||
public Card14_007() {
|
||||
super(2, 5, 3, 5, Culture.GONDOR, Race.MAN, null, "Duilin", "Ranger from Blackroot Vale", true);
|
||||
addKeyword(Keyword.RANGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new StrengthModifier(self, self, new LocationCondition(Filters.or(Keyword.FOREST, Keyword.RIVER)), 3));
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.gondor;
|
||||
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.SpotCondition;
|
||||
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: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 2
|
||||
* Type: Companion • Man
|
||||
* Strength: 6
|
||||
* Vitality: 3
|
||||
* Resistance: 5
|
||||
* Game Text: While you can spot a mount, Duinhir is damage +1. Each time Duinhir wins a skirmish, if you can spot more
|
||||
* minions than companions, you may exert him to discard a minion that has strength 7 or less.
|
||||
*/
|
||||
public class Card14_008 extends AbstractCompanion {
|
||||
public Card14_008() {
|
||||
super(2, 6, 3, 5, Culture.GONDOR, Race.MAN, null, "Duinhir", "Tall Man of Blackroot Vale", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new KeywordModifier(self, self, new SpotCondition(PossessionClass.MOUNT), Keyword.DAMAGE, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.winsSkirmish(game, effectResult, self)
|
||||
&& Filters.countActive(game, CardType.MINION)
|
||||
> Filters.countActive(game, CardType.COMPANION)
|
||||
&& PlayConditions.canSelfExert(self, game)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendEffect(
|
||||
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.MINION, Filters.lessStrengthThan(8)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.gondor;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion • Man
|
||||
* Strength: 7
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Game Text: Ranger. While the Ring-bearer has resistance 9 or more, Halbarad's twilight cost is -1. At the start of
|
||||
* the maneuver phase, you may discard a [GONDOR] card from hand to heal a [GONDOR] companion.
|
||||
*/
|
||||
public class Card14_009 extends AbstractCompanion {
|
||||
public Card14_009() {
|
||||
super(3, 7, 3, 6, Culture.GONDOR, Race.MAN, null, "Halbarad", "Ranger of the North", true);
|
||||
addKeyword(Keyword.RANGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTwilightCostModifier(LotroGame game, PhysicalCard self) {
|
||||
if (game.getModifiersQuerying().getResistance(game, game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId())) >= 9)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.MANEUVER)
|
||||
&& PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.GONDOR)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.GONDOR));
|
||||
action.appendEffect(
|
||||
new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.men;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.CancelEventEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayEventResult;
|
||||
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.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Shadow
|
||||
* Culture: Man
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Man
|
||||
* Strength: 8
|
||||
* Vitality: 2
|
||||
* Site: 4
|
||||
* Game Text: Response: If the Free Peoples player plays an event, spot another [MEN] Man and discard this minion from
|
||||
* play to cancel that event.
|
||||
*/
|
||||
public class Card14_010 extends AbstractMinion {
|
||||
public Card14_010() {
|
||||
super(3, 8, 2, 4, Race.MAN, Culture.MEN, "Furious Hillman");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Filters.owner(game.getGameState().getCurrentPlayerId()), CardType.EVENT)
|
||||
&& PlayConditions.canSelfDiscard(self, game)
|
||||
&& PlayConditions.canSpot(game, Filters.not(self), Culture.MEN, Race.MAN)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new SelfDiscardEffect(self));
|
||||
action.appendEffect(
|
||||
new CancelEventEffect(self, (PlayEventResult) effectResult));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.men;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfTurnModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.MoveLimitModifier;
|
||||
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.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Shadow
|
||||
* Culture: Man
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Man
|
||||
* Strength: 8
|
||||
* Vitality: 2
|
||||
* Site: 4
|
||||
* Game Text: At the start of the regroup phase, if you can spot more Man characters than any other race, make the move
|
||||
* limit -1 this turn.
|
||||
*/
|
||||
public class Card14_011 extends AbstractMinion {
|
||||
public Card14_011() {
|
||||
super(3, 8, 2, 4, Race.MAN, Culture.MEN, "Swarming Hillman");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)) {
|
||||
if (!hasMoreOrEqualCharactersInAnyRaceThanMen(game)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfTurnModifierEffect(
|
||||
new MoveLimitModifier(self, -1)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean hasMoreOrEqualCharactersInAnyRaceThanMen(LotroGame game) {
|
||||
int menCount = Filters.countActive(game, Filters.character, Race.MAN);
|
||||
for (Race race : Race.values()) {
|
||||
if (race != Race.MAN) {
|
||||
if (Filters.countActive(game, Filters.character, race) >= menCount)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.orc;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
||||
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.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Shadow
|
||||
* Culture: Orc
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Half•troll
|
||||
* Strength: 8
|
||||
* Vitality: 2
|
||||
* Site: 4
|
||||
* Game Text: At the start of each assignment phase, if you can spot more companions than minions, you may remove (2)
|
||||
* to play an [ORC] Orc from your discard pile.
|
||||
*/
|
||||
public class Card14_012 extends AbstractMinion {
|
||||
public Card14_012() {
|
||||
super(3, 8, 2, 4, Race.HALF_TROLL, Culture.ORC, "Half-troll of Far Harad");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ASSIGNMENT)
|
||||
&& Filters.countActive(game, CardType.COMPANION)
|
||||
> Filters.countActive(game, CardType.MINION)
|
||||
&& PlayConditions.canPlayFromDiscard(playerId, game, 2, 0, Culture.ORC, Race.ORC)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new RemoveTwilightEffect(2));
|
||||
action.appendEffect(
|
||||
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.ORC, Race.ORC));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.orc;
|
||||
|
||||
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: Expanded Middle-earth
|
||||
* Side: Shadow
|
||||
* Culture: Orc
|
||||
* Twilight Cost: 4
|
||||
* Type: Minion • Half•troll
|
||||
* Strength: 9
|
||||
* Vitality: 3
|
||||
* Site: 4
|
||||
* Game Text: Ambush (1). Damage +1. Fierce. Lurker. Muster. Toil 2.
|
||||
*/
|
||||
public class Card14_013 extends AbstractMinion {
|
||||
public Card14_013() {
|
||||
super(4, 9, 3, 4, Race.HALF_TROLL, Culture.ORC, "Horror of Harad", null, true);
|
||||
addKeyword(Keyword.AMBUSH, 1);
|
||||
addKeyword(Keyword.DAMAGE, 1);
|
||||
addKeyword(Keyword.FIERCE);
|
||||
addKeyword(Keyword.LURKER);
|
||||
addKeyword(Keyword.MUSTER);
|
||||
addKeyword(Keyword.TOIL, 2);
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.uruk_hai;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Shadow
|
||||
* Culture: Uruk-hai
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Uruk-Hai
|
||||
* Strength: 8
|
||||
* Vitality: 2
|
||||
* Site: 5
|
||||
* Game Text: Damage +1. At the start of each assignment phase, you may heal an Uruk-hai for each companion
|
||||
* you can spot.
|
||||
*/
|
||||
public class Card14_014 extends AbstractMinion {
|
||||
public Card14_014() {
|
||||
super(3, 8, 2, 5, Race.URUK_HAI, Culture.URUK_HAI, "Uruk-hai Healer");
|
||||
addKeyword(Keyword.DAMAGE, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ASSIGNMENT)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
int countCompanions = Filters.countActive(game, CardType.COMPANION);
|
||||
for (int i = 0; i < countCompanions; i++)
|
||||
action.appendEffect(
|
||||
new ChooseAndHealCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set14.uruk_hai;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfTurnModifierEffect;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision;
|
||||
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Expanded Middle-earth
|
||||
* Side: Shadow
|
||||
* Culture: Uruk-hai
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Uruk-Hai
|
||||
* Strength: 8
|
||||
* Vitality: 2
|
||||
* Site: 5
|
||||
* Game Text: Damage +1. When you play this, choose one of the following keywords: battleground, mountain, plains,
|
||||
* or underground. The fellowship's current site gains that keyword until the end of the turn.
|
||||
*/
|
||||
public class Card14_015 extends AbstractMinion {
|
||||
public Card14_015() {
|
||||
super(3, 8, 2, 5, Race.URUK_HAI, Culture.URUK_HAI, "Uruk-hai Scout");
|
||||
addKeyword(Keyword.DAMAGE, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, self)) {
|
||||
final RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new PlayoutDecisionEffect(self.getOwner(),
|
||||
new MultipleChoiceAwaitingDecision(1, "Choose type", new String[]{"battleground", "mountain", "plains", "underground"}) {
|
||||
@Override
|
||||
protected void validDecisionMade(int index, String result) {
|
||||
Keyword keyword;
|
||||
if (index == 0)
|
||||
keyword = Keyword.BATTLEGROUND;
|
||||
else if (index == 1)
|
||||
keyword = Keyword.MOUNTAIN;
|
||||
else if (index == 2)
|
||||
keyword = Keyword.PLAINS;
|
||||
else
|
||||
keyword = Keyword.UNDERGROUND;
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfTurnModifierEffect(
|
||||
new KeywordModifier(self, game.getGameState().getCurrentSite(), keyword)));
|
||||
}
|
||||
}));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -73,7 +73,8 @@
|
||||
{
|
||||
"setId":"14",
|
||||
"setName":"Expanded Middle-earth",
|
||||
"rarityFile":"/set14-rarity.txt"
|
||||
"rarityFile": "/set14-rarity.txt",
|
||||
"needsLoading": false
|
||||
},
|
||||
{
|
||||
"setId":"15",
|
||||
|
||||
@@ -14,6 +14,8 @@ public class TriggerEffectProcessor implements EffectProcessor {
|
||||
FieldUtils.validateAllowedFields(value, "trigger", "optional", "condition", "cost", "effect");
|
||||
|
||||
final JSONObject[] triggerArray = FieldUtils.getObjectArray(value.get("trigger"), "trigger");
|
||||
if (triggerArray.length == 0)
|
||||
throw new InvalidCardDefinitionException("Trigger effect without trigger definition");
|
||||
final boolean optional = FieldUtils.getBoolean(value.get("optional"), "optional", false);
|
||||
|
||||
for (JSONObject trigger : triggerArray) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
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;
|
||||
@@ -173,6 +174,17 @@ public class ValueResolver {
|
||||
});
|
||||
}
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("printedStrengthFromMemory")) {
|
||||
FieldUtils.validateAllowedFields(object, "memory");
|
||||
final String memory = FieldUtils.getString(object.get("memory"), "memory");
|
||||
|
||||
return actionContext -> (Evaluator) (game, cardAffected) -> {
|
||||
int result = 0;
|
||||
for (PhysicalCard physicalCard : actionContext.getCardsFromMemory(memory)) {
|
||||
result += physicalCard.getBlueprint().getStrength();
|
||||
}
|
||||
return result;
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("subtract")) {
|
||||
FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber");
|
||||
final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), 0, environment);
|
||||
@@ -192,6 +204,20 @@ public class ValueResolver {
|
||||
}
|
||||
return total;
|
||||
};
|
||||
} else if (type.equals("maxOfRaces")) {
|
||||
FieldUtils.validateAllowedFields(object, "filter");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
|
||||
return actionContext -> (game, cardAffected) -> {
|
||||
int result = 0;
|
||||
final Filterable filterable = filterableSource.getFilterable(actionContext);
|
||||
for (Race race : Race.values())
|
||||
result = Math.max(result, Filters.countSpottable(game, race, filterable));
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
throw new InvalidCardDefinitionException("Unrecognized type of an evaluator " + type);
|
||||
}
|
||||
|
||||
@@ -128,6 +128,16 @@ public class FilterFactory {
|
||||
int amount = Integer.parseInt(parameter);
|
||||
return (actionContext) -> Filters.maxResistance(amount - 1);
|
||||
});
|
||||
parameterFilters.put("resistanceMoreThan",
|
||||
(parameter, environment) -> {
|
||||
int amount = Integer.parseInt(parameter);
|
||||
return (actionContext) -> Filters.minResistance(amount + 1);
|
||||
});
|
||||
parameterFilters.put("strengthLessThan",
|
||||
(parameter, environment) -> {
|
||||
int amount = Integer.parseInt(parameter);
|
||||
return (actionContext) -> Filters.lessStrengthThan(amount);
|
||||
});
|
||||
parameterFilters.put("not",
|
||||
(parameter, environment) -> {
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment);
|
||||
|
||||
@@ -30,6 +30,7 @@ public class ModifierSourceFactory {
|
||||
modifierProducers.put("modifysitenumber", new ModifySiteNumber());
|
||||
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
|
||||
modifierProducers.put("skipphase", new SkipPhase());
|
||||
modifierProducers.put("modifymovelimit", new ModifyMoveLimit());
|
||||
}
|
||||
|
||||
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.modifier;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.ModifierSource;
|
||||
import com.gempukku.lotro.cards.build.ValueSource;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.logic.modifiers.MoveLimitModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ModifyMoveLimit implements ModifierSourceProducer {
|
||||
@Override
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "amount");
|
||||
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), 1, environment);
|
||||
|
||||
return (actionContext) -> {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(actionContext);
|
||||
return new MoveLimitModifier(actionContext.getSource(), evaluator.evaluateExpression(actionContext.getGame(), null));
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.requirement;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.Requirement;
|
||||
import com.gempukku.lotro.cards.build.ValueSource;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class IsMore implements RequirementProducer {
|
||||
@Override
|
||||
public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber");
|
||||
|
||||
final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), 0, environment);
|
||||
final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), 0, environment);
|
||||
|
||||
return actionContext -> {
|
||||
final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
|
||||
final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
|
||||
return first > second;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ public class RequirementFactory {
|
||||
requirementProducers.put("fierceskirmish", new FierceSkirmish());
|
||||
requirementProducers.put("movecountminimum", new MoveCountMinimum());
|
||||
requirementProducers.put("wasassignedtoskirmish", new WasAssignedToSkirmish());
|
||||
requirementProducers.put("ismore", new IsMore());
|
||||
}
|
||||
|
||||
public Requirement getRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
Reference in New Issue
Block a user