Errata Pack 1 and most of Errata Pack 2 complete

This commit is contained in:
Christian 'ketura' McCarty
2021-03-06 19:50:16 -06:00
parent bb251bbfb7
commit 19cab722c4
10 changed files with 115 additions and 270 deletions

View File

@@ -66,7 +66,7 @@
},
"effect": {
"type": "heal",
"filter": "choose(ally,allyHome(fellowship,6))",
"filter": "choose(another,ally,allyHome(fellowship,6))",
"count": "0-2"
}
},
@@ -76,12 +76,12 @@
"cost": {
"type": "exert",
"filter": "self",
"times": 2
"times": 1
},
"effect": {
"type": "play",
"filter": "choose(elf)",
"cost": -2
"cost": -1
}
}
]
@@ -307,7 +307,7 @@
"51_108": {
"title": "No Stranger to the Shadows",
"title": "*No Stranger to the Shadows",
"culture": "gondor",
"cost": 0,
"type": "condition",
@@ -318,9 +318,9 @@
"effects": {
"type": "modifier",
"modifier": {
"type": "addKeyword",
"filter": "bearer",
"keyword": "concealed"
"type": "modifyCost",
"filter": "site",
"amount": -1
}
}
},
@@ -350,18 +350,19 @@
"hand": "shadowPlayer",
"forced": true,
"memorize": "revealedCards",
"count":3
"count":2
},
{
"type": "addKeyword",
"filter": "choose(companion,not(concealed))",
"keyword": "concealed",
"until": "start(regroup)",
"type": "removeTwilight",
"amount": {
"type": "forEachMatchingInMemory",
"memory": "revealedCards",
"filter": "orc",
"limit": 1
"type": "cardPhaseLimit",
"limit": 2,
"amount": {
"type": "forEachMatchingInMemory",
"memory": "revealedCards",
"filter": "orc",
"limit": 2
}
}
}
]
@@ -373,37 +374,26 @@
"culture": "shire",
"cost": 0,
"type": "condition",
"target": "or(name(Merry),name(Pippin))",
"keyword": [
"stealth",
"support area"
"stealth"
],
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(hobbit)"
}
},
{
"type": "trigger",
"trigger": {
"type": "moves"
},
"condition": {
"type": "canSpot",
"count": 2,
"filter": "hobbit,companion"
},
"effect": {
"type": "addKeyword",
"filter": "choose(hobbit,companion)",
"keyword": "concealed",
"until": "start(regroup)"
"effects": {
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "site",
"amount": {
"type": "condition",
"condition": {
"type": "cantSpot",
"filter": "companion,not(hobbit)"
},
"true": -1,
"false": 0
}
}
]
}
},

View File

@@ -58,40 +58,14 @@
"resistance": 6,
"signet": "frodo",
"keyword": "damage+1",
"effects": [
{
"type": "modifier",
"modifier": {
"type": "addKeyword",
"filter": "self",
"keyword": "concealed",
"condition": {
"type": "location",
"filter": "underground"
}
},
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "movesTo",
"filter": "underground",
},
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "addKeyword",
"filter": "choose(another,companion)",
"keyword": "concealed",
"until": "start(regroup)"
}
"effects": {
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "underground,site",
"amount": -1
}
]
}
},

View File

