From 43a16b8a1dc59184b3fa062ab334bfa39726b56b Mon Sep 17 00:00:00 2001 From: MarcinSc Date: Mon, 22 Apr 2024 23:57:56 +0700 Subject: [PATCH] Migrated Shire cards in set 6 to hjson --- .../official/set06}/set06-Shire.hjson | 205 +++++++++++++----- .../appender/resolver/ValueResolver.java | 14 ++ 2 files changed, 165 insertions(+), 54 deletions(-) rename gemp-lotr/gemp-lotr-cards/src/main/resources/{card-stubs => cards/official/set06}/set06-Shire.hjson (57%) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set06-Shire.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set06/set06-Shire.hjson similarity index 57% rename from gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set06-Shire.hjson rename to gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set06/set06-Shire.hjson index 55dd33245..fd65cb8a7 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/card-stubs/set06-Shire.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set06/set06-Shire.hjson @@ -21,17 +21,47 @@ culture: Shire twilight: 1 type: Condition - /*requires: { - - } + target: name(Frodo) effects: [ - { - - } - { - - } - ]*/ + { + type: trigger + trigger: { + type: aboutToTakeWound + filter: bearer,exhausted + } + effect: [ + { + type: negateWound + filter: choose(bearer,exhausted) + } + { + type: addBurdens + } + ] + } + { + type: trigger + trigger: { + type: movesTo + filter: siteNumber(9) + } + effect: { + type: corruptRingBearer + } + } + { + type: activated + phase: regroup + requires: { + type: cantSpot + filter: minion + } + effect: { + type: discard + filter: self + } + } + ] gametext: Bearer must be Frodo.
Each time Frodo is about to be killed by a wound, add a burden instead.
When the fellowship moves to site 9, Frodo is corrupted.
Regroup: If you can spot no minions, discard this condition. lore: "" promotext: "" @@ -65,20 +95,34 @@ twilight: 1 type: Event keywords: Regroup - /*requires: { - - } effects: { type: event - cost: { - - }, + requires: [ + { + type: canSpot + filter: name(Sam) + } + { + type: canSpot + filter: or(name(Sméagol),name(Gollum)) + } + ] effect: [ { - + type: revealHand + hand: shadow + memorize: revealedCards + } + { + type: wound + filter: choose(minion) + times: { + type: forEachCultureInMemory + memory: revealedCards + } } ] - }*/ + } gametext: Regroup: Spot Sam and Sméagol (or Gollum) to choose an opponent who must reveal his or her hand. Wound a minion X times, where X is the number of different cultures revealed. lore: No more than you deserve.' promotext: "" @@ -112,17 +156,50 @@ twilight: 2 type: Condition keywords: Support Area - /*requires: { - - } effects: [ - { - - } - { - - } - ]*/ + { + type: trigger + trigger: { + type: played + filter: self + } + effect: { + type: addTokens + culture: shire + filter: self + count: 2 + } + } + { + type: activatedTrigger + trigger: { + type: aboutToTakeWound + filter: unbound,hobbit + } + cost: { + type: choice + texts: [ + Discard this condition + Remove a {shire} token from here + ] + effects: [ + { + type: discard + filter: self + } + { + type: removeTokens + culture: shire + filter: self + } + ] + } + effect: { + type: preventWound + filter: choose(unbound,hobbit) + } + } + ] gametext: Plays to your support area. When you play this condition, place 2 [shire] tokens here.
Response: If an unbound Hobbit is about to take a wound, discard this condition or remove a [shire] token from here to prevent that wound. lore: "" promotext: "" @@ -156,20 +233,33 @@ twilight: 1 type: Event keywords: Skirmish - /*requires: { - - } effects: { type: event cost: { - + type: exert + filter: choose(unbound,hobbit) + memorize: exertedHobbit }, effect: [ { - + type: modifyStrength + filter: memory(exertedHobbit) + amount: { + type: forEachYouCanSpot + filter: culture(gandalf),companion + } + } + { + type: addKeyword + filter: memory(exertedHobbit) + keyword: damage + amount: { + type: forEachYouCanSpot + filter: culture(gandalf),companion + } } ] - }*/ + } gametext: Skirmish: Exert an unbound Hobbit to make him strength +1 and damage +1 for each [gandalf] companion you can spot. lore: The coming of the hobbits and the tidings that they brought have spilled it: it will soon be running like a flood....' promotext: "" @@ -208,17 +298,20 @@ vitality: 4 signet: Aragorn resistance: 6 - /*requires: { - - } effects: [ - { - - } - { - - } - ]*/ + { + type: activated + phase: regroup + cost: { + type: discard + filter: self + } + effect: { + type: heal + filter: choose(culture(gandalf),companion) + } + } + ] gametext: Regroup: Discard Merry to heal a [gandalf] companion. lore: Don't talk to it Merry. Don't encourage it.' promotext: "" @@ -257,17 +350,21 @@ vitality: 4 signet: Aragorn resistance: 6 - /*requires: { - - } effects: [ - { - - } - { - - } - ]*/ + { + type: activated + phase: regroup + cost: { + type: discard + filter: self + } + effect: { + type: wound + player: shadow + filter: choose(minion) + } + } + ] gametext: Regroup: Discard Pippin to choose a Shadow player who must wound one of his or her minions. lore: By root and twig, but this is a strange business: up sprout a little folk that are not in the old lists....' promotext: "" 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 8dedb77eb..83f4a3564 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 @@ -12,6 +12,8 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; public class ValueResolver { public static ValueSource resolveEvaluator(Object value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { @@ -103,6 +105,18 @@ public class ValueResolver { return actionContext -> (game, cardAffected) -> actionContext.getCardFromMemory(memory).getSiteNumber(); } else if (type.equalsIgnoreCase("regionNumber")) { return (actionContext) -> (game, cardAffected) -> GameUtils.getRegion(actionContext.getGame()); + } else if (type.equalsIgnoreCase("forEachCultureInMemory")) { + FieldUtils.validateAllowedFields(object, "memory", "limit", "multiplier"); + final String memory = FieldUtils.getString(object.get("memory"), "memory"); + final int limit = FieldUtils.getInteger(object.get("limit"), "limit", Integer.MAX_VALUE); + final int multiplier = FieldUtils.getInteger(object.get("multiplier"), "multiplier", 1); + return (actionContext) -> { + Set cultures = new HashSet<>(); + for (PhysicalCard card : actionContext.getCardsFromMemory(memory)) { + cultures.add(card.getBlueprint().getCulture()); + } + return new ConstantEvaluator(Math.min(limit, multiplier * cultures.size())); + }; } else if (type.equalsIgnoreCase("forEachInMemory")) { FieldUtils.validateAllowedFields(object, "memory", "limit", "multiplier"); final String memory = FieldUtils.getString(object.get("memory"), "memory");