Migrated Site cards in set 13 to hjson

This commit is contained in:
MarcinSc
2024-05-23 20:49:02 +07:00
parent 9d6226d230
commit 8d1c5d7960
13 changed files with 206 additions and 471 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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