"A Blended Race"

This commit is contained in:
marcins78@gmail.com
2011-09-26 14:50:51 +00:00
parent 43f861c1ed
commit e9558d7709
8 changed files with 132 additions and 0 deletions

View File

@@ -56,6 +56,14 @@ public class ProxyingModifier implements Modifier {
return false;
}
@Override
public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) {
Modifier modifier = getProxiedModifier(gameState, modifiersQuerying);
if (modifier != null)
return modifier.isKeywordRemoved(gameState, modifiersQuerying, physicalCard, keyword);
return false;
}
@Override
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) {
Modifier modifier = getProxiedModifier(gameState, modifiersQuerying);

View File

@@ -0,0 +1,61 @@
package com.gempukku.lotro.cards.set2.elven;
import com.gempukku.lotro.cards.AbstractPermanent;
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.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.CompositeModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.RemoveKeywordModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Set: Mines of Moria
* Side: Free
* Culture: Elven
* Twilight Cost: 1
* Type: Condition
* Game Text: To play, spot an Elf. Plays to your support area. Each Uruk-hai is strength -2 and loses all damage
* bonuses. Discard this condition during the regroup phase.
*/
public class Card2_016 extends AbstractPermanent {
public Card2_016() {
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.ELVEN, Zone.FREE_SUPPORT, "A Blended Race");
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) {
return super.checkPlayRequirements(playerId, game, self, twilightModifier)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ELF));
}
@Override
public Modifier getAlwaysOnEffect(PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new StrengthModifier(null, null, -2));
modifiers.add(
new RemoveKeywordModifier(null, null, Keyword.DAMAGE));
return new CompositeModifier(self, Filters.race(Race.URUK_HAI), modifiers);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.START_OF_PHASE
&& game.getGameState().getCurrentPhase() == Phase.REGROUP) {
RequiredTriggerAction action = new RequiredTriggerAction(self, null, "Discard this condition");
action.appendEffect(
new DiscardCardsFromPlayEffect(self, self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -44,6 +44,11 @@ public abstract class AbstractModifier implements Modifier {
return _affectFilter != null && _affectFilter.accepts(gameState, modifiersQuerying, physicalCard);
}
@Override
public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) {
return false;
}
@Override
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) {
return result;

View File

@@ -60,6 +60,15 @@ public class CompositeModifier implements Modifier {
return _affectFilter.accepts(gameState, modifiersQuerying, physicalCard);
}
@Override
public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) {
for (Modifier modifier : _modifiers)
if (modifier.isKeywordRemoved(gameState, modifiersQuerying, physicalCard, keyword))
return true;
return false;
}
@Override
public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) {
for (Modifier modifier : _modifiers)

View File

@@ -23,6 +23,8 @@ public interface Modifier {
public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result);
public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword);
public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result);
public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, boolean result);

View File

@@ -156,7 +156,19 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
@Override
public boolean hasKeyword(GameState gameState, PhysicalCard physicalCard, Keyword keyword) {
for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
return false;
}
for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
return false;
}
boolean result = physicalCard.getBlueprint().hasKeyword(keyword);
for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.hasKeyword(gameState, this, physicalCard, keyword, result);
@@ -170,6 +182,17 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
@Override
public int getKeywordCount(GameState gameState, PhysicalCard physicalCard, Keyword keyword) {
for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
return 0;
}
for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
return 0;
}
int result = physicalCard.getBlueprint().getKeywordCount(keyword);
for (Modifier modifier : getModifiers(ModifierEffect.KEYWORD_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))

View File

@@ -0,0 +1,20 @@
package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
public class RemoveKeywordModifier extends AbstractModifier {
private Keyword _keyword;
public RemoveKeywordModifier(PhysicalCard physicalCard, Filter affectFilter, Keyword keyword) {
super(physicalCard, "Loses " + keyword.getHumanReadable() + "keyword(s)", affectFilter, new ModifierEffect[]{ModifierEffect.KEYWORD_MODIFIER});
_keyword = keyword;
}
@Override
public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword) {
return _keyword == keyword;
}
}

View File

@@ -1,4 +1,8 @@
<pre style="font-size:80%">
26 Sept. 2011
- Changed the cost-to-effect actions to follow the "do as much as possible" route, rathern than can/can't do.
- Only the site where the fellowship currently is, has its text affecting game.
24 Sept. 2011
- Visually separated Free People and Shadow cards in deck builder.
- Game no longer freezes when FP overwhelms minions in skirmish.