From aa1baf84f2148415df60e4069293147f6f1b7813 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sun, 2 Jun 2024 02:40:09 -0500 Subject: [PATCH] Changing Ford of Bruinen and Dimrill Dale to use PerTurn/PerPhase limits instead of in-zone data, so now they shouldn't flash at the end of turn/end of shadow phase. --- .../resources/cards/official/set01/set1.hjson | 57 +++--------------- .../official/set01/Card_01_338_Tests.java | 52 ++++++++++++---- .../official/set01/Card_01_350_Tests.java | 60 +++++++++++++++---- 3 files changed, 95 insertions(+), 74 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1.hjson index 1ba1cd2c8..ae47f1689 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1.hjson @@ -548,11 +548,8 @@ modifier: { type: modifyCost requires: { - type: not - requires: { - type: hasInZoneData - filter: self - } + type: perTurnLimit + limit: 1 } filter: nazgul amount: -5 @@ -563,27 +560,10 @@ trigger: { type: played filter: nazgul - memorize: playedNazgul - } - requires: { - type: not - requires: { - type: hasInZoneData - filter: self - } } effect: { - type: storeWhileInZone - memory: playedNazgul - } - } - { - type: trigger - trigger: { - type: endOfTurn - } - effect: { - type: resetWhileInZoneData + type: incrementPerTurnLimit + limit: 1 } } ] @@ -917,11 +897,8 @@ modifier: { type: modifyCost requires: { - type: not - requires: { - type: hasInZoneData - filter: self - } + type: perPhaseLimit + limit: 1 } filter: culture(moria),orc amount: -2 @@ -932,28 +909,10 @@ trigger: { type: played filter: culture(moria),orc - memorize: playedOrc - } - requires: { - type: not - requires: { - type: hasInZoneData - filter: self - } } effect: { - type: appendCardIdsToWhileInZone - memory: playedOrc - } - } - { - type: trigger - trigger: { - type: endOfPhase - phase: shadow - } - effect: { - type: resetWhileInZoneData + type: incrementPerPhaseLimit + limit: 1 } } ] diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_338_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_338_Tests.java index dca000e34..f70a71cb6 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_338_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_338_Tests.java @@ -18,10 +18,21 @@ public class Card_01_338_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "1_338"); + put("twk", "1_237"); + put("lemenya", "1_232"); // put other cards in here as needed for the test case }}, - GenericCardTestHelper.FellowshipSites, + new HashMap<>() {{ + put("site1", "1_319"); + put("site2", "1_327"); + put("site3", "1_338"); + put("site4", "1_343"); + put("site5", "1_349"); + put("site6", "1_351"); + put("site7", "1_353"); + put("site8", "1_356"); + put("site9", "1_360"); + }}, GenericCardTestHelper.FOTRFrodo, GenericCardTestHelper.RulingRing ); @@ -45,9 +56,7 @@ public class Card_01_338_Tests var scn = GetScenario(); - //Use this once you have set the deck up properly - //var card = scn.GetFreepsSite(3); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsSite(3); assertEquals("Ford of Bruinen", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -59,18 +68,37 @@ public class Card_01_338_Tests assertEquals(3, card.getBlueprint().getSiteNumber()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void FordofBruinenTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void FordofBruinenOnlyDiscountsTheFirstNazgul() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var ford = scn.GetShadowSite(3); + + var twk = scn.GetShadowCard("twk"); + var lemenya = scn.GetShadowCard("lemenya"); + scn.ShadowMoveCardToHand(twk, lemenya); scn.StartGame(); - scn.FreepsPlayCard(card); + //Start our test on 2 so that moving to 3 is the first thing we do + scn.SkipToSite(2); - assertEquals(0, scn.GetTwilight()); + scn.SetTwilight(9); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(ford, scn.GetCurrentSite()); + + //9 manual + 1 from the fellowship moving + assertEquals(10, scn.GetTwilight()); + + scn.ShadowPlayCard(twk); + //TWK costs 8 (no roaming), discounted by 5 to 3 total + //10 - 3 + assertEquals(7, scn.GetTwilight()); + + scn.ShadowPlayCard(lemenya); + //Lemenya costs 4, should have no discount + //7 - 4 + assertEquals(3, scn.GetTwilight()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_350_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_350_Tests.java index eb8c0c439..54162d9aa 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_350_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_350_Tests.java @@ -18,10 +18,21 @@ public class Card_01_350_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "1_350"); - // put other cards in here as needed for the test case + put("troop", "1_177"); + put("flankers", "2_61"); + put("redeye", "1_266"); + }}, + new HashMap<>() {{ + put("site1", "1_319"); + put("site2", "1_327"); + put("site3", "1_338"); + put("site4", "1_343"); + put("site5", "1_349"); + put("site6", "1_350"); + put("site7", "1_353"); + put("site8", "1_356"); + put("site9", "1_360"); }}, - GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, GenericCardTestHelper.RulingRing ); @@ -45,9 +56,7 @@ public class Card_01_350_Tests var scn = GetScenario(); - //Use this once you have set the deck up properly - //var card = scn.GetFreepsSite(6); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsSite(6); assertEquals("Dimrill Dale", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -58,18 +67,43 @@ public class Card_01_350_Tests assertEquals(6, card.getBlueprint().getSiteNumber()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void DimrillDaleTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void DimrillDaleOnlyDiscountsFirstMoriaOrc() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var dale = scn.GetShadowSite(6); + + var troop = scn.GetShadowCard("troop"); + var flankers = scn.GetShadowCard("flankers"); + var redeye = scn.GetShadowCard("redeye"); + scn.ShadowMoveCardToHand(troop, redeye); scn.StartGame(); - scn.FreepsPlayCard(card); + //Start our test on 5 so that moving to 6 is the first thing we do + scn.SkipToSite(5); - assertEquals(3, scn.GetTwilight()); + scn.SetTwilight(11); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(dale, scn.GetCurrentSite()); + + //11 manual + 4 from the fellowship moving + assertEquals(15, scn.GetTwilight()); + + scn.ShadowPlayCard(redeye); + //Orc Chieftain costs 2, should have had 0 discount + //15 - 2 + assertEquals(13, scn.GetTwilight()); + + scn.ShadowPlayCard(troop); + //Troop costs 6 (no roaming), discounted by 2 to 4 total + //13 - 4 + assertEquals(9, scn.GetTwilight()); + + scn.ShadowPlayCard(flankers); + //flankers costs 5, should have no discount + //9 - 5 + assertEquals(4, scn.GetTwilight()); } }