diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json new file mode 100644 index 000000000..7d4a3bf21 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json @@ -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" + } + ] + } + ] + } + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/dwarven/Card14_001.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/dwarven/Card14_001.java deleted file mode 100644 index fadf0e7d4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/dwarven/Card14_001.java +++ /dev/null @@ -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 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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_002.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_002.java deleted file mode 100644 index 5804e71bd..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_002.java +++ /dev/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 getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList(); - 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_003.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_003.java deleted file mode 100644 index 7fcfd2ad4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_003.java +++ /dev/null @@ -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 getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new TwilightCostModifier(self, Filters.name("Elladan"), -2)); -} - - @Override - public List 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_004.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_004.java deleted file mode 100644 index afff667aa..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/elven/Card14_004.java +++ /dev/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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gandalf/Card14_005.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gandalf/Card14_005.java deleted file mode 100644 index 503045656..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gandalf/Card14_005.java +++ /dev/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 getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList(); - 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gandalf/Card14_006.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gandalf/Card14_006.java deleted file mode 100644 index 72048ca48..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gandalf/Card14_006.java +++ /dev/null @@ -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 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 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 cardsBeingDiscarded) { - for (PhysicalCard physicalCard : cardsBeingDiscarded) { - action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new StrengthModifier(self, self, physicalCard.getBlueprint().getStrength()), Phase.REGROUP)); - } - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_007.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_007.java deleted file mode 100644 index cada529cf..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_007.java +++ /dev/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 getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new StrengthModifier(self, self, new LocationCondition(Filters.or(Keyword.FOREST, Keyword.RIVER)), 3)); -} -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_008.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_008.java deleted file mode 100644 index 8a0a9cdf0..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_008.java +++ /dev/null @@ -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 getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new KeywordModifier(self, self, new SpotCondition(PossessionClass.MOUNT), Keyword.DAMAGE, 1)); -} - - @Override - public List 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_009.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_009.java deleted file mode 100644 index 5a807efc7..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/gondor/Card14_009.java +++ /dev/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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/men/Card14_010.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/men/Card14_010.java deleted file mode 100644 index 793384ed9..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/men/Card14_010.java +++ /dev/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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/men/Card14_011.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/men/Card14_011.java deleted file mode 100644 index f70971bcf..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/men/Card14_011.java +++ /dev/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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/orc/Card14_012.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/orc/Card14_012.java deleted file mode 100644 index 2947b9984..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/orc/Card14_012.java +++ /dev/null @@ -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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/orc/Card14_013.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/orc/Card14_013.java deleted file mode 100644 index 2cc2f513f..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/orc/Card14_013.java +++ /dev/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); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/uruk_hai/Card14_014.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/uruk_hai/Card14_014.java deleted file mode 100644 index 3497e3936..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/uruk_hai/Card14_014.java +++ /dev/null @@ -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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/uruk_hai/Card14_015.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/uruk_hai/Card14_015.java deleted file mode 100644 index 42177a185..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set14/uruk_hai/Card14_015.java +++ /dev/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 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; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json b/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json index e5ee4d2c5..846a60844 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json @@ -73,7 +73,8 @@ { "setId":"14", "setName":"Expanded Middle-earth", - "rarityFile":"/set14-rarity.txt" + "rarityFile": "/set14-rarity.txt", + "needsLoading": false }, { "setId":"15", diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/TriggerEffectProcessor.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/TriggerEffectProcessor.java index f1b528b6a..a06362829 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/TriggerEffectProcessor.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/TriggerEffectProcessor.java @@ -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) { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java index 6f329b88f..ea0a28d82 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index 2c0d7080b..4bbc20edd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java index 882d5c2ca..047b99ce6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java @@ -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 { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyMoveLimit.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyMoveLimit.java new file mode 100644 index 000000000..1fe852b92 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyMoveLimit.java @@ -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)); + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsMore.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsMore.java new file mode 100644 index 000000000..082a8ac55 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsMore.java @@ -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; + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java index 0ec75a29d..c17008bed 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java @@ -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 {