"Fall of Free Peoples"

This commit is contained in:
marcins78
2013-02-07 11:27:53 +00:00
parent 120ae16f7f
commit 893ef493ca
10 changed files with 120 additions and 4 deletions

View File

@@ -8,6 +8,7 @@ import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.PhysicalCardVisitor;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.GameUtils;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
@@ -223,6 +224,10 @@ public class PlayConditions {
return game.getGameState().getBurdens() >= count;
}
public static boolean canSpotFPCultures(LotroGame game, int count, String playerId) {
return GameUtils.getSpottableFPCulturesCount(game.getGameState(), game.getModifiersQuerying(), playerId)>=count;
}
public static boolean hasInitiative(LotroGame game, Side side) {
return game.getModifiersQuerying().hasInitiative(game.getGameState()) == side;
}

View File

@@ -0,0 +1,30 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class FPCulturesSpotCountModifier extends AbstractModifier {
private String _playerId;
private int _modifier;
public FPCulturesSpotCountModifier(PhysicalCard source, String playerId, int modifier) {
this(source, playerId, null, modifier);
}
public FPCulturesSpotCountModifier(PhysicalCard source, String playerId, Condition condition, int modifier) {
super(source, "Modifies FP culture count", null, condition, ModifierEffect.SPOT_MODIFIER);
_playerId = playerId;
_modifier = modifier;
}
@Override
public int getFPCulturesSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId) {
if (playerId.equals(_playerId))
return _modifier;
return 0;
}
}

View File

@@ -5,11 +5,11 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.PreventableEffect;
import com.gempukku.lotro.cards.effects.SelfExertEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CountCulturesEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.GameUtils;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.effects.AddThreatsEffect;
@@ -37,7 +37,7 @@ public class Card20_350 extends AbstractMinion {
@Override
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) {
return new CountCulturesEvaluator(Side.FREE_PEOPLE).evaluateExpression(gameState, modifiersQuerying, null);
return GameUtils.getSpottableFPCulturesCount(gameState, modifiersQuerying, self.getOwner());
}
@Override

View File

@@ -5,7 +5,6 @@ import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.actions.PlayPermanentAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.evaluator.CountCulturesEvaluator;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
@@ -44,7 +43,7 @@ public class Card20_355 extends AbstractPermanent {
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.moves(game, effectResult)
&& new CountCulturesEvaluator(Side.FREE_PEOPLE).evaluateExpression(game.getGameState(), game.getModifiersQuerying(), null)<3) {
&& !PlayConditions.canSpotFPCultures(game, 3, self.getOwner())) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddTwilightEffect(self, 1));

View File

@@ -0,0 +1,40 @@
package com.gempukku.lotro.cards.set20.sauron;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.FPCulturesSpotCountModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
/**
* 2
* Fall of Free Peoples
* Sauron Event • Maneuver
* To play, exert a [Sauron] Orc. Until the regroup phase, the number of Free Peoples cultures you can spot is -1.
*/
public class Card20_356 extends AbstractEvent {
public Card20_356() {
super(Side.SHADOW, 2, Culture.SAURON, "Fall of Free Peoples", Phase.MANEUVER);
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canExert(self, game, Culture.SAURON, Race.ORC);
}
@Override
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new FPCulturesSpotCountModifier(self, playerId, -1), Phase.REGROUP));
return action;
}
}

View File

@@ -114,4 +114,8 @@ public class GameUtils {
public static int getRegion(int siteNumber) {
return 1 + ((siteNumber - 1) / 3);
}
public static int getSpottableFPCulturesCount(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId) {
return modifiersQuerying.getNumberOfSpottableFPCultures(gameState, playerId);
}
}

View File

@@ -358,4 +358,14 @@ public abstract class AbstractModifier implements Modifier {
public Evaluator getFpSkirmishStrengthOverrideEvaluator(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard fpCharacter) {
return null;
}
@Override
public boolean canSpotCulture(GameState gameState, ModifiersQuerying modifiersQuerying, Culture culture, String playerId) {
return true;
}
@Override
public int getFPCulturesSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId) {
return 0;
}
}

View File

@@ -143,4 +143,8 @@ public interface Modifier {
public boolean lostAllKeywords(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
Evaluator getFpSkirmishStrengthOverrideEvaluator(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard fpCharacter);
public boolean canSpotCulture(GameState gameState, ModifiersQuerying modifiersQuerying, Culture culture, String playerId);
public int getFPCulturesSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId);
}

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -974,6 +975,27 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
return true;
}
@Override
public int getNumberOfSpottableFPCultures(GameState gameState, String playerId) {
Set<Culture> spottableCulturesBasedOnCards = new HashSet<Culture>();
for (PhysicalCard spottableFPCard : Filters.filterActive(gameState, this, Side.FREE_PEOPLE, Filters.spottable)) {
final Culture fpCulture = spottableFPCard.getBlueprint().getCulture();
if (fpCulture != null)
spottableCulturesBasedOnCards.add(fpCulture);
}
int result = 0;
for (Culture spottableCulturesBasedOnCardsOnCard : spottableCulturesBasedOnCards)
for (Modifier modifier : getModifiers(gameState, ModifierEffect.SPOT_MODIFIER))
if (modifier.canSpotCulture(gameState, this, spottableCulturesBasedOnCardsOnCard, playerId))
result++;
for (Modifier modifier : getModifiers(gameState, ModifierEffect.SPOT_MODIFIER))
result += modifier.getFPCulturesSpotCountModifier(gameState, this, playerId);
return result;
}
@Override
public int getSpotBonus(GameState gameState, Filterable filter) {
int result = 0;

View File

@@ -139,6 +139,8 @@ public interface ModifiersQuerying {
public boolean canBeSpotted(GameState gameState, PhysicalCard card);
public int getNumberOfSpottableFPCultures(GameState gameState, String playerId);
public int getSpotBonus(GameState gameState, Filterable filter);
public boolean hasFlagActive(GameState gameState, ModifierFlag modifierFlag);