Fixed Catapult crashing the game when the opponent has 0 cards in deck.

This commit is contained in:
Christian 'ketura' McCarty
2025-04-10 17:28:10 -05:00
parent acf73f4383
commit 5fbe0aabd2
2 changed files with 38 additions and 3 deletions

View File

@@ -633,11 +633,14 @@ public class FilterFactory {
});
parameterFilters.put("printedtwilightcostfrommemory",
(parameter, environment) -> actionContext -> {
var card = actionContext.getCardFromMemory(parameter).getBlueprint();
if (card.getCardType() == CardType.THE_ONE_RING || card.getCardType() == CardType.MAP)
var card = actionContext.getCardFromMemory(parameter);
if(card == null)
return Filters.none;
var bp = card.getBlueprint();
if (bp.getCardType() == CardType.THE_ONE_RING || bp.getCardType() == CardType.MAP)
return Filters.none;
return Filters.printedTwilightCost(card.getTwilightCost());
return Filters.printedTwilightCost(bp.getTwilightCost());
});
parameterFilters.put("race",
(parameter, environment) -> {

View File

@@ -119,4 +119,36 @@ public class Card_08_032_Tests
assertEquals(Zone.DISCARD, larder.getZone());
assertEquals(Zone.SHADOW_CHARACTERS, runner.getZone());
}
@Test
public void CatapultBehavesWhenOpponentHas0CardsInDeck() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var catapult = scn.GetFreepsCard("catapult");
scn.FreepsMoveCardToHand("fodder1", "fodder2");
scn.FreepsMoveCardToSupportArea(catapult);
var runner = scn.GetShadowCard("runner");
var shelob = scn.GetShadowCard("shelob");
var larder = scn.GetShadowCard("larder");
scn.ShadowMoveCharToTable(runner, shelob);
scn.ShadowMoveCardToSupportArea(larder);
scn.ShadowMoveCardToDiscard("catapult", "fodder1", "fodder2");
scn.StartGame();
scn.SkipToPhase(Phase.MANEUVER);
assertEquals(2, scn.GetFreepsHandCount());
assertEquals(0, scn.GetFreepsDiscardCount());
assertEquals(0, scn.GetShadowDeckCount());
assertTrue(scn.FreepsActionAvailable(catapult));
scn.FreepsUseCardAction(catapult);
assertEquals(0, scn.GetFreepsHandCount());
assertEquals(2, scn.GetFreepsDiscardCount());
//Skipped right to the other player's maneuver action
assertTrue(scn.ShadowAnyDecisionsAvailable());
}
}