diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Elven-errata.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Elven-errata.hjson index df540b170..59b0a3033 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Elven-errata.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Elven-errata.hjson @@ -1,5 +1,91 @@ { + 73_13: { + cardInfo: { + //Either a full URL, or a subpath for the PC image server + imagePath: errata/LOTR-EN03S013.1_card.jpg + //If this is true, then all gameplay-related info outside this cardInfo definition + // will be ignored and the java class loaded instead. + javaClass: false + //This instructs the blueprint generator to insert this card as an alt of the listed + // parent blueprint. Can of course be ommitted if not an errata or promo. + parent: 3_13 + //This is the tree path to use within the alts structure on the parent. + // Can of course be ommitted if parent is null. + parentPath: errata/pc + //Versioning differentiates releases within a particular alt path, such as PC errata + // version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2. + //Top-level cards should always be version 0. + version: 1 + collInfo: 3R13 + rarity: R + setNum: "3" + cardNum: 13 + // Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard. + style: Standard + } + title: Elrond + subtitle: Herald to Gil-galad + unique: true + side: Free Peoples + culture: Elven + twilight: 4 + type: Ally + allyHome: fellowship,3 + race: Elf + strength: 8 + vitality: 4 + + effects: [ + { + type: Trigger + text: Would you like to add (2) to heal a home 3 ally twice? + optional: true, + trigger: { + type: StartOfTurn + }, + effect: { + type: CostToEffect + cost: { + type: AddTwilight + amount: 2 + } + effect: { + type: heal + count: 1 + times: 2 + filter: choose(ally,allyHome(fellowship,3)) + } + } + } + { + type: Activated + phase: regroup + cost: { + type: exert + times: 2 + filter: self + } + effect: { + type: heal + count: 1 + filter: choose(companion) + } + } + ] + gametext: At the start of each of your turns, you may add (2) to spot an ally whose home site is 3 and heal that ally twice.
Regroup: Exert Elrond twice to heal a companion. + lore: “Venerable he seemed as a king crowned with many winters, and yet hale as a tried warrior....” + promotext: "" + alts: { + //These are just CardInfo objects + promos: { + } + //These are full card definitions, with redundant info that is the same as the original card ommitted + errata: { + } + } + } + 53_17: { cardInfo: { //Either a full URL, or a subpath for the PC image server diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_013_ErrataTests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_013_ErrataTests.java new file mode 100644 index 000000000..1cc492718 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_013_ErrataTests.java @@ -0,0 +1,105 @@ +package com.gempukku.lotro.cards.unofficial.pc.errata.set03; + +import com.gempukku.lotro.cards.GenericCardTestHelper; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import org.junit.Test; + +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class Card_03_013_ErrataTests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("elrond", "73_13"); + // put other cards in here as needed for the test case + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void ElrondStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 3 + * Title: Elrond, Herald to Gil-galad + * Unique: True + * Side: FREE_PEOPLE + * Culture: Elven + * Twilight Cost: 4 + * Type: ally + * Subtype: Elf + * Strength: 8 + * Vitality: 4 + * Site Number: 3 + * Game Text: At the start of each of your turns, you may add (2) to spot an ally whose home site is 3 and heal that ally twice. + * Regroup: Exert Elrond twice to heal a companion. + */ + + //Pre-game setup + var scn = GetScenario(); + + var elrond = scn.GetFreepsCard("elrond"); + + assertTrue(elrond.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, elrond.getBlueprint().getSide()); + assertEquals(Culture.ELVEN, elrond.getBlueprint().getCulture()); + assertEquals(CardType.ALLY, elrond.getBlueprint().getCardType()); + assertEquals(Race.ELF, elrond.getBlueprint().getRace()); + assertEquals(4, elrond.getBlueprint().getTwilightCost()); + assertEquals(8, elrond.getBlueprint().getStrength()); + assertEquals(4, elrond.getBlueprint().getVitality()); + assertEquals(3, elrond.getBlueprint().getAllyHomeSiteNumbers()[0]); + } + + @Test + public void AtTheStartOfTurnAdds2toHealAHome3AllyTwice() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var elrond = scn.GetFreepsCard("elrond"); + scn.FreepsMoveCharToTable(elrond); + + scn.StartGame(); + scn.AddWoundsToChar(elrond, 3); + assertEquals(0, scn.GetTwilight()); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + + assertEquals(2, scn.GetTwilight()); + assertEquals(1, scn.GetWoundsOn(elrond)); + } + + @Test + public void RegroupActionExertsElrondTwiceToHealCompanionOnce() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var frodo = scn.GetRingBearer(); + var elrond = scn.GetFreepsCard("elrond"); + scn.FreepsMoveCharToTable(elrond); + + scn.StartGame(); + scn.FreepsDeclineOptionalTrigger(); + scn.AddWoundsToChar(frodo, 3); + + scn.SkipToPhase(Phase.REGROUP); + + assertEquals(0, scn.GetWoundsOn(elrond)); + assertEquals(3, scn.GetWoundsOn(frodo)); + assertTrue(scn.FreepsActionAvailable(elrond)); + scn.FreepsUseCardAction(elrond); + assertEquals(2, scn.GetWoundsOn(elrond)); + assertEquals(2, scn.GetWoundsOn(frodo)); + } +}