Couple of Gondor cards
This commit is contained in:
@@ -156,6 +156,171 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_99": {
|
||||
"title": "Avoid Being Seen",
|
||||
"culture": "gondor",
|
||||
"cost": 0,
|
||||
"type": "event",
|
||||
"keyword": "fellowship",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"count": "0-100",
|
||||
"filter": "choose(ranger)",
|
||||
"memorize": "exertedRangers"
|
||||
},
|
||||
"effect": {
|
||||
"type": "addModifier",
|
||||
"until": "endOfTurn",
|
||||
"modifier": {
|
||||
"type": "addNoTwilightForCompanionMove",
|
||||
"filter": "memory(exertedRangers)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_100": {
|
||||
"title": "*Blade of Gondor",
|
||||
"subtitle": "Weapon of Honor",
|
||||
"culture": "gondor",
|
||||
"cost": 1,
|
||||
"type": "possession",
|
||||
"possession": "hand weapon",
|
||||
"strength": 2,
|
||||
"target": "name(Boromir)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "skirmish",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(name(Boromir))"
|
||||
},
|
||||
"effect": {
|
||||
"type": "wound",
|
||||
"filter": "choose(or(Orc,Uruk-hai),inSkirmishAgainst(not(name(Boromir)),unbound,companion))"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_101": {
|
||||
"title": "*Boromir",
|
||||
"subtitle": "Champion of Minas Tirith",
|
||||
"culture": "gondor",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 7,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"keyword": "ranger",
|
||||
"effects": {
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,inSkirmish",
|
||||
"amount": {
|
||||
"type": "forEachWound",
|
||||
"filter": "character,inSkirmish"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_102": {
|
||||
"title": "*Boromir",
|
||||
"subtitle": "Son of Denethor",
|
||||
"culture": "gondor",
|
||||
"cost": 3,
|
||||
"type": "companion",
|
||||
"race": "man",
|
||||
"strength": 7,
|
||||
"vitality": 3,
|
||||
"resistance": 6,
|
||||
"effects": {
|
||||
"type": "activated",
|
||||
"phase": "skirmish",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"amount": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_103": {
|
||||
"title": "*Boromir's Gauntlets",
|
||||
"culture": "gondor",
|
||||
"cost": 1,
|
||||
"type": "possession",
|
||||
"possession": "gauntlets",
|
||||
"target": "culture(gondor),man",
|
||||
"effects": {
|
||||
"type": "activated",
|
||||
"phase": "skirmish",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(bearer)"
|
||||
},
|
||||
"effect": {
|
||||
"type": "preventable",
|
||||
"effect": {
|
||||
"type": "cancelSkirmish",
|
||||
"filter": "bearer"
|
||||
},
|
||||
"text": "Would you like to remove (1) to prevent cancellation of skirmish?",
|
||||
"player": "shadowPlayer",
|
||||
"cost": {
|
||||
"type": "removeTwilight"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_104": {
|
||||
"title": "*Boromir's Shield",
|
||||
"culture": "gondor",
|
||||
"cost": 1,
|
||||
"type": "possession",
|
||||
"possession": "shield",
|
||||
"target": "culture(gondor),man",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyArcheryTotal",
|
||||
"side": "shadow",
|
||||
"amount": -1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "regroup",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "bearer,name(Boromir)"
|
||||
},
|
||||
"cost": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "choose(side(shadow),possession)"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_313": {
|
||||
"title": "Athelas",
|
||||
"subtitle": "Asëa Aranion",
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
import com.gempukku.lotro.common.*;
|
||||
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.AbstractAttachable;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: Alliance of Old
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Condition - Companion
|
||||
* Card Number: 1R93
|
||||
* Game Text: Tale. Bearer must be an Elf. Skirmish: Exert a [GONDOR] Man to make bearer strength +2.
|
||||
*/
|
||||
public class Card40_093 extends AbstractAttachable {
|
||||
public Card40_093() {
|
||||
super(Side.FREE_PEOPLE, CardType.CONDITION, 1, Culture.GONDOR, null, "Alliance of Old");
|
||||
addKeyword(Keyword.TALE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Race.ELF;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
||||
&& PlayConditions.canExert(self, game, Culture.GONDOR, Race.MAN)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.GONDOR, Race.MAN));
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, self.getAttachedTo(), 2)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.condition.LocationCondition;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Aragorn, Dunedain Ranger
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 4
|
||||
* Type: Companion - Man
|
||||
* Strength: 8
|
||||
* Vitality: 4
|
||||
* Resistance: 8
|
||||
* Card Number: 1C94
|
||||
* Game Text: Ranger. While at a site from your adventure deck, Aragorn is defender +1.
|
||||
*/
|
||||
public class Card40_094 extends AbstractCompanion {
|
||||
public Card40_094() {
|
||||
super(4, 8, 4, 8, Culture.GONDOR, Race.MAN, null, "Aragorn", "Dunedain Ranger", true);
|
||||
addKeyword(Keyword.RANGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
KeywordModifier modifier = new KeywordModifier(self, self,
|
||||
new LocationCondition(Filters.owner(self.getOwner())), Keyword.DEFENDER, 1);
|
||||
return Collections.singletonList(modifier);
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.PlayUtils;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.effects.HealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.timing.ExtraFilters;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Aragorn, Isildur's Heir
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 4
|
||||
* Type: Companion - Man
|
||||
* Strength: 8
|
||||
* Vitality: 4
|
||||
* Resistance: 8
|
||||
* Card Number: 1R95
|
||||
* Game Text: Ranger. Maneuver: Play an artifact or possession on Aragorn to heal him.
|
||||
*/
|
||||
public class Card40_095 extends AbstractCompanion {
|
||||
public Card40_095() {
|
||||
super(4, 8, 4, 8, Culture.GONDOR, Race.MAN, null, "Aragorn", "Isildur's Heir", true);
|
||||
addKeyword(Keyword.RANGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(final String playerId, final LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.MANEUVER, self)
|
||||
&& PlayConditions.canPlayFromHand(playerId, game, Filters.or(CardType.ARTIFACT, CardType.POSSESSION), ExtraFilters.attachableTo(game, self))) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new ChooseCardsFromHandEffect(playerId, 1, 1, Filters.or(CardType.ARTIFACT, CardType.POSSESSION), ExtraFilters.attachableTo(game, self)) {
|
||||
@Override
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> cards) {
|
||||
for (PhysicalCard card : cards) {
|
||||
game.getActionsEnvironment().addActionToStack(PlayUtils.getPlayCardAction(game, card, 0, self, false));
|
||||
}
|
||||
}
|
||||
});
|
||||
action.appendEffect(
|
||||
new HealCharactersEffect(self, self));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.cardtype.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.DoesNotAddToArcheryTotalModifier;
|
||||
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.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Aragorn's Bow, Swift and True
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession - Ranged Weapon
|
||||
* Card Number: 1R96
|
||||
* Game Text: Bearer must be Aragorn.
|
||||
* He is an archer.
|
||||
* At the beginning of the archery phase, you may exert Aragorn to wound a minion. If you do, Aragorn does not add
|
||||
* to the fellowship archery total.
|
||||
*/
|
||||
public class Card40_096 extends AbstractAttachableFPPossession {
|
||||
public Card40_096() {
|
||||
super(1, 0, 0, Culture.GONDOR, PossessionClass.RANGED_WEAPON, "Aragorn's Bow", "Swift and True", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.aragorn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
KeywordModifier modifier = new KeywordModifier(self, Filters.hasAttached(self), Keyword.ARCHER);
|
||||
return Collections.singletonList(modifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ARCHERY)
|
||||
&& PlayConditions.canExert(self, game, Filters.aragorn)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.aragorn));
|
||||
action.appendEffect(
|
||||
new ChooseAndWoundCharactersEffect(action, playerId, 1, 1, CardType.MINION));
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new DoesNotAddToArcheryTotalModifier(self, Filters.hasAttached(self))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.decisions.DecisionResultInvalidException;
|
||||
import com.gempukku.lotro.logic.decisions.ForEachYouSpotDecision;
|
||||
import com.gempukku.lotro.logic.effects.IncrementPhaseLimitEffect;
|
||||
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Aragorn's Pipe
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession - Pipe
|
||||
* Card Number: 1U97
|
||||
* Game Text: Bearer must be a [GONDOR] Man.
|
||||
* Skirmish: Discard a pipeweed possession and spot X pipes to make a companion bearing a pipe strength +X
|
||||
* (limit once per phase).
|
||||
*/
|
||||
public class Card40_097 extends AbstractAttachableFPPossession {
|
||||
public Card40_097() {
|
||||
super(1, 0, 0, Culture.GONDOR, PossessionClass.PIPE, "Aragorn's Pipe", null, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.and(Culture.GONDOR, Race.MAN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(final String playerId, final LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
||||
&& PlayConditions.canDiscardFromPlay(self, game, CardType.POSSESSION, Keyword.PIPEWEED)
|
||||
&& PlayConditions.checkPhaseLimit(game, self, 1)) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new IncrementPhaseLimitEffect(self, 1));
|
||||
action.appendCost(
|
||||
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION, Keyword.PIPEWEED));
|
||||
action.appendEffect(
|
||||
new PlayoutDecisionEffect(playerId,
|
||||
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, Integer.MAX_VALUE, PossessionClass.PIPE) {
|
||||
@Override
|
||||
public void decisionMade(String result) throws DecisionResultInvalidException {
|
||||
int spotCount = getValidatedResult(result);
|
||||
action.appendEffect(
|
||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, spotCount, CardType.COMPANION,
|
||||
Filters.hasAttached(PossessionClass.PIPE)));
|
||||
}
|
||||
}));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.cardtype.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.logic.modifiers.CantTakeMoreThanXWoundsModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: Armor
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession - Armor
|
||||
* Card Number: 1C98
|
||||
* Game Text: Bearer must be a Man. Bearer takes no more than one wound in a skirmish.
|
||||
*/
|
||||
public class Card40_098 extends AbstractAttachableFPPossession {
|
||||
public Card40_098() {
|
||||
super(1, 0, 0, Culture.GONDOR, PossessionClass.ARMOR, "Armor");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Race.MAN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(
|
||||
new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self)));
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.PlayEventAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfTurnModifierEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.AddNoTwilightForCompanionMoveModifier;
|
||||
|
||||
/**
|
||||
* Title: Avoid Being Seen
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 0
|
||||
* Type: Event - Fellowship
|
||||
* Card Number: 1R99
|
||||
* Game Text: To play, exert X Rangers. Until the end of turn, add no twilight for each exerted Ranger when the fellowship moves.
|
||||
*/
|
||||
public class Card40_099 extends AbstractEvent {
|
||||
public Card40_099() {
|
||||
super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "Avoid Being Seen", Phase.FELLOWSHIP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) {
|
||||
final PlayEventAction action = new PlayEventAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 0, Integer.MAX_VALUE, Filters.character, Keyword.RANGER) {
|
||||
@Override
|
||||
protected void forEachCardExertedCallback(PhysicalCard character) {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfTurnModifierEffect(
|
||||
new AddNoTwilightForCompanionMoveModifier(self, character)));
|
||||
}
|
||||
});
|
||||
return action;
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.ChooseAndWoundCharactersEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Blade of Gondor, Weapon of Honor
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession - Hand Weapon
|
||||
* Strength: +2
|
||||
* Card Number: 1R100
|
||||
* Game Text: Bearer must be Boromir. He is damage +1.
|
||||
* Skirmish: Exert Boromir to wound an Orc or Uruk-hai skirmishing another unbound companion.
|
||||
*/
|
||||
public class Card40_100 extends AbstractAttachableFPPossession {
|
||||
public Card40_100() {
|
||||
super(1, 2, 0, Culture.GONDOR, PossessionClass.HAND_WEAPON, "Blade of Gondor", "Weapon of Honor", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.boromir;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
KeywordModifier modifier = new KeywordModifier(self, Filters.hasAttached(self), Keyword.DAMAGE, 1);
|
||||
return Collections.singletonList(modifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
||||
&& PlayConditions.canExert(self, game, Filters.boromir)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.boromir));
|
||||
action.appendEffect(
|
||||
new ChooseAndWoundCharactersEffect(action, playerId, 1, 1,
|
||||
Filters.or(Race.ORC, Race.URUK_HAI), Filters.inSkirmishAgainst(Filters.not(Filters.hasAttached(self)), Filters.unboundCompanion)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Boromir, Champion of Minas Tirith
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion - Man
|
||||
* Strength: 7
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Card Number: 1R101
|
||||
* Game Text: Ranger. Boromir is strength +1 for each wound on each character in his skirmish.
|
||||
*/
|
||||
public class Card40_101 extends AbstractCompanion {
|
||||
public Card40_101() {
|
||||
super(3, 7, 3, 6, Culture.GONDOR, Race.MAN, null, "Boromir",
|
||||
"Champion of Minas Tirith", true);
|
||||
addKeyword(Keyword.RANGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
StrengthModifier modifier = new StrengthModifier(
|
||||
self, self, null,
|
||||
new Evaluator() {
|
||||
@Override
|
||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
||||
int woundCount = 0;
|
||||
for (PhysicalCard physicalCard : Filters.filterActive(game, Filters.character, Filters.inSkirmish, Filters.wounded)) {
|
||||
woundCount += game.getGameState().getWounds(physicalCard);
|
||||
}
|
||||
return woundCount;
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(modifier);
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Boromir, Son of Denethor
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 3
|
||||
* Type: Companion - Man
|
||||
* Strength: 7
|
||||
* Vitality: 3
|
||||
* Resistance: 6
|
||||
* Card Number: 1U102
|
||||
* Game Text: Skirmish: Exert Boromir to make a Hobbit strength +3.
|
||||
*/
|
||||
public class Card40_102 extends AbstractCompanion {
|
||||
public Card40_102() {
|
||||
super(3, 7, 3, 6, Culture.GONDOR, Race.MAN, null, "Boromir", "Son of Denethor", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
||||
&& PlayConditions.canExert(self, game, self)) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(new SelfExertEffect(action, self));
|
||||
action.appendEffect(
|
||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 3, Race.HOBBIT));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.logic.effects.CancelSkirmishEffect;
|
||||
import com.gempukku.lotro.logic.effects.PreventableEffect;
|
||||
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Boromir's Gauntlets
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession - Gauntlets
|
||||
* Card Number: 1C103
|
||||
* Game Text: Bearer must be a [GONDOR] Man.
|
||||
* Skirmish: Exert bearer to cancel a skirmish involving bearer. The Shadow player may remove (1) to prevent this.
|
||||
*/
|
||||
public class Card40_103 extends AbstractAttachableFPPossession {
|
||||
public Card40_103() {
|
||||
super(1, 0, 0, Culture.GONDOR, PossessionClass.GAUNTLETS, "Boromir's Gauntlets", null, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.and(Culture.GONDOR, Race.MAN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
|
||||
&& PlayConditions.canExert(self, game, Filters.hasAttached(self))) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.hasAttached(self)));
|
||||
action.appendEffect(
|
||||
new PreventableEffect(action,
|
||||
new CancelSkirmishEffect(Filters.hasAttached(self)),
|
||||
GameUtils.getShadowPlayers(game),
|
||||
new PreventableEffect.PreventionCost() {
|
||||
@Override
|
||||
public Effect createPreventionCostForPlayer(CostToEffectAction subAction, String playerId) {
|
||||
return new RemoveTwilightEffect(1);
|
||||
}
|
||||
}));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set40.gondor;
|
||||
|
||||
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.ChooseAndDiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Title: *Boromir's Shield
|
||||
* Set: Second Edition
|
||||
* Side: Free
|
||||
* Culture: Gondor
|
||||
* Twilight Cost: 1
|
||||
* Type: Possession - Shield
|
||||
* Card Number: 1U104
|
||||
* Game Text: Bearer must be a [GONDOR] Man. The minion archery total is -1.
|
||||
* Regroup: If bearer is Boromir, discard this possession to discard a Shadow possession.
|
||||
*/
|
||||
public class Card40_104 extends AbstractAttachableFPPossession {
|
||||
public Card40_104() {
|
||||
super(1, 0, 0, Culture.GONDOR, PossessionClass.SHIELD, "Boromir's Shield", null, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.and(Culture.GONDOR, Race.MAN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
ArcheryTotalModifier modifier = new ArcheryTotalModifier(self, Side.SHADOW, -1);
|
||||
return Collections.singletonList(modifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
|
||||
&& PlayConditions.canSpot(game, Filters.hasAttached(self), Filters.boromir)
|
||||
&& PlayConditions.canSelfDiscard(self, game)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new SelfDiscardEffect(self));
|
||||
action.appendEffect(
|
||||
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Side.SHADOW, CardType.POSSESSION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -67,6 +67,16 @@ public class ValueResolver {
|
||||
final int count = actionContext.getCardsFromMemory(memory).size();
|
||||
return new ConstantEvaluator(count);
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("forEachWound")) {
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
return (actionContext) -> (Evaluator) (game, cardAffected) -> {
|
||||
int wounds = 0;
|
||||
for (PhysicalCard physicalCard : Filters.filterActive(actionContext.getGame(), filterableSource.getFilterable(actionContext))) {
|
||||
wounds += actionContext.getGame().getGameState().getWounds(physicalCard);
|
||||
}
|
||||
return wounds;
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("forEachKeywordOnCardInMemory")) {
|
||||
final String memory = FieldUtils.getString(object.get("memory"), "memory");
|
||||
final Keyword keyword = FieldUtils.getEnum(Keyword.class, object.get("keyword"), "keyword");
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.modifier;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.ModifierSource;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.logic.modifiers.AddNoTwilightForCompanionMoveModifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class AddNoTwilightForCompanionMove implements ModifierSourceProducer {
|
||||
@Override
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter");
|
||||
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
|
||||
return actionContext -> new AddNoTwilightForCompanionMoveModifier(actionContext.getSource(), filterableSource.getFilterable(actionContext));
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,8 @@ public class ModifierSourceFactory {
|
||||
modifierProducers.put("modifyroamingpenalty", new ModifyRoamingPenalty());
|
||||
modifierProducers.put("modifystrength", new ModifyStrength());
|
||||
modifierProducers.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
|
||||
modifierProducers.put("addnotwilightforcompanionmove", new AddNoTwilightForCompanionMove());
|
||||
modifierProducers.put("modifyarcherytotal", new ModifyArcheryTotal());
|
||||
}
|
||||
|
||||
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.modifier;
|
||||
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ModifyArcheryTotal implements ModifierSourceProducer {
|
||||
@Override
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "side", "condition", "amount");
|
||||
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), 1, environment);
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final Side side = FieldUtils.getEnum(Side.class, object.get("side"), "side");
|
||||
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
return (actionContext) -> {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(actionContext);
|
||||
return new ArcheryTotalModifier(actionContext.getSource(), side,
|
||||
new RequirementCondition(requirements, actionContext), evaluator);
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user