"Swordarm of the White Tower

This commit is contained in:
marcins78@gmail.com
2011-09-08 15:41:51 +00:00
parent 9709f6f3b9
commit 291800c0e6
5 changed files with 93 additions and 8 deletions

View File

@@ -0,0 +1,58 @@
package com.gempukku.lotro.cards.set1.gondor;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
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.game.state.Skirmish;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Gondor
* Twilight Cost: 0
* Type: Event
* Game Text: Skirmish: Make a ranger strength +2 (or +4 when skirmishing a roaming minion).
*/
public class Card1_117 extends AbstractEvent {
public Card1_117() {
super(Side.FREE_PEOPLE, Culture.GONDOR, "Swordarm of the White Tower", Phase.SKIRMISH);
}
@Override
public PlayEventAction getPlayCardAction(String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier) {
final PlayEventAction action = new PlayEventAction(self);
action.addEffect(
new ChooseActiveCardEffect(playerId, "Choose a GONDOR companion", Filters.culture(Culture.GONDOR), Filters.type(CardType.COMPANION)) {
@Override
protected void cardSelected(PhysicalCard gondorCompanion) {
int bonus = 2;
Skirmish skirmish = game.getGameState().getSkirmish();
if (skirmish != null && skirmish.getFellowshipCharacter() == gondorCompanion
&& Filters.filter(skirmish.getShadowCharacters(), game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.ROAMING)).size() > 0)
bonus = 4;
action.addEffect(
new AddUntilEndOfPhaseModifierEffect(
new StrengthModifier(self, Filters.sameCard(gondorCompanion), bonus), Phase.SKIRMISH));
}
});
return action;
}
@Override
public int getTwilightCost() {
return 0;
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) {
return true;
}
}

View File

@@ -203,11 +203,25 @@ public class GameState {
public void removeCardFromZone(PhysicalCard card) {
Zone zone = card.getZone();
removeAllTokens(card);
boolean b = getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone).remove(card);
if (!b)
throw new RuntimeException("Card was not found in the expected zone");
for (Skirmish assignment : new LinkedList<Skirmish>(_assignments)) {
if (assignment.getFellowshipCharacter() == card)
removeAssignment(assignment);
if (assignment.getShadowCharacters().remove(card))
removeAssignment(assignment);
}
if (_skirmish != null) {
if (_skirmish.getFellowshipCharacter() == card)
_skirmish.setFellowshipCharacter(card);
_skirmish.getShadowCharacters().remove(card);
}
removeAllTokens(card);
if (isZonePublic(zone))
for (GameStateListener listener : getAllGameStateListeners())
listener.cardRemoved(card);

View File

@@ -22,6 +22,10 @@ public class Skirmish {
return _shadowCharacters;
}
public void setFellowshipCharacter(PhysicalCard fellowshipCharacter) {
_fellowshipCharacter = fellowshipCharacter;
}
public void cancel() {
_cancelled = true;
}

View File

@@ -140,7 +140,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
}
private boolean affectsCardWithSkipSet(GameState gameState, PhysicalCard physicalCard, Modifier modifier) {
if (!_skipSet.contains(modifier)) {
if (!_skipSet.contains(modifier) && physicalCard != null) {
_skipSet.add(modifier);
boolean result = modifier.affectsCard(gameState, this, physicalCard);
_skipSet.remove(modifier);

View File

@@ -60,20 +60,22 @@ public class ResolveSkirmishAction implements Action {
final GameState gameState = _game.getGameState();
PhysicalCard fp = _skirmish.getFellowshipCharacter();
int fpStrength = _game.getModifiersQuerying().getStrength(gameState, fp);
int fpStrength = 0;
if (fp != null)
fpStrength = _game.getModifiersQuerying().getStrength(gameState, fp);
int shadowStrength = 0;
for (PhysicalCard minion : _skirmish.getShadowCharacters())
shadowStrength += _game.getModifiersQuerying().getStrength(gameState, minion);
if (_game.getModifiersQuerying().isOverwhelmedByStrength(gameState, fp, fpStrength, shadowStrength))
effects.add(new OverwhelmedEffect(_skirmish.getShadowCharacters(), Collections.singletonList(fp)));
effects.add(new OverwhelmedEffect(_skirmish.getShadowCharacters(), fpList(fp)));
else if (shadowStrength >= fpStrength)
effects.add(new SkirmishResolvedEffect(_skirmish.getShadowCharacters(), Collections.singletonList(fp)));
effects.add(new SkirmishResolvedEffect(_skirmish.getShadowCharacters(), fpList(fp)));
else if (fpStrength >= 2 * shadowStrength)
effects.add(new OverwhelmedEffect(Collections.singletonList(fp), _skirmish.getShadowCharacters()));
effects.add(new OverwhelmedEffect(fpList(fp), _skirmish.getShadowCharacters()));
else
effects.add(new SkirmishResolvedEffect(Collections.singletonList(fp), _skirmish.getShadowCharacters()));
effects.add(new SkirmishResolvedEffect(fpList(fp), _skirmish.getShadowCharacters()));
effects.add(new UnrespondableEffect() {
@Override
@@ -84,4 +86,11 @@ public class ResolveSkirmishAction implements Action {
return effects.iterator();
}
private List<PhysicalCard> fpList(PhysicalCard card) {
if (card != null)
return Collections.singletonList(card);
else
return Collections.emptyList();
}
}