From 3035352c767addbdb03bbd5a8dc53e610d1fb7e4 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Thu, 7 Mar 2013 14:18:54 +0000 Subject: [PATCH] - Roaming penalty does not get reduced by cost decreasing effects ("play X, its twilight cost is -Y"), including Toil. --- .../gemp-lotr-async/src/main/web/includes/changeLog.html | 1 + .../java/com/gempukku/lotro/cards/PlayConditions.java | 2 +- .../lotro/cards/actions/AttachPermanentAction.java | 2 +- .../com/gempukku/lotro/cards/actions/PlayEventAction.java | 2 +- .../gempukku/lotro/cards/actions/PlayPermanentAction.java | 2 +- .../lotro/cards/effects/PayPlayOnTwilightCostEffect.java | 4 ++-- .../lotro/cards/effects/PayTwilightCostEffect.java | 4 ++-- .../com/gempukku/lotro/cards/set17/orc/Card17_084.java | 2 +- .../gempukku/lotro/cards/set17/uruk_hai/Card17_125.java | 2 +- .../gempukku/lotro/logic/modifiers/ModifiersLogic.java | 8 ++++---- .../gempukku/lotro/logic/modifiers/ModifiersQuerying.java | 4 ++-- .../pregame/PlayerPlaysStartingFellowshipGameProcess.java | 2 +- .../timing/processes/turn/move/MovementGameProcess.java | 2 +- .../java/com/gempukku/lotro/game/LotroGameMediator.java | 2 +- .../java/com/gempukku/lotro/at/IndividualCardAtTest.java | 2 +- .../src/test/java/com/gempukku/lotro/at/ToilAtTest.java | 6 ++++-- 16 files changed, 25 insertions(+), 22 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index 1cae6cba5..038fd6d60 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -4,6 +4,7 @@ - Actions that have playing a card as an effect (except playing from hand or discard), no longer check if there is a card player can legally play. Effects that play cards from hand and discard, are still not playable if no legal card can be played. +- Roaming penalty does not get reduced by cost decreasing effects ("play X, its twilight cost is -Y"), including Toil. 5 Mar. 2013 - "Bilbo", "Bearer of Things Burgled" and any card that allows a choice of adding twilight now correctly displays diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java index 8592799ff..c1b6baf77 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java @@ -18,7 +18,7 @@ import java.util.Map; public class PlayConditions { public static boolean canPayForShadowCard(LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty) { - return game.getModifiersQuerying().getTwilightCost(game.getGameState(), self, ignoreRoamingPenalty) + twilightModifier <= game.getGameState().getTwilightPool() - withTwilightRemoved; + return game.getModifiersQuerying().getTwilightCost(game.getGameState(), self, twilightModifier, ignoreRoamingPenalty) <= game.getGameState().getTwilightPool() - withTwilightRemoved; } private static boolean containsPhase(Phase[] phases, Phase phase) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java index 95d1d8d80..58a34caba 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java @@ -133,7 +133,7 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements if (_discountEffect != null) { int requiredDiscount = 0; if (_cardToAttach.getBlueprint().getSide() == Side.SHADOW) { - int twilightCost = game.getModifiersQuerying().getPlayOnTwilightCost(game.getGameState(), _cardToAttach, _target) + _twilightModifier; + int twilightCost = game.getModifiersQuerying().getPlayOnTwilightCost(game.getGameState(), _cardToAttach, _target, _twilightModifier); int underPool = twilightCost - game.getGameState().getTwilightPool(); if (underPool > 0) requiredDiscount = underPool; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java index 29f294a4e..fd58b77d3 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java @@ -120,7 +120,7 @@ public class PlayEventAction extends AbstractCostToEffectAction implements Disco if (_discountEffect != null) { int requiredDiscount = 0; if (_eventPlayed.getBlueprint().getSide() == Side.SHADOW) { - int twilightCost = game.getModifiersQuerying().getTwilightCost(game.getGameState(), _eventPlayed, false); + int twilightCost = game.getModifiersQuerying().getTwilightCost(game.getGameState(), _eventPlayed, 0, false); int underPool = twilightCost - game.getGameState().getTwilightPool(); if (underPool > 0) requiredDiscount = underPool; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java index bb9517b1e..17ac29f49 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java @@ -107,7 +107,7 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D if (_discountEffect != null) { int requiredDiscount = 0; if (_permanentPlayed.getBlueprint().getSide() == Side.SHADOW) { - int twilightCost = game.getModifiersQuerying().getTwilightCost(game.getGameState(), _permanentPlayed, _ignoreRoamingPenalty) + _twilightModifier; + int twilightCost = game.getModifiersQuerying().getTwilightCost(game.getGameState(), _permanentPlayed, _twilightModifier, _ignoreRoamingPenalty); int underPool = twilightCost - game.getGameState().getTwilightPool(); if (underPool > 0) requiredDiscount = underPool; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayPlayOnTwilightCostEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayPlayOnTwilightCostEffect.java index 37108e0fa..acbce47cc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayPlayOnTwilightCostEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayPlayOnTwilightCostEffect.java @@ -28,7 +28,7 @@ public class PayPlayOnTwilightCostEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - int twilightCost = _twilightModifier + game.getModifiersQuerying().getPlayOnTwilightCost(game.getGameState(), _physicalCard, _target); + int twilightCost = game.getModifiersQuerying().getPlayOnTwilightCost(game.getGameState(), _physicalCard, _target, _twilightModifier); String currentPlayerId = game.getGameState().getCurrentPlayerId(); if (!currentPlayerId.equals(_physicalCard.getOwner())) { @@ -41,7 +41,7 @@ public class PayPlayOnTwilightCostEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - int twilightCost = _twilightModifier + game.getModifiersQuerying().getPlayOnTwilightCost(game.getGameState(), _physicalCard, _target); + int twilightCost = game.getModifiersQuerying().getPlayOnTwilightCost(game.getGameState(), _physicalCard, _target, _twilightModifier); String currentPlayerId = game.getGameState().getCurrentPlayerId(); if (currentPlayerId.equals(_physicalCard.getOwner())) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayTwilightCostEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayTwilightCostEffect.java index 31c13ea8a..b5ed6e29d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayTwilightCostEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PayTwilightCostEffect.java @@ -36,7 +36,7 @@ public class PayTwilightCostEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - int twilightCost = _twilightModifier + game.getModifiersQuerying().getTwilightCost(game.getGameState(), _physicalCard, _ignoreRoamingPenalty); + int twilightCost = game.getModifiersQuerying().getTwilightCost(game.getGameState(), _physicalCard, _twilightModifier, _ignoreRoamingPenalty); String currentPlayerId = game.getGameState().getCurrentPlayerId(); if (!currentPlayerId.equals(_physicalCard.getOwner())) { @@ -49,7 +49,7 @@ public class PayTwilightCostEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - int twilightCost = _twilightModifier + game.getModifiersQuerying().getTwilightCost(game.getGameState(), _physicalCard, _ignoreRoamingPenalty); + int twilightCost = game.getModifiersQuerying().getTwilightCost(game.getGameState(), _physicalCard, _twilightModifier, _ignoreRoamingPenalty); String currentPlayerId = game.getGameState().getCurrentPlayerId(); if (currentPlayerId.equals(_physicalCard.getOwner())) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_084.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_084.java index ca367b799..2988a125f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_084.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_084.java @@ -38,7 +38,7 @@ public class Card17_084 extends AbstractMinion { ActivateCardAction action = new ActivateCardAction(self); action.appendCost( new SelfExertEffect(action, self)); - int number = game.getModifiersQuerying().getTwilightCost(game.getGameState(), game.getGameState().getCurrentSite(), false); + int number = game.getModifiersQuerying().getTwilightCost(game.getGameState(), game.getGameState().getCurrentSite(), 0, false); action.appendEffect( new AddTwilightEffect(self, number)); return Collections.singletonList(action); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_125.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_125.java index 1f9dab5ab..517937334 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_125.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_125.java @@ -44,7 +44,7 @@ public class Card17_125 extends AbstractMinion { @Override public void liberatedSiteCallback(PhysicalCard liberatedSite) { action.appendEffect( - new AddTwilightEffect(self, game.getModifiersQuerying().getTwilightCost(game.getGameState(), liberatedSite, false))); + new AddTwilightEffect(self, game.getModifiersQuerying().getTwilightCost(game.getGameState(), liberatedSite, 0, false))); } }); return Collections.singletonList(action); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index b7be642c0..8bafa25e2 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -459,10 +459,10 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } @Override - public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, boolean ignoreRoamingPenalty) { + public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, int twilightCostModifier, boolean ignoreRoamingPenalty) { LoggingThreadLocal.logMethodStart(physicalCard, "getTwilightCost"); try { - int result = physicalCard.getBlueprint().getTwilightCost(); + int result = physicalCard.getBlueprint().getTwilightCost() + twilightCostModifier; result += physicalCard.getBlueprint().getTwilightCostModifier(gameState, this, physicalCard); for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER, physicalCard)) { result += modifier.getTwilightCostModifier(gameState, this, physicalCard, ignoreRoamingPenalty); @@ -480,10 +480,10 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } @Override - public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target) { + public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target, int twilightCostModifier) { LoggingThreadLocal.logMethodStart(physicalCard, "getPlayOnTwilightCost"); try { - int result = getTwilightCost(gameState, physicalCard, false); + int result = getTwilightCost(gameState, physicalCard, twilightCostModifier, false); for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER, physicalCard)) { result += modifier.getPlayOnTwilightCostModifier(gameState, this, physicalCard, target); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index 89ba80425..0613a75f8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -48,9 +48,9 @@ public interface ModifiersQuerying { public boolean addsTwilightForCompanionMove(GameState gameState, PhysicalCard companion); // Twilight cost - public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, boolean ignoreRoamingPenalty); + public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, int twilightCostModifier, boolean ignoreRoamingPenalty); - public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target); + public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target, int twilightCostModifier); public int getRoamingPenalty(GameState gameState, PhysicalCard physicalCard); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayerPlaysStartingFellowshipGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayerPlaysStartingFellowshipGameProcess.java index 4ba24c909..cde5223c1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayerPlaysStartingFellowshipGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayerPlaysStartingFellowshipGameProcess.java @@ -44,7 +44,7 @@ public class PlayerPlaysStartingFellowshipGameProcess implements GameProcess { new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - int twilightCost = modifiersQuerying.getTwilightCost(gameState, physicalCard, false); + int twilightCost = modifiersQuerying.getTwilightCost(gameState, physicalCard, 0, false); return gameState.getTwilightPool() + twilightCost <= 4 && physicalCard.getBlueprint().checkPlayRequirements(playerId, game, physicalCard, 0, 0, false, false) && modifiersQuerying.canPlayAction(gameState, playerId, physicalCard.getBlueprint().getPlayCardAction(playerId, game, physicalCard, 0, false)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java index 1f83e0907..c4c8f833e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovementGameProcess.java @@ -84,7 +84,7 @@ public class MovementGameProcess implements GameProcess { protected void doPlayEffect(LotroGame game) { GameState gameState = game.getGameState(); - int siteTwilightCost = game.getModifiersQuerying().getTwilightCost(gameState, gameState.getCurrentSite(), false); + int siteTwilightCost = game.getModifiersQuerying().getTwilightCost(gameState, gameState.getCurrentSite(), 0, false); if (!game.getFormat().isOrderedSites()) { final int siteNumber = gameState.getCurrentSiteNumber(); if (siteNumber > 3 && siteNumber <= 6) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java index 97deacdf7..3d27d1fb2 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java @@ -182,7 +182,7 @@ public class LotroGameMediator { sb.append("

Effective stats:"); try { - int twilightCost = _lotroGame.getModifiersQuerying().getTwilightCost(_lotroGame.getGameState(), card, false); + int twilightCost = _lotroGame.getModifiersQuerying().getTwilightCost(_lotroGame.getGameState(), card, 0, false); sb.append("
Twilight cost: " + twilightCost); } catch (UnsupportedOperationException exp) { } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index a0f7e17dc..a23a0902e 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -503,7 +503,7 @@ public class IndividualCardAtTest extends AbstractAtTest { // End fellowship playerDecided(P2, ""); - assertEquals(8, _game.getModifiersQuerying().getTwilightCost(_game.getGameState(), attea, false)); + assertEquals(8, _game.getModifiersQuerying().getTwilightCost(_game.getGameState(), attea, 0, false)); } @Test diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ToilAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ToilAtTest.java index d3b5bd9a4..19c8987b8 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ToilAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ToilAtTest.java @@ -6,13 +6,14 @@ import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.AwaitingDecision; import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import static junit.framework.Assert.assertEquals; import org.junit.Test; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import static junit.framework.Assert.assertEquals; + public class ToilAtTest extends AbstractAtTest { @Test public void cantPlayIfNotEnoughAndCantExertAnything() throws DecisionResultInvalidException { @@ -327,6 +328,7 @@ public class ToilAtTest extends AbstractAtTest { assertEquals(1, _game.getGameState().getWounds(corpsOfHarad3)); assertEquals(1, _game.getGameState().getWounds(corpsOfHarad4)); assertEquals(1, _game.getGameState().getWounds(corpsOfHarad5)); - assertEquals(8, _game.getGameState().getTwilightPool()); + // It's 6 not 8, because of roaming penalty + assertEquals(6, _game.getGameState().getTwilightPool()); } }