The Short Rest: Troll culture

This commit is contained in:
PhallenCassidy
2016-11-30 13:00:50 -05:00
committed by GitHub
parent 523a94ea70
commit 05871417dc
5 changed files with 318 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
package com.gempukku.lotro.cards.set31.troll;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.PreventableEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.ResistanceModifier;
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.OptionalTriggerAction;
import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.CantBeAssignedToSkirmishModifier;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Set: The Short Rest
* Side: Shadow
* Culture: Troll
* Twilight Cost: 0
* Type: Condition • Support Area
* Game Text: At the start of each assignment phase, you may discard a minion (or exert
* a [TROLL] Troll) to spot a [DWARVEN] or [SHIRE] companion. That companion cannot be
* assigned to a skirmish. Bilbo may exert twice to prevent this.
*/
public class Card31_065 extends AbstractPermanent {
public Card31_065() {
super(Side.SHADOW, 0, CardType.CONDITION, Culture.TROLL, Zone.SUPPORT, "Caught in a Sack");
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ASSIGNMENT)
&& (PlayConditions.canExert(self, game, 1, Culture.TROLL, Race.TROLL) || PlayConditions.canDiscardFromPlay(self, game, CardType.MINION))) {
final OptionalTriggerAction action = new OptionalTriggerAction(self);
List<Effect> possibleCosts = new LinkedList<Effect>();
possibleCosts.add(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 1, Culture.TROLL, Race.TROLL) {
@Override
public String getText(LotroGame game) {
return "Exert a [TROLL] Troll";
}
});
possibleCosts.add(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.MINION) {
@Override
public String getText(LotroGame game) {
return "Discard a minion";
}
});
action.appendCost(
new ChoiceEffect(action, playerId, possibleCosts));
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose a [DWARVEN] or [SHIRE] companion", CardType.COMPANION, Filters.or(Culture.DWARVEN, Culture.SHIRE)) {
@Override
protected void cardSelected(LotroGame game, final PhysicalCard card) {
action.appendEffect(new PreventableEffect(
action,
new AddUntilEndOfTurnModifierEffect(new CantBeAssignedToSkirmishModifier(self, card)),
Collections.singletonList(game.getGameState().getCurrentPlayerId()),
new PreventableEffect.PreventionCost() {
@Override
public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) {
return new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 2, Filters.name("Bilbo"));
}
}));
}
});
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,74 @@
package com.gempukku.lotro.cards.set31.troll;
import com.gempukku.lotro.cards.AbstractMinion;
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.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
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.OptionalTriggerAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Short Rest
* Side: Shadow
* Culture: Troll
* Twilight Cost: 5
* Type: Minion • Troll
* Strength: 11
* Vitality: 4
* Site: 2
* Game Text: Fierce. To play, discard an Orc. The twilight cost of each Troll is -2. Each time a companion loses
* a skirmish, each Troll is strength +1 until the regroup phase.
*/
public class Card31_066 extends AbstractMinion {
public Card31_066() {
super(5, 11, 4, 2, Race.TROLL, Culture.TROLL, "Tom", "Troll of Ettenmoors", true);
addKeyword(Keyword.FIERCE);
}
@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.canDiscardFromPlay(self, game, Race.ORC);
}
@Override
public PlayPermanentAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayPermanentAction playCardAction = super.getPlayCardAction(playerId, game, self, twilightModifier, ignoreRoamingPenalty);
playCardAction.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(playCardAction, playerId, 1, 1, Race.ORC));
return playCardAction;
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new TwilightCostModifier(self, Race.TROLL, -2));
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.losesSkirmish(game, effectResult, CardType.COMPANION)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new StrengthModifier(self, Race.TROLL, 1), Phase.REGROUP));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,45 @@
package com.gempukku.lotro.cards.set31.troll;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
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.effects.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.logic.timing.Action;
import java.util.Collections;
import java.util.List;
/**
* Set: The Main Deck
* Side: Shadow
* Culture: Troll
* Twilight Cost: 2
* Type: Condition
* Game Text: Plays to your support area. Shadow: Discard 2 cards from hand to play a minion from your discard
* pile.
*/
public class Card31_067 extends AbstractPermanent {
public Card31_067() {
super(Side.SHADOW, 2, CardType.CONDITION, Culture.TROLL, Zone.SUPPORT, "Troll Campfire", null, true);
}
@Override
public List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& game.getGameState().getHand(playerId).size() >= 2
// You have to be able to play an Orc from discard to use it
&& PlayConditions.canPlayFromDiscard(playerId, game, CardType.MINION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2));
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, CardType.MINION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,42 @@
package com.gempukku.lotro.cards.set31.troll;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import java.util.LinkedList;
import java.util.List;
/**
* Set: The Short Rest
* Side: Shadow
* Culture: Troll
* Twilight Cost: 1
* Type: Possession • Hand Weapon
* Strength: +3
* Game Text: Bearer must be a Troll. Bearer is damage +1.
*/
public class Card31_068 extends AbstractAttachable {
public Card31_068() {
super(Side.SHADOW, CardType.POSSESSION, 1, Culture.TROLL, PossessionClass.HAND_WEAPON, "Troll Knife");
}
@Override
protected Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Race.TROLL;
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(new StrengthModifier(self, Filters.hasAttached(self), 3));
modifiers.add(new KeywordModifier(self, Filters.hasAttached(self), Keyword.DAMAGE));
return modifiers;
}
}

View File

@@ -0,0 +1,73 @@
package com.gempukku.lotro.cards.set31.troll;
import com.gempukku.lotro.cards.AbstractMinion;
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.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
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.GameUtils;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Short Rest
* Side: Shadow
* Culture: Troll
* Twilight Cost: 5
* Type: Minion • Troll
* Strength: 11
* Vitality: 4
* Site: 2
* Game Text: Fierce. To play, discard an Orc. The twilight cost of each Troll is -2. Each time the Free Peoples
* player transfers a follower, you may discard a hand weapon.
*/
public class Card31_069 extends AbstractMinion {
public Card31_069() {
super(5, 11, 4, 2, Race.TROLL, Culture.TROLL, "William", "Troll of Ettenmoors", true);
addKeyword(Keyword.FIERCE);
}
@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.canDiscardFromPlay(self, game, Race.ORC);
}
@Override
public PlayPermanentAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayPermanentAction playCardAction = super.getPlayCardAction(playerId, game, self, twilightModifier, ignoreRoamingPenalty);
playCardAction.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(playCardAction, playerId, 1, 1, Race.ORC));
return playCardAction;
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new TwilightCostModifier(self, Race.TROLL, -2));
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
final String firstShadowPlayer = GameUtils.getFirstShadowPlayer(game);
if (TriggerConditions.transferredCard(game, effectResult, CardType.FOLLOWER, null, Filters.character)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, PossessionClass.HAND_WEAPON));
return Collections.singletonList(action);
}
return null;
}
}