Hand of Sauron errata + tests

This commit is contained in:
Christian 'ketura' McCarty
2023-06-04 12:37:19 -05:00
parent 100ab94264
commit c838a950b6
2 changed files with 271 additions and 0 deletions

View File

@@ -249,6 +249,97 @@
} }
} }
73_90: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN03E090.2_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_90
//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: 2
collInfo: 3C90
rarity: C
setNum: "3"
cardNum: 90
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Hand of Sauron
unique: false
side: Shadow
culture: Sauron
twilight: 0
type: Event
keyword: Maneuver
requires: {
type: canSpot
filter: unique,culture(sauron),minion,not(exhausted)
}
effects: {
type: event
cost: {
type: exert
filter: choose(unique,culture(sauron),minion,not(exhausted))
},
effect: [
{
type: ChooseActiveCards
filter: choose(companion,not(ring-bearer))
memorize: chosenComp
text: Choose a companion (except the Ring-bearer) to exert and have a borne possession discarded.
}
{
type: ChooseActiveCards
filter: choose(possession,AttachedTo(memory(chosenComp)))
memorize: chosenPoss
text: Choose a possession attached to that companion to discard.
}
{
type: preventable
player: freeps
cost: {
type: DiscardCardAtRandomFromHand
hand: freeps
count: 1
forced: false
}
text: Discard a card at random from hand to prevent exerting {chosenComp} and discarding {chosenPoss}?
effect:[
{
type: Exert
filter: memory(chosenComp)
}
{
type: Discard
filter: memory(chosenPoss)
}
]
}
]
}
gametext: Exert a unique [sauron] minion to exert a companion (except the Ring-bearer) and discard a possession attached to that companion. The Free Peoples player may discard 1 card at random from their hand to prevent this.
lore: "'The power of the Ring could not be undone.'"
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_91: { 53_91: {
cardInfo: { cardInfo: {
//Either a full URL, or a subpath for the PC image server //Either a full URL, or a subpath for the PC image server

View File

@@ -0,0 +1,180 @@
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.*;
public class Card_03_090_ErrataTests
{
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
return new GenericCardTestHelper(
new HashMap<>()
{{
put("hand", "73_90");
put("aragorn", "1_89");
put("anduril", "7_79");
put("pipe", "1_91");
put("bow", "1_90");
put("warden", "1_259");
put("orc", "1_266");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
GenericCardTestHelper.FOTRRing
);
}
@Test
public void HandofSauronStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
/**
* Set: 3
* Title: Hand of Sauron
* Unique: False
* Side: SHADOW
* Culture: Sauron
* Twilight Cost: 0
* Type: event
* Subtype: Maneuver
* Game Text: Exert a unique [sauron] minion to exert a companion (except the Ring-bearer) and discard a possession attached to that companion. The Free Peoples player may discard 1 hand at random from their hand to prevent this.
*/
//Pre-game setup
var scn = GetScenario();
var hand = scn.GetFreepsCard("hand");
assertFalse(hand.getBlueprint().isUnique());
assertEquals(Side.SHADOW, hand.getBlueprint().getSide());
assertEquals(Culture.SAURON, hand.getBlueprint().getCulture());
assertEquals(CardType.EVENT, hand.getBlueprint().getCardType());
assertTrue(scn.HasKeyword(hand, Keyword.MANEUVER));
assertEquals(0, hand.getBlueprint().getTwilightCost());
}
@Test
public void HandWorksIfNotPrevented() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var aragorn = scn.GetFreepsCard("aragorn");
var anduril = scn.GetFreepsCard("anduril");
var bow = scn.GetFreepsCard("bow");
var pipe = scn.GetFreepsCard("pipe");
scn.FreepsMoveCharToTable(aragorn);
scn.AttachCardsTo(aragorn, anduril, bow, pipe);
scn.FreepsMoveCardToHand("warden", "orc");
var hand = scn.GetShadowCard("hand");
var warden = scn.GetShadowCard("warden");
var orc = scn.GetShadowCard("orc");
scn.ShadowMoveCardToHand(hand);
scn.ShadowMoveCharToTable(warden, orc);
scn.StartGame();
scn.SkipToPhase(Phase.MANEUVER);
scn.FreepsPassCurrentPhaseAction();
assertTrue(scn.ShadowPlayAvailable(hand));
assertEquals(0, scn.GetWoundsOn(warden));
assertEquals(0, scn.GetWoundsOn(orc));
assertEquals(0, scn.GetWoundsOn(aragorn));
assertEquals(Zone.ATTACHED, anduril.getZone());
assertSame(aragorn, anduril.getAttachedTo());
assertEquals(Zone.ATTACHED, bow.getZone());
assertSame(aragorn, bow.getAttachedTo());
assertEquals(Zone.ATTACHED, pipe.getZone());
assertSame(aragorn, pipe.getAttachedTo());
assertEquals(2, scn.GetFreepsHandCount());
assertEquals(0, scn.GetFreepsDiscardCount());
scn.ShadowPlayCard(hand);
assertEquals(1, scn.GetWoundsOn(warden));
assertEquals(0, scn.GetWoundsOn(orc));
//aragorn automatically chosen as the only non-RB companion to target
assertTrue(scn.ShadowDecisionAvailable("Choose a possession attached to that companion to discard"));
assertEquals(2, scn.GetShadowCardChoiceCount());
scn.ShadowChooseCard(bow);
//Freeps given option to prevent
assertTrue(scn.FreepsDecisionAvailable("Discard a card at random from hand to prevent exerting"));
scn.FreepsChooseNo();
assertEquals(1, scn.GetWoundsOn(aragorn));
assertEquals(Zone.ATTACHED, anduril.getZone());
assertSame(aragorn, anduril.getAttachedTo());
assertEquals(Zone.DISCARD, bow.getZone());
assertEquals(Zone.ATTACHED, pipe.getZone());
assertSame(aragorn, pipe.getAttachedTo());
assertEquals(2, scn.GetFreepsHandCount());
assertEquals(1, scn.GetFreepsDiscardCount());
}
@Test
public void HandCanBePreventedByFreepsDiscardingFromHandAtRandom() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var aragorn = scn.GetFreepsCard("aragorn");
var anduril = scn.GetFreepsCard("anduril");
var bow = scn.GetFreepsCard("bow");
var pipe = scn.GetFreepsCard("pipe");
scn.FreepsMoveCharToTable(aragorn);
scn.AttachCardsTo(aragorn, anduril, bow, pipe);
scn.FreepsMoveCardToHand("warden", "orc");
var hand = scn.GetShadowCard("hand");
var warden = scn.GetShadowCard("warden");
var orc = scn.GetShadowCard("orc");
scn.ShadowMoveCardToHand(hand);
scn.ShadowMoveCharToTable(warden, orc);
scn.StartGame();
scn.SkipToPhase(Phase.MANEUVER);
scn.FreepsPassCurrentPhaseAction();
assertTrue(scn.ShadowPlayAvailable(hand));
assertEquals(0, scn.GetWoundsOn(warden));
assertEquals(0, scn.GetWoundsOn(orc));
assertEquals(0, scn.GetWoundsOn(aragorn));
assertEquals(Zone.ATTACHED, anduril.getZone());
assertSame(aragorn, anduril.getAttachedTo());
assertEquals(Zone.ATTACHED, bow.getZone());
assertSame(aragorn, bow.getAttachedTo());
assertEquals(Zone.ATTACHED, pipe.getZone());
assertSame(aragorn, pipe.getAttachedTo());
assertEquals(2, scn.GetFreepsHandCount());
assertEquals(0, scn.GetFreepsDiscardCount());
scn.ShadowPlayCard(hand);
assertEquals(1, scn.GetWoundsOn(warden));
assertEquals(0, scn.GetWoundsOn(orc));
//aragorn automatically chosen as the only non-RB companion to target
assertTrue(scn.ShadowDecisionAvailable("Choose a possession attached to that companion to discard"));
assertEquals(2, scn.GetShadowCardChoiceCount());
scn.ShadowChooseCard(bow);
//Freeps given option to prevent
assertTrue(scn.FreepsDecisionAvailable("Discard a card at random from hand to prevent exerting"));
scn.FreepsChooseYes();
assertEquals(0, scn.GetWoundsOn(aragorn));
assertEquals(Zone.ATTACHED, anduril.getZone());
assertSame(aragorn, anduril.getAttachedTo());
assertEquals(Zone.ATTACHED, bow.getZone());
assertSame(aragorn, bow.getAttachedTo());
assertEquals(Zone.ATTACHED, pipe.getZone());
assertSame(aragorn, pipe.getAttachedTo());
assertEquals(1, scn.GetFreepsHandCount());
assertEquals(1, scn.GetFreepsDiscardCount());
}
}