diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_184.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_184.java new file mode 100644 index 000000000..97735fbc3 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_184.java @@ -0,0 +1,68 @@ +package com.gempukku.lotro.cards.set12.wraith; + +import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.modifiers.CantBeAssignedToSkirmishModifier; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.OptionalTriggerAction; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; +import com.gempukku.lotro.logic.timing.results.AfterAllSkirmishesResult; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Black Rider + * Side: Shadow + * Culture: Wraith + * Twilight Cost: 2 + * Type: Possession • Mount + * Strength: +2 + * Game Text: Bearer must be a Nazgul. If bearer is The Witch-king, after all skirmishes and fierce skirmishes have been + * resolved, you may exert him twice to make him participate in one additional assignment and skirmish phase. + */ +public class Card12_184 extends AbstractAttachable { + public Card12_184() { + super(Side.SHADOW, CardType.POSSESSION, 2, Culture.WRAITH, PossessionClass.MOUNT, "The Witch-king's Beast", true); + } + + @Override + protected Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { + return Race.NAZGUL; + } + + @Override + public Modifier getAlwaysOnModifier(PhysicalCard self) { + return new StrengthModifier(self, Filters.hasAttached(self), 2); + } + + @Override + public List getOptionalAfterTriggers(String playerId, LotroGame game, final EffectResult effectResult, PhysicalCard self) { + if (effectResult.getType() == EffectResult.Type.AFTER_ALL_SKIRMISHES + && PlayConditions.canExert(self, game, 2, Filters.witchKing, Filters.hasAttached(self))) { + OptionalTriggerAction action = new OptionalTriggerAction(self); + action.appendCost( + new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 2, Filters.witchKing, Filters.hasAttached(self))); + action.appendEffect( + new AddUntilEndOfPhaseModifierEffect( + new CantBeAssignedToSkirmishModifier(self, Filters.and(CardType.MINION, Filters.not(self.getAttachedTo()))), Phase.ASSIGNMENT)); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + ((AfterAllSkirmishesResult) effectResult).setCreateAnExtraAssignmentAndSkirmishPhases(true); + } + }); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index a056bbc62..529742c09 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -32,6 +32,8 @@ public class GameState { private int _moveCount; private boolean _fierceSkirmishes; + private boolean _extraSkirmishes; + private boolean _wearingRing; private boolean _consecutiveAction; @@ -723,6 +725,14 @@ public class GameState { listener.setCurrentPlayerId(_currentPlayerId); } + public boolean isExtraSkirmishes() { + return _extraSkirmishes; + } + + public void setExtraSkirmishes(boolean extraSkirmishes) { + _extraSkirmishes = extraSkirmishes; + } + public void setFierceSkirmishes(boolean value) { _fierceSkirmishes = value; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java index db2538475..cea4a3afd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java @@ -29,6 +29,8 @@ public abstract class EffectResult { START_OF_TURN, END_OF_TURN, + AFTER_ALL_SKIRMISHES, + RECONCILE, ZERO_VITALITY, diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/ShadowPlayersReconcileGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/ShadowPlayersReconcileGameProcess.java index 0cb3584e9..5cf32ab5a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/ShadowPlayersReconcileGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/regroup/ShadowPlayersReconcileGameProcess.java @@ -15,7 +15,6 @@ public class ShadowPlayersReconcileGameProcess implements GameProcess { @Override public void process(LotroGame game) { GameState gameState = game.getGameState(); - gameState.setFierceSkirmishes(false); PlayOrder reverseShadowOrder = gameState.getPlayerOrder().getClockwisePlayOrder(gameState.getCurrentPlayerId(), false); reverseShadowOrder.getNextPlayer(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/AfterSkirmishesGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/AfterSkirmishesGameProcess.java index d46b5e297..45ebe1470 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/AfterSkirmishesGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/AfterSkirmishesGameProcess.java @@ -15,11 +15,16 @@ public class AfterSkirmishesGameProcess implements GameProcess { @Override public void process(LotroGame game) { GameState gameState = game.getGameState(); - if (!gameState.isFierceSkirmishes() && Filters.canSpot(gameState, game.getModifiersQuerying(), CardType.MINION, Keyword.FIERCE)) { + if (gameState.isExtraSkirmishes()) { + gameState.setExtraSkirmishes(false); + _followingGameProcess = new RegroupGameProcess(); + } else if (!gameState.isFierceSkirmishes() && Filters.canSpot(gameState, game.getModifiersQuerying(), CardType.MINION, Keyword.FIERCE)) { gameState.setFierceSkirmishes(true); _followingGameProcess = new AssignmentGameProcess(); } else { - _followingGameProcess = new RegroupGameProcess(); + if (gameState.isFierceSkirmishes()) + gameState.setFierceSkirmishes(false); + _followingGameProcess = new EndSkirmishesGameProcess(); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/EndSkirmishesGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/EndSkirmishesGameProcess.java new file mode 100644 index 000000000..a1d832fa9 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/EndSkirmishesGameProcess.java @@ -0,0 +1,45 @@ +package com.gempukku.lotro.logic.timing.processes.turn.skirmish; + +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.SystemQueueAction; +import com.gempukku.lotro.logic.effects.TriggeringResultEffect; +import com.gempukku.lotro.logic.timing.processes.GameProcess; +import com.gempukku.lotro.logic.timing.processes.turn.AssignmentGameProcess; +import com.gempukku.lotro.logic.timing.processes.turn.RegroupGameProcess; +import com.gempukku.lotro.logic.timing.results.AfterAllSkirmishesResult; + +public class EndSkirmishesGameProcess implements GameProcess { + private AfterAllSkirmishesResult _afterAllSkirmishesResult = new AfterAllSkirmishesResult(); + + @Override + public void process(LotroGame game) { + SystemQueueAction action = new SystemQueueAction() { + @Override + public String getText(LotroGame game) { + return "After all skirmishes"; + } + }; + action.appendEffect( + new TriggeringResultEffect(null, _afterAllSkirmishesResult, "After all skirmishes")); + game.getActionsEnvironment().addActionToStack(action); + } + + @Override + public GameProcess getNextProcess() { + if (_afterAllSkirmishesResult.isCreateAnExtraAssignmentAndSkirmishPhases()) { + return new GameProcess() { + @Override + public void process(LotroGame game) { + game.getGameState().setExtraSkirmishes(true); + } + + @Override + public GameProcess getNextProcess() { + return new AssignmentGameProcess(); + } + }; + } else { + return new RegroupGameProcess(); + } + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/AfterAllSkirmishesResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/AfterAllSkirmishesResult.java new file mode 100644 index 000000000..bd8176548 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/AfterAllSkirmishesResult.java @@ -0,0 +1,19 @@ +package com.gempukku.lotro.logic.timing.results; + +import com.gempukku.lotro.logic.timing.EffectResult; + +public class AfterAllSkirmishesResult extends EffectResult { + private boolean _createAnExtraAssignmentAndSkirmishPhases; + + public AfterAllSkirmishesResult() { + super(EffectResult.Type.AFTER_ALL_SKIRMISHES); + } + + public boolean isCreateAnExtraAssignmentAndSkirmishPhases() { + return _createAnExtraAssignmentAndSkirmishPhases; + } + + public void setCreateAnExtraAssignmentAndSkirmishPhases(boolean createAnExtraAssignmentAndSkirmishPhases) { + _createAnExtraAssignmentAndSkirmishPhases = createAnExtraAssignmentAndSkirmishPhases; + } +}