- "Return to Its Master" now creates an additional Skirmish Phase.
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
package com.gempukku.lotro.cards.effects;
|
||||||
|
|
||||||
|
import com.gempukku.lotro.common.Phase;
|
||||||
|
import com.gempukku.lotro.game.PhysicalCard;
|
||||||
|
import com.gempukku.lotro.game.state.LotroGame;
|
||||||
|
import com.gempukku.lotro.game.state.Skirmish;
|
||||||
|
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||||
|
import com.gempukku.lotro.logic.timing.actions.SkirmishPhaseAction;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class AdditionalSkirmishPhaseEffect extends UnrespondableEffect {
|
||||||
|
private PhysicalCard _fpCard;
|
||||||
|
private Set<PhysicalCard> _shadowCards;
|
||||||
|
|
||||||
|
public AdditionalSkirmishPhaseEffect(PhysicalCard fpCard, Set<PhysicalCard> shadowCards) {
|
||||||
|
_fpCard = fpCard;
|
||||||
|
_shadowCards = shadowCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doPlayEffect(LotroGame game) {
|
||||||
|
final Phase currentPhase = game.getGameState().getCurrentPhase();
|
||||||
|
final Skirmish skirmish = game.getGameState().getSkirmish();
|
||||||
|
final boolean fierce = game.getGameState().isFierceSkirmishes();
|
||||||
|
final boolean extra = game.getGameState().isExtraSkirmishes();
|
||||||
|
|
||||||
|
if (skirmish != null)
|
||||||
|
game.getGameState().finishSkirmish();
|
||||||
|
|
||||||
|
final SkirmishPhaseAction skirmishPhaseAction = new SkirmishPhaseAction(_fpCard, _shadowCards);
|
||||||
|
// We have to reset the phase, to whatever it was before
|
||||||
|
skirmishPhaseAction.appendEffect(
|
||||||
|
new UnrespondableEffect() {
|
||||||
|
@Override
|
||||||
|
protected void doPlayEffect(LotroGame game) {
|
||||||
|
// We might have to restart an existing skirmish
|
||||||
|
if (skirmish != null)
|
||||||
|
game.getGameState().restartSkirmish(skirmish);
|
||||||
|
game.getGameState().setCurrentPhase(currentPhase);
|
||||||
|
game.getGameState().setFierceSkirmishes(fierce);
|
||||||
|
game.getGameState().setExtraSkirmishes(extra);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
game.getGameState().setFierceSkirmishes(false);
|
||||||
|
game.getGameState().setExtraSkirmishes(true);
|
||||||
|
game.getActionsEnvironment().addActionToStack(
|
||||||
|
skirmishPhaseAction);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.TriggerConditions;
|
|||||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect;
|
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect;
|
||||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignMinionToCompanionEffect;
|
import com.gempukku.lotro.cards.effects.AdditionalSkirmishPhaseEffect;
|
||||||
import com.gempukku.lotro.common.Culture;
|
import com.gempukku.lotro.common.Culture;
|
||||||
import com.gempukku.lotro.common.Phase;
|
import com.gempukku.lotro.common.Phase;
|
||||||
import com.gempukku.lotro.common.Race;
|
import com.gempukku.lotro.common.Race;
|
||||||
@@ -53,17 +53,12 @@ public class Card1_224 extends AbstractResponseOldEvent {
|
|||||||
List<Assignment> assignments = new LinkedList<Assignment>(game.getGameState().getAssignments());
|
List<Assignment> assignments = new LinkedList<Assignment>(game.getGameState().getAssignments());
|
||||||
for (Assignment assignment : assignments)
|
for (Assignment assignment : assignments)
|
||||||
game.getGameState().removeAssignment(assignment);
|
game.getGameState().removeAssignment(assignment);
|
||||||
game.getGameState().finishSkirmish();
|
|
||||||
|
|
||||||
PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
|
||||||
|
|
||||||
|
final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
||||||
action.appendEffect(
|
action.appendEffect(
|
||||||
new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul to skirmish the Ring-Bearer", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, ringBearer)) {
|
new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul to skirmish the Ring-Bearer", Race.NAZGUL, Filters.notPreventedByEffectToAssign(Side.SHADOW, ringBearer)) {
|
||||||
@Override
|
@Override
|
||||||
protected void cardSelected(LotroGame game, PhysicalCard nazgul) {
|
protected void cardSelected(LotroGame game, PhysicalCard nazgul) {
|
||||||
PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndAssignMinionToCompanionEffect(action, playerId, ringBearer, Race.NAZGUL));
|
|
||||||
action.appendEffect(
|
action.appendEffect(
|
||||||
new AddUntilStartOfPhaseActionProxyEffect(
|
new AddUntilStartOfPhaseActionProxyEffect(
|
||||||
new AbstractActionProxy() {
|
new AbstractActionProxy() {
|
||||||
@@ -79,6 +74,8 @@ public class Card1_224 extends AbstractResponseOldEvent {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}, Phase.SKIRMISH));
|
}, Phase.SKIRMISH));
|
||||||
|
action.appendEffect(
|
||||||
|
new AdditionalSkirmishPhaseEffect(ringBearer, Collections.singleton(nazgul)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,21 +4,18 @@ import com.gempukku.lotro.cards.AbstractResponseEvent;
|
|||||||
import com.gempukku.lotro.cards.PlayConditions;
|
import com.gempukku.lotro.cards.PlayConditions;
|
||||||
import com.gempukku.lotro.cards.TriggerConditions;
|
import com.gempukku.lotro.cards.TriggerConditions;
|
||||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||||
|
import com.gempukku.lotro.cards.effects.AdditionalSkirmishPhaseEffect;
|
||||||
import com.gempukku.lotro.cards.effects.ChoiceEffect;
|
import com.gempukku.lotro.cards.effects.ChoiceEffect;
|
||||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
||||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
|
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
|
||||||
import com.gempukku.lotro.common.CardType;
|
import com.gempukku.lotro.common.CardType;
|
||||||
import com.gempukku.lotro.common.Culture;
|
import com.gempukku.lotro.common.Culture;
|
||||||
import com.gempukku.lotro.common.Phase;
|
|
||||||
import com.gempukku.lotro.common.Side;
|
import com.gempukku.lotro.common.Side;
|
||||||
import com.gempukku.lotro.filters.Filters;
|
import com.gempukku.lotro.filters.Filters;
|
||||||
import com.gempukku.lotro.game.PhysicalCard;
|
import com.gempukku.lotro.game.PhysicalCard;
|
||||||
import com.gempukku.lotro.game.state.LotroGame;
|
import com.gempukku.lotro.game.state.LotroGame;
|
||||||
import com.gempukku.lotro.game.state.Skirmish;
|
|
||||||
import com.gempukku.lotro.logic.timing.Effect;
|
import com.gempukku.lotro.logic.timing.Effect;
|
||||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
|
||||||
import com.gempukku.lotro.logic.timing.actions.SkirmishPhaseAction;
|
|
||||||
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -49,20 +46,22 @@ public class Card10_019 extends AbstractResponseEvent {
|
|||||||
if (playResult.getPlayedCard().getOwner().equals(game.getGameState().getCurrentPlayerId())) {
|
if (playResult.getPlayedCard().getOwner().equals(game.getGameState().getCurrentPlayerId())) {
|
||||||
final PhysicalCard playedOn = playResult.getAttachedTo();
|
final PhysicalCard playedOn = playResult.getAttachedTo();
|
||||||
if (playedOn != null && playedOn.getBlueprint().getCardType() == CardType.COMPANION) {
|
if (playedOn != null && playedOn.getBlueprint().getCardType() == CardType.COMPANION) {
|
||||||
PlayEventAction action = new PlayEventAction(self);
|
final PlayEventAction action = new PlayEventAction(self);
|
||||||
List<Effect> possibleEffects = new LinkedList<Effect>();
|
List<Effect> possibleEffects = new LinkedList<Effect>();
|
||||||
possibleEffects.add(
|
possibleEffects.add(
|
||||||
new ChooseAndPlayCardFromDiscardEffect(playerId, game, -2, Filters.gollum) {
|
new ChooseAndPlayCardFromDiscardEffect(playerId, game, -2, Filters.gollum) {
|
||||||
@Override
|
@Override
|
||||||
protected void afterCardPlayed(PhysicalCard cardPlayed) {
|
protected void afterCardPlayed(PhysicalCard cardPlayed) {
|
||||||
gollumPlayed(game, playedOn, cardPlayed);
|
action.appendEffect(
|
||||||
|
new AdditionalSkirmishPhaseEffect(playedOn, Collections.singleton(cardPlayed)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
possibleEffects.add(
|
possibleEffects.add(
|
||||||
new ChooseAndPlayCardFromHandEffect(playerId, game, -2, Filters.gollum) {
|
new ChooseAndPlayCardFromHandEffect(playerId, game, -2, Filters.gollum) {
|
||||||
@Override
|
@Override
|
||||||
protected void afterCardPlayed(PhysicalCard cardPlayed) {
|
protected void afterCardPlayed(PhysicalCard cardPlayed) {
|
||||||
gollumPlayed(game, playedOn, cardPlayed);
|
action.appendEffect(
|
||||||
|
new AdditionalSkirmishPhaseEffect(playedOn, Collections.singleton(cardPlayed)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
action.appendEffect(
|
action.appendEffect(
|
||||||
@@ -73,34 +72,4 @@ public class Card10_019 extends AbstractResponseEvent {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void gollumPlayed(LotroGame game, PhysicalCard character, PhysicalCard gollum) {
|
|
||||||
final Phase currentPhase = game.getGameState().getCurrentPhase();
|
|
||||||
final Skirmish skirmish = game.getGameState().getSkirmish();
|
|
||||||
if (skirmish != null)
|
|
||||||
game.getGameState().finishSkirmish();
|
|
||||||
|
|
||||||
final SkirmishPhaseAction skirmishPhaseAction = new SkirmishPhaseAction(character, Collections.singleton(gollum));
|
|
||||||
// We might have to restart the skirmish, if the possession was played during it
|
|
||||||
if (skirmish != null) {
|
|
||||||
skirmishPhaseAction.appendEffect(
|
|
||||||
new UnrespondableEffect() {
|
|
||||||
@Override
|
|
||||||
protected void doPlayEffect(LotroGame game) {
|
|
||||||
game.getGameState().restartSkirmish(skirmish);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// We have to reset the phase, to whatever it was before
|
|
||||||
skirmishPhaseAction.appendEffect(
|
|
||||||
new UnrespondableEffect() {
|
|
||||||
@Override
|
|
||||||
protected void doPlayEffect(LotroGame game) {
|
|
||||||
game.getGameState().setCurrentPhase(currentPhase);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
game.getActionsEnvironment().addActionToStack(
|
|
||||||
skirmishPhaseAction);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -251,6 +251,23 @@ public class Filters {
|
|||||||
return assignableToSkirmishAgainst(assignedBySide, againstFilter, false, false);
|
return assignableToSkirmishAgainst(assignedBySide, againstFilter, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Filter notPreventedByEffectToAssign(final Side assignedBySide, final PhysicalCard againstCard) {
|
||||||
|
return new Filter() {
|
||||||
|
@Override
|
||||||
|
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||||
|
if (againstCard.getBlueprint().getSide() == Side.FREE_PEOPLE) {
|
||||||
|
Map<PhysicalCard, Set<PhysicalCard>> assignment = new HashMap<PhysicalCard, Set<PhysicalCard>>();
|
||||||
|
assignment.put(againstCard, Collections.singleton(physicalCard));
|
||||||
|
return modifiersQuerying.isValidAssignments(gameState, assignedBySide, assignment);
|
||||||
|
} else {
|
||||||
|
Map<PhysicalCard, Set<PhysicalCard>> assignment = new HashMap<PhysicalCard, Set<PhysicalCard>>();
|
||||||
|
assignment.put(physicalCard, Collections.singleton(againstCard));
|
||||||
|
return modifiersQuerying.isValidAssignments(gameState, assignedBySide, assignment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) {
|
public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) {
|
||||||
return Filters.and(
|
return Filters.and(
|
||||||
assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish),
|
assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish),
|
||||||
|
|||||||
@@ -704,9 +704,6 @@ public class IndividualCardAtTest extends AbstractAtTest {
|
|||||||
AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2);
|
AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2);
|
||||||
playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return"));
|
playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return"));
|
||||||
|
|
||||||
// Choose skirmish to resolve
|
|
||||||
playerDecided(P1, ""+_game.getGameState().getRingBearer(P1).getCardId());
|
|
||||||
|
|
||||||
assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter());
|
assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter());
|
||||||
assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size());
|
assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size());
|
||||||
assertEquals(nelya, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next());
|
assertEquals(nelya, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next());
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<pre style="font-size:80%">
|
<pre style="font-size:80%">
|
||||||
|
<b>9 Nov. 2012</b>
|
||||||
|
- "Return to Its Master" now creates an additional Skirmish Phase.
|
||||||
|
|
||||||
<b>7 Nov. 2012</b>
|
<b>7 Nov. 2012</b>
|
||||||
- "King's Board" now correctly allows to exert the named characters for the effect, if you do not control Eomer.
|
- "King's Board" now correctly allows to exert the named characters for the effect, if you do not control Eomer.
|
||||||
- Another change to Muster. Now to USE Muster, you have to click the card shadow showing above the panel used to drive
|
- Another change to Muster. Now to USE Muster, you have to click the card shadow showing above the panel used to drive
|
||||||
|
|||||||
Reference in New Issue
Block a user