Some FotR cards
This commit is contained in:
@@ -671,5 +671,149 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"1_263": {
|
||||
"title": "Orc Banner",
|
||||
"culture": "sauron",
|
||||
"cost": 1,
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "losesSkirmish",
|
||||
"filter": "or(companion,ally)",
|
||||
"against": "culture(sauron),orc"
|
||||
},
|
||||
"effect": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "all(culture(sauron),orc)",
|
||||
"amount": 1,
|
||||
"until": "start(regroup)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_264": {
|
||||
"title": "Orc Bowmen",
|
||||
"culture": "sauron",
|
||||
"cost": 3,
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyArcheryTotal",
|
||||
"side": "shadow",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(sauron),orc"
|
||||
},
|
||||
"amount": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_265": {
|
||||
"title": "Orc Butchery",
|
||||
"culture": "sauron",
|
||||
"cost": 0,
|
||||
"type": "event",
|
||||
"keyword": "response",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(sauron),orc,inSkirmish"
|
||||
},
|
||||
"effects": {
|
||||
"type": "responseEvent",
|
||||
"trigger": {
|
||||
"type": "killed",
|
||||
"filter": "companion"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discardTopCardsFromDeck",
|
||||
"deck": "fp",
|
||||
"forced": true,
|
||||
"count": {
|
||||
"type": "forEachInDeadPile",
|
||||
"multiplier": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_266": {
|
||||
"title": "Orc Chieftain",
|
||||
"culture": "sauron",
|
||||
"cost": 2,
|
||||
"type": "minion",
|
||||
"race": "orc",
|
||||
"strength": 7,
|
||||
"vitality": 2,
|
||||
"site": 6,
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "played",
|
||||
"filter": "your,weapon",
|
||||
"on": "self"
|
||||
},
|
||||
"condition": {
|
||||
"type": "perTurnLimit",
|
||||
"limit": 1
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "incrementPerTurnLimit",
|
||||
"limit": 1
|
||||
},
|
||||
{
|
||||
"type": "addTwilight",
|
||||
"amount": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"1_267": {
|
||||
"title": "Orc Hunters",
|
||||
"culture": "sauron",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "orc",
|
||||
"strength": 9,
|
||||
"vitality": 2,
|
||||
"site": 6,
|
||||
"effects": {
|
||||
"type": "activated",
|
||||
"phase": "skirmish",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "wound",
|
||||
"filter": "choose(character,inSkirmishAgainst(self))"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_268": {
|
||||
"title": "Orc Inquisitor",
|
||||
"culture": "sauron",
|
||||
"cost": 3,
|
||||
"type": "minion",
|
||||
"race": "orc",
|
||||
"strength": 9,
|
||||
"vitality": 3,
|
||||
"site": 6,
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"optional": true,
|
||||
"trigger": {
|
||||
"type": "played",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "discardCardAtRandomFromHand",
|
||||
"hand": "fp",
|
||||
"forced": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
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.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Fellowship of the Ring
|
||||
* Side: Shadow
|
||||
* Culture: Sauron
|
||||
* Twilight Cost: 1
|
||||
* Type: Condition
|
||||
* Game Text: Plays to your support area. Each time a companion or ally loses a skirmish that involves a [SAURON] Orc,
|
||||
* each [SAURON] Orc is strength +1 until the regroup phase.
|
||||
*/
|
||||
public class Card1_263 extends AbstractPermanent {
|
||||
public Card1_263() {
|
||||
super(Side.SHADOW, 1, CardType.CONDITION, Culture.SAURON, "Orc Banner");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.losesSkirmishInvolving(game, effectResult, Filters.or(CardType.ALLY, CardType.COMPANION), Filters.and(Culture.SAURON, Race.ORC))) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.and(Culture.SAURON, Race.ORC), 1), Phase.REGROUP));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
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.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.SpotCondition;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Fellowship of the Ring
|
||||
* Side: Shadow
|
||||
* Culture: Sauron
|
||||
* Twilight Cost: 3
|
||||
* Type: Condition
|
||||
* Game Text: Plays to your support area. While you can spot a [SAURON] Orc, add 1 to the minion archery total.
|
||||
*/
|
||||
public class Card1_264 extends AbstractPermanent {
|
||||
public Card1_264() {
|
||||
super(Side.SHADOW, 3, CardType.CONDITION, Culture.SAURON, "Orc Bowmen");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new ArcheryTotalModifier(self, Side.SHADOW, new SpotCondition(Culture.SAURON, Race.ORC), 1));
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
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.PlayUtils;
|
||||
import com.gempukku.lotro.logic.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent;
|
||||
import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Fellowship of the Ring
|
||||
* Side: Shadow
|
||||
* Culture: Sauron
|
||||
* Twilight Cost: 0
|
||||
* Type: Event
|
||||
* Game Text: Response: If a companion is killed by a [SAURON] Orc, the Free Peoples player must discard 3 cards from
|
||||
* the top of his draw deck for each card in the dead pile.
|
||||
*/
|
||||
public class Card1_265 extends AbstractResponseEvent {
|
||||
public Card1_265() {
|
||||
super(Side.SHADOW, 0, Culture.SAURON, "Orc Butchery");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PlayEventAction> getOptionalInHandAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.forEachKilledBy(game, effectResult, Filters.and(Culture.SAURON, Race.ORC), CardType.COMPANION)
|
||||
&& PlayUtils.checkPlayRequirements(game, self, Filters.any, 0, 0, false, false)) {
|
||||
PlayEventAction action = new PlayEventAction(self);
|
||||
int deadPileCount = game.getGameState().getDeadPile(game.getGameState().getCurrentPlayerId()).size();
|
||||
if (deadPileCount > 0)
|
||||
action.appendEffect(new DiscardTopCardFromDeckEffect(self, game.getGameState().getCurrentPlayerId(), deadPileCount * 3, true));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.CheckTurnLimitEffect;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
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.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Fellowship of the Ring
|
||||
* Side: Shadow
|
||||
* Culture: Sauron
|
||||
* Twilight Cost: 2
|
||||
* Type: Minion • Orc
|
||||
* Strength: 7
|
||||
* Vitality: 2
|
||||
* Site: 6
|
||||
* Game Text: When you play a weapon on this minion, add (2) (limit once per turn).
|
||||
*/
|
||||
public class Card1_266 extends AbstractMinion {
|
||||
public Card1_266() {
|
||||
super(2, 7, 2, 6, Race.ORC, Culture.SAURON, "Orc Chieftain");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.playedOn(game, effectResult, self, Filters.owner(self.getOwner()), Filters.weapon)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new CheckTurnLimitEffect(action, self, 1,
|
||||
new AddTwilightEffect(self, 2)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Fellowship of the Ring
|
||||
* Side: Shadow
|
||||
* Culture: Sauron
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Orc
|
||||
* Strength: 9
|
||||
* Vitality: 2
|
||||
* Site: 6
|
||||
* Game Text: Skirmish: Exert this minion to wound a character he is skirmishing.
|
||||
*/
|
||||
public class Card1_267 extends AbstractMinion {
|
||||
public Card1_267() {
|
||||
super(3, 9, 2, 6, Race.ORC, Culture.SAURON, "Orc Hunters");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)
|
||||
&& PlayConditions.canExert(self, game, self)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new SelfExertEffect(action, self));
|
||||
action.appendEffect(
|
||||
new WoundCharactersEffect(self, Filters.inSkirmishAgainst(self)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardAtRandomFromHandEffect;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
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.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Fellowship of the Ring
|
||||
* Side: Shadow
|
||||
* Culture: Sauron
|
||||
* Twilight Cost: 3
|
||||
* Type: Minion • Orc
|
||||
* Strength: 9
|
||||
* Vitality: 3
|
||||
* Site: 6
|
||||
* Game Text: When you play this minion, you may make the Free Peoples player discard a card at random from hand.
|
||||
*/
|
||||
public class Card1_268 extends AbstractMinion {
|
||||
public Card1_268() {
|
||||
super(3, 9, 3, 6, Race.ORC, Culture.SAURON, "Orc Inquisitor");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, self)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new DiscardCardAtRandomFromHandEffect(self, game.getGameState().getCurrentPlayerId(), true));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -210,11 +210,12 @@ public class ValueResolver {
|
||||
(Evaluator) (game, cardAffected) -> Filters.filter(game.getGameState().getHand(actionContext.getPerformingPlayer()),
|
||||
game, filterableSource.getFilterable(actionContext)).size();
|
||||
} else if (type.equalsIgnoreCase("forEachInDeadPile")) {
|
||||
FieldUtils.validateAllowedFields(object, "filter");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
FieldUtils.validateAllowedFields(object, "filter", "multiplier");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "any");
|
||||
final int multiplier = FieldUtils.getInteger(object.get("multiplier"), "multiplier", 1);
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
return actionContext ->
|
||||
(Evaluator) (game, cardAffected) -> Filters.filter(game.getGameState().getDeadPile(actionContext.getPerformingPlayer()),
|
||||
(Evaluator) (game, cardAffected) -> multiplier * Filters.filter(game.getGameState().getDeadPile(actionContext.getPerformingPlayer()),
|
||||
game, filterableSource.getFilterable(actionContext)).size();
|
||||
} else if (type.equalsIgnoreCase("fromMemory")) {
|
||||
FieldUtils.validateAllowedFields(object, "memory", "multiplier");
|
||||
|
||||
@@ -14,16 +14,24 @@ import org.json.simple.JSONObject;
|
||||
public class PlayedTriggerCheckerProducer implements TriggerCheckerProducer {
|
||||
@Override
|
||||
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "memorize");
|
||||
FieldUtils.validateAllowedFields(value, "filter", "on", "memorize");
|
||||
|
||||
final String filterString = FieldUtils.getString(value.get("filter"), "filter");
|
||||
final String onString = FieldUtils.getString(value.get("on"), "on");
|
||||
final String memorize = FieldUtils.getString(value.get("memorize"), "memorize");
|
||||
final FilterableSource filter = environment.getFilterFactory().generateFilter(filterString, environment);
|
||||
final FilterableSource onFilter = (onString != null) ? environment.getFilterFactory().generateFilter(filterString, environment) : null;
|
||||
return new TriggerChecker() {
|
||||
@Override
|
||||
public boolean accepts(ActionContext actionContext) {
|
||||
final Filterable filterable = filter.getFilterable(actionContext);
|
||||
final boolean played = TriggerConditions.played(actionContext.getGame(), actionContext.getEffectResult(), filterable);
|
||||
boolean played;
|
||||
if (onFilter != null) {
|
||||
final Filterable onFilterable = onFilter.getFilterable(actionContext);
|
||||
played = TriggerConditions.playedOn(actionContext.getGame(), actionContext.getEffectResult(), onFilterable, filterable);
|
||||
} else {
|
||||
played = TriggerConditions.played(actionContext.getGame(), actionContext.getEffectResult(), filterable);
|
||||
}
|
||||
if (played && memorize != null) {
|
||||
PhysicalCard playedCard = ((PlayCardResult) actionContext.getEffectResult()).getPlayedCard();
|
||||
actionContext.setCardMemory(memorize, playedCard);
|
||||
|
||||
Reference in New Issue
Block a user