From 48f7157b62518a9183b7d34422ef28f695d0dd4f Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Fri, 31 May 2024 23:36:28 -0500 Subject: [PATCH] Effect tweaks - Converted PreventExert to a generic PreventCardEffectAppender - Deleted ReduceArcheryTotal and converted the relevant cards to use a choosenumber/modifyarchery effect combo - Altered PlaySite to use SiteBlock's existing parsing instead of the generic enum parse - Deleted unused parameter on RemoveAllTokens --- .../cards/unofficial/pc/setV01/V1_elven.hjson | 24 ++++++++++++---- .../second-edition/set40/set40-elven.hjson | 28 +++++++++++++++---- .../lotro/cards/build/field/FieldUtils.java | 11 ++++++++ .../field/effect/EffectAppenderFactory.java | 7 ++--- .../build/field/effect/appender/PlaySite.java | 2 +- .../effect/appender/RemoveAllTokens.java | 2 +- 6 files changed, 57 insertions(+), 17 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV01/V1_elven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV01/V1_elven.hjson index b262d11e3..ceea71c25 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV01/V1_elven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/setV01/V1_elven.hjson @@ -128,10 +128,24 @@ # phase: archery # cost: [ # { - # type: reduceArcheryTotal - # side: free people - # memorize: reducedBy - # } + # type: chooseANumber + # text: Choose X (reduce fellowship archery total) + # from: 0 + # to: { + # type: archeryTotal + # side: free peoples + # } + # memorize: x + # } + # { + # type: modifyArcheryTotal + # side: free peoples + # amount: { + # type: fromMemory + # memory: x + # multiplier: -1 + # } + # } # ] # effect: [ # { @@ -139,7 +153,7 @@ # filter: self # amount: { # type: fromMemory - # memory: reducedBy + # memory: x # } # until:start(regroup) # } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson index 3fc42152f..377aabe17 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson @@ -16,16 +16,32 @@ type: canSpot filter: elf,archer,companion } - cost: { - type: reduceArcheryTotal - side: free people - memorize: reducedBy - } + cost: [ + { + type: chooseANumber + text: Choose X (reduce fellowship archery total) + from: 0 + to: { + type: archeryTotal + side: free people + } + memorize: x + } + { + type: modifyArcheryTotal + side: free people + amount: { + type: fromMemory + memory: x + multiplier: -1 + } + } + ] effect: { type: discard count: { type: fromMemory - memory: reducedBy + memory: x } select: choose(side(shadow),condition) } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java index 2df86ebd2..3f4b77510 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.build.field; import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.common.SitesBlock; import org.hjson.JsonValue; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -76,6 +77,16 @@ public class FieldUtils { } } + public static SitesBlock getBlock(Object value, String key) throws InvalidCardDefinitionException { + final String string = getString(value, key); + if (string == null) + throw new InvalidCardDefinitionException("Unknown block '" + string + "' in " + key + " field"); + final SitesBlock block = SitesBlock.findBlock(string); + if (block == null) + throw new InvalidCardDefinitionException("Unknown block '" + string + "' in " + key + " field"); + return block; + } + public static Side getSide(Object value, String key) throws InvalidCardDefinitionException { final String string = getString(value, key); if (string == null) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java index b756ab7a6..e1d7b3df1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java @@ -109,12 +109,12 @@ public class EffectAppenderFactory { effectAppenderProducers.put("preventaddingallburdens", new PreventAddingAllBurdens()); effectAppenderProducers.put("preventallwounds", new PreventAllWounds()); effectAppenderProducers.put("preventburden", new PreventEffect()); - effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender()); effectAppenderProducers.put("preventeffect", new PreventEffect()); - effectAppenderProducers.put("preventexert", new PreventExert()); + effectAppenderProducers.put("preventtwilight", new PreventEffect()); + effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender()); + effectAppenderProducers.put("preventexert", new PreventCardEffectAppender()); effectAppenderProducers.put("preventheal", new PreventCardEffectAppender()); effectAppenderProducers.put("preventspecialability", new PreventSpecialAbility()); - effectAppenderProducers.put("preventtwilight", new PreventEffect()); effectAppenderProducers.put("preventwound", new PreventWound()); effectAppenderProducers.put("putcardsfromdeckintohand", new PutCardsFromDeckIntoHand()); effectAppenderProducers.put("putcardsfromdeckontopofdeck", new PutCardsFromDeckOnTopOfDeck()); @@ -133,7 +133,6 @@ public class EffectAppenderFactory { effectAppenderProducers.put("putrandomcardfromhandbeneathdrawdeck", new PutRandomCardFromHandBeneathDrawDeck()); effectAppenderProducers.put("putstackedcardsintohand", new PutStackedCardsIntoHand()); effectAppenderProducers.put("reconcilehand", new ReconcileHand()); - effectAppenderProducers.put("reducearcherytotal", new ReduceArcheryTotal()); effectAppenderProducers.put("refreshself", new RefreshSelf()); effectAppenderProducers.put("reinforcetokens", new ReinforceTokens()); effectAppenderProducers.put("removealltokens", new RemoveAllTokens()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlaySite.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlaySite.java index 3dbb0c3b3..f6895d0dc 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlaySite.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlaySite.java @@ -21,7 +21,7 @@ public class PlaySite implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "block", "filter", "number", "memorize", "player"); - final SitesBlock block = FieldUtils.getEnum(SitesBlock.class, effectObject.get("block"), "block"); + final SitesBlock block = FieldUtils.getBlock(effectObject.get("block"), "block"); final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "any"); final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("number"), environment); final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RemoveAllTokens.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RemoveAllTokens.java index 05987ee01..e179166ab 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RemoveAllTokens.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RemoveAllTokens.java @@ -24,7 +24,7 @@ import java.util.Map; public class RemoveAllTokens implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "select", "memorize"); + FieldUtils.validateAllowedFields(effectObject, "select"); final String select = FieldUtils.getString(effectObject.get("select"), "select", "self");