@@ -113,7 +113,7 @@
],
"effects": {
"type": "trigger",
"optional": true,
"optional": false,
"trigger": {
"type": "movesfrom"
},
@@ -122,46 +122,9 @@
"phase": "fellowship"
},
"effect": {
"type": "preventable",
"effect": [
{
"type": "addKeyword",
"filter": "choose(another,companion)",
"keyword": "concealed",
"until": "start(regroup)"
},
{
"type": "addKeyword",
"filter": "self",
"keyword": "concealed",
"until": "start(regroup)"
},
],
"text": "Would you like to discard a minion (or reveal a tracker) from hand to prevent a companion becoming concealed?",
"player": "shadowPlayer",
"cost": {
"type": "choice",
"player": "shadowPlayer",
"texts": [
"Discard a minion from hand",
"Reveal a tracker from hand"
],
"effects": [
{
"type": "revealCardsFromHand",
"filter": "choose(tracker)",
"hand": "shadowPlayer"
},
{
"type": "discardFromHand",
"filter": "choose(minion)",
"forced": false,
"hand": "shadowPlayer",
}
]
}
},
"type": "removeTwilight",
"amount": 1
}
}
},
@@ -175,23 +138,12 @@
"possession": "Pony",
"target": "name(Sam)",
"effects": [
{
"type": "trigger",
"trigger": {
"type": "played",
"filter": "self"
},
"effect": {
"type": "heal",
"filter": "bearer"
}
},
{
"type": "modifier",
"modifier": {
"type": "addKeyword",
"filter": "bearer",
"keyword": "concealed"
"type": "modifyCost",
"filter": "site",
"amount": -1
}
},
{

View File

@@ -28,15 +28,15 @@ public class Galadriel_LoLErrataTests
{{
put("galadriel", "51_45");
put("allyHome3_1", "1_60");
put("allyHome3_2", "1_27");
put("allyHome6_1", "1_56");
put("allyHome6_2", "1_57");
put("allyHome6_3", "1_34");
}}
);
}
@Test
public void FellowshipActionExertsTwiceToDiscountAnElf() throws DecisionResultInvalidException, CardNotFoundException {
public void FellowshipActionExertsToDiscountAnElf() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetSimplePlayScenario();
@@ -55,9 +55,9 @@ public class Galadriel_LoLErrataTests
scn.FreepsUseCardAction(galadriel);
assertEquals(2, scn.GetWoundsOn(galadriel));
assertEquals(1, scn.GetWoundsOn(galadriel));
assertEquals(0, scn.GetFreepsHandCount());
assertEquals(2, scn.GetTwilight());
assertEquals(3, scn.GetTwilight());
}
@@ -67,20 +67,21 @@ public class Galadriel_LoLErrataTests
GenericCardTestHelper scn = GetHome6AllyScenario();
scn.FreepsMoveCharToTable("galadriel");
scn.FreepsMoveCharToTable("allyHome3_1");
scn.FreepsMoveCharToTable("allyHome3_2");
scn.FreepsMoveCharToTable("allyHome6_1");
scn.FreepsMoveCharToTable("allyHome6_2");
scn.FreepsMoveCharToTable("allyHome6_3");
scn.FreepsAddWoundsToChar("galadriel", 1);
scn.FreepsAddWoundsToChar("allyHome3_1", 1);
scn.FreepsAddWoundsToChar("allyHome3_2", 1);
scn.FreepsAddWoundsToChar("allyHome6_1", 1);
scn.FreepsAddWoundsToChar("allyHome6_2", 1);
scn.FreepsAddWoundsToChar("allyHome6_3", 1);
scn.StartGame();
assertEquals(Phase.BETWEEN_TURNS, scn.GetCurrentPhase());
//There are 5 total elf allies in play: 1 is home 3, and 1 is Galadriel herself. The rest should be eligible.
assertEquals(3, scn.FreepsGetADParamAsList("cardId").size());
assertEquals("0", scn.FreepsGetADParam("min"));
assertEquals("2", scn.FreepsGetADParam("max"));

View File

