"A Blended Race"
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user