Couple of Gondor cards

This commit is contained in:
marcin.sciesinski
2019-09-04 03:35:50 -07:00
parent 3d1bc8f575
commit d321af0110
17 changed files with 227 additions and 651 deletions

View File

@@ -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",

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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)));
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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");

View File

@@ -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));
}
}

View File

@@ -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 {

View File

@@ -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);
};
}
}