Migrated Gollum cards in set 18 to hjson

This commit is contained in:
MarcinSc
2024-05-27 00:30:13 +07:00
parent a44bad94a0
commit 0962bc6521
13 changed files with 170 additions and 528 deletions

View File

@@ -1,41 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
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.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.logic.modifiers.evaluator.ForEachThreatEvaluator;
import com.gempukku.lotro.logic.timing.PlayConditions;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 2
* Type: Event • Skirmish
* Game Text: Spot Shelob to make a minion strength +1 for each threat you can spot.
*/
public class Card18_028 extends AbstractEvent {
public Card18_028() {
super(Side.SHADOW, 2, Culture.GOLLUM, "Countless Cords", Phase.SKIRMISH);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Filters.name("Shelob"));
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, new ForEachThreatEvaluator(), CardType.MINION));
return action;
}
}

View File

@@ -1,47 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
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.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractPermanent;
import com.gempukku.lotro.logic.effects.PreventableCardEffect;
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPreventCardEffect;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 1
* Type: Condition • Support Area
* Game Text: Response: If a Free Peoples player's card is about to discard your other [GOLLUM] condition, remove (1)
* to prevent that.
*/
public class Card18_029 extends AbstractPermanent {
public Card18_029() {
super(Side.SHADOW, 1, CardType.CONDITION, Culture.GOLLUM, "Deceit");
}
@Override
public List<? extends ActivateCardAction> getOptionalInPlayBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) {
if (TriggerConditions.isGettingDiscardedBy(effect, game, Side.FREE_PEOPLE, Filters.not(self), Filters.owner(self.getOwner()), Culture.GOLLUM, CardType.CONDITION)
&& game.getGameState().getTwilightPool() >= 1) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveTwilightEffect(1));
action.appendEffect(
new ChooseAndPreventCardEffect(self, (PreventableCardEffect) effect, playerId, "Choose condition to prevent discarding", Filters.not(self), Culture.GOLLUM, CardType.CONDITION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,39 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
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.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.effects.ReinforceTokenEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 0
* Type: Event • Shadow
* Game Text: Heal a Ring-bound companion to reinforce a [GOLLUM] token.
*/
public class Card18_030 extends AbstractEvent {
public Card18_030() {
super(Side.SHADOW, 0, Culture.GOLLUM, "Enemy in Your Midst", Phase.SHADOW);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canHeal(self, game, CardType.COMPANION, Keyword.RING_BOUND);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndHealCharactersEffect(action, playerId, CardType.COMPANION, Keyword.RING_BOUND));
action.appendEffect(
new ReinforceTokenEffect(self, playerId, Token.GOLLUM));
return action;
}
}

View File

@@ -1,59 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
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.ChoiceEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromHandEffect;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.LinkedList;
import java.util.List;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 0
* Type: Event • Shadow
* Game Text: Spot a [GOLLUM] card to play a minion. Its twilight cost is -1 (or -3 if it is roaming).
*/
public class Card18_031 extends AbstractEvent {
public Card18_031() {
super(Side.SHADOW, 0, Culture.GOLLUM, "It Draws Him", Phase.SHADOW);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Culture.GOLLUM)
&& (PlayConditions.canPlayFromHand(self.getOwner(), game, -1, CardType.MINION, Filters.not(Keyword.ROAMING))
|| PlayConditions.canPlayFromHand(self.getOwner(), game, -3, CardType.MINION, Keyword.ROAMING));
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
PlayEventAction action = new PlayEventAction(self);
List<Effect> possibleEffects = new LinkedList<>();
possibleEffects.add(
new ChooseAndPlayCardFromHandEffect(playerId, game, -1, CardType.MINION, Filters.not(Keyword.ROAMING)) {
@Override
public String getText(LotroGame game) {
return "Play not roaming minion";
}
});
possibleEffects.add(
new ChooseAndPlayCardFromHandEffect(playerId, game, -3, CardType.MINION, Keyword.ROAMING) {
@Override
public String getText(LotroGame game) {
return "Play roaming minion";
}
});
action.appendEffect(
new ChoiceEffect(action, playerId, possibleEffects));
return action;
}
}

View File

