diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gondor.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gondor.json new file mode 100644 index 000000000..1194e6394 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gondor.json @@ -0,0 +1,244 @@ +{ + "2_31": { + "side": "free_people", + "cost": 2, + "culture": "Gondor", + "title": "Blood of Numenor", + "type": "condition", + "keyword": "Support Area", + "effects": [ + { + "type": "extraCost", + "cost": { + "type": "exert", + "filter": "choose(culture(gondor),companion)" + } + }, + { + "type": "trigger", + "trigger": { + "type": "played", + "filter": "culture(sauron),orc", + "memorize": "playedOrc" + }, + "effect": { + "type": "exhaust", + "filter": "memory(playedOrc)" + } + }, + { + "type": "modifier", + "modifier": { + "type": "skipPhase", + "phase": "archery" + } + }, + { + "type": "trigger", + "trigger": { + "type": "startOfPhase", + "phase": "regroup" + }, + "effect": { + "type": "discard", + "filter": "self" + } + } + ] + }, + "2_32": { + "side": "free_people", + "cost": 0, + "strength": 1, + "culture": "Gondor", + "possession": "Hand Weapon", + "title": "Flaming Brand", + "type": "possession", + "target": "man", + "effects": [ + { + "type": "extrapossessionclass" + }, + { + "type": "modifier", + "modifier": { + "type": "modifyStrength", + "filter": "bearer,inSkirmishAgainst(Nazgul)", + "amount": 2 + } + }, + { + "type": "modifier", + "modifier": { + "type": "addKeyword", + "filter": "bearer,inSkirmishAgainst(Nazgul)", + "keyword": "damage+1" + } + } + ] + }, + "2_33": { + "side": "free_people", + "cost": 0, + "culture": "Gondor", + "title": "Flee in Terror", + "type": "event", + "keyword": "Response", + "effects": { + "type": "responseEvent", + "trigger": { + "type": "winsSkirmish", + "filter": "culture(gondor),companion" + }, + "effect": [ + { + "type": "chooseActiveCards", + "filter": "choose(exhausted,orc)", + "memorize": "chosenOrc", + "text": "Choose exhausted Orc" + }, + { + "type": "preventable", + "player": "ownerFromMemory(chosenOrc)", + "cost": { + "type": "removeTwilight", + "amount": 3 + }, + "text": "Remove (3) to prevent discarding exhausted {chosenOrc}", + "effect": { + "type": "discard", + "filter": "memory(chosenOrc)" + } + } + ] + } + }, + "2_34": { + "side": "free_people", + "cost": 0, + "culture": "Gondor", + "title": "Gondor Will See It Done", + "type": "event", + "keyword": "Response", + "effects": { + "type": "responseEvent", + "trigger": { + "type": "aboutToTakeWound", + "filter": "companion" + }, + "cost": { + "type": "exert", + "filter": "choose(culture(gondor),companion)" + }, + "effect": { + "type": "preventWound", + "filter": "choose(companion)" + } + } + }, + "2_35": { + "side": "free_people", + "cost": 1, + "culture": "Gondor", + "title": "Natural Cover", + "type": "condition", + "keyword": "Support Area", + "condition": { + "type": "canSpot", + "filter": "ranger" + }, + "effects": { + "type": "modifier", + "modifier": { + "type": "modifyArcheryTotal", + "condition": { + "type": "location", + "filter": "forest" + }, + "side": "shadow", + "amount": -2 + } + } + }, + "2_36": { + "side": "free_people", + "cost": 0, + "culture": "Gondor", + "title": "No Mere Ranger", + "type": "event", + "keyword": "Skirmish", + "effects": { + "type": "event", + "cost": { + "type": "exert", + "filter": "choose(name(Aragorn))" + }, + "effect": { + "type": "modifyStrength", + "filter": "choose(companion,not(name(Aragorn)))", + "memorize": "chosenCompanion", + "amount": { + "type": "condition", + "condition": { + "type": "memoryMatches", + "memory": "chosenCompanion", + "filter": "signet(aragorn)" + }, + "true": 3, + "false": 2 + } + } + } + }, + "2_37": { + "side": "free_people", + "cost": 0, + "culture": "Gondor", + "title": "Sentinels of Numenor", + "type": "event", + "keyword": "Skirmish", + "effects": { + "type": "event", + "effect": { + "type": "modifyStrength", + "filter": "choose(culture(gondor),companion)", + "memorize": "chosenCompanion", + "amount": { + "type": "condition", + "condition": { + "type": "fierceSkirmish" + }, + "true": 4, + "false": 2 + } + } + } + }, + "2_38": { + "side": "free_people", + "cost": 1, + "culture": "Gondor", + "possession": "Shield", + "title": "*Shield of Boromir", + "type": "possession", + "target": "culture(gondor),companion", + "effects": [ + { + "type": "modifier", + "modifier": { + "type": "modifyArcheryTotal", + "side": "shadow", + "amount": -1 + } + }, + { + "type": "modifier", + "modifier": { + "type": "cancelStrengthBonusTo", + "filter": "minion,inSkirmishAgainst(bearer,name(Boromir))", + "from": "weapon" + } + } + ] + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/CreateCardTemplates.java b/gemp-lotr/gemp-lotr-cards/src/main/java/CreateCardTemplates.java new file mode 100644 index 000000000..6e0356d8f --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/CreateCardTemplates.java @@ -0,0 +1,203 @@ +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.PossessionClass; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.CardSets; +import com.gempukku.lotro.game.LotroCardBlueprint; +import com.gempukku.lotro.game.packs.SetDefinition; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.*; + +public class CreateCardTemplates { + private static String[] _packageNames = + new String[]{ + "", ".dwarven", ".dunland", ".elven", ".fallenRealms", ".gandalf", ".gollum", ".gondor", ".isengard", ".men", ".orc", + ".raider", ".rohan", ".moria", ".wraith", ".sauron", ".shire", ".site", ".uruk_hai", + + //Additional Hobbit Draft packages + ".esgaroth", ".gundabad", ".smaug", ".spider", ".troll" + }; + + public static void main(String[] args) { + int set = 2; + final String property = System.getProperty("user.dir"); + String projectRoot = new File(property).getAbsolutePath(); + + File path = new File(projectRoot + "/gemp-lotr-async/src/main/web/cards"); + + File setPath = new File(path, "set" + set); + + CardSets cardSets = new CardSets(); + Map> cardsByFileName = new HashMap<>(); + + SetDefinition setDefinition = cardSets.getSetDefinitions().get("" + set); + if (setDefinition.hasFlag("needsLoading")) { + final Set allCards = setDefinition.getAllCards(); + for (String blueprintId : allCards) { + blueprintId = stripBlueprintModifiers(blueprintId); + try { + // Ensure it's loaded + LotroCardBlueprint cardBlueprint = getBlueprint(blueprintId); + String key = getKey(cardBlueprint); + Map list = cardsByFileName.computeIfAbsent(key, k -> new LinkedHashMap<>()); + list.put(blueprintId, cardBlueprint); + } catch (CardNotFoundException exp) { + // Ignore card that is not defined + } + } + } + + for (Map.Entry> cardsOfType : cardsByFileName.entrySet()) { + String type = cardsOfType.getKey(); + File typePath = new File(setPath, "set" + set + "-" + type + ".json"); + if (!typePath.exists()) { + JSONObject jsonObject = new JSONObject(); + + Map cards = cardsOfType.getValue(); + for (Map.Entry cardEntry : cards.entrySet()) { + String blueprintId = cardEntry.getKey(); + LotroCardBlueprint card = cardEntry.getValue(); + + JSONObject cardJson = new JSONObject(); + cardJson.put("title", (card.isUnique() ? "*" : "") + card.getTitle()); + if (card.getSubtitle() != null) + cardJson.put("subtitle", card.getSubtitle()); + if (card.getSide() != null) + cardJson.put("side", card.getSide().name().toLowerCase()); + if (card.getCulture() != null) + cardJson.put("culture", card.getCulture().getHumanReadable()); + cardJson.put("cost", card.getTwilightCost()); + cardJson.put("type", card.getCardType().name().toLowerCase()); + if (card.getRace() != null) + cardJson.put("race", card.getRace().getHumanReadable()); + if (card.getPossessionClasses() != null) { + JSONArray array = new JSONArray(); + for (PossessionClass possessionClass : card.getPossessionClasses()) { + array.add(possessionClass.getHumanReadable()); + } + + if (array.size() == 1) + cardJson.put("possession", array.get(0)); + else + cardJson.put("possession", array); + } + if (card.getSignet() != null) + cardJson.put("signet", card.getSignet().name().toLowerCase()); + if (card.getStrength() != 0) + cardJson.put("strength", card.getStrength()); + if (card.getVitality() != 0) + cardJson.put("vitality", card.getVitality()); + if (card.getResistance() != 0) + cardJson.put("resistance", card.getResistance()); + if (card.getCardType() == CardType.ALLY) { + if (card.getAllyHomeSiteBlock() != null) { + String home = card.getAllyHomeSiteBlock().getHumanReadable(); + for (int allyHomeSiteNumber : card.getAllyHomeSiteNumbers()) { + home += "," + allyHomeSiteNumber; + } + + cardJson.put("allyHome", home); + } + } + if (card.getCardType() == CardType.SITE) + cardJson.put("block", card.getSiteBlock().getHumanReadable()); + if (card.getSiteNumber() != 0) + cardJson.put("site", card.getSiteNumber()); + if (card.getCardType() == CardType.SITE) + cardJson.put("direction", card.getSiteDirection().name().toLowerCase()); + + // Keywords handling + JSONArray keywords = new JSONArray(); + for (Keyword keyword : Keyword.values()) { + if (card.hasKeyword(keyword)) { + int count = card.getKeywordCount(keyword); + if (count > 1) + keywords.add(keyword.getHumanReadable() + "+" + count); + else + keywords.add(keyword.getHumanReadable()); + } + } + + if (keywords.size() == 1) + cardJson.put("keyword", keywords.get(0)); + if (keywords.size() > 1) + cardJson.put("keyword", keywords); + + jsonObject.put(blueprintId, cardJson); + } + + //Write JSON file + try (FileWriter file = new FileWriter(typePath)) { + + file.write(jsonObject.toJSONString()); + file.flush(); + + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + private static String getKey(LotroCardBlueprint cardBlueprint) { + if (cardBlueprint.getCulture() != null) + return cardBlueprint.getCulture().getHumanReadable().toLowerCase(); + if (cardBlueprint.getCardType() == CardType.SITE) + return "site"; + return "ring"; + } + + public static String stripBlueprintModifiers(String blueprintId) { + if (blueprintId.endsWith("*")) + blueprintId = blueprintId.substring(0, blueprintId.length() - 1); + if (blueprintId.endsWith("T")) + blueprintId = blueprintId.substring(0, blueprintId.length() - 1); + return blueprintId; + } + + private static LotroCardBlueprint getBlueprint(String blueprintId) throws CardNotFoundException { + String[] blueprintParts = blueprintId.split("_"); + + String setNumber = blueprintParts[0]; + String cardNumber = blueprintParts[1]; + + for (String packageName : _packageNames) { + LotroCardBlueprint blueprint = null; + try { + blueprint = tryLoadingFromPackage(packageName, setNumber, cardNumber); + } catch (IllegalAccessException | InstantiationException e) { + throw new CardNotFoundException(blueprintId); + } + if (blueprint != null) + return blueprint; + } + + throw new CardNotFoundException(blueprintId); + } + + private static LotroCardBlueprint tryLoadingFromPackage(String packageName, String setNumber, String cardNumber) throws IllegalAccessException, InstantiationException { + try { + Class clazz = Class.forName("com.gempukku.lotro.cards.set" + setNumber + packageName + ".Card" + setNumber + "_" + normalizeId(cardNumber)); + return (LotroCardBlueprint) clazz.newInstance(); + } catch (ClassNotFoundException e) { + // Ignore + return null; + } + } + + private static String normalizeId(String blueprintPart) { + int id = Integer.parseInt(blueprintPart); + if (id < 10) + return "00" + id; + else if (id < 100) + return "0" + id; + else + return String.valueOf(id); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_031.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_031.java deleted file mode 100644 index b3cf48e93..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_031.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.effects.ExhaustCharacterEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ShouldSkipPhaseModifier; -import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.timing.results.PlayCardResult; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 2 - * Type: Condition - * Game Text: To play, exert a [GONDOR] companion. Plays to your support area. Each [SAURON] Orc comes into play - * exhausted. Skip the archery phase. Discard this condition during the regroup phase. - */ -public class Card2_031 extends AbstractPermanent { - public Card2_031() { - super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.GONDOR, "Blood of Numenor"); - } - - @Override - public List getExtraCostToPlay(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new ExertExtraPlayCostModifier(self, self, null, Culture.GONDOR, CardType.COMPANION)); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Arrays.asList( - new ShouldSkipPhaseModifier(self, Phase.ARCHERY)); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, Filters.and(Culture.SAURON, Race.ORC, CardType.MINION))) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new ExhaustCharacterEffect(self, action, ((PlayCardResult) effectResult).getPlayedCard())); - return Collections.singletonList(action); - } - if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new SelfDiscardEffect(self)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_032.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_032.java deleted file mode 100644 index cc695085e..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_032.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -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.cardtype.AbstractAttachableFPPossession; -import com.gempukku.lotro.logic.modifiers.Condition; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; - -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 0 - * Type: Possession • Hand Weapon - * Strength: +1 - * Game Text: Bearer must be a Man. This weapon may be borne in addition to 1 other hand weapon. Bearer is strength +2 - * and damage +1 while skirmishing a Nazgul. - */ -public class Card2_032 extends AbstractAttachableFPPossession { - public Card2_032() { - super(0, 1, 0, Culture.GONDOR, PossessionClass.HAND_WEAPON, "Flaming Brand"); - } - - @Override - public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Race.MAN; - } - - @Override - public boolean isExtraPossessionClass(LotroGame game, PhysicalCard self, PhysicalCard attachedTo) { - return true; - } - - @Override - public List getInPlayModifiers(LotroGame game, final PhysicalCard self) { - Condition condition = new Condition() { - @Override - public boolean isFullfilled(LotroGame game) { - return game.getGameState().getSkirmish() != null - && game.getGameState().getSkirmish().getFellowshipCharacter() == self.getAttachedTo() - && Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game, Race.NAZGUL).size() > 0; - } - }; - - List modifiers = new LinkedList(); - modifiers.add( - new StrengthModifier(self, Filters.hasAttached(self), condition, 2)); - modifiers.add( - new KeywordModifier(self, Filters.hasAttached(self), condition, Keyword.DAMAGE, 1)); - return modifiers; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_033.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_033.java deleted file mode 100644 index 60c6900d5..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_033.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -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.PlayUtils; -import com.gempukku.lotro.logic.actions.CostToEffectAction; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.effects.PreventableEffect; -import com.gempukku.lotro.logic.effects.RemoveTwilightEffect; -import com.gempukku.lotro.logic.timing.Effect; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 0 - * Type: Event - * Game Text: Response: If a [GONDOR] companion wins a skirmish, discard an exhausted Orc. That minion's owner may - * remove (3) to prevent this. - */ -public class Card2_033 extends AbstractResponseEvent { - public Card2_033() { - super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "Flee in Terror"); - } - - @Override - public List getPlayResponseEventAfterActions(final String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (PlayConditions.canPlayCardDuringPhase(game, (Phase) null, self) - && TriggerConditions.winsSkirmish(game, effectResult, Filters.and(Culture.GONDOR, CardType.COMPANION)) - && PlayUtils.checkPlayRequirements(game, self, Filters.any, 0, 0, false, false)) { - final PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a minion", Race.ORC, Filters.exhausted) { - @Override - protected void cardSelected(LotroGame game, final PhysicalCard orc) { - action.insertEffect( - new PreventableEffect(action, - new DiscardCardsFromPlayEffect(playerId, self, orc), - Collections.singletonList(orc.getOwner()), - new PreventableEffect.PreventionCost() { - @Override - public Effect createPreventionCostForPlayer(CostToEffectAction subAction, String playerId) { - return new RemoveTwilightEffect(3); - } - } - )); - } - }); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_034.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_034.java deleted file mode 100644 index 2384d1c8e..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_034.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -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.PlayUtils; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent; -import com.gempukku.lotro.logic.effects.PreventableCardEffect; -import com.gempukku.lotro.logic.effects.WoundCharactersEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndPreventCardEffect; -import com.gempukku.lotro.logic.timing.Effect; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 0 - * Type: Event - * Game Text: Response: If a companion is about to take a wound, exert a [GONDOR] companion to prevent that wound. - */ -public class Card2_034 extends AbstractResponseEvent { - public Card2_034() { - super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "Gondor Will See It Done"); - } - - @Override - public List getPlayResponseEventBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) { - if (TriggerConditions.isGettingWounded(effect, game, CardType.COMPANION) - && PlayConditions.canExert(self, game, Culture.GONDOR, CardType.COMPANION) - && PlayUtils.checkPlayRequirements(game, self, Filters.any, 0, 0, false, false)) { - final WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; - Collection woundedCards = woundEffect.getAffectedCardsMinusPrevented(game); - final PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.GONDOR, CardType.COMPANION)); - action.appendEffect( - new ChooseAndPreventCardEffect(self, (PreventableCardEffect) effect, playerId, "Choose companion", CardType.COMPANION)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_035.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_035.java deleted file mode 100644 index 4d19925dc..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_035.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -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.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.condition.LocationCondition; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 1 - * Type: Condition - * Game Text: To play, spot a ranger. Plays to your support area. While the fellowship is at a forest, the minion - * archery total is -2. - */ -public class Card2_035 extends AbstractPermanent { - public Card2_035() { - super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.GONDOR, "Natural Cover"); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return Filters.canSpot(game, Keyword.RANGER); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new ArcheryTotalModifier(self, Side.SHADOW, new LocationCondition(Keyword.FOREST), -2)); -} -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_036.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_036.java deleted file mode 100644 index d8c388a2a..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_036.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -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.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 0 - * Type: Event - * Game Text: Skirmish: Exert Aragorn to make another companion strength +2 (or +3 if that companion has the Aragorn - * signet). - */ -public class Card2_036 extends AbstractEvent { - public Card2_036() { - super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "No Mere Ranger", Phase.SKIRMISH); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, Filters.aragorn); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, final PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.aragorn)); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose another companion", CardType.COMPANION, Filters.not(Filters.aragorn)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - int bonus = (card.getBlueprint().getSignet() == Signet.ARAGORN) ? 3 : 2; - action.insertEffect( - new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, Filters.sameCard(card), bonus))); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_037.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_037.java deleted file mode 100644 index 265d513c4..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_037.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -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.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 0 - * Type: Event - * Game Text: Skirmish: Make a [GONDOR] companion strength +2 (or +4 if in a fierce skirmish). - */ -public class Card2_037 extends AbstractEvent { - public Card2_037() { - super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "Sentinels of Numenor", Phase.SKIRMISH); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, final LotroGame game, final PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose GONDOR companion", Culture.GONDOR, CardType.COMPANION) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - int bonus = (game.getGameState().isFierceSkirmishes()) ? 4 : 2; - action.insertEffect( - new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(self, Filters.sameCard(card), bonus))); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java deleted file mode 100644 index 97ccba3fe..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.gempukku.lotro.cards.set2.gondor; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.PossessionClass; -import com.gempukku.lotro.common.Side; -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.AbstractAttachableFPPossession; -import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier; -import com.gempukku.lotro.logic.modifiers.CancelStrengthBonusTargetModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.SpotCondition; - -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Free - * Culture: Gondor - * Twilight Cost: 1 - * Type: Possession • Shield - * Game Text: Bearer must be a [GONDOR] companion. The minion archery total is -1. If bearer is Boromir, each minion - * skirmishing him does not gain strength bonuses from weapons. - */ -public class Card2_038 extends AbstractAttachableFPPossession { - public Card2_038() { - super(1, 0, 0, Culture.GONDOR, PossessionClass.SHIELD, "Shield of Boromir", null, true); - } - - @Override - public Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Filters.and(Culture.GONDOR, CardType.COMPANION); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList(); - modifiers.add(new ArcheryTotalModifier(self, Side.SHADOW, -1)); - modifiers.add( - new CancelStrengthBonusTargetModifier(self, - new SpotCondition(Filters.boromir, Filters.hasAttached(self)), - Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.boromir)), - Filters.weapon)); - return modifiers; - } -}