Merge pull request #678 from PlayersCouncil/bug/ketura-bugs
The Empire Strikes Bugs
This commit is contained in:
@@ -85,6 +85,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
@@ -143,6 +147,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
@@ -382,6 +390,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: exert
|
||||
select: choose(culture(gondor),man)
|
||||
|
||||
@@ -709,6 +709,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: maneuver
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
@@ -2055,6 +2059,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: maneuver
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
@@ -2113,6 +2121,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: exert
|
||||
select: choose(culture(gondor),man)
|
||||
@@ -2402,6 +2414,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
|
||||
@@ -241,6 +241,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
|
||||
@@ -645,43 +645,24 @@
|
||||
{
|
||||
type: Trigger
|
||||
optional: false
|
||||
trigger: [
|
||||
{
|
||||
type: MovesTo
|
||||
filter: self
|
||||
}
|
||||
{
|
||||
type: StartOfPhase
|
||||
phase: Fellowship
|
||||
}
|
||||
]
|
||||
trigger: {
|
||||
type: StartOfSkirmishInvolving
|
||||
filter: culture(rohan),companion
|
||||
}
|
||||
requires: {
|
||||
type: Location
|
||||
filter: self
|
||||
type: canSpot
|
||||
filter: minion,inSkirmishAgainst(culture(rohan),companion)
|
||||
}
|
||||
effect: {
|
||||
type: addTrigger
|
||||
trigger: {
|
||||
type: StartOfSkirmishInvolving
|
||||
filter: culture(rohan),companion
|
||||
}
|
||||
requires: {
|
||||
type: canSpot
|
||||
type: RemoveKeyword
|
||||
count: {
|
||||
type: ForEachYouCanSpot
|
||||
filter: minion,inSkirmishAgainst(culture(rohan),companion)
|
||||
}
|
||||
effect: {
|
||||
type: RemoveKeyword
|
||||
count: {
|
||||
type: ForEachYouCanSpot
|
||||
filter: minion,inSkirmishAgainst(culture(rohan),companion)
|
||||
}
|
||||
select: all(minion,inSkirmishAgainst(culture(rohan),companion))
|
||||
keyword: fierce
|
||||
until: regroup
|
||||
}
|
||||
select: all(minion,inSkirmishAgainst(culture(rohan),companion))
|
||||
keyword: fierce
|
||||
until: regroup
|
||||
}
|
||||
limitPerTurn: 1
|
||||
}
|
||||
]
|
||||
gametext: <b>Plains</b>. Until the regroup phase, each minion skirmishing a [rohan] companion loses <b>fierce</b> and cannot gain fierce.
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
amount: {
|
||||
type: forEachWound
|
||||
filter: character,inSkirmish
|
||||
multiplier: 2
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -458,17 +459,6 @@
|
||||
site: 4
|
||||
keywords: Lurker
|
||||
effects: [
|
||||
{
|
||||
type: modifier
|
||||
modifier: {
|
||||
type: addKeyword
|
||||
requires: {
|
||||
type: sarumanFirstSentenceActive
|
||||
}
|
||||
filter: self
|
||||
keyword: lurker
|
||||
}
|
||||
}
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
|
||||
@@ -232,6 +232,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: exert
|
||||
select: choose(culture(gondor),man)
|
||||
@@ -664,6 +668,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
@@ -849,6 +857,10 @@
|
||||
{
|
||||
type: activated
|
||||
phase: skirmish
|
||||
requires: {
|
||||
type: CanSpot
|
||||
filter: self,Zone(SUPPORT)
|
||||
}
|
||||
cost: {
|
||||
type: choice
|
||||
texts: [
|
||||
|
||||
@@ -455,6 +455,7 @@
|
||||
}
|
||||
filter: site,zone(adventure path)
|
||||
from: siteYouControl
|
||||
terrain: true
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -616,7 +616,7 @@
|
||||
modifier: {
|
||||
type: AddKeyword
|
||||
keyword: marsh
|
||||
filter: or(river,and(site,not(or(Battleground,Dwelling,Forest,Mountain,Plains,Sanctuary,River,Underground))))
|
||||
filter: or(river,and(site,not(or(Battleground,Dwelling,Forest,Mountain,Plains,River,Underground))))
|
||||
}
|
||||
}
|
||||
{
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
text: Would you like to exhaust {chosenMinion} to permit it to skirmish?
|
||||
cost: {
|
||||
type: exhaust
|
||||
select: memory(chosenMinion)
|
||||
select: choose(CanExert,memory(chosenMinion))
|
||||
}
|
||||
effect: {
|
||||
type: disableSkirmishAssignment
|
||||
|
||||
@@ -20,7 +20,11 @@ public enum Keyword implements Filterable {
|
||||
FIERCE("Fierce", true, false, false, true),
|
||||
LURKER("Lurker", true, false, false, true),
|
||||
MUSTER("Muster", true, false, false, true),
|
||||
SANCTUARY("Sanctuary", true, false, true, true),
|
||||
/**
|
||||
* As per Modern Ruling #1, Sanctuary is not considered a terrain keyword.
|
||||
* https://wiki.lotrtcgpc.net/wiki/Modern_Ruling_1
|
||||
*/
|
||||
SANCTUARY("Sanctuary", true, false, false, true),
|
||||
RING_BEARER("Ring-Bearer", true, false, true, true),
|
||||
UNHASTY("Unhasty", true, false, false, true),
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ public interface LotroFormat {
|
||||
String PCSummary = """
|
||||
As a reminder, PC formats incorporate the following changes:
|
||||
<br/>- <a href="https://wiki.lotrtcgpc.net/wiki/PC_Errata" target="_blank">PC Errata are in effect</a>
|
||||
<br/>- Set V1 is legal
|
||||
<br/>- Sets V1 and V2 are legal (where applicable)
|
||||
<br/>- Discard piles are public information for both sides
|
||||
<br/>- The game ends after Regroup actions are made (instead of at the start of Regroup)
|
||||
""";
|
||||
|
||||
@@ -41,8 +41,6 @@ public class SkirmishPhaseAction extends SystemQueueAction {
|
||||
game.getActionsEnvironment().addActionToStack(new SkirmishActionProcedureAction());
|
||||
}
|
||||
});
|
||||
appendEffect(
|
||||
new TriggeringResultEffect(null, new SkirmishAboutToEndResult(fellowshipCharacter, shadowCharacters), "Skirmish about to end"));
|
||||
appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
@@ -53,7 +51,8 @@ public class SkirmishPhaseAction extends SystemQueueAction {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
appendEffect(
|
||||
new TriggeringResultEffect(null, new SkirmishAboutToEndResult(fellowshipCharacter, shadowCharacters), "Skirmish about to end"));
|
||||
appendEffect(
|
||||
new TriggeringResultEffect(null, new EndOfPhaseResult(Phase.SKIRMISH), "End of skirmish phase"));
|
||||
appendEffect(
|
||||
|
||||
@@ -199,10 +199,10 @@ public class TournamentService {
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
|
||||
try {
|
||||
addRecurringScheduledQueue("fotr_daily_eu", "Daily Gondor Fellowship Block", "2013-01-15 19:30:00", "fotrDailyEu-", "fotr_block");
|
||||
addRecurringScheduledQueue("fotr_daily_us", "Daily Rohan Fellowship Block", "2013-01-16 00:30:00", "fotrDailyUS-", "fotr_block");
|
||||
addRecurringScheduledQueue("movie_daily_eu", "Daily Gondor Movie Block", "2013-01-16 19:30:00", "movieDailyEu-", "movie");
|
||||
addRecurringScheduledQueue("movie_daily_us", "Daily Rohan Movie Block", "2013-01-17 00:30:00", "movieDailyUs-", "movie");
|
||||
addRecurringScheduledQueue("fotr_daily_eu", "Daily Fellowship Block", "2013-01-15 19:30:00", "fotrDailyEu-", "fotr_block");
|
||||
addRecurringScheduledQueue("fotr_daily_us", "Daily Fellowship Block", "2013-01-16 00:30:00", "fotrDailyUS-", "fotr_block");
|
||||
addRecurringScheduledQueue("movie_daily_eu", "Daily Movie Block", "2013-01-16 19:30:00", "movieDailyEu-", "movie");
|
||||
addRecurringScheduledQueue("movie_daily_us", "Daily Movie Block", "2013-01-17 00:30:00", "movieDailyUs-", "movie");
|
||||
|
||||
} catch (DateTimeParseException exp) {
|
||||
// Ignore, can't happen
|
||||
|
||||
@@ -89,13 +89,14 @@ public class Card_08_113_Tests
|
||||
assertTrue(scn.FreepsHasOptionalTriggerAvailable());
|
||||
assertEquals(0, scn.GetThreats());
|
||||
assertEquals(Zone.SHADOW_CHARACTERS, shelob.getZone());
|
||||
scn.FreepsAcceptOptionalTrigger();
|
||||
scn.FreepsDeclineOptionalTrigger(); //Ring converting burdens
|
||||
scn.FreepsAcceptOptionalTrigger(); //Sting
|
||||
assertEquals(1, scn.GetThreats());
|
||||
assertEquals(Zone.DISCARD, shelob.getZone());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void StingTriggersOnOverwhelm() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
public void Sting_DOESNOT_TriggerOnOverwhelm() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
@@ -117,12 +118,10 @@ public class Card_08_113_Tests
|
||||
scn.FreepsResolveSkirmish(frodo);
|
||||
scn.PassCurrentPhaseActions();
|
||||
|
||||
assertTrue(scn.FreepsHasOptionalTriggerAvailable());
|
||||
assertFalse(scn.FreepsHasOptionalTriggerAvailable());
|
||||
|
||||
assertEquals(0, scn.GetThreats());
|
||||
assertEquals(Zone.SHADOW_CHARACTERS, sauron.getZone());
|
||||
scn.FreepsAcceptOptionalTrigger();
|
||||
assertEquals(1, scn.GetThreats());
|
||||
assertEquals(Zone.DISCARD, sauron.getZone());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ 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.game.state.actions.DefaultActionsEnvironment;
|
||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -57,7 +56,8 @@ public class Card_11_243_Tests
|
||||
* Type: Site
|
||||
* Subtype:
|
||||
* Site Number: *
|
||||
* Game Text: <b>Plains</b>. Until the regroup phase, each minion skirmishing a [rohan] companion loses <b>fierce</b> and cannot gain fierce.
|
||||
* Game Text: <b>Plains</b>. Until the regroup phase, each minion skirmishing a [rohan] companion loses
|
||||
* <b>fierce</b> and cannot gain fierce.
|
||||
*/
|
||||
|
||||
var scn = GetScenario();
|
||||
@@ -73,23 +73,14 @@ public class Card_11_243_Tests
|
||||
assertEquals(3, card.getBlueprint().getTwilightCost());
|
||||
}
|
||||
|
||||
// Uncomment any @Test markers below once this is ready to be used
|
||||
//@Test
|
||||
public void HarrowdaleTest1() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var card = scn.GetFreepsCard("card");
|
||||
scn.FreepsMoveCardToHand(card);
|
||||
|
||||
scn.StartGame();
|
||||
scn.FreepsPlayCard(card);
|
||||
|
||||
assertEquals(3, scn.GetTwilight());
|
||||
}
|
||||
/**
|
||||
* As per Legacy Ruling #4, Harrowdale's text is to be interpreted as only working while the fellowship is at that site.
|
||||
* Thus, if you start at Harrowdale and move away from it, the text does not "follow" the fellowship.
|
||||
* <a href="https://wiki.lotrtcgpc.net/wiki/Legacy_Ruling_4">Wiki LR#4</a>
|
||||
*/
|
||||
|
||||
@Test
|
||||
public void MovingFromHarrowdaleRemovesFierceAgainstSkirmishingRohirrim() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
public void MovingFromHarrowdale_DOESNOT_RemoveFierceAgainstSkirmishingRohirrim() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
var harrowdale = scn.GetFreepsSite("Harrowdale");
|
||||
@@ -110,7 +101,6 @@ public class Card_11_243_Tests
|
||||
scn.FreepsPassCurrentPhaseAction();
|
||||
scn.ShadowChooseCardBPFromSelection(shadowSite2);
|
||||
|
||||
assertEquals(1, ((DefaultActionsEnvironment) scn._game.getActionsEnvironment()).getUntilStartOfPhaseActionProxies(Phase.REGROUP).size());
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
|
||||
@@ -124,7 +114,8 @@ public class Card_11_243_Tests
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
|
||||
scn.FreepsResolveSkirmish(eomer);
|
||||
assertFalse(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
//Fierce was not removed because Harrowdale only works while on it
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
scn.PassCurrentPhaseActions();
|
||||
|
||||
scn.FreepsResolveSkirmish(aragorn);
|
||||
@@ -134,42 +125,9 @@ public class Card_11_243_Tests
|
||||
assertEquals(Phase.ASSIGNMENT, scn.GetCurrentPhase());
|
||||
scn.PassCurrentPhaseActions();
|
||||
|
||||
assertFalse(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
scn.FreepsAssignToMinions(aragorn, pursuer);
|
||||
|
||||
scn.FreepsResolveSkirmish(aragorn);
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
scn.PassCurrentPhaseActions();
|
||||
|
||||
//Fierce suppression should have worn off
|
||||
assertEquals(Phase.REGROUP, scn.GetCurrentPhase());
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
|
||||
scn.PassCurrentPhaseActions();
|
||||
scn.ShadowDeclineReconciliation();
|
||||
scn.FreepsChooseToMove();
|
||||
scn.ShadowChooseCardBPFromSelection(shadowSite3);
|
||||
|
||||
assertEquals(0, ((DefaultActionsEnvironment) scn._game.getActionsEnvironment()).getUntilStartOfPhaseActionProxies(Phase.REGROUP).size());
|
||||
|
||||
scn.SkipToAssignments();
|
||||
scn.FreepsAssignToMinions(
|
||||
new PhysicalCardImpl[] { eomer, pursuer},
|
||||
new PhysicalCardImpl[] { aragorn, seeker}
|
||||
);
|
||||
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
|
||||
scn.FreepsResolveSkirmish(eomer);
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
scn.PassCurrentPhaseActions();
|
||||
|
||||
scn.FreepsResolveSkirmish(aragorn);
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
scn.PassCurrentPhaseActions();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -194,7 +152,6 @@ public class Card_11_243_Tests
|
||||
scn.FreepsPassCurrentPhaseAction();
|
||||
scn.ShadowChooseCardBPFromSelection(harrowdale);
|
||||
|
||||
assertEquals(1, ((DefaultActionsEnvironment) scn._game.getActionsEnvironment()).getUntilStartOfPhaseActionProxies(Phase.REGROUP).size());
|
||||
assertTrue(scn.hasKeyword(pursuer, Keyword.FIERCE));
|
||||
assertTrue(scn.hasKeyword(seeker, Keyword.FIERCE));
|
||||
|
||||
@@ -236,8 +193,6 @@ public class Card_11_243_Tests
|
||||
scn.FreepsChooseToMove();
|
||||
scn.ShadowChooseCardBPFromSelection(shadowSite3);
|
||||
|
||||
assertEquals(0, ((DefaultActionsEnvironment) scn._game.getActionsEnvironment()).getUntilStartOfPhaseActionProxies(Phase.REGROUP).size());
|
||||
|
||||
scn.SkipToAssignments();
|
||||
scn.FreepsAssignToMinions(
|
||||
new PhysicalCardImpl[] { eomer, pursuer},
|
||||
|
||||
Reference in New Issue
Block a user