@@ -1,58 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Side;
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.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.logic.effects.DiscardCardAtRandomFromHandEffect;
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPutCardFromDeckIntoHandEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 3
* Type: Condition • Support Area
* Game Text: Shadow: Remove (3) to take a [GOLLUM] card into hand from your draw deck, then randomly discard a card
* from your hand. Skirmish: Discard a [GOLLUM] card from hand to make a [GOLLUM] minion strength +2.
*/
public class Card18_032 extends AbstractPermanent {
public Card18_032() {
super(Side.SHADOW, 3, CardType.CONDITION, Culture.GOLLUM, "Not Easily Avoided");
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 3)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveTwilightEffect(3));
action.appendEffect(
new ChooseAndPutCardFromDeckIntoHandEffect(action, playerId, 1, 1, Culture.GOLLUM));
action.appendEffect(
new DiscardCardAtRandomFromHandEffect(self, playerId, false));
return Collections.singletonList(action);
}
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)
&& PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.GOLLUM)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.GOLLUM));
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 2, Culture.GOLLUM, CardType.MINION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,40 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
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.choose.ChooseAndReturnCardsToHandEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 2
* Type: Event • Shadow
* Game Text: Spot Gollum or Smeagol to return a follower to its owner's hand.
*/
public class Card18_033 extends AbstractEvent {
public Card18_033() {
super(Side.SHADOW, 2, Culture.GOLLUM, "Set Up", Phase.SHADOW);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Filters.gollumOrSmeagol);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseAndReturnCardsToHandEffect(action, playerId, 1, 1, CardType.FOLLOWER));
return action;
}
}

View File

@@ -1,81 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
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.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.effects.AddThreatsEffect;
import com.gempukku.lotro.logic.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.logic.effects.ForEachBurdenYouSpotEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.logic.modifiers.AddKeywordModifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.LinkedList;
import java.util.List;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 6
* Type: Minion • Spider
* Strength: 8
* Vitality: 8
* Site: 8
* Game Text: Fierce. Each time Shelob wins a skirmish, you may add threats up to the number of burdens you can spot.
* Each time Shelob wins a skirmish, you may play Gollum from your discard pile; he is strength +3 and fierce until the end of turn.
*/
public class Card18_034 extends AbstractMinion {
public Card18_034() {
super(6, 8, 8, 8, Race.SPIDER, Culture.GOLLUM, "Shelob", "Menace", true);
addKeyword(Keyword.FIERCE);
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(final String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, self)) {
List<OptionalTriggerAction> actions = new LinkedList<>();
final OptionalTriggerAction action1 = new OptionalTriggerAction(self.getCardId() + "-1", self);
action1.setText("Add threats");
action1.appendEffect(
new ForEachBurdenYouSpotEffect(playerId) {
@Override
protected void burdensSpotted(int burdensSpotted) {
action1.appendEffect(
new AddThreatsEffect(playerId, self, burdensSpotted));
}
});
actions.add(action1);
if (PlayConditions.canPlayFromDiscard(playerId, game, Filters.gollum)) {
final OptionalTriggerAction action2 = new OptionalTriggerAction(self.getCardId() + "-2", self);
action2.setText("Play Gollum from discard");
action2.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Filters.gollum) {
@Override
protected void afterCardPlayed(PhysicalCard cardPlayed) {
action2.appendEffect(
new AddUntilEndOfTurnModifierEffect(
new StrengthModifier(self, cardPlayed, 3)));
action2.appendEffect(
new AddUntilEndOfTurnModifierEffect(
new AddKeywordModifier(self, cardPlayed, Keyword.FIERCE)));
}
});
actions.add(action2);
}
return actions;
}
return null;
}
}

View File

@@ -1,51 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
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.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.effects.KillEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndReturnCardsToHandEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
/**
* Set: Treachery & Deceit
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 10
* Type: Event • Regroup
* Game Text: To play, spot Shelob. The Free Peoples player chooses two companions in play (except the Ring-bearer).
* He or she then chooses to place one of those companions in the dead pile and return the other to his or her hand.
*/
public class Card18_035 extends AbstractEvent {
public Card18_035() {
super(Side.SHADOW, 10, Culture.GOLLUM, "Sting of Shelob", Phase.REGROUP);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Filters.name("Shelob"));
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) {
final PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ChooseActiveCardEffect(self, game.getGameState().getCurrentPlayerId(), "Choose companion to kill", CardType.COMPANION, Filters.not(Filters.ringBearer)) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
action.insertEffect(
new KillEffect(card, self, KillEffect.Cause.CARD_EFFECT));
}
});
action.appendEffect(
new ChooseAndReturnCardsToHandEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION, Filters.not(Filters.ringBearer)));
return action;
}
}

View File