@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.unofficial.pc.errata.set1;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.game.PhysicalCardImpl;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
@@ -30,13 +31,14 @@ public class NoStrangerErrataTests
@Test
public void NoStrangerHasStealth() throws DecisionResultInvalidException, CardNotFoundException {
public void NoStrangerIsUniqueAndHasStealth() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl nostranger = scn.GetFreepsCard("nostranger");
assertTrue(scn.HasKeyword(nostranger, Keyword.STEALTH));
assertTrue(nostranger.getBlueprint().isUnique());
}
@Test
@@ -64,34 +66,9 @@ public class NoStrangerErrataTests
assertEquals(2, scn.FreepsGetADParamAsList("cardId").size());
}
@Test
public void NoStrangerLimitOnePerBearer() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl aragorn = scn.GetFreepsCard("aragorn");
PhysicalCardImpl arwen = scn.GetFreepsCard("arwen");
PhysicalCardImpl nostranger = scn.GetFreepsCard("nostranger");
PhysicalCardImpl nostranger2 = scn.GetFreepsCard("nostranger2");
scn.FreepsMoveCharToTable(aragorn);
scn.FreepsMoveCharToTable(arwen);
scn.FreepsMoveCardToHand(nostranger);
scn.FreepsMoveCardToHand(nostranger2);
scn.StartGame();
scn.FreepsPlayCard(nostranger);
scn.FreepsChooseCard(aragorn);
scn.FreepsPlayCard(nostranger2);
//No prompt means it was placed automatically on Arwen, with no choice between Arwen and Aragorn
assertFalse(scn.FreepsAnyActionsAvailable());
}
@Test
public void NoStrangerAddsConcealed() throws DecisionResultInvalidException, CardNotFoundException {
public void NoStrangerReducesTwilight() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
@@ -105,6 +82,9 @@ public class NoStrangerErrataTests
scn.FreepsPlayCard(nostranger);
scn.HasKeyword(aragorn, Keyword.CONCEALED);
scn.FreepsSkipCurrentPhaseAction();
// 2 for Frodo/Aragorn, 1 for the site, -1 for No Stranger
assertEquals(2, scn.GetTwilight());
}
}

View File

