From 033e7d322259bf1eb81b09a1aee5519b2449a163 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sat, 18 Dec 2021 03:51:02 -0600 Subject: [PATCH] Finished Set V1 Isengard. Minor typos in other cards. --- .../cards/errata/set19-errata-playtest.json | 2 +- .../set101/set101_isengard_playtest.json | 283 ++++++++++++------ .../main/web/cards/set33/set33-shadow.json | 2 +- .../effect/appender/ChooseHowManyToSpot.java | 5 +- 4 files changed, 190 insertions(+), 102 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set19-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set19-errata-playtest.json index 22e748120..23b6dae09 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set19-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set19-errata-playtest.json @@ -1,5 +1,5 @@ { - "19_38": { + "89_38": { "title": "*Úlairë Nertëa", "subtitle": "Dark Horseman", "culture": "wraith", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_isengard_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_isengard_playtest.json index 4657651f6..91494b343 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_isengard_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_isengard_playtest.json @@ -6,66 +6,86 @@ "cost": 2, "type": "minion", "race": "crow", - "keyword": ["damage+1"], "strength": 4, "vitality": 2, "site": 4, "effects": [ { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "type": "inhandtrigger", + "trigger": { + "type": "activated", + "filter": "companion" + }, + "condition": { + "type": "canSpot", + "filter": "culture(isengard)", + }, + "effect": { + "type": "play", + "filter": "self", + "cost": -1 } }, { - "type": "trigger", - "optional": true, - "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, - "effect": { - "type": "wound", - "filter": "choose(orc)" - } - } + "type": "activated", + "phase": "shadow", + "condition": { + "type": "canSpot", + "filter": "another,minion,culture(isengard)", + }, + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "drawcards", + "count": 1 + } + } ] }, - "151_26": { "title": "Crows of Isengard", "culture": "isengard", "cost": 3, "type": "minion", "race": "crow", - "keyword": ["damage+1"], "strength": 5, "vitality": 3, "site": 4, "effects": [ { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "type": "trigger", + "trigger": { + "type": "played", + "filter": "self" + }, + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "drawcards", + "count": 1 + } + }, + { + "type": "inhandtrigger", + "trigger": { + "type": "played", + "filter": "event,side(free people)" + }, + "condition": { + "type": "canSpot", + "filter": "culture(isengard)", + }, + "effect": { + "type": "play", + "filter": "self", + "cost": -1 } }, - { - "type": "trigger", - "optional": true, - "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, - "effect": { - "type": "wound", - "filter": "choose(orc)" - } - } ] }, @@ -78,48 +98,70 @@ "keyword": ["support area"], "effects": [ { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" - } - }, - { - "type": "trigger", - "optional": true, - "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, - "effect": { - "type": "wound", - "filter": "choose(orc)" - } - } + "type": "trigger", + "trigger": { + "type": "movesFrom", + "filter": "hasAttached(weather,condition)" + }, + "effect": { + "type": "addTwilight", + "amount": 3 + }, + }, ] }, "151_28": { - "title": "Just A Whisp Of Cloud", + "title": "Just A Wisp Of Cloud", "culture": "isengard", "cost": 0, "type": "event", - "keyword": ["regroup"], + "keyword": ["regroup","spell","weather"], "effects": { "type": "event", "cost": { - "type": "exert", - "filter": "choose(elf)", - }, + "type": "chooseHowManyToSpot", + "filter": "Crow", + "memorize": "crowCount" + }, "effect": [ { - "type": "modifyStrength", - "filter": "choose(name(Gimli))", - "until": "start(regroup)", - "amount": 2 - } + "type": "chooseActiveCards", + "filter": "choose(Crow)", + "text": "Choose {crowCount} Crows to discard", + "count": { + "type": "fromMemory", + "memory": "crowCount" + }, + "memorize": "chosenCrows" + }, + { + "type": "choice", + "player": "fp", + "texts": [ + "Exert {crowCount} companions", + "Make the move limit -1" + ], + "effects": [ + { + "type": "exert", + "filter": "choose(companion)", + "count": { + "type": "fromMemory", + "memory": "crowCount" + }, + }, + { + "type": "addModifier", + "modifier": { + "type": "modifyMoveLimit", + "amount": -1 + }, + "until": "endOfTurn" + } + ] + } ] } }, @@ -131,35 +173,48 @@ "cost": 5, "type": "minion", "race": "crow", - "keyword": ["damage+1"], "strength": 7, "vitality": 4, "site": 4, "effects": [ { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "type": "inhandtrigger", + "trigger": { + "type": "played", + "filter": "character,side(free people)", + "memorize": "playedChar" + }, + "condition": { + "type": "canSpot", + "filter": "culture(isengard)", + }, + "effect": { + "type": "play", + "filter": "self", + "cost": { + "type": "multiply", + "multiplier": -1, + "source": { + "type": "twilightCostInMemory", + "memory": "playedChar" + } + } } }, { - "type": "trigger", - "optional": true, - "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, - "effect": { - "type": "wound", - "filter": "choose(orc)" - } - } + "type": "modifier", + "modifier": { + "type": "modifyStrength", + "filter": "self", + "amount": { + "type": "forEachCultureOver", + "filter": "side(free people)" + } + } + } ] }, - "151_30": { "title": "*Saruman", "subtitle": "Fell Voice On The Air", @@ -167,31 +222,63 @@ "cost": 4, "type": "minion", "race": "wizard", - "keyword": ["damage+1"], "strength": 8, "vitality": 4, "site": 4, "effects": [ { + "type": "modifier", + "modifier": { + "type": "cantTakeWounds", + "filter": "self", + "condition": [ + { + "type": "phase", + "phase": "archery" + }, + { + "type": "sarumanfirstsentenceactive" + } + ] + } + }, + { + "type": "modifier", + "modifier": { + "type": "cantbeassignedtoskirmish", + "filter": "self", + "condition": { + "type": "sarumanfirstsentenceactive" + } + } + }, + { "type": "modifier", "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "type": "modifystrength", + "filter": "culture(isengard),minion", + "amount": 2, + "condition": { + "type": "canSpot", + "filter": "weather,condition,attachedTo(site)" + }, } }, { - "type": "trigger", - "optional": true, - "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, - "effect": { - "type": "wound", - "filter": "choose(orc)" - } - } + "type": "activatedtrigger", + "trigger": { + "type": "movesFrom", + "filter": "site,hasAttached(weather,condition)" + }, + "cost": { + "type": "discard", + "filter": "self" + }, + "effect": { + "type": "exert", + "filter": "all(companion)" + } + } ] }, diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json index 1d8e953d2..9d7a7bef3 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json @@ -689,7 +689,7 @@ "type": "twilightCostInMemory", "memory": "revealedCard" } - } + }, { "type": "discard", "player": "fp", diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ChooseHowManyToSpot.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ChooseHowManyToSpot.java index 3c5fb70bf..0e2d59fda 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ChooseHowManyToSpot.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ChooseHowManyToSpot.java @@ -19,10 +19,11 @@ import org.json.simple.JSONObject; public class ChooseHowManyToSpot implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "filter", "memorize"); + FieldUtils.validateAllowedFields(effectObject, "filter", "memorize", "text"); final String filter = FieldUtils.getString(effectObject.get("filter"), "filter"); final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize"); + final String text = FieldUtils.getString(effectObject.get("text"), "text", "Choose how many to spot"); if (memorize == null) throw new InvalidCardDefinitionException("ChooseHowManyToSpot requires a field to memorize the value"); @@ -35,7 +36,7 @@ public class ChooseHowManyToSpot implements EffectAppenderProducer { final Filterable filterable = filterableSource.getFilterable(actionContext); final int count = Filters.countSpottable(actionContext.getGame(), filterable); return new PlayoutDecisionEffect(actionContext.getPerformingPlayer(), - new IntegerAwaitingDecision(1, "Choose how many to spot", 0, count, count) { + new IntegerAwaitingDecision(1, text, 0, count, count) { @Override public void decisionMade(String result) throws DecisionResultInvalidException { final int spotCount = getValidatedResult(result);