Migrated Site cards in set 13 to hjson
This commit is contained in:
@@ -1,42 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
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.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 0
|
||||
* Type: Site
|
||||
* Game Text: Underground. If this site is not in region 1 when the fellowship moves from here during the regroup phase,
|
||||
* add a burden.
|
||||
*/
|
||||
public class Card13_185 extends AbstractShadowsSite {
|
||||
public Card13_185() {
|
||||
super("Abandoned Mine Shaft", 0, Direction.LEFT);
|
||||
addKeyword(Keyword.UNDERGROUND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.movesFrom(game, effectResult, self, Filters.not(Filters.region(1)))
|
||||
&& PlayConditions.isPhase(game, Phase.REGROUP)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddBurdenEffect(self.getOwner(), self, 1));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.RemoveBurdenEffect;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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: Bloodlines
|
||||
* Twilight Cost: 3
|
||||
* Type: Site
|
||||
* Game Text: Underground. When the fellowship moves to this site during the regroup phase, the Free Peoples player may
|
||||
* remove 2 burdens.
|
||||
*/
|
||||
public class Card13_186 extends AbstractShadowsSite {
|
||||
public Card13_186() {
|
||||
super("Caves of Aglarond", 3, Direction.RIGHT);
|
||||
addKeyword(Keyword.UNDERGROUND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.movesTo(game, effectResult, self)
|
||||
&& PlayConditions.isPhase(game, Phase.REGROUP)
|
||||
&& playerId.equals(game.getGameState().getCurrentPlayerId())) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new RemoveBurdenEffect(playerId, self, 2));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.DrawCardsEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 3
|
||||
* Type: Site
|
||||
* Game Text: Battleground. When the fellowship moves to this site during the regroup phase, the Free Peoples player may
|
||||
* draw a card.
|
||||
*/
|
||||
public class Card13_187 extends AbstractShadowsSite {
|
||||
public Card13_187() {
|
||||
super("City of Kings", 3, Direction.RIGHT);
|
||||
addKeyword(Keyword.BATTLEGROUND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.movesTo(game, effectResult, self)
|
||||
&& PlayConditions.isPhase(game, Phase.REGROUP)
|
||||
&& playerId.equals(game.getGameState().getCurrentPlayerId())) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new DrawCardsEffect(action, playerId, 1));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
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.common.Keyword;
|
||||
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.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 0
|
||||
* Type: Site
|
||||
* Game Text: Dwelling. When the fellowship moves to this site, the first Shadow player may discard 2 cards from hand
|
||||
* to add a burden.
|
||||
*/
|
||||
public class Card13_188 extends AbstractShadowsSite {
|
||||
public Card13_188() {
|
||||
super("Courtyard Parapet", 0, Direction.LEFT);
|
||||
addKeyword(Keyword.DWELLING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
String firstShadow = GameUtils.getFirstShadowPlayer(game);
|
||||
if (TriggerConditions.movesTo(game, effectResult, self)
|
||||
&& playerId.equals(firstShadow)
|
||||
&& PlayConditions.canDiscardFromHand(game, playerId, 2, Filters.any)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2));
|
||||
action.appendEffect(
|
||||
new AddBurdenEffect(playerId, self, 1));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.effects.HealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 3
|
||||
* Type: Site
|
||||
* Game Text: Forest. When the fellowship moves to this site during the regroup phase, the Free Peoples player may heal
|
||||
* a companion of each culture.
|
||||
*/
|
||||
public class Card13_189 extends AbstractShadowsSite {
|
||||
public Card13_189() {
|
||||
super("Crossroads of the Fallen Kings", 3, Direction.RIGHT);
|
||||
addKeyword(Keyword.FOREST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.movesTo(game, effectResult, self)
|
||||
&& PlayConditions.isPhase(game, Phase.REGROUP)
|
||||
&& playerId.equals(game.getGameState().getCurrentPlayerId())) {
|
||||
final OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
Set<Culture> companionCultures = new HashSet<>();
|
||||
for (PhysicalCard companion : Filters.filterActive(game, CardType.COMPANION)) {
|
||||
if (companion.getBlueprint().getCulture() != null)
|
||||
companionCultures.add(companion.getBlueprint().getCulture());
|
||||
}
|
||||
|
||||
final Set<PhysicalCard> companionsToHeal = new HashSet<>();
|
||||
|
||||
for (Culture companionCulture : companionCultures) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose a companion to heal", CardType.COMPANION, companionCulture, Filters.canHeal) {
|
||||
@Override
|
||||
protected void cardSelected(LotroGame game, PhysicalCard card) {
|
||||
companionsToHeal.add(card);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
action.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
action.appendEffect(
|
||||
new HealCharactersEffect(self, self.getOwner(), Filters.in(companionsToHeal)));
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
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.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.condition.NotCondition;
|
||||
import com.gempukku.lotro.logic.modifiers.condition.PhaseCondition;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 0
|
||||
* Type: Site
|
||||
* Game Text: Marsh. Each companion of a race that has the most companions is strength -1 until the regroup phase.
|
||||
*/
|
||||
public class Card13_190 extends AbstractShadowsSite {
|
||||
public Card13_190() {
|
||||
super("Doors of Durin", 0, Direction.LEFT);
|
||||
addKeyword(Keyword.MARSH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new StrengthModifier(self,
|
||||
Filters.and(CardType.COMPANION,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(LotroGame game, PhysicalCard physicalCard) {
|
||||
final Race race = physicalCard.getBlueprint().getRace();
|
||||
if (race != null && isRaceMostCommonRaceAmongCompanions(game, race))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}), new NotCondition(new PhaseCondition(Phase.REGROUP)), -1));
|
||||
}
|
||||
|
||||
private boolean isRaceMostCommonRaceAmongCompanions(LotroGame game, Race race) {
|
||||
if (race == null)
|
||||
return false;
|
||||
|
||||
Map<Race, Integer> counts = new HashMap<>();
|
||||
for (PhysicalCard companion : Filters.filterActive(game, CardType.COMPANION)) {
|
||||
final Race companionRace = companion.getBlueprint().getRace();
|
||||
if (companionRace != null) {
|
||||
Integer count = counts.get(companionRace);
|
||||
if (count == null)
|
||||
count = 0;
|
||||
counts.put(companionRace, count + 1);
|
||||
}
|
||||
}
|
||||
|
||||
final Integer thisRaceCount = counts.get(race);
|
||||
if (thisRaceCount == null)
|
||||
return false;
|
||||
for (Map.Entry<Race, Integer> raceCount : counts.entrySet()) {
|
||||
if (raceCount.getValue() > thisRaceCount)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
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.AbstractShadowsSite;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 2
|
||||
* Type: Site
|
||||
* Game Text: River. Each character is strength +1 for each card borne by that character.
|
||||
*/
|
||||
public class Card13_191 extends AbstractShadowsSite {
|
||||
public Card13_191() {
|
||||
super("Fords of Isen", 2, Direction.LEFT);
|
||||
addKeyword(Keyword.RIVER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new StrengthModifier(self, Filters.character, null,
|
||||
new Evaluator() {
|
||||
@Override
|
||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
||||
return Filters.countActive(game, Filters.attachedTo(cardAffected));
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
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.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.modifiers.Condition;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 0
|
||||
* Type: Site
|
||||
* Game Text: Battleground. While a player can spot more companions than minions, each minion is strength +1.
|
||||
*/
|
||||
public class Card13_192 extends AbstractShadowsSite {
|
||||
public Card13_192() {
|
||||
super("The Great Gates", 0, Direction.LEFT);
|
||||
addKeyword(Keyword.BATTLEGROUND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new StrengthModifier(self, CardType.MINION,
|
||||
new Condition() {
|
||||
@Override
|
||||
public boolean isFullfilled(LotroGame game) {
|
||||
return Filters.countActive(game, CardType.COMPANION)
|
||||
> Filters.countActive(game, CardType.MINION);
|
||||
}
|
||||
}, 1));
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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: Bloodlines
|
||||
* Twilight Cost: 0
|
||||
* Type: Site
|
||||
* Game Text: Battleground. Plains. At the start of the regroup phase, each Shadow player may exert a minion to exert
|
||||
* a companion.
|
||||
*/
|
||||
public class Card13_193 extends AbstractShadowsSite {
|
||||
public Card13_193() {
|
||||
super("Isenwash", 0, Direction.LEFT);
|
||||
addKeyword(Keyword.BATTLEGROUND);
|
||||
addKeyword(Keyword.PLAINS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)
|
||||
&& !playerId.equals(game.getGameState().getCurrentPlayerId())
|
||||
&& PlayConditions.canExert(self, game, CardType.MINION)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.MINION));
|
||||
action.appendEffect(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.COMPANION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package com.gempukku.lotro.cards.set13.site;
|
||||
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractShadowsSite;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
|
||||
import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: Bloodlines
|
||||
* Twilight Cost: 2
|
||||
* Type: Site
|
||||
* Game Text: Mountain. Culture tokens cannot be added, removed, or reinforced.
|
||||
*/
|
||||
public class Card13_194 extends AbstractShadowsSite {
|
||||
public Card13_194() {
|
||||
super("Redhorn Pass", 2, Direction.LEFT);
|
||||
addKeyword(Keyword.MOUNTAIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new SpecialFlagModifier(self, ModifierFlag.CANT_TOUCH_CULTURE_TOKENS));
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,20 @@
|
||||
direction: Left
|
||||
keywords: Underground
|
||||
effects: [
|
||||
{
|
||||
type: trigger
|
||||
trigger: {
|
||||
type: movesFrom
|
||||
filter: self,not(regionNumber(1))
|
||||
}
|
||||
requires: {
|
||||
type: phase
|
||||
phase: regroup
|
||||
}
|
||||
effect: {
|
||||
type: addBurdens
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Underground</b>. If this site is not in region 1 when the fellowship moves from here during the regroup phase, add a burden.
|
||||
lore: ""
|
||||
@@ -58,6 +72,23 @@
|
||||
direction: Right
|
||||
keywords: Underground
|
||||
effects: [
|
||||
{
|
||||
type: trigger
|
||||
optional: true
|
||||
player: free people
|
||||
trigger: {
|
||||
type: movesTo
|
||||
filter: self
|
||||
}
|
||||
requires: {
|
||||
type: phase
|
||||
phase: regroup
|
||||
}
|
||||
effect: {
|
||||
type: removeBurdens
|
||||
amount: 2
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Underground</b>. When the fellowship moves to this site during the regroup phase, the Free Peoples player may remove 2 burdens.
|
||||
lore: ""
|
||||
@@ -93,6 +124,23 @@
|
||||
direction: Right
|
||||
keywords: Battleground
|
||||
effects: [
|
||||
{
|
||||
type: trigger
|
||||
optional: true
|
||||
player: free people
|
||||
trigger: {
|
||||
type: movesTo
|
||||
filter: self
|
||||
}
|
||||
requires: {
|
||||
type: phase
|
||||
phase: regroup
|
||||
}
|
||||
effect: {
|
||||
type: drawCards
|
||||
player: free people
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Battleground</b>. When the fellowship moves to this site during the regroup phase, the Free Peoples player may draw a card.
|
||||
lore: ""
|
||||
@@ -128,6 +176,23 @@
|
||||
direction: Left
|
||||
keywords: Dwelling
|
||||
effects: [
|
||||
{
|
||||
type: trigger
|
||||
optional: true
|
||||
player: shadow
|
||||
trigger: {
|
||||
type: movesTo
|
||||
filter: self
|
||||
}
|
||||
cost: {
|
||||
type: discardFromHand
|
||||
forced: false
|
||||
count: 2
|
||||
}
|
||||
effect: {
|
||||
type: addBurdens
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Dwelling</b>. When the fellowship moves to this site, the first Shadow player may discard 2 cards from hand to add a burden.
|
||||
lore: ""
|
||||
@@ -162,6 +227,53 @@
|
||||
block: Shadows
|
||||
direction: Right
|
||||
effects: [
|
||||
{
|
||||
type: trigger
|
||||
optional: true
|
||||
player: free people
|
||||
trigger: {
|
||||
type: movesTo
|
||||
filter: self
|
||||
}
|
||||
requires: {
|
||||
type: phase
|
||||
phase: regroup
|
||||
}
|
||||
effect: [
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(dwarven))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(elven))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(gandalf))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(gollum))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(gondor))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(rohan))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(shire))
|
||||
}
|
||||
{
|
||||
type: heal
|
||||
filter: choose(companion,culture(esgaroth))
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
gametext: <span style="word-spacing:-0.02em;font-size:98%"><b>Forest</b>. When the fellowship moves to this site during the regroup phase, the Free Peoples player may heal a companion of each culture.</span>
|
||||
lore: ""
|
||||
@@ -197,6 +309,14 @@
|
||||
direction: Left
|
||||
keywords: Marsh
|
||||
effects: [
|
||||
{
|
||||
type: modifier
|
||||
modifier: {
|
||||
type: modifyStrength
|
||||
filter: companion,highestRaceCount(companion)
|
||||
amount: -1
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Marsh</b>. Each companion of each race that has the most companions is strength -1.
|
||||
lore: ""
|
||||
@@ -232,6 +352,17 @@
|
||||
direction: Left
|
||||
keywords: River
|
||||
effects: [
|
||||
{
|
||||
type: modifier
|
||||
modifier: {
|
||||
type: modifyStrength
|
||||
filter: character
|
||||
amount: {
|
||||
type: forEachHasAttached
|
||||
filter: any
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>River</b>. Each character is strength +1 for each card borne by that character.
|
||||
lore: ""
|
||||
@@ -267,6 +398,25 @@
|
||||
direction: Left
|
||||
keywords: Battleground
|
||||
effects: [
|
||||
{
|
||||
type: modifier
|
||||
modifier: {
|
||||
type: modifyStrength
|
||||
requires: {
|
||||
type: isGreaterThan
|
||||
firstNumber: {
|
||||
type: forEachYouCanSpot
|
||||
filter: companion
|
||||
}
|
||||
secondNumber: {
|
||||
type: forEachYouCanSpot
|
||||
filter: minion
|
||||
}
|
||||
}
|
||||
filter: minion
|
||||
amount: 1
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Battleground</b>. While a player can spot more companions than minions, each minion is strength +1.
|
||||
lore: ""
|
||||
@@ -305,6 +455,23 @@
|
||||
Plains
|
||||
]
|
||||
effects: [
|
||||
{
|
||||
type: trigger
|
||||
optional: true
|
||||
player: shadow
|
||||
trigger: {
|
||||
type: startOfPhase
|
||||
phase: regroup
|
||||
}
|
||||
cost: {
|
||||
type: exert
|
||||
filter: choose(minion)
|
||||
}
|
||||
effect: {
|
||||
type: exert
|
||||
filter: choose(companion)
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Battleground</b>. <b>Plains</b>. At the start of the regroup phase, each Shadow player may exert a minion to exert a companion.
|
||||
lore: ""
|
||||
@@ -340,6 +507,12 @@
|
||||
direction: Left
|
||||
keywords: Mountain
|
||||
effects: [
|
||||
{
|
||||
type: modifier
|
||||
modifier: {
|
||||
type: cantTouchTokens
|
||||
}
|
||||
}
|
||||
]
|
||||
gametext: <b>Mountain</b>. Culture tokens cannot be added, removed, or reinforced.
|
||||
lore: ""
|
||||
@@ -297,6 +297,38 @@ public class FilterFactory {
|
||||
return Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game, filterable).size() >= count;
|
||||
});
|
||||
});
|
||||
parameterFilters.put("highestracecount",
|
||||
(parameter, environment) -> {
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment);
|
||||
return actionContext -> {
|
||||
final Filterable sourceFilterable = filterableSource.getFilterable(actionContext);
|
||||
|
||||
Map<Race, Integer> counts = new HashMap<>();
|
||||
for (PhysicalCard card : Filters.filterActive(actionContext.getGame(), sourceFilterable)) {
|
||||
final Race race = card.getBlueprint().getRace();
|
||||
if (race != null) {
|
||||
Integer count = counts.get(race);
|
||||
if (count == null)
|
||||
count = 0;
|
||||
counts.put(race, count + 1);
|
||||
}
|
||||
}
|
||||
|
||||
int highestCount = 0;
|
||||
for (Integer value : counts.values()) {
|
||||
if (value > highestCount)
|
||||
highestCount = value;
|
||||
}
|
||||
|
||||
Set<Race> highestNumberRaces = new HashSet<>();
|
||||
for (Map.Entry<Race, Integer> raceIntegerEntry : counts.entrySet()) {
|
||||
if (raceIntegerEntry.getValue() == highestCount)
|
||||
highestNumberRaces.add(raceIntegerEntry.getKey());
|
||||
}
|
||||
|
||||
return Filters.or(highestNumberRaces.toArray(new Race[0]));
|
||||
};
|
||||
});
|
||||
parameterFilters.put("higheststrength",
|
||||
(parameter, environment) -> {
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment);
|
||||
|
||||
@@ -53,6 +53,7 @@ public class ModifierSourceFactory {
|
||||
modifierProducers.put("canttakearcherywounds", new CantTakeArcheryWounds());
|
||||
modifierProducers.put("canttakemorewoundsthan", new CantTakeMoreWoundsThan());
|
||||
modifierProducers.put("canttakewounds", new CantTakeWounds());
|
||||
modifierProducers.put("canttouchtokens", new AddModifierFlag(ModifierFlag.CANT_TOUCH_CULTURE_TOKENS));
|
||||
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
|
||||
modifierProducers.put("disablegametext", new DisableGameText());
|
||||
modifierProducers.put("doesnotaddtoarcherytotal", new DoesNotAddToArcheryTotal());
|
||||
|
||||
Reference in New Issue
Block a user