"A Shadow Rises"
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package com.gempukku.lotro.cards.effects;
|
||||
|
||||
import com.gempukku.lotro.common.Zone;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.timing.AbstractEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class TransferToShadowEffect extends AbstractEffect {
|
||||
private PhysicalCard _card;
|
||||
|
||||
public TransferToShadowEffect(PhysicalCard card) {
|
||||
_card = card;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayableInFull(LotroGame game) {
|
||||
return _card.getZone().isInPlay();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(LotroGame game) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Effect.Type getType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FullEffectResult playEffectReturningResult(LotroGame game) {
|
||||
if (isPlayableInFull(game)) {
|
||||
game.getGameState().removeCardsFromZone(_card.getOwner(), Collections.singleton(_card));
|
||||
game.getGameState().addCardToZone(game, _card, Zone.SHADOW_CHARACTERS);
|
||||
cardTransferredCallback();
|
||||
return new FullEffectResult(true, true);
|
||||
}
|
||||
return new FullEffectResult(false, false);
|
||||
}
|
||||
|
||||
protected void cardTransferredCallback() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.gempukku.lotro.cards.modifiers;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
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 IsAdditionalCardTypeModifier extends AbstractModifier {
|
||||
private CardType _cardType;
|
||||
|
||||
public IsAdditionalCardTypeModifier(PhysicalCard source, Filterable affectFilter, CardType cardType) {
|
||||
this(source, affectFilter, null, cardType);
|
||||
}
|
||||
|
||||
public IsAdditionalCardTypeModifier(PhysicalCard source, Filterable affectFilter, Condition condition, CardType cardType) {
|
||||
super(source, "Has additional card type - " + cardType.toString(), affectFilter, condition, ModifierEffect.ADDITIONAL_CARD_TYPE);
|
||||
_cardType = cardType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAdditionalCardTypeModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, CardType cardType) {
|
||||
return cardType == _cardType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package com.gempukku.lotro.cards.set11.wraith;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.cards.effects.TransferToShadowEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.MayNotBearModifier;
|
||||
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.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Card11_216 extends AbstractPermanent {
|
||||
public Card11_216() {
|
||||
super(Side.SHADOW, 0, CardType.CONDITION, Culture.WRAITH, Zone.SUPPORT, "A Shadow Rises");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 5)
|
||||
&& self.getZone() == Zone.SUPPORT) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new RemoveTwilightEffect(5));
|
||||
action.appendEffect(
|
||||
new DiscardCardsFromPlayEffect(self, Filters.attachedTo(self)));
|
||||
action.appendEffect(
|
||||
new TransferToShadowEffect(self) {
|
||||
@Override
|
||||
protected void cardTransferredCallback() {
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new KeywordModifier(self, self, Keyword.FIERCE), Phase.MANEUVER));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new MayNotBearModifier(self, self, Filters.any), Phase.MANEUVER));
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
for (Map.Entry<Token, Integer> tokenCount : game.getGameState().getTokens(self).entrySet()) {
|
||||
if (tokenCount.getValue() > 0)
|
||||
game.getGameState().removeTokens(self, tokenCount.getKey(), tokenCount.getValue());
|
||||
}
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStrength() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVitality() {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
@@ -634,7 +634,8 @@ public class Filters {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (physicalCard.getBlueprint().getCardType() == cardType);
|
||||
return (physicalCard.getBlueprint().getCardType() == cardType)
|
||||
|| modifiersQuerying.isAdditionalCardType(gameState, physicalCard, cardType);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -111,6 +111,11 @@ public abstract class AbstractModifier implements Modifier {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAdditionalCardTypeModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, CardType cardType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean ignoreRoamingPenalty) {
|
||||
return 0;
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.gempukku.lotro.logic.modifiers;
|
||||
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.common.Signet;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
@@ -47,6 +44,8 @@ public interface Modifier {
|
||||
|
||||
public int getMinionSiteNumberModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard);
|
||||
|
||||
public boolean isAdditionalCardTypeModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, CardType cardType);
|
||||
|
||||
public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean ignoreRoamingPenalty);
|
||||
|
||||
public int getPlayOnTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, PhysicalCard target);
|
||||
|
||||
@@ -10,5 +10,7 @@ public enum ModifierEffect {
|
||||
|
||||
SPECIAL_FLAG_MODIFIER,
|
||||
|
||||
ADDITIONAL_CARD_TYPE,
|
||||
|
||||
REMOVE_KEYWORD_MODIFIER, GIVE_KEYWORD_MODIFIER, CANCEL_KEYWORD_BONUS_MODIFIER
|
||||
}
|
||||
|
||||
@@ -427,6 +427,19 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAdditionalCardType(GameState gameState, PhysicalCard card, CardType cardType) {
|
||||
LoggingThreadLocal.logMethodStart(card, "isAdditionalCardType");
|
||||
try {
|
||||
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.ADDITIONAL_CARD_TYPE, card))
|
||||
if (modifier.isAdditionalCardTypeModifier(gameState, this, card, cardType))
|
||||
return true;
|
||||
return false;
|
||||
} finally {
|
||||
LoggingThreadLocal.logMethodEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeWound(GameState gameState, PhysicalCard card) {
|
||||
LoggingThreadLocal.logMethodStart(card, "canTakeWound");
|
||||
@@ -453,9 +466,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
finally
|
||||
} finally
|
||||
|
||||
{
|
||||
LoggingThreadLocal.logMethodEnd();
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.gempukku.lotro.logic.modifiers;
|
||||
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.common.Signet;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
@@ -53,6 +50,8 @@ public interface ModifiersQuerying {
|
||||
|
||||
public int getOverwhelmMultiplier(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean isAdditionalCardType(GameState gameState, PhysicalCard card, CardType cardType);
|
||||
|
||||
// Wounds/exertions
|
||||
public boolean canTakeWound(GameState gameState, PhysicalCard card);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user