@@ -1,47 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
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.CancelEventEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.timing.results.PlayEventResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Treachery & Deceit
* Side: Free
* Culture: Gollum
* Twilight Cost: 0
* Type: Event • Response
* Game Text: If a skirmish event is played, spot Smeagol to cancel that event.
*/
public class Card18_036 extends AbstractResponseEvent {
public Card18_036() {
super(Side.FREE_PEOPLE, 0, Culture.GOLLUM, "Time for Food");
}
@Override
public List<PlayEventAction> getPlayResponseEventAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, CardType.EVENT, Keyword.SKIRMISH)
&& PlayConditions.canSpot(game, Filters.smeagol)
&& PlayUtils.checkPlayRequirements(game, self, Filters.any, 0, 0, false, false)) {
PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new CancelEventEffect(self, (PlayEventResult) effectResult));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,42 +0,0 @@
package com.gempukku.lotro.cards.set18.gollum;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.Token;
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.PlayEventAction;
import com.gempukku.lotro.logic.cardtype.AbstractEvent;
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
import com.gempukku.lotro.logic.effects.OptionalEffect;
import com.gempukku.lotro.logic.effects.ReinforceTokenEffect;
/**
* Set: Treachery & Deceit
* Side: Free
* Culture: Gollum
* Twilight Cost: 0
* Type: Event • Skirmish
* Game Text: Reinforce a [GOLLUM] token. Each Shadow player may draw a card.
*/
public class Card18_037 extends AbstractEvent {
public Card18_037() {
super(Side.FREE_PEOPLE, 0, Culture.GOLLUM, "Trusted Promise", Phase.SKIRMISH);
}
@Override
public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) {
PlayEventAction action = new PlayEventAction(self);
action.appendEffect(
new ReinforceTokenEffect(self, playerId, Token.GOLLUM));
for (String shadowPlayer : GameUtils.getShadowPlayers(game)) {
action.appendEffect(
new OptionalEffect(action, shadowPlayer,
new DrawCardsEffect(action, shadowPlayer, 1)));
}
return action;
}
}

View File

@@ -22,13 +22,19 @@
twilight: 2
type: Event
keywords: Skirmish
effects: {
type: event
cost: {
},
requires: {
type: canSpot
filter: name(Shelob)
}
effect: [
{
type: modifyStrength
filter: choose(minion)
amount: {
type: forEachThreat
}
}
]
}
@@ -66,6 +72,21 @@
type: Condition
keywords: Support Area
effects: [
{
type: activatedTrigger
trigger: {
type: aboutToDiscard
opponent: true
filter: your,other,culture(gollum),condition
}
cost: {
type: removeTwilight
}
effect: {
type: preventDiscard
filter: choose(your,other,culture(gollum),condition)
}
}
]
gametext: <b>Response:</b> If a Free Peoples player's card is about to discard your other [gollum] condition, remove (1) to prevent that.
lore: Presently they were under the shadow, and there in the midst of it they saw the opening of a cave. 'This is the way in,' said Gollum softly.
@@ -100,13 +121,16 @@
twilight: 0
type: Event
keywords: Shadow
effects: {
type: event
cost: {
},
type: heal
filter: choose(ringBound,companion)
}
effect: [
{
type: reinforceTokens
culture: gollum
}
]
}
@@ -143,13 +167,31 @@
twilight: 0
type: Event
keywords: Shadow
effects: {
type: event
cost: {
},
requires: {
type: canSpot
filter: culture(gollum)
}
effect: [
{
type: choice
texts: [
Play a non-roaming minion
Play a roaming minion
]
effects: [
{
type: play
filter: choose(not(roaming),minion)
cost: -1
}
{
type: play
filter: choose(roaming,minion)
cost: -3
}
]
}
]
}
@@ -187,6 +229,41 @@
type: Condition
keywords: Support Area
effects: [
{
type: activated
phase: shadow
cost: {
type: removeTwilight
amount: 3
}
effect: [
{
type: putCardsFromDeckIntoHand
filter: choose(culture(gollum))
reveal: true
shuffle: true
}
{
type: discardFromHand
forced: false
filter: random(1)
}
]
}
{
type: activated
phase: skirmish
cost: {
type: discardFromHand
forced: false
filter: choose(culture(gollum))
}
effect: {
type: modifyStrength
filter: choose(culture(gollum),minion)
amount: 2
}
}
]
gametext: <b>Shadow:</b> Remove (3) to take a [gollum] card into hand from your draw deck, then randomly discard a card from your hand.<br><b>Skirmish:</b> Discard a [gollum] card from hand to make a [gollum] minion strength +2.
lore: But I still feel that they are looking at me, or thinking about me: making some other plan, perhaps.'
@@ -224,10 +301,14 @@
effects: {
type: event
cost: {
},
requires: {
type: canSpot
filter: or(name(Gollum),name(Sméagol))
}
effect: [
{
type: returnToHand
filter: choose(follower)
}
]
}
@@ -270,6 +351,49 @@
site: 8
keywords: Fierce
effects: [
{
type: trigger
text: Add threats up to the number of burdens
optional: true
trigger: {
type: winsSkirmish
filter: self
}
effect: {
type: addThreats
amount: {
type: forEachBurden
}
}
}
{
type: trigger
text: Play Gollum from your discard pile
optional: true
trigger: {
type: winsSkirmish
filter: self
}
effect: [
{
type: playCardFromDiscard
filter: choose(name(Gollum))
memorize: playedGollum
}
{
type: modifyStrength
filter: memory(playedGollum)
amount: 3
until: endOfTurn
}
{
type: addKeyword
filter: memory(playedGollum)
keyword: fierce
until: endOfTurn
}
]
}
]
gametext: <b>Fierce</b>.<br>Each time Shelob wins a skirmish, you may add threats up to the number of burdens you can spot.<br>Each time Shelob wins a skirmish, you may play Gollum from your discard pile; he is strength +3 and <b>fierce</b> until the end of turn.
lore: ""
@@ -304,13 +428,22 @@
twilight: 10
type: Event
keywords: Regroup
effects: {
type: event
cost: {
},
requires: {
type: canSpot
filter: name(Shelob)
}
effect: [
{
type: kill
player: free people
filter: choose(companion,not(ringBearer))
}
{
type: returnToHand
player: free people
filter: choose(companion,not(ringBearer))
}
]
}
@@ -347,19 +480,22 @@
twilight: 0
type: Event
keywords: Response
effects: {
type: responseEvent
trigger: {
type: played
filter: skirmish,event
}
cost: {
requires: {
type: canSpot
filter: name(Sméagol)
}
effect: [
{
type: cancelEvent
}
]
]
}
gametext: If a skirmish event is played, spot Sméagol to cancel that event.
lore: Oh yes we could! Spoil nice fish. Give it to usss rrraw... and wrrriggling! You keep nasty chips.
promotext: ""
@@ -393,13 +529,21 @@
twilight: 0
type: Event
keywords: Skirmish
effects: {
type: event
cost: {
},
effect: [
{
type: reinforceTokens
culture: gollum
}
{
type: optional
player: shadow
text: Would you like to draw a card?
effect: {
type: drawCards
player: shadow
}
}
]
}

