"The Witch-king's Beast"
This commit is contained in:
@@ -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<OptionalTriggerAction> 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ public abstract class EffectResult {
|
||||
START_OF_TURN,
|
||||
END_OF_TURN,
|
||||
|
||||
AFTER_ALL_SKIRMISHES,
|
||||
|
||||
RECONCILE,
|
||||
|
||||
ZERO_VITALITY,
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user