@@ -78,7 +78,7 @@ public class StingErrataTests
}
@Test
public void StingAbilityExertsFrodoAndRevealsThreeCards() throws DecisionResultInvalidException, CardNotFoundException {
public void StingAbilityExertsFrodoAndRevealsTwoCards() throws DecisionResultInvalidException, CardNotFoundException {
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
@@ -97,13 +97,13 @@ public class StingErrataTests
scn.FreepsUseCardAction(sting);
//Reveals 3 cards
assertEquals(3, scn.FreepsGetADParamAsList("blueprintId").size());
//Reveals 2 cards
assertEquals(2, scn.FreepsGetADParamAsList("blueprintId").size());
assertEquals(1, scn.GetWoundsOn(frodo));
}
@Test
public void StingAbilityMakesConcealedIfOrcRevealed() throws DecisionResultInvalidException, CardNotFoundException {
public void StingAbilityRemovesTwilight() throws DecisionResultInvalidException, CardNotFoundException {
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
@@ -120,63 +120,28 @@ public class StingErrataTests
scn.StartGame();
scn.FreepsUseCardAction(sting);
//Both players have revealed cards as an action to dismiss
scn.SkipCurrentPhaseActions();
assertTrue(scn.FreepsCanChooseCharacter(frodo));
assertTrue(scn.FreepsCanChooseCharacter(sam));
assertTrue(scn.FreepsCanChooseCharacter(merry));
scn.FreepsChooseCard(frodo);
assertTrue(scn.HasKeyword(frodo, Keyword.CONCEALED));
scn.SetTwilight(10);
scn.FreepsUseCardAction(sting);
scn.SkipCurrentPhaseActions();
assertFalse(scn.FreepsCanChooseCharacter(frodo));
assertTrue(scn.FreepsCanChooseCharacter(sam));
assertTrue(scn.FreepsCanChooseCharacter(merry));
scn.FreepsChooseCard(sam);
assertTrue(scn.HasKeyword(sam, Keyword.CONCEALED));
}
@Test
public void StingConcealedLastsUntilNextRegroup() throws DecisionResultInvalidException, CardNotFoundException {
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl sting = scn.GetFreepsCard("sting");
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
PhysicalCardImpl orc1 = scn.GetShadowCard("orc1");
scn.FreepsMoveCharToTable(sam);
scn.AttachCard(sting, frodo);
scn.ShadowMoveCardToHand(orc1);
scn.StartGame();
scn.SkipToPhase(Phase.REGROUP);
scn.FreepsUseCardAction(sting);
scn.FreepsChooseCard(frodo);
//Both players have revealed cards as an action to dismiss
scn.SkipCurrentPhaseActions();
scn.FreepsChooseCard(frodo);
assertTrue(scn.HasKeyword(frodo, Keyword.CONCEALED));
scn.ShadowSkipCurrentPhaseAction();
//Both players need to dismiss the card reveal dialog.
scn.FreepsSkipCurrentPhaseAction();
//shadow reconcile
scn.ShadowSkipCurrentPhaseAction();
scn.FreepsChooseToMove();
// 10 twilight - 1 orc in the hand = 9 twilight
assertEquals(9, scn.GetTwilight());
scn.FreepsUseCardAction(sting);
scn.FreepsSkipCurrentPhaseAction();
scn.ShadowSkipCurrentPhaseAction();
// 9 twilight - 1 orc in the hand = 8 twilight
assertEquals(8, scn.GetTwilight());
scn.FreepsUseCardAction(sting);
scn.FreepsSkipCurrentPhaseAction();
scn.ShadowSkipCurrentPhaseAction();
// limit of 2 should have been hit, so no twilight should be removed
assertEquals(8, scn.GetTwilight());
assertTrue(scn.HasKeyword(frodo, Keyword.CONCEALED));
}
}

View File

@@ -3,9 +3,11 @@ package com.gempukku.lotro.cards.unofficial.pc.errata.set1;
import com.gempukku.lotro.cards.GenericCardTestHelper;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Zone;
import com.gempukku.lotro.game.CardNotFoundException;
import com.gempukku.lotro.game.PhysicalCardImpl;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import junit.framework.Assert;
import org.junit.Test;
import java.util.HashMap;
@@ -22,7 +24,8 @@ public class TalentForNBSErrataTests
{{
put("talent", "51_316");
put("sam", "1_311");
put("gaffer", "1_291");
put("merry", "1_302");
put("pippin", "1_307");
put("boromir", "1_97");
}}
);
@@ -38,92 +41,73 @@ public class TalentForNBSErrataTests
assertTrue(scn.HasKeyword(talent, Keyword.STEALTH));
}
@Test
public void TalentExertsAHobbitOnPlay() throws DecisionResultInvalidException, CardNotFoundException {
public void TalentOnlyPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
PhysicalCardImpl gaffer = scn.GetFreepsCard("gaffer");
PhysicalCardImpl boromir = scn.GetFreepsCard("boromir");
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl pippin = scn.GetFreepsCard("pippin");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCharToTable(sam, gaffer, boromir);
scn.FreepsMoveCharToTable(sam);
scn.FreepsMoveCharToTable(merry);
scn.FreepsMoveCharToTable(pippin);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.FreepsPlayCard(talent);
//Frodo, Sam, Gaffer, but not Boromir
assertEquals(3, scn.FreepsCardChoiceCount());
scn.FreepsChooseCard(frodo);
assertEquals(1, scn.GetWoundsOn(frodo));
//There are 4 companions in play, but only 2 valid targets
assertEquals(2, scn.FreepsGetADParamAsList("cardId").size());
}
@Test
public void TalentAbilityTriggersConcealedOnMove() throws DecisionResultInvalidException, CardNotFoundException {
public void TalentReducesTwilightIfOnlyHobbits() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
PhysicalCardImpl gaffer = scn.GetFreepsCard("gaffer");
PhysicalCardImpl boromir = scn.GetFreepsCard("boromir");
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCharToTable(sam, gaffer, boromir);
scn.FreepsMoveCharToTable(merry);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.FreepsPlayCard(talent);
scn.FreepsChooseCard(frodo);
scn.FreepsSkipCurrentPhaseAction();
//Sam and Frodo, but not Gaffer or Boromir
assertEquals(2, scn.FreepsCardChoiceCount());
scn.FreepsChooseCard(frodo);
assertTrue(scn.HasKeyword(frodo, Keyword.CONCEALED));
scn.SkipToPhase(Phase.REGROUP);
scn.SkipCurrentPhaseActions();
scn.FreepsChooseToMove();
//Sam and Frodo, but not Gaffer or Boromir
assertEquals(2, scn.FreepsCardChoiceCount());
scn.FreepsChooseCard(sam);
assertEquals(Phase.SHADOW, scn.GetCurrentPhase());
assertFalse(scn.HasKeyword(frodo, Keyword.CONCEALED));
assertTrue(scn.HasKeyword(sam, Keyword.CONCEALED));
// 2 for Frodo/Merry, 1 for the site, -1 for Talent
assertEquals(2, scn.GetTwilight());
}
@Test
public void TalentOnlyTriggersWithTwoHobbitCompanions() throws DecisionResultInvalidException, CardNotFoundException {
public void TalentDoesNotReduceIfNonHobbitCompanions() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetScenario();
PhysicalCardImpl frodo = scn.GetRingBearer();
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
PhysicalCardImpl gaffer = scn.GetFreepsCard("gaffer");
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
PhysicalCardImpl boromir = scn.GetFreepsCard("boromir");
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
scn.FreepsMoveCharToTable(gaffer, boromir);
scn.FreepsMoveCharToTable(merry, boromir);
scn.FreepsMoveCardToHand(talent);
scn.StartGame();
scn.FreepsPlayCard(talent);
scn.FreepsChooseCard(frodo);
scn.FreepsSkipCurrentPhaseAction();
//neither gaffer nor boromir should permit the move trigger to choose a companion
assertEquals(Phase.SHADOW, scn.GetCurrentPhase());
assertFalse(scn.HasKeyword(frodo, Keyword.CONCEALED));
// 3 for Frodo/Merry/Boromir, 1 for the site, Talent does not trigger
assertEquals(4, scn.GetTwilight());
}

