Cards from set 16 (The Wraith Collection) are in new system
This commit is contained in:
226
gemp-lotr/gemp-lotr-async/src/main/web/cards/set16.json
Normal file
226
gemp-lotr/gemp-lotr-async/src/main/web/cards/set16.json
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
{
|
||||||
|
"16_1": {
|
||||||
|
"title": "*Barrow-wight Stalker",
|
||||||
|
"culture": "wraith",
|
||||||
|
"cost": 5,
|
||||||
|
"type": "minion",
|
||||||
|
"race": "wraith",
|
||||||
|
"strength": 11,
|
||||||
|
"vitality": 4,
|
||||||
|
"site": 2,
|
||||||
|
"keyword": "enduring",
|
||||||
|
"effects": [
|
||||||
|
{
|
||||||
|
"type": "modifier",
|
||||||
|
"modifier": {
|
||||||
|
"type": "cantTakeWounds",
|
||||||
|
"filter": "culture(wraith),wraith",
|
||||||
|
"condition": {
|
||||||
|
"type": "not",
|
||||||
|
"condition": {
|
||||||
|
"type": "phase",
|
||||||
|
"phase": "skirmish"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "activated",
|
||||||
|
"phase": "shadow",
|
||||||
|
"cost": {
|
||||||
|
"type": "removeBurdens"
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"type": "play",
|
||||||
|
"filter": "choose(culture(wraith),wraith)",
|
||||||
|
"cost": -2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"16_2": {
|
||||||
|
"title": "Candle Corpses",
|
||||||
|
"culture": "wraith",
|
||||||
|
"cost": 3,
|
||||||
|
"type": "minion",
|
||||||
|
"race": "wraith",
|
||||||
|
"strength": 8,
|
||||||
|
"vitality": 2,
|
||||||
|
"site": 3,
|
||||||
|
"keyword": "enduring",
|
||||||
|
"effects": {
|
||||||
|
"type": "trigger",
|
||||||
|
"optional": true,
|
||||||
|
"trigger": {
|
||||||
|
"type": "assignedToSkirmish",
|
||||||
|
"side": "free people",
|
||||||
|
"filter": "self",
|
||||||
|
"against": "companion",
|
||||||
|
"memorizeAgainst": "assignedToCompanion"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "canSpot",
|
||||||
|
"filter": "another,culture(wraith),wraith"
|
||||||
|
},
|
||||||
|
"cost": {
|
||||||
|
"type": "removeTwilight",
|
||||||
|
"amount": 2
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"type": "wound",
|
||||||
|
"filter": "memory(assignedToCompanion)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"16_3": {
|
||||||
|
"title": "*Covetous Wisp",
|
||||||
|
"culture": "wraith",
|
||||||
|
"cost": 2,
|
||||||
|
"type": "minion",
|
||||||
|
"race": "wraith",
|
||||||
|
"strength": 4,
|
||||||
|
"vitality": 2,
|
||||||
|
"site": 3,
|
||||||
|
"keyword": "enduring",
|
||||||
|
"effects": {
|
||||||
|
"type": "trigger",
|
||||||
|
"optional": true,
|
||||||
|
"trigger": {
|
||||||
|
"type": "assignedToSkirmish",
|
||||||
|
"side": "free people",
|
||||||
|
"filter": "self",
|
||||||
|
"against": "companion"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "canSpot",
|
||||||
|
"filter": "another,culture(wraith),wraith"
|
||||||
|
},
|
||||||
|
"cost": {
|
||||||
|
"type": "removeTwilight",
|
||||||
|
"amount": 2
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"type": "addBurdens"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"16_4": {
|
||||||
|
"title": "Dead Faces",
|
||||||
|
"culture": "wraith",
|
||||||
|
"cost": 2,
|
||||||
|
"type": "minion",
|
||||||
|
"race": "wraith",
|
||||||
|
"strength": 4,
|
||||||
|
"vitality": 2,
|
||||||
|
"site": 3,
|
||||||
|
"keyword": "enduring",
|
||||||
|
"effects": {
|
||||||
|
"type": "trigger",
|
||||||
|
"optional": true,
|
||||||
|
"trigger": {
|
||||||
|
"type": "assignedToSkirmish",
|
||||||
|
"side": "free people",
|
||||||
|
"filter": "self",
|
||||||
|
"against": "companion"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "canSpot",
|
||||||
|
"filter": "another,culture(wraith),wraith"
|
||||||
|
},
|
||||||
|
"cost": {
|
||||||
|
"type": "removeTwilight",
|
||||||
|
"amount": 2
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"type": "discard",
|
||||||
|
"filter": "choose(condition)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"16_5": {
|
||||||
|
"title": "*Spirit of Dread",
|
||||||
|
"culture": "wraith",
|
||||||
|
"cost": 7,
|
||||||
|
"type": "minion",
|
||||||
|
"race": "wraith",
|
||||||
|
"strength": 14,
|
||||||
|
"vitality": 3,
|
||||||
|
"site": 2,
|
||||||
|
"keyword": "enduring",
|
||||||
|
"effects": [
|
||||||
|
{
|
||||||
|
"type": "modifier",
|
||||||
|
"modifier": {
|
||||||
|
"type": "cantHeal",
|
||||||
|
"condition": {
|
||||||
|
"type": "canSpot",
|
||||||
|
"filter": "another,culture(wraith),wraith"
|
||||||
|
},
|
||||||
|
"filter": "any"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "modifier",
|
||||||
|
"modifier": {
|
||||||
|
"type": "cantRemoveBurdens",
|
||||||
|
"condition": {
|
||||||
|
"type": "canSpot",
|
||||||
|
"filter": "another,culture(wraith),wraith"
|
||||||
|
},
|
||||||
|
"filter": "not(wraith)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "activated",
|
||||||
|
"phase": "skirmish",
|
||||||
|
"cost": {
|
||||||
|
"type": "exert",
|
||||||
|
"filter": "self"
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"type": "modifyStrength",
|
||||||
|
"filter": "choose(another,culture(wraith),wraith)",
|
||||||
|
"amount": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"16_6": {
|
||||||
|
"title": "*Undead of Angmar",
|
||||||
|
"culture": "wraith",
|
||||||
|
"cost": 4,
|
||||||
|
"type": "minion",
|
||||||
|
"race": "wraith",
|
||||||
|
"strength": 9,
|
||||||
|
"vitality": 3,
|
||||||
|
"site": 2,
|
||||||
|
"keyword": "enduring",
|
||||||
|
"effects": [
|
||||||
|
{
|
||||||
|
"type": "modifier",
|
||||||
|
"modifier": {
|
||||||
|
"type": "modifyResistance",
|
||||||
|
"filter": "wounded,companion",
|
||||||
|
"condition": {
|
||||||
|
"type": "canSpot",
|
||||||
|
"filter": "another,culture(wraith),wraith"
|
||||||
|
},
|
||||||
|
"amount": -2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "activated",
|
||||||
|
"phase": "shadow",
|
||||||
|
"cost": {
|
||||||
|
"type": "exert",
|
||||||
|
"filter": "self",
|
||||||
|
"times": 2
|
||||||
|
},
|
||||||
|
"effect": {
|
||||||
|
"type": "playCardFromDrawDeck",
|
||||||
|
"filter": "choose(culture(wraith),wraith)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set16.wraith;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.common.Culture;
|
|
||||||
import com.gempukku.lotro.common.Keyword;
|
|
||||||
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.RemoveBurdenEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromHandEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.CantTakeWoundsModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.condition.NotCondition;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.condition.PhaseCondition;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: The Wraith Collection
|
|
||||||
* Side: Shadow
|
|
||||||
* Culture: Wraith
|
|
||||||
* Twilight Cost: 5
|
|
||||||
* Type: Minion • Wraith
|
|
||||||
* Strength: 11
|
|
||||||
* Vitality: 4
|
|
||||||
* Site: 2
|
|
||||||
* Game Text: Enduring. Each [WRAITH] Wraith cannot take wounds (except during skirmishes).
|
|
||||||
* Shadow: Remove a burden to play a [WRAITH] Wraith. That minion's twilight cost is -2.
|
|
||||||
*/
|
|
||||||
public class Card16_001 extends AbstractMinion {
|
|
||||||
public Card16_001() {
|
|
||||||
super(5, 11, 4, 2, Race.WRAITH, Culture.WRAITH, "Barrow-wight Stalker", null, true);
|
|
||||||
addKeyword(Keyword.ENDURING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
return Collections.singletonList(new CantTakeWoundsModifier(self, new NotCondition(new PhaseCondition(Phase.SKIRMISH)), Filters.and(Culture.WRAITH, Race.WRAITH)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
|
|
||||||
&& PlayConditions.canRemoveBurdens(game, self, 1)
|
|
||||||
&& PlayConditions.canPlayFromHand(playerId, game, -2, Culture.WRAITH, Race.WRAITH)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new RemoveBurdenEffect(playerId, self, 1));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndPlayCardFromHandEffect(playerId, game, -2, Culture.WRAITH, Race.WRAITH));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set16.wraith;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
|
||||||
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
|
|
||||||
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.effects.WoundCharactersEffect;
|
|
||||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
|
||||||
import com.gempukku.lotro.logic.timing.results.AssignAgainstResult;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: The Wraith Collection
|
|
||||||
* Side: Shadow
|
|
||||||
* Culture: Wraith
|
|
||||||
* Twilight Cost: 3
|
|
||||||
* Type: Minion • Wraith
|
|
||||||
* Strength: 8
|
|
||||||
* Vitality: 2
|
|
||||||
* Site: 3
|
|
||||||
* Game Text: Enduring. Each time the Free Peoples player assigns this minion to a companion, you may spot another
|
|
||||||
* [WRAITH] Wraith and remove (2) to wound that companion.
|
|
||||||
*/
|
|
||||||
public class Card16_002 extends AbstractMinion {
|
|
||||||
public Card16_002() {
|
|
||||||
super(3, 8, 2, 3, Race.WRAITH, Culture.WRAITH, "Candle Corpses");
|
|
||||||
addKeyword(Keyword.ENDURING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
|
||||||
if (TriggerConditions.assignedAgainst(game, effectResult, Side.FREE_PEOPLE, CardType.COMPANION, self)
|
|
||||||
&& PlayConditions.canSpot(game, Filters.not(self), Culture.WRAITH, Race.WRAITH)
|
|
||||||
&& game.getGameState().getTwilightPool() >= 2) {
|
|
||||||
AssignAgainstResult assignmentResult = (AssignAgainstResult) effectResult;
|
|
||||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new RemoveTwilightEffect(2));
|
|
||||||
action.appendEffect(
|
|
||||||
new WoundCharactersEffect(self, Filters.in(assignmentResult.getAgainst())));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set16.wraith;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
|
||||||
import com.gempukku.lotro.logic.effects.AddBurdenEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
|
|
||||||
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.timing.EffectResult;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: The Wraith Collection
|
|
||||||
* Side: Shadow
|
|
||||||
* Culture: Wraith
|
|
||||||
* Twilight Cost: 2
|
|
||||||
* Type: Minion • Wraith
|
|
||||||
* Strength: 4
|
|
||||||
* Vitality: 2
|
|
||||||
* Site: 3
|
|
||||||
* Game Text: Enduring. Each time the Free Peoples player assigns Covetous Wisp to a companion, you may spot another
|
|
||||||
* [WRAITH] Wraith and remove (2) to add a burden.
|
|
||||||
*/
|
|
||||||
public class Card16_003 extends AbstractMinion {
|
|
||||||
public Card16_003() {
|
|
||||||
super(2, 4, 2, 3, Race.WRAITH, Culture.WRAITH, "Covetous Wisp", null, true);
|
|
||||||
addKeyword(Keyword.ENDURING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
|
||||||
if (TriggerConditions.assignedAgainst(game, effectResult, Side.FREE_PEOPLE, CardType.COMPANION, self)
|
|
||||||
&& PlayConditions.canSpot(game, Filters.not(self), Culture.WRAITH, Race.WRAITH)
|
|
||||||
&& game.getGameState().getTwilightPool() >= 2) {
|
|
||||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new RemoveTwilightEffect(2));
|
|
||||||
action.appendEffect(
|
|
||||||
new AddBurdenEffect(self.getOwner(), self, 1));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set16.wraith;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
|
||||||
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
|
|
||||||
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.timing.EffectResult;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: The Wraith Collection
|
|
||||||
* Side: Shadow
|
|
||||||
* Culture: Wraith
|
|
||||||
* Twilight Cost: 2
|
|
||||||
* Type: Minion • Wraith
|
|
||||||
* Strength: 4
|
|
||||||
* Vitality: 2
|
|
||||||
* Site: 3
|
|
||||||
* Game Text: Enduring. Each time the Free Peoples player assigns this minion to a companion, you may spot another
|
|
||||||
* [WRAITH] Wraith and remove (2) to discard a condition.
|
|
||||||
*/
|
|
||||||
public class Card16_004 extends AbstractMinion {
|
|
||||||
public Card16_004() {
|
|
||||||
super(2, 4, 2, 3, Race.WRAITH, Culture.WRAITH, "Dead Faces");
|
|
||||||
addKeyword(Keyword.ENDURING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
|
||||||
if (TriggerConditions.assignedAgainst(game, effectResult, Side.FREE_PEOPLE, CardType.COMPANION, self)
|
|
||||||
&& PlayConditions.canSpot(game, Filters.not(self), Culture.WRAITH, Race.WRAITH)
|
|
||||||
&& game.getGameState().getTwilightPool() >= 2) {
|
|
||||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new RemoveTwilightEffect(2));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.CONDITION));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set16.wraith;
|
|
||||||
|
|
||||||
import com.gempukku.lotro.common.Culture;
|
|
||||||
import com.gempukku.lotro.common.Keyword;
|
|
||||||
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.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.CantHealModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.CantRemoveBurdensModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.SpotCondition;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: The Wraith Collection
|
|
||||||
* Side: Shadow
|
|
||||||
* Culture: Wraith
|
|
||||||
* Twilight Cost: 7
|
|
||||||
* Type: Minion • Wraith
|
|
||||||
* Strength: 14
|
|
||||||
* Vitality: 3
|
|
||||||
* Site: 2
|
|
||||||
* Game Text: Enduring. While you can spot another [WRAITH] Wraith, wounds cannot be healed and burdens can
|
|
||||||
* not be removed (except by Wraiths). Skirmish: Exert Spirit of Dread to make another [WRAITH] Wraith strength +1.
|
|
||||||
*/
|
|
||||||
public class Card16_005 extends AbstractMinion {
|
|
||||||
public Card16_005() {
|
|
||||||
super(7, 14, 3, 2, Race.WRAITH, Culture.WRAITH, "Spirit of Dread", null, true);
|
|
||||||
addKeyword(Keyword.ENDURING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
List<Modifier> modifiers = new LinkedList<Modifier>();
|
|
||||||
modifiers.add(
|
|
||||||
new CantHealModifier(self, new SpotCondition(Filters.not(self), Culture.WRAITH, Race.WRAITH), Filters.any));
|
|
||||||
modifiers.add(
|
|
||||||
new CantRemoveBurdensModifier(self, new SpotCondition(Filters.not(self), Culture.WRAITH, Race.WRAITH), Filters.not(Race.WRAITH)));
|
|
||||||
return modifiers;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)
|
|
||||||
&& PlayConditions.canSelfExert(self, game)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new SelfExertEffect(action, self));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndAddUntilEOPStrengthBonusEffect(
|
|
||||||
action, self, playerId, 1, Filters.not(self), Culture.WRAITH, Race.WRAITH));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
package com.gempukku.lotro.cards.set16.wraith;
|
|
||||||
|
|
||||||
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.AbstractMinion;
|
|
||||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
|
||||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDeckEffect;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.ResistanceModifier;
|
|
||||||
import com.gempukku.lotro.logic.modifiers.SpotCondition;
|
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set: The Wraith Collection
|
|
||||||
* Side: Shadow
|
|
||||||
* Culture: Wraith
|
|
||||||
* Twilight Cost: 4
|
|
||||||
* Type: Minion • Wraith
|
|
||||||
* Strength: 9
|
|
||||||
* Vitality: 3
|
|
||||||
* Site: 2
|
|
||||||
* Game Text: Enduring. While you can spot another [WRAITH] Wraith, each wounded companion is resistance -2.
|
|
||||||
* Shadow: Exert Undead of Angmar twice to play a [WRAITH] Wraith from your draw deck, then reshuffle.
|
|
||||||
*/
|
|
||||||
public class Card16_006 extends AbstractMinion {
|
|
||||||
public Card16_006() {
|
|
||||||
super(4, 9, 3, 2, Race.WRAITH, Culture.WRAITH, "Undead of Angmar", null, true);
|
|
||||||
addKeyword(Keyword.ENDURING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
|
||||||
return Collections.singletonList(new ResistanceModifier(self, Filters.and(CardType.COMPANION, Filters.wounded), new SpotCondition(Filters.not(self), Culture.WRAITH, Race.WRAITH), -2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
|
|
||||||
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
|
|
||||||
&& PlayConditions.canSelfExert(self, 2, game)) {
|
|
||||||
ActivateCardAction action = new ActivateCardAction(self);
|
|
||||||
action.appendCost(
|
|
||||||
new SelfExertEffect(action, self));
|
|
||||||
action.appendCost(
|
|
||||||
new SelfExertEffect(action, self));
|
|
||||||
action.appendEffect(
|
|
||||||
new ChooseAndPlayCardFromDeckEffect(playerId, Culture.WRAITH, Race.WRAITH));
|
|
||||||
return Collections.singletonList(action);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -84,7 +84,8 @@
|
|||||||
{
|
{
|
||||||
"setId":"16",
|
"setId":"16",
|
||||||
"setName":"The Wraith Collection",
|
"setName":"The Wraith Collection",
|
||||||
"rarityFile":"/set16-rarity.txt"
|
"rarityFile": "/set16-rarity.txt",
|
||||||
|
"needsLoading": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"setId":"17",
|
"setId":"17",
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||||
|
|
||||||
import com.gempukku.lotro.cards.build.ActionContext;
|
import com.gempukku.lotro.cards.build.*;
|
||||||
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.field.FieldUtils;
|
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
||||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
|
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
|
||||||
|
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||||
import com.gempukku.lotro.common.Filterable;
|
import com.gempukku.lotro.common.Filterable;
|
||||||
import com.gempukku.lotro.filters.Filters;
|
import com.gempukku.lotro.filters.Filters;
|
||||||
import com.gempukku.lotro.game.PhysicalCard;
|
import com.gempukku.lotro.game.PhysicalCard;
|
||||||
@@ -26,10 +24,11 @@ import java.util.Collection;
|
|||||||
public class PlayCardFromHand implements EffectAppenderProducer {
|
public class PlayCardFromHand implements EffectAppenderProducer {
|
||||||
@Override
|
@Override
|
||||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
FieldUtils.validateAllowedFields(effectObject, "filter", "on");
|
FieldUtils.validateAllowedFields(effectObject, "filter", "on", "cost");
|
||||||
|
|
||||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||||
final String onFilter = FieldUtils.getString(effectObject.get("on"), "on");
|
final String onFilter = FieldUtils.getString(effectObject.get("on"), "on");
|
||||||
|
final ValueSource costModifierSource = ValueResolver.resolveEvaluator(effectObject.get("cost"), 0, environment);
|
||||||
|
|
||||||
final FilterableSource onFilterableSource = (onFilter != null) ? environment.getFilterFactory().generateFilter(onFilter, environment) : null;
|
final FilterableSource onFilterableSource = (onFilter != null) ? environment.getFilterFactory().generateFilter(onFilter, environment) : null;
|
||||||
|
|
||||||
@@ -39,11 +38,13 @@ public class PlayCardFromHand implements EffectAppenderProducer {
|
|||||||
result.addEffectAppender(
|
result.addEffectAppender(
|
||||||
CardResolver.resolveCardsInHand(filter,
|
CardResolver.resolveCardsInHand(filter,
|
||||||
(actionContext) -> {
|
(actionContext) -> {
|
||||||
|
final LotroGame game = actionContext.getGame();
|
||||||
|
final int costModifier = costModifierSource.getEvaluator(actionContext).evaluateExpression(game, actionContext.getSource());
|
||||||
if (onFilterableSource != null) {
|
if (onFilterableSource != null) {
|
||||||
final Filterable onFilterable = onFilterableSource.getFilterable(actionContext);
|
final Filterable onFilterable = onFilterableSource.getFilterable(actionContext);
|
||||||
return Filters.and(Filters.playable(actionContext.getGame()), ExtraFilters.attachableTo(actionContext.getGame(), onFilterable));
|
return Filters.and(Filters.playable(game, costModifier), ExtraFilters.attachableTo(game, onFilterable));
|
||||||
}
|
}
|
||||||
return Filters.playable(actionContext.getGame());
|
return Filters.playable(game, costModifier);
|
||||||
},
|
},
|
||||||
new ConstantEvaluator(1), "_temp", "you", "Choose card to play", environment));
|
new ConstantEvaluator(1), "_temp", "you", "Choose card to play", environment));
|
||||||
result.addEffectAppender(
|
result.addEffectAppender(
|
||||||
@@ -52,9 +53,12 @@ public class PlayCardFromHand implements EffectAppenderProducer {
|
|||||||
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
||||||
final Collection<? extends PhysicalCard> cardsToPlay = actionContext.getCardsFromMemory("_temp");
|
final Collection<? extends PhysicalCard> cardsToPlay = actionContext.getCardsFromMemory("_temp");
|
||||||
if (cardsToPlay.size() == 1) {
|
if (cardsToPlay.size() == 1) {
|
||||||
|
final LotroGame game = actionContext.getGame();
|
||||||
|
final int costModifier = costModifierSource.getEvaluator(actionContext).evaluateExpression(game, actionContext.getSource());
|
||||||
|
|
||||||
Filterable onFilterable = (onFilterableSource != null) ? onFilterableSource.getFilterable(actionContext) : Filters.any;
|
Filterable onFilterable = (onFilterableSource != null) ? onFilterableSource.getFilterable(actionContext) : Filters.any;
|
||||||
|
|
||||||
final CostToEffectAction playCardAction = PlayUtils.getPlayCardAction(actionContext.getGame(), cardsToPlay.iterator().next(), 0, onFilterable, false);
|
final CostToEffectAction playCardAction = PlayUtils.getPlayCardAction(game, cardsToPlay.iterator().next(), costModifier, onFilterable, false);
|
||||||
return new StackActionEffect(playCardAction);
|
return new StackActionEffect(playCardAction);
|
||||||
} else {
|
} else {
|
||||||
return new UnrespondableEffect() {
|
return new UnrespondableEffect() {
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
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.logic.modifiers.CantHealModifier;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class CantHeal implements ModifierSourceProducer {
|
||||||
|
@Override
|
||||||
|
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
|
FieldUtils.validateAllowedFields(object, "filter", "condition");
|
||||||
|
|
||||||
|
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||||
|
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||||
|
|
||||||
|
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||||
|
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||||
|
|
||||||
|
return (actionContext) -> {
|
||||||
|
return new CantHealModifier(actionContext.getSource(),
|
||||||
|
new RequirementCondition(requirements, actionContext),
|
||||||
|
filterableSource.getFilterable(actionContext));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
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.logic.modifiers.CantRemoveBurdensModifier;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class CantRemoveBurdens implements ModifierSourceProducer {
|
||||||
|
@Override
|
||||||
|
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
|
FieldUtils.validateAllowedFields(object, "filter", "condition");
|
||||||
|
|
||||||
|
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||||
|
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||||
|
|
||||||
|
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||||
|
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||||
|
|
||||||
|
return (actionContext) -> {
|
||||||
|
return new CantRemoveBurdensModifier(actionContext.getSource(),
|
||||||
|
new RequirementCondition(requirements, actionContext),
|
||||||
|
filterableSource.getFilterable(actionContext));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,7 @@ public class ModifierSourceFactory {
|
|||||||
modifierProducers.put("modifyplayoncost", new ModifyPlayOnCost());
|
modifierProducers.put("modifyplayoncost", new ModifyPlayOnCost());
|
||||||
modifierProducers.put("modifyroamingpenalty", new ModifyRoamingPenalty());
|
modifierProducers.put("modifyroamingpenalty", new ModifyRoamingPenalty());
|
||||||
modifierProducers.put("modifystrength", new ModifyStrength());
|
modifierProducers.put("modifystrength", new ModifyStrength());
|
||||||
|
modifierProducers.put("modifyresistance", new ModifyResistance());
|
||||||
modifierProducers.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
|
modifierProducers.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
|
||||||
modifierProducers.put("addnotwilightforcompanionmove", new AddNoTwilightForCompanionMove());
|
modifierProducers.put("addnotwilightforcompanionmove", new AddNoTwilightForCompanionMove());
|
||||||
modifierProducers.put("modifyarcherytotal", new ModifyArcheryTotal());
|
modifierProducers.put("modifyarcherytotal", new ModifyArcheryTotal());
|
||||||
@@ -31,6 +32,8 @@ public class ModifierSourceFactory {
|
|||||||
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
|
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
|
||||||
modifierProducers.put("skipphase", new SkipPhase());
|
modifierProducers.put("skipphase", new SkipPhase());
|
||||||
modifierProducers.put("modifymovelimit", new ModifyMoveLimit());
|
modifierProducers.put("modifymovelimit", new ModifyMoveLimit());
|
||||||
|
modifierProducers.put("cantheal", new CantHeal());
|
||||||
|
modifierProducers.put("cantremoveburdens", new CantRemoveBurdens());
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
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.logic.modifiers.ResistanceModifier;
|
||||||
|
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class ModifyResistance implements ModifierSourceProducer {
|
||||||
|
@Override
|
||||||
|
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
|
FieldUtils.validateAllowedFields(object, "filter", "condition", "amount");
|
||||||
|
|
||||||
|
final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), 1, environment);
|
||||||
|
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||||
|
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||||
|
|
||||||
|
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||||
|
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||||
|
|
||||||
|
return (actionContext) -> {
|
||||||
|
final Evaluator evaluator = valueSource.getEvaluator(actionContext);
|
||||||
|
return new ResistanceModifier(actionContext.getSource(),
|
||||||
|
filterableSource.getFilterable(actionContext),
|
||||||
|
new RequirementCondition(requirements, actionContext), evaluator);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import com.gempukku.lotro.cards.build.FilterableSource;
|
|||||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||||
import com.gempukku.lotro.common.Filterable;
|
import com.gempukku.lotro.common.Filterable;
|
||||||
|
import com.gempukku.lotro.common.Side;
|
||||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||||
import com.gempukku.lotro.logic.timing.results.AssignAgainstResult;
|
import com.gempukku.lotro.logic.timing.results.AssignAgainstResult;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
@@ -13,11 +14,12 @@ import org.json.simple.JSONObject;
|
|||||||
public class AssignedToSkirmish implements TriggerCheckerProducer {
|
public class AssignedToSkirmish implements TriggerCheckerProducer {
|
||||||
@Override
|
@Override
|
||||||
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
FieldUtils.validateAllowedFields(value, "filter", "against", "memorizeAgainst");
|
FieldUtils.validateAllowedFields(value, "filter", "side", "against", "memorizeAgainst");
|
||||||
|
|
||||||
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
|
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
|
||||||
final String against = FieldUtils.getString(value.get("against"), "against", "any");
|
final String against = FieldUtils.getString(value.get("against"), "against", "any");
|
||||||
final String memorizeAgainst = FieldUtils.getString(value.get("memorizeAgainst"), "memorizeAgainst");
|
final String memorizeAgainst = FieldUtils.getString(value.get("memorizeAgainst"), "memorizeAgainst");
|
||||||
|
final Side side = FieldUtils.getEnum(Side.class, value.get("side"), "side");
|
||||||
|
|
||||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||||
final FilterableSource againstSource = environment.getFilterFactory().generateFilter(against, environment);
|
final FilterableSource againstSource = environment.getFilterFactory().generateFilter(against, environment);
|
||||||
@@ -32,7 +34,7 @@ public class AssignedToSkirmish implements TriggerCheckerProducer {
|
|||||||
public boolean accepts(ActionContext actionContext) {
|
public boolean accepts(ActionContext actionContext) {
|
||||||
final Filterable assignedFilterable = filterableSource.getFilterable(actionContext);
|
final Filterable assignedFilterable = filterableSource.getFilterable(actionContext);
|
||||||
final Filterable againstFilterable = againstSource.getFilterable(actionContext);
|
final Filterable againstFilterable = againstSource.getFilterable(actionContext);
|
||||||
final boolean result = TriggerConditions.assignedAgainst(actionContext.getGame(), actionContext.getEffectResult(), null,
|
final boolean result = TriggerConditions.assignedAgainst(actionContext.getGame(), actionContext.getEffectResult(), side,
|
||||||
againstFilterable, assignedFilterable);
|
againstFilterable, assignedFilterable);
|
||||||
if (result && memorizeAgainst!=null) {
|
if (result && memorizeAgainst!=null) {
|
||||||
AssignAgainstResult assignmentResult = (AssignAgainstResult) actionContext.getEffectResult();
|
AssignAgainstResult assignmentResult = (AssignAgainstResult) actionContext.getEffectResult();
|
||||||
|
|||||||
Reference in New Issue
Block a user