Fixing Shoulder to Shoulder not having its effect blocked by Final Strike. This necessitated reorganizing STS to cut out the popup. Also restructured STS errata to mimic the same structure. Also fixing Talent tests.
This commit is contained in:
@@ -832,47 +832,44 @@
|
||||
effects: {
|
||||
type: activated
|
||||
phase: maneuver
|
||||
effect: {
|
||||
type: choice
|
||||
texts: [
|
||||
Exert a Dwarf to heal an Elf
|
||||
Exert an Elf to heal a Dwarf
|
||||
]
|
||||
effects: [
|
||||
{
|
||||
type: costToEffect
|
||||
cost: [
|
||||
{
|
||||
type: addTwilight
|
||||
}
|
||||
{
|
||||
type: exert
|
||||
filter: choose(dwarf)
|
||||
}
|
||||
]
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(elf)
|
||||
}
|
||||
text: Add (1) and either exert an Elf to heal a Dwarf, or exert a Dwarf to heal an Elf.
|
||||
cost: [
|
||||
{
|
||||
type: addTwilight
|
||||
amount: 1
|
||||
}
|
||||
{
|
||||
type: exert
|
||||
filter: choose(or(dwarf,elf))
|
||||
memorize: exerter
|
||||
}
|
||||
]
|
||||
effect: [
|
||||
{
|
||||
type: conditional
|
||||
requires: {
|
||||
type: MemoryMatches
|
||||
memory: exerter
|
||||
filter: dwarf
|
||||
}
|
||||
{
|
||||
type: costToEffect
|
||||
cost: [
|
||||
{
|
||||
type: addTwilight
|
||||
}
|
||||
{
|
||||
type: exert
|
||||
filter: choose(elf)
|
||||
}
|
||||
]
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(dwarf)
|
||||
}
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(elf)
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
type: conditional
|
||||
requires: {
|
||||
type: MemoryMatches
|
||||
memory: exerter
|
||||
filter: elf
|
||||
}
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(dwarf)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
1_60: {
|
||||
|
||||
@@ -579,47 +579,44 @@
|
||||
effects: {
|
||||
type: activated
|
||||
phase: fellowship
|
||||
effect: {
|
||||
type: choice
|
||||
texts: [
|
||||
Exert a Dwarf to heal an Elf
|
||||
Exert an Elf to heal a Dwarf
|
||||
]
|
||||
effects: [
|
||||
{
|
||||
type: costToEffect
|
||||
cost: [
|
||||
{
|
||||
type: addTwilight
|
||||
}
|
||||
{
|
||||
type: exert
|
||||
filter: choose(dwarf)
|
||||
}
|
||||
]
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(elf)
|
||||
}
|
||||
text: Add (1) and either exert an Elf to heal a Dwarf, or exert a Dwarf to heal an Elf.
|
||||
cost: [
|
||||
{
|
||||
type: addTwilight
|
||||
amount: 1
|
||||
}
|
||||
{
|
||||
type: exert
|
||||
filter: choose(or(dwarf,elf))
|
||||
memorize: exerter
|
||||
}
|
||||
]
|
||||
effect: [
|
||||
{
|
||||
type: conditional
|
||||
requires: {
|
||||
type: MemoryMatches
|
||||
memory: exerter
|
||||
filter: dwarf
|
||||
}
|
||||
{
|
||||
type: costToEffect
|
||||
cost: [
|
||||
{
|
||||
type: addTwilight
|
||||
}
|
||||
{
|
||||
type: exert
|
||||
filter: choose(elf)
|
||||
}
|
||||
]
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(dwarf)
|
||||
}
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(elf)
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
type: conditional
|
||||
requires: {
|
||||
type: MemoryMatches
|
||||
memory: exerter
|
||||
filter: elf
|
||||
}
|
||||
effect: {
|
||||
type: heal
|
||||
filter: choose(dwarf)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
gametext: <b>Fellowship:</b> Add (1) and exert a Dwarf to heal an Elf, or add (1) and exert an Elf to heal a Dwarf.
|
||||
lore: “‘May it be a sign that though the world is now dark better days are at hand, and that friendship shall be renewed between our peoples.'”
|
||||
|
||||
@@ -267,11 +267,11 @@ public class LotroGameMediator {
|
||||
|
||||
if (_lotroGame != null && _lotroGame.getWinnerPlayerId() == null) {
|
||||
for (Map.Entry<String, Long> playerDecision : new HashMap<>(_decisionQuerySentTimes).entrySet()) {
|
||||
String playerId = playerDecision.getKey();
|
||||
String player = playerDecision.getKey();
|
||||
long decisionSent = playerDecision.getValue();
|
||||
if (currentTime > decisionSent + _timeSettings.maxSecondsPerDecision() * 1000L) {
|
||||
addTimeSpentOnDecisionToUserClock(playerId);
|
||||
_lotroGame.playerLost(playerId, "Player decision timed-out");
|
||||
addTimeSpentOnDecisionToUserClock(player);
|
||||
_lotroGame.playerLost(player, "Player decision timed-out");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
package com.gempukku.lotro.cards.official.set01;
|
||||
|
||||
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_01_059_Tests
|
||||
{
|
||||
|
||||
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>()
|
||||
{{
|
||||
put("sts", "1_59");
|
||||
put("legolas", "1_50");
|
||||
put("gimli", "1_13");
|
||||
put("rumil", "1_57");
|
||||
put("grimir", "1_17");
|
||||
|
||||
put("runner", "1_178");
|
||||
|
||||
put("finalstrike", "10_20");
|
||||
put("gollum", "5_24");
|
||||
}},
|
||||
GenericCardTestHelper.FellowshipSites,
|
||||
GenericCardTestHelper.FOTRFrodo,
|
||||
GenericCardTestHelper.FOTRRing
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ShouldertoShoulderStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
|
||||
/**
|
||||
* Set: 1
|
||||
* Title: Shoulder to Shoulder
|
||||
* Unique: False
|
||||
* Side: FREE_PEOPLE
|
||||
* Culture: Elven
|
||||
* Twilight Cost: 1
|
||||
* Type: condition
|
||||
* Subtype: Support Area
|
||||
* Game Text: <b>Fellowship:</b> Add (1) and exert a Dwarf to heal an Elf, or add (1) and exert an Elf to heal a Dwarf.
|
||||
*/
|
||||
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var sts = scn.GetFreepsCard("sts");
|
||||
|
||||
assertFalse(sts.getBlueprint().isUnique());
|
||||
assertEquals(Side.FREE_PEOPLE, sts.getBlueprint().getSide());
|
||||
assertEquals(Culture.ELVEN, sts.getBlueprint().getCulture());
|
||||
assertEquals(CardType.CONDITION, sts.getBlueprint().getCardType());
|
||||
assertTrue(scn.HasKeyword(sts, Keyword.SUPPORT_AREA));
|
||||
assertEquals(1, sts.getBlueprint().getTwilightCost());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ManeuverActionWorksOnDwarves() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var sts = scn.GetFreepsCard("sts");
|
||||
var legolas = scn.GetFreepsCard("legolas");
|
||||
var gimli = scn.GetFreepsCard("gimli");
|
||||
var rumil = scn.GetFreepsCard("rumil");
|
||||
var grimir = scn.GetFreepsCard("grimir");
|
||||
scn.FreepsMoveCharToTable(legolas, gimli);
|
||||
scn.FreepsMoveCardToSupportArea(rumil, grimir, sts);
|
||||
|
||||
scn.ShadowMoveCharToTable("runner");
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
scn.SkipToPhase(Phase.MANEUVER);
|
||||
scn.SetTwilight(0);
|
||||
|
||||
scn.AddWoundsToChar(legolas, 1);
|
||||
scn.AddWoundsToChar(gimli, 1);
|
||||
scn.AddWoundsToChar(rumil, 1);
|
||||
scn.AddWoundsToChar(grimir, 1);
|
||||
|
||||
assertEquals(0, scn.GetTwilight());
|
||||
assertEquals(1, scn.GetWoundsOn(legolas));
|
||||
assertEquals(1, scn.GetWoundsOn(gimli));
|
||||
assertEquals(1, scn.GetWoundsOn(rumil));
|
||||
assertEquals(1, scn.GetWoundsOn(grimir));
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
|
||||
scn.FreepsChooseAction("Exert a Dwarf");
|
||||
|
||||
assertEquals(4, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(gimli);
|
||||
scn.FreepsChooseCard(rumil);
|
||||
assertEquals(1, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(gimli));
|
||||
assertEquals(0, scn.GetWoundsOn(rumil));
|
||||
|
||||
scn.ShadowPassCurrentPhaseAction();
|
||||
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
|
||||
scn.FreepsChooseAction("Exert a Dwarf");
|
||||
|
||||
//Legolas, Rumil, and Grimir
|
||||
assertEquals(3, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(grimir);
|
||||
assertEquals(2, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(grimir));
|
||||
assertEquals(0, scn.GetWoundsOn(legolas));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ManeuverActionWorksOnElves() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var sts = scn.GetFreepsCard("sts");
|
||||
var legolas = scn.GetFreepsCard("legolas");
|
||||
var gimli = scn.GetFreepsCard("gimli");
|
||||
var rumil = scn.GetFreepsCard("rumil");
|
||||
var grimir = scn.GetFreepsCard("grimir");
|
||||
scn.FreepsMoveCharToTable(legolas, gimli);
|
||||
scn.FreepsMoveCardToSupportArea(rumil, grimir, sts);
|
||||
|
||||
scn.ShadowMoveCharToTable("runner");
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
scn.SkipToPhase(Phase.MANEUVER);
|
||||
scn.SetTwilight(0);
|
||||
|
||||
scn.AddWoundsToChar(legolas, 1);
|
||||
scn.AddWoundsToChar(gimli, 1);
|
||||
scn.AddWoundsToChar(rumil, 1);
|
||||
scn.AddWoundsToChar(grimir, 1);
|
||||
|
||||
assertEquals(0, scn.GetTwilight());
|
||||
assertEquals(1, scn.GetWoundsOn(legolas));
|
||||
assertEquals(1, scn.GetWoundsOn(gimli));
|
||||
assertEquals(1, scn.GetWoundsOn(rumil));
|
||||
assertEquals(1, scn.GetWoundsOn(grimir));
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
|
||||
scn.FreepsChooseAction("Exert an Elf");
|
||||
|
||||
//Initially either dwarves or elves can be selected
|
||||
assertEquals(4, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(legolas);
|
||||
|
||||
//Once an Elf has been selected, only Dwarves can be selected as a target
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(gimli);
|
||||
assertEquals(1, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(legolas));
|
||||
assertEquals(0, scn.GetWoundsOn(gimli));
|
||||
|
||||
scn.ShadowPassCurrentPhaseAction();
|
||||
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
|
||||
scn.FreepsChooseAction("Exert an Elf");
|
||||
|
||||
scn.FreepsChooseCard(rumil);
|
||||
assertEquals(2, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(rumil));
|
||||
assertEquals(0, scn.GetWoundsOn(grimir));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void STSIsProperlyBlockedByFinalStrike() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var sts = scn.GetFreepsCard("sts");
|
||||
var legolas = scn.GetFreepsCard("legolas");
|
||||
var gimli = scn.GetFreepsCard("gimli");
|
||||
scn.FreepsMoveCharToTable(legolas, gimli);
|
||||
scn.FreepsMoveCardToSupportArea(sts);
|
||||
|
||||
var gollum = scn.GetShadowCard("gollum");
|
||||
var finalstrike = scn.GetShadowCard("finalstrike");
|
||||
scn.ShadowMoveCardToSupportArea(finalstrike);
|
||||
scn.ShadowMoveCharToTable(gollum);
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
scn.SkipToPhase(Phase.MANEUVER);
|
||||
scn.SetTwilight(0);
|
||||
|
||||
scn.AddWoundsToChar(legolas, 1);
|
||||
|
||||
assertEquals(0, scn.GetTwilight());
|
||||
assertEquals(1, scn.GetWoundsOn(legolas));
|
||||
assertEquals(0, scn.GetWoundsOn(gimli));
|
||||
assertEquals(0, scn.GetWoundsOn(gollum));
|
||||
|
||||
scn.FreepsChooseAction("Exert a Dwarf");
|
||||
scn.FreepsChooseCard(gimli);
|
||||
|
||||
assertTrue(scn.ShadowHasOptionalTriggerAvailable());
|
||||
scn.ShadowAcceptOptionalTrigger();
|
||||
|
||||
//Final Strike is a "Response:" action, so it can technically be repeated (for some reason)
|
||||
scn.ShadowDeclineOptionalTrigger();
|
||||
|
||||
assertTrue(scn.ShadowDecisionAvailable("Maneuver action"));
|
||||
|
||||
// The costs of STS should have still been paid, meaning that Gimli should have exerted
|
||||
// and the twilight been added, but the effect (healing Legolas) should have been blocked
|
||||
assertEquals(1, scn.GetTwilight());
|
||||
assertEquals(1, scn.GetWoundsOn(legolas));
|
||||
assertEquals(1, scn.GetWoundsOn(gimli));
|
||||
assertEquals(1, scn.GetWoundsOn(gollum));
|
||||
}
|
||||
}
|
||||
@@ -85,25 +85,21 @@ public class Card_01_059_ErrataTests
|
||||
assertEquals(1, scn.GetWoundsOn(rumil));
|
||||
assertEquals(1, scn.GetWoundsOn(grimir));
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable(sts));
|
||||
scn.FreepsUseCardAction(sts);
|
||||
assertEquals(2, scn.FreepsGetMultipleChoices().size());
|
||||
scn.FreepsChooseMultipleChoiceOption("Exert a Dwarf to heal an Elf");
|
||||
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
|
||||
scn.FreepsChooseAction("Exert a Dwarf");
|
||||
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
assertEquals(4, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(gimli);
|
||||
scn.FreepsChooseCard(rumil);
|
||||
assertEquals(1, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(gimli));
|
||||
assertEquals(0, scn.GetWoundsOn(rumil));
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable(sts));
|
||||
scn.FreepsUseCardAction(sts);
|
||||
assertEquals(2, scn.FreepsGetMultipleChoices().size());
|
||||
scn.FreepsChooseMultipleChoiceOption("Exert a Dwarf to heal an Elf");
|
||||
assertTrue(scn.FreepsActionAvailable("Exert a Dwarf"));
|
||||
scn.FreepsChooseAction("Exert a Dwarf");
|
||||
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
//only one choice of each left
|
||||
assertEquals(3, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(grimir);
|
||||
assertEquals(2, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(grimir));
|
||||
assertEquals(0, scn.GetWoundsOn(legolas));
|
||||
@@ -135,25 +131,21 @@ public class Card_01_059_ErrataTests
|
||||
assertEquals(1, scn.GetWoundsOn(rumil));
|
||||
assertEquals(1, scn.GetWoundsOn(grimir));
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable(sts));
|
||||
scn.FreepsUseCardAction(sts);
|
||||
assertEquals(2, scn.FreepsGetMultipleChoices().size());
|
||||
scn.FreepsChooseMultipleChoiceOption("Exert an Elf to heal a Dwarf");
|
||||
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
|
||||
scn.FreepsChooseAction("Exert an Elf");
|
||||
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
assertEquals(4, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(legolas);
|
||||
scn.FreepsChooseCard(gimli);
|
||||
assertEquals(1, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(legolas));
|
||||
assertEquals(0, scn.GetWoundsOn(gimli));
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable(sts));
|
||||
scn.FreepsUseCardAction(sts);
|
||||
assertEquals(2, scn.FreepsGetMultipleChoices().size());
|
||||
scn.FreepsChooseMultipleChoiceOption("Exert an Elf to heal a Dwarf");
|
||||
assertTrue(scn.FreepsActionAvailable("Exert an Elf"));
|
||||
scn.FreepsChooseAction("Exert an Elf");
|
||||
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
//only one choice of each left
|
||||
assertEquals(3, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(rumil);
|
||||
assertEquals(2, scn.GetTwilight());
|
||||
assertEquals(2, scn.GetWoundsOn(rumil));
|
||||
assertEquals(0, scn.GetWoundsOn(grimir));
|
||||
|
||||
@@ -1,124 +1,108 @@
|
||||
package com.gempukku.lotro.cards.unofficial.pc.errata.set01;
|
||||
|
||||
import com.gempukku.lotro.cards.GenericCardTestHelper;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
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;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class Card_01_316_ErrataTests
|
||||
{
|
||||
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>() {{
|
||||
put("talent", "51_316");
|
||||
put("sam", "1_311");
|
||||
put("merry", "1_302");
|
||||
put("pippin", "1_307");
|
||||
put("boromir", "1_97");
|
||||
}}
|
||||
);
|
||||
}
|
||||
|
||||
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>()
|
||||
{{
|
||||
put("talent1", "71_316");
|
||||
put("talent2", "71_316");
|
||||
put("sam", "1_311");
|
||||
put("merry", "1_302");
|
||||
put("pippin", "1_306");
|
||||
}},
|
||||
GenericCardTestHelper.FellowshipSites,
|
||||
GenericCardTestHelper.FOTRFrodo,
|
||||
GenericCardTestHelper.FOTRRing
|
||||
);
|
||||
}
|
||||
@Test
|
||||
public void TalentStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
|
||||
@Test
|
||||
public void ATalentforNotBeingSeenStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
/**
|
||||
* Set: 1E
|
||||
* Title: A Talent for Not Being Seen
|
||||
* Side: Free Peoples
|
||||
* Culture: Shire
|
||||
* Twilight Cost: 0
|
||||
* Type: Condition
|
||||
* Errata Game Text: Stealth. Bearer must be Merry or Pippin. Limit 1 per character.
|
||||
* Each site's Shadow number is -1.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set: 1
|
||||
* Title: A Talent for Not Being Seen
|
||||
* Unique: True
|
||||
* Side: FREE_PEOPLE
|
||||
* Culture: Shire
|
||||
* Twilight Cost: 0
|
||||
* Type: condition
|
||||
* Subtype:
|
||||
* Game Text: <b>Stealth.</b> To play, exert Merry or Pippin. Bearer must be Merry or Pippin.
|
||||
* Each site's Shadow number is -1.
|
||||
*/
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
var talent = scn.GetFreepsCard("talent");
|
||||
|
||||
var card = scn.GetFreepsCard("talent1");
|
||||
assertFalse(talent.getBlueprint().isUnique());
|
||||
assertEquals(Side.FREE_PEOPLE, talent.getBlueprint().getSide());
|
||||
assertEquals(Culture.SHIRE, talent.getBlueprint().getCulture());
|
||||
assertEquals(CardType.CONDITION, talent.getBlueprint().getCardType());
|
||||
assertEquals(0, talent.getBlueprint().getTwilightCost());
|
||||
|
||||
assertFalse(card.getBlueprint().isUnique());
|
||||
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
|
||||
assertEquals(Culture.SHIRE, card.getBlueprint().getCulture());
|
||||
assertEquals(CardType.CONDITION, card.getBlueprint().getCardType());
|
||||
assertFalse(scn.HasKeyword(card, Keyword.SUPPORT_AREA));
|
||||
assertEquals(0, card.getBlueprint().getTwilightCost());
|
||||
}
|
||||
assertTrue(scn.HasKeyword(talent, Keyword.STEALTH));
|
||||
assertFalse(scn.HasKeyword(talent, Keyword.SUPPORT_AREA));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TalentExertsAndPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
@Test
|
||||
public void TalentOnlyPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
var frodo = scn.GetRingBearer();
|
||||
var sam = scn.GetFreepsCard("sam");
|
||||
var merry = scn.GetFreepsCard("merry");
|
||||
var pippin = scn.GetFreepsCard("pippin");
|
||||
var talent1 = scn.GetFreepsCard("talent1");
|
||||
var talent2 = scn.GetFreepsCard("talent2");
|
||||
PhysicalCardImpl frodo = scn.GetRingBearer();
|
||||
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
|
||||
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
|
||||
PhysicalCardImpl pippin = scn.GetFreepsCard("pippin");
|
||||
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
|
||||
|
||||
scn.FreepsMoveCardToHand(talent1,talent2, sam, merry, pippin);
|
||||
scn.FreepsMoveCharToTable(sam);
|
||||
scn.FreepsMoveCharToTable(merry);
|
||||
scn.FreepsMoveCharToTable(pippin);
|
||||
scn.FreepsMoveCardToHand(talent);
|
||||
|
||||
scn.StartGame();
|
||||
scn.StartGame();
|
||||
|
||||
assertFalse(scn.FreepsPlayAvailable(talent1));
|
||||
scn.FreepsPlayCard(sam);
|
||||
assertFalse(scn.FreepsPlayAvailable(talent1));
|
||||
scn.FreepsPlayCard(talent);
|
||||
|
||||
scn.FreepsPlayCard(merry);
|
||||
assertTrue(scn.FreepsPlayAvailable(talent1));
|
||||
assertEquals(0, scn.GetWoundsOn(merry));
|
||||
scn.FreepsPlayCard(talent1);
|
||||
assertEquals(1, scn.GetWoundsOn(merry));
|
||||
assertSame(merry, talent1.getAttachedTo());
|
||||
|
||||
scn.FreepsPlayCard(pippin);
|
||||
scn.FreepsPlayCard(talent2);
|
||||
|
||||
//There are 4 companions in play, but only 2 valid targets for the exert
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(merry);
|
||||
|
||||
//plays automatically on pippin, since merry is already bearing one
|
||||
assertEquals(2, scn.GetWoundsOn(merry));
|
||||
assertEquals(0, scn.GetWoundsOn(pippin));
|
||||
assertSame(pippin, talent2.getAttachedTo());
|
||||
}
|
||||
//There are 4 companions in play, but only 2 valid targets
|
||||
assertEquals(2, scn.FreepsGetADParamAsList("cardId").size());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void TalentReducesShadowBy1() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
@Test
|
||||
public void TalentReducesTwilightIfOnlyHobbits() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
var frodo = scn.GetRingBearer();
|
||||
var merry = scn.GetFreepsCard("merry");
|
||||
var talent1 = scn.GetFreepsCard("talent1");
|
||||
PhysicalCardImpl frodo = scn.GetRingBearer();
|
||||
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
|
||||
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
|
||||
|
||||
scn.FreepsMoveCharToTable(merry);
|
||||
scn.FreepsAttachCardsTo(merry, talent1);
|
||||
scn.FreepsMoveCharToTable(merry);
|
||||
scn.FreepsMoveCardToHand(talent);
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
scn.FreepsPlayCard(talent);
|
||||
scn.FreepsPassCurrentPhaseAction();
|
||||
|
||||
// 2 for Frodo/Merry, 1 for the site, -1 for Talent
|
||||
assertEquals(2, scn.GetTwilight());
|
||||
|
||||
}
|
||||
|
||||
scn.StartGame();
|
||||
scn.FreepsPassCurrentPhaseAction();
|
||||
|
||||
// 2 for Frodo/Merry, 2 for the site, -1 for Talent
|
||||
assertEquals(3, scn.GetTwilight());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
package com.gempukku.lotro.cards.unofficial.pc.errata.set01;
|
||||
|
||||
import com.gempukku.lotro.cards.GenericCardTestHelper;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
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_01_316_ErrataTests
|
||||
{
|
||||
|
||||
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>()
|
||||
{{
|
||||
put("talent1", "71_316");
|
||||
put("talent2", "71_316");
|
||||
put("sam", "1_311");
|
||||
put("merry", "1_302");
|
||||
put("pippin", "1_306");
|
||||
}},
|
||||
GenericCardTestHelper.FellowshipSites,
|
||||
GenericCardTestHelper.FOTRFrodo,
|
||||
GenericCardTestHelper.FOTRRing
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ATalentforNotBeingSeenStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
|
||||
/**
|
||||
* Set: 1
|
||||
* Title: A Talent for Not Being Seen
|
||||
* Unique: True
|
||||
* Side: FREE_PEOPLE
|
||||
* Culture: Shire
|
||||
* Twilight Cost: 0
|
||||
* Type: condition
|
||||
* Subtype:
|
||||
* Game Text: <b>Stealth.</b> To play, exert Merry or Pippin. Bearer must be Merry or Pippin.
|
||||
* Each site's Shadow number is -1.
|
||||
*/
|
||||
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var card = scn.GetFreepsCard("talent1");
|
||||
|
||||
assertFalse(card.getBlueprint().isUnique());
|
||||
assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide());
|
||||
assertEquals(Culture.SHIRE, card.getBlueprint().getCulture());
|
||||
assertEquals(CardType.CONDITION, card.getBlueprint().getCardType());
|
||||
assertFalse(scn.HasKeyword(card, Keyword.SUPPORT_AREA));
|
||||
assertEquals(0, card.getBlueprint().getTwilightCost());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TalentExertsAndPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
var frodo = scn.GetRingBearer();
|
||||
var sam = scn.GetFreepsCard("sam");
|
||||
var merry = scn.GetFreepsCard("merry");
|
||||
var pippin = scn.GetFreepsCard("pippin");
|
||||
var talent1 = scn.GetFreepsCard("talent1");
|
||||
var talent2 = scn.GetFreepsCard("talent2");
|
||||
|
||||
scn.FreepsMoveCardToHand(talent1,talent2, sam, merry, pippin);
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
assertFalse(scn.FreepsPlayAvailable(talent1));
|
||||
scn.FreepsPlayCard(sam);
|
||||
assertFalse(scn.FreepsPlayAvailable(talent1));
|
||||
|
||||
scn.FreepsPlayCard(merry);
|
||||
assertTrue(scn.FreepsPlayAvailable(talent1));
|
||||
assertEquals(0, scn.GetWoundsOn(merry));
|
||||
scn.FreepsPlayCard(talent1);
|
||||
assertEquals(1, scn.GetWoundsOn(merry));
|
||||
assertSame(merry, talent1.getAttachedTo());
|
||||
|
||||
scn.FreepsPlayCard(pippin);
|
||||
scn.FreepsPlayCard(talent2);
|
||||
|
||||
//There are 4 companions in play, but only 2 valid targets for the exert
|
||||
assertEquals(2, scn.GetFreepsCardChoiceCount());
|
||||
scn.FreepsChooseCard(merry);
|
||||
|
||||
//plays automatically on pippin, since merry is already bearing one
|
||||
assertEquals(2, scn.GetWoundsOn(merry));
|
||||
assertEquals(0, scn.GetWoundsOn(pippin));
|
||||
assertSame(pippin, talent2.getAttachedTo());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void TalentReducesShadowBy1() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
var frodo = scn.GetRingBearer();
|
||||
var merry = scn.GetFreepsCard("merry");
|
||||
var talent1 = scn.GetFreepsCard("talent1");
|
||||
|
||||
scn.FreepsMoveCharToTable(merry);
|
||||
scn.FreepsAttachCardsTo(merry, talent1);
|
||||
|
||||
scn.StartGame();
|
||||
scn.FreepsPassCurrentPhaseAction();
|
||||
|
||||
// 2 for Frodo/Merry, 2 for the site, -1 for Talent
|
||||
assertEquals(3, scn.GetTwilight());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,108 +0,0 @@
|
||||
package com.gempukku.lotro.cards.unofficial.pc.errata.set01;
|
||||
|
||||
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;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class Card_01_316_ErrataTests
|
||||
{
|
||||
protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException {
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>() {{
|
||||
put("talent", "51_316");
|
||||
put("sam", "1_311");
|
||||
put("merry", "1_302");
|
||||
put("pippin", "1_307");
|
||||
put("boromir", "1_97");
|
||||
}}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TalentStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
|
||||
/**
|
||||
* Set: 1E
|
||||
* Title: A Talent for Not Being Seen
|
||||
* Side: Free Peoples
|
||||
* Culture: Shire
|
||||
* Twilight Cost: 0
|
||||
* Type: Condition
|
||||
* Errata Game Text: Stealth. Bearer must be Merry or Pippin. Limit 1 per character.
|
||||
* Each site's Shadow number is -1.
|
||||
*/
|
||||
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
var talent = scn.GetFreepsCard("talent");
|
||||
|
||||
assertFalse(talent.getBlueprint().isUnique());
|
||||
assertEquals(Side.FREE_PEOPLE, talent.getBlueprint().getSide());
|
||||
assertEquals(Culture.SHIRE, talent.getBlueprint().getCulture());
|
||||
assertEquals(CardType.CONDITION, talent.getBlueprint().getCardType());
|
||||
assertEquals(0, talent.getBlueprint().getTwilightCost());
|
||||
|
||||
assertTrue(scn.HasKeyword(talent, Keyword.STEALTH));
|
||||
assertFalse(scn.HasKeyword(talent, Keyword.SUPPORT_AREA));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TalentOnlyPlaysOnMerryOrPippin() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
PhysicalCardImpl frodo = scn.GetRingBearer();
|
||||
PhysicalCardImpl sam = scn.GetFreepsCard("sam");
|
||||
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
|
||||
PhysicalCardImpl pippin = scn.GetFreepsCard("pippin");
|
||||
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
|
||||
|
||||
scn.FreepsMoveCharToTable(sam);
|
||||
scn.FreepsMoveCharToTable(merry);
|
||||
scn.FreepsMoveCharToTable(pippin);
|
||||
scn.FreepsMoveCardToHand(talent);
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
scn.FreepsPlayCard(talent);
|
||||
|
||||
//There are 4 companions in play, but only 2 valid targets
|
||||
assertEquals(2, scn.FreepsGetADParamAsList("cardId").size());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void TalentReducesTwilightIfOnlyHobbits() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
PhysicalCardImpl frodo = scn.GetRingBearer();
|
||||
PhysicalCardImpl merry = scn.GetFreepsCard("merry");
|
||||
PhysicalCardImpl talent = scn.GetFreepsCard("talent");
|
||||
|
||||
scn.FreepsMoveCharToTable(merry);
|
||||
scn.FreepsMoveCardToHand(talent);
|
||||
|
||||
scn.StartGame();
|
||||
|
||||
scn.FreepsPlayCard(talent);
|
||||
scn.FreepsPassCurrentPhaseAction();
|
||||
|
||||
// 2 for Frodo/Merry, 1 for the site, -1 for Talent
|
||||
assertEquals(2, scn.GetTwilight());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user