View File

@@ -129,5 +129,8 @@ public class FlamingBrandErrataTests
scn.FreepsUseCardAction(brand);
assertEquals(11, scn.GetStrength(aragorn));
assertTrue(scn.HasKeyword(aragorn, Keyword.DAMAGE));
//Brand is discarded
assertFalse(scn.IsAttachedTo(brand, aragorn));
}
}

View File

@@ -26,7 +26,6 @@ public class HornOfBoromirErrataTests
put("aragorn", "1_89");
put("runner1", "1_178");
put("runner2", "1_178");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
@@ -44,7 +43,6 @@ public class HornOfBoromirErrataTests
put("aragorn", "1_89");
put("runner1", "1_178");
put("runner2", "1_178");
}}
);
}
@@ -76,7 +74,7 @@ public class HornOfBoromirErrataTests
}
@Test
public void AbilityExertsAndBoromirAndAllyToSkirmish() throws DecisionResultInvalidException, CardNotFoundException {
public void AbilityExertsAndDiscardsToPermitAllyToSkirmish() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
GenericCardTestHelper scn = GetFOTRScenario();
@@ -84,14 +82,12 @@ public class HornOfBoromirErrataTests
PhysicalCardImpl boromir = scn.GetFreepsCard("boromir");
PhysicalCardImpl horn = scn.GetFreepsCard("horn");
PhysicalCardImpl runner1 = scn.GetShadowCard("runner1");
PhysicalCardImpl runner2 = scn.GetShadowCard("runner2");
scn.FreepsMoveCharToTable(elrond);
scn.FreepsMoveCharToTable(boromir);
scn.FreepsMoveCardToHand(horn);
scn.ShadowMoveCharToTable(runner1);
scn.ShadowMoveCharToTable(runner2);
scn.StartGame();
@@ -101,16 +97,16 @@ public class HornOfBoromirErrataTests
assertTrue(scn.FreepsCardActionAvailable(horn));
scn.FreepsUseCardAction(horn);
//discards
assertFalse(scn.IsAttachedTo(horn, boromir));
assertEquals(1, scn.GetWoundsOn(boromir));
assertEquals(1, scn.GetWoundsOn(elrond));
//Base version pumps strength, ensure that's not the case here.
assertEquals(8, scn.GetStrength(elrond));
assertEquals(11, scn.GetStrength(elrond));
scn.SkipToPhase(Phase.ASSIGNMENT);
scn.SkipCurrentPhaseActions();
scn.FreepsAssignToMinion(elrond, runner2);
scn.FreepsAssignToMinion(elrond, runner1);
assertTrue(scn.IsCharAssigned(elrond));
}

View File

@@ -65,7 +65,7 @@ public class Saruman_KoIErrataTests
assertEquals(0, scn.GetWoundsOn(uruk1));
assertEquals(1, scn.GetWoundsOn(saruman));
//Old version made them fierc, ensure that was removed
//Old version made them fierce, ensure that was removed
assertFalse(scn.HasKeyword(uruk1, Keyword.FIERCE));
//shadow has to skip archery actions