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 8f60f1128..c0ae802b3 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 @@ -10,6 +10,7 @@ - "Gloin, Gimli's Father" can now pump itself (per card text). - "Galadriel's Grove" should now allow to play Galadriel from deck. - "Troll of Morannon" has lost its prowess (Damage +1) (per card text). +- FP player wins now in Second Edition, when Shadow player reconciles during regroup on site 9. 12 Mar. 2013 - "Flaming Brand" from set 20 should now correctly apply strength and damage bonus if bearer is skirmishing a Nazgul. diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java index b7adbb7ea..fc01a6dbe 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java @@ -14,7 +14,7 @@ public interface LotroFormat { public boolean hasMulliganRule(); - public boolean winAtEndOfRegroup(); + public boolean winWhenShadowReconciles(); public boolean winOnControlling5Sites(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/RegroupGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/RegroupGameProcess.java index 46d9db7a1..b7cf862d7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/RegroupGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/RegroupGameProcess.java @@ -2,7 +2,6 @@ package com.gempukku.lotro.logic.timing.processes.turn; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.processes.GameProcess; import com.gempukku.lotro.logic.timing.processes.turn.general.PlayersPlayPhaseActionsInOrderGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.general.StartOfPhaseGameProcess; @@ -16,9 +15,8 @@ public class RegroupGameProcess implements GameProcess { public void process(LotroGame game) { _followingGameProcess = new StartOfPhaseGameProcess(Phase.REGROUP, new PlayersPlayPhaseActionsInOrderGameProcess(game.getGameState().getPlayerOrder().getCounterClockwisePlayOrder(game.getGameState().getCurrentPlayerId(), true), 0, - new CheckForSpecialWinConditionGameProcess( new ShadowPlayersReconcileGameProcess( - new FellowshipPlayerChoosesToMoveOrStayGameProcess())))); + new FellowshipPlayerChoosesToMoveOrStayGameProcess()))); } @@ -26,25 +24,4 @@ public class RegroupGameProcess implements GameProcess { public GameProcess getNextProcess() { return _followingGameProcess; } - - private class CheckForSpecialWinConditionGameProcess implements GameProcess { - private GameProcess _followingProcess; - - private CheckForSpecialWinConditionGameProcess(GameProcess followingProcess) { - _followingProcess = followingProcess; - } - - @Override - public void process(LotroGame game) { - if (game.getGameState().getCurrentSiteNumber() == 9 - && game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.WIN_CHECK_AFTER_SHADOW_RECONCILE)) { - game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving to Shadow Reconcile on site 9"); - } - } - - @Override - public GameProcess getNextProcess() { - return _followingProcess; - } - } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java index cee3f4a9b..1f3f7c46f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java @@ -10,6 +10,7 @@ import com.gempukku.lotro.logic.GameUtils; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.modifiers.ModifierFlag; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.ReconcileResult; import java.util.List; @@ -25,20 +26,20 @@ public class WinConditionRule { new AbstractActionProxy() { @Override public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResults) { - if (game.getFormat().winAtEndOfRegroup() - && effectResults.getType() == EffectResult.Type.END_OF_PHASE - && game.getGameState().getCurrentPhase() == Phase.REGROUP - && game.getGameState().getCurrentSiteNumber() == 9) - game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving to end of Regroup phase on site 9"); - else if (effectResults.getType() == EffectResult.Type.START_OF_PHASE - && game.getGameState().getCurrentPhase() == Phase.REGROUP - && game.getGameState().getCurrentSiteNumber() == 9 - && !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.WIN_CHECK_AFTER_SHADOW_RECONCILE)) - game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving to Regroup phase on site 9"); - else if (game.getFormat().winOnControlling5Sites() + if (game.getGameState().getCurrentPhase() == Phase.REGROUP + && game.getGameState().getCurrentSiteNumber() == 9) { + if (isWinAtReconcile(game)) { + if (effectResults.getType() == EffectResult.Type.RECONCILE + && !((ReconcileResult) effectResults).getPlayerId().equals(game.getGameState().getCurrentPlayerId())) { + game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving till Shadow player reconciles on site 9"); + } + } else if (effectResults.getType() == EffectResult.Type.START_OF_PHASE) { + game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving to Regroup phase on site 9"); + } + } else if (game.getFormat().winOnControlling5Sites() && effectResults.getType() == EffectResult.Type.TAKE_CONTROL_OF_SITE) { for (String opponent : GameUtils.getOpponents(game, game.getGameState().getCurrentPlayerId())) { - if (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), CardType.SITE, Filters.siteControlled(opponent))>=5) + if (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), CardType.SITE, Filters.siteControlled(opponent)) >= 5) game.playerWon(opponent, "Controls 5 sites"); } } @@ -46,4 +47,9 @@ public class WinConditionRule { } }); } + + private boolean isWinAtReconcile(LotroGame game) { + return (game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.WIN_CHECK_AFTER_SHADOW_RECONCILE) + || game.getFormat().winWhenShadowReconciles()); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java index fc004e19a..4f47cde7f 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java @@ -65,7 +65,7 @@ public class DefaultLotroFormat implements LotroFormat { } @Override - public boolean winAtEndOfRegroup() { + public boolean winWhenShadowReconciles() { return _winAtEndOfRegroup; }