diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml
index 6f7b308bc65..fd6d3d9f5b9 100644
--- a/Mage.Client/pom.xml
+++ b/Mage.Client/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-client
@@ -133,7 +133,7 @@
org.apache.xmlgraphics
batik-transcoder
- 1.17
+ 1.19
diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
index 82630a8a771..5520c619d1b 100644
--- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
+++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
@@ -3523,7 +3523,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
dialog.txtImageFolderPath.setText(path);
updateCache(KEY_CARD_IMAGES_PATH, path);
}
- load(prefs, dialog.cbSaveToZipFiles, KEY_CARD_IMAGES_SAVE_TO_ZIP, "true");
+ load(prefs, dialog.cbSaveToZipFiles, KEY_CARD_IMAGES_SAVE_TO_ZIP, "true", "false");
dialog.cbPreferredImageLanguage.setSelectedItem(MageFrame.getPreferences().get(KEY_CARD_IMAGES_PREF_LANGUAGE, CardLanguage.ENGLISH.getCode()));
// rendering settings
@@ -3713,7 +3713,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
}
public static boolean isSaveImagesToZip() {
- return PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_SAVE_TO_ZIP, "true").equals("true");
+ return PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_SAVE_TO_ZIP, "false").equals("true");
}
private static void load(Preferences prefs, JCheckBox checkBox, String propName, String yesValue) {
diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java
index c4cabe6430a..4540ca065f4 100644
--- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java
+++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java
@@ -113,7 +113,8 @@ public class GathererSets implements Iterable {
"OTC", "OTP", "BIG", "MH3", "M3C", "ACR", "BLB", "BLC", "DSK", "DSC",
"MB2", "FDN", "INR", "J25", "DRC", "DFT", "TDC", "TDM", "FCA", "FIC",
"FIN", "SIS", "SIR", "SLD", "AKR", "MD1", "ANB", "LTC", "BRR", "HA1",
- "HA2", "HA3", "HA4", "HA5", "ZNC", "EOE", "EOC", "SPE", "TLA", "EOS"
+ "HA2", "HA3", "HA4", "HA5", "ZNC", "EOE", "EOC", "SPE", "TLA", "EOS",
+ "MAR", "SPM"
// "HHO", "ANA" -- do not exist on gatherer
};
diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java
index 65d7719b7c2..1c3b3767fca 100644
--- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java
+++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java
@@ -535,7 +535,7 @@ public class ScryfallImageSupportCards {
add("SCD"); // Starter Commander Decks
add("PW23"); // Wizards Play Network 2023
add("P23"); // Judge Gift Cards 2023
- add("SLC"); // Secret Lair 30th Anniversary Countdown Kit
+ add("SLC"); // Secret Lair Countdown
add("DMR"); // Dominaria Remastered
add("ONE"); // Phyrexia: All Will Be One
add("ONC"); // Phyrexia: All Will Be One Commander
@@ -612,8 +612,10 @@ public class ScryfallImageSupportCards {
add("EOS"); // Edge of Eternities: Stellar Sights
add("SPM"); // Marvel's Spider-Man
add("SPE"); // Marvel's Spider-Man Eternal
+ add("MAR"); // Marvel Universe
add("TLA"); // Avatar: The Last Airbender
add("TLE"); // Avatar: The Last Airbender Eternal
+ add("ECL"); // Lorwyn Eclipsed
// Custom sets using Scryfall images - must provide a direct link for each card in directDownloadLinks
add("CALC"); // Custom Alchemized versions of existing cards
diff --git a/Mage.Common/pom.xml b/Mage.Common/pom.xml
index d2935eb53cc..cb97ffe663d 100644
--- a/Mage.Common/pom.xml
+++ b/Mage.Common/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-common
diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java
index 7aef255e537..2ec66be556c 100644
--- a/Mage.Common/src/main/java/mage/utils/MageVersion.java
+++ b/Mage.Common/src/main/java/mage/utils/MageVersion.java
@@ -17,8 +17,8 @@ public class MageVersion implements Serializable, Comparable {
// * launcher gives priority to 1.4.48 instead 1.4.48-any-text, so don't use empty release info
public static final int MAGE_VERSION_MAJOR = 1;
public static final int MAGE_VERSION_MINOR = 4;
- public static final int MAGE_VERSION_RELEASE = 57;
- public static final String MAGE_VERSION_RELEASE_INFO = "V2"; // V1, V1a, V1b for releases; V1-beta3, V1-beta4 for betas
+ public static final int MAGE_VERSION_RELEASE = 58;
+ public static final String MAGE_VERSION_RELEASE_INFO = "V1"; // V1, V1a, V1b for releases; V1-beta3, V1-beta4 for betas
// strict mode
// Each update requires a strict version
diff --git a/Mage.Plugins/Mage.Counter.Plugin/pom.xml b/Mage.Plugins/Mage.Counter.Plugin/pom.xml
index 01eb53581af..68c80d9c48c 100644
--- a/Mage.Plugins/Mage.Counter.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Counter.Plugin/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-plugins
- 1.4.57
+ 1.4.58
mage-counter-plugin
diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml
index bb34aa35fd1..f8980d2b9fc 100644
--- a/Mage.Plugins/pom.xml
+++ b/Mage.Plugins/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-plugins
diff --git a/Mage.Reports/pom.xml b/Mage.Reports/pom.xml
index ad07b817fe5..8f82b0c0d43 100644
--- a/Mage.Reports/pom.xml
+++ b/Mage.Reports/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-reports
diff --git a/Mage.Server.Console/pom.xml b/Mage.Server.Console/pom.xml
index 83cc4306e94..ff5221f784b 100644
--- a/Mage.Server.Console/pom.xml
+++ b/Mage.Server.Console/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-server-console
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
index c7e540478b8..99d28c52c5f 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-deck-constructed
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AbstractCommander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AbstractCommander.java
index 50468b91552..b90b5150ad1 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AbstractCommander.java
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/AbstractCommander.java
@@ -27,6 +27,8 @@ public abstract class AbstractCommander extends Constructed {
private static List validators = Arrays.asList(
PartnerValidator.instance,
+ PartnerSurvivorsValidator.instance,
+ PartnerFatherAndSonValidator.instance,
FriendsForeverValidator.instance,
PartnerWithValidator.instance,
ChooseABackgroundValidator.instance,
diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
index d4dd4f092b5..06ffb76f88b 100644
--- a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
+++ b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-deck-limited
diff --git a/Mage.Server.Plugins/Mage.Game.BrawlDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.BrawlDuel/pom.xml
index a9b9a9dff43..f026b848ee9 100644
--- a/Mage.Server.Plugins/Mage.Game.BrawlDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.BrawlDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-brawlduel
diff --git a/Mage.Server.Plugins/Mage.Game.BrawlFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.BrawlFreeForAll/pom.xml
index 924b17f9daf..cd4735e91e0 100644
--- a/Mage.Server.Plugins/Mage.Game.BrawlFreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.BrawlFreeForAll/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-brawlfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml
index f269b29868d..85e4e52dad6 100644
--- a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-canadianhighlanderduel
diff --git a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml
index 18459996ee6..30cc9fa1bc0 100644
--- a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-commanderduel
diff --git a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml
index 90440eae253..0635db09a07 100644
--- a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-commanderfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/pom.xml
index 61c4eee4421..3285a81a507 100644
--- a/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CustomPillarOfTheParunsDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-custompillaroftheparunsduel
diff --git a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
index 33c2188d519..1e3886250ef 100644
--- a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-freeforall
diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeformCommanderDuel/pom.xml
index 3b3b8d02a2c..a6d4547c225 100644
--- a/Mage.Server.Plugins/Mage.Game.FreeformCommanderDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-freeformcommanderduel
diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml
index a8fdeac89a2..26b07ac05d0 100644
--- a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-freeformcommanderfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/pom.xml
index 9db9b8620b5..af31c690d34 100644
--- a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-freeformunlimitedcommander
@@ -23,7 +23,7 @@
org.mage
mage-game-freeformcommanderfreeforall
- 1.4.57
+ 1.4.58
compile
diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
index 07d7171de27..c091414cb2d 100644
--- a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-momirduel
diff --git a/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml
index 8a9d7ea5d46..b05ca7d5439 100644
--- a/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-momirfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.OathbreakerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.OathbreakerDuel/pom.xml
index 4cb658b9b42..229193fae5c 100644
--- a/Mage.Server.Plugins/Mage.Game.OathbreakerDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.OathbreakerDuel/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-oathbreakerduel
@@ -22,7 +22,7 @@
org.mage
mage-game-oathbreakerfreeforall
- 1.4.57
+ 1.4.58
compile
diff --git a/Mage.Server.Plugins/Mage.Game.OathbreakerFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.OathbreakerFreeForAll/pom.xml
index 47cb4ce8bb9..24b592cebd5 100644
--- a/Mage.Server.Plugins/Mage.Game.OathbreakerFreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.OathbreakerFreeForAll/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-oathbreakerfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml
index 91a3176b885..7c1104886bd 100644
--- a/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-pennydreadfulcommanderfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml
index 0f53a19a16e..f2996c26cab 100644
--- a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-tinyleadersduel
diff --git a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
index 205565820ef..9a249740d9f 100644
--- a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-game-twoplayerduel
diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml
index 71a45bc1577..3e4e795a3cc 100644
--- a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-player-ai-draftbot
diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
index 5dc6a5b7b7a..fc4350102a2 100644
--- a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-player-ai-ma
diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml
index 80eda4b4025..9be4910e064 100644
--- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-player-ai
diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml
index 51e7608305d..961dd1320a8 100644
--- a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-player-ai-mcts
diff --git a/Mage.Server.Plugins/Mage.Player.Human/pom.xml b/Mage.Server.Plugins/Mage.Player.Human/pom.xml
index 921c136dd8a..cbb51479701 100644
--- a/Mage.Server.Plugins/Mage.Player.Human/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.Human/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-player-human
diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
index 8501c5e0d54..721499c1f3d 100644
--- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-tournament-boosterdraft
diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/PauperCube.java b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/PauperCube.java
index 28f4bbb6f47..c8fe8c057a2 100644
--- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/PauperCube.java
+++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/PauperCube.java
@@ -15,411 +15,455 @@ public class PauperCube extends DraftCube {
public PauperCube() {
super("The Pauper Cube", "", 2025, 5, 7);
- cubeCards.add(new CardIdentity("Academy Journeymage", ""));
- cubeCards.add(new CardIdentity("Act of Treason", ""));
- cubeCards.add(new CardIdentity("Adventuring Gear", ""));
- cubeCards.add(new CardIdentity("Aerie Bowmasters", ""));
- cubeCards.add(new CardIdentity("Aerie Ouphes", ""));
- cubeCards.add(new CardIdentity("Aether Adept", ""));
+ cubeCards.add(new CardIdentity("Abrade", ""));
+ cubeCards.add(new CardIdentity("Abraded Bluffs", ""));
+ cubeCards.add(new CardIdentity("Abundant Harvest", ""));
+ cubeCards.add(new CardIdentity("Accursed Marauder", ""));
+ cubeCards.add(new CardIdentity("Aerie Auxiliary", ""));
+ cubeCards.add(new CardIdentity("Aether Chaser", ""));
+ cubeCards.add(new CardIdentity("Aether Poisoner", ""));
cubeCards.add(new CardIdentity("Aethersnipe", ""));
- cubeCards.add(new CardIdentity("Agony Warp", ""));
- cubeCards.add(new CardIdentity("Ambush Viper", ""));
- cubeCards.add(new CardIdentity("Angelic Purge", ""));
- cubeCards.add(new CardIdentity("Arachnus Web", ""));
- cubeCards.add(new CardIdentity("Arc Lightning", ""));
- cubeCards.add(new CardIdentity("Armillary Sphere", ""));
- cubeCards.add(new CardIdentity("Arrest", ""));
- cubeCards.add(new CardIdentity("Ash Barrens", ""));
+ cubeCards.add(new CardIdentity("Ainok Bond-Kin", ""));
+ cubeCards.add(new CardIdentity("Alabaster Host Intercessor", ""));
+ cubeCards.add(new CardIdentity("Ambitious Assault", ""));
+ cubeCards.add(new CardIdentity("Ancestral Blade", ""));
+ cubeCards.add(new CardIdentity("Annoyed Altisaur", ""));
+ cubeCards.add(new CardIdentity("Arbor Elf", ""));
+ cubeCards.add(new CardIdentity("Archaeomancer", ""));
+ cubeCards.add(new CardIdentity("Ardent Elementalist", ""));
+ cubeCards.add(new CardIdentity("Ardenvale Tactician", ""));
+ cubeCards.add(new CardIdentity("Armadillo Cloak", ""));
+ cubeCards.add(new CardIdentity("Arms of Hadar", ""));
cubeCards.add(new CardIdentity("Ashes to Ashes", ""));
- cubeCards.add(new CardIdentity("Assault Zeppelid", ""));
- cubeCards.add(new CardIdentity("Attended Knight", ""));
- cubeCards.add(new CardIdentity("Auger Spree", ""));
- cubeCards.add(new CardIdentity("Augur of Bolas", ""));
- cubeCards.add(new CardIdentity("Aven Riftwatcher", ""));
- cubeCards.add(new CardIdentity("Aven Surveyor", ""));
- cubeCards.add(new CardIdentity("Azorius Guildgate", ""));
- cubeCards.add(new CardIdentity("Baloth Gorger", ""));
- cubeCards.add(new CardIdentity("Barbed Lightning", ""));
- cubeCards.add(new CardIdentity("Basking Rootwalla", ""));
+ cubeCards.add(new CardIdentity("Azorius Chancery", ""));
+ cubeCards.add(new CardIdentity("Bannerhide Krushok", ""));
+ cubeCards.add(new CardIdentity("Barbed Batterfist", ""));
+ cubeCards.add(new CardIdentity("Basilica Screecher", ""));
+ cubeCards.add(new CardIdentity("Basilisk Gate", ""));
+ cubeCards.add(new CardIdentity("Basking Broodscale", ""));
cubeCards.add(new CardIdentity("Battle Screech", ""));
cubeCards.add(new CardIdentity("Beetleback Chief", ""));
- cubeCards.add(new CardIdentity("Beetleform Mage", ""));
- cubeCards.add(new CardIdentity("Beneath the Sands", ""));
+ cubeCards.add(new CardIdentity("Behold the Multiverse", ""));
cubeCards.add(new CardIdentity("Blastoderm", ""));
- cubeCards.add(new CardIdentity("Blazing Torch", ""));
+ cubeCards.add(new CardIdentity("Blessed Hippogriff", ""));
cubeCards.add(new CardIdentity("Blightning", ""));
- cubeCards.add(new CardIdentity("Blinding Beam", ""));
- cubeCards.add(new CardIdentity("Blink of an Eye", ""));
- cubeCards.add(new CardIdentity("Bloodfell Caves", ""));
- cubeCards.add(new CardIdentity("Blossoming Sands", ""));
- cubeCards.add(new CardIdentity("Bonded Construct", ""));
- cubeCards.add(new CardIdentity("Bonds of Faith", ""));
+ cubeCards.add(new CardIdentity("Blood Fountain", ""));
+ cubeCards.add(new CardIdentity("Bloodwater Entity", ""));
+ cubeCards.add(new CardIdentity("Bloom Hulk", ""));
+ cubeCards.add(new CardIdentity("Body Dropper", ""));
+ cubeCards.add(new CardIdentity("Bogardan Dragonheart", ""));
+ cubeCards.add(new CardIdentity("Bonder's Ornament", ""));
+ cubeCards.add(new CardIdentity("Bone Picker", ""));
cubeCards.add(new CardIdentity("Bonesplitter", ""));
- cubeCards.add(new CardIdentity("Boros Guildgate", ""));
+ cubeCards.add(new CardIdentity("Boros Elite", ""));
+ cubeCards.add(new CardIdentity("Boros Garrison", ""));
cubeCards.add(new CardIdentity("Borrowed Grace", ""));
+ cubeCards.add(new CardIdentity("Botanical Plaza", ""));
+ cubeCards.add(new CardIdentity("Bountiful Landscape", ""));
+ cubeCards.add(new CardIdentity("Brainstorm", ""));
+ cubeCards.add(new CardIdentity("Bramble Wurm", ""));
cubeCards.add(new CardIdentity("Branching Bolt", ""));
- cubeCards.add(new CardIdentity("Brazen Wolves", ""));
+ cubeCards.add(new CardIdentity("Bristling Backwoods", ""));
+ cubeCards.add(new CardIdentity("Bubble Snare", ""));
cubeCards.add(new CardIdentity("Burning-Tree Emissary", ""));
cubeCards.add(new CardIdentity("Burst Lightning", ""));
- cubeCards.add(new CardIdentity("Butcher Ghoul", ""));
- cubeCards.add(new CardIdentity("Cage of Hands", ""));
- cubeCards.add(new CardIdentity("Calcite Snapper", ""));
- cubeCards.add(new CardIdentity("Call of the Conclave", ""));
- cubeCards.add(new CardIdentity("Call the Cavalry", ""));
+ cubeCards.add(new CardIdentity("Bushwhack", ""));
+ cubeCards.add(new CardIdentity("Candy Grapple", ""));
+ cubeCards.add(new CardIdentity("Candy Trail", ""));
cubeCards.add(new CardIdentity("Capsize", ""));
- //cubeCards.add(new CardIdentity("Carnivorous Death-Parrot", ""));
- cubeCards.add(new CardIdentity("Cartouche of Strength", ""));
+ cubeCards.add(new CardIdentity("Captured by Lagacs", ""));
+ cubeCards.add(new CardIdentity("Carnophage", ""));
+ cubeCards.add(new CardIdentity("Carrier Thrall", ""));
+ cubeCards.add(new CardIdentity("Carrion Feeder", ""));
+ cubeCards.add(new CardIdentity("Cartouche of Solidarity", ""));
+ cubeCards.add(new CardIdentity("Cast Down", ""));
+ cubeCards.add(new CardIdentity("Cathar Commando", ""));
cubeCards.add(new CardIdentity("Cavern Harpy", ""));
- cubeCards.add(new CardIdentity("Centaur Healer", ""));
cubeCards.add(new CardIdentity("Chain Lightning", ""));
- cubeCards.add(new CardIdentity("Chainer's Edict", ""));
- //cubeCards.add(new CardIdentity("Chivalrous Chevalier", ""));
- cubeCards.add(new CardIdentity("Cinder Barrens", ""));
- cubeCards.add(new CardIdentity("Citanul Woodreaders", ""));
- cubeCards.add(new CardIdentity("Claustrophobia", ""));
- cubeCards.add(new CardIdentity("Clay Statue", ""));
- cubeCards.add(new CardIdentity("Cloaked Siren", ""));
- cubeCards.add(new CardIdentity("Clutch of Currents", ""));
+ cubeCards.add(new CardIdentity("Chitin Gravestalker", ""));
+ cubeCards.add(new CardIdentity("Cindering Cutthroat", ""));
+ cubeCards.add(new CardIdentity("Clawing Torment", ""));
+ cubeCards.add(new CardIdentity("Clockwork Percussionist", ""));
+ cubeCards.add(new CardIdentity("Cloudkin Seer", ""));
cubeCards.add(new CardIdentity("Coalition Honor Guard", ""));
- //cubeCards.add(new CardIdentity("Cogwork Librarian", ""));
- cubeCards.add(new CardIdentity("Colossal Might", ""));
- //cubeCards.add(new CardIdentity("Common Iguana", ""));
+ cubeCards.add(new CardIdentity("Coiling Oracle", ""));
+ cubeCards.add(new CardIdentity("Colossal Dreadmask", ""));
+ cubeCards.add(new CardIdentity("Combat Professor", ""));
cubeCards.add(new CardIdentity("Compulsive Research", ""));
- cubeCards.add(new CardIdentity("Compulsory Rest", ""));
- cubeCards.add(new CardIdentity("Consume Strength", ""));
- cubeCards.add(new CardIdentity("Corrupted Zendikon", ""));
+ cubeCards.add(new CardIdentity("Conclave Naturalists", ""));
+ cubeCards.add(new CardIdentity("Condescend", ""));
+ cubeCards.add(new CardIdentity("Conduit Goblin", ""));
+ cubeCards.add(new CardIdentity("Conduit Pylons", ""));
+ cubeCards.add(new CardIdentity("Consider", ""));
+ cubeCards.add(new CardIdentity("Contagious Vorrac", ""));
+ cubeCards.add(new CardIdentity("Contaminated Landscape", ""));
cubeCards.add(new CardIdentity("Counterspell", ""));
- cubeCards.add(new CardIdentity("Court Hussar", ""));
- cubeCards.add(new CardIdentity("Crippling Fatigue", ""));
+ cubeCards.add(new CardIdentity("Cruel Witness", ""));
cubeCards.add(new CardIdentity("Crypt Rats", ""));
- cubeCards.add(new CardIdentity("Crystallization", ""));
- cubeCards.add(new CardIdentity("Cunning Strike", ""));
- cubeCards.add(new CardIdentity("Curse of Chains", ""));
cubeCards.add(new CardIdentity("Custodi Squire", ""));
- cubeCards.add(new CardIdentity("Daring Skyjek", ""));
- cubeCards.add(new CardIdentity("Dauntless Cathar", ""));
- cubeCards.add(new CardIdentity("Dead Reveler", ""));
- cubeCards.add(new CardIdentity("Dead Weight", ""));
- cubeCards.add(new CardIdentity("Deadeye Tormentor", ""));
+ cubeCards.add(new CardIdentity("Dark-Dweller Oracle", ""));
+ cubeCards.add(new CardIdentity("Dauntless Unity", ""));
+ cubeCards.add(new CardIdentity("Dauthi Horror", ""));
+ cubeCards.add(new CardIdentity("Dauthi Slayer", ""));
cubeCards.add(new CardIdentity("Death Denied", ""));
- cubeCards.add(new CardIdentity("Deathbloom Thallid", ""));
+ cubeCards.add(new CardIdentity("Deceptive Landscape", ""));
cubeCards.add(new CardIdentity("Deep Analysis", ""));
- cubeCards.add(new CardIdentity("Deprive", ""));
- cubeCards.add(new CardIdentity("Depths of Desire", ""));
- cubeCards.add(new CardIdentity("Deputy of Acquittals", ""));
+ cubeCards.add(new CardIdentity("Deftblade Elite", ""));
+ cubeCards.add(new CardIdentity("Deranged Assistant", ""));
+ cubeCards.add(new CardIdentity("Desecrator Hag", ""));
cubeCards.add(new CardIdentity("Desert", ""));
- cubeCards.add(new CardIdentity("Devour Flesh", ""));
- cubeCards.add(new CardIdentity("Diabolic Edict", ""));
- cubeCards.add(new CardIdentity("Dimir Guildgate", ""));
+ cubeCards.add(new CardIdentity("Dimir Aqueduct", ""));
+ cubeCards.add(new CardIdentity("Dimir Guildmage", ""));
cubeCards.add(new CardIdentity("Dinrova Horror", ""));
cubeCards.add(new CardIdentity("Disfigure", ""));
cubeCards.add(new CardIdentity("Dismal Backwater", ""));
- cubeCards.add(new CardIdentity("Disowned Ancestor", ""));
+ cubeCards.add(new CardIdentity("Displace", ""));
+ cubeCards.add(new CardIdentity("Dog Umbra", ""));
+ cubeCards.add(new CardIdentity("Dog Walker", ""));
cubeCards.add(new CardIdentity("Doom Blade", ""));
cubeCards.add(new CardIdentity("Doomed Traveler", ""));
- cubeCards.add(new CardIdentity("Dragon Fodder", ""));
- cubeCards.add(new CardIdentity("Dusk Legion Zealot", ""));
- cubeCards.add(new CardIdentity("Dynacharge", ""));
- cubeCards.add(new CardIdentity("Eager Construct", ""));
- cubeCards.add(new CardIdentity("Eldrazi Devastator", ""));
+ cubeCards.add(new CardIdentity("Dread Return", ""));
+ cubeCards.add(new CardIdentity("Dreg Mangler", ""));
+ cubeCards.add(new CardIdentity("Eagles of the North", ""));
+ cubeCards.add(new CardIdentity("Ecstatic Awakener", ""));
+ cubeCards.add(new CardIdentity("Eldrazi Repurposer", ""));
cubeCards.add(new CardIdentity("Eldrazi Skyspawner", ""));
- cubeCards.add(new CardIdentity("Elephant Ambush", ""));
- cubeCards.add(new CardIdentity("Elephant Guide", ""));
cubeCards.add(new CardIdentity("Elite Vanguard", ""));
- cubeCards.add(new CardIdentity("Emperor Crocodile", ""));
- cubeCards.add(new CardIdentity("Epic Confrontation", ""));
- cubeCards.add(new CardIdentity("Errant Ephemeron", ""));
- cubeCards.add(new CardIdentity("Evincar's Justice", ""));
- cubeCards.add(new CardIdentity("Evolving Wilds", ""));
- //cubeCards.add(new CardIdentity("Extremely Slow Zombie", ""));
+ cubeCards.add(new CardIdentity("Elvish Mystic", ""));
+ cubeCards.add(new CardIdentity("Ephemerate", ""));
+ cubeCards.add(new CardIdentity("Eroded Canyon", ""));
+ cubeCards.add(new CardIdentity("Escape Tunnel", ""));
+ cubeCards.add(new CardIdentity("Evolution Witness", ""));
+ cubeCards.add(new CardIdentity("Exclude", ""));
+ cubeCards.add(new CardIdentity("Experiment One", ""));
cubeCards.add(new CardIdentity("Faceless Butcher", ""));
+ cubeCards.add(new CardIdentity("Faerie Guidemother", ""));
+ cubeCards.add(new CardIdentity("Faerie Seer", ""));
cubeCards.add(new CardIdentity("Faith's Fetters", ""));
+ cubeCards.add(new CardIdentity("Faithful Watchdog", ""));
cubeCards.add(new CardIdentity("Falkenrath Noble", ""));
cubeCards.add(new CardIdentity("Fanatical Firebrand", ""));
- cubeCards.add(new CardIdentity("Feeling of Dread", ""));
- cubeCards.add(new CardIdentity("Fervent Cathar", ""));
+ cubeCards.add(new CardIdentity("Farseek", ""));
+ cubeCards.add(new CardIdentity("Feed the Swarm", ""));
+ cubeCards.add(new CardIdentity("Feign Death", ""));
+ cubeCards.add(new CardIdentity("Fertile Ground", ""));
+ cubeCards.add(new CardIdentity("Filigree Familiar", ""));
+ cubeCards.add(new CardIdentity("Fireball", ""));
+ cubeCards.add(new CardIdentity("Fireblade Artist", ""));
+ cubeCards.add(new CardIdentity("Fireblast", ""));
cubeCards.add(new CardIdentity("Firebolt", ""));
+ cubeCards.add(new CardIdentity("Firebrand Archer", ""));
cubeCards.add(new CardIdentity("Fireslinger", ""));
+ cubeCards.add(new CardIdentity("First-Sphere Gargantua", ""));
+ cubeCards.add(new CardIdentity("Flame Slash", ""));
cubeCards.add(new CardIdentity("Flayer Husk", ""));
- cubeCards.add(new CardIdentity("Flurry of Horns", ""));
- cubeCards.add(new CardIdentity("Forked Bolt", ""));
- cubeCards.add(new CardIdentity("Forsaken Sanctuary", ""));
- cubeCards.add(new CardIdentity("Fortify", ""));
- cubeCards.add(new CardIdentity("Foul Orchard", ""));
+ cubeCards.add(new CardIdentity("Forbidden Friendship", ""));
+ cubeCards.add(new CardIdentity("Foreboding Landscape", ""));
cubeCards.add(new CardIdentity("Frenzied Goblin", ""));
- cubeCards.add(new CardIdentity("Frilled Deathspitter", ""));
- cubeCards.add(new CardIdentity("Frilled Oculus", ""));
- cubeCards.add(new CardIdentity("Frostburn Weird", ""));
- cubeCards.add(new CardIdentity("Fungal Infection", ""));
- cubeCards.add(new CardIdentity("GO TO JAIL", ""));
- cubeCards.add(new CardIdentity("Gathan Raiders", ""));
- cubeCards.add(new CardIdentity("Gather the Townsfolk", ""));
- cubeCards.add(new CardIdentity("Ghirapur Gearcrafter", ""));
+ cubeCards.add(new CardIdentity("Frost Trickster", ""));
+ cubeCards.add(new CardIdentity("Galvanic Discharge", ""));
+ cubeCards.add(new CardIdentity("Generous Ent", ""));
+ cubeCards.add(new CardIdentity("Geyser Drake", ""));
+ cubeCards.add(new CardIdentity("Ghostly Flicker", ""));
cubeCards.add(new CardIdentity("Giant Growth", ""));
cubeCards.add(new CardIdentity("Gideon's Lawkeeper", ""));
- cubeCards.add(new CardIdentity("Glint-Sleeve Artisan", ""));
- cubeCards.add(new CardIdentity("Gnawing Zombie", ""));
- cubeCards.add(new CardIdentity("Goblin Freerunner", ""));
- cubeCards.add(new CardIdentity("Goblin Heelcutter", ""));
- cubeCards.add(new CardIdentity("Goblin Trailblazer", ""));
+ cubeCards.add(new CardIdentity("Gift of Fangs", ""));
+ cubeCards.add(new CardIdentity("Gift of Orzhova", ""));
+ cubeCards.add(new CardIdentity("Gingerbrute", ""));
+ cubeCards.add(new CardIdentity("Gitaxian Probe", ""));
+ cubeCards.add(new CardIdentity("Gixian Infiltrator", ""));
+ cubeCards.add(new CardIdentity("Glimmerlight", ""));
+ cubeCards.add(new CardIdentity("Gnarlid Colony", ""));
+ cubeCards.add(new CardIdentity("Gnawing Crescendo", ""));
+ cubeCards.add(new CardIdentity("Go for the Throat", ""));
+ cubeCards.add(new CardIdentity("Goblin Anarchomancer", ""));
+ cubeCards.add(new CardIdentity("Goblin Bushwhacker", ""));
+ cubeCards.add(new CardIdentity("Goblin Electromancer", ""));
+ cubeCards.add(new CardIdentity("Goblin Motivator", ""));
+ cubeCards.add(new CardIdentity("Goblin Surprise", ""));
cubeCards.add(new CardIdentity("Gods Willing", ""));
cubeCards.add(new CardIdentity("Goldmeadow Harrier", ""));
- cubeCards.add(new CardIdentity("Golgari Guildgate", ""));
+ cubeCards.add(new CardIdentity("Golgari Rot Farm", ""));
+ cubeCards.add(new CardIdentity("Grapple with the Past", ""));
+ cubeCards.add(new CardIdentity("Grasping Scoundrel", ""));
cubeCards.add(new CardIdentity("Gravedigger", ""));
cubeCards.add(new CardIdentity("Gray Merchant of Asphodel", ""));
- cubeCards.add(new CardIdentity("Grim Contest", ""));
- cubeCards.add(new CardIdentity("Grisly Salvage", ""));
- cubeCards.add(new CardIdentity("Grixis Slavedriver", ""));
- cubeCards.add(new CardIdentity("Gruul Guildgate", ""));
- cubeCards.add(new CardIdentity("Gryff Vanguard", ""));
- cubeCards.add(new CardIdentity("Guardian Automaton", ""));
+ cubeCards.add(new CardIdentity("Greater Tanuki", ""));
+ cubeCards.add(new CardIdentity("Greatsword of Tyr", ""));
+ cubeCards.add(new CardIdentity("Grim Bauble", ""));
+ cubeCards.add(new CardIdentity("Grim Initiate", ""));
+ cubeCards.add(new CardIdentity("Growth Spiral", ""));
+ cubeCards.add(new CardIdentity("Gruul Turf", ""));
cubeCards.add(new CardIdentity("Guardian Idol", ""));
cubeCards.add(new CardIdentity("Guardian of the Guildpact", ""));
+ cubeCards.add(new CardIdentity("Guildsworn Prowler", ""));
cubeCards.add(new CardIdentity("Gurmag Angler", ""));
- cubeCards.add(new CardIdentity("Halimar Wavewatch", ""));
- cubeCards.add(new CardIdentity("Harrow", ""));
- cubeCards.add(new CardIdentity("Harsh Sustenance", ""));
- cubeCards.add(new CardIdentity("Highland Lake", ""));
+ cubeCards.add(new CardIdentity("Guttersnipe", ""));
+ cubeCards.add(new CardIdentity("Hard Evidence", ""));
+ cubeCards.add(new CardIdentity("Harried Spearguard", ""));
+ cubeCards.add(new CardIdentity("Haunted Fengraf", ""));
+ cubeCards.add(new CardIdentity("Haunted Mire", ""));
+ cubeCards.add(new CardIdentity("Hazard of the Dunes", ""));
+ cubeCards.add(new CardIdentity("Heliod's Pilgrim", ""));
+ cubeCards.add(new CardIdentity("Hickory Woodlot", ""));
+ cubeCards.add(new CardIdentity("Hidden Grotto", ""));
cubeCards.add(new CardIdentity("Hissing Iguanar", ""));
+ cubeCards.add(new CardIdentity("Hobblefiend", ""));
+ cubeCards.add(new CardIdentity("Holy Cow", ""));
cubeCards.add(new CardIdentity("Hooting Mandrills", ""));
cubeCards.add(new CardIdentity("Hordeling Outburst", ""));
- cubeCards.add(new CardIdentity("Imperiosaur", ""));
- cubeCards.add(new CardIdentity("Inner-Flame Acolyte", ""));
- cubeCards.add(new CardIdentity("Insolent Neonate", ""));
+ cubeCards.add(new CardIdentity("Horrific Assault", ""));
+ cubeCards.add(new CardIdentity("Imperial Oath", ""));
+ cubeCards.add(new CardIdentity("Improvised Club", ""));
+ cubeCards.add(new CardIdentity("Impulse", ""));
+ cubeCards.add(new CardIdentity("Incinerate", ""));
+ cubeCards.add(new CardIdentity("Infestation Sage", ""));
+ cubeCards.add(new CardIdentity("Infuse with Vitality", ""));
+ cubeCards.add(new CardIdentity("Inspiring Overseer", ""));
+ cubeCards.add(new CardIdentity("Inspiring Paladin", ""));
cubeCards.add(new CardIdentity("Into the Roil", ""));
- cubeCards.add(new CardIdentity("Isolation Zone", ""));
- cubeCards.add(new CardIdentity("Ivy Elemental", ""));
- cubeCards.add(new CardIdentity("Izzet Chronarch", ""));
- cubeCards.add(new CardIdentity("Izzet Guildgate", ""));
+ cubeCards.add(new CardIdentity("Iron Apprentice", ""));
+ cubeCards.add(new CardIdentity("Izzet Boilerworks", ""));
+ cubeCards.add(new CardIdentity("Izzet Charm", ""));
cubeCards.add(new CardIdentity("Jackal Pup", ""));
- cubeCards.add(new CardIdentity("Jilt", ""));
+ cubeCards.add(new CardIdentity("Jade Avenger", ""));
+ cubeCards.add(new CardIdentity("Jade Guardian", ""));
+ cubeCards.add(new CardIdentity("Jagged Barrens", ""));
+ cubeCards.add(new CardIdentity("Jewel Thief", ""));
+ cubeCards.add(new CardIdentity("Jhessian Thief", ""));
cubeCards.add(new CardIdentity("Journey to Nowhere", ""));
- cubeCards.add(new CardIdentity("Jungle Hollow", ""));
- cubeCards.add(new CardIdentity("Jungleborn Pioneer", ""));
- cubeCards.add(new CardIdentity("Keldon Marauders", ""));
- cubeCards.add(new CardIdentity("Keldon Overseer", ""));
- cubeCards.add(new CardIdentity("Keldon Raider", ""));
+ cubeCards.add(new CardIdentity("Judge's Familiar", ""));
+ cubeCards.add(new CardIdentity("Juggernaut", ""));
cubeCards.add(new CardIdentity("Kingpin's Pet", ""));
- cubeCards.add(new CardIdentity("Kitesail Corsair", ""));
cubeCards.add(new CardIdentity("Kor Skyfisher", ""));
- cubeCards.add(new CardIdentity("Kozilek's Channeler", ""));
- cubeCards.add(new CardIdentity("Krenko's Command", ""));
cubeCards.add(new CardIdentity("Krosan Tusker", ""));
- cubeCards.add(new CardIdentity("Lash Out", ""));
- cubeCards.add(new CardIdentity("Last Gasp", ""));
- cubeCards.add(new CardIdentity("Leave in the Dust", ""));
+ cubeCards.add(new CardIdentity("Lead the Stampede", ""));
+ cubeCards.add(new CardIdentity("Legion Vanguard", ""));
cubeCards.add(new CardIdentity("Leonin Bola", ""));
- cubeCards.add(new CardIdentity("Lifecraft Cavalry", ""));
cubeCards.add(new CardIdentity("Lightning Bolt", ""));
- cubeCards.add(new CardIdentity("Liliana's Specter", ""));
- cubeCards.add(new CardIdentity("Loyal Pegasus", ""));
- //cubeCards.add(new CardIdentity("Lurking Automaton", ""));
- cubeCards.add(new CardIdentity("Magma Jet", ""));
- cubeCards.add(new CardIdentity("Makeshift Mauler", ""));
+ cubeCards.add(new CardIdentity("Lightning Strike", ""));
+ cubeCards.add(new CardIdentity("Llanowar Elves", ""));
+ cubeCards.add(new CardIdentity("Llanowar Visionary", ""));
+ cubeCards.add(new CardIdentity("Loathsome Curator", ""));
+ cubeCards.add(new CardIdentity("Longstalk Brawl", ""));
+ cubeCards.add(new CardIdentity("Looter il-Kor", ""));
+ cubeCards.add(new CardIdentity("Lorehold Campus", ""));
+ cubeCards.add(new CardIdentity("Lorien Revealed", ""));
+ cubeCards.add(new CardIdentity("Lose Focus", ""));
+ cubeCards.add(new CardIdentity("Lyev Skyknight", ""));
+ cubeCards.add(new CardIdentity("Malevolent Rumble", ""));
cubeCards.add(new CardIdentity("Man-o'-War", ""));
cubeCards.add(new CardIdentity("Mana Leak", ""));
- cubeCards.add(new CardIdentity("Mardu Hordechief", ""));
+ cubeCards.add(new CardIdentity("Mana Tithe", ""));
+ cubeCards.add(new CardIdentity("Mandibular Kite", ""));
cubeCards.add(new CardIdentity("Mardu Skullhunter", ""));
- cubeCards.add(new CardIdentity("Martyr of Dusk", ""));
- cubeCards.add(new CardIdentity("Maul Splicer", ""));
- cubeCards.add(new CardIdentity("Maze of Ith", ""));
- cubeCards.add(new CardIdentity("Meandering River", ""));
- cubeCards.add(new CardIdentity("Mental Note", ""));
- cubeCards.add(new CardIdentity("Midnight Scavengers", ""));
+ cubeCards.add(new CardIdentity("Massive Might", ""));
+ cubeCards.add(new CardIdentity("Mayhem Patrol", ""));
+ cubeCards.add(new CardIdentity("Merfolk Looter", ""));
+ cubeCards.add(new CardIdentity("Militia Bugler", ""));
cubeCards.add(new CardIdentity("Mind Stone", ""));
- cubeCards.add(new CardIdentity("Minotaur Skullcleaver", ""));
+ cubeCards.add(new CardIdentity("Miner's Guidewing", ""));
+ cubeCards.add(new CardIdentity("Mire Triton", ""));
+ cubeCards.add(new CardIdentity("Mirrorshell Crab", ""));
cubeCards.add(new CardIdentity("Miscalculation", ""));
- cubeCards.add(new CardIdentity("Mishra's Factory", ""));
cubeCards.add(new CardIdentity("Mist Raven", ""));
- cubeCards.add(new CardIdentity("Mistral Charger", ""));
- cubeCards.add(new CardIdentity("Mobile Garrison", ""));
- cubeCards.add(new CardIdentity("Mogg Fanatic", ""));
- cubeCards.add(new CardIdentity("Mogg Flunkies", ""));
+ cubeCards.add(new CardIdentity("Mistral Singer", ""));
+ cubeCards.add(new CardIdentity("Mocking Sprite", ""));
cubeCards.add(new CardIdentity("Mogg War Marshal", ""));
- cubeCards.add(new CardIdentity("Moldervine Cloak", ""));
+ cubeCards.add(new CardIdentity("Molten Gatekeeper", ""));
cubeCards.add(new CardIdentity("Momentary Blink", ""));
- cubeCards.add(new CardIdentity("Morgue Theft", ""));
+ cubeCards.add(new CardIdentity("Monastery Swiftspear", ""));
+ cubeCards.add(new CardIdentity("Monstrous Emergence", ""));
+ cubeCards.add(new CardIdentity("Moon-Circuit Hacker", ""));
+ cubeCards.add(new CardIdentity("Mother Bear", ""));
cubeCards.add(new CardIdentity("Mulldrifter", ""));
- cubeCards.add(new CardIdentity("Nameless Inversion", ""));
- cubeCards.add(new CardIdentity("Narcolepsy", ""));
- cubeCards.add(new CardIdentity("Nessian Asp", ""));
- cubeCards.add(new CardIdentity("Nest Robber", ""));
- cubeCards.add(new CardIdentity("Nezumi Cutthroat", ""));
+ cubeCards.add(new CardIdentity("Murmuring Mystic", ""));
+ cubeCards.add(new CardIdentity("Mutagenic Growth", ""));
+ cubeCards.add(new CardIdentity("Mystic Sanctuary", ""));
+ cubeCards.add(new CardIdentity("Nature's Lore", ""));
+ cubeCards.add(new CardIdentity("Nest Invader", ""));
+ cubeCards.add(new CardIdentity("Nested Shambler", ""));
+ cubeCards.add(new CardIdentity("Nezumi Linkbreaker", ""));
+ cubeCards.add(new CardIdentity("Night Market", ""));
cubeCards.add(new CardIdentity("Night's Whisper", ""));
- cubeCards.add(new CardIdentity("Nightscape Familiar", ""));
cubeCards.add(new CardIdentity("Ninja of the Deep Hours", ""));
+ cubeCards.add(new CardIdentity("Novice Inspector", ""));
+ cubeCards.add(new CardIdentity("Nyxborn Hydra", ""));
cubeCards.add(new CardIdentity("Oblivion Ring", ""));
- cubeCards.add(new CardIdentity("Oona's Grace", ""));
- //cubeCards.add(new CardIdentity("Ordinary Pony", ""));
- cubeCards.add(new CardIdentity("Orzhov Guildgate", ""));
- cubeCards.add(new CardIdentity("Otherworldly Journey", ""));
- cubeCards.add(new CardIdentity("Overgrown Armasaur", ""));
- cubeCards.add(new CardIdentity("Pacifism", ""));
- cubeCards.add(new CardIdentity("Paladin of the Bloodstained", ""));
- cubeCards.add(new CardIdentity("Peema Outrider", ""));
- cubeCards.add(new CardIdentity("Penumbra Spider", ""));
+ cubeCards.add(new CardIdentity("Okiba-Gang Shinobi", ""));
+ cubeCards.add(new CardIdentity("Oliphaunt", ""));
+ cubeCards.add(new CardIdentity("Opt", ""));
+ cubeCards.add(new CardIdentity("Orcish Hellraiser", ""));
+ cubeCards.add(new CardIdentity("Orzhov Basilica", ""));
+ cubeCards.add(new CardIdentity("Owlbear", ""));
+ cubeCards.add(new CardIdentity("Palace Sentinels", ""));
+ cubeCards.add(new CardIdentity("Pegasus Guardian", ""));
+ cubeCards.add(new CardIdentity("Peregrine Drake", ""));
+ cubeCards.add(new CardIdentity("Perilous Landscape", ""));
cubeCards.add(new CardIdentity("Perilous Myr", ""));
cubeCards.add(new CardIdentity("Pestermite", ""));
cubeCards.add(new CardIdentity("Pestilence", ""));
+ cubeCards.add(new CardIdentity("Petrify", ""));
+ cubeCards.add(new CardIdentity("Phantom Interference", ""));
+ cubeCards.add(new CardIdentity("Phantom Nomad", ""));
+ cubeCards.add(new CardIdentity("Phantom Tiger", ""));
cubeCards.add(new CardIdentity("Phyrexian Rager", ""));
cubeCards.add(new CardIdentity("Pillory of the Sleepless", ""));
- cubeCards.add(new CardIdentity("Pit Fight", ""));
- cubeCards.add(new CardIdentity("Pit Keeper", ""));
- cubeCards.add(new CardIdentity("Plated Geopede", ""));
+ cubeCards.add(new CardIdentity("Plagued Rusalka", ""));
+ cubeCards.add(new CardIdentity("Planar Disruption", ""));
+ cubeCards.add(new CardIdentity("Ponder", ""));
cubeCards.add(new CardIdentity("Porcelain Legionnaire", ""));
- cubeCards.add(new CardIdentity("Pounce", ""));
- cubeCards.add(new CardIdentity("Predatory Nightstalker", ""));
+ cubeCards.add(new CardIdentity("Preening Champion", ""));
cubeCards.add(new CardIdentity("Preordain", ""));
- cubeCards.add(new CardIdentity("Prey Upon", ""));
+ cubeCards.add(new CardIdentity("Prismari Campus", ""));
cubeCards.add(new CardIdentity("Prismatic Strands", ""));
cubeCards.add(new CardIdentity("Pristine Talisman", ""));
cubeCards.add(new CardIdentity("Prophetic Prism", ""));
cubeCards.add(new CardIdentity("Pulse of Murasa", ""));
- cubeCards.add(new CardIdentity("Pursue Glory", ""));
+ cubeCards.add(new CardIdentity("Putrid Goblin", ""));
cubeCards.add(new CardIdentity("Putrid Leech", ""));
- cubeCards.add(new CardIdentity("Pyrotechnics", ""));
- cubeCards.add(new CardIdentity("Qasali Pridemage", ""));
+ cubeCards.add(new CardIdentity("Quandrix Campus", ""));
+ cubeCards.add(new CardIdentity("Quandrix Pledgemage", ""));
+ cubeCards.add(new CardIdentity("Quick Study", ""));
+ cubeCards.add(new CardIdentity("Quicksand", ""));
+ cubeCards.add(new CardIdentity("Racers' Ring", ""));
+ cubeCards.add(new CardIdentity("Radiant Grove", ""));
+ cubeCards.add(new CardIdentity("Raffine's Informant", ""));
+ cubeCards.add(new CardIdentity("Raid Bombardment", ""));
cubeCards.add(new CardIdentity("Raise the Alarm", ""));
- cubeCards.add(new CardIdentity("Rakdos Guildgate", ""));
+ cubeCards.add(new CardIdentity("Rakdos Carnarium", ""));
+ cubeCards.add(new CardIdentity("Rally at the Hornburg", ""));
cubeCards.add(new CardIdentity("Rally the Peasants", ""));
- cubeCards.add(new CardIdentity("Rampant Growth", ""));
+ cubeCards.add(new CardIdentity("Ram Through", ""));
cubeCards.add(new CardIdentity("Rancor", ""));
- cubeCards.add(new CardIdentity("Ranger's Guile", ""));
- cubeCards.add(new CardIdentity("Ray of Command", ""));
- cubeCards.add(new CardIdentity("Razorfin Hunter", ""));
+ cubeCards.add(new CardIdentity("Ransack the Lab", ""));
cubeCards.add(new CardIdentity("Reckless Charge", ""));
- cubeCards.add(new CardIdentity("Recoil", ""));
- //cubeCards.add(new CardIdentity("Regicide", ""));
+ cubeCards.add(new CardIdentity("Reckless Impulse", ""));
+ cubeCards.add(new CardIdentity("Red Herring", ""));
cubeCards.add(new CardIdentity("Remove Soul", ""));
- cubeCards.add(new CardIdentity("Rend Flesh", ""));
- cubeCards.add(new CardIdentity("Rendclaw Trow", ""));
cubeCards.add(new CardIdentity("Renegade Freighter", ""));
+ cubeCards.add(new CardIdentity("Repeal", ""));
+ cubeCards.add(new CardIdentity("Retrofitted Transmogrant", ""));
+ cubeCards.add(new CardIdentity("Rhox Veteran", ""));
cubeCards.add(new CardIdentity("Rift Bolt", ""));
- cubeCards.add(new CardIdentity("Rishadan Airship", ""));
- cubeCards.add(new CardIdentity("Rugged Highlands", ""));
- cubeCards.add(new CardIdentity("Runed Servitor", ""));
- cubeCards.add(new CardIdentity("Rushing River", ""));
- cubeCards.add(new CardIdentity("Ruthless Ripper", ""));
- cubeCards.add(new CardIdentity("Sailor of Means", ""));
+ cubeCards.add(new CardIdentity("Rimrock Knight", ""));
+ cubeCards.add(new CardIdentity("Rolling Thunder", ""));
+ cubeCards.add(new CardIdentity("Safehold Elite", ""));
cubeCards.add(new CardIdentity("Sakura-Tribe Elder", ""));
cubeCards.add(new CardIdentity("Sandsteppe Outcast", ""));
- cubeCards.add(new CardIdentity("Sangrite Backlash", ""));
- cubeCards.add(new CardIdentity("Saproling Migration", ""));
- cubeCards.add(new CardIdentity("Sarkhan's Rage", ""));
- cubeCards.add(new CardIdentity("Savage Punch", ""));
+ cubeCards.add(new CardIdentity("Sarulf's Packmate", ""));
cubeCards.add(new CardIdentity("Savannah Lions", ""));
- cubeCards.add(new CardIdentity("Scatter the Seeds", ""));
- cubeCards.add(new CardIdentity("Scion Summoner", ""));
- cubeCards.add(new CardIdentity("Scion of the Wild", ""));
+ cubeCards.add(new CardIdentity("Scholar of Combustion", ""));
+ cubeCards.add(new CardIdentity("Scorched Rusalka", ""));
cubeCards.add(new CardIdentity("Scoured Barrens", ""));
- cubeCards.add(new CardIdentity("Scourge Devil", ""));
- cubeCards.add(new CardIdentity("Screeching Skaab", ""));
- cubeCards.add(new CardIdentity("Scuzzback Marauders", ""));
- cubeCards.add(new CardIdentity("Search for Tomorrow", ""));
- cubeCards.add(new CardIdentity("Searing Blaze", ""));
- cubeCards.add(new CardIdentity("Seeker of Insight", ""));
+ cubeCards.add(new CardIdentity("Scrapwork Mutt", ""));
+ cubeCards.add(new CardIdentity("Scurrilous Sentry", ""));
+ cubeCards.add(new CardIdentity("Search Party Captain", ""));
+ cubeCards.add(new CardIdentity("Searing Spear", ""));
cubeCards.add(new CardIdentity("Seeker of the Way", ""));
- cubeCards.add(new CardIdentity("Selesnya Guildgate", ""));
- //cubeCards.add(new CardIdentity("Selfie Preservation", ""));
- cubeCards.add(new CardIdentity("Separatist Voidmage", ""));
- cubeCards.add(new CardIdentity("Seraph of Dawn", ""));
- cubeCards.add(new CardIdentity("Sergeant-at-Arms", ""));
+ cubeCards.add(new CardIdentity("Seething Landscape", ""));
+ cubeCards.add(new CardIdentity("Selesnya Sanctuary", ""));
cubeCards.add(new CardIdentity("Serrated Arrows", ""));
- cubeCards.add(new CardIdentity("Shaper Parasite", ""));
- cubeCards.add(new CardIdentity("Sheer Drop", ""));
- cubeCards.add(new CardIdentity("Shelter", ""));
- cubeCards.add(new CardIdentity("Shimmering Glasskite", ""));
- cubeCards.add(new CardIdentity("Sigil Blessing", ""));
- cubeCards.add(new CardIdentity("Silent Departure", ""));
- cubeCards.add(new CardIdentity("Simic Guildgate", ""));
- cubeCards.add(new CardIdentity("Skirk Marauder", ""));
- cubeCards.add(new CardIdentity("Skyknight Legionnaire", ""));
- cubeCards.add(new CardIdentity("Slash Panther", ""));
- cubeCards.add(new CardIdentity("Snakeform", ""));
+ cubeCards.add(new CardIdentity("Serum Visionary", ""));
+ cubeCards.add(new CardIdentity("Serum Visions", ""));
+ cubeCards.add(new CardIdentity("Settle Beyond Reality", ""));
+ cubeCards.add(new CardIdentity("Shardless Outlander", ""));
+ cubeCards.add(new CardIdentity("Shattered Landscape", ""));
+ cubeCards.add(new CardIdentity("Sheltering Landscape", ""));
+ cubeCards.add(new CardIdentity("Shipwreck Dowser", ""));
+ cubeCards.add(new CardIdentity("Silver Drake", ""));
+ cubeCards.add(new CardIdentity("Silverback Shaman", ""));
+ cubeCards.add(new CardIdentity("Silverquill Campus", ""));
+ cubeCards.add(new CardIdentity("Simic Growth Chamber", ""));
+ cubeCards.add(new CardIdentity("Skewer the Critics", ""));
+ cubeCards.add(new CardIdentity("Skybridge Towers", ""));
+ cubeCards.add(new CardIdentity("Snakeskin Veil", ""));
cubeCards.add(new CardIdentity("Snap", ""));
+ cubeCards.add(new CardIdentity("Snapping Voidcraw", ""));
+ cubeCards.add(new CardIdentity("Soltari Trooper", ""));
cubeCards.add(new CardIdentity("Soul Manipulation", ""));
- cubeCards.add(new CardIdentity("Soul of the Rapids", ""));
- cubeCards.add(new CardIdentity("Soulstinger", ""));
- cubeCards.add(new CardIdentity("Sparring Construct", ""));
- cubeCards.add(new CardIdentity("Sphere of the Suns", ""));
- cubeCards.add(new CardIdentity("Spike Jester", ""));
- //cubeCards.add(new CardIdentity("Squirrel Dealer", ""));
- cubeCards.add(new CardIdentity("Staggershock", ""));
- cubeCards.add(new CardIdentity("Star Compass", ""));
- cubeCards.add(new CardIdentity("Stitched Drake", ""));
- cubeCards.add(new CardIdentity("Stone Quarry", ""));
- cubeCards.add(new CardIdentity("Storm Fleet Pyromancer", ""));
+ cubeCards.add(new CardIdentity("Spelleater Wolverine", ""));
+ cubeCards.add(new CardIdentity("Sprout Swarm", ""));
cubeCards.add(new CardIdentity("Stormfront Pegasus", ""));
- cubeCards.add(new CardIdentity("Stormscape Apprentice", ""));
- cubeCards.add(new CardIdentity("Strip Mine", ""));
cubeCards.add(new CardIdentity("Striped Riverwinder", ""));
- cubeCards.add(new CardIdentity("Stronghold Confessor", ""));
- cubeCards.add(new CardIdentity("Submerged Boneyard", ""));
- cubeCards.add(new CardIdentity("Sultai Scavenger", ""));
- cubeCards.add(new CardIdentity("Suppression Bonds", ""));
- cubeCards.add(new CardIdentity("Swiftwater Cliffs", ""));
- cubeCards.add(new CardIdentity("Sylvan Might", ""));
- cubeCards.add(new CardIdentity("Sylvok Lifestaff", ""));
- cubeCards.add(new CardIdentity("Temporal Isolation", ""));
- cubeCards.add(new CardIdentity("Tenement Crasher", ""));
- cubeCards.add(new CardIdentity("Terminate", ""));
- cubeCards.add(new CardIdentity("Terramorphic Expanse", ""));
+ cubeCards.add(new CardIdentity("Sulfurous Blast", ""));
+ cubeCards.add(new CardIdentity("Sunlance", ""));
+ cubeCards.add(new CardIdentity("Suture Priest", ""));
+ cubeCards.add(new CardIdentity("Sword Coast Serpent", ""));
+ cubeCards.add(new CardIdentity("Syndic of Tithes", ""));
+ cubeCards.add(new CardIdentity("Tamiyo's Safekeeping", ""));
+ cubeCards.add(new CardIdentity("Tangled Islet", ""));
+ cubeCards.add(new CardIdentity("Teetering Peaks", ""));
+ cubeCards.add(new CardIdentity("Tempest Angler", ""));
+ cubeCards.add(new CardIdentity("Tenth District Legionnaire", ""));
cubeCards.add(new CardIdentity("Thorn of the Black Rose", ""));
- cubeCards.add(new CardIdentity("Thornweald Archer", ""));
- cubeCards.add(new CardIdentity("Thornwood Falls", ""));
- cubeCards.add(new CardIdentity("Thought Scour", ""));
+ cubeCards.add(new CardIdentity("Thraben Charm", ""));
cubeCards.add(new CardIdentity("Thraben Inspector", ""));
- cubeCards.add(new CardIdentity("Thrill-Kill Assassin", ""));
- cubeCards.add(new CardIdentity("Thundering Giant", ""));
- cubeCards.add(new CardIdentity("Thunderous Wrath", ""));
- cubeCards.add(new CardIdentity("Timber Gorge", ""));
- cubeCards.add(new CardIdentity("Time to Feed", ""));
+ cubeCards.add(new CardIdentity("Thriving Grubs", ""));
+ cubeCards.add(new CardIdentity("Thriving Skyclaw", ""));
cubeCards.add(new CardIdentity("Tithe Drinker", ""));
- cubeCards.add(new CardIdentity("Totem-Guide Hartebeest", ""));
+ cubeCards.add(new CardIdentity("Tithing Blade", ""));
+ cubeCards.add(new CardIdentity("Tocasia's Dig Site", ""));
+ cubeCards.add(new CardIdentity("Tolarian Terror", ""));
+ cubeCards.add(new CardIdentity("Topan Freeblade", ""));
+ cubeCards.add(new CardIdentity("Tortured Existence", ""));
cubeCards.add(new CardIdentity("Tragic Slip", ""));
+ cubeCards.add(new CardIdentity("Tramway Station", ""));
cubeCards.add(new CardIdentity("Tranquil Cove", ""));
- cubeCards.add(new CardIdentity("Tranquil Expanse", ""));
- cubeCards.add(new CardIdentity("Travel Preparations", ""));
+ cubeCards.add(new CardIdentity("Tranquil Landscape", ""));
+ cubeCards.add(new CardIdentity("Trapped in the Screen", ""));
cubeCards.add(new CardIdentity("Treasure Cruise", ""));
+ cubeCards.add(new CardIdentity("Treetop Snarespinner", ""));
cubeCards.add(new CardIdentity("Triplicate Spirits", ""));
- cubeCards.add(new CardIdentity("Typhoid Rats", ""));
+ cubeCards.add(new CardIdentity("Troll of Khazad-dum", ""));
+ cubeCards.add(new CardIdentity("Trumpeting Herd", ""));
+ cubeCards.add(new CardIdentity("Tuskeri Firewalker", ""));
+ cubeCards.add(new CardIdentity("Tuskguard Captain", ""));
+ cubeCards.add(new CardIdentity("Twisted Landscape", ""));
cubeCards.add(new CardIdentity("Ulamog's Crusher", ""));
- cubeCards.add(new CardIdentity("Ulvenwald Captive", ""));
+ cubeCards.add(new CardIdentity("Unable to Scream", ""));
+ cubeCards.add(new CardIdentity("Unbounded Potential", ""));
+ cubeCards.add(new CardIdentity("Underworld Rage-Hound", ""));
+ cubeCards.add(new CardIdentity("Undying Malice", ""));
cubeCards.add(new CardIdentity("Unearth", ""));
- cubeCards.add(new CardIdentity("Unmake", ""));
- cubeCards.add(new CardIdentity("Vampire Interloper", ""));
+ cubeCards.add(new CardIdentity("Unwilling Ingredient", ""));
+ cubeCards.add(new CardIdentity("Urban Daggertooth", ""));
+ cubeCards.add(new CardIdentity("Utopia Sprawl", ""));
+ cubeCards.add(new CardIdentity("Vampire Lacerator", ""));
+ cubeCards.add(new CardIdentity("Vampire Sovereign", ""));
cubeCards.add(new CardIdentity("Vault Skirge", ""));
- cubeCards.add(new CardIdentity("Viashino Firstblade", ""));
+ cubeCards.add(new CardIdentity("Vendetta", ""));
+ cubeCards.add(new CardIdentity("Village Rites", ""));
cubeCards.add(new CardIdentity("Vines of Vastwood", ""));
- cubeCards.add(new CardIdentity("Voldaren Duelist", ""));
+ cubeCards.add(new CardIdentity("Vizier of Tumbling Sands", ""));
+ cubeCards.add(new CardIdentity("Volatile Wanderglyph", ""));
+ cubeCards.add(new CardIdentity("Voracious Varmint", ""));
+ cubeCards.add(new CardIdentity("Voracious Vermin", ""));
cubeCards.add(new CardIdentity("Vulshok Morningstar", ""));
- cubeCards.add(new CardIdentity("Vulshok Sorcerer", ""));
- cubeCards.add(new CardIdentity("Vulturous Aven", ""));
- cubeCards.add(new CardIdentity("Wakedancer", ""));
- cubeCards.add(new CardIdentity("Walker of the Grove", ""));
cubeCards.add(new CardIdentity("Wall of Roots", ""));
- cubeCards.add(new CardIdentity("War Flare", ""));
cubeCards.add(new CardIdentity("Warden of Evos Isle", ""));
- cubeCards.add(new CardIdentity("Warped Landscape", ""));
- cubeCards.add(new CardIdentity("Warren Pilferers", ""));
- cubeCards.add(new CardIdentity("Wasteland Scorpion", ""));
- cubeCards.add(new CardIdentity("Waterknot", ""));
+ cubeCards.add(new CardIdentity("Wary Thespian", ""));
+ cubeCards.add(new CardIdentity("Waterfront District", ""));
cubeCards.add(new CardIdentity("Wayfarer's Bauble", ""));
+ cubeCards.add(new CardIdentity("Weakstone's Subjugation", ""));
cubeCards.add(new CardIdentity("Werebear", ""));
- cubeCards.add(new CardIdentity("Whitemane Lion", ""));
- cubeCards.add(new CardIdentity("Wild Instincts", ""));
- cubeCards.add(new CardIdentity("Wild Mongrel", ""));
- cubeCards.add(new CardIdentity("Wild Nacatl", ""));
- cubeCards.add(new CardIdentity("Wildsize", ""));
- cubeCards.add(new CardIdentity("Will-Forged Golem", ""));
- cubeCards.add(new CardIdentity("Wind-Scarred Crag", ""));
- cubeCards.add(new CardIdentity("Winged Coatl", ""));
- cubeCards.add(new CardIdentity("Wojek Halberdiers", ""));
- cubeCards.add(new CardIdentity("Woodland Stream", ""));
- cubeCards.add(new CardIdentity("Wrecking Ball", ""));
- cubeCards.add(new CardIdentity("Wretched Gryff", ""));
+ cubeCards.add(new CardIdentity("Wild Growth", ""));
+ cubeCards.add(new CardIdentity("Wildfire Elemental", ""));
+ cubeCards.add(new CardIdentity("Winding Way", ""));
+ cubeCards.add(new CardIdentity("Winter Eladrin", ""));
+ cubeCards.add(new CardIdentity("Witch's Cottage", ""));
+ cubeCards.add(new CardIdentity("Wither and Bloom", ""));
+ cubeCards.add(new CardIdentity("Witherbloom Campus", ""));
+ cubeCards.add(new CardIdentity("Witness Protection", ""));
+ cubeCards.add(new CardIdentity("Witty Roastmaster", ""));
+ cubeCards.add(new CardIdentity("Wrangle", ""));
+ cubeCards.add(new CardIdentity("Wrenn's Resolve", ""));
+ cubeCards.add(new CardIdentity("Writhing Chrysalis", ""));
cubeCards.add(new CardIdentity("Yavimaya Elder", ""));
- cubeCards.add(new CardIdentity("Yavimaya Sapherd", ""));
- cubeCards.add(new CardIdentity("Yotian Soldier", ""));
+ cubeCards.add(new CardIdentity("Yavimaya Steelcrusher", ""));
+ cubeCards.add(new CardIdentity("You Hear Something on Watch", ""));
+ cubeCards.add(new CardIdentity("You Meet in a Tavern", ""));
+ cubeCards.add(new CardIdentity("Young Blue Dragon", ""));
+ cubeCards.add(new CardIdentity("Zephyr Winder", ""));
}
}
diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/VintageCube.java b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/VintageCube.java
index f32948f8ba3..34a4d661787 100644
--- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/VintageCube.java
+++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/VintageCube.java
@@ -13,8 +13,15 @@ import mage.game.draft.DraftCube;
public class VintageCube extends DraftCube {
public VintageCube() {
- super("MTGO Vintage Cube", "", 2025, 4, 23);
+ super("MTGO Vintage Cube", "", 2025, 10, 1);
+ //cubeCards.add(new CardIdentity("Ademi of the Silkchutes", ""));
+ //cubeCards.add(new CardIdentity("Cren, Undercity Dreamer", ""));
+ //cubeCards.add(new CardIdentity("Goben, Gene-Splice Savant", ""));
+ //cubeCards.add(new CardIdentity("Makdee and Itla, Skysnarers", ""));
+ //cubeCards.add(new CardIdentity("Nia, Skysail Storyteller", ""));
+ //cubeCards.add(new CardIdentity("Spectral Restitching", ""));
+ //cubeCards.add(new CardIdentity("Walk-In Closet // Forgotten Cellar", ""));
cubeCards.add(new CardIdentity("Abhorrent Oculus", ""));
cubeCards.add(new CardIdentity("Abrade", ""));
cubeCards.add(new CardIdentity("Adeline, Resplendent Cathar", ""));
@@ -29,15 +36,18 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Arena of Glory", ""));
cubeCards.add(new CardIdentity("Arid Mesa", ""));
cubeCards.add(new CardIdentity("Arwen, Mortal Queen", ""));
+ cubeCards.add(new CardIdentity("Astrologian's Planisphere", ""));
cubeCards.add(new CardIdentity("Atraxa, Grand Unifier", ""));
cubeCards.add(new CardIdentity("Avacyn's Pilgrim", ""));
cubeCards.add(new CardIdentity("Badlands", ""));
cubeCards.add(new CardIdentity("Balance", ""));
cubeCards.add(new CardIdentity("Baleful Mastery", ""));
cubeCards.add(new CardIdentity("Baleful Strix", ""));
+ cubeCards.add(new CardIdentity("Baloth Prime", ""));
cubeCards.add(new CardIdentity("Barrowgoyf", ""));
cubeCards.add(new CardIdentity("Basalt Monolith", ""));
cubeCards.add(new CardIdentity("Bayou", ""));
+ cubeCards.add(new CardIdentity("Berserk", ""));
cubeCards.add(new CardIdentity("Birds of Paradise", ""));
cubeCards.add(new CardIdentity("Bitter Triumph", ""));
cubeCards.add(new CardIdentity("Black Lotus", ""));
@@ -47,15 +57,16 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Blightsteel Colossus", ""));
cubeCards.add(new CardIdentity("Blood Crypt", ""));
cubeCards.add(new CardIdentity("Bloodbraid Challenger", ""));
+ cubeCards.add(new CardIdentity("Bloodchief's Thirst", ""));
cubeCards.add(new CardIdentity("Bloodstained Mire", ""));
cubeCards.add(new CardIdentity("Bloodtithe Harvester", ""));
cubeCards.add(new CardIdentity("Blooming Marsh", ""));
cubeCards.add(new CardIdentity("Bolas's Citadel", ""));
cubeCards.add(new CardIdentity("Bone Shards", ""));
cubeCards.add(new CardIdentity("Bonecrusher Giant", ""));
- cubeCards.add(new CardIdentity("Bonehoard Dracosaur", ""));
cubeCards.add(new CardIdentity("Boseiju, Who Endures", ""));
cubeCards.add(new CardIdentity("Botanical Sanctum", ""));
+ cubeCards.add(new CardIdentity("Bountiful Landscape", ""));
cubeCards.add(new CardIdentity("Brain Freeze", ""));
cubeCards.add(new CardIdentity("Brainstorm", ""));
cubeCards.add(new CardIdentity("Brainsurge", ""));
@@ -71,6 +82,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Carnage Interpreter", ""));
cubeCards.add(new CardIdentity("Cathar Commando", ""));
cubeCards.add(new CardIdentity("Caustic Bronco", ""));
+ cubeCards.add(new CardIdentity("Cecil, Dark Knight", ""));
cubeCards.add(new CardIdentity("Celestial Colonnade", ""));
cubeCards.add(new CardIdentity("Chain Lightning", ""));
cubeCards.add(new CardIdentity("Chain of Smog", ""));
@@ -80,25 +92,26 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Chromatic Star", ""));
cubeCards.add(new CardIdentity("Chrome Mox", ""));
cubeCards.add(new CardIdentity("City of Traitors", ""));
- cubeCards.add(new CardIdentity("Clarion Conqueror", ""));
cubeCards.add(new CardIdentity("Coalition Relic", ""));
cubeCards.add(new CardIdentity("Collective Brutality", ""));
cubeCards.add(new CardIdentity("Commercial District", ""));
cubeCards.add(new CardIdentity("Concealed Courtyard", ""));
cubeCards.add(new CardIdentity("Concealing Curtains", ""));
cubeCards.add(new CardIdentity("Consider", ""));
+ cubeCards.add(new CardIdentity("Consult the Star Charts", ""));
cubeCards.add(new CardIdentity("Containment Priest", ""));
cubeCards.add(new CardIdentity("Copperline Gorge", ""));
cubeCards.add(new CardIdentity("Cori-Steel Cutter", ""));
cubeCards.add(new CardIdentity("Corpse Dance", ""));
+ cubeCards.add(new CardIdentity("Cosmogrand Zenith", ""));
cubeCards.add(new CardIdentity("Council's Judgment", ""));
cubeCards.add(new CardIdentity("Counterspell", ""));
cubeCards.add(new CardIdentity("Courser of Kruphix", ""));
cubeCards.add(new CardIdentity("Coveted Jewel", ""));
cubeCards.add(new CardIdentity("Crabomination", ""));
- cubeCards.add(new CardIdentity("Craterhoof Behemoth", ""));
cubeCards.add(new CardIdentity("Creeping Tar Pit", ""));
cubeCards.add(new CardIdentity("Crop Rotation", ""));
+ cubeCards.add(new CardIdentity("Crucible of Worlds", ""));
cubeCards.add(new CardIdentity("Cryptic Command", ""));
cubeCards.add(new CardIdentity("Currency Converter", ""));
cubeCards.add(new CardIdentity("Cut Down", ""));
@@ -122,6 +135,8 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Displacer Kitten", ""));
cubeCards.add(new CardIdentity("Doomsday", ""));
cubeCards.add(new CardIdentity("Dragon's Rage Channeler", ""));
+ cubeCards.add(new CardIdentity("Dreadhorde Arcanist", ""));
+ cubeCards.add(new CardIdentity("Duelist of the Mind", ""));
cubeCards.add(new CardIdentity("Duress", ""));
cubeCards.add(new CardIdentity("Eagles of the North", ""));
cubeCards.add(new CardIdentity("Echo of Eons", ""));
@@ -133,8 +148,8 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Embereth Shieldbreaker", ""));
cubeCards.add(new CardIdentity("Emperor of Bones", ""));
cubeCards.add(new CardIdentity("Emrakul, the Aeons Torn", ""));
+ cubeCards.add(new CardIdentity("Emry, Lurker of the Loch", ""));
cubeCards.add(new CardIdentity("Endurance", ""));
- cubeCards.add(new CardIdentity("Enduring Curiosity", ""));
cubeCards.add(new CardIdentity("Enduring Innocence", ""));
cubeCards.add(new CardIdentity("Entomb", ""));
cubeCards.add(new CardIdentity("Ephemerate", ""));
@@ -159,27 +174,26 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Field of the Dead", ""));
cubeCards.add(new CardIdentity("Fiery Confluence", ""));
cubeCards.add(new CardIdentity("Figure of Destiny", ""));
- cubeCards.add(new CardIdentity("Fire // Ice", ""));
cubeCards.add(new CardIdentity("Fire Covenant", ""));
cubeCards.add(new CardIdentity("Fireblast", ""));
cubeCards.add(new CardIdentity("Firebolt", ""));
cubeCards.add(new CardIdentity("Flame Slash", ""));
+ cubeCards.add(new CardIdentity("Flame of Anor", ""));
cubeCards.add(new CardIdentity("Flash", ""));
cubeCards.add(new CardIdentity("Flickerwisp", ""));
cubeCards.add(new CardIdentity("Flooded Strand", ""));
- cubeCards.add(new CardIdentity("Floodpits Drowner", ""));
cubeCards.add(new CardIdentity("Force of Negation", ""));
+ cubeCards.add(new CardIdentity("Force of Vigor", ""));
cubeCards.add(new CardIdentity("Force of Will", ""));
cubeCards.add(new CardIdentity("Forensic Gadgeteer", ""));
cubeCards.add(new CardIdentity("Forth Eorlingas!", ""));
cubeCards.add(new CardIdentity("Fractured Identity", ""));
cubeCards.add(new CardIdentity("Frantic Search", ""));
cubeCards.add(new CardIdentity("Fury", ""));
- cubeCards.add(new CardIdentity("Fyndhorn Elves", ""));
cubeCards.add(new CardIdentity("Gaea's Cradle", ""));
cubeCards.add(new CardIdentity("Galvanic Blast", ""));
cubeCards.add(new CardIdentity("Galvanic Discharge", ""));
- cubeCards.add(new CardIdentity("General Ferrous Rokiric", ""));
+ cubeCards.add(new CardIdentity("Gau, Feral Youth", ""));
cubeCards.add(new CardIdentity("Generous Ent", ""));
cubeCards.add(new CardIdentity("Generous Plunderer", ""));
cubeCards.add(new CardIdentity("Get Lost", ""));
@@ -192,9 +206,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Goblin Rabblemaster", ""));
cubeCards.add(new CardIdentity("Godless Shrine", ""));
cubeCards.add(new CardIdentity("Goldspan Dragon", ""));
- cubeCards.add(new CardIdentity("Golos, Tireless Pilgrim", ""));
cubeCards.add(new CardIdentity("Grave Titan", ""));
- cubeCards.add(new CardIdentity("Greasewrench Goblin", ""));
cubeCards.add(new CardIdentity("Green Sun's Zenith", ""));
cubeCards.add(new CardIdentity("Grief", ""));
cubeCards.add(new CardIdentity("Grim Monolith", ""));
@@ -208,14 +220,11 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Haywire Mite", ""));
cubeCards.add(new CardIdentity("Headliner Scarlett", ""));
cubeCards.add(new CardIdentity("Hedge Maze", ""));
- cubeCards.add(new CardIdentity("Heritage Reclamation", ""));
- cubeCards.add(new CardIdentity("Hero of Bladehold", ""));
cubeCards.add(new CardIdentity("Hexdrinker", ""));
- cubeCards.add(new CardIdentity("High Tide", ""));
cubeCards.add(new CardIdentity("Horizon Canopy", ""));
- cubeCards.add(new CardIdentity("Huatli, Poet of Unity", ""));
cubeCards.add(new CardIdentity("Hullbreacher", ""));
cubeCards.add(new CardIdentity("Hymn to Tourach", ""));
+ cubeCards.add(new CardIdentity("Icetill Explorer", ""));
cubeCards.add(new CardIdentity("Ignoble Hierarch", ""));
cubeCards.add(new CardIdentity("Imperial Seal", ""));
cubeCards.add(new CardIdentity("Indatha Triome", ""));
@@ -223,7 +232,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Inquisition of Kozilek", ""));
cubeCards.add(new CardIdentity("Inspiring Vantage", ""));
cubeCards.add(new CardIdentity("Inti, Seneschal of the Sun", ""));
- cubeCards.add(new CardIdentity("Intrepid Adversary", ""));
+ cubeCards.add(new CardIdentity("Invigorate", ""));
cubeCards.add(new CardIdentity("Ivora, Insatiable Heir", ""));
cubeCards.add(new CardIdentity("Jace, Vryn's Prodigy", ""));
cubeCards.add(new CardIdentity("Jace, Wielder of Mysteries", ""));
@@ -240,14 +249,15 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Kellan, Planar Trailblazer", ""));
cubeCards.add(new CardIdentity("Ketria Triome", ""));
cubeCards.add(new CardIdentity("Kitesail Freebooter", ""));
+ cubeCards.add(new CardIdentity("Kitsa, Otterball Elite", ""));
cubeCards.add(new CardIdentity("Knight of the Reliquary", ""));
cubeCards.add(new CardIdentity("Kolaghan's Command", ""));
cubeCards.add(new CardIdentity("Laelia, the Blade Reforged", ""));
cubeCards.add(new CardIdentity("Lavaspur Boots", ""));
cubeCards.add(new CardIdentity("Ledger Shredder", ""));
cubeCards.add(new CardIdentity("Legion Extruder", ""));
+ cubeCards.add(new CardIdentity("Legolas's Quick Reflexes", ""));
cubeCards.add(new CardIdentity("Leovold, Emissary of Trest", ""));
- cubeCards.add(new CardIdentity("Lethal Scheme", ""));
cubeCards.add(new CardIdentity("Leyline Binding", ""));
cubeCards.add(new CardIdentity("Library of Alexandria", ""));
cubeCards.add(new CardIdentity("Life // Death", ""));
@@ -260,6 +270,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Llanowar Elves", ""));
cubeCards.add(new CardIdentity("Loot, the Pathfinder", ""));
cubeCards.add(new CardIdentity("Loran of the Third Path", ""));
+ cubeCards.add(new CardIdentity("Lorien Revealed", ""));
cubeCards.add(new CardIdentity("Lose Focus", ""));
cubeCards.add(new CardIdentity("Lotus Cobra", ""));
cubeCards.add(new CardIdentity("Lotus Petal", ""));
@@ -267,10 +278,10 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Lurrus of the Dream-Den", ""));
cubeCards.add(new CardIdentity("Lush Portico", ""));
cubeCards.add(new CardIdentity("Lutri, the Spellchaser", ""));
- cubeCards.add(new CardIdentity("Lorien Revealed", ""));
cubeCards.add(new CardIdentity("Magda, Brazen Outlaw", ""));
cubeCards.add(new CardIdentity("Malcolm, Alluring Scoundrel", ""));
cubeCards.add(new CardIdentity("Malevolent Rumble", ""));
+ cubeCards.add(new CardIdentity("Mana Confluence", ""));
cubeCards.add(new CardIdentity("Mana Crypt", ""));
cubeCards.add(new CardIdentity("Mana Drain", ""));
cubeCards.add(new CardIdentity("Mana Leak", ""));
@@ -278,12 +289,12 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Mana Vault", ""));
cubeCards.add(new CardIdentity("Manamorphose", ""));
cubeCards.add(new CardIdentity("Manifold Key", ""));
- cubeCards.add(new CardIdentity("March of Otherworldly Light", ""));
cubeCards.add(new CardIdentity("Marsh Flats", ""));
cubeCards.add(new CardIdentity("Memory Jar", ""));
cubeCards.add(new CardIdentity("Memory Lapse", ""));
cubeCards.add(new CardIdentity("Metamorphosis Fanatic", ""));
cubeCards.add(new CardIdentity("Meticulous Archive", ""));
+ cubeCards.add(new CardIdentity("Mightform Harmonizer", ""));
cubeCards.add(new CardIdentity("Mind Stone", ""));
cubeCards.add(new CardIdentity("Mind Twist", ""));
cubeCards.add(new CardIdentity("Mine Collapse", ""));
@@ -292,7 +303,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Mishra's Bauble", ""));
cubeCards.add(new CardIdentity("Mishra's Workshop", ""));
cubeCards.add(new CardIdentity("Misty Rainforest", ""));
- cubeCards.add(new CardIdentity("Monastery Mentor", ""));
+ cubeCards.add(new CardIdentity("Monstrous Rage", ""));
cubeCards.add(new CardIdentity("Mother of Runes", ""));
cubeCards.add(new CardIdentity("Mox Diamond", ""));
cubeCards.add(new CardIdentity("Mox Emerald", ""));
@@ -301,19 +312,18 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Mox Pearl", ""));
cubeCards.add(new CardIdentity("Mox Ruby", ""));
cubeCards.add(new CardIdentity("Mox Sapphire", ""));
+ cubeCards.add(new CardIdentity("Multiversal Passage", ""));
+ cubeCards.add(new CardIdentity("Mutagenic Growth", ""));
cubeCards.add(new CardIdentity("Myr Battlesphere", ""));
cubeCards.add(new CardIdentity("Mystic Confluence", ""));
cubeCards.add(new CardIdentity("Mystical Tutor", ""));
cubeCards.add(new CardIdentity("Nadu, Winged Wisdom", ""));
cubeCards.add(new CardIdentity("Narset, Parter of Veils", ""));
cubeCards.add(new CardIdentity("Natural Order", ""));
- cubeCards.add(new CardIdentity("Nature's Lore", ""));
cubeCards.add(new CardIdentity("Necromancy", ""));
cubeCards.add(new CardIdentity("Nethergoyf", ""));
cubeCards.add(new CardIdentity("Nettlecyst", ""));
- cubeCards.add(new CardIdentity("Nexus of Becoming", ""));
cubeCards.add(new CardIdentity("Night's Whisper", ""));
- cubeCards.add(new CardIdentity("Nissa, Ascended Animist", ""));
cubeCards.add(new CardIdentity("Nissa, Who Shakes the World", ""));
cubeCards.add(new CardIdentity("No More Lies", ""));
cubeCards.add(new CardIdentity("Noble Hierarch", ""));
@@ -328,12 +338,12 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Orcish Lumberjack", ""));
cubeCards.add(new CardIdentity("Otawara, Soaring City", ""));
cubeCards.add(new CardIdentity("Otharri, Suns' Glory", ""));
+ cubeCards.add(new CardIdentity("Ouroboroid", ""));
cubeCards.add(new CardIdentity("Oust", ""));
cubeCards.add(new CardIdentity("Overgrown Tomb", ""));
cubeCards.add(new CardIdentity("Overlord of the Balemurk", ""));
cubeCards.add(new CardIdentity("Overlord of the Mistmoors", ""));
cubeCards.add(new CardIdentity("Palace Jailer", ""));
- cubeCards.add(new CardIdentity("Palantir of Orthanc", ""));
cubeCards.add(new CardIdentity("Paradoxical Outcome", ""));
cubeCards.add(new CardIdentity("Parallax Wave", ""));
cubeCards.add(new CardIdentity("Path to Exile", ""));
@@ -343,8 +353,8 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Phelia, Exuberant Shepherd", ""));
cubeCards.add(new CardIdentity("Phlage, Titan of Fire's Fury", ""));
cubeCards.add(new CardIdentity("Phyrexian Metamorph", ""));
- cubeCards.add(new CardIdentity("Phyrexian Revoker", ""));
cubeCards.add(new CardIdentity("Pillage the Bog", ""));
+ cubeCards.add(new CardIdentity("Plagon, Lord of the Beach", ""));
cubeCards.add(new CardIdentity("Plateau", ""));
cubeCards.add(new CardIdentity("Polluted Delta", ""));
cubeCards.add(new CardIdentity("Ponder", ""));
@@ -355,17 +365,15 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Primeval Titan", ""));
cubeCards.add(new CardIdentity("Prismatic Ending", ""));
cubeCards.add(new CardIdentity("Prismatic Vista", ""));
+ cubeCards.add(new CardIdentity("Proft's Eidetic Memory", ""));
cubeCards.add(new CardIdentity("Psychic Frog", ""));
cubeCards.add(new CardIdentity("Pyrogoyf", ""));
cubeCards.add(new CardIdentity("Pyrokinesis", ""));
- cubeCards.add(new CardIdentity("Qarsi Revenant", ""));
+ cubeCards.add(new CardIdentity("Quantum Riddler", ""));
cubeCards.add(new CardIdentity("Questing Beast", ""));
cubeCards.add(new CardIdentity("Raffine's Tower", ""));
- cubeCards.add(new CardIdentity("Raffine, Scheming Seer", ""));
cubeCards.add(new CardIdentity("Ragavan, Nimble Pilferer", ""));
- cubeCards.add(new CardIdentity("Rain of Filth", ""));
- cubeCards.add(new CardIdentity("Rampaging Raptor", ""));
- cubeCards.add(new CardIdentity("Ramunap Excavator", ""));
+ cubeCards.add(new CardIdentity("Rancor", ""));
cubeCards.add(new CardIdentity("Raucous Theater", ""));
cubeCards.add(new CardIdentity("Raugrin Triome", ""));
cubeCards.add(new CardIdentity("Razorverge Thicket", ""));
@@ -374,19 +382,14 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Relic of Sauron", ""));
cubeCards.add(new CardIdentity("Remand", ""));
cubeCards.add(new CardIdentity("Reprieve", ""));
- cubeCards.add(new CardIdentity("Restless Vinestalk", ""));
cubeCards.add(new CardIdentity("Retrofitter Foundry", ""));
cubeCards.add(new CardIdentity("Riverpyre Verge", ""));
cubeCards.add(new CardIdentity("Robber of the Rich", ""));
- cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary", ""));
cubeCards.add(new CardIdentity("Sacred Foundry", ""));
cubeCards.add(new CardIdentity("Saheeli, Sublime Artificer", ""));
- cubeCards.add(new CardIdentity("Sandstorm Salvager", ""));
- cubeCards.add(new CardIdentity("Satya, Aetherflux Genius", ""));
cubeCards.add(new CardIdentity("Savai Triome", ""));
cubeCards.add(new CardIdentity("Savannah", ""));
cubeCards.add(new CardIdentity("Scalding Tarn", ""));
- cubeCards.add(new CardIdentity("Scrapwork Mutt", ""));
cubeCards.add(new CardIdentity("Screaming Nemesis", ""));
cubeCards.add(new CardIdentity("Scrubland", ""));
cubeCards.add(new CardIdentity("Scythecat Cub", ""));
@@ -394,14 +397,13 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Seasoned Pyromancer", ""));
cubeCards.add(new CardIdentity("Securitron Squadron", ""));
cubeCards.add(new CardIdentity("Sedgemoor Witch", ""));
- cubeCards.add(new CardIdentity("Seething Song", ""));
cubeCards.add(new CardIdentity("Sensei's Divining Top", ""));
cubeCards.add(new CardIdentity("Sentinel of the Nameless City", ""));
cubeCards.add(new CardIdentity("Serra Paragon", ""));
- cubeCards.add(new CardIdentity("Shadowspear", ""));
cubeCards.add(new CardIdentity("Shadowy Backstreet", ""));
cubeCards.add(new CardIdentity("Shallow Grave", ""));
cubeCards.add(new CardIdentity("Shelldock Isle", ""));
+ cubeCards.add(new CardIdentity("Sheltering Landscape", ""));
cubeCards.add(new CardIdentity("Sheoldred's Edict", ""));
cubeCards.add(new CardIdentity("Sheoldred, the Apocalypse", ""));
cubeCards.add(new CardIdentity("Shifting Woodland", ""));
@@ -411,7 +413,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Six", ""));
cubeCards.add(new CardIdentity("Skullclamp", ""));
cubeCards.add(new CardIdentity("Skyclave Apparition", ""));
- cubeCards.add(new CardIdentity("Slimefoot and Squee", ""));
+ cubeCards.add(new CardIdentity("Slickshot Show-Off", ""));
cubeCards.add(new CardIdentity("Smuggler's Copter", ""));
cubeCards.add(new CardIdentity("Snapcaster Mage", ""));
cubeCards.add(new CardIdentity("Sneak Attack", ""));
@@ -426,8 +428,8 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Spellseeker", ""));
cubeCards.add(new CardIdentity("Spirebluff Canal", ""));
cubeCards.add(new CardIdentity("Springheart Nantuko", ""));
- cubeCards.add(new CardIdentity("Spyglass Siren", ""));
cubeCards.add(new CardIdentity("Staff of the Storyteller", ""));
+ cubeCards.add(new CardIdentity("Starting Town", ""));
cubeCards.add(new CardIdentity("Static Prison", ""));
cubeCards.add(new CardIdentity("Steam Vents", ""));
cubeCards.add(new CardIdentity("Stern Scolding", ""));
@@ -440,7 +442,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Sunbaked Canyon", ""));
cubeCards.add(new CardIdentity("Sunbillow Verge", ""));
cubeCards.add(new CardIdentity("Sunfall", ""));
- cubeCards.add(new CardIdentity("Sunken Ruins", ""));
+ cubeCards.add(new CardIdentity("Suplex", ""));
cubeCards.add(new CardIdentity("Sword of the Meek", ""));
cubeCards.add(new CardIdentity("Swords to Plowshares", ""));
cubeCards.add(new CardIdentity("Sylvan Caryatid", ""));
@@ -455,7 +457,6 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Tamiyo, Collector of Tales", ""));
cubeCards.add(new CardIdentity("Tamiyo, Inquisitive Student", ""));
cubeCards.add(new CardIdentity("Tarfire", ""));
- cubeCards.add(new CardIdentity("Tarmogoyf", ""));
cubeCards.add(new CardIdentity("Tear Asunder", ""));
cubeCards.add(new CardIdentity("Teferi, Hero of Dominaria", ""));
cubeCards.add(new CardIdentity("Teferi, Time Raveler", ""));
@@ -463,9 +464,10 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Tendrils of Agony", ""));
cubeCards.add(new CardIdentity("Territorial Kavu", ""));
cubeCards.add(new CardIdentity("Tersa Lightshatter", ""));
+ cubeCards.add(new CardIdentity("Tezzeret, Cruel Captain", ""));
cubeCards.add(new CardIdentity("Thalia, Guardian of Thraben", ""));
cubeCards.add(new CardIdentity("Thassa's Oracle", ""));
- cubeCards.add(new CardIdentity("The Aetherspark", ""));
+ cubeCards.add(new CardIdentity("The Endstone", ""));
cubeCards.add(new CardIdentity("The Mightstone and Weakstone", ""));
cubeCards.add(new CardIdentity("The One Ring", ""));
cubeCards.add(new CardIdentity("The Wandering Emperor", ""));
@@ -479,7 +481,9 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Thraben Inspector", ""));
cubeCards.add(new CardIdentity("Through the Breach", ""));
cubeCards.add(new CardIdentity("Thundering Falls", ""));
+ cubeCards.add(new CardIdentity("Thundertrap Trainer", ""));
cubeCards.add(new CardIdentity("Tidehollow Sculler", ""));
+ cubeCards.add(new CardIdentity("Tifa Lockhart", ""));
cubeCards.add(new CardIdentity("Time Spiral", ""));
cubeCards.add(new CardIdentity("Time Walk", ""));
cubeCards.add(new CardIdentity("Time Warp", ""));
@@ -492,18 +496,14 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Torsten, Founder of Benalia", ""));
cubeCards.add(new CardIdentity("Touch the Spirit Realm", ""));
cubeCards.add(new CardIdentity("Toxic Deluge", ""));
- cubeCards.add(new CardIdentity("Treachery", ""));
+ cubeCards.add(new CardIdentity("Traveling Chocobo", ""));
cubeCards.add(new CardIdentity("Treasure Cruise", ""));
cubeCards.add(new CardIdentity("Trinket Mage", ""));
- cubeCards.add(new CardIdentity("Triplicate Titan", ""));
- //cubeCards.add(new CardIdentity("Troll of Khazad-dom", ""));
+ cubeCards.add(new CardIdentity("Troll of Khazad-dum", ""));
cubeCards.add(new CardIdentity("Tropical Island", ""));
- cubeCards.add(new CardIdentity("True-Name Nemesis", ""));
- cubeCards.add(new CardIdentity("Trumpeting Carnosaur", ""));
cubeCards.add(new CardIdentity("Tundra", ""));
- cubeCards.add(new CardIdentity("Turnabout", ""));
+ cubeCards.add(new CardIdentity("Twisted Landscape", ""));
cubeCards.add(new CardIdentity("Ugin, Eye of the Storms", ""));
- cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre", ""));
cubeCards.add(new CardIdentity("Ulvenwald Oddity", ""));
cubeCards.add(new CardIdentity("Umezawa's Jitte", ""));
cubeCards.add(new CardIdentity("Undercity Sewers", ""));
@@ -513,6 +513,7 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Unearth", ""));
cubeCards.add(new CardIdentity("Unexpectedly Absent", ""));
cubeCards.add(new CardIdentity("Unholy Heat", ""));
+ cubeCards.add(new CardIdentity("Unruly Krasis", ""));
cubeCards.add(new CardIdentity("Upheaval", ""));
cubeCards.add(new CardIdentity("Urborg, Tomb of Yawgmoth", ""));
cubeCards.add(new CardIdentity("Uro, Titan of Nature's Wrath", ""));
@@ -526,10 +527,10 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Verdant Catacombs", ""));
cubeCards.add(new CardIdentity("Vindicate", ""));
cubeCards.add(new CardIdentity("Virtue of Loyalty", ""));
+ cubeCards.add(new CardIdentity("Vivi Ornitier", ""));
cubeCards.add(new CardIdentity("Voice of Victory", ""));
cubeCards.add(new CardIdentity("Volcanic Island", ""));
cubeCards.add(new CardIdentity("Voldaren Epicure", ""));
- //cubeCards.add(new CardIdentity("Walk-In Closet // Forgotten Cellar", ""));
cubeCards.add(new CardIdentity("Walking Ballista", ""));
cubeCards.add(new CardIdentity("Wasteland", ""));
cubeCards.add(new CardIdentity("Wastewood Verge", ""));
@@ -544,7 +545,6 @@ public class VintageCube extends DraftCube {
cubeCards.add(new CardIdentity("Witherbloom Apprentice", ""));
cubeCards.add(new CardIdentity("Wooded Foothills", ""));
cubeCards.add(new CardIdentity("Woodfall Primus", ""));
- cubeCards.add(new CardIdentity("Worldly Tutor", ""));
cubeCards.add(new CardIdentity("Worldspine Wurm", ""));
cubeCards.add(new CardIdentity("Wrath of God", ""));
cubeCards.add(new CardIdentity("Wrenn and Six", ""));
diff --git a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml
index e14dff2efdb..93ae403eb28 100644
--- a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-tournament-constructed
diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
index e2ad7473e1b..8dc662b4f1f 100644
--- a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.57
+ 1.4.58
mage-tournament-sealed
diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml
index e216bbc0eea..ca98aec652a 100644
--- a/Mage.Server.Plugins/pom.xml
+++ b/Mage.Server.Plugins/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-server-plugins
diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml
index 0e363c314a5..802054fbe5a 100644
--- a/Mage.Server/pom.xml
+++ b/Mage.Server/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-server
@@ -208,7 +208,7 @@
org.apache.commons
commons-compress
- 1.27.1
+ 1.28.0
org.apache.shiro
diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml
index b04a9bb367e..e3f52957c62 100644
--- a/Mage.Sets/pom.xml
+++ b/Mage.Sets/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-sets
diff --git a/Mage.Sets/src/mage/cards/a/AbbyMercilessSoldier.java b/Mage.Sets/src/mage/cards/a/AbbyMercilessSoldier.java
new file mode 100644
index 00000000000..768d6508925
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/a/AbbyMercilessSoldier.java
@@ -0,0 +1,55 @@
+package mage.cards.a;
+
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldAbility;
+import mage.abilities.dynamicvalue.common.ManaSpentToCastCount;
+import mage.abilities.effects.common.CastSourceTriggeredAbility;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.abilities.effects.common.EntersBattlefieldUnderControlOfOpponentOfChoiceEffect;
+import mage.abilities.keyword.PartnerSurvivorsAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.game.permanent.token.CordycepsInfectedToken;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class AbbyMercilessSoldier extends CardImpl {
+
+ public AbbyMercilessSoldier(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SURVIVOR);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(4);
+
+ // When you cast this spell, create a number of 1/1 black Fungus Zombie creature tokens named Cordyceps Infected equal to the amount of mana spent to cast it.
+ this.addAbility(new CastSourceTriggeredAbility(
+ new CreateTokenEffect(new CordycepsInfectedToken(), ManaSpentToCastCount.instance)
+ .setText("create a number of 1/1 black Fungus Zombie creature tokens " +
+ "named Cordyceps Infected equal to the amount of mana spent to cast it")
+ ));
+
+ // Abby enters under the control of an opponent of your choice.
+ this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldUnderControlOfOpponentOfChoiceEffect()));
+
+ // Partner--Survivors
+ this.addAbility(PartnerSurvivorsAbility.getInstance());
+ }
+
+ private AbbyMercilessSoldier(final AbbyMercilessSoldier card) {
+ super(card);
+ }
+
+ @Override
+ public AbbyMercilessSoldier copy() {
+ return new AbbyMercilessSoldier(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/a/AbsoluteVirtue.java b/Mage.Sets/src/mage/cards/a/AbsoluteVirtue.java
index 3fe8e6419f3..42c0abafe60 100644
--- a/Mage.Sets/src/mage/cards/a/AbsoluteVirtue.java
+++ b/Mage.Sets/src/mage/cards/a/AbsoluteVirtue.java
@@ -1,22 +1,17 @@
package mage.cards.a;
import mage.MageInt;
-import mage.MageItem;
-import mage.MageObject;
import mage.abilities.common.CantBeCounteredSourceAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.GainAbilityControllerEffect;
import mage.abilities.keyword.FlyingAbility;
-import mage.abilities.keyword.ProtectionAbility;
+import mage.abilities.keyword.ProtectionFromEachOpponentAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.StaticFilters;
-import mage.game.Game;
-import java.util.Optional;
import java.util.UUID;
/**
@@ -40,7 +35,7 @@ public final class AbsoluteVirtue extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// You have protection from each of your opponents.
- this.addAbility(new SimpleStaticAbility(new GainAbilityControllerEffect(new AbsoluteVirtueAbility())));
+ this.addAbility(new SimpleStaticAbility(new GainAbilityControllerEffect(new ProtectionFromEachOpponentAbility())));
}
private AbsoluteVirtue(final AbsoluteVirtue card) {
@@ -52,34 +47,3 @@ public final class AbsoluteVirtue extends CardImpl {
return new AbsoluteVirtue(this);
}
}
-
-class AbsoluteVirtueAbility extends ProtectionAbility {
-
- public AbsoluteVirtueAbility() {
- super(StaticFilters.FILTER_CARD);
- }
-
- private AbsoluteVirtueAbility(final AbsoluteVirtueAbility ability) {
- super(ability);
- }
-
- @Override
- public AbsoluteVirtueAbility copy() {
- return new AbsoluteVirtueAbility(this);
- }
-
- @Override
- public String getRule() {
- return "protection from each of your opponents";
- }
-
- @Override
- public boolean canTarget(MageObject source, Game game) {
- return Optional
- .ofNullable(source)
- .map(MageItem::getId)
- .map(game::getControllerId)
- .map(uuid -> !game.getOpponents(this.getSourceId()).contains(uuid))
- .orElse(true);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/a/AloySaviorOfMeridian.java b/Mage.Sets/src/mage/cards/a/AloySaviorOfMeridian.java
new file mode 100644
index 00000000000..eec53f63ede
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/a/AloySaviorOfMeridian.java
@@ -0,0 +1,94 @@
+package mage.cards.a;
+
+import mage.MageInt;
+import mage.MageObject;
+import mage.abilities.Ability;
+import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.keyword.DiscoverEffect;
+import mage.abilities.keyword.ReachAbility;
+import mage.abilities.keyword.VigilanceAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.StaticFilters;
+import mage.game.Game;
+import mage.players.Player;
+
+import java.util.Objects;
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class AloySaviorOfMeridian extends CardImpl {
+
+ public AloySaviorOfMeridian(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{U}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.WARRIOR);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(5);
+
+ // Vigilance
+ this.addAbility(VigilanceAbility.getInstance());
+
+ // Reach
+ this.addAbility(ReachAbility.getInstance());
+
+ // In You, All Things Are Possible -- Whenever one or more artifact creatures you control attack, discover X, where X is the greatest power among them.
+ this.addAbility(new AttacksWithCreaturesTriggeredAbility(
+ new AloySaviorOfMeridianEffect(), 1, StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE
+ ).setTriggerPhrase("Whenever one or more artifact creatures you control attack, ").withFlavorWord("In You, All Things Are Possible"));
+ }
+
+ private AloySaviorOfMeridian(final AloySaviorOfMeridian card) {
+ super(card);
+ }
+
+ @Override
+ public AloySaviorOfMeridian copy() {
+ return new AloySaviorOfMeridian(this);
+ }
+}
+
+class AloySaviorOfMeridianEffect extends OneShotEffect {
+
+ AloySaviorOfMeridianEffect() {
+ super(Outcome.Benefit);
+ staticText = "discover X, where X is the greatest power among them";
+ }
+
+ private AloySaviorOfMeridianEffect(final AloySaviorOfMeridianEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public AloySaviorOfMeridianEffect copy() {
+ return new AloySaviorOfMeridianEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ if (player == null) {
+ return false;
+ }
+ int power = this
+ .getTargetPointer()
+ .getTargets(game, source)
+ .stream()
+ .map(game::getPermanentOrLKIBattlefield)
+ .filter(Objects::nonNull)
+ .map(MageObject::getPower)
+ .mapToInt(MageInt::getValue)
+ .max()
+ .orElse(0);
+ return DiscoverEffect.doDiscover(player, power, game, source) != null;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/a/AmarantCoral.java b/Mage.Sets/src/mage/cards/a/AmarantCoral.java
new file mode 100644
index 00000000000..cbb41f5a7cc
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/a/AmarantCoral.java
@@ -0,0 +1,50 @@
+package mage.cards.a;
+
+import mage.MageInt;
+import mage.abilities.common.AttacksEachCombatStaticAbility;
+import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
+import mage.abilities.effects.common.DamageEachOtherOpponentThatMuchEffect;
+import mage.abilities.keyword.TrampleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class AmarantCoral extends CardImpl {
+
+ public AmarantCoral(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{G}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.MONK);
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(4);
+
+ // Trample
+ this.addAbility(TrampleAbility.getInstance());
+
+ // Amarant Coral attacks each combat if able.
+ this.addAbility(new AttacksEachCombatStaticAbility());
+
+ // No Mercy -- Whenever Amarant Coral deals combat damage to an opponent, it deals that much damage to each other opponent.
+ this.addAbility(new DealsDamageToOpponentTriggeredAbility(
+ new DamageEachOtherOpponentThatMuchEffect(), false, true, true
+ ).withFlavorWord("No Mercy"));
+ }
+
+ private AmarantCoral(final AmarantCoral card) {
+ super(card);
+ }
+
+ @Override
+ public AmarantCoral copy() {
+ return new AmarantCoral(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/a/AshlingsCommand.java b/Mage.Sets/src/mage/cards/a/AshlingsCommand.java
new file mode 100644
index 00000000000..0c0cd9b29d9
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/a/AshlingsCommand.java
@@ -0,0 +1,58 @@
+package mage.cards.a;
+
+import mage.abilities.Mode;
+import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
+import mage.abilities.effects.common.CreateTokenTargetEffect;
+import mage.abilities.effects.common.DamageAllControlledTargetEffect;
+import mage.abilities.effects.common.DrawCardTargetEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.filter.FilterPermanent;
+import mage.filter.common.FilterControlledPermanent;
+import mage.game.permanent.token.TreasureToken;
+import mage.target.TargetPermanent;
+import mage.target.TargetPlayer;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class AshlingsCommand extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ELEMENTAL);
+
+ public AshlingsCommand(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.KINDRED, CardType.INSTANT}, "{3}{U}{R}");
+
+ this.subtype.add(SubType.ELEMENTAL);
+
+ // Choose two --
+ this.getSpellAbility().getModes().setMinModes(2);
+ this.getSpellAbility().getModes().setMaxModes(2);
+
+ // * Create a token that's a copy of target Elemental you control.
+ this.getSpellAbility().addEffect(new CreateTokenCopyTargetEffect());
+ this.getSpellAbility().addTarget(new TargetPermanent(filter));
+
+ // * Target player draws two cards.
+ this.getSpellAbility().addMode(new Mode(new DrawCardTargetEffect(2)).addTarget(new TargetPlayer()));
+
+ // * Ashling's Command deals 2 damage to each creature target player controls.
+ this.getSpellAbility().addMode(new Mode(new DamageAllControlledTargetEffect(2)).addTarget(new TargetPlayer()));
+
+ // * Target player creates two Treasure tokens.
+ this.getSpellAbility().addMode(new Mode(new CreateTokenTargetEffect(new TreasureToken(), 2)).addTarget(new TargetPlayer()));
+ }
+
+ private AshlingsCommand(final AshlingsCommand card) {
+ super(card);
+ }
+
+ @Override
+ public AshlingsCommand copy() {
+ return new AshlingsCommand(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/a/AtreusImpulsiveSon.java b/Mage.Sets/src/mage/cards/a/AtreusImpulsiveSon.java
new file mode 100644
index 00000000000..44e0980ea2d
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/a/AtreusImpulsiveSon.java
@@ -0,0 +1,64 @@
+package mage.cards.a;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.dynamicvalue.DynamicValue;
+import mage.abilities.dynamicvalue.common.CountersControllerCount;
+import mage.abilities.effects.common.DamagePlayersEffect;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.discard.DiscardControllerEffect;
+import mage.abilities.keyword.PartnerFatherAndSonAbility;
+import mage.abilities.keyword.ReachAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.constants.TargetController;
+import mage.counters.CounterType;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class AtreusImpulsiveSon extends CardImpl {
+
+ private static final DynamicValue xValue = new CountersControllerCount(CounterType.EXPERIENCE);
+
+ public AtreusImpulsiveSon(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{R}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.GOD);
+ this.subtype.add(SubType.ARCHER);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(4);
+
+ // Reach
+ this.addAbility(ReachAbility.getInstance());
+
+ // {3}, {T}: Draw a card for each experience counter you have, then discard a card. Atreus, Impulsive Son deals 2 damage to each opponent.
+ Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(xValue)
+ .setText("draw a card for each experience counter you have"), new GenericManaCost(3));
+ ability.addCost(new TapSourceCost());
+ ability.addEffect(new DiscardControllerEffect(1).concatBy(", then"));
+ ability.addEffect(new DamagePlayersEffect(2, TargetController.OPPONENT));
+ this.addAbility(ability);
+
+ // Partner--Father & son
+ this.addAbility(PartnerFatherAndSonAbility.getInstance());
+ }
+
+ private AtreusImpulsiveSon(final AtreusImpulsiveSon card) {
+ super(card);
+ }
+
+ @Override
+ public AtreusImpulsiveSon copy() {
+ return new AtreusImpulsiveSon(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/b/BitterbloomBearer.java b/Mage.Sets/src/mage/cards/b/BitterbloomBearer.java
new file mode 100644
index 00000000000..9f12a8bd738
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/b/BitterbloomBearer.java
@@ -0,0 +1,51 @@
+package mage.cards.b;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
+import mage.abilities.keyword.FlashAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.game.permanent.token.FaerieBlueBlackToken;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class BitterbloomBearer extends CardImpl {
+
+ public BitterbloomBearer(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{B}");
+
+ this.subtype.add(SubType.FAERIE);
+ this.subtype.add(SubType.ROGUE);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // Flash
+ this.addAbility(FlashAbility.getInstance());
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // At the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying.
+ Ability ability = new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1));
+ ability.addEffect(new CreateTokenEffect(new FaerieBlueBlackToken()).concatBy("and"));
+ this.addAbility(ability);
+ }
+
+ private BitterbloomBearer(final BitterbloomBearer card) {
+ super(card);
+ }
+
+ @Override
+ public BitterbloomBearer copy() {
+ return new BitterbloomBearer(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/b/BrilliantWings.java b/Mage.Sets/src/mage/cards/b/BrilliantWings.java
new file mode 100644
index 00000000000..c7c2736f83d
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/b/BrilliantWings.java
@@ -0,0 +1,69 @@
+package mage.cards.b;
+
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.common.AttachEffect;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
+import mage.abilities.keyword.EnchantAbility;
+import mage.abilities.keyword.FlashAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.keyword.HexproofAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.*;
+import mage.filter.StaticFilters;
+import mage.target.TargetPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class BrilliantWings extends CardImpl {
+
+ public BrilliantWings(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
+
+ this.subtype.add(SubType.AURA);
+
+ // Flash
+ this.addAbility(FlashAbility.getInstance());
+
+ // Enchant creature you control
+ TargetPermanent auraTarget = new TargetPermanent(StaticFilters.FILTER_CONTROLLED_CREATURE);
+ this.getSpellAbility().addTarget(auraTarget);
+ this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
+ this.addAbility(new EnchantAbility(auraTarget));
+
+ // Enchanted creature has flying and hexproof.
+ Ability ability = new SimpleStaticAbility(new GainAbilityAttachedEffect(
+ FlyingAbility.getInstance(), AttachmentType.AURA
+ ));
+ ability.addEffect(new GainAbilityAttachedEffect(
+ HexproofAbility.getInstance(), AttachmentType.AURA
+ ).setText("and hexproof"));
+ this.addAbility(ability);
+
+ // Whenever a creature you control enters, you may pay {1}. If you do, attach this Aura to that creature.
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(
+ Zone.BATTLEFIELD,
+ new DoIfCostPaid(
+ new AttachEffect(Outcome.BoostCreature, "attach this Aura to that creature"),
+ new GenericManaCost(1)
+ ), StaticFilters.FILTER_CONTROLLED_CREATURE,
+ false, SetTargetPointer.PERMANENT
+ ));
+ }
+
+ private BrilliantWings(final BrilliantWings card) {
+ super(card);
+ }
+
+ @Override
+ public BrilliantWings copy() {
+ return new BrilliantWings(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/c/CampsiteCuisine.java b/Mage.Sets/src/mage/cards/c/CampsiteCuisine.java
new file mode 100644
index 00000000000..10d5eccf412
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/c/CampsiteCuisine.java
@@ -0,0 +1,103 @@
+package mage.cards.c;
+
+import mage.abilities.Ability;
+import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
+import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.game.permanent.token.FoodToken;
+import mage.players.Player;
+import mage.target.common.TargetAttackingCreature;
+import mage.target.common.TargetSacrifice;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class CampsiteCuisine extends CardImpl {
+
+ public CampsiteCuisine(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}");
+
+ // Whenever this enchantment or a legendary creature you control enters, create a Food token.
+ this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(
+ new CreateTokenEffect(new FoodToken()), StaticFilters.FILTER_CREATURE_LEGENDARY, false, true
+ ).setTriggerPhrase("Whenever this enchantment or a legendary creature you control enters, "));
+
+ // Whenever you attack, you may sacrifice X Foods. When you do, up to X target attacking creatures each get +3/+3 and gain trample and indestructible until end of turn.
+ this.addAbility(new AttacksWithCreaturesTriggeredAbility(new CampsiteCuisineEffect(), 1));
+ }
+
+ private CampsiteCuisine(final CampsiteCuisine card) {
+ super(card);
+ }
+
+ @Override
+ public CampsiteCuisine copy() {
+ return new CampsiteCuisine(this);
+ }
+}
+
+class CampsiteCuisineEffect extends OneShotEffect {
+
+ private static final FilterPermanent filter = new FilterPermanent(SubType.FOOD, "Foods");
+
+ CampsiteCuisineEffect() {
+ super(Outcome.Benefit);
+ staticText = "you may sacrifice X Foods. When you do, up to X target attacking creatures " +
+ "each get +3/+3 and gain trample and indestructible until end of turn";
+ }
+
+ private CampsiteCuisineEffect(final CampsiteCuisineEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public CampsiteCuisineEffect copy() {
+ return new CampsiteCuisineEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ if (player == null) {
+ return false;
+ }
+ TargetSacrifice target = new TargetSacrifice(0, Integer.MAX_VALUE, filter);
+ player.choose(Outcome.Sacrifice, target, source, game);
+ int count = 0;
+ for (UUID targetId : target.getTargets()) {
+ Permanent permanent = game.getPermanent(targetId);
+ if (permanent != null && permanent.sacrifice(source, game)) {
+ count++;
+ }
+ }
+ if (count < 1) {
+ return false;
+ }
+ ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new BoostTargetEffect(3, 3)
+ .setText("up to X target attacking creatures each get +3/+3"), false);
+ ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance())
+ .setText("and gain trample"));
+ ability.addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance())
+ .setText("and indestructible until end of turn"));
+ ability.addTarget(new TargetAttackingCreature(0, count));
+ game.fireReflexiveTriggeredAbility(ability, source);
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/Deceit.java b/Mage.Sets/src/mage/cards/d/Deceit.java
new file mode 100644
index 00000000000..5bc2bc97b13
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/Deceit.java
@@ -0,0 +1,65 @@
+package mage.cards.d;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.condition.common.TwoOfManaColorSpentCondition;
+import mage.abilities.effects.common.ReturnToHandTargetEffect;
+import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect;
+import mage.abilities.keyword.EvokeAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.common.FilterNonlandPermanent;
+import mage.filter.predicate.mageobject.AnotherPredicate;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetOpponent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class Deceit extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterNonlandPermanent("other target nonland permanent");
+
+ static {
+ filter.add(AnotherPredicate.instance);
+ }
+
+ public Deceit(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U/B}{U/B}");
+
+ this.subtype.add(SubType.ELEMENTAL);
+ this.subtype.add(SubType.INCARNATION);
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(5);
+
+ // When this creature enters, if {U}{U} was spent to cast it, return up to one other target nonland permanent to its owner's hand.
+ Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()).withInterveningIf(TwoOfManaColorSpentCondition.BLUE);
+ ability.addTarget(new TargetPermanent(0, 1, filter));
+ this.addAbility(ability);
+
+ // When this creature enters, if {B}{B} was spent to cast it, target opponent reveals their hand. You choose a nonland card from it. That player discards that card.
+ ability = new EntersBattlefieldTriggeredAbility(new DiscardCardYouChooseTargetEffect(StaticFilters.FILTER_CARD_NON_LAND))
+ .withInterveningIf(TwoOfManaColorSpentCondition.BLACK);
+ ability.addTarget(new TargetOpponent());
+ this.addAbility(ability);
+
+ // Evoke {U/B}{U/B}
+ this.addAbility(new EvokeAbility("{U/B}{U/B}"));
+ }
+
+ private Deceit(final Deceit card) {
+ super(card);
+ }
+
+ @Override
+ public Deceit copy() {
+ return new Deceit(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/d/DuelistsFlame.java b/Mage.Sets/src/mage/cards/d/DuelistsFlame.java
new file mode 100644
index 00000000000..01eae7cd35d
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/d/DuelistsFlame.java
@@ -0,0 +1,102 @@
+package mage.cards.d;
+
+import mage.abilities.Ability;
+import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
+import mage.abilities.dynamicvalue.common.GetXValue;
+import mage.abilities.dynamicvalue.common.StaticValue;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.keyword.TrampleAbility;
+import mage.cards.*;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.predicate.permanent.BlockedPredicate;
+import mage.game.Game;
+import mage.players.Player;
+import mage.target.TargetCard;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetCardInLibrary;
+import mage.util.CardUtil;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class DuelistsFlame extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterControlledCreaturePermanent("blocked creature you control");
+
+ static {
+ filter.add(BlockedPredicate.instance);
+ }
+
+ public DuelistsFlame(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{R}{R}");
+
+ // Until end of turn, target blocked creature you control gets +X/+0 and gains trample and "Whenever this creature deals combat damage to a player, look at that many cards from the top of your library. Exile up to one nonland card from among them and put the rest on the bottom of your library in a random order. You may cast the exiled card without paying its mana cost."
+ this.getSpellAbility().addEffect(new BoostTargetEffect(GetXValue.instance, StaticValue.get(0))
+ .setText("until end of turn, target blocked creature you control gets +X/+0"));
+ this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance()).setText("and has trample"));
+ this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
+ new DealsCombatDamageToAPlayerTriggeredAbility(new DuelistsFlameEffect())
+ ).setText("and \"Whenever this creature deals combat damage to a player, " +
+ "look at that many cards from the top of your library. Exile up to one nonland card " +
+ "from among them and put the rest on the bottom of your library in a random order. " +
+ "You may cast the exiled card without paying its mana cost.\""));
+ this.getSpellAbility().addTarget(new TargetPermanent(filter));
+ }
+
+ private DuelistsFlame(final DuelistsFlame card) {
+ super(card);
+ }
+
+ @Override
+ public DuelistsFlame copy() {
+ return new DuelistsFlame(this);
+ }
+}
+
+class DuelistsFlameEffect extends OneShotEffect {
+
+ DuelistsFlameEffect() {
+ super(Outcome.Benefit);
+ staticText = "look at that many cards from the top of your library. " +
+ "Exile up to one nonland card from among them and put the rest on the bottom of your library " +
+ "in a random order. You may cast the exiled card without paying its mana cost";
+ }
+
+ private DuelistsFlameEffect(final DuelistsFlameEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public DuelistsFlameEffect copy() {
+ return new DuelistsFlameEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ int damage = (Integer) getValue("damage");
+ if (player == null || damage < 1) {
+ return false;
+ }
+ Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, damage));
+ TargetCard target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_NON_LAND);
+ player.choose(Outcome.PlayForFree, cards, target, source, game);
+ Card card = game.getCard(target.getFirstTarget());
+ player.moveCards(card, Zone.EXILED, source, game);
+ cards.retainZone(Zone.LIBRARY, game);
+ player.putCardsOnBottomOfLibrary(cards, game, source, false);
+ if (card != null) {
+ CardUtil.castSpellWithAttributesForFree(player, source, game, card);
+ }
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/e/EirduCarrierOfDawn.java b/Mage.Sets/src/mage/cards/e/EirduCarrierOfDawn.java
new file mode 100644
index 00000000000..65606b79efd
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/e/EirduCarrierOfDawn.java
@@ -0,0 +1,71 @@
+package mage.cards.e;
+
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilityControlledSpellsEffect;
+import mage.abilities.keyword.ConvokeAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.keyword.LifelinkAbility;
+import mage.abilities.keyword.TransformAbility;
+import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.common.FilterNonlandCard;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.AbilityPredicate;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class EirduCarrierOfDawn extends CardImpl {
+
+ private static final FilterNonlandCard filter = new FilterNonlandCard("creature spells you cast");
+
+ static {
+ filter.add(CardType.CREATURE.getPredicate());
+ filter.add(Predicates.not(new AbilityPredicate(ConvokeAbility.class)));
+ }
+
+ public EirduCarrierOfDawn(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.ELEMENTAL);
+ this.subtype.add(SubType.GOD);
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(5);
+ this.secondSideCardClazz = mage.cards.i.IsiluCarrierOfTwilight.class;
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // Lifelink
+ this.addAbility(LifelinkAbility.getInstance());
+
+ // Creature spells you cast have convoke.
+ this.addAbility(new SimpleStaticAbility(new GainAbilityControlledSpellsEffect(new ConvokeAbility(), filter)));
+
+ // At the beginning of your first main phase, you may pay {B}. If you do, transform Eirdu.
+ this.addAbility(new TransformAbility());
+ this.addAbility(new BeginningOfFirstMainTriggeredAbility(
+ new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{B}"))
+ ));
+ }
+
+ private EirduCarrierOfDawn(final EirduCarrierOfDawn card) {
+ super(card);
+ }
+
+ @Override
+ public EirduCarrierOfDawn copy() {
+ return new EirduCarrierOfDawn(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/e/EllieBrickMaster.java b/Mage.Sets/src/mage/cards/e/EllieBrickMaster.java
new file mode 100644
index 00000000000..e89acc2d5c8
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/e/EllieBrickMaster.java
@@ -0,0 +1,107 @@
+package mage.cards.e;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.keyword.PartnerSurvivorsAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.*;
+import mage.game.Game;
+import mage.game.events.DefenderAttackedEvent;
+import mage.game.events.GameEvent;
+import mage.game.permanent.token.CordycepsInfectedToken;
+import mage.target.targetpointer.FixedTarget;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class EllieBrickMaster extends CardImpl {
+
+ public EllieBrickMaster(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SURVIVOR);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(1);
+
+ // Distract the Horde -- Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent.
+ this.addAbility(new EllieBrickMasterTriggeredAbility());
+
+ // Partner--Survivors
+ this.addAbility(PartnerSurvivorsAbility.getInstance());
+ }
+
+ private EllieBrickMaster(final EllieBrickMaster card) {
+ super(card);
+ }
+
+ @Override
+ public EllieBrickMaster copy() {
+ return new EllieBrickMaster(this);
+ }
+}
+
+class EllieBrickMasterTriggeredAbility extends TriggeredAbilityImpl {
+
+ EllieBrickMasterTriggeredAbility() {
+ super(Zone.BATTLEFIELD, new EllieBrickMasterEffect());
+ setTriggerPhrase("Whenever a player attacks one of your opponents, ");
+ withFlavorWord("Distract the Horde");
+ }
+
+ private EllieBrickMasterTriggeredAbility(final EllieBrickMasterTriggeredAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public EllieBrickMasterTriggeredAbility copy() {
+ return new EllieBrickMasterTriggeredAbility(this);
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.DEFENDER_ATTACKED;
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ DefenderAttackedEvent dEvent = (DefenderAttackedEvent) event;
+ if (!game.getOpponents(this.getControllerId()).contains(event.getTargetId())) {
+ return false;
+ }
+ this.getEffects().setTargetPointer(new FixedTarget(event.getTargetId()));
+ return true;
+ }
+}
+
+class EllieBrickMasterEffect extends OneShotEffect {
+
+ EllieBrickMasterEffect() {
+ super(Outcome.Benefit);
+ staticText = "that attacking player creates a tapped 1/1 black Fungus Zombie creature token " +
+ "named Cordyceps Infected that's attacking that opponent";
+ }
+
+ private EllieBrickMasterEffect(final EllieBrickMasterEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public EllieBrickMasterEffect copy() {
+ return new EllieBrickMasterEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ return new CordycepsInfectedToken().putOntoBattlefield(
+ 1, game, source, game.getActivePlayerId(),
+ true, true, getTargetPointer().getFirst(game, source)
+ );
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/e/EllieVengefulHunter.java b/Mage.Sets/src/mage/cards/e/EllieVengefulHunter.java
new file mode 100644
index 00000000000..dc328efafab
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/e/EllieVengefulHunter.java
@@ -0,0 +1,58 @@
+package mage.cards.e;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.PayLifeCost;
+import mage.abilities.costs.common.SacrificeTargetCost;
+import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.abilities.keyword.PartnerSurvivorsAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.StaticFilters;
+import mage.target.TargetPlayer;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class EllieVengefulHunter extends CardImpl {
+
+ public EllieVengefulHunter(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SURVIVOR);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(1);
+
+ // Pay 2 life, Sacrifice another creature: Ellie deals 2 damage to target player and gains indestructible until end of turn.
+ Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2), new PayLifeCost(2));
+ ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_ANOTHER_CREATURE));
+ ability.addEffect(new GainAbilitySourceEffect(
+ IndestructibleAbility.getInstance(), Duration.EndOfTurn
+ ).setText("and gains indestructible until end of turn"));
+ ability.addTarget(new TargetPlayer());
+ this.addAbility(ability);
+
+ // Partner--Survivors
+ this.addAbility(PartnerSurvivorsAbility.getInstance());
+ }
+
+ private EllieVengefulHunter(final EllieVengefulHunter card) {
+ super(card);
+ }
+
+ @Override
+ public EllieVengefulHunter copy() {
+ return new EllieVengefulHunter(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/e/Emptiness.java b/Mage.Sets/src/mage/cards/e/Emptiness.java
new file mode 100644
index 00000000000..747a3495a2f
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/e/Emptiness.java
@@ -0,0 +1,68 @@
+package mage.cards.e;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.condition.common.TwoOfManaColorSpentCondition;
+import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
+import mage.abilities.effects.common.counter.AddCountersTargetEffect;
+import mage.abilities.keyword.EvokeAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.ComparisonType;
+import mage.constants.SubType;
+import mage.counters.CounterType;
+import mage.filter.FilterCard;
+import mage.filter.common.FilterCreatureCard;
+import mage.filter.predicate.mageobject.ManaValuePredicate;
+import mage.target.common.TargetCardInYourGraveyard;
+import mage.target.common.TargetCreaturePermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class Emptiness extends CardImpl {
+
+ private static final FilterCard filter
+ = new FilterCreatureCard("creature card with mana value 3 or less from your graveyard");
+
+ static {
+ filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
+ }
+
+ public Emptiness(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W/B}{W/B}");
+
+ this.subtype.add(SubType.ELEMENTAL);
+ this.subtype.add(SubType.INCARNATION);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(5);
+
+ // When this creature enters, if {W}{W} was spent to cast it, return target creature card with mana value 3 or less from your graveyard to the battlefield.
+ Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect())
+ .withInterveningIf(TwoOfManaColorSpentCondition.WHITE);
+ ability.addTarget(new TargetCardInYourGraveyard(filter));
+ this.addAbility(ability);
+
+ // When this creature enters, if {B}{B} was spent to cast it, put three -1/-1 counters on up to one target creature.
+ ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance(2)))
+ .withInterveningIf(TwoOfManaColorSpentCondition.BLACK);
+ ability.addTarget(new TargetCreaturePermanent(0, 1));
+ this.addAbility(ability);
+
+ // Evoke {W/B}{W/B}
+ this.addAbility(new EvokeAbility("{W/B}{W/B}"));
+ }
+
+ private Emptiness(final Emptiness card) {
+ super(card);
+ }
+
+ @Override
+ public Emptiness copy() {
+ return new Emptiness(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FatedClash.java b/Mage.Sets/src/mage/cards/f/FatedClash.java
new file mode 100644
index 00000000000..4d582e3651c
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FatedClash.java
@@ -0,0 +1,56 @@
+package mage.cards.f;
+
+import mage.abilities.common.CastAsThoughItHadFlashIfConditionAbility;
+import mage.abilities.condition.CompoundCondition;
+import mage.abilities.condition.Condition;
+import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
+import mage.abilities.effects.common.DestroyAllEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.keyword.IndestructibleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.filter.StaticFilters;
+import mage.target.common.TargetControlledCreaturePermanent;
+import mage.target.common.TargetOpponentsCreaturePermanent;
+import mage.target.targetpointer.EachTargetPointer;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class FatedClash extends CardImpl {
+
+ private static final Condition condition = new CompoundCondition(
+ new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_ATTACKING_CREATURE, false),
+ new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_BLOCKING_CREATURES, false)
+ );
+
+ public FatedClash(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{W}");
+
+ // You may cast this spell as though it had flash if a creature is attacking and a creature is blocking.
+ this.addAbility(new CastAsThoughItHadFlashIfConditionAbility(
+ condition, "you may cast this spell as though it had flash " +
+ "if a creature is attacking and a creature is blocking"
+ ));
+
+ // Target creature you control and target creature an opponent controls each gain indestructible until end of turn. Then destroy all creatures.
+ this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance())
+ .setText("target creature you control and target creature an opponent controls each gain indestructible until end of turn")
+ .setTargetPointer(new EachTargetPointer()));
+ this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
+ this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
+ this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES).concatBy("Then"));
+ }
+
+ private FatedClash(final FatedClash card) {
+ super(card);
+ }
+
+ @Override
+ public FatedClash copy() {
+ return new FatedClash(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FigureOfFable.java b/Mage.Sets/src/mage/cards/f/FigureOfFable.java
new file mode 100644
index 00000000000..628bb2baf60
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FigureOfFable.java
@@ -0,0 +1,127 @@
+package mage.cards.f;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.AddCardSubTypeSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
+import mage.abilities.keyword.ProtectionFromEachOpponentAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class FigureOfFable extends CardImpl {
+
+ public FigureOfFable(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G/W}");
+
+ this.subtype.add(SubType.KITHKIN);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // {G/W}: This creature becomes a Kithkin Scout with base power and toughness 2/3.
+ Ability ability = new SimpleActivatedAbility(new AddCardSubTypeSourceEffect(
+ Duration.Custom, SubType.KITHKIN, SubType.SCOUT
+ ).setText("{this} becomes a Kithkin Scout"), new ManaCostsImpl<>("{G/W}"));
+ ability.addEffect(new SetBasePowerToughnessSourceEffect(
+ 2, 3, Duration.Custom
+ ).setText("with base power and toughness 2/3"));
+ this.addAbility(ability);
+
+ // {1}{G/W}{G/W}: If this creature is a Scout, it becomes a Kithkin Soldier with base power and toughness 4/5.
+ this.addAbility(new SimpleActivatedAbility(new FigureOfFableScoutEffect(), new ManaCostsImpl<>("{1}{G/W}{G/W}")));
+
+ // {3}{G/W}{G/W}{G/W}: If this creature is a Soldier, it becomes a Kithkin Avatar with base power and toughness 7/8 and protection from each of your opponents.
+ this.addAbility(new SimpleActivatedAbility(new FigureOfFableSoldierEffect(), new ManaCostsImpl<>("{3}{G/W}{G/W}{G/W}")));
+ }
+
+ private FigureOfFable(final FigureOfFable card) {
+ super(card);
+ }
+
+ @Override
+ public FigureOfFable copy() {
+ return new FigureOfFable(this);
+ }
+}
+
+class FigureOfFableScoutEffect extends OneShotEffect {
+
+ FigureOfFableScoutEffect() {
+ super(Outcome.Benefit);
+ staticText = "if {this} is a Scout, it becomes a Kithkin Soldier with base power and toughness 4/5";
+ }
+
+ private FigureOfFableScoutEffect(final FigureOfFableScoutEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public FigureOfFableScoutEffect copy() {
+ return new FigureOfFableScoutEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent permanent = source.getSourcePermanentIfItStillExists(game);
+ if (permanent == null || !permanent.hasSubtype(SubType.SCOUT, game)) {
+ return false;
+ }
+ game.addEffect(new AddCardSubTypeSourceEffect(
+ Duration.Custom, SubType.KITHKIN, SubType.SOLDIER
+ ), source);
+ game.addEffect(new SetBasePowerToughnessSourceEffect(
+ 4, 5, Duration.Custom
+ ), source);
+ return true;
+ }
+}
+
+class FigureOfFableSoldierEffect extends OneShotEffect {
+
+ FigureOfFableSoldierEffect() {
+ super(Outcome.Benefit);
+ staticText = "if {this} is a Soldier, it becomes a Kithkin Avatar " +
+ "with base power and toughness 7/8 and protection from each of your opponents";
+ }
+
+ private FigureOfFableSoldierEffect(final FigureOfFableSoldierEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public FigureOfFableSoldierEffect copy() {
+ return new FigureOfFableSoldierEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent permanent = source.getSourcePermanentIfItStillExists(game);
+ if (permanent == null || !permanent.hasSubtype(SubType.SOLDIER, game)) {
+ return false;
+ }
+ game.addEffect(new AddCardSubTypeSourceEffect(
+ Duration.Custom, SubType.KITHKIN, SubType.AVATAR
+ ), source);
+ game.addEffect(new SetBasePowerToughnessSourceEffect(
+ 7, 8, Duration.Custom
+ ), source);
+ game.addEffect(new GainAbilitySourceEffect(
+ new ProtectionFromEachOpponentAbility(), Duration.Custom
+ ), source);
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FlashPhotography.java b/Mage.Sets/src/mage/cards/f/FlashPhotography.java
new file mode 100644
index 00000000000..871cf8e8514
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FlashPhotography.java
@@ -0,0 +1,48 @@
+package mage.cards.f;
+
+import mage.abilities.common.CastAsThoughItHadFlashIfConditionAbility;
+import mage.abilities.condition.Condition;
+import mage.abilities.condition.common.SourceTargetsPermanentCondition;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
+import mage.abilities.keyword.FlashbackAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.filter.StaticFilters;
+import mage.target.TargetPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class FlashPhotography extends CardImpl {
+
+ private static final Condition condition = new SourceTargetsPermanentCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT);
+
+ public FlashPhotography(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{U}");
+
+ // You may cast this spell as though it had flash if it targets a permanent you control.
+ this.addAbility(new CastAsThoughItHadFlashIfConditionAbility(
+ condition, "you may cast this spell as though it had flash if it targets a permanent you control"
+ ));
+
+ // Create a token that's a copy of target permanent.
+ this.getSpellAbility().addEffect(new CreateTokenCopyTargetEffect());
+ this.getSpellAbility().addTarget(new TargetPermanent());
+
+ // Flashback {4}{U}{U}
+ this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{4}{U}{U}")));
+ }
+
+ private FlashPhotography(final FlashPhotography card) {
+ super(card);
+ }
+
+ @Override
+ public FlashPhotography copy() {
+ return new FlashPhotography(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/f/FormidableSpeaker.java b/Mage.Sets/src/mage/cards/f/FormidableSpeaker.java
new file mode 100644
index 00000000000..3ae9d26b518
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/f/FormidableSpeaker.java
@@ -0,0 +1,66 @@
+package mage.cards.f;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.DiscardCardCost;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.UntapTargetEffect;
+import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.predicate.mageobject.AnotherPredicate;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetCardInLibrary;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class FormidableSpeaker extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterPermanent("another target permanent");
+
+ static {
+ filter.add(AnotherPredicate.instance);
+ }
+
+ public FormidableSpeaker(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
+
+ this.subtype.add(SubType.ELF);
+ this.subtype.add(SubType.DRUID);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(4);
+
+ // When this creature enters, you may discard a card. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new DoIfCostPaid(new SearchLibraryPutInHandEffect(
+ new TargetCardInLibrary(StaticFilters.FILTER_CARD_CREATURE), true
+ ), new DiscardCardCost())
+ ));
+
+ // {1}, {T}: Untap another target permanent.
+ Ability ability = new SimpleActivatedAbility(new UntapTargetEffect(), new GenericManaCost(1));
+ ability.addCost(new TapSourceCost());
+ ability.addTarget(new TargetPermanent(filter));
+ this.addAbility(ability);
+ }
+
+ private FormidableSpeaker(final FormidableSpeaker card) {
+ super(card);
+ }
+
+ @Override
+ public FormidableSpeaker copy() {
+ return new FormidableSpeaker(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/g/GrenzosRuffians.java b/Mage.Sets/src/mage/cards/g/GrenzosRuffians.java
index ab9fadddcf0..2fef6143541 100644
--- a/Mage.Sets/src/mage/cards/g/GrenzosRuffians.java
+++ b/Mage.Sets/src/mage/cards/g/GrenzosRuffians.java
@@ -1,20 +1,14 @@
package mage.cards.g;
import mage.MageInt;
-import mage.MageObject;
-import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
-import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.DamageEachOtherOpponentThatMuchEffect;
import mage.abilities.keyword.MeleeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Outcome;
import mage.constants.SubType;
-import mage.game.Game;
-import mage.players.Player;
-import java.util.Objects;
import java.util.UUID;
/**
@@ -33,7 +27,9 @@ public final class GrenzosRuffians extends CardImpl {
this.addAbility(new MeleeAbility());
// Whenever Grenzo's Ruffians deals combat damage to a opponent, it deals that much damage to each other opponent.
- this.addAbility(new DealsDamageToOpponentTriggeredAbility(new GrenzosRuffiansEffect(), false, true, true));
+ this.addAbility(new DealsDamageToOpponentTriggeredAbility(
+ new DamageEachOtherOpponentThatMuchEffect(), false, true, true
+ ));
}
private GrenzosRuffians(final GrenzosRuffians card) {
@@ -45,40 +41,3 @@ public final class GrenzosRuffians extends CardImpl {
return new GrenzosRuffians(this);
}
}
-
-class GrenzosRuffiansEffect extends OneShotEffect {
-
- GrenzosRuffiansEffect() {
- super(Outcome.Benefit);
- this.staticText = "it deals that much damage to each other opponent";
- }
-
- private GrenzosRuffiansEffect(final GrenzosRuffiansEffect effect) {
- super(effect);
- }
-
- @Override
- public GrenzosRuffiansEffect copy() {
- return new GrenzosRuffiansEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- UUID damagedOpponent = this.getTargetPointer().getFirst(game, source);
- int amount = (Integer) getValue("damage");
- MageObject object = game.getObject(source);
- if (object != null && amount > 0 && damagedOpponent != null) {
- for (UUID playerId : game.getOpponents(source.getControllerId())) {
- if (!Objects.equals(playerId, damagedOpponent)) {
- Player opponent = game.getPlayer(playerId);
- if (opponent != null) {
- int dealtDamage = opponent.damage(amount, source.getSourceId(), source, game);
- game.informPlayers(object.getLogName() + " deals " + dealtDamage + " damage to " + opponent.getLogName());
- }
- }
- }
- return true;
- }
- return false;
- }
-}
diff --git a/Mage.Sets/src/mage/cards/h/HydraOmnivore.java b/Mage.Sets/src/mage/cards/h/HydraOmnivore.java
index 486ae844ed4..d5d637d0232 100644
--- a/Mage.Sets/src/mage/cards/h/HydraOmnivore.java
+++ b/Mage.Sets/src/mage/cards/h/HydraOmnivore.java
@@ -1,19 +1,13 @@
package mage.cards.h;
import mage.MageInt;
-import mage.MageObject;
-import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
-import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.DamageEachOtherOpponentThatMuchEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Outcome;
import mage.constants.SubType;
-import mage.game.Game;
-import mage.players.Player;
-import java.util.Objects;
import java.util.UUID;
/**
@@ -29,7 +23,9 @@ public final class HydraOmnivore extends CardImpl {
this.toughness = new MageInt(8);
// Whenever Hydra Omnivore deals combat damage to an opponent, it deals that much damage to each other opponent.
- this.addAbility(new DealsDamageToOpponentTriggeredAbility(new HydraOmnivoreEffect(), false, true, true));
+ this.addAbility(new DealsDamageToOpponentTriggeredAbility(
+ new DamageEachOtherOpponentThatMuchEffect(), false, true, true
+ ));
}
private HydraOmnivore(final HydraOmnivore card) {
@@ -41,40 +37,3 @@ public final class HydraOmnivore extends CardImpl {
return new HydraOmnivore(this);
}
}
-
-class HydraOmnivoreEffect extends OneShotEffect {
-
- HydraOmnivoreEffect() {
- super(Outcome.Benefit);
- this.staticText = "it deals that much damage to each other opponent";
- }
-
- private HydraOmnivoreEffect(final HydraOmnivoreEffect effect) {
- super(effect);
- }
-
- @Override
- public HydraOmnivoreEffect copy() {
- return new HydraOmnivoreEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- UUID damagedOpponent = this.getTargetPointer().getFirst(game, source);
- int amount = (Integer) getValue("damage");
- MageObject object = game.getObject(source);
- if (object != null && amount > 0 && damagedOpponent != null) {
- for (UUID playerId : game.getOpponents(source.getControllerId())) {
- if (!Objects.equals(playerId, damagedOpponent)) {
- Player opponent = game.getPlayer(playerId);
- if (opponent != null) {
- int dealtDamage = opponent.damage(amount, source.getSourceId(), source, game);
- game.informPlayers(object.getLogName() + " deals " + dealtDamage + " damage to " + opponent.getLogName());
- }
- }
- }
- return true;
- }
- return false;
- }
-}
diff --git a/Mage.Sets/src/mage/cards/i/IsiluCarrierOfTwilight.java b/Mage.Sets/src/mage/cards/i/IsiluCarrierOfTwilight.java
new file mode 100644
index 00000000000..54e585d92c9
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/i/IsiluCarrierOfTwilight.java
@@ -0,0 +1,65 @@
+package mage.cards.i;
+
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.abilities.keyword.LifelinkAbility;
+import mage.abilities.keyword.PersistAbility;
+import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class IsiluCarrierOfTwilight extends CardImpl {
+
+ public IsiluCarrierOfTwilight(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.ELEMENTAL);
+ this.subtype.add(SubType.GOD);
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(5);
+ this.color.setBlack(true);
+ this.nightCard = true;
+
+ // Flying
+ this.addAbility(FlyingAbility.getInstance());
+
+ // Lifelink
+ this.addAbility(LifelinkAbility.getInstance());
+
+ // Each other nontoken creature you control has persist.
+ this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
+ new PersistAbility(), Duration.WhileControlled,
+ StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN, true
+ ).setText("each other nontoken creature you control has persist")));
+
+ // At the beginning of your first main phase, you may pay {W}. If you do, transform Isilu.
+ this.addAbility(new BeginningOfFirstMainTriggeredAbility(
+ new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{W}"))
+ ));
+ }
+
+ private IsiluCarrierOfTwilight(final IsiluCarrierOfTwilight card) {
+ super(card);
+ }
+
+ @Override
+ public IsiluCarrierOfTwilight copy() {
+ return new IsiluCarrierOfTwilight(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/j/JawsRelentlessPredator.java b/Mage.Sets/src/mage/cards/j/JawsRelentlessPredator.java
new file mode 100644
index 00000000000..da4951ec626
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/j/JawsRelentlessPredator.java
@@ -0,0 +1,91 @@
+package mage.cards.j;
+
+import mage.MageInt;
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
+import mage.abilities.dynamicvalue.common.SavedDamageValue;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.abilities.effects.common.DamagePlayersEffect;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.*;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
+import mage.game.permanent.token.BloodToken;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class JawsRelentlessPredator extends CardImpl {
+
+ public JawsRelentlessPredator(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{R}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.SHARK);
+ this.power = new MageInt(5);
+ this.toughness = new MageInt(5);
+
+ // Trample
+ this.addAbility(TrampleAbility.getInstance());
+
+ // Haste
+ this.addAbility(HasteAbility.getInstance());
+
+ // Whenever Jaws deals combat damage to a player, create that many Blood tokens.
+ this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
+ new CreateTokenEffect(new BloodToken(), SavedDamageValue.MANY)
+ ));
+
+ // Whenever a noncreature artifact is sacrificed or destroyed, Jaws deals 1 damage to each opponent.
+ this.addAbility(new JawsRelentlessPredatorTriggeredAbility());
+ }
+
+ private JawsRelentlessPredator(final JawsRelentlessPredator card) {
+ super(card);
+ }
+
+ @Override
+ public JawsRelentlessPredator copy() {
+ return new JawsRelentlessPredator(this);
+ }
+}
+
+class JawsRelentlessPredatorTriggeredAbility extends TriggeredAbilityImpl {
+
+ JawsRelentlessPredatorTriggeredAbility() {
+ super(Zone.BATTLEFIELD, new DamagePlayersEffect(1, TargetController.OPPONENT));
+ setTriggerPhrase("Whenever a noncreature artifact is sacrificed or destroyed, ");
+ }
+
+ private JawsRelentlessPredatorTriggeredAbility(final JawsRelentlessPredatorTriggeredAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public JawsRelentlessPredatorTriggeredAbility copy() {
+ return new JawsRelentlessPredatorTriggeredAbility(this);
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ switch (event.getType()) {
+ case SACRIFICED_PERMANENT:
+ case DESTROYED_PERMANENT:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
+ return permanent != null && !permanent.isCreature(game) && permanent.isArtifact(game);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/j/JoelResoluteSurvivor.java b/Mage.Sets/src/mage/cards/j/JoelResoluteSurvivor.java
new file mode 100644
index 00000000000..213fa766283
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/j/JoelResoluteSurvivor.java
@@ -0,0 +1,57 @@
+package mage.cards.j;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.DiesCreatureTriggeredAbility;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.keyword.MenaceAbility;
+import mage.abilities.keyword.PartnerSurvivorsAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.counters.CounterType;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class JoelResoluteSurvivor extends CardImpl {
+
+ public JoelResoluteSurvivor(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{G}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.SURVIVOR);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(4);
+
+ // Menace
+ this.addAbility(new MenaceAbility());
+
+ // Whenever a creature token dies, put a +1/+1 counter on Joel and draw a card. This ability triggers only once each turn.
+ Ability ability = new DiesCreatureTriggeredAbility(
+ new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
+ false, StaticFilters.FILTER_CREATURE_TOKEN
+ ).setTriggersLimitEachTurn(1);
+ ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and"));
+ this.addAbility(ability);
+
+ // Partner--Survivors
+ this.addAbility(PartnerSurvivorsAbility.getInstance());
+ }
+
+ private JoelResoluteSurvivor(final JoelResoluteSurvivor card) {
+ super(card);
+ }
+
+ @Override
+ public JoelResoluteSurvivor copy() {
+ return new JoelResoluteSurvivor(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/k/KoseiPenitentWarlord.java b/Mage.Sets/src/mage/cards/k/KoseiPenitentWarlord.java
index 7765989d096..fd0655969a9 100644
--- a/Mage.Sets/src/mage/cards/k/KoseiPenitentWarlord.java
+++ b/Mage.Sets/src/mage/cards/k/KoseiPenitentWarlord.java
@@ -6,18 +6,18 @@ import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalContinuousEffect;
-import mage.abilities.effects.OneShotEffect;
+import mage.abilities.dynamicvalue.common.SavedDamageValue;
+import mage.abilities.effects.common.DamageEachOtherOpponentThatMuchEffect;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.Counter;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.players.Player;
import java.util.Objects;
import java.util.UUID;
@@ -37,12 +37,16 @@ public final class KoseiPenitentWarlord extends CardImpl {
this.toughness = new MageInt(5);
// As long as Kosei, Penitent Warlord is enchanted, equipped, and has a counter on it, Kosei has "Whenever Kosei, Penitent Warlord deals combat damage to an opponent, you draw that many cards and Kosei deals that much damage to each other opponent."
+ Ability ability = new DealsDamageToOpponentTriggeredAbility(
+ new DrawCardSourceControllerEffect(SavedDamageValue.MANY),
+ false, true, true
+ );
+ ability.addEffect(new DamageEachOtherOpponentThatMuchEffect()
+ .setText("and {this} deals that much damage to each other opponent"));
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
- new GainAbilitySourceEffect(new DealsDamageToOpponentTriggeredAbility(
- new KoseiPenitentWarlordEffect(), false, true, true
- )), KoseiPenitentWarlordCondition.instance, "as long as {this} is enchanted, equipped, " +
- "and has a counter on it, {this} has \"Whenever {this} deals combat damage to an opponent, " +
- "you draw that many cards and {this} deals that much damage to each other opponent.\""
+ new GainAbilitySourceEffect(ability), KoseiPenitentWarlordCondition.instance, "as long as " +
+ "{this} is enchanted, equipped, and has a counter on it, {this} has \"Whenever {this} deals combat " +
+ "damage to an opponent, you draw that many cards and {this} deals that much damage to each other opponent.\""
)));
}
@@ -82,41 +86,3 @@ enum KoseiPenitentWarlordCondition implements Condition {
.anyMatch(permanent -> permanent.hasSubtype(SubType.AURA, game));
}
}
-
-class KoseiPenitentWarlordEffect extends OneShotEffect {
-
- KoseiPenitentWarlordEffect() {
- super(Outcome.Benefit);
- staticText = "you draw that many cards and {this} deals that much damage to each other opponent";
- }
-
- private KoseiPenitentWarlordEffect(final KoseiPenitentWarlordEffect effect) {
- super(effect);
- }
-
- @Override
- public KoseiPenitentWarlordEffect copy() {
- return new KoseiPenitentWarlordEffect(this);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Player controller = game.getPlayer(source.getControllerId());
- int damage = (Integer) getValue("damage");
- if (controller == null || damage < 1) {
- return false;
- }
- controller.drawCards(damage, source, game);
- UUID damagedOpponentId = getTargetPointer().getFirst(game, source);
- for (UUID opponentId : game.getOpponents(source.getControllerId())) {
- if (opponentId.equals(damagedOpponentId)) {
- continue;
- }
- Player opponent = game.getPlayer(opponentId);
- if (opponent != null) {
- opponent.damage(damage, source, game);
- }
- }
- return true;
- }
-}
diff --git a/Mage.Sets/src/mage/cards/k/KratosGodOfWar.java b/Mage.Sets/src/mage/cards/k/KratosGodOfWar.java
new file mode 100644
index 00000000000..bb8044ebe62
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/k/KratosGodOfWar.java
@@ -0,0 +1,95 @@
+package mage.cards.k;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
+import mage.abilities.keyword.DoubleStrikeAbility;
+import mage.abilities.keyword.HasteAbility;
+import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.*;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.permanent.AttackedThisTurnPredicate;
+import mage.game.Game;
+import mage.players.Player;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class KratosGodOfWar extends CardImpl {
+
+ public KratosGodOfWar(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{R}{R}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.GOD);
+ this.subtype.add(SubType.WARRIOR);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(3);
+
+ // Double strike
+ this.addAbility(DoubleStrikeAbility.getInstance());
+
+ // All creatures have haste.
+ this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
+ HasteAbility.getInstance(), Duration.WhileControlled,
+ StaticFilters.FILTER_PERMANENT_CREATURE
+ ).setText("all creatures have haste")));
+
+ // At the beginning of each player's end step, Kratos deals damage to that player equal to the number of creatures that player controls that didn't attack this turn.
+ this.addAbility(new BeginningOfEndStepTriggeredAbility(
+ TargetController.EACH_PLAYER, new KratosGodOfWarEffect(), false
+ ));
+ }
+
+ private KratosGodOfWar(final KratosGodOfWar card) {
+ super(card);
+ }
+
+ @Override
+ public KratosGodOfWar copy() {
+ return new KratosGodOfWar(this);
+ }
+}
+
+class KratosGodOfWarEffect extends OneShotEffect {
+
+ private static final FilterPermanent filter = new FilterControlledCreaturePermanent();
+
+ static {
+ filter.add(Predicates.not(AttackedThisTurnPredicate.instance));
+ }
+
+ KratosGodOfWarEffect() {
+ super(Outcome.Benefit);
+ staticText = "{this} deals damage to that player equal to the number of creatures " +
+ "that player controls that didn't attack this turn.";
+ }
+
+ private KratosGodOfWarEffect(final KratosGodOfWarEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public KratosGodOfWarEffect copy() {
+ return new KratosGodOfWarEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(game.getActivePlayerId());
+ if (player == null) {
+ return false;
+ }
+ int count = game.getBattlefield().count(filter, source.getControllerId(), source, game);
+ return count > 0 && player.damage(count, source, game) > 0;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/m/MorningtidesLight.java b/Mage.Sets/src/mage/cards/m/MorningtidesLight.java
new file mode 100644
index 00000000000..ff95fc0b675
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/m/MorningtidesLight.java
@@ -0,0 +1,44 @@
+package mage.cards.m;
+
+import mage.abilities.effects.common.ExileReturnBattlefieldNextEndStepTargetEffect;
+import mage.abilities.effects.common.ExileSpellEffect;
+import mage.abilities.effects.common.PreventDamageToControllerEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.target.common.TargetCreaturePermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class MorningtidesLight extends CardImpl {
+
+ public MorningtidesLight(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}");
+
+ // Exile any number of target creatures. At the beginning of the next end step, return those cards to the battlefield tapped under their owners' control.
+ this.getSpellAbility().addEffect(new ExileReturnBattlefieldNextEndStepTargetEffect()
+ .setText("exile any number of target creatures. At the beginning of the next end step, " +
+ "return those cards to the battlefield tapped under their owners' control"));
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, Integer.MAX_VALUE));
+
+ // Until your next turn, prevent all damage that would be dealt to you.
+ this.getSpellAbility().addEffect(new PreventDamageToControllerEffect(Duration.UntilYourNextTurn)
+ .setText("
Until your next turn, prevent all damage that would be dealt to you"));
+
+ // Exile Morningtide's Light.
+ this.getSpellAbility().addEffect(new ExileSpellEffect().concatBy("
"));
+ }
+
+ private MorningtidesLight(final MorningtidesLight card) {
+ super(card);
+ }
+
+ @Override
+ public MorningtidesLight copy() {
+ return new MorningtidesLight(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/m/MutableExplorer.java b/Mage.Sets/src/mage/cards/m/MutableExplorer.java
new file mode 100644
index 00000000000..d677e8be10c
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/m/MutableExplorer.java
@@ -0,0 +1,44 @@
+package mage.cards.m;
+
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.abilities.keyword.ChangelingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.game.permanent.token.MutavaultToken;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class MutableExplorer extends CardImpl {
+
+ public MutableExplorer(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
+
+ this.subtype.add(SubType.SHAPESHIFTER);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(1);
+
+ // Changeling
+ this.addAbility(new ChangelingAbility());
+
+ // When this creature enters, create a tapped Mutavault token.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new CreateTokenEffect(new MutavaultToken(), 1, true)
+ ));
+ }
+
+ private MutableExplorer(final MutableExplorer card) {
+ super(card);
+ }
+
+ @Override
+ public MutableExplorer copy() {
+ return new MutableExplorer(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/m/Mutavault.java b/Mage.Sets/src/mage/cards/m/Mutavault.java
index 62ab683908b..290d708d601 100644
--- a/Mage.Sets/src/mage/cards/m/Mutavault.java
+++ b/Mage.Sets/src/mage/cards/m/Mutavault.java
@@ -1,34 +1,34 @@
-
package mage.cards.m;
-import java.util.UUID;
-import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Zone;
-import mage.game.permanent.token.TokenImpl;
+import mage.game.permanent.token.custom.CreatureToken;
+
+import java.util.UUID;
/**
- *
* @author jonubuu
*/
public final class Mutavault extends CardImpl {
public Mutavault(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
+ super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// {tap}: Add {C}.
this.addAbility(new ColorlessManaAbility());
+
// {1}: Mutavault becomes a 2/2 creature with all creature types until end of turn. It's still a land.
- this.addAbility(new SimpleActivatedAbility(
- new BecomesCreatureSourceEffect(new MutavaultToken(), CardType.LAND, Duration.EndOfTurn),
- new ManaCostsImpl<>("{1}")));
+ this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
+ new CreatureToken(2, 2, "2/2 creature with all creature types")
+ .withAllCreatureTypes(true),
+ CardType.LAND, Duration.EndOfTurn
+ ), new GenericManaCost(1)));
}
private Mutavault(final Mutavault card) {
@@ -40,21 +40,3 @@ public final class Mutavault extends CardImpl {
return new Mutavault(this);
}
}
-
-class MutavaultToken extends TokenImpl {
-
- public MutavaultToken() {
- super("", "2/2 creature with all creature types");
- cardType.add(CardType.CREATURE);
- subtype.setIsAllCreatureTypes(true);
- power = new MageInt(2);
- toughness = new MageInt(2);
- }
- private MutavaultToken(final MutavaultToken token) {
- super(token);
- }
-
- public MutavaultToken copy() {
- return new MutavaultToken(this);
- }
-}
diff --git a/Mage.Sets/src/mage/cards/s/SearchForDagger.java b/Mage.Sets/src/mage/cards/s/SearchForDagger.java
new file mode 100644
index 00000000000..07812507446
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/s/SearchForDagger.java
@@ -0,0 +1,49 @@
+package mage.cards.s;
+
+import mage.abilities.common.EntersBattlefieldOrAttacksAllTriggeredAbility;
+import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.PutCards;
+import mage.constants.SuperType;
+import mage.constants.TargetController;
+import mage.filter.FilterCard;
+import mage.filter.FilterPermanent;
+import mage.filter.common.FilterCreatureCard;
+import mage.filter.predicate.mageobject.CommanderPredicate;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class SearchForDagger extends CardImpl {
+
+ private static final FilterCard filter = new FilterCreatureCard("a legendary creature card");
+ private static final FilterPermanent filter2 = new FilterPermanent("you commander");
+
+ static {
+ filter.add(SuperType.LEGENDARY.getPredicate());
+ filter2.add(TargetController.YOU.getOwnerPredicate());
+ filter2.add(CommanderPredicate.instance);
+ }
+
+ public SearchForDagger(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
+
+ // Whenever your commander enters or attacks, look at the top six cards of your library. You may reveal a legendary creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
+ this.addAbility(new EntersBattlefieldOrAttacksAllTriggeredAbility(new LookLibraryAndPickControllerEffect(
+ 6, 1, filter, PutCards.HAND, PutCards.BOTTOM_RANDOM
+ ), filter2));
+ }
+
+ private SearchForDagger(final SearchForDagger card) {
+ super(card);
+ }
+
+ @Override
+ public SearchForDagger copy() {
+ return new SearchForDagger(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/s/SyggWanderbrineShield.java b/Mage.Sets/src/mage/cards/s/SyggWanderbrineShield.java
new file mode 100644
index 00000000000..23165237f4d
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/s/SyggWanderbrineShield.java
@@ -0,0 +1,69 @@
+package mage.cards.s;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.TransformIntoSourceTriggeredAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.keyword.CantBeBlockedSourceAbility;
+import mage.abilities.keyword.ProtectionAbility;
+import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.FilterCard;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.ColorlessPredicate;
+import mage.target.common.TargetControlledCreaturePermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class SyggWanderbrineShield extends CardImpl {
+
+ private static final FilterCard filter = new FilterCard("each color");
+
+ static {
+ filter.add(Predicates.not(ColorlessPredicate.instance));
+ }
+
+ public SyggWanderbrineShield(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.MERFOLK);
+ this.subtype.add(SubType.ROGUE);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+ this.color.setWhite(true);
+ this.nightCard = true;
+
+ // Sygg can't be blocked.
+ this.addAbility(new CantBeBlockedSourceAbility());
+
+ // Whenever this creature transforms into Sygg, Wanderbrine Shield, target creature you control gains protection from each color until your next turn.
+ Ability ability = new TransformIntoSourceTriggeredAbility(new GainAbilityTargetEffect(new ProtectionAbility(filter)));
+ ability.addTarget(new TargetControlledCreaturePermanent());
+ this.addAbility(ability);
+
+ // At the beginning of your first main phase, you may pay {U}. If you do, transform Sygg.
+ this.addAbility(new BeginningOfFirstMainTriggeredAbility(
+ new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{U}"))
+ ));
+ }
+
+ private SyggWanderbrineShield(final SyggWanderbrineShield card) {
+ super(card);
+ }
+
+ @Override
+ public SyggWanderbrineShield copy() {
+ return new SyggWanderbrineShield(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/s/SyggWanderwineWisdom.java b/Mage.Sets/src/mage/cards/s/SyggWanderwineWisdom.java
new file mode 100644
index 00000000000..fed8ae5083f
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/s/SyggWanderwineWisdom.java
@@ -0,0 +1,67 @@
+package mage.cards.s;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.DealsCombatDamageToAPlayerOrPlaneswalkerTriggeredAbility;
+import mage.abilities.common.TransformsOrEntersTriggeredAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.TransformSourceEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.keyword.CantBeBlockedSourceAbility;
+import mage.abilities.keyword.TransformAbility;
+import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.target.common.TargetCreaturePermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class SyggWanderwineWisdom extends CardImpl {
+
+ public SyggWanderwineWisdom(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.MERFOLK);
+ this.subtype.add(SubType.WIZARD);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+ this.secondSideCardClazz = mage.cards.s.SyggWanderbrineShield.class;
+
+ // Sygg can't be blocked.
+ this.addAbility(new CantBeBlockedSourceAbility());
+
+ // Whenever this creature enters or transforms into Sygg, Wanderwine Wisdom, target creature gains "Whenever this creature deals combat damage to a player or planeswalker, draw a card" until end of turn.
+ Ability ability = new TransformsOrEntersTriggeredAbility(new GainAbilityTargetEffect(
+ new DealsCombatDamageToAPlayerOrPlaneswalkerTriggeredAbility(
+ new DrawCardSourceControllerEffect(1), false
+ ), Duration.EndOfTurn
+ ), false);
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+
+ // At the beginning of your first main phase, you may pay {W}. If you do, transform Sygg.
+ this.addAbility(new TransformAbility());
+ this.addAbility(new BeginningOfFirstMainTriggeredAbility(
+ new DoIfCostPaid(new TransformSourceEffect(), new ManaCostsImpl<>("{W}"))
+ ));
+ }
+
+ private SyggWanderwineWisdom(final SyggWanderwineWisdom card) {
+ super(card);
+ }
+
+ @Override
+ public SyggWanderwineWisdom copy() {
+ return new SyggWanderwineWisdom(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/t/TheDestinedBlackMage.java b/Mage.Sets/src/mage/cards/t/TheDestinedBlackMage.java
new file mode 100644
index 00000000000..136ced88564
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/t/TheDestinedBlackMage.java
@@ -0,0 +1,68 @@
+package mage.cards.t;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.common.SpellCastControllerTriggeredAbility;
+import mage.abilities.condition.common.FullPartyCondition;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.DamagePlayersEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.hint.common.PartyCountHint;
+import mage.abilities.keyword.DeathtouchAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.constants.TargetController;
+import mage.filter.StaticFilters;
+import mage.target.TargetPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class TheDestinedBlackMage extends CardImpl {
+
+ public TheDestinedBlackMage(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.WIZARD);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(2);
+
+ // Deathtouch
+ this.addAbility(DeathtouchAbility.getInstance());
+
+ // {B}, {T}: Another target creature you control gains deathtouch until end of turn.
+ Ability ability = new SimpleActivatedAbility(
+ new GainAbilityTargetEffect(DeathtouchAbility.getInstance()), new ManaCostsImpl<>("{B}")
+ );
+ ability.addCost(new TapSourceCost());
+ ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL));
+ this.addAbility(ability);
+
+ // Whenever you cast a noncreature spell, The Destined Black Mage deals 1 damage to each opponent. If you have a full party, it deals 3 damage to each opponent instead.
+ this.addAbility(new SpellCastControllerTriggeredAbility(new ConditionalOneShotEffect(
+ new DamagePlayersEffect(3, TargetController.OPPONENT),
+ new DamagePlayersEffect(1, TargetController.OPPONENT),
+ FullPartyCondition.instance, "{this} deals 1 damage to each opponent. " +
+ "If you have a full party, it deals 3 damage to each opponent instead"
+ ), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false).addHint(PartyCountHint.instance));
+ }
+
+ private TheDestinedBlackMage(final TheDestinedBlackMage card) {
+ super(card);
+ }
+
+ @Override
+ public TheDestinedBlackMage copy() {
+ return new TheDestinedBlackMage(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/t/TheDestinedThief.java b/Mage.Sets/src/mage/cards/t/TheDestinedThief.java
new file mode 100644
index 00000000000..05e610242ec
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/t/TheDestinedThief.java
@@ -0,0 +1,102 @@
+package mage.cards.t;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.BatchTriggeredAbility;
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.condition.common.FullPartyCondition;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.DrawDiscardControllerEffect;
+import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
+import mage.abilities.keyword.CantBeBlockedSourceAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.constants.Zone;
+import mage.filter.StaticFilters;
+import mage.game.Game;
+import mage.game.events.DamagedPlayerEvent;
+import mage.game.events.GameEvent;
+import mage.target.TargetPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class TheDestinedThief extends CardImpl {
+
+ public TheDestinedThief(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.ROGUE);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // The Destined Thief can't be blocked.
+ this.addAbility(new CantBeBlockedSourceAbility());
+
+ // {U}, {T}: Another target creature you control can't be blocked this turn.
+ Ability ability = new SimpleActivatedAbility(new CantBeBlockedTargetEffect(), new ManaCostsImpl<>("{U}"));
+ ability.addCost(new TapSourceCost());
+ ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL));
+ this.addAbility(ability);
+
+ // Whenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards.
+ this.addAbility(new TheDestinedThiefTriggeredAbility());
+ }
+
+ private TheDestinedThief(final TheDestinedThief card) {
+ super(card);
+ }
+
+ @Override
+ public TheDestinedThief copy() {
+ return new TheDestinedThief(this);
+ }
+}
+
+class TheDestinedThiefTriggeredAbility extends TriggeredAbilityImpl implements BatchTriggeredAbility {
+
+ TheDestinedThiefTriggeredAbility() {
+ super(Zone.BATTLEFIELD, new ConditionalOneShotEffect(
+ new DrawCardSourceControllerEffect(3),
+ new DrawDiscardControllerEffect(1, 1),
+ FullPartyCondition.instance, "draw a card, then discard a card. " +
+ "If you have a full party, instead draw three cards"
+ ), true);
+ setTriggerPhrase("Whenever one or more creatures you control deal combat damage to one or more players, ");
+ }
+
+ private TheDestinedThiefTriggeredAbility(final TheDestinedThiefTriggeredAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS;
+ }
+
+ @Override
+ public boolean checkEvent(DamagedPlayerEvent event, Game game) {
+ return event.isCombatDamage() && isControlledBy(game.getControllerId(event.getSourceId()));
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ return true;
+ }
+
+ @Override
+ public TheDestinedThiefTriggeredAbility copy() {
+ return new TheDestinedThiefTriggeredAbility(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/t/TheDestinedWarrior.java b/Mage.Sets/src/mage/cards/t/TheDestinedWarrior.java
new file mode 100644
index 00000000000..f0090a6e05a
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/t/TheDestinedWarrior.java
@@ -0,0 +1,80 @@
+package mage.cards.t;
+
+import mage.MageInt;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.condition.common.FullPartyCondition;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.AddContinuousEffectToGame;
+import mage.abilities.effects.common.continuous.BoostControlledEffect;
+import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
+import mage.abilities.hint.common.PartyCountHint;
+import mage.abilities.keyword.FirstStrikeAbility;
+import mage.abilities.keyword.MenaceAbility;
+import mage.abilities.keyword.VigilanceAbility;
+import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.filter.FilterCard;
+import mage.filter.predicate.Predicates;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class TheDestinedWarrior extends CardImpl {
+
+ private static final FilterCard filter = new FilterCard("Cleric, Rogue, Warrior, and Wizard spells");
+
+ static {
+ filter.add(Predicates.or(
+ SubType.CLERIC.getPredicate(),
+ SubType.ROGUE.getPredicate(),
+ SubType.WARRIOR.getPredicate(),
+ SubType.WIZARD.getPredicate()
+ ));
+ }
+
+ public TheDestinedWarrior(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}{B}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.WARRIOR);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+
+ // First strike
+ this.addAbility(FirstStrikeAbility.getInstance());
+
+ // Vigilance
+ this.addAbility(VigilanceAbility.getInstance());
+
+ // Menace
+ this.addAbility(new MenaceAbility());
+
+ // Cleric, Rogue, Warrior, and Wizard spells you cast cost {1} less to cast.
+ this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1)));
+
+ // At the beginning of combat on your turn, creatures you control get +1/+0 until end of turn. If you have a full party, creatures you control get +3/+0 until end of turn instead.
+ this.addAbility(new BeginningOfCombatTriggeredAbility(new ConditionalOneShotEffect(
+ new AddContinuousEffectToGame(new BoostControlledEffect(3, 0, Duration.EndOfTurn)),
+ new AddContinuousEffectToGame(new BoostControlledEffect(1, 0, Duration.EndOfTurn)),
+ FullPartyCondition.instance, "creatures you control get +1/+0 until end of turn. " +
+ "If you have a full party, creatures you control get +3/+0 until end of turn instead"
+ )).addHint(PartyCountHint.instance));
+ }
+
+ private TheDestinedWarrior(final TheDestinedWarrior card) {
+ super(card);
+ }
+
+ @Override
+ public TheDestinedWarrior copy() {
+ return new TheDestinedWarrior(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/t/TheDestinedWhiteMage.java b/Mage.Sets/src/mage/cards/t/TheDestinedWhiteMage.java
new file mode 100644
index 00000000000..dd1b076a50e
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/t/TheDestinedWhiteMage.java
@@ -0,0 +1,71 @@
+package mage.cards.t;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.GainLifeControllerTriggeredAbility;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.condition.common.FullPartyCondition;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.effects.common.counter.AddCountersTargetEffect;
+import mage.abilities.hint.common.PartyCountHint;
+import mage.abilities.keyword.LifelinkAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.counters.CounterType;
+import mage.filter.StaticFilters;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetControlledCreaturePermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class TheDestinedWhiteMage extends CardImpl {
+
+ public TheDestinedWhiteMage(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
+
+ this.supertype.add(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.CLERIC);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(3);
+
+ // Lifelink
+ this.addAbility(LifelinkAbility.getInstance());
+
+ // {W}, {T}: Another target creature you control gains lifelink until end of turn.
+ Ability ability = new SimpleActivatedAbility(
+ new GainAbilityTargetEffect(LifelinkAbility.getInstance()), new ManaCostsImpl<>("{W}")
+ );
+ ability.addCost(new TapSourceCost());
+ ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL));
+ this.addAbility(ability);
+
+ // Whenever you gain life, put a +1/+1 counter on target creature you control. If you have a full party, put three +1/+1 counters on that creature instead.
+ ability = new GainLifeControllerTriggeredAbility(new ConditionalOneShotEffect(
+ new AddCountersTargetEffect(CounterType.P1P1.createInstance(3)),
+ new AddCountersTargetEffect(CounterType.P1P1.createInstance(1)),
+ FullPartyCondition.instance, "put a +1/+1 counter on target creature you control. " +
+ "If you have a full party, put three +1/+1 counters on that creature instead"
+ ));
+ ability.addTarget(new TargetControlledCreaturePermanent());
+ this.addAbility(ability.addHint(PartyCountHint.instance));
+ }
+
+ private TheDestinedWhiteMage(final TheDestinedWhiteMage card) {
+ super(card);
+ }
+
+ @Override
+ public TheDestinedWhiteMage copy() {
+ return new TheDestinedWhiteMage(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/v/ValgavothTerrorEater.java b/Mage.Sets/src/mage/cards/v/ValgavothTerrorEater.java
index f24eae3c3bc..b3d481553bf 100644
--- a/Mage.Sets/src/mage/cards/v/ValgavothTerrorEater.java
+++ b/Mage.Sets/src/mage/cards/v/ValgavothTerrorEater.java
@@ -52,7 +52,7 @@ public final class ValgavothTerrorEater extends CardImpl {
this.addAbility(LifelinkAbility.getInstance());
// Ward--Sacrifice three nonland permanents.
- this.addAbility(new WardAbility(new SacrificeTargetCost(3, StaticFilters.FILTER_PERMANENTS_NON_LAND)));
+ this.addAbility(new WardAbility(new SacrificeTargetCost(3, StaticFilters.FILTER_PERMANENTS_NON_LAND), false));
// If a card you didn't control would be put into an opponent's graveyard from anywhere, exile it instead.
this.addAbility(new SimpleStaticAbility(new ValgavothTerrorEaterReplacementEffect()));
diff --git a/Mage.Sets/src/mage/cards/v/VincentVengefulAtoner.java b/Mage.Sets/src/mage/cards/v/VincentVengefulAtoner.java
index 40dbccab205..8008cff4965 100644
--- a/Mage.Sets/src/mage/cards/v/VincentVengefulAtoner.java
+++ b/Mage.Sets/src/mage/cards/v/VincentVengefulAtoner.java
@@ -5,13 +5,14 @@ import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
import mage.abilities.common.OneOrMoreCombatDamagePlayerTriggeredAbility;
-import mage.abilities.effects.OneShotEffect;
+import mage.abilities.condition.Condition;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.DamageEachOtherOpponentThatMuchEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.CounterType;
@@ -42,9 +43,10 @@ public final class VincentVengefulAtoner extends CardImpl {
));
// Chaos -- Whenever Vincent deals combat damage to an opponent, it deals that much damage to each other opponent if Vincent's power is 7 or greater.
- this.addAbility(new DealsDamageToOpponentTriggeredAbility(
- new VincentVengefulAtonerEffect(), false, true, true
- ).withFlavorWord("Chaos"));
+ this.addAbility(new DealsDamageToOpponentTriggeredAbility(new ConditionalOneShotEffect(
+ new DamageEachOtherOpponentThatMuchEffect(), VincentVengefulAtonerCondition.instance,
+ "it deals that much damage to each other opponent if {this}'s power is 7 or greater"
+ ), false, true, true).withFlavorWord("Chaos"));
}
private VincentVengefulAtoner(final VincentVengefulAtoner card) {
@@ -57,42 +59,16 @@ public final class VincentVengefulAtoner extends CardImpl {
}
}
-class VincentVengefulAtonerEffect extends OneShotEffect {
-
- VincentVengefulAtonerEffect() {
- super(Outcome.Benefit);
- staticText = "it deals that much damage to each other opponent if {this}'s power is 7 or greater";
- }
-
- private VincentVengefulAtonerEffect(final VincentVengefulAtonerEffect effect) {
- super(effect);
- }
-
- @Override
- public VincentVengefulAtonerEffect copy() {
- return new VincentVengefulAtonerEffect(this);
- }
+enum VincentVengefulAtonerCondition implements Condition {
+ instance;
@Override
public boolean apply(Game game, Ability source) {
- if (Optional
+ return Optional
.ofNullable(source.getSourcePermanentOrLKI(game))
.map(MageObject::getPower)
.map(MageInt::getValue)
- .orElse(0) < 7) {
- return false;
- }
- int amount = (Integer) getValue("damage");
- if (amount < 1) {
- return false;
- }
- UUID targetId = getTargetPointer().getFirst(game, source);
- for (UUID opponentId : game.getOpponents(source.getControllerId())) {
- Optional.ofNullable(opponentId)
- .filter(uuid -> !uuid.equals(targetId))
- .map(game::getPlayer)
- .map(player -> player.damage(amount, source, game));
- }
- return true;
+ .filter(x -> x >= 7)
+ .isPresent();
}
}
diff --git a/Mage.Sets/src/mage/cards/w/WarriorsResolve.java b/Mage.Sets/src/mage/cards/w/WarriorsResolve.java
new file mode 100644
index 00000000000..0c384a11e75
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/w/WarriorsResolve.java
@@ -0,0 +1,58 @@
+package mage.cards.w;
+
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.condition.Condition;
+import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
+import mage.abilities.effects.common.DrawCardSourceControllerEffect;
+import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
+import mage.abilities.keyword.TrainingAbility;
+import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.counters.CounterType;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
+import mage.filter.common.FilterControlledCreaturePermanent;
+import mage.filter.predicate.permanent.AttackedThisTurnPredicate;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class WarriorsResolve extends CardImpl {
+
+ private static final FilterPermanent filter = new FilterControlledCreaturePermanent(
+ "you control a creature with a +1/+1 counter on it that attacked this turn"
+ );
+
+ static {
+ filter.add(CounterType.P1P1.getPredicate());
+ filter.add(AttackedThisTurnPredicate.instance);
+ }
+
+ private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
+
+ public WarriorsResolve(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
+
+ // Creatures you control have training.
+ this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
+ new TrainingAbility(), Duration.WhileControlled, StaticFilters.FILTER_PERMANENT_CREATURES
+ )));
+
+ // At the beginning of your end step, if you control a creature with a +1/+1 counter on it that attacked this turn, draw a card.
+ this.addAbility(new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1)).withInterveningIf(condition));
+ }
+
+ private WarriorsResolve(final WarriorsResolve card) {
+ super(card);
+ }
+
+ @Override
+ public WarriorsResolve copy() {
+ return new WarriorsResolve(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java
index b638ad98011..04443dac090 100644
--- a/Mage.Sets/src/mage/sets/FinalFantasy.java
+++ b/Mage.Sets/src/mage/sets/FinalFantasy.java
@@ -25,6 +25,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("A Realm Reborn", 196, Rarity.RARE, mage.cards.a.ARealmReborn.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("A Realm Reborn", 344, Rarity.RARE, mage.cards.a.ARealmReborn.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("A Realm Reborn", 566, Rarity.RARE, mage.cards.a.ARealmReborn.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Absolute Virtue", 212, Rarity.MYTHIC, mage.cards.a.AbsoluteVirtue.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Absolute Virtue", 476, Rarity.MYTHIC, mage.cards.a.AbsoluteVirtue.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Adelbert Steiner", 3, Rarity.UNCOMMON, mage.cards.a.AdelbertSteiner.class, NON_FULL_USE_VARIOUS));
@@ -107,6 +108,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Chaos, the Endless", 486, Rarity.UNCOMMON, mage.cards.c.ChaosTheEndless.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choco, Seeker of Paradise", 215, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choco, Seeker of Paradise", 479, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Choco, Seeker of Paradise", 569, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Choco-Comet", 132, Rarity.UNCOMMON, mage.cards.c.ChocoComet.class));
cards.add(new SetCardInfo("Chocobo Kick", 178, Rarity.COMMON, mage.cards.c.ChocoboKick.class));
cards.add(new SetCardInfo("Chocobo Racetrack", 179, Rarity.UNCOMMON, mage.cards.c.ChocoboRacetrack.class));
@@ -142,6 +144,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Cloud, Midgar Mercenary", 375, Rarity.MYTHIC, mage.cards.c.CloudMidgarMercenary.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Midgar Mercenary", 427, Rarity.MYTHIC, mage.cards.c.CloudMidgarMercenary.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Midgar Mercenary", 520, Rarity.MYTHIC, mage.cards.c.CloudMidgarMercenary.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Cloud, Midgar Mercenary", 564, Rarity.MYTHIC, mage.cards.c.CloudMidgarMercenary.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Planet's Champion", 482, Rarity.MYTHIC, mage.cards.c.CloudPlanetsChampion.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Planet's Champion", 552, Rarity.MYTHIC, mage.cards.c.CloudPlanetsChampion.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloudbound Moogle", 11, Rarity.COMMON, mage.cards.c.CloudboundMoogle.class));
@@ -503,6 +506,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Stiltzkin, Moogle Merchant", 327, Rarity.RARE, mage.cards.s.StiltzkinMoogleMerchant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Stiltzkin, Moogle Merchant", 34, Rarity.RARE, mage.cards.s.StiltzkinMoogleMerchant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Stiltzkin, Moogle Merchant", 433, Rarity.RARE, mage.cards.s.StiltzkinMoogleMerchant.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Stiltzkin, Moogle Merchant", 565, Rarity.RARE, mage.cards.s.StiltzkinMoogleMerchant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Stolen Uniform", 332, Rarity.UNCOMMON, mage.cards.s.StolenUniform.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Stolen Uniform", 75, Rarity.UNCOMMON, mage.cards.s.StolenUniform.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Stuck in Summoner's Sanctum", 76, Rarity.COMMON, mage.cards.s.StuckInSummonersSanctum.class));
@@ -588,6 +592,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Tifa Lockhart", 391, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Tifa Lockhart", 473, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Tifa Lockhart", 536, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Tifa Lockhart", 567, Rarity.RARE, mage.cards.t.TifaLockhart.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Tifa's Limit Break", 207, Rarity.UNCOMMON, mage.cards.t.TifasLimitBreak.class));
cards.add(new SetCardInfo("Tonberry", 122, Rarity.UNCOMMON, mage.cards.t.Tonberry.class));
cards.add(new SetCardInfo("Torgal, A Fine Hound", 208, Rarity.UNCOMMON, mage.cards.t.TorgalAFineHound.class, NON_FULL_USE_VARIOUS));
@@ -607,6 +612,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Traveling Chocobo", 210, Rarity.MYTHIC, mage.cards.t.TravelingChocobo.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Traveling Chocobo", 406, Rarity.MYTHIC, mage.cards.t.TravelingChocobo.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Traveling Chocobo", 551, Rarity.MYTHIC, mage.cards.t.TravelingChocobo.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Traveling Chocobo", 568, Rarity.MYTHIC, mage.cards.t.TravelingChocobo.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Treno, Dark City", 290, Rarity.COMMON, mage.cards.t.TrenoDarkCity.class));
cards.add(new SetCardInfo("Triple Triad", 166, Rarity.RARE, mage.cards.t.TripleTriad.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Triple Triad", 340, Rarity.RARE, mage.cards.t.TripleTriad.class, NON_FULL_USE_VARIOUS));
@@ -648,6 +654,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Vivi Ornitier", 248, Rarity.MYTHIC, mage.cards.v.ViviOrnitier.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vivi Ornitier", 321, Rarity.MYTHIC, mage.cards.v.ViviOrnitier.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Vivi Ornitier", 514, Rarity.MYTHIC, mage.cards.v.ViviOrnitier.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Vivi Ornitier", 570, Rarity.MYTHIC, mage.cards.v.ViviOrnitier.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Warrior's Sword", 169, Rarity.COMMON, mage.cards.w.WarriorsSword.class));
cards.add(new SetCardInfo("Wastes", 309, Rarity.COMMON, mage.cards.w.Wastes.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Weapons Vendor", 40, Rarity.COMMON, mage.cards.w.WeaponsVendor.class));
@@ -669,6 +676,7 @@ public final class FinalFantasy extends ExpansionSet {
cards.add(new SetCardInfo("Yuna, Hope of Spira", 404, Rarity.MYTHIC, mage.cards.y.YunaHopeOfSpira.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Yuna, Hope of Spira", 517, Rarity.MYTHIC, mage.cards.y.YunaHopeOfSpira.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Yuna, Hope of Spira", 549, Rarity.MYTHIC, mage.cards.y.YunaHopeOfSpira.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Yuna, Hope of Spira", 571, Rarity.MYTHIC, mage.cards.y.YunaHopeOfSpira.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Zack Fair", 435, Rarity.UNCOMMON, mage.cards.z.ZackFair.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Zack Fair", 45, Rarity.UNCOMMON, mage.cards.z.ZackFair.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Zack Fair", 580, Rarity.UNCOMMON, mage.cards.z.ZackFair.class, NON_FULL_USE_VARIOUS));
diff --git a/Mage.Sets/src/mage/sets/FinalFantasyCommander.java b/Mage.Sets/src/mage/sets/FinalFantasyCommander.java
index cf475f0bf0d..41c42f37a3e 100644
--- a/Mage.Sets/src/mage/sets/FinalFantasyCommander.java
+++ b/Mage.Sets/src/mage/sets/FinalFantasyCommander.java
@@ -17,15 +17,17 @@ public final class FinalFantasyCommander extends ExpansionSet {
private FinalFantasyCommander() {
super("Final Fantasy Commander", "FIC", ExpansionSet.buildDate(2025, 6, 13), SetType.SUPPLEMENTAL);
- this.hasBasicLands = false;
+ this.hasBasicLands = true;
cards.add(new SetCardInfo("Aerith, Last Ancient", 163, Rarity.RARE, mage.cards.a.AerithLastAncient.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Aerith, Last Ancient", 471, Rarity.RARE, mage.cards.a.AerithLastAncient.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Aerith, Last Ancient", 76, Rarity.RARE, mage.cards.a.AerithLastAncient.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Alisaie Leveilleur", 129, Rarity.RARE, mage.cards.a.AlisaieLeveilleur.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Alisaie Leveilleur", 9, Rarity.RARE, mage.cards.a.AlisaieLeveilleur.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Alphinaud Leveilleur", 140, Rarity.RARE, mage.cards.a.AlphinaudLeveilleur.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Alphinaud Leveilleur", 33, Rarity.RARE, mage.cards.a.AlphinaudLeveilleur.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Altered Ego", 317, Rarity.RARE, mage.cards.a.AlteredEgo.class));
+ cards.add(new SetCardInfo("Amarant Coral", 457, Rarity.RARE, mage.cards.a.AmarantCoral.class));
cards.add(new SetCardInfo("An Offer You Can't Refuse", 267, Rarity.UNCOMMON, mage.cards.a.AnOfferYouCantRefuse.class));
cards.add(new SetCardInfo("Angel of the Ruins", 229, Rarity.UNCOMMON, mage.cards.a.AngelOfTheRuins.class));
cards.add(new SetCardInfo("Anger", 289, Rarity.UNCOMMON, mage.cards.a.Anger.class));
@@ -49,9 +51,10 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Avalanche of Sector 7", 53, Rarity.RARE, mage.cards.a.AvalancheOfSector7.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Baleful Strix", 318, Rarity.RARE, mage.cards.b.BalefulStrix.class));
cards.add(new SetCardInfo("Bane of Progress", 299, Rarity.RARE, mage.cards.b.BaneOfProgress.class));
- cards.add(new SetCardInfo("Banon, the Returners' Leader", 78, Rarity.RARE, mage.cards.b.BanonTheReturnersLeader.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Banon, the Returners' Leader", 165, Rarity.RARE, mage.cards.b.BanonTheReturnersLeader.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Banon, the Returners' Leader", 78, Rarity.RARE, mage.cards.b.BanonTheReturnersLeader.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Barret, Avalanche Leader", 166, Rarity.RARE, mage.cards.b.BarretAvalancheLeader.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Barret, Avalanche Leader", 472, Rarity.RARE, mage.cards.b.BarretAvalancheLeader.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Barret, Avalanche Leader", 79, Rarity.RARE, mage.cards.b.BarretAvalancheLeader.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bastion Protector", 233, Rarity.RARE, mage.cards.b.BastionProtector.class));
cards.add(new SetCardInfo("Bastion of Remembrance", 274, Rarity.UNCOMMON, mage.cards.b.BastionOfRemembrance.class));
@@ -59,18 +62,21 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Bedevil", 319, Rarity.RARE, mage.cards.b.Bedevil.class));
cards.add(new SetCardInfo("Behemoth Sledge", 320, Rarity.UNCOMMON, mage.cards.b.BehemothSledge.class));
cards.add(new SetCardInfo("Big Score", 290, Rarity.COMMON, mage.cards.b.BigScore.class));
- cards.add(new SetCardInfo("Blitzball Stadium", 34, Rarity.RARE, mage.cards.b.BlitzballStadium.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Birds of Paradise", 483, Rarity.RARE, mage.cards.b.BirdsOfParadise.class));
cards.add(new SetCardInfo("Blitzball Stadium", 111, Rarity.RARE, mage.cards.b.BlitzballStadium.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Blitzball Stadium", 34, Rarity.RARE, mage.cards.b.BlitzballStadium.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Blue Mage's Cane", 112, Rarity.RARE, mage.cards.b.BlueMagesCane.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Blue Mage's Cane", 35, Rarity.RARE, mage.cards.b.BlueMagesCane.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bonders' Enclave", 376, Rarity.RARE, mage.cards.b.BondersEnclave.class));
cards.add(new SetCardInfo("Bred for the Hunt", 321, Rarity.UNCOMMON, mage.cards.b.BredForTheHunt.class));
+ cards.add(new SetCardInfo("Brilliant Wings", 454, Rarity.RARE, mage.cards.b.BrilliantWings.class));
cards.add(new SetCardInfo("Bronze Guardian", 234, Rarity.RARE, mage.cards.b.BronzeGuardian.class));
cards.add(new SetCardInfo("Brushland", 377, Rarity.RARE, mage.cards.b.Brushland.class));
cards.add(new SetCardInfo("Bugenhagen, Wise Elder", 159, Rarity.RARE, mage.cards.b.BugenhagenWiseElder.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Bugenhagen, Wise Elder", 66, Rarity.RARE, mage.cards.b.BugenhagenWiseElder.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cait Sith, Fortune Teller", 151, Rarity.RARE, mage.cards.c.CaitSithFortuneTeller.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cait Sith, Fortune Teller", 54, Rarity.RARE, mage.cards.c.CaitSithFortuneTeller.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Campsite Cuisine", 464, Rarity.RARE, mage.cards.c.CampsiteCuisine.class));
cards.add(new SetCardInfo("Canopy Vista", 378, Rarity.RARE, mage.cards.c.CanopyVista.class));
cards.add(new SetCardInfo("Celes, Rune Knight", 1, Rarity.MYTHIC, mage.cards.c.CelesRuneKnight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Celes, Rune Knight", 167, Rarity.MYTHIC, mage.cards.c.CelesRuneKnight.class, NON_FULL_USE_VARIOUS));
@@ -98,8 +104,8 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 202, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 210, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Cloud, Ex-SOLDIER", 221, Rarity.MYTHIC, mage.cards.c.CloudExSOLDIER.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Coin of Fate", 15, Rarity.RARE, mage.cards.c.CoinOfFate.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Coin of Fate", 104, Rarity.RARE, mage.cards.c.CoinOfFate.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Coin of Fate", 15, Rarity.RARE, mage.cards.c.CoinOfFate.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Collective Effort", 237, Rarity.RARE, mage.cards.c.CollectiveEffort.class));
cards.add(new SetCardInfo("Colossus Hammer", 338, Rarity.UNCOMMON, mage.cards.c.ColossusHammer.class));
cards.add(new SetCardInfo("Combustible Gearhulk", 292, Rarity.MYTHIC, mage.cards.c.CombustibleGearhulk.class));
@@ -132,17 +138,20 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Dispatch", 241, Rarity.UNCOMMON, mage.cards.d.Dispatch.class));
cards.add(new SetCardInfo("Dragonskull Summit", 387, Rarity.RARE, mage.cards.d.DragonskullSummit.class));
cards.add(new SetCardInfo("Drowned Catacomb", 388, Rarity.RARE, mage.cards.d.DrownedCatacomb.class));
+ cards.add(new SetCardInfo("Duelist's Flame", 452, Rarity.RARE, mage.cards.d.DuelistsFlame.class));
cards.add(new SetCardInfo("Duskshell Crawler", 301, Rarity.COMMON, mage.cards.d.DuskshellCrawler.class));
cards.add(new SetCardInfo("Edgar, Master Machinist", 169, Rarity.RARE, mage.cards.e.EdgarMasterMachinist.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Edgar, Master Machinist", 80, Rarity.RARE, mage.cards.e.EdgarMasterMachinist.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Elena, Turk Recruit", 133, Rarity.RARE, mage.cards.e.ElenaTurkRecruit.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Elena, Turk Recruit", 18, Rarity.RARE, mage.cards.e.ElenaTurkRecruit.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Emet-Selch of the Third Seat", 170, Rarity.RARE, mage.cards.e.EmetSelchOfTheThirdSeat.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Emet-Selch of the Third Seat", 473, Rarity.RARE, mage.cards.e.EmetSelchOfTheThirdSeat.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Emet-Selch of the Third Seat", 81, Rarity.RARE, mage.cards.e.EmetSelchOfTheThirdSeat.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Endless Detour", 324, Rarity.RARE, mage.cards.e.EndlessDetour.class));
cards.add(new SetCardInfo("Espers to Magicite", 114, Rarity.RARE, mage.cards.e.EspersToMagicite.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Espers to Magicite", 43, Rarity.RARE, mage.cards.e.EspersToMagicite.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Estinien Varlineau", 171, Rarity.RARE, mage.cards.e.EstinienVarlineau.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Estinien Varlineau", 474, Rarity.RARE, mage.cards.e.EstinienVarlineau.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Estinien Varlineau", 82, Rarity.RARE, mage.cards.e.EstinienVarlineau.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Everflowing Chalice", 343, Rarity.UNCOMMON, mage.cards.e.EverflowingChalice.class));
cards.add(new SetCardInfo("Evolving Wilds", 389, Rarity.COMMON, mage.cards.e.EvolvingWilds.class));
@@ -155,14 +164,17 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Fandaniel, Telophoroi Ascian", 46, Rarity.RARE, mage.cards.f.FandanielTelophoroiAscian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Farewell", 242, Rarity.RARE, mage.cards.f.Farewell.class));
cards.add(new SetCardInfo("Farseek", 302, Rarity.COMMON, mage.cards.f.Farseek.class));
+ cards.add(new SetCardInfo("Fated Clash", 449, Rarity.RARE, mage.cards.f.FatedClash.class));
cards.add(new SetCardInfo("Fathom Mage", 325, Rarity.RARE, mage.cards.f.FathomMage.class));
cards.add(new SetCardInfo("Fetid Heath", 391, Rarity.RARE, mage.cards.f.FetidHeath.class));
cards.add(new SetCardInfo("Fight Rigging", 303, Rarity.RARE, mage.cards.f.FightRigging.class));
cards.add(new SetCardInfo("Final Judgment", 243, Rarity.MYTHIC, mage.cards.f.FinalJudgment.class));
cards.add(new SetCardInfo("Fire-Lit Thicket", 392, Rarity.RARE, mage.cards.f.FireLitThicket.class));
+ cards.add(new SetCardInfo("Flash Photography", 463, Rarity.RARE, mage.cards.f.FlashPhotography.class));
cards.add(new SetCardInfo("Flayer of the Hatebound", 293, Rarity.RARE, mage.cards.f.FlayerOfTheHatebound.class));
cards.add(new SetCardInfo("Flooded Grove", 393, Rarity.RARE, mage.cards.f.FloodedGrove.class));
cards.add(new SetCardInfo("Foreboding Ruins", 394, Rarity.RARE, mage.cards.f.ForebodingRuins.class));
+ cards.add(new SetCardInfo("Forest", 482, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Forge of Heroes", 395, Rarity.COMMON, mage.cards.f.ForgeOfHeroes.class));
cards.add(new SetCardInfo("Forgotten Ancient", 304, Rarity.RARE, mage.cards.f.ForgottenAncient.class));
cards.add(new SetCardInfo("Fortified Village", 396, Rarity.RARE, mage.cards.f.FortifiedVillage.class));
@@ -215,6 +227,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Interceptor, Shadow's Hound", 147, Rarity.RARE, mage.cards.i.InterceptorShadowsHound.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Interceptor, Shadow's Hound", 47, Rarity.RARE, mage.cards.i.InterceptorShadowsHound.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Into the Story", 266, Rarity.UNCOMMON, mage.cards.i.IntoTheStory.class));
+ cards.add(new SetCardInfo("Island", 479, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Isolated Chapel", 405, Rarity.RARE, mage.cards.i.IsolatedChapel.class));
cards.add(new SetCardInfo("Jungle Shrine", 406, Rarity.UNCOMMON, mage.cards.j.JungleShrine.class));
cards.add(new SetCardInfo("Kefka, Dancing Mad", 174, Rarity.RARE, mage.cards.k.KefkaDancingMad.class, NON_FULL_USE_VARIOUS));
@@ -231,11 +244,13 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Lightning Greaves", 349, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class));
cards.add(new SetCardInfo("Lingering Souls", 245, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class));
cards.add(new SetCardInfo("Locke, Treasure Hunter", 177, Rarity.RARE, mage.cards.l.LockeTreasureHunter.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Locke, Treasure Hunter", 475, Rarity.RARE, mage.cards.l.LockeTreasureHunter.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Locke, Treasure Hunter", 87, Rarity.RARE, mage.cards.l.LockeTreasureHunter.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lord Jyscal Guado", 137, Rarity.RARE, mage.cards.l.LordJyscalGuado.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lord Jyscal Guado", 23, Rarity.RARE, mage.cards.l.LordJyscalGuado.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lulu, Stern Guardian", 143, Rarity.RARE, mage.cards.l.LuluSternGuardian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lulu, Stern Guardian", 38, Rarity.RARE, mage.cards.l.LuluSternGuardian.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Lulu, Stern Guardian", 467, Rarity.RARE, mage.cards.l.LuluSternGuardian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Luminous Broodmoth", 246, Rarity.MYTHIC, mage.cards.l.LuminousBroodmoth.class));
cards.add(new SetCardInfo("Lyse Hext", 178, Rarity.RARE, mage.cards.l.LyseHext.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lyse Hext", 88, Rarity.RARE, mage.cards.l.LyseHext.class, NON_FULL_USE_VARIOUS));
@@ -246,10 +261,12 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Millikin", 352, Rarity.UNCOMMON, mage.cards.m.Millikin.class));
cards.add(new SetCardInfo("Mind Stone", 353, Rarity.UNCOMMON, mage.cards.m.MindStone.class));
cards.add(new SetCardInfo("Mog, Moogle Warrior", 179, Rarity.RARE, mage.cards.m.MogMoogleWarrior.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Mog, Moogle Warrior", 476, Rarity.RARE, mage.cards.m.MogMoogleWarrior.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mog, Moogle Warrior", 89, Rarity.RARE, mage.cards.m.MogMoogleWarrior.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Morbid Opportunist", 278, Rarity.UNCOMMON, mage.cards.m.MorbidOpportunist.class));
cards.add(new SetCardInfo("Mortify", 327, Rarity.UNCOMMON, mage.cards.m.Mortify.class));
cards.add(new SetCardInfo("Mossfire Valley", 407, Rarity.RARE, mage.cards.m.MossfireValley.class));
+ cards.add(new SetCardInfo("Mountain", 481, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Murderous Rider", 279, Rarity.RARE, mage.cards.m.MurderousRider.class));
cards.add(new SetCardInfo("Nature's Lore", 311, Rarity.COMMON, mage.cards.n.NaturesLore.class));
cards.add(new SetCardInfo("Nesting Grounds", 408, Rarity.UNCOMMON, mage.cards.n.NestingGrounds.class));
@@ -267,6 +284,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Path of Discovery", 312, Rarity.RARE, mage.cards.p.PathOfDiscovery.class));
cards.add(new SetCardInfo("Path to Exile", 248, Rarity.UNCOMMON, mage.cards.p.PathToExile.class));
cards.add(new SetCardInfo("Pitiless Plunderer", 281, Rarity.UNCOMMON, mage.cards.p.PitilessPlunderer.class));
+ cards.add(new SetCardInfo("Plains", 478, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Port Town", 412, Rarity.RARE, mage.cards.p.PortTown.class));
cards.add(new SetCardInfo("Prairie Stream", 413, Rarity.RARE, mage.cards.p.PrairieStream.class));
cards.add(new SetCardInfo("Priest of Fell Rites", 328, Rarity.RARE, mage.cards.p.PriestOfFellRites.class));
@@ -293,6 +311,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Resourceful Defense", 251, Rarity.RARE, mage.cards.r.ResourcefulDefense.class));
cards.add(new SetCardInfo("Rikku, Resourceful Guardian", 145, Rarity.RARE, mage.cards.r.RikkuResourcefulGuardian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Rikku, Resourceful Guardian", 41, Rarity.RARE, mage.cards.r.RikkuResourcefulGuardian.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Rikku, Resourceful Guardian", 468, Rarity.RARE, mage.cards.r.RikkuResourcefulGuardian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Rise of the Dark Realms", 283, Rarity.MYTHIC, mage.cards.r.RiseOfTheDarkRealms.class));
cards.add(new SetCardInfo("Rite of Replication", 270, Rarity.RARE, mage.cards.r.RiteOfReplication.class));
cards.add(new SetCardInfo("Rogue's Passage", 415, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class));
@@ -307,6 +326,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Sacred Peaks", 418, Rarity.COMMON, mage.cards.s.SacredPeaks.class));
cards.add(new SetCardInfo("Scavenger Grounds", 419, Rarity.RARE, mage.cards.s.ScavengerGrounds.class));
cards.add(new SetCardInfo("Scholar of New Horizons", 252, Rarity.RARE, mage.cards.s.ScholarOfNewHorizons.class));
+ cards.add(new SetCardInfo("Search for Dagger", 459, Rarity.RARE, mage.cards.s.SearchForDagger.class));
cards.add(new SetCardInfo("Seaside Citadel", 420, Rarity.UNCOMMON, mage.cards.s.SeasideCitadel.class));
cards.add(new SetCardInfo("Secret Rendezvous", 217, Rarity.UNCOMMON, mage.cards.s.SecretRendezvous.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Secret Rendezvous", 218, Rarity.UNCOMMON, mage.cards.s.SecretRendezvous.class, NON_FULL_USE_VARIOUS));
@@ -331,6 +351,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Skycloud Expanse", 423, Rarity.RARE, mage.cards.s.SkycloudExpanse.class));
cards.add(new SetCardInfo("Slayers' Stronghold", 424, Rarity.RARE, mage.cards.s.SlayersStronghold.class));
cards.add(new SetCardInfo("Smoldering Marsh", 425, Rarity.RARE, mage.cards.s.SmolderingMarsh.class));
+ cards.add(new SetCardInfo("Snapcaster Mage", 469, Rarity.MYTHIC, mage.cards.s.SnapcasterMage.class));
cards.add(new SetCardInfo("Snort", 120, Rarity.RARE, mage.cards.s.Snort.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Snort", 58, Rarity.RARE, mage.cards.s.Snort.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Snuff Out", 285, Rarity.COMMON, mage.cards.s.SnuffOut.class));
@@ -374,6 +395,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Sunpetal Grove", 432, Rarity.RARE, mage.cards.s.SunpetalGrove.class));
cards.add(new SetCardInfo("Sunscorch Regent", 255, Rarity.RARE, mage.cards.s.SunscorchRegent.class));
cards.add(new SetCardInfo("Sunscorched Divide", 433, Rarity.RARE, mage.cards.s.SunscorchedDivide.class));
+ cards.add(new SetCardInfo("Swamp", 480, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Swiftfoot Boots", 361, Rarity.UNCOMMON, mage.cards.s.SwiftfootBoots.class));
cards.add(new SetCardInfo("Sword of the Animist", 362, Rarity.RARE, mage.cards.s.SwordOfTheAnimist.class));
cards.add(new SetCardInfo("Swords to Plowshares", 256, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class));
@@ -386,6 +408,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Tangled Islet", 434, Rarity.COMMON, mage.cards.t.TangledIslet.class));
cards.add(new SetCardInfo("Tataru Taru", 138, Rarity.RARE, mage.cards.t.TataruTaru.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Tataru Taru", 30, Rarity.RARE, mage.cards.t.TataruTaru.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Tataru Taru", 466, Rarity.RARE, mage.cards.t.TataruTaru.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Temple of Enlightenment", 435, Rarity.RARE, mage.cards.t.TempleOfEnlightenment.class));
cards.add(new SetCardInfo("Temple of Mystery", 436, Rarity.RARE, mage.cards.t.TempleOfMystery.class));
cards.add(new SetCardInfo("Temple of Plenty", 437, Rarity.RARE, mage.cards.t.TempleOfPlenty.class));
@@ -397,6 +420,10 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Terra, Herald of Hope", 4, Rarity.MYTHIC, mage.cards.t.TerraHeraldOfHope.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Thancred Waters", 139, Rarity.RARE, mage.cards.t.ThancredWaters.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Thancred Waters", 31, Rarity.RARE, mage.cards.t.ThancredWaters.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("The Destined Black Mage", 447, Rarity.RARE, mage.cards.t.TheDestinedBlackMage.class));
+ cards.add(new SetCardInfo("The Destined Thief", 446, Rarity.RARE, mage.cards.t.TheDestinedThief.class));
+ cards.add(new SetCardInfo("The Destined Warrior", 443, Rarity.RARE, mage.cards.t.TheDestinedWarrior.class));
+ cards.add(new SetCardInfo("The Destined White Mage", 444, Rarity.RARE, mage.cards.t.TheDestinedWhiteMage.class));
cards.add(new SetCardInfo("The Falcon, Airship Restored", 116, Rarity.RARE, mage.cards.t.TheFalconAirshipRestored.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Falcon, Airship Restored", 45, Rarity.RARE, mage.cards.t.TheFalconAirshipRestored.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("The Warring Triad", 193, Rarity.RARE, mage.cards.t.TheWarringTriad.class, NON_FULL_USE_VARIOUS));
@@ -441,8 +468,10 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Vineglimmer Snarl", 440, Rarity.RARE, mage.cards.v.VineglimmerSnarl.class));
cards.add(new SetCardInfo("Void Rend", 331, Rarity.RARE, mage.cards.v.VoidRend.class));
cards.add(new SetCardInfo("Wakka, Devoted Guardian", 190, Rarity.RARE, mage.cards.w.WakkaDevotedGuardian.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Wakka, Devoted Guardian", 477, Rarity.RARE, mage.cards.w.WakkaDevotedGuardian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Wakka, Devoted Guardian", 97, Rarity.RARE, mage.cards.w.WakkaDevotedGuardian.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Walking Ballista", 371, Rarity.RARE, mage.cards.w.WalkingBallista.class));
+ cards.add(new SetCardInfo("Warrior's Resolve", 465, Rarity.RARE, mage.cards.w.WarriorsResolve.class));
cards.add(new SetCardInfo("Wayfarer's Bauble", 372, Rarity.COMMON, mage.cards.w.WayfarersBauble.class));
cards.add(new SetCardInfo("Wooded Ridgeline", 441, Rarity.COMMON, mage.cards.w.WoodedRidgeline.class));
cards.add(new SetCardInfo("Wrecking Ball Arm", 100, Rarity.RARE, mage.cards.w.WreckingBallArm.class, NON_FULL_USE_VARIOUS));
@@ -453,6 +482,7 @@ public final class FinalFantasyCommander extends ExpansionSet {
cards.add(new SetCardInfo("Y'shtola, Night's Blessed", 226, Rarity.MYTHIC, mage.cards.y.YshtolaNightsBlessed.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Y'shtola, Night's Blessed", 7, Rarity.MYTHIC, mage.cards.y.YshtolaNightsBlessed.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Yuffie, Materia Hunter", 158, Rarity.RARE, mage.cards.y.YuffieMateriaHunter.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Yuffie, Materia Hunter", 470, Rarity.RARE, mage.cards.y.YuffieMateriaHunter.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Yuffie, Materia Hunter", 65, Rarity.RARE, mage.cards.y.YuffieMateriaHunter.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Yuna's Decision", 125, Rarity.RARE, mage.cards.y.YunasDecision.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Yuna's Decision", 74, Rarity.RARE, mage.cards.y.YunasDecision.class, NON_FULL_USE_VARIOUS));
diff --git a/Mage.Sets/src/mage/sets/LorwynEclipsed.java b/Mage.Sets/src/mage/sets/LorwynEclipsed.java
new file mode 100644
index 00000000000..8d0ca69aa6e
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/LorwynEclipsed.java
@@ -0,0 +1,59 @@
+package mage.sets;
+
+import mage.cards.ExpansionSet;
+import mage.constants.Rarity;
+import mage.constants.SetType;
+
+/**
+ * @author TheElk801
+ */
+public final class LorwynEclipsed extends ExpansionSet {
+
+ private static final LorwynEclipsed instance = new LorwynEclipsed();
+
+ public static LorwynEclipsed getInstance() {
+ return instance;
+ }
+
+ private LorwynEclipsed() {
+ super("Lorwyn Eclipsed", "ECL", ExpansionSet.buildDate(2026, 1, 23), SetType.EXPANSION);
+ this.blockName = "Lorwyn Eclipsed"; // for sorting in GUI
+ this.hasBasicLands = false; // temporary
+
+ cards.add(new SetCardInfo("Ashling's Command", 205, Rarity.RARE, mage.cards.a.AshlingsCommand.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Ashling's Command", 330, Rarity.RARE, mage.cards.a.AshlingsCommand.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Bitterbloom Bearer", 310, Rarity.MYTHIC, mage.cards.b.BitterbloomBearer.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Bitterbloom Bearer", 352, Rarity.MYTHIC, mage.cards.b.BitterbloomBearer.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Bitterbloom Bearer", 88, Rarity.MYTHIC, mage.cards.b.BitterbloomBearer.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Blood Crypt", 262, Rarity.RARE, mage.cards.b.BloodCrypt.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Blood Crypt", 349, Rarity.RARE, mage.cards.b.BloodCrypt.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Deceit", 212, Rarity.MYTHIC, mage.cards.d.Deceit.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Deceit", 293, Rarity.MYTHIC, mage.cards.d.Deceit.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Eirdu, Carrier of Dawn", 13, Rarity.MYTHIC, mage.cards.e.EirduCarrierOfDawn.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Eirdu, Carrier of Dawn", 286, Rarity.MYTHIC, mage.cards.e.EirduCarrierOfDawn.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Emptiness", 222, Rarity.MYTHIC, mage.cards.e.Emptiness.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Emptiness", 294, Rarity.MYTHIC, mage.cards.e.Emptiness.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Figure of Fable", 224, Rarity.RARE, mage.cards.f.FigureOfFable.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Figure of Fable", 372, Rarity.RARE, mage.cards.f.FigureOfFable.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Formidable Speaker", 176, Rarity.RARE, mage.cards.f.FormidableSpeaker.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Formidable Speaker", 366, Rarity.RARE, mage.cards.f.FormidableSpeaker.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Hallowed Fountain", 265, Rarity.RARE, mage.cards.h.HallowedFountain.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Hallowed Fountain", 347, Rarity.RARE, mage.cards.h.HallowedFountain.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Isilu, Carrier of Twilight", 13, Rarity.MYTHIC, mage.cards.i.IsiluCarrierOfTwilight.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Isilu, Carrier of Twilight", 286, Rarity.MYTHIC, mage.cards.i.IsiluCarrierOfTwilight.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Morningtide's Light", 27, Rarity.MYTHIC, mage.cards.m.MorningtidesLight.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Morningtide's Light", 301, Rarity.MYTHIC, mage.cards.m.MorningtidesLight.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Mutable Explorer", 186, Rarity.RARE, mage.cards.m.MutableExplorer.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Mutable Explorer", 327, Rarity.RARE, mage.cards.m.MutableExplorer.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Overgrown Tomb", 266, Rarity.RARE, mage.cards.o.OvergrownTomb.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Overgrown Tomb", 350, Rarity.RARE, mage.cards.o.OvergrownTomb.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Steam Vents", 267, Rarity.RARE, mage.cards.s.SteamVents.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Steam Vents", 348, Rarity.RARE, mage.cards.s.SteamVents.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sygg, Wanderbrine Shield", 288, Rarity.RARE, mage.cards.s.SyggWanderbrineShield.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sygg, Wanderbrine Shield", 76, Rarity.RARE, mage.cards.s.SyggWanderbrineShield.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sygg, Wanderwine Wisdom", 288, Rarity.RARE, mage.cards.s.SyggWanderwineWisdom.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sygg, Wanderwine Wisdom", 76, Rarity.RARE, mage.cards.s.SyggWanderwineWisdom.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Temple Garden", 268, Rarity.RARE, mage.cards.t.TempleGarden.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Temple Garden", 351, Rarity.RARE, mage.cards.t.TempleGarden.class, NON_FULL_USE_VARIOUS));
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/MarvelUniverse.java b/Mage.Sets/src/mage/sets/MarvelUniverse.java
new file mode 100644
index 00000000000..1e93a82f923
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/MarvelUniverse.java
@@ -0,0 +1,66 @@
+package mage.sets;
+
+import mage.cards.ExpansionSet;
+import mage.constants.Rarity;
+import mage.constants.SetType;
+
+/**
+ * https://scryfall.com/sets/mar
+ *
+ * @author ReSech
+ */
+public class MarvelUniverse extends ExpansionSet {
+
+ private static final MarvelUniverse instance = new MarvelUniverse();
+
+ public static MarvelUniverse getInstance() {
+ return instance;
+ }
+
+ private MarvelUniverse() {
+ super("Marvel Universe", "MAR", ExpansionSet.buildDate(2025, 9, 26), SetType.SUPPLEMENTAL);
+ this.hasBoosters = false;
+ this.hasBasicLands = false;
+
+ cards.add(new SetCardInfo("Alibou, Ancient Witness", 39, Rarity.MYTHIC, mage.cards.a.AlibouAncientWitness.class));
+ cards.add(new SetCardInfo("Arachnogenesis", 31, Rarity.MYTHIC, mage.cards.a.Arachnogenesis.class));
+ cards.add(new SetCardInfo("Arasta of the Endless Web", 32, Rarity.MYTHIC, mage.cards.a.ArastaOfTheEndlessWeb.class));
+ cards.add(new SetCardInfo("Beast Within", 33, Rarity.MYTHIC, mage.cards.b.BeastWithin.class));
+ cards.add(new SetCardInfo("Clever Impersonator", 8, Rarity.MYTHIC, mage.cards.c.CleverImpersonator.class));
+ cards.add(new SetCardInfo("Comeuppance", 1, Rarity.MYTHIC, mage.cards.c.Comeuppance.class));
+ cards.add(new SetCardInfo("Counterspell", 9, Rarity.MYTHIC, mage.cards.c.Counterspell.class));
+ cards.add(new SetCardInfo("Feed the Swarm", 16, Rarity.MYTHIC, mage.cards.f.FeedTheSwarm.class));
+ cards.add(new SetCardInfo("Goblin Bombardment", 23, Rarity.MYTHIC, mage.cards.g.GoblinBombardment.class));
+ cards.add(new SetCardInfo("Heroic Intervention", 34, Rarity.MYTHIC, mage.cards.h.HeroicIntervention.class));
+ cards.add(new SetCardInfo("Hex", 17, Rarity.MYTHIC, mage.cards.h.Hex.class));
+ cards.add(new SetCardInfo("Hunter's Insight", 35, Rarity.MYTHIC, mage.cards.h.HuntersInsight.class));
+ cards.add(new SetCardInfo("Infernal Grasp", 18, Rarity.MYTHIC, mage.cards.i.InfernalGrasp.class));
+ cards.add(new SetCardInfo("Leyline Binding", 2, Rarity.MYTHIC, mage.cards.l.LeylineBinding.class));
+ cards.add(new SetCardInfo("Lorthos, the Tidemaker", 10, Rarity.MYTHIC, mage.cards.l.LorthosTheTidemaker.class));
+ cards.add(new SetCardInfo("Mindbreak Trap", 11, Rarity.MYTHIC, mage.cards.m.MindbreakTrap.class));
+ cards.add(new SetCardInfo("Mystic Confluence", 12, Rarity.MYTHIC, mage.cards.m.MysticConfluence.class));
+ cards.add(new SetCardInfo("Najeela, the Blade-Blossom", 24, Rarity.MYTHIC, mage.cards.n.NajeelaTheBladeBlossom.class));
+ cards.add(new SetCardInfo("Nine Lives", 3, Rarity.MYTHIC, mage.cards.n.NineLives.class));
+ cards.add(new SetCardInfo("Opposition Agent", 19, Rarity.MYTHIC, mage.cards.o.OppositionAgent.class));
+ cards.add(new SetCardInfo("Parallel Lives", 36, Rarity.MYTHIC, mage.cards.p.ParallelLives.class));
+ cards.add(new SetCardInfo("Path to Exile", 4, Rarity.MYTHIC, mage.cards.p.PathToExile.class));
+ cards.add(new SetCardInfo("Ponder", 13, Rarity.MYTHIC, mage.cards.p.Ponder.class));
+ cards.add(new SetCardInfo("Reanimate", 20, Rarity.MYTHIC, mage.cards.r.Reanimate.class));
+ cards.add(new SetCardInfo("Relentless Assault", 25, Rarity.MYTHIC, mage.cards.r.RelentlessAssault.class));
+ cards.add(new SetCardInfo("Reprieve", 5, Rarity.MYTHIC, mage.cards.r.Reprieve.class));
+ cards.add(new SetCardInfo("Rest in Peace", 6, Rarity.MYTHIC, mage.cards.r.RestInPeace.class));
+ cards.add(new SetCardInfo("Rite of Replication", 14, Rarity.MYTHIC, mage.cards.r.RiteOfReplication.class));
+ cards.add(new SetCardInfo("Savage Beating", 26, Rarity.MYTHIC, mage.cards.s.SavageBeating.class));
+ cards.add(new SetCardInfo("Saw in Half", 21, Rarity.MYTHIC, mage.cards.s.SawInHalf.class));
+ cards.add(new SetCardInfo("Shock", 27, Rarity.MYTHIC, mage.cards.s.Shock.class));
+ cards.add(new SetCardInfo("Silkguard", 37, Rarity.MYTHIC, mage.cards.s.Silkguard.class));
+ cards.add(new SetCardInfo("Skithiryx, the Blight Dragon", 22, Rarity.MYTHIC, mage.cards.s.SkithiryxTheBlightDragon.class));
+ cards.add(new SetCardInfo("Tangle", 38, Rarity.MYTHIC, mage.cards.t.Tangle.class));
+ cards.add(new SetCardInfo("Terminate", 40, Rarity.MYTHIC, mage.cards.t.Terminate.class));
+ cards.add(new SetCardInfo("Thrill of Possibility", 28, Rarity.MYTHIC, mage.cards.t.ThrillOfPossibility.class));
+ cards.add(new SetCardInfo("Traumatize", 15, Rarity.MYTHIC, mage.cards.t.Traumatize.class));
+ cards.add(new SetCardInfo("Unexpected Windfall", 29, Rarity.MYTHIC, mage.cards.u.UnexpectedWindfall.class));
+ cards.add(new SetCardInfo("Wedding Ring", 7, Rarity.MYTHIC, mage.cards.w.WeddingRing.class));
+ cards.add(new SetCardInfo("Winds of Change", 30, Rarity.MYTHIC, mage.cards.w.WindsOfChange.class));
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/MediaAndCollaborationPromos.java b/Mage.Sets/src/mage/sets/MediaAndCollaborationPromos.java
index 04b60e4a656..1436aaf5098 100644
--- a/Mage.Sets/src/mage/sets/MediaAndCollaborationPromos.java
+++ b/Mage.Sets/src/mage/sets/MediaAndCollaborationPromos.java
@@ -33,6 +33,8 @@ public class MediaAndCollaborationPromos extends ExpansionSet {
cards.add(new SetCardInfo("Cast Down", "2019-1", Rarity.UNCOMMON, mage.cards.c.CastDown.class));
cards.add(new SetCardInfo("Chandra's Outrage", "2010-3", Rarity.COMMON, mage.cards.c.ChandrasOutrage.class));
cards.add(new SetCardInfo("Chandra's Spitfire", "2010-4", Rarity.UNCOMMON, mage.cards.c.ChandrasSpitfire.class));
+ cards.add(new SetCardInfo("Chrome Host Seedshark", "2025-20", Rarity.RARE, mage.cards.c.ChromeHostSeedshark.class));
+ cards.add(new SetCardInfo("Cloud, Midgar Mercenary", "2025-21", Rarity.MYTHIC, mage.cards.c.CloudMidgarMercenary.class));
cards.add(new SetCardInfo("Cloud, Planet's Champion", "2025-13", Rarity.MYTHIC, mage.cards.c.CloudPlanetsChampion.class));
cards.add(new SetCardInfo("Counterspell", "2021-1", Rarity.RARE, mage.cards.c.Counterspell.class));
cards.add(new SetCardInfo("Crop Rotation", "2020-7", Rarity.RARE, mage.cards.c.CropRotation.class));
@@ -58,6 +60,7 @@ public class MediaAndCollaborationPromos extends ExpansionSet {
cards.add(new SetCardInfo("Jace Beleren", "2009-1", Rarity.MYTHIC, mage.cards.j.JaceBeleren.class));
cards.add(new SetCardInfo("Jace, Memory Adept", "2024-2", Rarity.MYTHIC, mage.cards.j.JaceMemoryAdept.class));
cards.add(new SetCardInfo("Jamuraan Lion", "1996-3", Rarity.COMMON, mage.cards.j.JamuraanLion.class, RETRO_ART));
+ cards.add(new SetCardInfo("Kaalia of the Vast", "2025-19", Rarity.MYTHIC, mage.cards.k.KaaliaOfTheVast.class));
cards.add(new SetCardInfo("Kuldotha Phoenix", "2010-5", Rarity.RARE, mage.cards.k.KuldothaPhoenix.class));
cards.add(new SetCardInfo("Lava Coil", "2019-4", Rarity.UNCOMMON, mage.cards.l.LavaCoil.class));
cards.add(new SetCardInfo("Lightning Hounds", "2000-1", Rarity.COMMON, mage.cards.l.LightningHounds.class, RETRO_ART));
diff --git a/Mage.Sets/src/mage/sets/ProTourCollectorSet.java b/Mage.Sets/src/mage/sets/ProTourCollectorSet.java
index 5127bc79d6b..f4268a080d7 100644
--- a/Mage.Sets/src/mage/sets/ProTourCollectorSet.java
+++ b/Mage.Sets/src/mage/sets/ProTourCollectorSet.java
@@ -60,11 +60,11 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Circle of Protection: Green", "bl14sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Circle of Protection: Green", "bl16sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Circle of Protection: Red", "bl15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Circle of Protection: Red", "ml15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Circle of Protection: Red", "shr15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Circle of Protection: Red", "bl17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Circle of Protection: Red", "et17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Circle of Protection: Red", "ml15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Circle of Protection: Red", "ml17sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Circle of Protection: Red", "shr15sb", Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("City of Brass", "et112", Rarity.RARE, mage.cards.c.CityOfBrass.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("City of Brass", "gb112", Rarity.RARE, mage.cards.c.CityOfBrass.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("City of Brass", "ll112sb", Rarity.RARE, mage.cards.c.CityOfBrass.class, RETRO_ART_USE_VARIOUS));
@@ -109,10 +109,10 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Erhnam Djinn", "pp64", Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Eron the Relentless", "mj73sb", Rarity.UNCOMMON, mage.cards.e.EronTheRelentless.class, RETRO_ART));
cards.add(new SetCardInfo("Essence Filter", "pp233sb", Rarity.COMMON, mage.cards.e.EssenceFilter.class, RETRO_ART));
- cards.add(new SetCardInfo("Feldon's Cane", "ll50sb", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Feldon's Cane", "mj50", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Feldon's Cane", "ml50", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Feldon's Cane", "shr50sb", Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Feldon's Cane", "ll50sb", Rarity.COMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Feldon's Cane", "mj50", Rarity.COMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Feldon's Cane", "ml50", Rarity.COMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Feldon's Cane", "shr50sb", Rarity.COMMON, mage.cards.f.FeldonsCane.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Fellwar Stone", "bl319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Fellwar Stone", "et319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Fellwar Stone", "mj319", Rarity.UNCOMMON, mage.cards.f.FellwarStone.class, RETRO_ART_USE_VARIOUS));
@@ -122,10 +122,10 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Fireball", "gb192", Rarity.COMMON, mage.cards.f.Fireball.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Fireball", "mj192", Rarity.COMMON, mage.cards.f.Fireball.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Forest", "bl376", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Forest", "pp376", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Forest", "bl377", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Forest", "pp377", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Forest", "bl378", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Forest", "pp376", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Forest", "pp377", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Forest", "pp378", Rarity.LAND, mage.cards.basiclands.Forest.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Fountain of Youth", "mj98sb", Rarity.COMMON, mage.cards.f.FountainOfYouth.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Fountain of Youth", "ml98", Rarity.COMMON, mage.cards.f.FountainOfYouth.class, RETRO_ART_USE_VARIOUS));
@@ -161,10 +161,10 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Incinerate", "et194", Rarity.COMMON, mage.cards.i.Incinerate.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Incinerate", "mj194", Rarity.COMMON, mage.cards.i.Incinerate.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Island", "ml367", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Island", "shr367", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Island", "ml368", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Island", "shr368", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Island", "ml369", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Island", "shr367", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Island", "shr368", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Island", "shr369", Rarity.LAND, mage.cards.basiclands.Island.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Ivory Tower", "bl328", Rarity.RARE, mage.cards.i.IvoryTower.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Ivory Tower", "ll328", Rarity.RARE, mage.cards.i.IvoryTower.class, RETRO_ART_USE_VARIOUS));
@@ -172,8 +172,8 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Ivory Tower", "ml328", Rarity.RARE, mage.cards.i.IvoryTower.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Ivory Tower", "pp328sb", Rarity.RARE, mage.cards.i.IvoryTower.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Ivory Tower", "shr328", Rarity.RARE, mage.cards.i.IvoryTower.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Jalum Tome", "ll54", Rarity.UNCOMMON, mage.cards.j.JalumTome.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Jalum Tome", "ll54sb", Rarity.UNCOMMON, mage.cards.j.JalumTome.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Jalum Tome", "ll54", Rarity.RARE, mage.cards.j.JalumTome.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Jalum Tome", "ll54sb", Rarity.RARE, mage.cards.j.JalumTome.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Jayemdae Tome", "et331", Rarity.RARE, mage.cards.j.JayemdaeTome.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Jayemdae Tome", "ml331", Rarity.RARE, mage.cards.j.JayemdaeTome.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Jester's Cap", "mj324", Rarity.RARE, mage.cards.j.JestersCap.class, RETRO_ART_USE_VARIOUS));
@@ -208,10 +208,10 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Mishra's Factory", "pp361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Mishra's Factory", "shr361", Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Mountain", "et373", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Mountain", "mj373", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Mountain", "et374", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Mountain", "mj374", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Mountain", "et375", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Mountain", "mj373", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Mountain", "mj374", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Mountain", "mj375", Rarity.LAND, mage.cards.basiclands.Mountain.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Necropotence", "ll154", Rarity.RARE, mage.cards.n.Necropotence.class, RETRO_ART));
cards.add(new SetCardInfo("Nevinyrral's Disk", "et338sb", Rarity.RARE, mage.cards.n.NevinyrralsDisk.class, RETRO_ART_USE_VARIOUS));
@@ -230,22 +230,22 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Order of the Ebon Hand", "ll42c", Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Orgg", "et63", Rarity.RARE, mage.cards.o.Orgg.class, RETRO_ART));
cards.add(new SetCardInfo("Plains", "bl364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "et364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "mj364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "ml364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "pp364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "shr364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "bl365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "et365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "mj365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "ml365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "pp365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Plains", "shr365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "bl366", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "et364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "et365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "et366", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "mj364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "mj365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "mj366", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "ml364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "ml365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "ml366", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "pp364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "pp365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "pp366", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "shr364", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", "shr365", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Plains", "shr366", Rarity.LAND, mage.cards.basiclands.Plains.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Power Sink", "shr93", Rarity.COMMON, mage.cards.p.PowerSink.class, RETRO_ART));
cards.add(new SetCardInfo("Pyroblast", "mj213sb", Rarity.COMMON, mage.cards.p.Pyroblast.class, RETRO_ART));
@@ -292,10 +292,10 @@ public class ProTourCollectorSet extends ExpansionSet {
cards.add(new SetCardInfo("Svyelunite Temple", "ml102", Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Svyelunite Temple", "shr102", Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Swamp", "gb370", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Swamp", "ll370", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Swamp", "gb371", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Swamp", "ll371", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Swamp", "gb372", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Swamp", "ll370", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Swamp", "ll371", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Swamp", "ll372", Rarity.LAND, mage.cards.basiclands.Swamp.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Swords to Plowshares", "bl52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Swords to Plowshares", "et52", Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class, RETRO_ART_USE_VARIOUS));
diff --git a/Mage.Sets/src/mage/sets/SecretLair30thAnniversaryCountdownKit.java b/Mage.Sets/src/mage/sets/SecretLairCountdown.java
similarity index 89%
rename from Mage.Sets/src/mage/sets/SecretLair30thAnniversaryCountdownKit.java
rename to Mage.Sets/src/mage/sets/SecretLairCountdown.java
index 66fae7e49f1..62c60ec020e 100644
--- a/Mage.Sets/src/mage/sets/SecretLair30thAnniversaryCountdownKit.java
+++ b/Mage.Sets/src/mage/sets/SecretLairCountdown.java
@@ -7,16 +7,16 @@ import mage.constants.SetType;
/**
* https://scryfall.com/sets/slc
*/
-public class SecretLair30thAnniversaryCountdownKit extends ExpansionSet {
+public class SecretLairCountdown extends ExpansionSet {
- private static final SecretLair30thAnniversaryCountdownKit instance = new SecretLair30thAnniversaryCountdownKit();
+ private static final SecretLairCountdown instance = new SecretLairCountdown();
- public static SecretLair30thAnniversaryCountdownKit getInstance() {
+ public static SecretLairCountdown getInstance() {
return instance;
}
- private SecretLair30thAnniversaryCountdownKit() {
- super("Secret Lair 30th Anniversary Countdown Kit", "SLC", ExpansionSet.buildDate(2022, 11, 1), SetType.PROMOTIONAL);
+ private SecretLairCountdown() {
+ super("Secret Lair Countdown", "SLC", ExpansionSet.buildDate(2022, 11, 1), SetType.PROMOTIONAL);
this.hasBasicLands = false;
cards.add(new SetCardInfo("Arclight Phoenix", 2018, Rarity.MYTHIC, mage.cards.a.ArclightPhoenix.class));
diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java
index 55b6a53c79d..9c46db38472 100644
--- a/Mage.Sets/src/mage/sets/SecretLairDrop.java
+++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java
@@ -25,6 +25,12 @@ public class SecretLairDrop extends ExpansionSet {
// so it must be split to two different cards (one card for one side, another card for another side),
// also must add second side to directDownloadLinks in scryfall
+ // workaround to fix compilation error: java: code too large
+ addPart1(); // 1-1000
+ addPart2(); // 1001+
+ }
+
+ private void addPart1() {
cards.add(new SetCardInfo("Counterspell", "99999SCTLR", Rarity.RARE, mage.cards.c.Counterspell.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Viscera Seer", "99999VS", Rarity.COMMON, mage.cards.v.VisceraSeer.class)); // workaround until "VS" supported as card number
cards.add(new SetCardInfo("Snow-Covered Plains", 1, Rarity.LAND, mage.cards.s.SnowCoveredPlains.class, NON_FULL_USE_VARIOUS));
@@ -35,7 +41,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Bloodghast", 6, Rarity.RARE, mage.cards.b.Bloodghast.class));
cards.add(new SetCardInfo("Golgari Thug", 7, Rarity.RARE, mage.cards.g.GolgariThug.class));
cards.add(new SetCardInfo("Life from the Loam", 8, Rarity.RARE, mage.cards.l.LifeFromTheLoam.class));
- cards.add(new SetCardInfo("Reaper King", 9, Rarity.MYTHIC, mage.cards.r.ReaperKing.class));
+ cards.add(new SetCardInfo("Reaper King", 9, Rarity.MYTHIC, mage.cards.r.ReaperKing.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Sliver Overlord", 10, Rarity.MYTHIC, mage.cards.s.SliverOverlord.class));
cards.add(new SetCardInfo("The Ur-Dragon", 11, Rarity.MYTHIC, mage.cards.t.TheUrDragon.class));
cards.add(new SetCardInfo("Bitterblossom", 12, Rarity.MYTHIC, mage.cards.b.Bitterblossom.class, NON_FULL_USE_VARIOUS));
@@ -90,7 +96,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Forest", 67, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Heliod, God of the Sun", 68, Rarity.MYTHIC, mage.cards.h.HeliodGodOfTheSun.class));
cards.add(new SetCardInfo("Karametra, God of Harvests", 69, Rarity.MYTHIC, mage.cards.k.KarametraGodOfHarvests.class));
- cards.add(new SetCardInfo("Iroas, God of Victory", 70, Rarity.MYTHIC, mage.cards.i.IroasGodOfVictory.class));
+ cards.add(new SetCardInfo("Iroas, God of Victory", 70, Rarity.MYTHIC, mage.cards.i.IroasGodOfVictory.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Thassa, God of the Sea", 71, Rarity.MYTHIC, mage.cards.t.ThassaGodOfTheSea.class));
cards.add(new SetCardInfo("Ephara, God of the Polis", 72, Rarity.MYTHIC, mage.cards.e.EpharaGodOfThePolis.class));
cards.add(new SetCardInfo("Kruphix, God of Horizons", 73, Rarity.MYTHIC, mage.cards.k.KruphixGodOfHorizons.class));
@@ -134,14 +140,14 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Opt", 111, Rarity.RARE, mage.cards.o.Opt.class));
cards.add(new SetCardInfo("Fatal Push", 112, Rarity.RARE, mage.cards.f.FatalPush.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Anger of the Gods", 113, Rarity.RARE, mage.cards.a.AngerOfTheGods.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Explore", 114, Rarity.RARE, mage.cards.e.Explore.class));
- cards.add(new SetCardInfo("Glen Elendra Archmage", 115, Rarity.RARE, mage.cards.g.GlenElendraArchmage.class));
+ cards.add(new SetCardInfo("Explore", 114, Rarity.RARE, mage.cards.e.Explore.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Glen Elendra Archmage", 115, Rarity.RARE, mage.cards.g.GlenElendraArchmage.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mistbind Clique", 116, Rarity.RARE, mage.cards.m.MistbindClique.class));
cards.add(new SetCardInfo("Spellstutter Sprite", 117, Rarity.RARE, mage.cards.s.SpellstutterSprite.class));
cards.add(new SetCardInfo("Vendilion Clique", 118, Rarity.MYTHIC, mage.cards.v.VendilionClique.class));
cards.add(new SetCardInfo("Swamp", 119, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Sower of Temptation", 120, Rarity.RARE, mage.cards.s.SowerOfTemptation.class));
- cards.add(new SetCardInfo("Damnation", 121, Rarity.RARE, mage.cards.d.Damnation.class));
+ cards.add(new SetCardInfo("Damnation", 121, Rarity.RARE, mage.cards.d.Damnation.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Enchanted Evening", 122, Rarity.RARE, mage.cards.e.EnchantedEvening.class));
cards.add(new SetCardInfo("Hallowed Fountain", 123, Rarity.RARE, mage.cards.h.HallowedFountain.class));
cards.add(new SetCardInfo("Watery Grave", 124, Rarity.RARE, mage.cards.w.WateryGrave.class));
@@ -209,7 +215,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Squirrel Wrangler", 198, Rarity.RARE, mage.cards.s.SquirrelWrangler.class));
cards.add(new SetCardInfo("Swarmyard", 199, Rarity.RARE, mage.cards.s.Swarmyard.class));
cards.add(new SetCardInfo("Arcane Signet", 201, Rarity.RARE, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Chromatic Lantern", 202, Rarity.RARE, mage.cards.c.ChromaticLantern.class));
+ cards.add(new SetCardInfo("Chromatic Lantern", 202, Rarity.RARE, mage.cards.c.ChromaticLantern.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Commander's Sphere", 203, Rarity.RARE, mage.cards.c.CommandersSphere.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Darksteel Ingot", 204, Rarity.RARE, mage.cards.d.DarksteelIngot.class));
cards.add(new SetCardInfo("Gilded Lotus", 205, Rarity.RARE, mage.cards.g.GildedLotus.class, NON_FULL_USE_VARIOUS));
@@ -221,7 +227,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Sheoldred, Whispering One", 211, Rarity.MYTHIC, mage.cards.s.SheoldredWhisperingOne.class));
cards.add(new SetCardInfo("Urabrask the Hidden", 212, Rarity.MYTHIC, mage.cards.u.UrabraskTheHidden.class));
cards.add(new SetCardInfo("Vorinclex, Voice of Hunger", 213, Rarity.MYTHIC, mage.cards.v.VorinclexVoiceOfHunger.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Heliod, Sun-Crowned", 214, Rarity.MYTHIC, mage.cards.h.HeliodSunCrowned.class));
+ cards.add(new SetCardInfo("Heliod, Sun-Crowned", 214, Rarity.MYTHIC, mage.cards.h.HeliodSunCrowned.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Goblin Rabblemaster", 215, Rarity.RARE, mage.cards.g.GoblinRabblemaster.class));
cards.add(new SetCardInfo("Monastery Swiftspear", 216, Rarity.RARE, mage.cards.m.MonasterySwiftspear.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Boros Charm", 217, Rarity.RARE, mage.cards.b.BorosCharm.class, NON_FULL_USE_VARIOUS));
@@ -229,7 +235,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Frost Titan", 220, Rarity.MYTHIC, mage.cards.f.FrostTitan.class));
cards.add(new SetCardInfo("Primeval Titan", 221, Rarity.MYTHIC, mage.cards.p.PrimevalTitan.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Uro, Titan of Nature's Wrath", 222, Rarity.MYTHIC, mage.cards.u.UroTitanOfNaturesWrath.class));
- cards.add(new SetCardInfo("Grave Titan", 223, Rarity.MYTHIC, mage.cards.g.GraveTitan.class));
+ cards.add(new SetCardInfo("Grave Titan", 223, Rarity.MYTHIC, mage.cards.g.GraveTitan.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Inferno Titan", 224, Rarity.MYTHIC, mage.cards.i.InfernoTitan.class));
cards.add(new SetCardInfo("Kroxa, Titan of Death's Hunger", 225, Rarity.MYTHIC, mage.cards.k.KroxaTitanOfDeathsHunger.class));
cards.add(new SetCardInfo("Path to Exile", 226, Rarity.RARE, mage.cards.p.PathToExile.class, NON_FULL_USE_VARIOUS));
@@ -712,7 +718,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Tireless Tracker", 711, Rarity.RARE, mage.cards.t.TirelessTracker.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Swords to Plowshares", 713, Rarity.RARE, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 714, Rarity.RARE, mage.cards.m.MerfolkOfThePearlTrident.class));
- cards.add(new SetCardInfo("Lord of the Pit", 715, Rarity.RARE, mage.cards.l.LordOfThePit.class));
+ cards.add(new SetCardInfo("Lord of the Pit", 715, Rarity.RARE, mage.cards.l.LordOfThePit.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Shivan Dragon", 716, Rarity.RARE, mage.cards.s.ShivanDragon.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Giant Growth", 717, Rarity.RARE, mage.cards.g.GiantGrowth.class));
cards.add(new SetCardInfo("Maro", 718, Rarity.RARE, mage.cards.m.Maro.class, NON_FULL_USE_VARIOUS));
@@ -792,7 +798,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Command Tower", 792, Rarity.RARE, mage.cards.c.CommandTower.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Nine Lives", 793, Rarity.RARE, mage.cards.n.NineLives.class));
cards.add(new SetCardInfo("Yoshimaru, Ever Faithful", 794, Rarity.MYTHIC, mage.cards.y.YoshimaruEverFaithful.class));
- cards.add(new SetCardInfo("Wastes", "795*", Rarity.RARE, mage.cards.w.Wastes.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Wastes", "795*", Rarity.RARE, mage.cards.w.Wastes.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Mana Vault", "796*", Rarity.MYTHIC, mage.cards.m.ManaVault.class));
cards.add(new SetCardInfo("Seraph Sanctuary", 797, Rarity.RARE, mage.cards.s.SeraphSanctuary.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Coveted Jewel", 799, Rarity.RARE, mage.cards.c.CovetedJewel.class));
@@ -813,6 +819,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Seven Dwarves", 815, Rarity.RARE, mage.cards.s.SevenDwarves.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Seven Dwarves", 816, Rarity.RARE, mage.cards.s.SevenDwarves.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Seven Dwarves", 817, Rarity.RARE, mage.cards.s.SevenDwarves.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Seven Dwarves", 818, Rarity.RARE, mage.cards.s.SevenDwarves.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Arcane Signet", 820, Rarity.RARE, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Arcane Signet", "820*", Rarity.RARE, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Echo of Eons", 821, Rarity.RARE, mage.cards.e.EchoOfEons.class, RETRO_ART));
@@ -852,7 +859,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Havengul Lich", 859, Rarity.MYTHIC, mage.cards.h.HavengulLich.class, RETRO_ART));
cards.add(new SetCardInfo("Nekusar, the Mindrazer", 860, Rarity.MYTHIC, mage.cards.n.NekusarTheMindrazer.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Varina, Lich Queen", 861, Rarity.MYTHIC, mage.cards.v.VarinaLichQueen.class, RETRO_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Wilhelt, the Rotcleaver", 862, Rarity.MYTHIC, mage.cards.w.WilheltTheRotcleaver.class, RETRO_ART));
+ cards.add(new SetCardInfo("Wilhelt, the Rotcleaver", 862, Rarity.MYTHIC, mage.cards.w.WilheltTheRotcleaver.class, RETRO_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Masterwork of Ingenuity", 863, Rarity.RARE, mage.cards.m.MasterworkOfIngenuity.class));
cards.add(new SetCardInfo("Sculpting Steel", 864, Rarity.RARE, mage.cards.s.SculptingSteel.class));
cards.add(new SetCardInfo("Unnatural Growth", 865, Rarity.RARE, mage.cards.u.UnnaturalGrowth.class));
@@ -877,6 +884,11 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Young Wolf", 885, Rarity.RARE, mage.cards.y.YoungWolf.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Solve the Equation", 886, Rarity.RARE, mage.cards.s.SolveTheEquation.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Enduring Ideal", 887, Rarity.RARE, mage.cards.e.EnduringIdeal.class));
+ cards.add(new SetCardInfo("Plains", 888, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Island", 889, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Swamp", 890, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Mountain", 891, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Forest", 892, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Changeling Outcast", 894, Rarity.RARE, mage.cards.c.ChangelingOutcast.class));
cards.add(new SetCardInfo("Helpful Hunter", 895, Rarity.RARE, mage.cards.h.HelpfulHunter.class));
cards.add(new SetCardInfo("Spirited Companion", 896, Rarity.RARE, mage.cards.s.SpiritedCompanion.class));
@@ -890,6 +902,9 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Arcane Signet", 908, Rarity.RARE, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Gilded Lotus", 909, Rarity.RARE, mage.cards.g.GildedLotus.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Sol Ring", 910, Rarity.RARE, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS));
+ }
+
+ private void addPart2() {
cards.add(new SetCardInfo("Elspeth, Knight-Errant", 1001, Rarity.MYTHIC, mage.cards.e.ElspethKnightErrant.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Patron Wizard", 1002, Rarity.RARE, mage.cards.p.PatronWizard.class));
cards.add(new SetCardInfo("Berserk", 1003, Rarity.MYTHIC, mage.cards.b.Berserk.class, NON_FULL_USE_VARIOUS));
@@ -1026,7 +1041,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Mountain", 1133, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Forest", 1134, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Abundant Growth", 1135, Rarity.RARE, mage.cards.a.AbundantGrowth.class, FULL_ART_USE_VARIOUS));
- cards.add(new SetCardInfo("Mycoloth", 1136, Rarity.RARE, mage.cards.m.Mycoloth.class, FULL_ART));
+ cards.add(new SetCardInfo("Mycoloth", 1136, Rarity.RARE, mage.cards.m.Mycoloth.class, FULL_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Ghave, Guru of Spores", 1137, Rarity.MYTHIC, mage.cards.g.GhaveGuruOfSpores.class, FULL_ART));
cards.add(new SetCardInfo("Slimefoot, the Stowaway", 1138, Rarity.RARE, mage.cards.s.SlimefootTheStowaway.class, FULL_ART));
cards.add(new SetCardInfo("Elspeth, Sun's Champion", 1140, Rarity.MYTHIC, mage.cards.e.ElspethSunsChampion.class));
@@ -1063,7 +1078,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Kess, Dissident Mage", 1167, Rarity.MYTHIC, mage.cards.k.KessDissidentMage.class));
cards.add(new SetCardInfo("Field Marshal", 1168, Rarity.RARE, mage.cards.f.FieldMarshal.class));
cards.add(new SetCardInfo("Temporal Manipulation", 1169, Rarity.MYTHIC, mage.cards.t.TemporalManipulation.class));
- cards.add(new SetCardInfo("Dark Ritual", 1170, Rarity.RARE, mage.cards.d.DarkRitual.class));
+ cards.add(new SetCardInfo("Dark Ritual", 1170, Rarity.RARE, mage.cards.d.DarkRitual.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Midnight Reaper", 1171, Rarity.RARE, mage.cards.m.MidnightReaper.class));
cards.add(new SetCardInfo("Seize the Day", 1172, Rarity.RARE, mage.cards.s.SeizeTheDay.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Faeburrow Elder", 1173, Rarity.RARE, mage.cards.f.FaeburrowElder.class));
@@ -1344,7 +1359,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Venser, the Sojourner", 1423, Rarity.MYTHIC, mage.cards.v.VenserTheSojourner.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Venser, the Sojourner", "1423*", Rarity.MYTHIC, mage.cards.v.VenserTheSojourner.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Oppression", 1424, Rarity.RARE, mage.cards.o.Oppression.class));
- cards.add(new SetCardInfo("Abrade", 1425, Rarity.RARE, mage.cards.a.Abrade.class));
+ cards.add(new SetCardInfo("Abrade", 1425, Rarity.RARE, mage.cards.a.Abrade.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mass Hysteria", 1426, Rarity.RARE, mage.cards.m.MassHysteria.class));
cards.add(new SetCardInfo("Terminate", 1427, Rarity.RARE, mage.cards.t.Terminate.class));
cards.add(new SetCardInfo("Thalia, Heretic Cathar", 1428, Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class));
@@ -1519,7 +1534,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Simian Spirit Guide", "1548*", Rarity.RARE, mage.cards.s.SimianSpiritGuide.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Prince of Thralls", 1549, Rarity.MYTHIC, mage.cards.p.PrinceOfThralls.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Prince of Thralls", "1549*", Rarity.MYTHIC, mage.cards.p.PrinceOfThralls.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Sun Titan", 1550, Rarity.RARE, mage.cards.s.SunTitan.class));
+ cards.add(new SetCardInfo("Sun Titan", 1550, Rarity.MYTHIC, mage.cards.s.SunTitan.class));
cards.add(new SetCardInfo("Breeches, Eager Pillager", 1551, Rarity.RARE, mage.cards.b.BreechesEagerPillager.class));
cards.add(new SetCardInfo("Deflecting Swat", 1552, Rarity.RARE, mage.cards.d.DeflectingSwat.class));
cards.add(new SetCardInfo("Llanowar Elves", 1553, Rarity.RARE, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS));
@@ -1685,7 +1700,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Dismember", 1674, Rarity.RARE, mage.cards.d.Dismember.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Birds of Paradise", 1675, Rarity.RARE, mage.cards.b.BirdsOfParadise.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Birds of Paradise", "1675b", Rarity.RARE, mage.cards.b.BirdsOfParadise.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Three Visits", 1676, Rarity.RARE, mage.cards.t.ThreeVisits.class));
+ cards.add(new SetCardInfo("Three Visits", 1676, Rarity.RARE, mage.cards.t.ThreeVisits.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Door to Nothingness", 1678, Rarity.RARE, mage.cards.d.DoorToNothingness.class));
cards.add(new SetCardInfo("Ashnod's Altar", 1679, Rarity.RARE, mage.cards.a.AshnodsAltar.class));
cards.add(new SetCardInfo("Dark Depths", 1680, Rarity.MYTHIC, mage.cards.d.DarkDepths.class));
@@ -1720,7 +1735,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Elves of Deep Shadow", 1710, Rarity.RARE, mage.cards.e.ElvesOfDeepShadow.class));
cards.add(new SetCardInfo("Good-Fortune Unicorn", 1711, Rarity.RARE, mage.cards.g.GoodFortuneUnicorn.class));
cards.add(new SetCardInfo("Coat of Arms", 1712, Rarity.RARE, mage.cards.c.CoatOfArms.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Dictate of Erebos", 1713, Rarity.RARE, mage.cards.d.DictateOfErebos.class));
+ cards.add(new SetCardInfo("Dictate of Erebos", 1713, Rarity.RARE, mage.cards.d.DictateOfErebos.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Fecundity", 1714, Rarity.RARE, mage.cards.f.Fecundity.class));
cards.add(new SetCardInfo("Mayhem Devil", 1715, Rarity.RARE, mage.cards.m.MayhemDevil.class));
cards.add(new SetCardInfo("Moldervine Reclamation", 1716, Rarity.RARE, mage.cards.m.MoldervineReclamation.class));
@@ -1728,7 +1743,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Back to Basics", 1718, Rarity.RARE, mage.cards.b.BackToBasics.class));
cards.add(new SetCardInfo("Preordain", 1719, Rarity.RARE, mage.cards.p.Preordain.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Sphinx of the Second Sun", 1720, Rarity.MYTHIC, mage.cards.s.SphinxOfTheSecondSun.class));
- cards.add(new SetCardInfo("Teferi's Ageless Insight", 1721, Rarity.RARE, mage.cards.t.TeferisAgelessInsight.class));
+ cards.add(new SetCardInfo("Teferi's Ageless Insight", 1721, Rarity.RARE, mage.cards.t.TeferisAgelessInsight.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Witch of the Moors", 1722, Rarity.RARE, mage.cards.w.WitchOfTheMoors.class));
cards.add(new SetCardInfo("Bear Umbra", 1723, Rarity.RARE, mage.cards.b.BearUmbra.class));
cards.add(new SetCardInfo("Realmwalker", 1724, Rarity.RARE, mage.cards.r.Realmwalker.class));
@@ -1779,7 +1794,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Unlicensed Hearse", 1772, Rarity.RARE, mage.cards.u.UnlicensedHearse.class));
cards.add(new SetCardInfo("The Mimeoplasm", 1773, Rarity.RARE, mage.cards.t.TheMimeoplasm.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Trickbind", 1774, Rarity.RARE, mage.cards.t.Trickbind.class));
- cards.add(new SetCardInfo("Windfall", 1775, Rarity.RARE, mage.cards.w.Windfall.class));
+ cards.add(new SetCardInfo("Windfall", 1775, Rarity.RARE, mage.cards.w.Windfall.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Incarnation Technique", 1776, Rarity.RARE, mage.cards.i.IncarnationTechnique.class));
cards.add(new SetCardInfo("Pernicious Deed", 1777, Rarity.RARE, mage.cards.p.PerniciousDeed.class));
cards.add(new SetCardInfo("Fell the Mighty", 1778, Rarity.RARE, mage.cards.f.FellTheMighty.class));
@@ -1847,12 +1862,16 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Liliana's Contract", 1844, Rarity.RARE, mage.cards.l.LilianasContract.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Shiny Impetus", 1845, Rarity.UNCOMMON, mage.cards.s.ShinyImpetus.class));
cards.add(new SetCardInfo("Fertile Ground", 1846, Rarity.COMMON, mage.cards.f.FertileGround.class));
- cards.add(new SetCardInfo("Lignify", 1847, Rarity.COMMON, mage.cards.l.Lignify.class));
+ cards.add(new SetCardInfo("Lignify", 1847, Rarity.COMMON, mage.cards.l.Lignify.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mayael's Aria", 1848, Rarity.RARE, mage.cards.m.MayaelsAria.class));
cards.add(new SetCardInfo("Trace of Abundance", 1849, Rarity.COMMON, mage.cards.t.TraceOfAbundance.class));
cards.add(new SetCardInfo("Crib Swap", 1850, Rarity.UNCOMMON, mage.cards.c.CribSwap.class));
cards.add(new SetCardInfo("Homeward Path", 1851, Rarity.RARE, mage.cards.h.HomewardPath.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Go-Shintai of Life's Origin", 1853, Rarity.MYTHIC, mage.cards.g.GoShintaiOfLifesOrigin.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Armageddon", 1854, Rarity.MYTHIC, mage.cards.a.Armageddon.class));
+ cards.add(new SetCardInfo("Northern Paladin", 1855, Rarity.RARE, mage.cards.n.NorthernPaladin.class));
+ cards.add(new SetCardInfo("Demonic Tutor", 1856, Rarity.MYTHIC, mage.cards.d.DemonicTutor.class));
+ cards.add(new SetCardInfo("Lord of the Pit", 1857, Rarity.RARE, mage.cards.l.LordOfThePit.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Day of Judgment", 1858, Rarity.RARE, mage.cards.d.DayOfJudgment.class));
cards.add(new SetCardInfo("Temporal Extortion", 1859, Rarity.RARE, mage.cards.t.TemporalExtortion.class));
cards.add(new SetCardInfo("Toxic Deluge", 1860, Rarity.RARE, mage.cards.t.ToxicDeluge.class));
@@ -1937,6 +1956,16 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Mountain", 1942, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Forest", 1943, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Morophon, the Boundless", 1944, Rarity.MYTHIC, mage.cards.m.MorophonTheBoundless.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Plains", 1945, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Island", 1946, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Swamp", 1947, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Mountain", 1948, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Forest", 1949, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Plains", 1950, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Island", 1951, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Swamp", 1952, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Mountain", 1953, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Forest", 1954, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Big Score", 1955, Rarity.RARE, mage.cards.b.BigScore.class));
cards.add(new SetCardInfo("Final Fortune", 1956, Rarity.RARE, mage.cards.f.FinalFortune.class));
cards.add(new SetCardInfo("Heat Shimmer", 1957, Rarity.RARE, mage.cards.h.HeatShimmer.class));
@@ -1971,11 +2000,26 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Zulaport Cutthroat", 1982, Rarity.RARE, mage.cards.z.ZulaportCutthroat.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Aggravated Assault", 1983, Rarity.RARE, mage.cards.a.AggravatedAssault.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Desperate Ritual", 1984, Rarity.RARE, mage.cards.d.DesperateRitual.class));
+ cards.add(new SetCardInfo("Deadly Dispute", 1985, Rarity.RARE, mage.cards.d.DeadlyDispute.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Go for the Throat", 1986, Rarity.RARE, mage.cards.g.GoForTheThroat.class));
+ cards.add(new SetCardInfo("Lightning Greaves", 1987, Rarity.RARE, mage.cards.l.LightningGreaves.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sol Ring", 1988, Rarity.RARE, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Command Tower", 1989, Rarity.RARE, mage.cards.c.CommandTower.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Ephemerate", 1990, Rarity.RARE, mage.cards.e.Ephemerate.class));
+ cards.add(new SetCardInfo("Three Visits", 1991, Rarity.RARE, mage.cards.t.ThreeVisits.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Lightning Greaves", 1992, Rarity.RARE, mage.cards.l.LightningGreaves.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sol Ring", 1993, Rarity.RARE, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Command Tower", 1994, Rarity.RARE, mage.cards.c.CommandTower.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Fact or Fiction", 1995, Rarity.RARE, mage.cards.f.FactOrFiction.class, FULL_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Frantic Search", 1996, Rarity.RARE, mage.cards.f.FranticSearch.class, FULL_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Scheming Symmetry", 1997, Rarity.RARE, mage.cards.s.SchemingSymmetry.class, FULL_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Blasphemous Act", 1998, Rarity.RARE, mage.cards.b.BlasphemousAct.class, FULL_ART_USE_VARIOUS));
cards.add(new SetCardInfo("Impact Tremors", 1999, Rarity.RARE, mage.cards.i.ImpactTremors.class, FULL_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Damnation", 2000, Rarity.RARE, mage.cards.d.Damnation.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Dark Ritual", 2001, Rarity.RARE, mage.cards.d.DarkRitual.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Peer into the Abyss", 2002, Rarity.RARE, mage.cards.p.PeerIntoTheAbyss.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Surgical Extraction", 2003, Rarity.RARE, mage.cards.s.SurgicalExtraction.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Tendrils of Agony", 2004, Rarity.RARE, mage.cards.t.TendrilsOfAgony.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Agent of Treachery", 2005, Rarity.RARE, mage.cards.a.AgentOfTreachery.class));
cards.add(new SetCardInfo("Priest of Forgotten Gods", 2006, Rarity.RARE, mage.cards.p.PriestOfForgottenGods.class));
cards.add(new SetCardInfo("Treasonous Ogre", 2007, Rarity.RARE, mage.cards.t.TreasonousOgre.class));
@@ -1986,6 +2030,11 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Harrow", 2016, Rarity.RARE, mage.cards.h.Harrow.class));
cards.add(new SetCardInfo("World Shaper", 2017, Rarity.RARE, mage.cards.w.WorldShaper.class));
cards.add(new SetCardInfo("Horn of Greed", 2018, Rarity.RARE, mage.cards.h.HornOfGreed.class));
+ cards.add(new SetCardInfo("Damnation", 2019, Rarity.RARE, mage.cards.d.Damnation.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Dark Ritual", 2020, Rarity.RARE, mage.cards.d.DarkRitual.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Peer into the Abyss", 2021, Rarity.RARE, mage.cards.p.PeerIntoTheAbyss.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Surgical Extraction", 2022, Rarity.RARE, mage.cards.s.SurgicalExtraction.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Tendrils of Agony", 2023, Rarity.RARE, mage.cards.t.TendrilsOfAgony.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Goblin Bombardment", 2024, Rarity.RARE, mage.cards.g.GoblinBombardment.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Orcish Lumberjack", 2025, Rarity.RARE, mage.cards.o.OrcishLumberjack.class));
cards.add(new SetCardInfo("Constant Mists", 2026, Rarity.RARE, mage.cards.c.ConstantMists.class));
@@ -2060,10 +2109,113 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Sylvan Safekeeper", 2109, Rarity.RARE, mage.cards.s.SylvanSafekeeper.class));
cards.add(new SetCardInfo("Crucible of Worlds", 2110, Rarity.MYTHIC, mage.cards.c.CrucibleOfWorlds.class));
cards.add(new SetCardInfo("Zuran Orb", 2111, Rarity.RARE, mage.cards.z.ZuranOrb.class));
+ cards.add(new SetCardInfo("Dandan", 2138, Rarity.RARE, mage.cards.d.Dandan.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Dandan", 2139, Rarity.RARE, mage.cards.d.Dandan.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Accumulated Knowledge", 2140, Rarity.RARE, mage.cards.a.AccumulatedKnowledge.class));
+ cards.add(new SetCardInfo("Memory Lapse", 2142, Rarity.RARE, mage.cards.m.MemoryLapse.class));
+ cards.add(new SetCardInfo("Mystic Sanctuary", 2143, Rarity.RARE, mage.cards.m.MysticSanctuary.class));
+ cards.add(new SetCardInfo("Island", 2144, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Island", 2145, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Island", 2146, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Island", 2147, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
+ cards.add(new SetCardInfo("Brainstorm", 2148, Rarity.COMMON, mage.cards.b.Brainstorm.class, RETRO_ART_USE_VARIOUS));
+ cards.add(new SetCardInfo("Capture of Jingzhou", 2149, Rarity.MYTHIC, mage.cards.c.CaptureOfJingzhou.class, RETRO_ART));
+ cards.add(new SetCardInfo("Chart a Course", 2150, Rarity.UNCOMMON, mage.cards.c.ChartACourse.class, RETRO_ART));
+ cards.add(new SetCardInfo("Control Magic", 2151, Rarity.UNCOMMON, mage.cards.c.ControlMagic.class, RETRO_ART));
+ cards.add(new SetCardInfo("Day's Undoing", 2153, Rarity.RARE, mage.cards.d.DaysUndoing.class, RETRO_ART));
+ cards.add(new SetCardInfo("Mental Note", 2154, Rarity.COMMON, mage.cards.m.MentalNote.class, RETRO_ART));
+ cards.add(new SetCardInfo("Metamorphose", 2155, Rarity.UNCOMMON, mage.cards.m.Metamorphose.class, RETRO_ART));
+ cards.add(new SetCardInfo("Predict", 2156, Rarity.UNCOMMON, mage.cards.p.Predict.class, RETRO_ART));
+ cards.add(new SetCardInfo("Telling Time", 2157, Rarity.UNCOMMON, mage.cards.t.TellingTime.class, RETRO_ART));
+ cards.add(new SetCardInfo("Unsubstantiate", 2158, Rarity.UNCOMMON, mage.cards.u.Unsubstantiate.class, RETRO_ART));
+ cards.add(new SetCardInfo("Halimar Depths", 2159, Rarity.COMMON, mage.cards.h.HalimarDepths.class, RETRO_ART));
+ cards.add(new SetCardInfo("Haunted Fengraf", 2160, Rarity.COMMON, mage.cards.h.HauntedFengraf.class, RETRO_ART));
+ cards.add(new SetCardInfo("Lonely Sandbar", 2161, Rarity.COMMON, mage.cards.l.LonelySandbar.class, RETRO_ART));
+ cards.add(new SetCardInfo("Remote Isle", 2162, Rarity.COMMON, mage.cards.r.RemoteIsle.class, RETRO_ART));
+ cards.add(new SetCardInfo("The Surgical Bay", 2163, Rarity.COMMON, mage.cards.t.TheSurgicalBay.class, RETRO_ART));
+ cards.add(new SetCardInfo("Svyelunite Temple", 2164, Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class, RETRO_ART));
+ cards.add(new SetCardInfo("Heliod, Sun-Crowned", 2165, Rarity.MYTHIC, mage.cards.h.HeliodSunCrowned.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Steelshaper's Gift", 2166, Rarity.RARE, mage.cards.s.SteelshapersGift.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Swords to Plowshares", 2167, Rarity.RARE, mage.cards.s.SwordsToPlowshares.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Baral, Chief of Compliance", 2168, Rarity.RARE, mage.cards.b.BaralChiefOfCompliance.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Garruk Relentless", 2169, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class));
+ cards.add(new SetCardInfo("Garruk, the Veil-Cursed", 2169, Rarity.MYTHIC, mage.cards.g.GarrukTheVeilCursed.class));
+ cards.add(new SetCardInfo("Reaper King", 2170, Rarity.RARE, mage.cards.r.ReaperKing.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Glen Elendra Archmage", 2171, Rarity.RARE, mage.cards.g.GlenElendraArchmage.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Guardian Project", 2172, Rarity.MYTHIC, mage.cards.g.GuardianProject.class));
+ cards.add(new SetCardInfo("Roon of the Hidden Realm", 2173, Rarity.RARE, mage.cards.r.RoonOfTheHiddenRealm.class));
+ cards.add(new SetCardInfo("Soulherder", 2174, Rarity.RARE, mage.cards.s.Soulherder.class));
+ cards.add(new SetCardInfo("Jaws, Relentless Predator", 2175, Rarity.MYTHIC, mage.cards.j.JawsRelentlessPredator.class));
+ cards.add(new SetCardInfo("Descent into Avernus", 2176, Rarity.RARE, mage.cards.d.DescentIntoAvernus.class));
+ cards.add(new SetCardInfo("Reckless Endeavor", 2177, Rarity.RARE, mage.cards.r.RecklessEndeavor.class));
+ cards.add(new SetCardInfo("Sneak Attack", 2178, Rarity.MYTHIC, mage.cards.s.SneakAttack.class));
+ cards.add(new SetCardInfo("Abrade", 2179, Rarity.RARE, mage.cards.a.Abrade.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Bruvac the Grandiloquent", 2181, Rarity.MYTHIC, mage.cards.b.BruvacTheGrandiloquent.class));
+ cards.add(new SetCardInfo("Windfall", 2182, Rarity.RARE, mage.cards.w.Windfall.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Captain N'ghathrod", 2183, Rarity.MYTHIC, mage.cards.c.CaptainNghathrod.class));
+ cards.add(new SetCardInfo("Nekusar, the Mindrazer", 2184, Rarity.RARE, mage.cards.n.NekusarTheMindrazer.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Iron Maiden", 2185, Rarity.RARE, mage.cards.i.IronMaiden.class));
+ cards.add(new SetCardInfo("Mindcrank", 2186, Rarity.RARE, mage.cards.m.Mindcrank.class));
+ cards.add(new SetCardInfo("Lethal Scheme", 2187, Rarity.RARE, mage.cards.l.LethalScheme.class));
+ cards.add(new SetCardInfo("Grave Titan", 2188, Rarity.MYTHIC, mage.cards.g.GraveTitan.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Animate Dead", 2189, Rarity.RARE, mage.cards.a.AnimateDead.class));
+ cards.add(new SetCardInfo("Temporal Trespass", 2190, Rarity.MYTHIC, mage.cards.t.TemporalTrespass.class));
+ cards.add(new SetCardInfo("Unearth", 2191, Rarity.RARE, mage.cards.u.Unearth.class));
+ cards.add(new SetCardInfo("Lignify", 2192, Rarity.RARE, mage.cards.l.Lignify.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Greensleeves, Maro-Sorcerer", 2193, Rarity.MYTHIC, mage.cards.g.GreensleevesMaroSorcerer.class));
cards.add(new SetCardInfo("Polyraptor", 2194, Rarity.MYTHIC, mage.cards.p.Polyraptor.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Academy Manufactor", 2195, Rarity.RARE, mage.cards.a.AcademyManufactor.class));
cards.add(new SetCardInfo("Wurmcoil Engine", 2196, Rarity.MYTHIC, mage.cards.w.WurmcoilEngine.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Ellie, Brick Master", 2197, Rarity.MYTHIC, mage.cards.e.EllieBrickMaster.class));
+ cards.add(new SetCardInfo("Joel, Resolute Survivor", 2198, Rarity.MYTHIC, mage.cards.j.JoelResoluteSurvivor.class));
+ cards.add(new SetCardInfo("Cabal Ritual", 2199, Rarity.RARE, mage.cards.c.CabalRitual.class));
+ cards.add(new SetCardInfo("Haunted One", 2200, Rarity.MYTHIC, mage.cards.h.HauntedOne.class));
+ cards.add(new SetCardInfo("Abby, Merciless Soldier", 2202, Rarity.MYTHIC, mage.cards.a.AbbyMercilessSoldier.class));
+ cards.add(new SetCardInfo("Ellie, Vengeful Hunter", 2203, Rarity.MYTHIC, mage.cards.e.EllieVengefulHunter.class));
+ cards.add(new SetCardInfo("Dictate of Erebos", 2204, Rarity.RARE, mage.cards.d.DictateOfErebos.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Mycoloth", 2205, Rarity.RARE, mage.cards.m.Mycoloth.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Kratos, God of War", 2207, Rarity.MYTHIC, mage.cards.k.KratosGodOfWar.class));
+ cards.add(new SetCardInfo("World at War", 2208, Rarity.RARE, mage.cards.w.WorldAtWar.class));
+ cards.add(new SetCardInfo("Rite of Flame", 2209, Rarity.RARE, mage.cards.r.RiteOfFlame.class));
+ cards.add(new SetCardInfo("Sulfuric Vortex", 2210, Rarity.RARE, mage.cards.s.SulfuricVortex.class));
+ cards.add(new SetCardInfo("Pyrohemia", 2211, Rarity.RARE, mage.cards.p.Pyrohemia.class));
+ cards.add(new SetCardInfo("Atreus, Impulsive Son", 2212, Rarity.MYTHIC, mage.cards.a.AtreusImpulsiveSon.class));
+ cards.add(new SetCardInfo("Teferi's Ageless Insight", 2214, Rarity.RARE, mage.cards.t.TeferisAgelessInsight.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Teferi's Ageless Insight", "2214b", Rarity.RARE, mage.cards.t.TeferisAgelessInsight.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Iroas, God of Victory", 2215, Rarity.MYTHIC, mage.cards.i.IroasGodOfVictory.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Midnight Clock", 2217, Rarity.RARE, mage.cards.m.MidnightClock.class));
+ cards.add(new SetCardInfo("Whip of Erebos", 2218, Rarity.RARE, mage.cards.w.WhipOfErebos.class));
+ cards.add(new SetCardInfo("Chain Reaction", 2219, Rarity.RARE, mage.cards.c.ChainReaction.class));
+ cards.add(new SetCardInfo("Passionate Archaeologist", 2220, Rarity.MYTHIC, mage.cards.p.PassionateArchaeologist.class));
+ cards.add(new SetCardInfo("Aloy, Savior of Meridian", 2221, Rarity.MYTHIC, mage.cards.a.AloySaviorOfMeridian.class));
+ cards.add(new SetCardInfo("Farseek", 2222, Rarity.RARE, mage.cards.f.Farseek.class));
+ cards.add(new SetCardInfo("Blightsteel Colossus", 2223, Rarity.MYTHIC, mage.cards.b.BlightsteelColossus.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Tarrian's Soulcleaver", 2224, Rarity.RARE, mage.cards.t.TarriansSoulcleaver.class));
+ cards.add(new SetCardInfo("Meteor Golem", 2225, Rarity.RARE, mage.cards.m.MeteorGolem.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Path to Exile", 2227, Rarity.RARE, mage.cards.p.PathToExile.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Borne Upon a Wind", 2228, Rarity.RARE, mage.cards.b.BorneUponAWind.class));
+ cards.add(new SetCardInfo("Ghostly Flicker", 2229, Rarity.RARE, mage.cards.g.GhostlyFlicker.class));
+ cards.add(new SetCardInfo("Eiganjo Castle", 2230, Rarity.RARE, mage.cards.e.EiganjoCastle.class));
+ cards.add(new SetCardInfo("Vito, Thorn of the Dusk Rose", 2282, Rarity.RARE, mage.cards.v.VitoThornOfTheDuskRose.class));
+ cards.add(new SetCardInfo("Satoru Umezawa", 2283, Rarity.RARE, mage.cards.s.SatoruUmezawa.class));
+ cards.add(new SetCardInfo("Voja, Jaws of the Conclave", 2284, Rarity.MYTHIC, mage.cards.v.VojaJawsOfTheConclave.class));
+ cards.add(new SetCardInfo("Wilhelt, the Rotcleaver", 2285, Rarity.MYTHIC, mage.cards.w.WilheltTheRotcleaver.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Liberator, Urza's Battlethopter", 2286, Rarity.RARE, mage.cards.l.LiberatorUrzasBattlethopter.class));
+ cards.add(new SetCardInfo("Distant Melody", 2311, Rarity.RARE, mage.cards.d.DistantMelody.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Explore", 2312, Rarity.RARE, mage.cards.e.Explore.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Inspiring Call", 2313, Rarity.RARE, mage.cards.i.InspiringCall.class));
+ cards.add(new SetCardInfo("Chromatic Lantern", 2314, Rarity.RARE, mage.cards.c.ChromaticLantern.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sol Ring", 2315, Rarity.RARE, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Sphere of Safety", 2316, Rarity.RARE, mage.cards.s.SphereOfSafety.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Miscast", 2317, Rarity.RARE, mage.cards.m.Miscast.class));
+ cards.add(new SetCardInfo("Phyrexian Arena", 2318, Rarity.RARE, mage.cards.p.PhyrexianArena.class));
+ cards.add(new SetCardInfo("Tormenting Voice", 2319, Rarity.RARE, mage.cards.t.TormentingVoice.class));
+ cards.add(new SetCardInfo("Tamiyo's Safekeeping", 2320, Rarity.RARE, mage.cards.t.TamiyosSafekeeping.class));
+ cards.add(new SetCardInfo("Hullbreaker Horror", 2321, Rarity.RARE, mage.cards.h.HullbreakerHorror.class));
+ cards.add(new SetCardInfo("Maddening Cacophony", 2322, Rarity.RARE, mage.cards.m.MaddeningCacophony.class));
+ cards.add(new SetCardInfo("Serum Visions", 2323, Rarity.RARE, mage.cards.s.SerumVisions.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Umbris, Fear Manifest", 2324, Rarity.MYTHIC, mage.cards.u.UmbrisFearManifest.class));
+ cards.add(new SetCardInfo("Spellskite", 2325, Rarity.RARE, mage.cards.s.Spellskite.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Feed the Swarm", 7001, Rarity.RARE, mage.cards.f.FeedTheSwarm.class));
cards.add(new SetCardInfo("Forge Anew", 7002, Rarity.RARE, mage.cards.f.ForgeAnew.class));
cards.add(new SetCardInfo("Silence", 7003, Rarity.RARE, mage.cards.s.Silence.class, NON_FULL_USE_VARIOUS));
@@ -2092,6 +2244,7 @@ public class SecretLairDrop extends ExpansionSet {
cards.add(new SetCardInfo("Lotus Petal", 7035, Rarity.MYTHIC, mage.cards.l.LotusPetal.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lotus Petal", 7036, Rarity.MYTHIC, mage.cards.l.LotusPetal.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lotus Petal", 7037, Rarity.MYTHIC, mage.cards.l.LotusPetal.class, NON_FULL_USE_VARIOUS));
+ cards.add(new SetCardInfo("Vision Charm", 7040, Rarity.RARE, mage.cards.v.VisionCharm.class));
cards.add(new SetCardInfo("Jace, the Mind Sculptor", 8001, Rarity.MYTHIC, mage.cards.j.JaceTheMindSculptor.class));
cards.add(new SetCardInfo("Doom Blade", 9990, Rarity.RARE, mage.cards.d.DoomBlade.class));
cards.add(new SetCardInfo("Massacre", 9991, Rarity.RARE, mage.cards.m.Massacre.class));
diff --git a/Mage.Sets/src/mage/sets/SecretLairShowdown.java b/Mage.Sets/src/mage/sets/SecretLairShowdown.java
index b951d3351fe..3f32c7ceb5b 100644
--- a/Mage.Sets/src/mage/sets/SecretLairShowdown.java
+++ b/Mage.Sets/src/mage/sets/SecretLairShowdown.java
@@ -30,15 +30,18 @@ public class SecretLairShowdown extends ExpansionSet {
cards.add(new SetCardInfo("Expressive Iteration", 13, Rarity.RARE, mage.cards.e.ExpressiveIteration.class));
cards.add(new SetCardInfo("Fatal Push", 3, Rarity.RARE, mage.cards.f.FatalPush.class));
cards.add(new SetCardInfo("Fauna Shaman", 41, Rarity.RARE, mage.cards.f.FaunaShaman.class));
+ cards.add(new SetCardInfo("Flowerfoot Swordmaster", 46, Rarity.RARE, mage.cards.f.FlowerfootSwordmaster.class));
cards.add(new SetCardInfo("Force of Despair", 29, Rarity.RARE, mage.cards.f.ForceOfDespair.class, FULL_ART));
cards.add(new SetCardInfo("Garruk Wildspeaker", 42, Rarity.MYTHIC, mage.cards.g.GarrukWildspeaker.class));
cards.add(new SetCardInfo("Goblin Guide", 23, Rarity.RARE, mage.cards.g.GoblinGuide.class));
+ cards.add(new SetCardInfo("Innkeeper's Talent", 45, Rarity.RARE, mage.cards.i.InnkeepersTalent.class, FULL_ART));
cards.add(new SetCardInfo("Island", 32, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Karn Liberated", 36, Rarity.MYTHIC, mage.cards.k.KarnLiberated.class));
cards.add(new SetCardInfo("Laughing Jasper Flint", 44, Rarity.RARE, mage.cards.l.LaughingJasperFlint.class));
cards.add(new SetCardInfo("Lightning Bolt", 21, Rarity.RARE, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Lightning Bolt", 37, Rarity.RARE, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Living End", 30, Rarity.MYTHIC, mage.cards.l.LivingEnd.class));
+ cards.add(new SetCardInfo("Manifold Mouse", 47, Rarity.RARE, mage.cards.m.ManifoldMouse.class));
cards.add(new SetCardInfo("Mayhem Devil", 28, Rarity.RARE, mage.cards.m.MayhemDevil.class));
cards.add(new SetCardInfo("Mountain", 34, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS));
cards.add(new SetCardInfo("Murktide Regent", 17, Rarity.MYTHIC, mage.cards.m.MurktideRegent.class));
diff --git a/Mage.Sets/src/mage/sets/SummerMagicEdgar.java b/Mage.Sets/src/mage/sets/SummerMagicEdgar.java
index ede409d714b..57608def288 100644
--- a/Mage.Sets/src/mage/sets/SummerMagicEdgar.java
+++ b/Mage.Sets/src/mage/sets/SummerMagicEdgar.java
@@ -8,6 +8,8 @@ import mage.constants.SetType;
/**
* https://scryfall.com/sets/sum
+ *
+ * https://mtg.wiki/page/Revised_Edition#%22Summer_Magic%22/%22Edgar%22
*/
public class SummerMagicEdgar extends ExpansionSet {
@@ -19,9 +21,15 @@ public class SummerMagicEdgar extends ExpansionSet {
private SummerMagicEdgar() {
super("Summer Magic / Edgar", "SUM", ExpansionSet.buildDate(1994, 6, 21), SetType.CORE);
- this.hasBoosters = false;
+ this.hasBoosters = true;
this.hasBasicLands = true;
+ this.numBoosterLands = 1;
+ this.numBoosterCommon = 10;
+ this.numBoosterUncommon = 3;
+ this.numBoosterRare = 1;
+ this.ratioBoosterMythic = 0;
+
cards.add(new SetCardInfo("Air Elemental", 47, Rarity.UNCOMMON, mage.cards.a.AirElemental.class, RETRO_ART));
cards.add(new SetCardInfo("Aladdin's Lamp", 231, Rarity.RARE, mage.cards.a.AladdinsLamp.class, RETRO_ART));
cards.add(new SetCardInfo("Aladdin's Ring", 232, Rarity.RARE, mage.cards.a.AladdinsRing.class, RETRO_ART));
diff --git a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java
index 0468c97c1b6..688eddb0f74 100644
--- a/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java
+++ b/Mage.Sets/src/mage/sets/WorldChampionshipDecks2004.java
@@ -60,7 +60,7 @@ public class WorldChampionshipDecks2004 extends ExpansionSet {
cards.add(new SetCardInfo("Island", "gn335", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Island", "gn336", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Island", "gn337", Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
- cards.add(new SetCardInfo("Krark-Clan Ironworks", "mb134", Rarity.RARE, mage.cards.k.KrarkClanIronworks.class));
+ cards.add(new SetCardInfo("Krark-Clan Ironworks", "mb134", Rarity.UNCOMMON, mage.cards.k.KrarkClanIronworks.class));
cards.add(new SetCardInfo("Mana Leak", "gn89", Rarity.COMMON, mage.cards.m.ManaLeak.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Mana Leak", "mb89sb", Rarity.COMMON, mage.cards.m.ManaLeak.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Myr Incubator", "mb212", Rarity.RARE, mage.cards.m.MyrIncubator.class));
diff --git a/Mage.Tests/pom.xml b/Mage.Tests/pom.xml
index a99b1948896..a0aeea4183e 100644
--- a/Mage.Tests/pom.xml
+++ b/Mage.Tests/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-tests
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java
index 8ec0d1b5119..dbc750bb4ca 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java
@@ -6,12 +6,17 @@ import mage.constants.CardType;
import mage.constants.PhaseStep;
import mage.constants.SubType;
import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.filter.FilterPermanent;
+import mage.filter.predicate.mageobject.NamePredicate;
import mage.game.permanent.Permanent;
import org.junit.Assert;
import org.junit.Test;
import org.mage.test.player.TestPlayer;
import org.mage.test.serverside.base.CardTestPlayerBase;
+import java.util.List;
+
/**
* @author LevelX2
*/
@@ -82,6 +87,7 @@ public class BestowTest extends CardTestPlayerBase {
assertSubtype("Hopeful Eidolon", SubType.AURA);
assertType("Hopeful Eidolon", CardType.ENCHANTMENT, true);
assertType("Hopeful Eidolon", CardType.CREATURE, false);
+ assertNotSubtype("Hopeful Eidolon", SubType.SPIRIT);
}
/**
@@ -122,59 +128,63 @@ public class BestowTest extends CardTestPlayerBase {
@Test
public void bestowEnchantmentBecomesCreature() {
addCard(Zone.BATTLEFIELD, playerA, "Plains", 4);
- addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion");
+ addCard(Zone.BATTLEFIELD, playerA, "Safehold Elite"); // 2/2 creature + Persist to return as a 1/1
addCard(Zone.HAND, playerA, "Hopeful Eidolon");
addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1);
addCard(Zone.HAND, playerB, "Lightning Bolt");
- castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion");
- castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Silvercoat Lion");
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Safehold Elite");
+ castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite");
setStrictChooseMode(true);
setStopAt(1, PhaseStep.END_TURN);
execute();
- // because Boon Satyr is no creature on the battlefield, evolve may not trigger
assertLife(playerA, 20);
assertLife(playerB, 20);
- assertPermanentCount(playerA, "Silvercoat Lion", 0);
+ assertPermanentCount(playerA, "Safehold Elite", 1);
+ assertPowerToughness(playerA, "Safehold Elite", 1, 1);
assertPermanentCount(playerA, "Hopeful Eidolon", 1);
assertPowerToughness(playerA, "Hopeful Eidolon", 1, 1);
-
- Permanent hopefulEidolon = getPermanent("Hopeful Eidolon", playerA);
- Assert.assertTrue("Hopeful Eidolon has to be a creature but is not", hopefulEidolon.isCreature(currentGame));
- Assert.assertTrue("Hopeful Eidolon has to be an enchantment but is not", hopefulEidolon.isEnchantment(currentGame));
-
+ assertType("Hopeful Eidolon", CardType.CREATURE, true);
+ assertSubtype("Hopeful Eidolon", SubType.SPIRIT);
+ assertType("Hopeful Eidolon", CardType.ENCHANTMENT, true);
+ assertNotSubtype("Hopeful Eidolon", SubType.AURA);
}
/**
* Test that card cast with bestow will not be tapped, if creatures come
- * into play tapped
+ * into play tapped. If it is cast with bestow but the target removed, it should be tapped.
*/
@Test
public void bestowEnchantmentWillNotBeTapped() {
- addCard(Zone.BATTLEFIELD, playerA, "Forest", 6);
+ addCustomEffect_TargetDestroy(playerA);
+ addCard(Zone.BATTLEFIELD, playerA, "Forest", 10);
addCard(Zone.BATTLEFIELD, playerA, "Silent Artisan");
addCard(Zone.HAND, playerA, "Boon Satyr");
+ addCard(Zone.HAND, playerA, "Leafcrown Dryad");
+
// Enchantment {1}{W}
// Creatures your opponents control enter the battlefield tapped.
addCard(Zone.BATTLEFIELD, playerB, "Imposing Sovereign");
- castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Boon Satyr using bestow", "Silent Artisan");
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Boon Satyr using bestow", "Silent Artisan");
+ checkPT("Boon Satyr attached", 1, PhaseStep.BEGIN_COMBAT, playerA, "Silent Artisan", 7, 7);
+
+ castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Leafcrown Dryad using bestow", "Silent Artisan");
+ activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "target destroy", "Silent Artisan");
setStrictChooseMode(true);
setStopAt(1, PhaseStep.END_TURN);
execute();
- // because Boon Satyr is no creature on the battlefield, evolve may not trigger
- assertPermanentCount(playerA, "Silent Artisan", 1);
- assertPowerToughness(playerA, "Silent Artisan", 7, 7);
- // because cast with bestow, Boon Satyr may not be tapped
+ // Boon Satyr should not be tapped since it resolved as an aura, Leafcrown Dryad resolved as a creature
assertTapped("Boon Satyr", false);
+ assertTapped("Leafcrown Dryad", true);
}
@@ -271,7 +281,6 @@ public class BestowTest extends CardTestPlayerBase {
assertHandCount(playerB, "Disdainful Stroke", 1);
assertPermanentCount(playerA, "Hypnotic Siren", 1);
- // because cast with bestow, Boon Satyr may not be tapped
assertPermanentCount(playerA, "Silvercoat Lion", 1);
assertPowerToughness(playerA, "Silvercoat Lion", 3, 3);
@@ -551,4 +560,127 @@ public class BestowTest extends CardTestPlayerBase {
assertType("Nylea's Emissary", CardType.CREATURE, false);
assertType("Nylea's Emissary", CardType.ENCHANTMENT, SubType.AURA);
}
+
+ @Test
+ public void testCastBestowFlashRootwaterShaman() {
+ addCard(Zone.HAND, playerA, "Nylea's Emissary"); // +3/+3, only an aura if cast with bestow
+ addCard(Zone.BATTLEFIELD, playerA, "Forest", 6);
+ addCard(Zone.BATTLEFIELD, playerA, "Rootwater Shaman"); //aura spells with enchant creature have flash
+ addCard(Zone.BATTLEFIELD, playerA, "Memnite", 1); // 1/1
+
+ castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Nylea's Emissary using bestow", "Memnite");
+
+ setStrictChooseMode(true);
+ setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
+ execute();
+
+ assertPermanentCount(playerA, "Nylea's Emissary", 1);
+ assertPowerToughness(playerA, "Memnite", 4, 4);
+ assertType("Nylea's Emissary", CardType.CREATURE, false);
+ assertType("Nylea's Emissary", CardType.ENCHANTMENT, SubType.AURA);
+ }
+
+ /**
+ * Tests that copied bestow works correctly both on the stack and battlefield, including with the creature removed
+ */
+ @Test
+ public void bestowCopiesTest() {
+ addCard(Zone.BATTLEFIELD, playerA, "Tundra", 18);
+ addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion");
+ addCard(Zone.BATTLEFIELD, playerA, "Overloaded Mage-Ring", 2);
+ addCard(Zone.HAND, playerA, "Hopeful Eidolon", 2);
+ addCard(Zone.HAND, playerA, "Copy Enchantment");
+ addCard(Zone.HAND, playerA, "Mythos of Illuna");
+
+ addCard(Zone.BATTLEFIELD, playerB, "Mountain", 4);
+ addCard(Zone.HAND, playerB, "Lightning Blast");
+
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion");
+ activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}, {T}, Sacrifice", "Hopeful Eidolon");
+ setChoice(playerA, false);
+ waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mythos of Illuna", "Hopeful Eidolon"); // Making a token copy of a resolved Bestow aura makes a token creature
+ waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Copy Enchantment"); // Copying a resolved Bestow aura makes a creature
+ setChoice(playerA, true);
+ setChoice(playerA, "Hopeful Eidolon");
+ checkPT("Lion with 2x Hopeful Eidolon attached", 1, PhaseStep.BEGIN_COMBAT, playerA, "Silvercoat Lion", 4, 4);
+ checkPermanentCount("Four Hopeful Eidolons resolved", 1, PhaseStep.BEGIN_COMBAT, playerA, "Hopeful Eidolon", 4);
+
+ castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion");
+ activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{1}, {T}, Sacrifice", "Hopeful Eidolon");
+ setChoice(playerA, false);
+ castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Blast", "Silvercoat Lion");
+
+ setStrictChooseMode(true);
+ setStopAt(1, PhaseStep.END_TURN);
+ execute();
+
+ assertPermanentCount(playerA, "Silvercoat Lion", 0);
+ assertPermanentCount(playerA, "Hopeful Eidolon", 6);
+ assertTokenCount(playerA, "Hopeful Eidolon", 2);
+
+ FilterPermanent filter = new FilterPermanent();
+ filter.add(new NamePredicate("Hopeful Eidolon"));
+ List eidolons = currentGame.getBattlefield().getAllActivePermanents(filter, currentGame);
+ Assert.assertEquals("Six Eidolons found with filter", 6, eidolons.size());
+ for (Permanent p : eidolons){
+ Assert.assertTrue("Is Enchantment", p.getCardType(currentGame).contains(CardType.ENCHANTMENT));
+ Assert.assertFalse("Is not Aura", p.getSubtype(currentGame).contains(SubType.AURA));
+ Assert.assertTrue("Is Creature", p.getCardType(currentGame).contains(CardType.CREATURE));
+ Assert.assertTrue("Is Spirit", p.getSubtype(currentGame).contains(SubType.SPIRIT));
+ Assert.assertEquals("Is 1 power", 1, p.getPower().getValue());
+ Assert.assertEquals("Is 1 toughness", 1, p.getToughness().getValue());
+ }
+ }
+
+ @Test
+ public void testBestowSubtype() {
+ addCard(Zone.HAND, playerA, "Hopeful Eidolon", 2); // Spirit when cast as creature, not when cast as aura
+ addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
+ addCard(Zone.BATTLEFIELD, playerA, "Waxmane Baku"); // May add a counter on casting a spirit spell
+ addCard(Zone.BATTLEFIELD, playerA, "Drogskol Cavalry"); // +2 life whenever another spirit enters
+
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Waxmane Baku");
+ checkPermanentCounters("Not a Spirit, no KI counters", 1, PhaseStep.BEGIN_COMBAT, playerA, "Waxmane Baku", CounterType.KI, 0);
+ checkLife("Not a Spirit, no lifegain", 1, PhaseStep.BEGIN_COMBAT, playerA, 20);
+ castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Hopeful Eidolon");
+ setChoice(playerA, true);
+
+ setStrictChooseMode(true);
+ setStopAt(1, PhaseStep.END_TURN);
+ execute();
+
+ assertPermanentCount(playerA, "Hopeful Eidolon", 2);
+ assertPowerToughness(playerA, "Waxmane Baku", 3, 3);
+ assertCounterCount(playerA, "Waxmane Baku", CounterType.KI, 1);
+ assertLife(playerA, 22);
+ }
+
+ @Test
+ public void testBestowSBATiming() {
+ addCard(Zone.HAND, playerA, "Hopeful Eidolon", 2); // +1/+1
+ addCard(Zone.HAND, playerA, "Pyroclasm", 2); // 2 damage
+ addCard(Zone.BATTLEFIELD, playerA, "Plateau", 10);
+ addCard(Zone.BATTLEFIELD, playerA, "Crusader of Odric");
+ addCard(Zone.BATTLEFIELD, playerA, "Memnite");
+ addCard(Zone.BATTLEFIELD, playerA, "Eager Cadet");
+
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Memnite", true);
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Eager Cadet");
+ checkPT("Memnite P/T", 1, PhaseStep.BEGIN_COMBAT, playerA, "Memnite", 2, 2);
+ checkPT("Eager Cadet P/T", 1, PhaseStep.BEGIN_COMBAT, playerA, "Eager Cadet", 2, 2);
+ checkPT("Crusader P/T", 1, PhaseStep.BEGIN_COMBAT, playerA, "Crusader of Odric", 3, 3);
+ castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Pyroclasm");
+
+ setStrictChooseMode(true);
+ setStopAt(1, PhaseStep.END_TURN);
+ execute();
+
+ assertPermanentCount(playerA, "Hopeful Eidolon", 2);
+ assertPermanentCount(playerA, "Crusader of Odric", 1);
+ assertDamageReceived(playerA, "Crusader of Odric", 2);
+ assertGraveyardCount(playerA, 3);
+ }
+
}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/PrototypeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/PrototypeTest.java
index fc9123a883e..b2d7b4ca535 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/PrototypeTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/PrototypeTest.java
@@ -2,6 +2,7 @@ package org.mage.test.cards.abilities.keywords;
import mage.MageObject;
import mage.ObjectColor;
+import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.keyword.HasteAbility;
@@ -9,6 +10,7 @@ import mage.cards.Card;
import mage.constants.ComparisonType;
import mage.constants.PhaseStep;
import mage.constants.Zone;
+import mage.filter.FilterPermanent;
import mage.filter.FilterSpell;
import mage.filter.StaticFilters;
import mage.filter.predicate.Predicate;
@@ -61,14 +63,22 @@ public class PrototypeTest extends CardTestPlayerBase {
}
private void makeTester(Predicate super MageObject>... predicates) {
- FilterSpell filter = new FilterSpell();
+ FilterSpell filterA = new FilterSpell();
+ FilterPermanent filterB = new FilterPermanent();
for (Predicate super MageObject> predicate : predicates) {
- filter.add(predicate);
+ filterA.add(predicate);
+ filterB.add(predicate);
}
addCustomCardWithAbility(
"tester", playerA,
new SpellCastControllerTriggeredAbility(
- new GainLifeEffect(1), filter, false
+ new GainLifeEffect(1), filterA, false
+ )
+ );
+ addCustomCardWithAbility(
+ "tester", playerB,
+ new EntersBattlefieldAllTriggeredAbility(
+ new GainLifeEffect(1), filterB, false
)
);
}
@@ -159,6 +169,7 @@ public class PrototypeTest extends CardTestPlayerBase {
execute();
assertLife(playerA, 20 + 1);
+ assertLife(playerB, 20 + 1);
}
@Test
@@ -174,6 +185,7 @@ public class PrototypeTest extends CardTestPlayerBase {
execute();
assertLife(playerA, 20 + 1);
+ assertLife(playerB, 20 + 1);
}
@Test
@@ -192,6 +204,7 @@ public class PrototypeTest extends CardTestPlayerBase {
execute();
assertLife(playerA, 20 + 1);
+ assertLife(playerB, 20 + 1);
}
@Test
@@ -210,6 +223,7 @@ public class PrototypeTest extends CardTestPlayerBase {
execute();
assertLife(playerA, 20 + 1);
+ assertLife(playerB, 20 + 1);
}
@Test
@@ -225,6 +239,7 @@ public class PrototypeTest extends CardTestPlayerBase {
execute();
assertLife(playerA, 20 + 1);
+ assertLife(playerB, 20 + 1);
}
@Test
@@ -240,6 +255,7 @@ public class PrototypeTest extends CardTestPlayerBase {
execute();
assertLife(playerA, 20 + 1);
+ assertLife(playerB, 20 + 1);
}
@Test
diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java
index be58f93c598..4d910579aca 100644
--- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java
+++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java
@@ -1127,12 +1127,10 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
int actualCount = 0;
for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents()) {
- if (permanent instanceof PermanentToken) {
- if (permanent.getControllerId().equals(player.getId())) {
- if (isObjectHaveTargetNameOrAlias(player, permanent, tokenName)) {
- actualCount++;
- }
- }
+ if (permanent instanceof PermanentToken
+ && permanent.getControllerId().equals(player.getId())
+ && isObjectHaveTargetNameOrAlias(player, permanent, tokenName)) {
+ actualCount++;
}
}
Assert.assertEquals("(Battlefield) Tokens counts for " + player.getName() + " are not equal (" + tokenName + ')', count, actualCount);
diff --git a/Mage.Verify/pom.xml b/Mage.Verify/pom.xml
index 9ce6635cd66..f307ca1246d 100644
--- a/Mage.Verify/pom.xml
+++ b/Mage.Verify/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage-verify
diff --git a/Mage/pom.xml b/Mage/pom.xml
index 8759c48b385..29ea75c4312 100644
--- a/Mage/pom.xml
+++ b/Mage/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
mage
diff --git a/Mage/src/main/java/mage/abilities/condition/common/TwoOfManaColorSpentCondition.java b/Mage/src/main/java/mage/abilities/condition/common/TwoOfManaColorSpentCondition.java
new file mode 100644
index 00000000000..456b6b3e4a5
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/condition/common/TwoOfManaColorSpentCondition.java
@@ -0,0 +1,53 @@
+package mage.abilities.condition.common;
+
+import mage.Mana;
+import mage.abilities.Ability;
+import mage.abilities.condition.Condition;
+import mage.constants.AbilityType;
+import mage.constants.ColoredManaSymbol;
+import mage.game.Game;
+import mage.util.CardUtil;
+import mage.watchers.common.ManaSpentToCastWatcher;
+
+/**
+ * @author TheElk801
+ */
+public enum TwoOfManaColorSpentCondition implements Condition {
+ WHITE(ColoredManaSymbol.W),
+ BLUE(ColoredManaSymbol.U),
+ BLACK(ColoredManaSymbol.B),
+ RED(ColoredManaSymbol.R),
+ GREEN(ColoredManaSymbol.G);
+
+ private final ColoredManaSymbol coloredManaSymbol;
+
+ TwoOfManaColorSpentCondition(ColoredManaSymbol coloredManaSymbol) {
+ this.coloredManaSymbol = coloredManaSymbol;
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ if (source.getAbilityType() == AbilityType.SPELL) {
+ return source.getManaCostsToPay().getUsedManaToPay().getColor(coloredManaSymbol) >= 2;
+ }
+ ManaSpentToCastWatcher watcher = game.getState().getWatcher(ManaSpentToCastWatcher.class);
+ if (watcher == null) {
+ return false;
+ }
+ Mana payment = watcher.getManaPayment(CardUtil.getSourceStackMomentReference(game, source));
+ if (payment == null) {
+ return false;
+ }
+ return payment.getColor(coloredManaSymbol) >= 2;
+ }
+
+ @Override
+ public boolean caresAboutManaColor() {
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "{" + coloredManaSymbol + "}{" + coloredManaSymbol + "} was spent to cast it";
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/DamageEachOtherOpponentThatMuchEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DamageEachOtherOpponentThatMuchEffect.java
new file mode 100644
index 00000000000..f7775a2a82e
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/effects/common/DamageEachOtherOpponentThatMuchEffect.java
@@ -0,0 +1,47 @@
+package mage.abilities.effects.common;
+
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
+import mage.constants.Outcome;
+import mage.game.Game;
+
+import java.util.Optional;
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public class DamageEachOtherOpponentThatMuchEffect extends OneShotEffect {
+
+ public DamageEachOtherOpponentThatMuchEffect() {
+ super(Outcome.Benefit);
+ staticText = "it deals that much damage to each other opponent";
+ }
+
+ private DamageEachOtherOpponentThatMuchEffect(final DamageEachOtherOpponentThatMuchEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public DamageEachOtherOpponentThatMuchEffect copy() {
+ return new DamageEachOtherOpponentThatMuchEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ int damage = (Integer) getValue("damage");
+ if (damage < 1) {
+ return false;
+ }
+ UUID playerId = getTargetPointer().getFirst(game, source);
+ for (UUID opponentId : game.getOpponents(source.getControllerId())) {
+ if (opponentId.equals(playerId)) {
+ continue;
+ }
+ Optional.ofNullable(opponentId)
+ .map(game::getPlayer)
+ .ifPresent(player -> player.damage(damage, source, game));
+ }
+ return true;
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java b/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java
index 611d3bb2703..f899e9b9e4f 100644
--- a/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java
@@ -6,14 +6,13 @@ import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Costs;
import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.ReplacementEffectImpl;
+import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.common.AttachEffect;
import mage.cards.Card;
import mage.constants.*;
import mage.game.Game;
-import mage.game.events.GameEvent;
-import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
+import mage.game.stack.Spell;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.util.CardUtil;
@@ -90,9 +89,9 @@ public class BestowAbility extends SpellAbility {
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.addTarget(auraTarget);
this.addEffect(new AttachEffect(Outcome.BoostCreature));
- Ability ability = new SimpleStaticAbility(new BestowEntersBattlefieldEffect());
+ Ability ability = new SimpleStaticAbility(new BestowTypeEffect());
ability.setRuleVisible(false);
- addSubAbility(ability);
+ this.addSubAbility(ability);
}
protected BestowAbility(final BestowAbility ability) {
@@ -122,70 +121,65 @@ public class BestowAbility extends SpellAbility {
sb.append(" (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)");
return sb.toString();
}
-
- public static void becomeCreature(Permanent permanent, Game game) {
- // permanently changes to the object
- if (permanent != null) {
- MageObject basicObject = permanent.getBasicMageObject();
- if (basicObject != null) {
- game.checkStateAndTriggered(); // Bug #8157
- basicObject.getSubtype().remove(SubType.AURA);
- basicObject.addCardType(CardType.CREATURE);
- }
- permanent.getSubtype().remove(SubType.AURA);
- permanent.addCardType(CardType.CREATURE);
- }
- }
-
public static void becomeAura(Card card) {
- // permanently changes to the object
+ // permanently changes to the object, only use on copies
if (card != null) {
+ if (!card.getCardType().contains(CardType.ENCHANTMENT)) {
+ throw new IllegalStateException("Bestow perpetual becomeAura called on non-enchantment card");
+ }
card.addSubType(SubType.AURA);
card.removeCardType(CardType.CREATURE);
- card.addCardType(CardType.ENCHANTMENT);
+ card.removeAllCreatureTypes();
+ if (card instanceof Spell) {
+ ((Spell) card).addAbilityForCopy(new EnchantAbility(new TargetCreaturePermanent()));
+ } else {
+ card.addAbility(new EnchantAbility(new TargetCreaturePermanent()));
+ }
+ }
+ }
+ public static void becomeAura(Game game, MageObject object) {
+ // temporary changes only
+ if (object != null && object.getCardType(game).contains(CardType.ENCHANTMENT)) {
+ object.addSubType(game, SubType.AURA);
+ object.removeCardType(game, CardType.CREATURE);
+ object.removeAllCreatureTypes(game);
+ if (object instanceof Permanent) {
+ ((Permanent) object).addAbility(new EnchantAbility(new TargetCreaturePermanent()), object.getId(), game);
+ } else if (object instanceof Spell) {
+ game.getState().addOtherAbility(((Spell) object).getCard(), new EnchantAbility(new TargetCreaturePermanent()));
+ } else if (object instanceof Card) {
+ game.getState().addOtherAbility((Card) object, new EnchantAbility(new TargetCreaturePermanent()));
+ } else {
+ throw new IllegalArgumentException("Bestow temporary becomeAura called on non-Permanent non-Spell object: " + object.getClass().getName());
+ }
}
}
}
-class BestowEntersBattlefieldEffect extends ReplacementEffectImpl {
+class BestowTypeEffect extends ContinuousEffectImpl {
- public BestowEntersBattlefieldEffect() {
- super(Duration.WhileOnBattlefield, Outcome.Neutral);
+ BestowTypeEffect() {
+ super(Duration.WhileOnBattlefield, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Benefit);
}
- protected BestowEntersBattlefieldEffect(final BestowEntersBattlefieldEffect effect) {
+ private BestowTypeEffect(final BestowTypeEffect effect) {
super(effect);
}
@Override
- public boolean checksEventType(GameEvent event, Game game) {
- return EventType.ENTERS_THE_BATTLEFIELD_SELF == event.getType();
+ public BestowTypeEffect copy() {
+ return new BestowTypeEffect(this);
}
@Override
- public boolean applies(GameEvent event, Ability source, Game game) {
- return event.getTargetId().equals(source.getSourceId());
- }
-
- @Override
- public boolean replaceEvent(GameEvent event, Ability source, Game game) {
- Permanent bestowPermanent = game.getPermanentEntering(source.getSourceId());
- if (bestowPermanent == null || !bestowPermanent.hasSubtype(SubType.AURA, game)) {
+ public boolean apply(Game game, Ability source) {
+ Permanent permanent = source.getSourcePermanentIfItStillExists(game);
+ if (permanent == null) {
return false;
}
-
- // change types permanently
- MageObject basicObject = bestowPermanent.getBasicMageObject();
- if (basicObject != null && !basicObject.getSubtype().contains(SubType.AURA)) {
- basicObject.addSubType(SubType.AURA);
- basicObject.removeCardType(CardType.CREATURE);
+ if (game.getPermanent(permanent.getAttachedTo()) != null){
+ BestowAbility.becomeAura(game, permanent);
}
- return false;
+ return true;
}
-
- @Override
- public BestowEntersBattlefieldEffect copy() {
- return new BestowEntersBattlefieldEffect(this);
- }
-
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/PartnerFatherAndSonAbility.java b/Mage/src/main/java/mage/abilities/keyword/PartnerFatherAndSonAbility.java
new file mode 100644
index 00000000000..222f6b65511
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/keyword/PartnerFatherAndSonAbility.java
@@ -0,0 +1,38 @@
+package mage.abilities.keyword;
+
+import mage.abilities.MageSingleton;
+import mage.abilities.StaticAbility;
+import mage.constants.Zone;
+
+import java.io.ObjectStreamException;
+
+/**
+ * @author LevelX2
+ */
+public class PartnerFatherAndSonAbility extends StaticAbility implements MageSingleton {
+
+ private static final PartnerFatherAndSonAbility instance = new PartnerFatherAndSonAbility();
+
+ private Object readResolve() throws ObjectStreamException {
+ return instance;
+ }
+
+ public static PartnerFatherAndSonAbility getInstance() {
+ return instance;
+ }
+
+ private PartnerFatherAndSonAbility() {
+ super(Zone.BATTLEFIELD, null);
+ }
+
+ @Override
+ public String getRule() {
+ return "Partner—Father & son (You can have two commanders if both have this ability.)";
+ }
+
+ @Override
+ public PartnerFatherAndSonAbility copy() {
+ return instance;
+ }
+
+}
diff --git a/Mage/src/main/java/mage/abilities/keyword/PartnerSurvivorsAbility.java b/Mage/src/main/java/mage/abilities/keyword/PartnerSurvivorsAbility.java
new file mode 100644
index 00000000000..9693819ff8d
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/keyword/PartnerSurvivorsAbility.java
@@ -0,0 +1,38 @@
+package mage.abilities.keyword;
+
+import mage.abilities.MageSingleton;
+import mage.abilities.StaticAbility;
+import mage.constants.Zone;
+
+import java.io.ObjectStreamException;
+
+/**
+ * @author LevelX2
+ */
+public class PartnerSurvivorsAbility extends StaticAbility implements MageSingleton {
+
+ private static final PartnerSurvivorsAbility instance = new PartnerSurvivorsAbility();
+
+ private Object readResolve() throws ObjectStreamException {
+ return instance;
+ }
+
+ public static PartnerSurvivorsAbility getInstance() {
+ return instance;
+ }
+
+ private PartnerSurvivorsAbility() {
+ super(Zone.BATTLEFIELD, null);
+ }
+
+ @Override
+ public String getRule() {
+ return "Partner—Survivors (You can have two commanders if both have this ability.)";
+ }
+
+ @Override
+ public PartnerSurvivorsAbility copy() {
+ return instance;
+ }
+
+}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ProtectionFromEachOpponentAbility.java b/Mage/src/main/java/mage/abilities/keyword/ProtectionFromEachOpponentAbility.java
new file mode 100644
index 00000000000..9c0da0167b1
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/keyword/ProtectionFromEachOpponentAbility.java
@@ -0,0 +1,42 @@
+package mage.abilities.keyword;
+
+import mage.MageItem;
+import mage.MageObject;
+import mage.filter.StaticFilters;
+import mage.game.Game;
+
+import java.util.Optional;
+
+/**
+ * @author TheElk801
+ */
+public class ProtectionFromEachOpponentAbility extends ProtectionAbility {
+
+ public ProtectionFromEachOpponentAbility() {
+ super(StaticFilters.FILTER_CARD);
+ }
+
+ private ProtectionFromEachOpponentAbility(final ProtectionFromEachOpponentAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public ProtectionFromEachOpponentAbility copy() {
+ return new ProtectionFromEachOpponentAbility(this);
+ }
+
+ @Override
+ public String getRule() {
+ return "protection from each of your opponents";
+ }
+
+ @Override
+ public boolean canTarget(MageObject source, Game game) {
+ return Optional
+ .ofNullable(source)
+ .map(MageItem::getId)
+ .map(game::getControllerId)
+ .map(uuid -> !game.getOpponents(this.getSourceId()).contains(uuid))
+ .orElse(true);
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ReconfigureAbility.java b/Mage/src/main/java/mage/abilities/keyword/ReconfigureAbility.java
index a423bcd0792..303b42e0d29 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ReconfigureAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ReconfigureAbility.java
@@ -135,6 +135,7 @@ class ReconfigureTypeEffect extends ContinuousEffectImpl {
return false;
}
permanent.removeCardType(game, CardType.CREATURE);
+ permanent.removeAllCreatureTypes(game);
return true;
}
}
diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java
index 62a2b2f17cd..82d0ad5ce63 100644
--- a/Mage/src/main/java/mage/game/GameImpl.java
+++ b/Mage/src/main/java/mage/game/GameImpl.java
@@ -2670,10 +2670,9 @@ public abstract class GameImpl implements Game {
Permanent attachedTo = getPermanent(perm.getAttachedTo());
if (attachedTo == null || !attachedTo.getAttachments().contains(perm.getId())) {
// handle bestow unattachment
- Card card = this.getCard(perm.getId());
- if (card != null && card.isCreature(this)) {
+ if (perm.getAbilities().stream().anyMatch(x -> x instanceof BestowAbility)) {
UUID wasAttachedTo = perm.getAttachedTo();
- perm.attachTo(null, null, this);
+ perm.unattach(this);
fireEvent(new UnattachedEvent(wasAttachedTo, perm.getId(), perm, null));
} else if (movePermanentToGraveyardWithInfo(perm)) {
somethingHappened = true;
@@ -2683,11 +2682,9 @@ public abstract class GameImpl implements Game {
if (auraFilter instanceof FilterPermanent) {
if (!((FilterPermanent) auraFilter).match(attachedTo, perm.getControllerId(), perm.getSpellAbility(), this)
|| attachedTo.cantBeAttachedBy(perm, null, this, true)) {
- Card card = this.getCard(perm.getId());
- if (card != null && card.isCreature(this)) {
+ if (perm.getAbilities().stream().anyMatch(x -> x instanceof BestowAbility)) {
UUID wasAttachedTo = perm.getAttachedTo();
- perm.attachTo(null, null, this);
- BestowAbility.becomeCreature(perm, this);
+ perm.unattach(this);
fireEvent(new UnattachedEvent(wasAttachedTo, perm.getId(), perm, null));
} else if (movePermanentToGraveyardWithInfo(perm)) {
somethingHappened = true;
@@ -2695,11 +2692,9 @@ public abstract class GameImpl implements Game {
}
} else if (!auraFilter.match(attachedTo, this) || attachedTo.cantBeAttachedBy(perm, null, this, true)) {
// handle bestow unattachment
- Card card = this.getCard(perm.getId());
- if (card != null && card.isCreature(this)) {
+ if (perm.getAbilities().stream().anyMatch(x -> x instanceof BestowAbility)) {
UUID wasAttachedTo = perm.getAttachedTo();
- perm.attachTo(null, null, this);
- BestowAbility.becomeCreature(perm, this);
+ perm.unattach(this);
fireEvent(new UnattachedEvent(wasAttachedTo, perm.getId(), perm, null));
} else if (movePermanentToGraveyardWithInfo(perm)) {
somethingHappened = true;
diff --git a/Mage/src/main/java/mage/game/permanent/PermanentImpl.java b/Mage/src/main/java/mage/game/permanent/PermanentImpl.java
index 23422c76a64..f800b17f368 100644
--- a/Mage/src/main/java/mage/game/permanent/PermanentImpl.java
+++ b/Mage/src/main/java/mage/game/permanent/PermanentImpl.java
@@ -2061,24 +2061,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
return color;
}
- //20180810 - 701.3d
- //If an object leaves the zone it's in, all attached permanents become unattached
- //note that this code doesn't actually detach anything, and is a bit of a bandaid
- public void detachAllAttachments(Game game) {
- for (UUID attachmentId : getAttachments()) {
- Permanent attachment = game.getPermanent(attachmentId);
- Card attachmentCard = game.getCard(attachmentId);
- if (attachment != null && attachmentCard != null) {
- //make bestow cards and licids into creatures
- //aura test to stop bludgeon brawl shenanigans from using this code
- //consider adding code to handle that case?
- if (attachment.hasSubtype(SubType.AURA, game) && attachmentCard.isCreature(game)) {
- BestowAbility.becomeCreature(attachment, game);
- }
- }
- }
- }
-
@Override
public boolean moveToZone(Zone toZone, Ability source, Game game, boolean flag, List appliedEffects) {
Zone fromZone = game.getState().getZone(objectId);
@@ -2091,12 +2073,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
} else {
zoneChangeInfo = new ZoneChangeInfo(event);
}
- boolean successfullyMoved = ZonesHandler.moveCard(zoneChangeInfo, game, source);
- //20180810 - 701.3d
- if (successfullyMoved) {
- detachAllAttachments(game);
- }
- return successfullyMoved;
+ return ZonesHandler.moveCard(zoneChangeInfo, game, source);
}
return false;
}
@@ -2107,11 +2084,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
ZoneChangeEvent event = new ZoneChangeEvent(this, source, ownerId, fromZone, Zone.EXILED, appliedEffects);
ZoneChangeInfo.Exile zcInfo = new ZoneChangeInfo.Exile(event, exileId, name);
- boolean successfullyMoved = ZonesHandler.moveCard(zcInfo, game, source);
- //20180810 - 701.3d
- if (successfullyMoved) {
- detachAllAttachments(game);
- }
- return successfullyMoved;
+ return ZonesHandler.moveCard(zcInfo, game, source);
}
}
diff --git a/Mage/src/main/java/mage/game/permanent/token/CordycepsInfectedToken.java b/Mage/src/main/java/mage/game/permanent/token/CordycepsInfectedToken.java
new file mode 100644
index 00000000000..2d1ba020cff
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/CordycepsInfectedToken.java
@@ -0,0 +1,30 @@
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.constants.CardType;
+import mage.constants.SubType;
+
+/**
+ * @author TheElk801
+ */
+public final class CordycepsInfectedToken extends TokenImpl {
+
+ public CordycepsInfectedToken() {
+ super("Cordyceps Infected", "1/1 black Fungus Zombie creature token named Cordyceps Infected");
+ cardType.add(CardType.CREATURE);
+ color.setBlack(true);
+ subtype.add(SubType.FUNGUS);
+ subtype.add(SubType.ZOMBIE);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ }
+
+ private CordycepsInfectedToken(final CordycepsInfectedToken token) {
+ super(token);
+ }
+
+ @Override
+ public CordycepsInfectedToken copy() {
+ return new CordycepsInfectedToken(this);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/FaerieBlueBlackToken.java b/Mage/src/main/java/mage/game/permanent/token/FaerieBlueBlackToken.java
new file mode 100644
index 00000000000..d5be3d0f3ee
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/FaerieBlueBlackToken.java
@@ -0,0 +1,32 @@
+package mage.game.permanent.token;
+
+import mage.MageInt;
+import mage.abilities.keyword.FlyingAbility;
+import mage.constants.CardType;
+import mage.constants.SubType;
+
+/**
+ * @author spjspj
+ */
+public final class FaerieBlueBlackToken extends TokenImpl {
+
+ public FaerieBlueBlackToken() {
+ super("Faerie Rogue Token", "1/1 blue and black Faerie Rogue creature token with flying");
+ cardType.add(CardType.CREATURE);
+ color.setBlue(true);
+ color.setBlack(true);
+ subtype.add(SubType.FAERIE);
+ subtype.add(SubType.ROGUE);
+ power = new MageInt(1);
+ toughness = new MageInt(1);
+ this.addAbility(FlyingAbility.getInstance());
+ }
+
+ private FaerieBlueBlackToken(final FaerieBlueBlackToken token) {
+ super(token);
+ }
+
+ public FaerieBlueBlackToken copy() {
+ return new FaerieBlueBlackToken(this);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/MutavaultToken.java b/Mage/src/main/java/mage/game/permanent/token/MutavaultToken.java
new file mode 100644
index 00000000000..cb93749ce12
--- /dev/null
+++ b/Mage/src/main/java/mage/game/permanent/token/MutavaultToken.java
@@ -0,0 +1,38 @@
+package mage.game.permanent.token;
+
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
+import mage.abilities.mana.ColorlessManaAbility;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.game.permanent.token.custom.CreatureToken;
+
+/**
+ * @author TheElk801
+ */
+public final class MutavaultToken extends TokenImpl {
+
+ public MutavaultToken() {
+ super("Mutavault", "Mutavault token");
+ cardType.add(CardType.LAND);
+
+ // {tap}: Add {C}.
+ this.addAbility(new ColorlessManaAbility());
+
+ // {1}: Mutavault becomes a 2/2 creature with all creature types until end of turn. It's still a land.
+ this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
+ new CreatureToken(2, 2, "2/2 creature with all creature types")
+ .withAllCreatureTypes(true),
+ CardType.LAND, Duration.EndOfTurn
+ ), new GenericManaCost(1)));
+ }
+
+ private MutavaultToken(final MutavaultToken token) {
+ super(token);
+ }
+
+ public MutavaultToken copy() {
+ return new MutavaultToken(this);
+ }
+}
diff --git a/Mage/src/main/java/mage/game/permanent/token/custom/CreatureToken.java b/Mage/src/main/java/mage/game/permanent/token/custom/CreatureToken.java
index eb2e87400d0..71a845f06ad 100644
--- a/Mage/src/main/java/mage/game/permanent/token/custom/CreatureToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/custom/CreatureToken.java
@@ -73,6 +73,11 @@ public final class CreatureToken extends TokenImpl {
return this;
}
+ public CreatureToken withAllCreatureTypes(boolean allCreatureTypes) {
+ this.subtype.setIsAllCreatureTypes(allCreatureTypes);
+ return this;
+ }
+
private CreatureToken(final CreatureToken token) {
super(token);
}
diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java
index 2b1ed1937c6..e9de92a4a63 100644
--- a/Mage/src/main/java/mage/game/stack/Spell.java
+++ b/Mage/src/main/java/mage/game/stack/Spell.java
@@ -20,7 +20,6 @@ import mage.game.MageObjectAttribute;
import mage.game.events.CopiedStackObjectEvent;
import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
-import mage.game.permanent.PermanentCard;
import mage.game.permanent.token.Token;
import mage.players.Player;
import mage.util.CardUtil;
@@ -335,45 +334,39 @@ public class Spell extends StackObjectImpl implements Card {
counter(null, /*this.getSpellAbility()*/ game);
return false;
} else if (this.isEnchantment(game) && this.hasSubtype(SubType.AURA, game)) {
+ boolean bestow = SpellAbilityCastMode.BESTOW.equals(ability.getSpellAbilityCastMode());
if (ability.getTargets().stillLegal(ability, game)) {
- boolean bestow = SpellAbilityCastMode.BESTOW.equals(ability.getSpellAbilityCastMode());
if (bestow) {
// before put to play:
// Must be removed first time, after that will be removed by continous effect
// Otherwise effects like evolve trigger from creature comes into play event
- card.removeCardType(CardType.CREATURE);
- card.addSubType(game, SubType.AURA);
+ BestowAbility.becomeAura(game, card);
}
UUID permId;
- boolean flag;
+ boolean permanentCreated;
if (isCopy()) {
Token token = CopyTokenFunction.createTokenCopy(card, game, this);
// The token that a resolving copy of a spell becomes isn’t said to have been “created.” (2020-09-25)
if (token.putOntoBattlefield(1, game, ability, getControllerId(), false, false, null, null, false)) {
permId = token.getLastAddedTokenIds().stream().findFirst().orElse(null);
- flag = true;
+ permanentCreated = true;
} else {
permId = null;
- flag = false;
+ permanentCreated = false;
}
} else {
permId = card.getId();
MageObjectReference mor = new MageObjectReference(getSpellAbility());
game.storePermanentCostsTags(mor, getSpellAbility());
- flag = controller.moveCards(card, Zone.BATTLEFIELD, ability, game, false, faceDown, false, null);
+ permanentCreated = controller.moveCards(card, Zone.BATTLEFIELD, ability, game, false, faceDown, false, null);
}
- if (flag) {
+ if (permanentCreated) {
if (bestow) {
- // card will be copied during putOntoBattlefield, so the card of CardPermanent has to be changed
- // TODO: Find a better way to prevent bestow creatures from being effected by creature affecting abilities
Permanent permanent = game.getPermanent(permId);
- if (permanent instanceof PermanentCard) {
- // after put to play:
- // restore removed stats (see "before put to play" above)
- permanent.setSpellAbility(ability); // otherwise spell ability without bestow will be set
- card.addCardType(CardType.CREATURE);
- card.getSubtype().remove(SubType.AURA);
- }
+ permanent.setSpellAbility(ability); // otherwise spell ability without bestow will be set
+ // The continuous effect that makes the permanent an aura doesn't apply until after the permanent has already entered,
+ // so it must be modified manually here first. Same root cause as the Blood Moon problem https://github.com/magefree/mage/issues/4202
+ BestowAbility.becomeAura(game, permanent);
}
if (isCopy()) {
Permanent token = game.getPermanent(permId);
@@ -381,7 +374,8 @@ public class Spell extends StackObjectImpl implements Card {
return false;
}
for (Ability ability2 : token.getAbilities()) {
- if (!bestow || ability2 instanceof BestowAbility) {
+ if (ability2 instanceof SpellAbility && ability2.getTargets().size() == 1) {
+ // Copy aura SpellAbility's targets into the new token's SpellAbility
ability2.getTargets().get(0).add(ability.getFirstTarget(), game);
ability2.getEffects().get(0).apply(game, ability2);
return ability2.resolve(game);
@@ -391,24 +385,13 @@ public class Spell extends StackObjectImpl implements Card {
}
return ability.resolve(game);
}
- if (bestow) {
- card.addCardType(game, CardType.CREATURE);
- }
return false;
}
// Aura has no legal target and its a bestow enchantment -> Add it to battlefield as creature
- if (SpellAbilityCastMode.BESTOW.equals(this.getSpellAbility().getSpellAbilityCastMode())) {
+ if (bestow) {
MageObjectReference mor = new MageObjectReference(getSpellAbility());
game.storePermanentCostsTags(mor, getSpellAbility());
- if (controller.moveCards(card, Zone.BATTLEFIELD, ability, game, false, faceDown, false, null)) {
- Permanent permanent = game.getPermanent(card.getId());
- if (permanent instanceof PermanentCard) {
- ((PermanentCard) permanent).getCard().addCardType(game, CardType.CREATURE);
- ((PermanentCard) permanent).getCard().removeSubType(game, SubType.AURA);
- return true;
- }
- }
- return false;
+ return controller.moveCards(card, Zone.BATTLEFIELD, ability, game, false, faceDown, false, null);
} else {
//20091005 - 608.2b
if (!game.isSimulation()) {
@@ -585,10 +568,8 @@ public class Spell extends StackObjectImpl implements Card {
return cardTypes;
}
if (SpellAbilityCastMode.BESTOW.equals(this.getSpellAbility().getSpellAbilityCastMode())) {
- List cardTypes = new ArrayList<>();
- cardTypes.addAll(card.getCardType(game));
- cardTypes.remove(CardType.CREATURE);
- return cardTypes;
+ Card modifiedCard = this.getSpellAbility().getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(card, this.getSpellAbility(), game);
+ return modifiedCard.getCardType(game);
}
return card.getCardType(game);
}
@@ -600,26 +581,19 @@ public class Spell extends StackObjectImpl implements Card {
@Override
public SubTypes getSubtype(Game game) {
+ // Bestow's changes are non-copiable, and must be reapplied
if (SpellAbilityCastMode.BESTOW.equals(this.getSpellAbility().getSpellAbilityCastMode())) {
- SubTypes subtypes = card.getSubtype(game);
- if (!subtypes.contains(SubType.AURA)) { // do it only once
- subtypes.add(SubType.AURA);
- }
- return subtypes;
+ Card modifiedCard = this.getSpellAbility().getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(card, this.getSpellAbility(), game);
+ return modifiedCard.getSubtype();
}
return card.getSubtype(game);
}
@Override
public boolean hasSubtype(SubType subtype, Game game) {
- if (SpellAbilityCastMode.BESTOW.equals(this.getSpellAbility().getSpellAbilityCastMode())) { // workaround for Bestow (don't like it)
- SubTypes subtypes = card.getSubtype(game);
- if (!subtypes.contains(SubType.AURA)) { // do it only once
- subtypes.add(SubType.AURA);
- }
- if (subtypes.contains(subtype)) {
- return true;
- }
+ if (SpellAbilityCastMode.BESTOW.equals(this.getSpellAbility().getSpellAbilityCastMode())) {
+ Card modifiedCard = this.getSpellAbility().getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(card, this.getSpellAbility(), game);
+ return modifiedCard.hasSubtype(subtype, game);
}
return card.hasSubtype(subtype, game);
}
diff --git a/Mage/src/main/java/mage/util/validation/PartnerFatherAndSonValidator.java b/Mage/src/main/java/mage/util/validation/PartnerFatherAndSonValidator.java
new file mode 100644
index 00000000000..17b1d3b18fe
--- /dev/null
+++ b/Mage/src/main/java/mage/util/validation/PartnerFatherAndSonValidator.java
@@ -0,0 +1,16 @@
+package mage.util.validation;
+
+import mage.abilities.keyword.PartnerFatherAndSonAbility;
+import mage.cards.Card;
+
+/**
+ * @author TheElk801
+ */
+public enum PartnerFatherAndSonValidator implements CommanderValidator {
+ instance;
+
+ @Override
+ public boolean checkPartner(Card commander1, Card commander2) {
+ return commander1.getAbilities().containsClass(PartnerFatherAndSonAbility.class);
+ }
+}
diff --git a/Mage/src/main/java/mage/util/validation/PartnerSurvivorsValidator.java b/Mage/src/main/java/mage/util/validation/PartnerSurvivorsValidator.java
new file mode 100644
index 00000000000..46e086fae85
--- /dev/null
+++ b/Mage/src/main/java/mage/util/validation/PartnerSurvivorsValidator.java
@@ -0,0 +1,16 @@
+package mage.util.validation;
+
+import mage.abilities.keyword.PartnerSurvivorsAbility;
+import mage.cards.Card;
+
+/**
+ * @author TheElk801
+ */
+public enum PartnerSurvivorsValidator implements CommanderValidator {
+ instance;
+
+ @Override
+ public boolean checkPartner(Card commander1, Card commander2) {
+ return commander1.getAbilities().containsClass(PartnerSurvivorsAbility.class);
+ }
+}
diff --git a/Mage/src/main/resources/brackets/infinite-combos.txt b/Mage/src/main/resources/brackets/infinite-combos.txt
index 534ba1e1e05..ace09000b71 100644
--- a/Mage/src/main/resources/brackets/infinite-combos.txt
+++ b/Mage/src/main/resources/brackets/infinite-combos.txt
@@ -2,420 +2,389 @@
# Format: name1@name2 - any order, any card names, can duplicates
# Generated by verify test VerifyCardDataTest.downloadAndPrepareCommanderBracketsData
# Source: https://commanderspellbook.com
-# Updated: 2025-06-06
-# Found: 1988
-Bloodchief Ascension@Mindcrank
-Zaxara, the Exemplary@Freed from the Real
-Brallin, Skyshark Rider@Ophidian Eye
-Krosan Restorer@Ashaya, Soul of the Wild
-Animar, Soul of Elements@Ancestral Statue
-Leonin Relic-Warder@Animate Dead
-Hapatra, Vizier of Poisons@Blowfly Infestation
-Tooth and Claw@Primal Vigor
-Twincast@Reverberate
-Stormfront Riders@Cryptic Gateway
-Molten Echoes@Felidar Guardian
-Palinchron@Flameshadow Conjuring
-Painter's Servant@Grindstone
-Intruder Alarm@Krenko, Mob Boss
-Conspiracy@Turntimber Ranger
-Opalescence@Parallax Wave
-Erratic Portal@Emrakul, the Aeons Torn
-Pili-Pala@Grand Architect
-Freed from the Real@Ley Weaver
-Faeburrow Elder@Freed from the Real
-Vraska, Swarm's Eminence@Walking Ballista
-Staff of Domination@Selvala, Heart of the Wilds
-Molten Echoes@Wispweaver Angel
-Devoted Druid@One with the Stars
-Dramatic Reversal@Isochron Scepter
-Peregrine Drake@Deadeye Navigator
-Sekki, Seasons' Guide@Warstorm Surge
-Worldgorger Dragon@Molten Echoes
-Niv-Mizzet, the Firemind@Tandem Lookout
-The Locust God@Sage of the Falls
-Glint-Horn Buccaneer@Ophidian Eye
-Godo, Bandit Warlord@Helm of the Host
-Muldrotha, the Gravetide@Second Chance
-Boros Reckoner@Avacyn, Angel of Hope
-Venser, Shaper Savant@Intruder Alarm
-The Locust God@Beck // Call
-Nekusar, the Mindrazer@Peer into the Abyss
-Temple Bell@Mind Over Matter
-Guile@Void Mirror
-Famished Paladin@Sorcerer's Wand
-Mephidross Vampire@Walking Ballista
-Panoptic Mirror@Time Warp
-Thousand-Year Storm@Spelljack
-Intruder Alarm@Whitemane Lion
-Grumgully, the Generous@Aerie Ouphes
-Goblin Sharpshooter@Splinter Twin
-Animate Dead@Worldgorger Dragon
-Seedcradle Witch@Wirewood Channeler
-Mephidross Vampire@Triskelion
-Great Whale@Deadeye Navigator
-Guile@Cephalid Shrine
-Molten Echoes@Wanderwine Prophets
-Scourge of the Skyclaves@Archfiend of Despair
-Cryptic Trilobite@Enduring Renewal
-Walking Ballista@Mikaeus, the Unhallowed
-Stonecoil Serpent@Enduring Renewal
-Bladewing the Risen@Heat Shimmer
-Archon of Sun's Grace@Enchanted Evening
-Leonin Relic-Warder@Phyrexian Metamorph
-Necrotic Ooze@Kiki-Jiki, Mirror Breaker
-Aminatou, the Fateshifter@Felidar Guardian
-Azami, Lady of Scrolls@Mind Over Matter
-Reset@Reiterate
-Dockside Extortionist@Barrin, Master Wizard
-Sea Gate Loremaster@Mind Over Matter
-Spawnsire of Ulamog@Training Grounds
-Aggravated Assault@Nature's Will
-Kiki-Jiki, Mirror Breaker@Deceiver Exarch
-Kiki-Jiki, Mirror Breaker@Trumpeting Gnarr
-Walking Ballista@Enduring Renewal
-Kiki-Jiki, Mirror Breaker@Hyrax Tower Scout
-Basalt Monolith@Forsaken Monument
-Rakdos, Lord of Riots@Ancestral Statue
-Hangarback Walker@Enduring Renewal
-Charmbreaker Devils@Time Warp
-Ral, Storm Conduit@Chain of Smog
-Leonin Relic-Warder@Dance of the Dead
-Naru Meha, Master Wizard@Sublime Epiphany
-Dockside Extortionist@Temur Sabertooth
-Kiki-Jiki, Mirror Breaker@Dirge Bat
-Brallin, Skyshark Rider@Curiosity
-Ilharg, the Raze-Boar@Medomai the Ageless
-Intruder Alarm@Drana's Chosen
-Filigree Sages@Chromatic Orrery
-Palinchron@Caged Sun
-Combat Celebrant@Splinter Twin
-Jolrael, Empress of Beasts@Aggravated Assault
-Saheeli Rai@Felidar Guardian
-Zaxara, the Exemplary@Pemmin's Aura
-Dualcaster Mage@Release to the Wind
-Heliod, Sun-Crowned@Walking Ballista
-Splinter Twin@Zealous Conscripts
-Leonin Relic-Warder@Mycosynth Lattice
-Neheb, Dreadhorde Champion@Aggravated Assault
-Nivix Guildmage@Brass's Bounty
-Pemmin's Aura@Krosan Restorer
-Aluren@Cloudstone Curio
-Brallin, Skyshark Rider@Keen Sense
-Mana Geyser@Reiterate
-Brudiclad, Telchor Engineer@Breath of Fury
-Mana Geyser@Reiterate
-Devoted Druid@One with the Stars
-Archon of Sun's Grace@Enchanted Evening
-Kiki-Jiki, Mirror Breaker@Trumpeting Gnarr
-Earthcraft@Spawning Grounds
-Aluren@Cloudstone Curio
-Scourge of the Skyclaves@Archfiend of Despair
-Twincast@Reverberate
-Cryptic Trilobite@Enduring Renewal
-Reality Spasm@Reiterate
-Walking Ballista@Mikaeus, the Unhallowed
-Sekki, Seasons' Guide@Warstorm Surge
-Basalt Monolith@Mesmeric Orb
-Spawnsire of Ulamog@Parallel Lives
-Seedcradle Witch@Wirewood Channeler
-Intruder Alarm@Whitemane Lion
-Wispweaver Angel@Felidar Guardian
-Faeburrow Elder@Freed from the Real
-Grumgully, the Generous@Aerie Ouphes
-Boros Reckoner@Avacyn, Angel of Hope
-Intruder Alarm@Krenko, Mob Boss
-Kiki-Jiki, Mirror Breaker@Deceiver Exarch
-Guile@Void Mirror
-Freed from the Real@Ley Weaver
-Kiki-Jiki, Mirror Breaker@Dirge Bat
-Niv-Mizzet, Parun@Ophidian Eye
-Walking Ballista@Enduring Renewal
-Reset@Reiterate
-Dockside Extortionist@Barrin, Master Wizard
-Heliod, Sun-Crowned@Walking Ballista
-Pemmin's Aura@Krosan Restorer
+# Updated: 2025-10-06
+# Found: 1903
+Estrid, the Masked@The Chain Veil
+Captain of the Mists@Splinter Twin
Burnt Offering@Reiterate
-Opalescence@Parallax Wave
-Goblin Sharpshooter@Splinter Twin
-Hapatra, Vizier of Poisons@Blowfly Infestation
-Rakdos, Lord of Riots@Ancestral Statue
-Dramatic Reversal@Isochron Scepter
-Peregrine Drake@Deadeye Navigator
-Kiki-Jiki, Mirror Breaker@Hyrax Tower Scout
-Sydri, Galvanic Genius@Aetherflux Reservoir
-Chain of Acid@Ral, Storm Conduit
-Stonecoil Serpent@Enduring Renewal
-Leonin Relic-Warder@Animate Dead
-Conspiracy@Turntimber Ranger
-Spike Feeder@Sunbond
-Mephidross Vampire@Triskelion
-Dockside Extortionist@Temur Sabertooth
-Venser, Shaper Savant@Intruder Alarm
-Azami, Lady of Scrolls@Mind Over Matter
-Hangarback Walker@Enduring Renewal
-Charmbreaker Devils@Time Warp
-Molten Echoes@Wispweaver Angel
-Godo, Bandit Warlord@Helm of the Host
-Mephidross Vampire@Walking Ballista
-Leonin Relic-Warder@Dance of the Dead
-Animate Dead@Worldgorger Dragon
-Temple Bell@Mind Over Matter
-Naru Meha, Master Wizard@Sublime Epiphany
-Parallax Wave@Felidar Guardian
-Wakeroot Elemental@Growing Rites of Itlimoc // Itlimoc, Cradle of the Sun
-Zaxara, the Exemplary@Freed from the Real
-Hellkite Charger@Bear Umbra
-Brallin, Skyshark Rider@Curiosity
-Worldgorger Dragon@Molten Echoes
-Spawnsire of Ulamog@Training Grounds
-The Locust God@Sage of the Falls
-Intruder Alarm@Drana's Chosen
-Stormfront Riders@Cryptic Gateway
-Vraska, Swarm's Eminence@Walking Ballista
-Great Whale@Deadeye Navigator
-Thousand-Year Storm@Spelljack
-Filigree Sages@Chromatic Orrery
-Staff of Domination@Selvala, Heart of the Wilds
-Necrotic Ooze@Kiki-Jiki, Mirror Breaker
-Jolrael, Empress of Beasts@Aggravated Assault
-Muldrotha, the Gravetide@Second Chance
-Saheeli Rai@Felidar Guardian
-Famished Paladin@Sorcerer's Wand
-Lion's Eye Diamond@Auriok Salvagers
-Painter's Servant@Grindstone
-Dualcaster Mage@Release to the Wind
-Charmbreaker Devils@Time Walk
-Ceaseless Searblades@Lavaclaw Reaches
-Combat Celebrant@Splinter Twin
-Splinter Twin@Zealous Conscripts
-Bladewing the Risen@Heat Shimmer
-Basalt Monolith@Forsaken Monument
-Leonin Relic-Warder@Mycosynth Lattice
-Leonin Relic-Warder@Phyrexian Metamorph
-Neheb, Dreadhorde Champion@Aggravated Assault
-Nivix Guildmage@Brass's Bounty
-Molten Echoes@Wanderwine Prophets
-Aminatou, the Fateshifter@Felidar Guardian
-Ral, Storm Conduit@Chain of Smog
-Panoptic Mirror@Time Warp
-Reset@Izzet Guildmage
-Brallin, Skyshark Rider@Keen Sense
-Zaxara, the Exemplary@Pemmin's Aura
-Sea Gate Loremaster@Mind Over Matter
-Boros Reckoner@Gift of Doom
-Panoptic Mirror@Time Warp
-Niv-Mizzet, the Firemind@Tandem Lookout
-Mana Geyser@Reiterate
-Palinchron@Flameshadow Conjuring
-Guile@Void Mirror
-Freed from the Real@Gyre Engineer
-Archon of Sun's Grace@Enchanted Evening
-Devoted Druid@One with the Stars
-Kiki-Jiki, Mirror Breaker@Trumpeting Gnarr
-Staff of Domination@Selvala, Heart of the Wilds
-Vraska, Swarm's Eminence@Triskelion
-Worldgorger Dragon@Molten Echoes
-Aggravated Assault@Nature's Will
-Aluren@Cloudstone Curio
-Scourge of the Skyclaves@Archfiend of Despair
-Tooth and Claw@Primal Vigor
-Sekki, Seasons' Guide@Warstorm Surge
-Endless One@Enduring Renewal
-Cryptic Trilobite@Enduring Renewal
-Boros Reckoner@Boros Charm
-Glarecaster@Volcano Hellion
-Spawnsire of Ulamog@Parallel Lives
-Walking Ballista@Mikaeus, the Unhallowed
+Brudiclad, Telchor Engineer@Breath of Fury
+Brallin, Skyshark Rider@Ophidian Eye
+Bloodchief Ascension@Mindcrank
Seeker of Skybreak@Wake Thrasher
-Grumgully, the Generous@Aerie Ouphes
-Dramatic Reversal@Isochron Scepter
-Grim Monolith@Mana Reflection
-Wakeroot Elemental@Growing Rites of Itlimoc // Itlimoc, Cradle of the Sun
-Ral, Storm Conduit@Chain of Smog
-Soulfire Grand Master@Temporal Manipulation
-Aminatou, the Fateshifter@Felidar Guardian
-Molten Echoes@Wanderwine Prophets
-Arixmethes, Slumbering Isle@Freed from the Real
-Basalt Monolith@Mana Reflection
-Enduring Renewal@Ashnod's Altar
-Lithoform Engine@Sands of Time
-Intruder Alarm@Krenko, Mob Boss
-Heliod, Sun-Crowned@Walking Ballista
-Hellkite Charger@Bear Umbra
-Shrieking Drake@Earthcraft
-Spawnsire of Ulamog@Training Grounds
-Molten Echoes@Felidar Guardian
-Boros Reckoner@Avacyn, Angel of Hope
-Freed from the Real@Argothian Elder
-Kiki-Jiki, Mirror Breaker@Deceiver Exarch
-The Locust God@Sage of the Falls
-Earthcraft@Spawning Grounds
-Freed from the Real@Ley Weaver
-Molten Echoes@Wispweaver Angel
-Muldrotha, the Gravetide@Second Chance
-Mephidross Vampire@Walking Ballista
-Charmbreaker Devils@Time Walk
-Timestream Navigator@Grenzo, Dungeon Warden
-Spawnsire of Ulamog@Illusionist's Bracers
-Walking Ballista@Enduring Renewal
-Scourge of the Skyclaves@Wound Reflection
-Reset@Reiterate
-Lion's Eye Diamond@Auriok Salvagers
-Dockside Extortionist@Barrin, Master Wizard
-Kiki-Jiki, Mirror Breaker@Cavern Whisperer
-Spike Feeder@Sunbond
+Sydri, Galvanic Genius@Aetherflux Reservoir
+Zaxara, the Exemplary@Freed from the Real
Krosan Restorer@Ashaya, Soul of the Wild
-Niv-Mizzet, Parun@Ophidian Eye
-Vizkopa Guildmage@Revival // Revenge
+Twincast@Reverberate
+Glint-Horn Buccaneer@Ophidian Eye
+Pili-Pala@Grand Architect
+Faeburrow Elder@Freed from the Real
+Conspiracy@Turntimber Ranger
Ceaseless Searblades@Lavaclaw Reaches
+Stormfront Riders@Cryptic Gateway
+Opalescence@Parallax Wave
+Freed from the Real@Ley Weaver
+Leonin Relic-Warder@Animate Dead
+Intruder Alarm@Krenko, Mob Boss
+Molten Echoes@Felidar Guardian
+Molten Echoes@Wanderwine Prophets
+Mephidross Vampire@Walking Ballista
+Pemmin's Aura@Krosan Restorer
+Aminatou, the Fateshifter@Felidar Guardian
+Palinchron@Flameshadow Conjuring
+Worldgorger Dragon@Molten Echoes
+Nekusar, the Mindrazer@Peer into the Abyss
+Hapatra, Vizier of Poisons@Blowfly Infestation
+The Locust God@Sage of the Falls
+Combat Celebrant@Splinter Twin
+Ancestral Statue@Animar, Soul of Elements
+Guile@Void Mirror
+Animate Dead@Worldgorger Dragon
+Naru Meha, Master Wizard@Sublime Epiphany
+Muldrotha, the Gravetide@Second Chance
+Kiki-Jiki, Mirror Breaker@Dirge Bat
+Heliod, Sun-Crowned@Walking Ballista
+Painter's Servant@Grindstone
+The Locust God@Beck // Call
Famished Paladin@Sorcerer's Wand
-Burnt Offering@Reiterate
+Erratic Portal@Emrakul, the Aeons Torn
+Basalt Monolith@Forsaken Monument
+Boros Reckoner@Avacyn, Angel of Hope
+Molten Echoes@Wispweaver Angel
+Guile@Cephalid Shrine
+Grumgully, the Generous@Aerie Ouphes
+Nivix Guildmage@Brass's Bounty
+Peregrine Drake@Deadeye Navigator
+Intruder Alarm@Whitemane Lion
+Scourge of the Skyclaves@Archfiend of Despair
+Cryptic Trilobite@Enduring Renewal
+Walking Ballista@Mikaeus, the Unhallowed
+Devoted Druid@One with the Stars
+Goblin Sharpshooter@Splinter Twin
+Dockside Extortionist@Temur Sabertooth
+Thousand-Year Storm@Spelljack
+Dockside Extortionist@Barrin, Master Wizard
+Necrotic Ooze@Kiki-Jiki, Mirror Breaker
+Seedcradle Witch@Wirewood Channeler
+Reset@Reiterate
+Spawnsire of Ulamog@Training Grounds
+Filigree Sages@Chromatic Orrery
+Stonecoil Serpent@Enduring Renewal
+Aluren@Cloudstone Curio
+Zaxara, the Exemplary@Pemmin's Aura
+Dramatic Reversal@Isochron Scepter
+Vraska, Swarm's Eminence@Walking Ballista
+Leonin Relic-Warder@Phyrexian Metamorph
+Niv-Mizzet, the Firemind@Tandem Lookout
+Mephidross Vampire@Triskelion
+Hangarback Walker@Enduring Renewal
+Charmbreaker Devils@Time Warp
+Bladewing the Risen@Heat Shimmer
+Leonin Relic-Warder@Dance of the Dead
+Brallin, Skyshark Rider@Curiosity
+Great Whale@Deadeye Navigator
+Panoptic Mirror@Time Warp
+Intruder Alarm@Drana's Chosen
+Palinchron@Caged Sun
+Staff of Domination@Selvala, Heart of the Wilds
+Jolrael, Empress of Beasts@Aggravated Assault
+Sekki, Seasons' Guide@Warstorm Surge
+Saheeli Rai@Felidar Guardian
+Venser, Shaper Savant@Intruder Alarm
+Godo, Bandit Warlord@Helm of the Host
+Splinter Twin@Zealous Conscripts
+Leonin Relic-Warder@Mycosynth Lattice
+Neheb, Dreadhorde Champion@Aggravated Assault
+Mind Over Matter@Azami, Lady of Scrolls
+Walking Ballista@Enduring Renewal
+Brallin, Skyshark Rider@Keen Sense
+Aggravated Assault@Nature's Will
+Ilharg, the Raze-Boar@Medomai the Ageless
+Mana Geyser@Reiterate
+Ral, Storm Conduit@Chain of Smog
+Enchanted Evening@Archon of Sun's Grace
+Kiki-Jiki, Mirror Breaker@Trumpeting Gnarr
+Freed from the Real@Argothian Elder
+Aluren@Cloudstone Curio
+Spawnsire of Ulamog@Parallel Lives
+Krosan Restorer@Ashaya, Soul of the Wild
+Reset@Izzet Guildmage
+Scourge of the Skyclaves@Archfiend of Despair
+Aminatou, the Fateshifter@Felidar Guardian
+Cryptic Trilobite@Enduring Renewal
+Vraska, Swarm's Eminence@Walking Ballista
+Walking Ballista@Mikaeus, the Unhallowed
+Hellkite Charger@Bear Umbra
+Seedcradle Witch@Selvala, Heart of the Wilds
+Bloodchief Ascension@Mindcrank
+Faeburrow Elder@Freed from the Real
+Kiki-Jiki, Mirror Breaker@Dreamtail Heron
+Kiki-Jiki, Mirror Breaker@Wispweaver Angel
+Famished Paladin@Sorcerer's Wand
+Molten Echoes@Felidar Guardian
+Walking Ballista@Enduring Renewal
+Dockside Extortionist@Barrin, Master Wizard
+Staff of Domination@Selvala, Heart of the Wilds
+Pemmin's Aura@Krosan Restorer
+Dramatic Reversal@Isochron Scepter
+Wakeroot Elemental@Growing Rites of Itlimoc // Itlimoc, Cradle of the Sun
+Spawnsire of Ulamog@Training Grounds
+Goblin Sharpshooter@Splinter Twin
+Reset@Reiterate
+Palinchron@Flameshadow Conjuring
+Peregrine Drake@Deadeye Navigator
+Painter's Servant@Grindstone
+Animate Dead@Worldgorger Dragon
+Brudiclad, Telchor Engineer@Breath of Fury
+Stonecoil Serpent@Enduring Renewal
+Captain of the Mists@Splinter Twin
+The Locust God@Beck // Call
+Grim Monolith@Nyxbloom Ancient
+Mephidross Vampire@Triskelion
+Dockside Extortionist@Temur Sabertooth
+Muldrotha, the Gravetide@Second Chance
+Mind Over Matter@Azami, Lady of Scrolls
+Estrid, the Masked@The Chain Veil
+Ancestral Statue@Animar, Soul of Elements
+Molten Echoes@Wanderwine Prophets
+Ceaseless Searblades@Lavaclaw Reaches
+Reality Spasm@Reiterate
+Godo, Bandit Warlord@Helm of the Host
+Kiki-Jiki, Mirror Breaker@Dirge Bat
+Hangarback Walker@Enduring Renewal
+Naru Meha, Master Wizard@Sublime Epiphany
+Charmbreaker Devils@Time Warp
+Leonin Relic-Warder@Animate Dead
+Brallin, Skyshark Rider@Ophidian Eye
+Grim Monolith@Mana Reflection
+Leonin Relic-Warder@Dance of the Dead
+Sydri, Galvanic Genius@Aetherflux Reservoir
+Brallin, Skyshark Rider@Curiosity
+Intruder Alarm@Whitemane Lion
+Molten Echoes@Wispweaver Angel
+Great Whale@Deadeye Navigator
+Thousand-Year Storm@Spelljack
+Filigree Sages@Chromatic Orrery
+Intruder Alarm@Drana's Chosen
+Necrotic Ooze@Kiki-Jiki, Mirror Breaker
+Palinchron@Caged Sun
+Crackdown Construct@Basalt Monolith
+Hapatra, Vizier of Poisons@Blowfly Infestation
+Nekusar, the Mindrazer@Peer into the Abyss
+Jolrael, Empress of Beasts@Aggravated Assault
+Intruder Alarm@Krenko, Mob Boss
+Guile@Void Mirror
+Pili-Pala@Grand Architect
+Saheeli Rai@Felidar Guardian
+Zaxara, the Exemplary@Freed from the Real
+Combat Celebrant@Splinter Twin
+Soulfire Grand Master@Temporal Manipulation
+Bladewing the Risen@Heat Shimmer
+Basalt Monolith@Forsaken Monument
+Splinter Twin@Zealous Conscripts
+Leonin Relic-Warder@Phyrexian Metamorph
+Leonin Relic-Warder@Mycosynth Lattice
+Earthcraft@Spawning Grounds
+Neheb, Dreadhorde Champion@Aggravated Assault
+Freed from the Real@Argothian Elder
+Venser, Shaper Savant@Intruder Alarm
+Palinchron@Molten Echoes
+Twincast@Reverberate
+Boros Reckoner@Avacyn, Angel of Hope
+Brallin, Skyshark Rider@Keen Sense
+Panoptic Mirror@Time Warp
+Niv-Mizzet, the Firemind@Tandem Lookout
+Ral, Storm Conduit@Chain of Smog
+Ilharg, the Raze-Boar@Medomai the Ageless
+Guile@Cephalid Shrine
+Devoted Druid@One with the Stars
+Mana Geyser@Reiterate
+Zaxara, the Exemplary@Pemmin's Aura
+Seedcradle Witch@Wirewood Channeler
+Aggravated Assault@Nature's Will
+Enchanted Evening@Archon of Sun's Grace
+Kiki-Jiki, Mirror Breaker@Trumpeting Gnarr
+Boros Reckoner@Indestructibility
+Sekki, Seasons' Guide@Warstorm Surge
+Nivix Guildmage@Brass's Bounty
+Aluren@Cloudstone Curio
+Worldgorger Dragon@Molten Echoes
+Charmbreaker Devils@Time Walk
+Ley Weaver@Maze of Ith
+Leonin Relic-Warder@Animate Dead
+Intruder Alarm@Krenko, Mob Boss
+Naru Meha, Master Wizard@Ghostly Flicker
+Basalt Monolith@Nyxbloom Ancient
+Scourge of the Skyclaves@Archfiend of Despair
+Ral, Storm Conduit@Chain of Smog
+Kiki-Jiki, Mirror Breaker@Dreamtail Heron
+Aminatou, the Fateshifter@Felidar Guardian
+Cryptic Trilobite@Enduring Renewal
+Freed from the Real@Ley Weaver
+Wakeroot Elemental@Nykthos, Shrine to Nyx
+Palinchron@Nyxbloom Ancient
+Walking Ballista@Mikaeus, the Unhallowed
+Molten Echoes@Wanderwine Prophets
+Turnabout@Reiterate
+Spawnsire of Ulamog@Training Grounds
+Ceaseless Searblades@Lavaclaw Reaches
+Boros Reckoner@Avacyn, Angel of Hope
+Sydri, Galvanic Genius@Aetherflux Reservoir
+Soulfire Grand Master@Temporal Manipulation
+The Locust God@Sage of the Falls
+Palinchron@Flameshadow Conjuring
+Nivix Guildmage@Channel the Suns
+Famished Paladin@Sorcerer's Wand
+Seedcradle Witch@Selvala, Heart of the Wilds
+Intruder Alarm@Shrieking Drake
+Hapatra, Vizier of Poisons@Blowfly Infestation
+Boros Reckoner@Indestructibility
+Spawnsire of Ulamog@Zirda, the Dawnwaker
+Grim Monolith@Nyxbloom Ancient
+Walking Ballista@Enduring Renewal
+Stormfront Riders@Cryptic Gateway
+Dockside Extortionist@Barrin, Master Wizard
+Glint-Horn Buccaneer@Ophidian Eye
+Palinchron@Extraplanar Lens
+Kiki-Jiki, Mirror Breaker@Wispweaver Angel
+Guilty Conscience@Stuffy Doll
+Sword of the Paruns@Kydele, Chosen of Kruphix
+Argothian Elder@Maze of Ith
+Earthcraft@Spawning Grounds
+Oasis Ritualist@Freed from the Real
+Mycosynth Golem@Ancestral Statue
Seedcradle Witch@Wirewood Channeler
Godo, Bandit Warlord@Helm of the Host
Goblin Sharpshooter@Splinter Twin
-The Locust God@Beck // Call
-Kiki-Jiki, Mirror Breaker@Hyrax Tower Scout
+Burnt Offering@Reiterate
Zaxara, the Exemplary@Pemmin's Aura
-Rakdos, Lord of Riots@Ancestral Statue
-Nekusar, the Mindrazer@Peer into the Abyss
-Wakeroot Elemental@Nykthos, Shrine to Nyx
+Reset@Reiterate
+Fiend Hunter@Dual Nature
+Grumgully, the Generous@Aerie Ouphes
Peregrine Drake@Deadeye Navigator
+Ancestral Statue@Animar, Soul of Elements
Intruder Alarm@Whitemane Lion
-Naru Meha, Master Wizard@Ghostly Flicker
+Teferi, Temporal Archmage@The Chain Veil
+Nivix Guildmage@Dramatic Reversal
Venser, Shaper Savant@Intruder Alarm
-Soulfire Grand Master@Walk the Aeons
-Stormfront Riders@Cryptic Gateway
-Soulfire Grand Master@Time Walk
-Tooth and Claw@Parallel Lives
+Spawnsire of Ulamog@Mana Echoes
+Eye of the Storm@Spellshift
Stonecoil Serpent@Enduring Renewal
-Zaxara, the Exemplary@Freed from the Real
-Parallax Wave@Felidar Guardian
-Ley Weaver@Maze of Ith
-Faeburrow Elder@Freed from the Real
-Kiki-Jiki, Mirror Breaker@Wispweaver Angel
-Crackdown Construct@Chimeric Idol
+Raptor Hatchling@Warstorm Surge
+Soulfire Grand Master@Capture of Jingzhou
+Kiki-Jiki, Mirror Breaker@Cavern Whisperer
+Seeker of Skybreak@Wake Thrasher
+Hellkite Charger@Bear Umbra
+Mesmeric Orb@Tidewater Minion
+Lithoform Engine@Sands of Time
Kiki-Jiki, Mirror Breaker@Dirge Bat
Mephidross Vampire@Triskelion
-Polyraptor@Forerunner of the Empire
Dockside Extortionist@Temur Sabertooth
+Zaxara, the Exemplary@Freed from the Real
+Molten Echoes@Felidar Guardian
+Staff of Domination@Selvala, Heart of the Wilds
+Mind Over Matter@Azami, Lady of Scrolls
+Parallax Wave@Felidar Guardian
+Basalt Monolith@Mana Reflection
+Chain of Acid@Ral, Storm Conduit
+Inalla, Archmage Ritualist@Wanderwine Prophets
Brudiclad, Telchor Engineer@Breath of Fury
-Brago, King Eternal@Strionic Resonator
-Palinchron@Nyxbloom Ancient
-Azami, Lady of Scrolls@Mind Over Matter
-Najeela, the Blade-Blossom@Derevi, Empyrial Tactician
-Hangarback Walker@Enduring Renewal
-Basalt Monolith@Nyxbloom Ancient
+Palinchron@Molten Echoes
Pemmin's Aura@Krosan Restorer
-Charmbreaker Devils@Time Warp
-Dualcaster Mage@Twinflame
-Basalt Monolith@Mesmeric Orb
-Raptor Hatchling@Warstorm Surge
+Kiki-Jiki, Mirror Breaker@Spark Double
+Phyrexian Marauder@Enduring Renewal
+Soulfire Grand Master@Walk the Aeons
+Vraska, Swarm's Eminence@Triskelion
+Pili-Pala@Grand Architect
Animate Dead@Worldgorger Dragon
Muldrotha, the Gravetide@Second Chance
-Naru Meha, Master Wizard@Ghostly Flicker
-Leonin Relic-Warder@Dance of the Dead
-Molten Echoes@Wispweaver Angel
+Twincast@Reverberate
+Hangarback Walker@Enduring Renewal
Heliod, Sun-Crowned@Walking Ballista
-Freed from the Real@Ley Weaver
-Temple Bell@Mind Over Matter
-Mesmeric Orb@Seeker of Skybreak
-The Locust God@Beck // Call
+Molten Echoes@Wispweaver Angel
Naru Meha, Master Wizard@Sublime Epiphany
+Charmbreaker Devils@Time Warp
+Seeker of Skybreak@Illusionist's Bracers
+The Locust God@Beck // Call
+Aerie Ouphes@Rhythm of the Wild
Boros Reckoner@Gift of Doom
-Nexus of Fate@Spellbinder
-Siona, Captain of the Pyleas@Shielded by Faith
-Sydri, Galvanic Genius@Aetherflux Reservoir
-Rings of Brighthearth@Basalt Monolith
-Brallin, Skyshark Rider@Tandem Lookout
-Tooth and Claw@Primal Vigor
-Bloodchief Ascension@Mindcrank
+Basalt Monolith@Mana Reflection
+Soulfire Grand Master@Capture of Jingzhou
+Polyraptor@Marauding Raptor
+Leonin Relic-Warder@Dance of the Dead
+Kiki-Jiki, Mirror Breaker@Wispweaver Angel
Vraska, Swarm's Eminence@Walking Ballista
+Kiki-Jiki, Mirror Breaker@Glowstone Recluse
Brallin, Skyshark Rider@Curiosity
-Burnt Offering@Reiterate
-Brudiclad, Telchor Engineer@Breath of Fury
-Arcanis the Omnipotent@Mind Over Matter
-Neheb, the Eternal@Aggravated Assault
-Parallax Wave@Felidar Guardian
-Reality Spasm@Reiterate
+Palinchron@High Tide
+Felidar Guardian@Restoration Angel
+Soulfire Grand Master@Temporal Manipulation
+Ley Weaver@Maze of Ith
Guile@Void Mirror
Grumgully, the Generous@Aerie Ouphes
-Battered Golem@Splinter Twin
-Boros Reckoner@Indestructibility
-Inalla, Archmage Ritualist@Wanderwine Prophets
-Zaxara, the Exemplary@Freed from the Real
Great Whale@Deadeye Navigator
-Animar, Soul of Elements@Ancestral Statue
Thousand-Year Storm@Spelljack
-Molten Echoes@Wanderwine Prophets
+Inalla, Archmage Ritualist@Wanderwine Prophets
Filigree Sages@Chromatic Orrery
-Kiki-Jiki, Mirror Breaker@Wispweaver Angel
-Glint-Horn Buccaneer@Ophidian Eye
-Planar Portal@Nexus of Fate
-Famished Paladin@Sorcerer's Wand
+Seeker of Skybreak@Illusionist's Bracers
+Intruder Alarm@Drana's Chosen
+Molten Echoes@Wanderwine Prophets
Necrotic Ooze@Kiki-Jiki, Mirror Breaker
+Glint-Horn Buccaneer@Ophidian Eye
+Palinchron@Caged Sun
+Famished Paladin@Sorcerer's Wand
+Duskmantle Guildmage@Mindcrank
+Soulfire Grand Master@Time Walk
+Naru Meha, Master Wizard@Ghostly Flicker
+Glarecaster@Volcano Hellion
+Crackdown Construct@Chimeric Idol
+Vizkopa Guildmage@Revival // Revenge
Jolrael, Empress of Beasts@Aggravated Assault
-Polyraptor@Forerunner of the Empire
-Kiki-Jiki, Mirror Breaker@Spark Double
-Gravecrawler@Phyrexian Altar
-Saheeli Rai@Felidar Guardian
-Faeburrow Elder@Freed from the Real
+Seeker of Skybreak@Wake Thrasher
Worldgorger Dragon@Molten Echoes
-Kiki-Jiki, Mirror Breaker@Breaching Hippocamp
-Maddening Cacophony@Bruvac the Grandiloquent
-Seedcradle Witch@Selvala, Heart of the Wilds
-Intruder Alarm@Kor Skyfisher
-Staff of Domination@Selvala, Heart of the Wilds
-Dualcaster Mage@Release to the Wind
-Lithoform Engine@Sands of Time
-Soulfire Grand Master@Capture of Jingzhou
+Crackdown Construct@Basalt Monolith
Zacama, Primal Calamity@Temur Sabertooth
-Charmbreaker Devils@Walk the Aeons
-Aetherflux Reservoir@March of the Machines
+Elite Arcanist@Nexus of Fate
+Magistrate's Scepter@Viral Drake
+Staff of Domination@Selvala, Heart of the Wilds
+Saheeli Rai@Felidar Guardian
+Kiki-Jiki, Mirror Breaker@Huntmaster Liger
+Palinchron@Deadeye Navigator
+Niv-Mizzet, Parun@Keen Sense
Combat Celebrant@Splinter Twin
-Soulfire Grand Master@Temporal Manipulation
-Molten Echoes@Felidar Guardian
-Splinter Twin@Zealous Conscripts
+Magus of the Coffers@Staff of Domination
+Soulfire Grand Master@Walk the Aeons
+Najeela, the Blade-Blossom@Faeburrow Elder
Bladewing the Risen@Heat Shimmer
-Stormfront Riders@Cryptic Gateway
+Twinning Staff@Dramatic Reversal
+Molten Echoes@Felidar Guardian
Basalt Monolith@Forsaken Monument
-Kiki-Jiki, Mirror Breaker@Timestream Navigator
-Leonin Relic-Warder@Mycosynth Lattice
-Reset@Nivix Guildmage
+Splinter Twin@Zealous Conscripts
+Palinchron@Extraplanar Lens
Leonin Relic-Warder@Phyrexian Metamorph
+Siona, Captain of the Pyleas@Shielded by Faith
+Leonin Relic-Warder@Mycosynth Lattice
+Basalt Monolith@Mesmeric Orb
Nekusar, the Mindrazer@Peer into the Abyss
+Parallax Wave@Felidar Guardian
Neheb, Dreadhorde Champion@Aggravated Assault
-Fury Storm@Ral, Storm Conduit
Dramatic Reversal@Isochron Scepter
-Nivix Guildmage@Brass's Bounty
-Timestream Navigator@Grenzo, Dungeon Warden
-Conspiracy@Turntimber Ranger
-Intruder Alarm@Shrieking Drake
-Brallin, Skyshark Rider@Ophidian Eye
-Painter's Servant@Grindstone
-Niv-Mizzet, Parun@Ophidian Eye
-Mycosynth Golem@Ancestral Statue
Wakeroot Elemental@Growing Rites of Itlimoc // Itlimoc, Cradle of the Sun
+Zaxara, the Exemplary@Freed from the Real
+Neheb, the Eternal@Aggravated Assault
+Conspiracy@Turntimber Ranger
+Enduring Renewal@Phyrexian Altar
+Intruder Alarm@Godsire
+Painter's Servant@Grindstone
+Planar Portal@Nexus of Fate
+Grim Monolith@Mana Reflection
+Scourge of the Skyclaves@Wound Reflection
Erratic Portal@Emrakul, the Aeons Torn
-Hapatra, Vizier of Poisons@Blowfly Infestation
+Brallin, Skyshark Rider@Keen Sense
+Panoptic Mirror@Time Warp
Intruder Alarm@Krenko, Mob Boss
Mephidross Vampire@Walking Ballista
Opalescence@Parallax Wave
-Palinchron@Flameshadow Conjuring
-Sea Gate Loremaster@Mind Over Matter
-Dance of the Dead@Worldgorger Dragon
-Zacama, Primal Calamity@Sanctum of Eternity
-Palinchron@Flameshadow Conjuring
-Panoptic Mirror@Time Warp
-Ilharg, the Raze-Boar@Medomai the Ageless
-Freed from the Real@Ley Weaver
-Hapatra, Vizier of Poisons@Blowfly Infestation
-Mana Geyser@Reiterate
-Faeburrow Elder@Freed from the Real
-Dockside Extortionist@Deadeye Navigator
-Twincast@Reverberate
-Chain of Acid@Ral, Storm Conduit
-Kiki-Jiki, Mirror Breaker@Sparring Mummy
+Bloom Tender@Pemmin's Aura
Najeela, the Blade-Blossom@Sword of Feast and Famine
Najeela, the Blade-Blossom@Bear Umbra
Sigil Tracer@Dramatic Reversal
@@ -423,10 +392,8 @@ Meletis Charlatan@Dramatic Reversal
Turnabout@Mirror Sheen
Famished Paladin@Resplendent Mentor
Cephalid Illusionist@Shuko
-Cephalid Illusionist@Lightning Greaves
Lich@Repay in Kind
Brago, King Eternal@Aurelia, the Warleader
-Naru Meha, Master Wizard@Displace
Squee, the Immortal@Food Chain
Eternal Scourge@Food Chain
Filigree Sages@Doubling Cube
@@ -508,7 +475,6 @@ Cadaverous Bloom@Idle Thoughts
Ashaya, Soul of the Wild@Realm Razer
Malcolm, Keen-Eyed Navigator@Glint-Horn Buccaneer
Midnight Guard@Splinter Twin
-Kiki-Jiki, Mirror Breaker@Coercive Recruiter
Port Razer@Splinter Twin
Second Chance@Treasury Thrull
Second Chance@Sun Titan
@@ -529,24 +495,14 @@ Gray Merchant of Asphodel@Rite of Replication
Cephalid Aristocrat@Lancers en-Kor
Cephalid Aristocrat@Reconnaissance
Cephalid Illusionist@Lancers en-Kor
-Cephalid Illusionist@Nomads en-Kor
-Cephalid Illusionist@Outrider en-Kor
-Cephalid Illusionist@Shaman en-Kor
-Cephalid Illusionist@Soltari Guerrillas
-Cephalid Illusionist@Spirit en-Kor
-Cephalid Illusionist@Warrior en-Kor
Cephalid Illusionist@Reconnaissance
-Polyraptor@Aether Flash
Opalescence@Day of the Dragons
Marrow-Gnawer@Thornbite Staff
-Hamza, Guardian of Arashin@Ancestral Statue
Metalworker@Voltaic Construct
Magda, Brazen Outlaw@Aggravated Assault
-Kaya the Inexorable@Karn's Temporal Sundering
Crackdown Construct@Dark Maze
Crackdown Construct@Blinking Spirit
Crackdown Construct@Shuko
-Crackdown Construct@Grafted Wargear
Crackdown Construct@Shaman en-Kor
Crackdown Construct@Flowstone Hellion
Crackdown Construct@Hyalopterous Lemure
@@ -575,7 +531,6 @@ Wanderwine Prophets@Followed Footsteps
Wanderwine Prophets@Stonybrook Schoolmaster
Bellowing Aegisaur@Walking Ballista
Bellowing Aegisaur@Triskelion
-Spike Feeder@Light of Promise
Minion Reflector@Worldgorger Dragon
Mischievous Quanar@Turnabout
Earthcraft@Grinning Ignus
@@ -588,7 +543,6 @@ Body of Knowledge@Niv-Mizzet, the Firemind
Body of Knowledge@Niv-Mizzet, Parun
Tidewater Minion@Illusionist's Bracers
Liliana, Untouched by Death@Phyrexian Altar
-Lightning Greaves@Crackdown Construct
Animar, Soul of Elements@Palinchron
Hellkite Charger@Sword of Feast and Famine
Conspiracy@Glorious Protector
@@ -625,7 +579,6 @@ Sharuum the Hegemon@Vesuvan Doppelganger
Sharuum the Hegemon@Vesuvan Shapeshifter
Sharuum the Hegemon@Vizier of Many Faces
Sharuum the Hegemon@Wall of Stolen Identity
-Filigree Sages@Empowered Autogenerator
Elemental Mastery@Midnight Guard
Nadier, Agent of the Duskenel@Food Chain
Professor Onyx@Chain of Smog
@@ -661,7 +614,6 @@ Fury Storm@Witherbloom Apprentice
Fury Storm@Witherbloom Pledgemage
Twinning Staff@Narset's Reversal
Double Major@Vadrok, Apex of Thunder
-Dualcaster Mage@Ghostly Flicker
Turntimber Ranger@Maskwood Nexus
Morophon, the Boundless@Shrieking Drake
Rionya, Fire Dancer@Godo, Bandit Warlord
@@ -675,11 +627,10 @@ Scurry Oak@Ivy Lane Denizen
Vrondiss, Rage of Ancients@Terror of the Peaks
Old Gnawbone@Hellkite Charger
Delina, Wild Mage@Medomai the Ageless
-Cleric Class@Spike Feeder
Aggravated Assault@Old Gnawbone
Najeela, the Blade-Blossom@Old Gnawbone
Grimgrin, Corpse-Born@Elemental Mastery
-Doubling Season@Jace, Cunning Castaway
+Jace, Cunning Castaway@Doubling Season
Aluren@Aether Adept
Aluren@Cavern Harpy
Aluren@Fleetfoot Panther
@@ -695,7 +646,7 @@ Selvala, Heart of the Wilds@Gauntlets of Light
Dual Casting@Traitorous Greed
Teferi, Who Slows the Sunset@The Chain Veil
Halana and Alena, Partners@Sage of Hours
-Dominating Vampire@Splinter Twin
+Splinter Twin@Dominating Vampire
Weaver of Blossoms // Blossom-Clad Werewolf@Freed from the Real
Weaver of Blossoms // Blossom-Clad Werewolf@Pemmin's Aura
Wedding Ring@Consecrated Sphinx
@@ -756,8 +707,6 @@ Sedraxis Alchemist@Rooftop Storm
Chulane, Teller of Tales@Intruder Alarm
Voice of the Woods@Intruder Alarm
Thud@Serra Avatar
-Light of Promise@Triskelion
-Light of Promise@Walking Ballista
Fathom Mage@Wizard Class
Intruder Alarm@Elemental Mastery
Frenetic Efreet@Tavern Scoundrel
@@ -824,16 +773,7 @@ Mikaeus, the Unhallowed@Devoted Druid
Kiki-Jiki, Mirror Breaker@Teardrop Kami
Splinter Twin@Teardrop Kami
Shrieking Drake@Chakram Retriever
-Stuffy Doll@Blazing Sunsteel
-Boros Reckoner@Blazing Sunsteel
-Boros Reckoner@Fiendlash
-Spitemare@Blazing Sunsteel
-Spitemare@Fiendlash
-Truefire Captain@Blazing Sunsteel
-Sun-Crowned Hunters@Blazing Sunsteel
-Ill-Tempered Loner // Howlpack Avenger@Blazing Sunsteel
-Ill-Tempered Loner // Howlpack Avenger@Fiendlash
-Mogg Maniac@Blazing Sunsteel
+Fiendlash@Boros Reckoner
Broodhatch Nantuko@Terror of the Peaks
Broodhatch Nantuko@Warstorm Surge
Saber Ants@Terror of the Peaks
@@ -863,8 +803,6 @@ Varragoth, Bloodsky Sire@Nexus of Fate
Varragoth, Bloodsky Sire@Beacon of Tomorrows
Sage of Hours@Clockspinning
Lich@Soul Conduit
-Dualcaster Mage@Saw in Half
-Naru Meha, Master Wizard@Saw in Half
Lich@Axis of Mortality
Morophon, the Boundless@Cavern Harpy
Worldfire@Mogis, God of Slaughter
@@ -904,17 +842,15 @@ Silvanus's Invoker@Storm the Vault // Vault of Catlacan
Silvanus's Invoker@Tolarian Academy
Myrkul, Lord of Bones@Devoted Druid
Abdel Adrian, Gorion's Ward@Animate Dead
-Naru Meha, Master Wizard@Blur
-Dualcaster Mage@Blur
Polyraptor@Where Ancients Tread
Lord of the Forsaken@Cut // Ribbons
Endless Horizons@Goblin Charbelcher
Tooth and Claw@Chatterfang, Squirrel General
Grand Warlord Radha@Hellkite Charger
Icewind Stalwart@Conspiracy
-Vhal, Candlekeep Researcher@Staff of Domination
-Vhal, Candlekeep Researcher@Umbral Mantle
-Vhal, Candlekeep Researcher@Sword of the Paruns
+Staff of Domination@Vhal, Candlekeep Researcher
+Umbral Mantle@Vhal, Candlekeep Researcher
+Sword of the Paruns@Vhal, Candlekeep Researcher
Miirym, Sentinel Wyrm@Worldgorger Dragon
Reckless Barbarian@Enduring Renewal
Abdel Adrian, Gorion's Ward@Dance of the Dead
@@ -947,10 +883,6 @@ Thrasta, Tempest's Roar@Food Chain
Slogurk, the Overslime@Mind Over Matter
Combat Celebrant@Mirage Phalanx
Living Plane@Massacre Wurm
-Dualcaster Mage@Settle Beyond Reality
-Naru Meha, Master Wizard@Settle Beyond Reality
-Dualcaster Mage@Siren's Ruse
-Naru Meha, Master Wizard@Siren's Ruse
Myojin of Cryptic Dreams@Dramatist's Puppet
Myojin of Cryptic Dreams@Throne of Geth
Lurking Roper@Sorcerer's Wand
@@ -986,8 +918,6 @@ Medomai the Ageless@Satoru Umezawa
Minsc & Boo, Timeless Heroes@Serra Avatar
Minsc & Boo, Timeless Heroes@Soul of Eternity
Minsc & Boo, Timeless Heroes@Enduring Angel // Angelic Enforcer
-Frilled Deathspitter@Guilty Conscience
-Sun-Crowned Hunters@Guilty Conscience
Spelljack@Swarm Intelligence
Spelljack@Bonus Round
Aeve, Progenitor Ooze@Food Chain
@@ -1015,30 +945,23 @@ Ivy Lane Denizen@Aerie Ouphes
Cathars' Crusade@Aerie Ouphes
Niv-Mizzet, the Firemind@Illusory Ambusher
Niv-Mizzet, Parun@Illusory Ambusher
-Walking Ballista@Sunbond
-Triskelion@Sunbond
Lightning Runner@Infinite Reflection
Old Gnawbone@Time Sieve
-Jace, Cunning Castaway@Vorinclex, Monstrous Raider
Worldgorger Dragon@Worldfire
Wrathful Red Dragon@Star of Extinction
Drogskol Reaver@Confessor
Drogskol Reaver@Feast of Sanity
Jace, Wielder of Mysteries@Enter the Infinite
-Mind Over Matter@Idol of Oblivion
Terror of the Peaks@Rite of Replication
Scourge of Valkas@Rite of Replication
Druids' Repository@Aggravated Assault
Hellkite Charger@Druids' Repository
Weaver of Harmony@Intruder Alarm
Baral's Expertise@Dualcaster Mage
-Naru Meha, Master Wizard@Baral's Expertise
Magar of the Magic Strings@Time Warp
-Magar of the Magic Strings@Temporal Manipulation
Olivia's Attendants@Time Sieve
Sophina, Spearsage Deserter@Time Sieve
Surge to Victory@Savage Beating
-Dominating Vampire@Kiki-Jiki, Mirror Breaker
Duke Ulder Ravengard@Port Razer
Archmage Ascension@Nexus of Fate
Archmage Ascension@Beacon of Tomorrows
@@ -1056,7 +979,6 @@ The Reaver Cleaver@Time Sieve
The Reaver Cleaver@Aggravated Assault
Najeela, the Blade-Blossom@The Reaver Cleaver
The Reaver Cleaver@Hellkite Charger
-Filigree Sages@Timeless Lotus
Estrid, the Masked@The Peregrine Dynamo
Gideon, Martial Paragon@The Peregrine Dynamo
Teferi, Who Slows the Sunset@The Peregrine Dynamo
@@ -1075,7 +997,6 @@ Duskmantle Guildmage@Maddening Cacophony
Feast of Sanity@Peer into the Abyss
Vrondiss, Rage of Ancients@Warstorm Surge
Vrondiss, Rage of Ancients@Pandemonium
-Archangel of Thune@Walking Ballista
Archangel of Thune@Triskelion
Marneus Calgar@The Locust God
Leonin Relic-Warder@Biotransference
@@ -1141,23 +1062,9 @@ Sprouting Phytohydra@Blasting Station
Sprouting Phytohydra@Goblin Bombardment
Exchange of Words@Scute Swarm
Vrondiss, Rage of Ancients@Scourge of Valkas
-Tooth and Claw@Adrix and Nev, Twincasters
-Arcbond@Pariah's Shield
Tezzeret, Master of the Bridge@Ancestral Statue
Fraying Omnipotence@Warlock Class
Fraying Omnipotence@Archfiend of Despair
-Dualcaster Mage@Ephemerate
-Dualcaster Mage@Cloudshift
-Dualcaster Mage@Essence Flux
-Naru Meha, Master Wizard@Ephemerate
-Naru Meha, Master Wizard@Cloudshift
-Dualcaster Mage@Momentary Blink
-Dualcaster Mage@Justiciar's Portal
-Dualcaster Mage@Flicker of Fate
-Naru Meha, Master Wizard@Momentary Blink
-Naru Meha, Master Wizard@Justiciar's Portal
-Naru Meha, Master Wizard@Flicker of Fate
-Dualcaster Mage@Displace
Machine God's Effigy@Devoted Druid
Machine God's Effigy@Barrenton Medic
Machine God's Effigy@Cinderhaze Wretch
@@ -1168,7 +1075,6 @@ Drafna, Founder of Lat-Nam@Ugin's Nexus
Deathbloom Ritualist@Freed from the Real
Deathbloom Ritualist@Pemmin's Aura
Dockside Extortionist@Meticulous Excavation
-Kiki-Jiki, Mirror Breaker@Corridor Monitor
Volcano Hellion@Sorin, Vengeful Bloodlord
Volcano Hellion@Whip of Erebos
Sanctum Weaver@Thassa's Ire
@@ -1202,12 +1108,9 @@ Urabrask's Forge@Breath of Fury
Henzie "Toolbox" Torre@Ancestral Statue
Queza, Augur of Agonies@Nefarious Lich
Jace's Archivist@Mind Over Matter
-Kwain, Itinerant Meddler@Mind Over Matter
Magistrate's Scepter@Clock of Omens
Neera, Wild Mage@Displacer Kitten
Ith, High Arcanist@Mesmeric Orb
-Against All Odds@Dualcaster Mage
-Against All Odds@Naru Meha, Master Wizard
Solphim, Mayhem Dominus@Heartless Hidetsugu
All Will Be One@Night Dealings
All Will Be One@Talon of Pain
@@ -1223,7 +1126,6 @@ Replication Technique@Primal Vigor
Replication Technique@Doubling Season
Replication Technique@Anointed Procession
Zalto, Fire Giant Duke@Blazing Sunsteel
-Loran of the Third Path@Mind Over Matter
Urban Daggertooth@Walking Ballista
Urban Daggertooth@Triskelion
Urban Daggertooth@Deathbringer Thoctar
@@ -1245,7 +1147,6 @@ Brion Stoutarm@Body of Research
Sunstrike Legionnaire@Splinter Twin
Sunstrike Legionnaire@Presence of Gond
Sunstrike Legionnaire@Elemental Mastery
-Otherworld Atlas@Mind Over Matter
Primordial Mist@Hamza, Guardian of Arashin
Primordial Mist@Rakdos, Lord of Riots
Time Sieve@Ria Ivor, Bane of Bladehold
@@ -1262,10 +1163,6 @@ Mirrodin Besieged@Morality Shift
Crackdown Construct@Kazuul's Toll Collector
Crackdown Construct@Eater of the Dead
Crackdown Construct@Aphetto Alchemist
-Lu Su, Wu Advisor@Mind Over Matter
-Mind Over Matter@Talas Researcher
-Mind Over Matter@Enclave Cryptologist
-Mind Over Matter@Urza's Blueprints
Silvanus's Invoker@Nykthos, Shrine to Nyx
Enduring Renewal@Skirk Prospector
Myrel, Shield of Argive@Time Sieve
@@ -1282,8 +1179,6 @@ Blessed Wind@Warlock Class
Magister Sphinx@Archfiend of Despair
Magister Sphinx@Wound Reflection
Magister Sphinx@Warlock Class
-Magar of the Magic Strings@Capture of Jingzhou
-Magar of the Magic Strings@Walk the Aeons
Tainted Sigil@Aetherflux Reservoir
Akki Battle Squad@Sword of Hearth and Home
Brago, King Eternal@Akki Battle Squad
@@ -1291,11 +1186,9 @@ Kiki-Jiki, Mirror Breaker@Janjeet Sentry
Crackdown Construct@Martyrdom
Dockside Extortionist@Disappear
Sanctum Weaver@Seedcradle Witch
-The One Ring@Mind Over Matter
Volo, Itinerant Scholar@Mind Over Matter
Volrath, the Shapestealer@Patron of the Orochi
Unctus, Grand Metatect@Tolarian Kraken
-Restoration Angel@Icewind Stalwart
Ad Nauseam@Cloudsteel Kirin
Magistrate's Scepter@Ichormoon Gauntlet
Najeela, the Blade-Blossom@Cyclonus, the Saboteur // Cyclonus, Cybertronian Fighter
@@ -1317,15 +1210,6 @@ Sprouting Phytohydra@Marauding Raptor
Sprouting Phytohydra@Aether Flash
Kroxa and Kunoros@Altar of Dementia
Shalai and Hallar@Heliod, Sun-Crowned
-Shalai and Hallar@Cleric Class
-Shalai and Hallar@Ajani's Pridemate
-Shalai and Hallar@Voice of the Blessed
-Shalai and Hallar@Celestial Unicorn
-Shalai and Hallar@Twinblade Paladin
-Shalai and Hallar@Ageless Entity
-Shalai and Hallar@Gideon's Company
-Shalai and Hallar@Trelasarra, Moon Dancer
-Shalai and Hallar@Archangel of Thune
Weaver of Harmony@Awakening
Weaver of Harmony@Curse of Bounty
Shalai and Hallar@The Red Terror
@@ -1389,8 +1273,6 @@ Orcish Bowmasters@Peer into the Abyss
Fall of Cair Andros@Star of Extinction
Fall of Cair Andros@Blasphemous Act
Marneus Calgar@The Watcher in the Water
-Heliod, the Radiant Dawn // Heliod, the Warped Eclipse@Ancestral Statue
-Ezzaroot Channeler@Ancestral Statue
Feast of Sanity@Flumph
Feast of Sanity@Illusory Ambusher
Feast of Sanity@Ripjaw Raptor
@@ -1416,7 +1298,6 @@ Intruder Alarm@Banishing Knack
Intruder Alarm@Retraction Helix
Ugin's Nexus@Masterful Replication
Syr Gwyn, Hero of Ashvale@Crackdown Construct
-Crackdown Construct@Puresteel Paladin
Duke Ulder Ravengard@Éomer, Marshal of Rohan
Kaya, Intangible Slayer@Luxior, Giada's Gift
Ill-Tempered Loner // Howlpack Avenger@Soul Link
@@ -1472,11 +1353,8 @@ The Tenth Doctor@Rousing Refrain
Body of Research@Altar of Dementia
Overgrown Battlement@Singing Bell Strike
Intruder Alarm@Jungle Patrol
-Dualcaster Mage@Scrollshift
-Naru Meha, Master Wizard@Scrollshift
Breath of Fury@Helm of the Host
Mishra, Eminent One@Breath of Fury
-Dualcaster Mage@Mirage Mockery
River Song@Timestream Navigator
Ashiok, Wicked Manipulator@Wall of Blood
Orcish Bowmasters@Flumph
@@ -1487,8 +1365,7 @@ Mischievous Quanar@Rude Awakening
Phyrexian Devourer@Nexus of Fate
Phyrexian Devourer@Beacon of Tomorrows
Teach by Example@Increasing Vengeance
-Naru Meha, Master Wizard@Necromantic Selection
-Dualcaster Mage@Necromantic Selection
+Necromantic Selection@Naru Meha, Master Wizard
Omarthis, Ghostfire Initiate@Spark Double
Timestream Navigator@Planar Bridge
Selvala, Heart of the Wilds@Crab Umbra
@@ -1539,11 +1416,6 @@ Aetherflux Reservoir@Toymaker
Aetherflux Reservoir@Xenic Poltergeist
Aetherflux Reservoir@Yotia Declares War
Katsumasa, the Animator@Aetherflux Reservoir
-Deathbringer Thoctar@Heliod, Sun-Crowned
-Deathbringer Thoctar@Archangel of Thune
-Deathbringer Thoctar@Cleric Class
-Deathbringer Thoctar@Light of Promise
-Deathbringer Thoctar@Sunbond
Hellkite Charger@Nature's Will
Screams from Within@Warehouse Tabby
Agatha of the Vile Cauldron@Spawnsire of Ulamog
@@ -1551,21 +1423,16 @@ Peregrin Took@Experimental Confectioner
Morophon, the Boundless@Grinning Ignus
Screams from Within@Knight of Doves
The World Tree@Purphoros, God of the Forge
-Donna Noble@Guilty Conscience
Donna Noble@Spitemare
-Donna Noble@Boros Reckoner
-Donna Noble@Ill-Tempered Loner // Howlpack Avenger
Olivia, Crimson Bride@Breath of Fury
Ayara, Widow of the Realm // Ayara, Furnace Queen@Breath of Fury
Ancestral Statue@Mana Echoes
Patrol Signaler@Earthcraft
-Tooth and Claw@Mondrak, Glory Dominus
Tooth and Claw@Queen Allenal of Ruadach
Tameshi, Reality Architect@Second Chance
Be'lakor, the Dark Master@Orthion, Hero of Lavabrink
Be'lakor, the Dark Master@Rite of Replication
Body of Research@Doom Weaver
-Dualcaster Mage@Illusionist's Stratagem
Sporeweb Weaver@Warstorm Surge
Sporeweb Weaver@Terror of the Peaks
Sporeweb Weaver@Pandemonium
@@ -1621,7 +1488,6 @@ Time Sieve@Exsanguinator Cavalry
The Master, Formed Anew@Palinchron
Wanderwine Prophets@Deeproot Pilgrimage
Carmen, Cruel Skymarcher@Breath of Fury
-Filigree Sages@Nyx Lotus
The Enigma Jewel // Locus of Enlightenment@Basalt Monolith
The Enigma Jewel // Locus of Enlightenment@Grim Monolith
Cradle Clearcutter@Voltaic Construct
@@ -1629,7 +1495,6 @@ Poetic Ingenuity@Aggravated Assault
Peer into the Abyss@Bloodletter of Aclazotz
Pili-Pala@Bigger on the Inside
Farmstead Gleaner@Bigger on the Inside
-Felidar Guardian@Icewind Stalwart
Charismatic Conqueror@Fractured Identity
Saheeli, the Sun's Brilliance@Timestream Navigator
Harried Dronesmith@Breath of Fury
@@ -1666,7 +1531,6 @@ Thousand-Year Storm@Reiterate
Starfield of Nyx@Parallax Wave
Ognis, the Dragon's Lash@Time Sieve
Lonis, Genetics Expert@Yotian Dissident
-Ojer Taq, Deepest Foundation // Temple of Civilization@Tooth and Claw
Preston Garvey, Minuteman@Aggravated Assault
Preston Garvey, Minuteman@Najeela, the Blade-Blossom
Preston Garvey, Minuteman@Hellkite Charger
@@ -1683,7 +1547,6 @@ Animar, Soul of Elements@Hullbreaker Horror
Shaun, Father of Synths@Aurelia, the Warleader
Bristly Bill, Spine Sower@Devoted Druid
Sharuum the Hegemon@Synth Infiltrator
-Five Hundred Year Diary@Filigree Sages
Timestream Navigator@Planar Portal
The Enigma Jewel // Locus of Enlightenment@Seeker of Skybreak
The Enigma Jewel // Locus of Enlightenment@Aphetto Alchemist
@@ -1721,14 +1584,11 @@ Basking Broodscale@Blade of the Bloodchief
Basking Broodscale@Necrosynthesis
Disciple of Freyalise // Garden of Freyalise@Body of Research
Cayth, Famed Mechanist@Intruder Alarm
-Izzet Generatorium@Mind Over Matter
Breath of Fury@Siege-Gang Lieutenant
Satya, Aetherflux Genius@Port Razer
Greenbelt Rampager@Primal Prayers
-Chatterfang, Squirrel General@Shilgengar, Sire of Famine
+Shilgengar, Sire of Famine@Chatterfang, Squirrel General
Shilgengar, Sire of Famine@Jinnie Fay, Jetmir's Second
-Dualcaster Mage@Eldrazi Confluence
-Naru Meha, Master Wizard@Eldrazi Confluence
Ulamog's Dreadsire@Intruder Alarm
Ezio Auditore da Firenze@Sorin Markov
Ezio Auditore da Firenze@Tree of Perdition
@@ -1741,19 +1601,15 @@ Part the Waterveil@Radiate
Barren Glory@Renounce
Breath of Fury@Desert Warfare
Sorin of House Markov // Sorin, Ravenous Neonate@Beacon of Immortality
-Sorin of House Markov // Sorin, Ravenous Neonate@Revival // Revenge
Edward Kenway@Time Sieve
Enduring Tenacity@Beacon of Immortality
Enduring Tenacity@Revival // Revenge
Havi, the All-Father@Moritte of the Frost
Enduring Angel // Angelic Enforcer@Enduring Tenacity
Shard of the Nightbringer@Enduring Tenacity
-Screaming Nemesis@Blazing Sunsteel
-Screaming Nemesis@Guilty Conscience
Timestream Navigator@Progenitor Mimic
Body of Research@Season of Gathering
-Naru Meha, Master Wizard@Starfall Invocation
-Dualcaster Mage@Starfall Invocation
+Starfall Invocation@Naru Meha, Master Wizard
Kitsa, Otterball Elite@Dramatic Reversal
Twenty-Toed Toad@Peer into the Abyss
Twenty-Toed Toad@Enter the Infinite
@@ -1786,7 +1642,6 @@ Uyo, Silent Prophet@Doppelgang
Arabella, Abandoned Doll@Storm Herd
Wedding Ring@Notion Thief
Aggravated Assault@Wirewood Channeler
-Enchanted Evening@Ghostly Dancers
Anzrag, the Quake-Mole@Anara, Wolvid Familiar
Blasphemous Act@Repercussion
Soulfire Grand Master@Brass's Bounty
@@ -1811,9 +1666,6 @@ Marvin, Murderous Mimic@Ioreth of the Healing House
Marina Vendrell's Grimoire@Horizon Chimera
Harabaz Druid@Pemmin's Aura
Twitching Doll@Freed from the Real
-Archon of Sun's Grace@Secret Arcade // Dusty Parlor
-Secret Arcade // Dusty Parlor@Gremlin Tamer
-Enchanted Evening@Gremlin Tamer
Mind Over Matter@Chromatic Orrery
Murderous Redcap@Gev, Scaled Scorch
Anzrag, the Quake-Mole@Darksteel Mutation
@@ -1904,7 +1756,6 @@ Aggravated Assault@Esika, God of the Tree // The Prismatic Bridge
Astarion, the Decadent@Blood Tribute
Nyxbloom Ancient@Rite of Replication
Isengard Unleashed@Heartless Hidetsugu
-Shilgengar, Sire of Famine@Stridehangar Automaton
Saheeli, Radiant Creator@Timestream Navigator
Psychosis Crawler@Peer into the Abyss
Sandstorm Crasher@Aurelia, the Warleader
@@ -1992,3 +1843,67 @@ Cephalid Aristocrat@Grafted Wargear
Cephalid Aristocrat@Lightning Greaves
Satoru Umezawa@Intruder Alarm
Dissection Tools@One with the Kami
+Jarad, Golgari Lich Lord@Jumbo Cactuar
+Enduring Renewal@Marketback Walker
+Gogo, Mysterious Mime@Ioreth of the Healing House
+Body of Research@Garruk, Primal Hunter
+Huatli, Radiant Champion@The Locust God
+Lonis, Genetics Expert@Builder's Talent
+Gogo, Master of Mimicry@Unstoppable Plan
+There and Back Again@Clockspinning
+The Jolly Balloon Man@Coercive Recruiter
+Teysa, Orzhov Scion@Painter's Servant
+Terrasymbiosis@Body of Research
+Susur Secundi, Void Altar@Body of Research
+Ouroboroid@Sage of Hours
+Dawnsire, Sunstar Dreadnought@Boros Reckoner
+Dawnsire, Sunstar Dreadnought@Phyrexian Vindicator
+Toralf, God of Fury // Toralf's Hammer@Dawnsire, Sunstar Dreadnought
+Insight Engine@Mind Over Matter
+Alpharael, Stonechosen@Archfiend of Despair
+Wayta, Trainer Prodigy@Blazing Sunsteel
+Terra, Magical Adept // Esper Terra@Yenna, Redtooth Regent
+Devastating Onslaught@Terror of the Peaks
+Devastating Onslaught@Exalted Sunborn
+Pyromancer's Goggles@Expansion // Explosion
+Vito, Thorn of the Dusk Rose@Blood Tribute
+Mm'menon, Uthros Exile@Lonis, Genetics Expert
+Requiem Monolith@Dawnsire, Sunstar Dreadnought
+Wayta, Trainer Prodigy@Boros Reckoner
+Doppelgang@Kairi, the Swirling Sky
+Doppelgang@Cormela, Glamour Thief
+Requiem Monolith@Orcish Bowmasters
+Vedalken Mastermind@Intruder Alarm
+Lyla, Holographic Assistant@Benthic Biomancer
+Enter the Infinite@Psychosis Crawler
+Storm Herd@Cathars' Crusade
+Blinking Spirit@Intruder Alarm
+Kefka, Court Mage // Kefka, Ruler of Ruin@Magmakin Artillerist
+Rakdos Joins Up@Clever Impersonator
+Bigger on the Inside@Freed from the Real
+Hapatra, Vizier of Poisons@Host of the Hereafter
+Nyxbloom Ancient@Freed from the Real
+Mana Reflection@Freed from the Real
+Fire Lord Zuko@Hellkite Charger
+Doomsday Excruciator@One Ring to Rule Them All
+Doomsday Excruciator@Maddening Cacophony
+Long Feng, Grand Secretariat@Basking Broodscale
+Fire Nation Archers@Mana Echoes
+Terra, Magical Adept // Esper Terra@Copy Enchantment
+Howlsquad Heavy@Aggravated Assault
+Unstoppable Plan@Strionic Resonator
+Unstoppable Plan@Lithoform Engine
+Guilty Conscience@Pain for All
+J. Jonah Jameson@Aggravated Assault
+Coalhauler Swine@Pariah
+Guardian of the Forgotten@Dissection Tools
+Guardian of the Forgotten@Demonmail Hauberk
+Carnage, Crimson Chaos@Deceptive Frostkite
+Impostor Syndrome@Breath of Fury
+Impostor Syndrome@Aurelia, the Warleader
+Spine of Ish Sah@Sami, Wildcat Captain
+Spiteful Sliver@Star of Extinction
+Bruvac the Grandiloquent@Singularity Rupture
+Atreus, Impulsive Son@Mind Over Matter
+Kratos, Stoic Father@Sage of Hours
+Crackdown Construct@Dragonfire Blade
diff --git a/Utils/known-sets.txt b/Utils/known-sets.txt
index 9ea77b07980..48fa4e4a535 100644
--- a/Utils/known-sets.txt
+++ b/Utils/known-sets.txt
@@ -165,6 +165,7 @@ Limited Edition Beta|LimitedEditionBeta|
The Lord of the Rings: Tales of Middle-earth|TheLordOfTheRingsTalesOfMiddleEarth|
Tales of Middle-earth Commander|TalesOfMiddleEarthCommander|
Lorwyn|Lorwyn|
+Lorwyn Eclipsed|LorwynEclipsed|
The Lost Caverns of Ixalan|TheLostCavernsOfIxalan|
The Lost Caverns of Ixalan Commander|LostCavernsOfIxalanCommander|
Magic 2010|Magic2010|
diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt
index 96a670e932f..7f3a4737703 100644
--- a/Utils/mtg-cards-data.txt
+++ b/Utils/mtg-cards-data.txt
@@ -57344,9 +57344,9 @@ Helitrooper|Final Fantasy Commander|22|R|{1}{W}|Creature - Human Soldier|1|2|Fly
Lord Jyscal Guado|Final Fantasy Commander|23|R|{1}{W}|Legendary Creature - Spirit Cleric|2|1|Flying$At the beginning of each end step, if you put a counter on a creature this turn, investigate.|
Protection Magic|Final Fantasy Commander|24|R|{1}{W}|Instant|||Put a shield counter on each of up to three target creatures.|
SOLDIER Military Program|Final Fantasy Commander|25|R|{2}{W}|Enchantment|||At the beginning of combat on your turn, choose one. If you control a commander, you may choose both instead.$* Create a 1/1 white Soldier creature token.$* Put a +1/+1 counter on each of up to two Soldiers you control.|
-Summon: Good King Mog XII|Final Fantasy Commander|26|R|{4}{W}|Enchantment Creature - Saga Moogle|4|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I - Create two 1/2 white Moogle creature tokens with lifelink.$II, III - Whenever you cast a noncreature spell this turn, create a token that's a copy of a non-Saga token you control.$IV - Put two +1/+1 counters on each other Moogle you control.$Flying, lifelink|
-Summon: Ixion|Final Fantasy Commander|27|R|{2}{W}|Enchantment Creature - Saga Unicorn|3|3|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I - Aerospark -- Exile target creature an opponent controls until this Saga leaves the battlefield.$II, III - Put a +1/+1 counter on each of up to two target creatures you control. You gain 2 life.$First strike|
-Summon: Yojimbo|Final Fantasy Commander|28|R|{3}{W}|Enchantment Creature - Saga Samurai|5|5|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I - Exile target artifact, enchantment, or tapped creature an opponent controls.$II, III - Until your next turn, creatures can't attack you unless their controller pays {2} for each of those creatures.$IV - Create X Treasure tokens, where X is the number of opponents who control a creature with power 4 or greater.$Vigilance|
+Summon: Good King Mog XII|Final Fantasy Commander|26|R|{4}{W}|Enchantment Creature - Saga Moogle|4|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Create two 1/2 white Moogle creature tokens with lifelink.$II, III -- Whenever you cast a noncreature spell this turn, create a token that's a copy of a non-Saga token you control.$IV -- Put two +1/+1 counters on each other Moogle you control.$Flying, lifelink|
+Summon: Ixion|Final Fantasy Commander|27|R|{2}{W}|Enchantment Creature - Saga Unicorn|3|3|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I -- Aerospark -- Exile target creature an opponent controls until this Saga leaves the battlefield.$II, III -- Put a +1/+1 counter on each of up to two target creatures you control. You gain 2 life.$First strike|
+Summon: Yojimbo|Final Fantasy Commander|28|R|{3}{W}|Enchantment Creature - Saga Samurai|5|5|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Exile target artifact, enchantment, or tapped creature an opponent controls.$II, III -- Until your next turn, creatures can't attack you unless their controller pays {2} for each of those creatures.$IV -- Create X Treasure tokens, where X is the number of opponents who control a creature with power 4 or greater.$Vigilance|
Summoner's Sending|Final Fantasy Commander|29|R|{1}{W}|Enchantment|||At the beginning of your end step, you may exile target creature card from a graveyard. If you do, create a 1/1 white Spirit creature token with flying. Put a +1/+1 counter on it if the exiled card's mana value is 4 or greater.|
Tataru Taru|Final Fantasy Commander|30|R|{1}{W}|Legendary Creature - Dwarf Advisor|0|3|When Tataru Taru enters, you draw a card and target opponent may draw a card.$Scions' Secretary -- Whenever an opponent draws a card, if it isn't that player's turn, create a tapped Treasure token. This ability triggers only once each turn.|
Thancred Waters|Final Fantasy Commander|31|R|{4}{W}|Legendary Creature - Human Warrior|3|5|Flash$Royal Guard -- When Thancred Waters enters, another target legendary permanent you control gains indestructible for as long as you control Thancred Waters.$Whenever you cast a noncreature spell, Thancred Waters gains indestructible until end of turn.|
@@ -57360,7 +57360,7 @@ Lulu, Stern Guardian|Final Fantasy Commander|38|R|{2}{U}|Legendary Creature - Hu
O'aka, Traveling Merchant|Final Fantasy Commander|39|R|{1}{U}|Legendary Creature - Human Citizen|1|2|{T}, Remove a counter from a nonland permanent you control: Draw a card.|
Observed Stasis|Final Fantasy Commander|40|R|{3}{U}|Enchantment - Aura|||Flash$Enchant creature an opponent controls$When this Aura enters, remove enchanted creature from combat. Then draw a card for each tapped creature its controller controls.$Enchanted creature loses all abilities and can't attack or block.|
Rikku, Resourceful Guardian|Final Fantasy Commander|41|R|{2}{U}|Legendary Creature - Human Artificer|2|3|Whenever you put one or more counters on a creature, until end of turn, that creature can't be blocked by creatures your opponents control.$Steal -- {1}, {T}: Move a counter from target creature an opponent controls onto target creature you control. Activate only as a sorcery.|
-Summon: Valefor|Final Fantasy Commander|42|R|{4}{U}|Enchantment Creature - Saga Drake|5|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I - Sonic Wings -- Each opponent chooses a creature with the greatest mana value among creatures they control. Return those creatures to their owners' hands.$II, III, IV - Tap up to one target creature and put a stun counter on it.$Flying|
+Summon: Valefor|Final Fantasy Commander|42|R|{4}{U}|Enchantment Creature - Saga Drake|5|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Sonic Wings -- Each opponent chooses a creature with the greatest mana value among creatures they control. Return those creatures to their owners' hands.$II, III, IV -- Tap up to one target creature and put a stun counter on it.$Flying|
Espers to Magicite|Final Fantasy Commander|43|R|{3}{B}|Instant|||Exile each opponent's graveyard. When you do, choose up to one target creature card exiled this way. Create a token that's a copy of that card, except it's an artifact and it loses all other card types.|
Eye of Nidhogg|Final Fantasy Commander|44|R|{2}{B}|Legendary Enchantment - Aura|||Enchant creature$Enchanted creature is a black Dragon with base power and toughness 4/2, has flying and deathtouch, and is goaded.$When Eye of Nidhogg is put into a graveyard from the battlefield, return it to its owner's hand.|
The Falcon, Airship Restored|Final Fantasy Commander|45|R|{2}{B}|Legendary Artifact - Vehicle|4|3|Flying$Whenever The Falcon deals combat damage to a player, you may sacrifice it. When you do, return target creature card from your graveyard to the battlefield.${4}{B}: Return this card from your graveyard to the battlefield tapped.$Crew 2|
@@ -57393,7 +57393,7 @@ Summon: Magus Sisters|Final Fantasy Commander|71|R|{4}{G}|Enchantment Creature -
Summoning Materia|Final Fantasy Commander|72|R|{2}{G}|Artifact - Equipment|||You may look at the top card of your library any time.$As long as this Equipment is attached to a creature, you may cast creature spells from the top of your library.$Equipped creature gets +2/+2 and has vigilance and "{T}: Add {G}."$Equip {2}|
Tromell, Seymour's Butler|Final Fantasy Commander|73|R|{2}{G}|Legendary Creature - Elf Advisor|2|3|Each other nontoken creature you control enters with an additional +1/+1 counter on it.${1}, {T}: Proliferate X times, where X is the number of nontoken creatures you control that entered this turn.|
Yuna's Decision|Final Fantasy Commander|74|R|{3}{G}|Sorcery|||Choose one --$* Continue the Pilgrimage -- Sacrifice a creature. If you do, draw a card, then you may put a creature card and/or a land card from your hand onto the battlefield.$* Find Another Way -- Return one or two target permanent cards from your graveyard to your hand.|
-Yuna's Whistle|Final Fantasy Commander|75|R|{1}{G}{G}|Instant|||Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order. When you reveal a creature card this way, put X+1/+1 counters on target creature you control, where X is the mana value of that card.|
+Yuna's Whistle|Final Fantasy Commander|75|R|{1}{G}{G}|Instant|||Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order. When you reveal a creature card this way, put X +1/+1 counters on target creature you control, where X is the mana value of that card.|
Aerith, Last Ancient|Final Fantasy Commander|76|R|{2}{G}{W}|Legendary Creature - Human Cleric Druid|3|5|Lifelink$Raise -- At the beginning of your end step, if you gained life this turn, return target creature card from your graveyard to your hand. If you gained 7 or more life this turn, return that card to the battlefield instead.|
Ardbert, Warrior of Darkness|Final Fantasy Commander|77|R|{1}{W}{B}|Legendary Creature - Spirit Warrior|2|2|Whenever you cast a white spell, put a +1/+1 counter on each legendary creature you control. They gain vigilance until end of turn.$Whenever you cast a black spell, put a +1/+1 counter on each legendary creature you control. They gain menace until end of turn.|
Banon, the Returners' Leader|Final Fantasy Commander|78|R|{R}{W}|Legendary Creature - Human Cleric Rebel|1|3|Pray -- Once during each of your turns, you may cast a creature spell from among cards in your graveyard that were put there from anywhere other than the battlefield this turn.$Whenever you attack, you may pay {1} and discard a card. If you do, draw a card.|
@@ -57414,7 +57414,7 @@ Red XIII, Proud Warrior|Final Fantasy Commander|91|R|{1}{R}{G}|Legendary Creatur
Sephiroth, Fallen Hero|Final Fantasy Commander|92|R|{3}{R}{W}|Legendary Creature - Human Avatar Soldier|7|5|Jenova Cells -- Whenever Sephiroth attacks, you may put a cell counter on target creature. Until end of turn, each modified creature you control has base power and toughness 7/5.$The Reunion -- {3}, Sacrifice a modified creature: Return this card from your graveyard to the battlefield tapped.|
Setzer, Wandering Gambler|Final Fantasy Commander|93|R|{1}{B}{R}|Legendary Creature - Human Rogue Pilot|2|2|When Setzer enters, create The Blackjack, a legendary 3/3 colorless Vehicle artifact token with flying and crew 2.$Whenever a Vehicle you control deals combat damage to a player, flip a coin.$Whenever you win a coin flip, create two tapped Treasure tokens.|
Shelinda, Yevon Acolyte|Final Fantasy Commander|94|R|{G}{W}|Legendary Creature - Human Cleric|2|2|Lifelink$Whenever another creature you control enters, put a +1/+1 counter on that creature if its power is less than Shelinda's power. Otherwise, put a +1/+1 counter on Shelinda.|
-Sin, Unending Cataclysm|Final Fantasy Commander|95|R|{5}{G}{U}|Legendary Creature - Leviathan Avatar|5|5|Flying, trample$As Sin enters, remove all counters from any number of artifacts, creatures, and enchantments. Sin enters with X+1/+1 counters on it, where X is twice the number of counters removed this way.$When Sin dies, put its counters on target creature you control, then shuffle this card into its owner's library.|
+Sin, Unending Cataclysm|Final Fantasy Commander|95|R|{5}{G}{U}|Legendary Creature - Leviathan Avatar|5|5|Flying, trample$As Sin enters, remove all counters from any number of artifacts, creatures, and enchantments. Sin enters with X +1/+1 counters on it, where X is twice the number of counters removed this way.$When Sin dies, put its counters on target creature you control, then shuffle this card into its owner's library.|
Urianger Augurelt|Final Fantasy Commander|96|R|{W}{U}|Legendary Creature - Elf Advisor|1|3|Whenever you play a land from exile or cast a spell from exile, you gain 2 life.$Draw Arcanum -- {T}: Look at the top card of your library. You may exile it face down.$Play Arcanum -- {T}: Until end of turn, you may play cards exiled with Urianger Augurelt. Spells you cast this way cost {2} less to cast.|
Wakka, Devoted Guardian|Final Fantasy Commander|97|R|{2}{G}{W}|Legendary Creature - Human Warrior|4|4|Reach, trample$Whenever Wakka deals combat damage to a player, destroy up to one target artifact that player controls and put a +1/+1 counter on Wakka.$Blitzball Captain -- At the beginning of your end step, if a counter was put on Wakka this turn, put a +1/+1 counter on each other creature you control.|
Conformer Shuriken|Final Fantasy Commander|98|R|{2}|Legendary Artifact - Equipment|||Equipped creature has "Whenever this creature attacks, tap target creature defending player controls. If that creature has greater power than this creature, put a number of +1/+1 counters on this creature equal to the difference."$Equip {2}|
@@ -57445,7 +57445,7 @@ Lifestream's Blessing|Final Fantasy Commander|122|R|{4}{G}{G}|Instant|||Draw X c
Sphere Grid|Final Fantasy Commander|123|R|{1}{G}|Enchantment|||Whenever a creature you control deals combat damage to a player, put a +1/+1 counter on that creature.$Unlock Ability -- Creatures you control with +1/+1 counters on them have reach and trample.|
Summoning Materia|Final Fantasy Commander|124|R|{2}{G}|Artifact - Equipment|||You may look at the top card of your library any time.$As long as this Equipment is attached to a creature, you may cast creature spells from the top of your library.$Equipped creature gets +2/+2 and has vigilance and "{T}: Add {G}."$Equip {2}|
Yuna's Decision|Final Fantasy Commander|125|R|{3}{G}|Sorcery|||Choose one --$* Continue the Pilgrimage -- Sacrifice a creature. If you do, draw a card, then you may put a creature card and/or a land card from your hand onto the battlefield.$* Find Another Way -- Return one or two target permanent cards from your graveyard to your hand.|
-Yuna's Whistle|Final Fantasy Commander|126|R|{1}{G}{G}|Instant|||Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order. When you reveal a creature card this way, put X+1/+1 counters on target creature you control, where X is the mana value of that card.|
+Yuna's Whistle|Final Fantasy Commander|126|R|{1}{G}{G}|Instant|||Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order. When you reveal a creature card this way, put X +1/+1 counters on target creature you control, where X is the mana value of that card.|
Conformer Shuriken|Final Fantasy Commander|127|R|{2}|Legendary Artifact - Equipment|||Equipped creature has "Whenever this creature attacks, tap target creature defending player controls. If that creature has greater power than this creature, put a number of +1/+1 counters on this creature equal to the difference."$Equip {2}|
Wrecking Ball Arm|Final Fantasy Commander|128|R|{2}|Legendary Artifact - Equipment|||Equipped creature has base power and toughness 7/7 and can't be blocked by creatures with power 2 or less.$Equip legendary creature {3}$Equip {7}|
Alisaie Leveilleur|Final Fantasy Commander|129|R|{2}{W}|Legendary Creature - Elf Wizard|3|2|Partner with Alphinaud Leveilleur$First strike$Dualcast -- The second spell you cast each turn costs {2} less to cast.|
@@ -57505,7 +57505,7 @@ Red XIII, Proud Warrior|Final Fantasy Commander|181|R|{1}{R}{G}|Legendary Creatu
Sephiroth, Fallen Hero|Final Fantasy Commander|182|R|{3}{R}{W}|Legendary Creature - Human Avatar Soldier|7|5|Jenova Cells -- Whenever Sephiroth attacks, you may put a cell counter on target creature. Until end of turn, each modified creature you control has base power and toughness 7/5.$The Reunion -- {3}, Sacrifice a modified creature: Return this card from your graveyard to the battlefield tapped.|
Setzer, Wandering Gambler|Final Fantasy Commander|183|R|{1}{B}{R}|Legendary Creature - Human Rogue Pilot|2|2|When Setzer enters, create The Blackjack, a legendary 3/3 colorless Vehicle artifact token with flying and crew 2.$Whenever a Vehicle you control deals combat damage to a player, flip a coin.$Whenever you win a coin flip, create two tapped Treasure tokens.|
Shelinda, Yevon Acolyte|Final Fantasy Commander|184|R|{G}{W}|Legendary Creature - Human Cleric|2|2|Lifelink$Whenever another creature you control enters, put a +1/+1 counter on that creature if its power is less than Shelinda's power. Otherwise, put a +1/+1 counter on Shelinda.|
-Sin, Unending Cataclysm|Final Fantasy Commander|185|R|{5}{G}{U}|Legendary Creature - Leviathan Avatar|5|5|Flying, trample$As Sin enters, remove all counters from any number of artifacts, creatures, and enchantments. Sin enters with X+1/+1 counters on it, where X is twice the number of counters removed this way.$When Sin dies, put its counters on target creature you control, then shuffle this card into its owner's library.|
+Sin, Unending Cataclysm|Final Fantasy Commander|185|R|{5}{G}{U}|Legendary Creature - Leviathan Avatar|5|5|Flying, trample$As Sin enters, remove all counters from any number of artifacts, creatures, and enchantments. Sin enters with X +1/+1 counters on it, where X is twice the number of counters removed this way.$When Sin dies, put its counters on target creature you control, then shuffle this card into its owner's library.|
Terra, Herald of Hope|Final Fantasy Commander|186|M|{R}{W}{B}|Legendary Creature - Human Wizard Warrior|3|3|Trance -- At the beginning of combat on your turn, mill two cards. Terra gains flying until end of turn.$Whenever Terra deals combat damage to a player, you may pay {2}. When you do, return target creature card with power 3 or less from your graveyard to the battlefield tapped.|
Tidus, Yuna's Guardian|Final Fantasy Commander|187|M|{G}{W}{U}|Legendary Creature - Human Warrior|3|3|At the beginning of combat on your turn, you may move a counter from target creature you control onto a second target creature you control.$Cheer -- Whenever one or more creatures you control with counters on them deal combat damage to a player, you may draw a card and proliferate. Do this only once each turn.|
Tifa, Martial Artist|Final Fantasy Commander|188|M|{1}{R}{G}{W}|Legendary Creature - Human Monk|4|4|Melee$Whenever one or more creatures you control with power 7 or greater deal combat damage to a player, untap all creatures you control. If it's the first combat phase of your turn, there is an additional combat phase after this phase.|
@@ -57514,10 +57514,10 @@ Wakka, Devoted Guardian|Final Fantasy Commander|190|R|{2}{G}{W}|Legendary Creatu
Y'shtola, Night's Blessed|Final Fantasy Commander|191|M|{1}{W}{U}{B}|Legendary Creature - Cat Warlock|2|4|Vigilance$At the beginning of each end step, if a player lost 4 or more life this turn, you draw a card.$Whenever you cast a noncreature spell with mana value 3 or greater, Y'shtola deals 2 damage to each opponent and you gain 2 life.|
Yuna, Grand Summoner|Final Fantasy Commander|192|M|{1}{G}{W}{U}|Legendary Creature - Human Cleric|1|5|Grand Summon -- {T}: Add one mana of any color. When you next cast a creature spell this turn, that creature enters with two additional +1/+1 counters on it.$Whenever another permanent you control is put into a graveyard from the battlefield, if it had one or more counters on it, you may put that number of +1/+1 counters on target creature.|
The Warring Triad|Final Fantasy Commander|193|R|{3}|Legendary Artifact Creature - God|5|5|Flying, trample, haste$As long as there are fewer than eight cards in your graveyard, The Warring Triad isn't a creature.${T}, Mill a card: Target player adds one mana of any color.|
-Summon: Good King Mog XII|Final Fantasy Commander|194|R|{4}{W}|Enchantment Creature - Saga Moogle|4|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I - Create two 1/2 white Moogle creature tokens with lifelink.$II, III - Whenever you cast a noncreature spell this turn, create a token that's a copy of a non-Saga token you control.$IV - Put two +1/+1 counters on each other Moogle you control.$Flying, lifelink|
-Summon: Ixion|Final Fantasy Commander|195|R|{2}{W}|Enchantment Creature - Saga Unicorn|3|3|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I - Aerospark -- Exile target creature an opponent controls until this Saga leaves the battlefield.$II, III - Put a +1/+1 counter on each of up to two target creatures you control. You gain 2 life.$First strike|
-Summon: Yojimbo|Final Fantasy Commander|196|R|{3}{W}|Enchantment Creature - Saga Samurai|5|5|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I - Exile target artifact, enchantment, or tapped creature an opponent controls.$II, III - Until your next turn, creatures can't attack you unless their controller pays {2} for each of those creatures.$IV - Create X Treasure tokens, where X is the number of opponents who control a creature with power 4 or greater.$Vigilance|
-Summon: Valefor|Final Fantasy Commander|197|R|{4}{U}|Enchantment Creature - Saga Drake|5|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I - Sonic Wings -- Each opponent chooses a creature with the greatest mana value among creatures they control. Return those creatures to their owners' hands.$II, III, IV - Tap up to one target creature and put a stun counter on it.$Flying|
+Summon: Good King Mog XII|Final Fantasy Commander|194|R|{4}{W}|Enchantment Creature - Saga Moogle|4|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Create two 1/2 white Moogle creature tokens with lifelink.$II, III -- Whenever you cast a noncreature spell this turn, create a token that's a copy of a non-Saga token you control.$IV -- Put two +1/+1 counters on each other Moogle you control.$Flying, lifelink|
+Summon: Ixion|Final Fantasy Commander|195|R|{2}{W}|Enchantment Creature - Saga Unicorn|3|3|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I -- Aerospark -- Exile target creature an opponent controls until this Saga leaves the battlefield.$II, III -- Put a +1/+1 counter on each of up to two target creatures you control. You gain 2 life.$First strike|
+Summon: Yojimbo|Final Fantasy Commander|196|R|{3}{W}|Enchantment Creature - Saga Samurai|5|5|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Exile target artifact, enchantment, or tapped creature an opponent controls.$II, III -- Until your next turn, creatures can't attack you unless their controller pays {2} for each of those creatures.$IV -- Create X Treasure tokens, where X is the number of opponents who control a creature with power 4 or greater.$Vigilance|
+Summon: Valefor|Final Fantasy Commander|197|R|{4}{U}|Enchantment Creature - Saga Drake|5|4|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Sonic Wings -- Each opponent chooses a creature with the greatest mana value among creatures they control. Return those creatures to their owners' hands.$II, III, IV -- Tap up to one target creature and put a stun counter on it.$Flying|
Summon: Esper Valigarmanda|Final Fantasy Commander|198|R|{3}{R}|Enchantment Creature - Saga Drake|3|3|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)$I -- Exile an instant or sorcery card from each graveyard.$II, III, IV -- Add {R} for each lore counter on this Saga. You may cast an instant or sorcery card exiled with this Saga, and mana of any type can be spent to cast that spell.$Flying, haste|
Summon: Kujata|Final Fantasy Commander|199|R|{5}{R}|Enchantment Creature - Saga Ox|7|5|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I -- Lightning -- This creature deals 3 damage to each of up to two target creatures.$II -- Ice -- Up to three target creatures can't block this turn.$III -- Fire -- Discard a card, then draw two cards. When you discard a card this way, this creature deals damage equal to that card's mana value to each opponent.$Trample, haste|
Summon: Magus Sisters|Final Fantasy Commander|200|R|{4}{G}|Enchantment Creature - Saga Faerie|5|5|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I, II, III -- Choose one at random --$* Combine Powers! -- Put three +1/+1 counters on target creature.$* Defense! -- Put a shield counter on target creature. You gain 3 life.$* Fight! -- This creature fights up to one target creature an opponent controls.$Haste|
@@ -57617,7 +57617,7 @@ Chaos Warp|Final Fantasy Commander|291|R|{2}{R}|Instant|||The owner of target pe
Combustible Gearhulk|Final Fantasy Commander|292|M|{4}{R}{R}|Artifact Creature - Construct|6|6|First strike$When this creature enters, target opponent may have you draw three cards. If the player doesn't, you mill three cards, then this creature deals damage to that player equal to the total mana value of those cards.|
Flayer of the Hatebound|Final Fantasy Commander|293|R|{5}{R}|Creature - Devil|4|2|Undying$Whenever this creature or another creature enters from your graveyard, that creature deals damage equal to its power to any target.|
Furious Rise|Final Fantasy Commander|294|U|{2}{R}|Enchantment|||At the beginning of your end step, if you control a creature with power 4 or greater, exile the top card of your library. You may play that card until you exile another card with this enchantment.|
-Hellkite Tyrant|Final Fantasy Commander|295|R|{4}{R}{R}|Creature - Dragon|6|5|Flying, trample$Whenever Hellkite Tyrant deals combat damage to a player, gain control of all artifacts that player controls.$At the beginning of your upkeep, if you control twenty or more artifacts, you win the game.|
+Hellkite Tyrant|Final Fantasy Commander|295|R|{4}{R}{R}|Creature - Dragon|6|5|Flying, trample$Whenever this creature deals combat damage to a player, gain control of all artifacts that player controls.$At the beginning of your upkeep, if you control twenty or more artifacts, you win the game.|
Professional Face-Breaker|Final Fantasy Commander|296|R|{2}{R}|Creature - Human Warrior|2|3|Menace$Whenever one or more creatures you control deal combat damage to a player, create a Treasure token.$Sacrifice a Treasure: Exile the top card of your library. You may play that card this turn.|
Ruin Grinder|Final Fantasy Commander|297|R|{5}{R}|Artifact Creature - Construct|7|4|Menace$When this creature dies, each player may discard their hand and draw seven cards.$Mountaincycling {2}|
Vandalblast|Final Fantasy Commander|298|U|{R}|Sorcery|||Destroy target artifact you don't control.$Overload {4}{R}|
@@ -57764,6 +57764,48 @@ Temple of the False God|Final Fantasy Commander|438|U||Land|||{T}: Add {C}{C}. A
Underground River|Final Fantasy Commander|439|R||Land|||{T}: Add {C}.${T}: Add {U} or {B}. This land deals 1 damage to you.|
Vineglimmer Snarl|Final Fantasy Commander|440|R||Land|||As this land enters, you may reveal a Forest or Island card from your hand. If you don't, this land enters tapped.${T}: Add {G} or {U}.|
Wooded Ridgeline|Final Fantasy Commander|441|C||Land - Mountain Forest|||({T}: Add {R} or {G}.)$This land enters tapped.|
+Garland, Royal Kidnapper|Final Fantasy Commander|442|R|{2}{U}{B}|Legendary Creature - Human Knight|3|4|When Garland enters, target opponent becomes the monarch.$Whenever an opponent becomes the monarch, gain control of target creature that player controls for as long as they're the monarch.$Creatures you control but don't own get +2/+2 and can't be sacrificed.|
+The Destined Warrior|Final Fantasy Commander|443|R|{1}{W}{U}{B}|Legendary Creature - Human Warrior|3|3|First strike, vigilance, menace$Cleric, Rogue, Warrior, and Wizard spells you cast cost {1} less to cast.$At the beginning of combat on your turn, creatures you control get +1/+0 until end of turn. If you have a full party, creatures you control get +3/+0 until end of turn instead.|
+The Destined White Mage|Final Fantasy Commander|444|R|{2}{W}|Legendary Creature - Human Cleric|2|3|Lifelink${W}, {T}: Another target creature you control gains lifelink until end of turn.$Whenever you gain life, put a +1/+1 counter on target creature you control. If you have a full party, put three +1/+1 counters on that creature instead.|
+Chaos Shrine's Black Crystal|Final Fantasy Commander|445|R|{3}{B}|Legendary Artifact|||Whenever a nontoken creature you control dies, exile it.$At the beginning of your upkeep, you may put a creature card exiled with Chaos Shrine's Black Crystal onto the battlefield under your control with a finality counter on it.|
+The Destined Thief|Final Fantasy Commander|446|R|{2}{U}|Legendary Creature - Human Rogue|2|2|The Destined Thief can't be blocked.${U}, {T}: Another target creature you control can't be blocked this turn.$Whenever one or more creatures you control deal combat damage to one or more players, draw a card, then discard a card. If you have a full party, instead draw three cards.|
+The Destined Black Mage|Final Fantasy Commander|447|R|{2}{B}|Legendary Creature - Human Wizard|3|2|Deathtouch${B}, {T}: Another target creature you control gains deathtouch until end of turn.$Whenever you cast a noncreature spell, The Destined Black Mage deals 1 damage to each opponent. If you have a full party, it deals 3 damage to each opponent instead.|
+Edea, Possessed Sorceress|Final Fantasy Commander|448|R|{2}{U}{B}{R}|Legendary Creature - Human Warlock|2|5|Ward {2}$At the beginning of combat on your turn, gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn.$Whenever a creature you control but don't own dies, return it to the battlefield under its owner's control and you draw a card.|
+Fated Clash|Final Fantasy Commander|449|R|{3}{W}{W}|Sorcery|||You may cast this spell as though it had flash if a creature is attacking and a creature is blocking.$Target creature you control and target creature an opponent controls each gain indestructible until end of turn. Then destroy all creatures.|
+Rinoa, Angel Wing|Final Fantasy Commander|450|R|{2}{W}|Legendary Creature - Human Rebel Warlock|2|4|At the beginning of combat on your turn, creatures you control with flying get +1/+1 and gain vigilance until end of turn.$Whenever one or more attacking creatures you control die, you may return one of them to the battlefield tapped under its owner's control with a flying counter on it. Do this only once each turn.|
+Seifer, Balamb Rival|Final Fantasy Commander|451|R|{2}{B}{R}|Legendary Creature - Human Mercenary|4|3|First strike$Whenever you attack a player, goad target creature that player controls.$Whenever a creature attacking one of your opponents becomes blocked by two or more creatures, that attacking creature gains deathtouch until end of turn.|
+Duelist's Flame|Final Fantasy Commander|452|R|{X}{R}{R}|Instant|||Until end of turn, target blocked creature you control gets +X/+0 and gains trample and "Whenever this creature deals combat damage to a player, look at that many cards from the top of your library. Exile up to one nonland card from among them and put the rest on the bottom of your library in a random order. You may cast the exiled card without paying its mana cost."|
+Squall, Gunblade Duelist|Final Fantasy Commander|453|R|{R}{W}{B}|Legendary Creature - Human Mercenary|3|2|First strike$As Squall enters, choose a number.$Whenever one or more creatures attack one of your opponents, if any of those creatures have power or toughness equal to the chosen number, Squall deals damage equal to its power to defending player.|
+Brilliant Wings|Final Fantasy Commander|454|R|{1}{W}|Enchantment - Aura|||Flash$Enchant creature you control$Enchanted creature has flying and hexproof.$Whenever a creature you control enters, you may pay {1}. If you do, attach this Aura to that creature.|
+Judgment of Alexander|Final Fantasy Commander|455|R|{2}{W}|Instant|||Prevent all damage that would be dealt to you this turn by sources your opponents control. Whenever damage from a creature is prevented this way, each commander creature you control deals damage equal to its power to that creature.|
+Mega Flare|Final Fantasy Commander|456|R|{2}{R}|Sorcery|||Kicker {3}{R}{R}$If this spell was kicked, create a 6/6 red Dragon creature token with flying.$For each opponent, choose up to one target creature that player controls. Mega Flare deals damage equal to the greatest power among creatures you control to each of the chosen creatures.|
+Amarant Coral|Final Fantasy Commander|457|R|{2}{R}{G}|Legendary Creature - Human Monk|5|4|Trample$Amarant Coral attacks each combat if able.$No Mercy -- Whenever Amarant Coral deals combat damage to an opponent, it deals that much damage to each other opponent.|
+Vivi's Persistence|Final Fantasy Commander|458|R|{1}{R}|Instant|||Create a 0/1 black Wizard creature token with "Whenever you cast a noncreature spell, this token deals 1 damage to each opponent."$Whenever your commander enters or attacks, you may pay. If you do, return this card from your graveyard to your hand.|
+Search for Dagger|Final Fantasy Commander|459|R|{1}{W}|Enchantment|||Whenever your commander enters or attacks, look at the top six cards of your library. You may reveal a legendary creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.|
+Noctis, Heir Apparent|Final Fantasy Commander|460|R|{W}{U}{B}|Legendary Creature - Human Noble|2|3|Whenever a creature you control enters during combat, you may attach target Equipment you control to target creature you control.$Warp-Strike -- {3}: Exile Noctis. Return it to the battlefield under its owner's control tapped and attacking at the beginning of that player's next declare attackers step. It can't be blocked that combat.|
+Fishing Gear|Final Fantasy Commander|461|R|{3}|Artifact - Equipment|||Whenever equipped creature deals combat damage to a player, exile the top card of that player's library. If it's a permanent card, you may put it onto the battlefield under your control. If you don't, create a 1/1 blue Fish creature token.$Equip {2}|
+Chocobo Camp|Final Fantasy Commander|462|R||Land|||This land enters tapped unless you control a legendary creature.${T}: Add {G}. When you next cast a Bird creature spell this turn, it enters with an additional +1/+1 counter on it.${2}{G}{G}, {T}: Create a 2/2 green Bird creature token with "Whenever a land you control enters, this token gets +1/+0 until end of turn."|
+Flash Photography|Final Fantasy Commander|463|R|{2}{U}{U}|Sorcery|||You may cast this spell as though it had flash if it targets a permanent you control.$Create a token that's a copy of target permanent.$Flashback {4}{U}{U}|
+Campsite Cuisine|Final Fantasy Commander|464|R|{1}{G}|Enchantment|||Whenever this enchantment or a legendary creature you control enters, create a Food token.$Whenever you attack, you may sacrifice X Foods. When you do, up to X target attacking creatures each get +3/+3 and gain trample and indestructible until end of turn.|
+Warrior's Resolve|Final Fantasy Commander|465|R|{2}{W}|Enchantment|||Creatures you control have training.$At the beginning of your end step, if you control a creature with a +1/+1 counter on it that attacked this turn, draw a card.|
+Tataru Taru|Final Fantasy Commander|466|R|{1}{W}|Legendary Creature - Dwarf Advisor|0|3|When Tataru Taru enters, you draw a card and target opponent may draw a card.$Scions' Secretary -- Whenever an opponent draws a card, if it isn't that player's turn, create a tapped Treasure token. This ability triggers only once each turn.|
+Lulu, Stern Guardian|Final Fantasy Commander|467|R|{2}{U}|Legendary Creature - Human Wizard|2|3|Whenever an opponent attacks you, choose target creature attacking you. Put a stun counter on that creature.${3}{U}: Proliferate.|
+Rikku, Resourceful Guardian|Final Fantasy Commander|468|R|{2}{U}|Legendary Creature - Human Artificer|2|3|Whenever you put one or more counters on a creature, until end of turn, that creature can't be blocked by creatures your opponents control.$Steal -- {1}, {T}: Move a counter from target creature an opponent controls onto target creature you control. Activate only as a sorcery.|
+Snapcaster Mage|Final Fantasy Commander|469|M|{1}{U}|Creature - Human Wizard|2|1|Flash$When this creature enters, target instant or sorcery card in your graveyard gains flashback until end of turn. The flashback cost is equal to its mana cost.|
+Yuffie, Materia Hunter|Final Fantasy Commander|470|R|{2}{R}|Legendary Creature - Human Ninja|3|3|Ninjutsu {1}{R}$When Yuffie enters, gain control of target noncreature artifact for as long as you control Yuffie. Then you may attach an Equipment you control to Yuffie.|
+Aerith, Last Ancient|Final Fantasy Commander|471|R|{2}{G}{W}|Legendary Creature - Human Cleric Druid|3|5|Lifelink$Raise -- At the beginning of your end step, if you gained life this turn, return target creature card from your graveyard to your hand. If you gained 7 or more life this turn, return that card to the battlefield instead.|
+Barret, Avalanche Leader|Final Fantasy Commander|472|R|{2}{R}{G}|Legendary Creature - Human Rebel|4|4|Reach$Avalanche! -- Whenever an Equipment you control enters, create a 2/2 red Rebel creature token.$At the beginning of combat on your turn, attach up to one target Equipment you control to target Rebel you control.|
+Emet-Selch of the Third Seat|Final Fantasy Commander|473|R|{2}{U}{B}|Legendary Creature - Elder Wizard|3|4|Spells you cast from your graveyard cost {2} less to cast.$Whenever one or more opponents lose life, you may cast target instant or sorcery card from your graveyard. If that spell would be put into your graveyard, exile it instead. Do this only once each turn.|
+Estinien Varlineau|Final Fantasy Commander|474|R|{2}{W}{B}|Legendary Creature - Elf Warrior|3|3|Whenever you cast a noncreature spell, put a +1/+1 counter on Estinien Varlineau. It gains flying until end of turn.$At the beginning of your second main phase, you draw X cards and lose X life, where X is the number of your opponents who were dealt combat damage by Estinien Varlineau or a Dragon this turn.|
+Locke, Treasure Hunter|Final Fantasy Commander|475|R|{1}{B}{R}|Legendary Creature - Human Rogue|2|3|Locke can't be blocked by creatures with greater power.$Mug -- Whenever Locke attacks, each player mills a card. If a land card was milled this way, create a Treasure token. Until end of turn, you may cast a spell from among those cards.|
+Mog, Moogle Warrior|Final Fantasy Commander|476|R|{1}{R}{W}|Legendary Creature - Moogle Warrior|1|2|Lifelink$Dance -- At the beginning of your end step, each player may discard a card. Each player who discarded a card this way draws a card. If a creature card was discarded this way, you create a 1/2 white Moogle creature token with lifelink. Then if a noncreature card was discarded this way, put a +1/+1 counter on each Moogle you control.|
+Wakka, Devoted Guardian|Final Fantasy Commander|477|R|{2}{G}{W}|Legendary Creature - Human Warrior|4|4|Reach, trample$Whenever Wakka deals combat damage to a player, destroy up to one target artifact that player controls and put a +1/+1 counter on Wakka.$Blitzball Captain -- At the beginning of your end step, if a counter was put on Wakka this turn, put a +1/+1 counter on each other creature you control.|
+Plains|Final Fantasy Commander|478|C||Basic Land - Plains|||({T}: Add {W}.)|
+Island|Final Fantasy Commander|479|C||Basic Land - Island|||({T}: Add {U}.)|
+Swamp|Final Fantasy Commander|480|C||Basic Land - Swamp|||({T}: Add {B}.)|
+Mountain|Final Fantasy Commander|481|C||Basic Land - Mountain|||({T}: Add {R}.)|
+Forest|Final Fantasy Commander|482|C||Basic Land - Forest|||({T}: Add {G}.)|
+Birds of Paradise|Final Fantasy Commander|483|R|{G}|Creature - Bird|0|1|Flying${T}: Add one mana of any color.|
Command Tower|Final Fantasy Commander|484|C||Land|||{T}: Add one mana of any color in your commander's color identity.|
Command Tower|Final Fantasy Commander|485|C||Land|||{T}: Add one mana of any color in your commander's color identity.|
Command Tower|Final Fantasy Commander|486|C||Land|||{T}: Add one mana of any color in your commander's color identity.|
@@ -60233,3 +60275,110 @@ Plains|Avatar: The Last Airbender Eternal|301|C||Basic Land - Plains|||({T}: Add
Plains|Avatar: The Last Airbender Eternal|302|C||Basic Land - Plains|||({T}: Add {W}.)|
Plains|Avatar: The Last Airbender Eternal|303|C||Basic Land - Plains|||({T}: Add {W}.)|
Plains|Avatar: The Last Airbender Eternal|304|C||Basic Land - Plains|||({T}: Add {W}.)|
+Eirdu, Carrier of Dawn|Lorwyn Eclipsed|13|M|{3}{W}{W}|Legendary Creature - Elemental God|5|5|Flying, lifelink$Creature spells you cast have convoke.$At the beginning of your first main phase, you may pay {B}. If you do, transform Eirdu.|
+Isilu, Carrier of Twilight|Lorwyn Eclipsed|13|M||Legendary Creature - Elemental God|5|5|Flying, lifelink$Each other nontoken creature you control has persist.$At the beginning of your first main phase, you may pay {W}. If you do, transform Isilu.|
+Morningtide's Light|Lorwyn Eclipsed|27|M|{3}{W}|Sorcery|||Exile any number of target creatures. At the beginning of the next end step, return those cards to the battlefield tapped under their owners' control.$Until your next turn, prevent all damage that would be dealt to you.$Exile Morningtide's Light.|
+Sygg, Wanderwine Wisdom|Lorwyn Eclipsed|76|R|{1}{U}|Legendary Creature - Merfolk Wizard|2|2|Sygg can't be blocked.$Whenever this creature enters or transforms into Sygg, Wanderwine Wisdom, target creature gains "Whenever this creature deals combat damage to a player or planeswalker, draw a card" until end of turn.$At the beginning of your first main phase, you may pay {W}. If you do, transform Sygg.|
+Sygg, Wanderbrine Shield|Lorwyn Eclipsed|76|R||Legendary Creature - Merfolk Rogue|2|2|Sygg can't be blocked.$Whenever this creature transforms into Sygg, Wanderbrine Shield, target creature you control gains protection from each color until your next turn.$At the beginning of your first main phase, you may pay {U}. If you do, transform Sygg.|
+Bitterbloom Bearer|Lorwyn Eclipsed|88|M|{B}{B}|Creature - Faerie Rogue|1|1|Flash$Flying$At the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying.|
+Ashling, Rekindled|Lorwyn Eclipsed|124|R|{1}{R}|Legendary Creature - Elemental Sorcerer|1|3|Whenever this creature enters or transforms into Ashling, Rekindled, you may discard a card. If you do, draw a card.$At the beginning of your first main phase, you may pay {U}. If you do, transform Ashling.|
+Ashling, Rimebound|Lorwyn Eclipsed|124|R||Legendary Creature - Elemental Wizard|1|3|Whenever this creature transforms into Ashling, Rimebound and at the beginning of your first main phase, add two mana of any one color. Spend this mana only to cast spells with mana value 4 or greater.$At the beginning of your first main phase, you may pay {R}. If you do, transform Ashling.|
+Formidable Speaker|Lorwyn Eclipsed|176|R|{2}{G}|Creature - Elf Druid|2|4|When this creature enters, you may discard a card. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle.${1}, {T}: Untap another target permanent.|
+Mutable Explorer|Lorwyn Eclipsed|186|R|{2}{G}|Creature - Shapeshifter|1|1|Changeling$When this creature enters, create a tapped Mutavault token.|
+Ashling's Command|Lorwyn Eclipsed|205|R|{3}{U}{R}|Kindred Instant - Elemental|||Choose two --$* Create a token that's a copy of target Elemental you control.$* Target player draws two cards.$* Ashling's Command deals 2 damage to each creature target player controls.$* Target player creates two Treasure tokens.|
+Deceit|Lorwyn Eclipsed|212|M|{4}{U/B}{U/B}|Creature - Elemental Incarnation|5|5|When this creature enters, if {U}{U} was spent to cast it, return up to one other target nonland permanent to its owner's hand.$When this creature enters, if {B}{B} was spent to cast it, target opponent reveals their hand. You choose a nonland card from it. That player discards that card.$Evoke {U/B}{U/B}|
+Emptiness|Lorwyn Eclipsed|222|M|{4}{W/B}{W/B}|Creature - Elemental Incarnation|3|5|When this creature enters, if {W}{W} was spent to cast it, return target creature card with mana value 3 or less from your graveyard to the battlefield.$When this creature enters, if {B}{B} was spent to cast it, put three -1/-1 counters on up to one target creature.$Evoke {W/B}{W/B}|
+Figure of Fable|Lorwyn Eclipsed|224|R|{G/W}|Creature - Kithkin|1|1|{G/W}: This creature becomes a Kithkin Scout with base power and toughness 2/3.${1}{G/W}{G/W}: If this creature is a Scout, it becomes a Kithkin Soldier with base power and toughness 4/5.${3}{G/W}{G/W}{G/W}: If this creature is a Soldier, it becomes a Kithkin Avatar with base power and toughness 7/8 and protection from each of your opponents.|
+Blood Crypt|Lorwyn Eclipsed|262|R||Land - Swamp Mountain|||({T}: Add {B} or {R}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Hallowed Fountain|Lorwyn Eclipsed|265|R||Land - Plains Island|||({T}: Add {W} or {U}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Overgrown Tomb|Lorwyn Eclipsed|266|R||Land - Swamp Forest|||({T}: Add {B} or {G}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Steam Vents|Lorwyn Eclipsed|267|R||Land - Island Mountain|||({T}: Add {U} or {R}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Temple Garden|Lorwyn Eclipsed|268|R||Land - Forest Plains|||({T}: Add {G} or {W}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Eirdu, Carrier of Dawn|Lorwyn Eclipsed|286|M|{3}{W}{W}|Legendary Creature - Elemental God|5|5|Flying, lifelink$Creature spells you cast have convoke.$At the beginning of your first main phase, you may pay {B}. If you do, transform Eirdu.|
+Isilu, Carrier of Twilight|Lorwyn Eclipsed|286|M||Legendary Creature - Elemental God|5|5|Flying, lifelink$Each other nontoken creature you control has persist.$At the beginning of your first main phase, you may pay {W}. If you do, transform Isilu.|
+Sygg, Wanderwine Wisdom|Lorwyn Eclipsed|288|R|{1}{U}|Legendary Creature - Merfolk Wizard|2|2|Sygg can't be blocked.$Whenever this creature enters or transforms into Sygg, Wanderwine Wisdom, target creature gains "Whenever this creature deals combat damage to a player or planeswalker, draw a card" until end of turn.$At the beginning of your first main phase, you may pay {W}. If you do, transform Sygg.|
+Sygg, Wanderbrine Shield|Lorwyn Eclipsed|288|R||Legendary Creature - Merfolk Rogue|2|2|Sygg can't be blocked.$Whenever this creature transforms into Sygg, Wanderbrine Shield, target creature you control gains protection from each color until your next turn.$At the beginning of your first main phase, you may pay {U}. If you do, transform Sygg.|
+Ashling, Rekindled|Lorwyn Eclipsed|290|R|{1}{R}|Legendary Creature - Elemental Sorcerer|1|3|Whenever this creature enters or transforms into Ashling, Rekindled, you may discard a card. If you do, draw a card.$At the beginning of your first main phase, you may pay {U}. If you do, transform Ashling.|
+Ashling, Rimebound|Lorwyn Eclipsed|290|R||Legendary Creature - Elemental Wizard|1|3|Whenever this creature transforms into Ashling, Rimebound and at the beginning of your first main phase, add two mana of any one color. Spend this mana only to cast spells with mana value 4 or greater.$At the beginning of your first main phase, you may pay {R}. If you do, transform Ashling.|
+Deceit|Lorwyn Eclipsed|293|M|{4}{U/B}{U/B}|Creature - Elemental Incarnation|5|5|When this creature enters, if {U}{U} was spent to cast it, return up to one other target nonland permanent to its owner's hand.$When this creature enters, if {B}{B} was spent to cast it, target opponent reveals their hand. You choose a nonland card from it. That player discards that card.$Evoke {U/B}{U/B}|
+Emptiness|Lorwyn Eclipsed|294|M|{4}{W/B}{W/B}|Creature - Elemental Incarnation|3|5|When this creature enters, if {W}{W} was spent to cast it, return target creature card with mana value 3 or less from your graveyard to the battlefield.$When this creature enters, if {B}{B} was spent to cast it, put three -1/-1 counters on up to one target creature.$Evoke {W/B}{W/B}|
+Morningtide's Light|Lorwyn Eclipsed|301|M|{3}{W}|Sorcery|||Exile any number of target creatures. At the beginning of the next end step, return those cards to the battlefield tapped under their owners' control.$Until your next turn, prevent all damage that would be dealt to you.$Exile Morningtide's Light.|
+Bitterbloom Bearer|Lorwyn Eclipsed|310|M|{B}{B}|Creature - Faerie Rogue|1|1|Flash$Flying$At the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying.|
+Mutable Explorer|Lorwyn Eclipsed|327|R|{2}{G}|Creature - Shapeshifter|1|1|Changeling$When this creature enters, create a tapped Mutavault token.|
+Ashling's Command|Lorwyn Eclipsed|330|R|{3}{U}{R}|Kindred Instant - Elemental|||Choose two --$* Create a token that's a copy of target Elemental you control.$* Target player draws two cards.$* Ashling's Command deals 2 damage to each creature target player controls.$* Target player creates two Treasure tokens.|
+Hallowed Fountain|Lorwyn Eclipsed|347|R||Land - Plains Island|||({T}: Add {W} or {U}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Steam Vents|Lorwyn Eclipsed|348|R||Land - Island Mountain|||({T}: Add {U} or {R}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Blood Crypt|Lorwyn Eclipsed|349|R||Land - Swamp Mountain|||({T}: Add {B} or {R}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Overgrown Tomb|Lorwyn Eclipsed|350|R||Land - Swamp Forest|||({T}: Add {B} or {G}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Temple Garden|Lorwyn Eclipsed|351|R||Land - Forest Plains|||({T}: Add {G} or {W}.)$As this land enters, you may pay 2 life. If you don't, it enters tapped.|
+Bitterbloom Bearer|Lorwyn Eclipsed|352|M|{B}{B}|Creature - Faerie Rogue|1|1|Flash$Flying$At the beginning of your upkeep, you lose 1 life and create a 1/1 blue and black Faerie creature token with flying.|
+Formidable Speaker|Lorwyn Eclipsed|366|R|{2}{G}|Creature - Elf Druid|2|4|When this creature enters, you may discard a card. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle.${1}, {T}: Untap another target permanent.|
+Figure of Fable|Lorwyn Eclipsed|372|R|{G/W}|Creature - Kithkin|1|1|{G/W}: This creature becomes a Kithkin Scout with base power and toughness 2/3.${1}{G/W}{G/W}: If this creature is a Scout, it becomes a Kithkin Soldier with base power and toughness 4/5.${3}{G/W}{G/W}{G/W}: If this creature is a Soldier, it becomes a Kithkin Avatar with base power and toughness 7/8 and protection from each of your opponents.|
+Greymond, Avacyn's Stalwart|Secret Lair Drop|143|M|{2}{W}{W}|Legendary Creature - Human Soldier|3|4|As Greymond, Avacyn's Stalwart enters, choose two abilities from among first strike, vigilance, and lifelink.$Humans you control have each of the chosen abilities.$As long as you control four or more Humans, Humans you control get +2/+2.|
+Hansk, Slayer Zealot|Secret Lair Drop|144|M|{2}{R}{G}|Legendary Creature - Human Archer|4|4|At the beginning of your upkeep, target opponent creates three Walker tokens.${T}: Hansk, Slayer Zealot deals 2 damage to target creature.$Whenever a Zombie an opponent controls dies, draw a card.|
+Gregor, Shrewd Magistrate|Secret Lair Drop|145|M|{1}{W}{U}|Legendary Creature - Human Advisor|1|3|Skulk$Whenever Gregor, Shrewd Magistrate deals combat damage to a player, draw cards equal to its power.|
+Enkira, Hostile Scavenger|Secret Lair Drop|146|M|{3}{B}{G}|Legendary Creature - Human Warrior|3|3|When Enkira, Hostile Scavenger enters, create two Walker tokens.$As long as Enkira is equipped, it must be blocked if able.$Whenever Enkira and at least two Zombies attack, Enkira gains indestructible until end of turn.|
+Malik, Grim Manipulator|Secret Lair Drop|147|M|{2}{R}{W}{B}|Legendary Creature - Human Rogue|4|3|When Malik, Grim Manipulator enters the battlefield, you and target opponent each secretly choose a creature that player controls. Then those choices are revealed, and that player sacrifices those creatures.$Whenever an opponent sacrifices a creature, you create a Treasure token.|
+Arvinox, the Mind Flail|Secret Lair Drop|340|M|{4}{B}{B}{B}|Legendary Enchantment Creature - Horror|9|9|Arvinox isn't a creature unless you control three or more permanents you don't own.$At the beginning of your end step, exile the bottom card of each opponent's library face down. For as long as those cards remain exiled, you may look at them, you may cast permanent spells from among them, and you may spend mana as though it were mana of any color to cast those spells.|
+Sophina, Spearsage Deserter|Secret Lair Drop|341|R|{2}{R}{W}|Legendary Creature - Human Soldier|4|4|Menace$Whenever Sophina, Spearsage Deserter attacks, investigate once for each nontoken attacking creature.$Friends forever|
+Hargilde, Kindly Runechanter|Secret Lair Drop|342|R|{2}{W}{U}|Legendary Creature - Human|2|3|{T}: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.$Friends forever|
+Cecily, Haunted Mage|Secret Lair Drop|343|R|{1}{U}{B}{R}|Legendary Creature - Human Wizard|3|5|Your maximum hand size is eleven.$Whenever Cecily, Haunted Mage attacks, you draw a card and you lose 1 life. Then if you have eleven or more cards in your hand, you may cast an instant or sorcery spell from your hand without paying its mana cost.$Friends forever|
+Bjorna, Nightfall Alchemist|Secret Lair Drop|344|R|{U}{R}|Legendary Creature - Human|1|3|{T}, Sacrifice an artifact: Bjorna, Nightfall Alchemist deals 1 damage to target creature. Goad that creature.$Friends forever|
+Elmar, Ulvenwald Informant|Secret Lair Drop|345|R|{1}{R}{G}|Legendary Creature - Human|3|2|Haste$Whenever you cast your second spell each turn, untap target creature, then investigate.$Friends forever|
+Othelm, Sigardian Outcast|Secret Lair Drop|346|R|{1}{G}{W}|Legendary Creature - Human|2|2|{2}, {T}: Choose target creature card in your graveyard that was put there from the battlefield this turn. Return it to the battlefield tapped.$Friends forever|
+Wernog, Rider's Chaplain|Secret Lair Drop|347|R|{W}{B}|Legendary Creature - Human|1|2|When Wernog, Rider's Chaplain enters or leaves the battlefield, each opponent may investigate. Each opponent who doesn't loses 1 life. You investigate X times, where X is one plus the number of opponents who investigated this way.$Friends forever|
+Baldin, Century Herdmaster|Secret Lair Drop|428|R|{4}{W}{W}|Legendary Creature - Human Warrior|0|7|During your turn, each creature assigns combat damage equal to its toughness rather than its power.$Whenever Baldin attacks, up to one hundred target creatures each get +0/+X until end of turn, where X is the number of cards in your hand.|
+Vikya, Scorching Stalwart|Secret Lair Drop|429|R|{2}{W}|Legendary Creature - Human Warrior|2|4|Training${4}{R}, {Q}, Discard a card: Vikya, Scorching Stalwart deals damage equal to its power to any target. If excess damage was dealt to a creature this way, draw a card.|
+Aisha of Sparks and Smoke|Secret Lair Drop|430|R|{1}{R}{R}|Legendary Creature - Human Warrior|4|2|Prowess${R/W}: Aisha of Sparks and Smoke gains first strike until end of turn.$Whenever Aisha deals combat damage, you may cast a sorcery spell from your hand with mana value less than or equal to that damage without paying its mana cost.|
+The Howling Abomination|Secret Lair Drop|431|R|{3}{R}{G}|Legendary Creature - Human Beast Warrior|5|5|Haste$The Howling Abomination has trample as long as you've cast three or more spells this turn.$Whenever The Howling Abomination becomes the target of a spell, it gets +2/+2 until end of turn and deals 2 damage to each opponent.|
+Zethi, Arcane Blademaster|Secret Lair Drop|432|R|{1}{W}{U}|Legendary Creature - Human Soldier|3|3|Multikicker {W/U}$When Zethi, Arcane Blademaster enters, exile up to X target instant cards from your graveyard, where X is the number of times Zethi was kicked. Put a kick counter on each of them.$Whenever Zethi attacks, copy each exiled card you own with a kick counter on it. You may cast the copies.|
+Tadeas, Juniper Ascendant|Secret Lair Drop|433|R|{2}{G}{W}|Legendary Creature - Human Monk|1|3|Reach$Tadeas has hexproof unless it's attacking.$Whenever a creature you control with reach attacks, untap it and it can't be blocked by creatures with greater power this combat.$Whenever one or more creatures you control deal combat damage to a player, draw a card.|
+Immard, the Stormcleaver|Secret Lair Drop|434|R|{1}{U}{R}{W}|Legendary Creature - Human Soldier|4|4|Whenever Immard, the Stormcleaver enters or attacks, put a charge counter on it or remove one from it. When you remove a counter this way, choose one --$* Immard deals 4 damage to any target.$* Immard gains lifelink and indestructible until end of turn.|
+Maarika, Brutal Gladiator|Secret Lair Drop|435|R|{2}{B}{R}{G}|Legendary Creature - Human Warrior|7|4|Maarika, Brutal Gladiator must be blocked if able.$As long as it's your turn, Maarika has indestructible.$Whenever Maarika deals damage to a creature, if that creature was dealt excess damage this turn, that creature's controller sacrifices a noncreature, nonland permanent.|
+Gisa's Favorite Shovel|Secret Lair Drop|581|M|{1}{B}|Legendary Artifact - Equipment|||Equipped creature gets +2/+0 and has menace.$Whenever equipped creature attacks, defending player sacrifices a creature of their choice. If they do, you create a Walker token.$Equip {4}|
+Havengul Laboratory|Secret Lair Drop|609|R||Legendary Land|||{T}: Add {C}.${4}, {T}: Investigate.$At the beginning of your end step, if you sacrificed three or more Clues this turn, transform Havengul Laboratory.|
+Havengul Mystery|Secret Lair Drop|609|R||Legendary Land|||When this land transforms into Havengul Mystery, return target creature card from your graveyard to the battlefield.$When the creature put onto the battlefield with Havengul Mystery leaves the battlefield, transform Havengul Mystery.${T}, Pay 1 life: Add {B}.|
+Themberchaud|Secret Lair Drop|728|R|{4}{R}{R}{R}|Legendary Creature - Dragon|5|5|Trample$When Themberchaud enters, he deals X damage to each other creature without flying and each player, where X is the number of Mountains you control.$You may exert Themberchaud as he attacks. When you do, he gains flying until end of turn.|
+Discord, Lord of Disharmony|Secret Lair Drop|798|M|{2}{B}{R}|Legendary Creature - Chimera|3|5|Flying$At the beginning of your end step, choose a random nonland Magic card name. Until your next end step, you may cast a copy of a spell with that name, and mana of any type can be spent to cast it. If you cast a spell this way, copy this ability if Discord is on the battlefield.|
+Rashel, Fist of Torm|Secret Lair Drop|1237|R|{2}{W}{W}|Legendary Creature - Human Knight|2|4|Double strike$Auras you control have exalted.|
+Mathise, Surge Channeler|Secret Lair Drop|1238|R|{2}{U}|Legendary Creature - Human Elf Shaman|1|1|Whenever you cast an instant or sorcery spell with mana value 3 or greater, roll a d20.$1-9 & Each player draws a card.$10-19 & You draw a card.$20 & Copy that spell. You may choose new targets for the copy.|
+Evin, Waterdeep Opportunist|Secret Lair Drop|1239|R|{3}{B}|Legendary Creature - Human Rogue|2|4|Menace$Ward--Sacrifice a creature.$Evin gets +2/+0 for each Treasure you control.$Whenever one or more players sacrifice one or more creatures, you create a tapped Treasure token. This ability triggers only once each turn.|
+Jurin, Leading the Charge|Secret Lair Drop|1240|R|{4}{R}{R}|Legendary Creature - Human Barbarian|4|6|Haste$Jurin must be blocked if able.$Whenever Jurin attacks, each creature you control attacking a player gets +1/+0 until end of turn for each creature that player controls.|
+Casal, Lurkwood Pathfinder|Secret Lair Drop|1241|R|{3}{G}|Legendary Creature - Tiefling Druid|3|3|Vigilance$When Casal enters, search your library for a Forest card, put it onto the battlefield tapped, then shuffle.$Whenever Casal attacks, you may pay {1}{G}. If you do, transform her.|
+Casal, Pathbreaker Owlbear|Secret Lair Drop|1241|R||Legendary Creature - Bird Bear|6|6|Vigilance, trample$When this creature transforms into Casal, Pathbreaker Owlbear, other legendary creatures you control get +2/+2 and gain trample until end of turn.$At the beginning of your upkeep, transform Casal.|
+Bohn, Beguiling Balladeer|Secret Lair Drop|1242|R|{1}{U}{R}|Legendary Creature - Human Bard|3|3|Each nonland card in your hand without foretell has foretell. Its foretell cost is equal to its mana cost reduced by {2}.$Whenever you cast your second spell each turn, goad target creature an opponent controls.|
+Arden Angel|Secret Lair Drop|1344|R|{4}{W}{W}|Creature - Angel|4|4|Flying$At the beginning of your upkeep, if Arden Angel is in your graveyard, roll a four-sided die. If the result is 1, return Arden Angel from your graveyard to the battlefield.|
+Lara Croft, Tomb Raider|Secret Lair Drop|1501|M|{G}{U}{R}|Legendary Creature - Human Ranger|3|4|First strike, reach$Whenever Lara Croft attacks, exile up to one target legendary artifact card or legendary land card from a graveyard and put a discovery counter on it. You may play a card from exile with a discovery counter on it this turn.$Raid -- At end of combat on your turn, if you attacked this turn, create a Treasure token.|
+Applejack|Secret Lair Drop|1537|M|{2}{G}{W}|Legendary Creature - Pony|4|4|Family Gathering -- At the beginning of your end step, put a toy you own onto the battlefield as a 2/2 creature token with that toy's name, colors, and creature types. If the toy has wings, the token has flying. If the toy has a horn, scry 2. If it has neither, create a Food token.|
+Fluttershy|Secret Lair Drop|1538|M|{1}{G}{W}|Legendary Creature - Pegasus|0|4|Defender, flying${1}, {T}: Put a +1/+1 counter on each creature with a tail target player controls. Stare down up to one target creature until end of turn.|
+Pinkie Pie|Secret Lair Drop|1539|M|{R}{W}|Legendary Creature - Pony|2|2|Whenever you cast a spell with a smile in its art, create a tapped Treasure token.$Everypony's Invited -- Your party consists of each creature you control, and your party is always full.|
+Rainbow Dash|Secret Lair Drop|1540|M|{1}{R}{W}|Legendary Creature - Pegasus|2|2|Flying, haste$Whenever a creature you control with flying and/or haste attacks, you get 20% cooler.$Sonic Rainboom -- {T}: If you're at least 100% cool, add {W}{U}{B}{R}{G}, draw a card, and reset your coolness.|
+Rose Noble|Secret Lair Drop|1580|R|{3}{U}|Legendary Creature - Human|2|3|Ward {2}$Whenever you cast a Doctor spell or creature spell with doctor's companion, draw a card.$Doctor's companion|
+The Meep|Secret Lair Drop|1581|R|{2}{B}|Legendary Creature - Alien|0|4|Ward--Pay 3 life.$Whenever The Meep attacks, you may sacrifice another creature. If you do, creatures you control have base power and toughness X/X until end of turn, where X is the sacrificed creature's mana value.|
+The Celestial Toymaker|Secret Lair Drop|1582|R|{W}{U}{B}|Legendary Creature - Rogue Artificer|2|4|Whenever The Celestial Toymaker attacks, look at the top three cards of your library. Exile any number of them in a face-down pile and the rest in a face-up pile. Defending player chooses one of those piles. Put that pile into your hand.$At the beginning of each end step, each opponent loses 2 life for each spell or ability that caused one or more players to guess or to group cards or permanents into a pile this turn.|
+The Fourteenth Doctor|Secret Lair Drop|1583|R|{R/G}{W}{U}|Legendary Creature - Time Lord Doctor|3|4|When you cast this spell, reveal the top fourteen cards of your library. Put all Doctor cards revealed this way into your graveyard and the rest on the bottom of your library in a random order.$You may have The Fourteenth Doctor enter as a copy of a Doctor card in your graveyard that was put there from your library this turn. If you do, it gains haste until end of turn.|
+The Fifteenth Doctor|Secret Lair Drop|1584|R|{2}{U}{R}|Legendary Creature - Time Lord Doctor|3|3|Whenever The Fifteenth Doctor enters or attacks, mill three cards. You may put an artifact card with mana value 2 or 3 from among them into your hand.$The first nonartifact spell you cast each turn has improvise.|
+Captain America, First Avenger|Secret Lair Drop|1726|M|{R}{W}{U}|Legendary Creature - Human Soldier Hero|4|4|Throw ... -- {3}, Unattach an Equipment from Captain America: He deals damage equal to that Equipment's mana value divided as you choose among one, two, or three targets.$... Catch -- At the beginning of combat on your turn, attach up to one target Equipment you control to Captain America.|
+Iron Man, Titan of Innovation|Secret Lair Drop|1731|M|{3}{U}{R}|Legendary Artifact Creature - Human Hero|4|4|Flying, haste$Genius Industrialist -- Whenever Iron Man attacks, create a Treasure token, then you may sacrifice a noncreature artifact. If you do, search your library for an artifact card with mana value equal to 1 plus the sacrificed artifact's mana value, put it onto the battlefield tapped, then shuffle.|
+Wolverine, Best There Is|Secret Lair Drop|1737|M|{1}{R}{G}|Legendary Creature - Mutant Berserker Hero|2|2|Unrivaled Lethality -- Double all damage Wolverine would deal.$At the beginning of each end step, if Wolverine dealt damage to another creature this turn, put a +1/+1 counter on him.${1}{G}: Regenerate Wolverine.|
+Storm, Force of Nature|Secret Lair Drop|1742|M|{1}{G}{U}{R}|Legendary Creature - Mutant Hero|3|4|Flying, vigilance$Ceaseless Tempest -- Whenever Storm deals combat damage to a player, the next instant or sorcery spell you cast this turn has storm.|
+Black Panther, Wakandan King|Secret Lair Drop|1747|M|{G}{W}|Legendary Creature - Human Noble Hero|2|2|First strike$Survey the Realm -- Whenever Black Panther or another creature you control enters, put a +1/+1 counter on target land you control.$Mine Vibranium -- {3}: Move all +1/+1 counters from target land you control onto target creature. If one or more +1/+1 counters are moved this way, you gain that much life and draw a card.|
+Deadpool, Trading Card|Secret Lair Drop|1753|M|{2}{B}{R}|Legendary Creature - Mutant Mercenary Hero|5|3|As Deadpool enters, you may exchange his text box and another creature's.$At the beginning of your upkeep, you lose 3 life.${3}, Sacrifice this creature: Each other player draws a card.|
+Super State|Secret Lair Drop|2081|M|{7}|Legendary Enchantment - Aura|||Enchant creature you control$Enchanted creature has base power and toughness 9/9 and has flying, first strike, trample, and haste.$Whenever enchanted creature deals combat damage to an opponent, it deals that much damage to each other opponent.|
+Knuckles the Echidna|Secret Lair Drop|2082|M|{2}{R}{R}|Legendary Creature - Echidna Warrior|2|4|Double strike, trample, haste$Whenever one or more creatures you control deal combat damage to a player, create a Treasure token.$Treasure Hunter -- At the beginning of your upkeep, if you control thirty or more artifacts, you win the game.|
+Amy Rose|Secret Lair Drop|2083|M|{2}{R}{W}|Legendary Creature - Hedgehog Warrior|3|3|Haste$Whenever Amy Rose attacks, attach up to one target Equipment to her. Then up to one other target attacking creature gets +X/+0 until end of turn, where X is Amy Rose's power.|
+Dr. Eggman|Secret Lair Drop|2084|M|{2}{U}{B}{R}|Legendary Creature - Human Scientist|3|6|Flying$At the beginning of your end step, draw a card. Then each opponent faces a villainous choice -- That player discards a card, or you may put a Construct, Robot, or Vehicle card from your hand onto the battlefield.|
+Miles "Tails" Prower|Secret Lair Drop|2085|M|{1}{W}{U}|Legendary Creature - Fox Artificer|3|1|Flash$Flying$Whenever a Vehicle you control enters, draw a card if it has flying. Otherwise, put a flying counter on it.|
+Shadow the Hedgehog|Secret Lair Drop|2086|M|{B}{B}{R}{R}|Legendary Creature - Hedgehog Mercenary|4|2|Haste$Whenever Shadow the Hedgehog or another creature you control with flash or haste dies, draw a card.$Chaos Control -- Each spell you cast has split second if mana from an artifact was spent to cast it.|
+Sonic the Hedgehog|Secret Lair Drop|2087|M|{1}{U}{R}{W}|Legendary Creature - Hedgehog Warrior|2|4|Haste$Gotta Go Fast -- Whenever Sonic the Hedgehog attacks, put a +1/+1 counter on each creature you control with flash or haste.$Whenever a creature you control with flash or haste is dealt damage, create a tapped Treasure token.|
+Jaws, Relentless Predator|Secret Lair Drop|2175|M|{3}{R}{R}|Legendary Creature - Shark|5|5|Trample, haste$Whenever Jaws deals combat damage to a player, create that many Blood tokens.$Whenever a noncreature artifact is sacrificed or destroyed, Jaws deals 1 damage to each opponent.|
+Ellie, Brick Master|Secret Lair Drop|2197|M|{1}{R}|Legendary Creature - Human Survivor|2|1|Distract the Horde -- Whenever a player attacks one of your opponents, that attacking player creates a tapped 1/1 black Fungus Zombie creature token named Cordyceps Infected that's attacking that opponent.$Partner--Survivors|
+Joel, Resolute Survivor|Secret Lair Drop|2198|M|{3}{B}{G}|Legendary Creature - Human Survivor|4|4|Menace$Whenever a creature token dies, put a +1/+1 counter on Joel and draw a card. This ability triggers only once each turn.$Partner--Survivors|
+Abby, Merciless Soldier|Secret Lair Drop|2202|M|{1}{R}{G}|Legendary Creature - Human Survivor|4|4|When you cast this spell, create a number of 1/1 black Fungus Zombie creature tokens named Cordyceps Infected equal to the amount of mana spent to cast it.$Abby enters under the control of an opponent of your choice.$Partner--Survivors|
+Ellie, Vengeful Hunter|Secret Lair Drop|2203|M|{1}{B}{R}|Legendary Creature - Human Survivor|3|1|Pay 2 life, Sacrifice another creature: Ellie deals 2 damage to target player and gains indestructible until end of turn.$Partner--Survivors|
+Kratos, God of War|Secret Lair Drop|2207|M|{R}{R}{R}|Legendary Creature - God Warrior|2|3|Double strike$All creatures have haste.$At the beginning of each player's end step, Kratos deals damage to that player equal to the number of creatures that player controls that didn't attack this turn.|
+Atreus, Impulsive Son|Secret Lair Drop|2212|M|{1}{U}{R}|Legendary Creature - God Archer|2|4|Reach${3}, {T}: Draw a card for each experience counter you have, then discard a card. Atreus, Impulsive Son deals 2 damage to each opponent.$Partner--Father & son|
+Kratos, Stoic Father|Secret Lair Drop|2213|M|{2}{R}{W}|Legendary Creature - God Warrior|4|4|Whenever you attack with one or more Gods and whenever a God dies, you get an experience counter.$At the beginning of your end step, put a number of +1/+1 counters on target creature equal to the number of experience counters you have.$Partner--Father & son|
+Nathan Drake, Treasure Hunter|Secret Lair Drop|2216|M|{U}{B}{R}|Legendary Creature - Human Rogue|3|2|First strike$You may spend mana as though it were mana of any color to cast spells you don't own or to activate abilities of permanents you control but don't own.$Whenever Nathan Drake attacks, exile the top card of each player's library. You may cast a spell from among those cards.|
+Aloy, Savior of Meridian|Secret Lair Drop|2221|M|{3}{G}{U}|Legendary Creature - Human Warrior|3|5|Vigilance, reach$In You, All Things Are Possible -- Whenever one or more artifact creatures you control attack, discover X, where X is the greatest power among them.|
+Jin Sakai, Ghost of Tsushima|Secret Lair Drop|2226|M|{1}{W}{U}{B}|Legendary Creature - Human Samurai|2|4|Whenever Jin Sakai deals combat damage to a player, draw a card.$Whenever a creature you control attacks a player, if no other creatures are attacking that player, choose one --$* Standoff -- It gains double strike until end of turn.$* Ghost -- It can't be blocked this turn.|
diff --git a/Utils/mtg-sets-data.txt b/Utils/mtg-sets-data.txt
index df42f6ac90c..161d46c343c 100644
--- a/Utils/mtg-sets-data.txt
+++ b/Utils/mtg-sets-data.txt
@@ -139,6 +139,7 @@ Iconic Masters|IMA|
Ikoria: Lair of Behemoths|IKO|
Invasion|INV|
Innistrad|ISD|
+Lorwyn Eclipsed|ECL|
The Lost Caverns of Ixalan|LCI|
The Lost Caverns of Ixalan Commander|LCC|
Innistrad: Midnight Hunt|MID|
diff --git a/pom.xml b/pom.xml
index e597f31a0f8..bd7866f868a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.mage
mage-root
- 1.4.57
+ 1.4.58
pom
Mage Root
Mage Root POM
@@ -16,7 +16,7 @@
${project.basedir}
- 1.4.57
+ 1.4.58
-Dfile.encoding=UTF-8
UTF-8
yyyy-MM-dd'T'HH:mm:ss'Z'
@@ -347,7 +347,7 @@
com.google.code.gson
gson
- 2.11.0
+ 2.13.2
@@ -371,13 +371,13 @@
org.apache.commons
commons-lang3
- 3.12.0
+ 3.18.0
org.jsoup
jsoup
- 1.21.1
+ 1.21.2