diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 24287a0c815..94d3d425adc 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -714,7 +714,24 @@ public class AiController { // Check a predefined condition if (sa.hasParam("AICheckSVar")) { - if (!checkAISpecificSVarCondition(sa, sa.getHostCard())) { + final Card host = sa.getHostCard(); + final String svarToCheck = sa.getParam("AICheckSVar"); + String comparator = "GE"; + int compareTo = 1; + + if (sa.hasParam("AISVarCompare")) { + final String fullCmp = sa.getParam("AISVarCompare"); + comparator = fullCmp.substring(0, 2); + final String strCmpTo = fullCmp.substring(2); + try { + compareTo = Integer.parseInt(strCmpTo); + } catch (final Exception ignored) { + compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), sa); + } + } + + int left = AbilityUtils.calculateAmount(host, svarToCheck, sa); + if (!Expressions.compare(left, comparator, compareTo)) { return AiPlayDecision.AnotherTime; } } @@ -753,6 +770,7 @@ public class AiController { // one is warded and can't be paid for. if (sa.usesTargeting()) { for (Card tgt : sa.getTargets().getTargetCards()) { + // TODO some older cards don't use the keyword, so check for trigger instead if (tgt.hasKeyword(Keyword.WARD) && tgt.isInPlay() && tgt.getController().isOpponentOf(sa.getHostCard().getController())) { int amount = 0; Cost wardCost = ComputerUtilCard.getTotalWardCost(tgt); @@ -1809,7 +1827,35 @@ public class AiController { } } if (effect.hasParam("AICheckSVar")) { - return checkAISpecificSVarCondition(effect, hostCard); + System.out.println("aiShouldRun?" + sa); + final String svarToCheck = effect.getParam("AICheckSVar"); + String comparator = "GE"; + int compareTo = 1; + + if (effect.hasParam("AISVarCompare")) { + final String fullCmp = effect.getParam("AISVarCompare"); + comparator = fullCmp.substring(0, 2); + final String strCmpTo = fullCmp.substring(2); + try { + compareTo = Integer.parseInt(strCmpTo); + } catch (final Exception ignored) { + if (sa == null) { + compareTo = AbilityUtils.calculateAmount(hostCard, hostCard.getSVar(strCmpTo), effect); + } else { + compareTo = AbilityUtils.calculateAmount(hostCard, hostCard.getSVar(strCmpTo), sa); + } + } + } + + int left = 0; + + if (sa == null) { + left = AbilityUtils.calculateAmount(hostCard, svarToCheck, effect); + } else { + left = AbilityUtils.calculateAmount(hostCard, svarToCheck, sa); + } + System.out.println("aiShouldRun?" + left + comparator + compareTo); + return Expressions.compare(left, comparator, compareTo); } else if (effect.hasParam("AICheckDredge")) { return player.getCardsIn(ZoneType.Library).size() > 8 || player.isCardInPlay("Laboratory Maniac"); } else return sa != null && doTrigger(sa, false); @@ -2315,37 +2361,4 @@ public class AiController { return Iterables.getFirst(list, null); } - private static boolean checkAISpecificSVarCondition(CardTraitBase ab, Card host) { - if (ab.hasParam("AICheckSVar")) { - final String svarToCheck = ab.getParam("AICheckSVar"); - String comparator = "GE"; - int compareTo = 1; - - if (ab.hasParam("AISVarCompare")) { - final String fullCmp = ab.getParam("AISVarCompare"); - comparator = fullCmp.substring(0, 2); - final String strCmpTo = fullCmp.substring(2); - try { - compareTo = Integer.parseInt(strCmpTo); - } catch (final Exception ignored) { - if (ab == null) { - compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), ab); - } else { - compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), ab); - } - } - } - - int left = 0; - - if (ab == null) { - left = AbilityUtils.calculateAmount(host, svarToCheck, ab); - } else { - left = AbilityUtils.calculateAmount(host, svarToCheck, ab); - } - return Expressions.compare(left, comparator, compareTo); - } - - return false; - } } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index be637b22855..8e55739b45c 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2497,4 +2497,27 @@ public class ComputerUtilCombat { } return poison; } + + public static GameEntity addAttackerToCombat(SpellAbility sa, Card attacker, FCollection defenders) { + Combat combat = sa.getHostCard().getGame().getCombat(); + if (combat != null) { + // 1. If the card that spawned the attacker was sent at a planeswalker, attack the same. Consider improving. + GameEntity def = combat.getDefenderByAttacker(sa.getHostCard()); + if (def != null && def instanceof Card) { + if (((Card)def).isPlaneswalker()) { + return def; + } + } + // 2. Otherwise, go through the list of options one by one, choose the first one that can't be blocked profitably. + for (GameEntity p : defenders) { + if (p instanceof Player && !ComputerUtilCard.canBeBlockedProfitably((Player)p, attacker)) { + return p; + } + if (p instanceof Card && !ComputerUtilCard.canBeBlockedProfitably(((Card)p).getController(), attacker)) { + return p; + } + } + } + return Iterables.getFirst(defenders, null); + } } diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index bb444e4fd66..e08152d3abd 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -452,21 +452,15 @@ public class AttachAi extends SpellAbilityAi { /** * Attach to player ai preferences. - * * @param sa * the sa * @param mandatory * the mandatory + * @param newParam TODO + * * @return the player */ - public static Player attachToPlayerAIPreferences(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) { - List targetable = new ArrayList<>(); - for (final Player player : aiPlayer.getGame().getPlayers()) { - if (sa.canTarget(player)) { - targetable.add(player); - } - } - + public static Player attachToPlayerAIPreferences(final Player aiPlayer, final SpellAbility sa, final boolean mandatory, List targetable) { if ("Curse".equals(sa.getParam("AILogic"))) { if (!mandatory) { targetable.removeAll(aiPlayer.getAllies()); @@ -1020,7 +1014,13 @@ public class AttachAi extends SpellAbilityAi { private static boolean attachPreference(final SpellAbility sa, final TargetRestrictions tgt, final boolean mandatory) { GameObject o; if (tgt.canTgtPlayer()) { - o = attachToPlayerAIPreferences(sa.getActivatingPlayer(), sa, mandatory); + List targetable = new ArrayList<>(); + for (final Player player : sa.getHostCard().getGame().getPlayers()) { + if (sa.canTarget(player)) { + targetable.add(player); + } + } + o = attachToPlayerAIPreferences(sa.getActivatingPlayer(), sa, mandatory, targetable); } else { o = attachToCardAIPreferences(sa.getActivatingPlayer(), sa, mandatory); } @@ -1459,10 +1459,12 @@ public class AttachAi extends SpellAbilityAi { */ public static Card attachGeneralAI(final Player ai, final SpellAbility sa, final List list, final boolean mandatory, final Card attachSource, final String logic) { - Player prefPlayer = AiAttackController.choosePreferredDefenderPlayer(ai); + Player prefPlayer; if ("Pump".equals(logic) || "Animate".equals(logic) || "Curiosity".equals(logic) || "MoveTgtAura".equals(logic) || "MoveAllAuras".equals(logic)) { prefPlayer = ai; + } else { + prefPlayer = AiAttackController.choosePreferredDefenderPlayer(ai); } // Some ChangeType cards are beneficial, and PrefPlayer should be // changed to represent that @@ -1745,6 +1747,10 @@ public class AttachAi extends SpellAbilityAi { sa.getTargets().add(tgt); } return sa.isTargetNumberValid(); + } else if ("Remembered".equals(sa.getParam("Defined")) && sa.getParent() != null + && sa.getParent().getApi() == ApiType.Token && sa.getParent().hasParam("RememberTokens")) { + // Living Weapon or similar + return true; } return false; } @@ -1761,6 +1767,6 @@ public class AttachAi extends SpellAbilityAi { @Override protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable options, Map params) { - return attachToPlayerAIPreferences(ai, sa, true); + return attachToPlayerAIPreferences(ai, sa, true, (List)options); } } diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index 2c22a67411d..f9c97cf30f5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -2,6 +2,8 @@ package forge.ai.ability; import java.util.*; +import forge.game.card.*; +import forge.game.keyword.Keyword; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Predicate; @@ -27,19 +29,13 @@ import forge.ai.SpellAbilityAi; import forge.ai.SpellApiToAi; import forge.card.MagicColor; import forge.game.Game; +import forge.game.GameEntity; import forge.game.GameObject; import forge.game.GlobalRuleChange; import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; -import forge.game.card.Card; -import forge.game.card.CardCollection; -import forge.game.card.CardCollectionView; -import forge.game.card.CardLists; -import forge.game.card.CardPredicates; import forge.game.card.CardPredicates.Presets; -import forge.game.card.CardUtil; -import forge.game.card.CounterEnumType; import forge.game.combat.Combat; import forge.game.cost.Cost; import forge.game.cost.CostDiscard; @@ -55,6 +51,7 @@ import forge.game.spellability.TargetRestrictions; import forge.game.staticability.StaticAbilityMustTarget; import forge.game.zone.ZoneType; import forge.util.MyRandom; +import forge.util.collect.FCollection; public class ChangeZoneAi extends SpellAbilityAi { /* @@ -428,7 +425,6 @@ public class ChangeZoneAi extends SpellAbilityAi { } return canBouncePermanent(ai, sa, list) != null; } - } if (ComputerUtil.playImmediately(ai, sa)) { @@ -1397,6 +1393,57 @@ public class ChangeZoneAi extends SpellAbilityAi { } } } + // Reload Undying and Persist, get rid of -1/-1 counters, get rid of enemy auras if able + Card bestChoice = null; + int bestEval = 0; + for (Card c : aiPermanents) { + if (c.isCreature()) { + boolean hasValuableAttachments = false; + boolean hasOppAttachments = false; + int numNegativeCounters = 0; + int numTotalCounters = 0; + for (Card attached : c.getAttachedCards()) { + if (attached.isAura()) { + if (attached.getController() == c.getController()) { + hasValuableAttachments = true; + } else if (attached.getController().isOpponentOf(c.getController())) { + hasOppAttachments = true; + } + } + } + Map counters = c.getCounters(); + for (CounterType ct : counters.keySet()) { + int amount = counters.get(ct); + if (ComputerUtil.isNegativeCounter(ct, c)) { + numNegativeCounters += amount; + } + numTotalCounters += amount; + } + if (hasValuableAttachments || (ComputerUtilCard.isUselessCreature(ai, c) && !hasOppAttachments)) { + continue; + } + + Card considered = null; + if ((c.hasKeyword(Keyword.PERSIST) || c.hasKeyword(Keyword.UNDYING)) + && !ComputerUtilCard.hasActiveUndyingOrPersist(c)) { + considered = c; + } else if (hasOppAttachments || (numTotalCounters > 0 && numNegativeCounters > numTotalCounters / 2)) { + considered = c; + } + + if (considered != null) { + int eval = ComputerUtilCard.evaluateCreature(c); + if (eval > bestEval) { + bestEval = eval; + bestChoice = considered; + } + } + } + } + if (bestChoice != null) { + return bestChoice; + } + return null; } @@ -1738,8 +1785,20 @@ public class ChangeZoneAi extends SpellAbilityAi { */ @Override public Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable options, Map params) { - // Called when attaching Aura to player - return AttachAi.attachToPlayerAIPreferences(ai, sa, true); + // Called when attaching Aura to player or adding creature to combat + if (params.containsKey("Attacker")) { + return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); + } + return AttachAi.attachToPlayerAIPreferences(ai, sa, true, (List)options); + } + + @Override + protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa, Iterable options, Map params) { + if (params.containsKey("Attacker")) { + return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); + } + // should not be reached + return super.chooseSinglePlayerOrPlaneswalker(ai, sa, options, params); } private boolean doSacAndReturnFromGraveLogic(final Player ai, final SpellAbility sa) { diff --git a/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java b/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java index 5c56ff9ddae..e17bdd279ec 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java @@ -12,10 +12,12 @@ import forge.ai.AiPlayDecision; import forge.ai.ComputerUtil; import forge.ai.ComputerUtilAbility; import forge.ai.ComputerUtilCard; +import forge.ai.ComputerUtilCombat; import forge.ai.ComputerUtilCost; import forge.ai.SpecialCardAi; import forge.ai.SpellAbilityAi; import forge.game.Game; +import forge.game.GameEntity; import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -32,6 +34,7 @@ import forge.game.player.PlayerActionConfirmMode; import forge.game.player.PlayerCollection; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; +import forge.util.collect.FCollection; public class CopyPermanentAi extends SpellAbilityAi { @Override @@ -232,7 +235,7 @@ public class CopyPermanentAi extends SpellAbilityAi { } return ComputerUtilCard.getBestAI(options); } - + private CardCollection getBetterOptions(Player ai, SpellAbility sa, Iterable options, boolean isOptional) { final Card host = sa.getHostCard(); final Player ctrl = host.getController(); @@ -244,9 +247,21 @@ public class CopyPermanentAi extends SpellAbilityAi { @Override protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable options, Map params) { + if (params.containsKey("Attacker")) { + return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); + } final List cards = new PlayerCollection(options).getCreaturesInPlay(); Card chosen = ComputerUtilCard.getBestCreatureAI(cards); return chosen != null ? chosen.getController() : Iterables.getFirst(options, null); } + @Override + protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa, Iterable options, Map params) { + if (params.containsKey("Attacker")) { + return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); + } + // should not be reached + return super.chooseSinglePlayerOrPlaneswalker(ai, sa, options, params); + } + } diff --git a/forge-ai/src/main/java/forge/ai/ability/DigAi.java b/forge-ai/src/main/java/forge/ai/ability/DigAi.java index 5ba76682eb8..25602dc9d98 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DigAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DigAi.java @@ -8,10 +8,12 @@ import forge.ai.AiAttackController; import forge.ai.ComputerUtil; import forge.ai.ComputerUtilAbility; import forge.ai.ComputerUtilCard; +import forge.ai.ComputerUtilCombat; import forge.ai.ComputerUtilCost; import forge.ai.SpecialCardAi; import forge.ai.SpellAbilityAi; import forge.game.Game; +import forge.game.GameEntity; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardCollection; @@ -25,6 +27,7 @@ import forge.game.player.PlayerPredicates; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; import forge.util.TextUtil; +import forge.util.collect.FCollection; public class DigAi extends SpellAbilityAi { @@ -180,10 +183,22 @@ public class DigAi extends SpellAbilityAi { */ @Override public Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable options, Map params) { + if (params.containsKey("Attacker")) { + return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); + } // an opponent choose a card from return Iterables.getFirst(options, null); } + @Override + protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa, Iterable options, Map params) { + if (params.containsKey("Attacker")) { + return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); + } + // should not be reached + return super.chooseSinglePlayerOrPlaneswalker(ai, sa, options, params); + } + /* (non-Javadoc) * @see forge.card.ability.SpellAbilityAi#confirmAction(forge.card.spellability.SpellAbility, forge.game.player.PlayerActionConfirmMode, java.lang.String) */ diff --git a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java index 4c26284fea4..5451a516580 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java @@ -9,6 +9,7 @@ import forge.ai.AiController; import forge.ai.AiProps; import forge.ai.ComputerUtil; import forge.ai.ComputerUtilCard; +import forge.ai.ComputerUtilCombat; import forge.ai.ComputerUtilCost; import forge.ai.ComputerUtilMana; import forge.ai.PlayerControllerAi; @@ -37,6 +38,7 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; import forge.util.MyRandom; +import forge.util.collect.FCollection; /** *

@@ -312,15 +314,8 @@ public class TokenAi extends SpellAbilityAi { */ @Override protected Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable options, Map params) { - Combat combat = ai.getGame().getCombat(); - // TokenAttacking - if (combat != null && sa.hasParam("TokenAttacking")) { - Card attacker = spawnToken(ai, sa); - for (Player p : options) { - if (!ComputerUtilCard.canBeBlockedProfitably(p, attacker)) { - return p; - } - } + if (params.containsKey("Attacker")) { + return (Player) ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); } return Iterables.getFirst(options, null); } @@ -330,28 +325,11 @@ public class TokenAi extends SpellAbilityAi { */ @Override protected GameEntity chooseSinglePlayerOrPlaneswalker(Player ai, SpellAbility sa, Iterable options, Map params) { - Combat combat = ai.getGame().getCombat(); - // TokenAttacking - if (combat != null && sa.hasParam("TokenAttacking")) { - // 1. If the card that spawned the token was sent at a planeswalker, attack the same planeswalker with the token. Consider improving. - GameEntity def = combat.getDefenderByAttacker(sa.getHostCard()); - if (def != null && def instanceof Card) { - if (((Card)def).isPlaneswalker()) { - return def; - } - } - // 2. Otherwise, go through the list of options one by one, choose the first one that can't be blocked profitably. - Card attacker = spawnToken(ai, sa); - for (GameEntity p : options) { - if (p instanceof Player && !ComputerUtilCard.canBeBlockedProfitably((Player)p, attacker)) { - return p; - } - if (p instanceof Card && !ComputerUtilCard.canBeBlockedProfitably(((Card)p).getController(), attacker)) { - return p; - } - } + if (params.containsKey("Attacker")) { + return ComputerUtilCombat.addAttackerToCombat(sa, (Card) params.get("Attacker"), new FCollection(options)); } - return Iterables.getFirst(options, null); + // should not be reached + return super.chooseSinglePlayerOrPlaneswalker(ai, sa, options, params); } /** diff --git a/forge-core/src/main/java/forge/ImageKeys.java b/forge-core/src/main/java/forge/ImageKeys.java index f7d63c36aac..1fa0b022e94 100644 --- a/forge-core/src/main/java/forge/ImageKeys.java +++ b/forge-core/src/main/java/forge/ImageKeys.java @@ -66,6 +66,10 @@ public final class ImageKeys { } private static final Map cachedCards = new HashMap<>(50000); + private static HashSet missingCards = new HashSet<>(); + public static void clearMissingCards() { + missingCards.clear(); + } public static File getCachedCardsFile(String key) { return cachedCards.get(key); } @@ -101,6 +105,9 @@ public final class ImageKeys { dir = CACHE_CARD_PICS_DIR; } + if (missingCards.contains(filename)) + return null; + File cachedFile = cachedCards.get(filename); if (cachedFile != null) { return cachedFile; @@ -237,6 +244,8 @@ public final class ImageKeys { } // System.out.println("File not found, no image created: " + key); + //add missing cards + missingCards.add(filename); return null; } diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 1bd2a565e0d..0460961074c 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -354,7 +354,7 @@ public class StaticData { } /** - * Determins whether the input String corresponds to an MTG Card Name (in any available card database) + * Determines whether the input String corresponds to an MTG Card Name (in any available card database) * @param cardName Name of the Card to verify (CASE SENSITIVE) * @return True if a card with the given input string can be found. False otherwise. */ @@ -455,7 +455,6 @@ public class StaticData { * * Note: if input card is Foil, and an alternative card art is found, it will be returned foil too! * - * @see StaticData#getAlternativeCardPrint(forge.item.PaperCard, java.util.Date) * @param card Input Reference Card * @param setReleaseDate reference set release date * @return Alternative Card Art (from a different edition) of input card, or null if not found. @@ -464,7 +463,7 @@ public class StaticData { boolean isCardArtPreferenceLatestArt = this.cardArtPreferenceIsLatest(); boolean cardArtPreferenceHasFilter = this.isCoreExpansionOnlyFilterSet(); return this.getAlternativeCardPrint(card, setReleaseDate, isCardArtPreferenceLatestArt, - cardArtPreferenceHasFilter); + cardArtPreferenceHasFilter, null); } /** @@ -486,25 +485,25 @@ public class StaticData { * @param setReleaseDate The reference release date used to control the search for alternative card print. * The chose candidate will be gathered from an edition printed before (upper bound) or * after (lower bound) the reference set release date. - * @param isCardArtPreferenceLatestArt Determines whether or not "Latest Art" Card Art preference should be used + * @param isCardArtPreferenceLatestArt Determines whether "Latest Art" Card Art preference should be used * when looking for an alternative candidate print. - * @param cardArtPreferenceHasFilter Determines whether or not the search should only consider + * @param cardArtPreferenceHasFilter Determines whether the search should only consider * Core, Expansions, or Reprints sets when looking for alternative candidates. * @return an instance of PaperCard that is the selected alternative candidate, or null * if None could be found. */ public PaperCard getAlternativeCardPrint(PaperCard card, Date setReleaseDate, boolean isCardArtPreferenceLatestArt, - boolean cardArtPreferenceHasFilter) { + boolean cardArtPreferenceHasFilter, List allowedSetCodes) { Date searchReferenceDate = getReferenceDate(setReleaseDate, isCardArtPreferenceLatestArt); CardDb.CardArtPreference searchCardArtStrategy = getSearchStrategyForAlternativeCardArt(isCardArtPreferenceLatestArt, cardArtPreferenceHasFilter); return searchAlternativeCardCandidate(card, isCardArtPreferenceLatestArt, searchReferenceDate, - searchCardArtStrategy); + searchCardArtStrategy, allowedSetCodes); } /** - * This method extends the defatult getAlternativeCardPrint with extra settings to be used for + * This method extends the default getAlternativeCardPrint with extra settings to be used for * alternative card print. * *

@@ -531,18 +530,54 @@ public class StaticData { public PaperCard getAlternativeCardPrint(PaperCard card, Date setReleaseDate, boolean isCardArtPreferenceLatestArt, boolean cardArtPreferenceHasFilter, boolean preferCandidatesFromExpansionSets, boolean preferModernFrame) { + return getAlternativeCardPrint(card, setReleaseDate, isCardArtPreferenceLatestArt, cardArtPreferenceHasFilter, + preferCandidatesFromExpansionSets, preferModernFrame, null); + } + + /** + * This method extends the default getAlternativeCardPrint with extra settings to be used for + * alternative card print. + * + *

+ * These options for Alternative Card Print make sense as part of the harmonisation/theme-matching process for + * cards in Deck Sections (i.e. CardPool). In fact, the values of the provided flags for alternative print + * for a single card will be determined according to whole card pool (Deck section) the card appears in. + * + * @param card The instance of PaperCard to look for an alternative print + * @param setReleaseDate The reference release date used to control the search for alternative card print. + * The chose candidate will be gathered from an edition printed before (upper bound) or + * after (lower bound) the reference set release date. + * @param isCardArtPreferenceLatestArt Determines whether or not "Latest Art" Card Art preference should be used + * when looking for an alternative candidate print. + * @param cardArtPreferenceHasFilter Determines whether or not the search should only consider + * Core, Expansions, or Reprints sets when looking for alternative candidates. + * @param preferCandidatesFromExpansionSets Whenever the selected Card Art Preference has filter, try to get + * prefer candidates from Expansion Sets over those in Core or Reprint + * Editions (whenever possible) + * e.g. Necropotence from Ice Age rather than 5th Edition (w/ Latest=false) + * @param preferModernFrame If True, Modern Card Frame will be preferred over Old Frames. + * @param allowedSetCodes The list of the allowed set codes to consider when looking for alternative card art + * candidates. If the list is not null and not empty, will be used in combination with the + * isLegal predicate. + * @see CardDb#isLegal(List) + * @return an instance of PaperCard that is the selected alternative candidate, or null + * if None could be found. + */ + public PaperCard getAlternativeCardPrint(PaperCard card, Date setReleaseDate, boolean isCardArtPreferenceLatestArt, + boolean cardArtPreferenceHasFilter, + boolean preferCandidatesFromExpansionSets, boolean preferModernFrame, + List allowedSetCodes){ PaperCard altCard = this.getAlternativeCardPrint(card, setReleaseDate, isCardArtPreferenceLatestArt, - cardArtPreferenceHasFilter); + cardArtPreferenceHasFilter, allowedSetCodes); if (altCard == null) return altCard; // from here on, we're sure we do have a candidate already! /* Try to refine selection by getting one candidate with frame matching current Card Art Preference (that is NOT the lookup strategy!)*/ - PaperCard refinedAltCandidate = this.tryToGetCardPrintWithMatchingFrame(altCard, - isCardArtPreferenceLatestArt, - cardArtPreferenceHasFilter, - preferModernFrame); + PaperCard refinedAltCandidate = this.tryToGetCardPrintWithMatchingFrame(altCard, isCardArtPreferenceLatestArt, + cardArtPreferenceHasFilter, + preferModernFrame, allowedSetCodes); if (refinedAltCandidate != null) altCard = refinedAltCandidate; @@ -551,7 +586,7 @@ public class StaticData { NOTE: At this stage, any future selection should be already compliant with previous filter on Card Frame (if applied) given that we'll be moving either UP or DOWN the timeline of Card Edition */ refinedAltCandidate = this.tryToGetCardPrintFromExpansionSet(altCard, isCardArtPreferenceLatestArt, - preferModernFrame); + preferModernFrame, allowedSetCodes); if (refinedAltCandidate != null) altCard = refinedAltCandidate; } @@ -560,21 +595,29 @@ public class StaticData { private PaperCard searchAlternativeCardCandidate(PaperCard card, boolean isCardArtPreferenceLatestArt, Date searchReferenceDate, - CardDb.CardArtPreference searchCardArtStrategy) { + CardDb.CardArtPreference searchCardArtStrategy, + List allowedSetCodes) { // Note: this won't apply to Custom Nor Variant Cards, so won't bother including it! CardDb cardDb = this.commonCards; String cardName = card.getName(); int artIndex = card.getArtIndex(); PaperCard altCard = null; + Predicate filter = null; + if (allowedSetCodes != null && !allowedSetCodes.isEmpty()) + filter = (Predicate) cardDb.isLegal(allowedSetCodes); if (isCardArtPreferenceLatestArt) { // RELEASED AFTER REFERENCE DATE - altCard = cardDb.getCardFromEditionsReleasedAfter(cardName, searchCardArtStrategy, artIndex, searchReferenceDate); + altCard = cardDb.getCardFromEditionsReleasedAfter(cardName, searchCardArtStrategy, artIndex, + searchReferenceDate, filter); if (altCard == null) // relax artIndex condition - altCard = cardDb.getCardFromEditionsReleasedAfter(cardName, searchCardArtStrategy, searchReferenceDate); + altCard = cardDb.getCardFromEditionsReleasedAfter(cardName, searchCardArtStrategy, + searchReferenceDate, filter); } else { // RELEASED BEFORE REFERENCE DATE - altCard = cardDb.getCardFromEditionsReleasedBefore(cardName, searchCardArtStrategy, artIndex, searchReferenceDate); + altCard = cardDb.getCardFromEditionsReleasedBefore(cardName, searchCardArtStrategy, artIndex, + searchReferenceDate, filter); if (altCard == null) // relax artIndex constraint - altCard = cardDb.getCardFromEditionsReleasedBefore(cardName, searchCardArtStrategy, searchReferenceDate); + altCard = cardDb.getCardFromEditionsReleasedBefore(cardName, searchCardArtStrategy, + searchReferenceDate, filter); } if (altCard == null) return null; @@ -611,7 +654,8 @@ public class StaticData { private PaperCard tryToGetCardPrintFromExpansionSet(PaperCard altCard, boolean isCardArtPreferenceLatestArt, - boolean preferModernFrame) { + boolean preferModernFrame, + List allowedSetCodes) { CardEdition altCardEdition = editions.get(altCard.getEdition()); if (altCardEdition.getType() == CardEdition.Type.EXPANSION) return null; // Nothing to do here! @@ -624,7 +668,7 @@ public class StaticData { while (altCandidate != null) { Date referenceDate = editions.get(altCandidate.getEdition()).getDate(); altCandidate = this.searchAlternativeCardCandidate(altCandidate, preferModernFrame, - referenceDate, searchStrategy); + referenceDate, searchStrategy, allowedSetCodes); if (altCandidate != null) { CardEdition altCandidateEdition = editions.get(altCandidate.getEdition()); if (altCandidateEdition.getType() == CardEdition.Type.EXPANSION) @@ -638,7 +682,7 @@ public class StaticData { private PaperCard tryToGetCardPrintWithMatchingFrame(PaperCard altCard, boolean isCardArtPreferenceLatestArt, boolean cardArtHasFilter, - boolean preferModernFrame) { + boolean preferModernFrame, List allowedSetCodes) { CardEdition altCardEdition = editions.get(altCard.getEdition()); boolean frameIsCompliantAlready = (altCardEdition.isModern() == preferModernFrame); if (frameIsCompliantAlready) @@ -650,7 +694,7 @@ public class StaticData { while (altCandidate != null) { Date referenceDate = editions.get(altCandidate.getEdition()).getDate(); altCandidate = this.searchAlternativeCardCandidate(altCandidate, preferModernFrame, - referenceDate, searchStrategy); + referenceDate, searchStrategy, allowedSetCodes); if (altCandidate != null) { CardEdition altCandidateEdition = editions.get(altCandidate.getEdition()); if (altCandidateEdition.isModern() == preferModernFrame) diff --git a/forge-core/src/main/java/forge/deck/Deck.java b/forge-core/src/main/java/forge/deck/Deck.java index aaba92d218c..c72c6ef732a 100644 --- a/forge-core/src/main/java/forge/deck/Deck.java +++ b/forge-core/src/main/java/forge/deck/Deck.java @@ -266,7 +266,7 @@ public class Deck extends DeckBase implements Iterable> cardsWithNoEdition = new EnumMap<>(DeckSection.class); - List mainCards = new ArrayList<>(); - for (Entry e: getMain()) - mainCards.add(e.getKey().getName()); - cardsWithNoEdition.put(DeckSection.Main, getAllCardNamesWithNoSpecifiedEdition(mainCards)); - optimiseCardArtSelectionInDeckSections(cardsWithNoEdition, false); - } private ArrayList getAllCardNamesWithNoSpecifiedEdition(List cardsInSection) { ArrayList cardNamesWithNoEdition = new ArrayList<>(); List> cardRequests = CardPool.processCardList(cardsInSection); @@ -372,7 +364,7 @@ public class Deck extends DeckBase implements Iterable> cardsWithNoEdition, boolean multiArtPrint) { + private void optimiseCardArtSelectionInDeckSections(Map> cardsWithNoEdition) { StaticData data = StaticData.instance(); // Get current Card Art Preference Settings boolean isCardArtPreferenceLatestArt = data.cardArtPreferenceIsLatest(); @@ -405,13 +397,13 @@ public class Deck extends DeckBase implements Iterable 1) addAlternativeCardPrintInPoolWithMultipleArt(card, pool, totalToAdd, artCount); else diff --git a/forge-core/src/main/java/forge/deck/DeckRecognizer.java b/forge-core/src/main/java/forge/deck/DeckRecognizer.java index da77de7718b..48df415da34 100644 --- a/forge-core/src/main/java/forge/deck/DeckRecognizer.java +++ b/forge-core/src/main/java/forge/deck/DeckRecognizer.java @@ -83,23 +83,29 @@ public class DeckRecognizer { // only used for card tokens private PaperCard card = null; private DeckSection tokenSection = null; + // Flag used to mark whether original card request had any specified set code + // This will be used to mark tokens that could be further processed by + // card art optimisation (if enabled) + private boolean cardRequestHasSetCode = true; + public static Token LegalCard(final PaperCard card, final int count, - final DeckSection section) { - return new Token(TokenType.LEGAL_CARD, count, card, section); + final DeckSection section, final boolean cardRequestHasSetCode) { + return new Token(TokenType.LEGAL_CARD, count, card, section, cardRequestHasSetCode); } public static Token LimitedCard(final PaperCard card, final int count, - final DeckSection section, final LimitedCardType limitedType){ - return new Token(TokenType.LIMITED_CARD, count, card, section, limitedType); + final DeckSection section, final LimitedCardType limitedType, + final boolean cardRequestHasSetCode){ + return new Token(TokenType.LIMITED_CARD, count, card, section, limitedType, cardRequestHasSetCode); } - public static Token NotAllowedCard(final PaperCard card, final int count) { - return new Token(TokenType.CARD_FROM_NOT_ALLOWED_SET, count, card); + public static Token NotAllowedCard(final PaperCard card, final int count, final boolean cardRequestHasSetCode) { + return new Token(TokenType.CARD_FROM_NOT_ALLOWED_SET, count, card, cardRequestHasSetCode); } - public static Token CardInInvalidSet(final PaperCard card, final int count) { - return new Token(TokenType.CARD_FROM_INVALID_SET, count, card); + public static Token CardInInvalidSet(final PaperCard card, final int count, final boolean cardRequestHasSetCode) { + return new Token(TokenType.CARD_FROM_INVALID_SET, count, card, cardRequestHasSetCode); } // WARNING MESSAGES @@ -154,26 +160,27 @@ public class DeckRecognizer { return new Token(TokenType.DECK_SECTION_NAME, matchedSection.name()); } - private Token(final TokenType type1, final int count, final PaperCard tokenCard) { + private Token(final TokenType type1, final int count, final PaperCard tokenCard, boolean cardRequestHasSetCode) { this.number = count; this.type = type1; - this.text = String.format("%s [%s] #%s", - tokenCard.getName(), tokenCard.getEdition(), tokenCard.getCollectorNumber()); + this.text = ""; this.card = tokenCard; this.tokenSection = null; this.limitedCardType = null; + this.cardRequestHasSetCode = cardRequestHasSetCode; } private Token(final TokenType type1, final int count, final PaperCard tokenCard, - final DeckSection section) { - this(type1, count, tokenCard); + final DeckSection section, boolean cardRequestHasSetCode) { + this(type1, count, tokenCard, cardRequestHasSetCode); this.tokenSection = section; this.limitedCardType = null; } private Token(final TokenType type1, final int count, final PaperCard tokenCard, - final DeckSection section, final LimitedCardType limitedCardType1) { - this(type1, count, tokenCard); + final DeckSection section, final LimitedCardType limitedCardType1, + boolean cardRequestHasSetCode) { + this(type1, count, tokenCard, cardRequestHasSetCode); this.tokenSection = section; this.limitedCardType = limitedCardType1; } @@ -189,6 +196,9 @@ public class DeckRecognizer { } public final String getText() { + if (this.isCardToken()) + return String.format("%s [%s] #%s", + this.card.getName(), this.card.getEdition(), this.card.getCollectorNumber()); return this.text; } @@ -204,16 +214,26 @@ public class DeckRecognizer { return this.number; } + public final boolean cardRequestHasNoCode() { + return !(this.cardRequestHasSetCode); + } + public final DeckSection getTokenSection() { return this.tokenSection; } public void resetTokenSection(DeckSection referenceDeckSection) { this.tokenSection = referenceDeckSection != null ? referenceDeckSection : DeckSection.Main; } + public void replaceTokenCard(PaperCard replacementCard){ + if (!this.isCardToken()) + return; + this.card = replacementCard; + } + public final LimitedCardType getLimitedCardType() { return this.limitedCardType; } /** - * Filters all tokens types that have a PaperCard instance set (not null) + * Filters all token types that have a PaperCard instance set (not null) * @return true for tokens of type: * LEGAL_CARD, LIMITED_CARD, CARD_FROM_NOT_ALLOWED_SET and CARD_FROM_INVALID_SET. * False otherwise. @@ -236,6 +256,15 @@ public class DeckRecognizer { this.type == TokenType.DECK_NAME); } + /** + * Filters all tokens for deck that are also Card Token.. + * @return true for tokens of type: LEGAL_CARD, LIMITED_CARD. + * False otherwise. + */ + public boolean isCardTokenForDeck() { + return (this.type == TokenType.LEGAL_CARD || this.type == TokenType.LIMITED_CARD); + } + /** * Determines whether current token is a placeholder token for card categories, * only used for Decklist formatting. @@ -635,7 +664,8 @@ public class DeckRecognizer { PaperCard pc = data.getCardFromSet(cardName, edition, collectorNumber, artIndex, isFoil); if (pc != null) // ok so the card has been found - let's see if there's any restriction on the set - return checkAndSetCardToken(pc, edition, cardCount, deckSecFromCardLine, currentDeckSection); + return checkAndSetCardToken(pc, edition, cardCount, deckSecFromCardLine, + currentDeckSection, true); // UNKNOWN card as in the Counterspell|FEM case return Token.UnknownCard(cardName, setCode, cardCount); } @@ -654,7 +684,8 @@ public class DeckRecognizer { if (pc != null) { CardEdition edition = StaticData.instance().getCardEdition(pc.getEdition()); - return checkAndSetCardToken(pc, edition, cardCount, deckSecFromCardLine, currentDeckSection); + return checkAndSetCardToken(pc, edition, cardCount, deckSecFromCardLine, + currentDeckSection, false); } } return unknownCardToken; // either null or unknown card @@ -677,25 +708,26 @@ public class DeckRecognizer { return null; } - private Token checkAndSetCardToken(PaperCard pc, CardEdition edition, int cardCount, - String deckSecFromCardLine, DeckSection referenceSection) { + private Token checkAndSetCardToken(final PaperCard pc, final CardEdition edition, final int cardCount, + final String deckSecFromCardLine, final DeckSection referenceSection, + final boolean cardRequestHasSetCode) { // Note: Always Check Allowed Set First to avoid accidentally importing invalid cards // e.g. Banned Cards from not-allowed sets! if (IsIllegalInFormat(edition.getCode())) // Mark as illegal card - return Token.NotAllowedCard(pc, cardCount); + return Token.NotAllowedCard(pc, cardCount, cardRequestHasSetCode); if (isNotCompliantWithReleaseDateRestrictions(edition)) - return Token.CardInInvalidSet(pc, cardCount); + return Token.CardInInvalidSet(pc, cardCount, cardRequestHasSetCode); DeckSection tokenSection = getTokenSection(deckSecFromCardLine, referenceSection, pc); if (isBannedInFormat(pc)) - return Token.LimitedCard(pc, cardCount, tokenSection, LimitedCardType.BANNED); + return Token.LimitedCard(pc, cardCount, tokenSection, LimitedCardType.BANNED, cardRequestHasSetCode); if (isRestrictedInFormat(pc, cardCount)) - return Token.LimitedCard(pc, cardCount, tokenSection, LimitedCardType.RESTRICTED); + return Token.LimitedCard(pc, cardCount, tokenSection, LimitedCardType.RESTRICTED, cardRequestHasSetCode); - return Token.LegalCard(pc, cardCount, tokenSection); + return Token.LegalCard(pc, cardCount, tokenSection, cardRequestHasSetCode); } // This would save tons of time in parsing Input + would also allow to return UnsupportedCardTokens beforehand diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 9d3a3454e2d..f158cfcb9be 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -412,7 +412,7 @@ public class GameAction { CardCollection cards = new CardCollection(c.getMergedCards()); // replace top card with copied card for correct name for human to choose. cards.set(cards.indexOf(c), copied); - // 721.3b + // 723.3b if (cause != null && zoneTo.getZoneType() == ZoneType.Exile) { cards = (CardCollection) cause.getHostCard().getController().getController().orderMoveToZoneList(cards, zoneTo.getZoneType(), cause); } else { diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index d8e064d615f..2d0ee677817 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -179,7 +179,7 @@ public final class GameActionUtil { final Cost disturbCost = new Cost(k[1], true); SpellAbility newSA; - if (source.getAlternateState().getType().isEnchantment()) { + if (source.getAlternateState().getType().hasSubtype("Aura")) { newSA = source.getAlternateState().getFirstAbility().copyWithManaCostReplaced(activator, disturbCost); } else { diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index 367123c77ff..17d541ee3be 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -575,14 +575,14 @@ public abstract class SpellAbilityEffect { FCollection defs = null; // important to update defenders here, maybe some PW got removed combat.initConstraints(); - if ("True".equalsIgnoreCase(attacking)) { - defs = (FCollection) combat.getDefenders(); - } else if (sa.hasParam("ChoosePlayerOrPlaneswalker")) { + if (sa.hasParam("ChoosePlayerOrPlaneswalker")) { PlayerCollection defendingPlayers = AbilityUtils.getDefinedPlayers(host, attacking, sa); defs = new FCollection<>(); for (Player p : defendingPlayers) { defs.addAll(game.getCombat().getDefendersControlledBy(p)); } + } else if ("True".equalsIgnoreCase(attacking)) { + defs = (FCollection) combat.getDefenders(); } else { defs = AbilityUtils.getDefinedEntities(host, attacking, sa); } @@ -593,8 +593,7 @@ public abstract class SpellAbilityEffect { Player chooser; if (sa.hasParam("Chooser")) { chooser = Iterables.getFirst(AbilityUtils.getDefinedPlayers(host, sa.getParam("Chooser"), sa), null); - } - else { + } else { chooser = controller; } defender = chooser.getController().chooseSingleEntityForEffect(defs, sa, diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java index e0198ffe0a2..f1e25eccc39 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java @@ -137,15 +137,17 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect { final int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; - if ((destination == ZoneType.Library || destination == ZoneType.PlanarDeck) - && !sa.hasParam("Shuffle") && cards.size() >= 2 && !random) { - Player p = AbilityUtils.getDefinedPlayers(source, sa.getParamOrDefault("DefinedPlayer", "You"), sa).get(0); - cards = (CardCollection) p.getController().orderMoveToZoneList(cards, destination, sa); - //the last card in this list will be the closest to the top, but we want the first card to be closest. - //so reverse it here before moving them to the library. - java.util.Collections.reverse(cards); - } else { - cards = (CardCollection) GameActionUtil.orderCardsByTheirOwners(game, cards, destination, sa); + if (!random) { + if ((destination == ZoneType.Library || destination == ZoneType.PlanarDeck) + && !sa.hasParam("Shuffle") && cards.size() >= 2) { + Player p = AbilityUtils.getDefinedPlayers(source, sa.getParamOrDefault("DefinedPlayer", "You"), sa).get(0); + cards = (CardCollection) p.getController().orderMoveToZoneList(cards, destination, sa); + //the last card in this list will be the closest to the top, but we want the first card to be closest. + //so reverse it here before moving them to the library. + java.util.Collections.reverse(cards); + } else { + cards = (CardCollection) GameActionUtil.orderCardsByTheirOwners(game, cards, destination, sa); + } } if (destination.equals(ZoneType.Library) && random) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java index 81f41238da0..2c853f6afa9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java @@ -164,7 +164,6 @@ public class DigUntilEffect extends SpellAbilityEffect { game.getAction().reveal(revealed, p, false); } - if (foundDest != null) { // Allow ordering of found cards if ((foundDest.isKnown()) && found.size() >= 2 && !foundDest.equals(ZoneType.Exile)) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/DrawEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DrawEffect.java index 772e44c3168..7e6d66e5bd4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DrawEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DrawEffect.java @@ -52,7 +52,7 @@ public class DrawEffect extends SpellAbilityEffect { int actualNum = numCards; if (upto) { - actualNum = p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblHowManyCardDoYouWantDraw"),0, numCards); + actualNum = p.getController().chooseNumber(sa, Localizer.getInstance().getMessage("lblHowManyCardDoYouWantDraw"), 0, numCards); } final CardCollectionView drawn = p.drawCards(actualNum, sa); diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 2af6c5fe698..2299c8ebd1a 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2628,8 +2628,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sbCost.append(cost.toSimpleString()); sbAfter.append(sbCost).append(" (").append(inst.getReminderText()).append(")"); sbAfter.append("\r\n"); - } else if (keyword.equals("CARDNAME can't be countered.") || - keyword.equals("Remove CARDNAME from your deck before playing if you're not playing for ante.")) { + } else if (keyword.equals("CARDNAME can't be countered.") || keyword.equals("This spell can't be " + + "countered.") || keyword.equals("Remove CARDNAME from your deck before playing if you're not " + + "playing for ante.")) { sbBefore.append(keyword); sbBefore.append("\r\n"); } else if (keyword.startsWith("Haunt")) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 7a2294c798b..4b5225b6cc3 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -256,7 +256,8 @@ public class CardFactoryUtil { * @return a boolean. */ public static boolean isCounterable(final Card c) { - return !c.hasKeyword("CARDNAME can't be countered.") && c.getCanCounter(); + return !(c.hasKeyword("CARDNAME can't be countered.") || c.hasKeyword("This spell can't be countered.")) + && c.getCanCounter(); } /** diff --git a/forge-game/src/main/java/forge/game/card/CardPredicates.java b/forge-game/src/main/java/forge/game/card/CardPredicates.java index 0ed368fdecd..736e629647b 100644 --- a/forge-game/src/main/java/forge/game/card/CardPredicates.java +++ b/forge-game/src/main/java/forge/game/card/CardPredicates.java @@ -197,6 +197,15 @@ public final class CardPredicates { }; } + public static Predicate sharesLandTypeWith(final Card card) { + return new Predicate() { + @Override + public boolean apply(final Card c) { + return c.sharesLandTypeWith(card); + } + }; + } + public static final Predicate possibleBlockers(final Card attacker) { return new Predicate() { @Override diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 98cfe6cd7d9..9158dbea0aa 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -25,6 +25,7 @@ import forge.game.zone.ZoneType; import forge.item.PaperCard; import forge.util.Expressions; import forge.util.TextUtil; +import forge.util.collect.FCollection; import forge.util.collect.FCollectionView; import org.apache.commons.lang3.StringUtils; @@ -825,6 +826,11 @@ public class CardProperty { } } } + } else if (property.startsWith("sharesLandTypeWith")) { + final String restriction = property.split("sharesLandTypeWith ")[1]; + if (!Iterables.any(AbilityUtils.getDefinedCards(source, restriction, spellAbility), CardPredicates.sharesLandTypeWith(card))) { + return false; + } } else if (property.equals("sharesPermanentTypeWith")) { if (!card.sharesPermanentTypeWith(source)) { return false; @@ -1462,6 +1468,14 @@ public class CardProperty { return false; } } + if (property.startsWith("attacking ")) { // generic "attacking [DefinedGameEntity]" + FCollection defined = AbilityUtils.getDefinedEntities(source, property.split(" ")[1], + spellAbility); + final GameEntity defender = combat.getDefenderByAttacker(card); + if (!defined.contains(defender)) { + return false; + } + } } else if (property.startsWith("notattacking")) { return null == combat || !combat.isAttacking(card); } else if (property.equals("attackedThisCombat")) { diff --git a/forge-game/src/main/java/forge/game/card/CounterEnumType.java b/forge-game/src/main/java/forge/game/card/CounterEnumType.java index e5712aa20fc..7e5d787dbdd 100644 --- a/forge-game/src/main/java/forge/game/card/CounterEnumType.java +++ b/forge-game/src/main/java/forge/game/card/CounterEnumType.java @@ -179,6 +179,8 @@ public enum CounterEnumType { JAVELIN("JAVLN", 180, 206, 172), + JUDGMENT("JUDGM", 249, 220, 52), + KI("KI", 190, 189, 255), KNOWLEDGE("KNOWL", 0, 115, 255), diff --git a/forge-game/src/main/java/forge/game/cost/Cost.java b/forge-game/src/main/java/forge/game/cost/Cost.java index ab62db3a7d3..84f2e52229c 100644 --- a/forge-game/src/main/java/forge/game/cost/Cost.java +++ b/forge-game/src/main/java/forge/game/cost/Cost.java @@ -832,12 +832,7 @@ public class Cost implements Serializable { sb.append(Cost.NUM_NAMES[i]); } - sb.append(" "); - char firstChar = type.charAt(0); - if (Character.isUpperCase(firstChar)) { //fix case of type before appending - type = Character.toLowerCase(firstChar) + type.substring(1); - } - sb.append(type); + sb.append(" ").append(type); if (1 != i) { sb.append("s"); } diff --git a/forge-game/src/main/java/forge/game/cost/CostDiscard.java b/forge-game/src/main/java/forge/game/cost/CostDiscard.java index 55054ffb1e4..dd9cd0c12aa 100644 --- a/forge-game/src/main/java/forge/game/cost/CostDiscard.java +++ b/forge-game/src/main/java/forge/game/cost/CostDiscard.java @@ -199,7 +199,9 @@ public class CostDiscard extends CostPartWithList { // discard itself for cycling cost runParams.put(AbilityKey.Cycling, true); } - return targetCard.getController().discard(targetCard, null, null, runParams); + // if this is caused by 118.12 it's also an effect + SpellAbility cause = targetCard.getGame().getStack().isResolving(ability.getHostCard()) ? ability : null; + return targetCard.getController().discard(targetCard, cause, null, runParams); } /* (non-Javadoc) diff --git a/forge-game/src/main/java/forge/game/cost/CostReturn.java b/forge-game/src/main/java/forge/game/cost/CostReturn.java index 4b6b4091370..7cceba28bc5 100644 --- a/forge-game/src/main/java/forge/game/cost/CostReturn.java +++ b/forge-game/src/main/java/forge/game/cost/CostReturn.java @@ -132,7 +132,6 @@ public class CostReturn extends CostPartWithList { return "ReturnedCards"; } - public T accept(ICostVisitor visitor) { return visitor.visit(this); } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 5c8129f32a8..c8123b1fde5 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1774,6 +1774,10 @@ public class Player extends GameEntity implements Comparable { if (land.isFaceDown()) { land.turnFaceUp(null); } + + Map runParams = AbilityKey.mapFromCard(land); + runParams.put(AbilityKey.Origin, land.getZone().getZoneType().name()); + game.copyLastState(); final Card c = game.getAction().moveTo(getZone(ZoneType.Battlefield), land, cause); game.updateLastStateForCard(c); @@ -1782,7 +1786,6 @@ public class Player extends GameEntity implements Comparable { game.fireEvent(new GameEventLandPlayed(this, land)); // Run triggers - Map runParams = AbilityKey.mapFromCard(land); runParams.put(AbilityKey.SpellAbility, cause); game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams, false); game.getStack().unfreezeStack(); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java index 71e87b7e556..698066c157f 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java @@ -294,7 +294,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { } if (this.getShareAllColors() != null) { - List tgts = AbilityUtils.getDefinedCards(sa.getHostCard(), this.getShareAllColors(), sa); + List tgts = AbilityUtils.getDefinedCards(host, this.getShareAllColors(), sa); Card first = Iterables.getFirst(tgts, null); if (first == null) { return false; @@ -324,11 +324,11 @@ public class SpellAbilityCondition extends SpellAbilityVariables { return false; } - if ((this.getActivationLimit() != -1) && (sa.getActivationsThisTurn() >= this.getActivationLimit())) { + if (this.getActivationLimit() != -1 && sa.getActivationsThisTurn() >= this.getActivationLimit()) { return false; } - if ((this.getGameActivationLimit() != -1) && (sa.getActivationsThisGame() >= this.getGameActivationLimit())) { + if (this.getGameActivationLimit() != -1 && sa.getActivationsThisGame() >= this.getGameActivationLimit()) { return false; } @@ -352,7 +352,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { } if (this.getColorToCheck() != null) { - if (!sa.getHostCard().hasChosenColor(this.getColorToCheck())) { + if (!host.hasChosenColor(this.getColorToCheck())) { return false; } } @@ -365,7 +365,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { list = new FCollection(game.getCardsIn(getPresentZone())); } - final int left = Iterables.size(Iterables.filter(list, GameObjectPredicates.restriction(getIsPresent().split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa))); + final int left = Iterables.size(Iterables.filter(list, GameObjectPredicates.restriction(getIsPresent().split(","), sa.getActivatingPlayer(), host, sa))); final String rightString = this.getPresentCompare().substring(2); int right = AbilityUtils.calculateAmount(host, rightString, sa); @@ -378,9 +378,9 @@ public class SpellAbilityCondition extends SpellAbilityVariables { if (this.getPlayerContains() != null) { List list = new ArrayList<>(); if (this.getPlayerDefined() != null) { - list.addAll(AbilityUtils.getDefinedPlayers(sa.getHostCard(), this.getPlayerDefined(), sa)); + list.addAll(AbilityUtils.getDefinedPlayers(host, this.getPlayerDefined(), sa)); } - List contains = AbilityUtils.getDefinedPlayers(sa.getHostCard(), this.getPlayerContains(), sa); + List contains = AbilityUtils.getDefinedPlayers(host, this.getPlayerContains(), sa); if (contains.isEmpty() || !list.containsAll(contains)) { return false; } @@ -417,7 +417,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { boolean result = false; for (final GameObject o : matchTgt.getFirstTargetedSpell().getTargets()) { - if (o.isValid(this.getTargetValidTargeting().split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)) { + if (o.isValid(this.getTargetValidTargeting().split(","), sa.getActivatingPlayer(), host, sa)) { result = true; break; } @@ -448,7 +448,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { } if (StringUtils.isNotEmpty(getManaSpent())) { - SpellAbility castSa = sa.getHostCard().getCastSA(); + SpellAbility castSa = host.getCastSA(); if (castSa == null) { return false; } @@ -457,7 +457,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { } } if (StringUtils.isNotEmpty(getManaNotSpent())) { - SpellAbility castSa = sa.getHostCard().getCastSA(); + SpellAbility castSa = host.getCastSA(); if (castSa != null && castSa.getPayingColors().hasAllColors(ColorSet.fromNames(getManaNotSpent().split(" ")).getColor())) { return false; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerLandPlayed.java b/forge-game/src/main/java/forge/game/trigger/TriggerLandPlayed.java index aecc30fbb46..9c146e9d03a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerLandPlayed.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerLandPlayed.java @@ -19,6 +19,8 @@ package forge.game.trigger; import java.util.Map; +import org.apache.commons.lang3.ArrayUtils; + import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -67,6 +69,19 @@ public class TriggerLandPlayed extends Trigger { * @param runParams*/ @Override public final boolean performTest(final Map runParams) { + if (hasParam("Origin")) { + if (!getParam("Origin").equals("Any")) { + if (getParam("Origin") == null) { + return false; + } + if (!ArrayUtils.contains( + getParam("Origin").split(","), runParams.get(AbilityKey.Origin) + )) { + return false; + } + } + } + if (!matchesValidParam("ValidCard", runParams.get(AbilityKey.Card))) { return false; } diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index ac666bbaff7..333b95d07f9 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -290,6 +290,7 @@ public class GuiDesktop implements IGuiBase { @Override public void clearImageCache() { ImageCache.clear(); + ImageKeys.clearMissingCards(); } @Override diff --git a/forge-gui-desktop/src/main/java/forge/ImageCache.java b/forge-gui-desktop/src/main/java/forge/ImageCache.java index a8ac38d505b..4763c6c67e1 100644 --- a/forge-gui-desktop/src/main/java/forge/ImageCache.java +++ b/forge-gui-desktop/src/main/java/forge/ImageCache.java @@ -96,6 +96,7 @@ public class ImageCache { public static void clear() { _CACHE.invalidateAll(); _missingIconKeys.clear(); + ImageKeys.clearMissingCards(); } /** diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java index d2ccd3162ca..bb9e29f0962 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/DeckImport.java @@ -201,6 +201,9 @@ public class DeckImport extends FDialog { private final FCheckBox cardArtPrefHasFilterCheckBox = new FCheckBox(Localizer.getInstance() .getMessage("lblPrefArtExpansionOnly"), false); + // Smart Card Art Optimisation + private final FCheckBox smartCardArtCheckBox = new FCheckBox(Localizer.getInstance().getMessage("lblUseSmartCardArt"), false); + // Format Filter private final FCheckBox includeBnRCheck = new FCheckBox(Localizer.getInstance().getMessage("lblIgnoreBnR"), false); @@ -214,6 +217,8 @@ public class DeckImport extends FDialog { private final String IMPORT_CARDS_CMD_LABEL = Localizer.getInstance().getMessage("lblImportCardsCmd"); private final String CREATE_NEW_DECK_CMD_LABEL = Localizer.getInstance().getMessage("lblCreateNewCmd"); + private final String SMART_CARDART_TT_NO_DECK = Localizer.getInstance().getMessage("ttUseSmartCardArtNoDeck"); + private final String SMART_CARDART_TT_WITH_DECK = Localizer.getInstance().getMessage("ttUseSmartCardArtWithDeck"); private final String currentGameType; private final VStatisticsImporter statsView; private final CStatisticsImporter cStatsView; @@ -224,6 +229,8 @@ public class DeckImport extends FDialog { GameType currentGameType = g.getGameType(); this.controller = new DeckImportController(dateTimeCheck, monthDropdown, yearDropdown, currentDeckIsNotEmpty); this.controller.setGameFormat(currentGameType); + if (currentDeckIsNotEmpty) + this.controller.setCurrentDeckInEditor(this.host.getDeckController().getCurrentDeckInEditor()); // Get the list of allowed Sections List supportedSections = new ArrayList<>(); for (DeckSection section : EnumSet.allOf(DeckSection.class)) { @@ -380,6 +387,7 @@ public class DeckImport extends FDialog { optionsPanel.add(dateFilterPanel, "cell 0 0, w 90%, left"); // B2. Card Art Preference Filter + final String latestOpt = Localizer.getInstance().getMessage("latestArtOpt"); final String originalOpt = Localizer.getInstance().getMessage("originalArtOpt"); final String [] choices = {latestOpt, originalOpt}; @@ -393,6 +401,10 @@ public class DeckImport extends FDialog { artPrefInfoLabel.setFont(FSkin.getItalicFont()); artPrefInfoLabel.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + // Smart Art Checkbox + this.smartCardArtCheckBox.setToolTipText(currentDeckIsNotEmpty ? SMART_CARDART_TT_WITH_DECK : SMART_CARDART_TT_NO_DECK); + this.smartCardArtCheckBox.setSelected(StaticData.instance().isEnabledCardArtSmartSelection()); + this.cardArtPrefHasFilterCheckBox.setSelected(StaticData.instance().isCoreExpansionOnlyFilterSet()); this.cardArtPrefHasFilterCheckBox.setToolTipText(Localizer.getInstance().getMessage("nlPrefArtExpansionOnly")); @@ -401,7 +413,8 @@ public class DeckImport extends FDialog { cardArtPanel.add(this.cardArtPrefsLabel, "cell 0 0, w 25%, left, split 2"); cardArtPanel.add(this.cardArtPrefsComboBox, "cell 0 0, w 10%, left, split 2"); cardArtPanel.add(this.cardArtPrefHasFilterCheckBox, "cell 0 1, w 15%, left, gaptop 5"); - cardArtPanel.add(artPrefInfoLabel, "cell 0 2, w 90%, left"); + cardArtPanel.add(this.smartCardArtCheckBox, "cell 0 2, w 15%, left, gaptop 5"); + cardArtPanel.add(artPrefInfoLabel, "cell 0 3, w 90%, left"); // Action Listeners // ---------------- @@ -420,6 +433,15 @@ public class DeckImport extends FDialog { this.cardArtPrefsComboBox.addItemListener(updateCardArtPreference); this.cardArtPrefHasFilterCheckBox.addItemListener(updateCardArtPreference); + this.smartCardArtCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + boolean enableSmartCardArt = smartCardArtCheckBox.isSelected(); + controller.setSmartCardArtOptimisation(enableSmartCardArt); + parseAndDisplay(); + } + }); + optionsPanel.add(cardArtPanel, "cell 1 0, w 100%, left"); // B3. Block Filter @@ -531,6 +553,9 @@ public class DeckImport extends FDialog { controller.setCreateNewDeck(createNewDeck); String cmdAcceptLabel = createNewDeck ? CREATE_NEW_DECK_CMD_LABEL : IMPORT_CARDS_CMD_LABEL; cmdAcceptButton.setText(cmdAcceptLabel); + String smartCardArtChboxTooltip = createNewDeck ? SMART_CARDART_TT_NO_DECK : SMART_CARDART_TT_WITH_DECK; + smartCardArtCheckBox.setToolTipText(smartCardArtChboxTooltip); + parseAndDisplay(); } }); } @@ -554,63 +579,75 @@ public class DeckImport extends FDialog { TokenKey tokenKey = TokenKey.fromString(keyString); if (tokenKey == null) return; - StaticData data = StaticData.instance(); - PaperCard card = data.fetchCard(tokenKey.cardName, tokenKey.setCode, tokenKey.collectorNumber); + PaperCard card = StaticData.instance().fetchCard(tokenKey.cardName, tokenKey.setCode, + tokenKey.collectorNumber); if (card != null) { - // no need to check for card that has Image because CardPicturePanel - // has automatic integration with cardFetch - StringBuilder statusLbl = new StringBuilder(); - if ((tokenKey.tokenType == CARD_FROM_INVALID_SET) || (tokenKey.tokenType == CARD_FROM_NOT_ALLOWED_SET) - || (tokenKey.tokenType == LIMITED_CARD)) { - DeckRecognizer.Token dummy = null; - switch (tokenKey.tokenType) { - case CARD_FROM_INVALID_SET: - dummy = DeckRecognizer.Token.CardInInvalidSet(card, 0); - break; - case CARD_FROM_NOT_ALLOWED_SET: - dummy = DeckRecognizer.Token.NotAllowedCard(card, 0); - break; - case LIMITED_CARD: - dummy = DeckRecognizer.Token.LimitedCard(card, 0, tokenKey.deckSection, tokenKey.limitedType); - break; - } - String cssClass = getTokenCSSClass(tokenKey.tokenType); - if (tokenKey.tokenType == LIMITED_CARD) - cssClass = WARN_MSG_CLASS; - String statusMsg = String.format("%s", cssClass, - getTokenStatusMessage(dummy)); - statusLbl.append(statusMsg); - } - - CardEdition edition = data.getCardEdition(card.getEdition()); - String editionName = edition != null ? String.format("%s ", edition.getName()) : ""; - StringBuilder editionLbl = new StringBuilder(""); - editionLbl.append(String.format("%s: \"%s\" (%s) - Collector Nr. %s", - Localizer.getInstance().getMessage("lblSet"), editionName, - tokenKey.setCode, card.getCollectorNumber())); - if ((tokenKey.tokenType == LEGAL_CARD) || - ((tokenKey.tokenType == LIMITED_CARD) && this.controller.importBannedAndRestrictedCards())){ - editionLbl.append(String.format(" - %s: %s", OK_IMPORT_CLASS, - Localizer.getInstance().getMessage("lblDeckSection"), tokenKey.deckSection)); - } - editionLbl.append(""); - cardImagePreview.setItem(card); - - if (tokenKey.tokenType == LEGAL_CARD || - (tokenKey.tokenType == LIMITED_CARD && this.controller.importBannedAndRestrictedCards())) - cardImagePreview.showAsEnabled(); - else - cardImagePreview.showAsDisabled(); - cardPreviewLabel.setText(String.format("%s %s
%s", STYLESHEET, editionLbl, statusLbl)); - - // set tooltip - String tooltip = String.format("%s [%s] #%s", card.getName(), card.getEdition(), - card.getCollectorNumber()); - cardImagePreview.setToolTipText(tooltip); + DeckRecognizer.Token mockToken = createMockTokenFromTokenKey(card, tokenKey); + setupCardImagePreviewPanel(card, mockToken); } } } + private DeckRecognizer.Token createMockTokenFromTokenKey(PaperCard card, TokenKey tokenKey){ + DeckRecognizer.Token mockToken; + switch (tokenKey.tokenType) { + case CARD_FROM_INVALID_SET: + mockToken = DeckRecognizer.Token.CardInInvalidSet(card, 0, true); + break; + case CARD_FROM_NOT_ALLOWED_SET: + mockToken = DeckRecognizer.Token.NotAllowedCard(card, 0, true); + break; + case LIMITED_CARD: + mockToken = DeckRecognizer.Token.LimitedCard(card, 0, tokenKey.deckSection, tokenKey.limitedType, true); + break; + case LEGAL_CARD: + mockToken = DeckRecognizer.Token.LegalCard(card, 0, tokenKey.deckSection, true); + break; + default: + mockToken = null; + break; + } + return mockToken; + } + + private void setupCardImagePreviewPanel(PaperCard card, DeckRecognizer.Token token) { + StaticData data = StaticData.instance(); + // no need to check for card that has Image because CardPicturePanel + // has automatic integration with cardFetch + StringBuilder statusLbl = new StringBuilder(); + if (token != null && token.isCardToken()) { + String cssClass = getTokenCSSClass(token.getType()); + if (token.getType() == LIMITED_CARD) + cssClass = WARN_MSG_CLASS; + String statusMsg = String.format("%s", cssClass, + getTokenStatusMessage(token)); + statusLbl.append(statusMsg); + } + + CardEdition edition = data.getCardEdition(card.getEdition()); + String editionName = edition != null ? String.format("%s ", edition.getName()) : ""; + StringBuilder editionLbl = new StringBuilder(""); + editionLbl.append(String.format("%s: \"%s\" (%s) - Collector Nr. %s", + Localizer.getInstance().getMessage("lblSet"), editionName, card.getEdition(), card.getCollectorNumber())); + if ((token.getType() == LEGAL_CARD) || ((token.getType() == LIMITED_CARD) && this.controller.importBannedAndRestrictedCards())){ + editionLbl.append(String.format(" - %s: %s", OK_IMPORT_CLASS, + Localizer.getInstance().getMessage("lblDeckSection"), token.getTokenSection())); + } + editionLbl.append(""); + cardImagePreview.setItem(card); + + if (token.getType() == LEGAL_CARD || (token.getType() == LIMITED_CARD && this.controller.importBannedAndRestrictedCards())) + cardImagePreview.showAsEnabled(); + else + cardImagePreview.showAsDisabled(); + cardPreviewLabel.setText(String.format("%s %s
%s", STYLESHEET, editionLbl, statusLbl)); + + // set tooltip + String tooltip = String.format("%s [%s] #%s", card.getName(), card.getEdition(), + card.getCollectorNumber()); + cardImagePreview.setToolTipText(tooltip); + } + private void resetCardImagePreviewPanel() { this.cardPreviewLabel.setText(Localizer.getInstance().getMessage("lblCardPreview")); this.cardImagePreview.setItem(ImageCache.getDefaultImage()); @@ -641,7 +678,9 @@ public class DeckImport extends FDialog { } private void parseAndDisplay() { - final List tokens = controller.parseInput(txtInput.getText()); + List tokens = controller.parseInput(txtInput.getText()); + if (controller.isSmartCardArtEnabled()) + tokens = controller.optimiseCardArtInTokens(); displayTokens(tokens); updateSummaries(tokens); } @@ -685,27 +724,39 @@ public class DeckImport extends FDialog { PaperCard cardDisplayed = (PaperCard) displayedCardInPanel; // this will return either the same card instance or its [un]foiled version // null will be returned if not found in card list anymore - cardDisplayed = this.controller.getCardFromDecklist(cardDisplayed); - if (cardDisplayed == null) - this.resetCardImagePreviewPanel(); // current displayed card is not in decklist - else { - if (this.controller.isTokenInListLegal(cardDisplayed)) { - this.cardImagePreview.setItem(cardDisplayed); - this.cardImagePreview.showAsEnabled(); - } else if (this.controller.isTokenInListLimited(cardDisplayed)) { - this.cardImagePreview.setItem(cardDisplayed); - if (this.includeBnRCheck.isSelected()) - this.cardImagePreview.showAsEnabled(); - else - this.cardImagePreview.showAsDisabled(); - } else { // any other card token NOT legal nor limited - this.cardImagePreview.setItem(cardDisplayed); - this.cardImagePreview.showAsDisabled(); + PaperCard cardFromDecklist = this.controller.getCardFromDecklist(cardDisplayed); + if (cardFromDecklist == null) { + cardFromDecklist = this.controller.getCardFromDecklistByName(cardDisplayed.getName()); + if (cardFromDecklist == null) + this.resetCardImagePreviewPanel(); // current displayed card is not in decklist + else { + DeckRecognizer.Token cardToken = controller.getTokenFromCardInDecklist(cardFromDecklist); + setupCardImagePreviewPanel(cardFromDecklist, cardToken); } } + else { + DeckRecognizer.Token cardToken = controller.getTokenFromCardInDecklist(cardFromDecklist); + setupCardImagePreviewPanel(cardFromDecklist, cardToken); + } } } +// private void setupCardImagePreview(PaperCard cardDisplayed) { +// if (this.controller.isTokenInListLegal(cardDisplayed)) { +// this.cardImagePreview.setItem(cardDisplayed); +// this.cardImagePreview.showAsEnabled(); +// } else if (this.controller.isTokenInListLimited(cardDisplayed)) { +// this.cardImagePreview.setItem(cardDisplayed); +// if (this.includeBnRCheck.isSelected()) +// this.cardImagePreview.showAsEnabled(); +// else +// this.cardImagePreview.showAsDisabled(); +// } else { // any other card token NOT legal nor limited +// this.cardImagePreview.setItem(cardDisplayed); +// this.cardImagePreview.showAsDisabled(); +// } +// } + private String toHTML(final DeckRecognizer.Token token) { if (token == null) return ""; @@ -714,7 +765,7 @@ public class DeckImport extends FDialog { return ""; String tokenStatus = getTokenStatusMessage(token); String cssClass = getTokenCSSClass(token.getType()); - if (tokenStatus == null) + if (tokenStatus.length() == 0) tokenMsg = padEndWithHTMLSpaces(tokenMsg, 2*PADDING_TOKEN_MSG_LENGTH+10); else { tokenMsg = padEndWithHTMLSpaces(tokenMsg, PADDING_TOKEN_MSG_LENGTH); @@ -830,7 +881,7 @@ public class DeckImport extends FDialog { case LEGAL_CARD: case UNKNOWN_TEXT: default: - return null; + return ""; } diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/DeckController.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/DeckController.java index 74217cb7cb9..e7a49dfb20b 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/DeckController.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/DeckController.java @@ -120,6 +120,14 @@ public class DeckController { this.setModel((T) currentDeck, isStored); } + public Deck getCurrentDeckInEditor(){ + try{ + return this.getModel().getHumanDeck(); + } catch (NullPointerException npe){ + return null; + } + } + private Deck pickFromCatalog(Deck deck, CardPool catalog) { // Getting Latest among the earliest editions in catalog! CardEdition referenceEdition = StaticData.instance().getEditions().getTheLatestOfAllTheOriginalEditionsOfCardsIn(catalog); @@ -182,8 +190,7 @@ public class DeckController { if (card == null) continue; int countToAdd = countByName.get(cardName); - card = StaticData.instance().getAlternativeCardPrint(card, referenceReleaseDate, - true, true); + card = StaticData.instance().getAlternativeCardPrint(card, referenceReleaseDate); if (card != null) targetSection.add(card.getName(), card.getEdition(), countToAdd); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java index 39e16160f03..5ca80857700 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java @@ -19,6 +19,7 @@ import forge.model.FModel; import forge.player.GamePlayerUtil; import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.controllers.CEditorTokenViewer; +import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; import forge.toolbox.*; import forge.util.Localizer; @@ -27,6 +28,8 @@ import org.apache.commons.lang3.tuple.Pair; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; @@ -262,6 +265,8 @@ public enum CSubmenuPreferences implements ICDoc { initializeAutoUpdaterComboBox(); initializeMulliganRuleComboBox(); initializeAiProfilesComboBox(); + initializeSoundSetsComboBox(); + initializeMusicSetsComboBox(); initializeStackAdditionsComboBox(); initializeLandPlayedComboBox(); initializeColorIdentityCombobox(); @@ -466,6 +471,35 @@ public enum CSubmenuPreferences implements ICDoc { panel.setComboBox(comboBox, selectedItem); } + private void initializeSoundSetsComboBox() { + final FPref userSetting = FPref.UI_CURRENT_SOUND_SET; + final FComboBoxPanel panel = this.view.getSoundSetsComboBoxPanel(); + final FComboBox comboBox = createComboBox(SoundSystem.instance.getAvailableSoundSets(), userSetting); + final String selectedItem = this.prefs.getPref(userSetting); + panel.setComboBox(comboBox, selectedItem); + comboBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent actionEvent) { + SoundSystem.instance.invalidateSoundCache(); + } + }); + } + + private void initializeMusicSetsComboBox() { + final FPref userSetting = FPref.UI_CURRENT_MUSIC_SET; + final FComboBoxPanel panel = this.view.getMusicSetsComboBoxPanel(); + final FComboBox comboBox = createComboBox(SoundSystem.instance.getAvailableMusicSets(), userSetting); + final String selectedItem = this.prefs.getPref(userSetting); + panel.setComboBox(comboBox, selectedItem); + comboBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent actionEvent) { + MusicPlaylist.invalidateMusicPlaylist(); + SoundSystem.instance.changeBackgroundTrack(); + } + }); + } + private void initializeCardArtPreference() { final String latestOpt = Localizer.getInstance().getMessage("latestArtOpt"); final String originalOpt = Localizer.getInstance().getMessage("originalArtOpt"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java index 31934975948..e8516fd2874 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java @@ -128,6 +128,8 @@ public enum VSubmenuPreferences implements IVSubmenu { private final FComboBoxPanel cbpCardArtFormat = new FComboBoxPanel<>(localizer.getMessage("cbpCardArtFormat")+":"); private final FComboBoxPanel cbpCardArtPreference = new FComboBoxPanel<>(localizer.getMessage("lblPreferredArt")+":"); private final FComboBoxPanel cbpMulliganRule = new FComboBoxPanel<>(localizer.getMessage("cbpMulliganRule")+":"); + private final FComboBoxPanel cbpSoundSets = new FComboBoxPanel<>(localizer.getMessage("cbpSoundSets")+":"); + private final FComboBoxPanel cbpMusicSets = new FComboBoxPanel<>(localizer.getMessage("cbpMusicSets")+":"); private final FComboBoxPanel cbpAiProfiles = new FComboBoxPanel<>(localizer.getMessage("cbpAiProfiles")+":"); private final FComboBoxPanel cbpStackAdditions = new FComboBoxPanel<>(localizer.getMessage("cbpStackAdditions")+":"); private final FComboBoxPanel cbpLandPlayed = new FComboBoxPanel<>(localizer.getMessage("cbpLandPlayed")+":"); @@ -414,9 +416,15 @@ public enum VSubmenuPreferences implements IVSubmenu { pnlPrefs.add(cbEnableSounds, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlEnableSounds")), descriptionConstraints); + pnlPrefs.add(cbpSoundSets, comboBoxConstraints); + pnlPrefs.add(new NoteLabel(localizer.getMessage("nlpSoundSets")), descriptionConstraints); + pnlPrefs.add(cbEnableMusic, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlEnableMusic")), descriptionConstraints); + pnlPrefs.add(cbpMusicSets, comboBoxConstraints); + pnlPrefs.add(new NoteLabel(localizer.getMessage("nlpMusicSets")), descriptionConstraints); + pnlPrefs.add(cbAltSoundSystem, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlAltSoundSystem")), descriptionConstraints); pnlPrefs.add(cbSROptimize, titleConstraints); @@ -740,6 +748,14 @@ public enum VSubmenuPreferences implements IVSubmenu { return cbpMulliganRule; } + public FComboBoxPanel getSoundSetsComboBoxPanel() { + return cbpSoundSets; + } + + public FComboBoxPanel getMusicSetsComboBoxPanel() { + return cbpMusicSets; + } + public FComboBoxPanel getAiProfilesComboBoxPanel() { return cbpAiProfiles; } diff --git a/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java b/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java index ac2e0be5db5..6438d652d4c 100644 --- a/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java +++ b/forge-gui-desktop/src/main/java/forge/sound/AudioClip.java @@ -40,9 +40,6 @@ import javax.sound.sampled.UnsupportedAudioFileException; import com.google.common.io.Files; import com.sipgate.mp3wav.Converter; -import forge.localinstance.properties.ForgeConstants; - - /** * SoundSystem - a simple sound playback system for Forge. * Do not use directly. Instead, use the {@link forge.sound.SoundEffectType} enumeration. @@ -64,7 +61,7 @@ public class AudioClip implements IAudioClip { } public static boolean fileExists(String fileName) { - File fSound = new File(ForgeConstants.SOUND_DIR, fileName); + File fSound = new File(SoundSystem.instance.getSoundDirectory(), fileName); return fSound.exists(); } @@ -195,7 +192,7 @@ public class AudioClip implements IAudioClip { } private Clip createClip(String filename) { - File fSound = new File(ForgeConstants.SOUND_DIR, filename); + File fSound = new File(SoundSystem.instance.getSoundDirectory(), filename); if (!fSound.exists()) { throw new IllegalArgumentException("Sound file " + fSound.toString() + " does not exist, cannot make a clip of it"); } diff --git a/forge-gui-desktop/src/test/java/forge/deck/DeckRecognizerTest.java b/forge-gui-desktop/src/test/java/forge/deck/DeckRecognizerTest.java index 16ba63ea262..1fcb09dbc03 100644 --- a/forge-gui-desktop/src/test/java/forge/deck/DeckRecognizerTest.java +++ b/forge-gui-desktop/src/test/java/forge/deck/DeckRecognizerTest.java @@ -1114,6 +1114,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertTrue(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "4x Power Sink TMP 78"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1125,6 +1126,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); + assertFalse(cardToken.cardRequestHasNoCode()); assertEquals(tokenCard.getCollectorNumber(), "78"); lineRequest = "4x TMP Power Sink 78"; @@ -1138,6 +1140,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "4x TMP Power Sink"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1150,6 +1153,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "4x Power Sink TMP"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1162,6 +1166,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "Power Sink TMP"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1174,6 +1179,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "[TMP] Power Sink"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1186,6 +1192,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); // Relax Set Preference assertEquals(StaticData.instance().getCommonCards().getCardArtPreference(), CardDb.CardArtPreference.LATEST_ART_ALL_EDITIONS); @@ -1200,6 +1207,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "4x Power Sink+"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1211,6 +1219,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertTrue(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "Power Sink+"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1222,6 +1231,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertTrue(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testSingleWordCardNameMatchesCorrectly(){ @@ -1236,6 +1246,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 2); assertEquals(tokenCard.getName(), "Counterspell"); assertEquals(tokenCard.getEdition(), "ICE"); + assertFalse(cardToken.cardRequestHasNoCode()); // Remove Set code assertEquals(StaticData.instance().getCommonCards().getCardArtPreference(), CardDb.CardArtPreference.LATEST_ART_ALL_EDITIONS); @@ -1248,6 +1259,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 2); assertEquals(tokenCard.getName(), "Counterspell"); assertEquals(tokenCard.getEdition(), "MH2"); + assertTrue(cardToken.cardRequestHasNoCode()); } @@ -1271,6 +1283,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertTrue(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "TMP"); assertEquals(tokenCard.getCollectorNumber(), "78"); + assertFalse(cardToken.cardRequestHasNoCode()); } /*================================== @@ -1402,6 +1415,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getEdition(), "MIR"); assertEquals(tokenCard.getArtIndex(), 3); assertEquals(tokenCard.getCollectorNumber(), "345"); + assertFalse(cardToken.cardRequestHasNoCode()); } @Test void testCollectorNumberIsNotConfusedAsArtIndexInstead(){ @@ -1418,6 +1432,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getEdition(), "MIR"); assertEquals(tokenCard.getArtIndex(), 1); assertEquals(tokenCard.getCollectorNumber(), "3"); + assertFalse(cardToken.cardRequestHasNoCode()); } @Test void testCardRequestWithWrongCollectorNumberStillReturnsTheCardFromSetIfAny(){ @@ -1433,6 +1448,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(card.getName(), "Jayemdae Tome"); assertEquals(card.getEdition(), "LEB"); assertEquals(card.getCollectorNumber(), "255"); + assertFalse(cardToken.cardRequestHasNoCode()); // No Match - Unknown card requestLine = "3 Jayemdae Tome (TMP)"; // actually found in TappedOut Deck Export @@ -1486,6 +1502,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(ancestralCard.getName(), "Ancestral Recall"); assertEquals(StaticData.instance().getCommonCards().getCardArtPreference(), CardDb.CardArtPreference.LATEST_ART_ALL_EDITIONS); assertEquals(ancestralCard.getEdition(), "2ED"); + assertTrue(cardToken.cardRequestHasNoCode()); // Counterspell editions lineRequest = "Counterspell"; @@ -1498,6 +1515,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 1); assertEquals(counterSpellCard.getName(), "Counterspell"); assertEquals(counterSpellCard.getEdition(), "MMQ"); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testInvalidCardRequestWhenReleaseDateConstraintsAreUp(){ @@ -1515,12 +1533,14 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 1); assertEquals(counterSpellCard.getName(), "Counterspell"); assertEquals(counterSpellCard.getEdition(), "MH2"); + assertFalse(cardToken.cardRequestHasNoCode()); recognizer.setDateConstraint(1999, 10); cardToken = recognizer.recogniseCardToken(lineRequest, null); assertNotNull(cardToken); assertEquals(cardToken.getType(), TokenType.CARD_FROM_INVALID_SET); assertNotNull(cardToken.getCard()); + assertFalse(cardToken.cardRequestHasNoCode()); } /*====================================== @@ -1542,6 +1562,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard tc = cardToken.getCard(); assertEquals(tc.getName(), "Counterspell"); assertEquals(tc.getEdition(), "MH2"); + assertTrue(cardToken.cardRequestHasNoCode()); // Setting Original Core recognizer.setArtPreference(CardDb.CardArtPreference.ORIGINAL_ART_ALL_EDITIONS); @@ -1555,6 +1576,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Counterspell"); assertEquals(tc.getEdition(), "LEA"); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testCardRequestVariesUponChangesInArtPreference(){ @@ -1571,6 +1593,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertTrue(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setArtPreference(CardDb.CardArtPreference.ORIGINAL_ART_CORE_EXPANSIONS_REPRINT_ONLY); cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1582,6 +1605,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertTrue(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "LEA"); + assertTrue(cardToken.cardRequestHasNoCode()); // Check that result is persistent - and consistent with change lineRequest = "Power Sink"; @@ -1594,6 +1618,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(tokenCard.getName(), "Power Sink"); assertFalse(tokenCard.isFoil()); assertEquals(tokenCard.getEdition(), "LEA"); + assertTrue(cardToken.cardRequestHasNoCode()); } /*============================== @@ -1612,6 +1637,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_NOT_ALLOWED_SET); assertNotNull(cardToken.getCard()); assertNull(cardToken.getTokenSection()); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "2x Counterspell"; // It does not exist any Counterspell in Urza's block cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1619,6 +1645,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_NOT_ALLOWED_SET); assertNotNull(cardToken.getCard()); assertNull(cardToken.getTokenSection()); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testRequestingCardWithRestrictionsOnDeckFormat(){ @@ -1634,6 +1661,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(ancestralCard.getName(), "Ancestral Recall"); assertEquals(StaticData.instance().getCommonCards().getCardArtPreference(), CardDb.CardArtPreference.LATEST_ART_ALL_EDITIONS); assertEquals(ancestralCard.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setDeckFormatConstraint(DeckFormat.TinyLeaders); cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1643,6 +1671,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getTokenSection(), DeckSection.Main); assertNotNull(cardToken.getLimitedCardType()); assertEquals(cardToken.getLimitedCardType(), DeckRecognizer.LimitedCardType.BANNED); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testCardRequestUnderGameConstraints(){ @@ -1668,6 +1697,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Bloodstained Mire"); assertEquals(cardToken.getCard().getEdition(), "ONS"); assertEquals(cardToken.getText(), "Bloodstained Mire [ONS] #313"); + assertFalse(cardToken.cardRequestHasNoCode()); String noEditionCardRequest = "4 Bloodstained Mire"; cardToken = recognizer.recogniseCardToken(noEditionCardRequest, null); @@ -1681,6 +1711,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Bloodstained Mire"); assertEquals(cardToken.getCard().getEdition(), "KTK"); assertEquals(cardToken.getText(), "Bloodstained Mire [KTK] #230"); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testGameFormatRestrictionsAlsoWithRestrictedCardList(){ @@ -1712,6 +1743,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Ancestral Recall"); assertEquals(cardToken.getQuantity(), 1); assertEquals(cardToken.getCard().getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); cardRequest = "4x Ancestral Recall"; cardToken = recognizer.recogniseCardToken(cardRequest, null); @@ -1723,6 +1755,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Ancestral Recall"); assertEquals(cardToken.getQuantity(), 4); assertEquals(cardToken.getCard().getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testSettingPartialConstraintsOnGameFormatsAreStillApplied(){ @@ -1746,6 +1779,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Viashino Sandstalker"); assertEquals(cardToken.getQuantity(), 1); assertEquals(cardToken.getCard().getEdition(), "MB1"); + assertTrue(cardToken.cardRequestHasNoCode()); cardRequest = "4x Viashino Sandstalker"; cardToken = recognizer.recogniseCardToken(cardRequest, null); @@ -1757,6 +1791,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Viashino Sandstalker"); assertEquals(cardToken.getQuantity(), 4); assertEquals(cardToken.getCard().getEdition(), "MB1"); + assertTrue(cardToken.cardRequestHasNoCode()); // Requesting now what will be a Banned card later in this test cardRequest = "Squandered Resources"; @@ -1768,6 +1803,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Squandered Resources"); assertEquals(cardToken.getQuantity(), 1); assertEquals(cardToken.getCard().getEdition(), "VIS"); + assertTrue(cardToken.cardRequestHasNoCode()); // == ALLOWED SETS ONLY recognizer.setGameFormatConstraint(allowedSetCodes, null, null); @@ -1781,6 +1817,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Viashino Sandstalker"); assertEquals(cardToken.getQuantity(), 4); assertEquals(cardToken.getCard().getEdition(), "VIS"); + assertTrue(cardToken.cardRequestHasNoCode()); // == BANNED CARDS ONLY recognizer.setGameFormatConstraint(null, bannedCards, null); @@ -1794,6 +1831,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Viashino Sandstalker"); assertEquals(cardToken.getQuantity(), 4); assertEquals(cardToken.getCard().getEdition(), "MB1"); + assertTrue(cardToken.cardRequestHasNoCode()); cardRequest = "Squandered Resources"; cardToken = recognizer.recogniseCardToken(cardRequest, null); @@ -1806,6 +1844,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Squandered Resources"); assertEquals(cardToken.getQuantity(), 1); assertEquals(cardToken.getCard().getEdition(), "VIS"); + assertTrue(cardToken.cardRequestHasNoCode()); // ALLOWED SET CODES AND RESTRICTED recognizer.setGameFormatConstraint(allowedSetCodes, null, restrictedCards); @@ -1820,6 +1859,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getCard().getName(), "Viashino Sandstalker"); assertEquals(cardToken.getQuantity(), 4); assertEquals(cardToken.getCard().getEdition(), "VIS"); + assertTrue(cardToken.cardRequestHasNoCode()); } /*====================================== @@ -1840,6 +1880,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard tc = cardToken.getCard(); assertEquals(tc.getName(), "Lightning Dragon"); assertEquals(tc.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setDateConstraint(2000, 0); // Jan 2000 // Setting Fantasy Constructed Game Format: Urza's Block Format (no promo) @@ -1855,6 +1896,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Lightning Dragon"); assertEquals(tc.getEdition(), "USG"); + assertFalse(cardToken.cardRequestHasNoCode()); // Relaxing Constraint on Set lineRequest = "2x Lightning Dragon"; @@ -1866,6 +1908,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Lightning Dragon"); assertEquals(tc.getEdition(), "USG"); // the latest available within set requested + assertTrue(cardToken.cardRequestHasNoCode()); // Now setting a tighter date constraint recognizer.setDateConstraint(1998, 0); // Jan 1998 @@ -1875,6 +1918,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_INVALID_SET); assertEquals(cardToken.getQuantity(), 2); assertNotNull(cardToken.getCard()); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "2x Lightning Dragon"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1883,6 +1927,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 2); assertNotNull(cardToken.getCard()); assertEquals(cardToken.getText(), "Lightning Dragon [USG] #202"); + assertTrue(cardToken.cardRequestHasNoCode()); // Now relaxing date constraint but removing USG from allowed sets // VMA release date: 2014-06-16 @@ -1895,6 +1940,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_NOT_ALLOWED_SET); assertEquals(cardToken.getQuantity(), 2); assertNotNull(cardToken.getCard()); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "2x Lightning Dragon"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1902,6 +1948,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_NOT_ALLOWED_SET); assertEquals(cardToken.getQuantity(), 2); assertNotNull(cardToken.getCard()); + assertTrue(cardToken.cardRequestHasNoCode()); // Now relaxing date constraint but removing USG from allowed sets // VMA release date: 2014-06-16 @@ -1916,6 +1963,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Lightning Dragon"); assertEquals(tc.getEdition(), "VMA"); + assertTrue(cardToken.cardRequestHasNoCode()); } @Test void testCardMatchWithDateANDdeckFormatConstraints(){ @@ -1933,6 +1981,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard tc = cardToken.getCard(); assertEquals(tc.getName(), "Flash"); assertEquals(tc.getEdition(), "A25"); + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setDateConstraint(2012, 0); // Jan 2012 recognizer.setDeckFormatConstraint(DeckFormat.TinyLeaders); @@ -1946,6 +1995,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getTokenSection(), DeckSection.Main); assertNotNull(cardToken.getLimitedCardType()); assertEquals(cardToken.getLimitedCardType(), DeckRecognizer.LimitedCardType.BANNED); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "2x Cancel"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1956,6 +2006,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Cancel"); assertEquals(tc.getEdition(), "M12"); // the latest within date constraint + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "2x Cancel|M21"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -1964,6 +2015,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 2); assertNotNull(cardToken.getCard()); assertEquals(cardToken.getText(), "Cancel [M21] #46"); + assertFalse(cardToken.cardRequestHasNoCode()); } @Test void testCardMatchWithGameANDdeckFormatConstraints(){ @@ -1981,6 +2033,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard tc = cardToken.getCard(); assertEquals(tc.getName(), "Flash"); assertEquals(tc.getEdition(), "A25"); + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setGameFormatConstraint(Arrays.asList("MIR", "VIS", "WTH"), null, null); recognizer.setDeckFormatConstraint(DeckFormat.TinyLeaders); @@ -1993,6 +2046,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getTokenSection(), DeckSection.Main); assertNotNull(cardToken.getLimitedCardType()); assertEquals(cardToken.getLimitedCardType(), DeckRecognizer.LimitedCardType.BANNED); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "2x Femeref Knight"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2003,6 +2057,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Femeref Knight"); assertEquals(tc.getEdition(), "MIR"); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "2x Incinerate"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2013,6 +2068,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { tc = cardToken.getCard(); assertEquals(tc.getName(), "Incinerate"); assertEquals(tc.getEdition(), "MIR"); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "Noble Elephant"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2024,6 +2080,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getTokenSection(), DeckSection.Main); assertNotNull(cardToken.getLimitedCardType()); assertEquals(cardToken.getLimitedCardType(), DeckRecognizer.LimitedCardType.BANNED); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "Incinerate|ICE"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2032,6 +2089,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getQuantity(), 1); assertNotNull(cardToken.getCard()); assertEquals(cardToken.getText(), "Incinerate [ICE] #194"); + assertFalse(cardToken.cardRequestHasNoCode()); } @Test void testCardMatchWitDateANDgameANDdeckFormatConstraints(){ @@ -2049,6 +2107,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard tc = cardToken.getCard(); assertEquals(tc.getName(), "Flash"); assertEquals(tc.getEdition(), "A25"); + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setGameFormatConstraint(Arrays.asList("MIR", "VIS", "WTH"), null, null); recognizer.setDeckFormatConstraint(DeckFormat.TinyLeaders); @@ -2063,6 +2122,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getTokenSection(), DeckSection.Main); assertNotNull(cardToken.getLimitedCardType()); assertEquals(cardToken.getLimitedCardType(), DeckRecognizer.LimitedCardType.BANNED); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "Ardent Militia"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2073,6 +2133,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getTokenSection(), DeckSection.Main); assertNotNull(cardToken.getLimitedCardType()); assertEquals(cardToken.getLimitedCardType(), DeckRecognizer.LimitedCardType.BANNED); + assertTrue(cardToken.cardRequestHasNoCode()); lineRequest = "Buried Alive|UMA"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2080,6 +2141,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_NOT_ALLOWED_SET); // illegal in game format assertNotNull(cardToken.getCard()); assertEquals(cardToken.getText(), "Buried Alive [UMA] #88"); // within set constraints + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "Buried Alive"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2088,6 +2150,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertNotNull(cardToken.getCard()); assertEquals(cardToken.getCard().getName(), "Buried Alive"); assertEquals(cardToken.getCard().getEdition(), "WTH"); // within set constraints + assertTrue(cardToken.cardRequestHasNoCode()); recognizer.setDateConstraint(1997, 2); // March '97 - before WTH lineRequest = "Buried Alive"; @@ -2096,6 +2159,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(cardToken.getType(), TokenType.CARD_FROM_INVALID_SET); assertNotNull(cardToken.getCard()); assertEquals(cardToken.getText(), "Buried Alive [WTH] #63"); + assertTrue(cardToken.cardRequestHasNoCode()); } /*================================== @@ -2166,6 +2230,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(aspectOfHydraCard.getName(), "Aspect of Hydra"); assertEquals(aspectOfHydraCard.getEdition(), "BNG"); assertTrue(aspectOfHydraCard.isFoil()); + assertFalse(cardToken.cardRequestHasNoCode()); lineRequest = "18 Forest <254> [THB] (F)"; cardToken = recognizer.recogniseCardToken(lineRequest, null); @@ -2177,6 +2242,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(forestCard.getName(), "Forest"); assertEquals(forestCard.getEdition(), "THB"); assertTrue(forestCard.isFoil()); + assertFalse(cardToken.cardRequestHasNoCode()); } // === TappedOut Markdown Format @@ -2258,6 +2324,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(acCard.getName(), "Amoeboid Changeling"); assertEquals(acCard.getEdition(), "LRW"); assertEquals(acCard.getCollectorNumber(), "51"); + assertFalse(xmageCardToken.cardRequestHasNoCode()); } // === Deckstats Commander @@ -2276,6 +2343,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(soCard.getName(), "Sliver Overlord"); assertEquals(soCard.getEdition(), "SLD"); assertEquals(soCard.getCollectorNumber(), "10"); + assertTrue(deckStatsToken.cardRequestHasNoCode()); // Check that deck section is made effective even if we're currently in Main deckStatsToken = recognizer.recognizeLine(deckstatsCommanderRequest, DeckSection.Main); @@ -2287,6 +2355,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertNotNull(deckStatsToken.getCard()); soCard = deckStatsToken.getCard(); assertEquals(soCard.getName(), "Sliver Overlord"); + assertTrue(deckStatsToken.cardRequestHasNoCode()); } // === Double-Sided Cards @@ -2306,6 +2375,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard leftSideCard = cardToken.getCard(); assertEquals(leftSideCard.getName(), leftSideRequest); assertEquals(cardToken.getQuantity(), 1); + assertTrue(cardToken.cardRequestHasNoCode()); // Check Right side first cardToken = recognizer.recogniseCardToken(rightSideRequest, null); @@ -2316,6 +2386,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard rightSideCard = cardToken.getCard(); assertEquals(rightSideCard.getName(), leftSideRequest); // NOTE: this is not a blunder! Back side will result in front side name assertEquals(cardToken.getQuantity(), 1); + assertTrue(cardToken.cardRequestHasNoCode()); // Check double side cardToken = recognizer.recogniseCardToken(doubleSideRequest, null); @@ -2326,6 +2397,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { PaperCard doubleSideCard = cardToken.getCard(); assertEquals(doubleSideCard.getName(), leftSideRequest); assertEquals(cardToken.getQuantity(), 1); + assertTrue(cardToken.cardRequestHasNoCode()); } /*================================= @@ -2928,6 +3000,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertNotNull(token.getCard()); assertNotNull(token.getTokenSection()); assertEquals(token.getTokenSection(), DeckSection.Sideboard); + assertTrue(token.cardRequestHasNoCode()); lineRequest = "SB:Ancestral Recall"; token = recognizer.recognizeLine(lineRequest, null); @@ -2937,6 +3010,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertNotNull(token.getCard()); assertNotNull(token.getTokenSection()); assertEquals(token.getTokenSection(), DeckSection.Sideboard); + assertTrue(token.cardRequestHasNoCode()); lineRequest = "Ancestral Recall"; token = recognizer.recognizeLine(lineRequest, null); @@ -2944,6 +3018,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertEquals(token.getType(), TokenType.LEGAL_CARD); assertEquals(token.getText(), "Ancestral Recall [VMA] #1"); assertNotNull(token.getCard()); + assertTrue(token.cardRequestHasNoCode()); lineRequest = "* 4 [Counterspell](http://tappedout.nethttp://tappedout.net/mtg-card/counterspell/)"; token = recognizer.recognizeLine(lineRequest, null); @@ -2952,6 +3027,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { assertNotNull(token.getText()); assertNotNull(token.getCard()); assertEquals(token.getQuantity(), 4); + assertTrue(token.cardRequestHasNoCode()); lineRequest = "### Instant (14)"; token = recognizer.recognizeLine(lineRequest, null); @@ -2993,6 +3069,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase { Token cardToken = tokens.get(2); assertTrue(cardToken.isCardToken()); assertNotNull(cardToken.getCard()); + assertFalse(cardToken.cardRequestHasNoCode()); assertEquals(cardToken.getQuantity(), 4); assertEquals(cardToken.getCard().getName(), "Incinerate"); assertEquals(cardToken.getCard().getEdition(), "ICE"); diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 59815ad69f3..12e3ddffbb3 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -79,6 +79,7 @@ public class Forge implements ApplicationListener { public static String CJK_Font = ""; public static int hoveredCount = 0; public static boolean afterDBloaded = false; + public static int mouseButtonID = 0; public static ApplicationListener getApp(Clipboard clipboard0, IDeviceAdapter deviceAdapter0, String assetDir0, boolean value, boolean androidOrientation, int totalRAM, boolean isTablet, int AndroidAPI, String AndroidRelease, String deviceName) { app = new Forge(); @@ -780,6 +781,7 @@ public class Forge implements ApplicationListener { } } } + mouseButtonID = button; return super.touchDown(x, y, pointer, button); } diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index f04a3fcc76c..59a82029b33 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -21,10 +21,7 @@ import forge.screens.LoadingOverlay; import forge.screens.match.MatchController; import forge.screens.quest.QuestMenu; import forge.screens.settings.GuiDownloader; -import forge.sound.AudioClip; -import forge.sound.AudioMusic; -import forge.sound.IAudioClip; -import forge.sound.IAudioMusic; +import forge.sound.*; import forge.toolbox.FOptionPane; import forge.toolbox.GuiChoose; import forge.util.*; @@ -272,7 +269,7 @@ public class GuiMobile implements IGuiBase { @Override public IAudioClip createAudioClip(final String filename) { - return AudioClip.createClip(ForgeConstants.SOUND_DIR + filename); + return AudioClip.createClip(SoundSystem.instance.getSoundDirectory() + filename); } @Override @@ -288,6 +285,7 @@ public class GuiMobile implements IGuiBase { @Override public void clearImageCache() { ImageCache.clear(); + ImageKeys.clearMissingCards(); } @Override diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index 270a9c87c09..3eba43c3327 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -113,6 +113,7 @@ public class ImageCache { public static void clear() { missingIconKeys.clear(); + ImageKeys.clearMissingCards(); } public static void disposeTexture(){ diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 80fda456699..1ea1d071e98 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -403,15 +403,26 @@ public class FDeckEditor extends TabPageScreen { addItem(new FMenuItem(localizer.getMessage("lblImportFromClipboard"), Forge.hdbuttons ? FSkinImage.HDIMPORT : FSkinImage.OPEN, new FEventHandler() { @Override public void handleEvent(FEvent e) { - FDeckImportDialog dialog = new FDeckImportDialog(!deck.isEmpty(), editorType, new Callback() { + FDeckImportDialog dialog = new FDeckImportDialog(!deck.isEmpty(), editorType); + dialog.setCallback(new Callback() { @Override public void run(Deck importedDeck) { - getMainDeckPage().setCards(importedDeck.getMain()); - if (getSideboardPage() != null) { - getSideboardPage().setCards(importedDeck.getOrCreate(DeckSection.Sideboard)); + if (deck != null && importedDeck.hasName()) { + deck.setName(importedDeck.getName()); + lblName.setText(importedDeck.getName()); } - if (getCommanderPage() != null) { - getCommanderPage().setCards(importedDeck.getOrCreate(DeckSection.Commander)); + if (dialog.createNewDeck()) { + getMainDeckPage().setCards(importedDeck.getMain()); + if (getSideboardPage() != null) + getSideboardPage().setCards(importedDeck.getOrCreate(DeckSection.Sideboard)); + if (getCommanderPage() != null) + getCommanderPage().setCards(importedDeck.getOrCreate(DeckSection.Commander)); + } else { + getMainDeckPage().addCards(importedDeck.getMain()); + if (getSideboardPage() != null) + getSideboardPage().addCards(importedDeck.getOrCreate(DeckSection.Sideboard)); + if (getCommanderPage() != null) + getCommanderPage().addCards(importedDeck.getOrCreate(DeckSection.Commander)); } } }); diff --git a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java index dbf63820498..68c5fd53843 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java +++ b/forge-gui-mobile/src/forge/deck/FDeckImportDialog.java @@ -41,11 +41,14 @@ import forge.util.Localizer; public class FDeckImportDialog extends FDialog { - private final Callback callback; + private Callback callback; private final FTextArea txtInput = add(new FTextArea(true)); private final FCheckBox newEditionCheck = add(new FCheckBox(Localizer.getInstance().getMessage("lblImportLatestVersionCard"), false)); private final FCheckBox dateTimeCheck = add(new FCheckBox(Localizer.getInstance().getMessage("lblUseOnlySetsReleasedBefore"), false)); + private final FCheckBox smartCardArtCheck = add(new FCheckBox(Localizer.getInstance().getMessage("lblUseSmartCardArt"), false)); + private final FCheckBox createNewDeckCheck = add(new FCheckBox(Localizer.getInstance().getMessage("lblNewDeckCheckbox"), false)); +// private final FCheckBox importInDeck = add(new FCheckBox() /*setting onlyCoreExpCheck to false allow the copied cards to pass the check of deck contents forge-core\src\main\java\forge\deck\Deck.javaDeck.java starting @ Line 320 which is called by forge-gui-mobile\src\forge\deck\FDeckEditor.java starting @ Line 373 @@ -57,14 +60,14 @@ public class FDeckImportDialog extends FDialog { private final FComboBox yearDropdown = add(new FComboBox<>()); private final boolean showOptions; + private final boolean currentDeckIsEmpty; + private boolean createNewDeckControl; private final DeckImportController controller; private final static ImmutableList importOrCancel = ImmutableList.of(Localizer.getInstance().getMessage("lblImport"), Localizer.getInstance().getMessage("lblCancel")); - public FDeckImportDialog(final boolean replacingDeck, final FDeckEditor.EditorType editorType, final Callback callback0) { + public FDeckImportDialog(final boolean replacingDeck, final FDeckEditor.EditorType editorType) { super(Localizer.getInstance().getMessage("lblImportFromClipboard"), 2); - - callback = callback0; controller = new DeckImportController(dateTimeCheck, monthDropdown, yearDropdown, replacingDeck); String contents = Forge.getClipboard().getContents(); if (contents == null) @@ -84,6 +87,10 @@ public class FDeckImportDialog extends FDialog { onlyCoreExpCheck.setSelected(StaticData.instance().isCoreExpansionOnlyFilterSet()); newEditionCheck.setSelected(StaticData.instance().cardArtPreferenceIsLatest()); + smartCardArtCheck.setSelected(StaticData.instance().isEnabledCardArtSmartSelection()); + createNewDeckCheck.setSelected(replacingDeck); + this.currentDeckIsEmpty = !replacingDeck; + this.createNewDeckControl = replacingDeck; initButton(0, Localizer.getInstance().getMessage("lblImport"), new FEventHandler() { @Override @@ -93,21 +100,23 @@ public class FDeckImportDialog extends FDialog { public void run() { List tokens = controller.parseInput(txtInput.getText()); //ensure deck updated based on any changes to options + if (controller.isSmartCardArtEnabled()) + tokens = controller.optimiseCardArtInTokens(); + //if there are any cards that cannot be imported, let user know this and give them the option to cancel StringBuilder sb = new StringBuilder(); for (DeckRecognizer.Token token : tokens) { - if (TokenType.CARD_FROM_NOT_ALLOWED_SET.equals(token.getType()) - || TokenType.CARD_FROM_INVALID_SET.equals(token.getType()) - || TokenType.UNKNOWN_CARD.equals(token.getType()) - || TokenType.UNSUPPORTED_CARD.equals(token.getType())) { - if (sb.length() > 0) { + if (token.getType() == TokenType.CARD_FROM_NOT_ALLOWED_SET + || token.getType() == TokenType.CARD_FROM_INVALID_SET + || token.getType() == TokenType.UNKNOWN_CARD + || token.getType() == TokenType.UNSUPPORTED_CARD) { + if (sb.length() > 0) sb.append("\n"); - } sb.append(token.getQuantity()).append(" ").append(token.getText()); } } if (sb.length() > 0) { - if (SOptionPane.showOptionDialog(Localizer.getInstance().getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb.toString(), Localizer.getInstance().getMessage("lblImportRemainingCards"), SOptionPane.INFORMATION_ICON, importOrCancel) == 1) { + if (SOptionPane.showOptionDialog(Localizer.getInstance().getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb, Localizer.getInstance().getMessage("lblImportRemainingCards"), SOptionPane.INFORMATION_ICON, importOrCancel) == 1) { return; } } @@ -118,9 +127,9 @@ public class FDeckImportDialog extends FDialog { FThreads.invokeInEdtLater(new Runnable() { @Override public void run() { - deck.optimizeMainCardArt(); hide(); - callback.run(deck); + if (callback != null) + callback.run(deck); } }); } @@ -135,7 +144,8 @@ public class FDeckImportDialog extends FDialog { }); List tokens = controller.parseInput(txtInput.getText()); - StaticData data = StaticData.instance(); + if (controller.isSmartCardArtEnabled()) + tokens = controller.optimiseCardArtInTokens(); //ensure at least one known card found on clipboard for (DeckRecognizer.Token token : tokens) { if (token.getType() == TokenType.LEGAL_CARD) { @@ -155,6 +165,19 @@ public class FDeckImportDialog extends FDialog { @Override public void handleEvent(FEvent e) {setArtPreferenceInController();} }); + smartCardArtCheck.setCommand(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + controller.setSmartCardArtOptimisation(smartCardArtCheck.isSelected()); + } + }); + createNewDeckCheck.setCommand(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + createNewDeckControl = createNewDeckCheck.isSelected(); + controller.setCreateNewDeck(createNewDeckControl); + } + }); updateDropDownEnabled(); setArtPreferenceInController(); return; @@ -178,6 +201,12 @@ public class FDeckImportDialog extends FDialog { yearDropdown.setEnabled(enabled); } + public void setCallback(Callback callback0){ + callback = callback0; + } + + public boolean createNewDeck(){ return this.createNewDeckControl; } + @Override public void drawOverlay(Graphics g) { super.drawOverlay(g); @@ -198,7 +227,8 @@ public class FDeckImportDialog extends FDialog { h = monthDropdown.getHeight(); float fieldPadding = padding / 2; - newEditionCheck.setBounds(x, y, w, h); + newEditionCheck.setBounds(x, y, w / 2, h); + onlyCoreExpCheck.setBounds(x + w/2, y, w/2, h); y += h + fieldPadding; dateTimeCheck.setBounds(x, y, w, h); y += h + fieldPadding; @@ -208,7 +238,12 @@ public class FDeckImportDialog extends FDialog { yearDropdown.setBounds(x + dropDownWidth + fieldPadding, y, dropDownWidth, h); y += h + fieldPadding; - onlyCoreExpCheck.setBounds(x, y, w, h); + if (!this.currentDeckIsEmpty){ + smartCardArtCheck.setBounds(x, y, w/2, h); + createNewDeckCheck.setBounds(x + w/2, y, w/2, h); + } else + smartCardArtCheck.setBounds(x, y, w, h); + y += h + 2 * padding; } h = txtInput.getPreferredHeight(w); diff --git a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java index f3df330f283..0876420dc22 100644 --- a/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java +++ b/forge-gui-mobile/src/forge/screens/gauntlet/NewGauntletScreen.java @@ -113,7 +113,7 @@ public class NewGauntletScreen extends LaunchScreen { }); } }); - chooser.show(null, true); + chooser.show(null, false); /*setting selectMax to true will select all available option*/ } }); } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java index 53797b22aff..30f6773cd40 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java @@ -6,8 +6,10 @@ import java.util.List; import java.util.Map; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; import com.badlogic.gdx.math.Vector2; +import forge.Forge; import forge.Graphics; import forge.card.CardRenderer.CardStackPosition; import forge.card.CardZoom; @@ -324,7 +326,15 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread in case a dialog needs to be shown @Override public void run() { - if (!selectCard(false)) { + if (GuiBase.getInterface().isRunningOnDesktop() && Forge.mouseButtonID == Input.Buttons.RIGHT) { + FThreads.invokeInEdtLater(new Runnable() { + @Override + public void run() { + showZoom(); + } + }); + return; + } else if (!selectCard(false)) { //if no cards in stack can be selected, just show zoom/details for card FThreads.invokeInEdtLater(new Runnable() { @Override diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java index fca57671c7b..1cad77a2bc0 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java @@ -18,6 +18,7 @@ import forge.screens.TabPageScreen; import forge.screens.TabPageScreen.TabPage; import forge.screens.home.HomeScreen; import forge.screens.match.MatchController; +import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; import forge.toolbox.FCheckBox; import forge.toolbox.FGroupList; @@ -612,6 +613,29 @@ public class SettingsPage extends TabPage { localizer.getMessage("nlVibrateAfterLongPress")), 6); //Sound Options + lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_SOUND_SET, + localizer.getMessage("cbpSoundSets"), + localizer.getMessage("nlpSoundSets"), + SoundSystem.instance.getAvailableSoundSets()) { + @Override + public void valueChanged(String newValue) { + super.valueChanged(newValue); + SoundSystem.instance.invalidateSoundCache(); + } + }, + 7); + lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_MUSIC_SET, + localizer.getMessage("cbpMusicSets"), + localizer.getMessage("nlpMusicSets"), + SoundSystem.getAvailableMusicSets()) { + @Override + public void valueChanged(String newValue) { + super.valueChanged(newValue); + MusicPlaylist.invalidateMusicPlaylist(); + SoundSystem.instance.changeBackgroundTrack(); + } + }, + 7); lstSettings.addItem(new CustomSelectSetting(FPref.UI_VOL_SOUNDS, localizer.getMessage("cbAdjustSoundsVolume"), localizer.getMessage("nlAdjustSoundsVolume"), diff --git a/forge-gui/release-files/ANNOUNCEMENTS.txt b/forge-gui/release-files/ANNOUNCEMENTS.txt index 1c2ae20dfd8..852f6232dd2 100644 --- a/forge-gui/release-files/ANNOUNCEMENTS.txt +++ b/forge-gui/release-files/ANNOUNCEMENTS.txt @@ -1,6 +1,8 @@ #Add one announcement per line Get in the discord if you aren't yet. https://discord.gg/3v9JCVr -The Throne of Eldraine quest world is the largest and most meticulously developed quest world to date, combining fascinating fairytales and interesting interactions. If you've never baked a pie into a pie, have you really played Magic? -Innistrad: Midnight Hunt (MID) and Innistrad: Midnight Hunt Commander (MIC) are 100% supported -Various improvements have been made to the desktop and mobile user interface to enhance the experience +Forge now supports 100% of core and expansion set cards from Limited Edition Alpha to Innistrad: Midnight Hunt. This includes Equinox, Chaos Orb, and Falling Star. +Planar Conquest now features a new plane - Forgotten Realms, based on the AFR and AFC sets. +Several planes are now available in Planar Conquest in their Classic form, as originally intended by the author, without support for the newer sets and with the original events not modified with newer cards. These planes are available in addition to the contemporary versions of the planes and are marked as "Classic". +Sound sets are now configurable - you can place your sound sets under "sound" in your Forge cache (as subfolders) and then select them with the "Sound set" option. +Music sets are now configurable - you can place your music sets under "music" in your Forge cache (as subfolders) and then select them with the "Music set" option. The music set folder must have the same structure as "res/music", with "match" and "menus" subfolders containing relevant music tracks. *** Android 7 & 8 support is now deprecated. Support will be dropped in an upcoming release. *** diff --git a/forge-gui/res/cardsfolder/a/abrupt_decay.txt b/forge-gui/res/cardsfolder/a/abrupt_decay.txt index ace5ef24809..cc247b7bc02 100644 --- a/forge-gui/res/cardsfolder/a/abrupt_decay.txt +++ b/forge-gui/res/cardsfolder/a/abrupt_decay.txt @@ -1,7 +1,6 @@ Name:Abrupt Decay ManaCost:B G Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ Destroy | Cost$ B G | ValidTgts$ Permanent.nonLand+cmcLE3 | TgtPrompt$ Select target nonland permanent with mana value 3 or less | SpellDescription$ Destroy target nonland permanent with mana value 3 or less. -SVar:Picture:http://www.wizards.com/global/images/magic/general/abrupt_decay.jpg Oracle:This spell can't be countered.\nDestroy target nonland permanent with mana value 3 or less. diff --git a/forge-gui/res/cardsfolder/a/adeline_resplendent_cathar.txt b/forge-gui/res/cardsfolder/a/adeline_resplendent_cathar.txt index caf8200d7ff..55e8eb7cb1c 100644 --- a/forge-gui/res/cardsfolder/a/adeline_resplendent_cathar.txt +++ b/forge-gui/res/cardsfolder/a/adeline_resplendent_cathar.txt @@ -5,8 +5,8 @@ PT:*/4 K:Vigilance S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | Description$ CARDNAME's power is equal to the number of creatures you control. SVar:X:Count$Valid Creature.YouCtrl -T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control. -SVar:TrigToken:DB$ Token | TokenAmount$ Y | TokenScript$ w_1_1_human | TokenTapped$ True | TokenAttacking$ True | ChoosePlayerOrPlaneswalker$ True | TokenOwner$ You -SVar:Y:PlayerCountOpponents$Amount +T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ DBRepeat | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control. +SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | ChangeZoneTable$ True | RepeatSubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenTapped$ True | TokenAttacking$ Remembered | ChoosePlayerOrPlaneswalker$ True | TokenOwner$ You DeckHas:Ability$Token Oracle:Vigilance\nAdeline, Resplendent Cathar's power is equal to the number of creatures you control.\nWhenever you attack, for each opponent, create a 1/1 white Human creature token that's tapped and attacking that player or a planeswalker they control. diff --git a/forge-gui/res/cardsfolder/a/akroma_angel_of_fury.txt b/forge-gui/res/cardsfolder/a/akroma_angel_of_fury.txt index 720cbc778e2..a0d2c0e14c2 100644 --- a/forge-gui/res/cardsfolder/a/akroma_angel_of_fury.txt +++ b/forge-gui/res/cardsfolder/a/akroma_angel_of_fury.txt @@ -8,5 +8,5 @@ K:Protection from white K:Protection from blue A:AB$ Pump | Cost$ R | Defined$ Self | NumAtt$ 1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. K:Morph:3 R R R -K:CARDNAME can't be countered. +K:This spell can't be countered. Oracle:This spell can't be countered.\nFlying, trample, protection from white and from blue\n{R}: Akroma, Angel of Fury gets +1/+0 until end of turn.\nMorph {3}{R}{R}{R} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) diff --git a/forge-gui/res/cardsfolder/a/altered_ego.txt b/forge-gui/res/cardsfolder/a/altered_ego.txt index b9d960fbc27..fe6d3942247 100644 --- a/forge-gui/res/cardsfolder/a/altered_ego.txt +++ b/forge-gui/res/cardsfolder/a/altered_ego.txt @@ -2,11 +2,10 @@ Name:Altered Ego ManaCost:X 2 G U Types:Creature Shapeshifter PT:0/0 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Creature.Other | SubAbility$ DBAddCounter | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it enters with X additional +1/+1 counters on it. SVar:DBAddCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | ETB$ True | CounterNum$ X SVar:X:Count$xPaid DeckHas:Ability$Counter -SVar:Picture:http://www.wizards.com/global/images/magic/general/altered_ego.jpg Oracle:This spell can't be countered.\nYou may have Altered Ego enter the battlefield as a copy of any creature on the battlefield, except it enters with X additional +1/+1 counters on it. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/b/banefire.txt b/forge-gui/res/cardsfolder/b/banefire.txt index 045cc0d744d..a4bfcbc331e 100644 --- a/forge-gui/res/cardsfolder/b/banefire.txt +++ b/forge-gui/res/cardsfolder/b/banefire.txt @@ -3,6 +3,6 @@ ManaCost:X R Types:Sorcery A:SP$ DealDamage | Cost$ X R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | ConditionCheckSVar$ X | ConditionSVarCompare$ LT5 | SubAbility$ BanefulDmg | SpellDescription$ CARDNAME deals X damage to any target. SVar:BanefulDmg:DB$ DealDamage | Defined$ Targeted | NumDmg$ X | NoPrevention$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE5 | StackDescription$ If X is 5 or more, CARDNAME can't be countered by spells or abilities and the damage can't be prevented. -S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ X | SVarCompare$ GE5 | Description$ If X is 5 or more, CARDNAME can't be countered by spells or abilities and the damage can't be prevented. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ This spell can't be countered. | CheckSVar$ X | SVarCompare$ GE5 | Description$ If X is 5 or more, CARDNAME can't be countered by spells or abilities and the damage can't be prevented. SVar:X:Count$xPaid Oracle:Banefire deals X damage to any target.\nIf X is 5 or more, this spell can't be countered and the damage can't be prevented. diff --git a/forge-gui/res/cardsfolder/b/basris_acolyte.txt b/forge-gui/res/cardsfolder/b/basris_acolyte.txt index 67217f84241..c7f303bc81f 100644 --- a/forge-gui/res/cardsfolder/b/basris_acolyte.txt +++ b/forge-gui/res/cardsfolder/b/basris_acolyte.txt @@ -4,6 +4,6 @@ Types:Creature Cat Cleric PT:2/3 K:Lifelink T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounters | TriggerDescription$ When CARDNAME enters the battlefield, put a +1/+1 counter on each of up to two other target creatures you control. -SVar:TrigPutCounters:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select target creature you control +SVar:TrigPutCounters:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select up to two other target creatures you control DeckHas:Ability$LifeGain & Ability$Counters Oracle:Lifelink (Damage dealt by this creature also causes you to gain that much life.)\nWhen Basri's Acolyte enters the battlefield, put a +1/+1 counter on each of up to two other target creatures you control. diff --git a/forge-gui/res/cardsfolder/b/blurred_mongoose.txt b/forge-gui/res/cardsfolder/b/blurred_mongoose.txt index 6b960f05c1c..388bba0cb04 100644 --- a/forge-gui/res/cardsfolder/b/blurred_mongoose.txt +++ b/forge-gui/res/cardsfolder/b/blurred_mongoose.txt @@ -2,7 +2,6 @@ Name:Blurred Mongoose ManaCost:1 G Types:Creature Mongoose PT:2/1 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Shroud -SVar:Picture:http://www.wizards.com/global/images/magic/general/blurred_mongoose.jpg Oracle:This spell can't be countered.\nShroud (This creature can't be the target of spells or abilities.) diff --git a/forge-gui/res/cardsfolder/c/carnage_tyrant.txt b/forge-gui/res/cardsfolder/c/carnage_tyrant.txt index dd2d6682ace..95746383ae4 100644 --- a/forge-gui/res/cardsfolder/c/carnage_tyrant.txt +++ b/forge-gui/res/cardsfolder/c/carnage_tyrant.txt @@ -2,8 +2,7 @@ Name:Carnage Tyrant ManaCost:4 G G Types:Creature Dinosaur PT:7/6 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Trample K:Hexproof -SVar:Picture:http://www.wizards.com/global/images/magic/general/carnage_tyrant.jpg Oracle:This spell can't be countered.\nTrample, hexproof diff --git a/forge-gui/res/cardsfolder/c/chandra_awakened_inferno.txt b/forge-gui/res/cardsfolder/c/chandra_awakened_inferno.txt index 2e80b22a1f0..7a1249ea26f 100644 --- a/forge-gui/res/cardsfolder/c/chandra_awakened_inferno.txt +++ b/forge-gui/res/cardsfolder/c/chandra_awakened_inferno.txt @@ -2,7 +2,7 @@ Name:Chandra, Awakened Inferno Types:Legendary Planeswalker Chandra ManaCost:4 R R Loyalty:6 -K:CARDNAME can't be countered. +K:This spell can't be countered. A:AB$ Effect | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | EffectOwner$ Player.Opponent | Name$ Emblem - Chandra, Awakened Inferno | Triggers$ BOTTrig | Duration$ Permanent | AILogic$ Always | SpellDescription$ Each opponent gets an emblem with "At the beginning of your upkeep, this emblem deals 1 damage to you." SVar:BOTTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ ChandraDmg | TriggerDescription$ At the beginning of your upkeep, this emblem deals 1 damage to you. SVar:ChandraDmg:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ 1 diff --git a/forge-gui/res/cardsfolder/c/chromium_the_mutable.txt b/forge-gui/res/cardsfolder/c/chromium_the_mutable.txt index 8a2dc0f3801..12f09a450af 100644 --- a/forge-gui/res/cardsfolder/c/chromium_the_mutable.txt +++ b/forge-gui/res/cardsfolder/c/chromium_the_mutable.txt @@ -4,6 +4,6 @@ Types:Legendary Creature Elder Dragon PT:7/7 K:Flash K:Flying -K:CARDNAME can't be countered. +K:This spell can't be countered. A:AB$ Animate | Cost$ Discard<1/Card> | Types$ Human | Power$ 1 | Toughness$ 1 | Keywords$ Hexproof | HiddenKeywords$ Unblockable | RemoveAllAbilities$ True | RemoveCreatureTypes$ True | SpellDescription$ Until end of turn, CARDNAME becomes a Human with base power and toughness 1/1, loses all abilities, and gains hexproof. It can't be blocked this turn. Oracle:Flash\nThis spell can't be countered.\nFlying\nDiscard a card: Until end of turn, Chromium, the Mutable becomes a Human with base power and toughness 1/1, loses all abilities, and gains hexproof. It can't be blocked this turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/c/combust.txt b/forge-gui/res/cardsfolder/c/combust.txt index 479f3e0992b..637c1cd8005 100644 --- a/forge-gui/res/cardsfolder/c/combust.txt +++ b/forge-gui/res/cardsfolder/c/combust.txt @@ -1,8 +1,7 @@ Name:Combust ManaCost:1 R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature.White,Creature.Blue | NumDmg$ 5 | NoPrevention$ True | TgtPrompt$ Select target white or blue creature. | SpellDescription$ CARDNAME deals 5 damage to target white or blue creature. The damage can't be prevented. AI:RemoveDeck:Random -SVar:Picture:http://www.wizards.com/global/images/magic/general/combust.jpg Oracle:This spell can't be countered.\nCombust deals 5 damage to target white or blue creature. The damage can't be prevented. diff --git a/forge-gui/res/cardsfolder/c/commence_the_endgame.txt b/forge-gui/res/cardsfolder/c/commence_the_endgame.txt index 42a25ff3f34..3dbac347af3 100644 --- a/forge-gui/res/cardsfolder/c/commence_the_endgame.txt +++ b/forge-gui/res/cardsfolder/c/commence_the_endgame.txt @@ -1,7 +1,7 @@ Name:Commence the Endgame ManaCost:4 U U Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ Draw | Cost$ 4 U U | NumCards$ 2 | SpellDescription$ Draw two cards, then amass X, where X is the number of cards in your hand. (Put X +1/+1 counters on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first.) | SubAbility$ DBAmass SVar:DBAmass:DB$ Amass | Num$ X DeckHints:Ability$Amass & Type$Zombie diff --git a/forge-gui/res/cardsfolder/c/conflagrate.txt b/forge-gui/res/cardsfolder/c/conflagrate.txt index c137e495ebd..1be51079fd0 100644 --- a/forge-gui/res/cardsfolder/c/conflagrate.txt +++ b/forge-gui/res/cardsfolder/c/conflagrate.txt @@ -5,5 +5,5 @@ A:SP$ DealDamage | Cost$ X X R | ValidTgts$ Creature,Player,Planeswalker | TgtPr SVar:MaxTgts:PlayerCountPlayers$Amount/Plus.NumCreatures SVar:NumCreatures:Count$Valid Creature,Planeswalker SVar:X:Count$xPaid -K:Flashback:R R Discard +K:Flashback:R R Discard Oracle:Conflagrate deals X damage divided as you choose among any number of targets.\nFlashback—{R}{R}, Discard X cards. (You may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/c/control_win_condition.txt b/forge-gui/res/cardsfolder/c/control_win_condition.txt index 1862e973bf0..6ce0472bb30 100644 --- a/forge-gui/res/cardsfolder/c/control_win_condition.txt +++ b/forge-gui/res/cardsfolder/c/control_win_condition.txt @@ -2,7 +2,7 @@ Name:Control Win Condition ManaCost:4 U U Types:Creature Whale PT:*/* -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Shroud S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of turns you’ve taken this game. (If this is in your deck, please keep track of your turns. This means you, Mark.) SVar:X:Count$YourTurns diff --git a/forge-gui/res/cardsfolder/c/counterflux.txt b/forge-gui/res/cardsfolder/c/counterflux.txt index a766bc8f789..ce5b4a8529b 100644 --- a/forge-gui/res/cardsfolder/c/counterflux.txt +++ b/forge-gui/res/cardsfolder/c/counterflux.txt @@ -1,8 +1,7 @@ Name:Counterflux ManaCost:U U R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ Counter | Cost$ U U R | TargetType$ Spell | TgtPrompt$ Select target spell you don't control. | ValidTgts$ Card.YouDontCtrl | SpellDescription$ Counter target spell you don't control. A:SP$ Counter | Cost$ 1 U U R | AllType$ Spell | AllValid$ Card.YouDontCtrl | PrecostDesc$ Overload | CostDesc$ {1}{U}{U}{R} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") | StackDescription$ Counter each spell you don't control. -SVar:Picture:http://www.wizards.com/global/images/magic/general/counterflux.jpg Oracle:This spell can't be countered.\nCounter target spell you don't control.\nOverload {1}{U}{U}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") diff --git a/forge-gui/res/cardsfolder/c/cragplate_baloth.txt b/forge-gui/res/cardsfolder/c/cragplate_baloth.txt index ee3088b6011..2ffe35d0419 100755 --- a/forge-gui/res/cardsfolder/c/cragplate_baloth.txt +++ b/forge-gui/res/cardsfolder/c/cragplate_baloth.txt @@ -3,7 +3,7 @@ ManaCost:5 G G Types:Creature Beast PT:6/6 K:Kicker:2 G -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Hexproof K:Haste K:etbCounter:P1P1:4:CheckSVar$ WasKicked:If CARDNAME was kicked, it enters the battlefield with four +1/+1 counters on it. diff --git a/forge-gui/res/cardsfolder/d/demonfire.txt b/forge-gui/res/cardsfolder/d/demonfire.txt index 0c023a9cf72..9f34be6ad0d 100644 --- a/forge-gui/res/cardsfolder/d/demonfire.txt +++ b/forge-gui/res/cardsfolder/d/demonfire.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ DealDamage | Cost$ X R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBDemonfire | SpellDescription$ CARDNAME deals X damage to any target. If a creature dealt damage this way would die this turn, exile it instead. SVar:DBDemonfire:DB$ DealDamage | Defined$ Targeted | NumDmg$ X | NoPrevention$ True | ConditionCheckSVar$ Y | ConditionSVarCompare$ EQ0 | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ Y | SVarCompare$ EQ0 | Description$ Hellbent — If you have no cards in hand, this spell can't be countered and the damage can't be prevented. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ This spell can't be countered. | CheckSVar$ Y | SVarCompare$ EQ0 | Description$ Hellbent — If you have no cards in hand, this spell can't be countered and the damage can't be prevented. SVar:X:Count$xPaid SVar:Y:Count$InYourHand Oracle:Demonfire deals X damage to any target. If a creature dealt damage this way would die this turn, exile it instead.\nHellbent — If you have no cards in hand, this spell can't be countered and the damage can't be prevented. diff --git a/forge-gui/res/cardsfolder/d/demonic_tutor.txt b/forge-gui/res/cardsfolder/d/demonic_tutor.txt index 467678aacce..e920eb4c323 100644 --- a/forge-gui/res/cardsfolder/d/demonic_tutor.txt +++ b/forge-gui/res/cardsfolder/d/demonic_tutor.txt @@ -1,8 +1,7 @@ Name:Demonic Tutor ManaCost:1 B Types:Sorcery -A:SP$ ChangeZone | Cost$ 1 B | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | SpellDescription$ Search your library for a card, put that card into your hand, then shuffle. +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Search your library for a card, put that card into your hand, then shuffle. #TODO: Improve the tutoring logic for the AI. Currently will generally look for the most expensive castable thing in the library (which can, of course, be used to advantage in properly constructed AI decks). AI:RemoveDeck:Random -SVar:Picture:http://resources.wizards.com/magic/cards/3e/en-us/card1155.jpg Oracle:Search your library for a card, put that card into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/diligent_farmhand.txt b/forge-gui/res/cardsfolder/d/diligent_farmhand.txt index 9f601d50012..6265dd8ac75 100644 --- a/forge-gui/res/cardsfolder/d/diligent_farmhand.txt +++ b/forge-gui/res/cardsfolder/d/diligent_farmhand.txt @@ -3,7 +3,7 @@ ManaCost:G Types:Creature Human Druid PT:1/1 A:AB$ ChangeZone | Cost$ 1 G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic land card, put it onto the battlefield tapped, then shuffle. -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Graveyard | AddHiddenKeyword$ CARDNAME count as Muscle Burst. | Description$ If CARDNAME is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst. +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Graveyard | AffectedZone$ Graveyard | AddHiddenKeyword$ CARDNAME count as Muscle Burst. | Description$ If CARDNAME is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst. DeckHints:Name$Diligent Farmhand|Muscle Burst SVar:Picture:http://www.wizards.com/global/images/magic/general/diligent_farmhand.jpg Oracle:{1}{G}, Sacrifice Diligent Farmhand: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.\nIf Diligent Farmhand is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst. diff --git a/forge-gui/res/cardsfolder/d/dovins_veto.txt b/forge-gui/res/cardsfolder/d/dovins_veto.txt index b59621c7aee..3c1ec7ec12b 100644 --- a/forge-gui/res/cardsfolder/d/dovins_veto.txt +++ b/forge-gui/res/cardsfolder/d/dovins_veto.txt @@ -1,6 +1,6 @@ Name:Dovin's Veto ManaCost:W U Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ Counter | Cost$ W U | TargetType$ Spell | TgtPrompt$ Select target noncreature Spell | ValidTgts$ Card.nonCreature | SpellDescription$ Counter target noncreature spell. Oracle:This spell can't be countered.\nCounter target noncreature spell. diff --git a/forge-gui/res/cardsfolder/d/dragonlord_dromoka.txt b/forge-gui/res/cardsfolder/d/dragonlord_dromoka.txt index cf460716b8e..93cf9ac0777 100644 --- a/forge-gui/res/cardsfolder/d/dragonlord_dromoka.txt +++ b/forge-gui/res/cardsfolder/d/dragonlord_dromoka.txt @@ -2,7 +2,7 @@ Name:Dragonlord Dromoka ManaCost:4 G W Types:Legendary Creature Elder Dragon PT:5/7 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Flying K:Lifelink S:Mode$ CantBeCast | ValidCard$ Card | Condition$ PlayerTurn | Caster$ Opponent | Description$ Your opponents can't cast spells during your turn. diff --git a/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt b/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt index a732e6edbba..aaa260fa2e2 100644 --- a/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt +++ b/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt @@ -2,7 +2,7 @@ Name:Dragonlord's Prerogative ManaCost:4 U U Types:Instant K:Presence:Dragon -S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | Presence$ Dragon | Description$ If you revealed a Dragon card or controlled a Dragon as you cast this spell, this spell can't be countered. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ This spell can't be countered. | Presence$ Dragon | Description$ If you revealed a Dragon card or controlled a Dragon as you cast this spell, this spell can't be countered. A:SP$ Draw | Cost$ 4 U U | NumCards$ 4 | SpellDescription$ Draw four cards. DeckHints:Type$Dragon Oracle:As an additional cost to cast this spell, you may reveal a Dragon card from your hand.\nIf you revealed a Dragon card or controlled a Dragon as you cast this spell, this spell can't be countered.\nDraw four cards. diff --git a/forge-gui/res/cardsfolder/e/elaborate_firecannon.txt b/forge-gui/res/cardsfolder/e/elaborate_firecannon.txt index f1d645f3b74..e6169949b0c 100644 --- a/forge-gui/res/cardsfolder/e/elaborate_firecannon.txt +++ b/forge-gui/res/cardsfolder/e/elaborate_firecannon.txt @@ -4,6 +4,6 @@ Types:Artifact K:CARDNAME doesn't untap during your untap step. A:AB$ DealDamage | Cost$ 4 T | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to any target. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ At the beginning of your upkeep, you may discard a card. If you do, untap CARDNAME. -SVar:TrigUntap:AB$Untap | Cost$ Discard<1/Card> | Defined$ Self +SVar:TrigUntap:AB$ Untap | Cost$ Discard<1/Card> | Defined$ Self SVar:Picture:http://www.wizards.com/global/images/magic/general/elaborate_firecannon.jpg Oracle:Elaborate Firecannon doesn't untap during your untap step.\n{4}, {T}: Elaborate Firecannon deals 2 damage to any target.\nAt the beginning of your upkeep, you may discard a card. If you do, untap Elaborate Firecannon. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt b/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt index 9f6aa2c1d48..ba1d21bbe8e 100644 --- a/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt +++ b/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt @@ -2,7 +2,7 @@ Name:Emrakul, the Aeons Torn ManaCost:15 Types:Legendary Creature Eldrazi PT:15/15 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Flying K:Protection:Spell.nonColorless:Protection from colored spells K:Annihilator:6 diff --git a/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt b/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt index 85a6190c627..f64f77a9ee0 100644 --- a/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt +++ b/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt @@ -2,6 +2,6 @@ Name:Exquisite Firecraft ManaCost:1 R R Types:Sorcery A:SP$ DealDamage | Cost$ 1 R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to any target. -S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ X | SVarCompare$ GE2 | Description$ Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ This spell can't be countered. | CheckSVar$ X | SVarCompare$ GE2 | Description$ Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered. SVar:X:Count$ValidGraveyard Instant.YouOwn,Sorcery.YouOwn Oracle:Exquisite Firecraft deals 4 damage to any target.\nSpell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered. diff --git a/forge-gui/res/cardsfolder/f/felidar_sovereign.txt b/forge-gui/res/cardsfolder/f/felidar_sovereign.txt index 96f01bb833b..ce06505d067 100644 --- a/forge-gui/res/cardsfolder/f/felidar_sovereign.txt +++ b/forge-gui/res/cardsfolder/f/felidar_sovereign.txt @@ -4,7 +4,7 @@ Types:Creature Cat Beast PT:4/6 K:Vigilance K:Lifelink -T:Mode$Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | LifeTotal$ You | LifeAmount$ GE40 | Execute$ TrigWin | TriggerDescription$ At the beginning of your upkeep, if you have 40 or more life, you win the game. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | LifeTotal$ You | LifeAmount$ GE40 | Execute$ TrigWin | TriggerDescription$ At the beginning of your upkeep, if you have 40 or more life, you win the game. SVar:TrigWin:DB$ WinsGame | Defined$ You DeckHints:Ability$LifeGain SVar:Picture:http://www.wizards.com/global/images/magic/general/felidar_sovereign.jpg diff --git a/forge-gui/res/cardsfolder/f/followed_footsteps.txt b/forge-gui/res/cardsfolder/f/followed_footsteps.txt index 936b1af41c2..ce02d3e03a9 100644 --- a/forge-gui/res/cardsfolder/f/followed_footsteps.txt +++ b/forge-gui/res/cardsfolder/f/followed_footsteps.txt @@ -2,8 +2,7 @@ Name:Followed Footsteps ManaCost:3 U U Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 3 U U | ValidTgts$ Creature | AILogic$ Curse +A:SP$ Attach | ValidTgts$ Creature | AILogic$ HighestEvaluation T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, create a token that's a copy of enchanted creature. -SVar:TrigCopy:DB$ CopyPermanent | Defined$ Enchanted | SpellDescription$ At the beginning of your upkeep, put a token that's a copy of enchanted creature onto the battlefield. -SVar:Picture:http://www.wizards.com/global/images/magic/general/followed_footsteps.jpg +SVar:TrigCopy:DB$ CopyPermanent | Defined$ Enchanted | SpellDescription$ At the beginning of your upkeep, create a token that's a copy of enchanted creature. Oracle:Enchant creature\nAt the beginning of your upkeep, create a token that's a copy of enchanted creature. diff --git a/forge-gui/res/cardsfolder/f/fry.txt b/forge-gui/res/cardsfolder/f/fry.txt index fc14b30e56f..403e64e71bd 100644 --- a/forge-gui/res/cardsfolder/f/fry.txt +++ b/forge-gui/res/cardsfolder/f/fry.txt @@ -1,7 +1,7 @@ Name:Fry ManaCost:1 R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature.White,Planeswalker.White,Creature.Blue,Planeswalker.Blue | TgtPrompt$ Select target creature or planeswalker that's white or blue | NumDmg$ 5 | SpellDescription$ CARDNAME deals 5 damage to target creature or planeswalker that's white or blue. AI:RemoveDeck:Random Oracle:This spell can't be countered.\nFry deals 5 damage to target creature or planeswalker that's white or blue. diff --git a/forge-gui/res/cardsfolder/g/gaeas_revenge.txt b/forge-gui/res/cardsfolder/g/gaeas_revenge.txt index bacded70b30..ac071eee94b 100644 --- a/forge-gui/res/cardsfolder/g/gaeas_revenge.txt +++ b/forge-gui/res/cardsfolder/g/gaeas_revenge.txt @@ -2,8 +2,7 @@ Name:Gaea's Revenge ManaCost:5 G G Types:Creature Elemental PT:8/5 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Haste S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.nonGreen | Description$ CARDNAME can't be the target of nongreen spells or abilities from nongreen sources. -SVar:Picture:http://www.wizards.com/global/images/magic/general/gaeas_revenge.jpg Oracle:This spell can't be countered.\nHaste\nGaea's Revenge can't be the target of nongreen spells or abilities from nongreen sources. diff --git a/forge-gui/res/cardsfolder/g/giant_opportunity.txt b/forge-gui/res/cardsfolder/g/giant_opportunity.txt index bfc1a755929..2442c4b1d57 100644 --- a/forge-gui/res/cardsfolder/g/giant_opportunity.txt +++ b/forge-gui/res/cardsfolder/g/giant_opportunity.txt @@ -1,7 +1,7 @@ Name:Giant Opportunity ManaCost:2 G Types:Sorcery -A:SP$ Sacrifice | Cost$ 2 G | SacValid$ Food | Defined$ You | Amount$ 2 | OptionalSacrifice$ True | StrictAmount$ True | RememberSacrificed$ True | SubAbility$ DBToken | SpellDescription$ You may sacrifice two Foods. If you do, create a 7/7 green Giant creature token. Otherwise, create three Food tokens. (They're artifacts with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +A:SP$ Sacrifice | Cost$ 2 G | SacValid$ Food | Defined$ You | Amount$ 2 | Optional$ True | StrictAmount$ True | RememberSacrificed$ True | SubAbility$ DBToken | SpellDescription$ You may sacrifice two Foods. If you do, create a 7/7 green Giant creature token. Otherwise, create three Food tokens. (They're artifacts with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_7_7_giant | TokenOwner$ You | ConditionDefined$ RememberedLKI | ConditionPresent$ Food | ConditionCompare$ EQ2 | SubAbility$ DBToken2 SVar:DBToken2:DB$ Token | TokenAmount$ 3 | TokenScript$ c_a_food_sac | TokenOwner$ You | ConditionDefined$ RememberedLKI | ConditionPresent$ Food | ConditionCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/g/gigapede.txt b/forge-gui/res/cardsfolder/g/gigapede.txt index 3d9debf3b35..ee79e0eaec6 100644 --- a/forge-gui/res/cardsfolder/g/gigapede.txt +++ b/forge-gui/res/cardsfolder/g/gigapede.txt @@ -3,7 +3,7 @@ ManaCost:3 G G Types:Creature Insect PT:6/1 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Graveyard | IsPresent$ Card.StrictlySelf | PresentZone$ Graveyard | PresentPlayer$ You | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is in your graveyard, you may discard a card. If you do, return CARDNAME to your hand. -SVar:TrigChange:AB$ChangeZone | Cost$ Discard<1/Card> | Origin$ Graveyard | Destination$ Hand | Defined$ Self +SVar:TrigChange:AB$ ChangeZone | Cost$ Discard<1/Card> | Origin$ Graveyard | Destination$ Hand | Defined$ Self K:Shroud SVar:Picture:http://www.wizards.com/global/images/magic/general/gigapede.jpg Oracle:Shroud (This creature can't be the target of spells or abilities.)\nAt the beginning of your upkeep, if Gigapede is in your graveyard, you may discard a card. If you do, return Gigapede to your hand. diff --git a/forge-gui/res/cardsfolder/g/great_sable_stag.txt b/forge-gui/res/cardsfolder/g/great_sable_stag.txt index f93e1056556..a69048ec390 100644 --- a/forge-gui/res/cardsfolder/g/great_sable_stag.txt +++ b/forge-gui/res/cardsfolder/g/great_sable_stag.txt @@ -4,6 +4,5 @@ Types:Creature Elk PT:3/3 K:Protection from blue K:Protection from black -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/great_sable_stag.jpg +K:This spell can't be countered. Oracle:This spell can't be countered.\nProtection from blue and from black (This creature can't be blocked, targeted, dealt damage, or enchanted by anything blue or black.) diff --git a/forge-gui/res/cardsfolder/h/heated_debate.txt b/forge-gui/res/cardsfolder/h/heated_debate.txt index 966edf3222e..af71d4559ff 100644 --- a/forge-gui/res/cardsfolder/h/heated_debate.txt +++ b/forge-gui/res/cardsfolder/h/heated_debate.txt @@ -1,6 +1,6 @@ Name:Heated Debate ManaCost:2 R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 2 R | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker. | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature or planeswalker. Oracle:This spell can't be countered. (This includes by the ward ability.)\nHeated Debate deals 4 damage to target creature or planeswalker. diff --git a/forge-gui/res/cardsfolder/h/hunters_mark.txt b/forge-gui/res/cardsfolder/h/hunters_mark.txt index f8ee4c3ed10..8ec4f58676c 100644 --- a/forge-gui/res/cardsfolder/h/hunters_mark.txt +++ b/forge-gui/res/cardsfolder/h/hunters_mark.txt @@ -1,7 +1,7 @@ Name:Hunter's Mark ManaCost:3 G Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a blue permanent you don't control. SVar:CostReduction:Count$Compare CheckTgt GE1.3.0 SVar:CheckTgt:TargetedObjects$Valid Card.Blue+YouDontCtrl diff --git a/forge-gui/res/cardsfolder/i/inescapable_blaze.txt b/forge-gui/res/cardsfolder/i/inescapable_blaze.txt index 06e5859b62e..b9f1bb2ebdf 100644 --- a/forge-gui/res/cardsfolder/i/inescapable_blaze.txt +++ b/forge-gui/res/cardsfolder/i/inescapable_blaze.txt @@ -1,6 +1,6 @@ Name:Inescapable Blaze ManaCost:4 R R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 4 R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 6 | SpellDescription$ CARDNAME deals 6 damage to any target. Oracle:This spell can't be countered.\nInescapable Blaze deals 6 damage to any target. diff --git a/forge-gui/res/cardsfolder/i/inferno_of_the_star_mounts.txt b/forge-gui/res/cardsfolder/i/inferno_of_the_star_mounts.txt index f0ba449a440..fdb70d30e9a 100644 --- a/forge-gui/res/cardsfolder/i/inferno_of_the_star_mounts.txt +++ b/forge-gui/res/cardsfolder/i/inferno_of_the_star_mounts.txt @@ -2,7 +2,7 @@ Name:Inferno of the Star Mounts ManaCost:4 R R Types:Legendary Creature Dragon PT:6/6 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Flying K:Haste A:AB$ Pump | Cost$ R | Defined$ Self | NumAtt$ +1 | SubAbility$ DBImmediateTrigger | AILogic$ InfernoOfTheStarMounts | SpellDescription$ CARDNAME gets +1/+0 until end of turn. When its power becomes 20 this way, it deals 20 damage to any target. diff --git a/forge-gui/res/cardsfolder/i/isao_enlightened_bushi.txt b/forge-gui/res/cardsfolder/i/isao_enlightened_bushi.txt index 85903886928..e8f403781a1 100644 --- a/forge-gui/res/cardsfolder/i/isao_enlightened_bushi.txt +++ b/forge-gui/res/cardsfolder/i/isao_enlightened_bushi.txt @@ -2,9 +2,8 @@ Name:Isao, Enlightened Bushi ManaCost:2 G Types:Legendary Creature Human Samurai PT:2/1 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Bushido:2 A:AB$ Regenerate | Cost$ 2 | ValidTgts$ Samurai | TgtPrompt$ Select target Samurai. | SpellDescription$ Regenerate target Samurai. DeckHints:Type$Samurai -SVar:Picture:http://www.wizards.com/global/images/magic/general/isao_enlightened_bushi.jpg Oracle:This spell can't be countered.\nBushido 2 (Whenever this creature blocks or becomes blocked, it gets +2/+2 until end of turn.)\n{2}: Regenerate target Samurai. diff --git a/forge-gui/res/cardsfolder/k/kavu_chameleon.txt b/forge-gui/res/cardsfolder/k/kavu_chameleon.txt index e1d836d33cb..2376d46fd24 100644 --- a/forge-gui/res/cardsfolder/k/kavu_chameleon.txt +++ b/forge-gui/res/cardsfolder/k/kavu_chameleon.txt @@ -2,8 +2,7 @@ Name:Kavu Chameleon ManaCost:3 G G Types:Creature Kavu PT:4/4 -K:CARDNAME can't be countered. +K:This spell can't be countered. A:AB$ ChooseColor | Cost$ G | Defined$ You | SubAbility$ Animate | SpellDescription$ CARDNAME becomes the color of your choice until end of turn. SVar:Animate:DB$ Animate | Defined$ Self | Colors$ ChosenColor | OverwriteColors$ True -SVar:Picture:http://www.wizards.com/global/images/magic/general/kavu_chameleon.jpg Oracle:This spell can't be countered.\n{G}: Kavu Chameleon becomes the color of your choice until end of turn. diff --git a/forge-gui/res/cardsfolder/k/koma_cosmos_serpent.txt b/forge-gui/res/cardsfolder/k/koma_cosmos_serpent.txt index 33f3d99c91a..14608763c99 100644 --- a/forge-gui/res/cardsfolder/k/koma_cosmos_serpent.txt +++ b/forge-gui/res/cardsfolder/k/koma_cosmos_serpent.txt @@ -2,7 +2,7 @@ Name:Koma, Cosmos Serpent ManaCost:3 G G U U Types:Legendary Creature Serpent PT:6/6 -K:CARDNAME can't be countered. +K:This spell can't be countered. T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of each upkeep, create a 3/3 blue Serpent creature token named Koma's Coil. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ komas_coil | TokenOwner$ You A:AB$ Charm | Cost$ Sac<1/Serpent.Other/another Serpent> | Choices$ DBTap,DBPump diff --git a/forge-gui/res/cardsfolder/l/last_word.txt b/forge-gui/res/cardsfolder/l/last_word.txt index a84893185df..5f9a286708e 100644 --- a/forge-gui/res/cardsfolder/l/last_word.txt +++ b/forge-gui/res/cardsfolder/l/last_word.txt @@ -2,6 +2,5 @@ Name:Last Word ManaCost:2 U U Types:Instant A:SP$ Counter | Cost$ 2 U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SpellDescription$ Counter target spell. -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/last_word.jpg +K:This spell can't be countered. Oracle:This spell can't be countered.\nCounter target spell. diff --git a/forge-gui/res/cardsfolder/l/lightning_mare.txt b/forge-gui/res/cardsfolder/l/lightning_mare.txt index a1e770b519b..90c41b26f3e 100644 --- a/forge-gui/res/cardsfolder/l/lightning_mare.txt +++ b/forge-gui/res/cardsfolder/l/lightning_mare.txt @@ -2,7 +2,7 @@ Name:Lightning Mare ManaCost:R R Types:Creature Elemental Horse PT:3/1 -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.Blue | Description$ CARDNAME can't be blocked by blue creatures. A:AB$ Pump | Cost$ 1 R | ValidCard$ Card.Self | NumAtt$ +1 | NumDef$ +0 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. Oracle:This spell can't be countered.\nLightning Mare can't be blocked by blue creatures.\n{1}{R}: Lightning Mare gets +1/+0 until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/l/loxodon_smiter.txt b/forge-gui/res/cardsfolder/l/loxodon_smiter.txt index 75869c82009..f6754597e58 100644 --- a/forge-gui/res/cardsfolder/l/loxodon_smiter.txt +++ b/forge-gui/res/cardsfolder/l/loxodon_smiter.txt @@ -2,7 +2,7 @@ Name:Loxodon Smiter ManaCost:1 G W Types:Creature Elephant Soldier PT:4/4 -K:CARDNAME can't be countered. +K:This spell can't be countered. R:Event$ Discard | ActiveZones$ Hand | ValidCard$ Card.Self | ValidSource$ Card.OppCtrl | ReplaceWith$ SurpriseETB | DiscardFromEffect$ True | Description$ If a spell or ability an opponent controls causes you to discard CARDNAME, put it onto the battlefield instead of putting it into your graveyard. SVar:SurpriseETB:DB$ ChangeZone | DefinedPlayer$ ReplacedPlayer | Defined$ ReplacedCard | Origin$ Hand | Destination$ Battlefield SVar:DiscardMeByOpp:2 diff --git a/forge-gui/res/cardsfolder/m/magda_brazen_outlaw.txt b/forge-gui/res/cardsfolder/m/magda_brazen_outlaw.txt index bf4eec8f373..79cb7d22cdd 100644 --- a/forge-gui/res/cardsfolder/m/magda_brazen_outlaw.txt +++ b/forge-gui/res/cardsfolder/m/magda_brazen_outlaw.txt @@ -5,7 +5,7 @@ PT:2/1 S:Mode$ Continuous | Affected$ Dwarf.Other+YouCtrl | AddPower$ 1 | Description$ Other Dwarves you control get +1/+0. T:Mode$ Taps | ValidCard$ Dwarf.YouCtrl | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever a Dwarf you control becomes tapped, create a Treasure token. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You -A:AB$ ChangeZone | Cost$ Sac<5/Treasure> | CostDesc$ Sacrifice five Treasures: | Origin$ Library | Destination$ Battlefield | ChangeType$ Card.Artifact,Card.Dragon | ChangeNum$ 1 | Mandatory$ True | StackDescription$ {p:You} searches their library for an Artifact or Dragon card, puts that card onto the battlefield, then shuffles their library. | SpellDescription$ Search your library for an artifact or Dragon card, put that card onto the battlefield, then shuffle. +A:AB$ ChangeZone | Cost$ Sac<5/Treasure> | Origin$ Library | Destination$ Battlefield | ChangeType$ Card.Artifact,Card.Dragon | ChangeNum$ 1 | Mandatory$ True | StackDescription$ {p:You} searches their library for an Artifact or Dragon card, puts that card onto the battlefield, then shuffles their library. | SpellDescription$ Search your library for an artifact or Dragon card, put that card onto the battlefield, then shuffle. SVar:BuffedBy:Dwarf SVar:PlayMain1:TRUE DeckNeeds:Type$Dwarf diff --git a/forge-gui/res/cardsfolder/m/magic_missile.txt b/forge-gui/res/cardsfolder/m/magic_missile.txt index 27032252f82..571defd2378 100644 --- a/forge-gui/res/cardsfolder/m/magic_missile.txt +++ b/forge-gui/res/cardsfolder/m/magic_missile.txt @@ -1,6 +1,6 @@ Name:Magic Missile ManaCost:1 R R Types:Sorcery -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 1 R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to distribute damage to | NumDmg$ 3 | TargetMin$ 1 | TargetMax$ 3 | DividedAsYouChoose$ 3 | SpellDescription$ CARDNAME deals 3 damage divided as you choose among one, two, or three targets. Oracle:This spell can't be countered.\nMagic Missile deals 3 damage divided as you choose among one, two, or three targets. diff --git a/forge-gui/res/cardsfolder/m/mistcutter_hydra.txt b/forge-gui/res/cardsfolder/m/mistcutter_hydra.txt index 9b238d8d1fe..f500b7658c8 100644 --- a/forge-gui/res/cardsfolder/m/mistcutter_hydra.txt +++ b/forge-gui/res/cardsfolder/m/mistcutter_hydra.txt @@ -2,7 +2,7 @@ Name:Mistcutter Hydra ManaCost:X G Types:Creature Hydra PT:0/0 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Haste K:Protection from blue K:etbCounter:P1P1:X diff --git a/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt b/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt index 037d7ade476..d6dc93ff944 100644 --- a/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt +++ b/forge-gui/res/cardsfolder/n/nahiri_the_harbinger.txt @@ -2,9 +2,7 @@ Name:Nahiri, the Harbinger ManaCost:2 R W Types:Legendary Planeswalker Nahiri Loyalty:4 -A:AB$ Discard | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | NumCards$ 1 | Optional$ True | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBDraw | SpellDescription$ You may discard a card. If you do, draw a card. -SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +A:AB$ Draw | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | Defined$ You | NumCards$ 1 | UnlessCost$ Discard<1/Card> | UnlessSwitched$ True | UnlessPayer$ You | SpellDescription$ You may discard a card. If you do, draw a card. A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Enchantment,Artifact.tapped,Creature.tapped | TgtPrompt$ Select target enchantment, tapped artifact, or tapped creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target enchantment, tapped artifact, or tapped creature. A:AB$ ChangeZone | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Artifact,Creature | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBPump | SpellDescription$ Search your library for an artifact or creature card, put it onto the battlefield, then shuffle. It gains haste. Return it to your hand at the beginning of the next end step. SVar:DBPump:DB$ Animate | Keywords$ Haste | Duration$ Permanent | AtEOT$ Hand | Defined$ Remembered | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/n/nezahal_primal_tide.txt b/forge-gui/res/cardsfolder/n/nezahal_primal_tide.txt index 2b2737a0f41..6c3872a73be 100644 --- a/forge-gui/res/cardsfolder/n/nezahal_primal_tide.txt +++ b/forge-gui/res/cardsfolder/n/nezahal_primal_tide.txt @@ -2,7 +2,7 @@ Name:Nezahal, Primal Tide ManaCost:5 U U Types:Legendary Creature Elder Dinosaur PT:7/7 -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size. T:Mode$ SpellCast | TriggerZones$ Battlefield | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ Opponent | Execute$ TrigDraw | TriggerDescription$ Whenever an opponent casts a noncreature spell, draw a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 diff --git a/forge-gui/res/cardsfolder/n/niv_mizzet_parun.txt b/forge-gui/res/cardsfolder/n/niv_mizzet_parun.txt index c78c2cfbf9e..bff6a35b45a 100644 --- a/forge-gui/res/cardsfolder/n/niv_mizzet_parun.txt +++ b/forge-gui/res/cardsfolder/n/niv_mizzet_parun.txt @@ -3,7 +3,7 @@ ManaCost:U U U R R R Types:Legendary Creature Dragon Wizard PT:5/5 K:Flying -K:CARDNAME can't be countered. +K:This spell can't be countered. T:Mode$ Drawn | ValidCard$ Card.YouOwn | TriggerZones$ Battlefield | Execute$ TrigDealDamage | TriggerDescription$ Whenever you draw a card, CARDNAME deals 1 damage to any target. SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 1 T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a player casts an instant or sorcery spell, you draw a card. diff --git a/forge-gui/res/cardsfolder/o/obliterate.txt b/forge-gui/res/cardsfolder/o/obliterate.txt index ac6fd950a04..c6ce9fc247a 100644 --- a/forge-gui/res/cardsfolder/o/obliterate.txt +++ b/forge-gui/res/cardsfolder/o/obliterate.txt @@ -2,6 +2,5 @@ Name:Obliterate ManaCost:6 R R Types:Sorcery A:SP$ DestroyAll | Cost$ 6 R R | ValidCards$ Artifact,Creature,Land | NoRegen$ True | SpellDescription$ Destroy all artifacts, creatures, and lands. They can't be regenerated. -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/obliterate.jpg +K:This spell can't be countered. Oracle:This spell can't be countered.\nDestroy all artifacts, creatures, and lands. They can't be regenerated. diff --git a/forge-gui/res/cardsfolder/o/olivia_mobilized_for_war.txt b/forge-gui/res/cardsfolder/o/olivia_mobilized_for_war.txt index 4451d9be6c3..956208e13f6 100644 --- a/forge-gui/res/cardsfolder/o/olivia_mobilized_for_war.txt +++ b/forge-gui/res/cardsfolder/o/olivia_mobilized_for_war.txt @@ -3,11 +3,9 @@ ManaCost:1 B R Types:Legendary Creature Vampire Knight PT:3/3 K:Flying -T:Mode$ ChangesZone | ValidCard$ Creature.Other+YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDiscard | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever another creature enters the battlefield under your control, you may discard a card. If you do, put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a vampire in addition to its other types. -SVar:TrigDiscard:DB$ Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | Defined$ TriggeredCardLKICopy | CounterType$ P1P1 | CounterNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ TriggeredCard | KW$ Haste | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBAnimate -SVar:DBAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Vampire | Duration$ Permanent | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +T:Mode$ ChangesZone | ValidCard$ Creature.Other+YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDiscard | TriggerZones$ Battlefield | TriggerDescription$ Whenever another creature enters the battlefield under your control, you may discard a card. If you do, put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a vampire in addition to its other types. +SVar:TrigDiscard:AB$ PutCounter | Cost$ Discard<1/Card> | Defined$ TriggeredCardLKICopy | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPump +SVar:DBPump:DB$ Pump | Defined$ TriggeredCard | KW$ Haste | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Vampire | Duration$ Permanent SVar:Picture:http://www.wizards.com/global/images/magic/general/olivia_mobilized_for_war.jpg Oracle:Flying\nWhenever another creature enters the battlefield under your control, you may discard a card. If you do, put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a Vampire in addition to its other types. diff --git a/forge-gui/res/cardsfolder/o/overwhelming_denial.txt b/forge-gui/res/cardsfolder/o/overwhelming_denial.txt index 1c1e8d5e26d..07826ea3410 100644 --- a/forge-gui/res/cardsfolder/o/overwhelming_denial.txt +++ b/forge-gui/res/cardsfolder/o/overwhelming_denial.txt @@ -3,6 +3,5 @@ ManaCost:2 U U Types:Instant K:Surge:U U A:SP$ Counter | Cost$ 2 U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SpellDescription$ Counter target spell. -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/overwhelming_denial.jpg +K:This spell can't be countered. Oracle:Surge {U}{U} (You may cast this spell for its surge cost if you or a teammate has cast another spell this turn.)\nThis spell can't be countered.\nCounter target spell. diff --git a/forge-gui/res/cardsfolder/p/pardic_firecat.txt b/forge-gui/res/cardsfolder/p/pardic_firecat.txt index 6eba5248653..5d6394eadbd 100644 --- a/forge-gui/res/cardsfolder/p/pardic_firecat.txt +++ b/forge-gui/res/cardsfolder/p/pardic_firecat.txt @@ -3,7 +3,7 @@ ManaCost:3 R Types:Creature Elemental Cat PT:2/3 K:Haste -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Graveyard | AddHiddenKeyword$ CARDNAME count as Flame Burst. | Description$ If CARDNAME is in a graveyard, effects from spells named Flame Burst count it as a card named Flame Burst. +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Graveyard | AffectedZone$ Graveyard | AddHiddenKeyword$ CARDNAME count as Flame Burst. | Description$ If CARDNAME is in a graveyard, effects from spells named Flame Burst count it as a card named Flame Burst. DeckHints:Name$Flame Burst|Pardic Firecat SVar:Picture:http://www.wizards.com/global/images/magic/general/pardic_firecat.jpg Oracle:Haste\nIf Pardic Firecat is in a graveyard, effects from spells named Flame Burst count it as a card named Flame Burst. diff --git a/forge-gui/res/cardsfolder/p/pearl_lake_ancient.txt b/forge-gui/res/cardsfolder/p/pearl_lake_ancient.txt index bb8de41a1ff..0383f0fd3d2 100644 --- a/forge-gui/res/cardsfolder/p/pearl_lake_ancient.txt +++ b/forge-gui/res/cardsfolder/p/pearl_lake_ancient.txt @@ -4,7 +4,6 @@ Types:Creature Leviathan PT:6/7 K:Flash K:Prowess -K:CARDNAME can't be countered. +K:This spell can't be countered. A:AB$ ChangeZone | Cost$ Return<3/Land> | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand. -SVar:Picture:http://www.wizards.com/global/images/magic/general/pearl_lake_ancient.jpg Oracle:Flash\nThis spell can't be countered.\nProwess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)\nReturn three lands you control to their owner's hand: Return Pearl Lake Ancient to its owner's hand. diff --git a/forge-gui/res/cardsfolder/p/petrified_wood_kin.txt b/forge-gui/res/cardsfolder/p/petrified_wood_kin.txt index 5d9339b8970..3b749ed8d70 100644 --- a/forge-gui/res/cardsfolder/p/petrified_wood_kin.txt +++ b/forge-gui/res/cardsfolder/p/petrified_wood_kin.txt @@ -2,7 +2,7 @@ Name:Petrified Wood-Kin ManaCost:6 G Types:Creature Elemental Warrior PT:3/3 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Bloodthirst:X K:Protection:Instant:Protection from instants SVar:Picture:http://www.wizards.com/global/images/magic/general/petrified_wood_kin.jpg diff --git a/forge-gui/res/cardsfolder/p/prosper_tome_bound.txt b/forge-gui/res/cardsfolder/p/prosper_tome_bound.txt index 3e45a672efa..278ae217dce 100644 --- a/forge-gui/res/cardsfolder/p/prosper_tome_bound.txt +++ b/forge-gui/res/cardsfolder/p/prosper_tome_bound.txt @@ -9,7 +9,7 @@ SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until the end of your next turn, you may play that card. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ SpellCast | ValidCard$ Card.wasCastFromExile | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Pact Boon — Whenever you play a card from exile, create a Treasure token. -T:Mode$ ChangesZone | Origin$ Exile | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Pact Boon — Whenever you play a card from exile, create a Treasure token. +T:Mode$ LandPlayed | Origin$ Exile | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Pact Boon — Whenever you play a card from exile, create a Treasure token. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You | LegacyImage$ c a treasure sac afr DeckHas:Ability$Token Oracle:Deathtouch\nMystic Arcanum — At the beginning of your end step, exile the top card of your library. Until the end of your next turn, you may play that card.\nPact Boon — Whenever you play a card from exile, create a Treasure token. diff --git a/forge-gui/res/cardsfolder/p/prowling_serpopard.txt b/forge-gui/res/cardsfolder/p/prowling_serpopard.txt index 19bf23632b4..03a756a84cb 100644 --- a/forge-gui/res/cardsfolder/p/prowling_serpopard.txt +++ b/forge-gui/res/cardsfolder/p/prowling_serpopard.txt @@ -2,8 +2,7 @@ Name:Prowling Serpopard ManaCost:1 G G Types:Creature Cat Snake PT:4/3 -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Stack | AddHiddenKeyword$ This spell can't be countered. | Description$ Creature spells you control can't be countered. SVar:PlayMain1:TRUE -SVar:Picture:http://www.wizards.com/global/images/magic/general/prowling_serpopard.jpg Oracle:This spell can't be countered.\nCreature spells you control can't be countered. diff --git a/forge-gui/res/cardsfolder/r/rending_volley.txt b/forge-gui/res/cardsfolder/r/rending_volley.txt index c779945e048..002f71276b0 100644 --- a/forge-gui/res/cardsfolder/r/rending_volley.txt +++ b/forge-gui/res/cardsfolder/r/rending_volley.txt @@ -1,8 +1,7 @@ Name:Rending Volley ManaCost:R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ R | ValidTgts$ Creature.White,Creature.Blue | NumDmg$ 4 | TgtPrompt$ Select target white or blue creature. | SpellDescription$ CARDNAME deals 4 damage to target white or blue creature. AI:RemoveDeck:Random -SVar:Picture:http://www.wizards.com/global/images/magic/general/rending_volley.jpg Oracle:This spell can't be countered.\nRending Volley deals 4 damage to target white or blue creature. diff --git a/forge-gui/res/cardsfolder/r/restoration_angel.txt b/forge-gui/res/cardsfolder/r/restoration_angel.txt index 4768ef5fc76..96811a8d1e2 100644 --- a/forge-gui/res/cardsfolder/r/restoration_angel.txt +++ b/forge-gui/res/cardsfolder/r/restoration_angel.txt @@ -5,7 +5,7 @@ PT:3/4 K:Flash K:Flying T:Mode$ ChangesZone | ValidCard$ Creature.Self | Origin$ Any | Destination$ Battlefield | Execute$ RestorationExile | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may exile target non-Angel creature you control, then return that creature to the battlefield under your control. -SVar:RestorationExile:DB$ ChangeZone | ValidTgts$ Creature.nonAngel+YouCtrl | TgtPrompt$ Select target non-Angel creature you control | Origin$ Battlefield | Destination$ Exile | RememberTargets$ True | ForgetOtherTargets$ True | AILogic$ BounceOnce | SubAbility$ RestorationReturn +SVar:RestorationExile:DB$ ChangeZone | ValidTgts$ Creature.nonAngel+YouCtrl | TgtPrompt$ Select target non-Angel creature you control | Origin$ Battlefield | Destination$ Exile | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ RestorationReturn SVar:RestorationReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | GainControl$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/restoration_angel.jpg Oracle:Flash\nFlying\nWhen Restoration Angel enters the battlefield, you may exile target non-Angel creature you control, then return that card to the battlefield under your control. diff --git a/forge-gui/res/cardsfolder/r/root_sliver.txt b/forge-gui/res/cardsfolder/r/root_sliver.txt index a42faca2ba2..2537933c64d 100644 --- a/forge-gui/res/cardsfolder/r/root_sliver.txt +++ b/forge-gui/res/cardsfolder/r/root_sliver.txt @@ -2,7 +2,6 @@ Name:Root Sliver ManaCost:3 G Types:Creature Sliver PT:2/2 -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ Sliver | AddHiddenKeyword$ This spell can't be countered. | AffectedZone$ Stack | Description$ Sliver spells can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/root_sliver.jpg Oracle:This spell can't be countered.\nSliver spells can't be countered. diff --git a/forge-gui/res/cardsfolder/s/savage_summoning.txt b/forge-gui/res/cardsfolder/s/savage_summoning.txt index 27f23d7c004..8a7bab28a71 100644 --- a/forge-gui/res/cardsfolder/s/savage_summoning.txt +++ b/forge-gui/res/cardsfolder/s/savage_summoning.txt @@ -1,7 +1,7 @@ Name:Savage Summoning ManaCost:G Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ Effect | Cost$ G | StaticAbilities$ STFlash | Triggers$ SpellCastTrig | SpellDescription$ The next creature spell you cast this turn can be cast as though it had flash. That spell can't be countered. That creature enters the battlefield with an additional +1/+1 counter on it. SVar:STFlash:Mode$ CastWithFlash | ValidCard$ Card.Creature | ValidSA$ Spell | EffectZone$ Command | Caster$ You SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ SavageSummon | Static$ True | TriggerDescription$ The next creature spell you cast this turn can be cast as though it had flash. That spell can't be countered. That creature enters the battlefield with an additional +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/s/scragnoth.txt b/forge-gui/res/cardsfolder/s/scragnoth.txt index 45c0c24c5f9..2603881680e 100644 --- a/forge-gui/res/cardsfolder/s/scragnoth.txt +++ b/forge-gui/res/cardsfolder/s/scragnoth.txt @@ -3,6 +3,5 @@ ManaCost:4 G Types:Creature Beast PT:3/4 K:Protection from blue -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/scragnoth.jpg +K:This spell can't be countered. Oracle:This spell can't be countered.\nProtection from blue diff --git a/forge-gui/res/cardsfolder/s/shifting_ceratops.txt b/forge-gui/res/cardsfolder/s/shifting_ceratops.txt index f9d1b4c692c..c17a05a5c9d 100644 --- a/forge-gui/res/cardsfolder/s/shifting_ceratops.txt +++ b/forge-gui/res/cardsfolder/s/shifting_ceratops.txt @@ -2,7 +2,7 @@ Name:Shifting Ceratops ManaCost:2 G G Types:Creature Dinosaur PT:5/4 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Protection from blue A:AB$ GenericChoice | Cost$ G | Choices$ DBReach,DBTrample,DBHaste | SpellDescription$ CARDNAME gains your choice of reach, trample, or haste until end of turn. SVar:DBReach:DB$ Pump | Defined$ Self | KW$ Reach | SpellDescription$ CARDNAME gains reach until end of turn. diff --git a/forge-gui/res/cardsfolder/s/skylasher.txt b/forge-gui/res/cardsfolder/s/skylasher.txt index 4b1f3667b54..055e607ed23 100644 --- a/forge-gui/res/cardsfolder/s/skylasher.txt +++ b/forge-gui/res/cardsfolder/s/skylasher.txt @@ -3,8 +3,7 @@ ManaCost:1 G Types:Creature Insect PT:2/2 K:Flash -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Reach K:Protection from blue -SVar:Picture:http://www.wizards.com/global/images/magic/general/skylasher.jpg Oracle:Flash\nThis spell can't be countered.\nReach, protection from blue diff --git a/forge-gui/res/cardsfolder/s/slaughter_games.txt b/forge-gui/res/cardsfolder/s/slaughter_games.txt index 87fde828b7a..c5ad4ecba91 100644 --- a/forge-gui/res/cardsfolder/s/slaughter_games.txt +++ b/forge-gui/res/cardsfolder/s/slaughter_games.txt @@ -1,7 +1,7 @@ Name:Slaughter Games ManaCost:2 B R Types:Sorcery -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ NameCard | Cost$ 2 B R | Defined$ You | ValidCards$ Card.nonLand | ValidDesc$ nonland | SubAbility$ ExileYard | SpellDescription$ Choose a nonland card name. Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles. SVar:ExileYard:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Player.Opponent | TgtPrompt$ Select target opponent | ChangeType$ Card.NamedCard | Chooser$ You | ChangeNum$ NumInYard | Hidden$ True | SubAbility$ ExileHand | StackDescription$ Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles their library. SVar:ExileHand:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ChangeType$ Card.NamedCard | ChangeNum$ NumInHand | Chooser$ You | SubAbility$ ExileLib | StackDescription$ None @@ -10,5 +10,4 @@ SVar:NumInLib:TargetedPlayer$CardsInLibrary SVar:NumInHand:TargetedPlayer$CardsInHand SVar:NumInYard:TargetedPlayer$CardsInGraveyard AI:RemoveDeck:All -SVar:Picture:http://www.wizards.com/global/images/magic/general/slaughter_games.jpg Oracle:This spell can't be countered.\nChoose a nonland card name. Search target opponent's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles. diff --git a/forge-gui/res/cardsfolder/s/spellbreaker_behemoth.txt b/forge-gui/res/cardsfolder/s/spellbreaker_behemoth.txt index 5cafd8cf876..545672121ad 100644 --- a/forge-gui/res/cardsfolder/s/spellbreaker_behemoth.txt +++ b/forge-gui/res/cardsfolder/s/spellbreaker_behemoth.txt @@ -2,7 +2,6 @@ Name:Spellbreaker Behemoth ManaCost:1 R G G Types:Creature Beast PT:5/5 -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ Creature.powerGE5+YouCtrl | AffectedZone$ Stack | AddHiddenKeyword$ This spell can't be countered. | Description$ Creature spells you control with power 5 or greater can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/spellbreaker_behemoth.jpg Oracle:This spell can't be countered.\nCreature spells you control with power 5 or greater can't be countered. diff --git a/forge-gui/res/cardsfolder/s/sphinx_of_the_final_word.txt b/forge-gui/res/cardsfolder/s/sphinx_of_the_final_word.txt index 331205b3657..af1e065d956 100644 --- a/forge-gui/res/cardsfolder/s/sphinx_of_the_final_word.txt +++ b/forge-gui/res/cardsfolder/s/sphinx_of_the_final_word.txt @@ -4,7 +4,6 @@ Types:Creature Sphinx PT:5/5 K:Flying K:Hexproof -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ Instant.YouCtrl,Sorcery.YouCtrl | AddHiddenKeyword$ This spell can't be countered. | AffectedZone$ Stack | Description$Instant and sorcery spells you control can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/sphinx_of_the_final_word.jpg Oracle:This spell can't be countered.\nFlying, hexproof\nInstant and sorcery spells you control can't be countered. diff --git a/forge-gui/res/cardsfolder/s/supreme_verdict.txt b/forge-gui/res/cardsfolder/s/supreme_verdict.txt index 665cd85aa93..dd9149cb101 100644 --- a/forge-gui/res/cardsfolder/s/supreme_verdict.txt +++ b/forge-gui/res/cardsfolder/s/supreme_verdict.txt @@ -1,7 +1,6 @@ Name:Supreme Verdict ManaCost:1 W W U Types:Sorcery -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DestroyAll | Cost$ 1 W W U | ValidCards$ Creature | SpellDescription$ Destroy all creatures. -SVar:Picture:http://www.wizards.com/global/images/magic/general/supreme_verdict.jpg Oracle:This spell can't be countered.\nDestroy all creatures. diff --git a/forge-gui/res/cardsfolder/s/surrak_dragonclaw.txt b/forge-gui/res/cardsfolder/s/surrak_dragonclaw.txt index 4d2ecdec101..b689edb3727 100644 --- a/forge-gui/res/cardsfolder/s/surrak_dragonclaw.txt +++ b/forge-gui/res/cardsfolder/s/surrak_dragonclaw.txt @@ -3,7 +3,7 @@ ManaCost:2 G U R Types:Legendary Creature Human Warrior PT:6/6 K:Flash -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Stack | AddHiddenKeyword$ This spell can't be countered. | Description$ Creature spells you control can't be countered. S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddKeyword$ Trample | Description$ Other creatures you control have trample. SVar:PlayMain1:TRUE diff --git a/forge-gui/res/cardsfolder/s/suspicious_stowaway_seafaring_werewolf.txt b/forge-gui/res/cardsfolder/s/suspicious_stowaway_seafaring_werewolf.txt index 3fa1167dc45..8b04f582145 100644 --- a/forge-gui/res/cardsfolder/s/suspicious_stowaway_seafaring_werewolf.txt +++ b/forge-gui/res/cardsfolder/s/suspicious_stowaway_seafaring_werewolf.txt @@ -19,7 +19,7 @@ Colors:green Types:Creature Werewolf PT:2/1 K:Unblockable -T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDrawN | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, draw a card, then discard a card. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDrawN | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, draw a card. SVar:TrigDrawN:DB$ Draw | NumCards$ 1 | Defined$ You K:Nightbound Oracle:Seafaring Werewolf can't be blocked.\nWhenever Seafaring Werewolf deals combat damage to a player, draw a card.\nNightbound (If a player casts at least two spells during their own turn, it becomes day next turn.) diff --git a/forge-gui/res/cardsfolder/t/tears_of_valakut.txt b/forge-gui/res/cardsfolder/t/tears_of_valakut.txt index 59f3f58e5d9..f3bde5e7b4a 100644 --- a/forge-gui/res/cardsfolder/t/tears_of_valakut.txt +++ b/forge-gui/res/cardsfolder/t/tears_of_valakut.txt @@ -1,7 +1,6 @@ Name:Tears of Valakut ManaCost:1 R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature.withFlying | NumDmg$ 5 | TgtPrompt$ Select target creature with flying. | SpellDescription$ CARDNAME deals 5 damage to target creature with flying. -SVar:Picture:http://www.wizards.com/global/images/magic/general/tears_of_valakut.jpg Oracle:This spell can't be countered.\nTears of Valakut deals 5 damage to target creature with flying. diff --git a/forge-gui/res/cardsfolder/t/terra_stomper.txt b/forge-gui/res/cardsfolder/t/terra_stomper.txt index c5d05b0017b..07f90fc91fa 100644 --- a/forge-gui/res/cardsfolder/t/terra_stomper.txt +++ b/forge-gui/res/cardsfolder/t/terra_stomper.txt @@ -3,6 +3,5 @@ ManaCost:3 G G G Types:Creature Beast PT:8/8 K:Trample -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/terra_stomper.jpg +K:This spell can't be countered. Oracle:This spell can't be countered.\nTrample (This creature can deal excess combat damage to the player or planeswalker it's attacking.) diff --git a/forge-gui/res/cardsfolder/t/thought_distortion.txt b/forge-gui/res/cardsfolder/t/thought_distortion.txt index 8883f2de970..119a7284a85 100644 --- a/forge-gui/res/cardsfolder/t/thought_distortion.txt +++ b/forge-gui/res/cardsfolder/t/thought_distortion.txt @@ -1,7 +1,7 @@ Name:Thought Distortion ManaCost:4 B B Types:Sorcery -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ RevealHand | Cost$ 4 B B | ValidTgts$ Opponent | IsCurse$ True | SubAbility$ DBExile | SpellDescription$ Target opponent reveals their hand. Exile all noncreature, nonland cards from that player's hand and graveyard. SVar:DBExile:DB$ ChangeZoneAll | Origin$ Hand,Graveyard | Destination$ Exile | ChangeType$ Card.nonCreature+nonLand+TargetedPlayerCtrl Oracle:This spell can't be countered.\nTarget opponent reveals their hand. Exile all noncreature, nonland cards from that player's hand and graveyard. diff --git a/forge-gui/res/cardsfolder/t/thrun_the_last_troll.txt b/forge-gui/res/cardsfolder/t/thrun_the_last_troll.txt index f7b8769499e..5ac2086a031 100644 --- a/forge-gui/res/cardsfolder/t/thrun_the_last_troll.txt +++ b/forge-gui/res/cardsfolder/t/thrun_the_last_troll.txt @@ -3,7 +3,6 @@ ManaCost:2 G G Types:Legendary Creature Troll Shaman PT:4/4 A:AB$ Regenerate | Cost$ 1 G | SpellDescription$ Regenerate CARDNAME. -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Hexproof -SVar:Picture:http://www.wizards.com/global/images/magic/general/thrun_the_last_troll.jpg Oracle:This spell can't be countered.\nHexproof (This creature can't be the target of spells or abilities your opponents control.)\n{1}{G}: Regenerate Thrun, the Last Troll. diff --git a/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt b/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt index 81a027f5ed7..02e6efebe19 100644 --- a/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt +++ b/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt @@ -2,7 +2,7 @@ Name:Toski, Bearer of Secrets ManaCost:3 G Types:Legendary Creature Squirrel PT:1/1 -K:CARDNAME can't be countered. +K:This spell can't be countered. K:Indestructible K:CARDNAME attacks each combat if able. T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a creature you control deals combat damage to a player, draw a card. diff --git a/forge-gui/res/cardsfolder/u/urzas_rage.txt b/forge-gui/res/cardsfolder/u/urzas_rage.txt index c6ebc130551..b33ae41dd8e 100644 --- a/forge-gui/res/cardsfolder/u/urzas_rage.txt +++ b/forge-gui/res/cardsfolder/u/urzas_rage.txt @@ -2,10 +2,9 @@ Name:Urza's Rage ManaCost:2 R Types:Instant K:Kicker:8 R -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DealDamage | Cost$ 2 R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | SubAbility$ Kicked | SpellDescription$ CARDNAME deals 3 damage to any target. If this spell was kicked, instead it deals 10 damage to that permanent or player and the damage can't be prevented. SVar:Kicked:DB$ DealDamage | Defined$ Targeted | NumDmg$ 10 | NoPrevention$ True | Condition$ Kicked | ConditionDescription$ If Urza's Rage was kicked, SVar:X:Count$Kicked.0.3 SVar:Y:Count$Kicked.10.0 -SVar:Picture:http://www.wizards.com/global/images/magic/general/urzas_rage.jpg Oracle:Kicker {8}{R} (You may pay an additional {8}{R} as you cast this spell.)\nThis spell can't be countered.\nUrza's Rage deals 3 damage to any target. If this spell was kicked, instead it deals 10 damage to that permanent or player and the damage can't be prevented. diff --git a/forge-gui/res/cardsfolder/upcoming/alchemists_gambit.txt b/forge-gui/res/cardsfolder/upcoming/alchemists_gambit.txt new file mode 100644 index 00000000000..1129c21eb1a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/alchemists_gambit.txt @@ -0,0 +1,13 @@ +Name:Alchemist's Gambit +ManaCost:1 R R +Types:Sorcery +A:SP$ AddTurn | NumTurns$ 1 | ExtraTurnDelayedTrigger$ DBDelTrig | ExtraTurnDelayedTriggerExcute$ TrigEffect | SubAbility$ DBExile | StackDescription$ {p:You} takes an extra turn after this one. During that turn, damage can't be prevented. At the beginning of that turn's end step, {p:You} loses the game. | SpellDescription$ Take an extra turn after this one. [At the beginning of that turn's end step, you lose the game.] +SVar:DBDelTrig:ThisTurn$ True | Mode$ Phase | Phase$ Upkeep | TriggerDescription$ During that turn, damage can't be prevented. +SVar:TrigEffect:DB$ Effect | Defined$ You | StaticAbilities$ STCantPrevent | Triggers$ EndLose +SVar:STCantPrevent:Mode$ CantPreventDamage | EffectZone$ Command | Description$ Damage can't be prevented. +SVar:EndLose:Mode$ Phase | Phase$ End of Turn | Execute$ TrigLose | TriggerDescription$ At the beginning of that turn's end step, you lose the game. +SVar:TrigLose:DB$ LosesGame | Defined$ You +A:SP$ AddTurn | Cost$ 4 U U R | NumTurns$ 1 | ExtraTurnDelayedTrigger$ DBDelTrig | ExtraTurnDelayedTriggerExcute$ TrigEffect2 | PrecostDesc$ Cleave | CostDesc$ {4}{U}{U}{R} | NonBasicSpell$ True | SubAbility$ DBExile | StackDescription$ {p:You} takes an extra turn after this one. During that turn, damage can't be prevented. | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.) +SVar:TrigEffect2:DB$ Effect | Defined$ You | StaticAbilities$ STCantPrevent +SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SpellDescription$ Exile CARDNAME. +Oracle:Cleave {4}{U}{U}{R} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nTake an extra turn after this one. During that turn, damage can't be prevented. [At the beginning of that turn's end step, you lose the game.]\nExile Alchemist's Gambit. diff --git a/forge-gui/res/cardsfolder/upcoming/alluring_suitor_deadly_dancer.txt b/forge-gui/res/cardsfolder/upcoming/alluring_suitor_deadly_dancer.txt new file mode 100644 index 00000000000..e2ef867f1b5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/alluring_suitor_deadly_dancer.txt @@ -0,0 +1,22 @@ +Name:Alluring Suitor +ManaCost:2 R +Types:Creature Vampire +PT:2/3 +T:Mode$ AttackersDeclared | Execute$ TrigTransform | IsPresent$ Creature.attacking | PresentCompare$ EQ2 | NoResolvingCheck$ True | TriggerZones$ Battlefield | AttackingPlayer$ You | TriggerDescription$ When you attack with exactly two creatures, transform CARDNAME. +SVar:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform +AlternateMode:DoubleFaced +Oracle:When you attack with exactly two creatures, transform Alluring Suitor. + +ALTERNATE + +Name:Deadly Dancer +ManaCost:no cost +Colors:red +Types:Creature Vampire +PT:3/3 +K:Trample +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigMana | TriggerDescription$ When this creature transforms into CARDNAME, add {R}{R}. Until end of turn, you don't lose this mana as steps and phases end. +SVar:TrigMana:DB$ Mana | Produced$ R | Amount$ 2 | PersistentMana$ True +A:AB$ Pump | Cost$ R R | Defined$ Self | NumAtt$ +1 | SubAbility$ DBPump | StackDescription$ CARDNAME and | SpellDescription$ CARDNAME and another target creature each get +1/+0 until end of turn. +SVar:DBPump:DB$ Pump | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature | NumAtt$ +1 | StackDescription$ {c:Targeted} each get +1/+0 until end of turn. +Oracle:Trample\nWhen this creature transforms into Deadly Dancer, add {R}{R}. Until end of turn, you don't lose this mana as steps and phases end.\n{R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/ancient_lumberknot.txt b/forge-gui/res/cardsfolder/upcoming/ancient_lumberknot.txt new file mode 100644 index 00000000000..48f7d04ea4d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ancient_lumberknot.txt @@ -0,0 +1,6 @@ +Name:Ancient Lumberknot +ManaCost:2 B G +Types:Creature Treefolk +PT:1/4 +S:Mode$ Continuous | Affected$ Creature.powerLTtoughness+YouCtrl | AddHiddenKeyword$ CARDNAME assigns combat damage equal to its toughness rather than its power | Description$ Each creature you control with toughness greater than its power assigns combat damage equal to its toughness rather than its power. +Oracle:Each creature you control with toughness greater than its power assigns combat damage equal to its toughness rather than its power. diff --git a/forge-gui/res/cardsfolder/upcoming/angelic_quartermaster.txt b/forge-gui/res/cardsfolder/upcoming/angelic_quartermaster.txt new file mode 100644 index 00000000000..d11f5d8c3c5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/angelic_quartermaster.txt @@ -0,0 +1,9 @@ +Name:Angelic Quartermaster +ManaCost:3 W W +Types:Creature Angel Soldier +PT:3/3 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounters | TriggerDescription$ When CARDNAME enters the battlefield, put a +1/+1 counter on each of up to two other target creatures. +SVar:TrigPutCounters:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature.Other | TgtPrompt$ Select up to two other target creatures +DeckHas:Ability$Counters +Oracle:Flying\nWhen Angelic Quartermaster enters the battlefield, put a +1/+1 counter on each of up to two other target creatures. diff --git a/forge-gui/res/cardsfolder/upcoming/arm_the_cathars.txt b/forge-gui/res/cardsfolder/upcoming/arm_the_cathars.txt new file mode 100644 index 00000000000..f9301006cd2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/arm_the_cathars.txt @@ -0,0 +1,8 @@ +Name:Arm the Cathars +ManaCost:1 W W +Types:Sorcery +A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature (+3/+3) | NumAtt$ 3 | NumDef$ 3 | KW$ Vigilance | SubAbility$ DBPump | StackDescription$ Until end of turn, {c:ThisTargetedCard} gets +3/+3, | SpellDescription$ Until end of turn, target creature gets +3/+3, +SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select up to one other target creature (+2/+2) | TargetMin$ 0 | TargetMax$ 1 | NumAtt$ 2 | NumDef$ 2 | KW$ Vigilance | TargetUnique$ True | SubAbility$ DBPump2 | StackDescription$ SpellDescription | SpellDescription$ up to one other target creature gets +2/+2, +SVar:DBPump2:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select up to one other target creature (+1/+1) | TargetMin$ 0 | TargetMax$ 1 | NumAtt$ 1 | NumDef$ 1 | KW$ Vigilance | TargetUnique$ True | SubAbility$ DBPump3 | StackDescription$ SpellDescription | SpellDescription$ and up to one other target creature gets +1/1. +SVar:DBPump3:DB$ Pump | Defined$ Targeted | KW$ Vigilance | StackDescription$ SpellDescription | SpellDescription$ Those creatures gain vigilance until end of turn. +Oracle:Until end of turn, target creature gets +3/+3, up to one other target creature gets +2/+2, and up to one other target creature gets +1/+1. Those creatures gain vigilance until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/ascendant_packleader.txt b/forge-gui/res/cardsfolder/upcoming/ascendant_packleader.txt new file mode 100644 index 00000000000..5264d0fde28 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ascendant_packleader.txt @@ -0,0 +1,10 @@ +Name:Ascendant Packleader +ManaCost:G +Types:Creature Wolf +PT:2/1 +K:etbCounter:P1P1:1:IsPresent$ Permanent.YouCtrl+cmcGE4:CARDNAME enters the battlefield with a +1/+1 counter on it if you control a permanent with mana value 4 or greater. +T:Mode$ SpellCast | ValidCard$ Card.cmcGE4 | ValidActivatingPlayer$ You | Execute$ TrigCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell with mana value 4 or greater, put a +1/+1 counter on CARDNAME. +SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters +SVar:BuffedBy:Permanent.cmcGE4 +Oracle:Ascendant Packleader enters the battlefield with a +1/+1 counter on it if you control a permanent with mana value 4 or greater.\nWhenever you cast a spell with mana value 4 or greater, put a +1/+1 counter on Ascendant Packleader. diff --git a/forge-gui/res/cardsfolder/upcoming/belligerent_guest.txt b/forge-gui/res/cardsfolder/upcoming/belligerent_guest.txt new file mode 100644 index 00000000000..582bf5d0f67 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/belligerent_guest.txt @@ -0,0 +1,9 @@ +Name:Belligerent Guest +ManaCost:2 R +Types:Creature Vampire +PT:3/2 +K:Trample +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") +SVar:TrigToken:DB$ Token | TokenScript$ c_a_blood_draw +DeckHas:Ability$Token & Ability$Sacrifice & Type$Blood +Oracle:Trample\nWhenever Belligerent Guest deals combat damage to a player, create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") diff --git a/forge-gui/res/cardsfolder/upcoming/blood_hypnotist.txt b/forge-gui/res/cardsfolder/upcoming/blood_hypnotist.txt new file mode 100644 index 00000000000..a87f420e7c6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/blood_hypnotist.txt @@ -0,0 +1,9 @@ +Name:Blood Hypnotist +ManaCost:2 R +Types:Creature Vampire +PT:3/3 +K:CARDNAME can't block. +T:Mode$ Sacrificed | ValidCard$ Blood.token+YouCtrl | TriggerZone$ Battlefield | Execute$ TrigPump | ActivationLimit$ 1 | TriggerDescription$ Whenever you sacrifice one or more Blood tokens, target creature can't block this turn. This ability triggers only once each turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True +DeckNeeds:Type$Blood +Oracle:Blood Hypnotist can't block.\nWhenever you sacrifice one or more Blood tokens, target creature can't block this turn. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/bloodsworn_squire_bloodsworn_knight.txt b/forge-gui/res/cardsfolder/upcoming/bloodsworn_squire_bloodsworn_knight.txt new file mode 100644 index 00000000000..281148e14fa --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bloodsworn_squire_bloodsworn_knight.txt @@ -0,0 +1,28 @@ +Name:Bloodsworn Squire +ManaCost:3 B +Types:Creature Vampire Soldier +PT:3/3 +A:AB$ Pump | Cost$ 1 B Discard<1/Card> | Defined$ Self | KW$ Indestructible | SubAbility$ DBTap | SpellDescription$ CARDNAME gains indestructible until end of turn. +SVar:DBTap:DB$ Tap | Defined$ Self | SubAbility$ DBTransform | StackDescription$ SpellDescription | SpellDescription$ Tap it. +SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform | ConditionPresent$ Creature.YouOwn | ConditionCompare$ GE4 | ConditionZone$ Graveyard | StackDescription$ SpellDescription | SpellDescription$ Then if there are four or more creature cards in your graveyard, transform CARDNAME. +AlternateMode:DoubleFaced +SVar:AIPreference:DiscardCost$Creature +DeckHints:Ability$Graveyard +DeckHas:Ability$Discard +Oracle:{1}{B}, Discard a card: Bloodsworn Squire gains indestructible until end of turn. Tap it. Then if there are four or more creature cards in your graveyard, transform Bloodsworn Squire. (Damage and effects that say "destroy" don't destroy it.) + +ALTERNATE + +Name:Bloodsworn Knight +ManaCost:no cost +Colors:black +Types:Creature Vampire Knight +PT:*/* +S:Mode$ Continuous | Affected$ Card.Self | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of creature cards in your graveyard. +SVar:X:Count$TypeInYourYard.Creature +A:AB$ Pump | Cost$ 1 B Discard<1/Card> | Defined$ Self | KW$ Indestructible | SubAbility$ DBTap | SpellDescription$ CARDNAME gains indestructible until end of turn. +SVar:DBTap:DB$ Tap | Defined$ Self | StackDescription$ SpellDescription | SpellDescription$ Tap it. +SVar:AIPreference:DiscardCost$Creature +DeckHints:Ability$Graveyard +DeckHas:Ability$Discard +Oracle:Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard.\n{1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it. (Damage and effects that say "destroy" don't destroy it.) diff --git a/forge-gui/res/cardsfolder/upcoming/bloodtithe_harvester.txt b/forge-gui/res/cardsfolder/upcoming/bloodtithe_harvester.txt new file mode 100644 index 00000000000..40bd3cfbc91 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bloodtithe_harvester.txt @@ -0,0 +1,10 @@ +Name:Bloodtithe Harvester +ManaCost:B R +Types:Creature Vampire +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") +SVar:TrigToken:DB$ Token | TokenScript$ c_a_blood_draw +A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | SorcerySpeed$ True | AILogic$ Curse | SpellDescription$ Target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control. Activate only as a sorcery. +SVar:X:Count$Valid Blood.token+YouCtrl/Twice +DeckHas:Ability$Token & Ability$Sacrifice & Type$Blood +Oracle:When Bloodtithe Harvester enters the battlefield, create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.")\n{T}, Sacrifice Bloodtithe Harvester: Target creature gets -X/-X until end of turn, where X is twice the number of Blood tokens you control. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/bloodvial_purveyor.txt b/forge-gui/res/cardsfolder/upcoming/bloodvial_purveyor.txt new file mode 100644 index 00000000000..86f4b915622 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bloodvial_purveyor.txt @@ -0,0 +1,13 @@ +Name:Bloodvial Purveyor +ManaCost:2 B B +Types:Creature Vampire +PT:5/6 +K:Flying +K:Trample +T:Mode$ SpellCast | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent casts a spell, that player creates a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") +SVar:TrigToken:DB$ Token | TokenScript$ c_a_blood_draw | TokenOwner$ TriggeredActivator +T:Mode$ Attacks | ValidCard$ Card.Self | IsPresent$ Blood.token+DefendingPlayerCtrl | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +1/+0 until end of turn for each Blood token defending player controls. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ X +SVar:X:Count$Valid Blood.token+DefendingPlayerCtrl +SVar:HasAttackEffect:TRUE +Oracle:Flying, trample\nWhenever an opponent casts a spell, that player creates a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.")\nWhenever Bloodvial Purveyor attacks, it gets +1/+0 until end of turn for each Blood token defending player controls. diff --git a/forge-gui/res/cardsfolder/upcoming/boarded_window.txt b/forge-gui/res/cardsfolder/upcoming/boarded_window.txt new file mode 100644 index 00000000000..15bd91760d8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/boarded_window.txt @@ -0,0 +1,8 @@ +Name:Boarded Window +ManaCost:3 +Types:Artifact +S:Mode$ Continuous | Affected$ Creature.attackingYou | AddPower$ -1 | Description$ Creatures attacking you get -1/-0. +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE4 | Execute$ TrigExile | TriggerDescription$ At the beginning of each end step, if you were dealt 4 or more damage this turn, exile CARDNAME. +SVar:TrigExile:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile +SVar:X:Count$LifeYouLostThisTurn +Oracle:Creatures attacking you get -1/-0.\nAt the beginning of each end step, if you were dealt 4 or more damage this turn, exile Boarded Window. diff --git a/forge-gui/res/cardsfolder/upcoming/bramble_wurm.txt b/forge-gui/res/cardsfolder/upcoming/bramble_wurm.txt new file mode 100644 index 00000000000..85186be8fa5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bramble_wurm.txt @@ -0,0 +1,11 @@ +Name:Bramble Wurm +ManaCost:6 G +Types:Creature Wurm +PT:7/6 +K:Reach +K:Trample +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain 5 life. +SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 5 +A:AB$ GainLife | Cost$ 2 G ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | LifeAmount$ 5 | SpellDescription$ You gain 5 life. +DeckHas:Ability$LifeGain +Oracle:Reach, trample\nWhen Bramble Wurm enters the battlefield, you gain 5 life.\n{2}{G}, Exile Bramble Wurm from your graveyard: You gain 5 life. diff --git a/forge-gui/res/cardsfolder/upcoming/breathkeeper_seraph.txt b/forge-gui/res/cardsfolder/upcoming/breathkeeper_seraph.txt new file mode 100644 index 00000000000..36318a7a6d4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/breathkeeper_seraph.txt @@ -0,0 +1,11 @@ +Name:Breathkeeper Seraph +ManaCost:4 W W +Types:Creature Angel +PT:4/4 +K:Flying +K:Soulbond +S:Mode$ Continuous | Affected$ Creature.PairedWith,Creature.Self+Paired | AddTrigger$ DeathTrigger | AddSVar$ DelayedReturn,TrigReturn | Description$ As long as CARDNAME is paired with another creature, each of those creatures have "When this creature dies, you may return it to the battlefield under its owner's control at the beginning of your next upkeep." +SVar:DeathTrigger:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ DelayedReturn | TriggerDescription$ When this creature dies, you may return it to the battlefield under its owner's control at the beginning of your next upkeep. +SVar:DelayedReturn:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | OptionalDecider$ You | Execute$ TrigReturn | RememberObjects$ TriggeredNewCardLKICopy | TriggerDescription$ You may return it to the battlefield under its owner's control at the beginning of your next upkeep. +SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Battlefield +Oracle:Flying, soulbond (You may pair this creature with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them.)\nAs long as Breathkeeper Seraph is paired with another creature, each of those creatures has "When this creature dies, you may return it to the battlefield under its owner's control at the beginning of your next upkeep." diff --git a/forge-gui/res/cardsfolder/upcoming/cemetery_protector.txt b/forge-gui/res/cardsfolder/upcoming/cemetery_protector.txt index b4b85814bea..913eea7fe6e 100644 --- a/forge-gui/res/cardsfolder/upcoming/cemetery_protector.txt +++ b/forge-gui/res/cardsfolder/upcoming/cemetery_protector.txt @@ -11,4 +11,5 @@ SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_human T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBCleanup | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True DeckHas:Ability$Token +DeckHints:Ability$Graveyard & Ability$Discard Oracle:Flash\nWhen Cemetery Protector enters the battlefield, exile a card from a graveyard.\nWhenever you play a land or cast a spell, if it shares a card type with the exiled card, create a 1/1 white Human creature token. diff --git a/forge-gui/res/cardsfolder/upcoming/chandra_dressed_to_kill.txt b/forge-gui/res/cardsfolder/upcoming/chandra_dressed_to_kill.txt new file mode 100644 index 00000000000..d9977f7a496 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/chandra_dressed_to_kill.txt @@ -0,0 +1,19 @@ +Name:Chandra, Dressed to Kill +ManaCost:1 R R +Types:Legendary Planeswalker Chandra +Loyalty:3 +A:AB$ Mana | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Produced$ R | SubAbility$ DBDealDamage | SpellDescription$ Add {R}. CARDNAME deals 1 damage to up to one target player or planeswalker. +SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target player or planeswalker | NumDmg$ 1 +A:AB$ Dig | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Defined$ You | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Exile the top card of your library. If it's red, you may cast it this turn. +SVar:DBEffect:DB$ Effect | ConditionDefined$ Remembered | ConditionPresent$ Card.Red | ConditionCompare$ GE1 | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ You may cast the exiled card this turn. +A:AB$ Dig | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Defined$ You | DigNum$ 5 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect2 | StackDescription$ SpellDescription | SpellDescription$ Exile the top five cards of your library. You may cast red spells from among them this turn. You get an emblem with "Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell." +SVar:DBEffect2:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay2 | SubAbility$ DBEffect3 | ForgetOnMoved$ Exile +SVar:DBEffect3:DB$ Effect | Name$ Emblem - Chandra, Dressed to Kill | Triggers$ TRSpellCast | Duration$ Permanent | SubAbility$ DBCleanup +SVar:STPlay2:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+Red+nonLand | AffectedZone$ Exile | Description$ You may cast red spells from among the exiled cards this turn. +SVar:TRSpellCast:Mode$ SpellCast | ValidCard$ Card.Red | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigDealDamage | TriggerDescription$ Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell." +SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X +SVar:X:Count$TriggeredManaSpent +SVar:BuffedBy:Card.Red +Oracle:[+1]: Add {R}. Chandra, Dressed to Kill deals 1 damage to up to one target player or planeswalker.\n[+1]: Exile the top card of your library. If it's red, you may cast it this turn.\n[-7]: Exile the top five cards of your library. You may cast red spells from among them this turn. You get an emblem with "Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell." diff --git a/forge-gui/res/cardsfolder/upcoming/child_of_the_pack_savage_packmate.txt b/forge-gui/res/cardsfolder/upcoming/child_of_the_pack_savage_packmate.txt new file mode 100644 index 00000000000..54fd2a38655 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/child_of_the_pack_savage_packmate.txt @@ -0,0 +1,21 @@ +Name:Child of the Pack +ManaCost:2 R G +Types:Creature Human Werewolf +PT:2/5 +A:AB$ Token | Cost$ 2 R G | TokenScript$ g_2_2_wolf | StackDescription$ SpellDescription | SpellDescription$ Create a 2/2 green Wolf creature token. +K:Daybound +AlternateMode:DoubleFaced +DeckHas:Ability$Token & Type$Wolf +Oracle:{2}{R}{G}: Create a 2/2 green Wolf creature token.\nDaybound (If a player casts no spells during their own turn, it becomes night next turn.) + +ALTERNATE + +Name:Savage Packmate +ManaCost:no cost +Colors:red,green +Types:Creature Werewolf +PT:5/5 +K:Trample +S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddPower$ 1 | Description$ Other creatures you control get +1/+0. +K:Nightbound +Oracle:Trample\nOther creatures you control get +1/+0.\nNightbound (If a player casts at least two spells during their own turn, it becomes day next turn.) diff --git a/forge-gui/res/cardsfolder/upcoming/circle_of_confinement.txt b/forge-gui/res/cardsfolder/upcoming/circle_of_confinement.txt new file mode 100644 index 00000000000..9ccbb15504b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/circle_of_confinement.txt @@ -0,0 +1,15 @@ +Name:Circle of Confinement +ManaCost:1 W +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature with mana value 3 or less an opponent controls until CARDNAME leaves the battlefield. (That creature returns under its owner's control.) +SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | ValidTgts$ Creature.cmcLE3+OppCtrl | TgtPrompt$ Select target creature with mana value 3 or less an opponent controls | AITgts$ Vampire.cmcLE3+OppCtrl | Duration$ UntilHostLeavesPlay +T:Mode$ SpellCast | ValidCard$ Card.Vampire+sharesNameWith Remembered.ExiledWithSource | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever an opponent casts a Vampire spell with the same name as a card exiled with CARDNAME, you gain 2 life. +SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 +T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget +SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:PlayMain1:TRUE +SVar:NeedsToPlay:Creature.cmcLE3+OppCtrl +DeckHas:Ability$LifeGain +Oracle:When Circle of Confinement enters the battlefield, exile target creature with mana value 3 or less an opponent controls until Circle of Confinement leaves the battlefield.\nWhenever an opponent casts a Vampire spell with the same name as a card exiled with Circle of Confinement, you gain 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/cloaked_cadet.txt b/forge-gui/res/cardsfolder/upcoming/cloaked_cadet.txt new file mode 100644 index 00000000000..4e2532b60b7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cloaked_cadet.txt @@ -0,0 +1,9 @@ +Name:Cloaked Cadet +ManaCost:4 G +Types:Creature Human Ranger +PT:2/4 +K:Training +T:Mode$ CounterAddedAll | CounterType$ P1P1 | Valid$ Human.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | ActivationLimit$ 1 | TriggerDescription$ Whenever one or more +1/+1 counters are put on one or more Humans you control, draw a card. This ability triggers only once each turn. +SVar:TrigDraw:DB$ Draw | NumCards$ 1 +DeckHas:Ability$Counters +Oracle:Training (Whenever this creature attacks with another creature with greater power, put a +1/+1 counter on this creature.)\nWhenever one or more +1/+1 counters are put on one or more Humans you control, draw a card. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/concealing_curtains_revealing_eye.txt b/forge-gui/res/cardsfolder/upcoming/concealing_curtains_revealing_eye.txt new file mode 100644 index 00000000000..48128627453 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/concealing_curtains_revealing_eye.txt @@ -0,0 +1,25 @@ +Name:Concealing Curtains +ManaCost:B +Types:Creature Wall +PT:0/4 +K:Defender +A:AB$ SetState | Cost$ 2 B | Defined$ Self | Mode$ Transform | SorcerySpeed$ True | SpellDescription$ Transform CARDNAME. Activate only as a sorcery. +AlternateMode:DoubleFaced +Oracle:Defender\n{2}{B}: Transform Concealing Curtains. Activate only as a sorcery. + +ALTERNATE + +Name:Revealing Eye +ManaCost:no cost +Colors:black +Types:Creature Eye Horror +PT:3/4 +K:Menace +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigReveal | TriggerDescription$ When this creature transforms into CARDNAME, target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card, then draws a card. +SVar:TrigReveal:DB$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RememberRevealed$ True | SubAbility$ DBChoose +SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Hand | Amount$ 1 | Choices$ Card.nonLand+IsRemembered | SubAbility$ DBDiscard | ChoiceTitle$ You may choose a nonland card +SVar:DBDiscard:DB$ Discard | DefinedCards$ ChosenCard | Defined$ Targeted | Mode$ Defined | ConditionDefined$ ChosenCard | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | Defined$ Targeted | NumCards$ 1 | ConditionDefined$ ChosenCard | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True +DeckHas:Ability$Discard +Oracle:Menace\nWhen this creature transforms into Revealing Eye, target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card, then draws a card. diff --git a/forge-gui/res/cardsfolder/upcoming/consuming_tide.txt b/forge-gui/res/cardsfolder/upcoming/consuming_tide.txt new file mode 100644 index 00000000000..79d30e9e8b5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/consuming_tide.txt @@ -0,0 +1,11 @@ +Name:Consuming Tide +ManaCost:2 U U +Types:Sorcery +A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseCard | SubAbility$ DBReturnAll | SpellDescription$ Each player chooses a nonland permanent they control. Return all nonland permanents not chosen this way to their owners' hands. Then you draw a card for each opponent who has more cards in their hand than you. +SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Permanent.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose a nonland permanent you control | RememberChosen$ True | AILogic$ BestCard +SVar:DBReturnAll:DB$ ChangeZoneAll | ChangeType$ Permanent.nonLand+IsNotRemembered | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ X | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:PlayerCountOpponents$HasPropertyHasCardsInHand_Card_GTY +SVar:Y:Count$CardsInYourHand +Oracle:Each player chooses a nonland permanent they control. Return all nonland permanents not chosen this way to their owners' hands. Then you draw a card for each opponent who has more cards in their hand than you. diff --git a/forge-gui/res/cardsfolder/upcoming/cultivator_colossus.txt b/forge-gui/res/cardsfolder/upcoming/cultivator_colossus.txt new file mode 100644 index 00000000000..7a7196f519a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cultivator_colossus.txt @@ -0,0 +1,15 @@ +Name:Cultivator Colossus +ManaCost:4 G G G +Types:Creature Plant Beast +PT:*/* +K:Trample +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of lands you control. +SVar:X:Count$Valid Land.YouCtrl +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigRepeat | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may put a land card from your hand onto the battlefield tapped. If you do, draw a card and repeat this process. +SVar:TrigRepeat:DB$ Repeat | RepeatSubAbility$ DBClear | RepeatDefined$ Remembered | RepeatPresent$ Card | RepeatSVarCompare$ EQ1 | SubAbility$ DBCleanup +SVar:DBClear:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.YouOwn | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:BuffedBy:Land +Oracle:Trample\nCultivator Colossus's power and toughness are each equal to the number of lands you control.\nWhen Cultivator Colossus enters the battlefield, you may put a land card from your hand onto the battlefield tapped. If you do, draw a card and repeat this process. diff --git a/forge-gui/res/cardsfolder/upcoming/curse_of_hospitality.txt b/forge-gui/res/cardsfolder/upcoming/curse_of_hospitality.txt new file mode 100644 index 00000000000..c2803625792 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/curse_of_hospitality.txt @@ -0,0 +1,12 @@ +Name:Curse of Hospitality +ManaCost:2 R +Types:Enchantment Aura Curse +K:Enchant player +A:SP$ Attach | ValidTgts$ Player | TgtPrompt$ Select player to curse | AILogic$ Curse +S:Mode$ Continuous | Affected$ Creature.attacking EnchantedPlayer | AddKeyword$ Trample | Description$ Creatures attacking enchanted player have trample. +T:Mode$ DamageDone | ValidSource$ Creature | ValidTarget$ Player.EnchantedBy | TriggerZones$ Battlefield | CombatDamage$ True | Execute$ TrigExile | TriggerDescription$ Whenever a creature deals combat damage to enchanted player, that player exiles the top card of their library. Until end of turn, that creature's controller may play that card and they may spend mana as though it were mana of any color to cast that spell. +SVar:TrigExile:DB$ Dig | Defined$ TriggeredTarget | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | EffectOwner$ TriggeredSourceController | Duration$ EndOfTurn | RememberObjects$ Remembered | StaticAbilities$ STPlay | ForgetOnMoved$ Exile | SubAbility$ DBCleanup +SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until end of turn, you may play the exiled card and may spend mana as though it were mana of any color to cast it. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Enchant player\nCreatures attacking enchanted player have trample.\nWhenever a creature deals combat damage to enchanted player, that player exiles the top card of their library. Until end of turn, that creature's controller may play that card and they may spend mana as though it were mana of any color to cast that spell. diff --git a/forge-gui/res/cardsfolder/upcoming/distracting_geist_clever_distraction.txt b/forge-gui/res/cardsfolder/upcoming/distracting_geist_clever_distraction.txt new file mode 100644 index 00000000000..04c3f04a297 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/distracting_geist_clever_distraction.txt @@ -0,0 +1,27 @@ +Name:Distracting Geist +ManaCost:2 W +Types:Creature Spirit +PT:2/1 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ Whenever CARDNAME attacks, tap target creature defending player controls. +SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.ControlledBy TriggeredDefendingPlayer | TgtPrompt$ Select target creature defending player controls +SVar:HasAttackEffect:TRUE +K:Disturb:4 W +AlternateMode:DoubleFaced +DeckHas:Ability$Graveyard +Oracle:Whenever Distracting Geist attacks, tap target creature defending player controls.\nDisturb {4}{W} (You may cast this card from your graveyard transformed for its disturb cost.) + +ALTERNATE + +Name:Clever Distraction +ManaCost:no cost +Colors:white +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddTrigger$ AttackTrigger | AddSVar$ AE | Description$ Enchanted creature has "Whenever this creature attacks, tap target creature defending player controls." +SVar:AttackTrigger:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ Whenever CARDNAME attacks, tap target creature defending player controls. +SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.ControlledBy TriggeredDefendingPlayer | TgtPrompt$ Select target creature defending player controls +SVar:AE:SVar:HasAttackEffect:TRUE +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead. +SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard +Oracle:Enchant creature\nEnchanted creature has "Whenever this creature attacks, tap target creature defending player controls." If Clever Distraction would be put into a graveyard from anywhere, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/diver_skaab.txt b/forge-gui/res/cardsfolder/upcoming/diver_skaab.txt new file mode 100644 index 00000000000..1620ab76ade --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/diver_skaab.txt @@ -0,0 +1,9 @@ +Name:Diver Skaab +ManaCost:3 U U +Types:Creature Zombie +PT:3/5 +K:Exploit +T:Mode$ Exploited | ValidCard$ Creature | ValidSource$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSubmerge | TriggerDescription$ When CARDNAME exploits a creature, target creature's owner puts it on the top or bottom of their library. +SVar:TrigSubmerge:DB$ ChangeZone | ValidTgts$ Creature | TgtPrompt$ Select target creature | AlternativeDecider$ TargetedController | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? +DeckHas:Ability$Sacrifice +Oracle:Exploit (When this creature enters the battlefield, you may sacrifice a creature.)\nWhen Diver Skaab exploits a creature, target creature's owner puts it on the top or bottom of their library. diff --git a/forge-gui/res/cardsfolder/upcoming/dollhouse_of_horrors.txt b/forge-gui/res/cardsfolder/upcoming/dollhouse_of_horrors.txt new file mode 100644 index 00000000000..b95d6d1ef97 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dollhouse_of_horrors.txt @@ -0,0 +1,10 @@ +Name:Dollhouse of Horrors +ManaCost:5 +Types:Artifact +A:AB$ CopyPermanent | Cost$ 1 T ExileFromGrave<1/Creature> | Defined$ Exiled | SetPower$ 0 | SetToughness$ 0 | AddTypes$ Construct & Artifact | AddStaticAbilities$ ConstructBuff | SorcerySpeed$ True | SubAbility$ DBPump | StackDescription$ Create a token that's a copy of {c:Exiled}, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." | SpellDescription$ Create a token that's a copy of the exiled card, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." +SVar:DBPump:DB$ Pump | Defined$ Exiled | StackDescription$ That creature gains haste until end of turn. | SpellDescription$ That creature gains haste until end of turn. Activate only as a sorcery. +SVar:ConstructBuff:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ This creature gets +1/+1 for each Construct you control. +SVar:X:Count$Valid Construct.YouCtrl +DeckHas:Ability$Token & Ability$Graveyard & Type$Artifact +DeckHints:Type$Construct +Oracle:{1}, {T}: Exile a creature card from your graveyard: Create a token that's a copy of the exiled card, except it's a 0/0 Construct artifact in addition to its other types and it has "This creature gets +1/+1 for each Construct you control." That creature gains haste until end of turn. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/dreamshackle_geist.txt b/forge-gui/res/cardsfolder/upcoming/dreamshackle_geist.txt new file mode 100644 index 00000000000..29644fa782b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dreamshackle_geist.txt @@ -0,0 +1,10 @@ +Name:Dreamshackle Geist +ManaCost:1 U U +Types:Creature Spirit +PT:3/1 +K:Flying +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigCharm | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, ABILITY +SVar:TrigCharm:DB$ Charm | Choices$ Tap,Freeze | CharmNum$ 1 +SVar:Tap:DB$ Tap | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. +SVar:Freeze:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN This card doesn't untap during your next untap step. | Duration$ Permanent | IsCurse$ True | SpellDescription$ Target creature doesn't untap during its controller's next untap step. +Oracle:Flying\nAt the beginning of combat on your turn, choose up to one —\n• Tap target creature.\n• Target creature doesn't untap during its controller's next untap step. diff --git a/forge-gui/res/cardsfolder/upcoming/dying_to_serve.txt b/forge-gui/res/cardsfolder/upcoming/dying_to_serve.txt new file mode 100644 index 00000000000..731fe77d5b8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dying_to_serve.txt @@ -0,0 +1,8 @@ +Name:Dying to Serve +ManaCost:2 B +Types:Enchantment +T:Mode$ DiscardedAll | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | ActivationLimit$ 1 | TriggerDescription$ Whenever you discard one or more cards, create a tapped 2/2 black Zombie creature token. This ability triggers only once each turn. +SVar:TrigToken:DB$ Token | TokenTapped$ True | TokenScript$ b_2_2_zombie +DeckHas:Ability$Token & Type$Zombie +DeckHints:Ability$Discard & Ability$Graveyard +Oracle:Whenever you discard one or more cards, create a tapped 2/2 black Zombie creature token. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/edgars_awakening.txt b/forge-gui/res/cardsfolder/upcoming/edgars_awakening.txt new file mode 100644 index 00000000000..25cefb617a0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/edgars_awakening.txt @@ -0,0 +1,10 @@ +Name:Edgar's Awakening +ManaCost:3 B B +Types:Sorcery +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouOwn | SpellDescription$ Return target creature card from your graveyard to the battlefield. +T:Mode$ Discarded | ValidCard$ Card.Self | Execute$ TrigImmediateTrig | TriggerController$ TriggeredCardController | TriggerDescription$ When you discard CARDNAME, you may pay {B}. When you do, return target creature card from your graveyard to your hand. +SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ B | Execute$ TrigReturn | TriggerDescription$ When you do, return target creature card from your graveyard to your hand. +SVar:TrigReturn:DB$ ChangeZone | TgtPrompt$ Select target creature card in your graveyard | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Hand +DeckHints:Ability$Discard +DeckHas:Ability$Graveyard +Oracle:Return target creature card from your graveyard to the battlefield.\nWhen you discard Edgar's Awakening, you may pay {B}. When you do, return target creature card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/eruth_tormented_prophet.txt b/forge-gui/res/cardsfolder/upcoming/eruth_tormented_prophet.txt new file mode 100644 index 00000000000..4a66fd96f08 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eruth_tormented_prophet.txt @@ -0,0 +1,10 @@ +Name:Eruth, Tormented Prophet +ManaCost:1 U R +Types:Legendary Creature Human Wizard +PT:2/4 +R:Event$ Draw | ActiveZones$ Battlefield | ValidPlayer$ You | ReplaceWith$ ExileTwo | Description$ If you would draw a card, exile the top two cards of your library instead. You may play those cards this turn. +SVar:ExileTwo:DB$ Dig | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ Play | SubAbility$ DBCleanup | ForgetOnMoved$ Exile +SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play those cards this turn. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:If you would draw a card, exile the top two cards of your library instead. You may play those cards this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/faithbound_judge_sinners_judgment.txt b/forge-gui/res/cardsfolder/upcoming/faithbound_judge_sinners_judgment.txt new file mode 100644 index 00000000000..f711c68d996 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/faithbound_judge_sinners_judgment.txt @@ -0,0 +1,30 @@ +Name:Faithbound Judge +ManaCost:1 W W +Types:Creature Spirit Soldier +PT:4/4 +K:Defender +K:Flying +K:Vigilance +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+counters_LE2_JUDGMENT | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, if CARDNAME has two or fewer judgment counters on it, put a judgment counter on it. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ JUDGMENT | CounterNum$ 1 +S:Mode$ Continuous | Affected$ Card.Self+counters_GE3_JUDGMENT | AddHiddenKeyword$ CARDNAME can attack as though it didn't have defender. | Description$ As long as CARDNAME has three or more judgment counters on it, it can attack as though it didn't have defender. +K:Disturb:5 W W +AlternateMode:DoubleFaced +DeckHas:Ability$Graveyard & Ability$Counters +Oracle:Defender, flying, vigilance\nAt the beginning of your upkeep, if Faithbound Judge has two or fewer judgment counters on it, put a judgment counter on it.\nAs long as Faithbound Judge has three or more judgment counters on it, it can attack as though it didn't have defender.\nDisturb {5}{W}{W} + +ALTERNATE + +Name:Sinner's Judgment +ManaCost:no cost +Colors:white +Types:Enchantment Aura Curse +K:Enchant player +A:SP$ Attach | ValidTgts$ Player | TgtPrompt$ Select player to curse | AILogic$ Curse +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a judgment counter on Sinner's Judgment. Then if there are three or more judgment counters on it, enchanted player loses the game. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ JUDGMENT | CounterNum$ 1 | SubAbility$ DBLose +SVar:DBLose:DB$ LosesGame | Defined$ EnchantedPlayer | ConditionPresent$ Card.Self+counters_GE3_JUDGMENT +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead. +SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard +DeckHas:Ability$Counters +Oracle:Enchant player\nAt the beginning of your upkeep, put a judgment counter on Sinner's Judgment. Then if there are three or more judgment counters on it, enchanted player loses the game.\nIf Sinner's Judgment would be put into a graveyard from anywhere, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/falkenrath_forebear.txt b/forge-gui/res/cardsfolder/upcoming/falkenrath_forebear.txt new file mode 100644 index 00000000000..56eed23a8dc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/falkenrath_forebear.txt @@ -0,0 +1,11 @@ +Name:Falkenrath Forebear +ManaCost:2 B +Types:Creature Vampire +PT:3/1 +K:Flying +K:CARDNAME can't block. +T:Mode$ DamageDone | ValidSource$ Card.Self | Execute$ TrigToken | CombatDamage$ True | ValidTarget$ Player | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, create a Blood token. +SVar:TrigToken:DB$ Token | TokenScript$ c_a_blood_draw +A:AB$ ChangeZone | Cost$ B Sac<2/Blood.token/Blood token> | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | SpellDescription$ Return CARDNAME from your graveyard to the battlefield. +DeckHas:Ability$Token & Ability$Sacrifice & Ability$Graveyard & Type$Blood +Oracle:Flying\nFalkenrath Forebear can't block.\nWhenever Falkenrath Forebear deals combat damage to a player, create a Blood token.\n{B}, Sacrifice two Blood tokens: Return Falkenrath Forebear from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/fearful_villager_fearsome_werewolf.txt b/forge-gui/res/cardsfolder/upcoming/fearful_villager_fearsome_werewolf.txt new file mode 100644 index 00000000000..392b9205ad0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fearful_villager_fearsome_werewolf.txt @@ -0,0 +1,19 @@ +Name:Fearful Villager +ManaCost:2 R R +Types:Creature Human Werewolf +PT:2/3 +K:Menace +K:Daybound +AlternateMode:DoubleFaced +Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nDaybound (If a player casts no spells during their own turn, it becomes night next turn.) + +ALTERNATE + +Name:Fearsome Werewolf +ManaCost:no cost +Colors:red +Types:Creature Werewolf +PT:4/3 +K:Menace +K:Nightbound +Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nNightbound (If a player casts at least two spells during their own turn, it becomes day next turn.) diff --git a/forge-gui/res/cardsfolder/upcoming/frenzied_devils.txt b/forge-gui/res/cardsfolder/upcoming/frenzied_devils.txt new file mode 100644 index 00000000000..8e54a8ffd73 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/frenzied_devils.txt @@ -0,0 +1,9 @@ +Name:Frenzied Devils +ManaCost:4 R +Types:Creature Devil +PT:3/3 +K:Haste +T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a noncreature spell, CARDNAME gets +2/+2 until end of turn. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 2 | NumDef$ 2 +SVar:BuffedBy:Card.nonLand+nonCreature +Oracle:Haste\nWhenever you cast a noncreature spell, Frenzied Devils gets +2/+2 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/glorious_sunrise.txt b/forge-gui/res/cardsfolder/upcoming/glorious_sunrise.txt new file mode 100644 index 00000000000..af2a9588ab2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/glorious_sunrise.txt @@ -0,0 +1,12 @@ +Name:Glorious Sunrise +ManaCost:3 G G +Types:Enchantment +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigCharm | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, ABILITY +SVar:TrigCharm:DB$ Charm | Choices$ PumpAll,Animate,Draw,Gain | CharmNum$ 1 +SVar:PumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Trample | NumAtt$ +1 | NumDef$ +1 | SpellDescription$ Creatures you control get +1/+1 and gain trample until end of turn. +SVar:Animate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Abilities$ ThreeG | SpellDescription$ Target land gains "{T}: Add {G}{G}{G}" until end of turn. +SVar:ThreeG:AB$ Mana | Cost$ T | Produced$ G | Amount$ 3 | SpellDescription$ Add {G}{G}{G} +SVar:Draw:DB$ Draw | Defined$ You | NumCards$ 1 | ConditionPresent$ Creature.YouCtrl+powerGE3 | SpellDescription$ Draw a card if you control a creature with power 3 or greater. +SVar:Gain:DB$ GainLife | LifeAmount$ 3 | SpellDescription$ You gain 3 life. +DeckHas:Ability$LifeGain +Oracle:At the beginning of combat on your turn, choose one —\n• Creatures you control get +1/+1 and gain trample until end of turn.\n• Target land gains "{T}: Add {G}{G}{G}" until end of turn.\n• Draw a card if you control a creature with power 3 or greater.\n• You gain 3 life. diff --git a/forge-gui/res/cardsfolder/upcoming/graf_reaver.txt b/forge-gui/res/cardsfolder/upcoming/graf_reaver.txt new file mode 100644 index 00000000000..78be73efa2b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/graf_reaver.txt @@ -0,0 +1,11 @@ +Name:Graf Reaver +ManaCost:1 B +Types:Creature Zombie Warrior +PT:3/3 +K:Exploit +T:Mode$ Exploited | ValidCard$ Creature | ValidSource$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME exploits a creature, destroy target planeswalker. +SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Planeswalker | TgtPrompt$ Select target planeswalker +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDealDamage | TriggerDescription$ At the beginning of your upkeep, CARDNAME deals 1 damage to you. +SVar:TrigDealDamage:DB$ DealDamage | Defined$ You | NumDmg$ 1 +AI:RemoveDeck:Random +Oracle:Exploit (When this creature enters the battlefield, you may sacrifice a creature.)\nWhen Graf Reaver exploits a creature, destroy target planeswalker.\nAt the beginning of your upkeep, Graf Reaver deals 1 damage to you. diff --git a/forge-gui/res/cardsfolder/upcoming/grooms_finery.txt b/forge-gui/res/cardsfolder/upcoming/grooms_finery.txt new file mode 100644 index 00000000000..acf58822cef --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/grooms_finery.txt @@ -0,0 +1,8 @@ +Name:Groom's Finery +ManaCost:1 B +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | Description$ Equipped creature gets +2/+0. It gets an additional +0/+2 and has deathtouch as long as an Equipment named Bride's Gown is attached to a creature you control. +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddToughness$ 2 | AddKeyword$ Deathtouch | IsPresent$ Equipment.AttachedTo Creature.YouCtrl+namedBride's Gown | Secondary$ True +K:Equip:2 +DeckHints:Name$Bride's Gown +Oracle:Equipped creature gets +2/+0. It gets an additional +0/+2 and has deathtouch as long as an Equipment named Bride's Gown is attached to a creature you control.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/hamlet_vanguard.txt b/forge-gui/res/cardsfolder/upcoming/hamlet_vanguard.txt new file mode 100644 index 00000000000..622fa53e9f4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hamlet_vanguard.txt @@ -0,0 +1,10 @@ +Name:Hamlet Vanguard +ManaCost:2 G +Types:Creature Human Warrior +PT:1/1 +K:Ward:2 +K:etbCounter:P1P1:X:no Condition:CARDNAME enters the battlefield with two +1/+1 counters on it for each other nontoken Human you control. +SVar:X:Count$Valid Human.nonToken+YouCtrl/Times.2 +DeckNeeds:Type$Human +DeckHas:Ability$Counters +Oracle:Ward {2} (Whenever this creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nHamlet Vanguard enters the battlefield with two +1/+1 counters on it for each other nontoken Human you control. diff --git a/forge-gui/res/cardsfolder/upcoming/headless_rider.txt b/forge-gui/res/cardsfolder/upcoming/headless_rider.txt new file mode 100644 index 00000000000..17eea2fdfb5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/headless_rider.txt @@ -0,0 +1,10 @@ +Name:Headless Rider +ManaCost:2 B +Types:Creature Zombie +PT:3/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Zombie.nonToken+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME or another nontoken Zombie you control dies, create a 2/2 black Zombie creature token. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another nontoken Zombie you control dies, create a 2/2 black Zombie creature token. +SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie +DeckHas:Ability$Token +DeckHints:Type$Zombie +Oracle:Whenever Headless Rider or another nontoken Zombie you control dies, create a 2/2 black Zombie creature token. diff --git a/forge-gui/res/cardsfolder/upcoming/henrika_domnathi_henrika_infernal_seer.txt b/forge-gui/res/cardsfolder/upcoming/henrika_domnathi_henrika_infernal_seer.txt new file mode 100644 index 00000000000..76c447f6f42 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/henrika_domnathi_henrika_infernal_seer.txt @@ -0,0 +1,28 @@ +Name:Henrika Domnathi +ManaCost:2 B B +Types:Legendary Creature Vampire +PT:1/3 +K:Flying +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigCharm | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, ABILITY +SVar:TrigCharm:DB$ Charm | Choices$ SacDom,DrawDom,TransDom | ChoiceRestriction$ ThisGame | CharmNum$ 1 +SVar:SacDom:DB$ Sacrifice | Amount$ 1 | SacValid$ Creature | Defined$ Player | SpellDescription$ Each player sacrifices a creature. +SVar:DrawDom:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife | SpellDescription$ You draw a card and you lose 1 life. +SVar:DBLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 1 | StackDescription$ None +SVar:TransDom:DB$ SetState | Defined$ Self | Mode$ Transform | SpellDescription$ Transform CARDNAME. +AlternateMode:DoubleFaced +DeckHas:Ability$Sacrifice +Oracle:Flying\nAt the beginning of combat on your turn, choose one that hasn't been chosen –\n• Each player sacrifices a creature.\n• You draw a card and you lose 1 life.\n•Transform Henrika Domnathi. + +ALTERNATE + +Name:Henrika, Infernal Seer +ManaCost:no cost +Colors:black +Types:Legendary Creature Vampire +PT:3/4 +K:Flying +K:Deathtouch +K:Lifelink +A:AB$ PumpAll | Cost$ 1 B B | ValidCards$ Creature.YouCtrl+withFlying,Creature.YouCtrl+withLifelink,Creature.YouCtrl+withDeathtouch | NumAtt$ +1 | SpellDescription$ Each creature you control with flying, deathtouch and/or lifelink gets +1/+0 until end of turn. +DeckHas:Ability$LifeGain +Oracle:Flying, deathtouch, lifelink\n{1}{B}{B}: Each creature you control with flying, deathtouch and/or lifelink gets +1/+0 until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/hiveheart_shaman.txt b/forge-gui/res/cardsfolder/upcoming/hiveheart_shaman.txt new file mode 100644 index 00000000000..60550258cff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hiveheart_shaman.txt @@ -0,0 +1,15 @@ +Name:Hiveheart Shaman +ManaCost:3 G +Types:Creature Human Shaman +PT:3/5 +T:Mode$ Attacks | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ Whenever CARDNAME attacks, you may search your library for a basic land card that doesn't share a land type with a land you control, put that card onto the battlefield, then shuffle. +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic+!sharesLandTypeWith Valid Land.YouCtrl | ChangeNum$ 1 | ShuffleNonMandatory$ True +A:AB$ Token | Cost$ 5 G | TokenScript$ g_1_1_insect | RememberTokens$ True | SorcerySpeed$ True | SubAbility$ DBCounters | StackDescription$ SpellDescription | SpellDescription$ Create a 1/1 green Insect creature token. Put X +1/+1 counters on it, where X is the number of basic land types among lands you control. +SVar:DBCounters:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | StackDescription$ None | SubAbility$ DBCleanup | SpellDescription$ Activate only as a sorcery. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$Domain +SVar:BuffedBy:Plains,Island,Swamp,Mountain,Forest +SVar:HasAttackEffect:TRUE +DeckHints:Color$White|Blue|Red|Black +DeckHas:Ability$Token & Ability$Counters +Oracle:Whenever Hiveheart Shaman attacks, you may search your library for a basic land card that doesn't share a land type with a land you control, put that card onto the battlefield, then shuffle.\n{5}{G}: Create a 1/1 green Insect creature token. Put X +1/+1 counters on it, where X is the number of basic land types among lands you control. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/honeymoon_hearse.txt b/forge-gui/res/cardsfolder/upcoming/honeymoon_hearse.txt new file mode 100644 index 00000000000..2889a417b94 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/honeymoon_hearse.txt @@ -0,0 +1,7 @@ +Name:Honeymoon Hearse +ManaCost:2 R +Types:Artifact Vehicle +PT:5/5 +K:Trample +A:AB$ Animate | Cost$ tapXType<2/Creature/creature> | Types$ Artifact,Creature | RemoveCardTypes$ True | StackDescription$ SpellDescription | SpellDescription$ CARDNAME becomes an artifact creature until end of turn. +Oracle:Trample\nTap two untapped creatures you control: Honeymoon Hearse becomes an artifact creature until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/honored_heirloom.txt b/forge-gui/res/cardsfolder/upcoming/honored_heirloom.txt new file mode 100644 index 00000000000..f562cb8bbe9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/honored_heirloom.txt @@ -0,0 +1,5 @@ +Name:Honored Heirloom +Types:Artifact +A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. +A:AB$ ChangeZone | Cost$ 2 T | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select target card in a graveyard | ValidTgts$ Card | SpellDescription$ Exile target card from a graveyard. +Oracle:{T}: Add one mana of any color.\n{2}, {T}: Exile target card from a graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/hopeful_initiate.txt b/forge-gui/res/cardsfolder/upcoming/hopeful_initiate.txt new file mode 100644 index 00000000000..9b3bda5dade --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hopeful_initiate.txt @@ -0,0 +1,8 @@ +Name:Hopeful Initiate +ManaCost:W +Types:Creature Human Warlock +PT:1/2 +K:Training +A:AB$ Destroy | Cost$ 2 W RemoveAnyCounter<2/P1P1/Creature.YouCtrl/among creatures you control> | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SpellDescription$ Destroy target artifact or enchantment. +DeckHas:Ability$Counters +Oracle:Training (Whenever this creature attacks with another creature with greater power, put a +1/+1 counter on this creature.)\n{2}{W}, Remove two +1/+1 counters from among creatures you control: Destroy target artifact or enchantment. diff --git a/forge-gui/res/cardsfolder/upcoming/howlpack_piper_wildsong_howler.txt b/forge-gui/res/cardsfolder/upcoming/howlpack_piper_wildsong_howler.txt new file mode 100644 index 00000000000..bff1a2b379b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/howlpack_piper_wildsong_howler.txt @@ -0,0 +1,25 @@ +Name:Howlpack Piper +ManaCost:3 G +Types:Creature Human Werewolf +PT:2/2 +K:CARDNAME can't be countered. +A:AB$ ChangeZone | Cost$ 1 G T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature | ChangeNum$ 1 | SorcerySpeed$ True | RememberChanged$ True | SubAbility$ DBUntap | StackDescription$ You may put a creature card from your hand onto the battlefield. If it's a Wolf or Werewolf, untap CARDNAME. | SpellDescription$ You may put a creature card from your hand onto the battlefield. If it's a Wolf or Werewolf, untap CARDNAME. Activate only as a sorcery. +SVar:DBUntap:DB$ Untap | Defined$ Self | ConditionDefined$ Remembered | ConditionPresent$ Wolf,Werewolf | ConditionCompare$ EQ1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +K:Daybound +AlternateMode:DoubleFaced +DeckHints:Type$Wolf|Werewolf +Oracle:This spell can't be countered.\n{1}{G}, {T}: You may put a creature card from your hand onto the battlefield. If it's a Wolf or Werewolf, untap Howlpack Piper. Activate only as a sorcery.\nDaybound (If a player casts no spells during their own turn, it becomes night next turn.) + +ALTERNATE + +Name:Wildsong Howler +ManaCost:no cost +Colors:green +Types:Creature Werewolf +PT:4/4 +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ Whenever this creature enters the battlefield or transforms into CARDNAME, look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigDig | Secondary$ True | TriggerDescription$ Whenever this creature enters the battlefield or transforms into CARDNAME, look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 6 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Card.Creature | RestRandomOrder$ True | ForceRevealToController$ True +K:Nightbound +Oracle:Whenever this creature enters the battlefield or transforms into Wildsong Howler, look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.\nNightbound (If a player casts at least two spells during their own turn, it becomes day next turn.) diff --git a/forge-gui/res/cardsfolder/upcoming/hullbreaker_horror.txt b/forge-gui/res/cardsfolder/upcoming/hullbreaker_horror.txt new file mode 100644 index 00000000000..2767f547ed7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hullbreaker_horror.txt @@ -0,0 +1,11 @@ +Name:Hullbreaker Horror +ManaCost:5 U U +Types:Creature Kraken Horror +PT:7/8 +K:Flash +K:This spell can't be countered. +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigCharm | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell, ABILITY +SVar:TrigCharm:DB$ Charm | Choices$ ControlReturn,ControlBounce | MinCharmNum$ 0 | CharmNum$ 1 +SVar:ControlReturn:DB$ ChangeZone | ValidTgts$ Card.YouDontCtrl | TgtPrompt$ Select target spell you don't control | TgtZone$ Stack | Origin$ Stack | Fizzle$ True | Destination$ Hand | SpellDescription$ Return target spell you don't control to its owner's hand. +SVar:ControlBounce:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | TgtZone$ Battlefield | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target nonland permanent to its owner's hand. +Oracle:Flash\nThis spell can't be countered.\nWhenever you cast a spell, choose up to one —\n• Return target spell you don't control to its owner's hand.\n• Return target nonland permanent to its owner's hand. diff --git a/forge-gui/res/cardsfolder/upcoming/inspired_idea.txt b/forge-gui/res/cardsfolder/upcoming/inspired_idea.txt new file mode 100644 index 00000000000..f5adfe28c7c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/inspired_idea.txt @@ -0,0 +1,8 @@ +Name:Inspired Idea +ManaCost:2 U +Types:Sorcery +A:SP$ Draw | NumCards$ 3 | SubAbility$ DBEffect | SpellDescription$ Draw three cards. [Your maximum hand size is reduced by three for the rest of the game.] +SVar:DBEffect:DB$ Effect | StaticAbilities$ ReduceHand | Duration$ Permanent +SVar:ReduceHand:Mode$ Continuous | Affected$ You | RaiseMaxHandSize$ -3 | Description$ Your maximum hand size is reduced by three for the rest of the game. +A:SP$ Draw | Cost$ 3 U U | NumCards$ 3 | PrecostDesc$ Cleave | CostDesc$ {3}{U}{U} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.) +Oracle:Cleave {3}{U}{U} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nDraw three cards. [Your maximum hand size is reduced by three for the rest of the game.] diff --git a/forge-gui/res/cardsfolder/upcoming/into_the_night.txt b/forge-gui/res/cardsfolder/upcoming/into_the_night.txt new file mode 100644 index 00000000000..28f74d88108 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/into_the_night.txt @@ -0,0 +1,9 @@ +Name:Into the Night +ManaCost:3 R +Types:Sorcery +A:SP$ DayTime | Value$ Night | SubAbility$ DBDiscard | SpellDescription$ It becomes night. +SVar:DBDiscard:DB$ Discard | AnyNumber$ True | Optional$ True | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ DBDraw | StackDescription$ {p:You} discards any number of cards, | SpellDescription$ Discard any number of cards, +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Y | SubAbility$ DBCleanup | StackDescription$ then draws that many cards plus one. | SpellDescription$ then draw that many cards plus one. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Y:Remembered$Amount.Plus.1 +Oracle:It becomes night. Discard any number of cards, then draw that many cards plus one. diff --git a/forge-gui/res/cardsfolder/upcoming/laid_to_rest.txt b/forge-gui/res/cardsfolder/upcoming/laid_to_rest.txt new file mode 100644 index 00000000000..2ba70d54e82 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/laid_to_rest.txt @@ -0,0 +1,10 @@ +Name:Laid to Rest +ManaCost:3 G +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Human.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a Human you control dies, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.YouCtrl+counters_GE1_P1P1 | Execute$ DBGainLife | TriggerDescription$ Whenever a creature you control with a +1/+1 counter on it dies, you gain 2 life. +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 +DeckNeeds:Type$Human & Ability$Counters +DeckHas:Ability$LifeGain +Oracle:Whenever a Human you control dies, draw a card.\nWhenever a creature you control with a +1/+1 counter on it dies, you gain 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/lantern_bearer_lanterns_lift.txt b/forge-gui/res/cardsfolder/upcoming/lantern_bearer_lanterns_lift.txt new file mode 100644 index 00000000000..9d44901737b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lantern_bearer_lanterns_lift.txt @@ -0,0 +1,22 @@ +Name:Lantern Bearer +ManaCost:U +Types:Creature Spirit +PT:1/1 +K:Flying +K:Disturb:2 U +AlternateMode:DoubleFaced +DeckHas:Ability$Graveyard +Oracle:Flying\nDisturb {2}{U} (You may cast this card from your graveyard transformed for its disturb cost.) + +ALTERNATE + +Name:Lanterns' Lift +ManaCost:no cost +Colors:blue +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Flying | Description$ Enchanted creature gets +1/+1 and has flying. +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead. +SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard +Oracle:Enchant creature\nEnchanted creature gets +1/+1 and has flying.\nIf Lanterns' Lift would be put into a graveyard from anywhere, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/lantern_flare.txt b/forge-gui/res/cardsfolder/upcoming/lantern_flare.txt new file mode 100644 index 00000000000..a8af859f7e3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lantern_flare.txt @@ -0,0 +1,11 @@ +Name:Lantern Flare +ManaCost:1 W +Types:Instant +A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ Y | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.] +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ Y +A:SP$ DealDamage | Cost$ X R W | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | PrecostDesc$ Cleave | SubAbility$ DBGainLifeC | CostDesc$ {X}{R}{W} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.) +SVar:DBGainLifeC:DB$ GainLife | Defined$ You | LifeAmount$ X +SVar:X:Count$xPaid +SVar:Y:Count$TypeYouCtrl.Creature +DeckHas:Ability$LifeGain +Oracle:Cleave {X}{R}{W} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nLantern Flare deals X damage to target creature or planeswalker and you gain X life. [X is the number of creatures you control.] diff --git a/forge-gui/res/cardsfolder/upcoming/lunar_rejection.txt b/forge-gui/res/cardsfolder/upcoming/lunar_rejection.txt new file mode 100644 index 00000000000..a1e4d1767a7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lunar_rejection.txt @@ -0,0 +1,8 @@ +Name:Lunar Rejection +ManaCost:1 U +Types:Instant +A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Hand | ValidTgts$ Creature.Wolf,Creature.Werewolf | TgtPrompt$ Select target Wolf or Werewolf | SubAbility$ DBDraw | SpellDescription$ Return target [Wolf or Werewolf] creature to its owner's hand. +A:SP$ ChangeZone | Cost$ 3 U | Origin$ Battlefield | Destination$ Hand | ValidTgts$ Creature | TgtPrompt$ Select target creature | PrecostDesc$ Cleave | CostDesc$ {3}{U} | NonBasicSpell$ True | SubAbility$ DBDraw | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.) | StackDescription$ Return {c:Targeted} to its owner's hand. +SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. +AI:RemoveDeck:Random +Oracle:Cleave {3}{U} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nReturn target [Wolf or Werewolf] creature to its owner's hand.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/magma_pummeler.txt b/forge-gui/res/cardsfolder/upcoming/magma_pummeler.txt new file mode 100644 index 00000000000..038e0fb97dd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/magma_pummeler.txt @@ -0,0 +1,15 @@ +Name:Magma Pummeler +ManaCost:X R R +Types:Creature Elemental +PT:0/0 +K:etbCounter:P1P1:X +SVar:X:Count$xPaid +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self+counters_GE1_P1P1 | ReplaceWith$ Counters | PreventionEffect$ True | AlwaysReplace$ True | Description$ If damage would be dealt to CARDNAME while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target. +SVar:Counters:DB$ RemoveCounter | Defined$ ReplacedTarget | CounterType$ P1P1 | CounterNum$ Y | RememberRemoved$ True | SubAbility$ DBImmediateTrigger +SVar:Y:ReplaceCount$DamageAmount +SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Execute$ TrigDamage | SubAbility$ DBCleanup | TriggerDescription$ When one or more counters are removed from CARDNAME this way, it deals that much damage to any target. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ Z +SVar:Z:Count$RememberedSize +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHas:Ability$Counters +Oracle:Magma Pummeler enters the battlefield with X +1/+1 counters on it.\nIf damage would be dealt to Magma Pummeler while it has a +1/+1 counter on it, prevent that damage and remove that many +1/+1 counters from it. When one or more counters are removed from Magma Pummeler this way, it deals that much damage to any target. diff --git a/forge-gui/res/cardsfolder/upcoming/markov_purifier.txt b/forge-gui/res/cardsfolder/upcoming/markov_purifier.txt new file mode 100644 index 00000000000..2f73ba6b2a3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/markov_purifier.txt @@ -0,0 +1,11 @@ +Name:Markov Purifier +ManaCost:1 W B +Types:Creature Vampire Cleric +PT:2/3 +K:Lifelink +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE1 | Execute$ TrigDraw | TriggerDescription$ At the beginning of your end step, if you gained life this turn, you may pay {2}. If you do, draw a card. +SVar:TrigDraw:AB$ Draw | Cost$ 2 | NumCards$ 1 | SpellDescription$ Draw a card. +SVar:X:Count$LifeYouGainedThisTurn +DeckHas:Ability$LifeGain +DeckHints:Ability$LifeGain +Oracle:Lifelink\nAt the beginning of your end step, if you gained life this turn, you may pay {2}. If you do, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/markov_retribution.txt b/forge-gui/res/cardsfolder/upcoming/markov_retribution.txt new file mode 100644 index 00000000000..6004c6a844c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/markov_retribution.txt @@ -0,0 +1,10 @@ +Name:Markov Retribution +ManaCost:2 R +Types:Sorcery +A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBPumpAll,DBBite +SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +1 | SpellDescription$ Creatures you control get +1/+0 until end of turn. +SVar:DBBite:DB$ Pump | ValidTgts$ Vampire.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target Vampire you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target Vampire you control deals damage equal to its power to another target creature. +SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature | AILogic$ PowerDmg | TgtPrompt$ Select another target creature | TargetUnique$ True | NumDmg$ X | DamageSource$ ParentTarget | StackDescription$ {c:ParentTarget} deals damage equal to its power to {c:ThisTargetedCard}. +SVar:X:ParentTargeted$CardPower +DeckHints:Type$Vampire +Oracle:Choose one or both —\n• Creatures you control get +1/+0 until end of turn.\n• Target Vampire you control deals damage equal to its power to another target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/markov_waltzer.txt b/forge-gui/res/cardsfolder/upcoming/markov_waltzer.txt new file mode 100644 index 00000000000..589ece30792 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/markov_waltzer.txt @@ -0,0 +1,9 @@ +Name:Markov Waltzer +ManaCost:2 R W +Types:Creature Vampire +PT:1/3 +K:Flying +K:Haste +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, up to two target creatures you control each get +1/+0 until end of turn. +SVar:TrigPump:DB$ Pump | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to two target creatures you control | NumAtt$ +1 +Oracle:Flying, haste\nAt the beginning of combat on your turn, up to two target creatures you control each get +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/mirrorhall_mimic_ghastly_mimicry.txt b/forge-gui/res/cardsfolder/upcoming/mirrorhall_mimic_ghastly_mimicry.txt new file mode 100644 index 00000000000..493b98516f8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mirrorhall_mimic_ghastly_mimicry.txt @@ -0,0 +1,25 @@ +Name:Mirrorhall Mimic +ManaCost:3 U +Types:Creature Spirit +PT:0/0 +K:ETBReplacement:Copy:DBCopy:Optional +SVar:DBCopy:DB$ Clone | Choices$ Creature.Other | ChoiceTitle$ Choose a creature on the battlefield to copy | AddTypes$ Spirit | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it's an Spirit in addition to its other types. +K:Disturb:3 U U +AlternateMode:DoubleFaced +DeckHas:Ability$Graveyard +Oracle:You may have Mirrorhall Mimic enter the battlefield as a copy of any creature on the battlefield, except it's a Spirit in addition to its other types.\nDisturb {3}{U}{U} (You may cast this card from your graveyard transformed for its disturb cost.) + +ALTERNATE + +Name:Ghastly Mimicry +ManaCost:no cost +Colors:blue +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ HighestEvaluation +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, create a token that's a copy of enchanted creature, except it's a Spirit in addition to its other types. +SVar:TrigCopy:DB$ CopyPermanent | Defined$ Enchanted | AddTypes$ Spirit | SpellDescription$ At the beginning of your upkeep, create a token that's a copy of enchanted creature, except it's a Spirit in addition to its other types. +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead. +SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard +DeckHas:Ability$Token +Oracle:Enchant creature\nAt the beginning of your upkeep, create a token that's a copy of enchanted creature, except it's a Spirit in addition to its other types.\nIf Ghastly Mimicry would be put into a graveyard from anywhere, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/mischievous_catgeist_catlike_curiosity.txt b/forge-gui/res/cardsfolder/upcoming/mischievous_catgeist_catlike_curiosity.txt new file mode 100644 index 00000000000..0a4f8ebe170 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mischievous_catgeist_catlike_curiosity.txt @@ -0,0 +1,24 @@ +Name:Mischievous Catgeist +ManaCost:1 U +Types:Creature Cat Spirit +PT:1/1 +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +K:Disturb:2 U +AlternateMode:DoubleFaced +DeckHas:Ability$Graveyard +Oracle:Whenever Mischievous Catgeist deals combat damage to a player, draw card.\nDisturb {2}{U} (You may cast this card from your graveyard transformed for its disturb cost.) + +ALTERNATE + +Name:Catlike Curiosity +ManaCost:no cost +Colors:blue +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Pump +T:Mode$ DamageDone | ValidSource$ Card.AttachedBy | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted creature deals combat damage to a player, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead. +SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard +Oracle:Enchant creature\nWhenever enchanted creature deals combat damage to a player, draw a card.\nIf Catlike Curiosity would be put into a graveyard from anywhere, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/moldgraf_millipede.txt b/forge-gui/res/cardsfolder/upcoming/moldgraf_millipede.txt new file mode 100644 index 00000000000..5359598e922 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/moldgraf_millipede.txt @@ -0,0 +1,11 @@ +Name:Moldgraf Millipede +ManaCost:4 G +Types:Creature Insect Horror +PT:2/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When CARDNAME enters the battlefield, mill three cards, then put a +1/+1 counter on CARDNAME for each creature card in your graveyard. (To mill a card, put the top card of your library into your graveyard.) +SVar:TrigMill:DB$ Mill | Defined$ You | NumCards$ 3 | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ X +SVar:X:Count$ValidGraveyard Creature.YouCtrl +SVar:NeedsToPlayVar:X GE3 +DeckHas:Ability$Mill & Ability$Counters +Oracle:When Moldgraf Millipede enters the battlefield, mill three cards, then put a +1/+1 counter on Moldgraf Millipede for each creature card in your graveyard. (To mill a card, put the top card of your library into your graveyard.) diff --git a/forge-gui/res/cardsfolder/upcoming/necroduality.txt b/forge-gui/res/cardsfolder/upcoming/necroduality.txt new file mode 100644 index 00000000000..fafd1818d00 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/necroduality.txt @@ -0,0 +1,9 @@ +Name:Necroduality +ManaCost:3 U +Types:Enchantment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Zombie.nonToken+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ Whenever a nontoken Zombie enters the battlefield under your control, create a token that's a copy of that creature. +SVar:TrigCopy:DB$ CopyPermanent | Defined$ TriggeredCard +DeckNeeds:Type$Zombie +DeckHas:Ability$Token +AI:RemoveDeck:Random +Oracle:Whenever a nontoken Zombie enters the battlefield under your control, create a token that's a copy of that creature. diff --git a/forge-gui/res/cardsfolder/upcoming/old_rutstein.txt b/forge-gui/res/cardsfolder/upcoming/old_rutstein.txt new file mode 100644 index 00000000000..cd8e3b05b42 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/old_rutstein.txt @@ -0,0 +1,13 @@ +Name:Old Rutstein +ManaCost:1 B G +Types:Legendary Creature Human Peasant +PT:1/4 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigMill | TriggerDescription$ When CARDNAME enters the battlefield or at the beginning of your upkeep, mill a card. If a land card is milled this way, create a Treasure token. If a creature card is milled this way, create a 1/1 green Insect creature token. If a noncreature, nonland card is milled this way, create a Blood token. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigMill | Secondary$ True | TriggerDescription$ When CARDNAME enters the battlefield or at the beginning of your upkeep, mill a card. If a land card is milled this way, create a Treasure token. If a creature card is milled this way, create a 1/1 green Insect creature token. If a noncreature, nonland card is milled this way, create a Blood token. +SVar:TrigMill:DB$ Mill | Defined$ You | NumCards$ 1 | RememberMilled$ True | SubAbility$ Treasure +SVar:Treasure:DB$ Token | ConditionDefined$ Remembered | ConditionPresent$ Land | TokenScript$ c_a_treasure_sac | SubAbility$ Insect +SVar:Insect:DB$ Token | ConditionDefined$ Remembered | ConditionPresent$ Creature | TokenScript$ g_1_1_insect | SubAbility$ Blood +SVar:Blood:DB$ Token | ConditionDefined$ Remembered | ConditionPresent$ Card.nonCreature+nonLand | TokenScript$ c_a_blood_draw | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHas:Ability$Mill & Ability$Token & Ability$Sacrifice & Type$Blood +Oracle:When Old Rutstein enters the battlefield or at the beginning of your upkeep, mill a card. If a land card is milled this way, create a Treasure token. If a creature card is milled this way, create a 1/1 green Insect creature token. If a noncreature, nonland card is milled this way, create a Blood token. diff --git a/forge-gui/res/cardsfolder/upcoming/ollenbock_escort.txt b/forge-gui/res/cardsfolder/upcoming/ollenbock_escort.txt new file mode 100644 index 00000000000..cbcfdb7ecd3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ollenbock_escort.txt @@ -0,0 +1,10 @@ +Name:Ollenbock Escort +ManaCost:W +Types:Creature Human Cleric +PT:1/1 +K:Vigilance +A:AB$ Pump | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.YouCtrl+counters_GE1_P1P1 | TgtPrompt$ Select target creature you control with a +1/+1 counter on it | KW$ Lifelink & Indestructible | SpellDescription$ Target creature you control with a +1/+1 counter on it gains lifelink and indestructible until end of turn. +AI:RemoveDeck:Random +DeckNeeds:Ability$Counters +DeckHas:Ability$Sacrifice & Ability$LifeGain +Oracle:Vigilance\nSacrifice Ollenbock Escort: Target creature you control with a +1/+1 counter on it gains lifelink and indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/parasitic_grasp.txt b/forge-gui/res/cardsfolder/upcoming/parasitic_grasp.txt new file mode 100644 index 00000000000..8c805304c94 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/parasitic_grasp.txt @@ -0,0 +1,8 @@ +Name:Parasitic Grasp +ManaCost:1 B +Types:Instant +A:SP$ DealDamage | NumDmg$ 3 | ValidTgts$ Creature.Human | TgtPrompt$ Select target Human creature | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals 3 damage to target [Human] creature. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 3 | SpellDescription$ You gain 3 life. +A:SP$ DealDamage | Cost$ 1 B B | NumDmg$ 3 | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBGainLife | PrecostDesc$ Cleave | CostDesc$ {1}{B}{B} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.) +DeckHas:Ability$LifeGain +Oracle:Cleave {1}{B}{B} (You may cast this spell for its cleave cost. If you do, remove the words in square brackets.)\nParasitic Grasp deals 3 damage to target [Human] creature. You gain 3 life. diff --git a/forge-gui/res/cardsfolder/upcoming/patchwork_crawler.txt b/forge-gui/res/cardsfolder/upcoming/patchwork_crawler.txt new file mode 100644 index 00000000000..2c3c9a4317a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/patchwork_crawler.txt @@ -0,0 +1,12 @@ +Name:Patchwork Crawler +ManaCost:1 U +Types:Creature Zombie Horror +PT:1/2 +A:AB$ ChangeZone | Cost$ 2 U | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select target creature from your graveyard | SubAbility$ DBCounter | SpellDescription$ Exile target creature from your graveyard and put a +1/+1 counter on CARDNAME. +SVar:DBCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | Defined$ Self +T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBCleanup | Static$ True +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOf$ Creature.ExiledWithSource | GainsAbilitiesOfZones$ Exile | Description$ CARDNAME has all activated abilities of all creature cards exiled with it. +DeckHas:Ability$Counters & Ability$Graveyard +DeckHints:Ability$Discard +Oracle:{2}{U}: Exile target creature card from your graveyard and put a +1/+1 counter on Patchwork Crawler.\nPatchwork Crawler has all activated abilities of all creature cards exiled with it. diff --git a/forge-gui/res/cardsfolder/upcoming/radiant_grace_radiant_restraints.txt b/forge-gui/res/cardsfolder/upcoming/radiant_grace_radiant_restraints.txt new file mode 100644 index 00000000000..177336131b5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/radiant_grace_radiant_restraints.txt @@ -0,0 +1,23 @@ +Name:Radiant Grace +ManaCost:W +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddKeyword$ Vigilance | Description$ Enchanted creature gets +1/+0 and has vigilance. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.AttachedBy | Execute$ TrigCurse | TriggerDescription$ When enchanted creature dies, return CARDNAME to the battlefield transformed under your control attached to target opponent. +SVar:TrigCurse:DB$ Pump | ValidTgts$ Opponent | TgtPrompt$ Choose a opponent | IsCurse$ True | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Defined$ CorrectedSelf | Origin$ Graveyard | Destination$ Battlefield | AttachedToPlayer$ ParentTarget | Transformed$ True | GainControl$ True | AILogic$ Curse +AlternateMode:DoubleFaced +Oracle:Enchant creature\nEnchanted creature gets +1/+0 and has vigilance.\nWhen enchanted creature dies, return Radiant Grace to the battlefield transformed under your control attached to target opponent. + +ALTERNATE + +Name:Radiant Restraints +ManaCost:no cost +Colors:white +Types:Enchantment Aura Curse +K:Enchant player +A:SP$ Attach | ValidTgts$ Player | AILogic$ Curse +R:Event$ Moved | ValidCard$ Creature.EnchantedPlayerCtrl | Destination$ Battlefield | ReplaceWith$ ETBTapped | ActiveZones$ Battlefield | Description$ Creatures your opponents control enter the battlefield tapped. +SVar:ETBTapped:DB$ ChangeZone | Origin$ All | Destination$ Battlefield | Tapped$ True | Defined$ ReplacedCard +Oracle:Creatures enchanted player controls enter the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/upcoming/reckless_impulse.txt b/forge-gui/res/cardsfolder/upcoming/reckless_impulse.txt new file mode 100644 index 00000000000..f3289a7a5ab --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/reckless_impulse.txt @@ -0,0 +1,8 @@ +Name:Reckless Impulse +ManaCost:1 R +Types:Sorcery +A:SP$ Dig | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | Imprint$ True | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Exile the top two cards of your library. +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | Duration$ UntilTheEndOfYourNextTurn | StackDescription$ SpellDescription | SpellDescription$ Until the end of your next turn, you may play those cards. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until the end of your next turn, you may play the exiled cards. +Oracle:Exile the top two cards of your library. Until the end of your next turn, you may play those cards. diff --git a/forge-gui/res/cardsfolder/upcoming/reclusive_taxidermist.txt b/forge-gui/res/cardsfolder/upcoming/reclusive_taxidermist.txt new file mode 100644 index 00000000000..4d55a7c4807 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/reclusive_taxidermist.txt @@ -0,0 +1,8 @@ +Name:Reclusive Taxidermist +ManaCost:1 G +Types:Creature Human Druid +PT:1/2 +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddToughness$ 2 | IsPresent$ Creature | PresentCompare$ GE4 | PresentZone$ Graveyard | Description$ CARDNAME gets +3/+2 as long as there are four or more creature cards in your graveyard. +A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. +DeckHints:Ability$Graveyard & Ability$Discard +Oracle:Reclusive Taxidermist gets +3/+2 as long as there are four or more creature cards in your graveyard.\n{T}: Add one mana of any color. diff --git a/forge-gui/res/cardsfolder/upcoming/resistance_squad.txt b/forge-gui/res/cardsfolder/upcoming/resistance_squad.txt new file mode 100644 index 00000000000..ba74e33c079 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/resistance_squad.txt @@ -0,0 +1,8 @@ +Name:Resistance Squad +ManaCost:2 W +Types:Creature Human Soldier +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Human.Other+YouCtrl | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, if you control another Human, draw a card. +SVar:TrigDraw:DB$ Draw | NumCards$ 1 +DeckNeeds:Type$Human +Oracle:When Resistance Squad enters the battlefield, if you control another Human, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/retrieve.txt b/forge-gui/res/cardsfolder/upcoming/retrieve.txt new file mode 100644 index 00000000000..1aa9072c706 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/retrieve.txt @@ -0,0 +1,7 @@ +Name:Retrieve +ManaCost:2 G +Types:Sorcery +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select up to one target creature card in your graveyard | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.YouOwn | SubAbility$ DBReturn | StackDescription$ SpellDescription | SpellDescription$ Return up to one target creature card +SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Land.YouOwn | TgtPrompt$ Select up to one target noncreature permanent card in your graveyard | SubAbility$ DBExile | StackDescription$ SpellDescription | SpellDescription$ and up to one target noncreature permanent card +SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | StackDescription$ SpellDescription | SpellDescription$ to your hand. Exile CARDNAME. +Oracle:Return up to one target creature card and up to one target noncreature permanent card from your graveyard to your hand. Exile Retrieve. diff --git a/forge-gui/res/cardsfolder/upcoming/runebound_wolf.txt b/forge-gui/res/cardsfolder/upcoming/runebound_wolf.txt new file mode 100644 index 00000000000..805cdf38265 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/runebound_wolf.txt @@ -0,0 +1,8 @@ +Name:Runebound Wolf +ManaCost:1 R +Types:Creature Wolf +PT:2/2 +A:AB$ DealDamage | Cost$ 3 R T | NumDmg$ X | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | SpellDescription$ CARDNAME deals damage equal to the number of Wolves and Werewolves you control to target opponent. +SVar:X:Count$Valid Wolf.YouCtrl,Werewolf.YouCtrl +DeckHints:Type$Wolf|Werewolf +Oracle:{3}{R}, {T}: Runebound Wolf deals damage equal to the number of Wolves and Werewolves you control to target opponent. diff --git a/forge-gui/res/cardsfolder/upcoming/sanctify.txt b/forge-gui/res/cardsfolder/upcoming/sanctify.txt new file mode 100644 index 00000000000..f1082f6ec75 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sanctify.txt @@ -0,0 +1,8 @@ +Name:Sanctify +ManaCost:1 W +Types:Sorcery +A:SP$ Destroy | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SubAbility$ DBGainLife | SpellDescription$ Destroy target artifact or enchantment. You gain 3 life. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 3 +DeckHas:Ability$LifeGain +AI:RemoveDeck:Random +Oracle:Destroy target artifact or enchantment. You gain 3 life. diff --git a/forge-gui/res/cardsfolder/upcoming/sawblade_slinger.txt b/forge-gui/res/cardsfolder/upcoming/sawblade_slinger.txt new file mode 100644 index 00000000000..6bc7ed57764 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sawblade_slinger.txt @@ -0,0 +1,10 @@ +Name:Sawblade Slinger +ManaCost:3 G +Types:Creature Human Archer +PT:4/3 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY +SVar:TrigCharm:DB$ Charm | Choices$ Destroy,Fight | MinCharmNum$ 0 +SVar:Destroy:DB$ Destroy | ValidTgts$ Artifact.OppCtrl | TgtPrompt$ Select target artifact an opponent controls | SpellDescription$ Destroy target artifact an opponent controls. +SVar:Fight:DB$ Fight | Defined$ Self | ValidTgts$ Zombie.OppCtrl | TgtPrompt$ Select target Zombie an opponent controls | SpellDescription$ CARDNAME fights target Zombie an opponent controls. +AI:RemoveDeck:Random +Oracle:When Sawblade Slinger enters the battlefield, choose up to one —\n• Destroy target artifact an opponent controls.\n• Sawblade Slinger fights target Zombie an opponent controls. diff --git a/forge-gui/res/cardsfolder/upcoming/scattered_thoughts.txt b/forge-gui/res/cardsfolder/upcoming/scattered_thoughts.txt new file mode 100644 index 00000000000..3631dbe3f42 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/scattered_thoughts.txt @@ -0,0 +1,6 @@ +Name:Scattered Thoughts +ManaCost:3 U +Types:Instant +A:SP$ Dig | DigNum$ 4 | ChangeNum$ 2 | DestinationZone2$ Graveyard | StackDescription$ SpellDescription | SpellDescription$ Look at the top four cards of your library. Put two of those cards into your hand and the rest into your graveyard. +DeckHas:Ability$Graveyard +Oracle:Look at the top four cards of your library. Put two of those cards into your hand and the rest into your graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/screaming_swarm.txt b/forge-gui/res/cardsfolder/upcoming/screaming_swarm.txt new file mode 100644 index 00000000000..b532bf245df --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/screaming_swarm.txt @@ -0,0 +1,12 @@ +Name:Screaming Swarm +ManaCost:5 U +Types:Creature Bird Horror +PT:4/4 +K:Flying +Oracle:Flying +T:Mode$ AttackersDeclared | ValidAttackers$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigMill | TriggerDescription$ Whenever you attack with one or more creatures, target player mills that many cards. (To mill a card, a player puts the top card of their library into their graveyard.) +SVar:TrigMill:DB$ Mill | NumCards$ X | ValidTgts$ Player | TgtPrompt$ Choose a player +SVar:X:TriggerObjectsAttackers$Valid Creature.YouCtrl +A:AB$ ChangeZone | Cost$ 2 U | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 1 | ActivationZone$ Graveyard | StackDescription$ SpellDescription | SpellDescription$ Put CARDNAME from your graveyard into your library second from the top. +DeckHas:Ability$Mill & Ability$Graveyard +Oracle:Whenever you attack with one or more creatures, target player mills that many cards. (To mill a card, a player puts the top card of their library into their graveyard.)\n{2}{U}: Put Screaming Swarm from your graveyard into your library second from the top. diff --git a/forge-gui/res/cardsfolder/upcoming/sigardas_imprisonment.txt b/forge-gui/res/cardsfolder/upcoming/sigardas_imprisonment.txt new file mode 100644 index 00000000000..ffc534c6b77 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sigardas_imprisonment.txt @@ -0,0 +1,11 @@ +Name:Sigarda's Imprisonment +ManaCost:2 W +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Curse +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ Enchanted creature can't attack or block. +A:AB$ ChangeZone | Cost$ 4 W | Defined$ Enchanted | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBToken | SpellDescription$ Exile enchanted creature. +SVar:DBToken:DB$ Token | TokenScript$ c_a_blood_draw | SpellDescription$ Create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") +SVar:NonStackingAttachEffect:True +DeckHas:Ability$Token & Ability$Sacrifice & Type$Blood +Oracle:Enchant creature\nEnchanted creature can't attack or block.\n{4}{W}: Exile enchanted creature. Create a Blood token. (It's an artifact with "{1}, {T}, Discard a card, Sacrifice this artifact: Draw a card.") diff --git a/forge-gui/res/cardsfolder/upcoming/sigardian_paladin.txt b/forge-gui/res/cardsfolder/upcoming/sigardian_paladin.txt new file mode 100644 index 00000000000..a31376d48aa --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sigardian_paladin.txt @@ -0,0 +1,10 @@ +Name:Sigardian Paladin +ManaCost:2 G W +Types:Creature Human Knight +PT:4/4 +S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Trample & Lifelink | CheckSVar$ X | Description$ As long as you've put one or more +1/+1 counters on a creature this turn, Sigardian Paladin has trample and lifelink. +SVar:X:Count$CountersAddedThisTurn P1P1 You Creature +A:AB$ Pump | Cost$ 1 G W | ValidTgts$ Creature.YouCtrl+counters_GE1_P1P1 | TgtPrompt$ Select target creature with a +1/+1 counter on it | KW$ Trample & Lifelink | SpellDescription$ Target creature you control with a +1/+1 counter on it gains trample and lifelink until end of turn. +DeckNeeds:Ability$Counters +DeckHas:Ability$LifeGain +Oracle:As long as you've put one or more +1/+1 counters on a creature this turn, Sigardian Paladin has trample and lifelink.\n{1}{G}{W}: Target creature you control with a +1/+1 counter on it gains trample and lifelink until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/skulking_killer.txt b/forge-gui/res/cardsfolder/upcoming/skulking_killer.txt new file mode 100644 index 00000000000..0ee86cbf421 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/skulking_killer.txt @@ -0,0 +1,9 @@ +Name:Skulking Killer +ManaCost:3 B +Types:Creature Vampire Assassin +PT:4/2 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature an opponent controls gets -2/-2 until end of turn if that opponent controls no other creatures. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumAtt$ -2 | NumDef$ -2 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 +SVar:X:Count$Valid Creature.TargetedControllerCtrl +AI:RemoveDeck:Random +Oracle:When Skulking Killer enters the battlefield, target creature an opponent controls gets -2/-2 until end of turn if that opponent controls no other creatures. diff --git a/forge-gui/res/cardsfolder/upcoming/skull_skaab.txt b/forge-gui/res/cardsfolder/upcoming/skull_skaab.txt new file mode 100644 index 00000000000..81808e83cb0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/skull_skaab.txt @@ -0,0 +1,10 @@ +Name:Skull Skaab +ManaCost:U B +Types:Creature Zombie +PT:2/2 +K:Exploit +T:Mode$ Exploited | ValidCard$ Creature.nonToken | ValidSource$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a creature you control exploits a nontoken creature, create a 2/2 black Zombie creature token. +SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie +DeckHas:Ability$Token & Ability$Sacrifice +DeckHints:Keyword$Exploit +Oracle:Exploit (When this creature enters the battlefield, you may sacrifice a creature.)\nWhenever a creature you control exploits a nontoken creature, create a 2/2 black Zombie creature token. diff --git a/forge-gui/res/cardsfolder/upcoming/spiked_ripsaw.txt b/forge-gui/res/cardsfolder/upcoming/spiked_ripsaw.txt new file mode 100644 index 00000000000..c70c48aea79 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spiked_ripsaw.txt @@ -0,0 +1,9 @@ +Name:Spiked Ripsaw +ManaCost:2 G +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddToughness$ 3 | AddSVar$ AE | Description$ Equipped creature gets +3/+3. +T:Mode$ Attacks | ValidCard$ Creature.EquippedBy | Execute$ TrigPump | TriggerDescription$ Whenever equipped creature attacks, you may sacrifice a Forest. If you do, that creature gains trample until end of turn. +SVar:TrigPump:AB$ Pump | Cost$ Sac<1/Forest> | Defined$ TriggeredAttacker | KW$ Trample +K:Equip:3 +SVar:AE:SVar:HasAttackEffect:TRUE +Oracle:Equipped creature gets +3/+3.\nWhenever equipped creature attacks, you may sacrifice a Forest. If you do, that creature gains trample until end of turn.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/stormchaser_drake.txt b/forge-gui/res/cardsfolder/upcoming/stormchaser_drake.txt new file mode 100644 index 00000000000..d9a6da2fadb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stormchaser_drake.txt @@ -0,0 +1,8 @@ +Name:Stormchaser Drake +ManaCost:1 U +Types:Creature Drake +PT:2/1 +K:Flying +T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ Card.YouCtrl | SourceType$ Spell | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME becomes the target of a spell you control, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +Oracle:Flying\nWhenever Stormchaser Drake becomes the target of a spell you control, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/strefan_maurer_progenitor.txt b/forge-gui/res/cardsfolder/upcoming/strefan_maurer_progenitor.txt index cd5b95581c2..a1207c697b4 100644 --- a/forge-gui/res/cardsfolder/upcoming/strefan_maurer_progenitor.txt +++ b/forge-gui/res/cardsfolder/upcoming/strefan_maurer_progenitor.txt @@ -8,7 +8,7 @@ SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ c_a_blood_draw SVar:X:PlayerCountPlayers$HasPropertyLostLifeThisTurn T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ Whenever NICKNAME attacks, you may sacrifice two Blood tokens. If you do, you may put a Vampire card from your hand onto the battlefield tapped and attacking. It gains indestructible until end of turn. SVar:TrigChangeZone:AB$ ChangeZone | Cost$ Sac<2/Blood.token/Blood token> | Origin$ Hand | Destination$ Battlefield | SelectPrompt$ You may select a Vampire card from your hand | ChangeType$ Vampire | Tapped$ True | Attacking$ True | RememberChanged$ True | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Indestructible | SubAbility$ DBCleanup +SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ Indestructible | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:HasAttackEffect:TRUE DeckHas:Ability$Token & Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/upcoming/undead_butler.txt b/forge-gui/res/cardsfolder/upcoming/undead_butler.txt new file mode 100644 index 00000000000..5a5d43dca2e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/undead_butler.txt @@ -0,0 +1,12 @@ +Name:Undead Butler +ManaCost:1 B +Types:Creature Zombie +PT:1/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When CARDNAME enters the battlefield, mill three cards. (Put the top three cards of your library into your graveyard.) +SVar:TrigMill:DB$ Mill | NumCards$ 3 | Defined$ You +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigExile | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may exile it. When you do, return target creature card from your graveyard to your hand. +SVar:TrigExile:DB$ ChangeZone | Destination$ Exile | Defined$ TriggeredNewCardLKICopy | RememberChanged$ True | SubAbility$ DBImmediateTrig +SVar:DBImmediateTrig:DB$ ImmediateTrigger | Execute$ TrigReturn | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup | TriggerDescription$ When you do, return target creature card from your graveyard to your hand. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select target creature card in your graveyard +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:When Undead Butler enters the battlefield, mill three cards. (Put the top three cards of your library into your graveyard.)\nWhen Undead Butler dies, you may exile it. When you do, return target creature card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/unhallowed_phalanx.txt b/forge-gui/res/cardsfolder/upcoming/unhallowed_phalanx.txt new file mode 100644 index 00000000000..52d20ed6ff1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/unhallowed_phalanx.txt @@ -0,0 +1,6 @@ +Name:Unhallowed Phalanx +ManaCost:4 B +Types:Creature Zombie Soldier +PT:1/13 +K:CARDNAME enters the battlefield tapped. +Oracle:Unhallowed Phalanx enters the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/upcoming/voice_of_the_blessed.txt b/forge-gui/res/cardsfolder/upcoming/voice_of_the_blessed.txt new file mode 100644 index 00000000000..46f428fb2d3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/voice_of_the_blessed.txt @@ -0,0 +1,11 @@ +Name:Voice of the Blessed +ManaCost:W W +Types:Creature Spirit Cleric +PT:2/2 +T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +S:Mode$ Continuous | Affected$ Card.Self+counters_GE4_P1P1 | AddKeyword$ Flying & Vigilance | Description$ As long as CARDNAME has four or more +1/+1 counters on it, it has flying and vigilance. +S:Mode$ Continuous | Affected$ Card.Self+counters_GE10_P1P1 | AddKeyword$ Indestructible | Description$ As long as CARDNAME has ten or more +1/+1 counters on it, it has indestructible. +DeckHints:Ability$LifeGain +DeckHas:Ability$Counters +Oracle:Whenever you gain life, put a +1/+1 counter on Voice of the Blessed.\nAs long as Voice of the Blessed has four or more +1/+1 counters on it, it has flying and vigilance.\nAs long as Voice of the Blessed has ten or more +1/+1 counters on it, it has indestructible. diff --git a/forge-gui/res/cardsfolder/upcoming/voltaic_visionary_volt_charged_berserker.txt b/forge-gui/res/cardsfolder/upcoming/voltaic_visionary_volt_charged_berserker.txt new file mode 100644 index 00000000000..59bb7222dcc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/voltaic_visionary_volt_charged_berserker.txt @@ -0,0 +1,28 @@ +Name:Voltaic Visionary +ManaCost:1 R +Types:Creature Human Wizard +PT:3/1 +A:AB$ DealDamage | Cost$ T | NumDmg$ 2 | Defined$ You | SorcerySpeed$ True | SubAbility$ DBExile | SpellDescription$ CARDNAME deals 2 damage to you. +SVar:DBExile:DB$ Dig | Defined$ You | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | Imprint$ True | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Exile the top card of your library. +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | StackDescription$ SpellDescription | SpellDescription$ You may play that card this turn. Activate only as a sorcery. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play the exiled card this turn. +T:Mode$ SpellCast | ValidCard$ Card.IsImprinted | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ Whenever you play a card exiled with CARDNAME, transform it. +T:Mode$ LandPlayed | ValidCard$ Land.IsImprinted+YouCtrl | Execute$ TrigTransform | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever you play a card exiled with CARDNAME, transform it. +SVar:TrigTransform:DB$ SetState | Defined$ Self | Mode$ Transform +T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBClear | Static$ True +SVar:DBClear:DB$ Cleanup | ClearImprinted$ True +T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsImprinted+ExiledWithSource | Execute$ DBForget +SVar:DBForget:DB$ Pump | ForgetImprinted$ TriggeredCard +AlternateMode:DoubleFaced +Oracle:{T}: Voltaic Visionary deals 2 damage to you. Exile the top card of your library. You may play that card this turn. Activate only as a sorcery.\nWhenever you play a card exiled with Voltaic Visionary, transform it. + +ALTERNATE + +Name:Volt-Charged Berserker +ManaCost:no cost +Colors:red +Types:Creature Human Berserker +PT:4/3 +K:CARDNAME can't block. +Oracle:Volt-Charged Berserker can't block. diff --git a/forge-gui/res/cardsfolder/upcoming/wandering_mind.txt b/forge-gui/res/cardsfolder/upcoming/wandering_mind.txt new file mode 100644 index 00000000000..da5868dee0c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wandering_mind.txt @@ -0,0 +1,8 @@ +Name:Wandering Mind +ManaCost:1 U R +Types:Creature Horror +PT:2/1 +K:Flying +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, look at the top six cards of your library. You may reveal a noncreature, nonland card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 6 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Card.nonCreature+nonLand | RestRandomOrder$ True +Oracle:Flying\nWhen Wandering Mind enters the battlefield, look at the top six cards of your library. You may reveal a noncreature, nonland card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/upcoming/weaver_of_blossoms_blossom_clad_werewolf.txt b/forge-gui/res/cardsfolder/upcoming/weaver_of_blossoms_blossom_clad_werewolf.txt new file mode 100644 index 00000000000..66dec84cb53 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/weaver_of_blossoms_blossom_clad_werewolf.txt @@ -0,0 +1,19 @@ +Name:Weaver of Blossoms +ManaCost:2 G +Types:Creature Human Werewolf +PT:2/3 +A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. +K:Daybound +AlternateMode:DoubleFaced +Oracle:{T}: Add one mana of any color.\nDaybound (If a player casts no spells during their own turn, it becomes night next turn.) + +ALTERNATE + +Name:Blossom-Clad Werewolf +ManaCost:no cost +Colors:green +Types:Creature Werewolf +PT:3/4 +A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 2 | SpellDescription$ Add two mana of any one color. +K:Nightbound +Oracle:{T}: Add two mana of any one color.\nNightbound (If a player casts at least two spells during their own turn, it becomes day next turn.) diff --git a/forge-gui/res/cardsfolder/upcoming/wedding_security.txt b/forge-gui/res/cardsfolder/upcoming/wedding_security.txt new file mode 100644 index 00000000000..12c6cc951d9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wedding_security.txt @@ -0,0 +1,11 @@ +Name:Wedding Security +ManaCost:3 B B +Types:Creature Vampire Soldier +PT:4/4 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounter | IsPresent$ Blood.token+YouCtrl | TriggerDescription$ Whenever CARDNAME attacks, you may sacrifice a Blood token. If you do, put a +1/+1 counter on CARDNAME and draw a card. +SVar:TrigPutCounter:AB$ PutCounter | Cost$ Sac<1/Blood.token/Blood token> | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | NumCards$ 1 +DeckNeeds:Type$Blood +DeckHas:Ability$Counters & Ability$Sacrifice +SVar:HasAttackEffect:TRUE +Oracle:Whenever Wedding Security attacks, you may sacrifice a Blood token. If you do, put a +1/+1 counter on Wedding Security and draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/whispering_wizard.txt b/forge-gui/res/cardsfolder/upcoming/whispering_wizard.txt new file mode 100644 index 00000000000..67533617bc2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/whispering_wizard.txt @@ -0,0 +1,9 @@ +Name:Whispering Wizard +ManaCost:3 U +Types:Creature Human Wizard +PT:3/2 +T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | ActivationLimit$ 1 | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast a noncreature spell, create a 1/1 white Spirit creature token with flying. This ability triggers only once each turn. +SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_spirit_flying +SVar:BuffedBy:Card.nonLand+nonCreature +DeckHas:Ability$Token +Oracle:Whenever you cast a noncreature spell, create a 1/1 white Spirit creature token with flying. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/witness_the_future.txt b/forge-gui/res/cardsfolder/upcoming/witness_the_future.txt new file mode 100644 index 00000000000..9931aa84542 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/witness_the_future.txt @@ -0,0 +1,8 @@ +Name:Witness the Future +ManaCost:2 U +Types:Sorcery +A:SP$ Pump | ValidTgts$ Player | TgtPrompt$ Select target player | SubAbility$ DBChangeZone | StackDescription$ {p:Targeted} | SpellDescription$ Target player +SVar:DBChangeZone:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 4 | TargetsWithDefinedController$ ParentTarget | Origin$ Graveyard | Destination$ Library | Shuffle$ True | TgtPrompt$ Select up to four target cards | ValidTgts$ Card | SubAbility$ DBDig | StackDescription$ SpellDescription | SpellDescription$ shuffles up to four target cards from their graveyard into their library. +SVar:DBDig:DB$ Dig | DigNum$ 4 | ChangeNum$ 1 | RestRandomOrder$ True | StackDescription$ SpellDescription | SpellDescription$ You look at the top four cards of your library, then put one of those cards into your hand and the rest on the bottom of your library in a random order. +AI:RemoveDeck:All +Oracle:Target player shuffles up to four target cards from their graveyard into their library. You look at the top four cards of your library, then put one of those cards into your hand and the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/v/vexing_beetle.txt b/forge-gui/res/cardsfolder/v/vexing_beetle.txt index e5b2daa672f..3985baf27b3 100644 --- a/forge-gui/res/cardsfolder/v/vexing_beetle.txt +++ b/forge-gui/res/cardsfolder/v/vexing_beetle.txt @@ -2,8 +2,7 @@ Name:Vexing Beetle ManaCost:4 G Types:Creature Insect PT:3/3 -K:CARDNAME can't be countered. +K:This spell can't be countered. S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddToughness$ 3 | CheckSVar$ X | SVarCompare$ EQ0 | Description$ CARDNAME gets +3/+3 as long as no opponent controls a creature. SVar:X:Count$Valid Creature.OppCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/vexing_beetle.jpg Oracle:This spell can't be countered.\nVexing Beetle gets +3/+3 as long as no opponent controls a creature. diff --git a/forge-gui/res/cardsfolder/v/vexing_shusher.txt b/forge-gui/res/cardsfolder/v/vexing_shusher.txt index b1498c592fa..bda760b11b3 100644 --- a/forge-gui/res/cardsfolder/v/vexing_shusher.txt +++ b/forge-gui/res/cardsfolder/v/vexing_shusher.txt @@ -2,7 +2,7 @@ Name:Vexing Shusher ManaCost:RG RG Types:Creature Goblin Shaman PT:2/2 -K:CARDNAME can't be countered. +K:This spell can't be countered. A:AB$ Pump | Cost$ RG | ValidTgts$ Card.inZoneStack | TgtZone$ Stack | PumpZone$ Stack | KW$ HIDDEN CARDNAME can't be countered. | SpellDescription$ Target spell can't be countered. AI:RemoveDeck:All Oracle:This spell can't be countered.\n{R/G}: Target spell can't be countered. diff --git a/forge-gui/res/cardsfolder/v/volcanic_fallout.txt b/forge-gui/res/cardsfolder/v/volcanic_fallout.txt index 041620652f1..83f0bccd95f 100644 --- a/forge-gui/res/cardsfolder/v/volcanic_fallout.txt +++ b/forge-gui/res/cardsfolder/v/volcanic_fallout.txt @@ -1,7 +1,6 @@ Name:Volcanic Fallout ManaCost:1 R R Types:Instant -K:CARDNAME can't be countered. +K:This spell can't be countered. A:SP$ DamageAll | Cost$ 1 R R | NumDmg$ 2 | ValidCards$ Creature | ValidPlayers$ Player | ValidDescription$ each creature and each player. | SpellDescription$ CARDNAME deals 2 damage to each creature and each player. -SVar:Picture:http://www.wizards.com/global/images/magic/general/volcanic_fallout.jpg Oracle:This spell can't be countered.\nVolcanic Fallout deals 2 damage to each creature and each player. diff --git a/forge-gui/res/cardsfolder/w/welkin_hawk.txt b/forge-gui/res/cardsfolder/w/welkin_hawk.txt index d7420a30f6e..b07b52740ad 100644 --- a/forge-gui/res/cardsfolder/w/welkin_hawk.txt +++ b/forge-gui/res/cardsfolder/w/welkin_hawk.txt @@ -3,8 +3,7 @@ ManaCost:1 W Types:Creature Bird PT:1/1 K:Flying -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may search your library for a card named CARDNAME, reveal that card, put it into your hand, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.namedWelkin Hawk | ChangeNum$ 1 | ShuffleNonMandatory$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME dies, you may search your library for a card named Welkin Hawk, reveal that card, put it into your hand, then shuffle. +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.namedWelkin Hawk | ChangeNum$ 1 DeckHints:Name$Welkin Hawk -SVar:Picture:http://www.wizards.com/global/images/magic/general/welkin_hawk.jpg Oracle:Flying\nWhen Welkin Hawk dies, you may search your library for a card named Welkin Hawk, reveal that card, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/w/wreak_havoc.txt b/forge-gui/res/cardsfolder/w/wreak_havoc.txt index 4b25b738838..2affa3b5482 100644 --- a/forge-gui/res/cardsfolder/w/wreak_havoc.txt +++ b/forge-gui/res/cardsfolder/w/wreak_havoc.txt @@ -2,6 +2,5 @@ Name:Wreak Havoc ManaCost:2 R G Types:Sorcery A:SP$ Destroy | Cost$ 2 R G | ValidTgts$ Artifact,Land | TgtPrompt$ Select target artifact or land | SpellDescription$ Destroy target artifact or land. -K:CARDNAME can't be countered. -SVar:Picture:http://www.wizards.com/global/images/magic/general/wreak_havoc.jpg +K:This spell can't be countered. Oracle:This spell can't be countered.\nDestroy target artifact or land. diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Arcanis the Omnipotent.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Arcanis the Omnipotent.dck new file mode 100644 index 00000000000..98afe6032c5 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Arcanis the Omnipotent.dck @@ -0,0 +1,50 @@ +[metadata] +Name=Arcanis the Omnipotent +[Avatar] +1 Arcanis, the Omnipotent Avatar|VAN +[Main] +1 Angel of Serenity|C15 +1 Azorius Arrester|RTR +1 Azorius Chancery|C13 +1 Azorius Guildgate|C13 +1 Azorius Herald|C13 +1 Azorius Justiciar|RTR +1 Council of the Absolute|DGM +1 Court Hussar|DIS +1 Court Street Denizen|GTC +1 Crystal Seer|GPT +1 Deputy of Acquittals|DGM +1 Faerie Impostor|RTR +1 Hallowed Fountain|RTR +1 Island|RTR|1 +1 Island|RTR|2 +1 Island|RTR|3 +1 Island|RTR|4 +1 Isperia's Skywatch|RTR +1 Keymaster Rogue|GTC +1 Lavinia of the Tenth|DGM +1 Luminate Primordial|GTC +1 Lyev Skyknight|RTR +1 Order of the Stars|GPT +1 Pillar of the Paruns|DIS +1 Plains|RTR|1 +2 Plains|RTR|3 +2 Plains|RTR|5 +1 Prahv, Spires of Order|DIS +1 Realmwright|GTC +1 Sage's Row Denizen|GTC +2 Soulsworn Spirit|RTR +1 Spawnbroker|RAV +1 Transguild Promenade|C13 +1 Urbis Protector|GTC +1 Vedalken Dismisser|RAV +1 Voidwielder|RTR +1 Walking Archive|DIS +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azor's Elocutors.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azor's Elocutors.dck new file mode 100644 index 00000000000..284c51f22be --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azor's Elocutors.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Azor's Elocutors +[Main] +1 AEtherize|C15 +1 AEtherling|DGM +1 AEthermage's Touch|C13 +2 Archon of the Triumvirate|RTR +1 Azor's Elocutors|RTR +1 Azorius Chancery|MM2 +1 Azorius Charm|RTR +1 Azorius Cluestone|DGM +1 Azorius Guildgate|C13 +1 Azorius Guildmage|COM +1 Azorius Keyrune|C13 +1 Azorius Signet|ARC +1 Blazing Archon|PD3 +1 Condemn|C14 +1 Devouring Light|M15 +1 Droning Bureaucrats|GPT +1 Grand Arbiter Augustin IV|MMA +1 Hallowed Fountain|EXP +1 Inaction Injunction|RTR +2 Island|C15|1 +2 Island|C15|4 +1 Isperia, Supreme Judge|RTR +1 Jace, Architect of Thought|DDM +1 Lavinia of the Tenth|DGM +1 Lyev Decree|DGM +1 Martial Law|RTR +1 New Prahv Guildmage|RTR +1 Pillar of the Paruns|DIS +3 Plains|C15|1 +1 Plains|C15|3 +1 Prahv, Spires of Order|DIS +1 Soulsworn Jury|DIS +1 Sphinx's Revelation|RTR +1 Thespian's Stage|GTC +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azorious Detain.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azorious Detain.dck new file mode 100644 index 00000000000..933f78acd03 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azorious Detain.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Azorious Detain +[Main] +1 Archon of the Triumvirate|RTR +1 Ascended Lawmage|DGM +1 Azor's Elocutors|RTR +1 Azorius Arrester|RTR +1 Azorius Chancery|C13 +1 Azorius Charm|RTR +1 Azorius Cluestone|DGM +1 Azorius Guildgate|C13 +1 Azorius Guildmage|DIS +1 Azorius Justiciar|RTR +1 Azorius Keyrune|C13 +1 Azorius Signet|DIS +1 Council of the Absolute|DGM +1 Detention Sphere|RTR +1 Fall of the Gavel|RTR +1 Grand Arbiter Augustin IV|DIS +1 Hallowed Fountain|RTR +1 Inaction Injunction|RTR +1 Island|C13|1 +2 Island|C13|3 +1 Island|C13|4 +1 Isperia's Skywatch|RTR +1 Lavinia of the Tenth|DGM +1 Lyev Decree|DGM +1 Lyev Skyknight|RTR +1 Martial Law|RTR +1 New Prahv Guildmage|RTR +1 Pillar of the Paruns|DIS +1 Plains|C13|1 +2 Plains|C13|2 +2 Plains|C13|3 +1 Render Silent|DGM +1 Restore the Peace|DGM +1 Righteous Authority|RTR +1 Soulsworn Spirit|RTR +1 Sphinx's Revelation|RTR +1 Transguild Promenade|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azorious Forecast.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azorious Forecast.dck new file mode 100644 index 00000000000..9e2261f5825 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Azorious Forecast.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Azorious Forecast +[Main] +1 Azorius AEthermage|DIS +1 Azorius Chancery|C13 +1 Azorius Charm|RTR +1 Azorius Cluestone|DGM +1 Azorius Guildgate|C13 +1 Azorius Guildmage|DIS +1 Azorius Herald|C13 +1 Azorius Keyrune|C13 +1 Azorius Ploy|DIS +1 Azorius Signet|DIS +1 Govern the Guildless|DIS +1 Hallowed Fountain|RTR +1 Island|RTR|1 +1 Island|RTR|2 +1 Island|RTR|3 +1 Island|RTR|5 +1 Jelenn Sphinx|DGM +1 Paladin of Prahv|DIS +1 Palliation Accord|DIS +1 Pillar of the Paruns|DIS +1 Plains|RTR|3 +2 Plains|RTR|4 +2 Plains|RTR|5 +1 Plumes of Peace|DIS +1 Prahv, Spires of Order|DIS +1 Pride of the Clouds|DIS +1 Proclamation of Rebirth|DIS +1 Protect // Serve|DGM +1 Search Warrant|RTR +1 Sky Hussar|DIS +1 Skyscribing|C13 +1 Steeling Stance|DIS +1 Supreme Verdict|RTR +1 Transguild Promenade|C13 +1 Uncovered Clues|DGM +1 Windreaver|DIS +1 Wizened Snitches|RAV +1 Writ of Passage|DIS diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Grand Arbiter Augustin IV.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Grand Arbiter Augustin IV.dck new file mode 100644 index 00000000000..b7201e3ce61 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Grand Arbiter Augustin IV.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Grand Arbiter Augustin IV +[Commander] +1 Grand Arbiter Augustin IV|DIS +[Main] +1 Azor's Elocutors|RTR +1 Azorius Chancery|C13 +1 Azorius Charm|RTR +1 Azorius Guildgate|C13 +1 Cancel|KTK +1 Convolute|RAV +1 Dispel|RTR +1 Dovescape|DIS +1 Fall of the Gavel|RTR +1 Frazzle|GPT +1 Hallowed Fountain|RTR +1 Island|C13|1 +1 Island|C13|2 +1 Island|C13|3 +2 Island|C13|4 +1 Judge's Familiar|RTR +1 Mindstatic|DGM +1 Nullstone Gargoyle|RAV +1 Overrule|DIS +1 Pillar of the Paruns|DIS +1 Pithing Needle|RTR +1 Plains|C13|2 +1 Plains|C13|3 +2 Plains|C13|4 +1 Prahv, Spires of Order|DIS +1 Remand|RAV +1 Render Silent|DGM +1 Runeboggle|GPT +1 Scatter Arc|GTC +1 Soulsworn Jury|DIS +1 Spell Rupture|GTC +1 Spell Snare|DIS +1 Sphinx's Revelation|RTR +1 Supreme Verdict|RTR +1 Swift Silence|DIS +1 Syncopate|RTR +1 Transguild Promenade|C13 +1 Walking Archive|DIS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Isperia the Inscrutable.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Isperia the Inscrutable.dck new file mode 100644 index 00000000000..7eaa4ca3160 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Isperia the Inscrutable.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Isperia the Inscrutable +[Commander] +1 Isperia the Inscrutable|DIS +[Main] +1 Angel of Serenity|C15 +1 Angelic Skirmisher|GTC +1 Archon of the Triumvirate|RTR +1 Ascended Lawmage|DGM +1 Azorius Chancery|C13 +1 Azorius Charm|RTR +1 Azorius Cluestone|DGM +1 Azorius First-Wing|DIS +1 Azorius Guildgate|C13 +1 Azorius Guildmage|DIS +1 Azorius Keyrune|C13 +1 Azorius Signet|DIS +1 Belltower Sphinx|M12 +1 Blazing Archon|RAV +1 Cerulean Sphinx|RAV +1 Concerted Effort|RAV +1 Dovescape|DIS +1 Hallowed Fountain|RTR +1 Island|C13|1 +1 Island|C13|2 +2 Island|C13|4 +1 Jelenn Sphinx|DGM +1 Judge's Familiar|RTR +1 Lyev Skyknight|RTR +1 New Prahv Guildmage|RTR +1 Pillar of the Paruns|DIS +1 Plains|C13|1 +3 Plains|C13|2 +1 Plains|C13|4 +1 Prahv, Spires of Order|DIS +1 Pride of the Clouds|DIS +1 Sky Hussar|DIS +1 Skymark Roc|RTR +1 Transguild Promenade|C13 +1 Vassal Soul|RTR +1 Windreaver|DIS +1 Wizened Snitches|RAV +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Isperia, Supreme Judge.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Isperia, Supreme Judge.dck new file mode 100644 index 00000000000..d367906117f --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Isperia, Supreme Judge.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Isperia, Supreme Judge +[Commander] +1 Isperia, Supreme Judge|RTR +[Main] +1 Ascended Lawmage|DGM +1 Azorius AEthermage|DIS +1 Azorius Chancery|C13 +1 Azorius Charm|RTR +1 Azorius Cluestone|DGM +1 Azorius Guildgate|C13 +1 Azorius Guildmage|DIS +1 Azorius Keyrune|C13 +1 Azorius Signet|DIS +1 Deputy of Acquittals|DGM +1 Dramatic Rescue|RTR +1 Gideon, Champion of Justice|GTC +1 Hallowed Fountain|RTR +1 Inspiration|RTR +5 Island|RTR|4 +1 Jace, Architect of Thought|RTR +1 Jace, the Living Guildpact|M15 +1 Minister of Impediments|DIS +1 New Prahv Guildmage|RTR +1 Ocular Halo|DIS +1 Overrule|DIS +1 Pillar of the Paruns|DIS +1 Plains|RTR|2 +1 Plains|RTR|3 +1 Plains|RTR|4 +1 Plains|RTR|5 +1 Prahv, Spires of Order|DIS +1 Render Silent|DGM +1 Restore the Peace|DGM +1 Righteous Authority|RTR +1 Search Warrant|RTR +1 Sky Hussar|DIS +1 Sphinx's Revelation|RTR +1 Supreme Verdict|RTR +1 Swift Silence|DIS +1 Walking Archive|DIS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Jace, Architect of Thought.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Jace, Architect of Thought.dck new file mode 100644 index 00000000000..06b00a6e3db --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Jace, Architect of Thought.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Jace Architect of Thought +[Main] +1 AEtherize|C15 +1 AEtherling|DGM +1 AEtherplasm|GPT +1 Belltower Sphinx|M12 +1 Cerulean Sphinx|RAV +1 Conjured Currency|RTR +1 Diluvian Primordial|GTC +1 Dream Leash|RAV +1 Eye of the Storm|RAV +1 Flow of Ideas|RAV +1 Followed Footsteps|RAV +1 Frazzle|GPT +1 Hover Barrier|RTR +3 Island|RAV|1 +1 Island|RAV|2 +7 Island|RAV|3 +4 Island|RAV|4 +1 Jace, Architect of Thought|RTR +1 Leyline of Anticipation|M11 +1 Mindeye Drake|GTC +1 Mnemonic Nexus|RAV +1 Psychic Spiral|RTR +1 Quicken|M14 +1 Remand|RAV +1 Spawnbroker|RAV +1 Telling Time|RAV +1 Tidespout Tyrant|DIS +1 Tunnel Vision|RAV +1 Vertigo Spawn|GPT +1 Wizened Snitches|RAV diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Lavinia of the Tenth.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Lavinia of the Tenth.dck new file mode 100644 index 00000000000..b3536503a84 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/Lavinia of the Tenth.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Lavinia of the Tenth +[Commander] +1 Lavinia of the Tenth|DGM +[Main] +1 Archon of the Triumvirate|RTR +1 Ascended Lawmage|DGM +1 Azor's Elocutors|RTR +1 Azorius Arrester|RTR +1 Azorius Chancery|C13 +1 Azorius Charm|RTR +1 Azorius Cluestone|DGM +1 Azorius Guildgate|C13 +1 Azorius Guildmage|DIS +1 Azorius Justiciar|RTR +1 Azorius Keyrune|C13 +1 Azorius Signet|DIS +1 Detention Sphere|RTR +1 Fall of the Gavel|RTR +1 Hallowed Fountain|RTR +1 Inaction Injunction|RTR +3 Island|C13|1 +1 Island|C13|4 +1 Isperia's Skywatch|RTR +1 Lyev Decree|DGM +1 Lyev Skyknight|RTR +1 Martial Law|RTR +1 New Prahv Guildmage|RTR +1 Pillar of the Paruns|DIS +3 Plains|C13|1 +2 Plains|C13|2 +1 Plumes of Peace|DIS +1 Prahv, Spires of Order|DIS +1 Render Silent|DGM +1 Restore the Peace|DGM +1 Skymark Roc|RTR +1 Soulsworn Spirit|RTR +1 Sphinx's Revelation|RTR +1 Supreme Verdict|RTR +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/_events.txt new file mode 100644 index 00000000000..85e98ea7504 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Azorius Chancery/_events.txt @@ -0,0 +1,9 @@ +Name:Azorious Detain|Deck:Azorious Detain.dck|Variant:None|Avatar:Archon of the Triumvirate|Desc: +Name:Azorious Forecast|Deck:Azorious Forecast.dck|Variant:None|Avatar:Pride of the Clouds|Desc: +Name:Azor's Elocutors|Deck:Azor's Elocutors.dck|Variant:None|Avatar:Azor's Elocutors|Desc: +Name:Grand Arbiter Augustin IV|Deck:Grand Arbiter Augustin IV.dck|Variant:Commander|Avatar:Grand Arbiter Augustin IV|Desc: +Name:Isperia the Inscrutable|Deck:Isperia the Inscrutable.dck|Variant:Commander|Avatar:Isperia the Inscrutable|Desc: +Name:Isperia, Supreme Judge|Deck:Isperia, Supreme Judge.dck|Variant:Commander|Avatar:Isperia, Supreme Judge|Desc: +Name:Lavinia of the Tenth|Deck:Lavinia of the Tenth.dck|Variant:Commander|Avatar:Lavinia of the Tenth|Desc: +Name:Arcanis the Omnipotent|Deck:Arcanis the Omnipotent.dck|Variant:Vanguard|Avatar:Arcanis the Omnipotent|Desc: +Name:Jace, Architect of Thought|Deck:Jace, Architect of Thought.dck|Variant:Planeswalker|Avatar:Jace, Architect of Thought|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Agrus Kos, Wojek Veteran.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Agrus Kos, Wojek Veteran.dck new file mode 100644 index 00000000000..c14ecab0e83 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Agrus Kos, Wojek Veteran.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Agrus Kos, Wojek Veteran +[Commander] +1 Agrus Kos, Wojek Veteran|RAV +[Main] +1 Assemble the Legion|GTC +1 Bathe in Light|RAV +1 Boros Charm|C13 +1 Boros Cluestone|C15 +1 Boros Garrison|C15 +1 Boros Guildgate|C15 +1 Boros Guildmage|RAV +1 Boros Keyrune|GTC +1 Boros Reckoner|GTC +1 Boros Signet|C15 +1 Brightflame|RAV +1 Cleansing Beam|RAV +1 Firemane Angel|RAV +1 Foundry Champion|GTC +1 Gleam of Battle|DGM +1 Incite Hysteria|RAV +1 Leave No Trace|RAV +1 Legion's Initiative|DGM +1 Master Warcraft|RAV +1 Mountain|RAV|1 +2 Mountain|RAV|2 +1 Mountain|RAV|3 +1 Pillar of the Paruns|DIS +1 Plains|RAV|2 +3 Plains|RAV|3 +1 Plains|RAV|4 +1 Rally the Righteous|RAV +1 Razia's Purification|RAV +1 Sacred Foundry|RAV +1 Spark Trooper|GTC +1 Sunhome, Fortress of the Legion|RAV +1 Surge of Zeal|RAV +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Wojek Apothecary|RAV +1 Wojek Embermage|RAV +1 Wojek Siren|RAV +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Aurelia, the Warleader.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Aurelia, the Warleader.dck new file mode 100644 index 00000000000..15f7b3ddb01 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Aurelia, the Warleader.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Aurelia, the Warleader +[Commander] +1 Aurelia, the Warleader|V15 +[Main] +1 Angel of Serenity|C15 +1 Angelic Skirmisher|GTC +1 Assemble the Legion|GTC +1 Aurelia's Fury|GTC +1 Boros Battleshaper|DGM +1 Boros Charm|C13 +1 Boros Cluestone|C15 +1 Boros Fury-Shield|RAV +1 Boros Garrison|C15 +1 Boros Guildgate|C15 +1 Boros Guildmage|RAV +1 Boros Keyrune|GTC +1 Boros Recruit|RAV +1 Boros Signet|C15 +1 Boros Swiftblade|RAV +1 Breath of Fury|RAV +1 Fencing Ace|RTR +1 Firemane Avenger|GTC +1 Five-Alarm Fire|GTC +1 Flash Conscription|RAV +1 Gideon, Champion of Justice|GTC +1 Hellraiser Goblin|GTC +1 Legion's Initiative|DGM +1 Mountain|RAV|2 +2 Mountain|RAV|3 +1 Mountain|RAV|4 +1 Ordruun Veteran|GTC +1 Pillar of the Paruns|DIS +3 Plains|RAV|2 +2 Plains|RAV|3 +1 Precinct Captain|RTR +1 Sacred Foundry|RAV +1 Sunhome Enforcer|RAV +1 Sunhome, Fortress of the Legion|RAV +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Boros Battalion.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Boros Battalion.dck new file mode 100644 index 00000000000..ca32f13b3cf --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Boros Battalion.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Boros Battalion +[Main] +1 Assemble the Legion|GTC +1 Aurelia's Fury|GTC +1 Bomber Corps|GTC +1 Boros Battleshaper|DGM +1 Boros Charm|C13 +1 Boros Cluestone|C15 +1 Boros Elite|GTC +1 Boros Garrison|C15 +1 Boros Guildgate|C15 +1 Boros Guildmage|RAV +1 Boros Keyrune|GTC +1 Boros Mastiff|DGM +1 Boros Reckoner|GTC +1 Boros Recruit|RAV +1 Boros Signet|C15 +1 Boros Swiftblade|RAV +1 Daring Skyjek|GTC +1 Firefist Striker|GTC +1 Firemane Avenger|GTC +1 Frontline Medic|GTC +1 Legion Loyalist|GTC +1 Legion's Initiative|DGM +1 Mountain|C13|1 +1 Mountain|C13|3 +2 Mountain|C13|4 +1 Nav Squad Commandos|GTC +1 Ordruun Veteran|GTC +1 Pillar of the Paruns|DIS +1 Plains|C13|2 +3 Plains|C13|3 +1 Plains|C13|4 +1 Sacred Foundry|RAV +1 Sunhome, Fortress of the Legion|RAV +1 Tajic, Blade of the Legion|DGM +1 Transguild Promenade|C13 +1 Warmind Infantry|GTC +1 Wojek Halberdiers|GTC diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Boros Radiance.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Boros Radiance.dck new file mode 100644 index 00000000000..689a2500c4a --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Boros Radiance.dck @@ -0,0 +1,38 @@ +[metadata] +Name=Boros Radiance +[Main] +1 Bathe in Light|RAV +1 Boros Charm|C13 +1 Boros Cluestone|C15 +1 Boros Fury-Shield|RAV +1 Boros Garrison|C15 +1 Boros Guildgate|C15 +1 Boros Guildmage|RAV +1 Boros Keyrune|GTC +1 Boros Recruit|RAV +1 Boros Signet|C15 +1 Boros Swiftblade|RAV +1 Brightflame|RAV +1 Cleansing Beam|RAV +1 Flame-Kin Zealot|RAV +1 Incite Hysteria|RAV +1 Leave No Trace|RAV +1 Lightning Helix|RAV +2 Mountain|RAV|1 +2 Mountain|RAV|4 +1 Pillar of the Paruns|DIS +2 Plains|RAV|2 +1 Plains|RAV|3 +2 Plains|RAV|4 +2 Rally the Righteous|RAV +1 Razia's Purification|RAV +1 Sacred Foundry|RAV +1 Skyknight Legionnaire|RAV +1 Sunhome Enforcer|RAV +1 Sunhome, Fortress of the Legion|RAV +1 Surge of Zeal|RAV +1 Thundersong Trumpeter|RAV +1 Transguild Promenade|C13 +1 Wojek Apothecary|RAV +1 Wojek Embermage|RAV +1 Wojek Siren|RAV diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Coin Flip.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Coin Flip.dck new file mode 100644 index 00000000000..5ad83ab77e1 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Coin Flip.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Coin Flip +[Main] +1 Abrupt Decay|RTR +1 Advent of the Wurm|DGM +1 Assassin's Strike|RTR +1 Axebane Guardian|RTR +1 Birds of Paradise|M12 +1 Blood Crypt|EXP +1 Breeding Pool|EXP +1 Chromatic Lantern|RTR +1 Culling Sun|GPT +1 Disembowel|RAV +1 Dreadbore|RTR +1 Forest|RTR|2 +1 Gaze of Granite|DGM +1 Godless Shrine|EXP +1 Hallowed Fountain|EXP +1 Hour of Reckoning|COM +1 Killing Glare|GTC +1 Molten Sentry|RAV +1 Mortify|CNS +1 Odds // Ends|DIS +1 Overgrown Tomb|EXP +1 Pillar of the Paruns|DIS +1 Plains|RTR|3 +1 Putrefy|C15 +1 Ral Zarek|DGM +1 Sacred Foundry|EXP +1 Spectral Searchlight|CNS +1 Sphinx's Revelation|RTR +1 Steam Vents|EXP +1 Stitch in Time|GPT +1 Stomping Ground|EXP +1 Supreme Verdict|RTR +1 Swamp|RTR|5 +1 Tavern Swindler|DDM +1 Temple Garden|EXP +1 Thespian's Stage|GTC +1 Ultimate Price|DTK +1 Volatile Rig|RTR +1 Watery Grave|EXP +1 Wrecking Ball|MM2 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Gideon, Champion of Justice.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Gideon, Champion of Justice.dck new file mode 100644 index 00000000000..50b7db94520 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Gideon, Champion of Justice.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Gideon, Champion of Justice +[Main] +1 Angel of Serenity|C15 +1 Angelic Skirmisher|GTC +1 Arrest|RTR +1 Blazing Archon|RAV +1 Brace for Impact|DIS +1 Concerted Effort|RAV +1 Condemn|C14 +1 Fencing Ace|RTR +1 Gideon, Champion of Justice|GTC +1 Guardian of the Guildpact|DIS +1 Holy Mantle|GTC +1 Knight Watch|GTC +1 Knightly Valor|ORI +1 Leyline of Sanctity|M11 +1 Loxodon Gatekeeper|RAV +1 Martial Law|RTR +1 Mistral Charger|DIS +1 Murder Investigation|ORI +1 Oathsworn Giant|RAV +1 Order of the Stars|GPT +1 Paladin of Prahv|DIS +1 Peregrine Mask|RAV +2 Plains|C15|1 +6 Plains|C15|2 +2 Plains|C15|3 +5 Plains|C15|4 +1 Precinct Captain|RTR +1 Security Blockade|RTR +1 Sphere of Safety|RTR +1 Steeple Roc|DGM diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Krenko, Mob Boss.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Krenko, Mob Boss.dck new file mode 100644 index 00000000000..59d5095c6a7 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Krenko, Mob Boss.dck @@ -0,0 +1,36 @@ +[metadata] +Name=Krenko, Mob Boss +[Commander] +1 Krenko, Mob Boss|M13 +[Main] +1 Five-Alarm Fire|GTC +1 Foundry Street Denizen|M15 +1 Frenzied Goblin|M15 +1 Goblin Fire Fiend|RAV +1 Goblin Glory Chaser|ORI +1 Goblin Rally|RTR +1 Goblin Spelunkers|RAV +1 Guild Feud|RTR +1 Guttersnipe|C13 +1 Hellraiser Goblin|GTC +1 Krenko's Command|M13 +1 Krenko's Enforcer|M15 +1 Legion Loyalist|GTC +1 Lobber Crew|RTR +1 Mark for Death|GTC +1 Mizzium Mortars|C15 +3 Mountain|M15|1 +3 Mountain|M15|2 +3 Mountain|M15|3 +6 Mountain|M15|4 +1 Pyrewild Shaman|DGM +1 Rabble-Rouser|GPT +1 Riot Piker|DGM +1 Skinbrand Goblin|GTC +1 Skullcrack|GTC +1 Stoke the Flames|M15 +1 Survey the Wreckage|RTR +1 Utvara Scalper|DIS +1 War-Torch Goblin|RAV +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Serra Angel.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Serra Angel.dck new file mode 100644 index 00000000000..46265dd929e --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Serra Angel.dck @@ -0,0 +1,49 @@ +[metadata] +Name=Serra Angel +[Avatar] +1 Serra Angel Avatar|VAN|1 +[Main] +1 Assemble the Legion|GTC +1 Aurelia's Fury|GTC +1 Aurelia, the Warleader|GTC +1 Boros Cluestone|C15 +1 Boros Garrison|C15 +1 Boros Guildgate|C15 +1 Boros Keyrune|GTC +1 Boros Signet|C15 +1 Brightflame|RAV +1 Condemn|C14 +1 Firemane Angel|RAV +1 Firemane Avenger|GTC +1 Flash Conscription|RAV +1 Foundry Champion|GTC +1 Legion's Initiative|DGM +1 Lightning Helix|RAV +1 Master Warcraft|RAV +2 Mountain|RAV|1 +1 Mountain|RAV|2 +1 Mountain|RAV|4 +1 Pillar of the Paruns|DIS +2 Plains|RAV|1 +3 Plains|RAV|4 +1 Razia's Purification|RAV +1 Sacred Foundry|RAV +1 Searing Meditation|RAV +1 Skullcrack|GTC +1 Spark Trooper|GTC +1 Storm Herd|GPT +1 Sunhome Enforcer|RAV +1 Sunhome, Fortress of the Legion|RAV +1 Swift Justice|RTR +1 Tajic, Blade of the Legion|DGM +1 Trained Caracal|RTR +1 Transguild Promenade|C13 +1 Warleader's Helix|DGM +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Tajic, Blade of the Legion.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Tajic, Blade of the Legion.dck new file mode 100644 index 00000000000..3ee8c083465 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/Tajic, Blade of the Legion.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Tajic, Blade of the Legion +[Commander] +1 Tajic, Blade of the Legion|DGM +[Main] +1 Assemble the Legion|GTC +1 Aurelia's Fury|GTC +1 Bomber Corps|GTC +1 Boros Charm|C13 +1 Boros Cluestone|C15 +1 Boros Elite|GTC +1 Boros Garrison|C15 +1 Boros Guildgate|C15 +1 Boros Guildmage|RAV +1 Boros Keyrune|GTC +1 Boros Mastiff|DGM +1 Boros Signet|C15 +1 Daring Skyjek|GTC +1 Firefist Striker|GTC +1 Firemane Avenger|GTC +1 Frontline Medic|GTC +1 Legion Loyalist|GTC +1 Legion's Initiative|DGM +1 Lightning Helix|RAV +1 Martial Glory|GTC +1 Master Warcraft|RAV +1 Mountain|RTR|2 +3 Mountain|RTR|5 +1 Nav Squad Commandos|GTC +1 Ordruun Veteran|GTC +1 Pillar of the Paruns|DIS +1 Plains|RTR|4 +4 Plains|RTR|5 +1 Sacred Foundry|RAV +1 Sunforger|RAV +1 Sunhome, Fortress of the Legion|RAV +1 Tablet of the Guilds|RTR +1 Warleader's Helix|DGM +1 Warmind Infantry|GTC +1 Wojek Halberdiers|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/_events.txt new file mode 100644 index 00000000000..3fe750e4c67 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Boros Garrison/_events.txt @@ -0,0 +1,9 @@ +Name:Boros Battalion|Deck:Boros Battalion.dck|Variant:None|Avatar:Firemane Avenger|Desc: +Name:Boros Radiance|Deck:Boros Radiance.dck|Variant:None|Avatar:Wojek Embermage|Desc: +Name:Coin Flip|Deck:Coin Flip.dck|Variant:None|Avatar:Volatile Rig|Desc: +Name:Agrus Kos, Wojek Veteran|Deck:Agrus Kos, Wojek Veteran.dck|Variant:Commander|Avatar:Agrus Kos, Wojek Veteran|Desc: +Name:Aurelia, the Warleader|Deck:Aurelia, the Warleader.dck|Variant:Commander|Avatar:Aurelia, the Warleader|Desc: +Name:Krenko, Mob Boss|Deck:Krenko, Mob Boss.dck|Variant:Commander|Avatar:Krenko, Mob Boss|Desc: +Name:Tajic, Blade of the Legion|Deck:Tajic, Blade of the Legion.dck|Variant:Commander|Avatar:Tajic, Blade of the Legion|Desc: +Name:Serra Angel|Deck:Serra Angel.dck|Variant:Vanguard|Avatar:Serra Angel|Desc: +Name:Gideon, Champion of Justice|Deck:Gideon, Champion of Justice.dck|Variant:Planeswalker|Avatar:Gideon, Champion of Justice|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Circu, Dimir Lobotomist.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Circu, Dimir Lobotomist.dck new file mode 100644 index 00000000000..21f04a5d662 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Circu, Dimir Lobotomist.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Circu, Dimir Lobotomist +[Commander] +1 Circu, Dimir Lobotomist|RAV +[Main] +1 Balustrade Spy|GTC +1 Bloodletter Quill|RAV +1 Call of the Nightwing|GTC +1 Clutch of the Undercity|RAV +1 Coerced Confession|GTC +1 Consuming Aberration|GTC +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cluestone|DGM +1 Dimir Guildgate|C13 +1 Dimir Guildmage|RAV +1 Dimir Keyrune|GTC +1 Dimir Signet|RAV +1 Duskmantle Guildmage|GTC +1 Duskmantle Seer|GTC +1 Duskmantle, House of Shadow|RAV +1 Extract from Darkness|CNS +1 Glimpse the Unthinkable|RAV +1 Grisly Spectacle|GTC +1 Induce Paranoia|RAV +2 Island|PC2|1 +1 Island|PC2|2 +1 Island|PC2|3 +1 Island|PC2|4 +1 Mind Grind|GTC +1 Mirko Vosk, Mind Drinker|DGM +1 Perplex|RAV +1 Pilfered Plans|DGM +1 Pillar of the Paruns|DIS +1 Psychic Drain|RAV +1 Psychic Spiral|RTR +1 Psychic Strike|GTC +2 Swamp|PC2|1 +1 Swamp|PC2|2 +1 Swamp|PC2|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Watery Grave|RAV +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Defender Mill.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Defender Mill.dck new file mode 100644 index 00000000000..94b0c2ee980 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Defender Mill.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Defender Mill +[Main] +1 Axebane Guardian|RTR +1 Basilica Guards|GTC +1 Benevolent Ancestor|RAV +1 Blood Crypt|EXP +1 Breeding Pool|EXP +1 Carven Caryatid|RAV +1 Clinging Anemones|GTC +1 Corpse Blockade|GTC +1 Doorkeeper|RTR +1 Drift of Phantasms|RAV +1 Gatecreeper Vine|DDM +1 Godless Shrine|EXP +1 Grozoth|RAV +1 Hallowed Fountain|EXP +1 Hired Torturer|DGM +1 Hover Barrier|RTR +1 Island|RAV|3 +1 Junktroller|RAV +1 Lobber Crew|RTR +1 Molten Sentry|RAV +1 Murmuring Phantasm|DGM +1 Order of the Stars|GPT +1 Overgrown Tomb|EXP +1 Peregrine Mask|RAV +1 Pillar of the Paruns|DIS +1 Plains|RAV|1 +1 Sacred Foundry|EXP +1 Slithering Shade|DIS +1 Souls of the Faultless|GPT +1 Sprouting Phytohydra|DIS +1 Steam Vents|EXP +1 Stoic Ephemera|DIS +1 Stomping Ground|EXP +1 Swamp|RAV|3 +1 Temple Garden|EXP +1 Thespian's Stage|GTC +1 Vertigo Spawn|GPT +1 Wakestone Gargoyle|CNS +1 Walking Archive|DIS +1 Watery Grave|EXP +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Cipher.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Cipher.dck new file mode 100644 index 00000000000..aec4d1f61ce --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Cipher.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Dimir Cipher +[Main] +1 Call of the Nightwing|GTC +1 Consuming Aberration|GTC +1 Deathcult Rogue|GTC +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cluestone|DGM +1 Dimir Guildgate|C13 +1 Dimir Guildmage|RAV +1 Dimir Infiltrator|PC2 +1 Dimir Keyrune|GTC +1 Dimir Signet|RAV +1 Duskmantle Seer|GTC +1 Duskmantle, House of Shadow|RAV +1 Hands of Binding|GTC +1 Hidden Strings|DGM +3 Island|PC2|1 +1 Island|PC2|3 +1 Island|PC2|4 +1 Keymaster Rogue|GTC +1 Last Thoughts|GTC +1 Mental Vapors|GTC +1 Midnight Recovery|GTC +1 Nightveil Specter|GTC +1 Paranoid Delusions|GTC +1 Pillar of the Paruns|DIS +1 Rogue's Passage|C15 +1 Shadow Slice|GTC +1 Soul Ransom|GTC +1 Stolen Identity|GTC +1 Swamp|PC2|3 +1 Swamp|PC2|4 +2 Swamp|PC2|5 +1 Trait Doctoring|DGM +1 Undercity Plague|GTC +1 Voidwalk|GTC +1 Watery Grave|RAV +1 Whispering Madness|GTC \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Mill.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Mill.dck new file mode 100644 index 00000000000..0450732786a --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Mill.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Dimir Mill +[Main] +1 Balustrade Spy|GTC +1 Belltower Sphinx|M12 +1 Cerulean Sphinx|RAV +1 Chronic Flooding|RTR +1 Codex Shredder|RTR +1 Coerced Confession|GTC +1 Consuming Aberration|GTC +1 Dark Confidant|MM2 +1 Dimir Aqueduct|MM2 +1 Dimir Charm|GTC +1 Dimir Guildgate|C13 +1 Dimir Machinations|RAV +1 Duskmantle Guildmage|GTC +1 Duskmantle Seer|GTC +1 Duskmantle, House of Shadow|RAV +1 Extract from Darkness|CNS +1 Glimpse the Unthinkable|RAV +1 Island|C13|1 +1 Island|C13|3 +1 Island|C13|4 +1 Lazav, Dimir Mastermind|GTC +1 Leyline of the Void|M11 +1 Mind Grind|GTC +1 Mindeye Drake|GTC +1 Mirko Vosk, Mind Drinker|DGM +1 Pillar of the Paruns|DIS +1 Psychic Drain|RAV +1 Psychic Spiral|RTR +1 Rogue's Passage|C15 +1 Sins of the Past|RAV +1 Swamp|C13|1 +1 Swamp|C13|3 +2 Swamp|C13|4 +1 Szadek, Lord of Secrets|COM +1 Thespian's Stage|GTC +1 Transguild Promenade|C13 +1 Tunnel Vision|RAV +1 Undercity Informer|GTC +1 Watery Grave|EXP +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Transmute.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Transmute.dck new file mode 100644 index 00000000000..9ea58541ccb --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Dimir Transmute.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Dimir Transmute +[Main] +1 Brainspoil|RAV +1 Clutch of the Undercity|RAV +1 Consult the Necrosages|RAV +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cluestone|DGM +1 Dimir Guildgate|C13 +1 Dimir Guildmage|RAV +1 Dimir House Guard|RAV +1 Dimir Infiltrator|PC2 +1 Dimir Keyrune|GTC +1 Dimir Machinations|RAV +1 Dimir Signet|RAV +1 Dizzy Spell|RAV +1 Drift of Phantasms|RAV +1 Duskmantle, House of Shadow|RAV +1 Ethereal Usher|RAV +1 Far // Away|DGM +1 Grozoth|RAV +1 Haunter of Nightveil|DGM +1 Island|RAV|1 +3 Island|RAV|2 +1 Island|RAV|4 +1 Lurking Informant|RAV +1 Moroii|RAV +1 Muddle the Mixture|RAV +1 Netherborn Phalanx|RAV +1 Perplex|RAV +1 Pillar of the Paruns|DIS +1 Psychic Drain|RAV +1 Shred Memory|RAV +1 Swamp|RAV|1 +3 Swamp|RAV|3 +1 Transguild Promenade|C13 +1 Warped Physique|DGM +1 Watery Grave|RAV diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Lazav, Dimir Mastermind.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Lazav, Dimir Mastermind.dck new file mode 100644 index 00000000000..63ff719feda --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Lazav, Dimir Mastermind.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Lazav, Dimir Mastermind +[Commander] +1 Lazav, Dimir Mastermind|GTC +[Main] +1 Assassin's Strike|RTR +1 Balustrade Spy|GTC +1 Belltower Sphinx|M12 +1 Codex Shredder|RTR +1 Coerced Confession|GTC +1 Consuming Aberration|GTC +1 Destroy the Evidence|RTR +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cluestone|DGM +1 Dimir Guildgate|C13 +1 Dimir Guildmage|RAV +1 Dimir Keyrune|GTC +1 Dimir Signet|RAV +1 Duskmantle Guildmage|GTC +1 Duskmantle, House of Shadow|RAV +1 Extract from Darkness|CNS +1 Glimpse the Unthinkable|RAV +1 Grisly Spectacle|GTC +1 Island|RAV|1 +1 Island|RAV|2 +2 Island|RAV|4 +1 Killing Glare|GTC +1 Mind Grind|GTC +1 Mindeye Drake|GTC +1 Paranoid Delusions|GTC +1 Pilfered Plans|DGM +1 Psychic Drain|RAV +1 Psychic Spiral|RTR +1 Psychic Strike|GTC +2 Swamp|RAV|1 +1 Swamp|RAV|2 +2 Swamp|RAV|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Ultimate Price|DTK +1 Watery Grave|RAV +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Mirko Vosk, Mind Drinker.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Mirko Vosk, Mind Drinker.dck new file mode 100644 index 00000000000..fd65e1d5bbc --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Mirko Vosk, Mind Drinker.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Mirko Vosk, Mind Drinker +[Commander] +1 Mirko Vosk, Mind Drinker|DGM +[Main] +1 Balustrade Spy|GTC +1 Chronic Flooding|RTR +1 Codex Shredder|RTR +1 Coerced Confession|GTC +1 Consuming Aberration|GTC +1 Crosstown Courier|RTR +1 Destroy the Evidence|RTR +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cluestone|DGM +1 Dimir Guildgate|C13 +1 Dimir Guildmage|RAV +1 Dimir Keyrune|GTC +1 Dimir Signet|RAV +1 Doorkeeper|RTR +1 Duskmantle Guildmage|GTC +1 Duskmantle Seer|GTC +1 Duskmantle, House of Shadow|RAV +1 Extract from Darkness|CNS +1 Glimpse the Unthinkable|RAV +1 Grisly Spectacle|GTC +2 Island|RAV|1 +2 Island|RAV|3 +1 Island|RAV|4 +1 Mind Grind|GTC +1 Paranoid Delusions|GTC +1 Pilfered Plans|DGM +1 Pillar of the Paruns|DIS +1 Psychic Drain|RAV +1 Psychic Strike|GTC +1 Sage's Row Denizen|GTC +1 Swamp|RAV|1 +2 Swamp|RAV|2 +1 Swamp|RAV|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Watery Grave|RAV +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Royal Assassin.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Royal Assassin.dck new file mode 100644 index 00000000000..5171a8892f8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Royal Assassin.dck @@ -0,0 +1,51 @@ +[metadata] +Name=Royal Assassin +[Avatar] +1 Royal Assassin Avatar|VAN|1 +[Main] +1 Bane Alley Broker|GTC +1 Circu, Dimir Lobotomist|RAV +1 Consult the Necrosages|RAV +1 Consuming Aberration|GTC +1 Dark Confidant|RAV +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cutpurse|RAV +1 Dimir Doppelganger|RAV +1 Dimir Guildgate|C13 +1 Dimir Infiltrator|PC2 +1 Duskmantle Guildmage|GTC +1 Duskmantle Seer|GTC +1 Duskmantle, House of Shadow|RAV +1 Glimpse the Unthinkable|RAV +1 Island|RAV|1 +1 Island|RAV|2 +1 Island|RAV|3 +1 Island|RAV|4 +1 Lurking Informant|RAV +1 Mind Grind|GTC +1 Mindleech Mass|RAV +1 Mirko Vosk, Mind Drinker|DGM +1 Nightveil Specter|GTC +1 Notion Thief|DGM +1 Paranoid Delusions|GTC +1 Perplex|RAV +1 Pilfered Plans|DGM +1 Pillar of the Paruns|DIS +1 Psychic Drain|RAV +1 Psychic Strike|GTC +1 Rogue's Passage|C15 +1 Soul Ransom|GTC +3 Swamp|RAV|2 +1 Swamp|RAV|4 +1 Transguild Promenade|C13 +1 Warped Physique|DGM +1 Watery Grave|RAV +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Szadek, Lord of Secrets.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Szadek, Lord of Secrets.dck new file mode 100644 index 00000000000..c20fa0d4924 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/Szadek, Lord of Secrets.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Szadek, Lord of Secrets +[Commander] +1 Szadek, Lord of Secrets|RAV +[Main] +1 Codex Shredder|RTR +1 Coerced Confession|GTC +1 Consuming Aberration|GTC +1 Dimir Aqueduct|PC2 +1 Dimir Charm|GTC +1 Dimir Cluestone|DGM +1 Dimir Cutpurse|RAV +1 Dimir Guildgate|C13 +1 Dimir Guildmage|RAV +1 Dimir Keyrune|GTC +1 Dimir Signet|RAV +1 Duskmantle Guildmage|GTC +1 Duskmantle, House of Shadow|RAV +1 Extract from Darkness|CNS +1 Glimpse the Unthinkable|RAV +1 Island|C13|1 +3 Island|C13|2 +1 Island|C13|4 +1 Mind Grind|GTC +1 Nightveil Specter|GTC +1 Notion Thief|DGM +1 Paranoid Delusions|GTC +1 Pilfered Plans|DGM +1 Pillar of the Paruns|DIS +1 Psychic Drain|RAV +1 Psychic Strike|GTC +1 Reap Intellect|DGM +1 Sage's Row Denizen|GTC +1 Soul Ransom|GTC +2 Swamp|C13|2 +2 Swamp|C13|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Vedalken Entrancer|M13 +1 Watery Grave|RAV +1 Whispering Madness|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/_events.txt new file mode 100644 index 00000000000..becc8c1532f --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Dimir Aqueduct/_events.txt @@ -0,0 +1,9 @@ +Name:Dimir Cipher|Deck:Dimir Cipher.dck|Variant:None|Avatar:Stolen Identity|Desc: +Name:Dimir Mill|Deck:Dimir Mill.dck|Variant:None|Avatar:Belltower Sphinx|Desc: +Name:Dimir Transmute|Deck:Dimir Transmute.dck|Variant:None|Avatar:Dimir House Guard|Desc: +Name:Defender Mill|Deck:Defender Mill.dck|Variant:None|Avatar:Doorkeeper|Desc: +Name:Circu, Dimir Lobotomist|Deck:Circu, Dimir Lobotomist.dck|Variant:Commander|Avatar:Circu, Dimir Lobotomist|Desc: +Name:Lazav, Dimir Mastermind|Deck:Lazav, Dimir Mastermind.dck|Variant:Commander|Avatar:Lazav, Dimir Mastermind|Desc: +Name:Mirko Vosk, Mind Drinker|Deck:Mirko Vosk, Mind Drinker.dck|Variant:Commander|Avatar:Mirko Vosk, Mind Drinker|Desc: +Name:Szadek, Lord of Secrets|Deck:Szadek, Lord of Secrets.dck|Variant:Commander|Avatar:Szadek, Lord of Secrets|Desc: +Name:Royal Assassin|Deck:Royal Assassin.dck|Variant:Vanguard|Avatar:Royal Assassin|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Golgari Dredge.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Golgari Dredge.dck new file mode 100644 index 00000000000..bf0aaa3599b --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Golgari Dredge.dck @@ -0,0 +1,37 @@ +[metadata] +Name=Golgari Dredge +[Main] +1 Abrupt Decay|RTR +1 Darkblast|RAV +1 Deadbridge Chant|DGM +1 Forest|RAV|2 +3 Forest|RAV|4 +1 Gleancrawler|RAV +1 Golgari Brownscale|RAV +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Germination|RAV +1 Golgari Grave-Troll|RAV +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Longlegs|RTR +1 Golgari Rot Farm|C15 +1 Golgari Signet|C15 +1 Golgari Thug|RAV +1 Grave-Shell Scarab|RAV +1 Greater Mossdog|RAV +1 Life from the Loam|RAV +1 Lotleth Troll|C15 +1 Moldervine Cloak|RAV +1 Necroplasm|RAV +1 Nightmare Void|RAV +1 Overgrown Tomb|RTR +1 Pillar of the Paruns|DIS +1 Shambling Shell|RAV +1 Stinkweed Imp|RAV +1 Svogthos, the Restless Tomb|RAV +5 Swamp|RAV|3 +1 Transguild Promenade|C13 +1 Vraska the Unseen|RTR +1 Woodwraith Corrupter|RAV diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Golgari Scavenge.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Golgari Scavenge.dck new file mode 100644 index 00000000000..25f147b9e80 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Golgari Scavenge.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Golgari Scavenge +[Main] +1 Deadbridge Chant|DGM +1 Deadbridge Goliath|RTR +1 Dreg Mangler|RTR +1 Drudge Beetle|RTR +1 Forest|RTR|1 +1 Forest|RTR|2 +1 Forest|RTR|3 +1 Forest|RTR|4 +1 Forest|RTR|5 +1 Golgari Brownscale|RAV +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Decoy|RTR +1 Golgari Grave-Troll|RAV +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Longlegs|RTR +1 Golgari Rot Farm|C15 +1 Golgari Rotwurm|RAV +1 Golgari Signet|C15 +1 Grave-Shell Scarab|RAV +1 Korozda Monitor|RTR +1 Life from the Loam|RAV +1 Necroplasm|RAV +1 Overgrown Tomb|RTR +1 Pillar of the Paruns|DIS +1 Sewer Shambler|RTR +1 Shambling Shell|RAV +1 Slitherhead|RTR +1 Sluiceway Scorpion|RTR +3 Swamp|RTR|2 +1 Swamp|RTR|3 +1 Terrus Wurm|RTR +1 Thrashing Mossdog|DGM +1 Transguild Promenade|C13 +1 Varolz, the Scar-Striped|DGM +1 Zanikev Locust|RTR diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Jarad, Golgari Lich Lord.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Jarad, Golgari Lich Lord.dck new file mode 100644 index 00000000000..e920e9edb98 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Jarad, Golgari Lich Lord.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Jarad, Golgari Lich Lord +[Commander] +1 Jarad, Golgari Lich Lord|RTR +[Main] +1 Abrupt Decay|RTR +1 Darkblast|RAV +1 Deadbridge Chant|DGM +1 Forest|C15|1 +1 Forest|C15|2 +2 Forest|C15|3 +1 Golgari Brownscale|RAV +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Germination|RAV +1 Golgari Grave-Troll|RAV +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Rot Farm|C15 +1 Golgari Signet|C15 +1 Golgari Thug|RAV +1 Grave-Shell Scarab|RAV +1 Greater Mossdog|RAV +1 Korozda Guildmage|C15 +1 Life from the Loam|RAV +1 Necroplasm|RAV +1 Nightmare Void|RAV +1 Overgrown Tomb|RTR +1 Pillar of the Paruns|DIS +1 Plague Boiler|C13 +1 Putrefy|C15 +1 Shambling Shell|RAV +1 Stinkweed Imp|RAV +1 Svogthos, the Restless Tomb|RAV +1 Swamp|C15|1 +3 Swamp|C15|2 +1 Swamp|C15|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Treasured Find|RTR +1 Vraska the Unseen|RTR +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Mazirek, Kraul Death Priest.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Mazirek, Kraul Death Priest.dck new file mode 100644 index 00000000000..256a267bc7c --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Mazirek, Kraul Death Priest.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Mazirek, Kraul Death Priest +[Commander] +1 Mazirek, Kraul Death Priest|C15 +[Main] +1 Abrupt Decay|RTR +1 Deadbridge Chant|DGM +1 Doubling Season|RAV +1 Drooling Groodion|RAV +1 Forest|RTR|1 +1 Forest|RTR|2 +2 Forest|RTR|5 +1 Gobbling Ooze|RTR +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Rot Farm|C15 +1 Golgari Rotwurm|RAV +1 Golgari Signet|C15 +1 Grave-Shell Scarab|RAV +1 Korozda Guildmage|C15 +1 Overgrown Tomb|RTR +1 Perilous Forays|RAV +1 Pillar of the Paruns|DIS +1 Plagued Rusalka|GPT +1 Putrefy|C15 +1 Sanguine Praetor|GPT +1 Shambling Shell|RAV +1 Slum Reaper|RTR +1 Starved Rusalka|GPT +1 Svogthos, the Restless Tomb|RAV +2 Swamp|RTR|2 +1 Swamp|RTR|3 +1 Swamp|RTR|4 +1 Swamp|RTR|5 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Undercity Informer|GTC +1 Varolz, the Scar-Striped|DGM +1 Vindictive Mob|RAV +1 Vraska the Unseen|RTR +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Savra, Queen of the Golgari.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Savra, Queen of the Golgari.dck new file mode 100644 index 00000000000..a291e2fb49a --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Savra, Queen of the Golgari.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Savra, Queen of the Golgari +[Commander] +1 Savra, Queen of the Golgari|RAV +[Main] +1 Abrupt Decay|RTR +1 Deadbridge Chant|DGM +1 Deathrite Shaman|RTR +1 Forest|RAV|1 +1 Forest|RAV|3 +2 Forest|RAV|4 +1 Golgari Brownscale|RAV +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Grave-Troll|RAV +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Rot Farm|C15 +1 Golgari Signet|C15 +1 Golgari Thug|RAV +1 Grave-Shell Scarab|RAV +1 Greater Mossdog|RAV +1 Killing Glare|GTC +1 Korozda Guildmage|C15 +1 Moldervine Cloak|RAV +1 Necroplasm|RAV +1 Overgrown Tomb|RTR +1 Pack Rat|RTR +1 Pillar of the Paruns|DIS +1 Plague Boiler|C13 +1 Putrefy|C15 +1 Shambling Shell|RAV +1 Stinkweed Imp|RAV +1 Svogthos, the Restless Tomb|RAV +2 Swamp|RAV|1 +2 Swamp|RAV|2 +1 Swamp|RAV|3 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Treasured Find|RTR +1 Undercity Informer|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Sisters of Stone Death.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Sisters of Stone Death.dck new file mode 100644 index 00000000000..144d5a8a509 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Sisters of Stone Death.dck @@ -0,0 +1,51 @@ +[metadata] +Name=Sisters of Stone Death +[Avatar] +1 Sisters of Stone Death Avatar|VAN +[Main] +1 Alpha Authority|GTC +1 Beastmaster's Magemark|GPT +1 Corpse Blockade|GTC +1 Deadbridge Chant|DGM +3 Forest|RTR|3 +1 Forest|RTR|5 +1 Gaze of the Gorgon|RAV +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Decoy|RTR +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Longlegs|RTR +1 Golgari Rot Farm|C15 +1 Golgari Signet|C15 +1 Grave Betrayal|RTR +1 Mantle of Webs|ORI +1 Mortipede|RAV +1 Necropolis Regent|RTR +1 Overgrown Tomb|RTR +1 Pillar of the Paruns|DIS +1 Rust Scarab|GTC +1 Sewer Shambler|RTR +1 Silhana Ledgewalker|PC2 +1 Silhana Starfletcher|GPT +1 Sinister Possession|DGM +1 Spire Tracer|GTC +1 Svogthos, the Restless Tomb|RAV +1 Swamp|RTR|1 +1 Swamp|RTR|2 +1 Swamp|RTR|3 +1 Swamp|RTR|4 +1 Swamp|RTR|5 +1 Thrashing Mossdog|DGM +1 Transguild Promenade|C13 +1 Trestle Troll|RTR +1 Vraska the Unseen|RTR +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Varolz, the Scar-Striped.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Varolz, the Scar-Striped.dck new file mode 100644 index 00000000000..c936bb5f2b9 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Varolz, the Scar-Striped.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Varolz, the Scar-Striped +[Commander] +1 Varolz, the Scar-Striped|DGM +[Main] +1 Abrupt Decay|RTR +1 Corpsejack Menace|RTR +1 Deadbridge Chant|DGM +1 Deadbridge Goliath|RTR +1 Deathrite Shaman|RTR +1 Dreg Mangler|RTR +1 Drudge Beetle|RTR +1 Forest|C13|3 +4 Forest|C13|4 +1 Gaze of Granite|DGM +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Decoy|RTR +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Rot Farm|C15 +1 Golgari Signet|C15 +1 Korozda Guildmage|C15 +1 Korozda Monitor|RTR +1 Overgrown Tomb|RTR +1 Pillar of the Paruns|DIS +1 Plague Boiler|C13 +1 Sewer Shambler|RTR +1 Slitherhead|RTR +1 Sluiceway Scorpion|RTR +1 Svogthos, the Restless Tomb|RAV +2 Swamp|C13|1 +2 Swamp|C13|2 +1 Tablet of the Guilds|RTR +1 Terrus Wurm|RTR +1 Thrashing Mossdog|DGM +1 Transguild Promenade|C13 +1 Vraska the Unseen|RTR +1 Zanikev Locust|RTR +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Vraska the Unseen.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Vraska the Unseen.dck new file mode 100644 index 00000000000..c44ba7268a9 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/Vraska the Unseen.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Vraska the Unseen +[Main] +1 Abrupt Decay|RTR +1 Corpsejack Menace|RTR +1 Deadbridge Chant|DGM +1 Deathrite Shaman|RTR +1 Forest|RTR|1 +2 Forest|RTR|2 +1 Forest|RTR|3 +1 Gaze of Granite|DGM +1 Gaze of the Gorgon|RAV +1 Gleancrawler|RAV +1 Golgari Charm|C15 +1 Golgari Cluestone|DGM +1 Golgari Germination|RAV +1 Golgari Guildgate|C15 +1 Golgari Guildmage|C13 +1 Golgari Keyrune|RTR +1 Golgari Longlegs|RTR +1 Golgari Rot Farm|C15 +1 Golgari Rotwurm|RAV +1 Golgari Signet|C15 +1 Grave-Shell Scarab|RAV +1 Jarad's Orders|RTR +1 Korozda Guildmage|C15 +1 Lotleth Troll|C15 +1 Overgrown Tomb|RTR +1 Pillar of the Paruns|DIS +1 Putrefy|C15 +1 Rot Farm Skeleton|DGM +1 Slitherhead|RTR +1 Svogthos, the Restless Tomb|RAV +1 Swamp|RTR|1 +1 Swamp|RTR|3 +3 Swamp|RTR|5 +1 Transguild Promenade|C13 +1 Treasured Find|RTR +1 Vraska the Unseen|RTR +1 Vulturous Zombie|C15 +1 Woodwraith Corrupter|RAV \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/_events.txt new file mode 100644 index 00000000000..22eb78cee09 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Golgari Rot Farm/_events.txt @@ -0,0 +1,8 @@ +Name:Golgari Dredge|Deck:Golgari Dredge.dck|Variant:None|Avatar:Golgari Grave-Troll|Desc: +Name:Golgari Scavenge|Deck:Golgari Scavenge.dck|Variant:None|Avatar:Deadbridge Goliath|Desc: +Name:Mazirek, Kraul Death Priest|Deck:Mazirek, Kraul Death Priest.dck|Variant:Commander|Avatar:Mazirek, Kraul Death Priest|Desc: +Name:Jarad, Golgari Lich Lord|Deck:Jarad, Golgari Lich Lord.dck|Variant:Commander|Avatar:Jarad, Golgari Lich Lord|Desc: +Name:Savra, Queen of the Golgari|Deck:Savra, Queen of the Golgari.dck|Variant:Commander|Avatar:Savra, Queen of the Golgari|Desc: +Name:Varolz, the Scar-Striped|Deck:Varolz, the Scar-Striped.dck|Variant:Commander|Avatar:Varolz, the Scar-Striped|Desc: +Name:Sisters of Stone Death|Deck:Sisters of Stone Death.dck|Variant:Vanguard|Avatar:Sisters of Stone Death|Desc: +Name:Vraska the Unseen|Deck:Vraska the Unseen.dck|Variant:Planeswalker|Avatar:Vraska the Unseen|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Borborygmos.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Borborygmos.dck new file mode 100644 index 00000000000..13d08adafca --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Borborygmos.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Borborygmos +[Commander] +1 Borborygmos|GPT +[Main] +1 Battering Wurm|GPT +1 Burning-Tree Bloodscale|GPT +1 Carnage Wurm|M12 +1 Crowned Ceratok|GTC +1 Death's Presence|RTR +1 Doubling Season|RAV +1 Five-Alarm Fire|GTC +2 Forest|PC2|1 +2 Forest|PC2|4 +1 Forest|PC2|6 +1 Furyborn Hellkite|M12 +1 Ghor-Clan Savage|GPT +1 Gristleback|GPT +1 Gruul Charm|GTC +1 Gruul Cluestone|DGM +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Keyrune|GTC +1 Gruul Signet|GPT +1 Gruul Turf|PC2 +1 Gruul War Plow|GPT +1 Ivy Lane Denizen|GTC +1 Leyline of Lifeforce|GPT +1 Mountain|PC2|2 +2 Mountain|PC2|3 +1 Mountain|PC2|4 +1 Pillar of the Paruns|DIS +1 Rubblebelt Raiders|GTC +1 Savageborn Hydra|DGM +1 Scab-Clan Berserker|ORI +1 Scab-Clan Mauler|GPT +1 Skarrg, the Rage Pits|PC2 +1 Skarrgan Skybreaker|GPT +1 Stomping Ground|GPT +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Wreak Havoc|GPT +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Borboygmos Enraged.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Borboygmos Enraged.dck new file mode 100644 index 00000000000..03b16207b46 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Borboygmos Enraged.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Borboygmos Enraged +[Commander] +1 Borborygmos Enraged|GTC +[Main] +1 Domri Rade|GTC +2 Forest|RTR|2 +1 Forest|RTR|4 +1 Forest|RTR|5 +1 Ghor-Clan Rampager|GTC +1 Gruul Charm|GTC +1 Gruul Cluestone|DGM +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Keyrune|GTC +1 Gruul Signet|GPT +1 Gruul Turf|PC2 +1 Gruul War Plow|GPT +1 Killer Instinct|GPT +1 Mountain|RTR|1 +1 Mountain|RTR|2 +3 Mountain|RTR|3 +1 Pillar of the Paruns|DIS +1 Pyrewild Shaman|DGM +1 Rubblebelt Maaka|DGM +1 Rubblebelt Raiders|GTC +1 Rubblehulk|GTC +1 Savageborn Hydra|DGM +1 Scab-Clan Charger|GTC +1 Scorchwalker|GTC +1 Skarrg Goliath|GTC +1 Skarrg, the Rage Pits|PC2 +1 Skinbrand Goblin|GTC +1 Slaughterhorn|GTC +1 Stomping Ground|GPT +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Viashino Shanktail|GTC +1 Wasteland Viper|GTC +1 Wrecking Ogre|GTC +1 Zhur-Taa Ancient|DGM +1 Zhur-Taa Swine|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Domri Rade.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Domri Rade.dck new file mode 100644 index 00000000000..5adb5f4c848 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Domri Rade.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Domri Rade +[Main] +1 Burning-Tree Emissary|GTC +1 Clan Defiance|GTC +1 Domri Rade|GTC +3 Forest|RTR|1 +1 Forest|RTR|4 +1 Forest|RTR|5 +1 Frenzied Tilling|INV +1 Giant Solifuge|GPT +1 Ground Assault|GTC +1 Gruul Charm|GTC +1 Gruul Guildgate|C13 +1 Gruul Turf|PC2 +1 Guild Feud|RTR +1 Killer Instinct|GPT +1 Mountain|RTR|1 +2 Mountain|RTR|2 +1 Mountain|RTR|3 +2 Mountain|RTR|4 +1 Primal Visitation|GTC +1 Primordial Sage|C14 +1 Rubblebelt Raiders|GTC +1 Rubblehulk|GTC +1 Ruination Wurm|GTC +1 Rumbling Slum|GPT +1 Savage Twister|C13 +1 Scab-Clan Mauler|GPT +1 Scion of the Wild|RAV +1 Signal the Clans|GTC +1 Skarrg Guildmage|GTC +1 Skarrg, the Rage Pits|PC2 +1 Stomping Ground|GPT +1 Streetbreaker Wurm|GPT +1 Transguild Promenade|C13 +1 Vinelasher Kudzu|RAV +1 Wild Beastmaster|RTR +1 Worldspine Wurm|RTR +1 Wurmweaver Coil|GPT diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Gruul Bloodrush.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Gruul Bloodrush.dck new file mode 100644 index 00000000000..cda172e2c11 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Gruul Bloodrush.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Gruul Bloodrush +[Main] +1 Clan Defiance|GTC +1 Domri Rade|GTC +2 Forest|PC2|1 +1 Forest|PC2|2 +1 Forest|PC2|4 +1 Ghor-Clan Rampager|GTC +1 Gruul Charm|GTC +1 Gruul Cluestone|DGM +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Keyrune|GTC +1 Gruul Ragebeast|GTC +1 Gruul Signet|GPT +1 Gruul Turf|PC2 +1 Gruul War Chant|DGM +2 Mountain|PC2|1 +1 Mountain|PC2|3 +2 Mountain|PC2|4 +1 Pillar of the Paruns|DIS +1 Pyrewild Shaman|DGM +1 Rubblebelt Maaka|DGM +1 Rubblebelt Raiders|GTC +1 Rubblehulk|GTC +1 Savageborn Hydra|DGM +1 Scab-Clan Charger|GTC +1 Scorchwalker|GTC +1 Signal the Clans|GTC +1 Skarrg Goliath|GTC +1 Skarrg, the Rage Pits|PC2 +1 Skinbrand Goblin|GTC +1 Slaughterhorn|GTC +1 Stomping Ground|GPT +1 Transguild Promenade|C13 +1 Viashino Shanktail|GTC +1 Wasteland Viper|GTC +1 Wrecking Ogre|GTC +1 Zhur-Taa Swine|GTC diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Gruul Bloodthirst.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Gruul Bloodthirst.dck new file mode 100644 index 00000000000..6422b48cfbf --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Gruul Bloodthirst.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Gruul Bloodthirst +[Main] +1 Battering Wurm|GPT +1 Blood Ogre|M12 +1 Bloodscale Prowler|GPT +1 Burning-Tree Bloodscale|GPT +1 Carnage Wurm|M12 +2 Forest|M12|2 +2 Forest|M12|4 +1 Furyborn Hellkite|M12 +1 Ghor-Clan Savage|GPT +1 Gorehorn Minotaurs|M12 +1 Gristleback|GPT +1 Gruul Charm|GTC +1 Gruul Cluestone|DGM +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Keyrune|GTC +1 Gruul Ragebeast|GTC +1 Gruul Signet|GPT +1 Gruul Turf|PC2 +1 Gruul War Chant|DGM +1 Gruul War Plow|GPT +1 Lurking Crocodile|M12 +1 Mountain|M12|1 +2 Mountain|M12|2 +2 Mountain|M12|3 +1 Petrified Wood-Kin|GPT +1 Pillar of the Paruns|DIS +1 Rabble-Rouser|GPT +1 Scab-Clan Mauler|GPT +1 Skarrg, the Rage Pits|PC2 +1 Skarrgan Firebird|GPT +1 Skarrgan Pit-Skulk|GPT +1 Skarrgan Skybreaker|GPT +1 Stomping Ground|GPT +1 Stormblood Berserker|M12 +1 Transguild Promenade|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Nephilim of Ravnica.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Nephilim of Ravnica.dck new file mode 100644 index 00000000000..9a29d3e64e7 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Nephilim of Ravnica.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Nephilim of Ravnica +[Main] +1 Aurora Eidolon|DIS +1 Axebane Guardian|RTR +1 Beck // Call|DGM +1 Birds of Paradise|M12 +1 Blessing of the Nephilim|DIS +1 Blood Crypt|EXP +1 Bound // Determined|DIS +1 Breaking // Entering|DGM +1 Breeding Pool|EXP +1 Catch // Release|DGM +1 Chromatic Lantern|RTR +1 Civic Saber|RTR +1 Crime // Punishment|DIS +1 Dune-Brood Nephilim|GPT +1 Enigma Eidolon|DIS +2 Entropic Eidolon|DIS +1 Ghost Quarter|C15 +1 Glint-Eye Nephilim|GPT +1 Godless Shrine|EXP +1 Gruul Guildgate|C13 +1 Gruul Turf|MM2 +1 Hallowed Fountain|EXP +1 Ink-Treader Nephilim|GPT +1 Might of the Nephilim|DIS +1 Overgrown Tomb|EXP +1 Pillar of the Paruns|DIS +1 Rogue's Passage|C15 +1 Sacred Foundry|EXP +1 Sandstorm Eidolon|DIS +1 Soul of Ravnica|M15 +1 Steam Vents|EXP +1 Stomping Ground|EXP +1 Temple Garden|EXP +1 Terrarion|RAV +1 Thespian's Stage|GTC +1 Verdant Eidolon|DIS +1 Watery Grave|EXP +1 Witch-Maw Nephilim|GPT +1 Yore-Tiller Nephilim|GPT +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Rumbling Slum.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Rumbling Slum.dck new file mode 100644 index 00000000000..8e38bf1b675 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Rumbling Slum.dck @@ -0,0 +1,48 @@ +[metadata] +Name=Rumbling Slum +[Avatar] +1 Rumbling Slum Avatar|VAN +[Main] +1 Blood Ogre|M12 +1 Burning-Tree Bloodscale|GPT +1 Burning-Tree Shaman|GPT +1 Clan Defiance|GTC +2 Forest|C13|1 +3 Forest|C13|2 +1 Ghor-Clan Savage|GPT +1 Ground Assault|GTC +1 Gruul Charm|GTC +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Ragebeast|GTC +1 Gruul Turf|PC2 +1 Guild Feud|RTR +1 Guttersnipe|C13 +1 Mountain|C13|1 +2 Mountain|C13|2 +2 Mountain|C13|4 +1 Petrified Wood-Kin|GPT +1 Pillar of the Paruns|DIS +1 Pit Fight|GTC +1 Predatory Focus|GPT +1 Rabble-Rouser|GPT +1 Savage Twister|C13 +1 Scab-Clan Berserker|ORI +1 Scab-Clan Giant|DGM +1 Scab-Clan Mauler|GPT +1 Silhana Ledgewalker|PC2 +1 Skarrg, the Rage Pits|PC2 +1 Skarrgan Pit-Skulk|GPT +1 Skarrgan Skybreaker|GPT +1 Stomping Ground|GPT +1 Stormblood Berserker|M12 +1 War's Toll|DIS +1 Zhur-Taa Druid|DGM +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Ruric Thar, the Unbowed.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Ruric Thar, the Unbowed.dck new file mode 100644 index 00000000000..98e0987be08 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Ruric Thar, the Unbowed.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Ruric Thar, the Unbowed +[Commander] +1 Ruric Thar, the Unbowed|DGM +[Main] +1 Burning-Tree Bloodscale|GPT +1 Burning-Tree Emissary|GTC +1 Burning-Tree Shaman|GPT +1 Feral Animist|GPT +2 Forest|PC2|3 +2 Forest|PC2|4 +1 Ghor-Clan Rampager|GTC +1 Gruul Cluestone|DGM +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Keyrune|GTC +1 Gruul Ragebeast|GTC +1 Gruul Signet|GPT +1 Gruul Turf|PC2 +1 Gruul War Plow|GPT +3 Mountain|PC2|2 +2 Mountain|PC2|3 +1 Pillar of the Paruns|DIS +1 Rubblehulk|GTC +1 Ruination Wurm|GTC +1 Rumbling Slum|GPT +1 Savageborn Hydra|DGM +1 Scab-Clan Giant|DGM +1 Scab-Clan Mauler|GPT +1 Skarrg Guildmage|GTC +1 Skarrg, the Rage Pits|PC2 +1 Skarrgan Skybreaker|GPT +1 Stomping Ground|GPT +1 Streetbreaker Wurm|GPT +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Wild Cantor|GPT +1 Zhur-Taa Ancient|DGM +1 Zhur-Taa Druid|DGM +1 Zhur-Taa Swine|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Ulasht, the Hate Seed.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Ulasht, the Hate Seed.dck new file mode 100644 index 00000000000..84493e862b3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/Ulasht, the Hate Seed.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Ulasht, the Hate Seed +[Commander] +1 Ulasht, the Hate Seed|GPT +[Main] +1 Burning-Tree Shaman|GPT +1 Clan Defiance|GTC +1 Domri Rade|GTC +1 Forest|RTR|2 +2 Forest|RTR|4 +1 Forest|RTR|5 +1 Ghor-Clan Rampager|GTC +1 Giant Solifuge|GPT +1 Gruul Charm|GTC +1 Gruul Cluestone|DGM +1 Gruul Guildgate|C13 +1 Gruul Guildmage|GPT +1 Gruul Keyrune|GTC +1 Gruul Ragebeast|GTC +1 Gruul Signet|GPT +1 Gruul Turf|PC2 +1 Gruul War Chant|DGM +1 Gruul War Plow|GPT +1 Killer Instinct|GPT +1 Mountain|RTR|3 +3 Mountain|RTR|4 +1 Mountain|RTR|5 +1 Pillar of the Paruns|DIS +1 Rubblebelt Raiders|GTC +1 Rubblehulk|GTC +1 Rumbling Slum|GPT +1 Savageborn Hydra|DGM +1 Scab-Clan Giant|DGM +1 Signal the Clans|GTC +1 Skarrg Guildmage|GTC +1 Skarrg, the Rage Pits|PC2 +1 Skarrgan Skybreaker|GPT +1 Stomping Ground|GPT +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Wreak Havoc|GPT +1 Zhur-Taa Ancient|DGM +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/_events.txt new file mode 100644 index 00000000000..18d61b4cb7a --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Gruul Turf/_events.txt @@ -0,0 +1,9 @@ +Name:Gruul Bloodrush|Deck:Gruul Bloodrush.dck|Variant:None|Avatar:Rubblehulk|Desc: +Name:Gruul Bloodthirst|Deck:Gruul Bloodthirst.dck|Variant:None|Avatar:Furyborn Hellkite|Desc: +Name:Nephilim of Ravnica|Deck:Nephilim of Ravnica.dck|Variant:None|Avatar:Ink-Treader Nephilim|Desc: +Name:Borborygmos|Deck:Borborygmos.dck|Variant:Commander|Avatar:Borborygmos|Desc: +Name:Borboygmos Enraged|Deck:Borboygmos Enraged.dck|Variant:Commander|Avatar:Borboygmos Enraged|Desc: +Name:Ruric Thar, the Unbowed|Deck:Ruric Thar, the Unbowed.dck|Variant:Commander|Avatar:Ruric Thar, the Unbowed|Desc: +Name:Ulasht, the Hate Seed|Deck:Ulasht, the Hate Seed.dck|Variant:Commander|Avatar:Ulasht, the Hate Seed|Desc: +Name:Rumbling Slum|Deck:Rumbling Slum.dck|Variant:Vanguard|Avatar:Rumbling Slum|Desc: +Name:Domri Rade|Deck:Domri Rade.dck|Variant:Planeswalker|Avatar:Domri Rade|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Izzet Overload.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Izzet Overload.dck new file mode 100644 index 00000000000..7530d0f785b --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Izzet Overload.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Izzet Overload +[Main] +1 Blustersquall|C15 +1 Chemister's Trick|RTR +1 Counterflux|C15 +1 Cyclonic Rift|C14 +1 Downsize|RTR +1 Dragonshift|DGM +1 Dynacharge|RTR +1 Electrickery|RTR +1 Epic Experiment|C15 +1 Goblin Electromancer|C15 +1 Hypersonic Dragon|RTR +1 Invoke the Firemind|GPT +3 Island|C13|1 +1 Island|C13|2 +1 Island|C13|4 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +1 Mercurial Chemister|RTR +1 Mizzium Mortars|C15 +1 Mizzium Skin|RTR +1 Mizzix of the Izmagnus|C15 +2 Mountain|C13|2 +2 Mountain|C13|4 +1 Nivmagus Elemental|RTR +1 Pillar of the Paruns|DIS +1 Steam Vents|RTR +1 Street Spasm|C13 +1 Teleportal|RTR +1 Transguild Promenade|C13 +1 Vandalblast|C15 +1 Weapon Surge|DGM \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Izzet Replicate.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Izzet Replicate.dck new file mode 100644 index 00000000000..87ca4f710a0 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Izzet Replicate.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Izzet Replicate +[Main] +1 Cerebral Vortex|GPT +1 Djinn Illuminatus|GPT +1 Gigadrowse|GPT +1 Goblin Electromancer|C15 +1 Gridlock|GTC +1 Island|RAV|1 +2 Island|RAV|2 +2 Island|RAV|3 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Chronarch|GPT +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +1 Leap of Flame|GPT +1 Mimeofacture|GPT +2 Mountain|RAV|1 +1 Mountain|RAV|3 +1 Mountain|RAV|4 +1 Nivix, Aerie of the Firemind|GPT +1 Pillar of the Paruns|DIS +1 Pyromatics|GPT +1 Quicken|M14 +1 Remand|RAV +1 Reroute|RAV +1 Shattering Spree|GPT +1 Siege of Towers|GPT +1 Steam Vents|RTR +1 Telling Time|RAV +1 Thoughtflare|RTR +1 Thunderheads|GPT +1 Train of Thought|GPT +1 Transguild Promenade|C13 +1 Turn // Burn|DGM +1 Vacuumelt|GPT \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Jhoira of the Ghitu.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Jhoira of the Ghitu.dck new file mode 100644 index 00000000000..06e56072f99 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Jhoira of the Ghitu.dck @@ -0,0 +1,50 @@ +[metadata] +Name=Jhoira of the Ghitu +[Avatar] +1 Jhoira of the Ghitu Avatar|VAN +[Main] +1 Blast of Genius|DGM +1 Blistercoil Weird|RTR +1 Counterflux|C15 +1 Cyclonic Rift|C14 +1 Djinn Illuminatus|GPT +1 Electrolyze|GPT +1 Epic Experiment|C15 +1 Essence Backlash|RTR +1 Eye of the Storm|RAV +1 Fluxcharger|DGM +1 Gelectrode|GPT +1 Goblin Electromancer|C15 +1 Hypersonic Dragon|RTR +1 Invoke the Firemind|GPT +2 Island|C13|1 +1 Island|C13|2 +2 Island|C13|4 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Chronarch|GPT +1 Izzet Guildgate|C15 +1 Melek, Izzet Paragon|C15 +1 Mizzix of the Izmagnus|C15 +1 Mountain|C13|1 +2 Mountain|C13|3 +1 Mountain|C13|4 +1 Niv-Mizzet, Dracogenius|RTR +1 Nivix Cyclops|DGM +1 Nivix, Aerie of the Firemind|GPT +1 Nivmagus Elemental|RTR +1 Pillar of the Paruns|DIS +1 Quicken|M14 +1 Steam Vents|RTR +1 Stitch in Time|GPT +1 Thoughtflare|RTR +1 Transguild Promenade|C13 +1 Uncovered Clues|DGM +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Melek, Izzet Paragon.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Melek, Izzet Paragon.dck new file mode 100644 index 00000000000..16336f426e8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Melek, Izzet Paragon.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Melek, Izzet Paragon +[Commander] +1 Melek, Izzet Paragon|DGM +[Main] +1 Blistercoil Weird|RTR +1 Cyclonic Rift|C14 +1 Djinn Illuminatus|GPT +1 Epic Experiment|C15 +1 Flow of Ideas|RAV +1 Fluxcharger|DGM +1 Gelectrode|GPT +1 Goblin Electromancer|C15 +1 Goblin Flectomancer|GPT +1 Guttersnipe|C13 +1 Hypersonic Dragon|RTR +2 Island|C13|2 +1 Island|C13|3 +2 Island|C13|4 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Chronarch|GPT +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +2 Mountain|C13|2 +1 Mountain|C13|3 +1 Mountain|C13|4 +1 Nivix Cyclops|DGM +1 Nivix Guildmage|C13 +1 Nivix, Aerie of the Firemind|GPT +1 Nivmagus Elemental|RTR +1 Pillar of the Paruns|DIS +1 Steam Vents|RTR +1 Stitch in Time|GPT +1 Tablet of the Guilds|RTR +1 Thoughtflare|RTR +1 Transguild Promenade|C13 +1 Uncovered Clues|DGM +1 Wee Dragonauts|GPT +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Mizzix of the Izmagus.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Mizzix of the Izmagus.dck new file mode 100644 index 00000000000..d919231fd61 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Mizzix of the Izmagus.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Mizzix of the Izmagus +[Commander] +1 Mizzix of the Izmagnus|C15 +[Main] +1 Blast of Genius|DGM +1 Cerebral Vortex|GPT +1 Chemister's Trick|RTR +1 Counterflux|C15 +1 Dragonshift|DGM +1 Electrolyze|GPT +1 Epic Experiment|C15 +1 Essence Backlash|RTR +1 Firemind's Foresight|C15 +1 Goblin Rally|RTR +1 Invoke the Firemind|GPT +3 Island|RTR|1 +2 Island|RTR|5 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +1 Leap of Flame|GPT +1 Mizzium Mortars|C15 +1 Mizzium Transreliquat|GPT +2 Mountain|RTR|2 +3 Mountain|RTR|4 +1 Nivix, Aerie of the Firemind|GPT +1 Schismotivate|GPT +1 Siege of Towers|GPT +1 Steam Vents|RTR +1 Stitch in Time|GPT +1 Tablet of the Guilds|RTR +1 Thoughtflare|RTR +1 Transguild Promenade|C13 +1 Turn // Burn|DGM +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Niv-Mizzet, Dracogenius.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Niv-Mizzet, Dracogenius.dck new file mode 100644 index 00000000000..31ce8d0c9e9 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Niv-Mizzet, Dracogenius.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Niv-Mizzet, Dracogenius +[Commander] +1 Niv-Mizzet, Dracogenius|RTR +[Main] +1 Blast of Genius|DGM +1 Dragonshift|DGM +1 Electrolyze|GPT +1 Epic Experiment|C15 +1 Essence Backlash|RTR +1 Furyborn Hellkite|M12 +1 Gelectrode|GPT +1 Goblin Test Pilot|DGM +1 Hellkite Tyrant|GTC +1 Hunted Dragon|C15 +1 Hypersonic Dragon|RTR +1 Invoke the Firemind|GPT +3 Island|C15|2 +1 Island|C15|4 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +1 Izzet Staticaster|RTR +1 Mercurial Chemister|RTR +1 Mountain|C15|2 +2 Mountain|C15|3 +2 Mountain|C15|4 +1 Nivix, Aerie of the Firemind|GPT +1 Pillar of the Paruns|DIS +1 Ral Zarek|DGM +1 Steam Vents|RTR +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Turn // Burn|DGM +1 Utvara Hellkite|RTR +1 Wee Dragonauts|GPT diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Niv-Mizzet, the Firemind.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Niv-Mizzet, the Firemind.dck new file mode 100644 index 00000000000..3c1a2603a27 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Niv-Mizzet, the Firemind.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Niv-Mizzet, the Firemind +[Commander] +1 Niv-Mizzet, the Firemind|GPT +[Main] +1 Blast of Genius|DGM +1 Cerebral Vortex|GPT +1 Electrolyze|GPT +1 Epic Experiment|C15 +1 Flow of Ideas|RAV +1 Goblin Electromancer|C15 +1 Ignorant Bliss|DIS +1 Invoke the Firemind|GPT +1 Island|RAV|1 +1 Island|RAV|2 +3 Island|RAV|3 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +1 Lore Broker|RAV +1 Mercurial Chemister|RTR +1 Mindmoil|RAV +3 Mountain|RAV|2 +1 Mountain|RAV|4 +1 Niv-Mizzet, Dracogenius|RTR +1 Nivix Guildmage|C13 +1 Nivix, Aerie of the Firemind|GPT +1 Pillar of the Paruns|DIS +1 Quicken|M14 +1 Remand|RAV +1 Reroute|RAV +1 Scatter Arc|GTC +1 Steam Vents|RTR +1 Thoughtflare|RTR +1 Tin Street Market|GTC +1 Train of Thought|GPT +1 Transguild Promenade|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Ral Zarek.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Ral Zarek.dck new file mode 100644 index 00000000000..e9630297ff1 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Ral Zarek.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Ral Zarek +[Main] +1 Blistercoil Weird|RTR +1 Electrolyze|GPT +1 Epic Experiment|C15 +1 Essence Backlash|RTR +1 Fluxcharger|DGM +1 Gelectrode|GPT +1 Goblin Electromancer|C15 +1 Goblin Test Pilot|DGM +1 Hypersonic Dragon|RTR +1 Invoke the Firemind|GPT +2 Island|RTR|3 +1 Island|RTR|4 +2 Island|RTR|5 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Cluestone|DGM +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Izzet Keyrune|RTR +1 Izzet Signet|C15 +1 Izzet Staticaster|RTR +1 Mizzix of the Izmagnus|C15 +2 Mountain|RTR|1 +1 Mountain|RTR|3 +1 Mountain|RTR|5 +1 Nivix Cyclops|DGM +1 Nivix Guildmage|C13 +1 Nivix, Aerie of the Firemind|GPT +1 Nivmagus Elemental|RTR +1 Petrahydrox|GPT +1 Pillar of the Paruns|DIS +1 Ral Zarek|DGM +1 Steam Vents|RTR +1 Stitch in Time|GPT +1 Teleportal|RTR +1 Transguild Promenade|C13 +1 Wee Dragonauts|GPT diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Tibor and Lumia.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Tibor and Lumia.dck new file mode 100644 index 00000000000..c94fb33a36c --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/Tibor and Lumia.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Tibor and Lumia +[Commander] +1 Tibor and Lumia|GPT +[Main] +1 Blistercoil Weird|RTR +1 Cerebral Vortex|GPT +1 Chemister's Trick|RTR +1 Counterflux|C15 +1 Djinn Illuminatus|GPT +1 Dragonshift|DGM +1 Epic Experiment|C15 +1 Firemind's Foresight|C15 +1 Fluxcharger|DGM +1 Frostburn Weird|RTR +1 Goblin Electromancer|C15 +1 Goblin Flectomancer|GPT +1 Hypersonic Dragon|RTR +1 Invoke the Firemind|GPT +3 Island|RTR|1 +2 Island|RTR|5 +1 Izzet Boilerworks|C15 +1 Izzet Charm|RTR +1 Izzet Chronarch|GPT +1 Izzet Guildgate|C15 +1 Izzet Guildmage|GPT +1 Leap of Flame|GPT +1 Mercurial Chemister|RTR +1 Mountain|RTR|1 +2 Mountain|RTR|2 +1 Mountain|RTR|4 +1 Nivix Guildmage|C13 +1 Nivix, Aerie of the Firemind|GPT +1 Nivmagus Elemental|RTR +1 Pillar of the Paruns|DIS +1 Steam Vents|RTR +1 Stitch in Time|GPT +1 Tablet of the Guilds|RTR +1 Teleportal|RTR +1 Transguild Promenade|C13 +1 Turn // Burn|DGM +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/_events.txt new file mode 100644 index 00000000000..77210473e69 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Izzet Boilerworks/_events.txt @@ -0,0 +1,9 @@ +Name:Izzet Overload|Deck:Izzet Overload.dck|Variant:None|Avatar:Teleportal|Desc: +Name:Izzet Replicate|Deck:Izzet Replicate.dck|Variant:None|Avatar:Djinn Illuminatus|Desc: +Name:Melek, Izzet Paragon|Deck:Melek, Izzet Paragon.dck|Variant:Commander|Avatar:Melek, Izzet Paragon|Desc: +Name:Niv-Mizzet, Dracogenius|Deck:Niv-Mizzet, Dracogenius.dck|Variant:Commander|Avatar:Niv-Mizzet, Dracogenius|Desc: +Name:Mizzix of the Izmagus|Deck:Mizzix of the Izmagus.dck|Variant:Commander|Avatar:Mizzix of the Izmagus|Desc: +Name:Niv-Mizzet, the Firemind|Deck:Niv-Mizzet, the Firemind.dck|Variant:Commander|Avatar:Niv-Mizzet, the Firemind|Desc: +Name:Tibor and Lumia|Deck:Tibor and Lumia.dck|Variant:Commander|Avatar:Tibor and Lumia|Desc: +Name:Jhoira of the Ghitu|Deck:Jhoira of the Ghitu.dck|Variant:Vanguard|Avatar:Jhoira of the Ghitu|Desc: +Name:Ral Zarek|Deck:Ral Zarek.dck|Variant:Planeswalker|Avatar:Ral Zarek|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Ghost Council of Orzhova.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Ghost Council of Orzhova.dck new file mode 100644 index 00000000000..39f80544d10 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Ghost Council of Orzhova.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Ghost Council of Orzhova +[Commander] +1 Ghost Council of Orzhova|GPT +[Main] +1 Absolver Thrull|GPT +1 Belfry Spirit|GPT +1 Benediction of Moons|GPT +1 Blind Hunter|GPT +1 Cartel Aristocrat|GTC +1 Cry of Contrition|GPT +1 Crypt Ghast|C14 +1 Culling Sun|GPT +1 Dark Confidant|RAV +1 Deathpact Angel|GTC +1 Desecration Demon|RTR +1 Empty the Catacombs|RAV +1 Exhumer Thrull|GPT +1 Godless Shrine|GPT +1 Graven Dominator|GPT +1 High Priest of Penance|GTC +1 Merciless Eviction|GTC +1 Mortify|GPT +1 Orzhov Basilica|C15 +1 Orzhov Euthanist|GPT +1 Orzhov Guildgate|C15 +1 Orzhov Pontiff|GPT +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +1 Pillory of the Sleepless|GPT +1 Plains|C15|2 +2 Plains|C15|3 +1 Plains|C15|4 +1 Pontiff of Blight|C14 +1 Purge the Profane|GTC +1 Seize the Soul|GPT +4 Swamp|C15|3 +1 Swamp|C15|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Vizkopa Guildmage|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Karlov of the Ghost Council.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Karlov of the Ghost Council.dck new file mode 100644 index 00000000000..26425efb7d1 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Karlov of the Ghost Council.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Karlov of the Ghost Council +[Commander] +1 Karlov of the Ghost Council|C15 +[Main] +1 Agent of Masks|GPT +1 Alms Beast|GTC +1 Blind Hunter|GPT +1 Blood Baron of Vizkopa|DGM +1 Culling Sun|GPT +1 Debt to the Deathless|DGM +1 Gift of Orzhova|GTC +1 Godless Shrine|GPT +1 Immortal Servitude|GTC +1 Kingpin's Pet|GTC +1 Merciless Eviction|GTC +1 Mourning Thrull|GPT +1 Obzedat's Aid|DGM +1 One Thousand Lashes|GTC +1 Orzhov Basilica|C15 +1 Orzhov Charm|GTC +1 Orzhov Cluestone|C15 +1 Orzhov Guildgate|C15 +1 Orzhov Guildmage|GPT +1 Orzhov Keyrune|GTC +1 Orzhov Signet|C15 +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +1 Pillory of the Sleepless|GPT +2 Plains|C13|1 +1 Plains|C13|2 +1 Plains|C13|3 +1 Plains|C13|4 +1 Purge the Profane|GTC +1 Souls of the Faultless|GPT +2 Swamp|C13|2 +1 Swamp|C13|3 +1 Swamp|C13|4 +1 Tablet of the Guilds|RTR +1 Tithe Drinker|DGM +1 Transguild Promenade|C13 +1 Treasury Thrull|C15 +1 Vizkopa Guildmage|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Obzedat, Ghost Council.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Obzedat, Ghost Council.dck new file mode 100644 index 00000000000..374de5cfce3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Obzedat, Ghost Council.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Obzedat, Ghost Council +[Commander] +1 Obzedat, Ghost Council|GTC +[Main] +1 Basilica Guards|GTC +1 Basilica Screecher|GTC +1 Blind Obedience|GTC +1 Blood Baron of Vizkopa|DGM +1 Crypt Ghast|C14 +1 Culling Sun|GPT +1 Deathpact Angel|GTC +1 Gift of Orzhova|GTC +1 Godless Shrine|GPT +1 Kingpin's Pet|GTC +1 Knight of Obligation|GTC +1 Merciless Eviction|GTC +1 Obzedat's Aid|DGM +1 Orzhov Basilica|C15 +1 Orzhov Charm|GTC +1 Orzhov Cluestone|C15 +1 Orzhov Guildgate|C15 +1 Orzhov Guildmage|GPT +1 Orzhov Keyrune|GTC +1 Orzhov Signet|C15 +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +1 Plains|C15|1 +1 Plains|C15|2 +1 Plains|C15|3 +1 Plains|C15|4 +1 Pontiff of Blight|C14 +2 Swamp|C15|2 +3 Swamp|C15|3 +1 Syndic of Tithes|GTC +1 Syndicate Enforcer|GTC +1 Tablet of the Guilds|RTR +1 Thrull Parasite|GTC +1 Tithe Drinker|DGM +1 Transguild Promenade|C13 +1 Treasury Thrull|C15 +1 Vizkopa Confessor|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Orzhov Extort.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Orzhov Extort.dck new file mode 100644 index 00000000000..eb317b47462 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Orzhov Extort.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Orzhov Extort +[Main] +1 Basilica Guards|GTC +1 Basilica Screecher|GTC +1 Blind Obedience|GTC +1 Crypt Ghast|C14 +1 Debt to the Deathless|DGM +1 Gift of Orzhova|GTC +1 Godless Shrine|GPT +1 Kingpin's Pet|GTC +1 Knight of Obligation|GTC +1 Merciless Eviction|GTC +1 Mortify|GPT +1 Obzedat's Aid|DGM +1 One Thousand Lashes|GTC +1 Orzhov Basilica|C15 +1 Orzhov Charm|GTC +1 Orzhov Cluestone|C15 +1 Orzhov Guildgate|C15 +1 Orzhov Guildmage|GPT +1 Orzhov Keyrune|GTC +1 Orzhov Signet|C15 +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +2 Plains|C14|2 +1 Plains|C14|3 +1 Plains|C14|4 +1 Pontiff of Blight|C14 +1 Purge the Profane|GTC +2 Swamp|C14|1 +1 Swamp|C14|2 +2 Swamp|C14|4 +1 Syndic of Tithes|GTC +1 Syndicate Enforcer|GTC +1 Thrull Parasite|GTC +1 Tithe Drinker|DGM +1 Transguild Promenade|C13 +1 Treasury Thrull|C15 +1 Vizkopa Confessor|GTC diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Orzhov Haunt.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Orzhov Haunt.dck new file mode 100644 index 00000000000..221ee139964 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Orzhov Haunt.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Orzhov Haunt +[Main] +1 Absolver Thrull|GPT +1 Agent of Masks|GPT +1 Belfry Spirit|GPT +1 Benediction of Moons|GPT +1 Blind Hunter|GPT +1 Castigate|GPT +1 Cry of Contrition|GPT +1 Exhumer Thrull|GPT +1 Gift of Orzhova|GTC +1 Godless Shrine|GPT +1 Graven Dominator|GPT +1 Mortify|GPT +1 Mourning Thrull|GPT +1 One Thousand Lashes|GTC +1 Orzhov Basilica|C15 +1 Orzhov Charm|GTC +1 Orzhov Cluestone|C15 +1 Orzhov Euthanist|GPT +1 Orzhov Guildgate|C15 +1 Orzhov Guildmage|GPT +1 Orzhov Keyrune|GTC +1 Orzhov Pontiff|GPT +1 Orzhov Signet|C15 +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +1 Pillory of the Sleepless|GPT +1 Plains|C13|1 +2 Plains|C13|3 +2 Plains|C13|4 +1 Profit // Loss|DGM +1 Seize the Soul|GPT +1 Souls of the Faultless|GPT +2 Swamp|C13|1 +1 Swamp|C13|2 +1 Swamp|C13|4 +1 Teysa, Orzhov Scion|GPT +1 Transguild Promenade|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Envoy of Ghosts.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Envoy of Ghosts.dck new file mode 100644 index 00000000000..ed142647210 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Envoy of Ghosts.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Teysa, Envoy of Ghosts +[Commander] +1 Teysa, Envoy of Ghosts|C15 +[Main] +1 Agent of Masks|GPT +1 Beckon Apparition|EVE +1 Blood Baron of Vizkopa|DGM +1 Castigate|GPT +1 Conjurer's Ban|GPT +1 Culling Sun|GPT +1 Deathpact Angel|GTC +1 Debt to the Deathless|DGM +1 Debtors' Knell|GPT +1 Executioner's Swing|GTC +1 Gift of Orzhova|GTC +1 Godless Shrine|GPT +1 Immortal Servitude|GTC +1 Maw of the Obzedat|DGM +1 Merciless Eviction|GTC +1 Mortify|GPT +1 Obzedat's Aid|DGM +1 One Thousand Lashes|GTC +1 Orzhov Basilica|C15 +1 Orzhov Charm|GTC +1 Orzhov Cluestone|C15 +1 Orzhov Guildgate|C15 +1 Orzhov Guildmage|GPT +1 Orzhov Keyrune|GTC +1 Orzhov Signet|C15 +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +1 Pillory of the Sleepless|GPT +1 Plains|C15|1 +1 Plains|C15|2 +3 Plains|C15|3 +1 Purge the Profane|GTC +1 Swamp|C15|2 +1 Swamp|C15|3 +2 Swamp|C15|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Orzhov Scion Vanguard.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Orzhov Scion Vanguard.dck new file mode 100644 index 00000000000..cd31387bc92 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Orzhov Scion Vanguard.dck @@ -0,0 +1,48 @@ +[metadata] +Name=Teysa, Orzhov Scion Vanguard +[Avatar] +1 Teysa, Orzhov Scion Avatar|VAN +[Main] +1 Angel of Despair|GPT +1 Beckon Apparition|EVE +1 Culling Sun|GPT +1 Deathpact Angel|GTC +1 Disembowel|RAV +1 Godless Shrine|GPT +1 Grisly Spectacle|GTC +1 Hour of Reckoning|RAV +1 Killing Glare|GTC +1 Leyline of the Meek|GPT +1 Mortify|GPT +1 Necroplasm|RAV +1 Ogre Slumlord|GTC +1 Orzhov Basilica|C15 +1 Orzhov Charm|GTC +1 Orzhov Guildgate|C15 +1 Orzhova, the Church of Deals|GPT +1 Phantom General|RTR +1 Pillar of the Paruns|DIS +1 Plains|DTK|1 +1 Plains|DTK|2 +2 Plains|DTK|3 +1 Precinct Captain|RTR +1 Seal of Doom|C15 +2 Seize the Soul|GPT +1 Smite|STH +1 Souls of the Faultless|GPT +3 Swamp|DTK|1 +2 Swamp|DTK|2 +1 Teysa, Orzhov Scion|GPT +1 Transguild Promenade|C13 +1 Triplicate Spirits|M15 +1 Twilight Drover|RAV +1 Ultimate Price|DTK +1 Wake the Reflections|DGM +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Orzhov Scion.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Orzhov Scion.dck new file mode 100644 index 00000000000..1d72987c693 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/Teysa, Orzhov Scion.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Teysa, Orzhov Scion +[Commander] +1 Teysa, Orzhov Scion|GPT +[Main] +1 Absolver Thrull|GPT +1 Belfry Spirit|GPT +1 Benediction of Moons|GPT +1 Blind Hunter|GPT +1 Cartel Aristocrat|GTC +1 Conjurer's Ban|GPT +1 Cry of Contrition|GPT +1 Culling Sun|GPT +1 Debtors' Knell|GPT +1 Exhumer Thrull|GPT +1 Godless Shrine|GPT +1 Graven Dominator|GPT +1 Maw of the Obzedat|DGM +1 Merciless Eviction|GTC +1 Mortify|GPT +1 Obzedat's Aid|DGM +1 One Thousand Lashes|GTC +1 Orzhov Basilica|C15 +1 Orzhov Cluestone|C15 +1 Orzhov Euthanist|GPT +1 Orzhov Guildgate|C15 +1 Orzhov Keyrune|GTC +1 Orzhov Pontiff|GPT +1 Orzhov Signet|C15 +1 Orzhova, the Church of Deals|GPT +1 Pillar of the Paruns|DIS +1 Pillory of the Sleepless|GPT +1 Plains|C15|1 +1 Plains|C15|2 +2 Plains|C15|3 +1 Plains|C15|4 +1 Seize the Soul|GPT +1 Sin Collector|DGM +1 Swamp|C15|1 +2 Swamp|C15|3 +1 Swamp|C15|4 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/_events.txt new file mode 100644 index 00000000000..b61b05f2800 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Orzhov Basilica/_events.txt @@ -0,0 +1,8 @@ +Name:Orzhov Extort|Deck:Orzhov Extort.dck|Variant:None|Avatar:Pontiff of Blight|Desc: +Name:Orzhov Haunt|Deck:Orzhov Haunt.dck|Variant:None|Avatar:Blind Hunter|Desc: +Name:Teysa, Orzhov Scion|Deck:Teysa, Orzhov Scion.dck|Variant:Commander|Avatar:Teysa, Orzhov Scion|Desc: +Name:Ghost Council of Orzhova|Deck:Ghost Council of Orzhova.dck|Variant:Commander|Avatar:Ghost Council of Orzhova|Desc: +Name:Karlov of the Ghost Council|Deck:Karlov of the Ghost Council.dck|Variant:Commander|Avatar:Karlov of the Ghost Council|Desc: +Name:Obzedat, Ghost Council|Deck:Obzedat, Ghost Council.dck|Variant:Commander|Avatar:Obzedat, Ghost Council|Desc: +Name:Teysa, Envoy of Ghosts|Deck:Teysa, Envoy of Ghosts.dck|Variant:Commander|Avatar:Teysa, Envoy of Ghosts|Desc: +Name:Teysa, Orzhov Scion|Deck:Teysa, Orzhov Scion Vanguard.dck|Variant:Vanguard|Avatar:Teysa, Orzhov Scion|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Exava, Rakdos Blood Witch.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Exava, Rakdos Blood Witch.dck new file mode 100644 index 00000000000..830e0299713 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Exava, Rakdos Blood Witch.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Exava, Rakdos Blood Witch +[Commander] +1 Exava, Rakdos Blood Witch|DGM +[Main] +1 Avatar of Discord|DIS +1 Blood Crypt|RTR +1 Bloodfray Giant|RTR +1 Carnival Hellsteed|RTR +1 Chaos Imps|RTR +1 Cryptborn Horror|RTR +1 Dead Reveler|RTR +1 Dreadbore|RTR +1 Gore-House Chainwalker|RTR +1 Grim Roustabout|RTR +1 Hellhole Flailer|RTR +1 Mountain|RTR|2 +1 Mountain|RTR|4 +3 Mountain|RTR|5 +1 Pillar of the Paruns|DIS +1 Rain of Gore|DIS +1 Rakdos Cackler|RTR +1 Rakdos Carnarium|C13 +1 Rakdos Charm|RTR +1 Rakdos Cluestone|DGM +1 Rakdos Drake|DGM +1 Rakdos Guildgate|C13 +1 Rakdos Guildmage|DIS +1 Rakdos Keyrune|RTR +1 Rakdos Ragemutt|RTR +1 Rakdos Shred-Freak|RTR +1 Rakdos Signet|DIS +1 Rix Maadi, Dungeon Palace|DIS +1 Slaughter Games|RTR +1 Spawn of Rix Maadi|RTR +1 Splatter Thug|RTR +1 Swamp|RTR|1 +1 Swamp|RTR|3 +1 Swamp|RTR|4 +1 Swamp|RTR|5 +1 Tablet of the Guilds|RTR +1 Thrill-Kill Assassin|RTR +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Lyzolda, the Blood Witch Vanguard.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Lyzolda, the Blood Witch Vanguard.dck new file mode 100644 index 00000000000..f9ffbc79430 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Lyzolda, the Blood Witch Vanguard.dck @@ -0,0 +1,50 @@ +[metadata] +Name=Lyzolda, the Blood Witch Vanguard +[Avatar] +1 Lyzolda, the Blood Witch Avatar|VAN +[Main] +1 Avatar of Discord|DIS +1 Blood Crypt|RTR +1 Brain Pry|DIS +1 Delirium Skeins|DIS +1 Hellhole Rats|DIS +1 Kindle the Carnage|DIS +1 Mountain|RTR|3 +1 Mountain|RTR|4 +2 Mountain|RTR|5 +1 Nihilistic Glee|DIS +1 Pack Rat|RTR +1 Pain Magnification|DIS +1 Pillar of the Paruns|DIS +1 Rakdos Augermage|DIS +1 Rakdos Carnarium|C13 +1 Rakdos Charm|RTR +1 Rakdos Cluestone|DGM +1 Rakdos Guildgate|C13 +1 Rakdos Guildmage|DIS +1 Rakdos Keyrune|RTR +1 Rakdos Pit Dragon|DIS +1 Rakdos Ragemutt|RTR +1 Rakdos Ringleader|RTR +1 Rakdos Riteknife|DIS +1 Rakdos Shred-Freak|RTR +1 Rakdos Signet|DIS +1 Rakdos's Return|RTR +1 Rakdos, Lord of Riots|RTR +1 Rix Maadi, Dungeon Palace|DIS +1 Sire of Insanity|DGM +1 Skull Rend|RTR +1 Skullmead Cauldron|DIS +2 Swamp|RTR|1 +2 Swamp|RTR|2 +1 Swamp|RTR|4 +1 Transguild Promenade|C13 +1 Viashino Racketeer|RTR +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Lyzolda, the Blood Witch.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Lyzolda, the Blood Witch.dck new file mode 100644 index 00000000000..7f85babad1b --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Lyzolda, the Blood Witch.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Lyzolda, the Blood Witch +[Commander] +1 Lyzolda, the Blood Witch|DIS +[Main] +1 Anthem of Rakdos|DIS +1 Avatar of Discord|DIS +1 Blood Crypt|RTR +1 Carnage Gladiator|DGM +1 Carnival Hellsteed|RTR +1 Cryptborn Horror|RTR +1 Dread Slag|DIS +1 Havoc Festival|RTR +1 Hellhole Flailer|RTR +1 Hellhole Rats|DIS +1 Jagged Poppet|DIS +1 Master of Cruelties|DGM +1 Morgue Burst|DGM +2 Mountain|RTR|1 +1 Mountain|RTR|4 +1 Mountain|RTR|5 +1 Pain Magnification|DIS +1 Pillar of the Paruns|DIS +1 Rakdos Augermage|DIS +1 Rakdos Carnarium|C13 +1 Rakdos Cluestone|DGM +1 Rakdos Guildgate|C13 +1 Rakdos Guildmage|DIS +1 Rakdos Ragemutt|RTR +1 Rakdos Ringleader|RTR +1 Rakdos Riteknife|DIS +1 Rakdos's Return|RTR +1 Rix Maadi, Dungeon Palace|DIS +1 Sire of Insanity|DGM +1 Skull Rend|RTR +1 Spawn of Rix Maadi|RTR +1 Swamp|RTR|2 +1 Swamp|RTR|3 +1 Swamp|RTR|4 +2 Swamp|RTR|5 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Twinstrike|DIS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Destruction.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Destruction.dck new file mode 100644 index 00000000000..7aee4d88408 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Destruction.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Rakdos Destruction +[Main] +1 Abrupt Decay|RTR +1 Angel of Despair|COM +1 Assassin's Strike|RTR +1 Blood Crypt|EXP +1 Breeding Pool|EXP +1 Crime // Punishment|DIS +1 Culling Sun|GPT +1 Dreadbore|RTR +1 Forest|HOP|1 +1 Frenzied Tilling|GTC +1 Gaze of Granite|DGM +1 Godless Shrine|EXP +1 Golgari Charm|C15 +1 Hallowed Fountain|EXP +1 Helldozer|HOP +1 High Priest of Penance|GTC +1 Hour of Reckoning|COM +1 Island|HOP|3 +1 Killing Glare|GTC +1 Mortify|CNS +1 Necroplasm|RAV +1 Overgrown Tomb|EXP +1 Plague Boiler|C13 +1 Plains|HOP|5 +1 Putrefy|C15 +1 Rapid Hybridization|C15 +1 Sacred Foundry|EXP +1 Seize the Soul|GPT +1 Steam Vents|EXP +1 Stomping Ground|EXP +1 Supreme Verdict|RTR +1 Swamp|HOP|5 +1 Temple Garden|EXP +1 Teysa, Envoy of Ghosts|C15 +1 Thespian's Stage|GTC +1 Ultimate Price|DTK +1 Vraska the Unseen|DDM +1 Watery Grave|EXP +1 Wreak Havoc|GPT +1 Wrecking Ball|MM2 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Hellbent.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Hellbent.dck new file mode 100644 index 00000000000..736fd6547e8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Hellbent.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Rakdos Hellbent +[Main] +1 Anthem of Rakdos|DIS +1 Blood Crypt|RTR +1 Cackling Flames|DIS +1 Demon's Jester|DIS +1 Demonfire|DIS +1 Dreadbore|RTR +1 Gobhobbler Rats|DIS +1 Infernal Tutor|DIS +1 Jagged Poppet|DIS +1 Mountain|C13|1 +2 Mountain|C13|3 +1 Mountain|C13|4 +1 Nihilistic Glee|DIS +1 Pillar of the Paruns|DIS +1 Ragamuffyn|DIS +1 Rakdos Augermage|DIS +1 Rakdos Carnarium|C13 +1 Rakdos Charm|RTR +1 Rakdos Cluestone|DGM +1 Rakdos Guildgate|C13 +1 Rakdos Guildmage|DIS +1 Rakdos Ickspitter|DIS +1 Rakdos Keyrune|RTR +1 Rakdos Pit Dragon|DIS +1 Rakdos Ragemutt|RTR +1 Rakdos Ringleader|RTR +1 Rakdos Shred-Freak|RTR +1 Rakdos Signet|DIS +1 Rix Maadi, Dungeon Palace|DIS +1 Slaughterhouse Bouncer|DIS +1 Slithering Shade|DIS +2 Swamp|C13|1 +2 Swamp|C13|2 +1 Swamp|C13|3 +1 Taste for Mayhem|DIS +1 Transguild Promenade|C13 +1 Twinstrike|DIS diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Unleash.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Unleash.dck new file mode 100644 index 00000000000..de464766d70 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos Unleash.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Rakdos Unleash +[Main] +1 Auger Spree|RTR +1 Blood Crypt|RTR +1 Bloodfray Giant|RTR +1 Carnival Hellsteed|RTR +1 Chaos Imps|RTR +1 Cryptborn Horror|RTR +1 Dead Reveler|RTR +1 Dreadbore|RTR +1 Exava, Rakdos Blood Witch|DGM +1 Gore-House Chainwalker|RTR +1 Grim Roustabout|RTR +1 Hellhole Flailer|RTR +1 Master of Cruelties|DGM +2 Mountain|RTR|2 +2 Mountain|RTR|4 +1 Mountain|RTR|5 +1 Pillar of the Paruns|DIS +1 Rakdos Cackler|RTR +1 Rakdos Carnarium|C13 +1 Rakdos Charm|RTR +1 Rakdos Cluestone|DGM +1 Rakdos Drake|DGM +1 Rakdos Guildgate|C13 +1 Rakdos Guildmage|DIS +1 Rakdos Keyrune|RTR +1 Rakdos Ragemutt|RTR +1 Rakdos Shred-Freak|RTR +1 Rakdos Signet|DIS +1 Rakdos's Return|RTR +1 Rakdos, Lord of Riots|RTR +1 Spawn of Rix Maadi|RTR +1 Splatter Thug|RTR +1 Swamp|RTR|1 +1 Swamp|RTR|2 +1 Swamp|RTR|4 +1 Swamp|RTR|5 +1 Thrill-Kill Assassin|RTR +1 Transguild Promenade|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos the Defiler.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos the Defiler.dck new file mode 100644 index 00000000000..41b9f46b555 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos the Defiler.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Rakdos the Defiler +[Commander] +1 Rakdos the Defiler|DIS +[Main] +1 Anthem of Rakdos|DIS +1 Auger Spree|RTR +1 Carnage Gladiator|DGM +1 Carnival Hellsteed|RTR +1 Dread Slag|DIS +1 Dreadbore|RTR +1 Havoc Festival|RTR +1 Master of Cruelties|DGM +1 Morgue Burst|DGM +1 Mountain|RTR|1 +1 Mountain|RTR|2 +2 Mountain|RTR|3 +1 Pain Magnification|DIS +1 Rain of Gore|DIS +1 Rakdos Cackler|RTR +1 Rakdos Carnarium|C13 +1 Rakdos Charm|RTR +1 Rakdos Cluestone|DGM +1 Rakdos Guildgate|C13 +1 Rakdos Guildmage|DIS +1 Rakdos Ickspitter|DIS +1 Rakdos Keyrune|RTR +1 Rakdos Ragemutt|RTR +1 Rakdos Shred-Freak|RTR +1 Rakdos Signet|DIS +1 Rakdos's Return|RTR +1 Rix Maadi Guildmage|RTR +1 Showstopper|DGM +1 Sire of Insanity|DGM +1 Skull Rend|RTR +1 Slaughter Games|RTR +1 Spawn of Rix Maadi|RTR +1 Spike Jester|DGM +3 Swamp|RTR|2 +1 Swamp|RTR|3 +1 Swamp|RTR|5 +1 Wrecking Ball|DIS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos, Lord of Riots.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos, Lord of Riots.dck new file mode 100644 index 00000000000..f3106d33bcb --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Rakdos, Lord of Riots.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Rakdos, Lord of Riots +[Commander] +1 Rakdos, Lord of Riots|RTR +[Main] +1 Anthem of Rakdos|DIS +1 Blood Crypt|RTR +1 Char|RAV +1 Demonfire|DIS +1 Dreadbore|RTR +1 Five-Alarm Fire|GTC +1 Hellhole Flailer|RTR +1 Hellhole Rats|DIS +1 Jagged Poppet|DIS +1 Master of Cruelties|DGM +1 Morgue Burst|DGM +2 Mountain|RTR|1 +1 Mountain|RTR|3 +2 Mountain|RTR|4 +1 Pain Magnification|DIS +1 Pillar of the Paruns|DIS +1 Rain of Gore|DIS +1 Rakdos Cackler|RTR +1 Rakdos Carnarium|C13 +1 Rakdos Charm|RTR +1 Rakdos Guildgate|C13 +1 Rakdos Ickspitter|DIS +1 Rakdos Ringleader|RTR +1 Rakdos's Return|RTR +1 Razortip Whip|GTC +1 Rix Maadi Guildmage|RTR +1 Rix Maadi, Dungeon Palace|DIS +1 Showstopper|DGM +1 Skull Rend|RTR +1 Swamp|RTR|3 +2 Swamp|RTR|4 +1 Swamp|RTR|5 +1 Tablet of the Guilds|RTR +1 Toil // Trouble|DGM +1 Transguild Promenade|C13 +1 Twinstrike|DIS +1 Volatile Rig|RTR +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Shattergang Brothers.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Shattergang Brothers.dck new file mode 100644 index 00000000000..1feb5f0f563 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/Shattergang Brothers.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Shattergang Brothers +[Commander] +1 Shattergang Brothers|C13 +[Main] +1 Blood Crypt|RTR +1 Desecration Demon|RTR +1 Doubling Season|RAV +1 Druidic Satchel|C13 +1 Flesh // Blood|DGM +3 Forest|RTR|1 +1 Forest|RTR|2 +1 Forest|RTR|3 +1 Golgari Germination|RAV +1 Golgari Guildmage|C13 +1 Jade Mage|C13 +1 Korozda Guildmage|C15 +1 Krenko, Mob Boss|DDN +1 Mazirek, Kraul Death Priest|C15 +1 Miming Slime|GTC +1 Mountain|RTR|4 +1 Overgrown Tomb|RTR +1 Pack Rat|RTR +1 Pillar of the Paruns|DIS +1 Savra, Queen of the Golgari|RAV +1 Scatter the Seeds|RAV +1 Shambling Shell|RAV +1 Slime Molding|RTR +1 Sporemound|M14 +1 Stomping Ground|GPT +1 Swamp|RTR|2 +1 Swamp|RTR|4 +1 Swamp|RTR|5 +1 Tablet of the Guilds|RTR +1 Thespian's Stage|GTC +1 Transguild Promenade|C13 +1 Ulasht, the Hate Seed|GPT +1 Varolz, the Scar-Striped|DGM +1 Verdant Eidolon|DIS +1 Vraska the Unseen|RTR +1 Wild Cantor|GPT +1 Woebringer Demon|RAV +1 Wurmweaver Coil|GPT +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/_events.txt new file mode 100644 index 00000000000..0cd8f242983 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Rakdos Carnarium/_events.txt @@ -0,0 +1,9 @@ +Name:Rakdos Hellbent|Deck:Rakdos Hellbent.dck|Variant:None|Avatar:Jagged Poppet|Desc: +Name:Rakdos Unleash|Deck:Rakdos Unleash.dck|Variant:None|Avatar:Hellhole Flailer|Desc: +Name:Rakdos Destruction|Deck:Rakdos Destruction.dck|Variant:None|Avatar:Helldozer|Desc: +Name:Exava, Rakdos Blood Witch|Deck:Exava, Rakdos Blood Witch.dck|Variant:Commander|Avatar:Exava, Rakdos Blood Witch|Desc: +Name:Lyzolda, the Blood Witch|Deck:Lyzolda, the Blood Witch.dck|Variant:Commander|Avatar:Lyzolda, Blood Witch|Desc: +Name:Rakdos the Defiler|Deck:Rakdos the Defiler.dck|Variant:Commander|Avatar:Rakdos the Defiler|Desc: +Name:Rakdos, Lord of Riots|Deck:Rakdos, Lord of Riots.dck|Variant:Commander|Avatar:Rakdos, Lord of Riots|Desc: +Name:Shattergang Brothers|Deck:Shattergang Brothers.dck|Variant:Commander|Avatar:Shattergang Brothers|Desc: +Name:Lyzolda, the Blood Witch|Deck:Lyzolda, the Blood Witch Vanguard.dck|Variant:Vanguard|Avatar:Lyzolda, the Blood Witch|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Chorus of the Conclave.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Chorus of the Conclave.dck new file mode 100644 index 00000000000..e5dd40d19bc --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Chorus of the Conclave.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Chorus of the Conclave +[Commander] +1 Chorus of the Conclave|COM +[Main] +1 Burst of Strength|GTC +1 Centaur's Herald|RTR +1 Common Bond|RTR +1 Crown of Convergence|RAV +1 Death's Presence|RTR +1 Doubling Season|RAV +1 Druid's Deliverance|RTR +1 Forced Adaptation|GTC +3 Forest|C13|1 +1 Forest|C13|2 +1 Forest|C13|3 +1 Hindervines|GTC +1 Ivy Lane Denizen|GTC +1 Loxodon Smiter|RTR +1 Mutant's Prey|DGM +1 Ooze Flux|GTC +1 Phytohydra|RAV +1 Pillar of the Paruns|DIS +1 Plains|C13|2 +2 Plains|C13|3 +1 Plains|C13|4 +1 Rhox Maulers|ORI +1 Selesnya Charm|C13 +1 Selesnya Cluestone|DGM +1 Selesnya Guildgate|C13 +1 Selesnya Guildmage|C13 +1 Selesnya Keyrune|RTR +1 Selesnya Sanctuary|C13 +1 Selesnya Signet|C13 +1 Silhana Ledgewalker|PC2 +1 Spire Tracer|GTC +1 Tablet of the Guilds|RTR +1 Temple Garden|RTR +1 Transguild Promenade|C13 +1 Twilight Drover|RAV +1 Vinelasher Kudzu|RAV +1 Vitu-Ghazi, the City-Tree|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Emmara Tandris.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Emmara Tandris.dck new file mode 100644 index 00000000000..02e2c45e012 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Emmara Tandris.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Emmara Tandris +[Commander] +1 Emmara Tandris|DGM +[Main] +1 Doubling Season|RAV +1 Eyes in the Skies|RTR +1 Forest|RAV|2 +3 Forest|RAV|4 +1 Growing Ranks|RTR +1 Hour of Reckoning|RAV +1 Knight Watch|GTC +1 Knightly Valor|ORI +1 Leyline of the Meek|GPT +1 Ooze Flux|GTC +1 Phantom General|RTR +1 Pillar of the Paruns|DIS +2 Plains|RAV|2 +3 Plains|RAV|4 +1 Precinct Captain|RTR +1 Rootborn Defenses|RTR +1 Security Blockade|RTR +1 Seed Spark|RAV +1 Selesnya Charm|C13 +1 Selesnya Cluestone|DGM +1 Selesnya Guildgate|C13 +1 Selesnya Guildmage|C13 +1 Selesnya Keyrune|RTR +1 Selesnya Sanctuary|C13 +1 Selesnya Signet|C13 +1 Seller of Songbirds|RTR +1 Storm Herd|GPT +1 Tablet of the Guilds|RTR +1 Temple Garden|RTR +1 Transguild Promenade|C13 +1 Triplicate Spirits|M15 +1 Trostani's Judgment|RTR +1 Twilight Drover|RAV +1 Vitu-Ghazi, the City-Tree|C13 +1 Wake the Reflections|DGM +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Gatherer of Graces Voltron.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Gatherer of Graces Voltron.dck new file mode 100644 index 00000000000..0381a77f3b3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Gatherer of Graces Voltron.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Gatherer of Graces Voltron +[Main] +1 Alpha Authority|GTC +1 Auratouched Mage|PC2 +1 Beastmaster's Magemark|GPT +1 Birds of Paradise|M12 +1 Blood Crypt|EXP +1 Bramble Elemental|PC2 +1 Breeding Pool|EXP +1 Chromatic Lantern|RTR +1 Dying Wish|GTC +1 Elemental Resonance|DIS +1 Ethereal Armor|RTR +1 Fencer's Magemark|GPT +1 Fists of Ironwood|COM +1 Followed Footsteps|RAV +1 Forest|PC2|3 +1 Gatherer of Graces|GPT +1 Gift of Orzhova|GTC +1 Godless Shrine|EXP +1 Guardian's Magemark|GPT +1 Hallowed Fountain|EXP +1 Holy Mantle|GTC +1 Infiltrator's Magemark|GPT +1 Knightly Valor|ORI +1 Necromancer's Magemark|GPT +1 One Thousand Lashes|GTC +1 Overgrown Tomb|EXP +1 Plains|PC2|5 +1 Pollenbright Wings|PC2 +1 Rogue's Passage|C15 +1 Sacred Foundry|EXP +1 Shielding Plax|DIS +1 Spectral Searchlight|CNS +1 Steam Vents|EXP +1 Stomping Ground|EXP +1 Swamp|PC2|2 +1 Temple Garden|EXP +1 Thespian's Stage|GTC +1 Three Dreams|PC2 +1 Transguild Promenade|C13 +1 Watery Grave|EXP +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Loxodon Hierarch.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Loxodon Hierarch.dck new file mode 100644 index 00000000000..f9d12538788 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Loxodon Hierarch.dck @@ -0,0 +1,50 @@ +[metadata] +Name=Loxodon Hierarch +[Avatar] +1 Loxodon Hierarch Avatar|VAN +[Main] +1 Advent of the Wurm|DGM +1 Armada Wurm|RTR +1 Call of the Conclave|RTR +1 Centaur's Herald|RTR +1 Coursers' Accord|RTR +1 Doubling Season|RAV +1 Druid's Deliverance|RTR +1 Druidic Satchel|C13 +1 Emmara Tandris|DGM +1 Fists of Ironwood|RAV +1 Forest|C13|1 +3 Forest|C13|2 +1 Forest|C13|4 +1 Grove of the Guardian|RTR +1 Growing Ranks|RTR +1 Jade Mage|C13 +1 Pillar of the Paruns|DIS +1 Plains|C13|1 +2 Plains|C13|3 +1 Pollenbright Wings|PC2 +1 Scatter the Seeds|RAV +1 Selesnya Charm|C13 +1 Selesnya Evangel|RAV +1 Selesnya Guildgate|C13 +1 Selesnya Guildmage|C13 +1 Selesnya Sanctuary|C13 +1 Slime Molding|RTR +1 Sporemound|M14 +1 Sundering Growth|RTR +1 Temple Garden|RTR +1 Tolsimir Wolfblood|RAV +1 Transguild Promenade|C13 +1 Trostani, Selesnya's Voice|RTR +1 Vitu-Ghazi Guildmage|RTR +1 Vitu-Ghazi, the City-Tree|C13 +1 Voice of Resurgence|DGM +1 Wayfaring Temple|RTR +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Selesnya Convoke.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Selesnya Convoke.dck new file mode 100644 index 00000000000..e5817c54056 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Selesnya Convoke.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Selesnya Convoke +[Main] +1 Autochthon Wurm|RAV +1 Chant of Vitu-Ghazi|RAV +1 Chord of Calling|M15 +1 Conclave Equenaut|RAV +1 Conclave Phalanx|RAV +1 Conclave's Blessing|RAV +1 Devouring Light|M15 +1 Ephemeral Shields|M15 +1 Feral Incarnation|M15 +1 Forest|C13|1 +1 Forest|C13|2 +2 Forest|C13|4 +1 Gather Courage|M15 +1 Guardian of Vitu-Ghazi|RAV +1 Hour of Reckoning|RAV +1 Living Totem|M15 +1 Meditation Puzzle|M15 +1 Overwhelm|M15 +1 Pillar of the Paruns|DIS +2 Plains|C13|1 +1 Plains|C13|3 +2 Plains|C13|4 +1 Return to the Ranks|M15 +1 Root-Kin Ally|RAV +1 Scatter the Seeds|RAV +1 Selesnya Cluestone|DGM +1 Selesnya Guildgate|C13 +1 Selesnya Keyrune|RTR +1 Selesnya Sanctuary|C13 +1 Selesnya Signet|C13 +1 Seraph of the Masses|M15 +1 Siege Wurm|M15 +1 Sundering Vitae|RAV +1 Temple Garden|RTR +1 Transguild Promenade|C13 +1 Triplicate Spirits|M15 +1 Vitu-Ghazi, the City-Tree|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Selesnya Populate.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Selesnya Populate.dck new file mode 100644 index 00000000000..0e5328dbbf0 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Selesnya Populate.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Selesnya Populate +[Main] +1 Advent of the Wurm|DGM +1 Call of the Conclave|RTR +2 Coursers' Accord|RTR +1 Doubling Season|RAV +1 Druid's Deliverance|RTR +1 Eyes in the Skies|RTR +1 Forest|RAV|1 +1 Forest|RAV|2 +1 Forest|RAV|3 +1 Forest|RAV|4 +1 Grove of the Guardian|RTR +1 Growing Ranks|RTR +1 Horncaller's Chant|RTR +1 Pillar of the Paruns|DIS +1 Plains|RAV|2 +2 Plains|RAV|3 +2 Plains|RAV|4 +1 Pollenbright Wings|PC2 +1 Rootborn Defenses|RTR +1 Scion of Vitu-Ghazi|DGM +1 Selesnya Charm|C13 +1 Selesnya Cluestone|DGM +1 Selesnya Evangel|RAV +1 Selesnya Guildgate|C13 +1 Selesnya Guildmage|C13 +1 Selesnya Keyrune|RTR +1 Selesnya Sanctuary|C13 +1 Selesnya Signet|C13 +1 Sundering Growth|RTR +1 Temple Garden|RTR +1 Transguild Promenade|C13 +1 Trostani's Judgment|RTR +1 Trostani, Selesnya's Voice|RTR +1 Vitu-Ghazi Guildmage|RTR +1 Vitu-Ghazi, the City-Tree|C13 +1 Wake the Reflections|DGM +1 Wayfaring Temple|RTR \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Tolsimir Wolfblood.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Tolsimir Wolfblood.dck new file mode 100644 index 00000000000..7410df76627 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Tolsimir Wolfblood.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Tolsimir Wolfblood +[Commander] +1 Tolsimir Wolfblood|RAV +[Main] +1 Armada Wurm|RTR +1 Armored Wolf-Rider|DGM +1 Autochthon Wurm|RAV +1 Centaur Healer|RTR +1 Collective Blessing|RTR +1 Common Bond|RTR +1 Congregation at Dawn|RAV +1 Crown of Convergence|RAV +4 Forest|RTR|1 +1 Forest|RTR|4 +1 Guardian of Vitu-Ghazi|RAV +1 Heroes' Reunion|RTR +1 Loxodon Smiter|RTR +1 Phytohydra|RAV +1 Pillar of the Paruns|DIS +1 Plains|RTR|1 +1 Plains|RTR|2 +1 Plains|RTR|4 +1 Plains|RTR|5 +1 Pollenbright Wings|PC2 +1 Risen Sanctuary|RTR +1 Seeds of Strength|RAV +1 Selesnya Charm|C13 +1 Selesnya Cluestone|DGM +1 Selesnya Guildgate|C13 +1 Selesnya Guildmage|C13 +1 Selesnya Keyrune|RTR +1 Selesnya Sagittars|RAV +1 Selesnya Sanctuary|C13 +1 Selesnya Signet|C13 +1 Tablet of the Guilds|RTR +1 Temple Garden|RTR +1 Transguild Promenade|C13 +1 Trostani's Summoner|DGM +1 Unflinching Courage|DGM +1 Vitu-Ghazi, the City-Tree|C13 +1 Voice of Resurgence|DGM +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Trostani, Selesnyas Voice.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Trostani, Selesnyas Voice.dck new file mode 100644 index 00000000000..4e5e3c5afa1 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Trostani, Selesnyas Voice.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Trostani, Selesnya's Voice +[Commander] +1 Trostani, Selesnya's Voice|RTR +[Main] +1 Advent of the Wurm|DGM +1 Alive // Well|DGM +1 Armada Wurm|RTR +1 Call of the Conclave|RTR +1 Coursers' Accord|RTR +1 Crown of Convergence|RAV +1 Doubling Season|RAV +1 Druidic Satchel|C13 +1 Forest|RTR|1 +1 Forest|RTR|3 +2 Forest|RTR|5 +1 Giant Adephage|GTC +1 Grove of the Guardian|RTR +1 Growing Ranks|RTR +1 Hour of Reckoning|RAV +1 Pillar of the Paruns|DIS +1 Plains|RTR|1 +3 Plains|RTR|4 +1 Plains|RTR|5 +1 Pollenbright Wings|PC2 +1 Selesnya Charm|C13 +1 Selesnya Cluestone|DGM +1 Selesnya Evangel|RAV +1 Selesnya Guildgate|C13 +1 Selesnya Guildmage|C13 +1 Selesnya Keyrune|RTR +1 Selesnya Sanctuary|C13 +1 Selesnya Signet|C13 +1 Sundering Growth|RTR +1 Tablet of the Guilds|RTR +1 Temple Garden|RTR +1 Transguild Promenade|C13 +1 Trostani's Summoner|DGM +1 Vitu-Ghazi Guildmage|RTR +1 Vitu-Ghazi, the City-Tree|C13 +1 Voice of Resurgence|DGM +1 Wayfaring Temple|RTR +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Yeva, Natures Herald.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Yeva, Natures Herald.dck new file mode 100644 index 00000000000..4314b42013a --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/Yeva, Natures Herald.dck @@ -0,0 +1,36 @@ +[metadata] +Name=Yeva, Nature's Herald +[Commander] +1 Yeva, Nature's Herald|M13 +[Main] +1 Brushstrider|RTR +1 Carven Caryatid|RAV +1 Centaur's Herald|RTR +1 Civic Wayfinder|RAV +1 Conclave Naturalists|ORI +1 Dryad Sophisticate|GPT +1 Elvish Skysweeper|C14 +1 Forest|M13|1 +3 Forest|M13|2 +8 Forest|M13|3 +3 Forest|M13|4 +1 Gatecreeper Vine|RTR +1 Indrik Stomphowler|C15 +1 Ivy Lane Denizen|GTC +1 Jade Mage|C13 +1 Kraul Warrior|DGM +1 Living Totem|M15 +1 Loaming Shaman|C15 +1 Oak Street Innkeeper|RTR +1 Silhana Ledgewalker|PC2 +1 Silhana Starfletcher|GPT +1 Spire Tracer|GTC +1 Sporemound|M14 +1 Sprouting Phytohydra|DIS +1 Starved Rusalka|GPT +1 Stone-Seeder Hierophant|RAV +1 Sylvan Primordial|GTC +1 Vinelasher Kudzu|RAV +1 Yeva's Forcemage|ORI +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/_events.txt new file mode 100644 index 00000000000..8e978bcd645 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Selesnya Sanctuary/_events.txt @@ -0,0 +1,9 @@ +Name:Selesnya Convoke|Deck:Selesnya Convoke.dck|Variant:None|Avatar:Autochthon Wurm|Desc: +Name:Selesnya Populate|Deck:Selesnya Populate.dck|Variant:None|Avatar:Wayfaring Temple|Desc: +Name:Gatherer of Graces Voltron|Deck:Gatherer of Graces Voltron.dck|Variant:None|Avatar:Gatherer of Graces|Desc: +Name:Chorus of the Conclave|Deck:Chorus of the Conclave.dck|Variant:Commander|Avatar:Chorus of the Conclave|Desc: +Name:Tolsimir Wolfblood|Deck:Tolsimir Wolfblood.dck|Variant:Commander|Avatar:Tolsimir Wolfblood|Desc: +Name:Emmara Tandris|Deck:Emmara Tandris.dck|Variant:Commander|Avatar:Emmara Tandris|Desc: +Name:Trostani, Selesnya's Voice|Deck:Trostani, Selesnya's Voice.dck|Variant:Commander|Avatar:Trostani, Selesnya's Voice|Desc: +Name:Yeva, Nature's Herald|Deck:Yeva, Nature's Herald.dck|Variant:Commander|Avatar:Yeva, Nature's Herald|Desc: +Name:Loxodon Hierarch|Deck:Loxodon Hierarch.dck|Variant:Vanguard|Avatar:Loxodon Hierarch|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Biovisionary.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Biovisionary.dck new file mode 100644 index 00000000000..048060ccc5c --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Biovisionary.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Biovisionary +[Main] +1 Biomass Mutation|GTC +1 Biovisionary|GTC +1 Breeding Pool|EXP +1 Copy Enchantment|RAV +1 Cytoshape|DIS +1 Doubling Season|MMA +1 Dryad Sophisticate|GPT +1 Followed Footsteps|RAV +3 Forest|RTR|2 +1 Forest|RTR|3 +1 Forest|RTR|5 +1 Growing Ranks|RTR +1 Island|RTR|2 +3 Island|RTR|3 +1 Island|RTR|5 +1 Novijen, Heart of Progress|C15 +1 Progenitor Mimic|DGM +1 Realmwright|GTC +1 Recollect|10E +1 Remand|MM2 +1 Seek the Horizon|RTR +1 Serene Remembrance|GTC +1 Simic Charm|GTC +1 Simic Cluestone|DGM +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Guildmage|DIS +1 Simic Keyrune|C15 +1 Simic Signet|C15 +1 Slime Molding|RTR +1 Stolen Identity|GTC +1 Stomp and Howl|DIS +1 Sundering Growth|RTR +1 Tablet of the Guilds|RTR +1 Thespian's Stage|GTC +1 Unexpected Results|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Experiment Kraj.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Experiment Kraj.dck new file mode 100644 index 00000000000..c5fed23c0b1 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Experiment Kraj.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Experiment Kraj +[Commander] +1 Experiment Kraj|DIS +[Main] +1 Beetleform Mage|DGM +1 Bioshift|GTC +1 Birds of Paradise|M12 +1 Breeding Pool|DIS +1 Cytoplast Manipulator|DIS +1 Evolution Vat|DIS +1 Forced Adaptation|GTC +1 Forest|C15|1 +1 Forest|C15|2 +2 Forest|C15|3 +1 Forest|C15|4 +1 Gyre Sage|GTC +3 Island|C15|1 +1 Island|C15|2 +1 Ivy Lane Denizen|GTC +1 Master Biomancer|GTC +1 Novijen, Heart of Progress|C15 +1 Omnibian|DIS +1 Ooze Flux|GTC +1 Pillar of the Paruns|DIS +1 Plaxcaster Frogling|DIS +1 Shielding Plax|DIS +1 Simic Basilisk|DIS +1 Simic Charm|GTC +1 Simic Cluestone|DGM +1 Simic Fluxmage|GTC +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Guildmage|DIS +1 Simic Keyrune|C15 +1 Simic Manipulator|GTC +1 Simic Ragworm|DIS +1 Simic Signet|C15 +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Vigean Graftmage|DIS +1 Zameck Guildmage|GTC +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Jace, the Living Guildpact.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Jace, the Living Guildpact.dck new file mode 100644 index 00000000000..f0bc02fe8d7 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Jace, the Living Guildpact.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Jace, the Living Guildpact +[Main] +1 Azorius Guildgate|C13 +1 Beck // Call|DGM +1 Boros Guildgate|C15 +1 Brace for Impact|DIS +1 Breaking // Entering|DGM +1 Catch // Release|DGM +1 Chromatic Lantern|RTR +1 Dimir Guildgate|C13 +1 Emmara Tandris|DGM +1 Exava, Rakdos Blood Witch|DGM +1 Flesh // Blood|DGM +1 Ghost Quarter|C15 +1 Golgari Guildgate|C15 +1 Gruul Guildgate|C13 +1 Izzet Guildgate|C15 +1 Jace, the Living Guildpact|M15 +1 Lavinia of the Tenth|DGM +1 Lobber Crew|RTR +1 Maze Abomination|DGM +1 Maze Behemoth|DGM +1 Maze Glider|DGM +1 Maze Rusher|DGM +1 Maze Sentinel|DGM +1 Maze's End|DGM +1 Melek, Izzet Paragon|DGM +1 Mirko Vosk, Mind Drinker|DGM +1 Orzhov Guildgate|C15 +1 Psychotic Fury|DIS +1 Pyroconvergence|RTR +1 Rakdos Guildgate|C13 +1 Ready // Willing|DGM +1 Rogue's Passage|C15 +1 Ruric Thar, the Unbowed|DGM +1 Selesnya Guildgate|C13 +1 Simic Guildgate|C15 +1 Tajic, Blade of the Legion|DGM +1 Teysa, Envoy of Ghosts|DGM +1 Thespian's Stage|GTC +1 Transguild Promenade|C13 +1 Varolz, the Scar-Striped|DGM +1 Vorel of the Hull Clade|DGM diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Momir Vig, Simic Visionary.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Momir Vig, Simic Visionary.dck new file mode 100644 index 00000000000..74b5781ff63 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Momir Vig, Simic Visionary.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Momir Vig, Simic Visionary +[Commander] +1 Momir Vig, Simic Visionary|DIS +[Main] +1 Aquastrand Spider|DIS +1 Bioshift|GTC +1 Bred for the Hunt|DGM +1 Breeding Pool|DIS +1 Cytoplast Manipulator|DIS +1 Cytoplast Root-Kin|DIS +1 Cytospawn Shambler|DIS +1 Elusive Krasis|GTC +1 Evolution Vat|DIS +3 Forest|RTR|1 +1 Forest|RTR|3 +1 Forest|RTR|4 +1 Helium Squirter|DIS +1 Island|RTR|2 +2 Island|RTR|4 +1 Island|RTR|5 +1 Krasis Incubation|DGM +1 Master Biomancer|GTC +1 Mystic Genesis|GTC +1 Novijen Sages|DIS +1 Novijen, Heart of Progress|C15 +1 Omnibian|DIS +1 Pillar of the Paruns|DIS +1 Plasm Capture|DGM +1 Plaxcaster Frogling|DIS +1 Simic Basilisk|DIS +1 Simic Cluestone|DGM +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Initiate|DIS +1 Simic Keyrune|C15 +1 Simic Signet|C15 +1 Sporeback Troll|DIS +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Vigean Graftmage|DIS +1 Vigean Hydropon|DIS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Momir Vig.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Momir Vig.dck new file mode 100644 index 00000000000..f5623eaa0ab --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Momir Vig.dck @@ -0,0 +1,36 @@ +[metadata] +Name=Momir Vig +[Avatar] +1 Momir Vig, Simic Visionary Avatar|VAN +[Main] +1 Biovisionary|GTC +1 Doubling Season|RAV +1 Druid's Deliverance|RTR +1 Followed Footsteps|RAV +3 Forest|RTR|1 +2 Forest|RTR|2 +3 Forest|RTR|3 +4 Forest|RTR|4 +6 Forest|RTR|5 +1 Growing Ranks|RTR +1 Island|RTR|1 +2 Island|RTR|2 +2 Island|RTR|3 +3 Island|RTR|5 +1 Leafdrake Roost|C13 +1 Mystic Genesis|GTC +1 Plasm Capture|DGM +1 Progenitor Mimic|DGM +1 Shielding Plax|DIS +1 Simic Guildmage|DIS +1 Stolen Identity|GTC +1 Sundering Growth|RTR +1 Unexpected Results|GTC +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Prime Speaker Zegana.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Prime Speaker Zegana.dck new file mode 100644 index 00000000000..4736d6ba8c8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Prime Speaker Zegana.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Prime Speaker Zegana +[Commander] +1 Prime Speaker Zegana|C15 +[Main] +1 Biovisionary|GTC +1 Breeding Pool|DIS +1 Cytoshape|DIS +1 Elusive Krasis|GTC +1 Evolution Vat|DIS +1 Experiment One|C15 +1 Fathom Mage|GTC +2 Forest|C15|1 +1 Forest|C15|3 +1 Forest|C15|4 +1 Gyre Sage|GTC +2 Island|C15|1 +1 Island|C15|2 +2 Island|C15|4 +1 Master Biomancer|GTC +1 Mystic Genesis|GTC +1 Novijen, Heart of Progress|C15 +1 Omnibian|DIS +1 Pillar of the Paruns|DIS +1 Plasm Capture|DGM +1 Progenitor Mimic|DGM +1 Renegade Krasis|DGM +1 Shambleshark|GTC +1 Simic Charm|GTC +1 Simic Cluestone|DGM +1 Simic Fluxmage|GTC +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Guildmage|DIS +1 Simic Keyrune|C15 +1 Simic Manipulator|GTC +1 Simic Signet|C15 +1 Simic Sky Swallower|DIS +1 Tablet of the Guilds|RTR +1 Transguild Promenade|C13 +1 Unexpected Results|GTC +1 Voidslime|DIS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Simic Evolve.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Simic Evolve.dck new file mode 100644 index 00000000000..82c38ab79f6 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Simic Evolve.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Simic Evolve +[Main] +1 Adaptive Snapjaw|GTC +1 Battering Krasis|DGM +1 Biomass Mutation|GTC +1 Breeding Pool|DIS +1 Clinging Anemones|GTC +1 Cloudfin Raptor|GTC +1 Crocanura|GTC +1 Death's Presence|RTR +1 Doubling Season|RAV +1 Elusive Krasis|GTC +1 Experiment One|C15 +1 Fathom Mage|GTC +1 Forest|C15|1 +2 Forest|C15|2 +2 Forest|C15|3 +1 Gyre Sage|GTC +3 Island|C15|1 +1 Island|C15|4 +1 Master Biomancer|GTC +1 Novijen, Heart of Progress|C15 +1 Ooze Flux|GTC +1 Pillar of the Paruns|DIS +1 Progenitor Mimic|DGM +1 Renegade Krasis|DGM +1 Shambleshark|GTC +1 Simic Charm|GTC +1 Simic Cluestone|DGM +1 Simic Fluxmage|GTC +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Guildmage|DIS +1 Simic Keyrune|C15 +1 Simic Manipulator|GTC +1 Simic Signet|C15 +1 Simic Sky Swallower|DIS +1 Transguild Promenade|C13 diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Simic Graft.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Simic Graft.dck new file mode 100644 index 00000000000..13cbe8a3be4 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Simic Graft.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Simic Graft +[Main] +1 Aquastrand Spider|DIS +1 Biomass Mutation|GTC +1 Breeding Pool|DIS +1 Cytoplast Manipulator|DIS +1 Cytoplast Root-Kin|DIS +1 Cytoshape|DIS +1 Cytospawn Shambler|DIS +1 Doubling Season|RAV +2 Forest|C13|2 +2 Forest|C13|3 +1 Forest|C13|4 +1 Helium Squirter|DIS +1 Island|C13|1 +1 Island|C13|2 +2 Island|C13|3 +1 Master Biomancer|GTC +1 Novijen Sages|DIS +1 Novijen, Heart of Progress|C15 +1 Omnibian|DIS +1 Pillar of the Paruns|DIS +1 Plasm Capture|DGM +1 Plaxcaster Frogling|DIS +1 Sapphire Drake|GTC +1 Simic Basilisk|DIS +1 Simic Charm|GTC +1 Simic Cluestone|DGM +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Guildmage|DIS +1 Simic Initiate|DIS +1 Simic Keyrune|C15 +1 Simic Signet|C15 +1 Sporeback Troll|DIS +1 Transguild Promenade|C13 +1 Vigean Graftmage|DIS +1 Vigean Hydropon|DIS +1 Voidslime|DIS \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Vorel of the Hull Clade.dck b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Vorel of the Hull Clade.dck new file mode 100644 index 00000000000..3655b1835fc --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/Vorel of the Hull Clade.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Vorel of the Hull Clade +[Commander] +1 Vorel of the Hull Clade|DGM +[Main] +1 Adaptive Snapjaw|GTC +1 Battering Krasis|DGM +1 Breeding Pool|DIS +1 Burst of Strength|GTC +1 Clinging Anemones|GTC +1 Cloudfin Raptor|GTC +1 Crocanura|GTC +1 Elusive Krasis|GTC +1 Evolution Vat|DIS +1 Experiment One|C15 +1 Fathom Mage|GTC +1 Forced Adaptation|GTC +3 Forest|C15|2 +2 Forest|C15|3 +1 Gyre Sage|GTC +1 Island|C15|1 +1 Island|C15|3 +2 Island|C15|4 +1 Mutant's Prey|DGM +1 Novijen, Heart of Progress|C15 +1 Pillar of the Paruns|DIS +1 Renegade Krasis|DGM +1 Sapphire Drake|GTC +1 Shambleshark|GTC +1 Simic Charm|GTC +1 Simic Cluestone|DGM +1 Simic Fluxmage|GTC +1 Simic Growth Chamber|C15 +1 Simic Guildgate|C15 +1 Simic Guildmage|DIS +1 Simic Keyrune|C15 +1 Simic Manipulator|GTC +1 Simic Signet|C15 +1 Tablet of the Guilds|RTR +1 Thrive|PCY +1 Transguild Promenade|C13 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/_events.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/_events.txt new file mode 100644 index 00000000000..0f92a44eba5 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/Simic Growth Chamber/_events.txt @@ -0,0 +1,9 @@ +Name:Simic Evolve|Deck:Simic Evolve.dck|Variant:None|Avatar:Fathom Mage|Desc: +Name:Simic Graft|Deck:Simic Graft.dck|Variant:None|Avatar:Cytoplast Root-Kin|Desc: +Name:Biovisionary|Deck:Biovisionary.dck|Variant:None|Avatar:Biovisionary|Desc: +Name:Experiment Kraj|Deck:Experiment Kraj.dck|Variant:Commander|Avatar:Experiment Kraj|Desc: +Name:Prime Speaker Zegana|Deck:Prime Speaker Zegana.dck|Variant:Commander|Avatar:Prime Speaker Zegana|Desc: +Name:Momir Vig, Simic Visionary|Deck:Momir Vig, Simic Visionary.dck|Variant:Commander|Avatar:Momir Vig, Simic Visionary|Desc: +Name:Vorel of the Hull Clade|Deck:Vorel of the Hull Clade.dck|Variant:Commander|Avatar:Vorel of the Hull Clade|Desc: +Name:Momir Vig|Deck:Momir Vig.dck|Variant:Vanguard|Avatar:Momir Vig, Simic Visionary|Desc: +Name:Jace, the Living Guildpact|Deck:Jace, the Living Guildpact.dck|Variant:Planeswalker|Avatar:Jace, the Living Guildpact|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/banned_cards.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/banned_cards.txt new file mode 100644 index 00000000000..5ea25846a80 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/banned_cards.txt @@ -0,0 +1,22 @@ +Ajani's Chosen +Ancient Amphitheater +Arbiter of Knollridge +Bident of Thassa +Chameleon Colossus +Cold-Eyed Selkie +Crib Swap +Dawnglare Invoker +Dictate of Heliod +Dreamstone Hedron +Eldrazi Monument +Etherium-Horn Sorcerer +Kessig Cagebreakers +Kor Sanctifiers +Oran-Rief, the Vastwood +Orim's Thunder +Orochi Hatchery +Satyr Wayfinder +Taurean Mauler +Urza's Incubator +Urza's Rage +Wistful Selkie \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/cards.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/cards.txt new file mode 100644 index 00000000000..d8da8078250 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/cards.txt @@ -0,0 +1,57 @@ +Druidic Satchel +Gem of Becoming +Obelisk of Urd +Will-Forged Golem +Seraph of the Masses +Soul of Ravnica +Duskhunter Bat +Shattergang Brothers +Blood Ogre +Bloodlord of Vaasgoth +Bloodrage Vampire +Carnage Wurm +Furyborn Hellkite +Gorehorn Minotaurs +Lurking Crocodile +Stormblood Berserker +Vampire Outcasts +Bounding Krasis +Conclave Naturalists +Covenant of Blood +Crowd's Favor +Endless Obedience +Ephemeral Shields +Feral Incarnation +Living Totem +Meditation Puzzle +Return to the Ranks +Stain the Mind +Stoke the Flames +Triplicate Spirits +Unmake the Graves +Deadbridge Shaman +Extract from Darkness +Mizzium Meddler +Mazirek, Kraul Death Priest +Fungal Sprouting +Jade Mage +Sporemound +Jace, the Living Guildpact +Krenko's Command +Krenko's Enforcer +Krenko, Mob Boss +Leyline of Anticipation +Leyline of Punishment +Leyline of Sanctity +Leyline of Vitality +Mantle of Webs +Nightsnare +Shattergang Brothers +Yeva's Forcemage +Yeva, Nature's Herald +Rhox Maulers +Goblin Glory Chaser +Scab-Clan Berserker +Undercity Troll +Orzhov Advokist +Izzet Chemister diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/plane_cards.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/plane_cards.txt new file mode 100644 index 00000000000..a9b95ffa61d --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/plane_cards.txt @@ -0,0 +1,7 @@ +Agyrem +Grand Ossuary +Izzet Steam Maze +Orzhova +Prahv +Selesnya Loft Gardens +Undercity Reaches \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/regions.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/regions.txt new file mode 100644 index 00000000000..2d8f55e3952 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/regions.txt @@ -0,0 +1,10 @@ +Name:Azorius Chancery|Art:Azorius Chancery|Colors:WU +Name:Boros Garrison|Art:Boros Garrison|Colors:RW +Name:Dimir Aqueduct|Art:Dimir Aqueduct|Colors:UB +Name:Golgari Rot Farm|Art:Golgari Rot Farm|Colors:BG +Name:Gruul Turf|Art:Gruul Turf|Colors:RG +Name:Izzet Boilerworks|Art:Izzet Boilerworks|Colors:UR +Name:Orzhov Basilica|Art:Orzhov Basilica|Colors:WB +Name:Rakdos Carnarium|Art:Rakdos Carnarium|Colors:BR +Name:Selesnya Sanctuary|Art:Selesnya Sanctuary|Colors:GW +Name:Simic Growth Chamber|Art:Simic Growth Chamber|Colors:GU \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Ravnica_Classic/sets.txt b/forge-gui/res/conquest/planes/Ravnica_Classic/sets.txt new file mode 100644 index 00000000000..3c3c83e4d79 --- /dev/null +++ b/forge-gui/res/conquest/planes/Ravnica_Classic/sets.txt @@ -0,0 +1,7 @@ +RAV +GPT +DIS +RTR +GTC +DGM +C15 \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/AnaxCymede.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/AnaxCymede.dck new file mode 100644 index 00000000000..d74da49cb6d --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/AnaxCymede.dck @@ -0,0 +1,39 @@ +[metadata] +Name=PCTHSAnaxCymede +[Commander] +1 Anax and Cymede|THS +[Main] +1 Ajani's Presence|JOU +1 Akroan Crusader|THS +1 Akroan Skyguard|BNG +1 Arena Athlete|THS +1 Blinding Flare|JOU +1 Coordinated Assault|THS +1 Dawnbringer Charioteers|JOU +1 Desperate Stand|JOU +1 Dragon Mantle|THS +1 Elite Skirmisher|BNG +1 Fabled Hero|THS +1 Favored Hoplite|THS +1 Glimpse the Sun God|BNG +1 Gods Willing|THS +1 Lagonna-Band Trailblazer|JOU +1 Launch the Fleet|JOU +1 Mana Confluence|JOU +1 Mortal's Ardor|BNG +1 Mountain|THS|2 +2 Mountain|THS|3 +2 Mountain|THS|4 +1 Phalanx Formation|JOU +1 Phalanx Leader|THS +2 Plains|THS|1 +3 Plains|THS|3 +3 Plains|THS|4 +1 Rouse the Mob|JOU +1 Satyr Hoplite|JOU +1 Temple of Triumph|THS +1 Tethmos High Priest|JOU +1 Titan's Strength|ORI +1 Wingsteed Rider|THS +[Sideboard] +1 Spite of Mogis|JOU diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/Brimaz.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Brimaz.dck new file mode 100644 index 00000000000..4d14c660a03 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Brimaz.dck @@ -0,0 +1,31 @@ +[metadata] +Name=PCTHSBrimaz +[Commander] +1 Brimaz, King of Oreskos|BNG +[Main] +1 Ajani Steadfast|M15 +1 Ajani's Chosen|C15 +1 Ajani's Presence|JOU +1 Ajani's Sunstriker|CNS +1 Archetype of Courage|BNG +1 Banishing Light|C15 +1 Chariot of Victory|JOU +1 Chosen by Heliod|THS +1 Divine Verdict|M15 +1 Enlightened Ascetic|ORI +1 Evangel of Heliod|THS +1 God-Favored General|BNG +1 Hall of Triumph|JOU +1 Launch the Fleet|JOU +1 Leonin Snarecaster|THS +1 Oreskos Sun Guide|BNG +1 Oreskos Swiftclaw|M15 +1 Ornitharch|BNG +16 Plains|C15|1 +1 Reprisal|JOU +1 Revoke Existence|BNG +1 Sigil of Valor|ORI +1 Spear of Heliod|THS +1 Vanguard of Brimaz|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/ElspethPW.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/ElspethPW.dck new file mode 100644 index 00000000000..9538313474c --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/ElspethPW.dck @@ -0,0 +1,36 @@ +[metadata] +Name=PCTHSElspethPW +[Commander] +1 Kytheon, Hero of Akros|ORI +[Main] +1 Acolyte's Reward|BNG +1 Ajani's Presence|JOU +1 Armory of Iroas|JOU +1 Banishing Light|C15 +1 Cavalry Pegasus|THS +1 Chariot of Victory|JOU +1 Dawnbringer Charioteers|JOU +1 Divine Verdict|M15 +1 Elspeth, Sun's Champion|THS +1 Fabled Hero|THS +1 Gideon's Avenger|M12 +1 Gideon's Lawkeeper|M12 +1 Gideon's Phalanx|ORI +1 Gods Willing|THS +1 Godsend|JOU +1 Hixus, Prison Warden|ORI +1 Kytheon's Irregulars|ORI +1 Kytheon's Tactics|ORI +1 Nykthos, Shrine to Nyx|THS +1 Ordeal of Heliod|THS +4 Plains|THS|1 +5 Plains|THS|2 +3 Plains|THS|3 +3 Plains|THS|4 +1 Sightless Brawler|JOU +1 Soldier of the Pantheon|THS +1 Suppression Bonds|ORI +1 Traveling Philosopher|THS +1 Wingsteed Rider|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/Iroas.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Iroas.dck new file mode 100644 index 00000000000..f1e71a7cedb --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Iroas.dck @@ -0,0 +1,38 @@ +[metadata] +Name=PCTHSIroas +[Commander] +1 Iroas, God of Victory|JOU +[Main] +1 Archetype of Aggression|BNG +1 Archetype of Courage|BNG +1 Armament of Nyx|JOU +1 Banishing Light|C15 +1 Chained to the Rocks|THS +1 Dragon Mantle|THS +1 Eidolon of Countless Battles|BNG +1 Everflame Eidolon|BNG +1 Forgeborn Oreads|JOU +1 Ghostblade Eidolon|C15 +1 Harvestguard Alseids|JOU +1 Helm of the Gods|ORI +1 Hero of Iroas|BNG +1 Hopeful Eidolon|THS +1 Iroas's Champion|ORI +1 Mana Confluence|JOU +1 Mogis's Warhound|JOU +3 Mountain|THS|3 +2 Mountain|THS|4 +1 Nyx-Fleece Ram|JOU +1 Nyxborn Rollicker|BNG +1 Nyxborn Shieldmate|BNG +1 Oppressive Rays|M15 +1 Ordeal of Heliod|THS +1 Ordeal of Purphoros|THS +3 Plains|THS|1 +2 Plains|THS|3 +3 Plains|THS|4 +1 Sightless Brawler|JOU +1 Spearpoint Oread|THS +1 Temple of Triumph|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/Kalemne.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Kalemne.dck new file mode 100644 index 00000000000..af830750c85 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Kalemne.dck @@ -0,0 +1,40 @@ +[metadata] +Name=PCTHSKalemne +[Commander] +1 Kalemne, Disciple of Iroas|C15 +[Main] +1 Aegis Angel|M15 +1 Astral Cornucopia|BNG +1 Banishing Light|C15 +1 Burnished Hart|C15 +1 Chained to the Rocks|THS +1 Cyclops of Eternal Fury|JOU +1 Guardians of Meletis|ORI +1 Hundred-Handed One|THS +1 Kalemne's Captain|C15 +1 Lagonna-Band Trailblazer|JOU +1 Mana Confluence|JOU +2 Mountain|M15|1 +1 Mountain|M15|2 +2 Mountain|M15|3 +1 Mountain|M15|4 +1 Nykthos, Shrine to Nyx|THS +1 Nyx-Fleece Ram|JOU +1 Opaline Unicorn|THS +1 Pharagax Giant|BNG +2 Plains|M15|1 +2 Plains|M15|2 +2 Plains|M15|3 +2 Plains|M15|4 +1 Quarry Colossus|JOU +1 Soul of Theros|M15 +1 Springleaf Drum|BNG +1 Stoneshock Giant|C15 +1 Stormbreath Dragon|THS +1 Suppression Bonds|ORI +1 Temple of Triumph|THS +1 Thunder Brute|BNG +1 Traveler's Amulet|THS +1 Yoked Ox|ORI +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/Mogis.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Mogis.dck new file mode 100644 index 00000000000..21b03208b0c --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/Mogis.dck @@ -0,0 +1,37 @@ +[metadata] +Name=PCTHSMogis +[Commander] +1 Mogis, God of Slaughter|BNG +[Main] +1 Borderland Minotaur|THS +1 Deathbellow Raider|THS +1 Fanatic of Mogis|THS +1 Felhide Brawler|BNG +1 Felhide Minotaur|THS +1 Felhide Petrifier|JOU +1 Felhide Spiritbinder|BNG +1 Flurry of Horns|JOU +1 Gnarled Scarhide|JOU +1 Hero's Downfall|THS +1 Kragma Butcher|BNG +1 Kragma Warcaller|THS +1 Lightning Strike|M15 +1 Magma Spray|JOU +1 Mana Confluence|JOU +1 Minotaur Skullcleaver|THS +6 Mountain|C15|1 +1 Mountain|THS|2 +2 Mountain|THS|4 +1 Necrobite|M15 +1 Oracle of Bones|BNG +1 Pensive Minotaur|JOU +1 Prowler's Helm|THS +1 Rageblood Shaman|THS +1 Ragemonger|BNG +1 Searing Blood|BNG +4 Swamp|C15|1 +1 Swamp|THS|2 +1 Unknown Shores|OGW +1 Warchanter of Mogis|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/MonoRDev.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/MonoRDev.dck new file mode 100644 index 00000000000..dfbdaf5f095 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/MonoRDev.dck @@ -0,0 +1,19 @@ +[metadata] +Name=PCTHSRedDev +[Main] +3 Dragon Mantle|THS +2 Eidolon of the Great Revel|JOU +3 Fanatic of Mogis|THS +3 Firedrinker Satyr|THS +2 Lightning Strike|M15 +2 Mogis's Warhound|JOU +2 Mountain|THS|1 +4 Mountain|THS|3 +5 Mountain|THS|4 +3 Nykthos, Shrine to Nyx|THS +3 Prophetic Flamespeaker|JOU +3 Satyr Hoplite|JOU +2 Searing Blood|BNG +3 Thunderous Might|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/WRSoldiers.dck b/forge-gui/res/conquest/planes/Theros_Classic/Akros/WRSoldiers.dck new file mode 100644 index 00000000000..3fff80edb82 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/WRSoldiers.dck @@ -0,0 +1,20 @@ +[metadata] +Name=PCTHSWRSoldiers +[Main] +3 Ajani's Presence|JOU +3 Akroan Crusader|THS +3 Akroan Hoplite|THS +2 Banishing Light|C15 +3 Favored Hoplite|THS +3 God-Favored General|BNG +3 Gods Willing|THS +3 Launch the Fleet|JOU +3 Lightning Strike|M15 +3 Mana Confluence|JOU +2 Mountain|THS|4 +4 Plains|THS|1 +1 Plains|THS|3 +1 Plains|THS|4 +3 Temple of Triumph|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Akros/_events.txt b/forge-gui/res/conquest/planes/Theros_Classic/Akros/_events.txt new file mode 100644 index 00000000000..29ac3fe1df3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Akros/_events.txt @@ -0,0 +1,8 @@ +Name:Anax and Cymede|Deck:AnaxCymede.dck|Variant:Commander|Avatar:Anax and Cymede|Desc: +Name:Devotion to Fight|Deck:MonoRDev.dck|Variant:None|Avatar:Firedrinker Satyr|Desc: +Name:Brimaz|Deck:Brimaz.dck|Variant:Commander|Avatar:Brimaz, King of Oreskos|Desc: +Name:Akroan Soldiers|Deck:WRSoldiers.dck|Variant:None|Avatar:Akroan Hoplite|Desc: +Name:Iroas|Deck:Iroas.dck|Variant:Commander|Avatar:Iroas, God of Victory|Desc: +Name:Kalemne|Deck:Kalemne.dck|Variant:Commander|Avatar:Kalemne, Disciple of Iroas|Desc: +Name:Mogis|Deck:Mogis.dck|Variant:Commander|Avatar:Mogis, God of Slaughter|Desc: +Name:Elspeth|Deck:ElspethPW.dck|Variant:Planeswalker|Avatar:Elspeth, Sun's Champion|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Daxos.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Daxos.dck new file mode 100644 index 00000000000..adcc43cac31 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Daxos.dck @@ -0,0 +1,38 @@ +[metadata] +Name=PCTHSDaxos +[Commander] +1 Daxos of Meletis|THS +[Main] +1 Aerial Formation|JOU +1 Ajani's Presence|JOU +1 Akroan Skyguard|BNG +1 Aqueous Form|THS +1 Banishing Light|C15 +1 Battlefield Thaumaturge|JOU +1 Battlewise Hoplite|THS +1 Cavalry Pegasus|THS +1 Curse of the Swine|THS +1 Dakra Mystic|JOU +1 Eidolon of Countless Battles|BNG +1 Fabled Hero|THS +1 Favored Hoplite|THS +1 Glimpse the Sun God|BNG +1 Gods Willing|THS +4 Island|C15|1 +1 Island|THS|4 +1 Launch the Fleet|JOU +1 Mana Confluence|JOU +1 Nimbus Naiad|THS +1 Ordeal of Heliod|THS +1 Ordeal of Thassa|THS +1 Phalanx Formation|JOU +1 Phalanx Leader|THS +4 Plains|C15|1 +3 Plains|THS|1 +1 Plains|THS|3 +1 Polymorphous Rush|JOU +1 Temple of Enlightenment|BNG +1 Unknown Shores|OGW +1 War-Wing Siren|JOU +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Ephara.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Ephara.dck new file mode 100644 index 00000000000..96ee980d64e --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Ephara.dck @@ -0,0 +1,39 @@ +[metadata] +Name=PCTHSEphara +[Commander] +1 Ephara, God of the Polis|BNG +[Main] +1 Ajani's Chosen|C15 +1 Archetype of Courage|BNG +1 Archetype of Imagination|BNG +1 Armament of Nyx|JOU +1 Banishing Light|C15 +1 Breaching Hippocamp|THS +1 Burnished Hart|C15 +1 Cloaked Siren|JOU +1 Eidolon of Countless Battles|BNG +1 Ephara's Enlightenment|BNG +1 Flitterstep Eidolon|BNG +1 Ghostblade Eidolon|C15 +1 Harvestguard Alseids|JOU +1 Hixus, Prison Warden|ORI +1 Hypnotic Siren|JOU +2 Island|C15|2 +3 Island|C15|3 +1 Mana Confluence|JOU +1 Nimbus Naiad|THS +1 Nyx-Fleece Ram|JOU +1 Observant Alseid|THS +1 Oppressive Rays|M15 +1 Ordeal of Thassa|THS +3 Plains|C15|1 +1 Plains|C15|2 +1 Plains|C15|3 +3 Plains|C15|4 +1 Sightless Brawler|JOU +1 Suppression Bonds|ORI +1 Temple of Enlightenment|BNG +1 Unknown Shores|OGW +1 Whitewater Naiads|JOU +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Keranos.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Keranos.dck new file mode 100644 index 00000000000..f4a83384128 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Keranos.dck @@ -0,0 +1,40 @@ +[metadata] +Name=PCTHSKeranos2 +[Commander] +1 Keranos, God of Storms|JOU +[Main] +1 Aqueous Form|THS +1 Bolt of Keranos|BNG +1 Dissolve|THS +1 Fated Infatuation|BNG +1 Flamespeaker Adept|THS +1 Interpret the Signs|JOU +3 Island|THS|1 +1 Island|THS|2 +2 Island|THS|3 +2 Island|THS|4 +1 Knowledge and Power|JOU +1 Lightning Strike|M15 +1 Magma Jet|THS +1 Mana Confluence|JOU +1 Meletis Charlatan|THS +3 Mountain|THS|1 +1 Mountain|THS|2 +1 Mountain|THS|4 +1 Omenspeaker|THS +1 Portent of Betrayal|THS +1 Prescient Chimera|THS +1 Prognostic Sphinx|THS +1 Riddle of Lightning|JOU +1 Sigiled Starfish|ORI +1 Spellheart Chimera|THS +1 Spite of Mogis|JOU +1 Stormcaller of Keranos|BNG +1 Stormchaser Chimera|JOU +1 Sudden Storm|BNG +1 Temple of Epiphany|JOU +1 Titan's Strength|ORI +1 Twinflame|JOU +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/KioraPW.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/KioraPW.dck new file mode 100644 index 00000000000..22932871416 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/KioraPW.dck @@ -0,0 +1,39 @@ +[metadata] +Name=KioraPW +[Commander] +1 Kruphix, God of Horizons|JOU +[Main] +1 Boon Satyr|THS +1 Courser of Kruphix|BNG +1 Dakra Mystic|JOU +1 Dictate of Kruphix|JOU +1 Dissolve|THS +1 Floodtide Serpent|BNG +3 Forest|THS|1 +2 Forest|THS|3 +1 Island|THS|1 +3 Island|THS|2 +2 Island|THS|3 +3 Island|THS|4 +1 Kiora's Dismissal|JOU +1 Kiora's Follower|BNG +1 Kiora, the Crashing Wave|BNG +1 Kruphix's Insight|JOU +1 Mana Confluence|JOU +1 Nullify|BNG +1 Nykthos, Shrine to Nyx|THS +1 Polukranos, World Eater|THS +1 Prophet of Kruphix|THS +1 Riptide Chimera|JOU +1 Scourge of Fleets|JOU +1 Sealock Monster|THS +1 Setessan Tactics|JOU +1 Shipbreaker Kraken|THS +1 Sylvan Caryatid|THS +1 Temple of Mystery|THS +1 Time to Feed|THS +1 Voyage's End|THS +1 Voyaging Satyr|THS +1 Whelming Wave|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Medomai.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Medomai.dck new file mode 100644 index 00000000000..0677bbab415 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/Medomai.dck @@ -0,0 +1,39 @@ +[metadata] +Name=PCTHSMedomai +[Commander] +1 Medomai the Ageless|THS +[Main] +1 Aerie Worshippers|BNG +1 Arbiter of the Ideal|BNG +1 Banishing Light|C15 +1 Celestial Flare|ORI +1 Dawnbringer Charioteers|JOU +1 Gods Willing|THS +1 Hopeful Eidolon|THS +1 Horizon Scholar|THS +1 Hour of Need|JOU +1 Island|ORI|1 +3 Island|ORI|2 +1 Island|ORI|3 +3 Island|ORI|4 +1 Meletis Charlatan|THS +1 Mnemonic Wall|C13 +1 Nimbus Naiad|THS +1 Omenspeaker|THS +1 Phalanx Leader|THS +3 Plains|ORI|1 +1 Plains|ORI|2 +2 Plains|ORI|3 +1 Prognostic Sphinx|THS +1 Reprisal|JOU +1 Retraction Helix|BNG +1 Sage of Hours|JOU +1 Sphinx's Disciple|BNG +1 Supply-Line Cranes|JOU +1 Temple of Enlightenment|BNG +1 Thassa's Emissary|THS +1 Triton Tactics|THS +1 Unknown Shores|OGW +1 Vortex Elemental|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/MonoUDev.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/MonoUDev.dck new file mode 100644 index 00000000000..04cb1b9d29b --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/MonoUDev.dck @@ -0,0 +1,16 @@ +[metadata] +Name=PCTHSBlueDev +[Main] +2 Aqueous Form|THS +3 Bident of Thassa|C15 +3 Claustrophobia|ORI +3 Harbinger of the Tides|ORI +12 Island|C15|1 +3 Master of Waves|THS +3 Nykthos, Shrine to Nyx|THS +3 Thassa, God of the Sea|THS +3 Tidebinder Mage|M14 +3 Triton Shorestalker|JOU +2 Whitewater Naiads|JOU +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/UWControl.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/UWControl.dck new file mode 100644 index 00000000000..da3ea3a6652 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/UWControl.dck @@ -0,0 +1,22 @@ +[metadata] +Name=PCTHSUWControl +[Main] +3 Banishing Light|C15 +3 Dissolve|THS +2 Divine Verdict|M15 +2 Elspeth, Sun's Champion|THS +3 Font of Fortunes|JOU +2 Guardians of Meletis|ORI +2 Hixus, Prison Warden|ORI +3 Island|THS|1 +1 Island|THS|2 +5 Island|THS|3 +3 Nullify|BNG +2 Plains|THS|1 +1 Plains|THS|2 +1 Plains|THS|3 +2 Plains|THS|4 +2 Prognostic Sphinx|THS +3 Temple of Enlightenment|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/UWHeroic.dck b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/UWHeroic.dck new file mode 100644 index 00000000000..4cfa0f2731a --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/UWHeroic.dck @@ -0,0 +1,18 @@ +[metadata] +Name=PCTHSUWHeroic +[Main] +3 Ajani's Presence|JOU +3 Aqueous Form|THS +3 Battlewise Hoplite|THS +3 Favored Hoplite|THS +3 Gods Willing|THS +3 Hero of Iroas|BNG +4 Island|C15|1 +3 Lagonna-Band Trailblazer|JOU +2 Ordeal of Heliod|THS +3 Ordeal of Thassa|THS +6 Plains|C15|1 +3 Temple of Enlightenment|BNG +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Meletis/_events.txt b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/_events.txt new file mode 100644 index 00000000000..717151241f6 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Meletis/_events.txt @@ -0,0 +1,8 @@ +Name:Battlewise Hoplites|Deck:UWHeroic.dck|Variant:None|Avatar:Battlewise Hoplite|Desc: +Name:Daxos|Deck:Daxos.dck|Variant:Commander|Avatar:Daxos of Meletis|Desc: +Name:Devotion to Wisdom|Deck:MonoUDev.dck|Variant:None|Avatar:Master of Waves|Desc: +Name:Ephara|Deck:Ephara.dck|Variant:Commander|Avatar:Ephara, God of the Polis|Desc: +Name:Control your Nightmares|Deck:UWControl.dck|Variant:None|Avatar:Prognostic Sphinx|Desc: +Name:Keranos|Deck:Keranos.dck|Variant:Commander|Avatar:Keranos, God of Storms|Desc: +Name:Medomai|Deck:Medomai.dck|Variant:Commander|Avatar:Medomai the Ageless|Desc: +Name:Kiora|Deck:KioraPW.dck|Variant:Planeswalker|Avatar:Kiora, the Crashing Wave|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Erebos.dck b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Erebos.dck new file mode 100644 index 00000000000..24ae4b9648c --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Erebos.dck @@ -0,0 +1,35 @@ +[metadata] +Name=PCTHSErebos +[Commander] +1 Erebos, God of the Dead|THS +[Main] +1 Abhorrent Overlord|THS +1 Agent of Erebos|JOU +1 Agent of the Fates|THS +1 Bile Blight|BNG +1 Boon of Erebos|THS +1 Brain Maggot|JOU +1 Claim of Erebos|BNG +1 Cruel Feeding|JOU +1 Dictate of Erebos|JOU +1 Doomwake Giant|C15 +1 Drown in Sorrow|BNG +1 Erebos's Emissary|THS +1 Erebos's Titan|ORI +1 Gray Merchant of Asphodel|C14 +1 Herald of Torment|BNG +1 Hero's Downfall|THS +1 King Macar, the Gold-Cursed|JOU +1 Master of the Feast|JOU +1 Nykthos, Shrine to Nyx|THS +1 Ordeal of Erebos|THS +1 Silence the Believers|JOU +1 Squelching Leeches|JOU +6 Swamp|THS|1 +2 Swamp|THS|2 +4 Swamp|THS|3 +3 Swamp|THS|4 +1 Thoughtseize|THS +1 Whip of Erebos|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Heliod.dck b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Heliod.dck new file mode 100644 index 00000000000..ebbf56cfeca --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Heliod.dck @@ -0,0 +1,34 @@ +[metadata] +Name=PCTHSHeliod +[Commander] +1 Heliod, God of the Sun|THS +[Main] +1 Aegis Angel|M15 +1 Aegis of the Gods|JOU +1 Ajani's Chosen|C15 +1 Archetype of Courage|BNG +1 Banishing Light|C15 +1 Chosen by Heliod|THS +1 Dictate of Heliod|C15 +1 Divine Verdict|M15 +1 Evangel of Heliod|THS +1 God-Favored General|BNG +1 Heliod's Emissary|THS +1 Hopeful Eidolon|THS +1 Nykthos, Shrine to Nyx|THS +1 Nyx-Fleece Ram|JOU +1 Nyxborn Shieldmate|BNG +1 Observant Alseid|THS +1 Oppressive Rays|M15 +1 Ordeal of Heliod|THS +1 Ornitharch|BNG +8 Plains|THS|2 +4 Plains|THS|3 +3 Plains|THS|4 +1 Sightless Brawler|JOU +1 Skybind|JOU +1 Spear of Heliod|THS +1 Spirit of the Labyrinth|BNG +1 Starfield of Nyx|ORI +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Nylea.dck b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Nylea.dck new file mode 100644 index 00000000000..1a521ec7709 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Nylea.dck @@ -0,0 +1,34 @@ +[metadata] +Name=PCTHSNylea +[Commander] +1 Nylea, God of the Hunt|THS +[Main] +1 Arbor Colossus|C15 +1 Archetype of Endurance|BNG +1 Boon Satyr|THS +1 Bow of Nylea|THS +1 Courser of Kruphix|BNG +1 Eidolon of Blossoms|JOU +1 Fade into Antiquity|THS +1 Font of Fertility|JOU +8 Forest|THS|1 +6 Forest|THS|2 +1 Forest|THS|4 +1 Herald of the Pantheon|ORI +1 Hunter's Prowess|BNG +1 Leafcrown Dryad|THS +1 Nessian Game Warden|JOU +1 Noble Quarry|C15 +1 Nykthos, Shrine to Nyx|THS +1 Nylea's Disciple|THS +1 Nylea's Emissary|THS +1 Nylea's Presence|THS +1 Ordeal of Nylea|THS +1 Polukranos, World Eater|THS +1 Reverent Hunter|THS +1 Setessan Tactics|JOU +1 Spirespine|JOU +1 Sylvan Caryatid|THS +1 Time to Feed|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Purphoros.dck b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Purphoros.dck new file mode 100644 index 00000000000..7102538a754 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Purphoros.dck @@ -0,0 +1,35 @@ +[metadata] +Name=PCTHSPurphoros +[Commander] +1 Purphoros, God of the Forge|THS +[Main] +1 Anger of the Gods|THS +1 Archetype of Aggression|BNG +1 Cyclops of Eternal Fury|JOU +1 Dictate of the Twin Gods|JOU +1 Eidolon of the Great Revel|JOU +1 Ember Swallower|THS +1 Everflame Eidolon|BNG +1 Flame-Wreathed Phoenix|BNG +1 Forgeborn Oreads|JOU +1 Forgestoker Dragon|BNG +1 Hammer of Purphoros|THS +1 Harness by Force|JOU +1 Lightning Strike|M15 +1 Magma Jet|THS +6 Mountain|THS|1 +3 Mountain|THS|2 +3 Mountain|THS|3 +3 Mountain|THS|4 +1 Nykthos, Shrine to Nyx|THS +1 Nyxborn Rollicker|BNG +1 Ordeal of Purphoros|THS +1 Prophetic Flamespeaker|JOU +1 Purphoros's Emissary|THS +1 Rage of Purphoros|THS +1 Satyr Firedancer|BNG +1 Searing Blood|BNG +1 Spearpoint Oread|THS +1 Stormbreath Dragon|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Thassa.dck b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Thassa.dck new file mode 100644 index 00000000000..dc5bc744f06 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/Thassa.dck @@ -0,0 +1,35 @@ +[metadata] +Name=PCTHSThassa +[Commander] +1 Thassa, God of the Sea|THS +[Main] +1 Aqueous Form|THS +1 Artisan of Forms|THS +1 Bident of Thassa|C15 +1 Dakra Mystic|JOU +1 Daring Thief|JOU +1 Flitterstep Eidolon|BNG +1 Floodtide Serpent|BNG +1 Hypnotic Siren|JOU +4 Island|THS|1 +4 Island|THS|2 +2 Island|THS|3 +5 Island|THS|4 +1 Nykthos, Shrine to Nyx|THS +1 Ordeal of Thassa|THS +1 Perplexing Chimera|BNG +1 Pin to the Earth|JOU +1 Scourge of Fleets|JOU +1 Sealock Monster|THS +1 Shipbreaker Kraken|THS +1 Thassa's Bounty|THS +1 Thassa's Devourer|JOU +1 Thassa's Emissary|THS +1 Thassa's Ire|JOU +1 Thassa's Rebuff|BNG +1 Triton Shorestalker|JOU +1 Tromokratis|BNG +1 Vortex Elemental|BNG +1 Whelming Wave|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/XenagosPW.dck b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/XenagosPW.dck new file mode 100644 index 00000000000..4433117f9a3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/XenagosPW.dck @@ -0,0 +1,43 @@ +[metadata] +Name=PCTHSXenagosPW +[Commander] +1 Xenagos, God of Revels|BNG +[Main] +1 Anger of the Gods|THS +1 Boon Satyr|THS +1 Centaur Battlemaster|THS +1 Courser of Kruphix|BNG +1 Destructive Revelry|THS +1 Eidolon of the Great Revel|JOU +1 Fanatic of Xenagos|BNG +1 Firedrinker Satyr|THS +1 Forest|M15|1 +1 Forest|M15|2 +1 Forest|M15|3 +3 Forest|M15|4 +1 Lightning Strike|M15 +1 Magma Jet|THS +1 Mana Confluence|JOU +2 Mountain|M15|1 +1 Mountain|M15|2 +2 Mountain|M15|3 +1 Mountain|M15|4 +1 Nykthos, Shrine to Nyx|THS +1 Nyxborn Rollicker|BNG +1 Pheres-Band Raiders|BNG +1 Pheres-Band Thunderhoof|JOU +1 Pheres-Band Tromper|BNG +1 Pheres-Band Warchief|JOU +1 Polukranos, World Eater|THS +1 Reckless Reveler|BNG +1 Satyr Firedancer|BNG +1 Searing Blood|BNG +1 Stormbreath Dragon|THS +1 Swordwise Centaur|BNG +1 Temple of Abandon|THS +1 Traveler's Amulet|THS +1 Unknown Shores|OGW +1 Voyaging Satyr|THS +1 Xenagos, the Reveler|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Nyx/_events.txt b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/_events.txt new file mode 100644 index 00000000000..2480d021156 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Nyx/_events.txt @@ -0,0 +1,6 @@ +Name:Purphoros|Deck:Purphoros.dck|Variant:Commander|Avatar:Purphoros, God of the Forge|Desc: +Name:Nylea|Deck:Nylea.dck|Variant:Commander|Avatar:Nylea, God of the Hunt|Desc: +Name:Thassa|Deck:Thassa.dck|Variant:Commander|Avatar:Thassa, God of the Sea|Desc: +Name:Erebos|Deck:Erebos.dck|Variant:Commander|Avatar:Erebos, God of the Dead|Desc: +Name:Heliod|Deck:Heliod.dck|Variant:Commander|Avatar:Heliod, God of the Sun|Desc: +Name:Defeat a God|Deck:XenagosPW.dck|Variant:Planeswalker|Avatar:Xenagos, the Reveler|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/AjaniPW.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/AjaniPW.dck new file mode 100644 index 00000000000..40df84d538e --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/AjaniPW.dck @@ -0,0 +1,36 @@ +[metadata] +Name=PCTHSAjaniPW +[Commander] +1 Karametra, God of Harvests|BNG +[Main] +1 Ajani's Presence|JOU +1 Ajani, Mentor of Heroes|JOU +1 Akroan Skyguard|BNG +1 Anthousa, Setessan Hero|THS +1 Banishing Light|JOU +1 Brimaz, King of Oreskos|BNG +1 Chronicler of Heroes|THS +1 Courser of Kruphix|BNG +1 Dawnbringer Charioteers|JOU +1 Fabled Hero|THS +1 Favored Hoplite|THS +8 Forest|BFZ|1 +1 Gods Willing|THS +1 Heroes' Podium|BNG +1 Hixus, Prison Warden|ORI +1 Kytheon, Hero of Akros|ORI +1 Mana Confluence|JOU +1 Phalanx Formation|JOU +1 Phalanx Leader|THS +5 Plains|BFZ|1 +1 Polukranos, World Eater|THS +1 Reap What Is Sown|BNG +1 Setessan Tactics|JOU +1 Solidarity of Heroes|JOU +1 Soul of Theros|M15 +1 Sylvan Caryatid|THS +1 Temple of Plenty|BNG +1 Unknown Shores|OGW +1 Warriors' Lesson|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Anthousa.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Anthousa.dck new file mode 100644 index 00000000000..bb96ac35e23 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Anthousa.dck @@ -0,0 +1,34 @@ +[metadata] +Name=PCTHSAnthousa +[Commander] +1 Anthousa, Setessan Hero|THS +[Main] +1 Arbor Colossus|C15 +1 Burnished Hart|C15 +1 Centaur Battlemaster|THS +1 Colossal Heroics|JOU +1 Courser of Kruphix|BNG +1 Fade into Antiquity|THS +1 Fated Intervention|BNG +1 Font of Fertility|JOU +4 Forest|THS|1 +6 Forest|THS|2 +1 Forest|THS|3 +5 Forest|THS|4 +1 Hero of Leina Tower|BNG +1 Nessian Game Warden|JOU +1 Nykthos, Shrine to Nyx|THS +1 Nylea's Disciple|THS +1 Ordeal of Nylea|THS +1 Pheres-Band Centaurs|THS +1 Pheres-Band Raiders|BNG +1 Pheres-Band Thunderhoof|JOU +1 Pheres-Band Tromper|BNG +1 Pheres-Band Warchief|JOU +1 Setessan Oathsworn|BNG +1 Setessan Tactics|JOU +1 Staunch-Hearted Warrior|THS +1 Swordwise Centaur|BNG +1 Voyaging Satyr|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/BGConstellation.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/BGConstellation.dck new file mode 100644 index 00000000000..a19cd17e6b8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/BGConstellation.dck @@ -0,0 +1,22 @@ +[metadata] +Name=PCTHSBGConstellation +[Main] +3 Brain Maggot|JOU +3 Courser of Kruphix|BNG +2 Dictate of Karametra|JOU +3 Doomwake Giant|C15 +3 Eidolon of Blossoms|JOU +3 Font of Fertility|JOU +1 Forest|THS|1 +3 Forest|THS|3 +3 Forest|THS|4 +2 Hero's Downfall|THS +2 Mana Confluence|JOU +2 Silence the Believers|JOU +1 Swamp|THS|1 +1 Swamp|THS|2 +2 Swamp|THS|3 +3 Sylvan Caryatid|THS +3 Temple of Malady|JOU +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Hydra.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Hydra.dck new file mode 100644 index 00000000000..75be796d26a --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Hydra.dck @@ -0,0 +1,32 @@ +[metadata] +Name=PCTHSHydra +[Commander] +1 Polukranos, World Eater|THS +[Main] +1 Aspect of Hydra|BNG +1 Astral Cornucopia|BNG +1 Burnished Hart|C15 +1 Consign to Dust|JOU +1 Culling Mark|BNG +1 Defend the Hearth|THS +1 Fade into Antiquity|THS +15 Forest|C15|1 +1 Golden Hind|JOU +1 Heroes' Bane|JOU +1 Hydra Broodmaster|JOU +1 Karametra's Acolyte|THS +1 Mistcutter Hydra|THS +1 Mortal's Resolve|BNG +1 Nessian Asp|THS +1 Nessian Wilds Ravager|BNG +1 Nykthos, Shrine to Nyx|THS +1 Ravenous Leucrocota|JOU +1 Scourge of Skola Vale|BNG +1 Sedge Scorpion|THS +1 Setessan Tactics|JOU +1 Solidarity of Heroes|JOU +1 Sylvan Caryatid|THS +1 Time to Feed|THS +1 Voyaging Satyr|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Karametra.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Karametra.dck new file mode 100644 index 00000000000..337df09fff6 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Karametra.dck @@ -0,0 +1,40 @@ +[metadata] +Name=PCTHSKarametra +[Commander] +1 Karametra, God of Harvests|BNG +[Main] +1 Arbor Colossus|C15 +1 Archetype of Endurance|BNG +1 Banishing Light|C15 +1 Burnished Hart|C15 +1 Consign to Dust|JOU +1 Courser of Kruphix|BNG +1 Dawnbringer Charioteers|JOU +1 Dictate of Karametra|JOU +1 Divine Verdict|M15 +1 Eidolon of Blossoms|JOU +1 Excoriate|BNG +1 Fleecemane Lion|THS +1 Font of Fertility|JOU +2 Forest|THS|1 +4 Forest|THS|2 +2 Forest|THS|4 +1 Harvestguard Alseids|JOU +1 Hopeful Eidolon|THS +1 Humbler of Mortals|JOU +1 Karametra's Acolyte|THS +1 Karametra's Favor|BNG +1 Mana Confluence|JOU +1 Nessian Wilds Ravager|BNG +1 Nyx-Fleece Ram|JOU +1 Ordeal of Nylea|THS +1 Peregrination|BNG +1 Plains|THS|1 +1 Plains|THS|2 +1 Plains|THS|3 +2 Plains|THS|4 +1 Sylvan Caryatid|THS +1 Temple of Plenty|BNG +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/MonoGDev.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/MonoGDev.dck new file mode 100644 index 00000000000..5fde0d85461 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/MonoGDev.dck @@ -0,0 +1,19 @@ +[metadata] +Name=PCTHSMonoGDev +[Main] +3 Arbor Colossus|C15 +3 Aspect of Hydra|BNG +3 Courser of Kruphix|BNG +3 Forest|THS|1 +4 Forest|THS|2 +3 Forest|THS|3 +3 Forest|THS|4 +3 Nykthos, Shrine to Nyx|THS +2 Nylea's Disciple|THS +2 Nylea, God of the Hunt|THS +2 Polukranos, World Eater|THS +3 Reverent Hunter|THS +3 Setessan Tactics|JOU +3 Swordwise Centaur|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Pharika.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Pharika.dck new file mode 100644 index 00000000000..06565dd2c56 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/Pharika.dck @@ -0,0 +1,42 @@ +[metadata] +Name=PCTHSPharika +[Commander] +1 Pharika, God of Affliction|JOU +[Main] +1 Aspect of Gorgon|JOU +1 Baleful Eidolon|THS +1 Boon of Erebos|THS +1 Claim of Erebos|BNG +1 Consign to Dust|JOU +1 Courser of Kruphix|BNG +1 Cruel Feeding|JOU +1 Forest|ORI|1 +1 Forest|ORI|2 +1 Forest|ORI|3 +1 Forest|ORI|4 +1 Gorgon's Head|BNG +1 Gray Merchant of Asphodel|C14 +1 Grim Guardian|JOU +1 Herald of Torment|BNG +1 Hero's Downfall|THS +1 Mana Confluence|JOU +1 Nemesis of Mortals|THS +1 Nessian Asp|THS +1 Nykthos, Shrine to Nyx|THS +1 Nyx Weaver|JOU +1 Pharika's Chosen|JOU +1 Pharika's Cure|THS +1 Pharika's Disciple|ORI +1 Pharika's Mender|THS +1 Read the Bones|ORI +1 Reaper of the Wilds|THS +1 Returned Reveler|JOU +1 Snake of the Golden Grove|BNG +1 Swamp|ORI|1 +3 Swamp|ORI|2 +2 Swamp|ORI|3 +2 Swamp|ORI|4 +1 Temple of Malady|JOU +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/WildMonsters.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/WildMonsters.dck new file mode 100644 index 00000000000..0353c3ee703 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/WildMonsters.dck @@ -0,0 +1,21 @@ +[metadata] +Name=PCTHSNayaMonsters +[Main] +2 Anger of the Gods|THS +2 Arbor Colossus|C15 +2 Banishing Light|C15 +3 Fanatic of Xenagos|BNG +3 Fleecemane Lion|THS +3 Forest|THS|4 +2 Lightning Strike|M15 +2 Magma Jet|THS +3 Mana Confluence|JOU +2 Mountain|THS|4 +2 Plains|THS|3 +3 Polukranos, World Eater|THS +2 Stormbreath Dragon|THS +3 Sylvan Caryatid|THS +3 Temple of Abandon|THS +3 Temple of Plenty|BNG +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/XenagosPW.dck b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/XenagosPW.dck new file mode 100644 index 00000000000..4433117f9a3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/XenagosPW.dck @@ -0,0 +1,43 @@ +[metadata] +Name=PCTHSXenagosPW +[Commander] +1 Xenagos, God of Revels|BNG +[Main] +1 Anger of the Gods|THS +1 Boon Satyr|THS +1 Centaur Battlemaster|THS +1 Courser of Kruphix|BNG +1 Destructive Revelry|THS +1 Eidolon of the Great Revel|JOU +1 Fanatic of Xenagos|BNG +1 Firedrinker Satyr|THS +1 Forest|M15|1 +1 Forest|M15|2 +1 Forest|M15|3 +3 Forest|M15|4 +1 Lightning Strike|M15 +1 Magma Jet|THS +1 Mana Confluence|JOU +2 Mountain|M15|1 +1 Mountain|M15|2 +2 Mountain|M15|3 +1 Mountain|M15|4 +1 Nykthos, Shrine to Nyx|THS +1 Nyxborn Rollicker|BNG +1 Pheres-Band Raiders|BNG +1 Pheres-Band Thunderhoof|JOU +1 Pheres-Band Tromper|BNG +1 Pheres-Band Warchief|JOU +1 Polukranos, World Eater|THS +1 Reckless Reveler|BNG +1 Satyr Firedancer|BNG +1 Searing Blood|BNG +1 Stormbreath Dragon|THS +1 Swordwise Centaur|BNG +1 Temple of Abandon|THS +1 Traveler's Amulet|THS +1 Unknown Shores|OGW +1 Voyaging Satyr|THS +1 Xenagos, the Reveler|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/Setessa/_events.txt b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/_events.txt new file mode 100644 index 00000000000..059a1580d49 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/Setessa/_events.txt @@ -0,0 +1,8 @@ +Name:Devotion to the Hunt|Deck:MonoGDev.dck|Variant:None|Avatar:Courser of Kruphix|Desc: +Name:Anthousa|Deck:Anthousa.dck|Variant:Commander|Avatar:Anthousa, Setessan Hero|Desc: +Name:Wild Monsters|Deck:WildMonsters.dck|Variant:None|Avatar:Fleecemane Lion|Desc: +Name:Karametra|Deck:Karametra.dck|Variant:Commander|Avatar:Karametra, God of Harvests|Desc: +Name:Dark Setessan Night|Deck:BGConstellation.dck|Variant:None|Avatar:Doomwake Giant|Desc: +Name:Pharika|Deck:Pharika.dck|Variant:Commander|Avatar:Pharika, God of Affliction|Desc: +Name:Polukranos|Deck:Hydra.dck|Variant:None|Avatar:Polukranos, World Eater|Desc: +Name:Ajani, Mentor of Heroes|Deck:AjaniPW.dck|Variant:Planeswalker|Avatar:Ajani, Mentor of Heroes|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/AshiokPW.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/AshiokPW.dck new file mode 100644 index 00000000000..a9749132f29 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/AshiokPW.dck @@ -0,0 +1,40 @@ +[metadata] +Name=PCTHSAshiokPW +[Commander] +1 Phenax, God of Deception|BNG +[Main] +1 Ashiok, Nightmare Weaver|THS +1 Black Oak of Odunos|BNG +1 Dakra Mystic|JOU +1 Disciple of Deceit|JOU +1 Disciple of Phenax|THS +1 Dissolve|THS +1 Drown in Sorrow|BNG +1 Fated Return|BNG +1 Gild|C15 +1 Gorgon's Head|BNG +1 Grim Guardian|JOU +1 Guardians of Meletis|ORI +1 Hero's Downfall|THS +2 Island|C15|2 +1 Island|C15|3 +1 Island|C15|4 +1 Mana Confluence|JOU +1 Nighthowler|C15 +1 Psychic Intrusion|THS +1 Read the Bones|ORI +1 Returned Centaur|ORI +1 Returned Phalanx|THS +1 Rotted Hulk|JOU +1 Sigiled Starfish|ORI +1 Silence the Believers|JOU +1 Siren of the Silent Song|BNG +3 Swamp|C15|1 +4 Swamp|C15|3 +2 Swamp|C15|4 +1 Temple of Deceit|THS +1 Thassa's Devourer|JOU +1 Unknown Shores|OGW +1 Worst Fears|JOU +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/Athreos.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/Athreos.dck new file mode 100644 index 00000000000..636ba61b16a --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/Athreos.dck @@ -0,0 +1,40 @@ +[metadata] +Name=PCTHSAthreos +[Commander] +1 Athreos, God of Passage|JOU +[Main] +1 Baleful Eidolon|THS +1 Banishing Light|C15 +1 Bile Blight|BNG +1 Brain Maggot|JOU +1 Doomwake Giant|C15 +1 Dreadbringer Lampads|C15 +1 Eidolon of Rhetoric|JOU +1 Fate Unraveler|C15 +1 Gnarled Scarhide|JOU +1 Gray Merchant of Asphodel|C14 +1 Grim Guardian|JOU +1 Herald of Torment|BNG +1 Hero's Downfall|THS +1 Hopeful Eidolon|THS +1 Mana Confluence|JOU +1 Nyxborn Shieldmate|BNG +1 Odunos River Trawler|BNG +1 Plains|THS|2 +1 Plains|THS|3 +2 Plains|THS|4 +1 Scholar of Athreos|THS +1 Shadows of the Past|ORI +1 Silence the Believers|JOU +1 Spirit of the Labyrinth|BNG +1 Spiteful Returned|BNG +3 Swamp|THS|1 +3 Swamp|THS|2 +1 Swamp|THS|3 +2 Swamp|THS|4 +1 Temple of Silence|THS +1 Thoughtseize|THS +1 Underworld Coinsmith|C15 +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/DaxosReturned.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/DaxosReturned.dck new file mode 100644 index 00000000000..706a1ef6076 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/DaxosReturned.dck @@ -0,0 +1,40 @@ +[metadata] +Name=PCTHSDaxosReturned +[Commander] +1 Daxos the Returned|C15 +[Main] +1 Archetype of Courage|BNG +1 Armament of Nyx|JOU +1 Banishing Light|C15 +1 Blood-Cursed Knight|ORI +1 Brain Maggot|JOU +1 Daxos's Torment|C15 +1 Doomwake Giant|C15 +1 Dreadbringer Lampads|C15 +1 Eidolon of Countless Battles|BNG +1 Gift of Immortality|THS +1 Gnarled Scarhide|JOU +1 Godsend|JOU +1 Grim Guardian|JOU +1 Harvestguard Alseids|JOU +1 Helm of the Gods|ORI +1 Herald of Torment|BNG +1 Hopeful Eidolon|THS +1 Mana Confluence|JOU +1 Nyx-Fleece Ram|JOU +1 Nyxborn Shieldmate|BNG +1 Oppressive Rays|M15 +1 Plains|C15|1 +3 Plains|C15|2 +1 Plains|C15|3 +3 Plains|C15|4 +1 Sightless Brawler|JOU +1 Suppression Bonds|ORI +2 Swamp|C15|2 +2 Swamp|C15|3 +1 Swamp|C15|4 +1 Temple of Silence|THS +1 Underworld Coinsmith|C15 +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/KingMacar.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/KingMacar.dck new file mode 100644 index 00000000000..6e7f3b942bf --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/KingMacar.dck @@ -0,0 +1,35 @@ +[metadata] +Name=PCTHSKingMacar +[Commander] +1 King Macar, the Gold-Cursed|JOU +[Main] +1 Abhorrent Overlord|THS +1 Archetype of Finality|BNG +1 Baleful Eidolon|THS +1 Black Oak of Odunos|BNG +1 Brain Maggot|JOU +1 Forlorn Pseudamma|BNG +1 Gild|C15 +1 Gorgon Flail|M10 +1 Gray Merchant of Asphodel|C14 +1 Hero's Downfall|THS +1 Hythonia the Cruel|THS +1 Keepsake Gorgon|THS +1 Marshmist Titan|BNG +1 Necrobite|M15 +1 Nykthos, Shrine to Nyx|THS +1 Pain Seer|BNG +1 Pharika's Chosen|JOU +1 Servant of Tymaret|BNG +1 Silence the Believers|JOU +1 Springleaf Drum|BNG +1 Squelching Leeches|JOU +3 Swamp|THS|1 +3 Swamp|THS|2 +2 Swamp|THS|3 +7 Swamp|THS|4 +1 Thoughtseize|THS +1 Witches' Eye|THS +1 Worst Fears|JOU +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/MonoBDev.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/MonoBDev.dck new file mode 100644 index 00000000000..8542f01bdaf --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/MonoBDev.dck @@ -0,0 +1,18 @@ +[metadata] +Name=PCTHSMonoBDev +[Main] +3 Bile Blight|BNG +3 Erebos's Titan|ORI +3 Gray Merchant of Asphodel|C14 +3 Herald of Torment|BNG +3 Hero's Downfall|THS +3 Nykthos, Shrine to Nyx|THS +3 Squelching Leeches|JOU +3 Swamp|THS|1 +6 Swamp|THS|2 +2 Swamp|THS|3 +2 Swamp|THS|4 +3 Thoughtseize|THS +2 Whip of Erebos|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/Tymaret.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/Tymaret.dck new file mode 100644 index 00000000000..6511ca72a7d --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/Tymaret.dck @@ -0,0 +1,38 @@ +[metadata] +Name=PCTHSTymaret +[Commander] +1 Tymaret, the Murder King|THS +[Main] +1 Agent of the Fates|THS +1 Akroan Conscriptor|BNG +1 Akroan Crusader|THS +1 Bile Blight|BNG +1 Champion of Stray Souls|C15 +1 Coordinated Assault|THS +1 Dictate of Erebos|JOU +1 Eater of Hope|C15 +1 Everflame Eidolon|BNG +1 Firedrinker Satyr|THS +1 Gnarled Scarhide|JOU +1 Harness by Force|JOU +1 Hero's Downfall|THS +1 Lightning Strike|M15 +1 Mana Confluence|JOU +3 Mountain|M15|1 +2 Mountain|M15|2 +1 Pharika's Chosen|JOU +1 Portent of Betrayal|THS +1 Rescue from the Underworld|THS +1 Searing Blood|BNG +1 Silence the Believers|JOU +1 Spiteful Returned|BNG +1 Swamp|M15|1 +4 Swamp|M15|3 +3 Swamp|M15|4 +1 Temple of Malice|BNG +1 Titan's Strength|ORI +1 Two-Headed Cerberus|THS +1 Underworld Cerberus|THS +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/UBControl.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/UBControl.dck new file mode 100644 index 00000000000..4a6bcb4e6cc --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/UBControl.dck @@ -0,0 +1,24 @@ +[metadata] +Name=PCTHSUBControl +[Main] +3 Ashiok, Nightmare Weaver|THS +2 Bile Blight|BNG +2 Dissolve|THS +1 Divination|M15 +2 Drown in Sorrow|BNG +2 Hero's Downfall|THS +2 Island|THS|3 +4 Island|THS|4 +2 Nullify|BNG +2 Pharika's Cure|THS +1 Read the Bones|ORI +2 Silence the Believers|JOU +1 Swamp|THS|1 +2 Swamp|THS|2 +4 Swamp|THS|3 +2 Swamp|THS|4 +3 Temple of Deceit|THS +1 Thassa's Bounty|THS +2 Thoughtseize|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/UBMiling.dck b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/UBMiling.dck new file mode 100644 index 00000000000..e833d3ed654 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/UBMiling.dck @@ -0,0 +1,21 @@ +[metadata] +Name=PCTHSUBMiling +[Main] +3 Coastline Chimera|THS +3 Dictate of Kruphix|JOU +3 Drown in Sorrow|BNG +3 Guardians of Meletis|ORI +3 Hero's Downfall|THS +2 Island|ORI|1 +1 Island|ORI|2 +1 Island|ORI|3 +1 Island|ORI|4 +3 Master of the Feast|JOU +3 Phenax, God of Deception|BNG +3 Sigiled Starfish|ORI +4 Swamp|ORI|1 +2 Swamp|ORI|2 +2 Swamp|ORI|3 +3 Temple of Deceit|THS +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/_events.txt b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/_events.txt new file mode 100644 index 00000000000..0eb8ebfc956 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/The Underworld/_events.txt @@ -0,0 +1,8 @@ +Name:Control your Nightmares|Deck:UBControl.dck|Variant:None|Avatar:Thoughtseize|Desc: +Name:Tymaret|Deck:Tymaret.dck|Variant:Commander|Avatar:Tymaret, the Murder King|Desc: +Name:Death Devotion|Deck:MonoBDev.dck|Variant:None|Avatar:Gray Merchant of Asphodel|Desc: +Name:King Macar|Deck:KingMacar.dck|Variant:Commander|Avatar:King Macar, the Gold-Cursed|Desc: +Name:Mind Drain|Deck:UBMilling.dck|Variant:None|Avatar:Phenax, God of Deception|Desc: +Name:Athreos|Deck:Athreos.dck|Variant:Commander|Avatar:Athreos, God of Passage|Desc: +Name:Daxos the Returned|Deck:DaxosReturned.dck|Variant:Commander|Avatar:Daxos the Returned|Desc: +Name:Ashiok|Deck:AshiokPW.dck|Variant:Planeswalker|Avatar:Ashiok, Nightmare Weaver|Desc: diff --git a/forge-gui/res/conquest/planes/Theros_Classic/banned_cards.txt b/forge-gui/res/conquest/planes/Theros_Classic/banned_cards.txt new file mode 100644 index 00000000000..c829e4affb4 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/banned_cards.txt @@ -0,0 +1,85 @@ +Ancient Den +Arsenal Thresher +Ascendant Evincar +Beetleback Chief +Bloodbraid Elf +Artisan of Kozilek +Azorius Chancery +Azorius Guildmage +Boros Garrison +Boros Guildmage +Boros Signet +Boros Swiftblade +Bosh, Iron Golem +Copper Myr +Darksteel Forge +Dimir Infiltrator +Enigma Sphinx +Festering Goblin +Fractured Powerstone +Furnace of Rath +Glen Elendra Liege +Goblin Offensive +Dimir Aqueduct +Dimir Signet +Dreamstone Hedron +Duergar Hedge-Mage +Evincar's Justice +Flametongue Kavu +Golgari Guildmage +Golgari Rot Farm +Golgari Signet +Gold Myr +Great Furnace +Hearthfire Hobgoblin +Higure, the Still Wind +Ink-Eyes, Servant of Oni +Iron Myr +Kor Sanctifiers +Kor Spiritdancer +Leaden Myr +Lodestone Myr +Master of Etherium +Mistblade Shinobi +Mudbutton Torchrunner +Myr Enforcer +Nest Invader +Ninja of the Deep Hours +Okiba-Gang Shinobi +Razia, Boros Archangel +Sarcomite Myr +Seat of the Synod +Silent-Blade Oni +Silver Myr +Sludge Strider +Sunhome, Fortress of the Legion +Suntouched Myr +Throat Slitter +Tree of Tales +Tukatongue Thallid +Vault of Whispers +Vedalken Engineer +Vitu-Ghazi, the City-Tree +Walker of Secret Ways +Gruul Signet +Gruul Turf +Gwyllion Hedge-Mage +Izzet Boilerworks +Izzet Chronarch +Izzet Signet +Nezumi Graverobber +Orzhov Basilica +Orzhov Guildmage +Orzhov Signet +Patron of the Nezumi +Rakdos Carnarium +Rakdos Signet +Rapacious One +Selesnya Evangel +Selesnya Sanctuary +Selesnya Signet +Simic Growth Chamber +Simic Signet +Simic Sky Swallower +Svogthos, the Restless Tomb +Yavimaya Elder \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/cards.txt b/forge-gui/res/conquest/planes/Theros_Classic/cards.txt new file mode 100644 index 00000000000..101c122aa34 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/cards.txt @@ -0,0 +1,44 @@ +Gorgon Flail +Helm of the Gods +Sigil of Valor +Aegis Angel +Soul of Theros +Enlightened Ascetic +Ajani's Chosen +Herald of the Pantheon +Ajani Steadfast +Ajani's Sunstriker +Akroan Jailer +Akroan Sergeant +Anchor to the AEther +Blood-Cursed Knight +Daxos the Returned +Daxos's Torment +Kalemne, Disciple of Iroas +Gideon's Avenger +Gideon's Lawkeeper +Gideon's Phalanx +Grasp of the Hieromancer +Kytheon's Irregulars +Kytheon's Tactics +Kytheon, Hero of Akros +Hixus, Prison Warden +Iroas's Champion +Kalemne's Captain +Magmatic Insight +Oath of the Ancient Wood +Prickleboar +Shadows of the Past +Starfield of Nyx +Suppression Bonds +Valor in Akros +Pharika's Disciple +Celestial Flare +Pharika's Disciple +Erebos's Titan +Harbinger of the Tides +Tidebinder Mage +Claustrophobia +Tragic Arrogance +Kynaios and Tiro of Meletis +Xathrid Gorgon \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/plane_cards.txt b/forge-gui/res/conquest/planes/Theros_Classic/plane_cards.txt new file mode 100644 index 00000000000..dffedf5ded6 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/plane_cards.txt @@ -0,0 +1 @@ +Lethe Lake \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/regions.txt b/forge-gui/res/conquest/planes/Theros_Classic/regions.txt new file mode 100644 index 00000000000..954cce0821c --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/regions.txt @@ -0,0 +1,5 @@ +Name:Setessa|Art:Temple of Plenty|Colors:GW +Name:Akros|Art:Temple of Triumph|Colors:RW +Name:The Underworld|Art:Temple of Silence|Colors:WB +Name:Meletis|Art:Temple of Enlightenment|Colors:UW +Name:Nyx|Art:Nykthos, Shrine to Nyx|Colors:WURBG \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Theros_Classic/sets.txt b/forge-gui/res/conquest/planes/Theros_Classic/sets.txt new file mode 100644 index 00000000000..7311618d668 --- /dev/null +++ b/forge-gui/res/conquest/planes/Theros_Classic/sets.txt @@ -0,0 +1,5 @@ +THS +BNG +JOU +HOP +PCA \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Akoum Rally.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Akoum Rally.dck new file mode 100644 index 00000000000..b2fb2750e5b --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Akoum Rally.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Akoum Rally +[Main] +1 Agadeem Occultist|WWK +1 Akoum Battlesinger|WWK +1 Akoum Flameseeker|OGW +1 Ally Encampment|BFZ +1 Bala Ged Thief|ZEN +1 Bloodbond Vampire|BFZ +1 Captain's Claws|OGW +1 Chasm Guide|BFZ +1 Drana's Chosen|OGW +1 Drana, Liberator of Malakir|BFZ +1 Firemantle Mage|BFZ +1 Goblin Freerunner|OGW +1 Hagra Diabolist|ZEN +1 Highland Berserker|ZEN +1 Kalastria Healer|BFZ +1 Kalastria Nightwatch|BFZ +1 Kazuul Warlord|ZEN +1 Malakir Soothsayer|OGW +1 Mountain|BFZ|3 +2 Mountain|BFZ|4 +2 Mountain|BFZ|5 +1 Mountain|BFZ|7 +2 Mountain|BFZ|9 +1 Murasa Pyromancer|ZEN +1 Nimana Sell-Sword|ZEN +1 Ondu Champion|BFZ +1 Reckless Bushwhacker|OGW +1 Swamp|BFZ|2 +1 Swamp|BFZ|3 +1 Swamp|BFZ|5 +2 Swamp|BFZ|6 +1 Swamp|BFZ|9 +1 Tuktuk Scrapper|WWK +1 Zada, Hedron Grinder|BFZ +1 Zulaport Chainmage|OGW +1 Zulaport Cutthroat|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Anowon, the Ruin Sage.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Anowon, the Ruin Sage.dck new file mode 100644 index 00000000000..0bf7895874d --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Anowon, the Ruin Sage.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Anowon, the Ruin Sage +[Commander] +1 Anowon, the Ruin Sage|WWK +[Main] +1 Arrogant Bloodlord|ROE +1 Blade of the Bloodchief|ZEN +1 Blood Seeker|M12 +1 Blood Tribute|ZEN +1 Bloodbond Vampire|BFZ +1 Bloodghast|ZEN +1 Bloodhusk Ritualist|WWK +1 Bloodrite Invoker|ROE +1 Bloodthrone Vampire|MM2 +1 Butcher of Malakir|C15 +1 Carrier Thrall|BFZ +1 Defiant Bloodlord|BFZ +1 Drana's Chosen|OGW +1 Feast of Blood|ZEN +1 Gatekeeper of Malakir|DDK +1 Guul Draz Assassin|ROE +1 Guul Draz Overseer|BFZ +1 Guul Draz Vampire|ZEN +1 Kalastria Healer|BFZ +1 Kalastria Highborn|WWK +1 Kalastria Nightwatch|BFZ +1 Malakir Bloodwitch|ZEN +1 Malakir Cullblade|ORI +1 Malakir Soothsayer|OGW +1 Nirkana Assassin|BFZ +1 Swamp|BFZ|1 +3 Swamp|BFZ|2 +1 Swamp|BFZ|3 +2 Swamp|BFZ|4 +1 Swamp|BFZ|5 +1 Swamp|BFZ|7 +4 Swamp|BFZ|8 +1 Swamp|BFZ|9 +1 Swamp|BFZ|10 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Drana, Kalastria Bloodchief.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Drana, Kalastria Bloodchief.dck new file mode 100644 index 00000000000..49c69e24836 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Drana, Kalastria Bloodchief.dck @@ -0,0 +1,36 @@ +[metadata] +Name=Drana, Kalastria Bloodchief +[Commander] +1 Drana, Kalastria Bloodchief|C14 +[Main] +1 Arrogant Bloodlord|ROE +1 Blade of the Bloodchief|ZEN +1 Blood Tribute|ZEN +1 Bloodbond Vampire|BFZ +1 Bloodghast|ZEN +1 Bloodhusk Ritualist|WWK +1 Bone Splinters|BFZ +1 Brink of Disaster|M12 +1 Consume the Meek|ROE +1 Corpsehatch|ROE +1 Defiant Bloodlord|BFZ +1 Drana's Chosen|OGW +1 Feast of Blood|ZEN +1 Gatekeeper of Malakir|DDK +1 Guul Draz Assassin|ROE +1 Heartstabber Mosquito|ZEN +1 Hideous End|DDE +1 Kalastria Highborn|WWK +1 Malakir Bloodwitch|ZEN +1 Mire Blight|ZEN +1 Ob Nixilis Reignited|BFZ +1 Ruinous Path|BFZ +1 Smother|WWK +2 Swamp|ROE|1 +3 Swamp|ROE|2 +4 Swamp|ROE|3 +6 Swamp|ROE|4 +1 Vampire Nighthawk|C13 +1 Vendetta|ROE +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Drana, Liberator of Malakir.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Drana, Liberator of Malakir.dck new file mode 100644 index 00000000000..60e0f9af591 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Drana, Liberator of Malakir.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Drana, Liberator of Malakir +[Commander] +1 Drana, Liberator of Malakir|BFZ +[Main] +1 Basilisk Collar|WWK +1 Blade of the Bloodchief|ZEN +1 Bloodbond Vampire|BFZ +1 Captain's Claws|OGW +1 Chitinous Cloak|OGW +1 Drana's Chosen|OGW +1 Eldrazi Monument|C15 +1 Feast of Blood|ZEN +1 Grappling Hook|ZEN +1 Grasp of Darkness|OGW +1 Grip of Desolation|BFZ +1 Inquisition of Kozilek|ROE +1 Kalastria Healer|BFZ +1 Kalastria Nightwatch|BFZ +1 Malakir Soothsayer|OGW +1 Marsh Casualties|DDM +1 Nirkana Assassin|BFZ +1 Pennon Blade|ROE +1 Ruinous Path|BFZ +1 Smother|WWK +1 Stoneforge Masterwork|OGW +3 Swamp|BFZ|1 +1 Swamp|BFZ|2 +2 Swamp|BFZ|3 +1 Swamp|BFZ|5 +3 Swamp|BFZ|6 +1 Swamp|BFZ|7 +1 Swamp|BFZ|8 +1 Swamp|BFZ|9 +2 Swamp|BFZ|10 +1 Sword of the Animist|ORI +1 Trailblazer's Boots|ZEN +1 Trusty Machete|ZEN +1 Vampire Envoy|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Kalitas, Bloodchief of Ghet.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Kalitas, Bloodchief of Ghet.dck new file mode 100644 index 00000000000..76e3380b0b3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Kalitas, Bloodchief of Ghet.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Kalitas, Bloodchief of Ghet +[Commander] +1 Kalitas, Bloodchief of Ghet|ZEN +[Main] +1 Anowon, the Ruin Sage|WWK +1 Arrogant Bloodlord|ROE +1 Basilisk Collar|WWK +1 Blade of the Bloodchief|ZEN +1 Blighted Fen|BFZ +1 Blood Seeker|M12 +1 Blood Tribute|ZEN +1 Bloodbond Vampire|BFZ +1 Bloodghast|ZEN +1 Bloodhusk Ritualist|WWK +1 Bojuka Bog|C14 +1 Butcher of Malakir|C15 +1 Crypt of Agadeem|C14 +1 Defiant Bloodlord|BFZ +1 Feast of Blood|ZEN +1 Gatekeeper of Malakir|DDK +1 Guul Draz Assassin|ROE +1 Guul Draz Overseer|BFZ +1 Kalastria Highborn|WWK +1 Malakir Bloodwitch|ZEN +1 Malakir Cullblade|ORI +1 Mortuary Mire|BFZ +1 Nirkana Cutthroat|ROE +1 Nirkana Revenant|ROE +1 Piranha Marsh|ZEN +1 Pulse Tracker|DDM +1 Quag Vampires|CNS +1 Swamp|BFZ|1 +2 Swamp|BFZ|2 +1 Swamp|BFZ|3 +3 Swamp|BFZ|4 +1 Swamp|BFZ|5 +1 Swamp|BFZ|7 +1 Swamp|BFZ|10 +1 Urge to Feed|DDK +1 Vampire Nighthawk|C13 +1 Vampire's Bite|DDK +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Kalitas, Traitor of Ghet.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Kalitas, Traitor of Ghet.dck new file mode 100644 index 00000000000..5e3901c012f --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Kalitas, Traitor of Ghet.dck @@ -0,0 +1,35 @@ +[metadata] +Name=Kalitas, Traitor of Ghet +[Commander] +1 Kalitas, Traitor of Ghet|OGW +[Main] +1 Arrogant Bloodlord|ROE +1 Bone Splinters|BFZ +1 Complete Disregard|BFZ +1 Consume the Meek|ROE +1 Consuming Vapors|ROE +1 Corpsehatch|ROE +1 Drana's Chosen|OGW +1 Escaped Null|ROE +1 Feast of Blood|ZEN +1 Flaying Tendrils|OGW +1 Grip of Desolation|BFZ +1 Heartstabber Mosquito|ZEN +1 Hideous End|DDE +1 Mindless Null|ZEN +1 Null Caller|OGW +1 Null Champion|ROE +1 Ob Nixilis Reignited|BFZ +1 Oblivion Strike|OGW +1 Quest for the Gravelord|ZEN +1 Ruinous Path|BFZ +1 Smother|WWK +7 Swamp|ROE|1 +4 Swamp|ROE|3 +4 Swamp|ROE|4 +1 Vampire Nighthawk|C13 +1 Vendetta|ROE +1 Voracious Null|BFZ +1 Witness the End|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis of the Black Oath.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis of the Black Oath.dck new file mode 100644 index 00000000000..b9d2aaeea79 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis of the Black Oath.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Ob Nixilis of the Black Oath +[Main] +1 Archangel of Thune|M14 +1 Basilisk Collar|WWK +1 Blood Seeker|M12 +1 Bloodbond Vampire|BFZ +1 Bloodchief Ascension|ZEN +1 Celestial Mantle|ZEN +1 Cliffhaven Vampire|OGW +1 Consuming Vapors|ROE +1 Curse of Wizardry|ROE +1 Defiant Bloodlord|BFZ +1 Drana's Emissary|BFZ +1 Eternity Vessel|ZEN +1 Feast of Blood|ZEN +1 Felidar Sovereign|BFZ +1 Felidar Umbra|PC2 +1 Kalitas, Traitor of Ghet|OGW +1 Landbind Ritual|ZEN +1 Luminarch Ascension|ZEN +1 Luminous Wake|ROE +1 Marsh Flats|EXP +1 Ob Nixilis of the Black Oath|C14 +1 Oust|ROE +1 Painful Truths|BFZ +2 Plains|C13|1 +2 Plains|C13|2 +1 Plains|C13|3 +1 Plains|C13|4 +1 Retreat to Hagra|BFZ +1 Shambling Vent|BFZ +1 Swamp|C13|1 +4 Swamp|C13|2 +1 Swamp|C13|3 +1 Swamp|C13|4 +1 Transcendent Master|ROE +1 Vampire Nighthawk|C13 +1 Vampiric Rites|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis, Unshackled.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis, Unshackled.dck new file mode 100644 index 00000000000..8295d2f326a --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis, Unshackled.dck @@ -0,0 +1,36 @@ +[metadata] +Name=Ob Nixilis, Unshackled +[Commander] +1 Ob Nixilis, Unshackled|M15 +[Main] +1 Arrogant Bloodlord|ROE +1 Basilisk Collar|WWK +1 Blade of the Bloodchief|ZEN +1 Blood Seeker|M12 +1 Bloodchief Ascension|ZEN +1 Bone Splinters|BFZ +1 Brink of Disaster|M12 +1 Consume the Meek|ROE +1 Consuming Vapors|ROE +1 Corpsehatch|ROE +1 Desecrated Earth|ZEN +1 Feast of Blood|ZEN +1 Gatekeeper of Malakir|DDK +1 Giant Scorpion|M13 +1 Heartstabber Mosquito|ZEN +1 Hellcarver Demon|ROE +1 Hideous End|DDE +1 Kalitas, Bloodchief of Ghet|ZEN +1 Mire Blight|ZEN +1 Ob Nixilis Reignited|BFZ +1 Ruinous Path|BFZ +1 Smother|WWK +1 Soul Stair Expedition|ZEN +3 Swamp|ROE|1 +4 Swamp|ROE|2 +3 Swamp|ROE|3 +5 Swamp|ROE|4 +1 Vampire Nighthawk|C13 +1 Vendetta|ROE +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis, the Fallen.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis, the Fallen.dck new file mode 100644 index 00000000000..23e691cade8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Ob Nixilis, the Fallen.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Ob Nixilis, the Fallen +[Commander] +1 Ob Nixilis, the Fallen|ZEN +[Main] +1 Abyssal Persecutor|C14 +1 Altar's Reap|C15 +1 Blighted Fen|BFZ +1 Bojuka Bog|C14 +1 Carrier Thrall|BFZ +1 Complete Disregard|BFZ +1 Consume the Meek|ROE +1 Corpsehatch|ROE +1 Crypt of Agadeem|C14 +1 Demon's Grasp|BFZ +1 Demonic Appetite|ROE +1 Dread Drone|MM2 +1 Essence Feed|ROE +1 Grasp of Darkness|OGW +1 Grave Birthing|BFZ +1 Grip of Desolation|BFZ +1 Halo Hunter|ZEN +1 Hellcarver Demon|ROE +1 Hideous End|DDE +1 Last Kiss|DDM +1 Mortuary Mire|BFZ +1 Null Caller|OGW +1 Pawn of Ulamog|ROE +1 Pestilence Demon|C14 +1 Piranha Marsh|ZEN +1 Quest for the Gravelord|ZEN +1 Sifter of Skulls|OGW +1 Smother|WWK +1 Swamp|ROE|1 +4 Swamp|ROE|2 +1 Swamp|ROE|3 +4 Swamp|ROE|4 +1 Tar Snare|OGW +1 Tomb Hex|WWK +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Sarkhan the Mad.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Sarkhan the Mad.dck new file mode 100644 index 00000000000..6cd0fb804da --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/Sarkhan the Mad.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Sarkhan the Mad +[Main] +1 Akoum Firebird|BFZ +1 Akoum Hellkite|BFZ +1 Chain Reaction|C15 +1 Conquering Manticore|DDL +1 Consume the Meek|ROE +1 Consuming Vapors|ROE +1 Death's Shadow|WWK +1 Devastating Summons|ROE +1 Disaster Radius|C15 +1 Dragonmaster Outcast|BFZ +1 Endless One|BFZ +1 Fall of the Titans|OGW +1 Goblin Guide|ZEN +1 Grappling Hook|ZEN +1 Guul Draz Assassin|ROE +1 Hellion Eruption|PC2 +1 Hellkite Charger|MM2 +1 Kargan Dragonlord|ROE +1 Kazuul, Tyrant of the Cliffs|WWK +1 Lavaclaw Reaches|WWK +1 Lord of Shatterskull Pass|ROE +1 Mordant Dragon|DDG +4 Mountain|ROE|1 +2 Mountain|ROE|2 +1 Mountain|ROE|3 +2 Mountain|ROE|4 +1 Obsidian Fireheart|ZEN +1 Sarkhan the Mad|ROE +1 Smoldering Marsh|EXP +1 Swamp|ROE|1 +2 Swamp|ROE|2 +1 Swamp|ROE|3 +2 Swamp|ROE|4 +1 Tyrant of Valakut|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/_events.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/_events.txt new file mode 100644 index 00000000000..379061e50bd --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Akoum/_events.txt @@ -0,0 +1,9 @@ +Name:Akoum Rally|Deck:Akoum Rally.dck|Variant:None|Avatar:Firemantle Mage|Desc: +Name:Anowon, the Ruin Sage|Deck:Anowon, the Ruin Sage.dck|Variant:Commander|Avatar:Anowon, the Ruin Sage|Desc: +Name:Drana, Kalastria Bloodchief|Deck:Drana, Kalastria Bloodchief.dck|Variant:Commander|Avatar:Drana, Kalastria Bloodchief|Desc: +Name:Kalitas, Bloodchief of Ghet|Deck:Kalitas, Bloodchief of Ghet.dck|Variant:Commander|Avatar:Kalitas, Bloodchief of Ghet|Desc: +Name:Ob Nixilis, the Fallen|Deck:Ob Nixilis, the Fallen.dck|Variant:Commander|Avatar:Ob Nixilis, the Fallen|Desc: +Name:Drana, Liberator of Malakir|Deck:Drana, Liberator of Malakir.dck|Variant:Commander|Avatar:Drana, Liberator of Malakir|Desc: +Name:Kalitas, Traitor of Ghet|Deck:Kalitas, Traitor of Ghet.dck|Variant:Commander|Avatar:Kalitas, Traitor of Ghet|Desc: +Name:Ob Nixilis, Unshackled|Deck:Ob Nixilis, Unshackled.dck|Variant:Commander|Avatar:Ob Nixilis, Unshackled|Desc: +Name:Sarkhan the Mad|Deck:Sarkhan the Mad.dck|Variant:Planeswalker|Avatar:Sarkhan the Mad|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Annihilator.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Annihilator.dck new file mode 100644 index 00000000000..04b46e1b88a --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Annihilator.dck @@ -0,0 +1,35 @@ +[metadata] +Name=Annihilator +[Main] +1 All Is Dust|MM2 +1 Artisan of Kozilek|MM2 +1 Bane of Bala Ged|BFZ +1 Conduit of Ruin|BFZ +1 Desolation Twin|BFZ +1 Eldrazi Conscription|ROE +1 Eldrazi Temple|MM2 +1 Emrakul, the Aeons Torn|MM2 +1 Endless One|BFZ +1 Eye of Ugin|MM2 +1 Gruesome Slaughter|BFZ +1 Hand of Emrakul|ROE +1 It That Betrays|ROE +1 Kozilek's Channeler|BFZ +1 Kozilek, Butcher of Truth|MM2 +1 Mirrorpool|OGW +1 Not of This World|ROE +1 Pathrazer of Ulamog|ROE +1 Scour from Existence|BFZ +1 Spatial Contortion|OGW +1 Spawning Bed|BFZ +1 Spawnsire of Ulamog|ROE +1 Thought-Knot Seer|OGW +1 Titan's Presence|BFZ +1 Ulamog's Crusher|MM2 +1 Ulamog, the Infinite Gyre|MM2 +1 Walker of the Wastes|OGW +1 Warden of Geometries|OGW +1 Warping Wail|OGW +11 Wastes|OGW|1 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Devoid.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Devoid.dck new file mode 100644 index 00000000000..d23f0c87d59 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Devoid.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Devoid +[Main] +1 Adverse Conditions|BFZ +1 Barrage Tyrant|BFZ +1 Bearer of Silence|OGW +1 Brood Butcher|BFZ +1 Brood Monitor|BFZ +1 Brutal Expulsion|BFZ +1 Corrupted Crossroads|OGW +1 Deepfathom Skulker|OGW +1 Dimensional Infiltrator|OGW +1 Dread Defiler|OGW +1 Drowner of Hope|BFZ +1 Dust Stalker|BFZ +1 Eldrazi Displacer|OGW +1 Eldrazi Obligator|OGW +1 Fathom Feeder|BFZ +1 Forest|BFZ|2 +1 From Beyond|BFZ +1 Inverter of Truth|OGW +1 Island|BFZ|1 +1 Island|BFZ|4 +1 Kozilek's Return|OGW +1 Mountain|BFZ|9 +1 Mountain|BFZ|10 +1 Plains|BFZ|7 +1 Ruin in Their Wake|OGW +1 Serpentine Spike|BFZ +1 Sifter of Skulls|OGW +1 Sire of Stagnation|BFZ +1 Smothering Abomination|BFZ +1 Swamp|BFZ|4 +1 Swamp|BFZ|9 +1 Swamp|BFZ|10 +1 Vile Redeemer|OGW +1 Wasteland Strangler|BFZ +5 Wastes|OGW|1 +1 World Breaker|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Emrakul, the Aeons Torn.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Emrakul, the Aeons Torn.dck new file mode 100644 index 00000000000..d2174a55012 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Emrakul, the Aeons Torn.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Emrakul, the Aeons Torn +[Commander] +1 Emrakul, the Aeons Torn|MM2 +[Main] +1 All Is Dust|MM2 +1 Bane of Bala Ged|BFZ +1 Conduit of Ruin|BFZ +1 Deceiver of Form|OGW +1 Desolation Twin|BFZ +1 Dreamstone Hedron|C15 +1 Eldrazi Mimic|OGW +1 Eldrazi Temple|MM2 +1 Endless One|BFZ +1 Everflowing Chalice|MM2 +1 Expedition Map|MM2 +1 Eye of Ugin|MM2 +1 Hedron Archive|BFZ +1 Kozilek's Channeler|BFZ +1 Matter Reshaper|OGW +1 Mirrorpool|OGW +1 Reality Smasher|OGW +1 Ruins of Oran-Rief|OGW +1 Sanctum of Ugin|BFZ +1 Scour from Existence|BFZ +1 Sea Gate Wreckage|OGW +1 Seer's Lantern|OGW +1 Shrine of the Forsaken Gods|BFZ +1 Skittering Invasion|ROE +1 Spatial Contortion|OGW +1 Spawning Bed|BFZ +1 Sword of the Animist|ORI +1 Tectonic Edge|C14 +1 Thought-Knot Seer|OGW +1 Titan's Presence|BFZ +1 Walker of the Wastes|OGW +1 Warden of Geometries|OGW +1 Warping Wail|OGW +7 Wastes|OGW|1 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ingest.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ingest.dck new file mode 100644 index 00000000000..0413cf27597 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ingest.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Ingest +[Main] +1 Abstruse Interference|OGW +1 Adverse Conditions|BFZ +1 Benthic Infiltrator|BFZ +1 Blight Herder|BFZ +1 Corrupted Crossroads|OGW +1 Cryptic Cruiser|BFZ +1 Culling Drone|BFZ +1 Deepfathom Skulker|OGW +1 Dimensional Infiltrator|OGW +1 Dominator Drone|BFZ +1 Drowner of Hope|BFZ +1 Eldrazi Skyspawner|BFZ +1 Fathom Feeder|BFZ +1 Horribly Awry|BFZ +1 Incubator Drone|BFZ +1 Island|BFZ|1 +2 Island|BFZ|4 +2 Island|BFZ|5 +2 Island|BFZ|7 +1 Island|BFZ|8 +1 Island|BFZ|9 +3 Island|BFZ|10 +1 Mist Intruder|BFZ +1 Mountain|BFZ|4 +1 Murk Strider|BFZ +1 Oracle of Dust|BFZ +1 Ruin Processor|BFZ +1 Ruination Guide|BFZ +1 Salvage Drone|BFZ +1 Sludge Crawler|BFZ +1 Swamp|BFZ|9 +1 Tide Drifter|BFZ +1 Ulamog's Despoiler|BFZ +1 Ulamog's Reclaimer|BFZ +1 Vile Aggregate|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Kozilek, Butcher of Truth.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Kozilek, Butcher of Truth.dck new file mode 100644 index 00000000000..97fd1551bab --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Kozilek, Butcher of Truth.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Kozilek, Butcher of Truth +[Commander] +1 Kozilek, Butcher of Truth|MM2 +[Main] +1 All Is Dust|MM2 +1 Bane of Bala Ged|BFZ +1 Conduit of Ruin|BFZ +1 Deceiver of Form|OGW +1 Dread Statuary|DDM +1 Dreamstone Hedron|C15 +1 Eldrazi Mimic|OGW +1 Eldrazi Temple|MM2 +1 Endbringer|OGW +1 Endless One|BFZ +1 Everflowing Chalice|MM2 +1 Expedition Map|MM2 +1 Eye of Ugin|MM2 +1 Hedron Archive|BFZ +1 Hedron Crawler|OGW +1 Kozilek's Channeler|BFZ +1 Kozilek's Pathfinder|OGW +1 Matter Reshaper|OGW +1 Quicksand|CNS +1 Reality Smasher|OGW +1 Ruins of Oran-Rief|OGW +1 Sanctum of Ugin|BFZ +1 Scour from Existence|BFZ +1 Sea Gate Wreckage|OGW +1 Seer's Lantern|OGW +1 Shrine of the Forsaken Gods|BFZ +1 Skittering Invasion|ROE +1 Spatial Contortion|OGW +1 Spawning Bed|BFZ +1 Tectonic Edge|C14 +1 Thought-Knot Seer|OGW +1 Titan's Presence|BFZ +1 Warden of Geometries|OGW +1 Warping Wail|OGW +6 Wastes|OGW|1 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Kozilek, the Great Distortion.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Kozilek, the Great Distortion.dck new file mode 100644 index 00000000000..df3e83ef5b8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Kozilek, the Great Distortion.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Kozilek, the Great Distortion +[Commander] +1 Kozilek, the Great Distortion|OGW +[Main] +1 All Is Dust|MM2 +1 Bane of Bala Ged|BFZ +1 Conduit of Ruin|BFZ +1 Deathless Behemoth|BFZ +1 Deceiver of Form|OGW +1 Dread Statuary|DDM +1 Eldrazi Mimic|OGW +1 Eldrazi Temple|MM2 +1 Endless One|BFZ +1 Everflowing Chalice|MM2 +1 Expedition Map|MM2 +1 Eye of Ugin|MM2 +1 Hedron Archive|BFZ +1 It That Betrays|ROE +1 Kozilek's Channeler|BFZ +1 Kozilek's Pathfinder|OGW +1 Matter Reshaper|OGW +1 Quicksand|CNS +1 Ruin Processor|BFZ +1 Ruins of Oran-Rief|OGW +1 Sanctum of Ugin|BFZ +1 Scour from Existence|BFZ +1 Sea Gate Wreckage|OGW +1 Seer's Lantern|OGW +1 Shrine of the Forsaken Gods|BFZ +1 Skittering Invasion|ROE +1 Spatial Contortion|OGW +1 Spawning Bed|BFZ +1 Tectonic Edge|C14 +1 Thought-Knot Seer|OGW +1 Titan's Presence|BFZ +1 Ulamog's Despoiler|BFZ +1 Warden of Geometries|OGW +1 Warping Wail|OGW +6 Wastes|OGW|1 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Scions.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Scions.dck new file mode 100644 index 00000000000..d296fd98f03 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Scions.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Scions +[Main] +1 Abstruse Interference|OGW +1 Adverse Conditions|BFZ +1 Birthing Hulk|OGW +1 Blight Herder|BFZ +1 Blisterpod|BFZ +1 Brood Butcher|BFZ +1 Brood Monitor|BFZ +1 Call the Scions|BFZ +1 Carrier Thrall|BFZ +1 Catacomb Sifter|BFZ +1 Corrupted Crossroads|OGW +1 Crumbling Vestige|OGW +1 Deathless Behemoth|BFZ +1 Drowner of Hope|BFZ +1 Eldrazi Skyspawner|BFZ +1 Eyeless Watcher|BFZ +2 Forest|BFZ|3 +2 Forest|BFZ|6 +1 Forest|BFZ|10 +1 From Beyond|BFZ +1 Grave Birthing|BFZ +1 Holdout Settlement|OGW +1 Incubator Drone|BFZ +1 Island|BFZ|6 +1 Island|BFZ|7 +1 Khalni Gem|ZEN +1 Kor Castigator|BFZ +1 Lifespring Druid|BFZ +1 Plains|BFZ|8 +1 Scion Summoner|OGW +1 Sifter of Skulls|OGW +1 Spawning Bed|BFZ +1 Swamp|BFZ|7 +1 Swamp|BFZ|10 +1 Unknown Shores|OGW +1 Vile Redeemer|OGW +1 Void Attendant|BFZ +1 Warping Wail|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Spawn.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Spawn.dck new file mode 100644 index 00000000000..90f50c23fb6 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Spawn.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Spawn +[Main] +1 Awakening Zone|PC2 +1 Beastcaller Savant|BFZ +1 Bone Splinters|BFZ +1 Brood Birthing|ROE +1 Broodwarden|ROE +1 Corpsehatch|ROE +1 Crumbling Vestige|OGW +1 Dread Drone|MM2 +1 Emrakul's Hatcher|ROE +1 Essence Feed|ROE +1 Forest|PC2|1 +2 Forest|PC2|3 +2 Forest|PC2|5 +1 Forest|PC2|6 +1 Growth Spasm|ROE +1 Hand of Emrakul|ROE +1 Hideous End|DDE +1 Holdout Settlement|OGW +1 Khalni Gem|ZEN +1 Kozilek's Predator|MM2 +1 Lifespring Druid|BFZ +1 Lotus Cobra|ZEN +1 Mountain|PC2|2 +1 Mountain|PC2|3 +1 Naturalize|DTK +1 Nest Invader|MM2 +1 Pawn of Ulamog|ROE +1 Prophetic Prism|GTC +1 Rapacious One|COM +1 Reclaiming Vines|BFZ +1 Skittering Invasion|ROE +1 Spawning Breath|ROE +1 Spawnsire of Ulamog|ROE +1 Swamp|PC2|1 +1 Swamp|PC2|2 +2 Swamp|PC2|4 +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ulamog, the Ceaseless Hunger.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ulamog, the Ceaseless Hunger.dck new file mode 100644 index 00000000000..6a96d6bea59 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ulamog, the Ceaseless Hunger.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Ulamog, the Ceaseless Hunger +[Commander] +1 Ulamog, the Ceaseless Hunger|BFZ +[Main] +1 All Is Dust|MM2 +1 Artisan of Kozilek|MM2 +1 Bane of Bala Ged|BFZ +1 Breaker of Armies|BFZ +1 Conduit of Ruin|BFZ +1 Deceiver of Form|OGW +1 Desolation Twin|BFZ +1 Dread Statuary|DDM +1 Eldrazi Devastator|BFZ +1 Eldrazi Temple|MM2 +1 Endless One|BFZ +1 Eye of Ugin|MM2 +1 Hand of Emrakul|ROE +1 Kozilek's Channeler|BFZ +1 Kozilek's Pathfinder|OGW +1 Pathrazer of Ulamog|ROE +1 Quicksand|CNS +1 Ruins of Oran-Rief|OGW +1 Sanctum of Ugin|BFZ +1 Scour from Existence|BFZ +1 Sea Gate Wreckage|OGW +1 Shrine of the Forsaken Gods|BFZ +1 Skittering Invasion|ROE +1 Spatial Contortion|OGW +1 Spawning Bed|BFZ +1 Spawnsire of Ulamog|ROE +1 Tectonic Edge|C14 +1 Thought-Knot Seer|OGW +1 Titan's Presence|BFZ +1 Ulamog's Crusher|MM2 +1 Ulamog's Despoiler|BFZ +1 Void Winnower|BFZ +1 Warden of Geometries|OGW +1 Warping Wail|OGW +6 Wastes|OGW|1 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ulamog, the Infinite Gyre.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ulamog, the Infinite Gyre.dck new file mode 100644 index 00000000000..2585b443c1b --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/Ulamog, the Infinite Gyre.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Ulamog, the Infinite Gyre +[Commander] +1 Ulamog, the Infinite Gyre|MM2 +[Main] +1 All Is Dust|MM2 +1 Bane of Bala Ged|BFZ +1 Breaker of Armies|BFZ +1 Conduit of Ruin|BFZ +1 Deathless Behemoth|BFZ +1 Dread Statuary|DDM +1 Eldrazi Devastator|BFZ +1 Eldrazi Temple|MM2 +1 Endbringer|OGW +1 Endless One|BFZ +1 Everflowing Chalice|MM2 +1 Eye of Ugin|MM2 +1 Hedron Crawler|OGW +1 Kozilek's Channeler|BFZ +1 Matter Reshaper|OGW +1 Pathrazer of Ulamog|ROE +1 Quicksand|CNS +1 Ruin Processor|BFZ +1 Ruins of Oran-Rief|OGW +1 Sanctum of Ugin|BFZ +1 Scour from Existence|BFZ +1 Sea Gate Wreckage|OGW +1 Shrine of the Forsaken Gods|BFZ +1 Skittering Invasion|ROE +1 Spatial Contortion|OGW +1 Spawning Bed|BFZ +1 Spawnsire of Ulamog|ROE +1 Tectonic Edge|C14 +1 Thought-Knot Seer|OGW +1 Titan's Presence|BFZ +1 Ulamog's Crusher|MM2 +1 Ulamog's Despoiler|BFZ +1 Warden of Geometries|OGW +1 Warping Wail|OGW +6 Wastes|OGW|1 +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/_events.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/_events.txt new file mode 100644 index 00000000000..484d31a43f3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Blind Eternities/_events.txt @@ -0,0 +1,9 @@ +Name:Spawn|Deck:Spawn.dck|Variant:None|Avatar:Broodwarden|Desc: +Name:Ingest|Deck:Ingest.dck|Variant:None|Avatar:Fathom Feeder|Desc: +Name:Scions|Deck:Scions.dck|Variant:None|Avatar:Drowner of Hope|Desc: +Name:Devoid|Deck:Devoid.dck|Variant:None|Avatar:Barrage Tyrant|Desc: +Name:Annihilator|Deck:Annihilator.dck|Variant:None|Avatar:It That Betrays|Desc: +Name:Kozilek, Butcher of Truth|Deck:Kozilek, Butcher of Truth.dck|Variant:Commander|Avatar:Kozilek, Butcher of Truth|Desc: +Name:Kozilek, the Great Distortion|Deck:Kozilek, the Great Distortion.dck|Variant:Commander|Avatar:Kozilek, the Great Distortion|Desc: +Name:Ulamog, the Ceaseless Hunger|Deck:Ulamog, the Ceaseless Hunger.dck|Variant:Commander|Avatar:Ulamog, the Ceaseless Hunger|Desc: +Name:Emrakul, the Aeons Torn|Deck:Emrakul, the Aeons Torn.dck|Variant:Commander|Avatar:Emrakul, the Aeons Torn|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/General Tazri.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/General Tazri.dck new file mode 100644 index 00000000000..314ac00b1ca --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/General Tazri.dck @@ -0,0 +1,44 @@ +[metadata] +Name=General Tazri +[Commander] +1 General Tazri|OGW +[Main] +1 Agadeem Occultist|WWK +1 Allied Reinforcements|OGW +1 Ally Encampment|BFZ +1 Angelic Captain|BFZ +1 Beastcaller Savant|BFZ +1 Captain's Claws|OGW +2 Forest|ZEN|5 +1 Forest|ZEN|8 +1 Gideon, Ally of Zendikar|BFZ +1 Harabaz Druid|WWK +1 Hero of Goma Fada|BFZ +1 Holdout Settlement|OGW +2 Island|ZEN|3 +1 Join the Ranks|WWK +1 Jwari Shapeshifter|WWK +1 Kabira Evangel|ZEN +1 Kazuul Warlord|ZEN +1 Khalni Gem|ZEN +1 Lantern Scout|BFZ +1 Lifespring Druid|BFZ +1 March from the Tomb|BFZ +1 Mountain|ZEN|2 +1 Munda's Vanguard|OGW +1 Plains|ZEN|1 +2 Plains|ZEN|3 +1 Plains|ZEN|4 +1 Plains|ZEN|6 +1 Plains|ZEN|7 +1 Prophetic Prism|GTC +1 Retreat to Emeria|BFZ +1 Sea Gate Loremaster|ZEN +1 Swamp|ZEN|3 +1 Turntimber Ranger|ZEN +1 Unified Front|BFZ +1 Unknown Shores|OGW +1 Veteran Warleader|BFZ +1 Zendikar Resurgent|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Gideon Jura.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Gideon Jura.dck new file mode 100644 index 00000000000..1a2c856c537 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Gideon Jura.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Gideon Jura +[Main] +1 Basilisk Collar|WWK +1 Captain's Claws|OGW +1 Celestial Mantle|ZEN +1 Chitinous Cloak|OGW +1 Dawnglare Invoker|C15 +1 Emeria, the Sky Ruin|C14 +1 Encircling Fissure|BFZ +1 Gideon Jura|M12 +1 Gideon's Reproach|BFZ +1 Grappling Hook|ZEN +1 Harmless Assault|ROE +1 Immolating Glare|OGW +1 Kor Cartographer|DDI +1 Kor Entanglers|BFZ +1 Kor Hookmaster|DDN +1 Kor Line-Slinger|ROE +1 Kor Scythemaster|OGW +1 Lightmine Field|ROE +1 Luminous Wake|ROE +1 Plains|BFZ|1 +1 Plains|BFZ|2 +2 Plains|BFZ|3 +1 Plains|BFZ|4 +3 Plains|BFZ|5 +1 Plains|BFZ|6 +2 Plains|BFZ|7 +2 Plains|BFZ|8 +1 Plains|BFZ|9 +1 Plains|BFZ|10 +1 Puncturing Light|ROE +1 Repel the Darkness|ROE +1 Roil's Retribution|BFZ +1 Searing Light|OGW +1 Sheer Drop|BFZ +1 Spawnbinder Mage|OGW +1 Sword of the Animist|ORI +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Gideon, Ally of Zendikar.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Gideon, Ally of Zendikar.dck new file mode 100644 index 00000000000..ada59950f37 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Gideon, Ally of Zendikar.dck @@ -0,0 +1,38 @@ +[metadata] +Name=Gideon, Ally of Zendikar +[Main] +1 Affa Protector|OGW +1 Allied Reinforcements|OGW +1 Ally Encampment|BFZ +1 Angel of Renewal|BFZ +1 Captain's Claws|OGW +1 Cliffside Lookout|BFZ +1 Expedition Envoy|BFZ +1 Gideon, Ally of Zendikar|BFZ +1 Hada Freeblade|WWK +1 Hero of Goma Fada|BFZ +1 Join the Ranks|WWK +1 Kabira Evangel|ZEN +1 Kazandu Blademaster|ZEN +1 Kor Bladewhirl|BFZ +1 Kor Castigator|BFZ +1 Kor Entanglers|BFZ +1 Kor Scythemaster|OGW +1 Kor Sky Climber|OGW +1 Lantern Scout|BFZ +1 Makindi Aeronaut|OGW +1 Makindi Patrol|BFZ +1 Makindi Shieldmate|ZEN +1 Munda's Vanguard|OGW +1 Oath of Gideon|OGW +1 Ondu Cleric|ZEN +1 Ondu War Cleric|OGW +1 Plains|BFZ|2 +3 Plains|BFZ|6 +2 Plains|BFZ|7 +2 Plains|BFZ|8 +3 Plains|BFZ|9 +3 Plains|BFZ|10 +1 Retreat to Emeria|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Graypelt Support.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Graypelt Support.dck new file mode 100644 index 00000000000..86f9bc53855 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Graypelt Support.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Graypelt Support +[Main] +1 Avenger of Zendikar|C13 +1 Baloth Pup|OGW +1 Blade of the Bloodchief|ZEN +1 Endless One|BFZ +1 Expedition Raptor|OGW +1 Forest|ZEN|2 +2 Forest|ZEN|3 +1 Forest|ZEN|4 +1 Forest|ZEN|5 +2 Forest|ZEN|6 +1 Forest|ZEN|7 +2 Forest|ZEN|8 +1 Gladehart Cavalry|OGW +1 Harvester Troll|OGW +1 Joraga Auxiliary|OGW +1 Kabira Vindicator|DDG +1 Lead by Example|OGW +1 Murasa Ranger|BFZ +1 Nissa's Judgment|OGW +1 Nissa, Voice of Zendikar|OGW +1 Ondu Rising|BFZ +1 Oran-Rief, the Vastwood|C15 +1 Plains|ZEN|1 +2 Plains|ZEN|2 +1 Plains|ZEN|6 +1 Quest for the Gemblades|ZEN +1 Relief Captain|OGW +1 Retreat to Kazandu|BFZ +1 Rot Shambler|BFZ +1 Saddleback Lagac|OGW +1 Scute Mob|MM2 +1 Shoulder to Shoulder|OGW +1 Strength of the Tajuru|WWK +1 Talus Paladin|WWK +1 Turntimber Ranger|ZEN +1 Undergrowth Champion|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Munda, Ambush Leader.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Munda, Ambush Leader.dck new file mode 100644 index 00000000000..303311d5fb8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Munda, Ambush Leader.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Munda, Ambush Leader +[Commander] +1 Munda, Ambush Leader|BFZ +[Main] +1 Affa Protector|OGW +1 Akoum Battlesinger|WWK +1 Allied Reinforcements|OGW +1 Ally Encampment|BFZ +1 Angel of Renewal|BFZ +1 Angelic Captain|BFZ +1 Arid Mesa|EXP +1 Captain's Claws|OGW +1 Chasm Guide|BFZ +1 Evolving Wilds|C15 +1 Expedition Envoy|BFZ +1 Gideon, Ally of Zendikar|BFZ +1 Goblin Freerunner|OGW +1 Hada Freeblade|WWK +1 Hero of Goma Fada|BFZ +1 Highland Berserker|ZEN +1 Holdout Settlement|OGW +1 Join the Ranks|WWK +1 Kabira Evangel|ZEN +1 Kazandu Blademaster|ZEN +1 Kazuul Warlord|ZEN +1 Kor Bladewhirl|BFZ +1 Kor Entanglers|BFZ +1 Kor Scythemaster|OGW +1 Mountain|BFZ|3 +1 Mountain|BFZ|4 +2 Mountain|BFZ|8 +1 Mountain|BFZ|9 +1 Munda's Vanguard|OGW +1 Needle Spires|OGW +1 Oath of Gideon|OGW +1 Ondu Cleric|ZEN +2 Plains|BFZ|1 +1 Plains|BFZ|5 +1 Plains|BFZ|9 +1 Plains|BFZ|10 +1 Talus Paladin|WWK +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa Revane.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa Revane.dck new file mode 100644 index 00000000000..4a5948f679e --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa Revane.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Nissa Revane +[Main] +1 Arbor Elf|M13 +1 Beastcaller Savant|BFZ +1 Elvish Archdruid|C14 +1 Elvish Mystic|C14 +7 Forest|ROE|1 +2 Forest|ROE|2 +3 Forest|ROE|3 +3 Forest|ROE|4 +1 Frontier Guide|ZEN +1 Gladehart Cavalry|OGW +1 Greenweaver Druid|ZEN +1 Joraga Treespeaker|ROE +1 Joraga Warcaller|C14 +1 Khalni Hydra|ROE +1 Mul Daya Channelers|ROE +1 Nissa Revane|ZEN +1 Nissa's Chosen|ZEN +1 Nissa's Expedition|M15 +1 Nissa's Judgment|OGW +1 Nissa's Pilgrimage|ORI +1 Nissa's Renewal|BFZ +1 Nissa's Revelation|ORI +1 Oath of Nissa|OGW +1 Omnath, Locus of Mana|FVL +1 Oracle of Mul Daya|ZEN +1 Rampaging Baloths|C14 +1 Stoneforge Masterwork|OGW +1 Tajuru Pathwarden|OGW +1 Tajuru Preserver|ROE +1 Wildheart Invoker|ROE \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa, Vastwood Seer.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa, Vastwood Seer.dck new file mode 100644 index 00000000000..095df5c06c3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa, Vastwood Seer.dck @@ -0,0 +1,37 @@ +[metadata] +Name=Nissa, Vastwood Seer +[Commander] +1 Nissa, Vastwood Seer|ORI +[Main] +1 Arbor Elf|M13 +1 Avenger of Zendikar|C13 +1 Blighted Woodland|BFZ +1 Boundless Realms|M13 +1 Embodiment of Insight|OGW +2 Forest|ORI|1 +1 Forest|ORI|2 +4 Forest|ORI|3 +7 Forest|ORI|4 +1 Frontier Guide|ZEN +1 Greenwarden of Murasa|BFZ +1 Harrow|TPR +1 Khalni Heart Expedition|ZEN +1 Khalni Hydra|ROE +1 Loam Larva|OGW +1 Natural Connection|BFZ +1 Nissa's Expedition|M15 +1 Nissa's Judgment|OGW +1 Nissa's Pilgrimage|ORI +1 Nissa's Renewal|BFZ +1 Nissa's Revelation|ORI +1 Oath of Nissa|OGW +1 Rampaging Baloths|C14 +1 Realms Uncharted|ROE +1 Retreat to Kazandu|BFZ +1 Scute Mob|MM2 +1 Soul of Zendikar|M15 +1 Sylvan Advocate|OGW +1 Sylvan Scrying|BFZ +1 Undergrowth Champion|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa, Worldwaker.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa, Worldwaker.dck new file mode 100644 index 00000000000..38d388a72d4 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Nissa, Worldwaker.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Nissa, Worldwaker +[Main] +1 Ancient Stirrings|ROE +1 Bear Umbra|ROE +1 Boundless Realms|M13 +1 Dragonmaster Outcast|BFZ +1 Expedition Map|MM2 +3 Forest|ZEN|1 +1 Forest|ZEN|2 +2 Forest|ZEN|3 +2 Forest|ZEN|4 +2 Forest|ZEN|5 +1 Forest|ZEN|6 +3 Forest|ZEN|7 +1 Forest|ZEN|8 +1 Frontier Guide|ZEN +1 Growth Spasm|ROE +1 Harrow|TPR +1 Khalni Gem|ZEN +1 Khalni Heart Expedition|ZEN +1 Loam Larva|OGW +1 Natural Connection|BFZ +1 Nissa's Expedition|M15 +1 Nissa's Pilgrimage|ORI +1 Nissa's Renewal|BFZ +1 Nissa's Revelation|ORI +1 Nissa, Worldwaker|M15 +1 Oath of Nissa|OGW +1 Ondu Giant|PC2 +1 Pilgrim's Eye|BFZ +1 Scute Mob|MM2 +1 Sword of the Animist|ORI +1 Sylvan Advocate|OGW +1 Sylvan Scrying|BFZ +1 Terra Eternal|WWK +1 Zendikar Incarnate|ORI +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Omnath, Locus of Mana.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Omnath, Locus of Mana.dck new file mode 100644 index 00000000000..ec7025e9a54 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/Omnath, Locus of Mana.dck @@ -0,0 +1,37 @@ +[metadata] +Name=Omnath, Locus of Mana +[Commander] +1 Omnath, Locus of Mana|FVL +[Main] +1 Arbor Elf|M13 +1 Avenger of Zendikar|C13 +1 Awakening Zone|PC2 +1 Bear Umbra|ROE +1 Beastcaller Savant|BFZ +1 Beastmaster Ascension|C15 +1 Bestial Menace|MM2 +1 Blighted Woodland|BFZ +1 Bonds of Mortality|OGW +1 Canopy Cover|WWK +1 Daggerback Basilisk|ROE +1 Earthen Arms|BFZ +1 Elemental Bond|ORI +1 Elemental Uprising|OGW +1 Elvish Archdruid|C14 +1 Elvish Mystic|C14 +1 Embodiment of Insight|OGW +1 Explore|DDO +1 Feral Contest|WWK +3 Forest|ORI|1 +6 Forest|ORI|2 +2 Forest|ORI|3 +3 Forest|ORI|4 +1 Frontier Guide|ZEN +1 Gelatinous Genesis|ROE +1 Gigantomancer|ROE +1 Gladehart Cavalry|OGW +1 Gnarlid Pack|MM2 +1 Grappler Spider|WWK +1 Gravity Well|ROE +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/_events.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/_events.txt new file mode 100644 index 00000000000..eeeb329c8e9 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Graypelt/_events.txt @@ -0,0 +1,9 @@ +Name:Graypelt Support|Deck:Graypelt Support.dck|Variant:None|Avatar:Undergrowth Champion|Desc: +Name:General Tazri|Deck:General Tazri.dck|Variant:Commander|Avatar:General Tazri|Desc: +Name:Munda, Ambush Leader|Deck:Munda, Ambush Leader.dck|Variant:Commander|Avatar:Munda, Ambush Leader|Desc: +Name:Omnath, Locus of Mana|Deck:Omnath, Locus of Mana.dck|Variant:Commander|Avatar:Omnath, Locus of Mana|Desc: +Name:Nissa, Vastwood Seer|Deck:Nissa, Vastwood Seer.dck|Variant:Commander|Avatar:Nissa, Vastwood Seer|Desc: +Name:Nissa Revane|Deck:Nissa Revane.dck|Variant:Planeswalker|Avatar:Nissa Revane|Desc: +Name:Nissa, Worldwaker|Deck:Nissa, Worldwaker.dck|Variant:Planeswalker|Avatar:Nissa, Worldwaker|Desc: +Name:Gideon Jura|Deck:Gideon Jura.dck|Variant:Planeswalker|Avatar:Gideon Jura|Desc: +Name:Gideon, Ally of Zendikar|Deck:Gideon, Ally of Zendikar.dck|Variant:Planeswalker|Avatar:Gideon, Ally of Zendikar|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Cohort.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Cohort.dck new file mode 100644 index 00000000000..97d474cbb70 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Cohort.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Cohort +[Main] +1 Agadeem Occultist|WWK +1 Ally Encampment|BFZ +1 Bala Ged Thief|ZEN +1 Bloodbond Vampire|BFZ +1 Bojuka Brigand|WWK +1 Captain's Claws|OGW +1 Coralhelm Guide|BFZ +1 Drana's Chosen|OGW +1 Drana, Liberator of Malakir|BFZ +1 Hagra Diabolist|ZEN +1 Hagra Sharpshooter|BFZ +1 Halimar Excavator|WWK +1 Halimar Tidecaller|BFZ +1 Island|BFZ|2 +1 Island|BFZ|3 +1 Island|BFZ|4 +1 Island|BFZ|9 +1 Island|BFZ|10 +1 Jwari Shapeshifter|WWK +1 Kalastria Healer|BFZ +1 Kalastria Nightwatch|BFZ +1 Malakir Soothsayer|OGW +1 Nimana Sell-Sword|ZEN +1 Nirkana Assassin|BFZ +1 Sea Gate Loremaster|ZEN +1 Seascape Aerialist|ZEN +1 Stonework Puma|ZEN +1 Swamp|BFZ|3 +2 Swamp|BFZ|6 +2 Swamp|BFZ|7 +3 Swamp|BFZ|8 +1 Swamp|BFZ|10 +1 Umara Entangler|OGW +1 Umara Raptor|ZEN +1 Vampire Envoy|OGW +1 Zulaport Cutthroat|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Jace, the Mind Sculptor.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Jace, the Mind Sculptor.dck new file mode 100644 index 00000000000..3f4f49ec878 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Jace, the Mind Sculptor.dck @@ -0,0 +1,32 @@ +[metadata] +Name=Jace, the Mind Sculptor +[Main] +1 Adverse Conditions|BFZ +1 Archive Trap|ZEN +1 Archmage Ascension|ZEN +1 Cosi's Trickster|ZEN +1 Domestication|M14 +1 Echo Mage|C13 +1 Enclave Cryptologist|ROE +1 Gift of Tusks|OGW +1 Gomazoa|COM +1 Grip of the Roil|OGW +1 Hedron Crab|ZEN +1 Horribly Awry|BFZ +7 Island|COM|1 +1 Island|COM|2 +4 Island|COM|3 +4 Island|COM|4 +1 Jace, the Mind Sculptor|WWK +1 Lighthouse Chronologist|ROE +1 Lullmage Mentor|ZEN +1 Mind Control|M12 +1 Oath of Jace|OGW +1 Overwhelming Denial|OGW +1 Retreat to Coralhelm|BFZ +1 Roil Elemental|ZEN +1 Scatter to the Winds|BFZ +1 Sphinx of Magosi|C14 +1 Sphinx of the Final Word|OGW +1 Summoner's Bane|DDM +1 Surrakar Spellblade|MM2 \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Kiora, Master of the Depths.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Kiora, Master of the Depths.dck new file mode 100644 index 00000000000..369eb2404a3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Kiora, Master of the Depths.dck @@ -0,0 +1,38 @@ +[metadata] +Name=Kiora, Master of the Depths +[Main] +1 Beastmaster Ascension|C15 +1 Bring to Light|BFZ +1 Coralhelm Commander|ROE +1 Coralhelm Guide|BFZ +1 Cosi's Trickster|ZEN +1 Crush of Tentacles|OGW +1 Enclave Cryptologist|ROE +1 Forest|ZEN|2 +1 Forest|ZEN|7 +1 Forest|ZEN|8 +5 Island|ZEN|1 +1 Island|ZEN|2 +1 Island|ZEN|4 +2 Island|ZEN|5 +2 Island|ZEN|7 +1 Kiora, Master of the Depths|BFZ +1 Kraken Hatchling|M13 +1 Lorthos, the Tidemaker|C14 +1 Lullmage Mentor|ZEN +1 Lumbering Falls|BFZ +1 Merfolk Seastalkers|ZEN +1 Merfolk Skyscout|ROE +1 Merfolk Wayfinder|DDM +1 Misty Rainforest|EXP +1 Overwhelming Denial|OGW +1 Quest for Ula's Temple|WWK +1 Scatter to the Winds|BFZ +1 Scute Mob|MM2 +1 Sea Gate Loremaster|ZEN +1 Shoal Serpent|ZEN +1 Skywatcher Adept|ROE +1 Sphinx of Magosi|C14 +1 Sphinx of the Final Word|OGW +1 Strength of the Tajuru|WWK +1 Windrider Patrol|BFZ \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Level Up.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Level Up.dck new file mode 100644 index 00000000000..3a6c3cdf818 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Level Up.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Level Up +[Main] +1 Archmage Ascension|ZEN +1 Consume the Meek|ROE +1 Consuming Vapors|ROE +1 Coralhelm Commander|ROE +1 Creeping Tar Pit|WWK +1 Echo Mage|C13 +1 Enclave Cryptologist|ROE +1 Grasp of Darkness|OGW +1 Guul Draz Assassin|ROE +1 Hada Spy Patrol|C13 +1 Halimar Wavewatch|ROE +1 Holdout Settlement|OGW +2 Island|C13|1 +2 Island|C13|2 +1 Island|C13|3 +1 Island|C13|4 +1 Jace, the Mind Sculptor|V13 +1 Jwar Isle Refuge|C13 +1 Lighthouse Chronologist|ROE +1 Nirkana Cutthroat|ROE +1 Null Champion|ROE +1 Overwhelming Denial|OGW +1 Part the Waterveil|BFZ +1 Rite of Replication|C15 +1 Ruinous Path|BFZ +1 Scatter to the Winds|BFZ +1 Skywatcher Adept|ROE +1 Sphinx of Magosi|C14 +1 Sphinx of the Final Word|OGW +1 Submerged Boneyard|OGW +1 Sunken Hollow|EXP +2 Swamp|C13|3 +1 Swamp|C13|4 +1 Training Grounds|ROE +1 Unknown Shores|OGW +1 Venerated Teacher|ROE +1 Zulaport Enforcer|ROE +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Lorthos, the Tidemaker.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Lorthos, the Tidemaker.dck new file mode 100644 index 00000000000..6777bd160fe --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Lorthos, the Tidemaker.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Lorthos, the Tidemaker +[Commander] +1 Lorthos, the Tidemaker|C14 +[Main] +1 Blighted Cataract|BFZ +1 Crush of Tentacles|OGW +1 Domestication|M14 +1 Drake Umbra|ROE +1 Gravitational Shift|ROE +1 Guardian of Tazeem|BFZ +1 Halimar Depths|DDM +2 Island|ZEN|2 +3 Island|ZEN|3 +2 Island|ZEN|4 +3 Island|ZEN|6 +1 Island|ZEN|8 +1 Jwar Isle Avenger|OGW +1 Lay Bare|ROE +1 Merfolk Skyscout|ROE +1 Mind Control|M12 +1 Mysteries of the Deep|WWK +1 Overwhelming Denial|OGW +1 Part the Waterveil|BFZ +1 Recurring Insight|ROE +1 Rite of Replication|C15 +1 Roil Elemental|ZEN +1 Sky Ruin Drake|ZEN +1 Skyline Cascade|BFZ +1 Soaring Seacliff|DDI +1 Sphinx of Jwar Isle|C14 +1 Sphinx of Lost Truths|ZEN +1 Sphinx of Magosi|C14 +1 Sphinx of the Final Word|OGW +1 Summoner's Bane|DDM +1 Tectonic Edge|C14 +1 Ugin's Insight|BFZ +1 Vapor Snare|WWK +1 Windrider Patrol|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Ob Nixilis Reignited.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Ob Nixilis Reignited.dck new file mode 100644 index 00000000000..2be0bca14b4 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Ob Nixilis Reignited.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Ob Nixilis Reignited +[Main] +1 Abyssal Persecutor|C14 +1 Baneful Omen|ROE +1 Basilisk Collar|WWK +1 Blade of the Bloodchief|ZEN +1 Captain's Claws|OGW +1 Carrier Thrall|BFZ +1 Corpsehatch|ROE +1 Demon's Grasp|BFZ +1 Demonic Appetite|ROE +1 Desolation Twin|BFZ +1 Drana's Chosen|OGW +1 Dread Drone|MM2 +1 Essence Feed|ROE +1 Grave Birthing|BFZ +1 Halo Hunter|ZEN +1 Hellcarver Demon|ROE +1 Kalitas, Bloodchief of Ghet|ZEN +1 Kalitas, Traitor of Ghet|OGW +1 Mirrorpool|OGW +1 Nirkana Revenant|ROE +1 Null Caller|OGW +1 Ob Nixilis Reignited|BFZ +1 Pawn of Ulamog|ROE +1 Pestilence Demon|C14 +1 Sifter of Skulls|OGW +1 Spawning Bed|BFZ +2 Swamp|ROE|1 +3 Swamp|ROE|2 +6 Swamp|ROE|3 +4 Swamp|ROE|4 \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Sorin Markov.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Sorin Markov.dck new file mode 100644 index 00000000000..a0eddd1f8da --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Sorin Markov.dck @@ -0,0 +1,33 @@ +[metadata] +Name=Sorin Markov +[Main] +1 Baneful Omen|ROE +1 Blood Tribute|ZEN +1 Bloodrite Invoker|ROE +1 Contaminated Ground|GTC +1 Curse of Wizardry|ROE +1 Defiant Bloodlord|BFZ +1 Dread Defiler|OGW +1 Essence Depleter|OGW +1 Essence Feed|ROE +1 Hideous End|DDE +1 Kalastria Healer|BFZ +1 Kalastria Highborn|WWK +1 Malakir Bloodwitch|ZEN +1 Needlebite Trap|ZEN +1 Ob Nixilis, Unshackled|M15 +1 Piranha Marsh|ZEN +1 Pulse Tracker|DDM +1 Retreat to Hagra|BFZ +1 Silent Skimmer|BFZ +1 Sorin Markov|M12 +1 Suffer the Past|ROE +7 Swamp|M12|1 +4 Swamp|M12|2 +5 Swamp|M12|3 +1 Visions of Brutality|OGW +1 Witness the End|OGW +1 Zulaport Chainmage|OGW +1 Zulaport Cutthroat|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Surge.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Surge.dck new file mode 100644 index 00000000000..9a2167dc679 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Surge.dck @@ -0,0 +1,40 @@ +[metadata] +Name=Surge +[Main] +1 Archmage Ascension|ZEN +1 Baneful Omen|ROE +1 Basilisk Collar|WWK +1 Blade of the Bloodchief|ZEN +1 Cast Through Time|ROE +1 Comparative Analysis|OGW +1 Consume the Meek|ROE +1 Consuming Vapors|ROE +1 Containment Membrane|OGW +1 Creeping Tar Pit|WWK +1 Crush of Tentacles|OGW +1 Domestication|M14 +1 Dormant Gomazoa|ROE +1 Endless One|BFZ +1 Exert Influence|BFZ +1 Grip of the Roil|OGW +1 Hellcarver Demon|ROE +1 Island|BFZ|2 +1 Island|BFZ|3 +1 Island|BFZ|4 +2 Island|BFZ|6 +1 Island|BFZ|7 +2 Island|BFZ|8 +1 Island|BFZ|9 +1 Jace, the Mind Sculptor|V13 +1 Jwar Isle Avenger|OGW +1 Lighthouse Chronologist|ROE +1 Lorthos, the Tidemaker|C14 +1 Mirrorpool|OGW +1 Overwhelming Denial|OGW +1 Part the Waterveil|BFZ +1 Sire of Stagnation|BFZ +1 Sphinx of the Final Word|OGW +1 Sunken Hollow|EXP +1 Swamp|BFZ|7 +2 Swamp|BFZ|9 +1 Wrexial, the Risen Deep|COM \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Traps.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Traps.dck new file mode 100644 index 00000000000..e5d4b9bea9d --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Traps.dck @@ -0,0 +1,37 @@ +[metadata] +Name=It's a Trap +[Main] +1 Archive Trap|ZEN +1 Cancel|KTK +1 Coastal Discovery|BFZ +1 Deprive|ROE +1 Dispel|BFZ +1 Horribly Awry|BFZ +4 Island|ROE|1 +1 Island|ROE|2 +3 Island|ROE|3 +3 Island|ROE|4 +1 Lay Bare|ROE +1 Lethargy Trap|ZEN +1 Mindbreak Trap|ZEN +1 Mire's Malice|BFZ +1 Needlebite Trap|ZEN +1 Negate|OGW +1 Nemesis Trap|COM +1 Overwhelming Denial|OGW +1 Permafrost Trap|WWK +1 Ravenous Trap|ZEN +1 Rising Miasma|BFZ +1 Ruinous Path|BFZ +1 Rush of Ice|BFZ +1 Scatter to the Winds|BFZ +1 Spell Contortion|WWK +1 Spell Pierce|ZEN +1 Swamp|ROE|1 +2 Swamp|ROE|2 +1 Swamp|ROE|4 +1 Trapfinder's Trick|ZEN +1 Trapmaker's Snare|ZEN +1 Whiplash Trap|DDN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Wrexial, the Risen Deep.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Wrexial, the Risen Deep.dck new file mode 100644 index 00000000000..b2fdb470fb3 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/Wrexial, the Risen Deep.dck @@ -0,0 +1,45 @@ +[metadata] +Name=Wrexial, the Risen Deep +[Commander] +1 Wrexial, the Risen Deep|COM +[Main] +1 Adverse Conditions|BFZ +1 Archive Trap|ZEN +1 Blighted Cataract|BFZ +1 Blighted Fen|BFZ +1 Coastal Discovery|BFZ +1 Consume the Meek|ROE +1 Consuming Vapors|ROE +1 Corpsehatch|ROE +1 Creeping Tar Pit|WWK +1 Defiant Bloodlord|BFZ +1 Evolving Wilds|C15 +1 Flaying Tendrils|OGW +1 Grip of Desolation|BFZ +1 Grip of the Roil|OGW +1 Halimar Depths|DDM +1 Island|BFZ|3 +1 Island|BFZ|7 +1 Island|BFZ|8 +1 Jwar Isle Refuge|C13 +1 Lighthouse Chronologist|ROE +1 Mindbreak Trap|ZEN +1 Nirkana Revenant|ROE +1 Overwhelming Denial|OGW +1 Rising Miasma|BFZ +1 Roil Elemental|ZEN +1 Ruinous Path|BFZ +1 Scatter to the Winds|BFZ +1 Sire of Stagnation|BFZ +1 Skyline Cascade|BFZ +1 Spell Contortion|WWK +1 Sphinx of Magosi|C14 +1 Sphinx of the Final Word|OGW +1 Submerged Boneyard|OGW +1 Summoner's Bane|DDM +1 Sunken Hollow|EXP +1 Swamp|BFZ|5 +1 Swamp|BFZ|8 +1 Thought Gorger|ROE +1 Unknown Shores|OGW +1 Void Shatter|OGW \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/_events.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/_events.txt new file mode 100644 index 00000000000..ed1ed1212ff --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Jwar Isle/_events.txt @@ -0,0 +1,9 @@ +Name:Cohort|Deck:Cohort.dck|Variant:None|Avatar:Drana's Chosen|Desc: +Name:Level Up|Deck:Level Up.dck|Variant:None|Avatar:Lighthouse Chronologist|Desc: +Name:Surge|Deck:Surge.dck|Variant:None|Avatar:Crush of Tentacles|Desc: +Name:It's a Trap|Deck:It's a Trap.dck|Variant:None|Avatar:Trapmaker's Snare|Desc: +Name:Lorthos, the Tidemaker|Deck:Lorthos, the Tidemaker.dck|Variant:Commander|Avatar:Lorthos, the Tidemaker|Desc: +Name:Wrexial, the Risen Deep|Deck:Wrexial, the Risen Deep.dck|Variant:Commander|Avatar:Wrexial, the Risen Deep|Desc: +Name:Ob Nixilis Reignited|Deck:Ob Nixilis Reignited.dck|Variant:Planeswalker|Avatar:Ob Nixilis Reignited|Desc: +Name:Kiora, Master of the Depths|Deck:Kiora, Master of the Depths.dck|Variant:Planeswalker|Avatar:Kiora, Master of the Depths|Desc: +Name:Jace, the Mind Sculptor|Deck:Jace, the Mind Sculptor.dck|Variant:Planeswalker|Avatar:Jace, the Mind Sculptor|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Chandra Ablaze.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Chandra Ablaze.dck new file mode 100644 index 00000000000..5aaf5abf446 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Chandra Ablaze.dck @@ -0,0 +1,34 @@ +[metadata] +Name=Chandra Ablaze +[Main] +1 Boiling Earth|BFZ +1 Burst Lightning|MM2 +1 Chain Reaction|C15 +1 Chandra Ablaze|ZEN +1 Comet Storm|C15 +1 Devour in Flames|OGW +1 Dragonmaster Outcast|BFZ +1 Elemental Appeal|ZEN +1 Fall of the Titans|OGW +1 Flame Slash|DDK +1 Forked Bolt|ROE +1 Heat Ray|M15 +4 Mountain|ROE|1 +5 Mountain|ROE|2 +5 Mountain|ROE|3 +2 Mountain|ROE|4 +1 Oath of Chandra|OGW +1 Punishing Fire|ZEN +1 Reality Hemorrhage|OGW +1 Roiling Terrain|WWK +1 Rolling Thunder|BFZ +1 Searing Blaze|DDI +1 Seismic Shudder|ZEN +1 Spire Barrage|DDI +1 Staggershock|ROE +1 Stonefury|BFZ +1 Surreal Memoir|ROE +1 Touch of the Void|BFZ +1 Volcanic Upheaval|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Chandra, Flamecaller.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Chandra, Flamecaller.dck new file mode 100644 index 00000000000..d93816a4956 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Chandra, Flamecaller.dck @@ -0,0 +1,39 @@ +[metadata] +Name=Chandra, Flamecaller +[Main] +1 Akoum Hellkite|BFZ +1 Akoum Stonewaker|BFZ +1 Boiling Earth|BFZ +1 Chain Reaction|C15 +1 Chandra, Flamecaller|OGW +1 Comet Storm|C15 +1 Cosi's Ravager|DDI +1 Devastating Summons|ROE +1 Electropotence|ZEN +1 Elemental Appeal|ZEN +1 Embodiment of Fury|OGW +1 Fall of the Titans|OGW +1 Geyser Glider|DDI +1 Hellfire Mongrel|DDH +1 Kozilek's Return|OGW +1 Magmaw|ROE +1 Molten Ravager|ZEN +1 Mountain|ZEN|1 +1 Mountain|ZEN|2 +3 Mountain|ZEN|3 +2 Mountain|ZEN|4 +4 Mountain|ZEN|5 +2 Mountain|ZEN|6 +1 Mountain|ZEN|7 +1 Mountain|ZEN|8 +1 Oath of Chandra|OGW +1 Obsidian Fireheart|ZEN +1 Rage Nimbus|ROE +1 Soulsurge Elemental|ROE +1 Valakut Fireboar|ROE +1 Valakut Predator|BFZ +1 Valakut, the Molten Pinnacle|ZEN +1 Vent Sentinel|CNS +1 Zektar Shrine Expedition|ZEN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Defenders of Zendikar.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Defenders of Zendikar.dck new file mode 100644 index 00000000000..f1ae3183db5 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Defenders of Zendikar.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Defenders of Zendikar +[Main] +1 Avenger of Zendikar|C13 +1 Battle Rampart|ROE +1 Beastcaller Savant|BFZ +1 Bestial Menace|MM2 +1 Cinder Glade|EXP +1 Crumbling Vestige|OGW +1 Devour in Flames|OGW +1 Dragonmaster Outcast|BFZ +1 Forest|BFZ|5 +1 Forest|BFZ|6 +1 Forest|BFZ|9 +1 Forest|BFZ|10 +1 Forest|ROE|3 +1 Gelatinous Genesis|ROE +1 Grotag Siege-Runner|ROE +1 Heat Ray|M15 +1 Holdout Settlement|OGW +1 Jaddi Offshoot|BFZ +1 Lifespring Druid|BFZ +1 Mark of Mutiny|M13 +1 Mountain|BFZ|2 +1 Mountain|BFZ|3 +1 Mountain|BFZ|5 +1 Mountain|ROE|2 +2 Mountain|ROE|3 +1 Nissa's Judgment|OGW +1 Ogre Sentry|ROE +1 Overgrown Battlement|ROE +1 Press into Service|OGW +1 Primal Bellow|ZEN +1 Rage Nimbus|ROE +1 Relic Crush|CNS +1 Rolling Thunder|BFZ +1 Strength of the Tajuru|WWK +1 Sylvan Scrying|BFZ +1 Turn Against|BFZ +1 Unknown Shores|OGW +1 Vent Sentinel|CNS +1 Warmonger's Chariot|CNS \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazandu Landfall.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazandu Landfall.dck new file mode 100644 index 00000000000..05913fa5c83 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazandu Landfall.dck @@ -0,0 +1,38 @@ +[metadata] +Name=Kazandu Landfall +[Main] +1 Adventuring Gear|ZEN +1 Akoum Firebird|BFZ +1 Akoum Hellkite|BFZ +1 Akoum Stonewaker|BFZ +1 Avenger of Zendikar|C13 +1 Baloth Woodcrasher|C13 +1 Belligerent Whiptail|BFZ +1 Cosi's Ravager|DDI +1 Embodiment of Fury|OGW +1 Embodiment of Insight|OGW +1 Eternity Vessel|ZEN +2 Forest|BFZ|1 +1 Forest|BFZ|6 +2 Forest|BFZ|7 +1 Forest|BFZ|8 +1 Forest|BFZ|9 +1 Forest|BFZ|10 +1 Geyser Glider|DDI +1 Grazing Gladehart|DDO +1 Groundswell|WWK +1 Grove Rumbler|BFZ +1 Hedron Rover|WWK +1 Hedron Scrabbler|ZEN +1 Jaddi Offshoot|BFZ +1 Khalni Heart Expedition|ZEN +1 Lotus Cobra|ZEN +1 Makindi Sliderunner|BFZ +2 Mountain|BFZ|1 +1 Mountain|BFZ|3 +1 Mountain|BFZ|4 +3 Mountain|BFZ|6 +1 Murasa Ranger|BFZ +1 Omnath, Locus of Rage|BFZ +1 Oran-Rief Hydra|BFZ +1 Plated Geopede|DDI \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazandu Rally.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazandu Rally.dck new file mode 100644 index 00000000000..05377b6f63c --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazandu Rally.dck @@ -0,0 +1,38 @@ +[metadata] +Name=Kazandu Rally +[Main] +1 Akoum Battlesinger|WWK +1 Akoum Flameseeker|OGW +1 Ally Encampment|BFZ +1 Beastcaller Savant|BFZ +1 Captain's Claws|OGW +1 Chasm Guide|BFZ +1 Firemantle Mage|BFZ +1 Forest|BFZ|1 +1 Forest|BFZ|2 +2 Forest|BFZ|8 +2 Forest|BFZ|9 +1 Forest|BFZ|10 +1 Goblin Freerunner|OGW +1 Graypelt Hunter|WWK +1 Harabaz Druid|WWK +1 Highland Berserker|ZEN +1 Joraga Bard|ZEN +1 Kazuul Warlord|ZEN +1 Mina and Denn, Wildborn|OGW +1 Mountain|BFZ|3 +2 Mountain|BFZ|4 +2 Mountain|BFZ|5 +1 Mountain|BFZ|7 +2 Mountain|BFZ|9 +1 Murasa Pyromancer|ZEN +1 Ondu Champion|BFZ +1 Reckless Bushwhacker|OGW +1 Sylvan Advocate|OGW +1 Tajuru Archer|ZEN +1 Tajuru Beastmaster|BFZ +1 Tajuru Warcaller|BFZ +1 Tuktuk Scrapper|WWK +1 Turntimber Ranger|ZEN +1 Vastwood Animist|WWK +1 Zada, Hedron Grinder|BFZ \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazuul, Tyrant of the Cliffs.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazuul, Tyrant of the Cliffs.dck new file mode 100644 index 00000000000..0315f0a0836 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Kazuul, Tyrant of the Cliffs.dck @@ -0,0 +1,37 @@ +[metadata] +Name=Kazuul, Tyrant of the Cliffs +[Commander] +1 Kazuul, Tyrant of the Cliffs|WWK +[Main] +1 Brimstone Mage|ROE +1 Chandra, Flamecaller|OGW +1 Conquering Manticore|DDL +1 Cunning Sparkmage|WWK +1 Deathforge Shaman|CNS +1 Devour in Flames|OGW +1 Electropotence|ZEN +1 Forked Bolt|ROE +1 Goblin Ruinblaster|ZEN +1 Heat Ray|M15 +1 Hellion Eruption|PC2 +1 Hellkite Charger|MM2 +1 Kazuul's Toll Collector|OGW +1 Lord of Shatterskull Pass|ROE +1 Lust for War|ROE +1 Mark of Mutiny|M13 +1 Mordant Dragon|DDG +4 Mountain|ROE|1 +3 Mountain|ROE|2 +4 Mountain|ROE|3 +3 Mountain|ROE|4 +1 Obsidian Fireheart|ZEN +1 Ogre Sentry|ROE +1 Ogre's Cleaver|ROE +1 Punishing Fire|COM +1 Rage Nimbus|ROE +1 Rolling Thunder|BFZ +1 Splinter Twin|MM2 +1 Tears of Valakut|OGW +1 Valakut, the Molten Pinnacle|ZEN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Mina and Denn, Wildborn.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Mina and Denn, Wildborn.dck new file mode 100644 index 00000000000..df4ab83410b --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Mina and Denn, Wildborn.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Mina and Denn, Wildborn +[Commander] +1 Mina and Denn, Wildborn|OGW +[Main] +1 Avenger of Zendikar|C13 +1 Blighted Woodland|BFZ +1 Boundless Realms|M13 +1 Cinder Glade|EXP +1 Dragonmaster Outcast|BFZ +1 Evolving Wilds|C15 +1 Expedition Map|MM2 +1 Fertile Thicket|BFZ +2 Forest|PC2|2 +1 Forest|PC2|4 +1 Frontier Guide|ZEN +1 Growth Spasm|ROE +1 Harrow|TPR +1 Kazandu Refuge|C13 +1 Khalni Garden|C13 +1 Khalni Heart Expedition|ZEN +1 Loam Larva|OGW +1 Lotus Cobra|ZEN +3 Mountain|PC2|1 +1 Natural Connection|BFZ +1 Nissa's Expedition|M15 +1 Nissa's Pilgrimage|ORI +1 Nissa's Renewal|BFZ +1 Nissa, Vastwood Seer|ORI +1 Omnath, Locus of Mana|FVL +1 Omnath, Locus of Rage|BFZ +1 Ondu Giant|PC2 +1 Raging Ravine|WWK +1 Rampaging Baloths|C14 +1 Realms Uncharted|ROE +1 Retreat to Kazandu|BFZ +1 Scute Mob|MM2 +1 Sword of the Animist|ORI +1 Sylvan Scrying|BFZ +1 Timber Gorge|OGW +1 Undergrowth Champion|BFZ +1 Unknown Shores|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Nissa, Voice of Zendikar.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Nissa, Voice of Zendikar.dck new file mode 100644 index 00000000000..8cfbe7d3a4b --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Nissa, Voice of Zendikar.dck @@ -0,0 +1,35 @@ +[metadata] +Name=Nissa, Voice of Zendikar +[Main] +1 Avenger of Zendikar|C13 +1 Beastcaller Savant|BFZ +1 Boundless Realms|M13 +1 Expedition Map|MM2 +3 Forest|C13|1 +4 Forest|C13|2 +4 Forest|C13|3 +4 Forest|C13|4 +1 Frontier Guide|ZEN +1 Grovetender Druids|BFZ +1 Harabaz Druid|WWK +1 Harrow|TPR +1 Holdout Settlement|OGW +1 Jaddi Offshoot|BFZ +1 Khalni Garden|C13 +1 Khalni Gem|ZEN +1 Khalni Heart Expedition|ZEN +1 Lifespring Druid|BFZ +1 Loam Larva|OGW +1 Lotus Cobra|ZEN +1 Mul Daya Channelers|ROE +1 Natural Connection|BFZ +1 Nissa's Renewal|BFZ +1 Nissa, Voice of Zendikar|OGW +1 Oath of Nissa|OGW +1 Prophetic Prism|GTC +1 Snapping Creeper|WWK +1 Unknown Shores|OGW +1 Vengevine|ROE +1 Zendikar Resurgent|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Omnath, Locus of Rage.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Omnath, Locus of Rage.dck new file mode 100644 index 00000000000..138b94ff655 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Omnath, Locus of Rage.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Omnath, Locus of Rage +[Commander] +1 Omnath, Locus of Rage|BFZ +[Main] +1 Akoum Firebird|BFZ +1 Akoum Hellkite|BFZ +1 Akoum Stonewaker|BFZ +1 Avenger of Zendikar|C13 +1 Baloth Woodcrasher|C13 +1 Blighted Woodland|BFZ +1 Cinder Glade|EXP +1 Cosi's Ravager|DDI +1 Embodiment of Fury|OGW +1 Embodiment of Insight|OGW +1 Eternity Vessel|ZEN +1 Evolving Wilds|C15 +1 Fertile Thicket|BFZ +1 Forest|BFZ|7 +2 Forest|BFZ|10 +1 Grazing Gladehart|DDO +1 Grove Rumbler|BFZ +1 Jaddi Offshoot|BFZ +1 Kazandu Refuge|C13 +1 Khalni Heart Expedition|ZEN +1 Lotus Cobra|ZEN +2 Mountain|BFZ|2 +2 Mountain|BFZ|3 +1 Murasa Ranger|BFZ +1 Nissa, Voice of Zendikar|OGW +1 Nissa, Worldwaker|M15 +1 Oran-Rief Hydra|BFZ +1 Oran-Rief, the Vastwood|C15 +1 Raging Ravine|WWK +1 Rampaging Baloths|C14 +1 Retreat to Kazandu|BFZ +1 Retreat to Valakut|BFZ +1 Scythe Leopard|BFZ +1 Timber Gorge|OGW +1 Undergrowth Champion|BFZ +1 Valakut, the Molten Pinnacle|ZEN +1 Zektar Shrine Expedition|ZEN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Tuktuk the Explorer.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Tuktuk the Explorer.dck new file mode 100644 index 00000000000..1644e2482ac --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Tuktuk the Explorer.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Tuktuk the Explorer +[Commander] +1 Tuktuk the Explorer|C14 +[Main] +1 Basilisk Collar|WWK +1 Battle-Rattle Shaman|ROE +1 Blighted Gorge|BFZ +1 Captain's Claws|OGW +1 Chasm Guide|BFZ +1 Dread Statuary|DDM +1 Goblin Arsonist|DDK +1 Goblin Bushwhacker|ZEN +1 Goblin Dark-Dwellers|OGW +1 Goblin Freerunner|OGW +1 Goblin Guide|ZEN +1 Goblin Roughrider|M15 +1 Goblin Ruinblaster|ZEN +1 Goblin Shortcutter|M14 +1 Goblin Tunneler|M12 +1 Goblin War Paint|BFZ +1 Grappling Hook|ZEN +1 Grotag Siege-Runner|ROE +1 Holdout Settlement|OGW +1 Lavafume Invoker|ROE +1 Lavastep Raider|BFZ +1 Looming Spires|BFZ +1 Mountain|ROE|2 +3 Mountain|ROE|3 +3 Mountain|ROE|4 +1 Quest for the Goblin Lord|WWK +1 Quicksand|CNS +1 Reckless Bushwhacker|OGW +1 Smoldering Spires|WWK +1 Tectonic Edge|C14 +1 Teetering Peaks|PD2 +1 Torch Slinger|ZEN +1 Tuktuk Scrapper|WWK +1 Valakut, the Molten Pinnacle|ZEN +1 Warren Instigator|ZEN +1 Zada's Commando|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Zada, Hedron Grinder.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Zada, Hedron Grinder.dck new file mode 100644 index 00000000000..95de11f7de5 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/Zada, Hedron Grinder.dck @@ -0,0 +1,41 @@ +[metadata] +Name=Zada, Hedron Grinder +[Commander] +1 Zada, Hedron Grinder|BFZ +[Main] +1 Battle-Rattle Shaman|ROE +1 Blighted Gorge|BFZ +1 Brute Strength|OGW +1 Bull Rush|WWK +1 Chain Reaction|C15 +1 Devastating Summons|ROE +1 Devour in Flames|OGW +1 Dragonmaster Outcast|BFZ +1 Expedite|OGW +1 Forked Bolt|ROE +1 Goblin Arsonist|DDK +1 Goblin Dark-Dwellers|OGW +1 Goblin Freerunner|OGW +1 Goblin Guide|ZEN +1 Goblin Roughrider|M15 +1 Goblin Ruinblaster|ZEN +1 Heat Ray|M15 +1 Kargan Dragonlord|ROE +1 Kiln Fiend|DDJ +1 Looming Spires|BFZ +1 Mark of Mutiny|M13 +2 Mountain|BFZ|2 +3 Mountain|BFZ|4 +1 Mountain|BFZ|5 +2 Mountain|BFZ|6 +3 Mountain|BFZ|7 +1 Press into Service|OGW +1 Slaughter Cry|M12 +1 Smoldering Spires|WWK +1 Sure Strike|BFZ +1 Teetering Peaks|PD2 +1 Traitorous Instinct|RTR +1 Turn Against|BFZ +1 Valakut, the Molten Pinnacle|ZEN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/_events.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/_events.txt new file mode 100644 index 00000000000..97b680ce63a --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Kazandu/_events.txt @@ -0,0 +1,9 @@ +Name:Defenders of Zendikar|Deck:Defenders of Zendikar.dck|Variant:None|Avatar:Avenger of Zendikar|Desc: +Name:Kazandu Landfall|Deck:Kazandu Landfall.dck|Variant:None|Avatar:Baloth Woodcrasher|Desc: +Name:Kazandu Rally|Deck:Kazandu Rally.dck|Variant:None|Avatar:Chasm Guide|Desc: +Name:Kazuul, Tyrant of the Cliffs|Deck:Kazuul, Tyrant of the Cliffs.dck|Variant:Commander|Avatar:Kazuul, Tyrant of the Cliffs|Desc: +Name:Mina and Denn, Wildborn|Deck:Mina and Denn, Wildborn.dck|Variant:Commander|Avatar:Mina and Denn, Wildborn|Desc: +Name:Omnath, Locus of Rage|Deck:Omnath, Locus of Rage.dck|Variant:Commander|Avatar:Omnath, Locus of Rage|Desc: +Name:Zada, Hedron Grinder|Deck:Zada, Hedron Grinder.dck|Variant:Commander|Avatar:Zada, Hedron Grinder|Desc: +Name:Nissa, Voice of Zendikar|Deck:Nissa, Voice of Zendikar.dck|Variant:Planeswalker|Avatar:Nissa, Voice of Zendikar|Desc: +Name:Chandra Ablaze|Deck:Chandra Ablaze.dck|Variant:Planeswalker|Avatar:Chandra Ablaze|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Ayli, Eternal Pilgrim.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Ayli, Eternal Pilgrim.dck new file mode 100644 index 00000000000..35760959886 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Ayli, Eternal Pilgrim.dck @@ -0,0 +1,43 @@ +[metadata] +Name=Ayli, Eternal Pilgrim +[Commander] +1 Ayli, Eternal Pilgrim|OGW +[Main] +1 Angelheart Vial|ROE +1 Archangel of Thune|M14 +1 Bloodchief Ascension|ZEN +1 Captain's Claws|OGW +1 Cliffhaven Vampire|OGW +1 Conqueror's Pledge|ZEN +1 Consuming Vapors|ROE +1 Crypt of Agadeem|C14 +1 Deathless Angel|ROE +1 Defiant Bloodlord|BFZ +1 Drana's Chosen|OGW +1 Drana's Emissary|BFZ +1 Feast of Blood|ZEN +1 Gideon, Ally of Zendikar|BFZ +1 Landbind Ritual|ZEN +1 Luminous Wake|ROE +1 Make a Stand|OGW +1 Malakir Familiar|BFZ +1 Marsh Flats|EXP +1 Ob Nixilis of the Black Oath|C14 +1 Ondu Rising|BFZ +2 Plains|ROE|1 +2 Plains|ROE|2 +1 Plains|ROE|3 +1 Plains|ROE|4 +1 Retreat to Hagra|BFZ +1 Serene Steward|BFZ +1 Shambling Vent|BFZ +1 Sorin Markov|M12 +1 Survival Cache|C13 +2 Swamp|ROE|1 +1 Swamp|ROE|2 +1 Swamp|ROE|3 +2 Swamp|ROE|4 +1 Vampire Nighthawk|C13 +1 Zulaport Cutthroat|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Iona, Shield of Emeria.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Iona, Shield of Emeria.dck new file mode 100644 index 00000000000..8d793cee583 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Iona, Shield of Emeria.dck @@ -0,0 +1,36 @@ +[metadata] +Name=Iona, Shield of Emeria +[Commander] +1 Iona, Shield of Emeria|V15 +[Main] +1 Admonition Angel|WWK +1 Angel of Renewal|BFZ +1 Archon of Redemption|WWK +1 Celestial Mantle|ZEN +1 Conqueror's Pledge|ZEN +1 Day of Judgment|M12 +1 Deathless Angel|ROE +1 Emeria Angel|ZEN +1 Emeria Shepherd|BFZ +1 Emeria, the Sky Ruin|C14 +1 Felidar Sovereign|BFZ +1 Ghostly Sentinel|BFZ +1 Harmless Assault|ROE +1 Inspired Charge|BFZ +1 Iona's Blessing|OGW +1 Iona's Judgment|WWK +1 Isolation Zone|OGW +1 Kabira Vindicator|DDG +1 Landbind Ritual|ZEN +1 Makindi Griffin|ROE +1 Marshal's Anthem|C15 +1 Nomads' Assembly|C14 +3 Plains|C14|1 +3 Plains|C14|2 +2 Plains|C14|3 +7 Plains|C14|4 +1 Planar Outburst|BFZ +1 Shepherd of the Lost|ZEN +1 Windborne Charge|ZEN +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Jori En, Ruin Diver.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Jori En, Ruin Diver.dck new file mode 100644 index 00000000000..88e9f94111d --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Jori En, Ruin Diver.dck @@ -0,0 +1,44 @@ +[metadata] +Name=Jori En, Ruin Diver +[Commander] +1 Jori En, Ruin Diver|OGW +[Main] +1 Boulder Salvo|OGW +1 Bull Rush|WWK +1 Burst Lightning|MM2 +1 Clutch of Currents|BFZ +1 Comparative Analysis|OGW +1 Containment Membrane|OGW +1 Crush of Tentacles|OGW +1 Devastating Summons|ROE +1 Dispel|BFZ +1 Distortion Strike|ROE +1 Evolving Wilds|C15 +1 Fall of the Titans|OGW +1 Fleeting Distraction|DDN +1 Gift of Tusks|OGW +1 Goblin Freerunner|OGW +1 Grip of the Roil|OGW +3 Island|BFZ|1 +1 Island|BFZ|7 +1 Island|BFZ|8 +1 Island|BFZ|9 +1 Island|BFZ|10 +1 Jwar Isle Avenger|OGW +1 Mountain|BFZ|4 +2 Mountain|BFZ|6 +1 Mountain|BFZ|9 +1 Mountain|BFZ|10 +1 Overwhelming Denial|OGW +1 Reckless Bushwhacker|OGW +1 Rush of Ice|BFZ +1 Scalding Tarn|EXP +1 Shared Discovery|ROE +1 Slip Through Space|OGW +1 Soulsurge Elemental|ROE +1 Spell Pierce|ZEN +1 Sphinx-Bone Wand|DDJ +1 Tyrant of Valakut|OGW +1 Wandering Fumarole|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Kickin It.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Kickin It.dck new file mode 100644 index 00000000000..f2a502a17d4 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Kickin It.dck @@ -0,0 +1,38 @@ +[metadata] +Name=Kickin' It +[Main] +1 AEther Figment|DDM +1 Apex Hawks|CNS +1 Basilisk Collar|WWK +1 Bold Defense|ZEN +1 Celestial Colonnade|WWK +1 Celestial Mantle|ZEN +1 Conqueror's Pledge|ZEN +1 Cosi's Trickster|ZEN +1 Day of Judgment|M12 +1 Deathless Angel|ROE +1 Domestication|M14 +1 Dormant Gomazoa|ROE +1 Emeria Angel|ZEN +1 Emeria, the Sky Ruin|C14 +1 Enclave Elite|CNS +1 Everflowing Chalice|MM2 +1 Felidar Sovereign|BFZ +1 Into the Roil|C14 +1 Island|ZEN|2 +1 Island|ZEN|4 +3 Island|ZEN|5 +1 Island|ZEN|7 +1 Kor Aeronaut|DDF +1 Kor Sanctifiers|C15 +1 Lightkeeper of Emeria|COM +1 Marshal's Anthem|C15 +2 Plains|ZEN|3 +3 Plains|ZEN|6 +1 Plains|ZEN|8 +1 Prairie Stream|EXP +1 Rite of Replication|C15 +1 Spell Contortion|WWK +1 Sphinx of Lost Truths|ZEN +1 Tempest Owl|ZEN +1 Voyager Drake|WWK \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Linvala, Keeper of Silence.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Linvala, Keeper of Silence.dck new file mode 100644 index 00000000000..7ae2476962a --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Linvala, Keeper of Silence.dck @@ -0,0 +1,42 @@ +[metadata] +Name=Linvala, Keeper of Silence +[Commander] +1 Linvala, Keeper of Silence|ROE +[Main] +1 Admonition Angel|WWK +1 Angel of Renewal|BFZ +1 Angelheart Vial|ROE +1 Angelic Gift|BFZ +1 Blighted Steppe|BFZ +1 Conqueror's Pledge|ZEN +1 Day of Judgment|M12 +1 Dazzling Reflection|OGW +1 Deathless Angel|ROE +1 Emerge Unscathed|ROE +1 Emeria Angel|ZEN +1 Emeria Shepherd|BFZ +1 Emeria, the Sky Ruin|C14 +1 Everflowing Chalice|MM2 +1 Gideon Jura|M12 +1 Immolating Glare|OGW +1 Iona's Judgment|WWK +1 Kabira Crossroads|DDF +1 Lightkeeper of Emeria|COM +1 Luminarch Ascension|ZEN +1 Mighty Leap|OGW +1 Oust|ROE +4 Plains|BFZ|3 +1 Plains|BFZ|4 +1 Plains|M12|1 +1 Plains|M12|2 +2 Plains|M12|3 +2 Plains|M12|4 +1 Puncturing Light|ROE +1 Sandstone Bridge|BFZ +1 Searing Light|OGW +1 Sejiri Steppe|DDG +1 Shepherd of the Lost|ZEN +1 Smite|TPR +1 Stoneforge Masterwork|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Linvala, the Preserver.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Linvala, the Preserver.dck new file mode 100644 index 00000000000..a4ebc5f9c54 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Linvala, the Preserver.dck @@ -0,0 +1,37 @@ +[metadata] +Name=Linvala, the Preserver +[Commander] +1 Linvala, the Preserver|OGW +[Main] +1 Angel of Renewal|BFZ +1 Angelheart Vial|ROE +1 Archangel of Thune|M14 +1 Basilisk Collar|WWK +1 Blighted Steppe|BFZ +1 Caravan Hurda|ZEN +1 Celestial Mantle|ZEN +1 Conqueror's Pledge|ZEN +1 Courier Griffin|BFZ +1 Day of Judgment|M12 +1 Emeria, the Sky Ruin|C14 +1 Eternity Vessel|ZEN +1 Felidar Sovereign|BFZ +1 Felidar Umbra|PC2 +1 Landbind Ritual|ZEN +1 Lightkeeper of Emeria|COM +1 Luminarch Ascension|ZEN +1 Luminous Wake|ROE +1 Narrow Escape|DDE +1 Nomads' Assembly|C14 +1 Ondu Rising|BFZ +1 Oust|ROE +3 Plains|M12|1 +1 Plains|M12|2 +7 Plains|M12|3 +3 Plains|M12|4 +1 Planar Outburst|BFZ +1 Serene Steward|BFZ +1 Survival Cache|C13 +1 Transcendent Master|ROE +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Nahiri, the Lithomancer.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Nahiri, the Lithomancer.dck new file mode 100644 index 00000000000..2a6848b600b --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Nahiri, the Lithomancer.dck @@ -0,0 +1,32 @@ +[metadata] +Name=Nahiri, the Lithomancer +[Main] +1 Armament Master|ZEN +1 Basilisk Collar|WWK +1 Blade of the Bloodchief|ZEN +1 Captain's Claws|OGW +1 Chitinous Cloak|OGW +1 Conqueror's Pledge|ZEN +1 Emeria, the Sky Ruin|C14 +1 Ghostly Sentinel|BFZ +1 Grappling Hook|ZEN +1 Kitesail|MM2 +1 Kitesail Apprentice|WWK +1 Kor Duelist|MM2 +1 Kor Outfitter|ZEN +1 Kor Scythemaster|OGW +1 Munda's Vanguard|OGW +1 Nahiri, the Lithomancer|C14 +1 Nomads' Assembly|C14 +1 Oath of Gideon|OGW +1 Pennon Blade|ROE +6 Plains|C14|1 +5 Plains|C14|2 +4 Plains|C14|4 +1 Quest for the Holy Relic|ZEN +1 Retreat to Emeria|BFZ +1 Stone Haven Outfitter|OGW +1 Stoneforge Masterwork|OGW +1 Stoneforge Mystic|WWK +1 Sword of the Animist|ORI +1 Trailblazer's Boots|ZEN \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Noyan Dar, Roil Shaper.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Noyan Dar, Roil Shaper.dck new file mode 100644 index 00000000000..dde211bd75c --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Noyan Dar, Roil Shaper.dck @@ -0,0 +1,47 @@ +[metadata] +Name=Noyan Dar, Roil Shaper +[Commander] +1 Noyan Dar, Roil Shaper|BFZ +[Main] +1 Basilisk Collar|WWK +1 Captain's Claws|OGW +1 Celestial Colonnade|WWK +1 Clutch of Currents|BFZ +1 Coastal Discovery|BFZ +1 Cyclone Sire|OGW +1 Deprive|ROE +1 Emeria Angel|ZEN +1 Encircling Fissure|BFZ +1 Evolving Wilds|C15 +1 Expedition Map|MM2 +1 Halimar Depths|DDM +1 Halimar Tidecaller|BFZ +1 Holdout Settlement|OGW +1 Island|BFZ|1 +1 Island|BFZ|6 +1 Island|BFZ|10 +1 Kabira Crossroads|DDF +1 Luminarch Ascension|ZEN +1 Meandering River|OGW +1 Ondu Rising|BFZ +1 Part the Waterveil|BFZ +1 Perilous Vault|M15 +1 Plains|BFZ|3 +1 Plains|BFZ|5 +1 Planar Outburst|BFZ +1 Prairie Stream|EXP +1 Retreat to Emeria|BFZ +1 Roil Spout|BFZ +1 Rush of Ice|BFZ +1 Sandstone Bridge|BFZ +1 Scatter to the Winds|BFZ +1 Sejiri Refuge|C13 +1 Sejiri Steppe|DDG +1 Sheer Drop|BFZ +1 Soaring Seacliff|DDI +1 Sphinx-Bone Wand|DDJ +1 Surrakar Spellblade|MM2 +1 Terra Eternal|WWK +1 Wall of Resurgence|OGW +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Thada Adel, Acquisitor.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Thada Adel, Acquisitor.dck new file mode 100644 index 00000000000..9ee3017b5d5 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Thada Adel, Acquisitor.dck @@ -0,0 +1,35 @@ +[metadata] +Name=Thada Adel, Acquisitor +[Commander] +1 Thada Adel, Acquisitor|WWK +[Main] +1 Abstruse Interference|OGW +1 Adverse Conditions|BFZ +1 Anticipate|DTK +1 Archmage Ascension|ZEN +1 Caller of Gales|ZEN +1 Coralhelm Commander|ROE +1 Coralhelm Guide|BFZ +1 Cosi's Trickster|ZEN +1 Enclave Cryptologist|ROE +1 Enclave Elite|CNS +1 Frostwind Invoker|ROE +1 Guardian of Tazeem|BFZ +1 Halimar Wavewatch|ROE +6 Island|DTK|1 +6 Island|DTK|2 +3 Island|DTK|3 +1 Lullmage Mentor|ZEN +1 Merfolk Observer|ROE +1 Merfolk Seastalkers|ZEN +1 Merfolk Skyscout|ROE +1 Merfolk Wayfinder|DDM +1 Sea Gate Loremaster|ZEN +1 Seascape Aerialist|ZEN +1 Sejiri Merfolk|WWK +1 Skywatcher Adept|ROE +1 Spreading Seas|ZEN +1 Umara Entangler|OGW +1 Windrider Patrol|BFZ +[Sideboard] + diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Totem Armor.dck b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Totem Armor.dck new file mode 100644 index 00000000000..ef12b10a0a6 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/Totem Armor.dck @@ -0,0 +1,34 @@ +[metadata] +Name=Totem Armor +[Main] +1 Angelic Gift|BFZ +1 Aura Finesse|ROE +1 Celestial Mantle|ZEN +1 Crab Umbra|ROE +1 Drake Umbra|ROE +1 Eel Umbra|ROE +1 Eland Umbra|ROE +1 Eldrazi Conscription|ROE +1 Felidar Umbra|PC2 +1 Guard Duty|ROE +1 Hyena Umbra|PC2 +1 Iona's Blessing|OGW +2 Island|ROE|1 +1 Island|ROE|2 +4 Island|ROE|4 +1 Kor Spiritdancer|PC2 +1 Luminous Wake|ROE +1 Mammoth Umbra|PC2 +1 Mind Control|M12 +1 Narcolepsy|MM2 +1 Nimbus Wings|ZEN +1 Paralyzing Grasp|RTR +2 Plains|ROE|1 +3 Plains|ROE|2 +3 Plains|ROE|4 +1 Spreading Seas|ZEN +1 Tightening Coils|BFZ +1 Totem-Guide Hartebeest|ORI +1 Umbra Mystic|ROE +1 Vapor Snare|WWK +1 Wind Zendikon|WWK \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/_events.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/_events.txt new file mode 100644 index 00000000000..9dc8ccf0216 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/Sejiri/_events.txt @@ -0,0 +1,9 @@ +Name:Kickin' It|Deck:Kickin It.dck|Variant:None|Avatar:Sphinx of Lost Truths|Desc: +Name:Totem Armor|Deck:Totem Armor.dck|Variant:None|Avatar:Umbra Mystic|Desc: +Name:Ayli, Eternal Pilgrim|Deck:Ayli, Eternal Pilgrim.dck|Variant:Commander|Avatar:Ayli, Eternal Pilgrim|Desc: +Name:Iona, Shield of Emeria|Deck:Iona, Shield of Emeria.dck|Variant:Commander|Avatar:Iona, Shield of Emeria|Desc: +Name:Jori En, Ruin Diver|Deck:Jori En, Ruin Diver.dck|Variant:Commander|Avatar:Jori En, Ruin Diver|Desc: +Name:Linvala, Keeper of Silence|Deck:Linvala, Keeper of Silence.dck|Variant:Commander|Avatar:Linvala, Keeper of Silence|Desc: +Name:Noyan Dar, Roil Shaper|Deck:Noyan Dar, Roil Shaper.dck|Variant:Commander|Avatar:Noyan Dar, Roil Shaper|Desc: +Name:Thada Adel, Acquisitor|Deck:Thada Adel, Acquisitor.dck|Variant:Commander|Avatar:Thada Adel, Acquisitor|Desc: +Name:Nahiri, the Lithomancer|Deck:Nahiri, the Lithomancer.dck|Variant:Planeswalker|Avatar:Nahiri, the Lithomancer|Desc: \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/banned_cards.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/banned_cards.txt new file mode 100644 index 00000000000..e2cf3eb5d2d --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/banned_cards.txt @@ -0,0 +1,64 @@ +Atraxa, Praetors' Voice +Breya, Etherium Shaper +Cruel Entertainment +Curse of Vengeance +Kynaios and Tiro of Meletis +Yidris, Maelstrom Wielder +Abzan Charm +Abzan Falconer +Akroan Horse +Alesha, Who Smiles at Death +Azorius Chancery +Blood Tyrant +Boros Charm +Boros Garrison +Brutal Hordechief +Citadel Siege +Dauntless Escort +Dimir Aqueduct +Etherium Sculptor +Etherium-Horn Sorcerer +Ethersworn Adjudicator +Ghave, Guru of Spores +Golgari Rot Farm +Golgari Signet +Gruul Signet +Gruul Turf +In Garruk's Wake +Iroas, God of Victory +Izzet Boilerworks +Jor Kadeen, the Prevailer +Korozda Guildmage +Master Biomancer +Master of Etherium +Mirror Entity +Myr Battlesphere +Myr Retriever +Nath of the Gilt-Leaf +Naya Charm +Orzhov Advokist +Orzhov Basilica +Orzhov Signet +Rakdos Carnarium +Rakdos Charm +Rakdos Signet +Satyr Wayfinder +Selesnya Guildmage +Selesnya Sanctuary +Sharuum the Hegemon +Shimmer Myr +Simic Growth Chamber +Simic Signet +Soul of New Phyrexia +Sphinx Summoner +Sydri, Galvanic Genius +Taurean Mauler +Tezzeret's Gambit +Thopter Foundry +Thrummingbird +Transguild Promenade +Vedalken Engineer +Venser's Journal +Vorel of the Hull Clade +Zedruu the Greathearted +Zhur-Taa Druid diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/cards.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/cards.txt new file mode 100644 index 00000000000..b5847c860d2 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/cards.txt @@ -0,0 +1,28 @@ +Perilous Vault +Archangel of Thune +Soul of Zendikar +Boundless Realms +Malakir Cullblade +Nissa's Expedition +Dismiss into Dream +Elemental Bond +Elvish Archdruid +Elvish Mystic +Nahiri, the Lithomancer +Felidar Umbra +Indrik Umbra +Into the Wilds +Joraga Invocation +Mind Control +Nissa's Pilgrimage +Nissa's Revelation +Nissa, Vastwood Seer +Nissa, Worldwaker +Ob Nixilis of the Black Oath +Ob Nixilis, Unshackled +Sword of the Animist +Vastwood Hydra +Wild Instincts +Woodborn Behemoth +Zendikar Incarnate +Zendikar's Roil \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/plane_cards.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/plane_cards.txt new file mode 100644 index 00000000000..97f1bb1bda8 --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/plane_cards.txt @@ -0,0 +1,4 @@ +Akoum +Hedron Fields of Agadeem +Murasa +Tazeem \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/regions.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/regions.txt new file mode 100644 index 00000000000..0184d6428ba --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/regions.txt @@ -0,0 +1,6 @@ +Name:Kazandu|Art:Kazandu Refuge|Colors:RG +Name:Graypelt|Art:Graypelt Refuge|Colors:GW +Name:Sejiri|Art:Sejiri Refuge|Colors:WU +Name:Jwar Isle|Art:Jwar Isle Refuge|Colors:UB +Name:Akoum|Art:Akoum Refuge|Colors:BR +Name:Blind Eternities|Art:Eldrazi Temple|Colors:C \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/Zendikar_Classic/sets.txt b/forge-gui/res/conquest/planes/Zendikar_Classic/sets.txt new file mode 100644 index 00000000000..9103dfff24b --- /dev/null +++ b/forge-gui/res/conquest/planes/Zendikar_Classic/sets.txt @@ -0,0 +1,6 @@ +ZEN +WWK +ROE +BFZ +OGW +C16 \ No newline at end of file diff --git a/forge-gui/res/conquest/planes/planes.txt b/forge-gui/res/conquest/planes/planes.txt index 581246d06ef..cd1b8986b51 100644 --- a/forge-gui/res/conquest/planes/planes.txt +++ b/forge-gui/res/conquest/planes/planes.txt @@ -13,11 +13,14 @@ Name:Mercadia|RegionSize:6|Unreachable:True|Desc: Name:Mirrodin|RegionSize:9|Desc:A dark contagion is taking over this metal planet, breeding wave after wave of Phyrexian horrors.\nConsists of 63 events. Contains cards from MRD, DST, 5DN, SOM, MBS, NPH, and more. Name:Rath|RegionSize:6|Unreachable:True|Desc: Name:Ravnica|RegionSize:9|Desc:A worldwide cityscape of grand halls, decrepit slums, and ancient ruins.\nConsists of 88 events. Contains cards from RAV, GPT, DIS, RTR, GTC, DGM, GRN, GK1, RNA, WAR, and C15. +Name:Ravnica_Classic|RegionSize:9|Desc:A worldwide cityscape of grand halls, decrepit slums, and ancient ruins.\nThis is the Classic version of the plane, without newer sets and with original events. Consists of 88 events. Contains cards from RAV, GPT, DIS, RTR, GTC, DGM, and C15. Name:Regatha|RegionSize:6|Unreachable:True|Desc: Name:Shandalar|RegionSize:9|Unreachable:True|Desc: Name:Tarkir|RegionSize:9|Desc:A plane dominated by five powerful clans... or five powerful dragon lords.\nConsists of 45 events. Contains cards from KTK, FRF, DTK, CMD, CNS/CN2, some C17. Name:Theros|RegionSize:9|Desc:Mortals tremble before an awe-inspiring pantheon of gods.\nConsists of 45 events. Contains cards from THS, BNG, JOU, HOP, PCA, THB, and more. +Name:Theros_Classic|RegionSize:9|Desc:Mortals tremble before an awe-inspiring pantheon of gods.\nThis is the Classic version of the plane, without newer sets and with original events. Consists of 45 events. Contains cards from THS, BNG, JOU, HOP, PCA, and more. Name:Time_Vault|RegionSize:6|Unreachable:True|Desc:A mysterious and legendary Time Vault, allowing one to travel back in time and revisit the ages long past and challenge the legends of Dominaria.\nConsists of 12 events. Contains cards from the early core sets up to 9th edition, Dominaria-themed expansions (Ice Age, Mirage, Urza's Saga, Invasion, Odyssey, Onslaught, and Time Spiral blocks), the original Commander, and Modern Horizons.\n\nThe portal to this plane is unstable and will close soon, so hasten your step, planeswalker, while you have the chance... Name:Ulgrotha|RegionSize:6|Unreachable:True|Desc: Name:Unstable_Realm|RegionSize:6|Unreachable:True|Desc:A realm so unstable that it seems like the planeswalker daring to travel to it could easily become unhinged. Creatures lurking inside appear to be unglued. Using this portal is strictly unsanctioned, so anything from hurt feelings to lost sanity due to traveling through this portal is the planeswalker's own responsibility.\nConsists of 12 events. This plane requires Non-Legal cards to be enabled, make sure you enable this option before playing. Contains cards from UGL, UNH, UST, UND, CMB1, PAST, and PCEL.\n\nThe portal to this plane is unstable and will close soon, so hasten your step, planeswalker, while you have the chance... Name:Zendikar|RegionSize:9|Desc:This land of primal mana was lethal even before its Eldrazi prisoners escaped.\nConsists of 60 events. Contains cards from ZEN, WWK, ROE, BFZ, OGW, C16, ZNR, ZNC, and ZNE. +Name:Zendikar_Classic|RegionSize:9|Desc:This land of primal mana was lethal even before its Eldrazi prisoners escaped.\nThis is the Classic version of the plane, without newer sets and with original events. Consists of 60 events. Contains cards from ZEN, WWK, ROE, BFZ, OGW, and C16. diff --git a/forge-gui/res/editions/Innistrad Crimson Vow Commander.txt b/forge-gui/res/editions/Innistrad Crimson Vow Commander.txt index 95b5fbf46d6..83c1bc6bc51 100644 --- a/forge-gui/res/editions/Innistrad Crimson Vow Commander.txt +++ b/forge-gui/res/editions/Innistrad Crimson Vow Commander.txt @@ -8,7 +8,21 @@ ScryfallCode=VOC [cards] 1 M Millicent, Restless Revenant @Denman Rooke 2 M Strefan, Maurer Progenitor @Chris Rallis +31 R Breathkeeper Seraph @Alexander Mokhov 32 M Wedding Ring @Olena Richards +33 R Imperious Mindbreaker @Olivier Bernard +34 R Doom Weaver @Helge C. Balzer +35 R Mirage Phalanx @Scott Murphy +36 R Hollowhenge Overlord @Milivoj Ćeran +37 R Thundering Mightmare @Lorenzo Mastroianni +38 M Umbris, Fear Manifest @Daarken 39 M Millicent, Restless Revenant @Denman Rooke 40 M Strefan, Maurer Progenitor @Chris Rallis +69 R Breathkeeper Seraph @Alexander Mokhov 70 M Wedding Ring @Olena Richards +71 R Imperious Mindbreaker @Olivier Bernard +72 R Doom Weaver @Helge C. Balzer +73 R Mirage Phalanx @Scott Murphy +74 R Hollowhenge Overlord @Milivoj Ćeran +75 R Thundering Mightmare @Lorenzo Mastroianni +76 M Umbris, Fear Manifest @Daarken diff --git a/forge-gui/res/editions/Innistrad Crimson Vow.txt b/forge-gui/res/editions/Innistrad Crimson Vow.txt index 5b160e13d54..baf9273a9ba 100644 --- a/forge-gui/res/editions/Innistrad Crimson Vow.txt +++ b/forge-gui/res/editions/Innistrad Crimson Vow.txt @@ -8,36 +8,269 @@ Type=Expansion ScryfallCode=VOW [cards] +1 C Adamant Will @Irina Nordsol +2 U Angelic Quartermaster @PINDURSKI +3 U Arm the Cathars @Zoltan Boros +4 U Bride's Gown @Eric Deschamps 5 R By Invitation Only @Micah Epstein +6 M Cemetery Protector @Chris Rallis +7 U Circle of Confinement @Lorenzo Mastroianni +8 U Dawnhart Geist @Artur Treffner +9 U Distracting Geist @Andrew Mar 10 C Drogskol Infantry @Cristi Balanescu +11 C Estwald Shieldbasher @Wayne Reynolds +12 M Faithbound Judge @Svetlin Velinov +13 C Fierce Retribution @Sidharth Chaturvedi +14 U Fleeting Spirit @Evyn Fong 15 C Gryff Rider @Yongjae Choi +16 U Gryffwing Cavalry @Steve Prescott +17 M Hallowed Haunting @David Auden Nash +18 C Heron of Hope @Daarken +19 C Heron-Blessed Geist @Jason A. Engle +20 R Hopeful Initiate @Dan Scott +21 R Katilda, Dawnhart Martyr @Manuel Castañón +22 C Kindly Ancestor @Justyna Gil +23 R Lantern Flare @Lie Setiawan +24 C Militia Rallier @Eelis Kyttanen +25 C Nebelgast Beguiler @Andreas Zafiratos +26 C Nurturing Presence @Irina Nordsol +27 U Ollenbock Escort @Eric Wilkerson +28 U Panicked Bystander @Aaron Miller +29 C Parish-Blade Trainee @Zara Alfonso +30 C Piercing Light @Donato Giancola +31 U Radiant Grace @Campbell White +32 U Resistance Squad @Joshua Raphael +33 C Sanctify @Kasia 'Kafis' Zielińska 34 M Savior of Ollenbock @Aaron J. Riley +35 C Sigarda's Imprisonment @Bryan Sola 36 R Sigarda's Summons @Nestor Ossandon Leal +37 C Supernatural Rescue @Anastasia Ovchinnikova 38 R Thalia, Guardian of Thraben @Magali Villeneuve +39 C Traveling Minister @Slawomir Maniak +40 U Twinblade Geist @Tuan Duong Chu +41 C Unholy Officiant @Campbell White +42 U Valorous Stance @Anato Finnstark +43 C Vampire Slayer @Tomas Duchek +44 R Voice of the Blessed @Anastasia Ovchinnikova 45 R Wedding Announcement @Caroline Gariba +46 R Welcoming Vampire @Lorenzo Mastroianni +47 C Alchemist's Retrieval @David Auden Nash +48 C Binding Geist @Campbell White +49 U Biolume Egg @Filip Burburan +50 M Cemetery Illuminator @Uriah Voth +51 C Chill of the Grave @Olivier Bernard +52 U Cobbled Lancer @Igor Kieryluk +53 R Consuming Tide @Viko Menezes +54 C Cradle of Safety @Howard Lyon +55 C Cruel Witness @Vincent Proce +56 U Diver Skaab @Dave Kendall +57 C Dreadlight Monstrosity @Jason Kang +58 R Dreamshackle Geist @Andreas Zafiratos +59 C Fear of Death @Anato Finnstark 60 U Geistlight Snare @Anato Finnstark +61 R Geralf, Visionary Stitcher @Bryan Sola +62 U Gutter Skulker @Viko Menezes +63 R Hullbreaker Horror @Svetlin Velinov +64 R Inspired Idea @Alix Branwyn +65 M Jacob Hauken, Inspector @Aurore Folny +66 C Lantern Bearer @Zoltan Boros +67 U Lunar Rejection @Donato Giancola +68 R Mirrorhall Mimic @Justine Cruz +69 U Mischievous Catgeist @Denman Rooke +70 M Necroduality @Billy Christian 71 R Overcharged Amalgam @Mike Jordana +72 R Patchwork Crawler @Fesbra +73 C Repository Skaab @Olivier Bernard +74 C Scattered Thoughts @Brian Valeza +75 U Screaming Swarm @Irina Nordsol +76 C Selhoff Entomber @Johann Bodin +77 C Serpentine Ambush @Jokubas Uogintas +78 C Skywarp Skaab @Steven Belledin +79 U Soulcipher Board @Caio Monteiro +80 C Steelclad Spirit @Artur Treffner +81 C Stitched Assistant @Andrey Kuzinskiy +82 U Stormchaser Drake @Brent Hollowell +83 C Syncopate @Marta Nael +84 C Syphon Essence @Sean Murray +85 U Thirst for Discovery @Dominik Mayer +86 C Wanderlight Spirit @Andrew Mar +87 U Wash Away @Brian Valeza +88 U Whispering Wizard @E. M. Gist +89 R Winged Portent @Nicholas Gregory +90 U Witness the Future @Anato Finnstark +91 C Wretched Throng @Filip Burburan +92 C Aim for the Head @Zoltan Boros +93 U Archghoul of Thraben @Johann Bodin +94 C Bleed Dry @Jodie Muir +95 C Blood Fountain @Evyn Fong +96 C Bloodcrazed Socialite @Marta Nael +97 U Bloodsworn Squire @Darren Tan +98 R Bloodvial Purveyor @Fesbra +99 U Catapult Fodder @Jesper Ejsing +100 M Cemetery Desecrator @Dan Scott +101 R Concealing Curtains @Brian Valeza +102 C Courier Bat @Ilse Gort 103 R Demonic Bargain @Sam Guay +104 C Desperate Farmer @Valera Lutfullina +105 C Diregraf Scavenger @Manuel Castañón +106 C Doomed Dissenter @Campbell White +107 U Dread Fugue @Rovina Cai +108 R Dreadfeast Demon @Andrew Mar +109 R Dying to Serve @Steven Belledin +110 U Edgar's Awakening @Joshua Raphael +111 R Falkenrath Forebear @Aurore Folny 112 U Fell Stinger @Lars Grant-West +113 C Gift of Fangs @Dominik Mayer 114 C Gluttonous Guest @Jesper Ejsing +115 R Graf Reaver @Dave Kendall +116 C Grisly Ritual @Anastasia Ovchinnikova +117 U Groom's Finery @Eric Deschamps +118 R Headless Rider @E. M. Gist +119 M Henrika Domnathi @Billy Christian +120 U Hero's Downfall @Chris Rallis +121 U Innocent Traveler @Cristi Balanescu +122 C Mindleech Ghoul @Alex Brock +123 U Parasitic Grasp @Rovina Cai +124 R Path of Peril @Kasia 'Kafis' Zielińska +125 C Persistent Specimen @Scott Murphy +126 C Pointed Discussion @Jarel Threat +127 C Ragged Recluse @Lie Setiawan +128 U Restless Bloodseeker @Justyna Gil 129 C Rot-Tide Gargantua @Filip Burburan +130 U Skulking Killer @Alex Brock 131 M Sorin the Mirthless @Martina Fackova +132 M Toxrill, the Corrosive @Simon Dominic +133 U Undead Butler @Nestor Ossandon Leal +134 C Undying Malice @Igor Kieryluk +135 C Unhallowed Phalanx @Nicholas Gregory +136 C Vampire's Kiss @Ilse Gort 137 R Voldaren Bloodcaster @Kim Sokol +138 U Wedding Security @Francisco Miyara +139 C Abrade @Dominik Mayer +140 R Alchemist's Gambit @Zoltan Boros +141 U Alluring Suitor @Justine Cruz +142 C Ancestral Anger @Randy Vargas +143 U Ballista Watcher @Tomas Duchek +144 C Belligerent Guest @Darren Tan +145 U Blood Hypnotist @Marie Magny +146 C Blood Petal Celebrant @Fajareka Setiawan +147 C Bloody Betrayal @Brian Valeza +148 M Cemetery Gatekeeper @Tyler Jacobson +149 M Chandra, Dressed to Kill @Viktor Titov 150 R Change of Fortune @Sam Guay +151 R Creepy Puppeteer @Marie Magny +152 R Curse of Hospitality @Dominik Mayer +153 C Daybreak Combatants @Joshua Raphael 154 R Dominating Vampire @PINDURSKI +155 C End the Festivities @Chris Rallis +156 C Falkenrath Celebrants @Anna Steinbauer +157 C Fearful Villager @Andrew Mar +158 C Flame-Blessed Bolt @Andreas Zafiratos +159 U Frenzied Devils @Andrey Kuzinskiy +160 U Honeymoon Hearse @Raoul Vitale +161 C Hungry Ridgewolf @Olena Richards +162 R Ill-Tempered Loner @Grzegorz Rutkowski +163 U Into the Night @Valera Lutfullina +164 C Kessig Flamebreather @Lius Lasahido +165 R Kessig Wolfrider @Bram Sels +166 C Lacerate Flesh @Pauline Voss +167 U Lambholt Raconteur @Andrey Kuzinskiy +168 C Lightning Wolf @Alessandra Pisano +169 U Magma Pummeler @Filip Burburan +170 M Manaform Hellkite @Andrew Mar +171 U Markov Retribution @Uriah Voth +172 R Olivia's Attendants @Dmitry Burmak +173 C Pyre Spawn @Nicholas Gregory +174 C Reckless Impulse @Mathias Kollros +175 U Rending Flame @Olena Richards +176 U Runebound Wolf @Tomas Duchek +177 U Sanguine Statuette @Izzy +178 R Stensia Uprising @Dan Scott +179 C Sure Strike @Lie Setiawan 180 U Vampires' Vengeance @Chris Cold 181 M Volatile Arsonist @Gabor Szikszai +182 C Voldaren Epicure @Martina Fackova +183 U Voltaic Visionary @Francisco Miyara 184 C Weary Prisoner @Jason Rainville 185 C Apprentice Sharpshooter @Steve Prescott +186 R Ascendant Packleader @Alessandra Pisano +187 M Avabruck Caretaker @Heonhwa Choe +188 C Bramble Armor @Alessandra Pisano +189 U Bramble Wurm @Lars Grant-West +190 U Cartographer's Survey @Donato Giancola +191 M Cemetery Prowler @Daarken +192 U Cloaked Cadet @Igor Kieryluk +193 U Crawling Infestation @Khurrum +194 C Crushing Canopy @Svetlin Velinov +195 M Cultivator Colossus @Antonio José Manzanedo +196 C Dawnhart Disciple @Mila Pesic 197 R Dig Up @Slawomir Maniak +198 U Dormant Grove @Kekai Kotaki +199 C Flourishing Hunter @Ilse Gort +200 R Glorious Sunrise @Andreas Zafiratos +201 R Hamlet Vanguard @PINDURSKI +202 R Hiveheart Shaman @Eric Deschamps +203 C Hookhand Mariner @Caio Monteiro +204 R Howling Moon @Alessandra Pisano +205 R Howlpack Piper @Cristi Balanescu +206 U Infestation Expert @Vincent Proce +207 U Laid to Rest @Colin Boyer 208 C Massive Might @Iris Compiet +209 C Moldgraf Millipede @Simon Dominic +210 C Mulch @Lucas Graciano +211 C Nature's Embrace @Dominik Mayer +212 U Oakshade Stalker @Alexander Mokhov +213 U Packsong Pup @April Prime +214 U Reclusive Taxidermist @Wisnu Tan +215 U Retrieve @Alix Branwyn +216 C Rural Recruit @Eelis Kyttanen +217 U Sawblade Slinger @Joshua Raphael +218 C Sheltering Boughs @Anato Finnstark +219 C Snarling Wolf @Ilse Gort +220 U Spiked Ripsaw @Jesper Ejsing +221 R Splendid Reclamation @Uriah Voth +222 C Spore Crawler @Nicholas Gregory +223 C Sporeback Wolf @Nicholas Elias +224 C Toxic Scorpion @Simon Dominic +225 R Ulvenwald Oddity @Brent Hollowell +226 C Weaver of Blossoms @Andrey Kuzinskiy +227 C Witch's Web @Yeong-Hao Han +228 C Wolf Strike @Wisnu Tan +229 U Wolfkin Outcast @Alexander Mokhov +230 U Ancient Lumberknot @Nicholas Gregory 231 R Anje, Maid of Dishonor @Yongjae Choi +232 U Bloodtithe Harvester @Lucas Graciano +233 U Brine Comber @Olena Richards +234 U Child of the Pack @Mila Pesic 235 R Dorothea, Vengeful Victim @Marta Nael +236 R Edgar, Charmed Groom @Volkan Baǵa +237 R Eruth, Tormented Prophet @Ekaterina Burmak 238 R Grolnok, the Omnivore @Simon Dominic +239 R Halana and Alena, Partners @Jason Rainville +240 M Kaya, Geist Hunter @Ryan Pancoast +241 U Markov Purifier @G-host Lee +242 U Markov Waltzer @Joshua Raphael +243 R Odric, Blood-Cursed @Chris Rallis +244 R Old Rutstein @Greg Staples 245 M Olivia, Crimson Bride @Anna Steinbauer +246 R Runo Stromkirk @Matt Stewart +247 U Sigardian Paladin @Slawomir Maniak +248 U Skull Skaab @Nicholas Gregory +249 R Torens, Fist of the Angels @Justine Cruz +250 U Vilespawn Spider @Nicholas Gregory +251 U Wandering Mind @Simon Dominic +252 C Blood Servitor @Jason A. Engle +253 U Boarded Window @Zoltan Boros +254 C Ceremonial Knife @Antonio José Manzanedo +255 R Dollhouse of Horrors @Muhammad Firdaus +256 U Foreboding Statue @Aaron Miller +257 C Honored Heirloom @Leanna Crossan +258 R Investigator's Journal @Yeong-Hao Han +259 U Lantern of the Lost @Chris Cold 260 C Wedding Invitation @Justyna Gil 261 R Deathcap Glade @Sam Burley 262 R Dreamroot Cascade @Sam Burley +263 C Evolving Wilds @Alayna Danner 264 R Shattered Sanctum @Muhammad Firdaus 265 R Stormcarved Coast @Sarah Finnigan 266 R Sundown Pass @Muhammad Firdaus @@ -53,34 +286,124 @@ ScryfallCode=VOW 276 L Forest @Pig Hands 277 L Forest @Indra Nugroho 278 M Sorin the Mirthless @Justyna Gil +279 M Chandra, Dressed to Kill @Ekaterina Burmak +280 M Kaya, Geist Hunter @Raymond Swanland 281 R Deathcap Glade @Muhammad Firdaus 282 R Dreamroot Cascade @Jokubas Uogintas 283 R Shattered Sanctum @Donato Giancola 284 R Stormcarved Coast @Jokubas Uogintas 285 R Sundown Pass @Johannes Voss +286 C Unholy Officiant @Jason A. Engle +287 R Welcoming Vampire @Christian Angel +288 C Bloodcrazed Socialite @Samuel Araya +289 U Bloodsworn Squire @Karl Kopinski +290 R Bloodvial Purveyor @Kekai Kotaki +291 R Falkenrath Forebear @Tomasz Jedruszek 292 C Gluttonous Guest @Marie Magny -297 M Sorin the Mirthless @ +293 M Henrika Domnathi @Jason A. Engle +294 U Innocent Traveler @Sami Makkonen +295 U Restless Bloodseeker @Christian Angel +296 U Skulking Killer @Karl Kopinski +297 M Sorin the Mirthless @Ayami Kojima 298 R Voldaren Bloodcaster @Samuel Araya +299 U Wedding Security @Vi Szendrey (Cashile) +300 U Alluring Suitor @Zinna Du +301 C Belligerent Guest @Jason A. Engle +302 U Blood Hypnotist @Jason A. Engle +303 C Blood Petal Celebrant @Sami Makkonen +304 M Cemetery Gatekeeper @Livia Prima 305 R Dominating Vampire @Christian Angel +306 C Falkenrath Celebrants @Zinna Du +307 R Olivia's Attendants @Christian Angel +308 C Voldaren Epicure @Vi Szendrey (Cashile) 309 R Anje, Maid of Dishonor @Christian Angel -315 M Olivia, Crimson Bride @ +310 U Bloodtithe Harvester @Sami Makkonen +311 R Edgar, Charmed Groom @Nestor Ossandon Leal +312 U Markov Purifier @Samuel Araya +313 U Markov Waltzer @Jason A. Engle +314 R Odric, Blood-Cursed @Anna Pavleeva +315 M Olivia, Crimson Bride @Xiaobotong +316 R Runo Stromkirk @Xiaobotong +317 R Katilda, Dawnhart Martyr @Joao Ruas 318 R Thalia, Guardian of Thraben @Cabrol +319 R Geralf, Visionary Stitcher @Cabrol +320 M Jacob Hauken, Inspector @Milivoj Ćeran +321 M Toxrill, the Corrosive @DZO 322 R Dorothea, Vengeful Victim @Karmazid +323 R Eruth, Tormented Prophet @Paul Jackson 324 R Grolnok, the Omnivore @DZO +325 R Halana and Alena, Partners @Joao Ruas +326 R Old Rutstein @Mark Riddick +327 R Runo Stromkirk @Nico Delort +328 R Torens, Fist of the Angels @Cabrol +329 U Circle of Confinement @Dan Scott 330 M Savior of Ollenbock @Johannes Voss 331 R Thalia, Guardian of Thraben @Magali Villeneuve +332 M Jacob Hauken, Inspector @Slawomir Maniak +333 U Thirst for Discovery @Dan Scott +334 R Falkenrath Forebear @Greg Staples +335 M Henrika Domnathi @Nils Hamm +336 U Innocent Traveler @Igor Kieryluk 337 M Sorin the Mirthless @Bastien L. Deharme 338 R Voldaren Bloodcaster @Johann Bodin 339 U Vampires' Vengeance @Dave Kendall +340 U Reclusive Taxidermist @Tomasz Jedruszek +341 R Edgar, Charmed Groom @Lucas Graciano +342 R Eruth, Tormented Prophet @Dave Kendall 343 M Olivia, Crimson Bride @Bastien L. Deharme +344 R Torens, Fist of the Angels @Greg Staples +345 R Investigator's Journal @Alix Branwyn 346 R By Invitation Only @Micah Epstein +347 M Cemetery Protector @Chris Rallis +348 M Faithbound Judge @Svetlin Velinov +349 M Hallowed Haunting @David Auden Nash +350 R Hopeful Initiate @Dan Scott +351 R Lantern Flare @Lie Setiawan 352 M Savior of Ollenbock @Aaron J. Riley 353 R Sigarda's Summons @Nestor Ossandon Leal +354 R Voice of the Blessed @Anastasia Ovchinnikova 355 R Wedding Announcement @Caroline Gariba +356 M Cemetery Illuminator @Uriah Voth +357 R Consuming Tide @Viko Menezes +358 R Dreamshackle Geist @Andreas Zafiratos +359 R Hullbreaker Horror @Svetlin Velinov +360 R Inspired Idea @Alix Branwyn +361 R Mirrorhall Mimic @Justine Cruz +362 M Necroduality @Billy Christian 363 R Overcharged Amalgam @Mike Jordana +364 R Patchwork Crawler @Fesbra +365 R Winged Portent @Nicholas Gregory +366 M Cemetery Desecrator @Dan Scott +367 R Concealing Curtains @Brian Valeza 368 R Demonic Bargain @Sam Guay +369 R Dreadfeast Demon @Andrew Mar +370 R Dying to Serve @Steven Belledin +371 R Graf Reaver @Dave Kendall +372 R Headless Rider @E. M. Gist +373 R Path of Peril @Kasia 'Kafis' Zielińska +374 R Alchemist's Gambit @Zoltan Boros 375 R Change of Fortune @Sam Guay +376 R Creepy Puppeteer @Marie Magny +377 R Curse of Hospitality @Dominik Mayer +378 R Ill-Tempered Loner @Grzegorz Rutkowski +379 R Kessig Wolfrider @Bram Sels +380 M Manaform Hellkite @Andrew Mar +381 R Stensia Uprising @Dan Scott +382 M Volatile Arsonist @Gabor Szikszai +383 R Ascendant Packleader @Alessandra Pisano +384 M Avabruck Caretaker @Heonhwa Choe +385 M Cemetery Prowler @Daarken +386 M Cultivator Colossus @Antonio José Manzanedo 387 R Dig Up @Slawomir Maniak +388 R Glorious Sunrise @Andreas Zafiratos +389 R Hamlet Vanguard @PINDURSKI +390 R Hiveheart Shaman @Eric Deschamps +391 R Howling Moon @Alessandra Pisano +392 R Howlpack Piper @Cristi Balanescu +393 R Splendid Reclamation @Uriah Voth +394 R Ulvenwald Oddity @Brent Hollowell +395 R Dollhouse of Horrors @Muhammad Firdaus +396 R Investigator's Journal @Yeong-Hao Han 397 R Voldaren Estate @Richard Wright 398 L Plains @Sam White 399 L Island @Sam White @@ -94,5 +417,18 @@ ScryfallCode=VOW 407 R Dominating Vampire @PINDURSKI [tokens] +b_1_1_slug +b_2_2_zombie +b_2_3_vampire_flying_lifelink c_a_blood_draw +c_a_treasure_sac +g_1_1_insect +g_2_2_wolf gw_1_1_human_soldier_training +r_1_1_human +r_x_x_dragon_illusion_flying_haste +u_x_x_zombie +w_1_1_human +w_1_1_spirit_flying +w_4_4_spirit_flying +w_x_x_spirit_cleric_total_spirits diff --git a/forge-gui/res/editions/Innistrad Double Feature.txt b/forge-gui/res/editions/Innistrad Double Feature.txt index d630e6bf559..e3ebb3e5072 100644 --- a/forge-gui/res/editions/Innistrad Double Feature.txt +++ b/forge-gui/res/editions/Innistrad Double Feature.txt @@ -6,4 +6,7 @@ Type=Draft ScryfallCode=DBL [cards] +72 C Revenge of the Drowned @Chris Cold +398 M Sorin the Mirthless @Martina Fackova 516 R Torens, Fist of the Angels @Justine Cruz +535 R Endless Ranks of the Dead @Ryan Yee diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 31cb928ee23..11811320da8 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -111,6 +111,8 @@ cbpGameLogEntryType=Spielberichtsumfang cbpCloseAction=Beenden cbpDefaultFontSize=Standard Schriftgröße cbpCardArtFormat=Kartenbildformat +cbpSoundSets=Sound-Set +cbpMusicSets=Music-Set cbpAiProfiles=KI Persönlichkeit cbpStackAdditions=Nachricht bei Stapeländerung cbpDisplayCurrentCardColors=Zeige detaillierte Kartenfarben @@ -141,6 +143,8 @@ nlCompactMainMenu=Aktiviere, um im Seitenmenü platzsparend immer nur eine Menü nlUseSentry=Aktiviere, um automatische Fehlerberichte an die Entwickler zu senden. GamePlay=Spiel nlpMulliganRule=Wähle die Version der Mulligan Regel +nlpSoundSets=Wähle eines der Sound-Sets aus dem "Sound"-Ordner in deinem Forge-Cache-Verzeichnis. +nlpMusicSets=Choose the music set from the ones present in the "music" folder in your Forge cache directory nlpAiProfiles=Wähle die Spielweise deines KI-Gegners. nlpStackAdditions=Wähle, wann du über Änderungen am Stapel benachrichtigt werden möchtest: Niemals, immer oder nur für durch andere Spieler ausgelöste Effekte und Fähigkeiten nlAnte=Entscheidet, ob um einen Einsatz (Ante) gespielt wird. @@ -2669,6 +2673,9 @@ lblUseFormatFilter=Wähle ein Format für die Deckliste lblIgnoreBnR=Importiere auch gebannte und eingeschränkte Karten ttIgnoreBnR=Wenn aktiviert, erden auch gebannte oder eingeschränkte Karten ins Deck importiert. nlIgnoreBnR=Warnung: Das Deck kann bei eingeschalteter Deckkonkonformität nicht spielbar sein. +lblUseSmartCardArt=Enable Smart Card Art Selection +ttUseSmartCardArtNoDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist. +ttUseSmartCardArtWithDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist, and in current Deck. lblExtraOptions=Zeige Optionen lblHideOptions=Verstecke Optionen lblCardPreview=Karten-Vorschau diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index c22b8e08639..5a7e008a628 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -113,6 +113,8 @@ cbpCloseAction=Close Action cbpDefaultFontSize=Default Font Size cbpCardArtFormat=Card Art Format cbpAiProfiles=AI Personality +cbpSoundSets=Sound Set +cbpMusicSets=Music Set cbpStackAdditions=Stack effect notifications cbpDisplayCurrentCardColors=Show Detailed Card Color cbpAutoYieldMode=Auto-Yield @@ -142,6 +144,8 @@ nlCompactMainMenu=Enable for a space efficient sidebar that displays only one me nlUseSentry=When enabled, automatically submits bug reports to developers. GamePlay=Gameplay nlpMulliganRule=Choose the version of the Mulligan rule +nlpSoundSets=Choose the sound set from the ones present in the "sound" folder in your Forge cache directory +nlpMusicSets=Choose the music set from the ones present in the "music" folder in your Forge cache directory nlpAiProfiles=Choose your AI opponent nlpStackAdditions=Choose when you want to get visual notifications for an effect added to the stack: Never, always, or only for the effects cast/activated by a AI player or triggered by any player nlAnte=Determines whether or not the game is played for ante. @@ -2667,6 +2671,9 @@ lblUseFormatFilter=Choose a Format for the Decklist lblIgnoreBnR=Also import Banned and Restricted Cards ttIgnoreBnR=If activated, any Banned or Restricted Card will be also imported in the Deck. nlIgnoreBnR=Warning: The Deck may not be playable if Deck Conformance is enabled. +lblUseSmartCardArt=Enable Smart Card Art Selection +ttUseSmartCardArtNoDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist. +ttUseSmartCardArtWithDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist, and in current Deck. lblExtraOptions=Show Options lblHideOptions=Hide Options lblCardPreview=Card Preview diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 8ea46c95fe9..1fa69fe722f 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -112,6 +112,8 @@ cbpGameLogEntryType=Registro del juego cbpCloseAction=Acción al cerrar cbpDefaultFontSize=Tamaño de fuente predeterminado cbpCardArtFormat=Card Art Format +cbpSoundSets=Sound Set +cbpMusicSets=Music Set cbpAiProfiles=Personalidad de la IA cbpStackAdditions=Efecto de la pila de notificaciones cbpDisplayCurrentCardColors=Mostrar color de la carta @@ -142,6 +144,8 @@ nlCompactMainMenu=Habilitar para una barra lateral eficiente en espacio que mues nlUseSentry=Cuando está habilitado, envía automáticamente informes de errores a los desarrolladores. GamePlay=Juego nlpMulliganRule=Elige versión de reglas de mulligan +nlpSoundSets=Choose the sound set from the ones present in the "sound" folder in your Forge cache directory +nlpMusicSets=Choose the music set from the ones present in the "music" folder in your Forge cache directory nlpAiProfiles=Elige tu oponente de la IA nlpStackAdditions=Elige cuándo quieres recibir notificaciones visuales para un efecto añadido a la pila: Nunca, siempre o sólo para los efectos lanzados/activados por un jugador IA o activados por cualquier jugador nlAnte=Determina si el juego se juega con apuesta o no. @@ -2667,6 +2671,9 @@ lblUseFormatFilter=Choose a Format for the Decklist lblIgnoreBnR=Also import Banned and Restricted Cards ttIgnoreBnR=If activated, any Banned or Restricted Card will be also imported in the Deck. nlIgnoreBnR=Warning: The Deck may not be playable if Deck Conformance is enabled. +lblUseSmartCardArt=Enable Smart Card Art Selection +ttUseSmartCardArtNoDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist. +ttUseSmartCardArtWithDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist, and in current Deck. lblExtraOptions=Show Options lblHideOptions=Hide Options lblCardPreview=Card Preview diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index c089272c174..645a7e7d121 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -111,6 +111,8 @@ cbpGameLogEntryType=Verbosità del registro di gioco cbpCloseAction=Chiudi cbpDefaultFontSize=Dimensione carattere predefinita cbpCardArtFormat=Formato dell'Illustrazione delle carte +cbpSoundSets=Sound Set +cbpMusicSets=Music Set cbpAiProfiles=Personalità dell''IA cbpStackAdditions=Notifiche degli effetti in pila cbpDisplayCurrentCardColors=Mostra colore scheda dettagliato @@ -141,6 +143,8 @@ nlCompactMainMenu=Abilitare per una barra laterale efficiente in termini di spaz nlUseSentry=Se abilitato, invia automaticamente segnalazioni di bug agli sviluppatori. GamePlay=Gameplay nlpMulliganRule=Scegli il tipo di Mulligan +nlpSoundSets=Choose the sound set from the ones present in the "sound" folder in your Forge cache directory +nlpMusicSets=Choose the music set from the ones present in the "music" folder in your Forge cache directory nlpAiProfiles=Scegli il tuo avversario (IA) nlpStackAdditions=Scegli quando vuoi ricevere una notifica visiva di un effetto aggiunto alla pila: Mai, sempre, o solo per gli effetti lanciati/attivati da un giocatore IA o innescati da un qualsiasi giocatore nlAnte=Determina se l''incontro è giocato o meno con la posta. @@ -2667,6 +2671,9 @@ lblIgnoreBnR=Includi nel mazzo anche le carte Bandite e Limitate ttIgnoreBnR=Se attivato, le carte Bandite e Limitate verranno normalmente aggiunte al mazzo. nlIgnoreBnR=Attenzione: Il mazzo risultante potrebbe essere non utilizzabile se il controllo di conformità del mazzo \ è attivata. +lblUseSmartCardArt=Armonizza le illustrazioni nell'elenco +ttUseSmartCardArtNoDeck=Se abilitata, le illustrazioni delle carte senza una specifica edizione saranno automaticamente scelte in linea con le altre carte dell'elenco da importare. +ttUseSmartCardArtWithDeck=Se abilitata, le illustrazioni delle carte senza una specifica edizione saranno automaticamente scelte in linea con le altre nel mazzo corrente, e nell'elenco da importare. lblExtraOptions=Mostra le Opzioni lblHideOptions=Nascondi le Opzioni lblCardPreview=Anteprima diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index ec920c6c054..04ef29709e5 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -112,6 +112,8 @@ cbpGameLogEntryType=ゲームログの詳細レベル cbpCloseAction=閉じる時の動作 cbpDefaultFontSize=デフォルトのフォントサイズ cbpCardArtFormat=カードのアートフォーマット +cbpSoundSets=Sound Set +cbpMusicSets=Music Set cbpAiProfiles=AI の性格 cbpStackAdditions=スタック効果通知 cbpDisplayCurrentCardColors=詳細なカードの色を表示 @@ -142,6 +144,8 @@ nlCompactMainMenu=サイドバーに同時に一つのメニューグループ nlUseSentry=有効にすると、バグレポートが開発者に自動的に送信されます。 GamePlay=ゲーム設定 nlpMulliganRule=マリガンルールを選択する。 +nlpSoundSets=Choose the sound set from the ones present in the "sound" folder in your Forge cache directory +nlpMusicSets=Choose the music set from the ones present in the "music" folder in your Forge cache directory nlpAiProfiles=対戦相手 AI の性格を選択する。 nlpStackAdditions=スタックに追加された能力の視覚通知をいつ取得するかを選択します:(Never[しない]、Always[常時]、またはAIプレーヤーによってキャスト/起動された能力、または任意のプレーヤーによって誘発された能力に対してのみ nlAnte=ゲームでアンティ(賭け)ルールを適用するか選択する。 @@ -2666,6 +2670,9 @@ lblUseFormatFilter=Choose a Format for the Decklist lblIgnoreBnR=Also import Banned and Restricted Cards ttIgnoreBnR=If activated, any Banned or Restricted Card will be also imported in the Deck. nlIgnoreBnR=Warning: The Deck may not be playable if Deck Conformance is enabled. +lblUseSmartCardArt=Enable Smart Card Art Selection +ttUseSmartCardArtNoDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist. +ttUseSmartCardArtWithDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist, and in current Deck. lblExtraOptions=Show Options lblHideOptions=Hide Options lblCardPreview=Card Preview diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 77ea552a0be..b9c88336c84 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -112,6 +112,8 @@ cbpGameLogEntryType=游戏日志详细程度 cbpCloseAction=关闭动作 cbpDefaultFontSize=默认字体大小 cbpCardArtFormat=牌张插画格式 +cbpSoundSets=Sound Set +cbpMusicSets=Music Set cbpAiProfiles=AI强度 cbpStackAdditions=堆叠效应通知 cbpDisplayCurrentCardColors=显示卡牌颜色详情 @@ -142,6 +144,8 @@ nlCompactMainMenu=启用节省空间的侧边栏,一次只显示一个菜单 nlUseSentry=启用后,会自动向开发人员提交错误报告。 GamePlay=游戏 nlpMulliganRule=选择调度规则 +nlpSoundSets=Choose the sound set from the ones present in the "sound" folder in your Forge cache directory +nlpMusicSets=Choose the music set from the ones present in the "music" folder in your Forge cache directory nlpAiProfiles=选择你的AI对手 nlpStackAdditions=选择何时因效应进入堆叠而提供视觉提醒:从不,总是,任何由AI释放或起动以及由任何玩家触发的效应。 nlAnte=确定游戏是否使用赌注 @@ -2668,6 +2672,9 @@ lblUseFormatFilter=选择牌张列表的格式 lblIgnoreBnR=禁限卡也导入 ttIgnoreBnR=如果启用,禁限卡也将被导入。 nlIgnoreBnR=警告:如果启用了套牌一致性,套牌可能无法使用。 +lblUseSmartCardArt=Enable Smart Card Art Selection +ttUseSmartCardArtNoDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist. +ttUseSmartCardArtWithDeck=If enabled, the art of cards will be automatically chosen to match up with other cards in the Decklist, and in current Deck. lblExtraOptions=显示选项 lblHideOptions=隐藏选项 lblCardPreview=牌张预览 diff --git a/forge-gui/res/puzzle/PS_MID3.pzl b/forge-gui/res/puzzle/PS_MID3.pzl new file mode 100644 index 00000000000..dca43fd8dd4 --- /dev/null +++ b/forge-gui/res/puzzle/PS_MID3.pzl @@ -0,0 +1,17 @@ +[metadata] +Name:Possibility Storm - Innistrad: Midnight Hunt #03 +URL:https://i1.wp.com/www.possibilitystorm.com/wp-content/uploads/2021/10/186.-MID3-scaled.jpg +Goal:Win +Turns:2 +Difficulty:Uncommon +Description:Start in your opponent's end step, and win before their untap step. (They are currently tapped out.) Assume you have at least one additional copy of each card in your hand and on your board left in your library. Mascot Interception is on top of your library (and can draw it in your draw step.) +[state] +humanlife=20 +ailife=28 +turn=1 +activeplayer=ai +activephase=END_OF_TURN +humanhand=Deadly Alliance;Burn the Accursed;Explosive Welcome;Defenestrate;Unexpected Windfall +humanlibrary=Mascot Interception;Deadly Alliance;Burn the Accursed;Explosive Welcome;Defenestrate;Unexpected Windfall;Gisa, Glorious Resurrector;Birgi, God of Storytelling;Varragoth, Bloodsky Sire;Mountain;Mountain;Mountain;Swamp;Swamp;Swamp +humanbattlefield=Gisa, Glorious Resurrector;Birgi, God of Storytelling;Varragoth, Bloodsky Sire;Mountain;Mountain;Mountain;Swamp;Swamp;Swamp +aibattlefield=Biblioplex Assistant;Smoldering Egg|Transformed;Rem Karolus, Stalwart Slayer;Doomskar Titan diff --git a/forge-gui/src/main/java/forge/deck/DeckImportController.java b/forge-gui/src/main/java/forge/deck/DeckImportController.java index 9b93530830f..5d341d6a9bd 100644 --- a/forge-gui/src/main/java/forge/deck/DeckImportController.java +++ b/forge-gui/src/main/java/forge/deck/DeckImportController.java @@ -5,6 +5,7 @@ import java.util.*; import forge.StaticData; import forge.card.CardDb; +import forge.card.CardEdition; import forge.deck.DeckRecognizer.TokenType; import forge.game.GameFormat; import forge.game.GameType; @@ -28,12 +29,14 @@ public class DeckImportController { private final IComboBox yearDropdown; // CardArt Preference Filter private CardDb.CardArtPreference artPreference; + private boolean smartCardArt; // Block Preference Filter private boolean inlcludeBnRInDeck = false; private final List tokens = new ArrayList<>(); private final Map cardsInTokens = new HashMap<>(); private final boolean currentDeckNotEmpty; + private Deck currentDeckInEditor = null; private DeckFormat currentDeckFormat; private GameFormat currentGameFormat; private final List allowedSections = new ArrayList<>(); @@ -56,6 +59,7 @@ public class DeckImportController { // Init default parameters this.artPreference = StaticData.instance().getCardArtPreference(); // default + this.smartCardArt = StaticData.instance().isEnabledCardArtSmartSelection(); this.currentDeckFormat = null; this.currentGameFormat = null; fillDateDropdowns(); @@ -72,6 +76,10 @@ public class DeckImportController { } } + public void setCurrentDeckInEditor(Deck deckInEditor){ + this.currentDeckInEditor = deckInEditor; + } + public void setAllowedSections(List allSections){ this.allowedSections.addAll(allSections); } @@ -90,6 +98,14 @@ public class DeckImportController { this.artPreference = StaticData.instance().getCardArtPreference(isLatest, coreFilterEnabled); } + public void setSmartCardArtOptimisation(boolean enableSmartArt){ + this.smartCardArt = enableSmartArt; + } + + public boolean isSmartCardArtEnabled(){ + return this.smartCardArt; + } + public void setCreateNewDeck(boolean createNewDeck){ this.createNewDeck = createNewDeck; } @@ -290,6 +306,143 @@ public class DeckImportController { return this.allowedSections.contains(DeckSection.Commander); } + public List optimiseCardArtInTokens(){ + /* == STEP 1. Collect info about tokens to optimise + + Organise card tokens (per section) into two groups, depending on whether they have or not + the edition specified in original request. + If no tokens with NO set will be found, there is no optimisation to run, so we could + skip remaining steps. + */ + Map> tokensPerSectionWithSet = new HashMap<>(); + Map> tokensPerSectionWithNoSet = new HashMap<>(); + for (Token token : this.tokens){ + if (!token.isCardTokenForDeck()) + continue; + DeckSection tokenSection = token.getTokenSection(); + Map> refTokenMap; + if (token.cardRequestHasNoCode()) + refTokenMap = tokensPerSectionWithNoSet; + else + refTokenMap = tokensPerSectionWithSet; + + List tokensInSection = refTokenMap.getOrDefault(tokenSection, null); + if (tokensInSection == null) { + tokensInSection = new ArrayList<>(); + tokensInSection.add(token); + refTokenMap.put(tokenSection, tokensInSection); + } else + tokensInSection.add(token); + } + + if (tokensPerSectionWithNoSet.isEmpty()) + return tokens; // NO Optimisation needed. + + /* == STEP 2. Set up the reference pool of cards for optimisation per each section. + - we will start by considering whether we should include or not current deck; + - we will then consider the tokens with set collected in previous step. + + In the end, if cards with specified set (either in tokens or in current deck, if any) + account for less than the 50% of total card counts (excl. basic lands), the whole + pool of cards will be considered for optimisation - similarly to what happens with + Decks with no editions, e.g. Net decks. + */ + + Map referencePoolPerSection = new HashMap<>(); + + if (this.currentDeckNotEmpty && !this.createNewDeck && this.currentDeckInEditor != null){ + // We will always consider ONLY sections for cards needing art optimisation + for (DeckSection section : tokensPerSectionWithNoSet.keySet()){ + CardPool cardsInDeck = this.currentDeckInEditor.get(section); + if (cardsInDeck == null || cardsInDeck.isEmpty()) + continue; + CardPool optCardPool = new CardPool(cardsInDeck); + referencePoolPerSection.put(section, optCardPool); + } + } + + // Now check tokens with set wrt. tokens with no set + for (DeckSection section: tokensPerSectionWithNoSet.keySet()){ + List sectionTokensNoSet = tokensPerSectionWithNoSet.get(section); + List sectionTokenWithSet = tokensPerSectionWithSet.getOrDefault(section, null); + + CardPool sectionCardPool = referencePoolPerSection.getOrDefault(section, null); + if (sectionCardPool == null) // No current deck, or deck has that section empty + sectionCardPool = new CardPool(); + + int tokensWithSetCount = countTokens(sectionTokenWithSet); + int cardsInPoolCount = sectionCardPool.countAll(); + int tokensNoSetCount = countTokens(sectionTokensNoSet); + int totalCount = tokensNoSetCount + tokensWithSetCount + cardsInPoolCount; + if (totalCount == 0) + continue; + float cardsWithSetRatio = (float)(tokensWithSetCount + cardsInPoolCount) / totalCount; + + // If all cards in section are missing or + if (cardsWithSetRatio < 0.5) { + for (Token t: sectionTokensNoSet) + sectionCardPool.add(t.getCard(), t.getQuantity()); + } + + if (sectionTokenWithSet != null){ + for (Token t: sectionTokenWithSet) + sectionCardPool.add(t.getCard(), t.getQuantity()); + } + + referencePoolPerSection.put(section, sectionCardPool); + } + + /* == STEP 3. Optimise card art in tokens + Now we do have collected the reference pool of cards. We can now proceed with + the final optimisation step + */ + StaticData data = StaticData.instance(); + boolean isCardArtPreferenceLatestArt = this.artPreference.latestFirst; + boolean cardArtPreferenceHasFilter = this.artPreference.filterSets; + List allowedSetCodes = this.currentGameFormat != null ? this.currentGameFormat.getAllowedSetCodes() : null; + for (DeckSection section: tokensPerSectionWithNoSet.keySet()){ + CardPool cardArtReferencePool = referencePoolPerSection.get(section); + if (cardArtReferencePool == null || cardArtReferencePool.isEmpty()) + continue; // nothing to do here. + boolean isExpansionTheMajorityInThePool = (cardArtReferencePool.getTheMostFrequentEditionType() == CardEdition.Type.EXPANSION); + boolean isPoolModernFramed = cardArtReferencePool.isModern(); + CardEdition pivotEdition = cardArtReferencePool.getPivotCardEdition(isCardArtPreferenceLatestArt); + Date releaseDatePivotEdition = pivotEdition.getDate(); + + List tokensToOptimise = tokensPerSectionWithNoSet.get(section); + for (Token t: tokensToOptimise){ + PaperCard tokenCard = t.getCard(); + PaperCard alternativeCardPrint = data.getAlternativeCardPrint(tokenCard, releaseDatePivotEdition, + isCardArtPreferenceLatestArt, + cardArtPreferenceHasFilter, + isExpansionTheMajorityInThePool, + isPoolModernFramed, allowedSetCodes); + if (alternativeCardPrint != null) + t.replaceTokenCard(alternativeCardPrint); + } + } + + // Regenerate cardsInTokens Map + collectAllCardsInTokens(); + + return tokens; + } + + private int countTokens(List tokensInSection){ + if (tokensInSection == null || tokensInSection.isEmpty()) + return 0; + int tokensCount = 0; + for (Token t: tokensInSection){ + if (!t.isCardTokenForDeck()) + continue; + PaperCard tCard = t.getCard(); + if (tCard.isVeryBasicLand()) + continue; + tokensCount += t.getQuantity(); + } + return tokensCount; + } + public PaperCard getCardFromDecklist(final PaperCard card){ if (cardsInTokens.containsKey(card)) return card; // found - same instance returned @@ -301,17 +454,21 @@ public class DeckImportController { false, card.getCollectorNumber(), card.getArtist()); else cardKey = card.getFoiled(); - return cardsInTokens.containsKey(cardKey) ? cardsInTokens.get(cardKey).getCard() : null; + + return cardsInTokens.containsKey(cardKey) ? cardKey : null; } - public boolean isTokenInListLimited(PaperCard cardKey) { - Token cardToken = this.cardsInTokens.getOrDefault(cardKey, null); - return (cardToken != null) && (cardToken.getType() == TokenType.LIMITED_CARD); + public PaperCard getCardFromDecklistByName(String cardName){ + for (PaperCard cardKey : this.cardsInTokens.keySet()){ + if (!cardKey.getName().equals(cardName)) + continue; + return cardKey; + } + return null; } - public boolean isTokenInListLegal(PaperCard cardKey) { - Token cardToken = this.cardsInTokens.getOrDefault(cardKey, null); - return (cardToken != null) && (cardToken.getType() == TokenType.LEGAL_CARD); + public Token getTokenFromCardInDecklist(PaperCard cardKey){ + return this.cardsInTokens.getOrDefault(cardKey, null); } public Deck accept(){ diff --git a/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java b/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java index 4c148d3fa7e..f374adc7930 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java +++ b/forge-gui/src/main/java/forge/gui/card/CardScriptParser.java @@ -451,7 +451,7 @@ public final class CardScriptParser { "ControllerControls", "AttachedTo", "EnchantedBy", "NotEnchantedBy", "TopGraveyard", "SharesColorWith", "MostProminentColor", "notSharesColorWith", - "sharesCreatureTypeWith", "sharesCardTypeWith", + "sharesCreatureTypeWith", "sharesCardTypeWith", "sharesLandTypeWith", "sharesNameWith", "doesNotShareNameWith", "sharesControllerWith", "sharesOwnerWith", "ThisTurnEntered", "ControlledByPlayerInTheDirection", diff --git a/forge-gui/src/main/java/forge/gui/download/GuiDownloadService.java b/forge-gui/src/main/java/forge/gui/download/GuiDownloadService.java index bf758acf2c1..e5b6bc050dd 100644 --- a/forge-gui/src/main/java/forge/gui/download/GuiDownloadService.java +++ b/forge-gui/src/main/java/forge/gui/download/GuiDownloadService.java @@ -63,12 +63,14 @@ public abstract class GuiDownloadService implements Runnable { private IButton btnStart; private UiCommand cmdClose; private Runnable onUpdate; + private boolean clearImageCache = false; private final UiCommand cmdStartDownload = new UiCommand() { @Override public void run() { //invalidate image cache so newly downloaded images will be loaded - GuiBase.getInterface().clearImageCache(); + if (clearImageCache) + GuiBase.getInterface().clearImageCache(); FThreads.invokeInBackgroundThread(GuiDownloadService.this); btnStart.setEnabled(false); } @@ -95,6 +97,7 @@ public abstract class GuiDownloadService implements Runnable { btnStart = btnStart0; cmdClose = cmdClose0; onUpdate = onUpdate0; + clearImageCache = txtAddress0.getText().contains(".jpg") || txtAddress0.getText().contains(".png"); String startOverrideDesc = getStartOverrideDesc(); if (startOverrideDesc == null) { diff --git a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java index 792074b7a8d..2a28fff5b83 100644 --- a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java +++ b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java @@ -283,6 +283,8 @@ public final class ForgeConstants { public static final String DB_DIR = CACHE_DIR + "db" + PATH_SEPARATOR; public static final String FONTS_DIR = CACHE_DIR + "fonts" + PATH_SEPARATOR; public static final String CACHE_SKINS_DIR = CACHE_DIR + "skins" + PATH_SEPARATOR; + public static final String CACHE_SOUND_DIR = CACHE_DIR + "sound" + PATH_SEPARATOR; + public static final String CACHE_MUSIC_DIR = CACHE_DIR + "music" + PATH_SEPARATOR; public static final String CACHE_TOKEN_PICS_DIR = PICS_DIR + "tokens" + PATH_SEPARATOR; public static final String CACHE_ICON_PICS_DIR = PICS_DIR + "icons" + PATH_SEPARATOR; public static final String CACHE_SYMBOLS_DIR = PICS_DIR + "symbols" + PATH_SEPARATOR; diff --git a/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java b/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java index 24def10e2a2..beb4cb86770 100644 --- a/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java +++ b/forge-gui/src/main/java/forge/localinstance/properties/ForgePreferences.java @@ -121,6 +121,8 @@ public class ForgePreferences extends PreferencesStore { UI_VOL_SOUNDS ("100"), UI_VOL_MUSIC ("100"), UI_ALT_SOUND_SYSTEM ("false"), + UI_CURRENT_SOUND_SET("Default"), + UI_CURRENT_MUSIC_SET("Default"), UI_CURRENT_AI_PROFILE ("Default"), UI_CLONE_MODE_SOURCE ("false"), UI_MATCH_IMAGE_VISIBLE ("true"), diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java index b3f34444f73..1e9297da736 100644 --- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java +++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java @@ -382,7 +382,7 @@ public class HumanCostDecision extends CostDecisionMakerBase { origin.add(cost.from); final CardCollection exiled = new CardCollection(); - final List chosen = controller.chooseCardsForZoneChange(ZoneType.Exile, origin, sa, typeList, 0, + final List chosen = controller.chooseCardsForZoneChange(ZoneType.Exile, origin, sa, typeList, nNeeded, nNeeded, null, cost.toString(), null); exiled.addAll(chosen); diff --git a/forge-gui/src/main/java/forge/player/HumanPlay.java b/forge-gui/src/main/java/forge/player/HumanPlay.java index 3e537f4b2aa..8279014a25b 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlay.java +++ b/forge-gui/src/main/java/forge/player/HumanPlay.java @@ -585,7 +585,7 @@ public class HumanPlay { return false; } - ((CostDiscard)part).payAsDecided(p, (PaymentDecision.card(Aggregates.random(p.getCardsIn(ZoneType.Hand), amount, new CardCollection()))), sourceAbility); + ((CostDiscard)part).payAsDecided(p, PaymentDecision.card(Aggregates.random(p.getCardsIn(ZoneType.Hand), amount, new CardCollection())), sourceAbility); } else { CardCollectionView list = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), part.getType(), p, source, sourceAbility); boolean hasPaid = payCostPart(controller, p, sourceAbility, (CostPartWithList)part, amount, list, Localizer.getInstance().getMessage("lbldiscard") + orString); diff --git a/forge-gui/src/main/java/forge/sound/EventVisualizer.java b/forge-gui/src/main/java/forge/sound/EventVisualizer.java index 884a8871127..0f41ff1f5a0 100644 --- a/forge-gui/src/main/java/forge/sound/EventVisualizer.java +++ b/forge-gui/src/main/java/forge/sound/EventVisualizer.java @@ -39,7 +39,6 @@ import forge.gui.events.IUiEventVisitor; import forge.gui.events.UiEventAttackerDeclared; import forge.gui.events.UiEventBlockerAssigned; import forge.gui.events.UiEventNextGameDecision; -import forge.localinstance.properties.ForgeConstants; import forge.util.TextUtil; import forge.util.maps.MapOfLists; @@ -331,7 +330,7 @@ public class EventVisualizer extends IGameEventVisitor.Base imp } // Only proceed if the file actually exists - return new File(ForgeConstants.SOUND_DIR, effect).exists(); + return new File(SoundSystem.instance.getSoundDirectory(), effect).exists(); } diff --git a/forge-gui/src/main/java/forge/sound/MusicPlaylist.java b/forge-gui/src/main/java/forge/sound/MusicPlaylist.java index dd22d4cf8ab..48cf6f958ca 100644 --- a/forge-gui/src/main/java/forge/sound/MusicPlaylist.java +++ b/forge-gui/src/main/java/forge/sound/MusicPlaylist.java @@ -3,7 +3,6 @@ package forge.sound; import java.io.File; import java.io.FilenameFilter; -import forge.localinstance.properties.ForgeConstants; import forge.util.MyRandom; public enum MusicPlaylist { @@ -13,13 +12,18 @@ public enum MusicPlaylist { private final String subDir; private int mostRecentTrackIdx = -1; private String[] filenames; + private static boolean isInvalidated = false; MusicPlaylist(String subDir0) { subDir = subDir0; } + public static void invalidateMusicPlaylist() { + isInvalidated = true; + } + public String getRandomFilename() { - if (filenames == null) { + if (filenames == null || isInvalidated) { try { FilenameFilter filter = new FilenameFilter(){ @Override @@ -27,13 +31,14 @@ public enum MusicPlaylist { return name.endsWith(".mp3") || name.endsWith(".wav") || name.endsWith(".m4a"); } }; - filenames = new File(ForgeConstants.MUSIC_DIR + subDir).list(filter); + filenames = new File(SoundSystem.instance.getMusicDirectory() + subDir).list(filter); if (filenames == null) filenames = new String[0]; } catch (Exception e) { e.printStackTrace(); filenames = new String[0]; } + isInvalidated = false; } if (filenames.length == 0) { return null; } @@ -50,6 +55,6 @@ public enum MusicPlaylist { mostRecentTrackIdx = newIndex; } - return ForgeConstants.MUSIC_DIR + subDir + filenames[mostRecentTrackIdx]; + return SoundSystem.instance.getMusicDirectory() + subDir + filenames[mostRecentTrackIdx]; } } diff --git a/forge-gui/src/main/java/forge/sound/SoundSystem.java b/forge-gui/src/main/java/forge/sound/SoundSystem.java index d1dcab487c0..2087daa34fa 100644 --- a/forge-gui/src/main/java/forge/sound/SoundSystem.java +++ b/forge-gui/src/main/java/forge/sound/SoundSystem.java @@ -1,19 +1,18 @@ package forge.sound; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.Map; - import com.google.common.eventbus.Subscribe; - import forge.game.event.GameEvent; import forge.gui.GuiBase; import forge.gui.events.UiEvent; import forge.localinstance.properties.ForgeConstants; +import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences.FPref; import forge.model.FModel; import forge.player.GamePlayerUtil; +import java.io.File; +import java.util.*; + /** * Manages playback of all sounds for the client. */ @@ -108,7 +107,7 @@ public class SoundSystem { */ public void play(final String resourceFileName, final boolean isSynchronized) { if (isUsingAltSystem()) { - GuiBase.getInterface().startAltSoundSystem(ForgeConstants.SOUND_DIR + resourceFileName, isSynchronized); + GuiBase.getInterface().startAltSoundSystem(getSoundDirectory() + resourceFileName, isSynchronized); } else { final IAudioClip snd = fetchResource(resourceFileName); @@ -123,7 +122,7 @@ public class SoundSystem { */ public void play(final SoundEffectType type, final boolean isSynchronized) { if (isUsingAltSystem()) { - GuiBase.getInterface().startAltSoundSystem(ForgeConstants.SOUND_DIR + type.getResourceFileName(), isSynchronized); + GuiBase.getInterface().startAltSoundSystem(getSoundDirectory() + type.getResourceFileName(), isSynchronized); } else { final IAudioClip snd = fetchResource(type); if (!isSynchronized || snd.isDone()) { @@ -245,4 +244,81 @@ public class SoundSystem { currentTrack = null; } } + + public String[] getAvailableSoundSets() + { + final List availableSets = new ArrayList<>(); + + final File dir = new File(ForgeConstants.CACHE_SOUND_DIR); + if (dir != null && dir.exists()) { + final String[] files = dir.list(); + for (String fileName : files) { + String fullPath = ForgeConstants.CACHE_SOUND_DIR + fileName; + if (!fileName.equals("Default") && new File(fullPath).isDirectory()) { + availableSets.add(fileName); + } + } + } + + Collections.sort(availableSets); + availableSets.add(0, "Default"); + + if (availableSets.size() == 1 || !availableSets.contains(FModel.getPreferences().getPref(FPref.UI_CURRENT_SOUND_SET))) { + // Default profile only or the current set is no longer available - revert the preference setting to default + FModel.getPreferences().setPref(FPref.UI_CURRENT_SOUND_SET, "Default"); + invalidateSoundCache(); + } + + return availableSets.toArray(new String[availableSets.size()]); + } + + public String getSoundDirectory() { + String profileName = FModel.getPreferences().getPref(FPref.UI_CURRENT_SOUND_SET); + if (profileName.equals("Default")) { + return ForgeConstants.SOUND_DIR; + } else { + return ForgeConstants.CACHE_SOUND_DIR + profileName + ForgeConstants.PATH_SEPARATOR; + } + } + + public void invalidateSoundCache() { + loadedClips.clear(); + loadedScriptClips.clear(); + } + + public String getMusicDirectory() { + String profileName = FModel.getPreferences().getPref(ForgePreferences.FPref.UI_CURRENT_MUSIC_SET); + if (profileName.equals("Default")) { + return ForgeConstants.MUSIC_DIR; + } else { + return ForgeConstants.CACHE_MUSIC_DIR + profileName + ForgeConstants.PATH_SEPARATOR; + } + } + + public static String[] getAvailableMusicSets() + { + final List availableSets = new ArrayList<>(); + + final File dir = new File(ForgeConstants.CACHE_MUSIC_DIR); + if (dir != null && dir.exists()) { + final String[] files = dir.list(); + for (String fileName : files) { + String fullPath = ForgeConstants.CACHE_MUSIC_DIR + fileName; + if (!fileName.equals("Default") && new File(fullPath).isDirectory()) { + availableSets.add(fileName); + } + } + } + + Collections.sort(availableSets); + availableSets.add(0, "Default"); + + if (availableSets.size() == 1 || !availableSets.contains(FModel.getPreferences().getPref(FPref.UI_CURRENT_MUSIC_SET))) { + // Default profile only or the current set is no longer available - revert the preference setting to default + FModel.getPreferences().setPref(FPref.UI_CURRENT_MUSIC_SET, "Default"); + MusicPlaylist.invalidateMusicPlaylist(); + } + + return availableSets.toArray(new String[availableSets.size()]); + } }