"The Witch-king's Beast"

This commit is contained in:
marcins78@gmail.com
2011-12-14 21:21:52 +00:00
parent 254185888f
commit b298506026
7 changed files with 151 additions and 3 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -29,6 +29,8 @@ public abstract class EffectResult {
START_OF_TURN,
END_OF_TURN,
AFTER_ALL_SKIRMISHES,
RECONCILE,
ZERO_VITALITY,

View File

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

View File

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

View File

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

View File

@@ -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;
}
}