View File

@@ -17,7 +17,7 @@ import org.json.simple.JSONObject;
public class TriggerEffectProcessor implements EffectProcessor {
@Override
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "trigger", "optional", "requires", "cost", "effect", "text", "player", "limitPerTurn", "limitPerPhase", "phase");
FieldUtils.validateAllowedFields(value, "trigger", "optional", "requires", "cost", "effect", "text", "player", "limitPerTurn", "limitPerPhase", "phase", "identifierSuffix");
final String text = FieldUtils.getString(value.get("text"), "text");
final JSONObject[] triggerArray = FieldUtils.getObjectArray(value.get("trigger"), "trigger");
@@ -30,6 +30,7 @@ public class TriggerEffectProcessor implements EffectProcessor {
final String player = FieldUtils.getString(value.get("player"), "player");
PlayerSource playerSource = (player != null) ? PlayerResolver.resolvePlayer(player, environment) : null;
final String identifierSuffix = FieldUtils.getString(value.get("identifierSuffix"), "identifierSuffix");
for (JSONObject trigger : triggerArray) {
final TriggerChecker triggerChecker = environment.getTriggerCheckerFactory().getTriggerChecker(trigger, environment);

View File

@@ -27,8 +27,10 @@ public class PutCardsFromDeckIntoHand implements EffectAppenderProducer {
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)");
final boolean shuffle = FieldUtils.getBoolean(effectObject.get("shuffle"), "shuffle", true);
final boolean reveal = FieldUtils.getBoolean(effectObject.get("reveal"), "reveal", true);
// TODO - changed the default - have to go through all cards to check which should be revealed
final boolean shuffle = FieldUtils.getBoolean(effectObject.get("shuffle"), "shuffle", false);
// TODO - changed the default - have to go through all cards to check which should be revealed
final boolean reveal = FieldUtils.getBoolean(effectObject.get("reveal"), "reveal", false);
MultiEffectAppender result = new MultiEffectAppender();