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());
}
}