From 7c6d77a01f5cf63e912b026bb470a7fc9c3b4723 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Mon, 24 Mar 2025 08:28:44 -0500 Subject: [PATCH] Fixed Eowyn, Northwoman and Into the Caves never being usable. --- .../cards/official/set17/set17-Rohan.hjson | 102 +++++++++++------- .../appender/AssignFpCharacterToSkirmish.java | 3 +- .../official/set17/Card_17_096_Tests.java | 47 +++++--- 3 files changed, 98 insertions(+), 54 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set17/set17-Rohan.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set17/set17-Rohan.hjson index 03c7e6188..d719aa534 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set17/set17-Rohan.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set17/set17-Rohan.hjson @@ -193,25 +193,38 @@ { type: activated phase: assignment + requires: [ + { + type: CanSpot + filter: ringBearer,AssignableToSkirmishAgainst(minion) + } + { + type: CanSpot + filter: minion,AssignableToSkirmishAgainst(ringBearer) + } + ] cost: [ { type: exert select: self } - { + ] + effect: { + type: CostToEffect + cost: { type: assignFPCharacterToSkirmish fpCharacter: choose(ringBearer) minion: choose(minion) memorizeMinion: chosenMinion } - ] - effect: { - type: addModifier - modifier: { - type: removeAllKeywords - filter: memory(chosenMinion) + effect: { + type: addModifier + modifier: { + type: removeAllKeywords + filter: memory(chosenMinion) + } + until: regroup } - until: regroup } } ] @@ -433,40 +446,49 @@ { type: activated phase: assignment - cost: { - type: assignFPCharacterToSkirmish - fpCharacter: choose(name(Frodo)) - minion: choose(minion) - memorizeMinion: chosenMinion - } - effect: { - type: doWhile - check: { - type: memoryIs - memory: choice - value: yes + requires: [ + { + type: CanSpot + filter: name(Frodo,AssignableToSkirmishAgainst(minion)) } - effect: [ - { - type: chooseAKeyword - memorize: keyword + { + type: CanSpot + filter: minion,AssignableToSkirmishAgainst(name(Frodo)) + } + ] + effect: { + type: CostToEffect + cost: { + type: assignFPCharacterToSkirmish + fpCharacter: choose(name(Frodo)) + minion: choose(minion) + memorizeMinion: chosenMinion + } + effect: { + type: doWhile + check: { + type: memoryIs + memory: choice + value: yes } - { - type: sendMessage - text: '{player} chose "{keyword}"' - } - { - type: removeKeyword - select: memory(chosenMinion) - keywordFromMemory: keyword - until: regroup - } - { - type: chooseYesOrNo - text: Would you like to choose more keywords? - memorize: choice - } - ] + effect: [ + { + type: chooseAKeyword + memorize: keyword + } + { + type: removeKeyword + select: memory(chosenMinion) + keywordFromMemory: keyword + until: regroup + } + { + type: chooseYesOrNo + text: Would you like to choose more keywords? + memorize: choice + } + ] + } } } ] diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java index a184f6aee..823d9be51 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java @@ -73,8 +73,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final Collection fpChar = actionContext.getCardsFromMemory(fpCharacterMemory); final Collection minion = actionContext.getCardsFromMemory(minionMemory); if (fpChar.size() == 1 && minion.size() == 1) { - AssignmentEffect effect = new AssignmentEffect(assigningPlayer, fpChar.iterator().next(), minion.iterator().next(), ignoreExistingAssignments, ignoreDefender, ignoreAllyLocation); - return effect; + return new AssignmentEffect(assigningPlayer, fpChar.iterator().next(), minion.iterator().next(), ignoreExistingAssignments, ignoreDefender, ignoreAllyLocation); } else { return null; } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_096_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_096_Tests.java index 527148ad4..81b9e66f1 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_096_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_096_Tests.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.official.set17; import com.gempukku.lotro.cards.GenericCardTestHelper; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; -import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import org.junit.Test; @@ -18,8 +17,9 @@ public class Card_17_096_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "17_96"); - // put other cards in here as needed for the test case + put("eowyn", "17_96"); + put("scout", "1_270"); + put("soldier", "1_271"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -42,12 +42,14 @@ public class Card_17_096_Tests * Strength: 6 * Vitality: 3 * Resistance: 7 - * Game Text: While the Ring-bearer is assigned to a skirmish, Éowyn cannot take wounds while skirmishing.
Assignment: Exert Éowyn and assign a minion to the Ring-bearer to make that minion lose all game text keywords and unable to gain game text keywords until the regroup phase. + * Game Text: While the Ring-bearer is assigned to a skirmish, Éowyn cannot take wounds while skirmishing. + * Assignment: Exert Éowyn and assign a minion to the Ring-bearer to make that minion lose + * all game text keywords and unable to gain game text keywords until the regroup phase. */ var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("eowyn"); assertEquals("Éowyn", card.getBlueprint().getTitle()); assertEquals("Northwoman", card.getBlueprint().getSubtitle()); @@ -62,18 +64,39 @@ public class Card_17_096_Tests assertEquals(7, card.getBlueprint().getResistance()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void EowynTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void EowynAbilityAssignsRingBearerToRemoveGameText() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var frodo = scn.GetRingBearer(); + var eowyn = scn.GetFreepsCard("eowyn"); + scn.FreepsMoveCharToTable(eowyn); + + var scout = scn.GetShadowCard("scout"); + scn.ShadowMoveCharToTable(scout); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.SkipToPhase(Phase.ASSIGNMENT); - assertEquals(2, scn.GetTwilight()); + assertTrue(scn.hasKeyword(scout, Keyword.TRACKER)); + assertTrue(scn.FreepsActionAvailable(eowyn)); + assertEquals(0, scn.GetWoundsOn(eowyn)); + assertFalse(scn.IsCharAssigned(frodo)); + assertFalse(GetScenario().IsCharAssigned(scout)); + + scn.FreepsUseCardAction(eowyn); + assertFalse(scn.hasKeyword(scout, Keyword.TRACKER)); + assertFalse(scn.FreepsActionAvailable(eowyn)); + assertEquals(1, scn.GetWoundsOn(eowyn)); + assertTrue(scn.IsCharAssigned(frodo)); + assertTrue(scn.IsCharAssigned(scout)); + + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + scn.FreepsResolveSkirmish(frodo); + scn.FreepsPassCurrentPhaseAction(); + + assertTrue(scn.ShadowAnyActionsAvailable()); } }