diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index c643a567a42..12f984154c9 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -1842,6 +1842,15 @@ public class ComputerUtilCard { String needsToPlayName = isRightSplit ? "SplitNeedsToPlay" : "NeedsToPlay"; String needsToPlayVarName = isRightSplit ? "SplitNeedsToPlayVar" : "NeedsToPlayVar"; + if (sa != null && sa.isEvoke()) { + if (card.hasSVar("NeedsToPlayEvoked")) { + needsToPlayName = "NeedsToPlayEvoked"; + } + if (card.hasSVar("NeedsToPlayEvokedVar")) { + needsToPlayVarName = "NeedsToPlayEvokedVar"; + } + } + if (card.hasSVar(needsToPlayName)) { final String needsToPlay = card.getSVar(needsToPlayName); CardCollectionView list = game.getCardsIn(ZoneType.Battlefield); diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 4fabb5db0c8..df39977f5a8 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -91,7 +91,7 @@ public class PlayerControllerAi extends PlayerController { } @Override - public List sideboard(Deck deck, GameType gameType) { + public List sideboard(Deck deck, GameType gameType, String message) { // AI does not know how to sideboard return null; } diff --git a/forge-game/src/main/java/forge/game/GameRules.java b/forge-game/src/main/java/forge/game/GameRules.java index 5e6876e9801..46ceb450cb5 100644 --- a/forge-game/src/main/java/forge/game/GameRules.java +++ b/forge-game/src/main/java/forge/game/GameRules.java @@ -11,6 +11,7 @@ public class GameRules { private int gamesToWinMatch = 2; private boolean playForAnte = false; private boolean matchAnteRarity = false; + private boolean sideboardForAI = false; private final Set appliedVariants = EnumSet.noneOf(GameType.class); // it's a preference, not rule... but I could hardly find a better place for it @@ -65,6 +66,14 @@ public class GameRules { matchAnteRarity = matchRarity; } + public boolean getSideboardForAI() { + return sideboardForAI; + } + + public void setSideboardForAI(final boolean sideboard) { + sideboardForAI = sideboard; + } + public int getGamesToWinMatch() { return gamesToWinMatch; } diff --git a/forge-game/src/main/java/forge/game/Match.java b/forge-game/src/main/java/forge/game/Match.java index 18c4e017e35..c716709122b 100644 --- a/forge-game/src/main/java/forge/game/Match.java +++ b/forge-game/src/main/java/forge/game/Match.java @@ -4,12 +4,14 @@ import com.google.common.collect.*; import forge.LobbyPlayer; import forge.deck.CardPool; import forge.deck.Deck; +import forge.deck.DeckFormat; import forge.deck.DeckSection; import forge.game.card.Card; import forge.game.card.CardCollectionView; import forge.game.event.GameEventAnteCardsSelected; import forge.game.event.GameEventGameFinished; import forge.game.player.Player; +import forge.game.player.PlayerController; import forge.game.player.RegisteredPlayer; import forge.game.trigger.Trigger; import forge.game.zone.PlayerZone; @@ -208,18 +210,39 @@ public class Match { Multimap rAICards = HashMultimap.create(); Multimap removedAnteCards = ArrayListMultimap.create(); - boolean isFirstGame = game.getMatch().getPlayedGames().isEmpty(); - boolean canSideBoard = !isFirstGame && rules.getGameType().isSideboardingAllowed(); - final FCollectionView players = game.getPlayers(); final List playersConditions = game.getMatch().getPlayers(); + + boolean isFirstGame = game.getMatch().getPlayedGames().isEmpty(); + boolean canSideBoard = !isFirstGame && rules.getGameType().isSideboardingAllowed(); + // Only allow this if feature flag is on AND for certain match types + boolean sideboardForAIs = rules.getSideboardForAI() && + rules.getGameType().getDeckFormat().equals(DeckFormat.Constructed); + PlayerController sideboardProxy = null; + if (canSideBoard && sideboardForAIs) { + for (int i = 0; i < playersConditions.size(); i++) { + final Player player = players.get(i); + final RegisteredPlayer psc = playersConditions.get(i); + if (!player.getController().isAI()) { + sideboardProxy = player.getController(); + break; + } + } + } + for (int i = 0; i < playersConditions.size(); i++) { final Player player = players.get(i); final RegisteredPlayer psc = playersConditions.get(i); if (canSideBoard) { + PlayerController person = player.getController(); + if (sideboardProxy != null && person.isAI()) { + person = sideboardProxy; + } + + String forPlayer = " for " + player.getName(); Deck toChange = psc.getDeck(); - List newMain = player.getController().sideboard(toChange, rules.getGameType()); + List newMain = person.sideboard(toChange, rules.getGameType(), forPlayer); if (null != newMain) { CardPool allCards = new CardPool(); allCards.addAll(toChange.get(DeckSection.Main)); diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index 527dd1d198d..fc0c09a2625 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -91,7 +91,7 @@ public abstract class PlayerController { public abstract void playSpellAbilityForFree(SpellAbility copySA, boolean mayChoseNewTargets); public abstract void playSpellAbilityNoStack(SpellAbility effectSA, boolean mayChoseNewTargets); - public abstract List sideboard(final Deck deck, GameType gameType); + public abstract List sideboard(final Deck deck, GameType gameType, String message); public abstract List chooseCardsYouWonToAddToDeck(List losses); public abstract Map assignCombatDamage(Card attacker, CardCollectionView blockers, int damageDealt, GameEntity defender, boolean overrideOrder); diff --git a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java index 070d21fd1c0..a5db47f9733 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java +++ b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java @@ -234,10 +234,10 @@ public class GuiChoose { return null; } - public static > List sideboard(final CMatchUI matchUI, final List sideboard, final List deck) { + public static > List sideboard(final CMatchUI matchUI, final List sideboard, final List deck, final String message) { Collections.sort(deck); Collections.sort(sideboard); - return order("Sideboard", "Main Deck", -1, -1, sideboard, deck, null, true, matchUI); + return order("Sideboard" + message, "Main Deck", -1, -1, sideboard, deck, null, true, matchUI); } public static List order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax, 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 47585f63f08..62c0be34a84 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 @@ -107,6 +107,7 @@ public enum CSubmenuPreferences implements ICDoc { lstControls.add(Pair.of(view.getCbRandomArtInPools(), FPref.UI_RANDOM_ART_IN_POOLS)); lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY)); lstControls.add(Pair.of(view.getCbPerformanceMode(), FPref.PERFORMANCE_MODE)); + lstControls.add(Pair.of(view.getCbSideboardForAI(), FPref.MATCH_SIDEBOARD_FOR_AI)); lstControls.add(Pair.of(view.getCbFilteredHands(), FPref.FILTERED_HANDS)); lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE)); lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL)); @@ -147,7 +148,7 @@ public enum CSubmenuPreferences implements ICDoc { for(final Pair kv : lstControls) { - kv.getKey().addItemListener(new ItemListener() { + kv.getKey().addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent arg0) { if (updating) { return; } 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 b1cebaa82a6..11499dd475e 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 @@ -75,6 +75,7 @@ public enum VSubmenuPreferences implements IVSubmenu { private final JCheckBox cbLoadHistoricFormats = new OptionsCheckBox(localizer.getMessage("cbLoadHistoricFormats")); private final JCheckBox cbWorkshopSyntax = new OptionsCheckBox(localizer.getMessage("cbWorkshopSyntax")); private final JCheckBox cbEnforceDeckLegality = new OptionsCheckBox(localizer.getMessage("cbEnforceDeckLegality")); + private final JCheckBox cbSideboardForAI = new OptionsCheckBox(localizer.getMessage("cbSideboardForAI")); private final JCheckBox cbPerformanceMode = new OptionsCheckBox(localizer.getMessage("cbPerformanceMode")); private final JCheckBox cbFilteredHands = new OptionsCheckBox(localizer.getMessage("cbFilteredHands")); private final JCheckBox cbImageFetcher = new OptionsCheckBox(localizer.getMessage("cbImageFetcher")); @@ -195,6 +196,9 @@ public enum VSubmenuPreferences implements IVSubmenu { pnlPrefs.add(cbPerformanceMode, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlPerformanceMode")), descriptionConstraints); + pnlPrefs.add(cbSideboardForAI, titleConstraints); + pnlPrefs.add(new NoteLabel(localizer.getMessage("nlSideboardForAI")), descriptionConstraints); + pnlPrefs.add(cbFilteredHands, titleConstraints); pnlPrefs.add(new NoteLabel(localizer.getMessage("nlFilteredHands")), descriptionConstraints); @@ -680,6 +684,10 @@ public enum VSubmenuPreferences implements IVSubmenu { return cbPerformanceMode; } + public JCheckBox getCbSideboardForAI() { + return cbSideboardForAI; + } + /** @return {@link javax.swing.JCheckBox} */ public JCheckBox getCbFilteredHands() { return cbFilteredHands; diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index ee280f85f0b..fb9a3ee19be 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -1022,8 +1022,8 @@ public final class CMatchUI } @Override - public List sideboard(final CardPool sideboard, final CardPool main) { - return GuiChoose.sideboard(this, sideboard.toFlatList(), main.toFlatList()); + public List sideboard(final CardPool sideboard, final CardPool main, final String message) { + return GuiChoose.sideboard(this, sideboard.toFlatList(), main.toFlatList(), message); } @Override diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index da8d1191e82..2e7bfcafb12 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -112,7 +112,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public List sideboard(Deck deck, GameType gameType) { + public List sideboard(Deck deck, GameType gameType, String message) { return null; // refused to side } diff --git a/forge-gui-mobile/src/forge/deck/FSideboardDialog.java b/forge-gui-mobile/src/forge/deck/FSideboardDialog.java index 860ec12f46e..dc2c6ea5abe 100644 --- a/forge-gui-mobile/src/forge/deck/FSideboardDialog.java +++ b/forge-gui-mobile/src/forge/deck/FSideboardDialog.java @@ -23,8 +23,8 @@ public class FSideboardDialog extends FDialog { private final SideboardTabs tabs; private final Callback> callback; - public FSideboardDialog(CardPool sideboard, CardPool main, final Callback> callback0) { - super("Update main deck from sideboard", 1); + public FSideboardDialog(CardPool sideboard, CardPool main, final Callback> callback0, String message) { + super("Update main deck from sideboard" + message, 1); callback = callback0; tabs = add(new SideboardTabs(sideboard, main)); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 0a5a83b664a..83a9c1d5a65 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -481,11 +481,11 @@ public class MatchController extends AbstractGuiGame { } @Override - public List sideboard(final CardPool sideboard, final CardPool main) { + public List sideboard(final CardPool sideboard, final CardPool main, final String message) { return new WaitCallback>() { @Override public void run() { - final FSideboardDialog sideboardDialog = new FSideboardDialog(sideboard, main, this); + final FSideboardDialog sideboardDialog = new FSideboardDialog(sideboard, main, this, message); sideboardDialog.show(); } }.invokeAndWait(); diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java index 36c95917843..a880ff379fa 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java @@ -121,6 +121,10 @@ public class SettingsPage extends TabPage { "Performance Mode", "Disables additional static abilities checks to speed up the game engine. (Warning: breaks some 'as if had flash' scenarios when casting cards owned by opponents)."), 1); + lstSettings.addItem(new BooleanSetting(FPref.MATCH_SIDEBOARD_FOR_AI, + "Human Sideboard for AI", + "Allows users to sideboard with the AIs deck and sideboard in constructed game formats."), + 1); lstSettings.addItem(new BooleanSetting(FPref.FILTERED_HANDS, "Filtered Hands", "Generates two starting hands and keeps the one with the closest to average land count for the deck. (Requires restart)"), diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index c3cbcd177fb..aa33df81e26 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -79,4 +79,5 @@ Core Set 2019, 3/6/M19, M19 Guilds of Ravnica, 3/6/GRN, GRN Ultimate Masters, 3/6/M19, UMA Ravnica Allegiance, 3/6/RNA, RNA -War of the Spark, 3/6/WAR, WAR \ No newline at end of file +War of the Spark, 3/6/WAR, WAR +Modern Horizons, 3/6/MH1, MH1 \ No newline at end of file diff --git a/forge-gui/res/blockdata/printsheets.txt b/forge-gui/res/blockdata/printsheets.txt index 4d5722eb393..af99de474f2 100644 --- a/forge-gui/res/blockdata/printsheets.txt +++ b/forge-gui/res/blockdata/printsheets.txt @@ -1442,4 +1442,19 @@ Guildpact Informant Jace's Projection Jace's Ruse Simic Guildgate|WAR -Tezzeret, Master of the Bridge \ No newline at end of file +Tezzeret, Master of the Bridge + +[MH1 Lands] +10 Snow-Covered Plains|MH1 +10 Snow-Covered Island|MH1 +10 Snow-Covered Swamp|MH1 +10 Snow-Covered Mountain|MH1 +10 Snow-Covered Forest|MH1 + +[MH1 Secret Cards] +Flusterstorm +Snow-Covered Plains +Snow-Covered Island +Snow-Covered Swamp +Snow-Covered Mountain +Snow-Covered Forest \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/a/aethersnipe.txt b/forge-gui/res/cardsfolder/a/aethersnipe.txt index e3fdb1e161c..7e38c14ee01 100644 --- a/forge-gui/res/cardsfolder/a/aethersnipe.txt +++ b/forge-gui/res/cardsfolder/a/aethersnipe.txt @@ -5,5 +5,6 @@ PT:4/4 K:Evoke:1 U U T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters the battlefield, return target nonland permanent to its owner's hand. SVar:TrigBounce:DB$ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Choose target non-Land permanent. | Origin$ Battlefield | Destination$ Hand +SVar:NeedsToPlayEvoked:Card.nonLand+OppCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/aethersnipe.jpg Oracle:When Aethersnipe enters the battlefield, return target nonland permanent to its owner's hand.\nEvoke {1}{U}{U} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/b/briarhorn.txt b/forge-gui/res/cardsfolder/b/briarhorn.txt index 7e04060ff24..135141788c2 100644 --- a/forge-gui/res/cardsfolder/b/briarhorn.txt +++ b/forge-gui/res/cardsfolder/b/briarhorn.txt @@ -6,6 +6,7 @@ K:Evoke:1 G T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature gets +3/+3 until end of turn. SVar:TrigPump:DB$Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +3 | NumDef$ +3 SVar:PlayMain1:TRUE +SVar:NeedsToPlayEvoked:Creature.YouCtrl K:Flash SVar:Picture:http://www.wizards.com/global/images/magic/general/briarhorn.jpg Oracle:Flash\nWhen Briarhorn enters the battlefield, target creature gets +3/+3 until end of turn.\nEvoke {1}{G} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/f/faultgrinder.txt b/forge-gui/res/cardsfolder/f/faultgrinder.txt index 4d5eb7b4b16..30c12405c26 100644 --- a/forge-gui/res/cardsfolder/f/faultgrinder.txt +++ b/forge-gui/res/cardsfolder/f/faultgrinder.txt @@ -6,5 +6,6 @@ K:Trample K:Evoke:4 R T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy target land. SVar:TrigDestroy:DB$Destroy | ValidTgts$ Land | TgtPrompt$ Select a land. +SVar:NeedsToPlayEvoked:Land.OppCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/faultgrinder.jpg Oracle:Trample\nWhen Faultgrinder enters the battlefield, destroy target land.\nEvoke {4}{R} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/f/finale_of_devastation.txt b/forge-gui/res/cardsfolder/f/finale_of_devastation.txt index ebfcf16973b..acf224c4426 100644 --- a/forge-gui/res/cardsfolder/f/finale_of_devastation.txt +++ b/forge-gui/res/cardsfolder/f/finale_of_devastation.txt @@ -1,7 +1,7 @@ Name:Finale of Devastation ManaCost:X G G Types:Sorcery -A:SP$ ChangeZone | Cost$ X G G | ChangeType$ Creature.YouCtrl+cmcLEX | Hidden$ True | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Battlefield | ShuffleNonMandatory$ True | SubAbility$ DBPump | SpellDescription$ Search your library and/or graveyard for a creature card with converted mana cost X or less and put it onto the battlefield. If you search your library this way, shuffle it. If X is 10 or more, creatures you control get +X/+X and gain haste until end of turn. +A:SP$ ChangeZone | Cost$ X G G | ChangeType$ Creature.YouCtrl+cmcLEX | Hidden$ True | Origin$ Library | OriginChoice$ True | OriginAlternative$ Graveyard | AlternativeMessage$ Would you like to search your library with this ability? If you do, your library will be shuffled. | Destination$ Battlefield | ShuffleNonMandatory$ True | SubAbility$ DBPump | References$ X | SpellDescription$ Search your library and/or graveyard for a creature card with converted mana cost X or less and put it onto the battlefield. If you search your library this way, shuffle it. If X is 10 or more, creatures you control get +X/+X and gain haste until end of turn. SVar:DBPump:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Haste | NumAtt$ X | NumDef$ X | References$ X | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 SVar:X:Count$xPaid Oracle:Search your library and/or graveyard for a creature card with converted mana cost X or less and put it onto the battlefield. If you search your library this way, shuffle it. If X is 10 or more, creatures you control get +X/+X and gain haste until end of turn. diff --git a/forge-gui/res/cardsfolder/i/ingot_chewer.txt b/forge-gui/res/cardsfolder/i/ingot_chewer.txt index 01bb6e50bd5..f28863e8284 100644 --- a/forge-gui/res/cardsfolder/i/ingot_chewer.txt +++ b/forge-gui/res/cardsfolder/i/ingot_chewer.txt @@ -5,5 +5,6 @@ PT:3/3 K:Evoke:R T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy target artifact. SVar:TrigDestroy:DB$Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact. +SVar:NeedsToPlayEvoked:Artifact.OppCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/ingot_chewer.jpg Oracle:When Ingot Chewer enters the battlefield, destroy target artifact.\nEvoke {R} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/i/inner_flame_acolyte.txt b/forge-gui/res/cardsfolder/i/inner_flame_acolyte.txt index b2a5615f44c..e6d38e88ce2 100644 --- a/forge-gui/res/cardsfolder/i/inner_flame_acolyte.txt +++ b/forge-gui/res/cardsfolder/i/inner_flame_acolyte.txt @@ -6,5 +6,6 @@ K:Evoke:R T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature gets +2/+0 and gains haste until end of turn. SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | KW$ Haste SVar:PlayMain1:ALWAYS +SVar:NeedsToPlayEvoked:Creature.YouCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/inner_flame_acolyte.jpg Oracle:When Inner-Flame Acolyte enters the battlefield, target creature gets +2/+0 and gains haste until end of turn.\nEvoke {R} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/m/master_of_waves.txt b/forge-gui/res/cardsfolder/m/master_of_waves.txt index 8675e18ae1b..3348035bebe 100644 --- a/forge-gui/res/cardsfolder/m/master_of_waves.txt +++ b/forge-gui/res/cardsfolder/m/master_of_waves.txt @@ -2,7 +2,7 @@ Name:Master of Waves ManaCost:3 U Types:Creature Merfolk Wizard PT:2/1 -K:Protection from creatures +K:Protection from red S:Mode$ Continuous | Affected$ Creature.Elemental+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Elemental creatures you control get +1/+1. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a number of 1/0 blue Elemental creature tokens equal to your devotion to blue. (Each {U} in the mana costs of permanents you control counts toward your devotion to blue.) SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ u_1_0_elemental | TokenOwner$ You | References$ X | LegacyImage$ u 1 0 elemental ths diff --git a/forge-gui/res/cardsfolder/m/meadowboon.txt b/forge-gui/res/cardsfolder/m/meadowboon.txt index 4703789b36a..b18d7a6b1a8 100644 --- a/forge-gui/res/cardsfolder/m/meadowboon.txt +++ b/forge-gui/res/cardsfolder/m/meadowboon.txt @@ -6,4 +6,6 @@ K:Evoke:3 W T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigPutCounterAll | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, put a +1/+1 counter on each creature target player controls. SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidTgts$ Player | TgtPrompt$ Select a player | ValidCards$ Creature | CounterType$ P1P1 | CounterNum$ 1 SVar:Picture:http://www.wizards.com/global/images/magic/general/meadowboon.jpg +SVar:NeedsToPlayEvokedVar:Z GE2 +SVar:Z:Count$Valid Creature.YouCtrl Oracle:When Meadowboon leaves the battlefield, put a +1/+1 counter on each creature target player controls.\nEvoke {3}{W} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/n/nevermaker.txt b/forge-gui/res/cardsfolder/n/nevermaker.txt index a3ac8845d75..b5e742a561f 100644 --- a/forge-gui/res/cardsfolder/n/nevermaker.txt +++ b/forge-gui/res/cardsfolder/n/nevermaker.txt @@ -6,5 +6,6 @@ K:Flying K:Evoke:3 U T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigBounce | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, put target nonland permanent on top of its owner's library. SVar:TrigBounce:DB$ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Choose target non-Land permanent | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 +SVar:NeedsToPlayEvoked:Card.nonLand+OppCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/nevermaker.jpg Oracle:Flying\nWhen Nevermaker leaves the battlefield, put target nonland permanent on top of its owner's library.\nEvoke {3}{U} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/n/night_incarnate.txt b/forge-gui/res/cardsfolder/n/night_incarnate.txt index d2ac8cec734..ffa8653a6a7 100644 --- a/forge-gui/res/cardsfolder/n/night_incarnate.txt +++ b/forge-gui/res/cardsfolder/n/night_incarnate.txt @@ -6,4 +6,6 @@ K:Deathtouch K:Evoke:3 B T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, all creatures get -3/-3 until end of turn. SVar:TrigPumpAll:DB$PumpAll | ValidCards$ Creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True +SVar:NeedsToPlayEvokedVar:Z GE2 +SVar:Z:Count$Valid Creature.OppCtrl+toughnessLE3 Oracle:Deathtouch\nWhen Night Incarnate leaves the battlefield, all creatures get -3/-3 until end of turn.\nEvoke {3}{B} (You may cast this spell for its evoke cost. If you do, it's sacrifices when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/o/offalsnout.txt b/forge-gui/res/cardsfolder/o/offalsnout.txt index 55236e0778a..8c75b5a6cb1 100644 --- a/forge-gui/res/cardsfolder/o/offalsnout.txt +++ b/forge-gui/res/cardsfolder/o/offalsnout.txt @@ -7,5 +7,7 @@ K:Evoke:B T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigExile | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, exile target card from a graveyard. SVar:TrigExile:DB$ChangeZone | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card AI:RemoveDeck:All +SVar:NeedsToPlayEvokedVar:Z GE1 +SVar:Z:Count$ValidGraveyard Card.OppCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/offalsnout.jpg Oracle:Flash\nWhen Offalsnout leaves the battlefield, exile target card from a graveyard.\nEvoke {B} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/r/reveillark.txt b/forge-gui/res/cardsfolder/r/reveillark.txt index 05ad2830f27..0628e50232e 100644 --- a/forge-gui/res/cardsfolder/r/reveillark.txt +++ b/forge-gui/res/cardsfolder/r/reveillark.txt @@ -6,5 +6,7 @@ K:Flying K:Evoke:5 W T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturnCreatures | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, return up to two target creature cards with power 2 or less from your graveyard to the battlefield. SVar:TrigReturnCreatures:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature.powerLE2 | TargetsWithDefinedController$ TriggeredCardController | TgtPrompt$ Choose target creature +SVar:NeedsToPlayEvokedVar:Z GE2 +SVar:Z:Count$ValidGraveyard Creature.YouCtrl+powerLE2 SVar:Picture:http://www.wizards.com/global/images/magic/general/reveillark.jpg Oracle:Flying\nWhen Reveillark leaves the battlefield, return up to two target creature cards with power 2 or less from your graveyard to the battlefield.\nEvoke {5}{W} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/s/shriekmaw.txt b/forge-gui/res/cardsfolder/s/shriekmaw.txt index fc4a89c7170..da2b9a78479 100644 --- a/forge-gui/res/cardsfolder/s/shriekmaw.txt +++ b/forge-gui/res/cardsfolder/s/shriekmaw.txt @@ -6,5 +6,6 @@ K:Fear K:Evoke:1 B T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy target nonartifact, nonblack creature. SVar:TrigDestroy:DB$Destroy | ValidTgts$ Creature.nonBlack+nonArtifact | TgtPrompt$ Select target nonartifact, nonblack creature. +SVar:NeedsToPlayEvoked:Creature.OppCtrl+nonArtifact+nonBlack SVar:Picture:http://www.wizards.com/global/images/magic/general/shriekmaw.jpg Oracle:Fear (This creature can't be blocked except by artifact creatures and/or black creatures.)\nWhen Shriekmaw enters the battlefield, destroy target nonartifact, nonblack creature.\nEvoke {1}{B} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/s/spitebellows.txt b/forge-gui/res/cardsfolder/s/spitebellows.txt index 00f6a065259..e06565c6e2d 100644 --- a/forge-gui/res/cardsfolder/s/spitebellows.txt +++ b/forge-gui/res/cardsfolder/s/spitebellows.txt @@ -6,4 +6,5 @@ K:Evoke:1 R R T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigDamageCreature | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, it deals 6 damage to target creature. SVar:TrigDamageCreature:DB$DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 6 SVar:Picture:http://www.wizards.com/global/images/magic/general/spitebellows.jpg +SVar:NeedsToPlayEvoked:Creature.OppCtrl+toughnessLE6 Oracle:When Spitebellows leaves the battlefield, it deals 6 damage to target creature.\nEvoke {1}{R}{R} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/upcoming/alpine_guide.txt b/forge-gui/res/cardsfolder/upcoming/alpine_guide.txt new file mode 100644 index 00000000000..6d22e7f75b8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/alpine_guide.txt @@ -0,0 +1,10 @@ +Name:Alpine Guide +ManaCost:2 R +Types:Snow Creature Human Scout +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a Mountain card, put that card onto the battlefield tapped, then shuffle your library. +SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Mountain | ChangeNum$ 1 | ShuffleNonMandatory$ True +K:CARDNAME attacks each combat if able. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigSac | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, sacrifice a Mountain. +SVar:TrigSac:DB$Sacrifice | SacValid$ Mountain | Defined$ You +Oracle:When Alpine Guide enters the battlefield, you may search your library for a Mountain card, put that card onto the battlefield tapped, then shuffle your library.\nAlpine Guide attacks each combat if able.\nWhen Alpine Guide leaves the battlefield, sacrifice a Mountain. diff --git a/forge-gui/res/cardsfolder/upcoming/amorphous_axe.txt b/forge-gui/res/cardsfolder/upcoming/amorphous_axe.txt new file mode 100644 index 00000000000..4b0bb3e258a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/amorphous_axe.txt @@ -0,0 +1,6 @@ +Name:Amorphous Axe +ManaCost:2 +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddType$ AllCreatureTypes | Description$ Equipped creature gets +3/+0 and is every creature type. +K:Equip:3 +Oracle:Equipped creature gets +3/+0 and is every creature type.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/upcoming/answered_prayers.txt b/forge-gui/res/cardsfolder/upcoming/answered_prayers.txt new file mode 100644 index 00000000000..dda86b2a2c1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/answered_prayers.txt @@ -0,0 +1,8 @@ +Name:Answered Prayers +ManaCost:1 W W +Types:Enchantment +T:Mode$ ChangesZone | ValidCard$ Creature.YouCtrl | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature enters the battlefield under your control, you gain 1 life. If CARDNAME isn't a creature, it becomes a 3/3 Angel creature with flying in addition to its other types until end of turn. +SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ TriggeredCard | Power$ 3 | Toughness$ 3 | Types$ Creature,Angel | Keywords$ Flying | ConditionDefined$ Self | ConditionPresent$ Card.nonCreature +SVar:BuffedBy:Creature +Oracle:Whenever a creature enters the battlefield under your control, you gain 1 life. If Answered Prayers isn't a creature, it becomes a 3/3 Angel creature with flying in addition to its other types until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/azra_smokeshaper.txt b/forge-gui/res/cardsfolder/upcoming/azra_smokeshaper.txt new file mode 100644 index 00000000000..366d10eaff4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/azra_smokeshaper.txt @@ -0,0 +1,9 @@ +Name:Azra Smokeshaper +ManaCost:3 B +Types:Creature Azra Ninja +PT:3/3 +K:Ninjutsu:1 B +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature you control gains indestructible until end of turn. +SVar:TrigPump:DB$Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Indestructible +SVar:PlayMain1:TRUE +Oracle:Ninjutsu {1}{B} ({1}{B}, Return an unblocked attacker you control to your hand: Put this card onto the battlefield tapped and attacking)\nWhen Azra Smokeshaper enters the battlefield, target creature you control gains indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/birthing_boughs.txt b/forge-gui/res/cardsfolder/upcoming/birthing_boughs.txt new file mode 100644 index 00000000000..69b042d9a3e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/birthing_boughs.txt @@ -0,0 +1,5 @@ +Name:Birthing Boughs +ManaCost:3 +Types:Artifact +A:AB$ Token | Cost$ 4 T | LegacyImage$ c 2 2 shapeshifter changeling mh1 | TokenAmount$ 1 | TokenScript$ c_2_2_shapeshifter_changeling | TokenOwner$ You | SpellDescription$ Create a 2/2 colorless Shapeshifter creature token with changeling. (It has every creature type.) +Oracle:{4}, {T}: Create a 2/2 colorless Shapeshifter creature token with changeling. (It has every creature type.) diff --git a/forge-gui/res/cardsfolder/upcoming/bogardan_dragonheart.txt b/forge-gui/res/cardsfolder/upcoming/bogardan_dragonheart.txt new file mode 100644 index 00000000000..715809c675a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bogardan_dragonheart.txt @@ -0,0 +1,8 @@ +Name:Bogardan Dragonheart +ManaCost:2 R +Types:Creature Human Shaman +PT:2/2 +A:AB$ Animate | Cost$ Sac<1/Creature.Other/another creature> | Power$ 4 | Toughness$ 4 | Types$ Dragon | RemoveCreatureTypes$ True | Keywords$ Flying & Haste | SpellDescription$ Until end of turn, CARDNAME becomes a Dragon with base power and toughness 4/4, flying, and haste. +SVar:AIPreference:SacCost$Creature.token +AI:RemoveDeck:All +Oracle:Sacrifice another creature: Until end of turn, Bogardan Dragonheart becomes a Dragon with base power and toughness 4/4, flying, and haste. diff --git a/forge-gui/res/cardsfolder/upcoming/cave_of_temptation.txt b/forge-gui/res/cardsfolder/upcoming/cave_of_temptation.txt new file mode 100644 index 00000000000..343471c9d7c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cave_of_temptation.txt @@ -0,0 +1,8 @@ +Name:Cave of Temptation +ManaCost:no cost +Types:Land +A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. +A:AB$ Mana | Cost$ 1 T | Produced$ Any | SpellDescription$ Add one mana of any color. +AI:RemoveDeck:All +A:AB$ PutCounter | Cost$ 4 T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 2 | SorcerySpeed$ True | SpellDescription$ Put two +1/+1 counters on target creature. Activate this ability only any time you could cast a sorcery. +Oracle:{T}: Add {C}.\n{1}, {T}: Add one mana of any color.\n{4}, {T}, Sacrifice Cave of Temptation: Put two +1/+1 counters on target creature. Activate this ability only any time you could cast a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/cleaving_sliver.txt b/forge-gui/res/cardsfolder/upcoming/cleaving_sliver.txt new file mode 100644 index 00000000000..544d1a3d5a5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cleaving_sliver.txt @@ -0,0 +1,8 @@ +Name:Cleaving Sliver +ManaCost:3 R +Types:Creature Sliver +PT:2/2 +S:Mode$ Continuous | Affected$ Creature.Sliver+YouCtrl | AddPower$ 2 | Description$ Sliver creatures you control get +2/+0. +SVar:PlayMain1:TRUE +SVar:BuffedBy:Sliver +Oracle:Sliver creatures you control get +2/+0. diff --git a/forge-gui/res/cardsfolder/upcoming/conifer_wurm.txt b/forge-gui/res/cardsfolder/upcoming/conifer_wurm.txt new file mode 100644 index 00000000000..9088ae34f87 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/conifer_wurm.txt @@ -0,0 +1,9 @@ +Name:Conifer Wurm +ManaCost:4 G +Types:Snow Creature Wurm +PT:4/4 +K:Trample +A:AB$ Pump | Cost$ 3 G | NumAtt$ +X | NumDef$ +X | SpellDescription$ CARDNAME gets +X/+X until end of turn, where X is the number of snow permanents you control. +SVar:X:Count$Valid Permanent.Snow+YouCtrl +AI:RemoveDeck:Random +Oracle:Trample\n{3}{G}: Conifer Wurm gets +X/+X until end of turn, where X is the number of snow permanents you control. diff --git a/forge-gui/res/cardsfolder/upcoming/cordial_vampire.txt b/forge-gui/res/cardsfolder/upcoming/cordial_vampire.txt new file mode 100644 index 00000000000..102bc82c3db --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cordial_vampire.txt @@ -0,0 +1,10 @@ +Name:Cordial Vampire +ManaCost:B B +Types:Creature Vampire +PT:1/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigPutCounters | TriggerDescription$ Whenever CARDNAME or another creature dies, put a +1/+1 counter on each vampire creature you control. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | TriggerController$ TriggeredCardController | Execute$ TrigPutCounters | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature dies, put a +1/+1 counter on each vampire creature you control. +SVar:TrigPutCounters:DB$ PutCounterAll | ValidCards$ Creature.Vampire+YouCtrl | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters +DeckNeeds:Type$Vampire +Oracle:Whenever Cordial Vampire or another creature dies, put a +1/+1 counter on each vampire creature you control. diff --git a/forge-gui/res/cardsfolder/upcoming/cunning_evasion.txt b/forge-gui/res/cardsfolder/upcoming/cunning_evasion.txt new file mode 100644 index 00000000000..3ca429261cb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cunning_evasion.txt @@ -0,0 +1,6 @@ +Name:Cunning Evasion +ManaCost:1 U +Types:Enchantment +T:Mode$ AttackerBlocked | ValidCard$ Creature.YouCtrl | Execute$ TrigBounce | OptionalDecider$ You | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control becomes blocked, you may return it to its owner's hand. +SVar:TrigBounce:DB$ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ TriggeredAttacker +Oracle:Whenever a creature you control becomes blocked, you may return it to its owner's hand. diff --git a/forge-gui/res/cardsfolder/upcoming/dead_of_winter.txt b/forge-gui/res/cardsfolder/upcoming/dead_of_winter.txt new file mode 100644 index 00000000000..6900dff33e9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dead_of_winter.txt @@ -0,0 +1,7 @@ +Name:Dead of Winter +ManaCost:2 B +Types:Sorcery +A:SP$ PumpAll | Cost$ 2 B | ValidCards$ Creature.Snow | NumAtt$ -X | NumDef$ -X | References$ X | SpellDescription$ All nonsnow creatures get -X/-X until end of turn, where X is the number of snow permanents you control. +SVar:X:Count$Valid Permanent.Snow+YouCtrl +AI:RemoveDeck:Random +Oracle:All nonsnow creatures get -X/-X until end of turn, where X is the number of snow permanents you control. diff --git a/forge-gui/res/cardsfolder/upcoming/defile.txt b/forge-gui/res/cardsfolder/upcoming/defile.txt new file mode 100644 index 00000000000..576429e8d56 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/defile.txt @@ -0,0 +1,6 @@ +Name:Defile +ManaCost:B +Types:Instant +A:SP$ Pump | Cost$ B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | IsCurse$ True | References$ X | SpellDescription$ Target creature gets -1/-1 until end of turn for each Swamp you control. +SVar:X:Count$TypeYouCtrl.Swamp +Oracle:Target creature gets -1/-1 until end of turn for each Swamp you control. diff --git a/forge-gui/res/cardsfolder/upcoming/echo_of_eons.txt b/forge-gui/res/cardsfolder/upcoming/echo_of_eons.txt new file mode 100644 index 00000000000..6ca9cbf4966 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/echo_of_eons.txt @@ -0,0 +1,7 @@ +Name:Echo of Eons +ManaCost:4 U U +Types:Sorcery +A:SP$ ChangeZoneAll | Cost$ 4 U U | ChangeType$ Card | Origin$ Hand,Graveyard | Destination$ Library | Shuffle$ True | Random$ True | SubAbility$ DBDraw | UseAllOriginZones$ True | AILogic$ TimeTwister | SpellDescription$ Each player shuffles their graveyard and hand into their library, then draws seven cards. +SVar:DBDraw:DB$ Draw | NumCards$ 7 | Defined$ Player +K:Flashback:2 U +Oracle:Each player shuffles their hand and graveyard into their library, then draws seven cards.\nFlashback {2}{U} (You may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/upcoming/endling.txt b/forge-gui/res/cardsfolder/upcoming/endling.txt new file mode 100644 index 00000000000..03872fa08a0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/endling.txt @@ -0,0 +1,12 @@ +Name:Endling +ManaCost:2 B B +Types:Creature Zombie Shapeshifter +PT:3/3 +A:AB$ Pump | Cost$ B | KW$ Menace | Defined$ Self | SpellDescription$ CARDNAME gains gains menace until end of turn. +AI:RemoveDeck:Random +A:AB$ Pump | Cost$ B | Defined$ Self | KW$ Deathtouch | SpellDescription$ CARDNAME gains deathtouch until end of turn. +A:AB$ Pump | Cost$ B | Defined$ Self | KW$ Undying | SpellDescription$ CARDNAME gains undying until end of turn. +AI:RemoveDeck:All +A:AB$ Pump | Cost$ 1 | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ CARDNAME gets +1/-1 until end of turn. +A:AB$ Pump | Cost$ 1 | NumAtt$ -1 | NumDef$ +1 | SpellDescription$ CARDNAME gets -1/+1 until end of turn. +Oracle:{B}: Endling gains menace until end of turn.\n{B}: Endling gains deathtouch until end of turn.\n{B}: Endling gains undying until end of turn. (When this creature dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it.)\n{1}: Endling gets +1/-1 or -1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/ephemerate.txt b/forge-gui/res/cardsfolder/upcoming/ephemerate.txt new file mode 100644 index 00000000000..785917f4fc9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ephemerate.txt @@ -0,0 +1,8 @@ +Name:Ephemerate +ManaCost:W +Types:Instant +K:Rebound +A:SP$ ChangeZone | Cost$ W | ValidTgts$ Creature.YouCtrl | Origin$ Battlefield | Destination$ Exile | TgtPrompt$ Select target creature you control | RememberTargets$ True | SubAbility$ DBReturn | SpellDescription$ Exile target creature you control, then return that card to the battlefield under your control. +SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ All | Destination$ Battlefield | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Exile target creature you control, then return that card to the battlefield under your control. \nRebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may case this card from exile without paying its mana cost.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/excavating_anurid.txt b/forge-gui/res/cardsfolder/upcoming/excavating_anurid.txt new file mode 100644 index 00000000000..7ce7f396d4e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/excavating_anurid.txt @@ -0,0 +1,8 @@ +Name:Excavating Anurid +ManaCost:4 G +Types:Creature Frog Beast +PT:4/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, you may sacrifice a land. If you do, draw a card. +SVar:TrigDraw:AB$ Draw | Cost$ Sac<1/Land> | Defined$ You | NumCards$ 1 +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Vigilance | Condition$ Threshold | Description$ Threshold Whenver As long as seven or more cards are in your graveyard, CARDNAME gets +1/+1 and has vigilance. +Oracle:When Excavating Anurid enters the battlefield, you may sacrifice a land. If you do, draw a card.\nThreshold — As long as seven or more cards are in your graveyard, Excavating Anurid gets +1/+1 and has vigilance. diff --git a/forge-gui/res/cardsfolder/upcoming/eyekite.txt b/forge-gui/res/cardsfolder/upcoming/eyekite.txt new file mode 100644 index 00000000000..20044bafee4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eyekite.txt @@ -0,0 +1,9 @@ +Name:Eyekite +ManaCost:1 U +Types:Creature Drake +PT:1/2 +K:Flying +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | CheckSVar$ X | SVarCompare$ GE2 | Description$ CARDNAME gets +2/+0 as long as you've drawn two or more cards this turn. +SVar:X:Count$YouDrewThisTurn +AI:RemoveDeck:All +Oracle:Flying\nEyekite gets +2/+0 as long as you've drawn two or more cards this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/face_of_divinity.txt b/forge-gui/res/cardsfolder/upcoming/face_of_divinity.txt new file mode 100644 index 00000000000..5ea6cc3bed6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/face_of_divinity.txt @@ -0,0 +1,9 @@ +Name:Face of Divinity +ManaCost:2 W +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | Cost$ 2 W | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | Description$ Enchanted creature gets +2/+2. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy Aura.Other | AddKeyword$ First Strike & Lifelink | Description$ As long as another Aura is attached to enchanted creature, it has first strike and lifelink. +SVar:EnchantMe:Multiple +Oracle:Enchant creature\nEnchanted creature gets +2/+2.\nAs long as another Aura is attached to enchanted creature, it has first strike and lifelink. diff --git a/forge-gui/res/cardsfolder/upcoming/faerie_seer.txt b/forge-gui/res/cardsfolder/upcoming/faerie_seer.txt new file mode 100644 index 00000000000..3595739ae49 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/faerie_seer.txt @@ -0,0 +1,8 @@ +Name:Faerie Seer +ManaCost:U +Types:Creature Faerie Wizard +PT:1/1 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 2. +SVar:TrigScry:DB$ Scry | ScryNum$ 2 +Oracle:Flying\nWhen Faerie Seer enters the battlefield, scry 2. diff --git a/forge-gui/res/cardsfolder/upcoming/first_slivers_chosen.txt b/forge-gui/res/cardsfolder/upcoming/first_slivers_chosen.txt new file mode 100644 index 00000000000..edfa5b62fe5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/first_slivers_chosen.txt @@ -0,0 +1,7 @@ +Name:First Sliver's Chosen +ManaCost:4 W +Types:Creature Sliver +PT:3/3 +S:Mode$ Continuous | Affected$ Creature.Sliver+YouCtrl | AddKeyword$ Exalted | Description$ Sliver creatures you control have Exalted. +SVar:PlayMain1:TRUE +Oracle:Sliver creatures you control have exalted. (Whenever a creature you control attacks alone, it gets +1/+1 until end of turn for each instance of exalted among permanents you control.) diff --git a/forge-gui/res/cardsfolder/upcoming/first_sphere_gargantua.txt b/forge-gui/res/cardsfolder/upcoming/first_sphere_gargantua.txt new file mode 100644 index 00000000000..359d9bbdf0d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/first_sphere_gargantua.txt @@ -0,0 +1,9 @@ +Name:First-Sphere Gargantua +ManaCost:4 B B +Types:Creature Horror +PT:5/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, you draw a card and you lose 1 life. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 1 +K:Unearth:2 B +Oracle:When First-Sphere Gargantua enters the battlefield, you draw a card and you lose 1 life.\nUnearth {2}{B} ({2}{B}: Return this card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery) diff --git a/forge-gui/res/cardsfolder/upcoming/fountain_of_ichor.txt b/forge-gui/res/cardsfolder/upcoming/fountain_of_ichor.txt new file mode 100644 index 00000000000..36d44c9f583 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fountain_of_ichor.txt @@ -0,0 +1,7 @@ +Name:Fountain of Ichor +ManaCost:3 +Types:Artifact +A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. +A:AB$ Animate | Cost$ 3 | Defined$ Self | Power$ 3 | Toughness$ 3 | Types$ Creature,Artifact,Dinosaur | SpellDescription$ CARDNAME becomes a 3/3 Dinosaur artifact creature until end of turn. +AI:RemoveDeck:Random +Oracle:{T}: Add one mana of any color.\n{3}: Fountain of Ichor becomes a 3/3 Dinosaur artifact creature until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/frostwalla.txt b/forge-gui/res/cardsfolder/upcoming/frostwalla.txt new file mode 100644 index 00000000000..1fe01130a4f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/frostwalla.txt @@ -0,0 +1,6 @@ +Name:Frostwalla +ManaCost:2 G +Types:Snow Creature Lizard +PT:2/2 +A:AB$ Pump | Cost$ S | NumAtt$ +2 | NumDef$ +2 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+2 until end of turn. Activate this ability only once each turn. +Oracle:{S}: Frostwalla gets +2/+2 until end of turn. Activate this ability only once each turn. ({S} can be paid with one mana from a snow permanent.) diff --git a/forge-gui/res/cardsfolder/upcoming/geomancers_gambit.txt b/forge-gui/res/cardsfolder/upcoming/geomancers_gambit.txt new file mode 100644 index 00000000000..9cdfed1fbe7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/geomancers_gambit.txt @@ -0,0 +1,7 @@ +Name:Geomancer's Gambit +ManaCost:2 R +Types:Sorcery +A:SP$ Destroy | Cost$ 2 R | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ DBChange | SpellDescription$ Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle their library. +SVar:DBChange:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.Basic | ChangeNum$ 1 | DefinedPlayer$ TargetedController | ShuffleNonMandatory$ True | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. +Oracle:Destroy target land. Its controller may search their library for a basic land card, put it onto the battlefield, then shuffle their library.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/gluttonous_slug.txt b/forge-gui/res/cardsfolder/upcoming/gluttonous_slug.txt new file mode 100644 index 00000000000..00e358a4d68 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gluttonous_slug.txt @@ -0,0 +1,8 @@ +Name:Gluttonous Slug +ManaCost:1 B +Types:Creature Slug Horror +PT:0/3 +K:Menace +K:Evolve +DeckHas:Ability$Counters +Oracle:Menace\nEvolve (Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature) diff --git a/forge-gui/res/cardsfolder/upcoming/graveshifter.txt b/forge-gui/res/cardsfolder/upcoming/graveshifter.txt new file mode 100644 index 00000000000..92295530a31 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/graveshifter.txt @@ -0,0 +1,8 @@ +Name:Graveshifter +ManaCost:3 B +Types:Creature Shapeshifter +PT:2/2 +K:Changeling +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may return target creature card from your graveyard to your hand. +SVar:TrigChangeZone:DB$ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl +Oracle:Changeling (This card is every creature type)\nWhen Graveshifter enters the battlefield, you may return target creature card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/hall_of_heliods_generosity.txt b/forge-gui/res/cardsfolder/upcoming/hall_of_heliods_generosity.txt new file mode 100644 index 00000000000..5d3f282e9e3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hall_of_heliods_generosity.txt @@ -0,0 +1,6 @@ +Name:Hall of Heliod's Generosity +ManaCost: +Types:Legendary Land +A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. +A:AB$ ChangeZone | Cost$ 1 W T | TgtPrompt$ Choose target enchantment card in your graveyard | ValidTgts$ Enchantment.YouCtrl | Origin$ Graveyard | Destination$ Library | SpellDescription$ Put target enchantment card from your graveyard on top of your library. +Oracle:{T}: Add {C}.\n{1}{W}, {T}: Put target enchantment card from your graveyard on top of your library. diff --git a/forge-gui/res/cardsfolder/upcoming/iceberg_cancrix.txt b/forge-gui/res/cardsfolder/upcoming/iceberg_cancrix.txt new file mode 100644 index 00000000000..c57f3c5f7bc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/iceberg_cancrix.txt @@ -0,0 +1,8 @@ +Name:Iceberg Cancrix +ManaCost:1 U +Types:Snow Creature Crab +PT:0/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Permanent.Other+YouCtrl+Snow | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigMill | TriggerDescription$ Whenever another snow permanent enters the battlefield under your control, you may have target player put the top two cards of their library into their graveyard. +SVar:TrigMill:DB$Mill | NumCards$ 2 | ValidTgts$ Player | TgtPrompt$ Choose a player +DeckHints:Type$Snow +Oracle:Whenever another snow permanent enters the battlefield under your control, you may have target player put the top two cards of their library into their graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/icehide_golem.txt b/forge-gui/res/cardsfolder/upcoming/icehide_golem.txt new file mode 100644 index 00000000000..0e991572b50 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/icehide_golem.txt @@ -0,0 +1,5 @@ +Name:Icehide Golem +ManaCost:S +Types:Snow Artifact Creature Golem +PT:2/2 +Oracle:({S} can be paid with one mana from a snow permanent.) diff --git a/forge-gui/res/cardsfolder/upcoming/igneous_elemental.txt b/forge-gui/res/cardsfolder/upcoming/igneous_elemental.txt new file mode 100644 index 00000000000..b17af0c1025 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/igneous_elemental.txt @@ -0,0 +1,10 @@ +Name:Igneous Elemental +ManaCost:4 R R +Types:Creature Elemental +PT:4/3 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | IsPresent$ Land.YouOwn | PresentZone$ Graveyard | PresentCompare$ GE1 | Description$ CARDNAME costs {2} less to cast if there is a land card in your graveyard. +AI:RemoveDeck:Random +SVar:SacMe:1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamage | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may have it deal 2 damage to target creature. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 +Oracle:This spell costs {2} less to cast if there is a land card in your graveyard.\nWhen Igneous Elemental enters the battlefield, you may have it deal 2 damage to target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/irregular_cohort.txt b/forge-gui/res/cardsfolder/upcoming/irregular_cohort.txt new file mode 100644 index 00000000000..ce188211faf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/irregular_cohort.txt @@ -0,0 +1,8 @@ +Name:Irregular Cohort +ManaCost:2 W W +Types:Creature Shapeshifter +PT:2/2 +K:Changeling +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a colorless Shapeshifter creature token with changeling. +SVar:TrigToken:DB$ Token | LegacyImage$ c 2 2 shapeshifter changeling mh1 | TokenAmount$ 1 | TokenScript$ c_2_2_shapeshifter_changeling | TokenOwner$ You | SpellDescription$ Create a 2/2 colorless Shapeshifter creature token with changeling. (It has every creature type.) +Oracle:Changeling (This card is every creature type.)\nWhen Irregular Cohort enters the battlefield, create a 2/2 colorless Shapeshifter creature token with changeling. diff --git a/forge-gui/res/cardsfolder/upcoming/knight_of_old_benalia.txt b/forge-gui/res/cardsfolder/upcoming/knight_of_old_benalia.txt new file mode 100644 index 00000000000..b014184b6bc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/knight_of_old_benalia.txt @@ -0,0 +1,9 @@ +Name:Knight of Old Benalia +ManaCost:3 W W +Types:Creature Human Knight +PT:3/3 +K:Suspend:5:W +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ When CARDNAME enters the battlefield, other creatures you control get +1/+1 until end of turn. +SVar:TrigPumpAll:DB$PumpAll | ValidCards$ Creature.Other+YouCtrl | NumAtt$ +1 | NumDef$ +1 +SVar:PlayMain1:TRUE +Oracle:Suspend 5—{W} (Rather than cast this card from your hand, you may pay {W} and exile it with five time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.)\nWhen Knight of Old Benalia enters the battlefield, other creatures you control get +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/lancer_sliver.txt b/forge-gui/res/cardsfolder/upcoming/lancer_sliver.txt new file mode 100644 index 00000000000..28cc61a6a3b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lancer_sliver.txt @@ -0,0 +1,7 @@ +Name:Lancer Sliver +ManaCost:2 W +Types:Creature Sliver +PT:2/2 +S:Mode$ Continuous | Affected$ Creature.Sliver+YouCtrl | AddKeyword$ First Strike | Description$ Sliver creatures you control have first strike. +SVar:PlayMain1:TRUE +Oracle:Sliver creatures you control have first strike. diff --git a/forge-gui/res/cardsfolder/upcoming/llanowar_tribe.txt b/forge-gui/res/cardsfolder/upcoming/llanowar_tribe.txt new file mode 100644 index 00000000000..4aa4f57d48b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/llanowar_tribe.txt @@ -0,0 +1,6 @@ +Name:Llanowar Tribe +ManaCost:G G G +Types:Creature Elf Druid +PT:3/3 +A:AB$ Mana | Cost$ T | Produced$ G | Amount$ 3 | SpellDescription$ Add {G}{G}{G}. +Oracle:{T}: Add {G}{G}{G}. diff --git a/forge-gui/res/cardsfolder/upcoming/magmatic_sinkhole.txt b/forge-gui/res/cardsfolder/upcoming/magmatic_sinkhole.txt new file mode 100644 index 00000000000..835ab0b9bbf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/magmatic_sinkhole.txt @@ -0,0 +1,7 @@ +Name:Magmatic Sinkhole +ManaCost:5 R +Types:Instant +K:Delve +DeckHints:Ability$Graveyard +A:SP$ DealDamage | Cost$ 5 R | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ 5 | SpellDescription$ CARDNAME deals 5 damage to target creature or planeswalker. +Oracle:Delve (Each spell you exile from your graveyard while casting this spell pays for {1})\nMagmatic Sinkhole deals 5 damage to target creature or planeswalker. diff --git a/forge-gui/res/cardsfolder/upcoming/mind_rake.txt b/forge-gui/res/cardsfolder/upcoming/mind_rake.txt new file mode 100644 index 00000000000..3b734788478 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mind_rake.txt @@ -0,0 +1,6 @@ +Name:Mind Rake +ManaCost:2 B +Types:Sorcery +A:SP$ Discard | Cost$ 2 B | ValidTgts$ Player | NumCards$ 2 | Mode$ TgtChoose | SpellDescription$ Target player discards two cards. +A:SP$ Discard | Cost$ 1 B | Defined$ Player | PrecostDesc$ Overload | CostDesc$ {1}{B} | NonBasicSpell$ True | NumCards$ 2 | Mode$ TgtChoose | 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$ Each player discards two cards. +Oracle:Target player discards two cards.\nOverload {1}{B} (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/upcoming/mist_syndicate_naga.txt b/forge-gui/res/cardsfolder/upcoming/mist_syndicate_naga.txt new file mode 100644 index 00000000000..6ec111b66c4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mist_syndicate_naga.txt @@ -0,0 +1,9 @@ +Name:Mist-Syndicate Naga +ManaCost:2 U +Types:Creature Naga Ninja +PT:3/1 +K:Ninjutsu:2 U +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, create a token that's a copy of CARDNAME. +SVar:TrigCopy:DB$ CopyPermanent | Defined$ Self | NumCopies$ 1 +DeckHas:Ability$Token +Oracle:Ninjutsu {2}{U} ({2}{U}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nWhenever Mist-Syndicate Naga deals combat damage to a player, create a token that's a copy of Mist-Syndicate Naga. diff --git a/forge-gui/res/cardsfolder/upcoming/mob.txt b/forge-gui/res/cardsfolder/upcoming/mob.txt new file mode 100644 index 00000000000..5db6a9a3d58 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mob.txt @@ -0,0 +1,6 @@ +Name:Mob +ManaCost:4 B +Types:Instant +K:Convoke +A:SP$ Destroy | Cost$ 4 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature. +Oracle:Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nDestroy target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/moonblade_shinobi.txt b/forge-gui/res/cardsfolder/upcoming/moonblade_shinobi.txt new file mode 100644 index 00000000000..4f7e4d4b16f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/moonblade_shinobi.txt @@ -0,0 +1,8 @@ +Name:Moonblade Shinobi +ManaCost:3 U +Types:Creature Human Ninja +PT:3/2 +K:Ninjutsu:2 U +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, create a 1/1 blue Illusion creature token with flying. +SVar:TrigToken:DB$Token | TokenAmount$ 1 | TokenScript$ u_1_1_illusion_flying | TokenOwner$ You | LegacyImage$ u 1 1 illusion flying mh1 +Oracle:Ninjutsu {2}{U} ({2}{U}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nWhenever Moonblade Shinobi deals combat damage to a player, create a 1/1 blue Illusion creature token with flying. diff --git a/forge-gui/res/cardsfolder/upcoming/murasa_behemoth.txt b/forge-gui/res/cardsfolder/upcoming/murasa_behemoth.txt new file mode 100644 index 00000000000..44a9a367221 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/murasa_behemoth.txt @@ -0,0 +1,8 @@ +Name:Murasa Behemoth +ManaCost:4 G G +Types:Creature Beast +PT:5/5 +K:Trample +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddToughness$ 3 | CheckSVar$ X | SVarCompare$ GE1 | Description$ CARDNAME gets +3/+3 as long as there is a land card in your graveyard. +SVar:X:Count$TypeInYourYard.Land +Oracle:Trample\nMurasa Behemoth gets +3/+3 as long as there is a land card in your graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/ninja_of_the_new_moon.txt b/forge-gui/res/cardsfolder/upcoming/ninja_of_the_new_moon.txt new file mode 100644 index 00000000000..d63bac30a69 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ninja_of_the_new_moon.txt @@ -0,0 +1,6 @@ +Name:Ninja of the New Moon +ManaCost:3 B B +Types:Creature Spirit Ninja +PT:6/3 +K:Ninjutsu:3 B +Oracle:Ninjutsu {3}{B} ({3}{B}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.) diff --git a/forge-gui/res/cardsfolder/upcoming/oneirophage.txt b/forge-gui/res/cardsfolder/upcoming/oneirophage.txt new file mode 100644 index 00000000000..4ad3054d209 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/oneirophage.txt @@ -0,0 +1,8 @@ +Name:Oneirophage +ManaCost:3 U +Types:Creature Squid Illusion +PT:1/2 +K:Flying +T:Mode$ Drawn | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you draw a card, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +Oracle:Flying\nWhenever you draw a card, put a +1/+1 counter on Oneirophage. diff --git a/forge-gui/res/cardsfolder/upcoming/phantasmal_form.txt b/forge-gui/res/cardsfolder/upcoming/phantasmal_form.txt new file mode 100644 index 00000000000..0b3075c873c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/phantasmal_form.txt @@ -0,0 +1,7 @@ +Name:Phantasmal Form +ManaCost:2 U +Types:Instant +A:SP$ Animate | Cost$ 2 U | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select target creature | Power$ 3 | Toughness$ 3 | Keywords$ Flying | Colors$ Blue | Types$ Illusion | SpellDescription$ Until end of turn, up to two target creatures each have base power and toughness 3/3, gain flying, and become blue phase in addition to their other colors and types. +AI:RemoveDeck:All +SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. +Oracle:Until end of turn, up to two target creatures each have base power and toughness 3/3, gain flying, and become blue Illusions in addition to their other colors and types.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/phantom_ninja.txt b/forge-gui/res/cardsfolder/upcoming/phantom_ninja.txt new file mode 100644 index 00000000000..1bfe0cc41dc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/phantom_ninja.txt @@ -0,0 +1,6 @@ +Name:Phantom Ninja +ManaCost:1 U U +Types:Creature Illusion Ninja +PT:2/2 +K:Unblockable +Oracle:Phantom Ninja can't be blocked. diff --git a/forge-gui/res/cardsfolder/upcoming/putrid_goblin.txt b/forge-gui/res/cardsfolder/upcoming/putrid_goblin.txt new file mode 100644 index 00000000000..e8874333be1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/putrid_goblin.txt @@ -0,0 +1,6 @@ +Name:Putrid Goblin +ManaCost:1 B +Types:Creature Zombie Goblin +PT:2/2 +K:Persist +Oracle:Persist (When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it.) diff --git a/forge-gui/res/cardsfolder/upcoming/quakefoot_cyclops.txt b/forge-gui/res/cardsfolder/upcoming/quakefoot_cyclops.txt new file mode 100644 index 00000000000..ca753f235ef --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/quakefoot_cyclops.txt @@ -0,0 +1,11 @@ +Name:Quakefoot Cyclops +ManaCost:4 R +Types:Creature Cyclops +PT:4/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, up to two target creatures can't block this turn. +SVar:TrigPump:DB$ Pump | TargetMin$ 0 | TargetMax$ 2 | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature +K:Cycling:1 R +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigCanNotBlock | TriggerDescription$ When you cycle CARDNAME, target creature can't block this turn. +SVar:TrigCanNotBlock:DB$ Pump | ValidTgts$ Creature | KW$ HIDDEN CARDNAME can't block. | TgtPrompt$ Select target creature. | IsCurse$ True +SVar:PlayMain1:TRUE +Oracle:When Quakefoot Cyclops enters the battlefield, up to two target creatures can't block this turn.\nCycling {1}{R} ({1}{R}, Discard this card: Draw a card.)\nWhen you cycle Quakefoot Cyclops, target creature can't block this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/rain_of_revelation.txt b/forge-gui/res/cardsfolder/upcoming/rain_of_revelation.txt new file mode 100644 index 00000000000..dc3fa73acac --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rain_of_revelation.txt @@ -0,0 +1,6 @@ +Name:Rain of Revelation +ManaCost:3 U +Types:Instant +A:SP$ Draw | Cost$ 3 U | NumCards$ 3 | SpellDescription$ Draw three cards, then discard a card. | SubAbility$ DBDiscard +SVar:DBDiscard:DB$Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose +Oracle:Draw three cards, then discard a card. diff --git a/forge-gui/res/cardsfolder/upcoming/rank_officer.txt b/forge-gui/res/cardsfolder/upcoming/rank_officer.txt new file mode 100644 index 00000000000..25de436829a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rank_officer.txt @@ -0,0 +1,8 @@ +Name:Rank Officer +ManaCost:3 B +Types:Creature Zombie Soldier +PT:3/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ DBToken | TriggerDescription$ When CARDNAME enters the battlefield, you may discard a card. If you do, create a 2/2 black Zombie creature token. +SVar:DBToken:AB$ Token | Cost$ Discard<1/Card> | TokenAmount$ 1 | TokenScript$ b_2_2_zombie | TokenOwner$ You | LegacyImage$ b 2 2 zombie mh1 +A:AB$ LoseLife | Cost$ 1 B T ExileFromGrave<1/Creature> | Defined$ Player.Opponent | LifeAmount$ 2 | SpellDescription$ Each opponent loses 2 life. +Oracle:When Rank Officer enters the battlefield, you may discard a card. If you do, create a 2/2 black Zombie creature token.\n{1}{B}, {T}, Exile a creature card from your graveyard: Each opponent loses 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/ransack_the_lab.txt b/forge-gui/res/cardsfolder/upcoming/ransack_the_lab.txt new file mode 100644 index 00000000000..4c5f54f8a7d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ransack_the_lab.txt @@ -0,0 +1,6 @@ +Name:Ransack the Lab +ManaCost:1 B +Types:Sorcery +A:SP$ Dig | Cost$ 1 B | DigNum$ 3 | DestinationZone2$ Graveyard | SpellDescription$ Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. +AI:RemoveDeck:All +Oracle:Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/reap_the_past.txt b/forge-gui/res/cardsfolder/upcoming/reap_the_past.txt new file mode 100644 index 00000000000..02d5a5f92e1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/reap_the_past.txt @@ -0,0 +1,7 @@ +Name:Reap The Past +ManaCost:X R G +Types:Sorcery +A:SP$ ChangeZone | Cost$ X R G | Origin$ Graveyard | Destination$ Hand | ChangeType$ Card.YouOwn | ChangeNum$ X | Hidden$ True | AtRandom$ True | SubAbility$ DBExile | References$ X | SpellDescription$ Return X cards at random from your graveyard to your hand. Exile CARDNAME. +SVar:X:Count$xPaid +SVar:DBExile:DB$ChangeZone | Origin$ Stack | Destination$ Exile +Oracle:Return X cards at random from your graveyard to your hand. Exile Reap The Past. diff --git a/forge-gui/res/cardsfolder/upcoming/recruit_the_worthy.txt b/forge-gui/res/cardsfolder/upcoming/recruit_the_worthy.txt new file mode 100644 index 00000000000..8c4c81b114e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/recruit_the_worthy.txt @@ -0,0 +1,6 @@ +Name:Recruit the Worthy +ManaCost:W +Types:Instant +K:Buyback:3 +A:SP$ Token | Cost$ W | TokenAmount$ 1 | TokenScript$ w_1_1_soldier | TokenOwner$ You | LegacyImage$ w 1 1 soldier mh1 | SpellDescription$ Create a 1/1 white Soldier creature token. +Oracle:Buyback {3} (You may pay an additional {3} as you cast this spell. If you do, put this card into your hand as it resolves.)\nCreate a 1/1 white Soldier creature token. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/reprobation.txt b/forge-gui/res/cardsfolder/upcoming/reprobation.txt new file mode 100644 index 00000000000..a7728ef50a1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/reprobation.txt @@ -0,0 +1,8 @@ +Name:Reprobation +ManaCost:1 W +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature | AILogic$ Curse +S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetPower$ 0 | SetToughness$ 1 | RemoveAllAbilities$ True | AddType$ Coward | Description$ Enchanted creature loses all abilities and is a Coward creature with base power and toughness 0/1. +AI:RemoveDeck:All +Oracle:Enchant creature\nEnchanted creature loses all abilities and is a Coward creature with base power and toughness 0/1. (It keeps all supertypes but loses all other types and creature types.) diff --git a/forge-gui/res/cardsfolder/upcoming/rhox_veteran.txt b/forge-gui/res/cardsfolder/upcoming/rhox_veteran.txt new file mode 100644 index 00000000000..0666de74a7e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rhox_veteran.txt @@ -0,0 +1,8 @@ +Name:Rhox Veteran +ManaCost:3 W +Types:Creature Rhino Soldier +PT:2/4 +K:Battle cry +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigTap | TriggerDescription$ Whenever CARDNAME attacks, tap target creature an opponent controls. +SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls +Oracle:Battle cry (Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn.)\nWhenever Rhox Veteran attacks, tap target creature an opponent controls. diff --git a/forge-gui/res/cardsfolder/upcoming/rime_tender.txt b/forge-gui/res/cardsfolder/upcoming/rime_tender.txt new file mode 100644 index 00000000000..3d9336a8397 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rime_tender.txt @@ -0,0 +1,7 @@ +Name:Rime Tender +ManaCost:1 G +Types:Snow Creature Human Druid +PT:2/2 +A:AB$ Untap | Cost$ T | ValidTgts$ Permanent.Other+Snow | TgtPrompt$ Select another target snow permanent | SpellDescription$ Untap another target snow permanent. +AI:RemoveDeck:Random +Oracle:{T}: Untap another target snow permanent. diff --git a/forge-gui/res/cardsfolder/upcoming/rotwidow_pack.txt b/forge-gui/res/cardsfolder/upcoming/rotwidow_pack.txt new file mode 100644 index 00000000000..14d289193b9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rotwidow_pack.txt @@ -0,0 +1,10 @@ +Name:Rotwidow Pack +ManaCost:2 B G +Types:Creature Spider +PT:2/4 +K:Reach +A:AB$ Token | Cost$ 3 B G ExileFromGrave<1/Creature> | TokenAmount$ 1 | TokenScript$ g_1_2_spider_reach | TokenOwner$ You | LegacyImage$ g 1 2 spider reach mh1 | SubAbility$ DBLoseLife | SpellDescription$ Create a 1/2 green Spider creature token with reach, then each opponent loses 1 life for each Spider you control. +SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ X | References$ X +SVar:X:Count$Valid Spider.YouCtrl +SVar:NeedsToPlayVar:X GE3 +Oracle:Reach\n{3}{B}{G}, Exile a creature card from your graveyard: Create a 1/2 green Spider creature token with reach, then each opponent loses 1 life for each Spider you control. diff --git a/forge-gui/res/cardsfolder/upcoming/saddled_rimestag.txt b/forge-gui/res/cardsfolder/upcoming/saddled_rimestag.txt new file mode 100644 index 00000000000..2c7c2280335 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/saddled_rimestag.txt @@ -0,0 +1,7 @@ +Name:Saddled Rimestag +ManaCost:1 G +Types:Snow Creature Elk +PT:2/2 +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | AddToughness$ 2 | CheckSVar$ X | SVarCompare$ GE1 | Description$ CARDNAME gets +2/+2 as long as you had another creature enter the battlefield under your control this turn. +SVar:X:Count$ThisTurnEntered_Battlefield_Creature.YouCtrl+Other +Oracle:Saddled Rimestag gets +2/+2 as long as you had another creature enter the battlefield under your control this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/scale_up.txt b/forge-gui/res/cardsfolder/upcoming/scale_up.txt index a3534ca333b..0b757d1ddd9 100644 --- a/forge-gui/res/cardsfolder/upcoming/scale_up.txt +++ b/forge-gui/res/cardsfolder/upcoming/scale_up.txt @@ -2,5 +2,5 @@ Name:Scale Up ManaCost:G Types:Sorcery A:SP$ Animate | Cost$ G | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | Power$ 6 | Toughness$ 4 | Colors$ Green | OverwriteColors$ True | Types$ Wurm | SpellDescription$ Until end of turn, target creature you control becomes a green Wurm with base power and toughness 6/4. -A:SP$ AnimateAll | Cost$ 4 G G | PrecostDesc$ Overload | CostDesc$ {4}{G}{G} | ValidCards$ Creature.YouCtrl | Power$ 6 | Toughness$ 4 | Colors$ Green | OverwriteColors$ True | Types$ Wurm | SpellDescription$ Until end of turn, target creature you control becomes a green Wurm with base power and toughness 6/4. +A:SP$ AnimateAll | Cost$ 4 G G | PrecostDesc$ Overload | CostDesc$ {4}{G}{G} | NonBasicSpell$ True | ValidCards$ Creature.YouCtrl | Power$ 6 | Toughness$ 4 | Colors$ Green | OverwriteColors$ True | Types$ Wurm | SpellDescription$ Until end of turn, target creature you control becomes a green Wurm with base power and toughness 6/4. Oracle:Until end of turn, target creature you control becomes a green Wurm with base power and toughness 6/4.\nOverload {4}{G}{G} diff --git a/forge-gui/res/cardsfolder/upcoming/shenanigans.txt b/forge-gui/res/cardsfolder/upcoming/shenanigans.txt new file mode 100644 index 00000000000..bc81bac5970 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/shenanigans.txt @@ -0,0 +1,6 @@ +Name:Shenanigans +ManaCost:1 R +Types:Sorcery +A:SP$ Destroy | Cost$ 1 R | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact. +K:Dredge:1 +Oracle:Destroy target artifact.\nDredge 1 (If you would draw a card, instead you may put exactly one card from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.) diff --git a/forge-gui/res/cardsfolder/upcoming/sisay_weatherlight_captain.txt b/forge-gui/res/cardsfolder/upcoming/sisay_weatherlight_captain.txt new file mode 100644 index 00000000000..1702aaf01f3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sisay_weatherlight_captain.txt @@ -0,0 +1,9 @@ +Name:Sisay, Weatherlight Captain +ManaCost:2 W +Types:Legendary Creature Human Soldier +PT:2/2 +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | References$ X | Description$ Equipped creature gets +1/+1 for each color among permanents you control. +SVar:X:Count$ColorsCtrl Permanent.YouCtrl+Legendary+inZoneBattlefield +A:AB$ ChangeZone | Cost$ W U B R G | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Legendary+cmcLEY | ChangeNum$ 1 | References$ Y | SpellDescription$ Search your library for a legendary permanent card with converted mana cost less than CARDNAME’s power, put that card onto the battlefield, then shuffle your library. +SVar:Y:Count$CardPower +Oracle:Sisay, Weatherlight Captain gets +1/+1 for each color among other legendary permanents you control.\n{W}{U}{B}{R}{G}: Search your library for a legendary permanent card with converted mana cost less than Sisay’s power, put that card onto the battlefield, then shuffle your library. diff --git a/forge-gui/res/cardsfolder/upcoming/smiting_helix.txt b/forge-gui/res/cardsfolder/upcoming/smiting_helix.txt new file mode 100644 index 00000000000..e150b258784 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/smiting_helix.txt @@ -0,0 +1,7 @@ +Name:Smiting Helix +ManaCost:3 B +Types:Sorcery +A:SP$ DealDamage | Cost$ 3 B | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 3 | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals 3 damage to any target and you gain 3 life. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 3 +K:Flashback:R W +Oracle:Smiting Helix deals 3 damage to any target and you gain 3 life.\nFlashback {R}{W} (You may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/upcoming/smoke_shroud.txt b/forge-gui/res/cardsfolder/upcoming/smoke_shroud.txt new file mode 100644 index 00000000000..7cca9abeb0f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/smoke_shroud.txt @@ -0,0 +1,9 @@ +Name:Smoke Shroud +ManaCost:1 U +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Flying | Description$ Enchanted creature gets +1/+1 and has flying. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Ninja+YouCtrl | TriggerZones$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerDescription$ When a Ninja enters the battlefield under your control, you may return CARDNAME from your graveyard to the battlefield attached to that creature. +SVar:TrigReturn:DB$ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | AttachedTo$ TriggeredCard +Oracle:Enchant creature\nEnchanted creature gets +1/+1 and has flying.\nWhen a Ninja enters the battlefield under your control, you may return Smoke Shroud from your graveyard to the battlefield attached to that creature. diff --git a/forge-gui/res/cardsfolder/upcoming/soulherder.txt b/forge-gui/res/cardsfolder/upcoming/soulherder.txt new file mode 100644 index 00000000000..027744d245f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/soulherder.txt @@ -0,0 +1,13 @@ +Name:Soulherder +ManaCost:1 W U +Types:Creature Spirit +PT:1/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Exile | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature is exiled from the battlefield, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +SVar:PlayMain1:TRUE +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ ConjurerExile | OptionalDecider$ You | TriggerDescription$ At the beginning of your end step, you may exile another target creature you control, then return it to the battlefield under its owner's control. +SVar:ConjurerExile:DB$ ChangeZone | ChangeType$ Creature.Other+YouCtrl | ChangeNum$ 1 | Hidden$ True | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ ConjurerReturn +SVar:ConjurerReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +AI:RemoveDeck:All +Oracle:Whenever a creature is exiled from the battlefield, put a +1/+1 counter on Soulherder.\nAt the beginning of your end step, you may exile another target creature you control, then return that card to the battlefield under its owner's control. diff --git a/forge-gui/res/cardsfolder/upcoming/spinehorn_minotaur.txt b/forge-gui/res/cardsfolder/upcoming/spinehorn_minotaur.txt new file mode 100644 index 00000000000..3e8431703f4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spinehorn_minotaur.txt @@ -0,0 +1,7 @@ +Name:Spinehorn Minotaur +ManaCost:2 R +Types:Creature Minotaur Berserker +PT:2/3 +S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Double Strike | CheckSVar$ X | SVarCompare$ GE2 | Description$ As long as you've drawn two or more cards this turn, CARDNAME has double strike. +SVar:X:Count$YouDrewThisTurn +Oracle:As long as you've drawn two or more cards this turn, Spinehorn Minotaur has double strike. diff --git a/forge-gui/res/cardsfolder/upcoming/stirring_address.txt b/forge-gui/res/cardsfolder/upcoming/stirring_address.txt new file mode 100644 index 00000000000..dabf2be4034 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stirring_address.txt @@ -0,0 +1,6 @@ +Name:Stirring Address +ManaCost:1 W +Types:Instant +A:SP$ Pump | Cost$ 1 W | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ +2 | NumDef$ +2 | SpellDescription$ Target creature you control gets +2/+2 until end of turn. +A:SP$ Pump | Cost$ 5 W | PrecostDesc$ Overload | CostDesc$ {5}{W} | NonBasicSpell$ True | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ +2 | NumDef$ +2 | 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$ Each creature you control gets +2/+2 until end of turn. +Oracle:Target creature you control gets +2/+2 until end of turn.\nOverload {5}{W} (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/upcoming/thornado.txt b/forge-gui/res/cardsfolder/upcoming/thornado.txt new file mode 100644 index 00000000000..e883b7fd8c9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/thornado.txt @@ -0,0 +1,6 @@ +Name:Thornado +ManaCost:2 G +Types:Instant +A:SP$ Destroy | Cost$ 2 G | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying | SpellDescription$ Destroy target creature with flying. +K:Cycling:1 G +Oracle:Destroy target creature with flying.\nCycling {1}{G} ({1}{G}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/upcoming/throatseeker.txt b/forge-gui/res/cardsfolder/upcoming/throatseeker.txt new file mode 100644 index 00000000000..4cf546ada03 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/throatseeker.txt @@ -0,0 +1,7 @@ +Name:Throatseeker +ManaCost:2 B +Types:Creature Vampire Ninja +PT:3/2 +S:Mode$ Continuous | Affected$ Ninja.attacking+unblocked | AddKeyword$ Lifelink | Description$ Unblocked attacking Ninjas you control have lifelink. +SVar:PlayMain1:TRUE +Oracle:Unblocked attacking Ninjas you control have lifelink. diff --git a/forge-gui/res/cardsfolder/upcoming/throes_of_chaos.txt b/forge-gui/res/cardsfolder/upcoming/throes_of_chaos.txt new file mode 100644 index 00000000000..c1e6879b49c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/throes_of_chaos.txt @@ -0,0 +1,9 @@ +Name:Throes of Chaos +ManaCost:3 R +Types:Sorcery +K:Cascade +SVar:PlayMain1:TRUE +K:Retrace +A:SP$ Pump | Cost$ 3 R | StackDescription$ None +AI:RemoveDeck:All +Oracle:Cascade (When you cast a spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom of your library in a random order.)\nRetrace (You may cast this card from your graveyard by discarding a land card in addition to paying its other costs.) diff --git a/forge-gui/res/cardsfolder/upcoming/treefolk_umbra.txt b/forge-gui/res/cardsfolder/upcoming/treefolk_umbra.txt new file mode 100644 index 00000000000..d1a3c4f3022 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/treefolk_umbra.txt @@ -0,0 +1,8 @@ +Name:Treefolk Umbra +ManaCost:2 G +Types:Enchantment Aura +K:Enchant creature +K:Totem armor +A:SP$ Attach | Cost$ 2 G | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddToughness$ 2 | AddHiddenKeyword$ CARDNAME assigns combat damage equal to its toughness rather than its power | Description$ Enchanted creature gets +0/+2 and assigns combat damage equal to its toughness rather than its power. +Oracle:Enchant creature\nEnchanted creature gets +0/+2 and assigns combat damage equal to its toughness rather than its power.\nTotem armor (If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.) diff --git a/forge-gui/res/cardsfolder/upcoming/treetop_ambusher.txt b/forge-gui/res/cardsfolder/upcoming/treetop_ambusher.txt new file mode 100644 index 00000000000..ef085db4d45 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/treetop_ambusher.txt @@ -0,0 +1,9 @@ +Name:Treetop Ambusher +ManaCost:1 G +Types:Creature Elf Berserker +PT:2/1 +K:Dash:1 G +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, target creature you control gets +1/+1 until end of turn. +SVar:TrigPump:DB$Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ 1 | NumDef$ 1 +SVar:HasAttackEffect:TRUE +Oracle:Dash {1}{G} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.)\nWhenever Treetop Ambusher attacks, target creature you control gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/tribute_mage.txt b/forge-gui/res/cardsfolder/upcoming/tribute_mage.txt new file mode 100644 index 00000000000..9cf25b454da --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tribute_mage.txt @@ -0,0 +1,7 @@ +Name:Tribute Mage +ManaCost:2 U +Types:Creature Human Wizard +PT:2/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for an artifact card with converted mana cost 2, reveal that card, put it into your hand, then shuffle your library. +SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Artifact.cmcEQ2 | ChangeNum$ 1 | ShuffleNonMandatory$ True +Oracle:When Tribute Mage enters the battlefield, you may search your library for an artifact card with converted mana cost 2, reveal that card, put it into your hand, then shuffle your library. diff --git a/forge-gui/res/cardsfolder/upcoming/trumpeting_herd.txt b/forge-gui/res/cardsfolder/upcoming/trumpeting_herd.txt new file mode 100644 index 00000000000..f5fe639d7ed --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/trumpeting_herd.txt @@ -0,0 +1,6 @@ +Name:Trumpeting Herd +ManaCost:2 G G +Types:Sorcery +A:SP$ Token | Cost$ 2 G G | TokenAmount$ 1 | TokenScript$ g_3_3_elephant | TokenOwner$ You | LegacyImage$ g 3 3 elephant mh1 | SpellDescription$ Create a 3/3 green Elephant creature token. +K:Rebound +Oracle:Create a 3/3 green Elephant creature token.\nRebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.) diff --git a/forge-gui/res/cardsfolder/upcoming/trustworthy_scout.txt b/forge-gui/res/cardsfolder/upcoming/trustworthy_scout.txt new file mode 100644 index 00000000000..8a8df6d01b7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/trustworthy_scout.txt @@ -0,0 +1,6 @@ +Name:Trustworthy Scout +ManaCost:1 W +Types:Creature Human Scout +PT:2/2 +A:AB$ ChangeZone | Cost$ 1 W ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | Origin$ Library | Destination$ Hand | ChangeType$ Card.namedTrustworthy Scout | ChangeNum$ 1 | SpellDescription$ Search your library for a card named Trustworthy Scout, reveal it, put it into your hand, then shuffle your library. +Oracle:{1}{W}, Exile Trustworthy Scout from your graveyard: Search your library for a card named Trustworthy Scout, reveal it, put it into your hand, then shuffle your library. diff --git a/forge-gui/res/cardsfolder/upcoming/twin_silk_spider.txt b/forge-gui/res/cardsfolder/upcoming/twin_silk_spider.txt new file mode 100644 index 00000000000..cc1f05e5929 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/twin_silk_spider.txt @@ -0,0 +1,8 @@ +Name:Twin-Silk Spider +ManaCost:2 G +Types:Creature Spider +PT:1/2 +K:Reach +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/2 green Spider creature token with reach. +SVar:TrigToken:DB$ Token | LegacyImage$ g 1 2 spider reach mh1 | TokenAmount$ 1 | TokenScript$ g_1_2_spider_reach | TokenOwner$ You +Oracle:Reach\nWhen Twin-Silk Spider enters the battlefield, create a 1/2 green Spider creature token with reach. diff --git a/forge-gui/res/cardsfolder/upcoming/twisted_reflection.txt b/forge-gui/res/cardsfolder/upcoming/twisted_reflection.txt new file mode 100644 index 00000000000..dcabd1b3081 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/twisted_reflection.txt @@ -0,0 +1,8 @@ +Name:Twisted Reflection +Types:Instant +ManaCost:1 U +K:Entwine:B +A:SP$ Charm | Cost$ 1 U | Choices$ DBCurse,DBSwitch +SVar:DBCurse:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature to get -6/-0 | NumAtt$ -6 | IsCurse$ True | SpellDescription$ Target creature gets -6/-0 until end of turn. +SVar:DBSwitch:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn. +Oracle:Choose one —\n• Target creature gets -6/-0 until end of turn. \n• Switch target creatures's power and toughness until end of turn.\nEntwine {B} (Choose all if you pay the entwine cost.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/universal_automaton.txt b/forge-gui/res/cardsfolder/upcoming/universal_automaton.txt new file mode 100644 index 00000000000..ef8a5c54135 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/universal_automaton.txt @@ -0,0 +1,6 @@ +Name:Universal Automaton +ManaCost:1 +Types:Artifact Creature Shapeshifter +PT:1/1 +K:Changeling +Oracle:Changeling (This card is every creature type.) diff --git a/forge-gui/res/cardsfolder/upcoming/unsettled_mariner.txt b/forge-gui/res/cardsfolder/upcoming/unsettled_mariner.txt new file mode 100644 index 00000000000..dfac24f6f14 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/unsettled_mariner.txt @@ -0,0 +1,8 @@ +Name:Unsettled Mariner +ManaCost:W U +Types:Creature Shapeshifter +PT:2/2 +K:Changeling +T:Mode$ BecomesTarget | ValidTarget$ You,Permanent.YouCtrl+inZoneBattlefield | ValidSource$ Card.OppCtrl | TriggerZones$ Battlefield | Execute$ TrigCounter | TriggerDescription$ Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. +SVar:TrigCounter:DB$ Counter | Defined$ TriggeredSourceSA | UnlessCost$ 1 | UnlessPayer$ TriggeredSourceSAController +Oracle:Changeling (This card is every creature type.)\nWhenever you or a permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. diff --git a/forge-gui/res/cardsfolder/upcoming/vengeful_devil.txt b/forge-gui/res/cardsfolder/upcoming/vengeful_devil.txt new file mode 100644 index 00000000000..c1a1e48554e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/vengeful_devil.txt @@ -0,0 +1,8 @@ +Name:Vengeful Devil +ManaCost:1 R +Types:Creature Devil +PT:1/1 +K:Haste +A:AB$ DealDamage | Cost$ T | ValidTgts$ Creature,Player | TgtPrompt$ Select any target | NumDmg$ 1 | CheckSVar$ Morbid | SVarCompare$ GE1 | References$ Morbid | SpellDescription$ CARDNAME deals 1 damage to any target. Activate this ability only if a creature died this turn. +SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature +Oracle:Haste\nMorbid — {T}: Vengeful Devil deals 1 damage to any target. Activate this ability only if a creature died this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/vesperlark.txt b/forge-gui/res/cardsfolder/upcoming/vesperlark.txt new file mode 100644 index 00000000000..b4a810ef00a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/vesperlark.txt @@ -0,0 +1,11 @@ +Name:Vesperlark +ManaCost:2 W +Types:Creature Elemental +PT:2/1 +K:Flying +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, return target creature card with power 1 or less from your graveyard to the battlefield. +SVar:TrigChangeZone:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl+powerLE1 | TgtPrompt$ Select target creature card with power 1 or less in your graveyard +K:Evoke:1 W +SVar:NeedsToPlayEvokedVar:Z GE1 +SVar:Z:Count$ValidGraveyard Creature.YouCtrl+powerLE1 +Oracle:Flying\nWhen Vesperlark leaves the battlefield, return target creature card with power 1 or less from your graveyard to the battlefield.\nEvoke {1}{W} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/upcoming/viashino_sandsprinter.txt b/forge-gui/res/cardsfolder/upcoming/viashino_sandsprinter.txt new file mode 100644 index 00000000000..6c0dc9acd25 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/viashino_sandsprinter.txt @@ -0,0 +1,12 @@ +Name:Viashino Sandsprinter +ManaCost:1 R R +Types:Creature Viashino Warrior +PT:4/1 +K:Haste +K:Trample +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigReturn | TriggerDescription$ At the beginning of the end step, return CARDNAME to its owner's hand. +SVar:TrigReturn:DB$ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Hand +SVar:PlayMain1:TRUE +SVar:EndOfTurnLeavePlay:True +K:Cycling:R +Oracle:Trample, haste\nAt the beginning of the end step, return Viashino Sandsprinter to its owner's hand. (Return it only if it's on the battlefield.)\nCycling {R} ({R}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/upcoming/volatile_claws.txt b/forge-gui/res/cardsfolder/upcoming/volatile_claws.txt new file mode 100644 index 00000000000..1572cf3b3fe --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/volatile_claws.txt @@ -0,0 +1,5 @@ +Name:Volatile Claws +ManaCost:2 R +Types:Instant +A:SP$ PumpAll | Cost$ 2 R | ValidCards$ Creature.YouCtrl | NumAtt$ +2 | Types$ AllCreatureTypes | SpellDescription$ Until end of turn, creatures you control get +2/+0 and gain all creature types. +Oracle:Until end of turn, creatures you control get +2/+0 and gain all creature types. diff --git a/forge-gui/res/cardsfolder/upcoming/warteye_witch.txt b/forge-gui/res/cardsfolder/upcoming/warteye_witch.txt new file mode 100644 index 00000000000..5b28599e63d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/warteye_witch.txt @@ -0,0 +1,8 @@ +Name:Warteye Witch +ManaCost:2 B +Types:Creature Goblin Shaman +PT:3/2 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigScry | TriggerDescription$ Whenever CARDNAME or another creature dies, scry 1. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigScry | TriggerController$ TriggeredCardController | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature dies, scry 1. +SVar:TrigScry:DB$ Scry | ScryNum$ 1 +Oracle:Whenever Warteye Witch or another creature dies, scry 1. diff --git a/forge-gui/res/cardsfolder/upcoming/watcher_for_tomorrow.txt b/forge-gui/res/cardsfolder/upcoming/watcher_for_tomorrow.txt new file mode 100644 index 00000000000..785dc23918c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/watcher_for_tomorrow.txt @@ -0,0 +1,8 @@ +Name:Watcher for Tomorrow +ManaCost:1 U +Types:Creature Human Wizard +PT:2/1 +K:Hideaway +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | TriggerController$ TriggeredCardController | Execute$ DBReturn | TriggerDescription$ When Watcher for Tomorrow leaves the battlefield, put the exiled card into its owner's hand. +SVar:DBReturn:DB$ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand +Oracle:Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.)\nWhen Watcher for Tomorrow leaves the battlefield, put the exiled card into its owner's hand. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/windcaller_aven.txt b/forge-gui/res/cardsfolder/upcoming/windcaller_aven.txt new file mode 100644 index 00000000000..473291b9ad5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/windcaller_aven.txt @@ -0,0 +1,9 @@ +Name:Windcaller Aven +ManaCost:4 U U +Types:Creature Bird Wizard +PT:4/3 +K:Flying +K:Cycling:U +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When you cycle CARDNAME, target creature gains flying until end of turn. +SVar:TrigPump:DB$Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Flying +Oracle:Flying\nCycling {U} ({U}, Discard this card: Draw a card.)\nWhen you cycle Windcaller Aven, target creature gains flying until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/winds_of_abandon.txt b/forge-gui/res/cardsfolder/upcoming/winds_of_abandon.txt index f14c79bea93..454f79fbe8a 100644 --- a/forge-gui/res/cardsfolder/upcoming/winds_of_abandon.txt +++ b/forge-gui/res/cardsfolder/upcoming/winds_of_abandon.txt @@ -1,15 +1,10 @@ Name:Winds of Abandon ManaCost:1 W Types:Sorcery - A:SP$ ChangeZone | Cost$ 1 W | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | SubAbility$ DBGetLands | RememberLKI$ True | SpellDescription$ Exile target creature you don’t control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle their libraries. - A:SP$ ChangeZoneAll | Cost$ 4 W W | ChangeType$ Creature.YouDontCtrl | Origin$ Battlefield | Destination$ Exile | RememberLKI$ True | SubAbility$ DBRepeat | PrecostDesc$ Overload | CostDesc$ {4}{W}{W} | 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.") - SVar:DBGetLandsAll:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBGetLandsOne | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True - SVar:DBGetLandsOne:DB$ ChangeZone | Optional$ True | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ X | References$ X | DefinedPlayer$ Player.IsRemembered | ShuffleNonMandatory$ False SVar:X:RememberedLKI$FilterControlledByRemembered_Number$1 - Oracle:Exile target creature you don’t control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle their libraries.\nOverload {4}{W}{W} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of “target” with “each.”) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/winters_rest.txt b/forge-gui/res/cardsfolder/upcoming/winters_rest.txt new file mode 100644 index 00000000000..b6727e0d52f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/winters_rest.txt @@ -0,0 +1,10 @@ +Name:Winter's Rest +ManaCost:1 U +Types:Snow Enchantment Aura +K:Enchant creature +A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ KeepTapped +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigTap | TriggerDescription$ When CARDNAME enters the battlefield, tap enchanted creature. +SVar:TrigTap:DB$ Tap | Defined$ Enchanted +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ HIDDEN CARDNAME doesn't untap during your untap step. | IsPresent$ Permanent.Snow+Other+YouCtrl | Description$ As long as you control another snow permanent, enchanted creature doesn't untap during its controller's untap step. +AI:RemoveDeck:Random +Oracle:Enchant creature\nWhen Winter's Rest enters the battlefield, tap enchanted creature.\nAs long as you control another snow permanent, enchanted creature doesn't untap during its controller's untap step. diff --git a/forge-gui/res/cardsfolder/w/wispmare.txt b/forge-gui/res/cardsfolder/w/wispmare.txt index b094efab928..c3333a18b99 100644 --- a/forge-gui/res/cardsfolder/w/wispmare.txt +++ b/forge-gui/res/cardsfolder/w/wispmare.txt @@ -6,5 +6,6 @@ K:Flying K:Evoke:W T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy target enchantment. SVar:TrigDestroy:DB$Destroy | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment +SVar:NeedsToPlayEvoked:Enchantment.OppCtrl SVar:Picture:http://www.wizards.com/global/images/magic/general/wispmare.jpg Oracle:Flying\nWhen Wispmare enters the battlefield, destroy target enchantment.\nEvoke {W} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/draft/rankings.txt b/forge-gui/res/draft/rankings.txt index 7f8b38be605..47e8b77bd0a 100644 --- a/forge-gui/res/draft/rankings.txt +++ b/forge-gui/res/draft/rankings.txt @@ -1,4 +1,259 @@ //Rank|Name|Rarity|Set +#1|Winds of Abandon|R|MH1 +#2|Serra the Benevolent|M|MH1 +#3|Sword of Truth and Justice|M|MH1 +#4|Pashalik Mons|R|MH1 +#5|Yawgmoth, Thran Physician|M|MH1 +#6|Hexdrinker|M|MH1 +#7|Endling|R|MH1 +#8|Sword of Sinew and Steel|M|MH1 +#9|Genesis|R|MH1 +#10|Ayula's Influence|R|MH1 +#11|Seasoned Pyromancer|M|MH1 +#12|On Thin Ice|R|MH1 +#13|Kess, Dissident Mage|M|MH1 +#14|Force of Virtue|R|MH1 +#15|Deep Forest Hermit|R|MH1 +#16|Cloudshredder Sliver|R|MH1 +#17|Unsettled Mariner|R|MH1 +#18|Future Sight|R|MH1 +#19|Wrenn and Six|M|MH1 +#20|Ayula, Queen Among Bears|R|MH1 +#21|Mob|C|MH1 +#22|Tectonic Reformation|R|MH1 +#23|Spiteful Sliver|R|MH1 +#24|Plague Engineer|R|MH1 +#25|Urza, Lord High Artificer|M|MH1 +#26|Astral Drift|R|MH1 +#27|Fallen Shinobi|R|MH1 +#28|Bazaar Trademage|R|MH1 +#29|Fact or Fiction|U|MH1 +#30|Twisted Reflection|U|MH1 +#31|Battle Screech|U|MH1 +#32|Thundering Djinn|U|MH1 +#33|Etchings of the Chosen|U|MH1 +#34|Giver of Runes|R|MH1 +#35|Firebolt|U|MH1 +#36|Ice-Fang Coatl|R|MH1 +#37|Graveshifter|U|MH1 +#38|Rotwidow Pack|U|MH1 +#39|Smiting Helix|U|MH1 +#40|Hogaak, Arisen Necropolis|R|MH1 +#41|Munitions Expert|U|MH1 +#42|Undead Augur|U|MH1 +#43|Magmatic Sinkhole|C|MH1 +#44|Crashing Footfalls|R|MH1 +#45|Talisman of Creativity|U|MH1 +#46|Talisman of Curiosity|U|MH1 +#47|Talisman of Hierarchy|U|MH1 +#48|Talisman of Resilience|U|MH1 +#49|Talisman of Conviction|U|MH1 +#50|Pyrophobia|C|MH1 +#51|Good-Fortune Unicorn|U|MH1 +#52|Oneirophage|U|MH1 +#53|Soulherder|U|MH1 +#54|Marit Lage's Slumber|R|MH1 +#55|Squirrel Nest|U|MH1 +#56|Regrowth|U|MH1 +#57|Morophon, the Boundless|M|MH1 +#58|Abominable Treefolk|U|MH1 +#59|Exclude|U|MH1 +#60|Urza's Rage|U|MH1 +#61|Mirrodin Besieged|R|MH1 +#62|Defile|C|MH1 +#63|Mist-Syndicate Naga|R|MH1 +#64|Kaya's Guile|R|MH1 +#65|Lesser Masticore|U|MH1 +#66|Sling-Gang Lieutenant|U|MH1 +#67|Feaster of Fools|U|MH1 +#68|Splicer's Skill|U|MH1 +#69|Scrapyard Recombiner|R|MH1 +#70|Dregscape Sliver|U|MH1 +#71|Man-o'-War|C|MH1 +#72|Wing Shards|U|MH1 +#73|Sadistic Obsession|U|MH1 +#74|Windcaller Aven|C|MH1 +#75|Irregular Cohort|C|MH1 +#76|Alpine Guide|U|MH1 +#77|Krosan Tusker|C|MH1 +#78|Forgotten Cave|U|MH1 +#79|Tranquil Thicket|U|MH1 +#80|Dead of Winter|R|MH1 +#81|Ore-Scale Guardian|U|MH1 +#82|Valiant Changeling|U|MH1 +#83|Nantuko Cultivator|U|MH1 +#84|Ranger-Captain of Eos|M|MH1 +#85|Crypt Rats|U|MH1 +#86|Scale Up|U|MH1 +#87|Force of Despair|R|MH1 +#88|Goblin Matron|U|MH1 +#89|Lightning Skelemental|R|MH1 +#90|Saddled Rimestag|U|MH1 +#91|Rime Tender|C|MH1 +#92|Vengeful Devil|U|MH1 +#93|Rhox Veteran|C|MH1 +#94|Wall of Blossoms|U|MH1 +#95|Watcher for Tomorrow|U|MH1 +#96|Reap the Past|R|MH1 +#97|Secluded Steppe|U|MH1 +#98|Lonely Sandbar|U|MH1 +#99|Barren Moor|U|MH1 +#100|Cordial Vampire|R|MH1 +#101|Carrion Feeder|U|MH1 +#102|Enduring Sliver|C|MH1 +#103|Webweaver Changeling|U|MH1 +#104|Ingenious Infiltrator|U|MH1 +#105|Hollowhead Sliver|U|MH1 +#106|Force of Rage|R|MH1 +#107|Mother Bear|C|MH1 +#108|Ravenous Giant|U|MH1 +#109|Lavabelly Sliver|U|MH1 +#110|Waterlogged Grove|R|MH1 +#111|Silent Clearing|R|MH1 +#112|Nurturing Peatland|R|MH1 +#113|Sunbaked Canyon|R|MH1 +#114|Fiery Islet|R|MH1 +#115|Pondering Mage|C|MH1 +#116|Snow-Covered Forest|L|MH1 +#117|Snow-Covered Island|L|MH1 +#118|Conifer Wurm|U|MH1 +#119|Quakefoot Cyclops|C|MH1 +#120|Cleaving Sliver|C|MH1 +#121|First-Sphere Gargantua|C|MH1 +#122|Settle Beyond Reality|C|MH1 +#123|First Sliver's Chosen|U|MH1 +#124|Throatseeker|U|MH1 +#125|Reckless Charge|C|MH1 +#126|Llanowar Tribe|U|MH1 +#127|Throes of Chaos|U|MH1 +#128|Ruination Rioter|U|MH1 +#129|Eladamri's Call|R|MH1 +#130|Archmage's Charm|R|MH1 +#131|King of the Pride|U|MH1 +#132|Mox Tantalite|M|MH1 +#133|Zhalfirin Decoy|U|MH1 +#134|Frostwalk Bastion|U|MH1 +#135|Venomous Changeling|C|MH1 +#136|Goblin War Party|C|MH1 +#137|Savage Swipe|C|MH1 +#138|Prismatic Vista|R|MH1 +#139|Cabal Therapist|R|MH1 +#140|Birthing Boughs|U|MH1 +#141|Twin-Silk Spider|C|MH1 +#142|Treefolk Umbra|C|MH1 +#143|Murasa Behemoth|C|MH1 +#144|Igneous Elemental|C|MH1 +#145|Silumgar Scavenger|C|MH1 +#146|Ransack the Lab|C|MH1 +#147|Putrid Goblin|C|MH1 +#148|Rain of Revelation|C|MH1 +#149|Blizzard Strix|U|MH1 +#150|Recruit the Worthy|C|MH1 +#151|Lancer Sliver|C|MH1 +#152|Moonblade Shinobi|C|MH1 +#153|Vesperlark|U|MH1 +#154|Answered Prayers|C|MH1 +#155|Unearth|C|MH1 +#156|Bladeback Sliver|C|MH1 +#157|Goblin Oriflamme|U|MH1 +#158|String of Disappearances|C|MH1 +#159|Orcish Hellraiser|C|MH1 +#160|Springbloom Druid|C|MH1 +#161|Farmstead Gleaner|U|MH1 +#162|Altar of Dementia|R|MH1 +#163|Tempered Sliver|U|MH1 +#164|Scour All Possibilities|C|MH1 +#165|Impostor of the Sixth Pride|C|MH1 +#166|Prohibit|C|MH1 +#167|Snow-Covered Mountain|L|MH1 +#168|Snow-Covered Swamp|L|MH1 +#169|Snow-Covered Plains|L|MH1 +#170|Cave of Temptation|C|MH1 +#171|Fountain of Ichor|C|MH1 +#172|Winding Way|C|MH1 +#173|Trumpeting Herd|C|MH1 +#174|Bellowing Elk|C|MH1 +#175|Warteye Witch|C|MH1 +#176|Return from Extinction|C|MH1 +#177|Gluttonous Slug|C|MH1 +#178|Winter's Rest|C|MH1 +#179|Phantasmal Form|C|MH1 +#180|Cunning Evasion|U|MH1 +#181|Reprobation|C|MH1 +#182|Phantom Ninja|C|MH1 +#183|Everdream|U|MH1 +#184|Goblin Champion|C|MH1 +#185|Scuttling Sliver|U|MH1 +#186|Pillage|U|MH1 +#187|Changeling Outcast|C|MH1 +#188|Chillerpillar|C|MH1 +#189|Elvish Fury|C|MH1 +#190|Martyr's Soul|C|MH1 +#191|Headless Specter|C|MH1 +#192|Choking Tethers|C|MH1 +#193|Force of Negation|R|MH1 +#194|Amorphous Axe|C|MH1 +#195|Treetop Ambusher|C|MH1 +#196|Glacial Revelation|U|MH1 +#197|Excavating Anurid|C|MH1 +#198|Volatile Claws|C|MH1 +#199|Spinehorn Minotaur|C|MH1 +#200|Bogardan Dragonheart|C|MH1 +#201|Rank Officer|C|MH1 +#202|Azra Smokeshaper|C|MH1 +#203|Smoke Shroud|C|MH1 +#204|Eyekite|C|MH1 +#205|Trustworthy Scout|C|MH1 +#206|Stirring Address|C|MH1 +#207|Shelter|C|MH1 +#208|Ninja of the New Moon|C|MH1 +#209|Universal Automaton|C|MH1 +#210|Faerie Seer|C|MH1 +#211|Tribute Mage|U|MH1 +#212|Spell Snuff|C|MH1 +#213|Umezawa's Charm|C|MH1 +#214|Lava Dart|C|MH1 +#215|Stream of Thought|C|MH1 +#216|Wall of One Thousand Cuts|C|MH1 +#217|Viashino Sandsprinter|C|MH1 +#218|Soul-Strike Technique|C|MH1 +#219|Knight of Old Benalia|C|MH1 +#220|Face of Divinity|U|MH1 +#221|Thornado|C|MH1 +#222|Frostwalla|C|MH1 +#223|Mind Rake|C|MH1 +#224|Ephemerate|C|MH1 +#225|Collector Ouphe|R|MH1 +#226|Goatnap|C|MH1 +#227|Generous Gift|U|MH1 +#228|Sisay, Weatherlight Captain|R|MH1 +#229|Diabolic Edict|C|MH1 +#230|Dismantling Blow|U|MH1 +#231|Nimble Mongoose|C|MH1 +#232|Iceberg Cancrix|C|MH1 +#233|Gilded Light|C|MH1 +#234|Echo of Eons|M|MH1 +#235|Arcum's Astrolabe|C|MH1 +#236|Icehide Golem|U|MH1 +#237|Hall of Heliod's Generosity|R|MH1 +#238|Unbound Flourishing|M|MH1 +#239|Aria of Flame|R|MH1 +#240|Force of Vigor|R|MH1 +#241|Fists of Flame|C|MH1 +#242|Rebuild|U|MH1 +#243|Segovian Angel|C|MH1 +#244|Weather the Storm|C|MH1 +#245|Nature's Chant|C|MH1 +#246|Collected Conjuring|R|MH1 +#247|Nether Spirit|R|MH1 +#248|Goblin Engineer|R|MH1 +#249|Shatter Assumptions|U|MH1 +#250|Geomancer's Gambit|C|MH1 +#251|Shenanigans|C|MH1 +#252|Planebound Accomplice|R|MH1 +#253|Spore Frog|C|MH1 +#254|The First Sliver|M|MH1 +//Rank|Name|Rarity|Set #1|Liliana, Dreadhorde General|M|WAR #2|God-Eternal Oketra|M|WAR #3|Roalesk, Apex Hybrid|M|WAR diff --git a/forge-gui/res/editions/Modern Horizons.txt b/forge-gui/res/editions/Modern Horizons.txt index bb1f6c99c7d..2fa2972acc4 100644 --- a/forge-gui/res/editions/Modern Horizons.txt +++ b/forge-gui/res/editions/Modern Horizons.txt @@ -8,64 +8,130 @@ Type=Other [cards] 1 M Morophon, the Boundless +2 C Answered Prayers 3 R Astral Drift 4 U Battle Screech 5 U Dismantling Blow -8 C Enduring Sliver +6 C Enduring Sliver +7 C Ephemerate +8 U Face of Divinity +9 U First Sliver's Chosen 10 R Force of Virtue 11 U Generous Gift +12 C Gilded Light 13 R Giver of Runes 14 C Impostor of the Sixth Pride +15 C Irregular Cohort 16 U King of the Pride +17 C Knight of Old Benalia +18 C Lancer Sliver 19 C Martyr's Soul +20 R On Thin Ice 21 M Ranger-Captain of Eos +22 C Recruit the Worthy +23 C Reprobation +24 C Rhox Veteran 25 C Segovian Angel 26 M Serra the Benevolent +27 C Settle Beyond Reality +28 C Shelter 29 R Sisay, Weatherlight Captain +30 C Soul-Strike Technique 31 U Splicer's Skill +32 C Stirring Address +33 C Trustworthy Scout 34 U Valiant Changeling +35 U Vesperlark 36 C Wall of One Thousand Cuts 37 R Winds of Abandon 38 U Wing Shards 39 U Zhalfirin Decoy 40 R Archmage's Charm 41 R Bazaar Trademage +42 U Blizzard Strix 43 C Chillerpillar 44 C Choking Tethers +45 U Cunning Evasion +46 M Echo of Eons +47 U Everdream 48 U Exclude +49 C Eyekite 50 U Fact or Fiction +51 C Faerie Seer 52 R Force of Negation 53 R Future Sight +54 C Iceberg Cancrix 55 C Man-o'-War +56 R Marit Lage's Slumber +57 R Mirrodin Besieged +58 R Mist-Syndicate Naga +59 C Moonblade Shinobi +60 U Oneirophage +61 C Phantasmal Form +62 C Phantom Ninja 63 C Pondering Mage 64 C Prohibit +65 C Rain of Revelation +66 U Rebuild 67 C Scour All Possibilities 68 U Scuttling Sliver +69 C Smoke Shroud 70 C Spell Snuff 71 C Stream of Thought 72 C String of Disappearances +73 U Tribute Mage +74 U Twisted Reflection 75 M Urza, Lord High Artificer +76 U Watcher for Tomorrow +77 C Windcaller Aven +78 C Winter's Rest +79 C Azra Smokeshaper 80 R Cabal Therapist +81 U Carrion Feeder 82 C Changeling Outcast +83 R Cordial Vampire 84 U Crypt Rats 85 R Dead of Winter +86 C Defile 87 C Diabolic Edict 88 U Dregscape Sliver +89 R Endling 90 U Feaster of Fools +91 C First-Sphere Gargantua 92 R Force of Despair +93 C Gluttonous Slug +94 U Graveshifter 95 C Headless Specter +96 C Mind Rake +97 C Mob 98 R Nether Spirit +99 C Ninja of the New Moon 100 R Plague Engineer +101 C Putrid Goblin +102 C Rank Officer +103 C Ransack the Lab +104 C Return from Extinction +105 U Sadistic Obsession +106 U Shatter Assumptions +107 C Silumgar Scavenger 108 U Sling-Gang Lieutenant +109 U Smiting Helix +110 U Throatseeker 111 C Umezawa's Charm 112 U Undead Augur +113 C Unearth 114 C Venomous Changeling +115 C Warteye Witch 116 M Yawgmoth, Thran Physician +117 U Alpine Guide 118 R Aria of Flame 119 C Bladeback Sliver +120 C Bogardan Dragonheart +121 C Cleaving Sliver 122 U Firebolt 123 C Fists of Flame 124 R Force of Rage +125 C Geomancer's Gambit 126 C Goatnap 127 C Goblin Champion 128 R Goblin Engineer @@ -73,38 +139,67 @@ Type=Other 130 U Goblin Oriflamme 131 C Goblin War Party 132 U Hollowhead Sliver +133 C Igneous Elemental 134 C Lava Dart +135 C Magmatic Sinkhole 136 C Orcish Hellraiser 137 U Ore-Scale Guardian +138 R Pashalik Mons 139 U Pillage 140 R Planebound Accomplice 141 C Pyrophobia +142 C Quakefoot Cyclops 143 U Ravenous Giant +144 C Reckless Charge 145 M Seasoned Pyromancer +146 C Shenanigans +147 C Spinehorn Minotaur +148 R Spiteful Sliver +149 R Tectonic Reformation 150 U Throes of Chaos +151 U Urza's Rage +152 U Vengeful Devil +153 C Viashino Sandsprinter +154 C Volatile Claws 155 R Ayula, Queen Among Bears 156 R Ayula's Influence +157 C Bellowing Elk 158 R Collector Ouphe +159 U Conifer Wurm 160 R Crashing Footfalls 161 R Deep Forest Hermit 162 C Elvish Fury +163 C Excavating Anurid 164 R Force of Vigor +165 C Frostwalla 166 R Genesis 167 U Glacial Revelation 168 M Hexdrinker +169 C Krosan Tusker +170 U Llanowar Tribe 171 C Mother Bear +172 C Murasa Behemoth 173 U Nantuko Cultivator 174 C Nimble Mongoose 175 U Regrowth +176 C Rime Tender +177 U Saddled Rimestag 178 C Savage Swipe 179 U Scale Up 180 C Spore Frog 181 C Springbloom Druid 182 U Squirrel Nest 183 U Tempered Sliver +184 C Thornado +185 C Treefolk Umbra +186 C Treetop Ambusher +187 C Trumpeting Herd +188 C Twin-Silk Spider 189 M Unbound Flourishing +190 U Wall of Blossoms 191 C Weather the Storm 192 U Webweaver Changeling +193 C Winding Way 194 U Abominable Treefolk 195 R Cloudshredder Sliver 196 R Collected Conjuring @@ -113,6 +208,7 @@ Type=Other 199 R Fallen Shinobi 200 M The First Sliver 201 U Good-Fortune Unicorn +202 R Hogaak, Arisen Necropolis 203 R Ice-Fang Coatl 204 U Ingenious Infiltrator 205 R Kaya's Guile @@ -121,12 +217,20 @@ Type=Other 208 R Lightning Skelemental 209 U Munitions Expert 210 C Nature's Chant +211 R Reap the Past +212 U Rotwidow Pack 213 U Ruination Rioter +214 U Soulherder 215 U Thundering Djinn +216 R Unsettled Mariner 217 M Wrenn and Six 218 R Altar of Dementia +219 C Amorphous Axe 220 C Arcum's Astrolabe +221 U Birthing Boughs 222 U Farmstead Gleaner +223 C Fountain of Ichor +224 U Icehide Golem 225 U Lesser Masticore 226 M Mox Tantalite 227 R Scrapyard Recombiner @@ -137,12 +241,20 @@ Type=Other 232 U Talisman of Curiosity 233 U Talisman of Hierarchy 234 U Talisman of Resilience +235 C Universal Automaton +236 U Barren Moor +237 C Cave of Temptation 238 R Fiery Islet +239 U Forgotten Cave 240 U Frostwalk Bastion +241 R Hall of Heliod's Generosity +242 U Lonely Sandbar 243 R Nurturing Peatland 244 R Prismatic Vista +245 U Secluded Steppe 246 R Silent Clearing 247 R Sunbaked Canyon +248 U Tranquil Thicket 249 R Waterlogged Grove 250 L Snow-Covered Plains 251 L Snow-Covered Island @@ -153,11 +265,22 @@ Type=Other [tokens] -w_4_4_angel_flying_vigilance +b_2_2_zombie c_0_0_a_construct_total_artifacts +c_1_1_a_myr +c_2_2_shapeshifter_changeling +c_3_3_a_golem g_1_1_squirrel -r_1_1_goblin +g_1_2_spider_reach g_2_2_bear -r_1_1_elemental g_3_3_elephant -g_4_4_rhino_trample \ No newline at end of file +g_4_4_rhino_trample +marit_lage +r_1_1_elemental +r_1_1_goblin +r_3_1_elemental_trample_haste +u_1_1_illusion_flying +w_1_1_bird_flying +w_1_1_soldier +w_4_4_angel_flying_vigilance +wb_1_1_spirit_flying \ No newline at end of file diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 4be74394616..164fc2726c2 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -33,6 +33,7 @@ cbLoadCardsLazily = Load Card Scripts Lazily cbLoadHistoricFormats = Load Historic Formats cbWorkshopSyntax = Workshop Syntax Checker cbEnforceDeckLegality = Deck Conformance +cbSideboardForAI = Human Sideboard for AI cbPerformanceMode = Performance Mode cbFilteredHands = Filtered Hands cbImageFetcher = Automatically Download Missing Card Art @@ -86,6 +87,7 @@ nlEnableAICheats = Allow the AI to cheat to gain advantage (for personalities th nlManaBurn = Play with mana burn (from pre-Magic 2010 rules). nlManaLostPrompt = When enabled, you get a warning if passing priority would cause you to lose mana in your mana pool. nlEnforceDeckLegality = Enforces deck legality relevant to each environment (minimum deck sizes, max card count etc). +nlSideboardForAI = Allows users to sideboard with the AIs deck and sideboard in constructed game formats. nlPerformanceMode = Disables additional static abilities checks to speed up the game engine. (Warning: breaks some 'as if had flash' scenarios when casting cards owned by opponents). nlFilteredHands = Generates two starting hands and keeps the one with the closest to average land count for the deck. (Requires restart) nlCloneImgSource = When enabled clones will use their original art instead of the cloned card's art. diff --git a/forge-gui/res/tokenscripts/c_2_2_shapeshifter_changeling.txt b/forge-gui/res/tokenscripts/c_2_2_shapeshifter_changeling.txt new file mode 100644 index 00000000000..50a661a2063 --- /dev/null +++ b/forge-gui/res/tokenscripts/c_2_2_shapeshifter_changeling.txt @@ -0,0 +1,6 @@ +Name:Shapeshifter +ManaCost:no cost +Types:Creature Shapeshifter +PT:2/2 +K:Changeling +Oracle:Changeling (This token is every creature type.) \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/interfaces/IGuiGame.java b/forge-gui/src/main/java/forge/interfaces/IGuiGame.java index 3c9b08f4679..9b53c385e45 100644 --- a/forge-gui/src/main/java/forge/interfaces/IGuiGame.java +++ b/forge-gui/src/main/java/forge/interfaces/IGuiGame.java @@ -144,7 +144,7 @@ public interface IGuiGame { */ List insertInList(String title, T newItem, List oldItems); - List sideboard(CardPool sideboard, CardPool main); + List sideboard(CardPool sideboard, CardPool main, String message); GameEntityView chooseSingleEntityForEffect(String title, List optionList, DelayedReveal delayedReveal, boolean isOptional); List chooseEntitiesForEffect(String title, List optionList, int min, int max, DelayedReveal delayedReveal); diff --git a/forge-gui/src/main/java/forge/match/HostedMatch.java b/forge-gui/src/main/java/forge/match/HostedMatch.java index d42aaa68072..7535a28d20f 100644 --- a/forge-gui/src/main/java/forge/match/HostedMatch.java +++ b/forge-gui/src/main/java/forge/match/HostedMatch.java @@ -79,6 +79,7 @@ public class HostedMatch { gameRules.setPlayForAnte(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE)); gameRules.setMatchAnteRarity(FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE_MATCH_RARITY)); gameRules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN)); + gameRules.setSideboardForAI(FModel.getPreferences().getPrefBoolean(FPref.MATCH_SIDEBOARD_FOR_AI)); gameRules.setCanCloneUseTargetsImage(FModel.getPreferences().getPrefBoolean(FPref.UI_CLONE_MODE_SOURCE)); return gameRules; } diff --git a/forge-gui/src/main/java/forge/net/server/NetGuiGame.java b/forge-gui/src/main/java/forge/net/server/NetGuiGame.java index 4d1174c1760..73fe66fc626 100644 --- a/forge-gui/src/main/java/forge/net/server/NetGuiGame.java +++ b/forge-gui/src/main/java/forge/net/server/NetGuiGame.java @@ -234,8 +234,8 @@ public class NetGuiGame extends AbstractGuiGame { } @Override - public List sideboard(final CardPool sideboard, final CardPool main) { - return sendAndWait(ProtocolMethod.sideboard, sideboard, main); + public List sideboard(final CardPool sideboard, final CardPool main, final String message) { + return sendAndWait(ProtocolMethod.sideboard, sideboard, main, message); } @Override diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 8ec57be16e6..c011bccd12e 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -209,11 +209,10 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont } @Override - public List sideboard(final Deck deck, final GameType gameType) { + public List sideboard(final Deck deck, final GameType gameType, String message) { CardPool sideboard = deck.get(DeckSection.Sideboard); if (sideboard == null) { - // Use an empty cardpool instead of null for 75/0 sideboarding - // scenario. + // Use an empty cardpool instead of null for 75/0 sideboarding scenario. sideboard = new CardPool(); } @@ -253,7 +252,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont // Sideboard rules have changed for M14, just need to consider min // maindeck and max sideboard sizes // No longer need 1:1 sideboarding in non-limited formats - Object resp = getGui().sideboard(sideboard, main); + Object resp = getGui().sideboard(sideboard, main, message); if (resp instanceof List && !((List) resp).isEmpty() && ((List) resp).get(0) instanceof PaperCard) { diff --git a/forge-gui/src/main/java/forge/properties/ForgePreferences.java b/forge-gui/src/main/java/forge/properties/ForgePreferences.java index 8caea6fe279..747392138d7 100644 --- a/forge-gui/src/main/java/forge/properties/ForgePreferences.java +++ b/forge-gui/src/main/java/forge/properties/ForgePreferences.java @@ -156,6 +156,7 @@ public class ForgePreferences extends PreferencesStore { SUBMENU_SETTINGS ("false"), SUBMENU_UTILITIES ("false"), + MATCH_SIDEBOARD_FOR_AI("true"), // TODO What do when AI knows how to SIdeboard? ENFORCE_DECK_LEGALITY ("true"), PERFORMANCE_MODE ("false"), FILTERED_HANDS ("false"),