Migrated Dwarven cards in set 12 to hjson
This commit is contained in:
@@ -1,60 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.actions.PlayEventAction;
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
|
||||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseOpponentEffect;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 0
|
|
||||||
* Type: Event • Maneuver
|
|
||||||
* Game Text: Spot a Dwarf to choose a Shadow player who must spot a race. Discard from play all minions of all other
|
|
||||||
* races.
|
|
||||||
*/
|
|
||||||
public class Card12_001 extends AbstractEvent {
|
|
||||||
public Card12_001() {
|
|
||||||
super(Side.FREE_PEOPLE, 0, Culture.DWARVEN, "Argument Ready to Hand", Phase.MANEUVER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
|
||||||
return PlayConditions.canSpot(game, Race.DWARF);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlayEventAction getPlayEventCardAction(final String playerId, final LotroGame game, final PhysicalCard self) {
|
|
||||||
final Filter hasRace = new Filter() {
|
|
||||||
@Override
|
|
||||||
public boolean accepts(LotroGame game, PhysicalCard physicalCard) {
|
|
||||||
return physicalCard.getBlueprint().getRace() != null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
final PlayEventAction action = new PlayEventAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseOpponentEffect(playerId) {
|
|
||||||
@Override
|
|
||||||
protected void opponentChosen(String opponentId) {
|
|
||||||
action.insertEffect(
|
|
||||||
new ChooseActiveCardEffect(self, opponentId, "Choose character with a race you wish to spare", Filters.character, hasRace) {
|
|
||||||
@Override
|
|
||||||
protected void cardSelected(LotroGame game, PhysicalCard card) {
|
|
||||||
action.insertEffect(
|
|
||||||
new DiscardCardsFromPlayEffect(self.getOwner(), self, hasRace, CardType.MINION, Filters.not(card.getBlueprint().getRace())));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.cardtype.AbstractAttachableFPPossession;
|
|
||||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndTransferAttachableEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.RemoveKeywordModifier;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 0
|
|
||||||
* Type: Possession • Armor
|
|
||||||
* Game Text: Bearer must be a Dwarf. Each minion skirmishing bearer loses all damage bonus. Skirmish: Discard this
|
|
||||||
* possession to transfer one of bearer's possessions to another eligible bearer.
|
|
||||||
*/
|
|
||||||
public class Card12_002 extends AbstractAttachableFPPossession {
|
|
||||||
public Card12_002() {
|
|
||||||
super(0, 0, 0, Culture.DWARVEN, PossessionClass.ARMOR, "Belt of Erebor");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
return Race.DWARF;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
return Collections.singletonList(
|
|
||||||
new RemoveKeywordModifier(self, Filters.inSkirmishAgainst(Filters.hasAttached(self)), Keyword.DAMAGE));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
|
||||||
&& PlayConditions.canSelfDiscard(self, game)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new SelfDiscardEffect(self));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndTransferAttachableEffect(action, playerId, CardType.POSSESSION, self.getAttachedTo(), Filters.any));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.common.CardType;
|
|
||||||
import com.gempukku.lotro.common.Culture;
|
|
||||||
import com.gempukku.lotro.common.Race;
|
|
||||||
import com.gempukku.lotro.common.Side;
|
|
||||||
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.cardtype.AbstractPermanent;
|
|
||||||
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.condition.CardPlayedInCurrentPhaseCondition;
|
|
||||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 2
|
|
||||||
* Type: Condition • Support Area
|
|
||||||
* Game Text: Each time a Dwarf wins a skirmish in which you played a [DWARVEN] event, you may draw a card.
|
|
||||||
*/
|
|
||||||
public class Card12_003 extends AbstractPermanent {
|
|
||||||
public Card12_003() {
|
|
||||||
super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.DWARVEN, "A Clamour of Many Voices");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
|
||||||
if (TriggerConditions.winsSkirmish(game, effectResult, Race.DWARF)
|
|
||||||
&& new CardPlayedInCurrentPhaseCondition(Filters.owner(playerId), Culture.DWARVEN, CardType.EVENT).isFullfilled(game)) {
|
|
||||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new DrawCardsEffect(action, playerId, 1));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.PlayEventAction;
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
|
||||||
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 0
|
|
||||||
* Type: Event • Skirmish
|
|
||||||
* Game Text: Make a Dwarf strength +2. Then, if that Dwarf is at a battleground or mountain site, draw a card.
|
|
||||||
*/
|
|
||||||
public class Card12_004 extends AbstractEvent {
|
|
||||||
public Card12_004() {
|
|
||||||
super(Side.FREE_PEOPLE, 0, Culture.DWARVEN, "Durability", Phase.SKIRMISH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
PlayEventAction action = new PlayEventAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 2, Race.DWARF));
|
|
||||||
if (PlayConditions.location(game, Filters.or(Keyword.BATTLEGROUND, Keyword.MOUNTAIN)))
|
|
||||||
action.appendEffect(
|
|
||||||
new DrawCardsEffect(action, playerId, 1));
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.cardtype.AbstractPermanent;
|
|
||||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.evaluator.CardMatchesEvaluator;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 3
|
|
||||||
* Type: Condition • Support Area
|
|
||||||
* Game Text: Toil 2. (For each [DWARVEN] character you exert when playing this, its twilight cost is -2)
|
|
||||||
* Skirmish: Discard this condition to make a Dwarf strength +3 (or +4 if he has resistance 4 or more).
|
|
||||||
*/
|
|
||||||
public class Card12_006 extends AbstractPermanent {
|
|
||||||
public Card12_006() {
|
|
||||||
super(Side.FREE_PEOPLE, 3, CardType.CONDITION, Culture.DWARVEN, "Dwarven Skill");
|
|
||||||
addKeyword(Keyword.TOIL, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
|
||||||
&& PlayConditions.canSelfDiscard(self, game)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new SelfDiscardEffect(self));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, new CardMatchesEvaluator(3, 4, Filters.minResistance(4)), Race.DWARF));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
|
||||||
import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseOpponentEffect;
|
|
||||||
import com.gempukku.lotro.common.Culture;
|
|
||||||
import com.gempukku.lotro.common.Phase;
|
|
||||||
import com.gempukku.lotro.common.Race;
|
|
||||||
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.timing.EffectResult;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 2
|
|
||||||
* Type: Companion • Dwarf
|
|
||||||
* Strength: 6
|
|
||||||
* Vitality: 3
|
|
||||||
* Resistance: 6
|
|
||||||
* Game Text: When you play this companion during the fellowship phase, choose a Shadow player who must discard the
|
|
||||||
* top 2 cards of his or her draw deck.
|
|
||||||
*/
|
|
||||||
public class Card12_007 extends AbstractCompanion {
|
|
||||||
public Card12_007() {
|
|
||||||
super(2, 6, 3, 6, Culture.DWARVEN, Race.DWARF, null, "Dwarven Warrior");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
|
||||||
if (TriggerConditions.played(game, effectResult, self)
|
|
||||||
&& PlayConditions.isPhase(game, Phase.FELLOWSHIP)) {
|
|
||||||
final RequiredTriggerAction action = new RequiredTriggerAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseOpponentEffect(game.getGameState().getCurrentPlayerId()) {
|
|
||||||
@Override
|
|
||||||
protected void opponentChosen(String opponentId) {
|
|
||||||
action.appendEffect(
|
|
||||||
new DiscardTopCardFromDeckEffect(self, opponentId, 2, true));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.cardtype.AbstractPermanent;
|
|
||||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 1
|
|
||||||
* Type: Condition • Support Area
|
|
||||||
* Game Text: Skirmish: Discard this condition to make a Dwarf strength +1 for each of the following that is true:
|
|
||||||
* he is at a mountain or underground site; he has resistance 3 or more; he is bearing a possession; he is skirmishing
|
|
||||||
* a fierce minion.
|
|
||||||
*/
|
|
||||||
public class Card12_008 extends AbstractPermanent {
|
|
||||||
public Card12_008() {
|
|
||||||
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.DWARVEN, "His Father's Charge");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, final LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
|
||||||
&& PlayConditions.canSelfDiscard(self, game)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new SelfDiscardEffect(self));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
|
|
||||||
new Evaluator() {
|
|
||||||
@Override
|
|
||||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
|
||||||
int bonus = 0;
|
|
||||||
if (PlayConditions.location(game, Filters.or(Keyword.MOUNTAIN, Keyword.UNDERGROUND)))
|
|
||||||
bonus++;
|
|
||||||
if (Filters.minResistance(3).accepts(game, cardAffected))
|
|
||||||
bonus++;
|
|
||||||
if (Filters.hasAttached(CardType.POSSESSION).accepts(game, cardAffected))
|
|
||||||
bonus++;
|
|
||||||
if (Filters.inSkirmishAgainst(CardType.MINION, Keyword.FIERCE).accepts(game, cardAffected))
|
|
||||||
bonus++;
|
|
||||||
return bonus;
|
|
||||||
}
|
|
||||||
}, Race.DWARF));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.cardtype.AbstractPermanent;
|
|
||||||
import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 1
|
|
||||||
* Type: Condition • Support Area
|
|
||||||
* Game Text: Skirmish: Discard a [DWARVEN] card from hand and spot a minion skirmishing a Dwarf to make that minion
|
|
||||||
* fierce until the regroup phase.
|
|
||||||
*/
|
|
||||||
public class Card12_009 extends AbstractPermanent {
|
|
||||||
public Card12_009() {
|
|
||||||
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.DWARVEN, "Loud and Strong");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
|
||||||
&& PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.DWARVEN)
|
|
||||||
&& PlayConditions.canSpot(game, CardType.MINION, Filters.inSkirmishAgainst(Race.DWARF))) {
|
|
||||||
final ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.DWARVEN));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseActiveCardEffect(self, playerId, "Choose a minion", CardType.MINION, Filters.inSkirmishAgainst(Race.DWARF)) {
|
|
||||||
@Override
|
|
||||||
protected void cardSelected(LotroGame game, PhysicalCard card) {
|
|
||||||
action.appendEffect(
|
|
||||||
new AddUntilStartOfPhaseModifierEffect(
|
|
||||||
new KeywordModifier(self, card, Keyword.FIERCE), Phase.REGROUP));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.common.*;
|
|
||||||
import com.gempukku.lotro.game.PhysicalCard;
|
|
||||||
import com.gempukku.lotro.game.state.LotroGame;
|
|
||||||
import com.gempukku.lotro.logic.actions.PlayEventAction;
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
|
||||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
|
||||||
import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision;
|
|
||||||
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 4
|
|
||||||
* Type: Event • Fellowship
|
|
||||||
* Game Text: Toil 2. (For each [DWARVEN] character you exert when playing this, its twilight cost is -2) Spot 2 Dwarves
|
|
||||||
* to draw up to 4 cards.
|
|
||||||
*/
|
|
||||||
public class Card12_010 extends AbstractEvent {
|
|
||||||
public Card12_010() {
|
|
||||||
super(Side.FREE_PEOPLE, 4, Culture.DWARVEN, "No Pauses, No Spills", Phase.FELLOWSHIP);
|
|
||||||
addKeyword(Keyword.TOIL, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
|
|
||||||
return PlayConditions.canSpot(game, 2, Race.DWARF);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlayEventAction getPlayEventCardAction(final String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
final PlayEventAction action = new PlayEventAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new PlayoutDecisionEffect(playerId,
|
|
||||||
new IntegerAwaitingDecision(1, "Choose number of cards to draw", 1, 4, 4) {
|
|
||||||
@Override
|
|
||||||
public void decisionMade(String result) throws DecisionResultInvalidException {
|
|
||||||
int count = getValidatedResult(result);
|
|
||||||
action.appendEffect(
|
|
||||||
new DrawCardsEffect(action, playerId, count));
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.cardtype.AbstractPermanent;
|
|
||||||
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 2
|
|
||||||
* Type: Condition • Support Area
|
|
||||||
* Game Text: Each Dwarf is damage +1 for each possession he bears. Fellowship: Discard this condition to play
|
|
||||||
* a [DWARVEN] possession from your discard pile.
|
|
||||||
*/
|
|
||||||
public class Card12_012 extends AbstractPermanent {
|
|
||||||
public Card12_012() {
|
|
||||||
super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.DWARVEN, "Proud and Able", null, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public java.util.List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
return java.util.Collections.singletonList(new KeywordModifier(self, Race.DWARF, null, Keyword.DAMAGE,
|
|
||||||
new Evaluator() {
|
|
||||||
@Override
|
|
||||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
|
||||||
return Filters.countActive(game, CardType.POSSESSION, Filters.attachedTo(cardAffected));
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)
|
|
||||||
&& PlayConditions.canSelfDiscard(self, game)
|
|
||||||
&& PlayConditions.canPlayFromDiscard(playerId, game, Culture.DWARVEN, CardType.POSSESSION)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new SelfDiscardEffect(self));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.DWARVEN, CardType.POSSESSION));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
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.PlayEventAction;
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 0
|
|
||||||
* Type: Event • Skirmish
|
|
||||||
* Game Text: Make a Dwarf strength +2 (or +2 for each possession he bears if he has resistance 4 or more).
|
|
||||||
*/
|
|
||||||
public class Card12_013 extends AbstractEvent {
|
|
||||||
public Card12_013() {
|
|
||||||
super(Side.FREE_PEOPLE, 0, Culture.DWARVEN, "Sharp Defense", Phase.SKIRMISH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
PlayEventAction action = new PlayEventAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
|
|
||||||
new Evaluator() {
|
|
||||||
@Override
|
|
||||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
|
||||||
if (game.getModifiersQuerying().getResistance(game, cardAffected) >= 4) {
|
|
||||||
return 2 * Filters.countActive(game, CardType.POSSESSION, Filters.attachedTo(cardAffected));
|
|
||||||
} else {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, Race.DWARF));
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.common.*;
|
|
||||||
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.cardtype.AbstractPermanent;
|
|
||||||
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 0
|
|
||||||
* Type: Condition • Support Area
|
|
||||||
* Game Text: Each Dwarf gains muster. (At the start of the regroup phase, you may discard a card from hand to draw
|
|
||||||
* a card.) Each time the fellowship moves from a plains site, discard a card from your hand.
|
|
||||||
*/
|
|
||||||
public class Card12_014 extends AbstractPermanent {
|
|
||||||
public Card12_014() {
|
|
||||||
super(Side.FREE_PEOPLE, 0, CardType.CONDITION, Culture.DWARVEN, "Stalwart Support");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
return Collections.singletonList(new KeywordModifier(self, Race.DWARF, Keyword.MUSTER));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
|
||||||
if (TriggerConditions.movesFrom(game, effectResult, Keyword.PLAINS)) {
|
|
||||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndDiscardCardsFromHandEffect(action, self.getOwner(), true, 1));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set12.dwarven;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.common.CardType;
|
|
||||||
import com.gempukku.lotro.common.Culture;
|
|
||||||
import com.gempukku.lotro.common.Keyword;
|
|
||||||
import com.gempukku.lotro.common.Race;
|
|
||||||
import com.gempukku.lotro.filters.Filters;
|
|
||||||
import com.gempukku.lotro.game.PhysicalCard;
|
|
||||||
import com.gempukku.lotro.game.state.LotroGame;
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: Black Rider
|
|
||||||
* Side: Free
|
|
||||||
* Culture: Dwarven
|
|
||||||
* Twilight Cost: 3
|
|
||||||
* Type: Companion • Dwarf
|
|
||||||
* Strength: 7
|
|
||||||
* Vitality: 3
|
|
||||||
* Resistance: 6
|
|
||||||
* Game Text: For each artifact and possession Thrarin bears, he is damage +1.
|
|
||||||
*/
|
|
||||||
public class Card12_015 extends AbstractCompanion {
|
|
||||||
public Card12_015() {
|
|
||||||
super(3, 7, 3, 6, Culture.DWARVEN, Race.DWARF, null, "Thrarin", "Smith of Erebor", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
return Collections.singletonList(new KeywordModifier(self, self, null, Keyword.DAMAGE, new CountActiveEvaluator(Filters.or(CardType.POSSESSION, CardType.ARTIFACT), Filters.attachedTo(self))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,13 +22,22 @@
|
|||||||
twilight: 0
|
twilight: 0
|
||||||
type: Event
|
type: Event
|
||||||
keywords: Maneuver
|
keywords: Maneuver
|
||||||
|
|
||||||
effects: {
|
effects: {
|
||||||
type: event
|
type: event
|
||||||
cost: {
|
requires: {
|
||||||
|
type: canSpot
|
||||||
|
filter: dwarf
|
||||||
},
|
},
|
||||||
effect: [
|
effect: [
|
||||||
{
|
{
|
||||||
|
type: chooseActiveCards
|
||||||
|
text: Choose a race to spare, all other will be discarded
|
||||||
|
filter: choose(minion,hasRace)
|
||||||
|
memorize: chosenMinion
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: discard
|
||||||
|
filter: all(minion,not(raceInMemory(chosenMinion)))
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -65,8 +74,37 @@
|
|||||||
twilight: 0
|
twilight: 0
|
||||||
type: Possession
|
type: Possession
|
||||||
itemclass: Armor
|
itemclass: Armor
|
||||||
#target: a Dwarf
|
target: dwarf
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: modifier
|
||||||
|
modifier: {
|
||||||
|
type: removeKeyword
|
||||||
|
filter: minion,inSkirmishAgainst(bearer)
|
||||||
|
keyword: damage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: activated
|
||||||
|
phase: skirmish
|
||||||
|
cost: [
|
||||||
|
{
|
||||||
|
type: memorizeActive
|
||||||
|
filter: bearer
|
||||||
|
memory: bearer
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: discard
|
||||||
|
filter: self
|
||||||
|
}
|
||||||
|
]
|
||||||
|
effect: {
|
||||||
|
type: transfer
|
||||||
|
filter: choose(possession,attachedTo(memory(bearer)))
|
||||||
|
where: choose(character)
|
||||||
|
checkTarget: true
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: Bearer must be a Dwarf.<br>Each minion skirmishing bearer loses all <b>damage</b> bonuses.<br><b>Skirmish:</b> Discard this possession to transfer one of bearer's possessions to another eligible bearer.
|
gametext: Bearer must be a Dwarf.<br>Each minion skirmishing bearer loses all <b>damage</b> bonuses.<br><b>Skirmish:</b> Discard this possession to transfer one of bearer's possessions to another eligible bearer.
|
||||||
lore: We make good armour and keen swords....'
|
lore: We make good armour and keen swords....'
|
||||||
@@ -102,6 +140,21 @@
|
|||||||
type: Condition
|
type: Condition
|
||||||
keywords: Support Area
|
keywords: Support Area
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: trigger
|
||||||
|
optional: true
|
||||||
|
trigger: {
|
||||||
|
type: winsSkirmish
|
||||||
|
filter: dwarf
|
||||||
|
}
|
||||||
|
requires: {
|
||||||
|
type: playedCardThisPhase
|
||||||
|
filter: your,culture(dwarven),event
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: drawCards
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: Each time a Dwarf wins a skirmish in which you played a [dwarven] event, you may draw a card.
|
gametext: Each time a Dwarf wins a skirmish in which you played a [dwarven] event, you may draw a card.
|
||||||
lore: ...crying strange news in the dawn.
|
lore: ...crying strange news in the dawn.
|
||||||
@@ -136,13 +189,23 @@
|
|||||||
twilight: 0
|
twilight: 0
|
||||||
type: Event
|
type: Event
|
||||||
keywords: Skirmish
|
keywords: Skirmish
|
||||||
|
|
||||||
effects: {
|
effects: {
|
||||||
type: event
|
type: event
|
||||||
cost: {
|
|
||||||
},
|
|
||||||
effect: [
|
effect: [
|
||||||
{
|
{
|
||||||
|
type: modifyStrength
|
||||||
|
filter: choose(dwarf)
|
||||||
|
amount: 2
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: conditional
|
||||||
|
requires: {
|
||||||
|
type: location
|
||||||
|
filter: or(battleground,mountain)
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: drawCards
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -180,8 +243,30 @@
|
|||||||
type: Possession
|
type: Possession
|
||||||
strength: 1
|
strength: 1
|
||||||
itemclass: Bracers
|
itemclass: Bracers
|
||||||
#target: a Dwarf
|
target: dwarf
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: activatedTrigger
|
||||||
|
trigger: {
|
||||||
|
type: aboutToTakeWound
|
||||||
|
filter: bearer
|
||||||
|
}
|
||||||
|
cost: [
|
||||||
|
{
|
||||||
|
type: memorizeActive
|
||||||
|
filter: bearer
|
||||||
|
memory: bearer
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: discard
|
||||||
|
filter: self
|
||||||
|
}
|
||||||
|
]
|
||||||
|
effect: {
|
||||||
|
type: preventWound
|
||||||
|
filter: memory(bearer)
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: Bearer must be a Dwarf.<br><b>Response:</b> If bearer is about to take a wound, discard this possession to prevent that wound.
|
gametext: Bearer must be a Dwarf.<br><b>Response:</b> If bearer is about to take a wound, discard this possession to prevent that wound.
|
||||||
lore: Dwarven-smiths forge bracers for fit and agility.
|
lore: Dwarven-smiths forge bracers for fit and agility.
|
||||||
@@ -220,6 +305,28 @@
|
|||||||
Support Area
|
Support Area
|
||||||
]
|
]
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: activated
|
||||||
|
phase: skirmish
|
||||||
|
cost: {
|
||||||
|
type: discard
|
||||||
|
filter: self
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: modifyStrength
|
||||||
|
filter: choose(dwarf)
|
||||||
|
memorize: chosenDwarf
|
||||||
|
amount: {
|
||||||
|
type: condition
|
||||||
|
condition: {
|
||||||
|
type: memoryMatches
|
||||||
|
filter: minResistance(4)
|
||||||
|
}
|
||||||
|
true: 4
|
||||||
|
false: 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: <b>Toil 2</b>. <helper>(For each [dwarven] character you exert when playing this, its twilight cost is -2.)</helper><br><b>Skirmish:</b> Discard this condition to make a Dwarf strength +3 (or +4 if he has resistance 4 or more).
|
gametext: <b>Toil 2</b>. <helper>(For each [dwarven] character you exert when playing this, its twilight cost is -2.)</helper><br><b>Skirmish:</b> Discard this condition to make a Dwarf strength +3 (or +4 if he has resistance 4 or more).
|
||||||
lore: Gimli's axe-work on the Amon Hen hewed a mighty path through the Uruk-hai.
|
lore: Gimli's axe-work on the Amon Hen hewed a mighty path through the Uruk-hai.
|
||||||
@@ -258,6 +365,23 @@
|
|||||||
vitality: 3
|
vitality: 3
|
||||||
resistance: 6
|
resistance: 6
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: trigger
|
||||||
|
trigger: {
|
||||||
|
type: played
|
||||||
|
filter: self
|
||||||
|
}
|
||||||
|
requires: {
|
||||||
|
type: phase
|
||||||
|
phase: fellowship
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: discardTopCardsFromDeck
|
||||||
|
forced: true
|
||||||
|
deck: shadow
|
||||||
|
count: 2
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: When you play this companion during the fellowship phase, choose a Shadow player who must discard the top 2 cards of his or her draw deck.
|
gametext: When you play this companion during the fellowship phase, choose a Shadow player who must discard the top 2 cards of his or her draw deck.
|
||||||
lore: Though Dáin rules Erebor as King Under the Mountain, many of his kindred continue to dwell in the Iron Hills.
|
lore: Though Dáin rules Erebor as King Under the Mountain, many of his kindred continue to dwell in the Iron Hills.
|
||||||
@@ -293,6 +417,63 @@
|
|||||||
type: Condition
|
type: Condition
|
||||||
keywords: Support Area
|
keywords: Support Area
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: activated
|
||||||
|
phase: skirmish
|
||||||
|
cost: {
|
||||||
|
type: discard
|
||||||
|
filter: self
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: modifyStrength
|
||||||
|
filter: choose(dwarf)
|
||||||
|
memorize: chosenDwarf
|
||||||
|
amount: {
|
||||||
|
type: sum
|
||||||
|
source: [
|
||||||
|
{
|
||||||
|
type: condition
|
||||||
|
condition: {
|
||||||
|
type: location
|
||||||
|
filter: or(mountain,underground)
|
||||||
|
}
|
||||||
|
true: 1
|
||||||
|
false: 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: condition
|
||||||
|
condition: {
|
||||||
|
type: memoryMatches
|
||||||
|
memory: chosenDwarf
|
||||||
|
filter: minResistance(3)
|
||||||
|
}
|
||||||
|
true: 1
|
||||||
|
false: 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: condition
|
||||||
|
condition: {
|
||||||
|
type: memoryMatches
|
||||||
|
memory: chosenDwarf
|
||||||
|
filter: hasAttached(possession)
|
||||||
|
}
|
||||||
|
true: 1
|
||||||
|
false: 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: condition
|
||||||
|
condition: {
|
||||||
|
type: memoryMatches
|
||||||
|
memory: chosenDwarf
|
||||||
|
filter: inSkirmishAgainst(fierce,minion)
|
||||||
|
}
|
||||||
|
true: 1
|
||||||
|
false: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: <b>Skirmish:</b> Discard this condition to make a Dwarf strength +1 for each of the following that is true: he is at a mountain or underground site; he has resistance 3 or more; he is bearing a possession; he is skirmishing a fierce minion.
|
gametext: <b>Skirmish:</b> Discard this condition to make a Dwarf strength +1 for each of the following that is true: he is at a mountain or underground site; he has resistance 3 or more; he is bearing a possession; he is skirmishing a fierce minion.
|
||||||
lore: A sharpened axe does well to protect Dwarven honor.
|
lore: A sharpened axe does well to protect Dwarven honor.
|
||||||
@@ -328,6 +509,25 @@
|
|||||||
type: Condition
|
type: Condition
|
||||||
keywords: Support Area
|
keywords: Support Area
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: activated
|
||||||
|
phase: skirmish
|
||||||
|
cost: {
|
||||||
|
type: discardFromHand
|
||||||
|
forced: false
|
||||||
|
filter: choose(culture(dwarven))
|
||||||
|
}
|
||||||
|
requires: {
|
||||||
|
type: canSpot
|
||||||
|
filter: minion,inSkirmishAgainst(dwarf)
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: addKeyword
|
||||||
|
filter: choose(minion,inSkirmishAgainst(dwarf))
|
||||||
|
keyword: fierce
|
||||||
|
until: regroup
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: <b>Skirmish:</b> Discard a [dwarven] card from hand and spot a minion skirmishing a Dwarf to make that minion <b>fierce</b> until the regroup phase.
|
gametext: <b>Skirmish:</b> Discard a [dwarven] card from hand and spot a minion skirmishing a Dwarf to make that minion <b>fierce</b> until the regroup phase.
|
||||||
lore: Alas! My axe is notched: the forty-second had an iron collar on his neck.'
|
lore: Alas! My axe is notched: the forty-second had an iron collar on his neck.'
|
||||||
@@ -365,13 +565,27 @@
|
|||||||
Toil 2
|
Toil 2
|
||||||
Fellowship
|
Fellowship
|
||||||
]
|
]
|
||||||
|
|
||||||
effects: {
|
effects: {
|
||||||
type: event
|
type: event
|
||||||
cost: {
|
requires: {
|
||||||
},
|
type: canSpot
|
||||||
|
filter: dwarf
|
||||||
|
count: 2
|
||||||
|
}
|
||||||
effect: [
|
effect: [
|
||||||
{
|
{
|
||||||
|
type: chooseANumber
|
||||||
|
text: Choose how many cards to draw
|
||||||
|
from: 0
|
||||||
|
to: 4
|
||||||
|
memorize: chosenNumber
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: drawCards
|
||||||
|
count: {
|
||||||
|
type: fromMemory
|
||||||
|
memory: chosenNumber
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -386,7 +600,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
12_11: {
|
12_11: {
|
||||||
cardInfo: {
|
cardInfo: {
|
||||||
imagePath: decipher/LOTR12011.jpg
|
imagePath: decipher/LOTR12011.jpg
|
||||||
javaClass: true
|
javaClass: true
|
||||||
@@ -408,19 +622,21 @@
|
|||||||
twilight: 0
|
twilight: 0
|
||||||
type: Event
|
type: Event
|
||||||
keywords: Response
|
keywords: Response
|
||||||
|
|
||||||
effects: {
|
effects: {
|
||||||
type: responseEvent
|
type: responseEvent
|
||||||
trigger: {
|
trigger: {
|
||||||
|
type: winsSkirmish
|
||||||
}
|
filter: dwarf
|
||||||
cost: {
|
|
||||||
}
|
}
|
||||||
effect: [
|
effect: [
|
||||||
{
|
{
|
||||||
|
type: discardTopCardsFromDeck
|
||||||
|
forced: true
|
||||||
|
deck: shadow
|
||||||
|
count: 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
]
|
}
|
||||||
gametext: If a Dwarf wins a skirmish, make an opponent discard 3 cards from the top of his or her draw deck.
|
gametext: If a Dwarf wins a skirmish, make an opponent discard 3 cards from the top of his or her draw deck.
|
||||||
lore: My folk have never had dealings with any of the servants of the Enemy.'
|
lore: My folk have never had dealings with any of the servants of the Enemy.'
|
||||||
promotext: ""
|
promotext: ""
|
||||||
@@ -455,6 +671,30 @@
|
|||||||
type: Condition
|
type: Condition
|
||||||
keywords: Support Area
|
keywords: Support Area
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: modifier
|
||||||
|
modifier: {
|
||||||
|
type: addKeyword
|
||||||
|
filter: dwarf
|
||||||
|
keyword: damage
|
||||||
|
amount: {
|
||||||
|
type: forEachHasAttached
|
||||||
|
filter: possession
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: activated
|
||||||
|
phase: fellowship
|
||||||
|
cost: {
|
||||||
|
type: discard
|
||||||
|
filter: self
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: playCardFromDiscard
|
||||||
|
filter: choose(culture(dwarven),possession)
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: Each Dwarf is <b>damage +1</b> for each possession he bears.<br><b>Fellowship:</b> Discard this condition to play a [dwarven] possession from your discard pile.
|
gametext: Each Dwarf is <b>damage +1</b> for each possession he bears.<br><b>Fellowship:</b> Discard this condition to play a [dwarven] possession from your discard pile.
|
||||||
lore: Dwarves' tongues run on when speaking of their handiwork, they say.'
|
lore: Dwarves' tongues run on when speaking of their handiwork, they say.'
|
||||||
@@ -489,13 +729,27 @@
|
|||||||
twilight: 0
|
twilight: 0
|
||||||
type: Event
|
type: Event
|
||||||
keywords: Skirmish
|
keywords: Skirmish
|
||||||
|
|
||||||
effects: {
|
effects: {
|
||||||
type: event
|
type: event
|
||||||
cost: {
|
|
||||||
},
|
|
||||||
effect: [
|
effect: [
|
||||||
{
|
{
|
||||||
|
type: modifyStrength
|
||||||
|
filter: choose(dwarf)
|
||||||
|
memorize: chosenDwarf
|
||||||
|
amount: {
|
||||||
|
type: condition
|
||||||
|
condition: {
|
||||||
|
type: memoryMatches
|
||||||
|
memory: chosenDwarf
|
||||||
|
filter: minResistance(4)
|
||||||
|
}
|
||||||
|
true: {
|
||||||
|
type: forEachHasAttached
|
||||||
|
filter: possession
|
||||||
|
multiplier: 2
|
||||||
|
}
|
||||||
|
false: 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -533,6 +787,25 @@
|
|||||||
type: Condition
|
type: Condition
|
||||||
keywords: Support Area
|
keywords: Support Area
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: modifier
|
||||||
|
modifier: {
|
||||||
|
type: addKeyword
|
||||||
|
filter: dwarf
|
||||||
|
keyword: muster
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type: trigger
|
||||||
|
trigger: {
|
||||||
|
type: movesFrom
|
||||||
|
filter: plains
|
||||||
|
}
|
||||||
|
effect: {
|
||||||
|
type: discardFromHand
|
||||||
|
forced: true
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: Each Dwarf gains <b>muster</b>. <helper>(At the start of the regroup phase, you may discard a card from hand to draw a card.)</helper><br>Each time the fellowship moves from a plains site, discard a card from your hand.
|
gametext: Each Dwarf gains <b>muster</b>. <helper>(At the start of the regroup phase, you may discard a card from hand to draw a card.)</helper><br>Each time the fellowship moves from a plains site, discard a card from your hand.
|
||||||
lore: ...I am glad to have you standing nigh....'
|
lore: ...I am glad to have you standing nigh....'
|
||||||
@@ -572,6 +845,18 @@
|
|||||||
vitality: 3
|
vitality: 3
|
||||||
resistance: 6
|
resistance: 6
|
||||||
effects: [
|
effects: [
|
||||||
|
{
|
||||||
|
type: modifier
|
||||||
|
modifier: {
|
||||||
|
type: addKeyword
|
||||||
|
filter: self
|
||||||
|
keyword: damage
|
||||||
|
amount: {
|
||||||
|
type: forEachHasAttached
|
||||||
|
filter: or(artifact,possession)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
gametext: For each artifact and possession Thrarin bears, he is <b>damage +1</b>.
|
gametext: For each artifact and possession Thrarin bears, he is <b>damage +1</b>.
|
||||||
lore: Like many other representatives who have come to Rivendell, Thrarin the smith brings troubling news from the East.
|
lore: Like many other representatives who have come to Rivendell, Thrarin the smith brings troubling news from the East.
|
||||||
@@ -248,18 +248,37 @@ public class ValueResolver {
|
|||||||
final Filterable on1 = onFilter.getFilterable(actionContext);
|
final Filterable on1 = onFilter.getFilterable(actionContext);
|
||||||
return new MultiplyEvaluator(multiplier.getEvaluator(actionContext), new CountStackedEvaluator(on1, filterableSource.getFilterable(actionContext)));
|
return new MultiplyEvaluator(multiplier.getEvaluator(actionContext), new CountStackedEvaluator(on1, filterableSource.getFilterable(actionContext)));
|
||||||
};
|
};
|
||||||
|
} else if (type.equalsIgnoreCase("forEachHasAttached")) {
|
||||||
|
FieldUtils.validateAllowedFields(object, "filter", "over", "limit", "multiplier", "divider");
|
||||||
|
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||||
|
final ValueSource overSource = resolveEvaluator(object.get("over"), 0, environment);
|
||||||
|
final ValueSource limitSource = resolveEvaluator(object.get("limit"), Integer.MAX_VALUE, environment);
|
||||||
|
final ValueSource multiplier = resolveEvaluator(object.get("multiplier"), 1, environment);
|
||||||
|
final ValueSource divider = resolveEvaluator(object.get("divider"), 1, environment);
|
||||||
|
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||||
|
return actionContext ->
|
||||||
|
(Evaluator) (game, cardAffected) -> {
|
||||||
|
Filterable filterable = filterableSource.getFilterable(actionContext);
|
||||||
|
return evaluateNumber(
|
||||||
|
Filters.countActive(game, Filters.attachedTo(cardAffected), filterable),
|
||||||
|
overSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext),
|
||||||
|
multiplier.getEvaluator(actionContext), divider.getEvaluator(actionContext),
|
||||||
|
game, cardAffected);
|
||||||
|
};
|
||||||
} else if (type.equalsIgnoreCase("forEachYouCanSpot")) {
|
} else if (type.equalsIgnoreCase("forEachYouCanSpot")) {
|
||||||
FieldUtils.validateAllowedFields(object, "filter", "over", "limit", "multiplier", "divider");
|
FieldUtils.validateAllowedFields(object, "filter", "over", "limit", "multiplier", "divider");
|
||||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||||
final ValueSource overSource = resolveEvaluator(object.get("over"), 0, environment);
|
final ValueSource overSource = resolveEvaluator(object.get("over"), 0, environment);
|
||||||
final ValueSource limitSource = resolveEvaluator(object.get("limit"), Integer.MAX_VALUE, environment);
|
final ValueSource limitSource = resolveEvaluator(object.get("limit"), Integer.MAX_VALUE, environment);
|
||||||
final ValueSource multiplier = resolveEvaluator(object.get("multiplier"), 1, environment);
|
final ValueSource multiplier = resolveEvaluator(object.get("multiplier"), 1, environment);
|
||||||
final int divider = FieldUtils.getInteger(object.get("divider"), "divider", 1);
|
final ValueSource divider = resolveEvaluator(object.get("divider"), 1, environment);
|
||||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||||
return actionContext -> new DivideEvaluator(divider,
|
return actionContext ->
|
||||||
new MultiplyEvaluator(multiplier.getEvaluator(actionContext),
|
(Evaluator) (game, cardAffected) -> evaluateNumber(
|
||||||
new CountSpottableEvaluator(overSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext),
|
Filters.countSpottable(game, filterableSource.getFilterable(actionContext)),
|
||||||
filterableSource.getFilterable(actionContext))));
|
overSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext),
|
||||||
|
multiplier.getEvaluator(actionContext), divider.getEvaluator(actionContext),
|
||||||
|
game, cardAffected);
|
||||||
} else if (type.equalsIgnoreCase("forEachInDiscard")) {
|
} else if (type.equalsIgnoreCase("forEachInDiscard")) {
|
||||||
FieldUtils.validateAllowedFields(object, "filter", "multiplier", "limit");
|
FieldUtils.validateAllowedFields(object, "filter", "multiplier", "limit");
|
||||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||||
@@ -570,4 +589,13 @@ public class ValueResolver {
|
|||||||
}
|
}
|
||||||
throw new InvalidCardDefinitionException("Unable to resolve an evaluator");
|
throw new InvalidCardDefinitionException("Unable to resolve an evaluator");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int evaluateNumber(int value, Evaluator over, Evaluator limit, Evaluator multiplier, Evaluator divider,
|
||||||
|
LotroGame game, PhysicalCard cardAffected) {
|
||||||
|
int result = Math.max(0, value - over.evaluateExpression(game, cardAffected));
|
||||||
|
result = Math.min(limit.evaluateExpression(game, cardAffected), result);
|
||||||
|
result *= multiplier.evaluateExpression(game, cardAffected);
|
||||||
|
result /= divider.evaluateExpression(game, cardAffected);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,11 @@ import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
|||||||
import com.gempukku.lotro.logic.modifiers.evaluator.SingleMemoryEvaluator;
|
import com.gempukku.lotro.logic.modifiers.evaluator.SingleMemoryEvaluator;
|
||||||
import com.gempukku.lotro.logic.timing.Effect;
|
import com.gempukku.lotro.logic.timing.Effect;
|
||||||
import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult;
|
import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult;
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class FilterFactory {
|
public class FilterFactory {
|
||||||
private final Map<String, FilterableSource> simpleFilters = new HashMap<>();
|
private final Map<String, FilterableSource> simpleFilters = new HashMap<>();
|
||||||
@@ -99,6 +102,8 @@ public class FilterFactory {
|
|||||||
}
|
}
|
||||||
return Filters.none;
|
return Filters.none;
|
||||||
}));
|
}));
|
||||||
|
simpleFilters.put("hasrace",
|
||||||
|
(actionContext -> (Filter) (game, physicalCard) -> physicalCard.getBlueprint().getRace() != null));
|
||||||
simpleFilters.put("idinstored",
|
simpleFilters.put("idinstored",
|
||||||
(actionContext ->
|
(actionContext ->
|
||||||
(Filter) (game, physicalCard) -> {
|
(Filter) (game, physicalCard) -> {
|
||||||
@@ -425,6 +430,12 @@ public class FilterFactory {
|
|||||||
throw new InvalidCardDefinitionException("Unknown race definition in filter: " + parameter
|
throw new InvalidCardDefinitionException("Unknown race definition in filter: " + parameter
|
||||||
+ ". Do not use race() for races; instead just list the race by itself.");
|
+ ". Do not use race() for races; instead just list the race by itself.");
|
||||||
});
|
});
|
||||||
|
parameterFilters.put("raceinmemory",
|
||||||
|
(parameter, environment) -> actionContext -> {
|
||||||
|
Set<Race> races = actionContext.getCardsFromMemory(parameter).stream().map(
|
||||||
|
(Function<PhysicalCard, Race>) physicalCard -> physicalCard.getBlueprint().getRace()).filter(Predicates.notNull()).collect(Collectors.toSet());
|
||||||
|
return (Filter) (game, physicalCard) -> races.contains(physicalCard.getBlueprint().getRace());
|
||||||
|
});
|
||||||
parameterFilters.put("regionnumber",
|
parameterFilters.put("regionnumber",
|
||||||
(parameter, environment) -> {
|
(parameter, environment) -> {
|
||||||
int min, max;
|
int min, max;
|
||||||
|
|||||||
Reference in New Issue
Block a user