From 734b174b6673767765a64e28b6a39dff7910331e Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2025 21:26:55 +0400 Subject: [PATCH 01/51] images: fixed wrongly scryfall data for some non-full art cards --- Mage.Sets/src/mage/sets/AssassinsCreed.java | 10 ++-- .../src/mage/sets/DuskmournHouseOfHorror.java | 54 +++++++++---------- Mage.Sets/src/mage/sets/Foundations.java | 16 +++--- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Mage.Sets/src/mage/sets/AssassinsCreed.java b/Mage.Sets/src/mage/sets/AssassinsCreed.java index 6568fe44cfd..de11d82a2c3 100644 --- a/Mage.Sets/src/mage/sets/AssassinsCreed.java +++ b/Mage.Sets/src/mage/sets/AssassinsCreed.java @@ -147,7 +147,7 @@ public final class AssassinsCreed extends ExpansionSet { //cards.add(new SetCardInfo("Fall of the First Civilization", 4, Rarity.UNCOMMON, mage.cards.f.FallOfTheFirstCivilization.class)); cards.add(new SetCardInfo("Fatal Push", 204, Rarity.UNCOMMON, mage.cards.f.FatalPush.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fatal Push", 90, Rarity.UNCOMMON, mage.cards.f.FatalPush.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fiery Islet", 112, Rarity.RARE, mage.cards.f.FieryIslet.class, FULL_ART)); + cards.add(new SetCardInfo("Fiery Islet", 112, Rarity.RARE, mage.cards.f.FieryIslet.class)); cards.add(new SetCardInfo("Forest", 109, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 110, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Go for the Throat", 205, Rarity.UNCOMMON, mage.cards.g.GoForTheThroat.class, NON_FULL_USE_VARIOUS)); @@ -219,7 +219,7 @@ public final class AssassinsCreed extends ExpansionSet { cards.add(new SetCardInfo("Mountain", 305, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Murder", 208, Rarity.UNCOMMON, mage.cards.m.Murder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Murder", 92, Rarity.UNCOMMON, mage.cards.m.Murder.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Nurturing Peatland", 114, Rarity.RARE, mage.cards.n.NurturingPeatland.class, FULL_ART)); + cards.add(new SetCardInfo("Nurturing Peatland", 114, Rarity.RARE, mage.cards.n.NurturingPeatland.class)); cards.add(new SetCardInfo("Origin of the Hidden Ones", 36, Rarity.UNCOMMON, mage.cards.o.OriginOfTheHiddenOnes.class)); //cards.add(new SetCardInfo("Overpowering Attack", 218, Rarity.UNCOMMON, mage.cards.o.OverpoweringAttack.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Overpowering Attack", 37, Rarity.UNCOMMON, mage.cards.o.OverpoweringAttack.class, NON_FULL_USE_VARIOUS)); @@ -274,7 +274,7 @@ public final class AssassinsCreed extends ExpansionSet { cards.add(new SetCardInfo("Sigurd, Jarl of Ravensthorpe", 154, Rarity.RARE, mage.cards.s.SigurdJarlOfRavensthorpe.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sigurd, Jarl of Ravensthorpe", 249, Rarity.RARE, mage.cards.s.SigurdJarlOfRavensthorpe.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sigurd, Jarl of Ravensthorpe", 66, Rarity.RARE, mage.cards.s.SigurdJarlOfRavensthorpe.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Silent Clearing", 115, Rarity.RARE, mage.cards.s.SilentClearing.class, FULL_ART)); + cards.add(new SetCardInfo("Silent Clearing", 115, Rarity.RARE, mage.cards.s.SilentClearing.class)); cards.add(new SetCardInfo("Smoke Bomb", 259, Rarity.UNCOMMON, mage.cards.s.SmokeBomb.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Smoke Bomb", 75, Rarity.UNCOMMON, mage.cards.s.SmokeBomb.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Sokrates, Athenian Teacher", 121, Rarity.RARE, mage.cards.s.SokratesAthenianTeacher.class, NON_FULL_USE_VARIOUS)); @@ -287,7 +287,7 @@ public final class AssassinsCreed extends ExpansionSet { cards.add(new SetCardInfo("Staff of Eden, Vault's Key", 76, Rarity.MYTHIC, mage.cards.s.StaffOfEdenVaultsKey.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Stone Quarry", 300, Rarity.UNCOMMON, mage.cards.s.StoneQuarry.class)); cards.add(new SetCardInfo("Submerged Boneyard", 301, Rarity.UNCOMMON, mage.cards.s.SubmergedBoneyard.class)); - cards.add(new SetCardInfo("Sunbaked Canyon", 111, Rarity.RARE, mage.cards.s.SunbakedCanyon.class, FULL_ART)); + cards.add(new SetCardInfo("Sunbaked Canyon", 111, Rarity.RARE, mage.cards.s.SunbakedCanyon.class)); cards.add(new SetCardInfo("Surtr, Fiery Jotun", 293, Rarity.RARE, mage.cards.s.SurtrFieryJotun.class)); cards.add(new SetCardInfo("Swamp", 105, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 106, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_USE_VARIOUS)); @@ -323,7 +323,7 @@ public final class AssassinsCreed extends ExpansionSet { cards.add(new SetCardInfo("Tranquilize", 284, Rarity.COMMON, mage.cards.t.Tranquilize.class)); //cards.add(new SetCardInfo("Viewpoint Synchronization", 223, Rarity.UNCOMMON, mage.cards.v.ViewpointSynchronization.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Viewpoint Synchronization", 43, Rarity.UNCOMMON, mage.cards.v.ViewpointSynchronization.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Waterlogged Grove", 116, Rarity.RARE, mage.cards.w.WaterloggedGrove.class, FULL_ART)); + cards.add(new SetCardInfo("Waterlogged Grove", 116, Rarity.RARE, mage.cards.w.WaterloggedGrove.class)); //cards.add(new SetCardInfo("What Must Be Done", 11, Rarity.RARE, mage.cards.w.WhatMustBeDone.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("What Must Be Done", 157, Rarity.RARE, mage.cards.w.WhatMustBeDone.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("What Must Be Done", 184, Rarity.RARE, mage.cards.w.WhatMustBeDone.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index c391e346500..d1b61be1f1e 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -41,7 +41,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Bedhead Beastie", 125, Rarity.COMMON, mage.cards.b.BedheadBeastie.class)); cards.add(new SetCardInfo("Betrayer's Bargain", 126, Rarity.UNCOMMON, mage.cards.b.BetrayersBargain.class)); cards.add(new SetCardInfo("Blazemire Verge", 256, Rarity.RARE, mage.cards.b.BlazemireVerge.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Blazemire Verge", 329, Rarity.RARE, mage.cards.b.BlazemireVerge.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Blazemire Verge", 329, Rarity.RARE, mage.cards.b.BlazemireVerge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bleeding Woods", 257, Rarity.COMMON, mage.cards.b.BleedingWoods.class)); cards.add(new SetCardInfo("Boilerbilges Ripper", 127, Rarity.COMMON, mage.cards.b.BoilerbilgesRipper.class)); //cards.add(new SetCardInfo("Bottomless Pool // Locker Room", 43, Rarity.UNCOMMON, mage.cards.b.BottomlessPoolLockerRoom.class)); @@ -90,7 +90,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { //cards.add(new SetCardInfo("Dollmaker's Shop // Porcelain Gallery", 335, Rarity.MYTHIC, mage.cards.d.DollmakersShopPorcelainGallery.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Dollmaker's Shop // Porcelain Gallery", 4, Rarity.MYTHIC, mage.cards.d.DollmakersShopPorcelainGallery.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Don't Make a Sound", 49, Rarity.COMMON, mage.cards.d.DontMakeASound.class)); - cards.add(new SetCardInfo("Doomsday Excruciator", 346, Rarity.RARE, mage.cards.d.DoomsdayExcruciator.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Doomsday Excruciator", 346, Rarity.RARE, mage.cards.d.DoomsdayExcruciator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Doomsday Excruciator", 94, Rarity.RARE, mage.cards.d.DoomsdayExcruciator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Drag to the Roots", 213, Rarity.UNCOMMON, mage.cards.d.DragToTheRoots.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Drag to the Roots", 414, Rarity.UNCOMMON, mage.cards.d.DragToTheRoots.class, NON_FULL_USE_VARIOUS)); @@ -102,7 +102,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Enduring Courage", 402, Rarity.MYTHIC, mage.cards.e.EnduringCourage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Curiosity", 371, Rarity.RARE, mage.cards.e.EnduringCuriosity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Curiosity", 388, Rarity.MYTHIC, mage.cards.e.EnduringCuriosity.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Enduring Curiosity", 398, Rarity.MYTHIC, mage.cards.e.EnduringCuriosity.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Enduring Curiosity", 398, Rarity.MYTHIC, mage.cards.e.EnduringCuriosity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Curiosity", 51, Rarity.RARE, mage.cards.e.EnduringCuriosity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Innocence", 368, Rarity.RARE, mage.cards.e.EnduringInnocence.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Innocence", 386, Rarity.MYTHIC, mage.cards.e.EnduringInnocence.class, NON_FULL_USE_VARIOUS)); @@ -110,7 +110,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Enduring Innocence", 6, Rarity.RARE, mage.cards.e.EnduringInnocence.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Tenacity", 374, Rarity.RARE, mage.cards.e.EnduringTenacity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Tenacity", 390, Rarity.MYTHIC, mage.cards.e.EnduringTenacity.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Enduring Tenacity", 400, Rarity.MYTHIC, mage.cards.e.EnduringTenacity.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Enduring Tenacity", 400, Rarity.MYTHIC, mage.cards.e.EnduringTenacity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Tenacity", 95, Rarity.RARE, mage.cards.e.EnduringTenacity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Vitality", 176, Rarity.RARE, mage.cards.e.EnduringVitality.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Enduring Vitality", 381, Rarity.RARE, mage.cards.e.EnduringVitality.class, NON_FULL_USE_VARIOUS)); @@ -143,7 +143,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Final Vengeance", 99, Rarity.COMMON, mage.cards.f.FinalVengeance.class)); cards.add(new SetCardInfo("Flesh Burrower", 178, Rarity.COMMON, mage.cards.f.FleshBurrower.class)); cards.add(new SetCardInfo("Floodfarm Verge", 259, Rarity.RARE, mage.cards.f.FloodfarmVerge.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Floodfarm Verge", 330, Rarity.RARE, mage.cards.f.FloodfarmVerge.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Floodfarm Verge", 330, Rarity.RARE, mage.cards.f.FloodfarmVerge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Floodpits Drowner", 59, Rarity.UNCOMMON, mage.cards.f.FloodpitsDrowner.class)); cards.add(new SetCardInfo("Forest", 276, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 285, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); @@ -166,7 +166,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Glimmerburst", 62, Rarity.COMMON, mage.cards.g.Glimmerburst.class)); cards.add(new SetCardInfo("Glimmerlight", 249, Rarity.COMMON, mage.cards.g.Glimmerlight.class)); cards.add(new SetCardInfo("Gloomlake Verge", 260, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gloomlake Verge", 331, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Gloomlake Verge", 331, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grab the Prize", 138, Rarity.COMMON, mage.cards.g.GrabThePrize.class)); //cards.add(new SetCardInfo("Grand Entryway // Elegant Rotunda", 15, Rarity.COMMON, mage.cards.g.GrandEntrywayElegantRotunda.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Grand Entryway // Elegant Rotunda", 287, Rarity.COMMON, mage.cards.g.GrandEntrywayElegantRotunda.class, NON_FULL_USE_VARIOUS)); @@ -187,7 +187,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Horrid Vigor", 184, Rarity.COMMON, mage.cards.h.HorridVigor.class)); cards.add(new SetCardInfo("House Cartographer", 185, Rarity.UNCOMMON, mage.cards.h.HouseCartographer.class)); cards.add(new SetCardInfo("Hushwood Verge", 261, Rarity.RARE, mage.cards.h.HushwoodVerge.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Hushwood Verge", 332, Rarity.RARE, mage.cards.h.HushwoodVerge.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Hushwood Verge", 332, Rarity.RARE, mage.cards.h.HushwoodVerge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Impossible Inferno", 140, Rarity.COMMON, mage.cards.i.ImpossibleInferno.class)); cards.add(new SetCardInfo("Infernal Phantom", 141, Rarity.UNCOMMON, mage.cards.i.InfernalPhantom.class)); cards.add(new SetCardInfo("Innocuous Rat", 103, Rarity.COMMON, mage.cards.i.InnocuousRat.class)); @@ -203,13 +203,13 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Jump Scare", 17, Rarity.COMMON, mage.cards.j.JumpScare.class)); cards.add(new SetCardInfo("Kaito, Bane of Nightmares", 220, Rarity.MYTHIC, mage.cards.k.KaitoBaneOfNightmares.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kaito, Bane of Nightmares", 328, Rarity.MYTHIC, mage.cards.k.KaitoBaneOfNightmares.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kaito, Bane of Nightmares", 354, Rarity.MYTHIC, mage.cards.k.KaitoBaneOfNightmares.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Kaito, Bane of Nightmares", 354, Rarity.MYTHIC, mage.cards.k.KaitoBaneOfNightmares.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kaito, Bane of Nightmares", 409, Rarity.MYTHIC, mage.cards.k.KaitoBaneOfNightmares.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Keys to the House", 251, Rarity.UNCOMMON, mage.cards.k.KeysToTheHouse.class)); cards.add(new SetCardInfo("Killer's Mask", 104, Rarity.UNCOMMON, mage.cards.k.KillersMask.class)); cards.add(new SetCardInfo("Kona, Rescue Beastie", 187, Rarity.RARE, mage.cards.k.KonaRescueBeastie.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kona, Rescue Beastie", 299, Rarity.RARE, mage.cards.k.KonaRescueBeastie.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kona, Rescue Beastie", 358, Rarity.RARE, mage.cards.k.KonaRescueBeastie.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Kona, Rescue Beastie", 358, Rarity.RARE, mage.cards.k.KonaRescueBeastie.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lakeside Shack", 262, Rarity.COMMON, mage.cards.l.LakesideShack.class)); cards.add(new SetCardInfo("Let's Play a Game", 105, Rarity.UNCOMMON, mage.cards.l.LetsPlayAGame.class)); cards.add(new SetCardInfo("Leyline of Hope", 18, Rarity.RARE, mage.cards.l.LeylineOfHope.class, NON_FULL_USE_VARIOUS)); @@ -228,11 +228,11 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Malevolent Chandelier", 252, Rarity.COMMON, mage.cards.m.MalevolentChandelier.class)); cards.add(new SetCardInfo("Manifest Dread", 189, Rarity.COMMON, mage.cards.m.ManifestDread.class)); //cards.add(new SetCardInfo("Marina Vendrell", 221, Rarity.RARE, mage.cards.m.MarinaVendrell.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Marina Vendrell", 360, Rarity.RARE, mage.cards.m.MarinaVendrell.class, FULL_ART_USE_VARIOUS)); + //cards.add(new SetCardInfo("Marina Vendrell", 360, Rarity.RARE, mage.cards.m.MarinaVendrell.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Marina Vendrell's Grimoire", 308, Rarity.RARE, mage.cards.m.MarinaVendrellsGrimoire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Marina Vendrell's Grimoire", 64, Rarity.RARE, mage.cards.m.MarinaVendrellsGrimoire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Marvin, Murderous Mimic", 253, Rarity.RARE, mage.cards.m.MarvinMurderousMimic.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Marvin, Murderous Mimic", 367, Rarity.RARE, mage.cards.m.MarvinMurderousMimic.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Marvin, Murderous Mimic", 367, Rarity.RARE, mage.cards.m.MarvinMurderousMimic.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Meat Locker // Drowned Diner", 65, Rarity.COMMON, mage.cards.m.MeatLockerDrownedDiner.class)); cards.add(new SetCardInfo("Meathook Massacre II", 108, Rarity.MYTHIC, mage.cards.m.MeathookMassacreII.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Meathook Massacre II", 293, Rarity.MYTHIC, mage.cards.m.MeathookMassacreII.class, NON_FULL_USE_VARIOUS)); @@ -250,10 +250,10 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Murder", 110, Rarity.COMMON, mage.cards.m.Murder.class)); cards.add(new SetCardInfo("Murky Sewer", 263, Rarity.COMMON, mage.cards.m.MurkySewer.class)); cards.add(new SetCardInfo("Nashi, Searcher in the Dark", 223, Rarity.RARE, mage.cards.n.NashiSearcherInTheDark.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Nashi, Searcher in the Dark", 361, Rarity.RARE, mage.cards.n.NashiSearcherInTheDark.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Nashi, Searcher in the Dark", 361, Rarity.RARE, mage.cards.n.NashiSearcherInTheDark.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Neglected Manor", 264, Rarity.COMMON, mage.cards.n.NeglectedManor.class)); cards.add(new SetCardInfo("Niko, Light of Hope", 224, Rarity.MYTHIC, mage.cards.n.NikoLightOfHope.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Niko, Light of Hope", 355, Rarity.MYTHIC, mage.cards.n.NikoLightOfHope.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Niko, Light of Hope", 355, Rarity.MYTHIC, mage.cards.n.NikoLightOfHope.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Niko, Light of Hope", 410, Rarity.MYTHIC, mage.cards.n.NikoLightOfHope.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Norin, Swift Survivalist", 145, Rarity.UNCOMMON, mage.cards.n.NorinSwiftSurvivalist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Norin, Swift Survivalist", 297, Rarity.UNCOMMON, mage.cards.n.NorinSwiftSurvivalist.class, NON_FULL_USE_VARIOUS)); @@ -276,13 +276,13 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Overlord of the Boilerbilges", 393, Rarity.MYTHIC, mage.cards.o.OverlordOfTheBoilerbilges.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Boilerbilges", 403, Rarity.MYTHIC, mage.cards.o.OverlordOfTheBoilerbilges.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Floodpits", 373, Rarity.MYTHIC, mage.cards.o.OverlordOfTheFloodpits.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Overlord of the Floodpits", 389, Rarity.MYTHIC, mage.cards.o.OverlordOfTheFloodpits.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Overlord of the Floodpits", 389, Rarity.MYTHIC, mage.cards.o.OverlordOfTheFloodpits.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Floodpits", 399, Rarity.MYTHIC, mage.cards.o.OverlordOfTheFloodpits.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Floodpits", 68, Rarity.MYTHIC, mage.cards.o.OverlordOfTheFloodpits.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Hauntwoods", 194, Rarity.MYTHIC, mage.cards.o.OverlordOfTheHauntwoods.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Hauntwoods", 383, Rarity.MYTHIC, mage.cards.o.OverlordOfTheHauntwoods.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Hauntwoods", 395, Rarity.MYTHIC, mage.cards.o.OverlordOfTheHauntwoods.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Overlord of the Hauntwoods", 405, Rarity.MYTHIC, mage.cards.o.OverlordOfTheHauntwoods.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Overlord of the Hauntwoods", 405, Rarity.MYTHIC, mage.cards.o.OverlordOfTheHauntwoods.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Mistmoors", 23, Rarity.MYTHIC, mage.cards.o.OverlordOfTheMistmoors.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Mistmoors", 370, Rarity.MYTHIC, mage.cards.o.OverlordOfTheMistmoors.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Overlord of the Mistmoors", 387, Rarity.MYTHIC, mage.cards.o.OverlordOfTheMistmoors.class, NON_FULL_USE_VARIOUS)); @@ -317,7 +317,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { //cards.add(new SetCardInfo("Restricted Office // Lecture Hall", 342, Rarity.RARE, mage.cards.r.RestrictedOfficeLectureHall.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Resurrected Cultist", 115, Rarity.COMMON, mage.cards.r.ResurrectedCultist.class)); cards.add(new SetCardInfo("Rip, Spawn Hunter", 228, Rarity.RARE, mage.cards.r.RipSpawnHunter.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Rip, Spawn Hunter", 362, Rarity.RARE, mage.cards.r.RipSpawnHunter.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Rip, Spawn Hunter", 362, Rarity.RARE, mage.cards.r.RipSpawnHunter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ripchain Razorkin", 154, Rarity.COMMON, mage.cards.r.RipchainRazorkin.class)); cards.add(new SetCardInfo("Rite of the Moth", 229, Rarity.UNCOMMON, mage.cards.r.RiteOfTheMoth.class)); //cards.add(new SetCardInfo("Roaring Furnace // Steaming Sauna", 230, Rarity.RARE, mage.cards.r.RoaringFurnaceSteamingSauna.class, NON_FULL_USE_VARIOUS)); @@ -359,25 +359,25 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Swamp", 282, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Terramorphic Expanse", 269, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); cards.add(new SetCardInfo("The Jolly Balloon Man", 219, Rarity.RARE, mage.cards.t.TheJollyBalloonMan.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("The Jolly Balloon Man", 359, Rarity.RARE, mage.cards.t.TheJollyBalloonMan.class, FULL_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("The Mindskinner", 357, Rarity.RARE, mage.cards.t.TheMindskinner.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("The Jolly Balloon Man", 359, Rarity.RARE, mage.cards.t.TheJollyBalloonMan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Mindskinner", 357, Rarity.RARE, mage.cards.t.TheMindskinner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Mindskinner", 66, Rarity.RARE, mage.cards.t.TheMindskinner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Rollercrusher Ride", 155, Rarity.MYTHIC, mage.cards.t.TheRollercrusherRide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Rollercrusher Ride", 298, Rarity.MYTHIC, mage.cards.t.TheRollercrusherRide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Rollercrusher Ride", 317, Rarity.MYTHIC, mage.cards.t.TheRollercrusherRide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Swarmweaver", 236, Rarity.RARE, mage.cards.t.TheSwarmweaver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Swarmweaver", 301, Rarity.RARE, mage.cards.t.TheSwarmweaver.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("The Swarmweaver", 363, Rarity.RARE, mage.cards.t.TheSwarmweaver.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("The Swarmweaver", 363, Rarity.RARE, mage.cards.t.TheSwarmweaver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Tale of Tamiyo", 75, Rarity.RARE, mage.cards.t.TheTaleOfTamiyo.class)); - cards.add(new SetCardInfo("The Wandering Rescuer", 351, Rarity.MYTHIC, mage.cards.t.TheWanderingRescuer.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("The Wandering Rescuer", 351, Rarity.MYTHIC, mage.cards.t.TheWanderingRescuer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Wandering Rescuer", 406, Rarity.MYTHIC, mage.cards.t.TheWanderingRescuer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Wandering Rescuer", 41, Rarity.MYTHIC, mage.cards.t.TheWanderingRescuer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Thornspire Verge", 270, Rarity.RARE, mage.cards.t.ThornspireVerge.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Thornspire Verge", 333, Rarity.RARE, mage.cards.t.ThornspireVerge.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Thornspire Verge", 333, Rarity.RARE, mage.cards.t.ThornspireVerge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Threats Around Every Corner", 200, Rarity.UNCOMMON, mage.cards.t.ThreatsAroundEveryCorner.class)); // cards.add(new SetCardInfo("Ticket Booth // Tunnel of Hate", 158, Rarity.COMMON, mage.cards.t.TicketBoothTunnelOfHate.class)); cards.add(new SetCardInfo("Toby, Beastie Befriender", 35, Rarity.RARE, mage.cards.t.TobyBeastieBefriender.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Toby, Beastie Befriender", 356, Rarity.RARE, mage.cards.t.TobyBeastieBefriender.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Toby, Beastie Befriender", 356, Rarity.RARE, mage.cards.t.TobyBeastieBefriender.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Trapped in the Screen", 36, Rarity.COMMON, mage.cards.t.TrappedInTheScreen.class)); //cards.add(new SetCardInfo("Trial of Agony", 159, Rarity.UNCOMMON, mage.cards.t.TrialOfAgony.class)); cards.add(new SetCardInfo("Tunnel Surveyor", 76, Rarity.COMMON, mage.cards.t.TunnelSurveyor.class)); @@ -387,7 +387,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Twitching Doll", 384, Rarity.RARE, mage.cards.t.TwitchingDoll.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Twitching Doll", 417, Rarity.RARE, mage.cards.t.TwitchingDoll.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tyvar, the Pummeler", 202, Rarity.MYTHIC, mage.cards.t.TyvarThePummeler.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Tyvar, the Pummeler", 353, Rarity.MYTHIC, mage.cards.t.TyvarThePummeler.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Tyvar, the Pummeler", 353, Rarity.MYTHIC, mage.cards.t.TyvarThePummeler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tyvar, the Pummeler", 408, Rarity.MYTHIC, mage.cards.t.TyvarThePummeler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Unable to Scream", 78, Rarity.COMMON, mage.cards.u.UnableToScream.class)); //cards.add(new SetCardInfo("Undead Sprinter", 237, Rarity.RARE, mage.cards.u.UndeadSprinter.class, NON_FULL_USE_VARIOUS)); @@ -415,14 +415,14 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Valgavoth's Onslaught", 204, Rarity.RARE, mage.cards.v.ValgavothsOnslaught.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Valgavoth's Onslaught", 324, Rarity.RARE, mage.cards.v.ValgavothsOnslaught.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Valgavoth, Terror Eater", 120, Rarity.MYTHIC, mage.cards.v.ValgavothTerrorEater.class, NON_FULL_USE_VARIOUS)); - //cards.add(new SetCardInfo("Valgavoth, Terror Eater", 352, Rarity.MYTHIC, mage.cards.v.ValgavothTerrorEater.class, FULL_ART_USE_VARIOUS)); + //cards.add(new SetCardInfo("Valgavoth, Terror Eater", 352, Rarity.MYTHIC, mage.cards.v.ValgavothTerrorEater.class, NON_FULL_USE_VARIOUS)); //cards.add(new SetCardInfo("Valgavoth, Terror Eater", 407, Rarity.MYTHIC, mage.cards.v.ValgavothTerrorEater.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vanish from Sight", 82, Rarity.COMMON, mage.cards.v.VanishFromSight.class)); cards.add(new SetCardInfo("Vengeful Possession", 162, Rarity.UNCOMMON, mage.cards.v.VengefulPossession.class)); cards.add(new SetCardInfo("Veteran Survivor", 40, Rarity.UNCOMMON, mage.cards.v.VeteranSurvivor.class)); cards.add(new SetCardInfo("Vicious Clown", 163, Rarity.COMMON, mage.cards.v.ViciousClown.class)); cards.add(new SetCardInfo("Victor, Valgavoth's Seneschal", 238, Rarity.RARE, mage.cards.v.VictorValgavothsSeneschal.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Victor, Valgavoth's Seneschal", 364, Rarity.RARE, mage.cards.v.VictorValgavothsSeneschal.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Victor, Valgavoth's Seneschal", 364, Rarity.RARE, mage.cards.v.VictorValgavothsSeneschal.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vile Mutilator", 122, Rarity.UNCOMMON, mage.cards.v.VileMutilator.class)); cards.add(new SetCardInfo("Violent Urge", 164, Rarity.UNCOMMON, mage.cards.v.ViolentUrge.class)); //cards.add(new SetCardInfo("Walk-In Closet // Forgotten Cellar", 205, Rarity.MYTHIC, mage.cards.w.WalkInClosetForgottenCellar.class, NON_FULL_USE_VARIOUS)); @@ -434,10 +434,10 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Wildfire Wickerfolk", 239, Rarity.UNCOMMON, mage.cards.w.WildfireWickerfolk.class)); cards.add(new SetCardInfo("Winter's Intervention", 123, Rarity.COMMON, mage.cards.w.WintersIntervention.class)); cards.add(new SetCardInfo("Winter, Misanthropic Guide", 240, Rarity.RARE, mage.cards.w.WinterMisanthropicGuide.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Winter, Misanthropic Guide", 365, Rarity.RARE, mage.cards.w.WinterMisanthropicGuide.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Winter, Misanthropic Guide", 365, Rarity.RARE, mage.cards.w.WinterMisanthropicGuide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Withering Torment", 124, Rarity.UNCOMMON, mage.cards.w.WitheringTorment.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Withering Torment", 313, Rarity.UNCOMMON, mage.cards.w.WitheringTorment.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Zimone, All-Questioning", 241, Rarity.RARE, mage.cards.z.ZimoneAllQuestioning.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Zimone, All-Questioning", 366, Rarity.RARE, mage.cards.z.ZimoneAllQuestioning.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Zimone, All-Questioning", 366, Rarity.RARE, mage.cards.z.ZimoneAllQuestioning.class, NON_FULL_USE_VARIOUS)); } } diff --git a/Mage.Sets/src/mage/sets/Foundations.java b/Mage.Sets/src/mage/sets/Foundations.java index 5636ab707e7..7a5db20dc71 100644 --- a/Mage.Sets/src/mage/sets/Foundations.java +++ b/Mage.Sets/src/mage/sets/Foundations.java @@ -53,8 +53,8 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Angelic Destiny", 565, Rarity.MYTHIC, mage.cards.a.AngelicDestiny.class)); cards.add(new SetCardInfo("Angelic Edict", 490, Rarity.COMMON, mage.cards.a.AngelicEdict.class)); cards.add(new SetCardInfo("Anthem of Champions", 116, Rarity.RARE, mage.cards.a.AnthemOfChampions.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Anthem of Champions", 344, Rarity.RARE, mage.cards.a.AnthemOfChampions.class, FULL_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Anthem of Champions", 405, Rarity.RARE, mage.cards.a.AnthemOfChampions.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Anthem of Champions", 344, Rarity.RARE, mage.cards.a.AnthemOfChampions.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Anthem of Champions", 405, Rarity.RARE, mage.cards.a.AnthemOfChampions.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Anthem of Champions", 477, Rarity.RARE, mage.cards.a.AnthemOfChampions.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Apothecary Stomper", 99, Rarity.COMMON, mage.cards.a.ApothecaryStomper.class)); cards.add(new SetCardInfo("Arahbo, the First Fang", 2, Rarity.RARE, mage.cards.a.ArahboTheFirstFang.class, NON_FULL_USE_VARIOUS)); @@ -403,7 +403,7 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Koma, World-Eater", 480, Rarity.RARE, mage.cards.k.KomaWorldEater.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Krenko, Mob Boss", 204, Rarity.RARE, mage.cards.k.KrenkoMobBoss.class)); cards.add(new SetCardInfo("Kykar, Zephyr Awakener", 122, Rarity.RARE, mage.cards.k.KykarZephyrAwakener.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kykar, Zephyr Awakener", 348, Rarity.RARE, mage.cards.k.KykarZephyrAwakener.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Kykar, Zephyr Awakener", 348, Rarity.RARE, mage.cards.k.KykarZephyrAwakener.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kykar, Zephyr Awakener", 409, Rarity.RARE, mage.cards.k.KykarZephyrAwakener.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kykar, Zephyr Awakener", 481, Rarity.RARE, mage.cards.k.KykarZephyrAwakener.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lathliss, Dragon Queen", 627, Rarity.RARE, mage.cards.l.LathlissDragonQueen.class)); @@ -476,8 +476,8 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Negate", 710, Rarity.COMMON, mage.cards.n.Negate.class)); cards.add(new SetCardInfo("Nessian Hornbeetle", 229, Rarity.UNCOMMON, mage.cards.n.NessianHornbeetle.class)); cards.add(new SetCardInfo("New Horizons", 557, Rarity.COMMON, mage.cards.n.NewHorizons.class)); - cards.add(new SetCardInfo("Nine-Lives Familiar", 321, Rarity.RARE, mage.cards.n.NineLivesFamiliar.class, FULL_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Nine-Lives Familiar", 385, Rarity.RARE, mage.cards.n.NineLivesFamiliar.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Nine-Lives Familiar", 321, Rarity.RARE, mage.cards.n.NineLivesFamiliar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nine-Lives Familiar", 385, Rarity.RARE, mage.cards.n.NineLivesFamiliar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nine-Lives Familiar", 462, Rarity.RARE, mage.cards.n.NineLivesFamiliar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nine-Lives Familiar", 66, Rarity.RARE, mage.cards.n.NineLivesFamiliar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Niv-Mizzet, Visionary", 123, Rarity.MYTHIC, mage.cards.n.NivMizzetVisionary.class, NON_FULL_USE_VARIOUS)); @@ -488,8 +488,8 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Obliterating Bolt", 629, Rarity.UNCOMMON, mage.cards.o.ObliteratingBolt.class)); cards.add(new SetCardInfo("Offer Immortality", 525, Rarity.COMMON, mage.cards.o.OfferImmortality.class)); cards.add(new SetCardInfo("Omniscience", 161, Rarity.MYTHIC, mage.cards.o.Omniscience.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Omniscience", 312, Rarity.MYTHIC, mage.cards.o.Omniscience.class, FULL_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Omniscience", 379, Rarity.MYTHIC, mage.cards.o.Omniscience.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Omniscience", 312, Rarity.MYTHIC, mage.cards.o.Omniscience.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Omniscience", 379, Rarity.MYTHIC, mage.cards.o.Omniscience.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Opt", 512, Rarity.COMMON, mage.cards.o.Opt.class)); cards.add(new SetCardInfo("Ordeal of Nylea", 641, Rarity.UNCOMMON, mage.cards.o.OrdealOfNylea.class)); cards.add(new SetCardInfo("Orzhov Guildgate", 692, Rarity.COMMON, mage.cards.o.OrzhovGuildgate.class)); @@ -616,7 +616,7 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Soulstone Sanctuary", 487, Rarity.RARE, mage.cards.s.SoulstoneSanctuary.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sower of Chaos", 95, Rarity.COMMON, mage.cards.s.SowerOfChaos.class)); cards.add(new SetCardInfo("Spectral Sailor", 164, Rarity.UNCOMMON, mage.cards.s.SpectralSailor.class)); - cards.add(new SetCardInfo("Sphinx of Forgotten Lore", 314, Rarity.MYTHIC, mage.cards.s.SphinxOfForgottenLore.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Sphinx of Forgotten Lore", 314, Rarity.MYTHIC, mage.cards.s.SphinxOfForgottenLore.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sphinx of Forgotten Lore", 380, Rarity.MYTHIC, mage.cards.s.SphinxOfForgottenLore.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sphinx of Forgotten Lore", 457, Rarity.MYTHIC, mage.cards.s.SphinxOfForgottenLore.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sphinx of Forgotten Lore", 51, Rarity.MYTHIC, mage.cards.s.SphinxOfForgottenLore.class, NON_FULL_USE_VARIOUS)); -- 2.47.2 From 4944c434c1e3d25a192930a33f9f7253e2c9d06a Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2025 22:47:02 +0400 Subject: [PATCH 02/51] images: fixed wrongly scryfall data for some non-full art cards --- .../src/mage/sets/AvacynRestoredPromos.java | 4 +- .../src/mage/sets/MagicOnlinePromos.java | 211 +++++++++--------- .../java/mage/verify/VerifyCardDataTest.java | 4 +- 3 files changed, 111 insertions(+), 108 deletions(-) diff --git a/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java b/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java index 691e937ef42..e89b6470e6a 100644 --- a/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java +++ b/Mage.Sets/src/mage/sets/AvacynRestoredPromos.java @@ -21,8 +21,8 @@ public class AvacynRestoredPromos extends ExpansionSet { this.hasBasicLands = false; cards.add(new SetCardInfo("Angel of Glory's Rise", "A9", Rarity.RARE, mage.cards.a.AngelOfGlorysRise.class)); - cards.add(new SetCardInfo("Killing Wave", 111, Rarity.RARE, mage.cards.k.KillingWave.class, FULL_ART)); - cards.add(new SetCardInfo("Latch Seeker", 63, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class, FULL_ART)); + cards.add(new SetCardInfo("Killing Wave", 111, Rarity.RARE, mage.cards.k.KillingWave.class)); + cards.add(new SetCardInfo("Latch Seeker", 63, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class)); cards.add(new SetCardInfo("Moonsilver Spear", "217*", Rarity.RARE, mage.cards.m.MoonsilverSpear.class)); cards.add(new SetCardInfo("Restoration Angel", "32*", Rarity.RARE, mage.cards.r.RestorationAngel.class)); cards.add(new SetCardInfo("Silverblade Paladin", "36*", Rarity.RARE, mage.cards.s.SilverbladePaladin.class)); diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java index bdb8dac9cb1..051ba7d52fd 100644 --- a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java +++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java @@ -25,7 +25,7 @@ public class MagicOnlinePromos extends ExpansionSet { // workaround to fix compilation error: java: code too large addPart1(); // A-L - addPart2(); // K-Z + addPart2(); // M-Z cards.removeIf(card -> HIDE_MUTATE_CARDS && MUTATE_CARD_NAMES.contains(card.getName())); } @@ -34,7 +34,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Abbot of Keral Keep", 62501, Rarity.RARE, mage.cards.a.AbbotOfKeralKeep.class)); cards.add(new SetCardInfo("Abhorrent Overlord", 50126, Rarity.RARE, mage.cards.a.AbhorrentOverlord.class)); cards.add(new SetCardInfo("Abomination of Llanowar", 86300, Rarity.UNCOMMON, mage.cards.a.AbominationOfLlanowar.class)); - cards.add(new SetCardInfo("Abrade", 65001, Rarity.UNCOMMON, mage.cards.a.Abrade.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Abrade", 65001, Rarity.UNCOMMON, mage.cards.a.Abrade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Abrade", 86136, Rarity.UNCOMMON, mage.cards.a.Abrade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Abrupt Decay", 59681, Rarity.RARE, mage.cards.a.AbruptDecay.class)); cards.add(new SetCardInfo("Abu Ja'far", 62479, Rarity.UNCOMMON, mage.cards.a.AbuJafar.class)); @@ -51,7 +51,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Acidic Slime", 45199, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Acidic Slime", 86134, Rarity.UNCOMMON, mage.cards.a.AcidicSlime.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Adarkar Wastes", 103476, Rarity.RARE, mage.cards.a.AdarkarWastes.class)); - cards.add(new SetCardInfo("Adorned Pouncer", 64993, Rarity.RARE, mage.cards.a.AdornedPouncer.class, FULL_ART)); + cards.add(new SetCardInfo("Adorned Pouncer", 64993, Rarity.RARE, mage.cards.a.AdornedPouncer.class)); cards.add(new SetCardInfo("Adrix and Nev, Twincasters", 90292, Rarity.MYTHIC, mage.cards.a.AdrixAndNevTwincasters.class)); cards.add(new SetCardInfo("Adult Gold Dragon", 92826, Rarity.RARE, mage.cards.a.AdultGoldDragon.class)); cards.add(new SetCardInfo("Aegar, the Freezing Flame", 88386, Rarity.UNCOMMON, mage.cards.a.AegarTheFreezingFlame.class)); @@ -108,7 +108,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Anger of the Gods", 102265, Rarity.RARE, mage.cards.a.AngerOfTheGods.class)); cards.add(new SetCardInfo("Angrath, Captain of Chaos", 72237, Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Angrath, Captain of Chaos", 77971, Rarity.UNCOMMON, mage.cards.a.AngrathCaptainOfChaos.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Anguished Unmaking", 60462, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class, FULL_ART)); + cards.add(new SetCardInfo("Anguished Unmaking", 60462, Rarity.RARE, mage.cards.a.AnguishedUnmaking.class)); cards.add(new SetCardInfo("Anhelo, the Painter", 99787, Rarity.MYTHIC, mage.cards.a.AnheloThePainter.class)); cards.add(new SetCardInfo("Animal Sanctuary", 82012, Rarity.RARE, mage.cards.a.AnimalSanctuary.class)); cards.add(new SetCardInfo("Animating Faerie", 78746, Rarity.UNCOMMON, mage.cards.a.AnimatingFaerie.class)); @@ -269,7 +269,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Black Knight", 35922, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); cards.add(new SetCardInfo("Black Lotus", 46932, Rarity.RARE, mage.cards.b.BlackLotus.class)); cards.add(new SetCardInfo("Black Market Tycoon", 99735, Rarity.RARE, mage.cards.b.BlackMarketTycoon.class)); - cards.add(new SetCardInfo("Black Sun's Zenith", 39634, Rarity.RARE, mage.cards.b.BlackSunsZenith.class, FULL_ART)); + cards.add(new SetCardInfo("Black Sun's Zenith", 39634, Rarity.RARE, mage.cards.b.BlackSunsZenith.class)); cards.add(new SetCardInfo("Blackblade Reforged", 77949, Rarity.RARE, mage.cards.b.BlackbladeReforged.class)); cards.add(new SetCardInfo("Blade Historian", 90212, Rarity.RARE, mage.cards.b.BladeHistorian.class)); cards.add(new SetCardInfo("Blade of the Oni", 97979, Rarity.MYTHIC, mage.cards.b.BladeOfTheOni.class)); @@ -292,8 +292,8 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Blightstep Pathway", 88402, Rarity.RARE, mage.cards.b.BlightstepPathway.class)); cards.add(new SetCardInfo("Blim, Comedic Genius", 86276, Rarity.RARE, mage.cards.b.BlimComedicGenius.class)); cards.add(new SetCardInfo("Blood Artist", 102245, Rarity.UNCOMMON, mage.cards.b.BloodArtist.class)); - cards.add(new SetCardInfo("Blood Crypt", 72301, Rarity.RARE, mage.cards.b.BloodCrypt.class, FULL_ART)); - cards.add(new SetCardInfo("Blood Knight", 35984, Rarity.UNCOMMON, mage.cards.b.BloodKnight.class, FULL_ART)); + cards.add(new SetCardInfo("Blood Crypt", 72301, Rarity.RARE, mage.cards.b.BloodCrypt.class)); + cards.add(new SetCardInfo("Blood Knight", 35984, Rarity.UNCOMMON, mage.cards.b.BloodKnight.class)); cards.add(new SetCardInfo("Blood Moon", 82824, Rarity.RARE, mage.cards.b.BloodMoon.class)); cards.add(new SetCardInfo("Blood on the Snow", 88284, Rarity.RARE, mage.cards.b.BloodOnTheSnow.class)); cards.add(new SetCardInfo("Bloodbraid Elf", 102293, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class, NON_FULL_USE_VARIOUS)); @@ -328,7 +328,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Boneyard Wurm", 42860, Rarity.UNCOMMON, mage.cards.b.BoneyardWurm.class)); cards.add(new SetCardInfo("Boomerang", 36228, Rarity.COMMON, mage.cards.b.Boomerang.class)); cards.add(new SetCardInfo("Bootleggers' Stash", 99705, Rarity.MYTHIC, mage.cards.b.BootleggersStash.class)); - cards.add(new SetCardInfo("Boros Challenger", 69953, Rarity.UNCOMMON, mage.cards.b.BorosChallenger.class, FULL_ART)); + cards.add(new SetCardInfo("Boros Challenger", 69953, Rarity.UNCOMMON, mage.cards.b.BorosChallenger.class)); cards.add(new SetCardInfo("Boros Charm", 86142, Rarity.UNCOMMON, mage.cards.b.BorosCharm.class)); cards.add(new SetCardInfo("Boros Garrison", 102369, Rarity.UNCOMMON, mage.cards.b.BorosGarrison.class)); cards.add(new SetCardInfo("Boros Signet", 46904, Rarity.UNCOMMON, mage.cards.b.BorosSignet.class, NON_FULL_USE_VARIOUS)); @@ -345,7 +345,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Brainstorm", 31453, Rarity.COMMON, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brainstorm", 70920, Rarity.RARE, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brainstorm", 82834, Rarity.RARE, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bramblewood Paragon", 31423, Rarity.UNCOMMON, mage.cards.b.BramblewoodParagon.class, FULL_ART)); + cards.add(new SetCardInfo("Bramblewood Paragon", 31423, Rarity.UNCOMMON, mage.cards.b.BramblewoodParagon.class)); cards.add(new SetCardInfo("Branchloft Pathway", 83852, Rarity.RARE, mage.cards.b.BranchloftPathway.class)); cards.add(new SetCardInfo("Brash Taunter", 81974, Rarity.RARE, mage.cards.b.BrashTaunter.class)); cards.add(new SetCardInfo("Brass's Bounty", 66886, Rarity.RARE, mage.cards.b.BrasssBounty.class)); @@ -355,7 +355,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Breath of the Sleepless", 95291, Rarity.RARE, mage.cards.b.BreathOfTheSleepless.class)); cards.add(new SetCardInfo("Breathkeeper Seraph", 95259, Rarity.RARE, mage.cards.b.BreathkeeperSeraph.class)); cards.add(new SetCardInfo("Breeches, Brazen Plunderer", 86290, Rarity.UNCOMMON, mage.cards.b.BreechesBrazenPlunderer.class)); - cards.add(new SetCardInfo("Breeding Pool", 72311, Rarity.RARE, mage.cards.b.BreedingPool.class, FULL_ART)); + cards.add(new SetCardInfo("Breeding Pool", 72311, Rarity.RARE, mage.cards.b.BreedingPool.class)); cards.add(new SetCardInfo("Breena, the Demagogue", 90264, Rarity.MYTHIC, mage.cards.b.BreenaTheDemagogue.class)); cards.add(new SetCardInfo("Breya's Apprentice", 91283, Rarity.RARE, mage.cards.b.BreyasApprentice.class)); cards.add(new SetCardInfo("Briar Hydra", 103456, Rarity.RARE, mage.cards.b.BriarHydra.class)); @@ -455,7 +455,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Chatterfang, Squirrel General", 91297, Rarity.MYTHIC, mage.cards.c.ChatterfangSquirrelGeneral.class)); cards.add(new SetCardInfo("Chef's Kiss", 91285, Rarity.RARE, mage.cards.c.ChefsKiss.class)); cards.add(new SetCardInfo("Chevill, Bane of Monsters", 80809, Rarity.MYTHIC, mage.cards.c.ChevillBaneOfMonsters.class)); - cards.add(new SetCardInfo("Chief Engineer", 53824, Rarity.RARE, mage.cards.c.ChiefEngineer.class, FULL_ART)); + cards.add(new SetCardInfo("Chief Engineer", 53824, Rarity.RARE, mage.cards.c.ChiefEngineer.class)); cards.add(new SetCardInfo("Chill", 36062, Rarity.UNCOMMON, mage.cards.c.Chill.class)); cards.add(new SetCardInfo("Chishiro, the Shattered Blade", 98087, Rarity.MYTHIC, mage.cards.c.ChishiroTheShatteredBlade.class)); cards.add(new SetCardInfo("Chittering Harvester", 80961, Rarity.UNCOMMON, mage.cards.c.ChitteringHarvester.class)); @@ -497,7 +497,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Commander's Plate", 85988, Rarity.MYTHIC, mage.cards.c.CommandersPlate.class)); cards.add(new SetCardInfo("Commander's Sphere", 86096, Rarity.COMMON, mage.cards.c.CommandersSphere.class)); cards.add(new SetCardInfo("Concealing Curtains", 95351, Rarity.RARE, mage.cards.c.ConcealingCurtains.class)); - cards.add(new SetCardInfo("Conclave Naturalists", 57596, Rarity.UNCOMMON, mage.cards.c.ConclaveNaturalists.class, FULL_ART)); + cards.add(new SetCardInfo("Conclave Naturalists", 57596, Rarity.UNCOMMON, mage.cards.c.ConclaveNaturalists.class)); cards.add(new SetCardInfo("Concordant Crossroads", 102283, Rarity.MYTHIC, mage.cards.c.ConcordantCrossroads.class)); cards.add(new SetCardInfo("Condemn", 31385, Rarity.UNCOMMON, mage.cards.c.Condemn.class, FULL_ART)); cards.add(new SetCardInfo("Confounding Conundrum", 83828, Rarity.RARE, mage.cards.c.ConfoundingConundrum.class)); @@ -553,7 +553,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Cruel Edict", 35062, Rarity.RARE, mage.cards.c.CruelEdict.class, FULL_ART)); cards.add(new SetCardInfo("Crumbling Vestige", 61565, Rarity.COMMON, mage.cards.c.CrumblingVestige.class)); cards.add(new SetCardInfo("Crusade", 35926, Rarity.RARE, mage.cards.c.Crusade.class)); - cards.add(new SetCardInfo("Cryptborn Horror", 46883, Rarity.RARE, mage.cards.c.CryptbornHorror.class, FULL_ART)); + cards.add(new SetCardInfo("Cryptborn Horror", 46883, Rarity.RARE, mage.cards.c.CryptbornHorror.class)); cards.add(new SetCardInfo("Cryptic Command", 31447, Rarity.RARE, mage.cards.c.CrypticCommand.class, FULL_ART)); cards.add(new SetCardInfo("Crystalline Giant", 80887, Rarity.RARE, mage.cards.c.CrystallineGiant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Crystalline Giant", 80937, Rarity.RARE, mage.cards.c.CrystallineGiant.class, NON_FULL_USE_VARIOUS)); @@ -564,7 +564,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Cultivate", 41640, Rarity.COMMON, mage.cards.c.Cultivate.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cultivate", 81920, Rarity.RARE, mage.cards.c.Cultivate.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cultivator Colossus", 95431, Rarity.MYTHIC, mage.cards.c.CultivatorColossus.class)); - cards.add(new SetCardInfo("Cultivator of Blades", 62219, Rarity.RARE, mage.cards.c.CultivatorOfBlades.class, FULL_ART)); + cards.add(new SetCardInfo("Cultivator of Blades", 62219, Rarity.RARE, mage.cards.c.CultivatorOfBlades.class)); cards.add(new SetCardInfo("Cunning Rhetoric", 90072, Rarity.RARE, mage.cards.c.CunningRhetoric.class)); cards.add(new SetCardInfo("Cunning Wish", 31393, Rarity.RARE, mage.cards.c.CunningWish.class)); cards.add(new SetCardInfo("Cuombajj Witches", 65652, Rarity.COMMON, mage.cards.c.CuombajjWitches.class, NON_FULL_USE_VARIOUS)); @@ -614,12 +614,12 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Day of Judgment", 37873, Rarity.RARE, mage.cards.d.DayOfJudgment.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Dazzling Sphinx", 90030, Rarity.RARE, mage.cards.d.DazzlingSphinx.class)); cards.add(new SetCardInfo("Deadbridge Goliath", 46875, Rarity.RARE, mage.cards.d.DeadbridgeGoliath.class)); - cards.add(new SetCardInfo("Death Baron", 69254, Rarity.RARE, mage.cards.d.DeathBaron.class, FULL_ART)); + cards.add(new SetCardInfo("Death Baron", 69254, Rarity.RARE, mage.cards.d.DeathBaron.class)); cards.add(new SetCardInfo("Death's Oasis", 80835, Rarity.RARE, mage.cards.d.DeathsOasis.class)); cards.add(new SetCardInfo("Deathbloom Ritualist", 105786, Rarity.RARE, mage.cards.d.DeathbloomRitualist.class)); cards.add(new SetCardInfo("Deathbringer Regent", 55894, Rarity.RARE, mage.cards.d.DeathbringerRegent.class)); cards.add(new SetCardInfo("Deathcap Glade", 95457, Rarity.RARE, mage.cards.d.DeathcapGlade.class)); - cards.add(new SetCardInfo("Deathless Angel", 36853, Rarity.RARE, mage.cards.d.DeathlessAngel.class, FULL_ART)); + cards.add(new SetCardInfo("Deathless Angel", 36853, Rarity.RARE, mage.cards.d.DeathlessAngel.class)); cards.add(new SetCardInfo("Debilitating Injury", 55765, Rarity.COMMON, mage.cards.d.DebilitatingInjury.class)); cards.add(new SetCardInfo("Decimate", 62459, Rarity.RARE, mage.cards.d.Decimate.class)); cards.add(new SetCardInfo("Decisive Denial", 90172, Rarity.UNCOMMON, mage.cards.d.DecisiveDenial.class)); @@ -640,7 +640,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Demigod of Revenge", 31437, Rarity.RARE, mage.cards.d.DemigodOfRevenge.class)); cards.add(new SetCardInfo("Demilich", 92616, Rarity.MYTHIC, mage.cards.d.Demilich.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Demilich", 92658, Rarity.MYTHIC, mage.cards.d.Demilich.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Demon of Catastrophes", 69246, Rarity.RARE, mage.cards.d.DemonOfCatastrophes.class, FULL_ART)); + cards.add(new SetCardInfo("Demon of Catastrophes", 69246, Rarity.RARE, mage.cards.d.DemonOfCatastrophes.class)); cards.add(new SetCardInfo("Demonic Bargain", 95347, Rarity.RARE, mage.cards.d.DemonicBargain.class)); cards.add(new SetCardInfo("Demonic Embrace", 82026, Rarity.RARE, mage.cards.d.DemonicEmbrace.class)); cards.add(new SetCardInfo("Demonic Tutor", 35074, Rarity.UNCOMMON, mage.cards.d.DemonicTutor.class)); @@ -660,7 +660,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Diabolic Intent", 105708, Rarity.RARE, mage.cards.d.DiabolicIntent.class)); cards.add(new SetCardInfo("Diamond Lion", 91371, Rarity.RARE, mage.cards.d.DiamondLion.class)); cards.add(new SetCardInfo("Diaochan, Artful Beauty", 47971, Rarity.RARE, mage.cards.d.DiaochanArtfulBeauty.class)); - cards.add(new SetCardInfo("Dictate of Kruphix", 52326, Rarity.RARE, mage.cards.d.DictateOfKruphix.class, FULL_ART)); + cards.add(new SetCardInfo("Dictate of Kruphix", 52326, Rarity.RARE, mage.cards.d.DictateOfKruphix.class)); cards.add(new SetCardInfo("Dictate of the Twin Gods", 52334, Rarity.RARE, mage.cards.d.DictateOfTheTwinGods.class)); cards.add(new SetCardInfo("Dig Through Time", 99973, Rarity.RARE, mage.cards.d.DigThroughTime.class)); cards.add(new SetCardInfo("Dig Up", 95411, Rarity.RARE, mage.cards.d.DigUp.class)); @@ -672,7 +672,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Dimir Signet", 62435, Rarity.COMMON, mage.cards.d.DimirSignet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dire-Strain Anarchist", 95397, Rarity.MYTHIC, mage.cards.d.DireStrainAnarchist.class)); cards.add(new SetCardInfo("Dire-Strain Rampage", 94070, Rarity.RARE, mage.cards.d.DireStrainRampage.class)); - cards.add(new SetCardInfo("Diregraf Ghoul", 42882, Rarity.UNCOMMON, mage.cards.d.DiregrafGhoul.class, FULL_ART)); + cards.add(new SetCardInfo("Diregraf Ghoul", 42882, Rarity.UNCOMMON, mage.cards.d.DiregrafGhoul.class)); cards.add(new SetCardInfo("Dirge Bat", 80935, Rarity.RARE, mage.cards.d.DirgeBat.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dirge Bat", 80997, Rarity.RARE, mage.cards.d.DirgeBat.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dirtcowl Wurm", 32190, Rarity.RARE, mage.cards.d.DirtcowlWurm.class)); @@ -701,7 +701,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Doomskar", 88218, Rarity.RARE, mage.cards.d.Doomskar.class)); cards.add(new SetCardInfo("Doomwake Giant", 52322, Rarity.RARE, mage.cards.d.DoomwakeGiant.class)); cards.add(new SetCardInfo("Door of Destinies", 31963, Rarity.RARE, mage.cards.d.DoorOfDestinies.class)); - cards.add(new SetCardInfo("Doran, the Siege Tower", 31411, Rarity.RARE, mage.cards.d.DoranTheSiegeTower.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Doran, the Siege Tower", 31411, Rarity.RARE, mage.cards.d.DoranTheSiegeTower.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Doran, the Siege Tower", 65658, Rarity.MYTHIC, mage.cards.d.DoranTheSiegeTower.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Double Major", 90198, Rarity.RARE, mage.cards.d.DoubleMajor.class)); cards.add(new SetCardInfo("Double Vision", 81980, Rarity.RARE, mage.cards.d.DoubleVision.class)); @@ -746,11 +746,11 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Drowner of Hope", 58245, Rarity.RARE, mage.cards.d.DrownerOfHope.class)); cards.add(new SetCardInfo("Druid of Purification", 92768, Rarity.RARE, mage.cards.d.DruidOfPurification.class)); cards.add(new SetCardInfo("Dryad Militant", 46267, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dryad Militant", 46873, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Dryad Militant", 46873, Rarity.UNCOMMON, mage.cards.d.DryadMilitant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dryad of the Ilysian Grove", 79953, Rarity.RARE, mage.cards.d.DryadOfTheIlysianGrove.class)); cards.add(new SetCardInfo("Dualcaster Mage", 55868, Rarity.RARE, mage.cards.d.DualcasterMage.class)); cards.add(new SetCardInfo("Duergar Hedge-Mage", 32547, Rarity.UNCOMMON, mage.cards.d.DuergarHedgeMage.class)); - cards.add(new SetCardInfo("Dungrove Elder", 41650, Rarity.RARE, mage.cards.d.DungroveElder.class, FULL_ART)); + cards.add(new SetCardInfo("Dungrove Elder", 41650, Rarity.RARE, mage.cards.d.DungroveElder.class)); cards.add(new SetCardInfo("Duplicant", 47983, Rarity.RARE, mage.cards.d.Duplicant.class)); cards.add(new SetCardInfo("Duress", 35078, Rarity.COMMON, mage.cards.d.Duress.class)); cards.add(new SetCardInfo("Dusk // Dawn", 88224, Rarity.RARE, mage.cards.d.DuskDawn.class)); @@ -773,13 +773,13 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Eiganjo, Seat of the Empire", 98119, Rarity.RARE, mage.cards.e.EiganjoSeatOfTheEmpire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Eiganjo, Seat of the Empire", 98121, Rarity.RARE, mage.cards.e.EiganjoSeatOfTheEmpire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Elder Gargaroth", 81994, Rarity.MYTHIC, mage.cards.e.ElderGargaroth.class)); - cards.add(new SetCardInfo("Electrolyze", 32581, Rarity.UNCOMMON, mage.cards.e.Electrolyze.class, FULL_ART)); + cards.add(new SetCardInfo("Electrolyze", 32581, Rarity.UNCOMMON, mage.cards.e.Electrolyze.class)); cards.add(new SetCardInfo("Elemental Expressionist", 90206, Rarity.RARE, mage.cards.e.ElementalExpressionist.class)); cards.add(new SetCardInfo("Elementalist's Palette", 90332, Rarity.RARE, mage.cards.e.ElementalistsPalette.class)); cards.add(new SetCardInfo("Elenda, the Dusk Rose", 102321, Rarity.MYTHIC, mage.cards.e.ElendaTheDuskRose.class)); cards.add(new SetCardInfo("Elesh Norn, Grand Cenobite", 52306, Rarity.MYTHIC, mage.cards.e.EleshNornGrandCenobite.class)); cards.add(new SetCardInfo("Eligeth, Crossroads Augur", 86280, Rarity.RARE, mage.cards.e.EligethCrossroadsAugur.class)); - cards.add(new SetCardInfo("Elite Inquisitor", 42880, Rarity.RARE, mage.cards.e.EliteInquisitor.class, FULL_ART)); + cards.add(new SetCardInfo("Elite Inquisitor", 42880, Rarity.RARE, mage.cards.e.EliteInquisitor.class)); cards.add(new SetCardInfo("Elite Spellbinder", 89992, Rarity.RARE, mage.cards.e.EliteSpellbinder.class)); cards.add(new SetCardInfo("Ellywick Tumblestrum", 92756, Rarity.MYTHIC, mage.cards.e.EllywickTumblestrum.class)); cards.add(new SetCardInfo("Eloise, Nephalia Sleuth", 94052, Rarity.MYTHIC, mage.cards.e.EloiseNephaliaSleuth.class)); @@ -802,10 +802,10 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Embereth Shieldbreaker", 78774, Rarity.UNCOMMON, mage.cards.e.EmberethShieldbreaker.class)); cards.add(new SetCardInfo("Emberwilde Captain", 86012, Rarity.RARE, mage.cards.e.EmberwildeCaptain.class)); cards.add(new SetCardInfo("Emergent Ultimatum", 80897, Rarity.RARE, mage.cards.e.EmergentUltimatum.class)); - cards.add(new SetCardInfo("Emeria Angel", 36218, Rarity.RARE, mage.cards.e.EmeriaAngel.class, FULL_ART)); + cards.add(new SetCardInfo("Emeria Angel", 36218, Rarity.RARE, mage.cards.e.EmeriaAngel.class)); cards.add(new SetCardInfo("Emeria's Call", 83860, Rarity.MYTHIC, mage.cards.e.EmeriasCall.class)); cards.add(new SetCardInfo("Emiel the Blessed", 102229, Rarity.MYTHIC, mage.cards.e.EmielTheBlessed.class)); - cards.add(new SetCardInfo("Emmara, Soul of the Accord", 69951, Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class, FULL_ART)); + cards.add(new SetCardInfo("Emmara, Soul of the Accord", 69951, Rarity.RARE, mage.cards.e.EmmaraSoulOfTheAccord.class)); cards.add(new SetCardInfo("Empty the Laboratory", 93942, Rarity.RARE, mage.cards.e.EmptyTheLaboratory.class)); cards.add(new SetCardInfo("Empyrial Armor", 36024, Rarity.COMMON, mage.cards.e.EmpyrialArmor.class)); cards.add(new SetCardInfo("Emrakul, the Aeons Torn", 102347, Rarity.MYTHIC, mage.cards.e.EmrakulTheAeonsTorn.class, NON_FULL_USE_VARIOUS)); @@ -830,7 +830,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Esika, God of the Tree", 88330, Rarity.MYTHIC, mage.cards.e.EsikaGodOfTheTree.class)); cards.add(new SetCardInfo("Esior, Wardwing Familiar", 86238, Rarity.UNCOMMON, mage.cards.e.EsiorWardwingFamiliar.class)); cards.add(new SetCardInfo("Esix, Fractal Bloom", 90296, Rarity.MYTHIC, mage.cards.e.EsixFractalBloom.class)); - cards.add(new SetCardInfo("Essence Extraction", 62211, Rarity.UNCOMMON, mage.cards.e.EssenceExtraction.class, FULL_ART)); + cards.add(new SetCardInfo("Essence Extraction", 62211, Rarity.UNCOMMON, mage.cards.e.EssenceExtraction.class)); cards.add(new SetCardInfo("Essence Pulse", 90086, Rarity.RARE, mage.cards.e.EssencePulse.class)); cards.add(new SetCardInfo("Essence Warden", 95481, Rarity.RARE, mage.cards.e.EssenceWarden.class)); cards.add(new SetCardInfo("Etchings of the Chosen", 91359, Rarity.RARE, mage.cards.e.EtchingsOfTheChosen.class)); @@ -920,7 +920,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Fireblast", 31401, Rarity.COMMON, mage.cards.f.Fireblast.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fireblast", 43598, Rarity.COMMON, mage.cards.f.Fireblast.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Firebolt", 31469, Rarity.COMMON, mage.cards.f.Firebolt.class)); - cards.add(new SetCardInfo("Firemane Avenger", 47991, Rarity.RARE, mage.cards.f.FiremaneAvenger.class, FULL_ART)); + cards.add(new SetCardInfo("Firemane Avenger", 47991, Rarity.RARE, mage.cards.f.FiremaneAvenger.class)); cards.add(new SetCardInfo("Firemind's Research", 69949, Rarity.RARE, mage.cards.f.FiremindsResearch.class)); cards.add(new SetCardInfo("Fireslinger", 36038, Rarity.COMMON, mage.cards.f.Fireslinger.class)); cards.add(new SetCardInfo("Firja, Judge of Valor", 88384, Rarity.UNCOMMON, mage.cards.f.FirjaJudgeOfValor.class)); @@ -973,7 +973,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Forest", 40050, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 40060, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 40094, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 53875, Rarity.LAND, mage.cards.basiclands.Forest.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 53875, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 58261, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 73628, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 81872, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); @@ -1091,7 +1091,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Glorious Protector", 88214, Rarity.RARE, mage.cards.g.GloriousProtector.class)); cards.add(new SetCardInfo("Glorious Sunrise", 95407, Rarity.RARE, mage.cards.g.GloriousSunrise.class)); cards.add(new SetCardInfo("Glory", 36248, Rarity.RARE, mage.cards.g.Glory.class)); - cards.add(new SetCardInfo("Glorybringer", 64426, Rarity.RARE, mage.cards.g.Glorybringer.class, FULL_ART)); + cards.add(new SetCardInfo("Glorybringer", 64426, Rarity.RARE, mage.cards.g.Glorybringer.class)); cards.add(new SetCardInfo("Glowstone Recluse", 80969, Rarity.UNCOMMON, mage.cards.g.GlowstoneRecluse.class)); cards.add(new SetCardInfo("Gnarled Professor", 90134, Rarity.RARE, mage.cards.g.GnarledProfessor.class)); cards.add(new SetCardInfo("Gnostro, Voice of the Crags", 86354, Rarity.RARE, mage.cards.g.GnostroVoiceOfTheCrags.class)); @@ -1100,7 +1100,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Goblin Bombardment", 36058, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Goblin Bombardment", 54545, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Goblin Dark-Dwellers", 59673, Rarity.RARE, mage.cards.g.GoblinDarkDwellers.class)); - cards.add(new SetCardInfo("Goblin Diplomats", 49832, Rarity.RARE, mage.cards.g.GoblinDiplomats.class, FULL_ART)); + cards.add(new SetCardInfo("Goblin Diplomats", 49832, Rarity.RARE, mage.cards.g.GoblinDiplomats.class)); cards.add(new SetCardInfo("Goblin Engineer", 91279, Rarity.RARE, mage.cards.g.GoblinEngineer.class)); cards.add(new SetCardInfo("Goblin Guide", 44309, Rarity.RARE, mage.cards.g.GoblinGuide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Goblin Guide", 82822, Rarity.RARE, mage.cards.g.GoblinGuide.class, NON_FULL_USE_VARIOUS)); @@ -1113,7 +1113,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Goblin Vandal", 62383, Rarity.COMMON, mage.cards.g.GoblinVandal.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Goblin Warchief", 31477, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Goblin Warchief", 60452, Rarity.RARE, mage.cards.g.GoblinWarchief.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Godless Shrine", 72305, Rarity.RARE, mage.cards.g.GodlessShrine.class, FULL_ART)); + cards.add(new SetCardInfo("Godless Shrine", 72305, Rarity.RARE, mage.cards.g.GodlessShrine.class)); cards.add(new SetCardInfo("Goldspan Dragon", 88298, Rarity.MYTHIC, mage.cards.g.GoldspanDragon.class)); cards.add(new SetCardInfo("Golem's Heart", 37869, Rarity.UNCOMMON, mage.cards.g.GolemsHeart.class)); cards.add(new SetCardInfo("Golgari Rot Farm", 102363, Rarity.UNCOMMON, mage.cards.g.GolgariRotFarm.class)); @@ -1148,7 +1148,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Griselbrand", 55727, Rarity.MYTHIC, mage.cards.g.Griselbrand.class)); cards.add(new SetCardInfo("Grisly Salvage", 50108, Rarity.COMMON, mage.cards.g.GrislySalvage.class)); cards.add(new SetCardInfo("Grist, the Hunger Tide", 91327, Rarity.MYTHIC, mage.cards.g.GristTheHungerTide.class)); - cards.add(new SetCardInfo("Groundbreaker", 36072, Rarity.RARE, mage.cards.g.Groundbreaker.class, FULL_ART)); + cards.add(new SetCardInfo("Groundbreaker", 36072, Rarity.RARE, mage.cards.g.Groundbreaker.class)); cards.add(new SetCardInfo("Grove of the Guardian", 46889, Rarity.RARE, mage.cards.g.GroveOfTheGuardian.class)); cards.add(new SetCardInfo("Gruul Guildmage", 36302, Rarity.UNCOMMON, mage.cards.g.GruulGuildmage.class)); cards.add(new SetCardInfo("Gruul Signet", 46914, Rarity.UNCOMMON, mage.cards.g.GruulSignet.class, NON_FULL_USE_VARIOUS)); @@ -1159,13 +1159,13 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Guardian of Faith", 92636, Rarity.RARE, mage.cards.g.GuardianOfFaith.class)); cards.add(new SetCardInfo("Guardian of New Benalia", 103388, Rarity.RARE, mage.cards.g.GuardianOfNewBenalia.class)); cards.add(new SetCardInfo("Gush", 61056, Rarity.UNCOMMON, mage.cards.g.Gush.class)); - cards.add(new SetCardInfo("Guttersnipe", 69248, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class, FULL_ART)); + cards.add(new SetCardInfo("Guttersnipe", 69248, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); cards.add(new SetCardInfo("Guul Draz Assassin", 36875, Rarity.RARE, mage.cards.g.GuulDrazAssassin.class)); cards.add(new SetCardInfo("Gwenna, Eyes of Gaea", 105756, Rarity.RARE, mage.cards.g.GwennaEyesOfGaea.class)); cards.add(new SetCardInfo("Gyome, Master Chef", 90290, Rarity.MYTHIC, mage.cards.g.GyomeMasterChef.class)); cards.add(new SetCardInfo("Gyruda, Doom of Depths", 80859, Rarity.RARE, mage.cards.g.GyrudaDoomOfDepths.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gyruda, Doom of Depths", 80919, Rarity.RARE, mage.cards.g.GyrudaDoomOfDepths.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Hada Freeblade", 43558, Rarity.UNCOMMON, mage.cards.h.HadaFreeblade.class, FULL_ART)); + cards.add(new SetCardInfo("Hada Freeblade", 43558, Rarity.UNCOMMON, mage.cards.h.HadaFreeblade.class)); cards.add(new SetCardInfo("Hagra Mauling", 83874, Rarity.RARE, mage.cards.h.HagraMauling.class)); cards.add(new SetCardInfo("Hajar, Loyal Bodyguard", 105782, Rarity.RARE, mage.cards.h.HajarLoyalBodyguard.class)); cards.add(new SetCardInfo("Haktos the Unscarred", 79933, Rarity.RARE, mage.cards.h.HaktosTheUnscarred.class)); @@ -1174,7 +1174,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Hall of Oracles", 90354, Rarity.RARE, mage.cards.h.HallOfOracles.class)); cards.add(new SetCardInfo("Hall of Tagsin", 105870, Rarity.RARE, mage.cards.h.HallOfTagsin.class)); cards.add(new SetCardInfo("Hall of Triumph", 52340, Rarity.RARE, mage.cards.h.HallOfTriumph.class)); - cards.add(new SetCardInfo("Hallowed Fountain", 72297, Rarity.RARE, mage.cards.h.HallowedFountain.class, FULL_ART)); + cards.add(new SetCardInfo("Hallowed Fountain", 72297, Rarity.RARE, mage.cards.h.HallowedFountain.class)); cards.add(new SetCardInfo("Hallowed Haunting", 95277, Rarity.MYTHIC, mage.cards.h.HallowedHaunting.class)); cards.add(new SetCardInfo("Hallowed Respite", 94064, Rarity.RARE, mage.cards.h.HallowedRespite.class)); cards.add(new SetCardInfo("Halo Fountain", 99709, Rarity.MYTHIC, mage.cards.h.HaloFountain.class)); @@ -1203,7 +1203,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Headless Rider", 95327, Rarity.RARE, mage.cards.h.HeadlessRider.class)); cards.add(new SetCardInfo("Healing Technique", 90158, Rarity.RARE, mage.cards.h.HealingTechnique.class)); cards.add(new SetCardInfo("Hedge Troll", 35968, Rarity.UNCOMMON, mage.cards.h.HedgeTroll.class)); - cards.add(new SetCardInfo("Heir of the Wilds", 54555, Rarity.UNCOMMON, mage.cards.h.HeirOfTheWilds.class, FULL_ART)); + cards.add(new SetCardInfo("Heir of the Wilds", 54555, Rarity.UNCOMMON, mage.cards.h.HeirOfTheWilds.class)); cards.add(new SetCardInfo("Heliod's Intervention", 79903, Rarity.RARE, mage.cards.h.HeliodsIntervention.class)); cards.add(new SetCardInfo("Heliod, Sun-Crowned", 79849, Rarity.MYTHIC, mage.cards.h.HeliodSunCrowned.class)); cards.add(new SetCardInfo("Hellkite Courser", 85996, Rarity.MYTHIC, mage.cards.h.HellkiteCourser.class)); @@ -1219,7 +1219,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Hero's Downfall", 55731, Rarity.RARE, mage.cards.h.HerosDownfall.class)); cards.add(new SetCardInfo("Heroes' Bane", 52328, Rarity.RARE, mage.cards.h.HeroesBane.class)); cards.add(new SetCardInfo("Heroic Intervention", 81988, Rarity.RARE, mage.cards.h.HeroicIntervention.class)); - cards.add(new SetCardInfo("Heron's Grace Champion", 61563, Rarity.RARE, mage.cards.h.HeronsGraceChampion.class, FULL_ART)); + cards.add(new SetCardInfo("Heron's Grace Champion", 61563, Rarity.RARE, mage.cards.h.HeronsGraceChampion.class)); cards.add(new SetCardInfo("Heronblade Elite", 94026, Rarity.RARE, mage.cards.h.HeronbladeElite.class)); cards.add(new SetCardInfo("Hewed Stone Retainers", 55745, Rarity.UNCOMMON, mage.cards.h.HewedStoneRetainers.class)); cards.add(new SetCardInfo("Hexavus", 105824, Rarity.RARE, mage.cards.h.Hexavus.class, NON_FULL_USE_VARIOUS)); @@ -1229,7 +1229,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Hinata, Dawn-Crowned", 98077, Rarity.RARE, mage.cards.h.HinataDawnCrowned.class)); cards.add(new SetCardInfo("Hinder", 35172, Rarity.UNCOMMON, mage.cards.h.Hinder.class, FULL_ART)); cards.add(new SetCardInfo("History of Benalia", 99669, Rarity.MYTHIC, mage.cards.h.HistoryOfBenalia.class)); - cards.add(new SetCardInfo("Hive Stirrings", 49828, Rarity.COMMON, mage.cards.h.HiveStirrings.class, FULL_ART)); + cards.add(new SetCardInfo("Hive Stirrings", 49828, Rarity.COMMON, mage.cards.h.HiveStirrings.class)); cards.add(new SetCardInfo("Hiveheart Shaman", 95405, Rarity.RARE, mage.cards.h.HiveheartShaman.class)); cards.add(new SetCardInfo("Hixus, Prison Warden", 57584, Rarity.RARE, mage.cards.h.HixusPrisonWarden.class)); cards.add(new SetCardInfo("Hoard Hauler", 99747, Rarity.RARE, mage.cards.h.HoardHauler.class)); @@ -1274,6 +1274,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Ice-Fang Coatl", 91333, Rarity.RARE, mage.cards.i.IceFangCoatl.class)); cards.add(new SetCardInfo("Icebreaker Kraken", 88248, Rarity.RARE, mage.cards.i.IcebreakerKraken.class)); cards.add(new SetCardInfo("Ich-Tekik, Salvage Splicer", 86346, Rarity.UNCOMMON, mage.cards.i.IchTekikSalvageSplicer.class)); + //cards.add(new SetCardInfo("Ichiga, Who Topples Oaks", 36288, Rarity.UNCOMMON, mage.cards.i.IchigaWhoTopplesOaks.class)); cards.add(new SetCardInfo("Icingdeath, Frost Tyrant", 92620, Rarity.MYTHIC, mage.cards.i.IcingdeathFrostTyrant.class)); cards.add(new SetCardInfo("Icy Manipulator", 35042, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); cards.add(new SetCardInfo("Identity Thief", 61559, Rarity.RARE, mage.cards.i.IdentityThief.class)); @@ -1287,12 +1288,12 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Illuna, Apex of Wishes", 80991, Rarity.MYTHIC, mage.cards.i.IllunaApexOfWishes.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Immaculate Magistrate", 86048, Rarity.RARE, mage.cards.i.ImmaculateMagistrate.class)); cards.add(new SetCardInfo("Immersturm Predator", 88368, Rarity.RARE, mage.cards.i.ImmersturmPredator.class)); - cards.add(new SetCardInfo("Immolating Glare", 59669, Rarity.UNCOMMON, mage.cards.i.ImmolatingGlare.class, FULL_ART)); + cards.add(new SetCardInfo("Immolating Glare", 59669, Rarity.UNCOMMON, mage.cards.i.ImmolatingGlare.class)); cards.add(new SetCardInfo("Imoti, Celebrant of Bounty", 86278, Rarity.UNCOMMON, mage.cards.i.ImotiCelebrantOfBounty.class)); cards.add(new SetCardInfo("Imperial Recruiter", 91277, Rarity.MYTHIC, mage.cards.i.ImperialRecruiter.class)); cards.add(new SetCardInfo("Imperial Seal", 102253, Rarity.MYTHIC, mage.cards.i.ImperialSeal.class)); cards.add(new SetCardInfo("Imperious Mindbreaker", 95305, Rarity.RARE, mage.cards.i.ImperiousMindbreaker.class)); - cards.add(new SetCardInfo("Imperious Perfect", 31409, Rarity.UNCOMMON, mage.cards.i.ImperiousPerfect.class, FULL_ART)); + cards.add(new SetCardInfo("Imperious Perfect", 31409, Rarity.UNCOMMON, mage.cards.i.ImperiousPerfect.class)); cards.add(new SetCardInfo("Imposter Mech", 97919, Rarity.RARE, mage.cards.i.ImposterMech.class)); cards.add(new SetCardInfo("Impulse", 36006, Rarity.COMMON, mage.cards.i.Impulse.class)); cards.add(new SetCardInfo("In Garruk's Wake", 53828, Rarity.RARE, mage.cards.i.InGarruksWake.class)); @@ -1302,7 +1303,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Incarnation Technique", 90084, Rarity.RARE, mage.cards.i.IncarnationTechnique.class)); cards.add(new SetCardInfo("Incendiary Flow", 62991, Rarity.UNCOMMON, mage.cards.i.IncendiaryFlow.class)); cards.add(new SetCardInfo("Incinerate", 31419, Rarity.COMMON, mage.cards.i.Incinerate.class, FULL_ART)); - cards.add(new SetCardInfo("Incorrigible Youths", 60470, Rarity.UNCOMMON, mage.cards.i.IncorrigibleYouths.class, FULL_ART)); + cards.add(new SetCardInfo("Incorrigible Youths", 60470, Rarity.UNCOMMON, mage.cards.i.IncorrigibleYouths.class)); cards.add(new SetCardInfo("Indatha Triome", 80945, Rarity.RARE, mage.cards.i.IndathaTriome.class)); cards.add(new SetCardInfo("Indulgent Tormentor", 53822, Rarity.RARE, mage.cards.i.IndulgentTormentor.class)); cards.add(new SetCardInfo("Inevitable Betrayal", 91239, Rarity.RARE, mage.cards.i.InevitableBetrayal.class)); @@ -1355,7 +1356,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Island", 40052, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 40062, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 40100, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 53881, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 53881, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 58255, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 73634, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 81846, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); @@ -1402,7 +1403,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Jokulhaups", 70942, Rarity.RARE, mage.cards.j.Jokulhaups.class)); cards.add(new SetCardInfo("Jolrael, Mwonvuli Recluse", 81982, Rarity.RARE, mage.cards.j.JolraelMwonvuliRecluse.class)); cards.add(new SetCardInfo("Joraga Warcaller", 35820, Rarity.RARE, mage.cards.j.JoragaWarcaller.class)); - cards.add(new SetCardInfo("Jori En, Ruin Diver", 59679, Rarity.RARE, mage.cards.j.JoriEnRuinDiver.class, FULL_ART)); + cards.add(new SetCardInfo("Jori En, Ruin Diver", 59679, Rarity.RARE, mage.cards.j.JoriEnRuinDiver.class)); cards.add(new SetCardInfo("Jorn, God of Winter", 88350, Rarity.RARE, mage.cards.j.JornGodOfWinter.class)); cards.add(new SetCardInfo("Judge's Familiar", 48194, Rarity.UNCOMMON, mage.cards.j.JudgesFamiliar.class)); cards.add(new SetCardInfo("Jugan Defends the Temple", 98063, Rarity.MYTHIC, mage.cards.j.JuganDefendsTheTemple.class)); @@ -1416,7 +1417,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Kairi, the Swirling Sky", 97941, Rarity.MYTHIC, mage.cards.k.KairiTheSwirlingSky.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kairi, the Swirling Sky", 97943, Rarity.MYTHIC, mage.cards.k.KairiTheSwirlingSky.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kaito Shizuki", 98093, Rarity.MYTHIC, mage.cards.k.KaitoShizuki.class)); - cards.add(new SetCardInfo("Kalastria Highborn", 43552, Rarity.RARE, mage.cards.k.KalastriaHighborn.class, FULL_ART)); + cards.add(new SetCardInfo("Kalastria Highborn", 43552, Rarity.RARE, mage.cards.k.KalastriaHighborn.class)); cards.add(new SetCardInfo("Kamahl's Will", 86060, Rarity.RARE, mage.cards.k.KamahlsWill.class)); cards.add(new SetCardInfo("Kamahl, Heart of Krosa", 86338, Rarity.MYTHIC, mage.cards.k.KamahlHeartOfKrosa.class)); cards.add(new SetCardInfo("Kamahl, Pit Fighter", 36088, Rarity.RARE, mage.cards.k.KamahlPitFighter.class)); @@ -1465,10 +1466,10 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Khabal Ghoul", 215, Rarity.RARE, mage.cards.k.KhabalGhoul.class)); cards.add(new SetCardInfo("Kianne, Dean of Substance", 90244, Rarity.RARE, mage.cards.k.KianneDeanOfSubstance.class)); cards.add(new SetCardInfo("Killer Service", 99845, Rarity.RARE, mage.cards.k.KillerService.class)); - cards.add(new SetCardInfo("Killing Wave", 44319, Rarity.RARE, mage.cards.k.KillingWave.class, FULL_ART)); + cards.add(new SetCardInfo("Killing Wave", 44319, Rarity.RARE, mage.cards.k.KillingWave.class)); cards.add(new SetCardInfo("King of the Pride", 91225, Rarity.RARE, mage.cards.k.KingOfThePride.class)); cards.add(new SetCardInfo("Kinnan, Bonder Prodigy", 80851, Rarity.MYTHIC, mage.cards.k.KinnanBonderProdigy.class)); - cards.add(new SetCardInfo("Kiora's Follower", 51926, Rarity.UNCOMMON, mage.cards.k.KiorasFollower.class, FULL_ART)); + cards.add(new SetCardInfo("Kiora's Follower", 51926, Rarity.UNCOMMON, mage.cards.k.KiorasFollower.class)); cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", 72293, Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kiora, Behemoth Beckoner", 78027, Rarity.UNCOMMON, mage.cards.k.KioraBehemothBeckoner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kiora, the Crashing Wave", 59651, Rarity.MYTHIC, mage.cards.k.KioraTheCrashingWave.class)); @@ -1521,16 +1522,16 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Lake of the Dead", 23954, Rarity.RARE, mage.cards.l.LakeOfTheDead.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lake of the Dead", 43630, Rarity.RARE, mage.cards.l.LakeOfTheDead.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Land Tax", 36855, Rarity.RARE, mage.cards.l.LandTax.class)); - cards.add(new SetCardInfo("Languish", 57592, Rarity.RARE, mage.cards.l.Languish.class, FULL_ART)); + cards.add(new SetCardInfo("Languish", 57592, Rarity.RARE, mage.cards.l.Languish.class)); cards.add(new SetCardInfo("Lantern Flare", 95253, Rarity.RARE, mage.cards.l.LanternFlare.class)); cards.add(new SetCardInfo("Laquatus's Champion", 37875, Rarity.RARE, mage.cards.l.LaquatussChampion.class)); - cards.add(new SetCardInfo("Latch Seeker", 44315, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class, FULL_ART)); + cards.add(new SetCardInfo("Latch Seeker", 44315, Rarity.UNCOMMON, mage.cards.l.LatchSeeker.class)); cards.add(new SetCardInfo("Lathiel, the Bounteous Dawn", 86292, Rarity.RARE, mage.cards.l.LathielTheBounteousDawn.class)); cards.add(new SetCardInfo("Laurine, the Diversion", 95387, Rarity.RARE, mage.cards.l.LaurineTheDiversion.class)); cards.add(new SetCardInfo("Lava Axe", 32559, Rarity.COMMON, mage.cards.l.LavaAxe.class)); cards.add(new SetCardInfo("Lavabelly Sliver", 91355, Rarity.RARE, mage.cards.l.LavabellySliver.class)); cards.add(new SetCardInfo("Lavabrink Venturer", 80889, Rarity.RARE, mage.cards.l.LavabrinkVenturer.class)); - cards.add(new SetCardInfo("Lavinia, Azorius Renegade", 71588, Rarity.RARE, mage.cards.l.LaviniaAzoriusRenegade.class, FULL_ART)); + cards.add(new SetCardInfo("Lavinia, Azorius Renegade", 71588, Rarity.RARE, mage.cards.l.LaviniaAzoriusRenegade.class)); cards.add(new SetCardInfo("Leaf-Crowned Visionary", 103462, Rarity.RARE, mage.cards.l.LeafCrownedVisionary.class)); cards.add(new SetCardInfo("Leatherback Baloth", 43576, Rarity.UNCOMMON, mage.cards.l.LeatherbackBaloth.class)); cards.add(new SetCardInfo("Ledger Shredder", 99733, Rarity.RARE, mage.cards.l.LedgerShredder.class)); @@ -1560,8 +1561,8 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Lightning Rift", 32571, Rarity.UNCOMMON, mage.cards.l.LightningRift.class)); cards.add(new SetCardInfo("Liliana of the Veil", 103420, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana of the Veil", 55866, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Liliana's Specter", 37602, Rarity.COMMON, mage.cards.l.LilianasSpecter.class, FULL_ART)); - cards.add(new SetCardInfo("Liliana's Triumph", 72221, Rarity.UNCOMMON, mage.cards.l.LilianasTriumph.class, FULL_ART)); + cards.add(new SetCardInfo("Liliana's Specter", 37602, Rarity.COMMON, mage.cards.l.LilianasSpecter.class)); + cards.add(new SetCardInfo("Liliana's Triumph", 72221, Rarity.UNCOMMON, mage.cards.l.LilianasTriumph.class)); cards.add(new SetCardInfo("Liliana, Dreadhorde General", 72283, Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana, Dreadhorde General", 78017, Rarity.MYTHIC, mage.cards.l.LilianaDreadhordeGeneral.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana, the Last Hope", 102255, Rarity.MYTHIC, mage.cards.l.LilianaTheLastHope.class)); @@ -1579,7 +1580,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Lizard Blades", 97985, Rarity.RARE, mage.cards.l.LizardBlades.class)); cards.add(new SetCardInfo("Llanowar Elves", 31379, Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Llanowar Elves", 35934, Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Llanowar Elves", 68039, Rarity.COMMON, mage.cards.l.LlanowarElves.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Llanowar Elves", 68039, Rarity.COMMON, mage.cards.l.LlanowarElves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Llanowar Greenwidow", 103466, Rarity.RARE, mage.cards.l.LlanowarGreenwidow.class)); cards.add(new SetCardInfo("Llanowar Loamspeaker", 103458, Rarity.RARE, mage.cards.l.LlanowarLoamspeaker.class)); cards.add(new SetCardInfo("Llanowar Tribe", 91317, Rarity.RARE, mage.cards.l.LlanowarTribe.class)); @@ -1629,7 +1630,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Magma Jet", 36162, Rarity.UNCOMMON, mage.cards.m.MagmaJet.class)); cards.add(new SetCardInfo("Magma Opus", 90276, Rarity.MYTHIC, mage.cards.m.MagmaOpus.class)); cards.add(new SetCardInfo("Magma Spray", 52338, Rarity.RARE, mage.cards.m.MagmaSpray.class)); - cards.add(new SetCardInfo("Magmaquake", 45207, Rarity.RARE, mage.cards.m.Magmaquake.class, FULL_ART)); + cards.add(new SetCardInfo("Magmaquake", 45207, Rarity.RARE, mage.cards.m.Magmaquake.class)); cards.add(new SetCardInfo("Magmatic Channeler", 83766, Rarity.RARE, mage.cards.m.MagmaticChanneler.class)); cards.add(new SetCardInfo("Magmatic Sinkhole", 91291, Rarity.RARE, mage.cards.m.MagmaticSinkhole.class)); cards.add(new SetCardInfo("Magus of the Order", 85984, Rarity.RARE, mage.cards.m.MagusOfTheOrder.class)); @@ -1665,7 +1666,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("March of Swirling Mist", 97927, Rarity.RARE, mage.cards.m.MarchOfSwirlingMist.class)); cards.add(new SetCardInfo("March of Wretched Sorrow", 97963, Rarity.RARE, mage.cards.m.MarchOfWretchedSorrow.class)); cards.add(new SetCardInfo("Marchesa, the Black Rose", 102313, Rarity.RARE, mage.cards.m.MarchesaTheBlackRose.class)); - cards.add(new SetCardInfo("Mardu Shadowspear", 55717, Rarity.UNCOMMON, mage.cards.m.MarduShadowspear.class, FULL_ART)); + cards.add(new SetCardInfo("Mardu Shadowspear", 55717, Rarity.UNCOMMON, mage.cards.m.MarduShadowspear.class)); cards.add(new SetCardInfo("Marisi's Twinclaws", 36186, Rarity.UNCOMMON, mage.cards.m.MarisisTwinclaws.class)); cards.add(new SetCardInfo("Markov Dreadknight", 60456, Rarity.RARE, mage.cards.m.MarkovDreadknight.class)); cards.add(new SetCardInfo("Markov Enforcer", 95369, Rarity.RARE, mage.cards.m.MarkovEnforcer.class)); @@ -1693,8 +1694,8 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Meddling Mage", 82830, Rarity.RARE, mage.cards.m.MeddlingMage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Meeting of the Five", 99757, Rarity.MYTHIC, mage.cards.m.MeetingOfTheFive.class)); cards.add(new SetCardInfo("Megantic Sliver", 49830, Rarity.RARE, mage.cards.m.MeganticSliver.class)); - cards.add(new SetCardInfo("Melek, Izzet Paragon", 48578, Rarity.RARE, mage.cards.m.MelekIzzetParagon.class, FULL_ART)); - cards.add(new SetCardInfo("Memnite", 37871, Rarity.UNCOMMON, mage.cards.m.Memnite.class, FULL_ART)); + cards.add(new SetCardInfo("Melek, Izzet Paragon", 48578, Rarity.RARE, mage.cards.m.MelekIzzetParagon.class)); + cards.add(new SetCardInfo("Memnite", 37871, Rarity.UNCOMMON, mage.cards.m.Memnite.class)); cards.add(new SetCardInfo("Memoricide", 37863, Rarity.RARE, mage.cards.m.Memoricide.class)); cards.add(new SetCardInfo("Memory Deluge", 93936, Rarity.RARE, mage.cards.m.MemoryDeluge.class)); cards.add(new SetCardInfo("Memory Lapse", 35986, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); @@ -1742,7 +1743,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Mishra, Eminent One", 105804, Rarity.MYTHIC, mage.cards.m.MishraEminentOne.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mishra, Tamer of Mak Fawa", 105778, Rarity.RARE, mage.cards.m.MishraTamerOfMakFawa.class)); cards.add(new SetCardInfo("Misty Rainforest", 91407, Rarity.RARE, mage.cards.m.MistyRainforest.class)); - cards.add(new SetCardInfo("Mitotic Slime", 37600, Rarity.RARE, mage.cards.m.MitoticSlime.class, FULL_ART)); + cards.add(new SetCardInfo("Mitotic Slime", 37600, Rarity.RARE, mage.cards.m.MitoticSlime.class)); cards.add(new SetCardInfo("Mizzium Meddler", 57608, Rarity.RARE, mage.cards.m.MizziumMeddler.class)); cards.add(new SetCardInfo("Mizzium Mortars", 99667, Rarity.RARE, mage.cards.m.MizziumMortars.class)); cards.add(new SetCardInfo("Mnemonic Deluge", 86022, Rarity.MYTHIC, mage.cards.m.MnemonicDeluge.class)); @@ -1781,7 +1782,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Mountain", 40054, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 40064, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 40096, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 53877, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 53877, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 58259, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 73630, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 81864, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); @@ -1811,15 +1812,15 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Murderous Rider", 78846, Rarity.RARE, mage.cards.m.MurderousRider.class)); cards.add(new SetCardInfo("Muscle Sliver", 36034, Rarity.COMMON, mage.cards.m.MuscleSliver.class)); cards.add(new SetCardInfo("Muse Vortex", 90032, Rarity.RARE, mage.cards.m.MuseVortex.class)); - cards.add(new SetCardInfo("Mutavault", 31425, Rarity.RARE, mage.cards.m.Mutavault.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Mutavault", 31425, Rarity.RARE, mage.cards.m.Mutavault.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mutavault", 66888, Rarity.RARE, mage.cards.m.Mutavault.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mwonvuli Beast Tracker", 45211, Rarity.UNCOMMON, mage.cards.m.MwonvuliBeastTracker.class, FULL_ART)); - cards.add(new SetCardInfo("Mycoid Shepherd", 43556, Rarity.RARE, mage.cards.m.MycoidShepherd.class, FULL_ART)); + cards.add(new SetCardInfo("Mwonvuli Beast Tracker", 45211, Rarity.UNCOMMON, mage.cards.m.MwonvuliBeastTracker.class)); + cards.add(new SetCardInfo("Mycoid Shepherd", 43556, Rarity.RARE, mage.cards.m.MycoidShepherd.class)); cards.add(new SetCardInfo("Myojin of Blooming Dawn", 97881, Rarity.RARE, mage.cards.m.MyojinOfBloomingDawn.class)); cards.add(new SetCardInfo("Myojin of Roaring Blades", 97999, Rarity.RARE, mage.cards.m.MyojinOfRoaringBlades.class)); cards.add(new SetCardInfo("Myojin of Towering Might", 98033, Rarity.RARE, mage.cards.m.MyojinOfToweringMight.class)); cards.add(new SetCardInfo("Myr Enforcer", 36274, Rarity.COMMON, mage.cards.m.MyrEnforcer.class)); - cards.add(new SetCardInfo("Myr Superion", 40078, Rarity.RARE, mage.cards.m.MyrSuperion.class, FULL_ART)); + cards.add(new SetCardInfo("Myr Superion", 40078, Rarity.RARE, mage.cards.m.MyrSuperion.class)); cards.add(new SetCardInfo("Myrel, Shield of Argive", 105644, Rarity.MYTHIC, mage.cards.m.MyrelShieldOfArgive.class)); cards.add(new SetCardInfo("Myriad Construct", 83784, Rarity.RARE, mage.cards.m.MyriadConstruct.class)); cards.add(new SetCardInfo("Myriad Landscape", 83674, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class, NON_FULL_USE_VARIOUS)); @@ -1881,7 +1882,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Nicol Bolas, Dragon-God", 78015, Rarity.MYTHIC, mage.cards.n.NicolBolasDragonGod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, Planeswalker", 65009, Rarity.MYTHIC, mage.cards.n.NicolBolasPlaneswalker.class)); cards.add(new SetCardInfo("Nighthawk Scavenger", 83734, Rarity.RARE, mage.cards.n.NighthawkScavenger.class)); - cards.add(new SetCardInfo("Nighthowler", 50122, Rarity.RARE, mage.cards.n.Nighthowler.class, FULL_ART)); + cards.add(new SetCardInfo("Nighthowler", 50122, Rarity.RARE, mage.cards.n.Nighthowler.class)); cards.add(new SetCardInfo("Nightmare Shepherd", 79905, Rarity.RARE, mage.cards.n.NightmareShepherd.class)); cards.add(new SetCardInfo("Nightshade Harvester", 86024, Rarity.RARE, mage.cards.n.NightshadeHarvester.class)); cards.add(new SetCardInfo("Nightveil Specter", 47995, Rarity.RARE, mage.cards.n.NightveilSpecter.class)); @@ -1890,14 +1891,14 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Nimble Trapfinder", 83744, Rarity.RARE, mage.cards.n.NimbleTrapfinder.class)); cards.add(new SetCardInfo("Nine Lives", 81938, Rarity.RARE, mage.cards.n.NineLives.class)); cards.add(new SetCardInfo("Nissa of Shadowed Boughs", 83842, Rarity.MYTHIC, mage.cards.n.NissaOfShadowedBoughs.class)); - cards.add(new SetCardInfo("Nissa's Chosen", 36216, Rarity.COMMON, mage.cards.n.NissasChosen.class, FULL_ART)); + cards.add(new SetCardInfo("Nissa's Chosen", 36216, Rarity.COMMON, mage.cards.n.NissasChosen.class)); cards.add(new SetCardInfo("Nissa's Pilgrimage", 59677, Rarity.COMMON, mage.cards.n.NissasPilgrimage.class)); cards.add(new SetCardInfo("Nissa, Vital Force", 70936, Rarity.MYTHIC, mage.cards.n.NissaVitalForce.class)); cards.add(new SetCardInfo("Nissa, Voice of Zendikar", 62511, Rarity.MYTHIC, mage.cards.n.NissaVoiceOfZendikar.class)); cards.add(new SetCardInfo("Nissa, Who Shakes the World", 72261, Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nissa, Who Shakes the World", 77995, Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nissa, Worldwaker", 65005, Rarity.MYTHIC, mage.cards.n.NissaWorldwaker.class)); - cards.add(new SetCardInfo("Niv-Mizzet, the Firemind", 32583, Rarity.RARE, mage.cards.n.NivMizzetTheFiremind.class, FULL_ART)); + cards.add(new SetCardInfo("Niv-Mizzet, the Firemind", 32583, Rarity.RARE, mage.cards.n.NivMizzetTheFiremind.class)); cards.add(new SetCardInfo("Noble Hierarch", 58239, Rarity.RARE, mage.cards.n.NobleHierarch.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Noble Hierarch", 66894, Rarity.RARE, mage.cards.n.NobleHierarch.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Noble Hierarch", 82826, Rarity.RARE, mage.cards.n.NobleHierarch.class, NON_FULL_USE_VARIOUS)); @@ -1968,14 +1969,14 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Overbeing of Myth", 31967, Rarity.RARE, mage.cards.o.OverbeingOfMyth.class)); cards.add(new SetCardInfo("Overcharged Amalgam", 95293, Rarity.RARE, mage.cards.o.OverchargedAmalgam.class)); cards.add(new SetCardInfo("Overgrown Farmland", 94098, Rarity.RARE, mage.cards.o.OvergrownFarmland.class)); - cards.add(new SetCardInfo("Overgrown Tomb", 72315, Rarity.RARE, mage.cards.o.OvergrownTomb.class, FULL_ART)); + cards.add(new SetCardInfo("Overgrown Tomb", 72315, Rarity.RARE, mage.cards.o.OvergrownTomb.class)); cards.add(new SetCardInfo("Oversimplify", 90222, Rarity.RARE, mage.cards.o.Oversimplify.class)); cards.add(new SetCardInfo("Overtaker", 32202, Rarity.RARE, mage.cards.o.Overtaker.class)); cards.add(new SetCardInfo("Ox of Agonas", 79943, Rarity.MYTHIC, mage.cards.o.OxOfAgonas.class)); cards.add(new SetCardInfo("Oxidize", 35162, Rarity.UNCOMMON, mage.cards.o.Oxidize.class, FULL_ART)); cards.add(new SetCardInfo("Pack Leader", 81910, Rarity.RARE, mage.cards.p.PackLeader.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Pack Leader", 81926, Rarity.RARE, mage.cards.p.PackLeader.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Pain Seer", 51916, Rarity.RARE, mage.cards.p.PainSeer.class, FULL_ART)); + cards.add(new SetCardInfo("Pain Seer", 51916, Rarity.RARE, mage.cards.p.PainSeer.class)); cards.add(new SetCardInfo("Painful Quandary", 105716, Rarity.RARE, mage.cards.p.PainfulQuandary.class)); cards.add(new SetCardInfo("Panharmonicon", 102339, Rarity.RARE, mage.cards.p.Panharmonicon.class)); cards.add(new SetCardInfo("Paradox Zone", 90160, Rarity.RARE, mage.cards.p.ParadoxZone.class)); @@ -2000,7 +2001,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Pest Infestation", 90150, Rarity.RARE, mage.cards.p.PestInfestation.class)); cards.add(new SetCardInfo("Pestilent Cauldron", 90232, Rarity.RARE, mage.cards.p.PestilentCauldron.class)); cards.add(new SetCardInfo("Phabine, Boss's Confidant", 99797, Rarity.MYTHIC, mage.cards.p.PhabineBosssConfidant.class)); - cards.add(new SetCardInfo("Phalanx Leader", 50116, Rarity.UNCOMMON, mage.cards.p.PhalanxLeader.class, FULL_ART)); + cards.add(new SetCardInfo("Phalanx Leader", 50116, Rarity.UNCOMMON, mage.cards.p.PhalanxLeader.class)); cards.add(new SetCardInfo("Phoenix of Ash", 79915, Rarity.RARE, mage.cards.p.PhoenixOfAsh.class)); cards.add(new SetCardInfo("Phylath, World Sculptor", 83720, Rarity.RARE, mage.cards.p.PhylathWorldSculptor.class)); cards.add(new SetCardInfo("Phyrexian Altar", 102337, Rarity.RARE, mage.cards.p.PhyrexianAltar.class)); @@ -2040,7 +2041,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Plains", 40066, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 40098, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 48582, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 53879, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 53879, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 58253, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 73626, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 81830, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); @@ -2078,7 +2079,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Preordain", 86092, Rarity.COMMON, mage.cards.p.Preordain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Preordain", 99675, Rarity.COMMON, mage.cards.p.Preordain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Priest of Titania", 36120, Rarity.COMMON, mage.cards.p.PriestOfTitania.class)); - cards.add(new SetCardInfo("Priest of Urabrask", 40080, Rarity.UNCOMMON, mage.cards.p.PriestOfUrabrask.class, FULL_ART)); + cards.add(new SetCardInfo("Priest of Urabrask", 40080, Rarity.UNCOMMON, mage.cards.p.PriestOfUrabrask.class)); cards.add(new SetCardInfo("Primal Adversary", 94016, Rarity.MYTHIC, mage.cards.p.PrimalAdversary.class)); cards.add(new SetCardInfo("Primal Command", 62489, Rarity.RARE, mage.cards.p.PrimalCommand.class)); cards.add(new SetCardInfo("Primal Might", 81990, Rarity.RARE, mage.cards.p.PrimalMight.class)); @@ -2129,7 +2130,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Rabble Rousing", 99771, Rarity.RARE, mage.cards.r.RabbleRousing.class)); cards.add(new SetCardInfo("Radha's Firebrand", 103442, Rarity.RARE, mage.cards.r.RadhasFirebrand.class)); cards.add(new SetCardInfo("Radha, Heart of Keld", 82016, Rarity.RARE, mage.cards.r.RadhaHeartOfKeld.class)); - cards.add(new SetCardInfo("Radiant Flames", 58277, Rarity.RARE, mage.cards.r.RadiantFlames.class, FULL_ART)); + cards.add(new SetCardInfo("Radiant Flames", 58277, Rarity.RARE, mage.cards.r.RadiantFlames.class)); cards.add(new SetCardInfo("Radiant Performer", 90102, Rarity.RARE, mage.cards.r.RadiantPerformer.class)); cards.add(new SetCardInfo("Radiant Scrollwielder", 90214, Rarity.RARE, mage.cards.r.RadiantScrollwielder.class)); cards.add(new SetCardInfo("Radiant Solar", 92638, Rarity.RARE, mage.cards.r.RadiantSolar.class)); @@ -2143,8 +2144,8 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Raiyuu, Storm's Edge", 98075, Rarity.RARE, mage.cards.r.RaiyuuStormsEdge.class)); cards.add(new SetCardInfo("Rakdos Cackler", 49842, Rarity.UNCOMMON, mage.cards.r.RakdosCackler.class)); cards.add(new SetCardInfo("Rakdos Carnarium", 102355, Rarity.UNCOMMON, mage.cards.r.RakdosCarnarium.class)); - cards.add(new SetCardInfo("Rakdos Firewheeler", 71590, Rarity.UNCOMMON, mage.cards.r.RakdosFirewheeler.class, FULL_ART)); - cards.add(new SetCardInfo("Rakdos Guildmage", 32589, Rarity.UNCOMMON, mage.cards.r.RakdosGuildmage.class, FULL_ART)); + cards.add(new SetCardInfo("Rakdos Firewheeler", 71590, Rarity.UNCOMMON, mage.cards.r.RakdosFirewheeler.class)); + cards.add(new SetCardInfo("Rakdos Guildmage", 32589, Rarity.UNCOMMON, mage.cards.r.RakdosGuildmage.class)); cards.add(new SetCardInfo("Rakdos Signet", 46898, Rarity.UNCOMMON, mage.cards.r.RakdosSignet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Rakdos Signet", 62389, Rarity.COMMON, mage.cards.r.RakdosSignet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Rakdos, Lord of Riots", 86208, Rarity.MYTHIC, mage.cards.r.RakdosLordOfRiots.class)); @@ -2184,7 +2185,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Reckless Crew", 88314, Rarity.RARE, mage.cards.r.RecklessCrew.class)); cards.add(new SetCardInfo("Reckless Wurm", 35990, Rarity.UNCOMMON, mage.cards.r.RecklessWurm.class)); cards.add(new SetCardInfo("Reckoner Bankbuster", 98113, Rarity.RARE, mage.cards.r.ReckonerBankbuster.class)); - cards.add(new SetCardInfo("Reclamation Sage", 53836, Rarity.UNCOMMON, mage.cards.r.ReclamationSage.class, FULL_ART)); + cards.add(new SetCardInfo("Reclamation Sage", 53836, Rarity.UNCOMMON, mage.cards.r.ReclamationSage.class)); cards.add(new SetCardInfo("Recollect", 35060, Rarity.UNCOMMON, mage.cards.r.Recollect.class, FULL_ART)); cards.add(new SetCardInfo("Recruitment Officer", 105614, Rarity.UNCOMMON, mage.cards.r.RecruitmentOfficer.class)); cards.add(new SetCardInfo("Red Dragon", 92754, Rarity.UNCOMMON, mage.cards.r.RedDragon.class)); @@ -2287,7 +2288,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Ruthless Technomancer", 97955, Rarity.RARE, mage.cards.r.RuthlessTechnomancer.class)); cards.add(new SetCardInfo("Ruxa, Patient Professor", 90154, Rarity.RARE, mage.cards.r.RuxaPatientProfessor.class)); cards.add(new SetCardInfo("Ryusei, the Falling Star", 32001, Rarity.RARE, mage.cards.r.RyuseiTheFallingStar.class)); - cards.add(new SetCardInfo("Sacred Foundry", 72309, Rarity.RARE, mage.cards.s.SacredFoundry.class, FULL_ART)); + cards.add(new SetCardInfo("Sacred Foundry", 72309, Rarity.RARE, mage.cards.s.SacredFoundry.class)); cards.add(new SetCardInfo("Sage of the Inward Eye", 54518, Rarity.RARE, mage.cards.s.SageOfTheInwardEye.class)); cards.add(new SetCardInfo("Sage-Eye Avengers", 55709, Rarity.RARE, mage.cards.s.SageEyeAvengers.class)); cards.add(new SetCardInfo("Saheeli's Artistry", 62207, Rarity.RARE, mage.cards.s.SaheelisArtistry.class)); @@ -2325,7 +2326,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Savior of Ollenbock", 95275, Rarity.MYTHIC, mage.cards.s.SaviorOfOllenbock.class)); cards.add(new SetCardInfo("Scalding Tarn", 91401, Rarity.RARE, mage.cards.s.ScaldingTarn.class)); cards.add(new SetCardInfo("Scale Up", 91319, Rarity.RARE, mage.cards.s.ScaleUp.class)); - cards.add(new SetCardInfo("Scaleguard Sentinels", 55882, Rarity.UNCOMMON, mage.cards.s.ScaleguardSentinels.class, FULL_ART)); + cards.add(new SetCardInfo("Scaleguard Sentinels", 55882, Rarity.UNCOMMON, mage.cards.s.ScaleguardSentinels.class)); cards.add(new SetCardInfo("Scapeshift", 66898, Rarity.MYTHIC, mage.cards.s.Scapeshift.class)); cards.add(new SetCardInfo("Scavenged Brawler", 105838, Rarity.RARE, mage.cards.s.ScavengedBrawler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Scavenged Brawler", 105842, Rarity.RARE, mage.cards.s.ScavengedBrawler.class, NON_FULL_USE_VARIOUS)); @@ -2379,7 +2380,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Serendib Efreet", 217, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); cards.add(new SetCardInfo("Serra Angel", 35942, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); cards.add(new SetCardInfo("Serra Avatar", 26984, Rarity.RARE, mage.cards.s.SerraAvatar.class)); - cards.add(new SetCardInfo("Serra Avenger", 36314, Rarity.RARE, mage.cards.s.SerraAvenger.class, FULL_ART)); + cards.add(new SetCardInfo("Serra Avenger", 36314, Rarity.RARE, mage.cards.s.SerraAvenger.class)); cards.add(new SetCardInfo("Serra Paragon", 103382, Rarity.MYTHIC, mage.cards.s.SerraParagon.class)); cards.add(new SetCardInfo("Serra Redeemer", 103386, Rarity.RARE, mage.cards.s.SerraRedeemer.class)); cards.add(new SetCardInfo("Serrated Arrows", 35116, Rarity.UNCOMMON, mage.cards.s.SerratedArrows.class)); @@ -2451,7 +2452,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Silverback Elder", 103452, Rarity.MYTHIC, mage.cards.s.SilverbackElder.class)); cards.add(new SetCardInfo("Silverblade Paladin", 44313, Rarity.RARE, mage.cards.s.SilverbladePaladin.class)); cards.add(new SetCardInfo("Silverflame Squire", 78834, Rarity.COMMON, mage.cards.s.SilverflameSquire.class)); - cards.add(new SetCardInfo("Silvergill Adept", 66892, Rarity.UNCOMMON, mage.cards.s.SilvergillAdept.class, FULL_ART)); + cards.add(new SetCardInfo("Silvergill Adept", 66892, Rarity.UNCOMMON, mage.cards.s.SilvergillAdept.class)); cards.add(new SetCardInfo("Silverquill Command", 90184, Rarity.RARE, mage.cards.s.SilverquillCommand.class)); cards.add(new SetCardInfo("Silverquill Silencer", 90178, Rarity.RARE, mage.cards.s.SilverquillSilencer.class)); cards.add(new SetCardInfo("Simian Simulacrum", 105758, Rarity.RARE, mage.cards.s.SimianSimulacrum.class)); @@ -2559,28 +2560,28 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Sprouting Thrinax", 31451, Rarity.UNCOMMON, mage.cards.s.SproutingThrinax.class)); cards.add(new SetCardInfo("Squad Commander", 83804, Rarity.RARE, mage.cards.s.SquadCommander.class)); cards.add(new SetCardInfo("Squadron Hawk", 39675, Rarity.COMMON, mage.cards.s.SquadronHawk.class)); - cards.add(new SetCardInfo("Squelching Leeches", 52330, Rarity.UNCOMMON, mage.cards.s.SquelchingLeeches.class, FULL_ART)); + cards.add(new SetCardInfo("Squelching Leeches", 52330, Rarity.UNCOMMON, mage.cards.s.SquelchingLeeches.class)); cards.add(new SetCardInfo("Staff of Domination", 86080, Rarity.RARE, mage.cards.s.StaffOfDomination.class)); cards.add(new SetCardInfo("Staff of Nin", 45213, Rarity.RARE, mage.cards.s.StaffOfNin.class)); cards.add(new SetCardInfo("Staff of Titania", 105856, Rarity.RARE, mage.cards.s.StaffOfTitania.class)); - cards.add(new SetCardInfo("Staggershock", 36851, Rarity.COMMON, mage.cards.s.Staggershock.class, FULL_ART)); + cards.add(new SetCardInfo("Staggershock", 36851, Rarity.COMMON, mage.cards.s.Staggershock.class)); //cards.add(new SetCardInfo("Stairs to Infinity", 44350, Rarity.RARE, mage.cards.s.StairsToInfinity.class)); cards.add(new SetCardInfo("Stalwart Pathlighter", 93896, Rarity.RARE, mage.cards.s.StalwartPathlighter.class)); cards.add(new SetCardInfo("Starnheim Unleashed", 88198, Rarity.MYTHIC, mage.cards.s.StarnheimUnleashed.class)); - cards.add(new SetCardInfo("Stasis Snare", 58275, Rarity.UNCOMMON, mage.cards.s.StasisSnare.class, FULL_ART)); + cards.add(new SetCardInfo("Stasis Snare", 58275, Rarity.UNCOMMON, mage.cards.s.StasisSnare.class)); cards.add(new SetCardInfo("Stasis", 65648, Rarity.RARE, mage.cards.s.Stasis.class)); cards.add(new SetCardInfo("Staunch Defenders", 36064, Rarity.UNCOMMON, mage.cards.s.StaunchDefenders.class)); cards.add(new SetCardInfo("Stealer of Secrets", 52310, Rarity.COMMON, mage.cards.s.StealerOfSecrets.class)); - cards.add(new SetCardInfo("Steam Vents", 72307, Rarity.RARE, mage.cards.s.SteamVents.class, FULL_ART)); + cards.add(new SetCardInfo("Steam Vents", 72307, Rarity.RARE, mage.cards.s.SteamVents.class)); cards.add(new SetCardInfo("Steel Hellkite", 37859, Rarity.RARE, mage.cards.s.SteelHellkite.class)); - cards.add(new SetCardInfo("Steel Leaf Champion", 68045, Rarity.RARE, mage.cards.s.SteelLeafChampion.class, FULL_ART)); + cards.add(new SetCardInfo("Steel Leaf Champion", 68045, Rarity.RARE, mage.cards.s.SteelLeafChampion.class)); cards.add(new SetCardInfo("Steel Seraph", 105620, Rarity.RARE, mage.cards.s.SteelSeraph.class)); cards.add(new SetCardInfo("Stensia Uprising", 95385, Rarity.RARE, mage.cards.s.StensiaUprising.class)); cards.add(new SetCardInfo("Sterling Grove", 62467, Rarity.UNCOMMON, mage.cards.s.SterlingGrove.class)); cards.add(new SetCardInfo("Stifle", 43540, Rarity.RARE, mage.cards.s.Stifle.class)); cards.add(new SetCardInfo("Stinging Study", 90070, Rarity.RARE, mage.cards.s.StingingStudy.class)); cards.add(new SetCardInfo("Stoke the Flames", 54553, Rarity.UNCOMMON, mage.cards.s.StokeTheFlames.class)); - cards.add(new SetCardInfo("Stomping Ground", 72313, Rarity.RARE, mage.cards.s.StompingGround.class, FULL_ART)); + cards.add(new SetCardInfo("Stomping Ground", 72313, Rarity.RARE, mage.cards.s.StompingGround.class)); cards.add(new SetCardInfo("Stone Haven Outfitter", 62495, Rarity.RARE, mage.cards.s.StoneHavenOutfitter.class)); cards.add(new SetCardInfo("Stone Rain", 35946, Rarity.COMMON, mage.cards.s.StoneRain.class)); cards.add(new SetCardInfo("Stone-Tongue Basilisk", 36238, Rarity.RARE, mage.cards.s.StoneTongueBasilisk.class)); @@ -2594,7 +2595,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Storm's Wrath", 79929, Rarity.RARE, mage.cards.s.StormsWrath.class)); cards.add(new SetCardInfo("Stormcarved Coast", 95455, Rarity.RARE, mage.cards.s.StormcarvedCoast.class)); cards.add(new SetCardInfo("Stormwing Entity", 81944, Rarity.RARE, mage.cards.s.StormwingEntity.class)); - cards.add(new SetCardInfo("Strangleroot Geist", 43513, Rarity.UNCOMMON, mage.cards.s.StranglerootGeist.class, FULL_ART)); + cards.add(new SetCardInfo("Strangleroot Geist", 43513, Rarity.UNCOMMON, mage.cards.s.StranglerootGeist.class)); cards.add(new SetCardInfo("Strict Proctor", 89978, Rarity.RARE, mage.cards.s.StrictProctor.class)); cards.add(new SetCardInfo("Strionic Resonator", 95467, Rarity.RARE, mage.cards.s.StrionicResonator.class)); cards.add(new SetCardInfo("Strixhaven Stadium", 90326, Rarity.RARE, mage.cards.s.StrixhavenStadium.class)); @@ -2617,7 +2618,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Sungold Sentinel", 93892, Rarity.RARE, mage.cards.s.SungoldSentinel.class)); cards.add(new SetCardInfo("Sunscorch Regent", 55896, Rarity.RARE, mage.cards.s.SunscorchRegent.class)); cards.add(new SetCardInfo("Sunstreak Phoenix", 93996, Rarity.MYTHIC, mage.cards.s.SunstreakPhoenix.class)); - cards.add(new SetCardInfo("Supplant Form", 55723, Rarity.RARE, mage.cards.s.SupplantForm.class, FULL_ART)); + cards.add(new SetCardInfo("Supplant Form", 55723, Rarity.RARE, mage.cards.s.SupplantForm.class)); cards.add(new SetCardInfo("Supreme Verdict", 102299, Rarity.RARE, mage.cards.s.SupremeVerdict.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Supreme Verdict", 46879, Rarity.RARE, mage.cards.s.SupremeVerdict.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Surge Engine", 105674, Rarity.MYTHIC, mage.cards.s.SurgeEngine.class, NON_FULL_USE_VARIOUS)); @@ -2649,7 +2650,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Swamp", 40058, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 40068, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 40092, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 53883, Rarity.LAND, mage.cards.basiclands.Swamp.class, FULL_ART_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 53883, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 58257, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 73632, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swamp", 81856, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); @@ -2724,8 +2725,8 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Teferi, Who Slows the Sunset", 94050, Rarity.MYTHIC, mage.cards.t.TeferiWhoSlowsTheSunset.class)); cards.add(new SetCardInfo("Teleportation Circle", 92644, Rarity.RARE, mage.cards.t.TeleportationCircle.class)); //cards.add(new SetCardInfo("Tember City", 44342, Rarity.RARE, mage.cards.t.TemberCity.class)); - cards.add(new SetCardInfo("Tempered Steel", 37865, Rarity.RARE, mage.cards.t.TemperedSteel.class, FULL_ART)); - cards.add(new SetCardInfo("Temple Garden", 72303, Rarity.RARE, mage.cards.t.TempleGarden.class, FULL_ART)); + cards.add(new SetCardInfo("Tempered Steel", 37865, Rarity.RARE, mage.cards.t.TemperedSteel.class)); + cards.add(new SetCardInfo("Temple Garden", 72303, Rarity.RARE, mage.cards.t.TempleGarden.class)); cards.add(new SetCardInfo("Temple of Abandon", 79877, Rarity.RARE, mage.cards.t.TempleOfAbandon.class)); cards.add(new SetCardInfo("Temple of Deceit", 79873, Rarity.RARE, mage.cards.t.TempleOfDeceit.class)); cards.add(new SetCardInfo("Temple of Enlightenment", 79871, Rarity.RARE, mage.cards.t.TempleOfEnlightenment.class)); @@ -2826,7 +2827,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Throne of Makindi", 83782, Rarity.RARE, mage.cards.t.ThroneOfMakindi.class)); cards.add(new SetCardInfo("Thryx, the Sudden Storm", 79883, Rarity.RARE, mage.cards.t.ThryxTheSuddenStorm.class)); cards.add(new SetCardInfo("Thunder Spirit", 229, Rarity.UNCOMMON, mage.cards.t.ThunderSpirit.class)); - cards.add(new SetCardInfo("Thunderbreak Regent", 55892, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class, FULL_ART)); + cards.add(new SetCardInfo("Thunderbreak Regent", 55892, Rarity.RARE, mage.cards.t.ThunderbreakRegent.class)); cards.add(new SetCardInfo("Thundering Mightmare", 95413, Rarity.RARE, mage.cards.t.ThunderingMightmare.class)); cards.add(new SetCardInfo("Thundering Raiju", 97997, Rarity.RARE, mage.cards.t.ThunderingRaiju.class)); cards.add(new SetCardInfo("Tiamat", 92786, Rarity.MYTHIC, mage.cards.t.Tiamat.class)); @@ -2838,7 +2839,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Time Spiral", 62221, Rarity.RARE, mage.cards.t.TimeSpiral.class)); cards.add(new SetCardInfo("Time Walk", 46912, Rarity.RARE, mage.cards.t.TimeWalk.class)); cards.add(new SetCardInfo("Time Warp", 36044, Rarity.RARE, mage.cards.t.TimeWarp.class)); - cards.add(new SetCardInfo("Time Wipe", 72219, Rarity.RARE, mage.cards.t.TimeWipe.class, FULL_ART)); + cards.add(new SetCardInfo("Time Wipe", 72219, Rarity.RARE, mage.cards.t.TimeWipe.class)); cards.add(new SetCardInfo("Timeless Dragon", 91215, Rarity.RARE, mage.cards.t.TimelessDragon.class)); cards.add(new SetCardInfo("Timetwister", 46918, Rarity.RARE, mage.cards.t.Timetwister.class)); cards.add(new SetCardInfo("Timin, Youthful Geist", 95311, Rarity.RARE, mage.cards.t.TiminYouthfulGeist.class)); @@ -2876,7 +2877,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Treasure Chest", 92834, Rarity.RARE, mage.cards.t.TreasureChest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Treasure Chest", 92836, Rarity.RARE, mage.cards.t.TreasureChest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Treasure Hunt", 39632, Rarity.COMMON, mage.cards.t.TreasureHunt.class, FULL_ART)); - cards.add(new SetCardInfo("Treasure Mage", 39642, Rarity.UNCOMMON, mage.cards.t.TreasureMage.class, FULL_ART)); + cards.add(new SetCardInfo("Treasure Mage", 39642, Rarity.UNCOMMON, mage.cards.t.TreasureMage.class)); cards.add(new SetCardInfo("Treasury Thrull", 47999, Rarity.RARE, mage.cards.t.TreasuryThrull.class)); cards.add(new SetCardInfo("Treetop Village", 31403, Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); cards.add(new SetCardInfo("Treva, the Renewer", 36158, Rarity.RARE, mage.cards.t.TrevaTheRenewer.class)); @@ -2889,14 +2890,14 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Triumphant Adventurer", 92808, Rarity.RARE, mage.cards.t.TriumphantAdventurer.class)); cards.add(new SetCardInfo("Triumphant Reckoning", 86066, Rarity.MYTHIC, mage.cards.t.TriumphantReckoning.class)); cards.add(new SetCardInfo("Tromokratis", 51914, Rarity.RARE, mage.cards.t.Tromokratis.class)); - cards.add(new SetCardInfo("Trophy Mage", 63003, Rarity.UNCOMMON, mage.cards.t.TrophyMage.class, FULL_ART)); + cards.add(new SetCardInfo("Trophy Mage", 63003, Rarity.UNCOMMON, mage.cards.t.TrophyMage.class)); cards.add(new SetCardInfo("Tropical Island", 43620, Rarity.RARE, mage.cards.t.TropicalIsland.class)); - cards.add(new SetCardInfo("Trostani's Summoner", 48574, Rarity.UNCOMMON, mage.cards.t.TrostanisSummoner.class, FULL_ART)); + cards.add(new SetCardInfo("Trostani's Summoner", 48574, Rarity.UNCOMMON, mage.cards.t.TrostanisSummoner.class)); cards.add(new SetCardInfo("Trudge Garden", 90152, Rarity.RARE, mage.cards.t.TrudgeGarden.class)); cards.add(new SetCardInfo("True Conviction", 77951, Rarity.RARE, mage.cards.t.TrueConviction.class)); cards.add(new SetCardInfo("True Polymorph", 92684, Rarity.RARE, mage.cards.t.TruePolymorph.class)); cards.add(new SetCardInfo("True-Name Nemesis", 69268, Rarity.RARE, mage.cards.t.TrueNameNemesis.class)); - cards.add(new SetCardInfo("Trueheart Duelist", 64424, Rarity.UNCOMMON, mage.cards.t.TrueheartDuelist.class, FULL_ART)); + cards.add(new SetCardInfo("Trueheart Duelist", 64424, Rarity.UNCOMMON, mage.cards.t.TrueheartDuelist.class)); cards.add(new SetCardInfo("Trumpeting Gnarr", 80971, Rarity.UNCOMMON, mage.cards.t.TrumpetingGnarr.class)); cards.add(new SetCardInfo("Tuinvale Treefolk", 78818, Rarity.COMMON, mage.cards.t.TuinvaleTreefolk.class)); cards.add(new SetCardInfo("Tundra Fumarole", 88318, Rarity.RARE, mage.cards.t.TundraFumarole.class)); @@ -2943,11 +2944,11 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Unmarked Grave", 91263, Rarity.RARE, mage.cards.u.UnmarkedGrave.class)); cards.add(new SetCardInfo("Unnatural Growth", 94038, Rarity.RARE, mage.cards.u.UnnaturalGrowth.class)); cards.add(new SetCardInfo("Unpredictable Cyclone", 80885, Rarity.RARE, mage.cards.u.UnpredictableCyclone.class)); - cards.add(new SetCardInfo("Unsubstantiate", 61557, Rarity.RARE, mage.cards.u.Unsubstantiate.class, FULL_ART)); + cards.add(new SetCardInfo("Unsubstantiate", 61557, Rarity.RARE, mage.cards.u.Unsubstantiate.class)); cards.add(new SetCardInfo("Urborg Lhurgoyf", 103454, Rarity.RARE, mage.cards.u.UrborgLhurgoyf.class)); cards.add(new SetCardInfo("Uro, Titan of Nature's Wrath", 79961, Rarity.MYTHIC, mage.cards.u.UroTitanOfNaturesWrath.class)); cards.add(new SetCardInfo("Urza's Command", 105670, Rarity.RARE, mage.cards.u.UrzasCommand.class)); - cards.add(new SetCardInfo("Urza's Factory", 31493, Rarity.UNCOMMON, mage.cards.u.UrzasFactory.class, FULL_ART)); + cards.add(new SetCardInfo("Urza's Factory", 31493, Rarity.UNCOMMON, mage.cards.u.UrzasFactory.class)); cards.add(new SetCardInfo("Urza's Mine", 69262, Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Urza's Mine", 82810, Rarity.RARE, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Urza's Power Plant", 69264, Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); @@ -2960,7 +2961,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Urza, Chief Artificer", 105800, Rarity.MYTHIC, mage.cards.u.UrzaChiefArtificer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Urza, Lord High Artificer", 91229, Rarity.RARE, mage.cards.u.UrzaLordHighArtificer.class)); cards.add(new SetCardInfo("Urza, Prince of Kroog", 105776, Rarity.RARE, mage.cards.u.UrzaPrinceOfKroog.class)); - cards.add(new SetCardInfo("Utter End", 54563, Rarity.RARE, mage.cards.u.UtterEnd.class, FULL_ART)); + cards.add(new SetCardInfo("Utter End", 54563, Rarity.RARE, mage.cards.u.UtterEnd.class)); cards.add(new SetCardInfo("Uvilda, Dean of Perfection", 90252, Rarity.RARE, mage.cards.u.UvildaDeanOfPerfection.class)); cards.add(new SetCardInfo("Vadrok, Apex of Thunder", 80907, Rarity.MYTHIC, mage.cards.v.VadrokApexOfThunder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vadrok, Apex of Thunder", 80985, Rarity.MYTHIC, mage.cards.v.VadrokApexOfThunder.class, NON_FULL_USE_VARIOUS)); @@ -3014,7 +3015,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Void Beckoner", 80923, Rarity.UNCOMMON, mage.cards.v.VoidBeckoner.class)); cards.add(new SetCardInfo("Void Mirror", 91377, Rarity.RARE, mage.cards.v.VoidMirror.class)); cards.add(new SetCardInfo("Voidmage Prodigy", 43646, Rarity.RARE, mage.cards.v.VoidmageProdigy.class)); - cards.add(new SetCardInfo("Voidslime", 36310, Rarity.RARE, mage.cards.v.Voidslime.class, FULL_ART)); + cards.add(new SetCardInfo("Voidslime", 36310, Rarity.RARE, mage.cards.v.Voidslime.class)); cards.add(new SetCardInfo("Volatile Arsonist", 95397, Rarity.MYTHIC, mage.cards.v.VolatileArsonist.class)); cards.add(new SetCardInfo("Volcanic Fallout", 43570, Rarity.UNCOMMON, mage.cards.v.VolcanicFallout.class, FULL_ART)); cards.add(new SetCardInfo("Volcanic Geyser", 36004, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); @@ -3032,7 +3033,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Vulpikeet", 80973, Rarity.COMMON, mage.cards.v.Vulpikeet.class)); cards.add(new SetCardInfo("Wake the Past", 90218, Rarity.RARE, mage.cards.w.WakeThePast.class)); cards.add(new SetCardInfo("Wake to Slaughter", 94068, Rarity.RARE, mage.cards.w.WakeToSlaughter.class)); - cards.add(new SetCardInfo("Walk the Plank", 65666, Rarity.UNCOMMON, mage.cards.w.WalkThePlank.class, FULL_ART)); + cards.add(new SetCardInfo("Walk the Plank", 65666, Rarity.UNCOMMON, mage.cards.w.WalkThePlank.class)); cards.add(new SetCardInfo("Walking Ballista", 69991, Rarity.RARE, mage.cards.w.WalkingBallista.class)); cards.add(new SetCardInfo("Wall of Blossoms", 36084, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); cards.add(new SetCardInfo("Wall of Mourning", 93894, Rarity.RARE, mage.cards.w.WallOfMourning.class)); @@ -3048,7 +3049,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Wasteland", 55874, Rarity.UNCOMMON, mage.cards.w.Wasteland.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Watcher of the Roost", 55773, Rarity.UNCOMMON, mage.cards.w.WatcherOfTheRoost.class)); cards.add(new SetCardInfo("Watchwolf", 36196, Rarity.UNCOMMON, mage.cards.w.Watchwolf.class)); - cards.add(new SetCardInfo("Watery Grave", 72299, Rarity.RARE, mage.cards.w.WateryGrave.class, FULL_ART)); + cards.add(new SetCardInfo("Watery Grave", 72299, Rarity.RARE, mage.cards.w.WateryGrave.class)); cards.add(new SetCardInfo("Wave of Reckoning", 62515, Rarity.RARE, mage.cards.w.WaveOfReckoning.class)); cards.add(new SetCardInfo("Wavebreak Hippocamp", 79951, Rarity.RARE, mage.cards.w.WavebreakHippocamp.class)); cards.add(new SetCardInfo("Wayward Guide-Beast", 83796, Rarity.RARE, mage.cards.w.WaywardGuideBeast.class)); @@ -3127,7 +3128,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Xathrid Gorgon", 45205, Rarity.RARE, mage.cards.x.XathridGorgon.class)); cards.add(new SetCardInfo("Xathrid Necromancer", 52312, Rarity.RARE, mage.cards.x.XathridNecromancer.class)); cards.add(new SetCardInfo("Xenagos, God of Revels", 86204, Rarity.MYTHIC, mage.cards.x.XenagosGodOfRevels.class)); - cards.add(new SetCardInfo("Yahenni's Expertise", 62989, Rarity.RARE, mage.cards.y.YahennisExpertise.class, FULL_ART)); + cards.add(new SetCardInfo("Yahenni's Expertise", 62989, Rarity.RARE, mage.cards.y.YahennisExpertise.class)); cards.add(new SetCardInfo("Yasharn, Implacable Earth", 83818, Rarity.RARE, mage.cards.y.YasharnImplacableEarth.class)); cards.add(new SetCardInfo("Yavimaya Coast", 103486, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); cards.add(new SetCardInfo("Yavimaya, Cradle of Growth", 91409, Rarity.RARE, mage.cards.y.YavimayaCradleOfGrowth.class)); @@ -3149,7 +3150,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Zagoth Triome", 80947, Rarity.RARE, mage.cards.z.ZagothTriome.class)); cards.add(new SetCardInfo("Zagras, Thief of Heartbeats", 83816, Rarity.RARE, mage.cards.z.ZagrasThiefOfHeartbeats.class)); cards.add(new SetCardInfo("Zahid, Djinn of the Lamp", 68041, Rarity.RARE, mage.cards.z.ZahidDjinnOfTheLamp.class)); - cards.add(new SetCardInfo("Zameck Guildmage", 47987, Rarity.UNCOMMON, mage.cards.z.ZameckGuildmage.class, FULL_ART)); + cards.add(new SetCardInfo("Zameck Guildmage", 47987, Rarity.UNCOMMON, mage.cards.z.ZameckGuildmage.class)); cards.add(new SetCardInfo("Zara, Renegade Recruiter", 86264, Rarity.RARE, mage.cards.z.ZaraRenegadeRecruiter.class)); cards.add(new SetCardInfo("Zareth San, the Trickster", 83810, Rarity.RARE, mage.cards.z.ZarethSanTheTrickster.class)); cards.add(new SetCardInfo("Zariel, Archduke of Avernus", 92726, Rarity.MYTHIC, mage.cards.z.ZarielArchdukeOfAvernus.class)); @@ -3169,7 +3170,7 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Zodiac Snake", 35096, Rarity.COMMON, mage.cards.z.ZodiacSnake.class)); cards.add(new SetCardInfo("Zodiac Tiger", 35088, Rarity.UNCOMMON, mage.cards.z.ZodiacTiger.class)); cards.add(new SetCardInfo("Zoetic Cavern", 36066, Rarity.UNCOMMON, mage.cards.z.ZoeticCavern.class)); - cards.add(new SetCardInfo("Zombie Apocalypse", 43515, Rarity.RARE, mage.cards.z.ZombieApocalypse.class, FULL_ART)); + cards.add(new SetCardInfo("Zombie Apocalypse", 43515, Rarity.RARE, mage.cards.z.ZombieApocalypse.class)); cards.add(new SetCardInfo("Zombify", 35170, Rarity.UNCOMMON, mage.cards.z.Zombify.class, FULL_ART)); cards.add(new SetCardInfo("Zur the Enchanter", 86196, Rarity.MYTHIC, mage.cards.z.ZurTheEnchanter.class)); cards.add(new SetCardInfo("Zuran Orb", 225, Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class)); diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index ea3a4d8acb1..27275f9d65a 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -674,6 +674,7 @@ public class VerifyCardDataTest { // CHECK: only lands can use full art in current version; // Another cards must be in text render mode as normal, example: https://scryfall.com/card/sld/76/athreos-god-of-passage + // TODO: add support textless cards like https://scryfall.com/card/sch/12/thalia-and-the-gitrog-monster boolean isLand = card.getRarity().equals(Rarity.LAND); if (card.isFullArt() && !isLand) { errorsList.add("Error: only lands can use full art setting: " @@ -963,7 +964,7 @@ public class VerifyCardDataTest { } } - // CHECK: wrong set name + // CHECK: unknown set or wrong name for (ExpansionSet set : sets) { if (set.getSetType().equals(SetType.CUSTOM_SET)) { // skip unofficial sets like Star Wars @@ -989,6 +990,7 @@ public class VerifyCardDataTest { } // CHECK: parent and block info + // TODO: it's UX problem, see https://github.com/magefree/mage/issues/10184 for (ExpansionSet set : sets) { if (true) { continue; // TODO: comments it and run to find a problems -- 2.47.2 From 293ddd7016e7592bdb06c8894bb6c4c9ff997062 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 11:49:25 -0500 Subject: [PATCH 03/51] [DFT] rework max speed ability --- Mage.Sets/src/mage/cards/a/AetherSyphon.java | 7 +- .../src/mage/cards/a/AmonkhetRaceway.java | 9 ++- .../src/mage/cards/a/AvishkarRaceway.java | 9 ++- .../src/mage/cards/b/BurnoutBashtronaut.java | 5 +- .../src/mage/cards/e/EmbalmedAscendant.java | 5 +- .../src/mage/cards/e/EndriderCatalyzer.java | 7 +- .../src/mage/cards/m/MuragandaRaceway.java | 7 +- Mage.Sets/src/mage/cards/n/NestingBot.java | 5 +- .../src/mage/cards/r/RisenNecroregent.java | 7 +- .../src/mage/cards/s/StartingColumn.java | 5 +- .../src/mage/cards/s/StreakingOilgorger.java | 7 +- .../abilities/common/MaxSpeedAbility.java | 78 +++++++++++++++++++ .../continuous/MaxSpeedGainAbilityEffect.java | 56 ------------- 13 files changed, 111 insertions(+), 96 deletions(-) create mode 100644 Mage/src/main/java/mage/abilities/common/MaxSpeedAbility.java delete mode 100644 Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java diff --git a/Mage.Sets/src/mage/cards/a/AetherSyphon.java b/Mage.Sets/src/mage/cards/a/AetherSyphon.java index 4d78ddd15bc..356094863d4 100644 --- a/Mage.Sets/src/mage/cards/a/AetherSyphon.java +++ b/Mage.Sets/src/mage/cards/a/AetherSyphon.java @@ -2,13 +2,12 @@ package mage.cards.a; import mage.abilities.Ability; import mage.abilities.common.DrawCardControllerTriggeredAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.MillCardsEachPlayerEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -34,9 +33,9 @@ public final class AetherSyphon extends CardImpl { this.addAbility(ability); // Max speed -- Whenever you draw a card, each opponent mills two cards. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new DrawCardControllerTriggeredAbility( + this.addAbility(new MaxSpeedAbility(new DrawCardControllerTriggeredAbility( new MillCardsEachPlayerEffect(2, TargetController.OPPONENT), false - )))); + ))); } private AetherSyphon(final AetherSyphon card) { diff --git a/Mage.Sets/src/mage/cards/a/AmonkhetRaceway.java b/Mage.Sets/src/mage/cards/a/AmonkhetRaceway.java index b76723038d3..b11ee0ad02f 100644 --- a/Mage.Sets/src/mage/cards/a/AmonkhetRaceway.java +++ b/Mage.Sets/src/mage/cards/a/AmonkhetRaceway.java @@ -1,11 +1,10 @@ package mage.cards.a; import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.StartYourEnginesAbility; import mage.abilities.mana.ColorlessManaAbility; @@ -31,9 +30,11 @@ public final class AmonkhetRaceway extends CardImpl { this.addAbility(new ColorlessManaAbility()); // Max speed -- {T}: Target creature gains haste until end of turn. - Ability ability = new SimpleActivatedAbility(new GainAbilityTargetEffect(HasteAbility.getInstance()), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility( + new GainAbilityTargetEffect(HasteAbility.getInstance()), new TapSourceCost() + ); ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability))); + this.addAbility(new MaxSpeedAbility(ability)); } private AmonkhetRaceway(final AmonkhetRaceway card) { diff --git a/Mage.Sets/src/mage/cards/a/AvishkarRaceway.java b/Mage.Sets/src/mage/cards/a/AvishkarRaceway.java index 8c2fa8b47a8..e6b2103a930 100644 --- a/Mage.Sets/src/mage/cards/a/AvishkarRaceway.java +++ b/Mage.Sets/src/mage/cards/a/AvishkarRaceway.java @@ -1,13 +1,12 @@ package mage.cards.a; import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; @@ -31,10 +30,12 @@ public final class AvishkarRaceway extends CardImpl { this.addAbility(new ColorlessManaAbility()); // Max speed -- {3}, {T}, Discard a card: Draw a card. - Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new GenericManaCost(3)); + Ability ability = new SimpleActivatedAbility( + new DrawCardSourceControllerEffect(1), new GenericManaCost(3) + ); ability.addCost(new TapSourceCost()); ability.addCost(new DiscardCardCost()); - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability))); + this.addAbility(new MaxSpeedAbility(ability)); } private AvishkarRaceway(final AvishkarRaceway card) { diff --git a/Mage.Sets/src/mage/cards/b/BurnoutBashtronaut.java b/Mage.Sets/src/mage/cards/b/BurnoutBashtronaut.java index 651db271673..3ca6df0dbec 100644 --- a/Mage.Sets/src/mage/cards/b/BurnoutBashtronaut.java +++ b/Mage.Sets/src/mage/cards/b/BurnoutBashtronaut.java @@ -1,12 +1,11 @@ package mage.cards.b; import mage.MageInt; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.DoubleStrikeAbility; import mage.abilities.keyword.MenaceAbility; import mage.abilities.keyword.StartYourEnginesAbility; @@ -43,7 +42,7 @@ public final class BurnoutBashtronaut extends CardImpl { )); // Max speed -- This creature has double strike. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance())))); + this.addAbility(new MaxSpeedAbility(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance()))); } private BurnoutBashtronaut(final BurnoutBashtronaut card) { diff --git a/Mage.Sets/src/mage/cards/e/EmbalmedAscendant.java b/Mage.Sets/src/mage/cards/e/EmbalmedAscendant.java index 78e25217f23..8a7658d4334 100644 --- a/Mage.Sets/src/mage/cards/e/EmbalmedAscendant.java +++ b/Mage.Sets/src/mage/cards/e/EmbalmedAscendant.java @@ -4,11 +4,10 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeOpponentsEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -43,7 +42,7 @@ public final class EmbalmedAscendant extends CardImpl { StaticFilters.FILTER_CONTROLLED_A_CREATURE ); ability.addEffect(new GainLifeEffect(1).concatBy("and")); - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability))); + this.addAbility(new MaxSpeedAbility(ability)); } private EmbalmedAscendant(final EmbalmedAscendant card) { diff --git a/Mage.Sets/src/mage/cards/e/EndriderCatalyzer.java b/Mage.Sets/src/mage/cards/e/EndriderCatalyzer.java index 14f09dd782c..d183da2f11b 100644 --- a/Mage.Sets/src/mage/cards/e/EndriderCatalyzer.java +++ b/Mage.Sets/src/mage/cards/e/EndriderCatalyzer.java @@ -2,9 +2,8 @@ package mage.cards.e; import mage.MageInt; import mage.Mana; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.abilities.mana.SimpleManaAbility; import mage.cards.CardImpl; @@ -32,8 +31,8 @@ public final class EndriderCatalyzer extends CardImpl { this.addAbility(new StartYourEnginesAbility()); // Max speed -- {T}: Add {R}{R}. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect( - new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana(2), new TapSourceCost()) + this.addAbility(new MaxSpeedAbility(new SimpleManaAbility( + Zone.BATTLEFIELD, Mana.GreenMana(2), new TapSourceCost() ))); } diff --git a/Mage.Sets/src/mage/cards/m/MuragandaRaceway.java b/Mage.Sets/src/mage/cards/m/MuragandaRaceway.java index fd67dabe4c8..ce5e9121945 100644 --- a/Mage.Sets/src/mage/cards/m/MuragandaRaceway.java +++ b/Mage.Sets/src/mage/cards/m/MuragandaRaceway.java @@ -1,9 +1,8 @@ package mage.cards.m; import mage.Mana; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.SimpleManaAbility; @@ -29,9 +28,9 @@ public final class MuragandaRaceway extends CardImpl { this.addAbility(new ColorlessManaAbility()); // Max speed -- {T}: Add {C}{C}. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect( + this.addAbility(new MaxSpeedAbility( new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(2), new TapSourceCost()) - ))); + )); } private MuragandaRaceway(final MuragandaRaceway card) { diff --git a/Mage.Sets/src/mage/cards/n/NestingBot.java b/Mage.Sets/src/mage/cards/n/NestingBot.java index d119807859c..413ea998968 100644 --- a/Mage.Sets/src/mage/cards/n/NestingBot.java +++ b/Mage.Sets/src/mage/cards/n/NestingBot.java @@ -2,10 +2,9 @@ package mage.cards.n; import mage.MageInt; import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -35,7 +34,7 @@ public final class NestingBot extends CardImpl { this.addAbility(new DiesSourceTriggeredAbility(new CreateTokenEffect(new ServoToken()))); // Max speed -- This creature gets +1/+0. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield)))); + this.addAbility(new MaxSpeedAbility(new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield))); } private NestingBot(final NestingBot card) { diff --git a/Mage.Sets/src/mage/cards/r/RisenNecroregent.java b/Mage.Sets/src/mage/cards/r/RisenNecroregent.java index 4571e36989a..be2cbe2b29b 100644 --- a/Mage.Sets/src/mage/cards/r/RisenNecroregent.java +++ b/Mage.Sets/src/mage/cards/r/RisenNecroregent.java @@ -1,9 +1,8 @@ package mage.cards.r; import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; import mage.cards.CardImpl; @@ -32,9 +31,9 @@ public final class RisenNecroregent extends CardImpl { this.addAbility(new StartYourEnginesAbility()); // Max speed -- At the beginning of your end step, create a 2/2 black Zombie creature token. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect( + this.addAbility(new MaxSpeedAbility( new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new ZombieToken())) - ))); + )); } private RisenNecroregent(final RisenNecroregent card) { diff --git a/Mage.Sets/src/mage/cards/s/StartingColumn.java b/Mage.Sets/src/mage/cards/s/StartingColumn.java index 2532a341cdb..ed80104b641 100644 --- a/Mage.Sets/src/mage/cards/s/StartingColumn.java +++ b/Mage.Sets/src/mage/cards/s/StartingColumn.java @@ -1,12 +1,11 @@ package mage.cards.s; import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DrawDiscardControllerEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.StartYourEnginesAbility; import mage.abilities.mana.AnyColorManaAbility; import mage.cards.CardImpl; @@ -34,7 +33,7 @@ public final class StartingColumn extends CardImpl { new DrawDiscardControllerEffect(2, 1), new TapSourceCost() ); ability.addCost(new SacrificeSourceCost()); - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect(ability))); + this.addAbility(new MaxSpeedAbility(ability)); } private StartingColumn(final StartingColumn card) { diff --git a/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java b/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java index 0f33239fe77..dded791be02 100644 --- a/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java +++ b/Mage.Sets/src/mage/cards/s/StreakingOilgorger.java @@ -1,9 +1,8 @@ package mage.cards.s; import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.MaxSpeedAbility; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.effects.common.continuous.MaxSpeedGainAbilityEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.LifelinkAbility; @@ -38,8 +37,8 @@ public final class StreakingOilgorger extends CardImpl { this.addAbility(new StartYourEnginesAbility()); // Max speed -- This creature has lifelink. - this.addAbility(new SimpleStaticAbility(new MaxSpeedGainAbilityEffect( - new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield) + this.addAbility(new MaxSpeedAbility(new GainAbilitySourceEffect( + LifelinkAbility.getInstance(), Duration.WhileOnBattlefield ))); } diff --git a/Mage/src/main/java/mage/abilities/common/MaxSpeedAbility.java b/Mage/src/main/java/mage/abilities/common/MaxSpeedAbility.java new file mode 100644 index 00000000000..4a66080a057 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/common/MaxSpeedAbility.java @@ -0,0 +1,78 @@ +package mage.abilities.common; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.StaticAbility; +import mage.abilities.dynamicvalue.common.ControllerSpeedCount; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.Effect; +import mage.cards.Card; +import mage.constants.*; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * @author TheElk801 + */ +public class MaxSpeedAbility extends StaticAbility { + + public MaxSpeedAbility(Effect effect) { + this(new SimpleStaticAbility(effect)); + } + + public MaxSpeedAbility(Ability ability) { + super(Zone.ALL, new MaxSpeedAbilityEffect(ability)); + } + + private MaxSpeedAbility(final MaxSpeedAbility ability) { + super(ability); + } + + @Override + public MaxSpeedAbility copy() { + return new MaxSpeedAbility(this); + } +} + +class MaxSpeedAbilityEffect extends ContinuousEffectImpl { + + private final Ability ability; + + MaxSpeedAbilityEffect(Ability ability) { + super(Duration.Custom, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); + this.ability = ability; + } + + private MaxSpeedAbilityEffect(final MaxSpeedAbilityEffect effect) { + super(effect); + this.ability = effect.ability; + } + + @Override + public MaxSpeedAbilityEffect copy() { + return new MaxSpeedAbilityEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (ControllerSpeedCount.instance.calculate(game, source, null) < 4) { + return false; + } + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + permanent.addAbility(ability, source.getSourceId(), game); + return true; + } + Card card = game.getCard(source.getSourceId()); + if (card == null) { + return false; + } + game.getState().addOtherAbility(card, ability); + return true; + } + + @Override + public String getText(Mode mode) { + return "Max speed — " + ability.getRule(); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java deleted file mode 100644 index a0136fad8c3..00000000000 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/MaxSpeedGainAbilityEffect.java +++ /dev/null @@ -1,56 +0,0 @@ -package mage.abilities.effects.common.continuous; - -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.ControllerSpeedCount; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.effects.Effect; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * @author TheElk801 - */ -public class MaxSpeedGainAbilityEffect extends ContinuousEffectImpl { - - private final Ability ability; - - public MaxSpeedGainAbilityEffect(Effect effect) { - this(new SimpleStaticAbility(effect)); - } - - public MaxSpeedGainAbilityEffect(Ability ability) { - super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - this.ability = ability; - } - - private MaxSpeedGainAbilityEffect(final MaxSpeedGainAbilityEffect effect) { - super(effect); - this.ability = effect.ability; - } - - @Override - public MaxSpeedGainAbilityEffect copy() { - return new MaxSpeedGainAbilityEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = source.getSourcePermanentIfItStillExists(game); - if (permanent == null || ControllerSpeedCount.instance.calculate(game, source, null) < 4) { - return false; - } - permanent.addAbility(ability, source.getSourceId(), game); - return true; - } - - @Override - public String getText(Mode mode) { - return "Max speed — " + ability.getRule(); - } -} -- 2.47.2 From 63a36bf2fb649b0cc6186548bee8e2ab9cdf4f07 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 11:51:27 -0500 Subject: [PATCH 04/51] [DFT] Implement Goblin Surveyor --- .../src/mage/cards/g/GoblinSurveyor.java | 55 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 56 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GoblinSurveyor.java diff --git a/Mage.Sets/src/mage/cards/g/GoblinSurveyor.java b/Mage.Sets/src/mage/cards/g/GoblinSurveyor.java new file mode 100644 index 00000000000..01023bafaf9 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GoblinSurveyor.java @@ -0,0 +1,55 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GoblinSurveyor extends CardImpl { + + public GoblinSurveyor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); + + this.subtype.add(SubType.GOBLIN); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- {3}, Exile this card from your graveyard: Draw a card. + Ability ability = new SimpleActivatedAbility( + Zone.GRAVEYARD, new DrawCardSourceControllerEffect(1), new GenericManaCost(3) + ); + ability.addCost(new ExileSourceFromGraveCost()); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private GoblinSurveyor(final GoblinSurveyor card) { + super(card); + } + + @Override + public GoblinSurveyor copy() { + return new GoblinSurveyor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 19f23b6f102..76a0a76bfdb 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -80,6 +80,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Gastal Thrillroller", 129, Rarity.RARE, mage.cards.g.GastalThrillroller.class)); cards.add(new SetCardInfo("Gilded Ghoda", 130, Rarity.COMMON, mage.cards.g.GildedGhoda.class)); cards.add(new SetCardInfo("Gloryheath Lynx", 14, Rarity.UNCOMMON, mage.cards.g.GloryheathLynx.class)); + cards.add(new SetCardInfo("Goblin Surveyor", 131, Rarity.COMMON, mage.cards.g.GoblinSurveyor.class)); cards.add(new SetCardInfo("Greasewrench Goblin", 132, Rarity.UNCOMMON, mage.cards.g.GreasewrenchGoblin.class)); cards.add(new SetCardInfo("Greenbelt Guardian", 164, Rarity.UNCOMMON, mage.cards.g.GreenbeltGuardian.class)); cards.add(new SetCardInfo("Grim Bauble", 88, Rarity.COMMON, mage.cards.g.GrimBauble.class)); -- 2.47.2 From 8cad66e1a60451811ad0d96957f1b5aab2126a5a Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 12:24:10 -0500 Subject: [PATCH 05/51] [DFT] Implement Loxodon Surveyor --- .../src/mage/cards/l/LoxodonSurveyor.java | 51 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 52 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/l/LoxodonSurveyor.java diff --git a/Mage.Sets/src/mage/cards/l/LoxodonSurveyor.java b/Mage.Sets/src/mage/cards/l/LoxodonSurveyor.java new file mode 100644 index 00000000000..944dc9b658e --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LoxodonSurveyor.java @@ -0,0 +1,51 @@ +package mage.cards.l; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class LoxodonSurveyor extends CardImpl { + + public LoxodonSurveyor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + + this.subtype.add(SubType.ELEPHANT); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- {3}, Exile this card from your graveyard: Draw a card. + Ability ability = new SimpleActivatedAbility( + Zone.GRAVEYARD, new DrawCardSourceControllerEffect(1), new GenericManaCost(3) + ); + ability.addCost(new ExileSourceFromGraveCost()); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private LoxodonSurveyor(final LoxodonSurveyor card) { + super(card); + } + + @Override + public LoxodonSurveyor copy() { + return new LoxodonSurveyor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 76a0a76bfdb..912ce46b165 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -97,6 +97,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Lagorin, Soul of Alacria", 211, Rarity.UNCOMMON, mage.cards.l.LagorinSoulOfAlacria.class)); cards.add(new SetCardInfo("Lightning Strike", 136, Rarity.COMMON, mage.cards.l.LightningStrike.class)); cards.add(new SetCardInfo("Lightshield Parry", 19, Rarity.COMMON, mage.cards.l.LightshieldParry.class)); + cards.add(new SetCardInfo("Loxodon Surveyor", 167, Rarity.COMMON, mage.cards.l.LoxodonSurveyor.class)); cards.add(new SetCardInfo("Marketback Walker", 235, Rarity.RARE, mage.cards.m.MarketbackWalker.class)); cards.add(new SetCardInfo("Marshals' Pathcruiser", 236, Rarity.UNCOMMON, mage.cards.m.MarshalsPathcruiser.class)); cards.add(new SetCardInfo("Maximum Overdrive", 96, Rarity.COMMON, mage.cards.m.MaximumOverdrive.class)); -- 2.47.2 From 21ee9f5e89da984ea8e2550e09743863ef1153dc Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 13:48:05 -0500 Subject: [PATCH 06/51] [DFT] Implement Gas Guzzler --- Mage.Sets/src/mage/cards/g/GasGuzzler.java | 67 ++++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 68 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GasGuzzler.java diff --git a/Mage.Sets/src/mage/cards/g/GasGuzzler.java b/Mage.Sets/src/mage/cards/g/GasGuzzler.java new file mode 100644 index 00000000000..76acab61be6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GasGuzzler.java @@ -0,0 +1,67 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AnotherPredicate; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GasGuzzler extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("another creature or Vehicle"); + + static { + filter.add(AnotherPredicate.instance); + filter.add(Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + } + + public GasGuzzler(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); + + this.subtype.add(SubType.VAMPIRE); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // This creature enters tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // Max speed -- {B}, Sacrifice another creature or Vehicle: Draw a card. + Ability ability = new SimpleActivatedAbility( + new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{B}") + ); + ability.addCost(new SacrificeTargetCost(filter)); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private GasGuzzler(final GasGuzzler card) { + super(card); + } + + @Override + public GasGuzzler copy() { + return new GasGuzzler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 912ce46b165..b730a956dbf 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -77,6 +77,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Forest", 289, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Foul Roads", 255, Rarity.UNCOMMON, mage.cards.f.FoulRoads.class)); cards.add(new SetCardInfo("Fuel the Flames", 126, Rarity.UNCOMMON, mage.cards.f.FuelTheFlames.class)); + cards.add(new SetCardInfo("Gas Guzzler", 85, Rarity.RARE, mage.cards.g.GasGuzzler.class)); cards.add(new SetCardInfo("Gastal Thrillroller", 129, Rarity.RARE, mage.cards.g.GastalThrillroller.class)); cards.add(new SetCardInfo("Gilded Ghoda", 130, Rarity.COMMON, mage.cards.g.GildedGhoda.class)); cards.add(new SetCardInfo("Gloryheath Lynx", 14, Rarity.UNCOMMON, mage.cards.g.GloryheathLynx.class)); -- 2.47.2 From 610864ca25155a54e7a9b9c8dbef97c242c89e8b Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 13:51:08 -0500 Subject: [PATCH 07/51] [DFT] Implement Guardian Sunmare --- .../src/mage/cards/g/GuardianSunmare.java | 62 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 63 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GuardianSunmare.java diff --git a/Mage.Sets/src/mage/cards/g/GuardianSunmare.java b/Mage.Sets/src/mage/cards/g/GuardianSunmare.java new file mode 100644 index 00000000000..d50274ff91f --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GuardianSunmare.java @@ -0,0 +1,62 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.common.AttacksWhileSaddledTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.keyword.SaddleAbility; +import mage.abilities.keyword.WardAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.common.FilterNonlandCard; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.filter.predicate.mageobject.PermanentPredicate; +import mage.target.common.TargetCardInLibrary; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GuardianSunmare extends CardImpl { + + private static final FilterCard filter = new FilterNonlandCard("nonland permanent card with mana value 3 or less"); + + static { + filter.add(PermanentPredicate.instance); + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4)); + } + + public GuardianSunmare(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); + + this.subtype.add(SubType.HORSE); + this.subtype.add(SubType.MOUNT); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Ward {2} + this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"))); + + // Whenever this creature attacks while saddled, search your library for a nonland permanent card with mana value 3 or less, put it onto the battlefield, then shuffle. + this.addAbility(new AttacksWhileSaddledTriggeredAbility( + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)) + )); + + // Saddle 4 + this.addAbility(new SaddleAbility(4)); + } + + private GuardianSunmare(final GuardianSunmare card) { + super(card); + } + + @Override + public GuardianSunmare copy() { + return new GuardianSunmare(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index b730a956dbf..9b03fc0754d 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -85,6 +85,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Greasewrench Goblin", 132, Rarity.UNCOMMON, mage.cards.g.GreasewrenchGoblin.class)); cards.add(new SetCardInfo("Greenbelt Guardian", 164, Rarity.UNCOMMON, mage.cards.g.GreenbeltGuardian.class)); cards.add(new SetCardInfo("Grim Bauble", 88, Rarity.COMMON, mage.cards.g.GrimBauble.class)); + cards.add(new SetCardInfo("Guardian Sunmare", 15, Rarity.RARE, mage.cards.g.GuardianSunmare.class)); cards.add(new SetCardInfo("Guidelight Pathmaker", 206, Rarity.UNCOMMON, mage.cards.g.GuidelightPathmaker.class)); cards.add(new SetCardInfo("Haunted Hellride", 208, Rarity.UNCOMMON, mage.cards.h.HauntedHellride.class)); cards.add(new SetCardInfo("Hazoret, Godseeker", 133, Rarity.MYTHIC, mage.cards.h.HazoretGodseeker.class)); -- 2.47.2 From ac27572195bbd7b3f36c37a8b2a6fe7df763b4c4 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 13:56:03 -0500 Subject: [PATCH 08/51] [DFT] Implement Pride of the Road --- .../src/mage/cards/p/PrideOfTheRoad.java | 65 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 66 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java diff --git a/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java b/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java new file mode 100644 index 00000000000..3bf89a5212b --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PrideOfTheRoad.java @@ -0,0 +1,65 @@ +package mage.cards.p; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.StartYourEnginesAbility; +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.SubType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.Predicates; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class PrideOfTheRoad extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledPermanent("creature or Vehicle you control"); + + static { + filter.add(Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + } + + public PrideOfTheRoad(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); + + this.subtype.add(SubType.ZOMBIE); + this.subtype.add(SubType.CAT); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(2); + this.toughness = new MageInt(5); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- At the beginning of combat on your turn, target creature or Vehicle you control gains double strike until end of turn. + Ability ability = new BeginningOfCombatTriggeredAbility(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance())); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private PrideOfTheRoad(final PrideOfTheRoad card) { + super(card); + } + + @Override + public PrideOfTheRoad copy() { + return new PrideOfTheRoad(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 9b03fc0754d..37ef4b89481 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -115,6 +115,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Pedal to the Metal", 141, Rarity.COMMON, mage.cards.p.PedalToTheMetal.class)); cards.add(new SetCardInfo("Plains", 272, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Possession Engine", 54, Rarity.RARE, mage.cards.p.PossessionEngine.class)); + cards.add(new SetCardInfo("Pride of the Road", 24, Rarity.UNCOMMON, mage.cards.p.PrideOfTheRoad.class)); cards.add(new SetCardInfo("Prowcatcher Specialist", 142, Rarity.COMMON, mage.cards.p.ProwcatcherSpecialist.class)); cards.add(new SetCardInfo("Pyrewood Gearhulk", 216, Rarity.MYTHIC, mage.cards.p.PyrewoodGearhulk.class)); cards.add(new SetCardInfo("Quag Feast", 100, Rarity.RARE, mage.cards.q.QuagFeast.class)); -- 2.47.2 From 462a4a0b2d9f24fd110b194cfad4ade56cdf68f0 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 13:59:47 -0500 Subject: [PATCH 09/51] [DFT] Implement Racers' Scoreboard --- .../src/mage/cards/r/RacersScoreboard.java | 45 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 46 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RacersScoreboard.java diff --git a/Mage.Sets/src/mage/cards/r/RacersScoreboard.java b/Mage.Sets/src/mage/cards/r/RacersScoreboard.java new file mode 100644 index 00000000000..e1df5714f6a --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RacersScoreboard.java @@ -0,0 +1,45 @@ +package mage.cards.r; + +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.FilterCard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RacersScoreboard extends CardImpl { + + private static final FilterCard filter = new FilterCard("spells"); + + public RacersScoreboard(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // When this artifact enters, draw two cards, then discard a card. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new DrawDiscardControllerEffect(2, 1) + )); + + // Max speed -- Spells you cast cost {1} less to cast. + this.addAbility(new MaxSpeedAbility(new SpellsCostReductionControllerEffect(filter, 1))); + } + + private RacersScoreboard(final RacersScoreboard card) { + super(card); + } + + @Override + public RacersScoreboard copy() { + return new RacersScoreboard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 37ef4b89481..a7fb533a74b 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -119,6 +119,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Prowcatcher Specialist", 142, Rarity.COMMON, mage.cards.p.ProwcatcherSpecialist.class)); cards.add(new SetCardInfo("Pyrewood Gearhulk", 216, Rarity.MYTHIC, mage.cards.p.PyrewoodGearhulk.class)); cards.add(new SetCardInfo("Quag Feast", 100, Rarity.RARE, mage.cards.q.QuagFeast.class)); + cards.add(new SetCardInfo("Racers' Scoreboard", 239, Rarity.UNCOMMON, mage.cards.r.RacersScoreboard.class)); cards.add(new SetCardInfo("Rangers' Refueler", 55, Rarity.UNCOMMON, mage.cards.r.RangersRefueler.class)); cards.add(new SetCardInfo("Reef Roads", 259, Rarity.UNCOMMON, mage.cards.r.ReefRoads.class)); cards.add(new SetCardInfo("Regal Imperiosaur", 177, Rarity.RARE, mage.cards.r.RegalImperiosaur.class)); -- 2.47.2 From 6670ceb2ae8e4eca3f4936ed43061fee3d0fe59a Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 14:04:19 -0500 Subject: [PATCH 10/51] [DFT] Implement Rangers' Aetherhive --- .../src/mage/cards/a/AfterburnerExpert.java | 15 +---- .../src/mage/cards/r/RangersAetherhive.java | 57 +++++++++++++++++++ .../src/mage/cards/r/RangersRefueler.java | 15 +---- Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + .../other/ExhaustAbilityPredicate.java | 18 ++++++ 5 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/r/RangersAetherhive.java create mode 100644 Mage/src/main/java/mage/filter/predicate/other/ExhaustAbilityPredicate.java diff --git a/Mage.Sets/src/mage/cards/a/AfterburnerExpert.java b/Mage.Sets/src/mage/cards/a/AfterburnerExpert.java index f3661eb8189..41b2538d1a5 100644 --- a/Mage.Sets/src/mage/cards/a/AfterburnerExpert.java +++ b/Mage.Sets/src/mage/cards/a/AfterburnerExpert.java @@ -14,9 +14,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.FilterStackObject; -import mage.filter.predicate.Predicate; -import mage.game.Game; -import mage.game.stack.StackObject; +import mage.filter.predicate.other.ExhaustAbilityPredicate; import java.util.UUID; @@ -28,7 +26,7 @@ public final class AfterburnerExpert extends CardImpl { private static final FilterStackObject filter = new FilterStackObject("an exhaust ability"); static { - filter.add(AfterburnerExpertPredicate.instance); + filter.add(ExhaustAbilityPredicate.instance); } public AfterburnerExpert(UUID ownerId, CardSetInfo setInfo) { @@ -59,12 +57,3 @@ public final class AfterburnerExpert extends CardImpl { return new AfterburnerExpert(this); } } - -enum AfterburnerExpertPredicate implements Predicate { - instance; - - @Override - public boolean apply(StackObject input, Game game) { - return input.getStackAbility() instanceof ExhaustAbility; - } -} diff --git a/Mage.Sets/src/mage/cards/r/RangersAetherhive.java b/Mage.Sets/src/mage/cards/r/RangersAetherhive.java new file mode 100644 index 00000000000..569447b66b1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RangersAetherhive.java @@ -0,0 +1,57 @@ +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.common.ActivateAbilityTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SetTargetPointer; +import mage.constants.SubType; +import mage.filter.FilterStackObject; +import mage.filter.predicate.other.ExhaustAbilityPredicate; +import mage.game.permanent.token.ThopterColorlessToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RangersAetherhive extends CardImpl { + + private static final FilterStackObject filter = new FilterStackObject("an exhaust ability"); + + static { + filter.add(ExhaustAbilityPredicate.instance); + } + + public RangersAetherhive(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{G}{U}"); + + this.subtype.add(SubType.VEHICLE); + this.power = new MageInt(3); + this.toughness = new MageInt(5); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Whenever you activate an exhaust ability, create a 1/1 colorless Thopter artifact creature token with flying. + this.addAbility(new ActivateAbilityTriggeredAbility( + new CreateTokenEffect(new ThopterColorlessToken()), filter, SetTargetPointer.NONE + )); + + // Crew 1 + this.addAbility(new CrewAbility(1)); + } + + private RangersAetherhive(final RangersAetherhive card) { + super(card); + } + + @Override + public RangersAetherhive copy() { + return new RangersAetherhive(this); + } +} diff --git a/Mage.Sets/src/mage/cards/r/RangersRefueler.java b/Mage.Sets/src/mage/cards/r/RangersRefueler.java index b7d9d73ed4f..0aba917d073 100644 --- a/Mage.Sets/src/mage/cards/r/RangersRefueler.java +++ b/Mage.Sets/src/mage/cards/r/RangersRefueler.java @@ -17,9 +17,7 @@ import mage.constants.SetTargetPointer; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterStackObject; -import mage.filter.predicate.Predicate; -import mage.game.Game; -import mage.game.stack.StackObject; +import mage.filter.predicate.other.ExhaustAbilityPredicate; import java.util.UUID; @@ -31,7 +29,7 @@ public final class RangersRefueler extends CardImpl { private static final FilterStackObject filter = new FilterStackObject("an exhaust ability"); static { - filter.add(RangersRefuelerPredicate.instance); + filter.add(ExhaustAbilityPredicate.instance); } public RangersRefueler(UUID ownerId, CardSetInfo setInfo) { @@ -67,12 +65,3 @@ public final class RangersRefueler extends CardImpl { return new RangersRefueler(this); } } - -enum RangersRefuelerPredicate implements Predicate { - instance; - - @Override - public boolean apply(StackObject input, Game game) { - return input.getStackAbility() instanceof ExhaustAbility; - } -} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index a7fb533a74b..bcf00c75f1c 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -120,6 +120,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Pyrewood Gearhulk", 216, Rarity.MYTHIC, mage.cards.p.PyrewoodGearhulk.class)); cards.add(new SetCardInfo("Quag Feast", 100, Rarity.RARE, mage.cards.q.QuagFeast.class)); cards.add(new SetCardInfo("Racers' Scoreboard", 239, Rarity.UNCOMMON, mage.cards.r.RacersScoreboard.class)); + cards.add(new SetCardInfo("Rangers' Aetherhive", 217, Rarity.UNCOMMON, mage.cards.r.RangersAetherhive.class)); cards.add(new SetCardInfo("Rangers' Refueler", 55, Rarity.UNCOMMON, mage.cards.r.RangersRefueler.class)); cards.add(new SetCardInfo("Reef Roads", 259, Rarity.UNCOMMON, mage.cards.r.ReefRoads.class)); cards.add(new SetCardInfo("Regal Imperiosaur", 177, Rarity.RARE, mage.cards.r.RegalImperiosaur.class)); diff --git a/Mage/src/main/java/mage/filter/predicate/other/ExhaustAbilityPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/ExhaustAbilityPredicate.java new file mode 100644 index 00000000000..e0f46614a9e --- /dev/null +++ b/Mage/src/main/java/mage/filter/predicate/other/ExhaustAbilityPredicate.java @@ -0,0 +1,18 @@ +package mage.filter.predicate.other; + +import mage.abilities.keyword.ExhaustAbility; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.stack.StackObject; + +/** + * @author TheElk801 + */ +public enum ExhaustAbilityPredicate implements Predicate { + instance; + + @Override + public boolean apply(StackObject input, Game game) { + return input.getStackAbility() instanceof ExhaustAbility; + } +} -- 2.47.2 From 7a4498be5a0b563c9d715aa2827ea8e7a06f244e Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 14:07:33 -0500 Subject: [PATCH 11/51] [DFT] Implement Ride's End --- Mage.Sets/src/mage/cards/r/RidesEnd.java | 60 ++++++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 61 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RidesEnd.java diff --git a/Mage.Sets/src/mage/cards/r/RidesEnd.java b/Mage.Sets/src/mage/cards/r/RidesEnd.java new file mode 100644 index 00000000000..f47ffe711b7 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RidesEnd.java @@ -0,0 +1,60 @@ +package mage.cards.r; + +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.SourceTargetsPermanentCondition; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RidesEnd extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent("a tapped creature"); + private static final FilterPermanent filter2 = new FilterPermanent("creature or Vehicle"); + + static { + filter.add(TappedPredicate.TAPPED); + filter2.add(Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + } + + private static final Condition condition = new SourceTargetsPermanentCondition(filter); + + public RidesEnd(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{W}"); + + // This spell costs {3} less to cast if it targets a tapped permanent. + this.addAbility(new SimpleStaticAbility( + Zone.ALL, new SpellCostReductionSourceEffect(3, condition).setCanWorksOnStackOnly(true) + ).setRuleAtTheTop(true)); + + // Exile target creature or Vehicle. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter2)); + } + + private RidesEnd(final RidesEnd card) { + super(card); + } + + @Override + public RidesEnd copy() { + return new RidesEnd(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index bcf00c75f1c..d63f1a39814 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -124,6 +124,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Rangers' Refueler", 55, Rarity.UNCOMMON, mage.cards.r.RangersRefueler.class)); cards.add(new SetCardInfo("Reef Roads", 259, Rarity.UNCOMMON, mage.cards.r.ReefRoads.class)); cards.add(new SetCardInfo("Regal Imperiosaur", 177, Rarity.RARE, mage.cards.r.RegalImperiosaur.class)); + cards.add(new SetCardInfo("Ride's End", 25, Rarity.COMMON, mage.cards.r.RidesEnd.class)); cards.add(new SetCardInfo("Ripclaw Wrangler", 101, Rarity.COMMON, mage.cards.r.RipclawWrangler.class)); cards.add(new SetCardInfo("Risen Necroregent", 102, Rarity.UNCOMMON, mage.cards.r.RisenNecroregent.class)); cards.add(new SetCardInfo("Riverpyre Verge", 260, Rarity.RARE, mage.cards.r.RiverpyreVerge.class)); -- 2.47.2 From 6e6b59c3ee702f1b42c358936fc24c35d2256d44 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 14:09:35 -0500 Subject: [PATCH 12/51] [DFT] Implement Shefet Archfiend --- .../src/mage/cards/s/ShefetArchfiend.java | 49 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/ShefetArchfiend.java diff --git a/Mage.Sets/src/mage/cards/s/ShefetArchfiend.java b/Mage.Sets/src/mage/cards/s/ShefetArchfiend.java new file mode 100644 index 00000000000..cd88428d649 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/ShefetArchfiend.java @@ -0,0 +1,49 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ShefetArchfiend extends CardImpl { + + public ShefetArchfiend(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}"); + + this.subtype.add(SubType.DEMON); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When this creature enters, all other creatures get -2/-2 until end of turn. + this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect( + -2, -2, Duration.EndOfTurn, true + ).setText("all other creatures get -2/-2 until end of turn"))); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); + } + + private ShefetArchfiend(final ShefetArchfiend card) { + super(card); + } + + @Override + public ShefetArchfiend copy() { + return new ShefetArchfiend(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index d63f1a39814..fb90271bfed 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -137,6 +137,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Sab-Sunen, Luxa Embodied", 221, Rarity.MYTHIC, mage.cards.s.SabSunenLuxaEmbodied.class)); cards.add(new SetCardInfo("Salvation Engine", 27, Rarity.MYTHIC, mage.cards.s.SalvationEngine.class)); cards.add(new SetCardInfo("Scoured Barrens", 263, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); + cards.add(new SetCardInfo("Shefet Archfiend", 104, Rarity.UNCOMMON, mage.cards.s.ShefetArchfiend.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); cards.add(new SetCardInfo("Starting Column", 244, Rarity.COMMON, mage.cards.s.StartingColumn.class)); -- 2.47.2 From e12a1cc0d822f6e1e29e142f34b6385c17453c8d Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2025 23:04:58 +0400 Subject: [PATCH 13/51] deck: added boosters for Mystery Booster 2 (MB2) (related to #13160) --- Mage.Sets/src/mage/sets/MysteryBooster2.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Mage.Sets/src/mage/sets/MysteryBooster2.java b/Mage.Sets/src/mage/sets/MysteryBooster2.java index c7c1c2b0fdc..be94237c812 100644 --- a/Mage.Sets/src/mage/sets/MysteryBooster2.java +++ b/Mage.Sets/src/mage/sets/MysteryBooster2.java @@ -17,8 +17,9 @@ public class MysteryBooster2 extends ExpansionSet { private MysteryBooster2() { super("Mystery Booster 2", "MB2", ExpansionSet.buildDate(2024, 8, 2), SetType.REMIX); - this.hasBoosters = false; // booster generation needs to be implemented - this.hasBasicLands = true; + + // https://mtg.fandom.com/wiki/Mystery_Booster_2 + this.enablePlayBooster(Integer.MAX_VALUE); cards.add(new SetCardInfo("Abrupt Decay", 78, Rarity.RARE, mage.cards.a.AbruptDecay.class)); cards.add(new SetCardInfo("Aether Vial", 216, Rarity.UNCOMMON, mage.cards.a.AetherVial.class)); @@ -218,12 +219,12 @@ public class MysteryBooster2 extends ExpansionSet { cards.add(new SetCardInfo("Simian Spirit Guide", 61, Rarity.COMMON, mage.cards.s.SimianSpiritGuide.class)); cards.add(new SetCardInfo("Skyclave Apparition", 18, Rarity.RARE, mage.cards.s.SkyclaveApparition.class)); cards.add(new SetCardInfo("Smokestack", 232, Rarity.RARE, mage.cards.s.Smokestack.class)); - cards.add(new SetCardInfo("Snow-Covered Forest", 120, Rarity.LAND, mage.cards.s.SnowCoveredForest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Snow-Covered Island", 117, Rarity.LAND, mage.cards.s.SnowCoveredIsland.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Snow-Covered Mountain", 119, Rarity.LAND, mage.cards.s.SnowCoveredMountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Snow-Covered Plains", 116, Rarity.LAND, mage.cards.s.SnowCoveredPlains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Snow-Covered Swamp", 118, Rarity.LAND, mage.cards.s.SnowCoveredSwamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Snow-Covered Wastes", 121, Rarity.UNCOMMON, mage.cards.s.SnowCoveredWastes.class, FULL_ART_BFZ_VARIOUS)); + cards.add(new SetCardInfo("Snow-Covered Forest", 120, Rarity.LAND, mage.cards.s.SnowCoveredForest.class)); + cards.add(new SetCardInfo("Snow-Covered Island", 117, Rarity.LAND, mage.cards.s.SnowCoveredIsland.class)); + cards.add(new SetCardInfo("Snow-Covered Mountain", 119, Rarity.LAND, mage.cards.s.SnowCoveredMountain.class)); + cards.add(new SetCardInfo("Snow-Covered Plains", 116, Rarity.LAND, mage.cards.s.SnowCoveredPlains.class)); + cards.add(new SetCardInfo("Snow-Covered Swamp", 118, Rarity.LAND, mage.cards.s.SnowCoveredSwamp.class)); + cards.add(new SetCardInfo("Snow-Covered Wastes", 121, Rarity.UNCOMMON, mage.cards.s.SnowCoveredWastes.class)); cards.add(new SetCardInfo("Snuff Out", 187, Rarity.COMMON, mage.cards.s.SnuffOut.class)); cards.add(new SetCardInfo("Sol Ring", 233, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); cards.add(new SetCardInfo("Soul of Theros", 19, Rarity.MYTHIC, mage.cards.s.SoulOfTheros.class)); -- 2.47.2 From 55a532c9c7471a8e4aa5efdbb0289994fb67a161 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2025 23:15:32 +0400 Subject: [PATCH 14/51] deck: added reprints and boosters for Commander Legends: Battle for Baldur's Gate (CLB) (related to #13160) --- .../CommanderLegendsBattleForBaldursGate.java | 673 +++++++++++++----- 1 file changed, 477 insertions(+), 196 deletions(-) diff --git a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java index da21969f229..a789aee7419 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java +++ b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java @@ -18,77 +18,123 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { private CommanderLegendsBattleForBaldursGate() { super("Commander Legends: Battle for Baldur's Gate", "CLB", ExpansionSet.buildDate(2022, 6, 10), SetType.SUPPLEMENTAL); this.blockName = "Commander Legends"; - this.hasBasicLands = true; - this.hasBoosters = false; // temporary + + // https://mtg.fandom.com/wiki/Commander_Legends:_Battle_for_Baldur%27s_Gate + this.enableCollectorBooster(Integer.MAX_VALUE); // simplified to use all cards as collector booster cards.add(new SetCardInfo("Aarakocra Sneak", 54, Rarity.COMMON, mage.cards.a.AarakocraSneak.class)); - cards.add(new SetCardInfo("Abdel Adrian, Gorion's Ward", 2, Rarity.UNCOMMON, mage.cards.a.AbdelAdrianGorionsWard.class)); - cards.add(new SetCardInfo("Aboleth Spawn", 662, Rarity.RARE, mage.cards.a.AbolethSpawn.class)); - cards.add(new SetCardInfo("Acolyte of Bahamut", 212, Rarity.UNCOMMON, mage.cards.a.AcolyteOfBahamut.class)); + cards.add(new SetCardInfo("Abdel Adrian, Gorion's Ward", 2, Rarity.UNCOMMON, mage.cards.a.AbdelAdrianGorionsWard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Abdel Adrian, Gorion's Ward", 375, Rarity.UNCOMMON, mage.cards.a.AbdelAdrianGorionsWard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Abdel Adrian, Gorion's Ward", 471, Rarity.UNCOMMON, mage.cards.a.AbdelAdrianGorionsWard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aboleth Spawn", 612, Rarity.RARE, mage.cards.a.AbolethSpawn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aboleth Spawn", 662, Rarity.RARE, mage.cards.a.AbolethSpawn.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Acolyte of Bahamut", 212, Rarity.UNCOMMON, mage.cards.a.AcolyteOfBahamut.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Acolyte of Bahamut", 513, Rarity.UNCOMMON, mage.cards.a.AcolyteOfBahamut.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Aether Gale", 712, Rarity.RARE, mage.cards.a.AetherGale.class)); - cards.add(new SetCardInfo("Agent of the Iron Throne", 107, Rarity.UNCOMMON, mage.cards.a.AgentOfTheIronThrone.class)); - cards.add(new SetCardInfo("Agent of the Shadow Thieves", 108, Rarity.UNCOMMON, mage.cards.a.AgentOfTheShadowThieves.class)); + cards.add(new SetCardInfo("Agent of the Iron Throne", 107, Rarity.UNCOMMON, mage.cards.a.AgentOfTheIronThrone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Agent of the Iron Throne", 492, Rarity.UNCOMMON, mage.cards.a.AgentOfTheIronThrone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Agent of the Shadow Thieves", 108, Rarity.UNCOMMON, mage.cards.a.AgentOfTheShadowThieves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Agent of the Shadow Thieves", 493, Rarity.UNCOMMON, mage.cards.a.AgentOfTheShadowThieves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Agitator Ant", 776, Rarity.RARE, mage.cards.a.AgitatorAnt.class)); - cards.add(new SetCardInfo("Alora, Merry Thief", 55, Rarity.UNCOMMON, mage.cards.a.AloraMerryThief.class)); - cards.add(new SetCardInfo("Altar of Bhaal", 109, Rarity.RARE, mage.cards.a.AltarOfBhaal.class)); - cards.add(new SetCardInfo("Amber Gristle O'Maul", 159, Rarity.UNCOMMON, mage.cards.a.AmberGristleOMaul.class)); + //cards.add(new SetCardInfo("Alaundo the Seer", 264, Rarity.RARE, mage.cards.a.AlaundoTheSeer.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Alaundo the Seer", 412, Rarity.RARE, mage.cards.a.AlaundoTheSeer.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Alaundo the Seer", 523, Rarity.RARE, mage.cards.a.AlaundoTheSeer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Alora, Merry Thief", 381, Rarity.UNCOMMON, mage.cards.a.AloraMerryThief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Alora, Merry Thief", 481, Rarity.UNCOMMON, mage.cards.a.AloraMerryThief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Alora, Merry Thief", 55, Rarity.UNCOMMON, mage.cards.a.AloraMerryThief.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Altar of Bhaal", 109, Rarity.RARE, mage.cards.a.AltarOfBhaal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Altar of Bhaal", 569, Rarity.RARE, mage.cards.a.AltarOfBhaal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Amber Gristle O'Maul", 159, Rarity.UNCOMMON, mage.cards.a.AmberGristleOMaul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Amber Gristle O'Maul", 395, Rarity.UNCOMMON, mage.cards.a.AmberGristleOMaul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Amber Gristle O'Maul", 502, Rarity.UNCOMMON, mage.cards.a.AmberGristleOMaul.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ambition's Cost", 110, Rarity.UNCOMMON, mage.cards.a.AmbitionsCost.class)); cards.add(new SetCardInfo("Ambitious Dragonborn", 213, Rarity.COMMON, mage.cards.a.AmbitiousDragonborn.class)); cards.add(new SetCardInfo("Amethyst Dragon", 160, Rarity.UNCOMMON, mage.cards.a.AmethystDragon.class)); - cards.add(new SetCardInfo("Ancient Brass Dragon", 111, Rarity.MYTHIC, mage.cards.a.AncientBrassDragon.class)); - cards.add(new SetCardInfo("Ancient Bronze Dragon", 214, Rarity.MYTHIC, mage.cards.a.AncientBronzeDragon.class)); - cards.add(new SetCardInfo("Ancient Copper Dragon", 161, Rarity.MYTHIC, mage.cards.a.AncientCopperDragon.class)); - cards.add(new SetCardInfo("Ancient Gold Dragon", 3, Rarity.MYTHIC, mage.cards.a.AncientGoldDragon.class)); - cards.add(new SetCardInfo("Ancient Silver Dragon", 56, Rarity.MYTHIC, mage.cards.a.AncientSilverDragon.class)); + cards.add(new SetCardInfo("Ancient Brass Dragon", 111, Rarity.MYTHIC, mage.cards.a.AncientBrassDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Brass Dragon", 367, Rarity.MYTHIC, mage.cards.a.AncientBrassDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Brass Dragon", 389, Rarity.MYTHIC, mage.cards.a.AncientBrassDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Bronze Dragon", 214, Rarity.MYTHIC, mage.cards.a.AncientBronzeDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Bronze Dragon", 369, Rarity.MYTHIC, mage.cards.a.AncientBronzeDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Bronze Dragon", 406, Rarity.MYTHIC, mage.cards.a.AncientBronzeDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Copper Dragon", 161, Rarity.MYTHIC, mage.cards.a.AncientCopperDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Copper Dragon", 368, Rarity.MYTHIC, mage.cards.a.AncientCopperDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Copper Dragon", 396, Rarity.MYTHIC, mage.cards.a.AncientCopperDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Gold Dragon", 3, Rarity.MYTHIC, mage.cards.a.AncientGoldDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Gold Dragon", 365, Rarity.MYTHIC, mage.cards.a.AncientGoldDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Gold Dragon", 376, Rarity.MYTHIC, mage.cards.a.AncientGoldDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Silver Dragon", 366, Rarity.MYTHIC, mage.cards.a.AncientSilverDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Silver Dragon", 382, Rarity.MYTHIC, mage.cards.a.AncientSilverDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ancient Silver Dragon", 56, Rarity.MYTHIC, mage.cards.a.AncientSilverDragon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Angler Turtle", 713, Rarity.RARE, mage.cards.a.AnglerTurtle.class)); cards.add(new SetCardInfo("Arasta of the Endless Web", 817, Rarity.RARE, mage.cards.a.ArastaOfTheEndlessWeb.class)); cards.add(new SetCardInfo("Arcane Encyclopedia", 297, Rarity.UNCOMMON, mage.cards.a.ArcaneEncyclopedia.class)); cards.add(new SetCardInfo("Arcane Signet", 298, Rarity.UNCOMMON, mage.cards.a.ArcaneSignet.class)); - cards.add(new SetCardInfo("Archivist of Oghma", 4, Rarity.RARE, mage.cards.a.ArchivistOfOghma.class)); + cards.add(new SetCardInfo("Archivist of Oghma", 4, Rarity.RARE, mage.cards.a.ArchivistOfOghma.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Archivist of Oghma", 553, Rarity.RARE, mage.cards.a.ArchivistOfOghma.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Archpriest of Iona", 686, Rarity.RARE, mage.cards.a.ArchpriestOfIona.class)); cards.add(new SetCardInfo("Armor of Shadows", 112, Rarity.COMMON, mage.cards.a.ArmorOfShadows.class)); cards.add(new SetCardInfo("Arms of Hadar", 113, Rarity.COMMON, mage.cards.a.ArmsOfHadar.class)); cards.add(new SetCardInfo("Artificer Class", 663, Rarity.RARE, mage.cards.a.ArtificerClass.class)); - cards.add(new SetCardInfo("Ascend from Avernus", 5, Rarity.RARE, mage.cards.a.AscendFromAvernus.class)); + cards.add(new SetCardInfo("Ascend from Avernus", 5, Rarity.RARE, mage.cards.a.AscendFromAvernus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ascend from Avernus", 554, Rarity.RARE, mage.cards.a.AscendFromAvernus.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ash Barrens", 880, Rarity.UNCOMMON, mage.cards.a.AshBarrens.class)); - cards.add(new SetCardInfo("Astarion's Thirst", 114, Rarity.RARE, mage.cards.a.AstarionsThirst.class)); - cards.add(new SetCardInfo("Astarion, the Decadent", 265, Rarity.RARE, mage.cards.a.AstarionTheDecadent.class)); + cards.add(new SetCardInfo("Astarion's Thirst", 114, Rarity.RARE, mage.cards.a.AstarionsThirst.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Astarion's Thirst", 570, Rarity.RARE, mage.cards.a.AstarionsThirst.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Astarion, the Decadent", 265, Rarity.RARE, mage.cards.a.AstarionTheDecadent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Astarion, the Decadent", 413, Rarity.RARE, mage.cards.a.AstarionTheDecadent.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Astarion, the Decadent", 524, Rarity.RARE, mage.cards.a.AstarionTheDecadent.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Astral Confrontation", 6, Rarity.COMMON, mage.cards.a.AstralConfrontation.class)); - cards.add(new SetCardInfo("Astral Dragon", 664, Rarity.RARE, mage.cards.a.AstralDragon.class)); + cards.add(new SetCardInfo("Astral Dragon", 613, Rarity.RARE, mage.cards.a.AstralDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Astral Dragon", 664, Rarity.RARE, mage.cards.a.AstralDragon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Atrocious Experiment", 115, Rarity.COMMON, mage.cards.a.AtrociousExperiment.class)); cards.add(new SetCardInfo("Aurora Phoenix", 778, Rarity.RARE, mage.cards.a.AuroraPhoenix.class)); cards.add(new SetCardInfo("Austere Command", 687, Rarity.RARE, mage.cards.a.AustereCommand.class)); cards.add(new SetCardInfo("Avatar of Slaughter", 779, Rarity.RARE, mage.cards.a.AvatarOfSlaughter.class)); cards.add(new SetCardInfo("Aven Mindcensor", 688, Rarity.UNCOMMON, mage.cards.a.AvenMindcensor.class)); cards.add(new SetCardInfo("Avenging Hunter", 215, Rarity.COMMON, mage.cards.a.AvengingHunter.class)); - cards.add(new SetCardInfo("Baba Lysaga, Night Witch", 266, Rarity.RARE, mage.cards.b.BabaLysagaNightWitch.class)); - cards.add(new SetCardInfo("Baeloth Barrityl, Entertainer", 655, Rarity.MYTHIC, mage.cards.b.BaelothBarritylEntertainer.class)); + cards.add(new SetCardInfo("Baba Lysaga, Night Witch", 266, Rarity.RARE, mage.cards.b.BabaLysagaNightWitch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Baba Lysaga, Night Witch", 414, Rarity.RARE, mage.cards.b.BabaLysagaNightWitch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Baba Lysaga, Night Witch", 525, Rarity.RARE, mage.cards.b.BabaLysagaNightWitch.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Baeloth Barrityl, Entertainer", 627, Rarity.MYTHIC, mage.cards.b.BaelothBarritylEntertainer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Baeloth Barrityl, Entertainer", 655, Rarity.MYTHIC, mage.cards.b.BaelothBarritylEntertainer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bag of Holding", 299, Rarity.UNCOMMON, mage.cards.b.BagOfHolding.class)); - cards.add(new SetCardInfo("Baldur's Gate", 345, Rarity.RARE, mage.cards.b.BaldursGate.class)); - cards.add(new SetCardInfo("Balor", 162, Rarity.MYTHIC, mage.cards.b.Balor.class)); + cards.add(new SetCardInfo("Baldur's Gate", 345, Rarity.RARE, mage.cards.b.BaldursGate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Baldur's Gate", 600, Rarity.RARE, mage.cards.b.BaldursGate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balor", 162, Rarity.MYTHIC, mage.cards.b.Balor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balor", 578, Rarity.MYTHIC, mage.cards.b.Balor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Band Together", 216, Rarity.COMMON, mage.cards.b.BandTogether.class)); cards.add(new SetCardInfo("Bane's Contingency", 57, Rarity.UNCOMMON, mage.cards.b.BanesContingency.class)); cards.add(new SetCardInfo("Bane's Invoker", 7, Rarity.COMMON, mage.cards.b.BanesInvoker.class)); - cards.add(new SetCardInfo("Bane, Lord of Darkness", 267, Rarity.RARE, mage.cards.b.BaneLordOfDarkness.class)); + cards.add(new SetCardInfo("Bane, Lord of Darkness", 267, Rarity.RARE, mage.cards.b.BaneLordOfDarkness.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bane, Lord of Darkness", 415, Rarity.RARE, mage.cards.b.BaneLordOfDarkness.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bane, Lord of Darkness", 526, Rarity.RARE, mage.cards.b.BaneLordOfDarkness.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Banishment", 8, Rarity.UNCOMMON, mage.cards.b.Banishment.class)); - cards.add(new SetCardInfo("Barroom Brawl", 217, Rarity.RARE, mage.cards.b.BarroomBrawl.class)); - cards.add(new SetCardInfo("Basilisk Collar", 300, Rarity.RARE, mage.cards.b.BasiliskCollar.class)); + cards.add(new SetCardInfo("Barroom Brawl", 217, Rarity.RARE, mage.cards.b.BarroomBrawl.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Barroom Brawl", 587, Rarity.RARE, mage.cards.b.BarroomBrawl.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Basilisk Collar", 300, Rarity.RARE, mage.cards.b.BasiliskCollar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Basilisk Collar", 595, Rarity.RARE, mage.cards.b.BasiliskCollar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Basilisk Gate", 346, Rarity.COMMON, mage.cards.b.BasiliskGate.class)); - cards.add(new SetCardInfo("Battle Angels of Tyr", 9, Rarity.MYTHIC, mage.cards.b.BattleAngelsOfTyr.class)); + cards.add(new SetCardInfo("Battle Angels of Tyr", 370, Rarity.MYTHIC, mage.cards.b.BattleAngelsOfTyr.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Battle Angels of Tyr", 9, Rarity.MYTHIC, mage.cards.b.BattleAngelsOfTyr.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Battle Mammoth", 818, Rarity.MYTHIC, mage.cards.b.BattleMammoth.class)); cards.add(new SetCardInfo("Beanstalk Giant", 819, Rarity.UNCOMMON, mage.cards.b.BeanstalkGiant.class)); cards.add(new SetCardInfo("Beast Within", 820, Rarity.UNCOMMON, mage.cards.b.BeastWithin.class)); cards.add(new SetCardInfo("Beckoning Will-o'-Wisp", 10, Rarity.UNCOMMON, mage.cards.b.BeckoningWillOWisp.class)); cards.add(new SetCardInfo("Bhaal's Invoker", 163, Rarity.COMMON, mage.cards.b.BhaalsInvoker.class)); - cards.add(new SetCardInfo("Bhaal, Lord of Murder", 268, Rarity.RARE, mage.cards.b.BhaalLordOfMurder.class)); + cards.add(new SetCardInfo("Bhaal, Lord of Murder", 268, Rarity.RARE, mage.cards.b.BhaalLordOfMurder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bhaal, Lord of Murder", 416, Rarity.RARE, mage.cards.b.BhaalLordOfMurder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bhaal, Lord of Murder", 527, Rarity.RARE, mage.cards.b.BhaalLordOfMurder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Black Dragon Gate", 347, Rarity.COMMON, mage.cards.b.BlackDragonGate.class)); - cards.add(new SetCardInfo("Black Market Connections", 669, Rarity.RARE, mage.cards.b.BlackMarketConnections.class)); + cards.add(new SetCardInfo("Black Market Connections", 620, Rarity.RARE, mage.cards.b.BlackMarketConnections.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Black Market Connections", 669, Rarity.RARE, mage.cards.b.BlackMarketConnections.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Black Market", 739, Rarity.RARE, mage.cards.b.BlackMarket.class)); - cards.add(new SetCardInfo("Blade of Selves", 301, Rarity.RARE, mage.cards.b.BladeOfSelves.class)); + cards.add(new SetCardInfo("Blade of Selves", 301, Rarity.RARE, mage.cards.b.BladeOfSelves.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blade of Selves", 596, Rarity.RARE, mage.cards.b.BladeOfSelves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Blasphemous Act", 780, Rarity.RARE, mage.cards.b.BlasphemousAct.class)); cards.add(new SetCardInfo("Blessed Hippogriff", 11, Rarity.COMMON, mage.cards.b.BlessedHippogriff.class)); cards.add(new SetCardInfo("Blighted Woodland", 881, Rarity.UNCOMMON, mage.cards.b.BlightedWoodland.class)); - cards.add(new SetCardInfo("Blood Money", 116, Rarity.MYTHIC, mage.cards.b.BloodMoney.class)); + cards.add(new SetCardInfo("Blood Money", 116, Rarity.MYTHIC, mage.cards.b.BloodMoney.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Blood Money", 571, Rarity.MYTHIC, mage.cards.b.BloodMoney.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodboil Sorcerer", 164, Rarity.UNCOMMON, mage.cards.b.BloodboilSorcerer.class)); cards.add(new SetCardInfo("Bloodbraid Elf", 839, Rarity.UNCOMMON, mage.cards.b.BloodbraidElf.class)); cards.add(new SetCardInfo("Bloodsoaked Champion", 740, Rarity.RARE, mage.cards.b.BloodsoakedChampion.class)); @@ -97,53 +143,72 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Bojuka Bog", 882, Rarity.COMMON, mage.cards.b.BojukaBog.class)); cards.add(new SetCardInfo("Bonecaller Cleric", 117, Rarity.UNCOMMON, mage.cards.b.BonecallerCleric.class)); cards.add(new SetCardInfo("Bonecrusher Giant", 781, Rarity.RARE, mage.cards.b.BonecrusherGiant.class)); - cards.add(new SetCardInfo("Bothersome Quasit", 674, Rarity.RARE, mage.cards.b.BothersomeQuasit.class)); - cards.add(new SetCardInfo("Bountiful Promenade", 348, Rarity.RARE, mage.cards.b.BountifulPromenade.class)); - cards.add(new SetCardInfo("Brainstealer Dragon", 670, Rarity.RARE, mage.cards.b.BrainstealerDragon.class)); - cards.add(new SetCardInfo("Bramble Sovereign", 218, Rarity.MYTHIC, mage.cards.b.BrambleSovereign.class)); + cards.add(new SetCardInfo("Bothersome Quasit", 628, Rarity.RARE, mage.cards.b.BothersomeQuasit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bothersome Quasit", 674, Rarity.RARE, mage.cards.b.BothersomeQuasit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bountiful Promenade", 348, Rarity.RARE, mage.cards.b.BountifulPromenade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bountiful Promenade", 601, Rarity.RARE, mage.cards.b.BountifulPromenade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brainstealer Dragon", 621, Rarity.RARE, mage.cards.b.BrainstealerDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Brainstealer Dragon", 670, Rarity.RARE, mage.cards.b.BrainstealerDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bramble Sovereign", 218, Rarity.MYTHIC, mage.cards.b.BrambleSovereign.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bramble Sovereign", 372, Rarity.MYTHIC, mage.cards.b.BrambleSovereign.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brash Taunter", 782, Rarity.RARE, mage.cards.b.BrashTaunter.class)); cards.add(new SetCardInfo("Breath Weapon", 165, Rarity.COMMON, mage.cards.b.BreathWeapon.class)); cards.add(new SetCardInfo("Bronze Walrus", 302, Rarity.COMMON, mage.cards.b.BronzeWalrus.class)); - cards.add(new SetCardInfo("Burakos, Party Leader", 653, Rarity.MYTHIC, mage.cards.b.BurakosPartyLeader.class)); + cards.add(new SetCardInfo("Burakos, Party Leader", 622, Rarity.MYTHIC, mage.cards.b.BurakosPartyLeader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Burakos, Party Leader", 653, Rarity.MYTHIC, mage.cards.b.BurakosPartyLeader.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Burnished Hart", 303, Rarity.UNCOMMON, mage.cards.b.BurnishedHart.class)); cards.add(new SetCardInfo("Butcher of Malakir", 741, Rarity.RARE, mage.cards.b.ButcherOfMalakir.class)); cards.add(new SetCardInfo("Bygone Bishop", 689, Rarity.RARE, mage.cards.b.BygoneBishop.class)); - cards.add(new SetCardInfo("Cadira, Caller of the Small", 269, Rarity.UNCOMMON, mage.cards.c.CadiraCallerOfTheSmall.class)); + cards.add(new SetCardInfo("Cadira, Caller of the Small", 269, Rarity.UNCOMMON, mage.cards.c.CadiraCallerOfTheSmall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cadira, Caller of the Small", 417, Rarity.UNCOMMON, mage.cards.c.CadiraCallerOfTheSmall.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cadira, Caller of the Small", 528, Rarity.UNCOMMON, mage.cards.c.CadiraCallerOfTheSmall.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Calculating Lich", 742, Rarity.MYTHIC, mage.cards.c.CalculatingLich.class)); - cards.add(new SetCardInfo("Call to the Void", 118, Rarity.RARE, mage.cards.c.CallToTheVoid.class)); + cards.add(new SetCardInfo("Call to the Void", 118, Rarity.RARE, mage.cards.c.CallToTheVoid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Call to the Void", 572, Rarity.RARE, mage.cards.c.CallToTheVoid.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Campfire", 304, Rarity.UNCOMMON, mage.cards.c.Campfire.class)); cards.add(new SetCardInfo("Candlekeep Inspiration", 59, Rarity.UNCOMMON, mage.cards.c.CandlekeepInspiration.class)); - cards.add(new SetCardInfo("Candlekeep Sage", 60, Rarity.COMMON, mage.cards.c.CandlekeepSage.class)); - cards.add(new SetCardInfo("Captain N'ghathrod", 646, Rarity.MYTHIC, mage.cards.c.CaptainNghathrod.class)); + cards.add(new SetCardInfo("Candlekeep Sage", 482, Rarity.COMMON, mage.cards.c.CandlekeepSage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Candlekeep Sage", 60, Rarity.COMMON, mage.cards.c.CandlekeepSage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain N'ghathrod", 640, Rarity.MYTHIC, mage.cards.c.CaptainNghathrod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain N'ghathrod", 646, Rarity.MYTHIC, mage.cards.c.CaptainNghathrod.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Captain N'ghathrod", 931, Rarity.MYTHIC, mage.cards.c.CaptainNghathrod.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Carefree Swinemaster", 219, Rarity.COMMON, mage.cards.c.CarefreeSwinemaster.class)); cards.add(new SetCardInfo("Carnelian Orb of Dragonkind", 166, Rarity.COMMON, mage.cards.c.CarnelianOrbOfDragonkind.class)); cards.add(new SetCardInfo("Cast Down", 119, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); cards.add(new SetCardInfo("Castle Embereth", 883, Rarity.RARE, mage.cards.c.CastleEmbereth.class)); cards.add(new SetCardInfo("Castle Locthwain", 884, Rarity.RARE, mage.cards.c.CastleLocthwain.class)); cards.add(new SetCardInfo("Castle Vantress", 885, Rarity.RARE, mage.cards.c.CastleVantress.class)); - cards.add(new SetCardInfo("Caves of Chaos Adventurer", 167, Rarity.RARE, mage.cards.c.CavesOfChaosAdventurer.class)); + cards.add(new SetCardInfo("Caves of Chaos Adventurer", 167, Rarity.RARE, mage.cards.c.CavesOfChaosAdventurer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Caves of Chaos Adventurer", 579, Rarity.RARE, mage.cards.c.CavesOfChaosAdventurer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chain Devil", 120, Rarity.COMMON, mage.cards.c.ChainDevil.class)); cards.add(new SetCardInfo("Chain Reaction", 783, Rarity.RARE, mage.cards.c.ChainReaction.class)); cards.add(new SetCardInfo("Changeling Outcast", 743, Rarity.COMMON, mage.cards.c.ChangelingOutcast.class)); cards.add(new SetCardInfo("Chaos Dragon", 784, Rarity.RARE, mage.cards.c.ChaosDragon.class)); cards.add(new SetCardInfo("Chaos Wand", 855, Rarity.RARE, mage.cards.c.ChaosWand.class)); cards.add(new SetCardInfo("Chaos Warp", 785, Rarity.RARE, mage.cards.c.ChaosWarp.class)); - cards.add(new SetCardInfo("Charcoal Diamond", 305, Rarity.COMMON, mage.cards.c.CharcoalDiamond.class)); + cards.add(new SetCardInfo("Charcoal Diamond", 305, Rarity.COMMON, mage.cards.c.CharcoalDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Charcoal Diamond", 442, Rarity.COMMON, mage.cards.c.CharcoalDiamond.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chardalyn Dragon", 306, Rarity.COMMON, mage.cards.c.ChardalynDragon.class)); cards.add(new SetCardInfo("Chasm Skulker", 714, Rarity.RARE, mage.cards.c.ChasmSkulker.class)); cards.add(new SetCardInfo("Choked Estuary", 886, Rarity.RARE, mage.cards.c.ChokedEstuary.class)); cards.add(new SetCardInfo("Cinder Glade", 887, Rarity.RARE, mage.cards.c.CinderGlade.class)); cards.add(new SetCardInfo("Circle of the Land Druid", 220, Rarity.COMMON, mage.cards.c.CircleOfTheLandDruid.class)); cards.add(new SetCardInfo("Citadel Gate", 349, Rarity.COMMON, mage.cards.c.CitadelGate.class)); - cards.add(new SetCardInfo("Clan Crafter", 651, Rarity.MYTHIC, mage.cards.c.ClanCrafter.class)); + cards.add(new SetCardInfo("Clan Crafter", 614, Rarity.MYTHIC, mage.cards.c.ClanCrafter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Clan Crafter", 651, Rarity.MYTHIC, mage.cards.c.ClanCrafter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cliffgate", 350, Rarity.COMMON, mage.cards.c.Cliffgate.class)); - cards.add(new SetCardInfo("Cloak of the Bat", 307, Rarity.COMMON, mage.cards.c.CloakOfTheBat.class)); - cards.add(new SetCardInfo("Cloakwood Hermit", 221, Rarity.UNCOMMON, mage.cards.c.CloakwoodHermit.class)); + cards.add(new SetCardInfo("Cloak of the Bat", 307, Rarity.COMMON, mage.cards.c.CloakOfTheBat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cloak of the Bat", 443, Rarity.COMMON, mage.cards.c.CloakOfTheBat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cloakwood Hermit", 221, Rarity.UNCOMMON, mage.cards.c.CloakwoodHermit.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cloakwood Hermit", 514, Rarity.UNCOMMON, mage.cards.c.CloakwoodHermit.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cloakwood Swarmkeeper", 222, Rarity.COMMON, mage.cards.c.CloakwoodSwarmkeeper.class)); cards.add(new SetCardInfo("Clockwork Fox", 308, Rarity.COMMON, mage.cards.c.ClockworkFox.class)); cards.add(new SetCardInfo("Cloudkill", 121, Rarity.UNCOMMON, mage.cards.c.Cloudkill.class)); cards.add(new SetCardInfo("Colossal Badger", 223, Rarity.COMMON, mage.cards.c.ColossalBadger.class)); cards.add(new SetCardInfo("Command Tower", 351, Rarity.COMMON, mage.cards.c.CommandTower.class)); + //cards.add(new SetCardInfo("Commander Liara Portyr", 270, Rarity.UNCOMMON, mage.cards.c.CommanderLiaraPortyr.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Commander Liara Portyr", 418, Rarity.UNCOMMON, mage.cards.c.CommanderLiaraPortyr.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Commander Liara Portyr", 529, Rarity.UNCOMMON, mage.cards.c.CommanderLiaraPortyr.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Compulsive Research", 715, Rarity.COMMON, mage.cards.c.CompulsiveResearch.class)); cards.add(new SetCardInfo("Cone of Cold", 61, Rarity.UNCOMMON, mage.cards.c.ConeOfCold.class)); cards.add(new SetCardInfo("Consuming Aberration", 840, Rarity.RARE, mage.cards.c.ConsumingAberration.class)); @@ -153,14 +218,16 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Corpse Augur", 744, Rarity.UNCOMMON, mage.cards.c.CorpseAugur.class)); cards.add(new SetCardInfo("Creeping Tar Pit", 888, Rarity.RARE, mage.cards.c.CreepingTarPit.class)); cards.add(new SetCardInfo("Crib Swap", 690, Rarity.COMMON, mage.cards.c.CribSwap.class)); - cards.add(new SetCardInfo("Criminal Past", 122, Rarity.UNCOMMON, mage.cards.c.CriminalPast.class)); + cards.add(new SetCardInfo("Criminal Past", 122, Rarity.UNCOMMON, mage.cards.c.CriminalPast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Criminal Past", 494, Rarity.UNCOMMON, mage.cards.c.CriminalPast.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Crippling Fear", 745, Rarity.RARE, mage.cards.c.CripplingFear.class)); cards.add(new SetCardInfo("Crystal Dragon", 13, Rarity.UNCOMMON, mage.cards.c.CrystalDragon.class)); - cards.add(new SetCardInfo("Cultist of the Absolute", 123, Rarity.RARE, mage.cards.c.CultistOfTheAbsolute.class)); + cards.add(new SetCardInfo("Cultist of the Absolute", 123, Rarity.RARE, mage.cards.c.CultistOfTheAbsolute.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Cultist of the Absolute", 495, Rarity.RARE, mage.cards.c.CultistOfTheAbsolute.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cultivate", 821, Rarity.UNCOMMON, mage.cards.c.Cultivate.class)); cards.add(new SetCardInfo("Curse of Opulence", 786, Rarity.UNCOMMON, mage.cards.c.CurseOfOpulence.class)); - cards.add(new SetCardInfo("Curse of Verbosity", 717, Rarity.UNCOMMON, mage.cards.c.CurseOfVerbosity.class)); cards.add(new SetCardInfo("Curse of the Swine", 716, Rarity.RARE, mage.cards.c.CurseOfTheSwine.class)); + cards.add(new SetCardInfo("Curse of Verbosity", 717, Rarity.UNCOMMON, mage.cards.c.CurseOfVerbosity.class)); cards.add(new SetCardInfo("Curtains' Call", 746, Rarity.RARE, mage.cards.c.CurtainsCall.class)); cards.add(new SetCardInfo("Cut a Deal", 14, Rarity.UNCOMMON, mage.cards.c.CutADeal.class)); cards.add(new SetCardInfo("Dark Hatchling", 747, Rarity.RARE, mage.cards.d.DarkHatchling.class)); @@ -168,13 +235,17 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Dauthi Horror", 748, Rarity.COMMON, mage.cards.d.DauthiHorror.class)); cards.add(new SetCardInfo("Dawnbringer Cleric", 15, Rarity.COMMON, mage.cards.d.DawnbringerCleric.class)); cards.add(new SetCardInfo("Deadly Dispute", 124, Rarity.COMMON, mage.cards.d.DeadlyDispute.class)); - cards.add(new SetCardInfo("Death Kiss", 675, Rarity.RARE, mage.cards.d.DeathKiss.class)); - cards.add(new SetCardInfo("Decanter of Endless Water", 309, Rarity.COMMON, mage.cards.d.DecanterOfEndlessWater.class)); - cards.add(new SetCardInfo("Deep Gnome Terramancer", 658, Rarity.RARE, mage.cards.d.DeepGnomeTerramancer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Death Kiss", 629, Rarity.RARE, mage.cards.d.DeathKiss.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Death Kiss", 675, Rarity.RARE, mage.cards.d.DeathKiss.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Decanter of Endless Water", 309, Rarity.COMMON, mage.cards.d.DecanterOfEndlessWater.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Decanter of Endless Water", 444, Rarity.COMMON, mage.cards.d.DecanterOfEndlessWater.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Deep Gnome Terramancer", 607, Rarity.RARE, mage.cards.d.DeepGnomeTerramancer.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Delayed Blast Fireball", 676, Rarity.RARE, mage.cards.d.DelayedBlastFireball.class)); + cards.add(new SetCardInfo("Deep Gnome Terramancer", 658, Rarity.RARE, mage.cards.d.DeepGnomeTerramancer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Delayed Blast Fireball", 630, Rarity.RARE, mage.cards.d.DelayedBlastFireball.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Delayed Blast Fireball", 676, Rarity.RARE, mage.cards.d.DelayedBlastFireball.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Demon Bolt", 787, Rarity.COMMON, mage.cards.d.DemonBolt.class)); - cards.add(new SetCardInfo("Descent into Avernus", 169, Rarity.RARE, mage.cards.d.DescentIntoAvernus.class)); + cards.add(new SetCardInfo("Descent into Avernus", 169, Rarity.RARE, mage.cards.d.DescentIntoAvernus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Descent into Avernus", 580, Rarity.RARE, mage.cards.d.DescentIntoAvernus.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Desolate Lighthouse", 890, Rarity.RARE, mage.cards.d.DesolateLighthouse.class)); cards.add(new SetCardInfo("Despark", 841, Rarity.UNCOMMON, mage.cards.d.Despark.class)); cards.add(new SetCardInfo("Dimir Aqueduct", 891, Rarity.UNCOMMON, mage.cards.d.DimirAqueduct.class)); @@ -183,13 +254,15 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Dire Fleet Daredevil", 788, Rarity.RARE, mage.cards.d.DireFleetDaredevil.class)); cards.add(new SetCardInfo("Dire Fleet Ravager", 749, Rarity.MYTHIC, mage.cards.d.DireFleetRavager.class)); cards.add(new SetCardInfo("Dire Mimic", 310, Rarity.COMMON, mage.cards.d.DireMimic.class)); - cards.add(new SetCardInfo("Displacer Kitten", 63, Rarity.RARE, mage.cards.d.DisplacerKitten.class)); + cards.add(new SetCardInfo("Displacer Kitten", 560, Rarity.RARE, mage.cards.d.DisplacerKitten.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Displacer Kitten", 63, Rarity.RARE, mage.cards.d.DisplacerKitten.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Disrupt Decorum", 789, Rarity.RARE, mage.cards.d.DisruptDecorum.class)); cards.add(new SetCardInfo("Dissipation Field", 718, Rarity.RARE, mage.cards.d.DissipationField.class)); cards.add(new SetCardInfo("Domineering Will", 719, Rarity.RARE, mage.cards.d.DomineeringWill.class)); cards.add(new SetCardInfo("Draconic Lore", 64, Rarity.COMMON, mage.cards.d.DraconicLore.class)); cards.add(new SetCardInfo("Draconic Muralists", 224, Rarity.UNCOMMON, mage.cards.d.DraconicMuralists.class)); - cards.add(new SetCardInfo("Dragon Cultist", 170, Rarity.UNCOMMON, mage.cards.d.DragonCultist.class)); + cards.add(new SetCardInfo("Dragon Cultist", 170, Rarity.UNCOMMON, mage.cards.d.DragonCultist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dragon Cultist", 503, Rarity.UNCOMMON, mage.cards.d.DragonCultist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dragon's Hoard", 858, Rarity.RARE, mage.cards.d.DragonsHoard.class)); cards.add(new SetCardInfo("Dragonborn Looter", 65, Rarity.COMMON, mage.cards.d.DragonbornLooter.class)); cards.add(new SetCardInfo("Drakuseth, Maw of Flames", 790, Rarity.RARE, mage.cards.d.DrakusethMawOfFlames.class)); @@ -202,27 +275,45 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Drownyard Temple", 892, Rarity.RARE, mage.cards.d.DrownyardTemple.class)); cards.add(new SetCardInfo("Druid of the Emerald Grove", 226, Rarity.COMMON, mage.cards.d.DruidOfTheEmeraldGrove.class)); cards.add(new SetCardInfo("Druidic Ritual", 227, Rarity.COMMON, mage.cards.d.DruidicRitual.class)); - cards.add(new SetCardInfo("Duke Ulder Ravengard", 272, Rarity.RARE, mage.cards.d.DukeUlderRavengard.class)); - cards.add(new SetCardInfo("Dungeon Delver", 67, Rarity.UNCOMMON, mage.cards.d.DungeonDelver.class)); + cards.add(new SetCardInfo("Duke Ulder Ravengard", 272, Rarity.RARE, mage.cards.d.DukeUlderRavengard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Duke Ulder Ravengard", 420, Rarity.RARE, mage.cards.d.DukeUlderRavengard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Duke Ulder Ravengard", 531, Rarity.RARE, mage.cards.d.DukeUlderRavengard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dungeon Delver", 483, Rarity.UNCOMMON, mage.cards.d.DungeonDelver.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dungeon Delver", 67, Rarity.UNCOMMON, mage.cards.d.DungeonDelver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dungeoneer's Pack", 312, Rarity.UNCOMMON, mage.cards.d.DungeoneersPack.class)); + //cards.add(new SetCardInfo("Durnan of the Yawning Portal", 635, Rarity.MYTHIC, mage.cards.d.DurnanOfTheYawningPortal.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Durnan of the Yawning Portal", 657, Rarity.MYTHIC, mage.cards.d.DurnanOfTheYawningPortal.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dusk // Dawn", 691, Rarity.RARE, mage.cards.d.DuskDawn.class)); cards.add(new SetCardInfo("Dusk Mangler", 751, Rarity.UNCOMMON, mage.cards.d.DuskMangler.class)); - cards.add(new SetCardInfo("Dynaheir, Invoker Adept", 273, Rarity.RARE, mage.cards.d.DynaheirInvokerAdept.class)); + cards.add(new SetCardInfo("Dynaheir, Invoker Adept", 273, Rarity.RARE, mage.cards.d.DynaheirInvokerAdept.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dynaheir, Invoker Adept", 421, Rarity.RARE, mage.cards.d.DynaheirInvokerAdept.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dynaheir, Invoker Adept", 532, Rarity.RARE, mage.cards.d.DynaheirInvokerAdept.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Earth Tremor", 171, Rarity.COMMON, mage.cards.e.EarthTremor.class)); - cards.add(new SetCardInfo("Earthquake Dragon", 228, Rarity.RARE, mage.cards.e.EarthquakeDragon.class)); + cards.add(new SetCardInfo("Earthquake Dragon", 228, Rarity.RARE, mage.cards.e.EarthquakeDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Earthquake Dragon", 588, Rarity.RARE, mage.cards.e.EarthquakeDragon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Eight-and-a-Half-Tails", 692, Rarity.RARE, mage.cards.e.EightAndAHalfTails.class)); - cards.add(new SetCardInfo("Elder Brain", 125, Rarity.RARE, mage.cards.e.ElderBrain.class)); - cards.add(new SetCardInfo("Eldritch Pact", 126, Rarity.RARE, mage.cards.e.EldritchPact.class)); - cards.add(new SetCardInfo("Ellyn Harbreeze, Busybody", 16, Rarity.UNCOMMON, mage.cards.e.EllynHarbreezeBusybody.class)); - cards.add(new SetCardInfo("Elminster", 274, Rarity.MYTHIC, mage.cards.e.Elminster.class)); - cards.add(new SetCardInfo("Elminster's Simulacrum", 68, Rarity.MYTHIC, mage.cards.e.ElminstersSimulacrum.class)); - cards.add(new SetCardInfo("Elturel Survivors", 172, Rarity.RARE, mage.cards.e.ElturelSurvivors.class)); + cards.add(new SetCardInfo("Elder Brain", 125, Rarity.RARE, mage.cards.e.ElderBrain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elder Brain", 573, Rarity.RARE, mage.cards.e.ElderBrain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elder Brain", 936, Rarity.RARE, mage.cards.e.ElderBrain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eldritch Pact", 126, Rarity.RARE, mage.cards.e.EldritchPact.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Eldritch Pact", 574, Rarity.RARE, mage.cards.e.EldritchPact.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ellyn Harbreeze, Busybody", 16, Rarity.UNCOMMON, mage.cards.e.EllynHarbreezeBusybody.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ellyn Harbreeze, Busybody", 377, Rarity.UNCOMMON, mage.cards.e.EllynHarbreezeBusybody.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ellyn Harbreeze, Busybody", 472, Rarity.UNCOMMON, mage.cards.e.EllynHarbreezeBusybody.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elminster", 274, Rarity.MYTHIC, mage.cards.e.Elminster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elminster", 362, Rarity.MYTHIC, mage.cards.e.Elminster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elminster's Simulacrum", 561, Rarity.MYTHIC, mage.cards.e.ElminstersSimulacrum.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elminster's Simulacrum", 68, Rarity.MYTHIC, mage.cards.e.ElminstersSimulacrum.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elturel Survivors", 172, Rarity.RARE, mage.cards.e.ElturelSurvivors.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elturel Survivors", 581, Rarity.RARE, mage.cards.e.ElturelSurvivors.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Embereth Shieldbreaker", 792, Rarity.UNCOMMON, mage.cards.e.EmberethShieldbreaker.class)); cards.add(new SetCardInfo("Emerald Dragon", 229, Rarity.UNCOMMON, mage.cards.e.EmeraldDragon.class)); - cards.add(new SetCardInfo("Endless Evil", 665, Rarity.RARE, mage.cards.e.EndlessEvil.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Endless Evil", 615, Rarity.RARE, mage.cards.e.EndlessEvil.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("End-Raze Forerunners", 822, Rarity.RARE, mage.cards.e.EndRazeForerunners.class)); - cards.add(new SetCardInfo("Erinis, Gloom Stalker", 230, Rarity.UNCOMMON, mage.cards.e.ErinisGloomStalker.class)); + cards.add(new SetCardInfo("Endless Evil", 615, Rarity.RARE, mage.cards.e.EndlessEvil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Endless Evil", 665, Rarity.RARE, mage.cards.e.EndlessEvil.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erinis, Gloom Stalker", 230, Rarity.UNCOMMON, mage.cards.e.ErinisGloomStalker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erinis, Gloom Stalker", 407, Rarity.UNCOMMON, mage.cards.e.ErinisGloomStalker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Erinis, Gloom Stalker", 515, Rarity.UNCOMMON, mage.cards.e.ErinisGloomStalker.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Escape to the Wilds", 843, Rarity.RARE, mage.cards.e.EscapeToTheWilds.class)); cards.add(new SetCardInfo("Etali, Primal Storm", 793, Rarity.RARE, mage.cards.e.EtaliPrimalStorm.class)); cards.add(new SetCardInfo("Ettercap", 231, Rarity.COMMON, mage.cards.e.Ettercap.class)); @@ -235,34 +326,56 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Ezuri's Predation", 824, Rarity.RARE, mage.cards.e.EzurisPredation.class)); cards.add(new SetCardInfo("Faceless One", 1, Rarity.SPECIAL, mage.cards.f.FacelessOne.class)); cards.add(new SetCardInfo("Fact or Fiction", 720, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); - cards.add(new SetCardInfo("Faldorn, Dread Wolf Herald", 647, Rarity.MYTHIC, mage.cards.f.FaldornDreadWolfHerald.class)); + cards.add(new SetCardInfo("Faldorn, Dread Wolf Herald", 641, Rarity.MYTHIC, mage.cards.f.FaldornDreadWolfHerald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Faldorn, Dread Wolf Herald", 647, Rarity.MYTHIC, mage.cards.f.FaldornDreadWolfHerald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Faldorn, Dread Wolf Herald", 932, Rarity.MYTHIC, mage.cards.f.FaldornDreadWolfHerald.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fang Dragon", 173, Rarity.COMMON, mage.cards.f.FangDragon.class)); - cards.add(new SetCardInfo("Far Traveler", 17, Rarity.UNCOMMON, mage.cards.f.FarTraveler.class)); + cards.add(new SetCardInfo("Far Traveler", 17, Rarity.UNCOMMON, mage.cards.f.FarTraveler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Far Traveler", 473, Rarity.UNCOMMON, mage.cards.f.FarTraveler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Feed the Swarm", 752, Rarity.COMMON, mage.cards.f.FeedTheSwarm.class)); cards.add(new SetCardInfo("Felisa, Fang of Silverquill", 845, Rarity.MYTHIC, mage.cards.f.FelisaFangOfSilverquill.class)); cards.add(new SetCardInfo("Fellwar Stone", 860, Rarity.UNCOMMON, mage.cards.f.FellwarStone.class)); cards.add(new SetCardInfo("Feywild Caretaker", 69, Rarity.UNCOMMON, mage.cards.f.FeywildCaretaker.class)); - cards.add(new SetCardInfo("Feywild Visitor", 70, Rarity.UNCOMMON, mage.cards.f.FeywildVisitor.class)); - cards.add(new SetCardInfo("Firbolg Flutist", 174, Rarity.RARE, mage.cards.f.FirbolgFlutist.class)); - cards.add(new SetCardInfo("Fire Diamond", 313, Rarity.COMMON, mage.cards.f.FireDiamond.class)); - cards.add(new SetCardInfo("Fireball", 175, Rarity.UNCOMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Feywild Visitor", 484, Rarity.UNCOMMON, mage.cards.f.FeywildVisitor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feywild Visitor", 70, Rarity.UNCOMMON, mage.cards.f.FeywildVisitor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firbolg Flutist", 174, Rarity.RARE, mage.cards.f.FirbolgFlutist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firbolg Flutist", 582, Rarity.RARE, mage.cards.f.FirbolgFlutist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fire Diamond", 313, Rarity.COMMON, mage.cards.f.FireDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fire Diamond", 445, Rarity.COMMON, mage.cards.f.FireDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireball", 175, Rarity.UNCOMMON, mage.cards.f.Fireball.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fireball", 397, Rarity.UNCOMMON, mage.cards.f.Fireball.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Firja's Retribution", 846, Rarity.RARE, mage.cards.f.FirjasRetribution.class)); - cards.add(new SetCardInfo("Firkraag, Cunning Instigator", 648, Rarity.MYTHIC, mage.cards.f.FirkraagCunningInstigator.class)); + cards.add(new SetCardInfo("Firkraag, Cunning Instigator", 642, Rarity.MYTHIC, mage.cards.f.FirkraagCunningInstigator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firkraag, Cunning Instigator", 648, Rarity.MYTHIC, mage.cards.f.FirkraagCunningInstigator.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Firkraag, Cunning Instigator", 933, Rarity.MYTHIC, mage.cards.f.FirkraagCunningInstigator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Flaming Fist Officer", 19, Rarity.COMMON, mage.cards.f.FlamingFistOfficer.class)); - cards.add(new SetCardInfo("Flaming Fist", 18, Rarity.COMMON, mage.cards.f.FlamingFist.class)); - cards.add(new SetCardInfo("Folk Hero", 650, Rarity.MYTHIC, mage.cards.f.FolkHero.class)); - cards.add(new SetCardInfo("Font of Magic", 71, Rarity.MYTHIC, mage.cards.f.FontOfMagic.class)); + cards.add(new SetCardInfo("Flaming Fist", 18, Rarity.COMMON, mage.cards.f.FlamingFist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Flaming Fist", 474, Rarity.COMMON, mage.cards.f.FlamingFist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Folk Hero", 608, Rarity.MYTHIC, mage.cards.f.FolkHero.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Folk Hero", 650, Rarity.MYTHIC, mage.cards.f.FolkHero.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Font of Magic", 562, Rarity.MYTHIC, mage.cards.f.FontOfMagic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Font of Magic", 71, Rarity.MYTHIC, mage.cards.f.FontOfMagic.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 467, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 468, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 469, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 470, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forgotten Creation", 721, Rarity.RARE, mage.cards.f.ForgottenCreation.class)); cards.add(new SetCardInfo("Fractured Sanity", 722, Rarity.RARE, mage.cards.f.FracturedSanity.class)); - cards.add(new SetCardInfo("Fraying Line", 314, Rarity.RARE, mage.cards.f.FrayingLine.class)); - cards.add(new SetCardInfo("From the Catacombs", 671, Rarity.RARE, mage.cards.f.FromTheCatacombs.class)); + cards.add(new SetCardInfo("Fraying Line", 314, Rarity.RARE, mage.cards.f.FrayingLine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fraying Line", 597, Rarity.RARE, mage.cards.f.FrayingLine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("From the Catacombs", 623, Rarity.RARE, mage.cards.f.FromTheCatacombs.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("From the Catacombs", 671, Rarity.RARE, mage.cards.f.FromTheCatacombs.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Frontline Medic", 693, Rarity.RARE, mage.cards.f.FrontlineMedic.class)); - cards.add(new SetCardInfo("Gale, Waterdeep Prodigy", 72, Rarity.RARE, mage.cards.g.GaleWaterdeepProdigy.class)); - cards.add(new SetCardInfo("Gale's Redirection", 73, Rarity.RARE, mage.cards.g.GalesRedirection.class)); + cards.add(new SetCardInfo("Gale's Redirection", 563, Rarity.RARE, mage.cards.g.GalesRedirection.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gale's Redirection", 73, Rarity.RARE, mage.cards.g.GalesRedirection.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gale, Waterdeep Prodigy", 383, Rarity.RARE, mage.cards.g.GaleWaterdeepProdigy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gale, Waterdeep Prodigy", 485, Rarity.RARE, mage.cards.g.GaleWaterdeepProdigy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gale, Waterdeep Prodigy", 72, Rarity.RARE, mage.cards.g.GaleWaterdeepProdigy.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Galepowder Mage", 694, Rarity.RARE, mage.cards.g.GalepowderMage.class)); cards.add(new SetCardInfo("Game Trail", 894, Rarity.RARE, mage.cards.g.GameTrail.class)); - cards.add(new SetCardInfo("Ganax, Astral Hunter", 176, Rarity.UNCOMMON, mage.cards.g.GanaxAstralHunter.class)); + cards.add(new SetCardInfo("Ganax, Astral Hunter", 176, Rarity.UNCOMMON, mage.cards.g.GanaxAstralHunter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ganax, Astral Hunter", 398, Rarity.UNCOMMON, mage.cards.g.GanaxAstralHunter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ganax, Astral Hunter", 504, Rarity.UNCOMMON, mage.cards.g.GanaxAstralHunter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gate Colossus", 315, Rarity.UNCOMMON, mage.cards.g.GateColossus.class)); cards.add(new SetCardInfo("Genasi Enforcers", 177, Rarity.COMMON, mage.cards.g.GenasiEnforcers.class)); cards.add(new SetCardInfo("Geode Golem", 316, Rarity.UNCOMMON, mage.cards.g.GeodeGolem.class)); @@ -272,35 +385,51 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Giant Ankheg", 233, Rarity.UNCOMMON, mage.cards.g.GiantAnkheg.class)); cards.add(new SetCardInfo("Githzerai Monk", 20, Rarity.UNCOMMON, mage.cards.g.GithzeraiMonk.class)); cards.add(new SetCardInfo("Glorious Protector", 695, Rarity.RARE, mage.cards.g.GloriousProtector.class)); - cards.add(new SetCardInfo("Gluntch, the Bestower", 275, Rarity.RARE, mage.cards.g.GluntchTheBestower.class)); + cards.add(new SetCardInfo("Gluntch, the Bestower", 275, Rarity.RARE, mage.cards.g.GluntchTheBestower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gluntch, the Bestower", 422, Rarity.RARE, mage.cards.g.GluntchTheBestower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gluntch, the Bestower", 533, Rarity.RARE, mage.cards.g.GluntchTheBestower.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gnoll War Band", 178, Rarity.UNCOMMON, mage.cards.g.GnollWarBand.class)); cards.add(new SetCardInfo("Goblin Spymaster", 795, Rarity.RARE, mage.cards.g.GoblinSpymaster.class)); - cards.add(new SetCardInfo("Goggles of Night", 74, Rarity.COMMON, mage.cards.g.GogglesOfNight.class)); + cards.add(new SetCardInfo("Goggles of Night", 384, Rarity.COMMON, mage.cards.g.GogglesOfNight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Goggles of Night", 74, Rarity.COMMON, mage.cards.g.GogglesOfNight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Goliath Paladin", 21, Rarity.COMMON, mage.cards.g.GoliathPaladin.class)); cards.add(new SetCardInfo("Gond Gate", 353, Rarity.UNCOMMON, mage.cards.g.GondGate.class)); cards.add(new SetCardInfo("Gonti, Lord of Luxury", 753, Rarity.RARE, mage.cards.g.GontiLordOfLuxury.class)); - cards.add(new SetCardInfo("Gorion, Wise Mentor", 276, Rarity.RARE, mage.cards.g.GorionWiseMentor.class)); + cards.add(new SetCardInfo("Gorion, Wise Mentor", 276, Rarity.RARE, mage.cards.g.GorionWiseMentor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorion, Wise Mentor", 423, Rarity.RARE, mage.cards.g.GorionWiseMentor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorion, Wise Mentor", 534, Rarity.RARE, mage.cards.g.GorionWiseMentor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gray Harbor Merfolk", 75, Rarity.COMMON, mage.cards.g.GrayHarborMerfolk.class)); cards.add(new SetCardInfo("Gray Slaad", 129, Rarity.COMMON, mage.cards.g.GraySlaad.class)); cards.add(new SetCardInfo("Grazilaxx, Illithid Scholar", 723, Rarity.RARE, mage.cards.g.GrazilaxxIllithidScholar.class)); cards.add(new SetCardInfo("Greater Gargadon", 796, Rarity.RARE, mage.cards.g.GreaterGargadon.class)); cards.add(new SetCardInfo("Greatsword of Tyr", 22, Rarity.COMMON, mage.cards.g.GreatswordOfTyr.class)); - cards.add(new SetCardInfo("Green Slime", 680, Rarity.RARE, mage.cards.g.GreenSlime.class)); + cards.add(new SetCardInfo("Green Slime", 636, Rarity.RARE, mage.cards.g.GreenSlime.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Green Slime", 680, Rarity.RARE, mage.cards.g.GreenSlime.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Grell Philosopher", 616, Rarity.RARE, mage.cards.g.GrellPhilosopher.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Grell Philosopher", 666, Rarity.RARE, mage.cards.g.GrellPhilosopher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grim Haruspex", 754, Rarity.RARE, mage.cards.g.GrimHaruspex.class)); cards.add(new SetCardInfo("Grim Hireling", 755, Rarity.RARE, mage.cards.g.GrimHireling.class)); cards.add(new SetCardInfo("Grumgully, the Generous", 847, Rarity.UNCOMMON, mage.cards.g.GrumgullyTheGenerous.class)); cards.add(new SetCardInfo("Gruul Turf", 895, Rarity.UNCOMMON, mage.cards.g.GruulTurf.class)); cards.add(new SetCardInfo("Guardian Naga", 23, Rarity.COMMON, mage.cards.g.GuardianNaga.class)); cards.add(new SetCardInfo("Guiding Bolt", 24, Rarity.COMMON, mage.cards.g.GuidingBolt.class)); - cards.add(new SetCardInfo("Guild Artisan", 179, Rarity.UNCOMMON, mage.cards.g.GuildArtisan.class)); + cards.add(new SetCardInfo("Guild Artisan", 179, Rarity.UNCOMMON, mage.cards.g.GuildArtisan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Guild Artisan", 505, Rarity.UNCOMMON, mage.cards.g.GuildArtisan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Guildsworn Prowler", 130, Rarity.COMMON, mage.cards.g.GuildswornProwler.class)); cards.add(new SetCardInfo("Guiltfeeder", 756, Rarity.RARE, mage.cards.g.Guiltfeeder.class)); - cards.add(new SetCardInfo("Gut, True Soul Zealot", 180, Rarity.UNCOMMON, mage.cards.g.GutTrueSoulZealot.class)); - cards.add(new SetCardInfo("Halsin, Emerald Archdruid", 234, Rarity.UNCOMMON, mage.cards.h.HalsinEmeraldArchdruid.class)); + cards.add(new SetCardInfo("Gut, True Soul Zealot", 180, Rarity.UNCOMMON, mage.cards.g.GutTrueSoulZealot.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gut, True Soul Zealot", 399, Rarity.UNCOMMON, mage.cards.g.GutTrueSoulZealot.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gut, True Soul Zealot", 506, Rarity.UNCOMMON, mage.cards.g.GutTrueSoulZealot.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Halsin, Emerald Archdruid", 234, Rarity.UNCOMMON, mage.cards.h.HalsinEmeraldArchdruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Halsin, Emerald Archdruid", 408, Rarity.UNCOMMON, mage.cards.h.HalsinEmeraldArchdruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Halsin, Emerald Archdruid", 516, Rarity.UNCOMMON, mage.cards.h.HalsinEmeraldArchdruid.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Hammers of Moradin", 25, Rarity.UNCOMMON, mage.cards.h.HammersOfMoradin.class)); - cards.add(new SetCardInfo("Hardy Outlander", 235, Rarity.UNCOMMON, mage.cards.h.HardyOutlander.class)); - cards.add(new SetCardInfo("Harper Recruiter", 659, Rarity.RARE, mage.cards.h.HarperRecruiter.class)); - cards.add(new SetCardInfo("Haunted One", 654, Rarity.MYTHIC, mage.cards.h.HauntedOne.class)); + cards.add(new SetCardInfo("Hardy Outlander", 235, Rarity.UNCOMMON, mage.cards.h.HardyOutlander.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Hardy Outlander", 517, Rarity.UNCOMMON, mage.cards.h.HardyOutlander.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Harper Recruiter", 609, Rarity.RARE, mage.cards.h.HarperRecruiter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Harper Recruiter", 659, Rarity.RARE, mage.cards.h.HarperRecruiter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Haunted One", 624, Rarity.MYTHIC, mage.cards.h.HauntedOne.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Haunted One", 654, Rarity.MYTHIC, mage.cards.h.HauntedOne.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Heap Gate", 354, Rarity.COMMON, mage.cards.h.HeapGate.class)); cards.add(new SetCardInfo("Hedron Archive", 861, Rarity.UNCOMMON, mage.cards.h.HedronArchive.class)); cards.add(new SetCardInfo("Herald's Horn", 862, Rarity.UNCOMMON, mage.cards.h.HeraldsHorn.class)); @@ -309,19 +438,23 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("High Priest of Penance", 848, Rarity.RARE, mage.cards.h.HighPriestOfPenance.class)); cards.add(new SetCardInfo("Highland Forest", 896, Rarity.COMMON, mage.cards.h.HighlandForest.class)); cards.add(new SetCardInfo("Hoarding Ogre", 181, Rarity.COMMON, mage.cards.h.HoardingOgre.class)); - cards.add(new SetCardInfo("Horn of Valhalla", 26, Rarity.RARE, mage.cards.h.HornOfValhalla.class)); + cards.add(new SetCardInfo("Horn of Valhalla", 26, Rarity.RARE, mage.cards.h.HornOfValhalla.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Horn of Valhalla", 555, Rarity.RARE, mage.cards.h.HornOfValhalla.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Hornet Queen", 825, Rarity.RARE, mage.cards.h.HornetQueen.class)); cards.add(new SetCardInfo("Hullbreaker Horror", 724, Rarity.RARE, mage.cards.h.HullbreakerHorror.class)); cards.add(new SetCardInfo("Hunted Horror", 758, Rarity.RARE, mage.cards.h.HuntedHorror.class)); cards.add(new SetCardInfo("Icewind Stalwart", 27, Rarity.COMMON, mage.cards.i.IcewindStalwart.class)); cards.add(new SetCardInfo("Ignite the Future", 797, Rarity.RARE, mage.cards.i.IgniteTheFuture.class)); - cards.add(new SetCardInfo("Illithid Harvester", 76, Rarity.RARE, mage.cards.i.IllithidHarvester.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Illithid Harvester", 564, Rarity.RARE, mage.cards.i.IllithidHarvester.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Imoen, Mystic Trickster", 77, Rarity.UNCOMMON, mage.cards.i.ImoenMysticTrickster.class)); + cards.add(new SetCardInfo("Illithid Harvester", 76, Rarity.RARE, mage.cards.i.IllithidHarvester.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Imoen, Mystic Trickster", 385, Rarity.UNCOMMON, mage.cards.i.ImoenMysticTrickster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Imoen, Mystic Trickster", 486, Rarity.UNCOMMON, mage.cards.i.ImoenMysticTrickster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Imoen, Mystic Trickster", 77, Rarity.UNCOMMON, mage.cards.i.ImoenMysticTrickster.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("In Garruk's Wake", 759, Rarity.RARE, mage.cards.i.InGarruksWake.class)); cards.add(new SetCardInfo("Ingenious Artillerist", 182, Rarity.COMMON, mage.cards.i.IngeniousArtillerist.class)); cards.add(new SetCardInfo("Inspired Tinkering", 183, Rarity.UNCOMMON, mage.cards.i.InspiredTinkering.class)); - cards.add(new SetCardInfo("Inspiring Leader", 28, Rarity.UNCOMMON, mage.cards.i.InspiringLeader.class)); + cards.add(new SetCardInfo("Inspiring Leader", 28, Rarity.UNCOMMON, mage.cards.i.InspiringLeader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Inspiring Leader", 475, Rarity.UNCOMMON, mage.cards.i.InspiringLeader.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Insufferable Balladeer", 184, Rarity.COMMON, mage.cards.i.InsufferableBalladeer.class)); cards.add(new SetCardInfo("Intellect Devourer", 132, Rarity.RARE, mage.cards.i.IntellectDevourer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Intellect Devourer", 575, Rarity.RARE, mage.cards.i.IntellectDevourer.class, NON_FULL_USE_VARIOUS)); @@ -329,141 +462,206 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Iron Mastiff", 317, Rarity.UNCOMMON, mage.cards.i.IronMastiff.class)); cards.add(new SetCardInfo("Irregular Cohort", 696, Rarity.COMMON, mage.cards.i.IrregularCohort.class)); cards.add(new SetCardInfo("Island", 455, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 456, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 457, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 458, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Izzet Boilerworks", 897, Rarity.UNCOMMON, mage.cards.i.IzzetBoilerworks.class)); cards.add(new SetCardInfo("Izzet Chemister", 798, Rarity.RARE, mage.cards.i.IzzetChemister.class)); cards.add(new SetCardInfo("Izzet Signet", 863, Rarity.COMMON, mage.cards.i.IzzetSignet.class)); cards.add(new SetCardInfo("Jade Orb of Dragonkind", 236, Rarity.COMMON, mage.cards.j.JadeOrbOfDragonkind.class)); - cards.add(new SetCardInfo("Jaheira's Respite", 238, Rarity.RARE, mage.cards.j.JaheirasRespite.class)); - cards.add(new SetCardInfo("Jaheira, Friend of the Forest", 237, Rarity.RARE, mage.cards.j.JaheiraFriendOfTheForest.class)); - cards.add(new SetCardInfo("Jan Jansen, Chaos Crafter", 277, Rarity.RARE, mage.cards.j.JanJansenChaosCrafter.class)); + cards.add(new SetCardInfo("Jaheira's Respite", 238, Rarity.RARE, mage.cards.j.JaheirasRespite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaheira's Respite", 589, Rarity.RARE, mage.cards.j.JaheirasRespite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaheira, Friend of the Forest", 237, Rarity.RARE, mage.cards.j.JaheiraFriendOfTheForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaheira, Friend of the Forest", 409, Rarity.RARE, mage.cards.j.JaheiraFriendOfTheForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jaheira, Friend of the Forest", 518, Rarity.RARE, mage.cards.j.JaheiraFriendOfTheForest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jan Jansen, Chaos Crafter", 277, Rarity.RARE, mage.cards.j.JanJansenChaosCrafter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jan Jansen, Chaos Crafter", 424, Rarity.RARE, mage.cards.j.JanJansenChaosCrafter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jan Jansen, Chaos Crafter", 535, Rarity.RARE, mage.cards.j.JanJansenChaosCrafter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Javelin of Lightning", 185, Rarity.COMMON, mage.cards.j.JavelinOfLightning.class)); cards.add(new SetCardInfo("Jazal Goldmane", 697, Rarity.MYTHIC, mage.cards.j.JazalGoldmane.class)); cards.add(new SetCardInfo("Jeska's Will", 799, Rarity.RARE, mage.cards.j.JeskasWill.class)); cards.add(new SetCardInfo("Jon Irenicus, Shattered One", 278, Rarity.RARE, mage.cards.j.JonIrenicusShatteredOne.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jon Irenicus, Shattered One", 425, Rarity.RARE, mage.cards.j.JonIrenicusShatteredOne.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Jon Irenicus, Shattered One", 536, Rarity.RARE, mage.cards.j.JonIrenicusShatteredOne.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Journey to the Lost City", 681, Rarity.RARE, mage.cards.j.JourneyToTheLostCity.class)); + cards.add(new SetCardInfo("Journey to the Lost City", 637, Rarity.RARE, mage.cards.j.JourneyToTheLostCity.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Journey to the Lost City", 681, Rarity.RARE, mage.cards.j.JourneyToTheLostCity.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Juvenile Mist Dragon", 79, Rarity.UNCOMMON, mage.cards.j.JuvenileMistDragon.class)); - cards.add(new SetCardInfo("Kagha, Shadow Archdruid", 279, Rarity.UNCOMMON, mage.cards.k.KaghaShadowArchdruid.class)); - cards.add(new SetCardInfo("Karlach, Fury of Avernus", 186, Rarity.MYTHIC, mage.cards.k.KarlachFuryOfAvernus.class)); + cards.add(new SetCardInfo("Kagha, Shadow Archdruid", 279, Rarity.UNCOMMON, mage.cards.k.KaghaShadowArchdruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kagha, Shadow Archdruid", 426, Rarity.UNCOMMON, mage.cards.k.KaghaShadowArchdruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kagha, Shadow Archdruid", 537, Rarity.UNCOMMON, mage.cards.k.KaghaShadowArchdruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karlach, Fury of Avernus", 186, Rarity.MYTHIC, mage.cards.k.KarlachFuryOfAvernus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karlach, Fury of Avernus", 400, Rarity.MYTHIC, mage.cards.k.KarlachFuryOfAvernus.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Karlach, Fury of Avernus", 507, Rarity.MYTHIC, mage.cards.k.KarlachFuryOfAvernus.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kazuul, Tyrant of the Cliffs", 800, Rarity.RARE, mage.cards.k.KazuulTyrantOfTheCliffs.class)); cards.add(new SetCardInfo("Keiga, the Tide Star", 725, Rarity.RARE, mage.cards.k.KeigaTheTideStar.class)); cards.add(new SetCardInfo("Kenku Artificer", 80, Rarity.COMMON, mage.cards.k.KenkuArtificer.class)); cards.add(new SetCardInfo("Kessig Wolf Run", 898, Rarity.RARE, mage.cards.k.KessigWolfRun.class)); cards.add(new SetCardInfo("Kher Keep", 899, Rarity.RARE, mage.cards.k.KherKeep.class)); - cards.add(new SetCardInfo("Kindred Discovery", 81, Rarity.RARE, mage.cards.k.KindredDiscovery.class)); + cards.add(new SetCardInfo("Kindred Discovery", 565, Rarity.RARE, mage.cards.k.KindredDiscovery.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kindred Discovery", 81, Rarity.RARE, mage.cards.k.KindredDiscovery.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kodama's Reach", 826, Rarity.COMMON, mage.cards.k.KodamasReach.class)); - cards.add(new SetCardInfo("Korlessa, Scale Singer", 280, Rarity.UNCOMMON, mage.cards.k.KorlessaScaleSinger.class)); + cards.add(new SetCardInfo("Korlessa, Scale Singer", 280, Rarity.UNCOMMON, mage.cards.k.KorlessaScaleSinger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Korlessa, Scale Singer", 427, Rarity.UNCOMMON, mage.cards.k.KorlessaScaleSinger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Korlessa, Scale Singer", 538, Rarity.UNCOMMON, mage.cards.k.KorlessaScaleSinger.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lae'zel's Acrobatics", 30, Rarity.RARE, mage.cards.l.LaezelsAcrobatics.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lae'zel's Acrobatics", 556, Rarity.RARE, mage.cards.l.LaezelsAcrobatics.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lae'zel, Vlaakith's Champion", 29, Rarity.RARE, mage.cards.l.LaezelVlaakithsChampion.class)); + cards.add(new SetCardInfo("Lae'zel, Vlaakith's Champion", 29, Rarity.RARE, mage.cards.l.LaezelVlaakithsChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lae'zel, Vlaakith's Champion", 378, Rarity.RARE, mage.cards.l.LaezelVlaakithsChampion.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lae'zel, Vlaakith's Champion", 476, Rarity.RARE, mage.cards.l.LaezelVlaakithsChampion.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Laelia, the Blade Reforged", 801, Rarity.RARE, mage.cards.l.LaeliaTheBladeReforged.class)); cards.add(new SetCardInfo("Lantern of Revealing", 318, Rarity.COMMON, mage.cards.l.LanternOfRevealing.class)); cards.add(new SetCardInfo("Lapis Orb of Dragonkind", 82, Rarity.COMMON, mage.cards.l.LapisOrbOfDragonkind.class)); - cards.add(new SetCardInfo("Legion Loyalty", 31, Rarity.MYTHIC, mage.cards.l.LegionLoyalty.class)); + cards.add(new SetCardInfo("Legion Loyalty", 31, Rarity.MYTHIC, mage.cards.l.LegionLoyalty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Legion Loyalty", 371, Rarity.MYTHIC, mage.cards.l.LegionLoyalty.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Leyline of Anticipation", 726, Rarity.RARE, mage.cards.l.LeylineOfAnticipation.class)); cards.add(new SetCardInfo("Light Up the Stage", 802, Rarity.UNCOMMON, mage.cards.l.LightUpTheStage.class)); - cards.add(new SetCardInfo("Lightning Bolt", 187, Rarity.COMMON, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Lightning Bolt", 187, Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lightning Bolt", 401, Rarity.COMMON, mage.cards.l.LightningBolt.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lightning Greaves", 864, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); - cards.add(new SetCardInfo("Livaan, Cultist of Tiamat", 188, Rarity.UNCOMMON, mage.cards.l.LivaanCultistOfTiamat.class)); - cards.add(new SetCardInfo("Loot Dispute", 677, Rarity.RARE, mage.cards.l.LootDispute.class)); + cards.add(new SetCardInfo("Livaan, Cultist of Tiamat", 188, Rarity.UNCOMMON, mage.cards.l.LivaanCultistOfTiamat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Livaan, Cultist of Tiamat", 402, Rarity.UNCOMMON, mage.cards.l.LivaanCultistOfTiamat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Livaan, Cultist of Tiamat", 508, Rarity.UNCOMMON, mage.cards.l.LivaanCultistOfTiamat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Loot Dispute", 631, Rarity.RARE, mage.cards.l.LootDispute.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Loot Dispute", 677, Rarity.RARE, mage.cards.l.LootDispute.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lovestruck Beast", 827, Rarity.RARE, mage.cards.l.LovestruckBeast.class)); - cards.add(new SetCardInfo("Lozhan, Dragons' Legacy", 281, Rarity.UNCOMMON, mage.cards.l.LozhanDragonsLegacy.class)); - cards.add(new SetCardInfo("Lulu, Loyal Hollyphant", 32, Rarity.UNCOMMON, mage.cards.l.LuluLoyalHollyphant.class)); + cards.add(new SetCardInfo("Lozhan, Dragons' Legacy", 281, Rarity.UNCOMMON, mage.cards.l.LozhanDragonsLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lozhan, Dragons' Legacy", 428, Rarity.UNCOMMON, mage.cards.l.LozhanDragonsLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lozhan, Dragons' Legacy", 539, Rarity.UNCOMMON, mage.cards.l.LozhanDragonsLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lulu, Loyal Hollyphant", 32, Rarity.UNCOMMON, mage.cards.l.LuluLoyalHollyphant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lulu, Loyal Hollyphant", 379, Rarity.UNCOMMON, mage.cards.l.LuluLoyalHollyphant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lulu, Loyal Hollyphant", 477, Rarity.UNCOMMON, mage.cards.l.LuluLoyalHollyphant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lurking Green Dragon", 239, Rarity.COMMON, mage.cards.l.LurkingGreenDragon.class)); - cards.add(new SetCardInfo("Luxury Suite", 355, Rarity.RARE, mage.cards.l.LuxurySuite.class)); + cards.add(new SetCardInfo("Luxury Suite", 355, Rarity.RARE, mage.cards.l.LuxurySuite.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Luxury Suite", 602, Rarity.RARE, mage.cards.l.LuxurySuite.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mage's Attendant", 698, Rarity.UNCOMMON, mage.cards.m.MagesAttendant.class)); cards.add(new SetCardInfo("Magus of the Balance", 699, Rarity.RARE, mage.cards.m.MagusOfTheBalance.class)); - cards.add(new SetCardInfo("Mahadi, Emporium Master", 282, Rarity.UNCOMMON, mage.cards.m.MahadiEmporiumMaster.class)); - cards.add(new SetCardInfo("Majestic Genesis", 240, Rarity.MYTHIC, mage.cards.m.MajesticGenesis.class)); + cards.add(new SetCardInfo("Mahadi, Emporium Master", 282, Rarity.UNCOMMON, mage.cards.m.MahadiEmporiumMaster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mahadi, Emporium Master", 429, Rarity.UNCOMMON, mage.cards.m.MahadiEmporiumMaster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mahadi, Emporium Master", 540, Rarity.UNCOMMON, mage.cards.m.MahadiEmporiumMaster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Majestic Genesis", 240, Rarity.MYTHIC, mage.cards.m.MajesticGenesis.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Majestic Genesis", 590, Rarity.MYTHIC, mage.cards.m.MajesticGenesis.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Malakir Blood-Priest", 760, Rarity.COMMON, mage.cards.m.MalakirBloodPriest.class)); cards.add(new SetCardInfo("Managorger Hydra", 828, Rarity.RARE, mage.cards.m.ManagorgerHydra.class)); cards.add(new SetCardInfo("Manifold Key", 319, Rarity.UNCOMMON, mage.cards.m.ManifoldKey.class)); cards.add(new SetCardInfo("Manor Gate", 356, Rarity.COMMON, mage.cards.m.ManorGate.class)); - cards.add(new SetCardInfo("Marble Diamond", 320, Rarity.COMMON, mage.cards.m.MarbleDiamond.class)); - cards.add(new SetCardInfo("Marching Duodrone", 321, Rarity.COMMON, mage.cards.m.MarchingDuodrone.class)); + cards.add(new SetCardInfo("Marble Diamond", 320, Rarity.COMMON, mage.cards.m.MarbleDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Marble Diamond", 446, Rarity.COMMON, mage.cards.m.MarbleDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Marching Duodrone", 321, Rarity.COMMON, mage.cards.m.MarchingDuodrone.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Marching Duodrone", 447, Rarity.COMMON, mage.cards.m.MarchingDuodrone.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mardu Strike Leader", 761, Rarity.RARE, mage.cards.m.MarduStrikeLeader.class)); cards.add(new SetCardInfo("Martial Impetus", 33, Rarity.COMMON, mage.cards.m.MartialImpetus.class)); cards.add(new SetCardInfo("Marut", 322, Rarity.COMMON, mage.cards.m.Marut.class)); cards.add(new SetCardInfo("Maskwood Nexus", 865, Rarity.RARE, mage.cards.m.MaskwoodNexus.class)); - cards.add(new SetCardInfo("Master Chef", 241, Rarity.COMMON, mage.cards.m.MasterChef.class)); + cards.add(new SetCardInfo("Master Chef", 241, Rarity.COMMON, mage.cards.m.MasterChef.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Master Chef", 519, Rarity.COMMON, mage.cards.m.MasterChef.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mazzy, Truesword Paladin", 283, Rarity.RARE, mage.cards.m.MazzyTrueswordPaladin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mazzy, Truesword Paladin", 430, Rarity.RARE, mage.cards.m.MazzyTrueswordPaladin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mazzy, Truesword Paladin", 541, Rarity.RARE, mage.cards.m.MazzyTrueswordPaladin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Memory Plunder", 849, Rarity.RARE, mage.cards.m.MemoryPlunder.class)); cards.add(new SetCardInfo("Meteor Golem", 323, Rarity.UNCOMMON, mage.cards.m.MeteorGolem.class)); cards.add(new SetCardInfo("Midnight Clock", 727, Rarity.RARE, mage.cards.m.MidnightClock.class)); - cards.add(new SetCardInfo("Mighty Servant of Leuk-o", 324, Rarity.RARE, mage.cards.m.MightyServantOfLeukO.class)); - cards.add(new SetCardInfo("Miirym, Sentinel Wyrm", 284, Rarity.RARE, mage.cards.m.MiirymSentinelWyrm.class)); + cards.add(new SetCardInfo("Mighty Servant of Leuk-o", 324, Rarity.RARE, mage.cards.m.MightyServantOfLeukO.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mighty Servant of Leuk-o", 598, Rarity.RARE, mage.cards.m.MightyServantOfLeukO.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Miirym, Sentinel Wyrm", 284, Rarity.RARE, mage.cards.m.MiirymSentinelWyrm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Miirym, Sentinel Wyrm", 431, Rarity.RARE, mage.cards.m.MiirymSentinelWyrm.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Miirym, Sentinel Wyrm", 542, Rarity.RARE, mage.cards.m.MiirymSentinelWyrm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mikaeus, the Lunarch", 700, Rarity.MYTHIC, mage.cards.m.MikaeusTheLunarch.class)); cards.add(new SetCardInfo("Mind Flayer", 728, Rarity.RARE, mage.cards.m.MindFlayer.class)); cards.add(new SetCardInfo("Mind Stone", 325, Rarity.UNCOMMON, mage.cards.m.MindStone.class)); cards.add(new SetCardInfo("Mindblade Render", 762, Rarity.RARE, mage.cards.m.MindbladeRender.class)); cards.add(new SetCardInfo("Mindcrank", 866, Rarity.UNCOMMON, mage.cards.m.Mindcrank.class)); cards.add(new SetCardInfo("Minimus Containment", 34, Rarity.COMMON, mage.cards.m.MinimusContainment.class)); - cards.add(new SetCardInfo("Minsc & Boo, Timeless Heroes", 285, Rarity.MYTHIC, mage.cards.m.MinscBooTimelessHeroes.class)); - cards.add(new SetCardInfo("Minthara, Merciless Soul", 286, Rarity.UNCOMMON, mage.cards.m.MintharaMercilessSoul.class)); + //cards.add(new SetCardInfo("Minsc & Boo, Timeless Heroes", 285, Rarity.MYTHIC, mage.cards.m.MinscAndBooTimelessHeroes.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Minsc & Boo, Timeless Heroes", 363, Rarity.MYTHIC, mage.cards.m.MinscAndBooTimelessHeroes.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Minthara, Merciless Soul", 286, Rarity.UNCOMMON, mage.cards.m.MintharaMercilessSoul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Minthara, Merciless Soul", 432, Rarity.UNCOMMON, mage.cards.m.MintharaMercilessSoul.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Minthara, Merciless Soul", 543, Rarity.UNCOMMON, mage.cards.m.MintharaMercilessSoul.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mirror Entity", 701, Rarity.RARE, mage.cards.m.MirrorEntity.class)); - cards.add(new SetCardInfo("Mirror of Life Trapping", 326, Rarity.RARE, mage.cards.m.MirrorOfLifeTrapping.class)); + cards.add(new SetCardInfo("Mirror of Life Trapping", 326, Rarity.RARE, mage.cards.m.MirrorOfLifeTrapping.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mirror of Life Trapping", 599, Rarity.RARE, mage.cards.m.MirrorOfLifeTrapping.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mizzium Mortars", 803, Rarity.RARE, mage.cards.m.MizziumMortars.class)); - cards.add(new SetCardInfo("Mocking Doppelganger", 667, Rarity.RARE, mage.cards.m.MockingDoppelganger.class)); + cards.add(new SetCardInfo("Mocking Doppelganger", 617, Rarity.RARE, mage.cards.m.MockingDoppelganger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mocking Doppelganger", 667, Rarity.RARE, mage.cards.m.MockingDoppelganger.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Modify Memory", 83, Rarity.UNCOMMON, mage.cards.m.ModifyMemory.class)); cards.add(new SetCardInfo("Mold Folk", 133, Rarity.COMMON, mage.cards.m.MoldFolk.class)); - cards.add(new SetCardInfo("Monster Manual", 242, Rarity.RARE, mage.cards.m.MonsterManual.class)); + cards.add(new SetCardInfo("Monster Manual", 242, Rarity.RARE, mage.cards.m.MonsterManual.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Monster Manual", 591, Rarity.RARE, mage.cards.m.MonsterManual.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Moonshae Pixie", 84, Rarity.UNCOMMON, mage.cards.m.MoonshaePixie.class)); - cards.add(new SetCardInfo("Morphic Pool", 357, Rarity.RARE, mage.cards.m.MorphicPool.class)); + cards.add(new SetCardInfo("Morphic Pool", 357, Rarity.RARE, mage.cards.m.MorphicPool.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Morphic Pool", 603, Rarity.RARE, mage.cards.m.MorphicPool.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mortuary Mire", 900, Rarity.COMMON, mage.cards.m.MortuaryMire.class)); - cards.add(new SetCardInfo("Moss Diamond", 327, Rarity.COMMON, mage.cards.m.MossDiamond.class)); + cards.add(new SetCardInfo("Moss Diamond", 327, Rarity.COMMON, mage.cards.m.MossDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Moss Diamond", 448, Rarity.COMMON, mage.cards.m.MossDiamond.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mossfire Valley", 901, Rarity.RARE, mage.cards.m.MossfireValley.class)); cards.add(new SetCardInfo("Mosswort Bridge", 902, Rarity.RARE, mage.cards.m.MosswortBridge.class)); cards.add(new SetCardInfo("Mother of Runes", 702, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class)); cards.add(new SetCardInfo("Mountain", 463, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Multiclass Baldric", 684, Rarity.RARE, mage.cards.m.MulticlassBaldric.class)); + cards.add(new SetCardInfo("Mountain", 464, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 465, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 466, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Multiclass Baldric", 644, Rarity.RARE, mage.cards.m.MulticlassBaldric.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Multiclass Baldric", 684, Rarity.RARE, mage.cards.m.MulticlassBaldric.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Murder", 134, Rarity.COMMON, mage.cards.m.Murder.class)); cards.add(new SetCardInfo("Mutavault", 903, Rarity.RARE, mage.cards.m.Mutavault.class)); cards.add(new SetCardInfo("Myconid Spore Tender", 243, Rarity.COMMON, mage.cards.m.MyconidSporeTender.class)); cards.add(new SetCardInfo("Myriad Landscape", 904, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class)); cards.add(new SetCardInfo("Myrkul's Edict", 135, Rarity.COMMON, mage.cards.m.MyrkulsEdict.class)); cards.add(new SetCardInfo("Myrkul's Invoker", 136, Rarity.COMMON, mage.cards.m.MyrkulsInvoker.class)); - cards.add(new SetCardInfo("Myrkul, Lord of Bones", 287, Rarity.RARE, mage.cards.m.MyrkulLordOfBones.class)); + cards.add(new SetCardInfo("Myrkul, Lord of Bones", 287, Rarity.RARE, mage.cards.m.MyrkulLordOfBones.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Myrkul, Lord of Bones", 433, Rarity.RARE, mage.cards.m.MyrkulLordOfBones.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Myrkul, Lord of Bones", 544, Rarity.RARE, mage.cards.m.MyrkulLordOfBones.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mystery Key", 85, Rarity.UNCOMMON, mage.cards.m.MysteryKey.class)); - cards.add(new SetCardInfo("Nalia de'Arnise", 649, Rarity.MYTHIC, mage.cards.n.NaliaDeArnise.class)); - cards.add(new SetCardInfo("Nalfeshnee", 678, Rarity.RARE, mage.cards.n.Nalfeshnee.class)); + cards.add(new SetCardInfo("Nalfeshnee", 632, Rarity.RARE, mage.cards.n.Nalfeshnee.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nalfeshnee", 678, Rarity.RARE, mage.cards.n.Nalfeshnee.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nalia de'Arnise", 643, Rarity.MYTHIC, mage.cards.n.NaliaDeArnise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nalia de'Arnise", 649, Rarity.MYTHIC, mage.cards.n.NaliaDeArnise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nalia de'Arnise", 934, Rarity.MYTHIC, mage.cards.n.NaliaDeArnise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Natural Reclamation", 829, Rarity.COMMON, mage.cards.n.NaturalReclamation.class)); cards.add(new SetCardInfo("Nature's Lore", 244, Rarity.COMMON, mage.cards.n.NaturesLore.class)); - cards.add(new SetCardInfo("Nautiloid Ship", 328, Rarity.MYTHIC, mage.cards.n.NautiloidShip.class)); + cards.add(new SetCardInfo("Nautiloid Ship", 328, Rarity.MYTHIC, mage.cards.n.NautiloidShip.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nautiloid Ship", 373, Rarity.MYTHIC, mage.cards.n.NautiloidShip.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Navigation Orb", 329, Rarity.COMMON, mage.cards.n.NavigationOrb.class)); - cards.add(new SetCardInfo("Neera, Wild Mage", 288, Rarity.RARE, mage.cards.n.NeeraWildMage.class)); + cards.add(new SetCardInfo("Neera, Wild Mage", 288, Rarity.RARE, mage.cards.n.NeeraWildMage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Neera, Wild Mage", 434, Rarity.RARE, mage.cards.n.NeeraWildMage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Neera, Wild Mage", 545, Rarity.RARE, mage.cards.n.NeeraWildMage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nefarious Imp", 137, Rarity.COMMON, mage.cards.n.NefariousImp.class)); - cards.add(new SetCardInfo("Nemesis Phoenix", 189, Rarity.UNCOMMON, mage.cards.n.NemesisPhoenix.class)); cards.add(new SetCardInfo("Nemesis of Reason", 850, Rarity.RARE, mage.cards.n.NemesisOfReason.class)); + cards.add(new SetCardInfo("Nemesis Phoenix", 189, Rarity.UNCOMMON, mage.cards.n.NemesisPhoenix.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nemesis Phoenix", 403, Rarity.UNCOMMON, mage.cards.n.NemesisPhoenix.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nephalia Drownyard", 905, Rarity.RARE, mage.cards.n.NephaliaDrownyard.class)); cards.add(new SetCardInfo("Nighthawk Scavenger", 763, Rarity.RARE, mage.cards.n.NighthawkScavenger.class)); cards.add(new SetCardInfo("Nighthowler", 764, Rarity.RARE, mage.cards.n.Nighthowler.class)); cards.add(new SetCardInfo("Nihilith", 765, Rarity.RARE, mage.cards.n.Nihilith.class)); cards.add(new SetCardInfo("Nimbleclaw Adept", 86, Rarity.COMMON, mage.cards.n.NimbleclawAdept.class)); cards.add(new SetCardInfo("Nimblewright Schematic", 330, Rarity.COMMON, mage.cards.n.NimblewrightSchematic.class)); - cards.add(new SetCardInfo("Nine-Fingers Keene", 289, Rarity.RARE, mage.cards.n.NineFingersKeene.class)); + cards.add(new SetCardInfo("Nine-Fingers Keene", 289, Rarity.RARE, mage.cards.n.NineFingersKeene.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nine-Fingers Keene", 435, Rarity.RARE, mage.cards.n.NineFingersKeene.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nine-Fingers Keene", 546, Rarity.RARE, mage.cards.n.NineFingersKeene.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Niv-Mizzet, Parun", 851, Rarity.RARE, mage.cards.n.NivMizzetParun.class)); - cards.add(new SetCardInfo("Noble Heritage", 35, Rarity.RARE, mage.cards.n.NobleHeritage.class)); + cards.add(new SetCardInfo("Noble Heritage", 35, Rarity.RARE, mage.cards.n.NobleHeritage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noble Heritage", 478, Rarity.RARE, mage.cards.n.NobleHeritage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Noble's Purse", 331, Rarity.UNCOMMON, mage.cards.n.NoblesPurse.class)); cards.add(new SetCardInfo("Nothic", 138, Rarity.UNCOMMON, mage.cards.n.Nothic.class)); cards.add(new SetCardInfo("Oceanus Dragon", 87, Rarity.COMMON, mage.cards.o.OceanusDragon.class)); - cards.add(new SetCardInfo("Oji, the Exquisite Blade", 290, Rarity.UNCOMMON, mage.cards.o.OjiTheExquisiteBlade.class)); + cards.add(new SetCardInfo("Oji, the Exquisite Blade", 290, Rarity.UNCOMMON, mage.cards.o.OjiTheExquisiteBlade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oji, the Exquisite Blade", 436, Rarity.UNCOMMON, mage.cards.o.OjiTheExquisiteBlade.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Oji, the Exquisite Blade", 547, Rarity.UNCOMMON, mage.cards.o.OjiTheExquisiteBlade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Order of Whiteclay", 703, Rarity.RARE, mage.cards.o.OrderOfWhiteclay.class)); cards.add(new SetCardInfo("Orzhov Basilica", 906, Rarity.UNCOMMON, mage.cards.o.OrzhovBasilica.class)); cards.add(new SetCardInfo("Orzhov Signet", 867, Rarity.COMMON, mage.cards.o.OrzhovSignet.class)); cards.add(new SetCardInfo("Outpost Siege", 804, Rarity.RARE, mage.cards.o.OutpostSiege.class)); cards.add(new SetCardInfo("Overcharged Amalgam", 729, Rarity.RARE, mage.cards.o.OverchargedAmalgam.class)); cards.add(new SetCardInfo("Overwhelming Encounter", 245, Rarity.UNCOMMON, mage.cards.o.OverwhelmingEncounter.class)); - cards.add(new SetCardInfo("Owlbear Cub", 246, Rarity.RARE, mage.cards.o.OwlbearCub.class)); + cards.add(new SetCardInfo("Owlbear Cub", 246, Rarity.RARE, mage.cards.o.OwlbearCub.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Owlbear Cub", 592, Rarity.RARE, mage.cards.o.OwlbearCub.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Owlbear Shepherd", 247, Rarity.UNCOMMON, mage.cards.o.OwlbearShepherd.class)); cards.add(new SetCardInfo("Pack Attack", 190, Rarity.COMMON, mage.cards.p.PackAttack.class)); cards.add(new SetCardInfo("Pact Weapon", 139, Rarity.MYTHIC, mage.cards.p.PactWeapon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Pact Weapon", 576, Rarity.MYTHIC, mage.cards.p.PactWeapon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Parasitic Impetus", 140, Rarity.COMMON, mage.cards.p.ParasiticImpetus.class)); cards.add(new SetCardInfo("Passageway Seer", 141, Rarity.UNCOMMON, mage.cards.p.PassagewaySeer.class)); - cards.add(new SetCardInfo("Passionate Archaeologist", 656, Rarity.MYTHIC, mage.cards.p.PassionateArchaeologist.class)); + cards.add(new SetCardInfo("Passionate Archaeologist", 633, Rarity.MYTHIC, mage.cards.p.PassionateArchaeologist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Passionate Archaeologist", 656, Rarity.MYTHIC, mage.cards.p.PassionateArchaeologist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Path of Ancestry", 907, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); cards.add(new SetCardInfo("Patriar's Seal", 332, Rarity.UNCOMMON, mage.cards.p.PatriarsSeal.class)); cards.add(new SetCardInfo("Patron of the Arts", 191, Rarity.COMMON, mage.cards.p.PatronOfTheArts.class)); @@ -473,9 +671,13 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Pilgrim's Eye", 333, Rarity.COMMON, mage.cards.p.PilgrimsEye.class)); cards.add(new SetCardInfo("Plague Spitter", 767, Rarity.UNCOMMON, mage.cards.p.PlagueSpitter.class)); cards.add(new SetCardInfo("Plains", 451, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 452, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 453, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 454, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Poison the Blade", 248, Rarity.COMMON, mage.cards.p.PoisonTheBlade.class)); cards.add(new SetCardInfo("Pontiff of Blight", 768, Rarity.RARE, mage.cards.p.PontiffOfBlight.class)); - cards.add(new SetCardInfo("Popular Entertainer", 192, Rarity.RARE, mage.cards.p.PopularEntertainer.class)); + cards.add(new SetCardInfo("Popular Entertainer", 192, Rarity.RARE, mage.cards.p.PopularEntertainer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Popular Entertainer", 509, Rarity.RARE, mage.cards.p.PopularEntertainer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Port of Karfell", 908, Rarity.UNCOMMON, mage.cards.p.PortOfKarfell.class)); cards.add(new SetCardInfo("Predatory Impetus", 249, Rarity.COMMON, mage.cards.p.PredatoryImpetus.class)); cards.add(new SetCardInfo("Priest of Ancient Lore", 704, Rarity.COMMON, mage.cards.p.PriestOfAncientLore.class)); @@ -485,31 +687,46 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Propaganda", 730, Rarity.UNCOMMON, mage.cards.p.Propaganda.class)); cards.add(new SetCardInfo("Prophetic Prism", 335, Rarity.COMMON, mage.cards.p.PropheticPrism.class)); cards.add(new SetCardInfo("Pseudodragon Familiar", 88, Rarity.COMMON, mage.cards.p.PseudodragonFamiliar.class)); - cards.add(new SetCardInfo("Psionic Ritual", 668, Rarity.RARE, mage.cards.p.PsionicRitual.class)); + cards.add(new SetCardInfo("Psionic Ritual", 618, Rarity.RARE, mage.cards.p.PsionicRitual.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Psionic Ritual", 668, Rarity.RARE, mage.cards.p.PsionicRitual.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Psychic Impetus", 89, Rarity.COMMON, mage.cards.p.PsychicImpetus.class)); cards.add(new SetCardInfo("Psychosis Crawler", 869, Rarity.RARE, mage.cards.p.PsychosisCrawler.class)); cards.add(new SetCardInfo("Pull from Tomorrow", 731, Rarity.RARE, mage.cards.p.PullFromTomorrow.class)); cards.add(new SetCardInfo("Puppeteer Clique", 769, Rarity.RARE, mage.cards.p.PuppeteerClique.class)); cards.add(new SetCardInfo("Pursued Whale", 732, Rarity.RARE, mage.cards.p.PursuedWhale.class)); - cards.add(new SetCardInfo("Raggadragga, Goreguts Boss", 291, Rarity.RARE, mage.cards.r.RaggadraggaGoregutsBoss.class)); + cards.add(new SetCardInfo("Raggadragga, Goreguts Boss", 291, Rarity.RARE, mage.cards.r.RaggadraggaGoregutsBoss.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raggadragga, Goreguts Boss", 437, Rarity.RARE, mage.cards.r.RaggadraggaGoregutsBoss.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raggadragga, Goreguts Boss", 548, Rarity.RARE, mage.cards.r.RaggadraggaGoregutsBoss.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Raging Ravine", 910, Rarity.RARE, mage.cards.r.RagingRavine.class)); - cards.add(new SetCardInfo("Raised by Giants", 250, Rarity.RARE, mage.cards.r.RaisedByGiants.class)); - cards.add(new SetCardInfo("Raphael, Fiendish Savior", 292, Rarity.RARE, mage.cards.r.RaphaelFiendishSavior.class)); - cards.add(new SetCardInfo("Rasaad yn Bashir", 37, Rarity.UNCOMMON, mage.cards.r.RasaadYnBashir.class)); - cards.add(new SetCardInfo("Ravenloft Adventurer", 142, Rarity.RARE, mage.cards.r.RavenloftAdventurer.class)); + cards.add(new SetCardInfo("Raised by Giants", 250, Rarity.RARE, mage.cards.r.RaisedByGiants.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raised by Giants", 520, Rarity.RARE, mage.cards.r.RaisedByGiants.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raphael, Fiendish Savior", 292, Rarity.RARE, mage.cards.r.RaphaelFiendishSavior.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raphael, Fiendish Savior", 438, Rarity.RARE, mage.cards.r.RaphaelFiendishSavior.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Raphael, Fiendish Savior", 549, Rarity.RARE, mage.cards.r.RaphaelFiendishSavior.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rasaad yn Bashir", 37, Rarity.UNCOMMON, mage.cards.r.RasaadYnBashir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rasaad yn Bashir", 380, Rarity.UNCOMMON, mage.cards.r.RasaadYnBashir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rasaad yn Bashir", 479, Rarity.UNCOMMON, mage.cards.r.RasaadYnBashir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ravenloft Adventurer", 142, Rarity.RARE, mage.cards.r.RavenloftAdventurer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ravenloft Adventurer", 577, Rarity.RARE, mage.cards.r.RavenloftAdventurer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ravenous Chupacabra", 770, Rarity.UNCOMMON, mage.cards.r.RavenousChupacabra.class)); cards.add(new SetCardInfo("Reckless Barbarian", 193, Rarity.COMMON, mage.cards.r.RecklessBarbarian.class)); cards.add(new SetCardInfo("Recruitment Drive", 38, Rarity.COMMON, mage.cards.r.RecruitmentDrive.class)); - cards.add(new SetCardInfo("Reflecting Pool", 358, Rarity.RARE, mage.cards.r.ReflectingPool.class)); + cards.add(new SetCardInfo("Reflecting Pool", 358, Rarity.RARE, mage.cards.r.ReflectingPool.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reflecting Pool", 604, Rarity.RARE, mage.cards.r.ReflectingPool.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Reflections of Littjara", 733, Rarity.RARE, mage.cards.r.ReflectionsOfLittjara.class)); cards.add(new SetCardInfo("Reins of Power", 734, Rarity.RARE, mage.cards.r.ReinsOfPower.class)); cards.add(new SetCardInfo("Reliquary Tower", 911, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); - cards.add(new SetCardInfo("Renari, Merchant of Marvels", 90, Rarity.UNCOMMON, mage.cards.r.RenariMerchantOfMarvels.class)); + cards.add(new SetCardInfo("Renari, Merchant of Marvels", 386, Rarity.UNCOMMON, mage.cards.r.RenariMerchantOfMarvels.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Renari, Merchant of Marvels", 487, Rarity.UNCOMMON, mage.cards.r.RenariMerchantOfMarvels.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Renari, Merchant of Marvels", 90, Rarity.UNCOMMON, mage.cards.r.RenariMerchantOfMarvels.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Rescuer Chwinga", 39, Rarity.UNCOMMON, mage.cards.r.RescuerChwinga.class)); cards.add(new SetCardInfo("Return of the Wildspeaker", 831, Rarity.RARE, mage.cards.r.ReturnOfTheWildspeaker.class)); - cards.add(new SetCardInfo("Rilsa Rael, Kingpin", 293, Rarity.UNCOMMON, mage.cards.r.RilsaRaelKingpin.class)); + cards.add(new SetCardInfo("Rilsa Rael, Kingpin", 293, Rarity.UNCOMMON, mage.cards.r.RilsaRaelKingpin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rilsa Rael, Kingpin", 439, Rarity.UNCOMMON, mage.cards.r.RilsaRaelKingpin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rilsa Rael, Kingpin", 550, Rarity.UNCOMMON, mage.cards.r.RilsaRaelKingpin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("River of Tears", 912, Rarity.RARE, mage.cards.r.RiverOfTears.class)); - cards.add(new SetCardInfo("Robe of the Archmagi", 91, Rarity.RARE, mage.cards.r.RobeOfTheArchmagi.class)); + cards.add(new SetCardInfo("Robe of the Archmagi", 566, Rarity.RARE, mage.cards.r.RobeOfTheArchmagi.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Robe of the Archmagi", 91, Rarity.RARE, mage.cards.r.RobeOfTheArchmagi.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Rogue's Passage", 913, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class)); cards.add(new SetCardInfo("Roving Harper", 40, Rarity.COMMON, mage.cards.r.RovingHarper.class)); cards.add(new SetCardInfo("Rowan Kenrith", 805, Rarity.MYTHIC, mage.cards.r.RowanKenrith.class)); @@ -518,73 +735,101 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Run Away Together", 92, Rarity.COMMON, mage.cards.r.RunAwayTogether.class)); cards.add(new SetCardInfo("Ryusei, the Falling Star", 806, Rarity.RARE, mage.cards.r.RyuseiTheFallingStar.class)); cards.add(new SetCardInfo("Saddle of the Cavalier", 251, Rarity.UNCOMMON, mage.cards.s.SaddleOfTheCavalier.class)); - cards.add(new SetCardInfo("Safana, Calimport Cutthroat", 143, Rarity.UNCOMMON, mage.cards.s.SafanaCalimportCutthroat.class)); + cards.add(new SetCardInfo("Safana, Calimport Cutthroat", 143, Rarity.UNCOMMON, mage.cards.s.SafanaCalimportCutthroat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Safana, Calimport Cutthroat", 390, Rarity.UNCOMMON, mage.cards.s.SafanaCalimportCutthroat.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Safana, Calimport Cutthroat", 496, Rarity.UNCOMMON, mage.cards.s.SafanaCalimportCutthroat.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sailors' Bane", 93, Rarity.UNCOMMON, mage.cards.s.SailorsBane.class)); cards.add(new SetCardInfo("Sakura-Tribe Elder", 832, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class)); cards.add(new SetCardInfo("Sandwurm Convergence", 833, Rarity.RARE, mage.cards.s.SandwurmConvergence.class)); cards.add(new SetCardInfo("Sapphire Dragon", 94, Rarity.UNCOMMON, mage.cards.s.SapphireDragon.class)); - cards.add(new SetCardInfo("Sarevok's Tome", 685, Rarity.RARE, mage.cards.s.SarevoksTome.class)); - cards.add(new SetCardInfo("Sarevok, Deathbringer", 144, Rarity.UNCOMMON, mage.cards.s.SarevokDeathbringer.class)); + cards.add(new SetCardInfo("Sarevok's Tome", 645, Rarity.RARE, mage.cards.s.SarevoksTome.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarevok's Tome", 685, Rarity.RARE, mage.cards.s.SarevoksTome.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarevok, Deathbringer", 144, Rarity.UNCOMMON, mage.cards.s.SarevokDeathbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarevok, Deathbringer", 391, Rarity.UNCOMMON, mage.cards.s.SarevokDeathbringer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sarevok, Deathbringer", 497, Rarity.UNCOMMON, mage.cards.s.SarevokDeathbringer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Scaled Nurturer", 252, Rarity.COMMON, mage.cards.s.ScaledNurturer.class)); - cards.add(new SetCardInfo("Scion of Halaster", 145, Rarity.COMMON, mage.cards.s.ScionOfHalaster.class)); + cards.add(new SetCardInfo("Scion of Halaster", 145, Rarity.COMMON, mage.cards.s.ScionOfHalaster.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scion of Halaster", 498, Rarity.COMMON, mage.cards.s.ScionOfHalaster.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Scouting Hawk", 41, Rarity.COMMON, mage.cards.s.ScoutingHawk.class)); - cards.add(new SetCardInfo("Sculpted Sunburst", 42, Rarity.RARE, mage.cards.s.SculptedSunburst.class)); + cards.add(new SetCardInfo("Sculpted Sunburst", 42, Rarity.RARE, mage.cards.s.SculptedSunburst.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sculpted Sunburst", 557, Rarity.RARE, mage.cards.s.SculptedSunburst.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sea Gate", 359, Rarity.COMMON, mage.cards.s.SeaGate.class)); cards.add(new SetCardInfo("Sea Hag", 95, Rarity.COMMON, mage.cards.s.SeaHag.class)); - cards.add(new SetCardInfo("Sea of Clouds", 360, Rarity.RARE, mage.cards.s.SeaOfClouds.class)); + cards.add(new SetCardInfo("Sea of Clouds", 360, Rarity.RARE, mage.cards.s.SeaOfClouds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sea of Clouds", 605, Rarity.RARE, mage.cards.s.SeaOfClouds.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Search for Tomorrow", 834, Rarity.COMMON, mage.cards.s.SearchForTomorrow.class)); - cards.add(new SetCardInfo("Seasoned Dungeoneer", 660, Rarity.RARE, mage.cards.s.SeasonedDungeoneer.class)); + cards.add(new SetCardInfo("Seasoned Dungeoneer", 610, Rarity.RARE, mage.cards.s.SeasonedDungeoneer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Seasoned Dungeoneer", 660, Rarity.RARE, mage.cards.s.SeasonedDungeoneer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Selfless Spirit", 706, Rarity.RARE, mage.cards.s.SelflessSpirit.class)); cards.add(new SetCardInfo("Sevinne's Reclamation", 707, Rarity.RARE, mage.cards.s.SevinnesReclamation.class)); cards.add(new SetCardInfo("Sewer Nemesis", 771, Rarity.RARE, mage.cards.s.SewerNemesis.class)); - cards.add(new SetCardInfo("Shadowheart, Dark Justiciar", 146, Rarity.RARE, mage.cards.s.ShadowheartDarkJusticiar.class)); + cards.add(new SetCardInfo("Shadowheart, Dark Justiciar", 146, Rarity.RARE, mage.cards.s.ShadowheartDarkJusticiar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shadowheart, Dark Justiciar", 392, Rarity.RARE, mage.cards.s.ShadowheartDarkJusticiar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shadowheart, Dark Justiciar", 499, Rarity.RARE, mage.cards.s.ShadowheartDarkJusticiar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Shambling Vent", 914, Rarity.RARE, mage.cards.s.ShamblingVent.class)); - cards.add(new SetCardInfo("Shameless Charlatan", 96, Rarity.RARE, mage.cards.s.ShamelessCharlatan.class)); + cards.add(new SetCardInfo("Shameless Charlatan", 488, Rarity.RARE, mage.cards.s.ShamelessCharlatan.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Shameless Charlatan", 96, Rarity.RARE, mage.cards.s.ShamelessCharlatan.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sharpshooter Elf", 253, Rarity.UNCOMMON, mage.cards.s.SharpshooterElf.class)); cards.add(new SetCardInfo("Shiny Impetus", 194, Rarity.COMMON, mage.cards.s.ShinyImpetus.class)); cards.add(new SetCardInfo("Sigil of Myrkul", 147, Rarity.UNCOMMON, mage.cards.s.SigilOfMyrkul.class)); cards.add(new SetCardInfo("Silvanus's Invoker", 254, Rarity.COMMON, mage.cards.s.SilvanussInvoker.class)); - cards.add(new SetCardInfo("Sivriss, Nightmare Speaker", 148, Rarity.UNCOMMON, mage.cards.s.SivrissNightmareSpeaker.class)); - cards.add(new SetCardInfo("Skanos Dragonheart", 255, Rarity.UNCOMMON, mage.cards.s.SkanosDragonheart.class)); + cards.add(new SetCardInfo("Sivriss, Nightmare Speaker", 148, Rarity.UNCOMMON, mage.cards.s.SivrissNightmareSpeaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sivriss, Nightmare Speaker", 393, Rarity.UNCOMMON, mage.cards.s.SivrissNightmareSpeaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sivriss, Nightmare Speaker", 500, Rarity.UNCOMMON, mage.cards.s.SivrissNightmareSpeaker.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skanos Dragonheart", 255, Rarity.UNCOMMON, mage.cards.s.SkanosDragonheart.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skanos Dragonheart", 410, Rarity.UNCOMMON, mage.cards.s.SkanosDragonheart.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Skanos Dragonheart", 521, Rarity.UNCOMMON, mage.cards.s.SkanosDragonheart.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Skullclamp", 870, Rarity.UNCOMMON, mage.cards.s.Skullclamp.class)); cards.add(new SetCardInfo("Skullport Merchant", 149, Rarity.UNCOMMON, mage.cards.s.SkullportMerchant.class)); cards.add(new SetCardInfo("Skullwinder", 256, Rarity.UNCOMMON, mage.cards.s.Skullwinder.class)); - cards.add(new SetCardInfo("Sky Diamond", 337, Rarity.COMMON, mage.cards.s.SkyDiamond.class)); + cards.add(new SetCardInfo("Sky Diamond", 337, Rarity.COMMON, mage.cards.s.SkyDiamond.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sky Diamond", 449, Rarity.COMMON, mage.cards.s.SkyDiamond.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Slaughter the Strong", 43, Rarity.UNCOMMON, mage.cards.s.SlaughterTheStrong.class)); cards.add(new SetCardInfo("Sludge Monster", 735, Rarity.RARE, mage.cards.s.SludgeMonster.class)); cards.add(new SetCardInfo("Sly Instigator", 736, Rarity.RARE, mage.cards.s.SlyInstigator.class)); cards.add(new SetCardInfo("Snowfield Sinkhole", 915, Rarity.COMMON, mage.cards.s.SnowfieldSinkhole.class)); cards.add(new SetCardInfo("Sol Ring", 871, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); - cards.add(new SetCardInfo("Solemn Doomguide", 672, Rarity.RARE, mage.cards.s.SolemnDoomguide.class)); + cards.add(new SetCardInfo("Solemn Doomguide", 625, Rarity.RARE, mage.cards.s.SolemnDoomguide.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Solemn Doomguide", 672, Rarity.RARE, mage.cards.s.SolemnDoomguide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Solemn Recruit", 708, Rarity.RARE, mage.cards.s.SolemnRecruit.class)); cards.add(new SetCardInfo("Solemn Simulacrum", 872, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); - cards.add(new SetCardInfo("Spectacular Showdown", 679, Rarity.RARE, mage.cards.s.SpectacularShowdown.class)); + cards.add(new SetCardInfo("Spectacular Showdown", 634, Rarity.RARE, mage.cards.s.SpectacularShowdown.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spectacular Showdown", 679, Rarity.RARE, mage.cards.s.SpectacularShowdown.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Spellskite", 873, Rarity.RARE, mage.cards.s.Spellskite.class)); cards.add(new SetCardInfo("Spinerock Knoll", 916, Rarity.RARE, mage.cards.s.SpinerockKnoll.class)); - cards.add(new SetCardInfo("Spire Garden", 361, Rarity.RARE, mage.cards.s.SpireGarden.class)); + cards.add(new SetCardInfo("Spire Garden", 361, Rarity.RARE, mage.cards.s.SpireGarden.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Spire Garden", 606, Rarity.RARE, mage.cards.s.SpireGarden.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Split the Spoils", 257, Rarity.UNCOMMON, mage.cards.s.SplitTheSpoils.class)); cards.add(new SetCardInfo("Sprite Dragon", 852, Rarity.UNCOMMON, mage.cards.s.SpriteDragon.class)); cards.add(new SetCardInfo("Squad Commander", 709, Rarity.RARE, mage.cards.s.SquadCommander.class)); cards.add(new SetCardInfo("Starlit Sanctum", 917, Rarity.UNCOMMON, mage.cards.s.StarlitSanctum.class)); cards.add(new SetCardInfo("Steadfast Unicorn", 44, Rarity.COMMON, mage.cards.s.SteadfastUnicorn.class)); cards.add(new SetCardInfo("Steel Hellkite", 874, Rarity.RARE, mage.cards.s.SteelHellkite.class)); - cards.add(new SetCardInfo("Stick Together", 661, Rarity.RARE, mage.cards.s.StickTogether.class)); + cards.add(new SetCardInfo("Stick Together", 611, Rarity.RARE, mage.cards.s.StickTogether.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stick Together", 661, Rarity.RARE, mage.cards.s.StickTogether.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Stirge", 150, Rarity.COMMON, mage.cards.s.Stirge.class)); cards.add(new SetCardInfo("Stirring Bard", 195, Rarity.COMMON, mage.cards.s.StirringBard.class)); cards.add(new SetCardInfo("Stolen Strategy", 807, Rarity.RARE, mage.cards.s.StolenStrategy.class)); cards.add(new SetCardInfo("Stoneskin", 45, Rarity.UNCOMMON, mage.cards.s.Stoneskin.class)); - cards.add(new SetCardInfo("Stonespeaker Crystal", 338, Rarity.UNCOMMON, mage.cards.s.StonespeakerCrystal.class)); - cards.add(new SetCardInfo("Storm King's Thunder", 196, Rarity.MYTHIC, mage.cards.s.StormKingsThunder.class)); - cards.add(new SetCardInfo("Street Urchin", 197, Rarity.UNCOMMON, mage.cards.s.StreetUrchin.class)); + cards.add(new SetCardInfo("Stonespeaker Crystal", 338, Rarity.UNCOMMON, mage.cards.s.StonespeakerCrystal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stonespeaker Crystal", 450, Rarity.UNCOMMON, mage.cards.s.StonespeakerCrystal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm King's Thunder", 196, Rarity.MYTHIC, mage.cards.s.StormKingsThunder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm King's Thunder", 583, Rarity.MYTHIC, mage.cards.s.StormKingsThunder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Street Urchin", 197, Rarity.UNCOMMON, mage.cards.s.StreetUrchin.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Street Urchin", 510, Rarity.UNCOMMON, mage.cards.s.StreetUrchin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Stuffy Doll", 875, Rarity.RARE, mage.cards.s.StuffyDoll.class)); cards.add(new SetCardInfo("Stunning Strike", 97, Rarity.COMMON, mage.cards.s.StunningStrike.class)); cards.add(new SetCardInfo("Summon Undead", 151, Rarity.COMMON, mage.cards.s.SummonUndead.class)); cards.add(new SetCardInfo("Sunken Hollow", 918, Rarity.RARE, mage.cards.s.SunkenHollow.class)); cards.add(new SetCardInfo("Swamp", 459, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 460, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 461, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 462, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swashbuckler Extraordinaire", 198, Rarity.UNCOMMON, mage.cards.s.SwashbucklerExtraordinaire.class)); cards.add(new SetCardInfo("Sweet-Gum Recluse", 835, Rarity.RARE, mage.cards.s.SweetGumRecluse.class)); cards.add(new SetCardInfo("Swiftfoot Boots", 339, Rarity.UNCOMMON, mage.cards.s.SwiftfootBoots.class)); - cards.add(new SetCardInfo("Sword Coast Sailor", 98, Rarity.UNCOMMON, mage.cards.s.SwordCoastSailor.class)); + cards.add(new SetCardInfo("Sword Coast Sailor", 489, Rarity.UNCOMMON, mage.cards.s.SwordCoastSailor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword Coast Sailor", 98, Rarity.UNCOMMON, mage.cards.s.SwordCoastSailor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sword Coast Serpent", 99, Rarity.COMMON, mage.cards.s.SwordCoastSerpent.class)); cards.add(new SetCardInfo("Syphon Mind", 772, Rarity.COMMON, mage.cards.s.SyphonMind.class)); cards.add(new SetCardInfo("Tabaxi Toucaneers", 46, Rarity.COMMON, mage.cards.t.TabaxiToucaneers.class)); @@ -593,9 +838,12 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Talisman of Creativity", 876, Rarity.UNCOMMON, mage.cards.t.TalismanOfCreativity.class)); cards.add(new SetCardInfo("Talisman of Dominance", 877, Rarity.UNCOMMON, mage.cards.t.TalismanOfDominance.class)); cards.add(new SetCardInfo("Talisman of Hierarchy", 878, Rarity.UNCOMMON, mage.cards.t.TalismanOfHierarchy.class)); - cards.add(new SetCardInfo("Tasha, the Witch Queen", 294, Rarity.MYTHIC, mage.cards.t.TashaTheWitchQueen.class)); - cards.add(new SetCardInfo("Taunting Kobold", 199, Rarity.UNCOMMON, mage.cards.t.TauntingKobold.class)); - cards.add(new SetCardInfo("Tavern Brawler", 200, Rarity.COMMON, mage.cards.t.TavernBrawler.class)); + cards.add(new SetCardInfo("Tasha, the Witch Queen", 294, Rarity.MYTHIC, mage.cards.t.TashaTheWitchQueen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tasha, the Witch Queen", 364, Rarity.MYTHIC, mage.cards.t.TashaTheWitchQueen.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Taunting Kobold", 199, Rarity.UNCOMMON, mage.cards.t.TauntingKobold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Taunting Kobold", 404, Rarity.UNCOMMON, mage.cards.t.TauntingKobold.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tavern Brawler", 200, Rarity.COMMON, mage.cards.t.TavernBrawler.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tavern Brawler", 511, Rarity.COMMON, mage.cards.t.TavernBrawler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tectonic Giant", 808, Rarity.RARE, mage.cards.t.TectonicGiant.class)); cards.add(new SetCardInfo("Temple of Abandon", 921, Rarity.RARE, mage.cards.t.TempleOfAbandon.class)); cards.add(new SetCardInfo("Temple of Deceit", 922, Rarity.RARE, mage.cards.t.TempleOfDeceit.class)); @@ -606,44 +854,65 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Terramorph", 836, Rarity.UNCOMMON, mage.cards.t.Terramorph.class)); cards.add(new SetCardInfo("Territorial Hellkite", 809, Rarity.RARE, mage.cards.t.TerritorialHellkite.class)); cards.add(new SetCardInfo("The Akroan War", 777, Rarity.RARE, mage.cards.t.TheAkroanWar.class)); - cards.add(new SetCardInfo("The Council of Four", 271, Rarity.RARE, mage.cards.t.TheCouncilOfFour.class)); + cards.add(new SetCardInfo("The Council of Four", 271, Rarity.RARE, mage.cards.t.TheCouncilOfFour.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Council of Four", 419, Rarity.RARE, mage.cards.t.TheCouncilOfFour.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("The Council of Four", 530, Rarity.RARE, mage.cards.t.TheCouncilOfFour.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Thieves' Tools", 152, Rarity.COMMON, mage.cards.t.ThievesTools.class)); cards.add(new SetCardInfo("Thought Vessel", 879, Rarity.UNCOMMON, mage.cards.t.ThoughtVessel.class)); - cards.add(new SetCardInfo("Thrakkus the Butcher", 295, Rarity.UNCOMMON, mage.cards.t.ThrakkusTheButcher.class)); + cards.add(new SetCardInfo("Thrakkus the Butcher", 295, Rarity.UNCOMMON, mage.cards.t.ThrakkusTheButcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thrakkus the Butcher", 440, Rarity.UNCOMMON, mage.cards.t.ThrakkusTheButcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Thrakkus the Butcher", 551, Rarity.UNCOMMON, mage.cards.t.ThrakkusTheButcher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Three Visits", 837, Rarity.UNCOMMON, mage.cards.t.ThreeVisits.class)); cards.add(new SetCardInfo("Thunder Dragon", 810, Rarity.RARE, mage.cards.t.ThunderDragon.class)); cards.add(new SetCardInfo("Thunderwave", 201, Rarity.UNCOMMON, mage.cards.t.Thunderwave.class)); cards.add(new SetCardInfo("Thwart the Grave", 773, Rarity.UNCOMMON, mage.cards.t.ThwartTheGrave.class)); cards.add(new SetCardInfo("Tiamat's Fanatics", 202, Rarity.COMMON, mage.cards.t.TiamatsFanatics.class)); - cards.add(new SetCardInfo("Tlincalli Hunter", 682, Rarity.RARE, mage.cards.t.TlincalliHunter.class)); - cards.add(new SetCardInfo("Tomb of Horrors Adventurer", 100, Rarity.RARE, mage.cards.t.TombOfHorrorsAdventurer.class)); + cards.add(new SetCardInfo("Tlincalli Hunter", 638, Rarity.RARE, mage.cards.t.TlincalliHunter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tlincalli Hunter", 682, Rarity.RARE, mage.cards.t.TlincalliHunter.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tomb of Horrors Adventurer", 100, Rarity.RARE, mage.cards.t.TombOfHorrorsAdventurer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tomb of Horrors Adventurer", 567, Rarity.RARE, mage.cards.t.TombOfHorrorsAdventurer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Topaz Dragon", 153, Rarity.UNCOMMON, mage.cards.t.TopazDragon.class)); cards.add(new SetCardInfo("Trailblazer's Torch", 340, Rarity.COMMON, mage.cards.t.TrailblazersTorch.class)); - cards.add(new SetCardInfo("Traverse the Outlands", 258, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class)); + cards.add(new SetCardInfo("Traverse the Outlands", 258, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Traverse the Outlands", 593, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Treasure Keeper", 341, Rarity.UNCOMMON, mage.cards.t.TreasureKeeper.class)); cards.add(new SetCardInfo("Two-Handed Axe", 203, Rarity.UNCOMMON, mage.cards.t.TwoHandedAxe.class)); cards.add(new SetCardInfo("Tymora's Invoker", 101, Rarity.COMMON, mage.cards.t.TymorasInvoker.class)); - cards.add(new SetCardInfo("Uchuulon", 673, Rarity.RARE, mage.cards.u.Uchuulon.class)); + cards.add(new SetCardInfo("Uchuulon", 626, Rarity.RARE, mage.cards.u.Uchuulon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Uchuulon", 673, Rarity.RARE, mage.cards.u.Uchuulon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Unbreakable Formation", 710, Rarity.RARE, mage.cards.u.UnbreakableFormation.class)); cards.add(new SetCardInfo("Undercellar Myconid", 259, Rarity.COMMON, mage.cards.u.UndercellarMyconid.class)); cards.add(new SetCardInfo("Undercellar Sweep", 47, Rarity.UNCOMMON, mage.cards.u.UndercellarSweep.class)); cards.add(new SetCardInfo("Underdark Explorer", 154, Rarity.COMMON, mage.cards.u.UnderdarkExplorer.class)); - cards.add(new SetCardInfo("Undermountain Adventurer", 260, Rarity.RARE, mage.cards.u.UndermountainAdventurer.class)); + cards.add(new SetCardInfo("Undermountain Adventurer", 260, Rarity.RARE, mage.cards.u.UndermountainAdventurer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Undermountain Adventurer", 594, Rarity.RARE, mage.cards.u.UndermountainAdventurer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Universal Solvent", 342, Rarity.COMMON, mage.cards.u.UniversalSolvent.class)); cards.add(new SetCardInfo("Urabrask the Hidden", 811, Rarity.MYTHIC, mage.cards.u.UrabraskTheHidden.class)); cards.add(new SetCardInfo("Valiant Changeling", 711, Rarity.UNCOMMON, mage.cards.v.ValiantChangeling.class)); cards.add(new SetCardInfo("Vault of the Archangel", 927, Rarity.RARE, mage.cards.v.VaultOfTheArchangel.class)); cards.add(new SetCardInfo("Vengeful Ancestor", 812, Rarity.RARE, mage.cards.v.VengefulAncestor.class)); - cards.add(new SetCardInfo("Venture Forth", 683, Rarity.RARE, mage.cards.v.VentureForth.class)); - cards.add(new SetCardInfo("Veteran Soldier", 48, Rarity.UNCOMMON, mage.cards.v.VeteranSoldier.class)); - cards.add(new SetCardInfo("Vexing Puzzlebox", 343, Rarity.MYTHIC, mage.cards.v.VexingPuzzlebox.class)); + cards.add(new SetCardInfo("Venture Forth", 639, Rarity.RARE, mage.cards.v.VentureForth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Venture Forth", 683, Rarity.RARE, mage.cards.v.VentureForth.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Veteran Soldier", 48, Rarity.UNCOMMON, mage.cards.v.VeteranSoldier.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Veteran Soldier", 480, Rarity.UNCOMMON, mage.cards.v.VeteranSoldier.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vexing Puzzlebox", 343, Rarity.MYTHIC, mage.cards.v.VexingPuzzlebox.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vexing Puzzlebox", 374, Rarity.MYTHIC, mage.cards.v.VexingPuzzlebox.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vhal, Candlekeep Researcher", 102, Rarity.UNCOMMON, mage.cards.v.VhalCandlekeepResearcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vhal, Candlekeep Researcher", 387, Rarity.UNCOMMON, mage.cards.v.VhalCandlekeepResearcher.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vhal, Candlekeep Researcher", 490, Rarity.UNCOMMON, mage.cards.v.VhalCandlekeepResearcher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vicious Battlerager", 155, Rarity.COMMON, mage.cards.v.ViciousBattlerager.class)); - cards.add(new SetCardInfo("Viconia, Drow Apostate", 156, Rarity.UNCOMMON, mage.cards.v.ViconiaDrowApostate.class)); + cards.add(new SetCardInfo("Viconia, Drow Apostate", 156, Rarity.UNCOMMON, mage.cards.v.ViconiaDrowApostate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Viconia, Drow Apostate", 394, Rarity.UNCOMMON, mage.cards.v.ViconiaDrowApostate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Viconia, Drow Apostate", 501, Rarity.UNCOMMON, mage.cards.v.ViconiaDrowApostate.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vivien, Champion of the Wilds", 838, Rarity.RARE, mage.cards.v.VivienChampionOfTheWilds.class)); cards.add(new SetCardInfo("Volcanic Torrent", 813, Rarity.UNCOMMON, mage.cards.v.VolcanicTorrent.class)); - cards.add(new SetCardInfo("Volo, Itinerant Scholar", 103, Rarity.MYTHIC, mage.cards.v.VoloItinerantScholar.class)); + cards.add(new SetCardInfo("Volo, Itinerant Scholar", 103, Rarity.MYTHIC, mage.cards.v.VoloItinerantScholar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Volo, Itinerant Scholar", 388, Rarity.MYTHIC, mage.cards.v.VoloItinerantScholar.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Volo, Itinerant Scholar", 491, Rarity.MYTHIC, mage.cards.v.VoloItinerantScholar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vrock", 157, Rarity.UNCOMMON, mage.cards.v.Vrock.class)); - cards.add(new SetCardInfo("Wand of Wonder", 204, Rarity.RARE, mage.cards.w.WandOfWonder.class)); + cards.add(new SetCardInfo("Wand of Wonder", 204, Rarity.RARE, mage.cards.w.WandOfWonder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wand of Wonder", 584, Rarity.RARE, mage.cards.w.WandOfWonder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wand of Wonder", 935, Rarity.RARE, mage.cards.w.WandOfWonder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wandering Fumarole", 928, Rarity.RARE, mage.cards.w.WanderingFumarole.class)); cards.add(new SetCardInfo("War Room", 929, Rarity.RARE, mage.cards.w.WarRoom.class)); cards.add(new SetCardInfo("Warehouse Thief", 205, Rarity.COMMON, mage.cards.w.WarehouseThief.class)); @@ -651,18 +920,28 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Warstorm Surge", 815, Rarity.RARE, mage.cards.w.WarstormSurge.class)); cards.add(new SetCardInfo("Wayfarer's Bauble", 344, Rarity.COMMON, mage.cards.w.WayfarersBauble.class)); cards.add(new SetCardInfo("Wharf Infiltrator", 737, Rarity.RARE, mage.cards.w.WharfInfiltrator.class)); - cards.add(new SetCardInfo("White Plume Adventurer", 49, Rarity.RARE, mage.cards.w.WhitePlumeAdventurer.class)); + cards.add(new SetCardInfo("White Plume Adventurer", 49, Rarity.RARE, mage.cards.w.WhitePlumeAdventurer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("White Plume Adventurer", 558, Rarity.RARE, mage.cards.w.WhitePlumeAdventurer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wild Magic Surge", 206, Rarity.UNCOMMON, mage.cards.w.WildMagicSurge.class)); cards.add(new SetCardInfo("Wild-Magic Sorcerer", 816, Rarity.RARE, mage.cards.w.WildMagicSorcerer.class)); cards.add(new SetCardInfo("Will Kenrith", 738, Rarity.MYTHIC, mage.cards.w.WillKenrith.class)); - cards.add(new SetCardInfo("Wilson, Refined Grizzly", 261, Rarity.UNCOMMON, mage.cards.w.WilsonRefinedGrizzly.class)); + cards.add(new SetCardInfo("Wilson, Refined Grizzly", 261, Rarity.UNCOMMON, mage.cards.w.WilsonRefinedGrizzly.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wilson, Refined Grizzly", 411, Rarity.UNCOMMON, mage.cards.w.WilsonRefinedGrizzly.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wilson, Refined Grizzly", 522, Rarity.UNCOMMON, mage.cards.w.WilsonRefinedGrizzly.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Windbrisk Heights", 930, Rarity.RARE, mage.cards.w.WindbriskHeights.class)); + //cards.add(new SetCardInfo("Windshaper Planetar", 50, Rarity.RARE, mage.cards.w.WindshaperPlanetar.class, NON_FULL_USE_VARIOUS)); + //cards.add(new SetCardInfo("Windshaper Planetar", 559, Rarity.RARE, mage.cards.w.WindshaperPlanetar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Winter Eladrin", 104, Rarity.COMMON, mage.cards.w.WinterEladrin.class)); - cards.add(new SetCardInfo("Wizards of Thay", 105, Rarity.RARE, mage.cards.w.WizardsOfThay.class)); + cards.add(new SetCardInfo("Wizards of Thay", 105, Rarity.RARE, mage.cards.w.WizardsOfThay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wizards of Thay", 568, Rarity.RARE, mage.cards.w.WizardsOfThay.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Woe Strider", 774, Rarity.RARE, mage.cards.w.WoeStrider.class)); - cards.add(new SetCardInfo("Wrathful Red Dragon", 207, Rarity.RARE, mage.cards.w.WrathfulRedDragon.class)); - cards.add(new SetCardInfo("Wyll's Reversal", 209, Rarity.RARE, mage.cards.w.WyllsReversal.class)); - cards.add(new SetCardInfo("Wyll, Blade of Frontiers", 208, Rarity.RARE, mage.cards.w.WyllBladeOfFrontiers.class)); + cards.add(new SetCardInfo("Wrathful Red Dragon", 207, Rarity.RARE, mage.cards.w.WrathfulRedDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wrathful Red Dragon", 585, Rarity.RARE, mage.cards.w.WrathfulRedDragon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wyll's Reversal", 209, Rarity.RARE, mage.cards.w.WyllsReversal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wyll's Reversal", 586, Rarity.RARE, mage.cards.w.WyllsReversal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wyll, Blade of Frontiers", 208, Rarity.RARE, mage.cards.w.WyllBladeOfFrontiers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wyll, Blade of Frontiers", 405, Rarity.RARE, mage.cards.w.WyllBladeOfFrontiers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wyll, Blade of Frontiers", 512, Rarity.RARE, mage.cards.w.WyllBladeOfFrontiers.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wyrm's Crossing Patrol", 51, Rarity.COMMON, mage.cards.w.WyrmsCrossingPatrol.class)); cards.add(new SetCardInfo("Xenagos, the Reveler", 853, Rarity.MYTHIC, mage.cards.x.XenagosTheReveler.class)); cards.add(new SetCardInfo("You Look Upon the Tarrasque", 262, Rarity.UNCOMMON, mage.cards.y.YouLookUponTheTarrasque.class)); @@ -672,10 +951,12 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Young Blue Dragon", 106, Rarity.COMMON, mage.cards.y.YoungBlueDragon.class)); cards.add(new SetCardInfo("Young Red Dragon", 210, Rarity.COMMON, mage.cards.y.YoungRedDragon.class)); cards.add(new SetCardInfo("Your Temple Is Under Attack", 52, Rarity.COMMON, mage.cards.y.YourTempleIsUnderAttack.class)); - cards.add(new SetCardInfo("Zellix, Sanity Flayer", 652, Rarity.MYTHIC, mage.cards.z.ZellixSanityFlayer.class)); - cards.add(new SetCardInfo("Zevlor, Elturel Exile", 296, Rarity.RARE, mage.cards.z.ZevlorElturelExile.class)); + cards.add(new SetCardInfo("Zellix, Sanity Flayer", 619, Rarity.MYTHIC, mage.cards.z.ZellixSanityFlayer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zellix, Sanity Flayer", 652, Rarity.MYTHIC, mage.cards.z.ZellixSanityFlayer.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zevlor, Elturel Exile", 296, Rarity.RARE, mage.cards.z.ZevlorElturelExile.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zevlor, Elturel Exile", 441, Rarity.RARE, mage.cards.z.ZevlorElturelExile.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Zevlor, Elturel Exile", 552, Rarity.RARE, mage.cards.z.ZevlorElturelExile.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Zhentarim Bandit", 158, Rarity.COMMON, mage.cards.z.ZhentarimBandit.class)); cards.add(new SetCardInfo("Zulaport Cutthroat", 775, Rarity.UNCOMMON, mage.cards.z.ZulaportCutthroat.class)); - cards.add(new SetCardInfo("Vhal, Candlekeep Researcher", 102, Rarity.UNCOMMON, mage.cards.v.VhalCandlekeepResearcher.class)); } } -- 2.47.2 From 18fd7becdbef238831f22ac8b80acfa9a71bbef9 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2025 23:21:37 +0400 Subject: [PATCH 15/51] tests: added verify checks for missing boosters or draft related sets (related to #13160) --- .../java/mage/verify/mtgjson/MtgJsonSet.java | 4 ++ .../java/mage/verify/VerifyCardDataTest.java | 51 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java b/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java index 4e9a48aee2a..37c14010a07 100644 --- a/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java +++ b/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java @@ -1,5 +1,6 @@ package mage.verify.mtgjson; +import java.util.HashMap; import java.util.List; /** @@ -20,6 +21,9 @@ public final class MtgJsonSet { public String releaseDate; public int totalSetSize; + // mtgjson contains detailed stats, but verify needs only booster types info + public HashMap booster; + public String block; public String parentCode; diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 27275f9d65a..1da2835fdfc 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -1038,6 +1038,57 @@ public class VerifyCardDataTest { } } + // CHECK: miss booster settings + Set ignoreBoosterSets = new HashSet<>(); + // temporary, TODO: remove after set release and mtgjson get info + ignoreBoosterSets.add("Innistrad Remastered"); + // jumpstart, TODO: must implement from JumpstartPoolGenerator, see #13264 + ignoreBoosterSets.add("Jumpstart"); + ignoreBoosterSets.add("Jumpstart 2022"); + ignoreBoosterSets.add("Foundations Jumpstart"); + ignoreBoosterSets.add("Ravnica: Clue Edition"); + // joke or un-sets, low implemented cards + ignoreBoosterSets.add("Unglued"); + ignoreBoosterSets.add("Unhinged"); + ignoreBoosterSets.add("Unstable"); + ignoreBoosterSets.add("Unfinity"); + // other + ignoreBoosterSets.add("Secret Lair Drop"); // cards shop + ignoreBoosterSets.add("Zendikar Rising Expeditions"); // box toppers + ignoreBoosterSets.add("March of the Machine: The Aftermath"); // epilogue boosters aren't for draft + + for (ExpansionSet set : sets) { + MtgJsonSet jsonSet = MtgJsonService.sets().getOrDefault(set.getCode().toUpperCase(Locale.ENGLISH), null); + if (jsonSet == null) { + continue; + } + boolean needBooster = jsonSet.booster != null && !jsonSet.booster.isEmpty(); + if (set.hasBoosters() != needBooster) { + if (ignoreBoosterSets.contains(set.getName())) { + continue; + } + // error example: wrong booster settings (set MUST HAVE booster, but haven't) - 2020 - J22 - Jumpstart 2022 - boosters: [jumpstart] + errorsList.add(String.format("Error: wrong booster settings (set %s booster, but %s) - %s%s", + (needBooster ? "MUST HAVE" : "MUST HAVEN'T"), + (set.hasBoosters() ? "have" : "haven't"), + set.getReleaseYear() + " - " + set.getCode() + " - " + set.getName(), + (jsonSet.booster == null ? "" : " - boosters: " + jsonSet.booster.keySet()) + )); + } + } + + // CHECK: missing important sets for draft format + Set implementedSets = sets.stream().map(ExpansionSet::getCode).collect(Collectors.toSet()); + MtgJsonService.sets().values().forEach(jsonSet -> { + if (jsonSet.booster != null && !jsonSet.booster.isEmpty() && !implementedSets.contains(jsonSet.code)) { + errorsList.add(String.format("Error: missing set implementation (important for draft format) - %s - %s - boosters: %s", + jsonSet.code, + jsonSet.name, + jsonSet.booster.keySet() + )); + } + }); + // TODO: add test to check num cards for rarity (rarityStats > 0 and numRarity > 0) printMessages(warningsList); printMessages(errorsList); -- 2.47.2 From 6a7f9de781e27c7d81b1cc3fdf26d9d4b1ce2a13 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:19:40 -0500 Subject: [PATCH 16/51] [DFT] update spoiler and reprints --- Mage.Sets/src/mage/sets/Aetherdrift.java | 4 +- Utils/mtg-cards-data.txt | 62 ++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index fb90271bfed..a551b6c6246 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -12,7 +12,7 @@ import java.util.List; */ public final class Aetherdrift extends ExpansionSet { - private static final List unfinished = Arrays.asList("Aether Syphon", "Amonkhet Raceway", "Avishkar Raceway", "Burnout Bashtronaut", "Embalmed Ascendant", "Endrider Catalyzer", "Far Fortune, End Boss", "Gas Guzzler", "Gastal Raider", "Goblin Surveyor", "Hazoret, Godseeker", "Hour of Victory", "Howlsquad Heavy", "Kickoff Celebrations", "Lightwheel Enhancements", "Loxodon Surveyor", "Mendicant Core, Guidelight", "Momentum Breaker", "Muraganda Raceway", "Nesting Bot", "Outpace Oblivion", "Perilous Snare", "Point the Way", "Pride of the Road", "Racers' Scoreboard", "Risen Necroregent", "Samut, the Driving Force", "Slick Imitator", "Starting Column", "Streaking Oilgorger", "The Speed Demon", "Vnwxt, Verbose Host", "Zahur, Glory's Past"); + private static final List unfinished = Arrays.asList("Aether Syphon", "Amonkhet Raceway", "Avishkar Raceway", "Burnout Bashtronaut", "Embalmed Ascendant", "Endrider Catalyzer", "Endrider Spikespitter", "Far Fortune, End Boss", "Gas Guzzler", "Gastal Raider", "Gastal Thrillseeker", "Glitch Ghost Surveyor", "Goblin Surveyor", "Hazoret, Godseeker", "Hour of Victory", "Howlsquad Heavy", "Kickoff Celebrations", "Leonin Surveyor", "Lightwheel Enhancements", "Loxodon Surveyor", "Mendicant Core, Guidelight", "Momentum Breaker", "Muraganda Raceway", "Mutant Surveyor", "Nesting Bot", "Outpace Oblivion", "Perilous Snare", "Point the Way", "Pride of the Road", "Racers' Scoreboard", "Risen Necroregent", "Samut, the Driving Force", "Slick Imitator", "Starting Column", "Streaking Oilgorger", "Swiftwing Assailant", "The Speed Demon", "Vnwxt, Verbose Host", "Walking Sarcophagus", "Zahur, Glory's Past"); private static final Aetherdrift instance = new Aetherdrift(); public static Aetherdrift getInstance() { @@ -48,6 +48,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Brightfield Glider", 4, Rarity.COMMON, mage.cards.b.BrightfieldGlider.class)); cards.add(new SetCardInfo("Brightfield Mustang", 5, Rarity.COMMON, mage.cards.b.BrightfieldMustang.class)); cards.add(new SetCardInfo("Brightglass Gearhulk", 191, Rarity.MYTHIC, mage.cards.b.BrightglassGearhulk.class)); + cards.add(new SetCardInfo("Broken Wings", 156, Rarity.COMMON, mage.cards.b.BrokenWings.class)); cards.add(new SetCardInfo("Bulwark Ox", 7, Rarity.RARE, mage.cards.b.BulwarkOx.class)); cards.add(new SetCardInfo("Burnout Bashtronaut", 115, Rarity.RARE, mage.cards.b.BurnoutBashtronaut.class)); cards.add(new SetCardInfo("Caelorna, Coral Tyrant", 40, Rarity.UNCOMMON, mage.cards.c.CaelornaCoralTyrant.class)); @@ -79,6 +80,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Fuel the Flames", 126, Rarity.UNCOMMON, mage.cards.f.FuelTheFlames.class)); cards.add(new SetCardInfo("Gas Guzzler", 85, Rarity.RARE, mage.cards.g.GasGuzzler.class)); cards.add(new SetCardInfo("Gastal Thrillroller", 129, Rarity.RARE, mage.cards.g.GastalThrillroller.class)); + cards.add(new SetCardInfo("Gearseeker Serpent", 43, Rarity.COMMON, mage.cards.g.GearseekerSerpent.class)); cards.add(new SetCardInfo("Gilded Ghoda", 130, Rarity.COMMON, mage.cards.g.GildedGhoda.class)); cards.add(new SetCardInfo("Gloryheath Lynx", 14, Rarity.UNCOMMON, mage.cards.g.GloryheathLynx.class)); cards.add(new SetCardInfo("Goblin Surveyor", 131, Rarity.COMMON, mage.cards.g.GoblinSurveyor.class)); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index e14d91c3203..41de19925d7 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -55974,17 +55974,22 @@ Alacrian Armory|Aetherdrift|2|U|{3}{W}|Artifact|||Creatures you control get +0/+ Basri, Tomorrow's Champion|Aetherdrift|3|R|{W}|Legendary Creature - Human Knight|2|1|{W}, {T}, Exert Basri: Create a 1/1 white Cat creature token with lifelink.$Cycling {2}{W}$When you cycle this card, Cats you control gain hexproof and indestructible until end of turn.| Brightfield Glider|Aetherdrift|4|C|{W}|Creature - Possum Mount|1|1|Vigilance$Whenever this creature attacks while saddled, it gets +1/+2 and gains flying until end of turn.$Saddle 3| Brightfield Mustang|Aetherdrift|5|C|{3}{W}|Creature - Horse Mount|3|3|Whenever this creature attacks while saddled, untap it and put a +1/+1 counter on it.$Saddle 1| +Broadcast Rambler|Aetherdrift|6|C|{4}{W}|Artifact - Vehicle|5|4|When this Vehicle enters, create a 1/1 colorless Thopter artifact creature token with flying.$Crew 1| Bulwark Ox|Aetherdrift|7|R|{1}{W}|Creature - Ox Mount|2|2|Whenever this creature attacks while saddled, put a +1/+1 counter on target creature.$Sacrifice this creature: Creatures you control with counters on them gain hexproof and indestructible until end of turn.$Saddle 1| Canyon Vaulter|Aetherdrift|8|U|{1}{W}|Creature - Kor Pilot|3|1|Whenever this creature saddles a Mount or crews a Vehicle during your main phase, that Mount or Vehicle gains flying until end of turn.| Cloudspire Captain|Aetherdrift|9|U|{2}{W}|Creature - Human Pilot|2|3|Mounts and Vehicles you control get +1/+1.$This creature saddles Mounts and crews Vehicles as though its power were 2 greater.| Collision Course|Aetherdrift|10|C|{1}{W}|Sorcery|||Choose one --$* Collision Course deals X damage to target creature, where X is the number of permanents you control that are creatures and/or Vehicles.$* Destroy target artifact.| Daring Mechanic|Aetherdrift|11|C|{2}{W}|Creature - Human Artificer|3|3|{3}{W}: Put a +1/+1 counter on target Mount or Vehicle.| Detention Chariot|Aetherdrift|12|U|{4}{W}{W}|Artifact - Vehicle|6|6|When this Vehicle enters, exile target artifact or creature an opponent controls until this Vehicle leaves the battlefield.$Crew 3$Cycling {W}| +Gallant Strike|Aetherdrift|13|U|{1}{W}|Instant|||Destroy target creature with toughness 4 or greater.$Cycling {2}| Gloryheath Lynx|Aetherdrift|14|U|{1}{W}|Creature - Cat Mount|2|3|Lifelink$Whenever this creature attacks while saddled, search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.$Saddle 2| Guardian Sunmare|Aetherdrift|15|R|{3}{W}{W}|Creature - Horse Mount|5|5|Ward {2}$Whenever this creature attacks while saddled, search your library for a nonland permanent card with mana value 3 or less, put it onto the battlefield, then shuffle.$Saddle 4| +Guidelight Synergist|Aetherdrift|16|U|{3}{W}|Artifact Creature - Robot Artificer|0|4|Flying$This creature gets +1/+0 for each artifact you control.| Interface Ace|Aetherdrift|17|C|{1}{W}|Artifact Creature - Robot Pilot|0|4|This creature saddles Mounts and crews Vehicles using its toughness rather than its power.$Whenever this creature becomes tapped during your turn, untap it. This ability triggers only once each turn.| +Leonin Surveyor|Aetherdrift|18|C|{1}{W}|Creature - Cat Scout|2|2|Start your engines!$During your turn, this creature has first strike.$Max speed -- {3}, Exile this card from your graveyard: Draw a card.| Lightshield Parry|Aetherdrift|19|C|{W}|Instant|||Target creature gets +2/+2 until end of turn.$Cycling {2}| Lightwheel Enhancements|Aetherdrift|20|C|{W}|Enchantment - Aura|||Enchant creature or Vehicle$Start your engines!$Enchanted permanent gets +1/+1 and has vigilance.$Max speed -- You may cast this card from your graveyard.| +Lotusguard Disciple|Aetherdrift|21|C|{2}{W}|Creature - Bird Cleric|2|2|Flying$When this creature enters, target creature or Vehicle gains lifelink and indestructible until end of turn.| Nesting Bot|Aetherdrift|22|U|{W}|Artifact Creature - Robot|1|1|Start your engines!$When this creature dies, create a 1/1 colorless Servo artifact creature token.$Max speed -- This creature gets +1/+0.| Perilous Snare|Aetherdrift|23|R|{2}{W}|Artifact|||Start your engines!$When this artifact enters, exile target nonland permanent an opponent controls until this artifact leaves the battlefield.$Max speed -- {T}: Put a +1/+1 counter on target creature or Vehicle you control. Activate only as a sorcery.| Pride of the Road|Aetherdrift|24|U|{3}{W}|Creature - Zombie Cat Warrior|2|5|Vigilance$Start your engines!$Max speed -- At the beginning of combat on your turn, target creature or Vehicle you control gains double strike until end of turn.| @@ -55994,63 +55999,90 @@ Salvation Engine|Aetherdrift|27|M|{4}{W}|Artifact - Vehicle|6|10|Other artifact Skyseer's Chariot|Aetherdrift|28|R|{1}{W}|Artifact - Vehicle|3|3|Flying$As this Vehicle enters, choose a nonland card name.$Activated abilities of sources with the chosen name cost {2} more to activate.$Crew 2| Spectacular Pileup|Aetherdrift|29|R|{3}{W}{W}|Sorcery|||All creatures and Vehicles lose indestructible until end of turn, then destroy all creatures and Vehicles.$Cycling {2}| Spotcycle Scouter|Aetherdrift|30|C|{1}{W}|Artifact - Vehicle|3|2|When this Vehicle enters, scry 2.$Crew 1| +Sundial, Dawn Tyrant|Aetherdrift|31|U|{1}{W}|Legendary Artifact Creature - Construct|3|3|| +Swiftwing Assailant|Aetherdrift|32|C|{3}{W}|Creature - Bird Warrior|3|3|Flying$Start your engines!$Max speed -- This creature gets +0/+1 and has vigilance.| Tune Up|Aetherdrift|33|U|{3}{W}|Sorcery|||Return target artifact card from your graveyard to the battlefield. If it's a Vehicle, it becomes an artifact creature.| Unswerving Sloth|Aetherdrift|34|U|{3}{W}{W}|Creature - Sloth Mount|5|5|Whenever this creature attacks while saddled, it gains indestructible until end of turn. Untap all creatures you control.$Saddle 4| Valor's Flagship|Aetherdrift|35|M|{4}{W}{W}{W}|Legendary Artifact - Vehicle|7|7|Flying, first strike, lifelink$Crew 3$Cycling {X}{2}{W}$When you cycle this card, create X 1/1 colorless Pilot creature tokens with "This token saddles Mounts and crews Vehicles as though its power were 2 greater."| Voyager Glidecar|Aetherdrift|36|R|{W}|Artifact - Vehicle|2|3|When this Vehicle enters, scry 1.$Tap three other untapped creatures you control: Until end of turn, this Vehicle becomes an artifact creature and gains flying. Put a +1/+1 counter on it.$Crew 1| +Voyager Quickwelder|Aetherdrift|37|C|{2}{W}|Artifact Creature - Robot Artificer|2|4|Artifact spells you cast cost {1} less to cast.| Aether Syphon|Aetherdrift|38|U|{1}{U}{U}|Artifact|||Start your engines!${2}, {T}: Draw a card.$Max speed -- Whenever you draw a card, each opponent mills two cards.| Bounce Off|Aetherdrift|39|C|{U}|Instant|||Return target creature or Vehicle to its owner's hand.| Caelorna, Coral Tyrant|Aetherdrift|40|U|{1}{U}|Legendary Creature - Octopus|0|8|| Diversion Unit|Aetherdrift|41|U|{1}{U}|Artifact Creature - Robot|2|1|Flying${U}, Sacrifice this creature: Counter target instant or sorcery spell unless its controller pays {3}.| Flood the Engine|Aetherdrift|42|C|{2}{U}|Enchantment - Aura|||Enchant creature or Vehicle$When this Aura enters, tap enchanted permanent.$Enchanted permanent loses all abilities and doesn't untap during its controller's untap step.| +Gearseeker Serpent|Aetherdrift|43|C|{5}{U}{U}|Creature - Serpent|5|6|This spell costs {1} less to cast for each artifact you control.${5}{U}: Gearseeker Serpent can't be blocked this turn.| +Glitch Ghost Surveyor|Aetherdrift|44|C|{2}{U}|Creature - Spirit Scout|2|2|Flying$Start your engines!$Max speed -- {3}, Exile this card from your graveyard: Draw a card.| +Guidelight Optimizer|Aetherdrift|45|C|{1}{U}|Artifact Creature - Robot|2|1|{T}: Add {U}. Spend this mana only to cast an artifact spell or activate an ability.| Howler's Heavy|Aetherdrift|46|C|{3}{U}|Creature - Seal Pirate|3|4|Cycling {1}{U}$When you cycle this card, target creature or Vehicle an opponent controls gets -3/-0 until end of turn.| Hulldrifter|Aetherdrift|47|C|{3}{U}{U}|Artifact - Vehicle|3|2|Flying$When this Vehicle enters, draw two cards.$Crew 3| +Keen Buccaneer|Aetherdrift|48|C|{2}{U}|Creature - Octopus Pirate|2|3|Vigilance$Exhaust -- {1}{U}: Draw a card, then discard a card. Put a +1/+1 counter on this creature.| +Memory Guardian|Aetherdrift|49|U|{4}{U}|Artifact Creature - Robot Artificer|3|4|Affinity for artifacts$Flying| Midnight Mangler|Aetherdrift|50|C|{1}{U}|Artifact - Vehicle|3|3|During turns other than yours, this Vehicle is an artifact creature.$Crew 2| Mindspring Merfolk|Aetherdrift|51|R|{U}|Creature - Merfolk Wizard|1|1|Exhaust -- {X}{U}{U}, {T}: Draw X cards. Put a +1/+1 counter on each Merfolk creature you control.| Mu Yanling, Wind Rider|Aetherdrift|52|M|{2}{U}{U}|Legendary Creature - Human Wizard Pilot|2|4|When this creature enters, create a 3/2 colorless Vehicle artifact token with crew 1.$Vehicles you control have flying.$Whenever one or more creatures you control with flying deal combat damage to a player, draw a card.| +Nimble Thopterist|Aetherdrift|53|C|{3}{U}|Creature - Vedalken Artificer|3|2|When this creature enters, create a 1/1 colorless Thopter artifact creature token with flying.| Possession Engine|Aetherdrift|54|R|{3}{U}{U}|Artifact - Vehicle|5|5|When this Vehicle enters, gain control of target creature an opponent controls for as long as you control this Vehicle. That creature can't attack or block for as long as you control this Vehicle.$Crew 3| Rangers' Refueler|Aetherdrift|55|U|{1}{U}|Artifact - Vehicle|3|3|Whenever you activate an exhaust ability, draw a card.$Exhaust -- {4}: This Vehicle becomes an artifact creature. Put a +1/+1 counter on it.$Crew 2| Repurposing Bay|Aetherdrift|56|R|{2}{U}|Artifact|||{2}, {T}, Sacrifice another artifact: Search your library for an artifact card with mana value equal to 1 plus the sacrificed artifact's mana value, put that card onto the battlefield, then shuffle. Activate only as a sorcery.| Riverchurn Monument|Aetherdrift|57|R|{1}{U}|Artifact|||{1}, {T}: Any number of target players each mill two cards.$Exhaust -- {2}{U}{U}, {T}: Any number of target players each mill cards equal to the number of cards in their graveyard.| Roadside Blowout|Aetherdrift|58|U|{2}{U}|Sorcery|||This spell costs {2} less to cast if it targets a permanent with mana value 1.$Return target creature or Vehicle an opponent controls to its owner's hand.$Draw a card.| +Sabotage Strategist|Aetherdrift|59|U|{2}{U}{U}|Creature - Vedalken Ranger|2|2|Flying, vigilance$Whenever one or more creatures attack you, those creatures get -1/-0 until end of turn.$Exhaust -- {5}{U}{U}: Put three +1/+1 counters on this creature.| +Scrounging Skyray|Aetherdrift|60|U|{1}{U}|Creature - Fish Pirate|1|2|Flying$Whenever you discard one or more cards, put that many +1/+1 counters on this creature.$Cycling {2}| +Skystreak Engineer|Aetherdrift|61|C|{1}{U}|Creature - Human Pilot|1|3|Flying$Exhaust - {4}{U}: Put two +1/+1 counters on this creature.| Slick Imitator|Aetherdrift|62|U|{1}{U}|Creature - Ooze|1|3|Start your engines!$Max speed -- {1}, Sacrifice this creature: Copy target spell you control. You may choose new targets for the copy.| +Spectral Interference|Aetherdrift|63|C|{1}{U}|Instant|||Counter target artifact or creature spell unless its controller pays {4}.| Spell Pierce|Aetherdrift|64|U|{U}|Instant|||Counter target noncreature spell unless its controller pays {2}.| Spikeshell Harrier|Aetherdrift|65|U|{4}{U}|Artifact Creature - Robot Turtle|4|4|When this creature enters, return target creature or Vehicle an opponent controls to its owner's hand. If that opponent's speed is greater than each other player's speed, reduce that opponent's speed by 1. This effect can't reduce their speed below 1.| +Stall Out|Aetherdrift|66|C|{1}{U}|Sorcery|||Tap target creature or Vehicle, then put three stun counters on it.$Cycling {2}| Stock Up|Aetherdrift|67|U|{2}{U}|Sorcery|||Look at the top five cards of your library. Put two of them into your hand and the rest on the bottom of your library in any order.| Thopter Fabricator|Aetherdrift|68|R|{2}{U}|Artifact - Vehicle|4|4|Flying$Whenever you draw your second card each turn, create a 1/1 colorless Thopter artifact creature token with flying.$Crew 2| Trade the Helm|Aetherdrift|69|U|{4}{U}|Sorcery|||Exchange control of target artifact or creature you control and target artifact or creature an opponent controls.$Cycling {2}| Transit Mage|Aetherdrift|70|U|{2}{U}|Creature - Human Wizard|2|2|When this creature enters, you may search your library for an artifact card with mana value 4 or 5, reveal it, put it into your hand, then shuffle.| +Trip Up|Aetherdrift|71|C|{3}{U}|Instant|||Target nonland permanent's owner puts it on their choice of the top or bottom of their library.$Cycling {2}| Unstoppable Plan|Aetherdrift|72|R|{2}{U}|Enchantment|||At the beginning of your end step, untap all nonland permanents you control.| Vnwxt, Verbose Host|Aetherdrift|73|R|{1}{U}|Legendary Creature - Homunculus|0|4|Start your engines!$You have no maximum hand size.$Max speed -- If you would draw a card, draw two cards instead.| Waxen Shapethief|Aetherdrift|74|R|{3}{U}|Creature - Shapeshifter|0|0|Flash$You may have this creature enter as a copy of a creature or artifact you control.$Cycling {2}| +Ancient Vendetta|Aetherdrift|75|U|{3}{B}|Sorcery|||Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. Then that player shuffles.| Back on Track|Aetherdrift|76|U|{4}{B}|Sorcery|||Return target creature or Vehicle card from your graveyard to the battlefield. Create a 1/1 colorless Pilot creature token with "This token saddles Mounts and crews Vehicles as though its power were 2 greater."| Bloodghast|Aetherdrift|77|R|{B}{B}|Creature - Vampire Spirit|2|1|Bloodghast can't block.$Bloodghast has haste as long as an opponent has 10 or less life.$Landfall -- Whenever a land you control enters, you may return Bloodghast from your graveyard to the battlefield.| Carrion Cruiser|Aetherdrift|78|U|{2}{B}|Artifact - Vehicle|3|2|When this Vehicle enters, mill two cards. Then return a creature or Vehicle card from your graveyard to your hand.$Crew 1| +Chitin Gravestalker|Aetherdrift|79|C|{5}{B}|Creature - Insect Warrior|5|4|This spell costs {1} less to cast for each artifact and/or creature card in your graveyard.$Cycling {2}| Cryptcaller Chariot|Aetherdrift|80|R|{3}{B}|Artifact - Vehicle|5|5|Menace$Whenever you discard one or more cards, create that many tapped 2/2 black Zombie creature tokens.$Crew 2| Cursecloth Wrappings|Aetherdrift|81|R|{2}{B}{B}|Artifact|||Zombies you control get +1/+1.${T}: Target creature card in your graveyard gains embalm until end of turn. The embalm cost is equal to its mana cost.| -Deathless Pilot|Aetherdrift|82|C|{1}{B}|Creature - Zombie Pilot|2|2|This creature saddles Mounts and crews Vehicles as though its power were 2 greater. 3: Return this card from your graveyard to your hand.| +Deathless Pilot|Aetherdrift|82|C|{1}{B}|Creature - Zombie Pilot|2|2|This creature saddles Mounts and crews Vehicles as though its power were 2 greater.${3}{B}: Return this card from your graveyard to your hand.| Demonic Junker|Aetherdrift|83|R|{6}{B}|Artifact - Vehicle|4|3|Affinity for artifacts$When this Vehicle enters, for each player, destroy up to one target creature that player controls. If a creature you controlled was destroyed this way, put two +1/+1 counters on this Vehicle.$Crew 2| +Engine Rat|Aetherdrift|84|C|{B}|Creature - Zombie Rat|1|1|Deathtouch${5}{B}: Each opponent loses 2 life.| Gas Guzzler|Aetherdrift|85|R|{B}|Creature - Vampire Rogue|2|1|Start your engines!$This creature enters tapped.$Max speed -- {B}, Sacrifice another creature or Vehicle: Draw a card.| Gastal Raider|Aetherdrift|86|U|{2}{B}|Creature - Vampire Rogue|2|1|Start your engines!$When this creature enters, target opponent reveals their hand. You choose an instant or sorcery card from it. That player discards that card.$Max speed -- This creature gets +1/+1 and has menace.| Gonti, Night Minister|Aetherdrift|87|R|{2}{B}{B}|Legendary Creature - Aetherborn Rogue|3|4|Whenever a player casts a spell they don't own, that player creates a Treasure token.$Whenever a creature deals combat damage to one of your opponents, its controller looks at the top card of that opponent's library and exiles it face down. They may play that card for as long as it remains exiled. Mana of any type can be spent to cast a spell this way.| Grim Bauble|Aetherdrift|88|C|{B}|Artifact|||When this artifact enters, target creature an opponent controls gets -2/-2 until end of turn.${2}{B}, {T}, Sacrifice this artifact: Surveil 2.| +Grim Javelineer|Aetherdrift|89|C|{2}{B}|Creature - Human Warrior|3|2|Whenever you attack, target attacking creature gets +1/+0 until end of turn. When that creature dies this turn, surveil 1.| +Hellish Sideswipe|Aetherdrift|90|U|{B}|Sorcery|||As an additional cost to cast this spell, sacrifice an artifact or creature.$Destroy target creature or Vehicle. If the sacrificed permanent was a Vehicle, draw a card.| Hour of Victory|Aetherdrift|91|U|{2}{B}|Enchantment|||Start your engines!$When this enchantment enters, create a 2/2 black Zombie creature token.$Max speed -- {1}{B}, Sacrifice this enchantment: Search your library for a card, put it into your hand, then shuffle. Activate only as a sorcery.| Intimidation Tactics|Aetherdrift|92|U|{B}|Sorcery|||Target opponent reveals their hand. You choose an artifact or creature card from it. Exile that card.$Cycling {3}| Kalakscion, Hunger Tyrant|Aetherdrift|93|U|{1}{B}{B}|Legendary Creature - Crocodile|7|2|| The Last Ride|Aetherdrift|94|M|{B}|Legendary Artifact - Vehicle|13|13|The Last Ride gets -X/-X, where X is your life total.${2}{B}, Pay 2 life: Draw a card.$Crew 2| +Locust Spray|Aetherdrift|95|U|{B}|Instant|||Target creature gets -1/-1 until end of turn.$Cycling {B}| Maximum Overdrive|Aetherdrift|96|C|{1}{B}|Instant|||Put a +1/+1 counter on target creature. It gains deathtouch and indestructible until end of turn.| Momentum Breaker|Aetherdrift|97|U|{1}{B}|Enchantment|||Start your engines!$When this enchantment enters, each opponent sacrifices a creature or Vehicle of their choice. Each opponent who can't discards a card.${2}, Sacrifice this enchantment: You gain life equal to your speed.| +Mutant Surveyor|Aetherdrift|98|C|{2}{B}|Creature - Mutant Scout|2|3|Start your engines!${2}: This creature gets +1/+1 until end of turn.$Max speed -- {3}, Exile this card from your graveyard: Draw a card.| Pactdoll Terror|Aetherdrift|99|C|{3}{B}|Artifact Creature - Toy|3|4|Whenever this creature or another artifact you control enters, each opponent loses 1 life and you gain 1 life.| Quag Feast|Aetherdrift|100|R|{1}{B}|Sorcery|||Choose target creature, planeswalker, or Vehicle. Mill two cards, then destroy the chosen permanent if its mana value is less than or equal to the number of cards in your graveyard.| Ripclaw Wrangler|Aetherdrift|101|C|{3}{B}|Artifact - Vehicle|4|3|When this Vehicle enters, each opponent discards a card.$Crew 2| Risen Necroregent|Aetherdrift|102|U|{4}{B}|Creature - Zombie Cat Knight|5|4|Start your engines!$Max speed -- At the beginning of your end step, create a 2/2 black Zombie creature token.| +Risky Shortcut|Aetherdrift|103|C|{2}{B}|Sorcery|||Draw two cards. Each player loses 2 life.| Shefet Archfiend|Aetherdrift|104|U|{5}{B}{B}|Creature - Demon|5|5|Flying$When Shefet Archfiend enters, all other creatures get -2/-2 until end of turn.$Cycling {2}| The Speed Demon|Aetherdrift|105|M|{3}{B}{B}|Legendary Creature - Demon|5|5|Flying, trample$Start your engines!$At the beginning of your end step, you draw X cards and lose X life, where X is your speed.| +Spin Out|Aetherdrift|106|C|{1}{B}{B}|Instant|||Destroy target creature or Vehicle.| Streaking Oilgorger|Aetherdrift|107|C|{4}{B}|Creature - Vampire|3|3|Flying, haste$Start your engines!$Max speed -- This creature has lifelink.| +Syphon Fuel|Aetherdrift|108|C|{4}{B}|Instant|||Target creature gets -6/-6 until end of turn. You gain 2 life.| Wickerfolk Indomitable|Aetherdrift|109|U|{3}{B}|Artifact Creature - Scarecrow|4|3|You may cast this card from your graveyard by paying 2 life and sacrificing an artifact or creature in addition to paying its other costs.| +Wreckage Wickerfolk|Aetherdrift|110|C|{1}{B}|Artifact Creature - Scarecrow|1|3|Flying$When this creature enters, surveil 2.| Wretched Doll|Aetherdrift|111|U|{1}{B}|Artifact Creature - Toy|3|1|{B}, {T}: Surveil 1.| Adrenaline Jockey|Aetherdrift|112|U|{2}{R}|Creature - Minotaur Pilot|3|3|Whenever a player casts a spell, if it's not their turn, this creature deals 4 damage to them.$Whenever you activate an exhaust ability, put a +1/+1 counter on this creature.| Boommobile|Aetherdrift|113|R|{2}{R}{R}|Artifact - Vehicle|5|5|When this Vehicle enters, add four mana of any one color. Spend this mana only to activate abilities.$Exhaust -- {X}{2}{R}: This Vehicle deals X damage to any target. Put a +1/+1 counter on this Vehicle.$Crew 2| +Burner Rocket|Aetherdrift|114|C|{1}{R}|Artifact - Vehicle|3|1|Flash$When this Vehicle enters, target creature you control gets +2/+0 and gains trample until end of turn.$Crew 1| Burnout Bashtronaut|Aetherdrift|115|R|{R}|Creature - Goblin Warrior|1|1|Menace$Start your engines!${2}: This creature gets +1/+0 until end of turn.$Max speed -- This creature has double strike.| Chandra, Spark Hunter|Aetherdrift|116|M|{3}{R}|Legendary Planeswalker - Chandra|4|At the beginning of combat on your turn, choose up to one target Vehicle you control. Until end of turn, it becomes an artifact creature and gains haste.$+2: You may sacrifice an artifact or discard a card. If you do, draw a card.$+0: Create a 3/2 colorless Vehicle artifact token with crew 1.$-7: You get an emblem with "Whenever an artifact you control enters, this emblem deals 3 damage to any target."| Clamorous Ironclad|Aetherdrift|117|C|{3}{R}|Artifact - Vehicle|6|3|Menace$Crew 3$Cycling {R}| @@ -56059,7 +56091,9 @@ Crash and Burn|Aetherdrift|119|C|{3}{R}|Instant|||Choose one --$* Destroy target Daretti, Rocketeer Engineer|Aetherdrift|120|R|{4}{R}|Legendary Creature - Goblin Artificer|*|5|Daretti's power is equal to the greatest mana value among artifacts you control.$Whenever Daretti enters or attacks, choose target artifact card in your graveyard. You may sacrifice an artifact. If you do, return the chosen card to the battlefield.| Draconautics Engineer|Aetherdrift|121|R|{1}{R}|Creature - Goblin Artificer|2|2|Exhaust -- {R}: Other creatures you control gain haste until end of turn. Put a +1/+1 counter on this creature.$Exhaust -- {3}{R}: Create a 4/4 red Dinosaur Dragon creature token with flying.| Dracosaur Auxiliary|Aetherdrift|122|U|{4}{R}{R}|Creature - Dinosaur Dragon Mount|4|4|Flying, haste$Whenever this creature attacks while saddled, it deals 2 damage to any target.$Saddle 3| +Dynamite Diver|Aetherdrift|123|C|{R}|Creature - Goblin Pilot|1|1|This creature saddles Mounts and crews Vehicles as though its power were 2 greater.$When this creature dies, it deals 1 damage to any target.| Endrider Catalyzer|Aetherdrift|124|C|{1}{R}|Creature - Human Warrior|3|1|Start your engines!$Max speed -- {T}: Add {R}{R}.| +Endrider Spikespitter|Aetherdrift|125|U|{3}{R}|Creature - Human Mercenary|3|4|Reach$Start your engines!$Max speed -- At the beginning of your upkeep, exile the top card of your library. You may play that card this turn.| Fuel the Flames|Aetherdrift|126|U|{2}{R}|Instant|||Fuel the Flames deals 2 damage to each creature.$Cycling {2}| Full Throttle|Aetherdrift|127|R|{4}{R}{R}|Sorcery|||After this main phase, there are two additional combat phases.$At the beginning of each combat this turn, untap all creatures that attacked this turn.| Gastal Blockbuster|Aetherdrift|128|C|{2}{R}|Creature - Human Berserker|3|2|When this creature enters, you may sacrifice a creature or Vehicle. When you do, destroy target artifact an opponent controls.| @@ -56071,6 +56105,7 @@ Hazoret, Godseeker|Aetherdrift|133|M|{1}{R}|Legendary Creature - God|5|3|Indestr Howlsquad Heavy|Aetherdrift|134|R|{2}{R}|Creature - Goblin Mercenary|2|3|Start your engines!$Other Goblins you control have haste.$At the beginning of combat on your turn, create a 1/1 red Goblin creature token. That token attacks this combat if able.$Max Speed -- {T}: Add {R} for each Goblin you control.| Kickoff Celebrations|Aetherdrift|135|C|{1}{R}|Enchantment|||Start your engines!$When this enchantment enters, you may discard a card. If you do, draw two cards.$Max speed -- Sacrifice this enchantment: Creatures and Vehicles you control gain haste until end of turn.| Lightning Strike|Aetherdrift|136|C|{1}{R}|Instant|||Lightning Strike deals 3 damage to any target.| +Magmakin Artillerist|Aetherdrift|137|C|{2}{R}|Creature - Elemental Pirate|1|4|Whenever you discard one or more cards, this creature deals that much damage to each opponent.$Cycling {1}{R}$When you cycle this card, it deals 1 damage to each opponent.| Marauding Mako|Aetherdrift|138|U|{R}|Creature - Shark Pirate|1|1|Whenever you discard one or more cards, put that many +1/+1 counters on this creature.$Cycling {2}| Outpace Oblivion|Aetherdrift|139|U|{2}{R}|Enchantment|||Start your engines!$When this enchantment enters, it deals 5 damage to up to one target creature or planeswalker.${2}, Sacrifice this enchantment: It deals 2 damage to each player who doesn't have max speed.| Pacesetter Paragon|Aetherdrift|140|U|{2}{R}|Creature - Human Pilot|2|3|Exhaust -- {2}{R}: Put a +1/+1 counter on this creature. It gains double strike until end of turn.| @@ -56078,29 +56113,42 @@ Pedal to the Metal|Aetherdrift|141|C|{X}{R}|Instant|||Target creature gets +X/+0 Prowcatcher Specialist|Aetherdrift|142|C|{1}{R}|Creature - Goblin Warrior|2|1|Haste$Exhaust -- {3}{R}: Put two +1/+1 counters on this creature.| Push the Limit|Aetherdrift|143|U|{5}{R}{R}|Sorcery|||Return all Mount and Vehicle cards from your graveyard to the battlefield. Sacrifice them at the beginning of the next end step.$Vehicles you control become artifact creatures until end of turn. Creatures you control gain haste until end of turn.| Reckless Velocitaur|Aetherdrift|144|U|{3}{R}|Creature - Minotaur Pilot|3|3|Whenever this creature saddles a Mount or crews a Vehicle during your main phase, that Mount or Vehicle gets +2/+0 and gains trample until end of turn.| +Road Rage|Aetherdrift|145|U|{R}|Instant|||Road Rage deals X damage to target creature or planeswalker, where X is 2 plus the number of Mounts and Vehicles you control.| +Skycrash|Aetherdrift|146|U|{1}{R}|Instant|||Destroy target artifact.$Cycling {R}| Spire Mechcycle|Aetherdrift|147|U|{4}{R}|Artifact - Vehicle|5|4|Haste$Exhaust -- Tap another untapped Mount or Vehicle you control: This Vehicle becomes an artifact creature. Put a +1/+1 counter on it for each Mount and/or Vehicle you control other than this Vehicle.$Crew 2| +Thunderhead Gunner|Aetherdrift|148|C|{4}{R}|Creature - Shark Pirate|4|5|Reach$Discard a card: Draw a card. Activate only as a sorcery and only once each turn.| Tyrox, Saurid Tyrant|Aetherdrift|149|U|{1}{R}|Legendary Creature - Dinosaur Warrior|4|1|| Afterburner Expert|Aetherdrift|150|R|{2}{G}|Creature - Goblin Artificer|4|2|Exhaust -- {2}{G}{G}: Put two +1/+1 counters on this creature.$Whenever you activate an exhaust ability, return this card from your graveyard to the battlefield.| Agonasaur Rex|Aetherdrift|151|R|{3}{G}{G}|Creature - Dinosaur|8|8|Trample$Cycling {2}{G}$When you cycle this card, put two +1/+1 counters on up to one target creature or Vehicle. It gains trample and indestructible until end of turn.| +Alacrian Jaguar|Aetherdrift|152|C|{4}{G}|Creature - Cat Mount|4|4|Vigilance$Whenever this creature attacks while saddled, it gets +2/+2 until end of turn.$Saddle 1| Autarch Mammoth|Aetherdrift|153|U|{4}{G}{G}|Creature - Elephant Mount|5|5|When this creature enters and whenever it attacks while saddled, create a 3/3 green Elephant creature token.$Saddle 5| Beastrider Vanguard|Aetherdrift|154|C|{1}{G}|Creature - Human Knight|2|2|{4}{G}: Look at the top three cards of your library. You may reveal a permanent card from among them and put it into your hand. Put the rest on the bottom of your library in any order.| Bestow Greatness|Aetherdrift|155|C|{2}{G}|Instant|||Target creature gets +4/+4 and gains trample until end of turn.| +Broken Wings|Aetherdrift|156|C|{2}{G}|Instant|||Destroy target artifact, enchantment, or creature with flying.| Defend the Rider|Aetherdrift|157|U|{G}|Instant|||Choose one --$* Target permanent you control gains hexproof and indestructible until end of turn.$* Create a 1/1 colorless Pilot creature token with "This token saddles Mounts and crews Vehicles as though its power were 2 greater."| District Mascot|Aetherdrift|158|R|{G}|Creature - Dog Mount|0|0|This creature enters with a +1/+1 counter on it.${1}{G}, Remove two +1/+1 counters from this creature: Destroy target artifact.$Whenever this creature attacks while saddled, put a +1/+1 counter on it.$Saddle 1| Dredger's Insight|Aetherdrift|159|U|{1}{G}|Enchantment|||Whenever one or more artifact and/or creature cards leave your graveyard, you gain 1 life.$When this enchantment enters, mill four cards. You may put an artifact, creature, or land card from among the milled cards into your hand.| Earthrumbler|Aetherdrift|160|U|{4}{G}|Artifact - Vehicle|7|6|Vigilance, trample$Exile an artifact or creature card from your graveyard: This Vehicle becomes an artifact creature until end of turn.$Crew 3| Elvish Refueler|Aetherdrift|161|U|{2}{G}|Creature - Elf Druid|2|3|During your turn, as long as you haven't activated an exhaust ability this turn, you may activate exhaust abilities as though they haven't been activated.$Exhaust -- {1}{G}: Put a +1/+1 counter on this creature.| +Fang Guardian|Aetherdrift|162|U|{3}{G}|Creature - Ape Druid|4|2|Flash$When this creature enters, another target creature or Vehicle you control gets +2/+2 until end of turn.| Fang-Druid Summoner|Aetherdrift|163|U|{3}{G}|Creature - Ape Druid|2|4|Reach$When this creature enters, you may search your library and/or graveyard for a creature card with no abilities, reveal it, and put it into your hand. If you search your library this way, shuffle.| Greenbelt Guardian|Aetherdrift|164|U|{1}{G}|Creature - Elf Ranger|2|2|{G}: Target creature gains trample until end of turn.$Exhaust -- {3}{G}: Put three +1/+1 counters on this creature.| +Hazard of the Dunes|Aetherdrift|165|C|{3}{G}|Creature - Wurm|4|4|Trample, reach$Exhaust -- {6}{G}: Put three +1/+1 counters on this creature.| +Jibbirik Omnivore|Aetherdrift|166|C|{1}{G}|Creature - Beast|3|2|| Loxodon Surveyor|Aetherdrift|167|C|{2}{G}|Creature - Elephant Scout|3|3|Start your engines!$Max speed -- {3}, Exile this card from your graveyard: Draw a card.| Lumbering Worldwagon|Aetherdrift|168|R|{2}{G}|Artifact - Vehicle|*|4|This Vehicle's power is equal to the number of lands you control.$Whenever this Vehicle enters or attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle.$Crew 4| March of the World Ooze|Aetherdrift|169|M|{3}{G}{G}{G}|Enchantment|||Creatures you control have base power and toughness 6/6 and are Oozes in addition to their other types.$Whenever an opponent casts a spell, if it's not their turn, you create a 3/3 green Elephant creature token.| +Migrating Ketradon|Aetherdrift|170|C|{4}{G}{G}|Creature - Dinosaur|6|6|Reach$When this creature enters, you gain 4 life.$Cycling {2}| Molt Tender|Aetherdrift|171|U|{G}|Creature - Insect Druid|1|1|{T}: Mill a card.${T}, Exile a card from your graveyard: Add one mana of any color.| Ooze Patrol|Aetherdrift|172|U|{3}{G}|Creature - Ooze|2|2|When this creature enters, mill two cards, then put a +1/+1 counter on this creature for each artifact and/or creature card in your graveyard.| Oviya, Automech Artisan|Aetherdrift|173|R|{3}{G}|Legendary Creature - Human Artificer|1|2|Each creature that's attacking one of your opponents has trample.${G}, {T}: You may put a creature or Vehicle card from your hand onto the battlefield. If you put an artifact onto the battlefield this way, put two +1/+1 counters on it.| +Plow Through|Aetherdrift|174|U|{G}|Sorcery|||Choose one --$* Target creature you control fights target creature an opponent controls.$* Destroy target Vehicle.| Point the Way|Aetherdrift|175|U|{G}|Enchantment|||Start your engines!${3}{G}, Sacrifice this enchantment: Search your library for up to X basic land cards, where X is your speed. Put those cards onto the battlefield tapped, then shuffle.| +Pothole Mole|Aetherdrift|176|C|{2}{G}|Creature - Mole|2|3|When this creature enters, mill three cards, then you may return a land card from your graveyard to your hand.| Regal Imperiosaur|Aetherdrift|177|R|{1}{G}{G}|Creature - Dinosaur|5|4|Other Dinosaurs you control get +1/+1.| Rise from the Wreck|Aetherdrift|178|U|{2}{G}|Sorcery|||Return up to one target creature card, up to one target Mount card, up to one target Vehicle card, and up to one target creature card with no abilities from your graveyard to your hand.| +Run Over|Aetherdrift|179|C|{1}{G}|Instant|||This spell costs {1} less to cast if it targets a Mount or Vehicle you control.$Target creature you control deals damage equal to its power to target creature an opponent controls.| +Silken Strength|Aetherdrift|180|C|{1}{G}|Enchantment - Aura|||Flash$Enchant creature or Vehicle$When this Aura enters, untap enchanted permanent.$Enchanted permanent gets +1/+2 and has reach.| Stampeding Scurryfoot|Aetherdrift|181|C|{G}|Creature - Mouse|1|1|Exhaust -- {3}{G}: Put a +1/+1 counter on this creature. Create a 3/3 green Elephant creature token.| Terrian, World Tyrant|Aetherdrift|182|U|{2}{G}{G}{G}|Legendary Creature - Dinosaur Ooze|9|7|| Thunderous Velocipede|Aetherdrift|183|M|{1}{G}{G}|Artifact - Vehicle|5|5|Trample$Each other Vehicle and creature you control enters with an additional +1/+1 counter on it if its mana value is 4 or less. Otherwise, it enters with three additional +1/+1 counters on it.$Crew 3| @@ -56112,17 +56160,20 @@ Apocalypse Runner|Aetherdrift|188|U|{2}{B}{R}|Artifact - Vehicle|6|5|{T}: Target Boom Scholar|Aetherdrift|189|U|{1}{R}{G}|Creature - Goblin Advisor|3|3|Exhaust abilities of other permanents you control cost {2} less to activate.$Exhaust -- {4}{R}{G}: Creatures and Vehicles you control gain trample until end of turn. Put two +1/+1 counters on this creature.| Boosted Sloop|Aetherdrift|190|U|{1}{U}{R}|Artifact - Vehicle|3|3|Menace$Whenever you attack, draw a card, then discard a card.$Crew 1| Brightglass Gearhulk|Aetherdrift|191|M|{G}{G}{W}{W}|Artifact Creature - Construct|4|4|First strike, trample$When this creature enters, you may search your library for up to two artifact, creature, and/or enchantment cards with mana value 1 or less, reveal them, put them into your hand, then shuffle.| +Broadside Barrage|Aetherdrift|192|U|{1}{U}{R}|Instant|||Broadside Barrage deals 5 damage to target creature or planeswalker. Draw a card, then discard a card.| Broodheart Engine|Aetherdrift|193|U|{B}{G}|Artifact|||At the beginning of your upkeep, surveil 1.${2}{B}{G}, {T}, Sacrifice this artifact: Return target creature or Vehicle card from your graveyard to the battlefield. Activate only as a sorcery.| Captain Howler, Sea Scourge|Aetherdrift|194|R|{2}{U}{R}|Legendary Creature - Shark Pirate|5|4|Ward--{2}, Pay 2 life.$Whenever you discard one or more cards, target creature gets +2/+0 until end of turn for each card discarded this way. Whenever that creature deals combat damage to a player this turn, you draw a card.| Caradora, Heart of Alacria|Aetherdrift|195|R|{2}{G}{W}|Legendary Creature - Human Knight|4|2|When Caradora enters, you may search your library for a Mount or Vehicle card, reveal it, put it into your hand, then shuffle.$If one or more +1/+1 counters would be put on a creature or Vehicle you control, that many plus one +1/+1 counters are put on it instead.| Cloudspire Coordinator|Aetherdrift|196|U|{R}{W}|Creature - Human Pilot|3|1|When this creature enters, scry 2.${T}: Create X 1/1 colorless Pilot creature tokens, where X is the number of Mounts and/or Vehicles that entered the battlefield under your control this turn. The tokens have "This token saddles Mounts and crews Vehicles as though its power were 2 greater."| Cloudspire Skycycle|Aetherdrift|197|U|{2}{R}{W}|Artifact - Vehicle|2|3|Flying$When this Vehicle enters, distribute two +1/+1 counters among one or two other target Vehicles and/or creatures you control.$Crew 1| +Coalstoke Gearhulk|Aetherdrift|198|M|{1}{B}{B}{R}{R}|Artifact Creature - Construct|5|4|Menace, deathtouch$When this creature enters, put target creature card with mana value 4 or less from a graveyard onto the battlefield under your control with a finality counter on it. It gains menace, deathtouch, and haste. Exile that creature at the beginning of your next end step.| Debris Beetle|Aetherdrift|199|R|{2}{B}{G}|Artifact - Vehicle|6|6|Trample$When this Vehicle enters, each opponent loses 3 life and you gain 3 life.$Crew 2| Dune Drifter|Aetherdrift|200|U|{X}{W}{B}|Artifact - Vehicle|3|3|When this Vehicle enters, return target artifact or creature card with mana value X or less from your graveyard to the battlefield.$Crew 2| Embalmed Ascendant|Aetherdrift|201|U|{1}{W}{B}|Creature - Zombie|1|2|Start your engines!$When this creature enters, create a 2/2 black Zombie creature token.$Max speed--Whenever a creature you control dies, each opponent loses 1 life and you gain 1 life.| Explosive Getaway|Aetherdrift|202|R|{3}{R}{W}|Sorcery|||Exile up to one target artifact or creature. Return it to the battlefield under its owner's control at the beginning of the next end step.$Explosive Getaway deals 4 damage to each creature.| Far Fortune, End Boss|Aetherdrift|203|R|{2}{B}{R}|Legendary Creature - Human Mercenary|4|5|Start your engines!$Whenever you attack, Far Fortune deals 1 damage to each opponent.$Max speed -- If a source you control would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 1 instead.| Fearless Swashbuckler|Aetherdrift|204|R|{1}{U}{R}|Creature - Fish Pirate|3|3|Haste$Vehicles you control have haste.$Whenever you attack, if a Pirate and a Vehicle attacked this combat, draw three cards, then discard two cards.| +Gastal Thrillseeker|Aetherdrift|205|U|{B}{R}|Creature - Lizard Berserker|2|3|Start your engines!$When this creature enters, it deals 1 damage to target opponent and you gain 1 life.$Max speed -- This creature has deathtouch and haste.| Guidelight Pathmaker|Aetherdrift|206|U|{4}{W}{U}|Artifact - Vehicle|6|5|Vigilance$When this Vehicle enters, you may search your library for an artifact card and reveal it. Put it onto the battlefield if its mana value is 2 or less. Otherwise, put it into your hand. Then shuffle.$Crew 2| Haunt the Network|Aetherdrift|207|U|{3}{U}{B}|Sorcery|||Choose target opponent. Create two 1/1 colorless Thopter artifact creature tokens with flying. Then the chosen player loses X life and you gain X life, where X is the number of artifacts you control.| Haunted Hellride|Aetherdrift|208|U|{1}{U}{B}|Artifact - Vehicle|3|3|Whenever you attack, target creature you control gets +1/+0 and gains deathtouch until end of turn. Untap it.$Crew 1| @@ -56149,6 +56200,8 @@ Winter, Cursed Rider|Aetherdrift|228|R|{U}{B}|Legendary Creature - Human Warlock Zahur, Glory's Past|Aetherdrift|229|R|{W}{B}|Legendary Creature - Zombie Cat Warrior|3|2|Start your engines!$Sacrifice another creature: Surveil 1. Activate only once each turn.$Max speed -- Whenever a nontoken creature you control dies, create a tapped 2/2 black Zombie creature token.| Aetherjacket|Aetherdrift|230|C|{3}|Artifact Creature - Thopter|2|1|Flying, vigilance${2}, {T}, Sacrifice this creature: Destroy another target artifact. Activate only as a sorcery.| The Aetherspark|Aetherdrift|231|M|{4}|Legendary Artifact Planeswalker - Equipment|4|As long as The Aetherspark is attached to a creature, The Aetherspark can't be attacked and has "Whenever equipped creature deals combat damage during your turn, put that many loyalty counters on The Aetherspark."$+1: Attach The Aetherspark to up to one target creature you control. Put a +1/+1 counter on that creature.$-5: Draw two cards.$-10: Add ten mana of any one color.| +Camera Launcher|Aetherdrift|232|C|{3}|Artifact Creature - Construct|2|2|Exhaust -- {3}: Put a +1/+1 counter on this creature. Create a 1/1 colorless Thopter artifact creature token with flying.| +Guidelight Matrix|Aetherdrift|233|C|{2}|Artifact|||When this artifact enters, draw a card.${2}, {T}: Target Mount you control becomes saddled until end of turn. Activate only as a sorcery.${2}, {t}: Target Vehicle you control becomes an artifact creature until end of turn.| Lifecraft Engine|Aetherdrift|234|R|{3}|Artifact - Vehicle|4|4|As this Vehicle enters, choose a creature type.$Vehicle creatures you control are the chosen creature type in addition to their other types.$Each creature you control of the chosen type other than this Vehicle gets +1/+1.$Crew 3| Marketback Walker|Aetherdrift|235|R|{X}{X}|Artifact Creature - Construct|0|0|This creature enters with X +1/+1 counters on it.${4}: Put a +1/+1 counter on this creature.$When this creature dies, draw a card for each +1/+1 counter on it.| Marshals' Pathcruiser|Aetherdrift|236|U|{3}|Artifact - Vehicle|6|5|When this Vehicle enters, search your library for a basic land card, reveal it, put it into your hand, then shuffle.$Exhaust -- {W}{U}{B}{R}{G}: This Vehicle becomes an artifact creature. Put two +1/+1 counters on it.$Crew 5| @@ -56158,7 +56211,10 @@ Racers' Scoreboard|Aetherdrift|239|U|{4}|Artifact|||Start your engines!$When thi Radiant Lotus|Aetherdrift|240|M|{6}|Artifact|||{T}, Sacrifice one or more artifacts: Choose a color. Target player adds three mana of the chosen color for each artifact sacrificed this way.| Rover Blades|Aetherdrift|241|U|{3}|Artifact - Equipment Vehicle|2|2|Double strike$Equipped creature has double strike.$Equip {4}$Crew 2| Scrap Compactor|Aetherdrift|242|C|{1}|Artifact|||{3}, {T}, Sacrifice this artifact: It deals 3 damage to target creature.${6}, {T}, Sacrifice this artifact: Destroy target creature or Vehicle.| +Skybox Ferry|Aetherdrift|243|C|{5}|Artifact - Vehicle|4|4|Flying$Crew 2$Cycling {2}| Starting Column|Aetherdrift|244|C|{3}|Artifact|||Start your engines!${T}: Add one mana of any color.$Max speed -- {T}, Sacrifice this artifact: Draw two cards, then discard a card.| +Ticket Tortoise|Aetherdrift|245|C|{2}|Artifact Creature - Turtle|3|1|Defender$When this creature enters, if an opponent controls more lands than you, you create a Treasure token.| +Walking Sarcophagus|Aetherdrift|246|C|{2}|Artifact Creature - Zombie Cat|2|1|Start your engines!$Max speed -- This creature gets +1/+2.| Wreck Remover|Aetherdrift|247|C|{4}|Artifact Creature - Construct|3|4|Whenever this creature enters or attacks, exile up to one target card from a graveyard. You gain 1 life.$Cycling {2}| Amonkhet Raceway|Aetherdrift|248|U||Land|||Start your engines!${T}: Add {C}.$Max speed -- {T}: Target creature gains haste until end of turn.| Avishkar Raceway|Aetherdrift|249|C||Land|||Start your engines!${T}: Add {C}.$Max speed -- {3}, {T}, Discard a card: Draw a card.| @@ -56184,9 +56240,9 @@ Wastewood Verge|Aetherdrift|268|R||Land|||{T}: Add {G}.${T}: Add {B}. Activate o Wild Roads|Aetherdrift|269|U||Land|||This land enters tapped unless you control a Mount or Vehicle.${T}: Add {G}.${1}{G}, {T}, Sacrifice this land: Create a 1/1 colorless Pilot creature token with "This token saddles Mounts and crews Vehicles as though its power were 2 greater." Activate only as a sorcery.| Willowrush Verge|Aetherdrift|270|R||Land|||{T}: Add {U}.${T}: Add {G}. Activate only if you control a Forest or an Island.| Wind-Scarred Crag|Aetherdrift|271|C||Land|||This land enters tapped.$When this land enters, you gain 1 life.${T}: Add {R} or {W}.| -Plains|Aetherdrift|272|C||Basic Land - Plains|||({T}: Add {W}.)| -Swamp|Aetherdrift|274|C||Basic Land - Swamp|||({T}: Add {B}.)| +Plains|Aetherdrift|277|C||Basic Land - Plains|||({T}: Add {W}.)| Island|Aetherdrift|280|C||Basic Land - Island|||({T}: Add {U}.)| +Swamp|Aetherdrift|283|C||Basic Land - Swamp|||({T}: Add {B}.)| Mountain|Aetherdrift|286|C||Basic Land - Mountain|||({T}: Add {R}.)| Forest|Aetherdrift|289|C||Basic Land - Forest|||({T}: Add {G}.)| Dawnwing Marshal|Foundations Jumpstart|1|U|{1}{W}|Creature - Cat Soldier|2|2|Flying${4}{W}: Creatures you control get +1/+1 until end of turn.| -- 2.47.2 From f88fc75bacf42279312ac3da740ab2e3d6f9ea64 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:20:36 -0500 Subject: [PATCH 17/51] [DFT] Implement Skybox Ferry --- Mage.Sets/src/mage/cards/s/SkyboxFerry.java | 45 +++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 46 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SkyboxFerry.java diff --git a/Mage.Sets/src/mage/cards/s/SkyboxFerry.java b/Mage.Sets/src/mage/cards/s/SkyboxFerry.java new file mode 100644 index 00000000000..d1e4eb7ad74 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SkyboxFerry.java @@ -0,0 +1,45 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.CyclingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SkyboxFerry extends CardImpl { + + public SkyboxFerry(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); + + this.subtype.add(SubType.VEHICLE); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Crew 2 + this.addAbility(new CrewAbility(2)); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); + } + + private SkyboxFerry(final SkyboxFerry card) { + super(card); + } + + @Override + public SkyboxFerry copy() { + return new SkyboxFerry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index a551b6c6246..c3a40902e06 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -140,6 +140,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Salvation Engine", 27, Rarity.MYTHIC, mage.cards.s.SalvationEngine.class)); cards.add(new SetCardInfo("Scoured Barrens", 263, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); cards.add(new SetCardInfo("Shefet Archfiend", 104, Rarity.UNCOMMON, mage.cards.s.ShefetArchfiend.class)); + cards.add(new SetCardInfo("Skybox Ferry", 243, Rarity.COMMON, mage.cards.s.SkyboxFerry.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); cards.add(new SetCardInfo("Starting Column", 244, Rarity.COMMON, mage.cards.s.StartingColumn.class)); -- 2.47.2 From e3f197458d9e4f9d451a1b3f2d0ae0c2ba7b1b44 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:21:25 -0500 Subject: [PATCH 18/51] [DFT] Implement Walking Sarcophagus --- .../src/mage/cards/w/WalkingSarcophagus.java | 43 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 44 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WalkingSarcophagus.java diff --git a/Mage.Sets/src/mage/cards/w/WalkingSarcophagus.java b/Mage.Sets/src/mage/cards/w/WalkingSarcophagus.java new file mode 100644 index 00000000000..f9e17cbc371 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WalkingSarcophagus.java @@ -0,0 +1,43 @@ +package mage.cards.w; + +import mage.MageInt; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class WalkingSarcophagus extends CardImpl { + + public WalkingSarcophagus(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}"); + + this.subtype.add(SubType.ZOMBIE); + this.subtype.add(SubType.CAT); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- This creature gets +1/+2. + this.addAbility(new MaxSpeedAbility(new BoostSourceEffect(1, 2, Duration.WhileOnBattlefield))); + } + + private WalkingSarcophagus(final WalkingSarcophagus card) { + super(card); + } + + @Override + public WalkingSarcophagus copy() { + return new WalkingSarcophagus(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index c3a40902e06..27091369d9f 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -165,6 +165,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Venomsac Lagac", 185, Rarity.COMMON, mage.cards.v.VenomsacLagac.class)); cards.add(new SetCardInfo("Veteran Beastrider", 226, Rarity.UNCOMMON, mage.cards.v.VeteranBeastrider.class)); cards.add(new SetCardInfo("Voyage Home", 227, Rarity.UNCOMMON, mage.cards.v.VoyageHome.class)); + cards.add(new SetCardInfo("Walking Sarcophagus", 246, Rarity.COMMON, mage.cards.w.WalkingSarcophagus.class)); cards.add(new SetCardInfo("Wastewood Verge", 268, Rarity.RARE, mage.cards.w.WastewoodVerge.class)); cards.add(new SetCardInfo("Waxen Shapethief", 74, Rarity.RARE, mage.cards.w.WaxenShapethief.class)); cards.add(new SetCardInfo("Wild Roads", 269, Rarity.UNCOMMON, mage.cards.w.WildRoads.class)); -- 2.47.2 From e9796d1547c8cebdcfd22f2c67fb042918bd6658 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:22:32 -0500 Subject: [PATCH 19/51] [DFT] Implement Camera Launcher --- .../src/mage/cards/c/CameraLauncher.java | 46 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/c/CameraLauncher.java diff --git a/Mage.Sets/src/mage/cards/c/CameraLauncher.java b/Mage.Sets/src/mage/cards/c/CameraLauncher.java new file mode 100644 index 00000000000..150cf25373d --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CameraLauncher.java @@ -0,0 +1,46 @@ +package mage.cards.c; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.ExhaustAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.game.permanent.token.ThopterColorlessToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class CameraLauncher extends CardImpl { + + public CameraLauncher(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}"); + + this.subtype.add(SubType.CONSTRUCT); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Exhaust -- {3}: Put a +1/+1 counter on this creature. Create a 1/1 colorless Thopter artifact creature token with flying. + Ability ability = new ExhaustAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new GenericManaCost(3) + ); + ability.addEffect(new CreateTokenEffect(new ThopterColorlessToken())); + this.addAbility(ability); + } + + private CameraLauncher(final CameraLauncher card) { + super(card); + } + + @Override + public CameraLauncher copy() { + return new CameraLauncher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 27091369d9f..1a6a2633b63 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -52,6 +52,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Bulwark Ox", 7, Rarity.RARE, mage.cards.b.BulwarkOx.class)); cards.add(new SetCardInfo("Burnout Bashtronaut", 115, Rarity.RARE, mage.cards.b.BurnoutBashtronaut.class)); cards.add(new SetCardInfo("Caelorna, Coral Tyrant", 40, Rarity.UNCOMMON, mage.cards.c.CaelornaCoralTyrant.class)); + cards.add(new SetCardInfo("Camera Launcher", 232, Rarity.COMMON, mage.cards.c.CameraLauncher.class)); cards.add(new SetCardInfo("Caradora, Heart of Alacria", 195, Rarity.RARE, mage.cards.c.CaradoraHeartOfAlacria.class)); cards.add(new SetCardInfo("Clamorous Ironclad", 117, Rarity.COMMON, mage.cards.c.ClamorousIronclad.class)); cards.add(new SetCardInfo("Cloudspire Captain", 9, Rarity.UNCOMMON, mage.cards.c.CloudspireCaptain.class)); -- 2.47.2 From 3ca8e07b3159dc003d06d437b62bbc45a03360ca Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:23:48 -0500 Subject: [PATCH 20/51] [DFT] Implement Broadside Barrage --- .../src/mage/cards/b/BroadsideBarrage.java | 34 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/b/BroadsideBarrage.java diff --git a/Mage.Sets/src/mage/cards/b/BroadsideBarrage.java b/Mage.Sets/src/mage/cards/b/BroadsideBarrage.java new file mode 100644 index 00000000000..1f0ca9cc536 --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BroadsideBarrage.java @@ -0,0 +1,34 @@ +package mage.cards.b; + +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetCreatureOrPlaneswalker; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BroadsideBarrage extends CardImpl { + + public BroadsideBarrage(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}{R}"); + + // Broadside Barrage deals 5 damage to target creature or planeswalker. Draw a card, then discard a card. + this.getSpellAbility().addEffect(new DamageTargetEffect(5)); + this.getSpellAbility().addEffect(new DrawDiscardControllerEffect(1, 1)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); + } + + private BroadsideBarrage(final BroadsideBarrage card) { + super(card); + } + + @Override + public BroadsideBarrage copy() { + return new BroadsideBarrage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 1a6a2633b63..640de59c1d4 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -48,6 +48,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Brightfield Glider", 4, Rarity.COMMON, mage.cards.b.BrightfieldGlider.class)); cards.add(new SetCardInfo("Brightfield Mustang", 5, Rarity.COMMON, mage.cards.b.BrightfieldMustang.class)); cards.add(new SetCardInfo("Brightglass Gearhulk", 191, Rarity.MYTHIC, mage.cards.b.BrightglassGearhulk.class)); + cards.add(new SetCardInfo("Broadside Barrage", 192, Rarity.UNCOMMON, mage.cards.b.BroadsideBarrage.class)); cards.add(new SetCardInfo("Broken Wings", 156, Rarity.COMMON, mage.cards.b.BrokenWings.class)); cards.add(new SetCardInfo("Bulwark Ox", 7, Rarity.RARE, mage.cards.b.BulwarkOx.class)); cards.add(new SetCardInfo("Burnout Bashtronaut", 115, Rarity.RARE, mage.cards.b.BurnoutBashtronaut.class)); -- 2.47.2 From 850f340b65d189d5b2f35f30e24baadac35df014 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:30:41 -0500 Subject: [PATCH 21/51] [DFT] Implement Silken Strength --- .../src/mage/cards/s/SilkenStrength.java | 75 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 76 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SilkenStrength.java diff --git a/Mage.Sets/src/mage/cards/s/SilkenStrength.java b/Mage.Sets/src/mage/cards/s/SilkenStrength.java new file mode 100644 index 00000000000..617f66d152a --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SilkenStrength.java @@ -0,0 +1,75 @@ +package mage.cards.s; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.UntapAttachedEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SilkenStrength extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); + + static { + filter.add(Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + } + + public SilkenStrength(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); + + this.subtype.add(SubType.AURA); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Enchant creature or Vehicle + TargetPermanent auraTarget = new TargetPermanent(filter); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.addAbility(new EnchantAbility(auraTarget)); + + // When this Aura enters, untap enchanted permanent. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new UntapAttachedEffect(AttachmentType.AURA, "permanent") + )); + + // Enchanted permanent gets +1/+2 and has reach. + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 2) + .setText("enchanted permanent has +1/+2")); + ability.addEffect(new GainAbilityAttachedEffect( + ReachAbility.getInstance(), AttachmentType.AURA + ).setText("and has reach")); + this.addAbility(ability); + } + + private SilkenStrength(final SilkenStrength card) { + super(card); + } + + @Override + public SilkenStrength copy() { + return new SilkenStrength(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 640de59c1d4..cccaff7c7d2 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -142,6 +142,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Salvation Engine", 27, Rarity.MYTHIC, mage.cards.s.SalvationEngine.class)); cards.add(new SetCardInfo("Scoured Barrens", 263, Rarity.COMMON, mage.cards.s.ScouredBarrens.class)); cards.add(new SetCardInfo("Shefet Archfiend", 104, Rarity.UNCOMMON, mage.cards.s.ShefetArchfiend.class)); + cards.add(new SetCardInfo("Silken Strength", 180, Rarity.COMMON, mage.cards.s.SilkenStrength.class)); cards.add(new SetCardInfo("Skybox Ferry", 243, Rarity.COMMON, mage.cards.s.SkyboxFerry.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); -- 2.47.2 From 3a8b86a59c9c8750f4be6763382a0c281eac54b4 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:32:34 -0500 Subject: [PATCH 22/51] [DFT] Implement Plow Through --- Mage.Sets/src/mage/cards/p/PlowThrough.java | 45 +++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 46 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/PlowThrough.java diff --git a/Mage.Sets/src/mage/cards/p/PlowThrough.java b/Mage.Sets/src/mage/cards/p/PlowThrough.java new file mode 100644 index 00000000000..ec3432f3c7d --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PlowThrough.java @@ -0,0 +1,45 @@ +package mage.cards.p; + +import mage.abilities.Mode; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.FightTargetsEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class PlowThrough extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent(SubType.VEHICLE, "Vehicle"); + + public PlowThrough(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G}"); + + // Choose one -- + // * Target creature you control fights target creature an opponent controls. + this.getSpellAbility().addEffect(new FightTargetsEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent()); + + // * Destroy target Vehicle. + this.getSpellAbility().addMode(new Mode(new DestroyTargetEffect()).addTarget(new TargetPermanent(filter))); + } + + private PlowThrough(final PlowThrough card) { + super(card); + } + + @Override + public PlowThrough copy() { + return new PlowThrough(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index cccaff7c7d2..eb5d154ae37 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -118,6 +118,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Pacesetter Paragon", 140, Rarity.UNCOMMON, mage.cards.p.PacesetterParagon.class)); cards.add(new SetCardInfo("Pedal to the Metal", 141, Rarity.COMMON, mage.cards.p.PedalToTheMetal.class)); cards.add(new SetCardInfo("Plains", 272, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plow Through", 174, Rarity.UNCOMMON, mage.cards.p.PlowThrough.class)); cards.add(new SetCardInfo("Possession Engine", 54, Rarity.RARE, mage.cards.p.PossessionEngine.class)); cards.add(new SetCardInfo("Pride of the Road", 24, Rarity.UNCOMMON, mage.cards.p.PrideOfTheRoad.class)); cards.add(new SetCardInfo("Prowcatcher Specialist", 142, Rarity.COMMON, mage.cards.p.ProwcatcherSpecialist.class)); -- 2.47.2 From 69661152208bcf5103e03cfb4ef707b2ac757742 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:33:48 -0500 Subject: [PATCH 23/51] [DFT] Implement Hazard of the Dunes --- .../src/mage/cards/h/HazardOfTheDunes.java | 49 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/h/HazardOfTheDunes.java diff --git a/Mage.Sets/src/mage/cards/h/HazardOfTheDunes.java b/Mage.Sets/src/mage/cards/h/HazardOfTheDunes.java new file mode 100644 index 00000000000..846de1ce3e0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HazardOfTheDunes.java @@ -0,0 +1,49 @@ +package mage.cards.h; + +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.ExhaustAbility; +import mage.abilities.keyword.ReachAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class HazardOfTheDunes extends CardImpl { + + public HazardOfTheDunes(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); + + this.subtype.add(SubType.WURM); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Exhaust -- {6}{G}: Put three +1/+1 counters on this creature. + this.addAbility(new ExhaustAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), new ManaCostsImpl<>("{6}{G}") + )); + } + + private HazardOfTheDunes(final HazardOfTheDunes card) { + super(card); + } + + @Override + public HazardOfTheDunes copy() { + return new HazardOfTheDunes(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index eb5d154ae37..9a03c6a9b82 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -92,6 +92,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Guardian Sunmare", 15, Rarity.RARE, mage.cards.g.GuardianSunmare.class)); cards.add(new SetCardInfo("Guidelight Pathmaker", 206, Rarity.UNCOMMON, mage.cards.g.GuidelightPathmaker.class)); cards.add(new SetCardInfo("Haunted Hellride", 208, Rarity.UNCOMMON, mage.cards.h.HauntedHellride.class)); + cards.add(new SetCardInfo("Hazard of the Dunes", 165, Rarity.COMMON, mage.cards.h.HazardOfTheDunes.class)); cards.add(new SetCardInfo("Hazoret, Godseeker", 133, Rarity.MYTHIC, mage.cards.h.HazoretGodseeker.class)); cards.add(new SetCardInfo("Howler's Heavy", 46, Rarity.COMMON, mage.cards.h.HowlersHeavy.class)); cards.add(new SetCardInfo("Hulldrifter", 47, Rarity.COMMON, mage.cards.h.Hulldrifter.class)); -- 2.47.2 From 578763f9f4d54045e13b22170ba40009780c11a7 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:34:17 -0500 Subject: [PATCH 24/51] [DFT] Implement Jibbirik Omnivore --- .../src/mage/cards/j/JibbirikOmnivore.java | 32 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/j/JibbirikOmnivore.java diff --git a/Mage.Sets/src/mage/cards/j/JibbirikOmnivore.java b/Mage.Sets/src/mage/cards/j/JibbirikOmnivore.java new file mode 100644 index 00000000000..5abe83569ba --- /dev/null +++ b/Mage.Sets/src/mage/cards/j/JibbirikOmnivore.java @@ -0,0 +1,32 @@ +package mage.cards.j; + +import mage.MageInt; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class JibbirikOmnivore extends CardImpl { + + public JibbirikOmnivore(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); + + this.subtype.add(SubType.BEAST); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + } + + private JibbirikOmnivore(final JibbirikOmnivore card) { + super(card); + } + + @Override + public JibbirikOmnivore copy() { + return new JibbirikOmnivore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 9a03c6a9b82..9e2bb8116ff 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -99,6 +99,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Interface Ace", 17, Rarity.COMMON, mage.cards.i.InterfaceAce.class)); cards.add(new SetCardInfo("Intimidation Tactics", 92, Rarity.UNCOMMON, mage.cards.i.IntimidationTactics.class)); cards.add(new SetCardInfo("Island", 280, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jibbirik Omnivore", 166, Rarity.COMMON, mage.cards.j.JibbirikOmnivore.class)); cards.add(new SetCardInfo("Jungle Hollow", 256, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kalakscion, Hunger Tyrant", 93, Rarity.UNCOMMON, mage.cards.k.KalakscionHungerTyrant.class)); cards.add(new SetCardInfo("Lagorin, Soul of Alacria", 211, Rarity.UNCOMMON, mage.cards.l.LagorinSoulOfAlacria.class)); -- 2.47.2 From 03e410cd3b956684564f053ccee765b72bc2db22 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:34:48 -0500 Subject: [PATCH 25/51] [DFT] Implement Migrating Ketradon --- .../src/mage/cards/m/MigratingKetradon.java | 46 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MigratingKetradon.java diff --git a/Mage.Sets/src/mage/cards/m/MigratingKetradon.java b/Mage.Sets/src/mage/cards/m/MigratingKetradon.java new file mode 100644 index 00000000000..c26dd3ca7a9 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MigratingKetradon.java @@ -0,0 +1,46 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MigratingKetradon extends CardImpl { + + public MigratingKetradon(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); + + this.subtype.add(SubType.DINOSAUR); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // When this creature enters, you gain 4 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(4))); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); + } + + private MigratingKetradon(final MigratingKetradon card) { + super(card); + } + + @Override + public MigratingKetradon copy() { + return new MigratingKetradon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 9e2bb8116ff..0cba6b93fa3 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -110,6 +110,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Marshals' Pathcruiser", 236, Rarity.UNCOMMON, mage.cards.m.MarshalsPathcruiser.class)); cards.add(new SetCardInfo("Maximum Overdrive", 96, Rarity.COMMON, mage.cards.m.MaximumOverdrive.class)); cards.add(new SetCardInfo("Midnight Mangler", 50, Rarity.COMMON, mage.cards.m.MidnightMangler.class)); + cards.add(new SetCardInfo("Migrating Ketradon", 170, Rarity.COMMON, mage.cards.m.MigratingKetradon.class)); cards.add(new SetCardInfo("Mindspring Merfolk", 51, Rarity.RARE, mage.cards.m.MindspringMerfolk.class)); cards.add(new SetCardInfo("Molt Tender", 171, Rarity.UNCOMMON, mage.cards.m.MoltTender.class)); cards.add(new SetCardInfo("Monument to Endurance", 237, Rarity.RARE, mage.cards.m.MonumentToEndurance.class)); -- 2.47.2 From 05a52c5fa0dd5c0bf373bf2d70bef1e95c2a3f98 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:35:39 -0500 Subject: [PATCH 26/51] [DFT] Implement Alacrian Jaguar --- .../src/mage/cards/a/AlacrianJaguar.java | 49 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 50 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/a/AlacrianJaguar.java diff --git a/Mage.Sets/src/mage/cards/a/AlacrianJaguar.java b/Mage.Sets/src/mage/cards/a/AlacrianJaguar.java new file mode 100644 index 00000000000..ed6110a97b9 --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AlacrianJaguar.java @@ -0,0 +1,49 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.common.AttacksWhileSaddledTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.SaddleAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class AlacrianJaguar extends CardImpl { + + public AlacrianJaguar(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); + + this.subtype.add(SubType.CAT); + this.subtype.add(SubType.MOUNT); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Whenever this creature attacks while saddled, it gets +2/+2 until end of turn. + this.addAbility(new AttacksWhileSaddledTriggeredAbility( + new BoostSourceEffect(2, 2, Duration.EndOfTurn, "it") + )); + + // Saddle 1 + this.addAbility(new SaddleAbility(1)); + } + + private AlacrianJaguar(final AlacrianJaguar card) { + super(card); + } + + @Override + public AlacrianJaguar copy() { + return new AlacrianJaguar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 0cba6b93fa3..8e0ced98545 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -31,6 +31,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Afterburner Expert", 150, Rarity.RARE, mage.cards.a.AfterburnerExpert.class)); cards.add(new SetCardInfo("Agonasaur Rex", 151, Rarity.RARE, mage.cards.a.AgonasaurRex.class)); cards.add(new SetCardInfo("Air Response Unit", 1, Rarity.UNCOMMON, mage.cards.a.AirResponseUnit.class)); + cards.add(new SetCardInfo("Alacrian Jaguar", 152, Rarity.COMMON, mage.cards.a.AlacrianJaguar.class)); cards.add(new SetCardInfo("Amonkhet Raceway", 248, Rarity.UNCOMMON, mage.cards.a.AmonkhetRaceway.class)); cards.add(new SetCardInfo("Apocalypse Runner", 188, Rarity.UNCOMMON, mage.cards.a.ApocalypseRunner.class)); cards.add(new SetCardInfo("Avishkar Raceway", 249, Rarity.COMMON, mage.cards.a.AvishkarRaceway.class)); -- 2.47.2 From 362883eedc2a1c633906a13290e4e0e62d9927ae Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:36:17 -0500 Subject: [PATCH 27/51] [DFT] Implement Skycrash --- Mage.Sets/src/mage/cards/s/Skycrash.java | 37 ++++++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 38 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/Skycrash.java diff --git a/Mage.Sets/src/mage/cards/s/Skycrash.java b/Mage.Sets/src/mage/cards/s/Skycrash.java new file mode 100644 index 00000000000..a6cb039bc17 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/Skycrash.java @@ -0,0 +1,37 @@ +package mage.cards.s; + +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetArtifactPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class Skycrash extends CardImpl { + + public Skycrash(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}"); + + // Destroy target artifact. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetArtifactPermanent()); + + // Cycling {R} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{R}"))); + } + + private Skycrash(final Skycrash card) { + super(card); + } + + @Override + public Skycrash copy() { + return new Skycrash(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 8e0ced98545..4f62790d8cd 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -149,6 +149,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Shefet Archfiend", 104, Rarity.UNCOMMON, mage.cards.s.ShefetArchfiend.class)); cards.add(new SetCardInfo("Silken Strength", 180, Rarity.COMMON, mage.cards.s.SilkenStrength.class)); cards.add(new SetCardInfo("Skybox Ferry", 243, Rarity.COMMON, mage.cards.s.SkyboxFerry.class)); + cards.add(new SetCardInfo("Skycrash", 146, Rarity.UNCOMMON, mage.cards.s.Skycrash.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); cards.add(new SetCardInfo("Starting Column", 244, Rarity.COMMON, mage.cards.s.StartingColumn.class)); -- 2.47.2 From ca2359f45c00e93776989df4d49d76609832897d Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:37:40 -0500 Subject: [PATCH 28/51] [DFT] Implement Dynamite Driver --- Mage.Sets/src/mage/cards/d/DynamiteDiver.java | 46 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DynamiteDiver.java diff --git a/Mage.Sets/src/mage/cards/d/DynamiteDiver.java b/Mage.Sets/src/mage/cards/d/DynamiteDiver.java new file mode 100644 index 00000000000..11dbd1f1d34 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DynamiteDiver.java @@ -0,0 +1,46 @@ +package mage.cards.d; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.CrewSaddleIncreasedPowerAbility; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.target.common.TargetAnyTarget; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DynamiteDiver extends CardImpl { + + public DynamiteDiver(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); + + this.subtype.add(SubType.GOBLIN); + this.subtype.add(SubType.PILOT); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // This creature saddles Mounts and crews Vehicles as though its power were 2 greater. + this.addAbility(new CrewSaddleIncreasedPowerAbility()); + + // When this creature dies, it deals 1 damage to any target. + Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(1, "it")); + ability.addTarget(new TargetAnyTarget()); + this.addAbility(ability); + } + + private DynamiteDiver(final DynamiteDiver card) { + super(card); + } + + @Override + public DynamiteDiver copy() { + return new DynamiteDiver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 4f62790d8cd..a6a13a70090 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -74,6 +74,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Draconautics Engineer", 121, Rarity.RARE, mage.cards.d.DraconauticsEngineer.class)); cards.add(new SetCardInfo("Dracosaur Auxiliary", 122, Rarity.UNCOMMON, mage.cards.d.DracosaurAuxiliary.class)); cards.add(new SetCardInfo("Dredger's Insight", 159, Rarity.UNCOMMON, mage.cards.d.DredgersInsight.class)); + cards.add(new SetCardInfo("Dynamite Diver", 123, Rarity.COMMON, mage.cards.d.DynamiteDiver.class)); cards.add(new SetCardInfo("Earthrumbler", 160, Rarity.UNCOMMON, mage.cards.e.Earthrumbler.class)); cards.add(new SetCardInfo("Embalmed Ascendant", 201, Rarity.UNCOMMON, mage.cards.e.EmbalmedAscendant.class)); cards.add(new SetCardInfo("Endrider Catalyzer", 124, Rarity.COMMON, mage.cards.e.EndriderCatalyzer.class)); -- 2.47.2 From dca01cfc11bbe8c961be0fac625d7e09845c8404 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:38:14 -0500 Subject: [PATCH 29/51] [DFT] Implement Wreckage Wickerfolk --- .../src/mage/cards/w/WreckageWickerfolk.java | 41 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WreckageWickerfolk.java diff --git a/Mage.Sets/src/mage/cards/w/WreckageWickerfolk.java b/Mage.Sets/src/mage/cards/w/WreckageWickerfolk.java new file mode 100644 index 00000000000..f19d3818cf6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WreckageWickerfolk.java @@ -0,0 +1,41 @@ +package mage.cards.w; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.keyword.SurveilEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class WreckageWickerfolk extends CardImpl { + + public WreckageWickerfolk(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{B}"); + + this.subtype.add(SubType.SCARECROW); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When this creature enters, surveil 2. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SurveilEffect(2))); + } + + private WreckageWickerfolk(final WreckageWickerfolk card) { + super(card); + } + + @Override + public WreckageWickerfolk copy() { + return new WreckageWickerfolk(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index a6a13a70090..531f81b6841 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -182,6 +182,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Willowrush Verge", 270, Rarity.RARE, mage.cards.w.WillowrushVerge.class)); cards.add(new SetCardInfo("Wind-Scarred Crag", 271, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); cards.add(new SetCardInfo("Wreck Remover", 247, Rarity.COMMON, mage.cards.w.WreckRemover.class)); + cards.add(new SetCardInfo("Wreckage Wickerfolk", 110, Rarity.COMMON, mage.cards.w.WreckageWickerfolk.class)); cards.add(new SetCardInfo("Wretched Doll", 111, Rarity.UNCOMMON, mage.cards.w.WretchedDoll.class)); cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); -- 2.47.2 From 20038dbcaea8f1fc59d4abcc877552f916a9faca Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:39:10 -0500 Subject: [PATCH 30/51] [DFT] Implement Syphon Fuel --- Mage.Sets/src/mage/cards/s/SyphonFuel.java | 34 ++++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SyphonFuel.java diff --git a/Mage.Sets/src/mage/cards/s/SyphonFuel.java b/Mage.Sets/src/mage/cards/s/SyphonFuel.java new file mode 100644 index 00000000000..e8575717017 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SyphonFuel.java @@ -0,0 +1,34 @@ +package mage.cards.s; + +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SyphonFuel extends CardImpl { + + public SyphonFuel(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{B}"); + + // Target creature gets -6/-6 until end of turn. You gain 2 life. + this.getSpellAbility().addEffect(new BoostTargetEffect(-6, -6)); + this.getSpellAbility().addEffect(new GainLifeEffect(2)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + private SyphonFuel(final SyphonFuel card) { + super(card); + } + + @Override + public SyphonFuel copy() { + return new SyphonFuel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 531f81b6841..5ded3e16d92 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -159,6 +159,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Sunbillow Verge", 264, Rarity.RARE, mage.cards.s.SunbillowVerge.class)); cards.add(new SetCardInfo("Swamp", 274, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swiftwater Cliffs", 265, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); + cards.add(new SetCardInfo("Syphon Fuel", 108, Rarity.COMMON, mage.cards.s.SyphonFuel.class)); cards.add(new SetCardInfo("Terrian, World Tyrant", 182, Rarity.UNCOMMON, mage.cards.t.TerrianWorldTyrant.class)); cards.add(new SetCardInfo("The Last Ride", 94, Rarity.MYTHIC, mage.cards.t.TheLastRide.class)); cards.add(new SetCardInfo("The Speed Demon", 105, Rarity.MYTHIC, mage.cards.t.TheSpeedDemon.class)); -- 2.47.2 From cafe6df848042d37bbcc19a226bdfb839fc4e61c Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:40:23 -0500 Subject: [PATCH 31/51] [DFT] Implement Mutant Surveyor --- .../src/mage/cards/m/MutantSurveyor.java | 58 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 59 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MutantSurveyor.java diff --git a/Mage.Sets/src/mage/cards/m/MutantSurveyor.java b/Mage.Sets/src/mage/cards/m/MutantSurveyor.java new file mode 100644 index 00000000000..aacf860db88 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MutantSurveyor.java @@ -0,0 +1,58 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MutantSurveyor extends CardImpl { + + public MutantSurveyor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.subtype.add(SubType.MUTANT); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // {2}: This creature gets +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect( + 1, 1, Duration.EndOfTurn + ), new GenericManaCost(2))); + + // Max speed -- {3}, Exile this card from your graveyard: Draw a card. + Ability ability = new SimpleActivatedAbility( + Zone.GRAVEYARD, new DrawCardSourceControllerEffect(1), new GenericManaCost(3) + ); + ability.addCost(new ExileSourceFromGraveCost()); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private MutantSurveyor(final MutantSurveyor card) { + super(card); + } + + @Override + public MutantSurveyor copy() { + return new MutantSurveyor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 5ded3e16d92..21579071f95 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -118,6 +118,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Monument to Endurance", 237, Rarity.RARE, mage.cards.m.MonumentToEndurance.class)); cards.add(new SetCardInfo("Mountain", 286, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Muraganda Raceway", 257, Rarity.RARE, mage.cards.m.MuragandaRaceway.class)); + cards.add(new SetCardInfo("Mutant Surveyor", 98, Rarity.COMMON, mage.cards.m.MutantSurveyor.class)); cards.add(new SetCardInfo("Nesting Bot", 22, Rarity.UNCOMMON, mage.cards.n.NestingBot.class)); cards.add(new SetCardInfo("Night Market", 258, Rarity.COMMON, mage.cards.n.NightMarket.class)); cards.add(new SetCardInfo("Pacesetter Paragon", 140, Rarity.UNCOMMON, mage.cards.p.PacesetterParagon.class)); -- 2.47.2 From ba9150d86150e9cfba5645890de6bfdd11e39e86 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:41:04 -0500 Subject: [PATCH 32/51] [DFT] Implement Locust Spray --- Mage.Sets/src/mage/cards/l/LocustSpray.java | 37 +++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 38 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/l/LocustSpray.java diff --git a/Mage.Sets/src/mage/cards/l/LocustSpray.java b/Mage.Sets/src/mage/cards/l/LocustSpray.java new file mode 100644 index 00000000000..d4499564b5f --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LocustSpray.java @@ -0,0 +1,37 @@ +package mage.cards.l; + +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class LocustSpray extends CardImpl { + + public LocustSpray(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}"); + + // Target creature gets -1/-1 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(-1, -1)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Cycling {B} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{B}"))); + } + + private LocustSpray(final LocustSpray card) { + super(card); + } + + @Override + public LocustSpray copy() { + return new LocustSpray(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 21579071f95..a5b159ff5b1 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -107,6 +107,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Lagorin, Soul of Alacria", 211, Rarity.UNCOMMON, mage.cards.l.LagorinSoulOfAlacria.class)); cards.add(new SetCardInfo("Lightning Strike", 136, Rarity.COMMON, mage.cards.l.LightningStrike.class)); cards.add(new SetCardInfo("Lightshield Parry", 19, Rarity.COMMON, mage.cards.l.LightshieldParry.class)); + cards.add(new SetCardInfo("Locust Spray", 95, Rarity.UNCOMMON, mage.cards.l.LocustSpray.class)); cards.add(new SetCardInfo("Loxodon Surveyor", 167, Rarity.COMMON, mage.cards.l.LoxodonSurveyor.class)); cards.add(new SetCardInfo("Marketback Walker", 235, Rarity.RARE, mage.cards.m.MarketbackWalker.class)); cards.add(new SetCardInfo("Marshals' Pathcruiser", 236, Rarity.UNCOMMON, mage.cards.m.MarshalsPathcruiser.class)); -- 2.47.2 From dfea2810955d4eae0203a8dc18cd5da945504f04 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:41:50 -0500 Subject: [PATCH 33/51] [DFT] Implement Risky Shortcut --- Mage.Sets/src/mage/cards/r/RiskyShortcut.java | 32 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 33 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RiskyShortcut.java diff --git a/Mage.Sets/src/mage/cards/r/RiskyShortcut.java b/Mage.Sets/src/mage/cards/r/RiskyShortcut.java new file mode 100644 index 00000000000..4f6450aecc8 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RiskyShortcut.java @@ -0,0 +1,32 @@ +package mage.cards.r; + +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RiskyShortcut extends CardImpl { + + public RiskyShortcut(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}"); + + // Draw two cards. Each player loses 2 life. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeAllPlayersEffect(2)); + } + + private RiskyShortcut(final RiskyShortcut card) { + super(card); + } + + @Override + public RiskyShortcut copy() { + return new RiskyShortcut(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index a5b159ff5b1..1e8ae37d93a 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -139,6 +139,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Ride's End", 25, Rarity.COMMON, mage.cards.r.RidesEnd.class)); cards.add(new SetCardInfo("Ripclaw Wrangler", 101, Rarity.COMMON, mage.cards.r.RipclawWrangler.class)); cards.add(new SetCardInfo("Risen Necroregent", 102, Rarity.UNCOMMON, mage.cards.r.RisenNecroregent.class)); + cards.add(new SetCardInfo("Risky Shortcut", 103, Rarity.COMMON, mage.cards.r.RiskyShortcut.class)); cards.add(new SetCardInfo("Riverpyre Verge", 260, Rarity.RARE, mage.cards.r.RiverpyreVerge.class)); cards.add(new SetCardInfo("Roadside Assistance", 26, Rarity.UNCOMMON, mage.cards.r.RoadsideAssistance.class)); cards.add(new SetCardInfo("Roadside Blowout", 58, Rarity.UNCOMMON, mage.cards.r.RoadsideBlowout.class)); -- 2.47.2 From 495705a64f961c1d72ccdc4bb852798d3f50de63 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:42:31 -0500 Subject: [PATCH 34/51] [DFT] Implement Engine Rat --- Mage.Sets/src/mage/cards/e/EngineRat.java | 43 +++++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 44 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/e/EngineRat.java diff --git a/Mage.Sets/src/mage/cards/e/EngineRat.java b/Mage.Sets/src/mage/cards/e/EngineRat.java new file mode 100644 index 00000000000..fd9c5c3ef19 --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/EngineRat.java @@ -0,0 +1,43 @@ +package mage.cards.e; + +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class EngineRat extends CardImpl { + + public EngineRat(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); + + this.subtype.add(SubType.ZOMBIE); + this.subtype.add(SubType.RAT); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // {5}{B}: Each opponent loses 2 life. + this.addAbility(new SimpleActivatedAbility(new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{5}{B}"))); + } + + private EngineRat(final EngineRat card) { + super(card); + } + + @Override + public EngineRat copy() { + return new EngineRat(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 1e8ae37d93a..19f932e2bb6 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -78,6 +78,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Earthrumbler", 160, Rarity.UNCOMMON, mage.cards.e.Earthrumbler.class)); cards.add(new SetCardInfo("Embalmed Ascendant", 201, Rarity.UNCOMMON, mage.cards.e.EmbalmedAscendant.class)); cards.add(new SetCardInfo("Endrider Catalyzer", 124, Rarity.COMMON, mage.cards.e.EndriderCatalyzer.class)); + cards.add(new SetCardInfo("Engine Rat", 84, Rarity.COMMON, mage.cards.e.EngineRat.class)); cards.add(new SetCardInfo("Fearless Swashbuckler", 204, Rarity.RARE, mage.cards.f.FearlessSwashbuckler.class)); cards.add(new SetCardInfo("Forest", 289, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Foul Roads", 255, Rarity.UNCOMMON, mage.cards.f.FoulRoads.class)); -- 2.47.2 From b74ede17357c4e0706c70b3e87623e2119bc8131 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:47:10 -0500 Subject: [PATCH 35/51] [DFT] Implement Skystreak Engineer --- .../src/mage/cards/s/SkystreakEngineer.java | 46 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SkystreakEngineer.java diff --git a/Mage.Sets/src/mage/cards/s/SkystreakEngineer.java b/Mage.Sets/src/mage/cards/s/SkystreakEngineer.java new file mode 100644 index 00000000000..79069c6aa08 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SkystreakEngineer.java @@ -0,0 +1,46 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.ExhaustAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SkystreakEngineer extends CardImpl { + + public SkystreakEngineer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.PILOT); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Exhaust - {4}{U}: Put two +1/+1 counters on this creature. + this.addAbility(new ExhaustAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), new ManaCostsImpl<>("{4}{U}") + )); + } + + private SkystreakEngineer(final SkystreakEngineer card) { + super(card); + } + + @Override + public SkystreakEngineer copy() { + return new SkystreakEngineer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 19f932e2bb6..cb1f3543872 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -155,6 +155,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Silken Strength", 180, Rarity.COMMON, mage.cards.s.SilkenStrength.class)); cards.add(new SetCardInfo("Skybox Ferry", 243, Rarity.COMMON, mage.cards.s.SkyboxFerry.class)); cards.add(new SetCardInfo("Skycrash", 146, Rarity.UNCOMMON, mage.cards.s.Skycrash.class)); + cards.add(new SetCardInfo("Skystreak Engineer", 61, Rarity.COMMON, mage.cards.s.SkystreakEngineer.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); cards.add(new SetCardInfo("Starting Column", 244, Rarity.COMMON, mage.cards.s.StartingColumn.class)); -- 2.47.2 From 387d7becad23ef2fca2eb0e3349118e851aece47 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:47:51 -0500 Subject: [PATCH 36/51] [DFT] Implement Nimble Thopterist --- .../src/mage/cards/n/NimbleThopterist.java | 39 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 40 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/n/NimbleThopterist.java diff --git a/Mage.Sets/src/mage/cards/n/NimbleThopterist.java b/Mage.Sets/src/mage/cards/n/NimbleThopterist.java new file mode 100644 index 00000000000..39e6b17a8ce --- /dev/null +++ b/Mage.Sets/src/mage/cards/n/NimbleThopterist.java @@ -0,0 +1,39 @@ +package mage.cards.n; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.game.permanent.token.ThopterColorlessToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class NimbleThopterist extends CardImpl { + + public NimbleThopterist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); + + this.subtype.add(SubType.VEDALKEN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // When this creature enters, create a 1/1 colorless Thopter artifact creature token with flying. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ThopterColorlessToken()))); + } + + private NimbleThopterist(final NimbleThopterist card) { + super(card); + } + + @Override + public NimbleThopterist copy() { + return new NimbleThopterist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index cb1f3543872..b725835670c 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -123,6 +123,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Mutant Surveyor", 98, Rarity.COMMON, mage.cards.m.MutantSurveyor.class)); cards.add(new SetCardInfo("Nesting Bot", 22, Rarity.UNCOMMON, mage.cards.n.NestingBot.class)); cards.add(new SetCardInfo("Night Market", 258, Rarity.COMMON, mage.cards.n.NightMarket.class)); + cards.add(new SetCardInfo("Nimble Thopterist", 53, Rarity.COMMON, mage.cards.n.NimbleThopterist.class)); cards.add(new SetCardInfo("Pacesetter Paragon", 140, Rarity.UNCOMMON, mage.cards.p.PacesetterParagon.class)); cards.add(new SetCardInfo("Pedal to the Metal", 141, Rarity.COMMON, mage.cards.p.PedalToTheMetal.class)); cards.add(new SetCardInfo("Plains", 272, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); -- 2.47.2 From 06d852b095f3eb377450dcf3e94503751c12cfb1 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:48:22 -0500 Subject: [PATCH 37/51] [DFT] Implement Memory Guardian --- .../src/mage/cards/m/MemoryGuardian.java | 41 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 42 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MemoryGuardian.java diff --git a/Mage.Sets/src/mage/cards/m/MemoryGuardian.java b/Mage.Sets/src/mage/cards/m/MemoryGuardian.java new file mode 100644 index 00000000000..8c1d7a971e3 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MemoryGuardian.java @@ -0,0 +1,41 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.keyword.AffinityForArtifactsAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MemoryGuardian extends CardImpl { + + public MemoryGuardian(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{U}"); + + this.subtype.add(SubType.ROBOT); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Affinity for artifacts + this.addAbility(new AffinityForArtifactsAbility()); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + } + + private MemoryGuardian(final MemoryGuardian card) { + super(card); + } + + @Override + public MemoryGuardian copy() { + return new MemoryGuardian(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index b725835670c..632e5c2edcf 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -113,6 +113,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Marketback Walker", 235, Rarity.RARE, mage.cards.m.MarketbackWalker.class)); cards.add(new SetCardInfo("Marshals' Pathcruiser", 236, Rarity.UNCOMMON, mage.cards.m.MarshalsPathcruiser.class)); cards.add(new SetCardInfo("Maximum Overdrive", 96, Rarity.COMMON, mage.cards.m.MaximumOverdrive.class)); + cards.add(new SetCardInfo("Memory Guardian", 49, Rarity.UNCOMMON, mage.cards.m.MemoryGuardian.class)); cards.add(new SetCardInfo("Midnight Mangler", 50, Rarity.COMMON, mage.cards.m.MidnightMangler.class)); cards.add(new SetCardInfo("Migrating Ketradon", 170, Rarity.COMMON, mage.cards.m.MigratingKetradon.class)); cards.add(new SetCardInfo("Mindspring Merfolk", 51, Rarity.RARE, mage.cards.m.MindspringMerfolk.class)); -- 2.47.2 From 0ed48dc09f413cd083259dd54e22df524a13ec65 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 18:49:02 -0500 Subject: [PATCH 38/51] [DFT] Implement Glitch Ghost Surveyor --- .../src/mage/cards/g/GlitchGhostSurveyor.java | 55 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 56 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GlitchGhostSurveyor.java diff --git a/Mage.Sets/src/mage/cards/g/GlitchGhostSurveyor.java b/Mage.Sets/src/mage/cards/g/GlitchGhostSurveyor.java new file mode 100644 index 00000000000..648d791d6b9 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GlitchGhostSurveyor.java @@ -0,0 +1,55 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GlitchGhostSurveyor extends CardImpl { + + public GlitchGhostSurveyor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.SPIRIT); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- {3}, Exile this card from your graveyard: Draw a card. + Ability ability = new SimpleActivatedAbility( + Zone.GRAVEYARD, new DrawCardSourceControllerEffect(1), new GenericManaCost(3) + ); + ability.addCost(new ExileSourceFromGraveCost()); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private GlitchGhostSurveyor(final GlitchGhostSurveyor card) { + super(card); + } + + @Override + public GlitchGhostSurveyor copy() { + return new GlitchGhostSurveyor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 632e5c2edcf..a4509aa5e3c 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -87,6 +87,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Gastal Thrillroller", 129, Rarity.RARE, mage.cards.g.GastalThrillroller.class)); cards.add(new SetCardInfo("Gearseeker Serpent", 43, Rarity.COMMON, mage.cards.g.GearseekerSerpent.class)); cards.add(new SetCardInfo("Gilded Ghoda", 130, Rarity.COMMON, mage.cards.g.GildedGhoda.class)); + cards.add(new SetCardInfo("Glitch Ghost Surveyor", 44, Rarity.COMMON, mage.cards.g.GlitchGhostSurveyor.class)); cards.add(new SetCardInfo("Gloryheath Lynx", 14, Rarity.UNCOMMON, mage.cards.g.GloryheathLynx.class)); cards.add(new SetCardInfo("Goblin Surveyor", 131, Rarity.COMMON, mage.cards.g.GoblinSurveyor.class)); cards.add(new SetCardInfo("Greasewrench Goblin", 132, Rarity.UNCOMMON, mage.cards.g.GreasewrenchGoblin.class)); -- 2.47.2 From 3bd5f294a84aed9dccf248ddf9ce65b6a46f0d37 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:07:09 -0500 Subject: [PATCH 39/51] [DFT] Implement Sundial Tyrant --- .../src/mage/cards/s/SundialDawnTyrant.java | 34 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 35 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SundialDawnTyrant.java diff --git a/Mage.Sets/src/mage/cards/s/SundialDawnTyrant.java b/Mage.Sets/src/mage/cards/s/SundialDawnTyrant.java new file mode 100644 index 00000000000..c97a1de4613 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SundialDawnTyrant.java @@ -0,0 +1,34 @@ +package mage.cards.s; + +import mage.MageInt; +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 SundialDawnTyrant extends CardImpl { + + public SundialDawnTyrant(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.CONSTRUCT); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + } + + private SundialDawnTyrant(final SundialDawnTyrant card) { + super(card); + } + + @Override + public SundialDawnTyrant copy() { + return new SundialDawnTyrant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index a4509aa5e3c..543d519b594 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -165,6 +165,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Stock Up", 67, Rarity.UNCOMMON, mage.cards.s.StockUp.class)); cards.add(new SetCardInfo("Streaking Oilgorger", 107, Rarity.COMMON, mage.cards.s.StreakingOilgorger.class)); cards.add(new SetCardInfo("Sunbillow Verge", 264, Rarity.RARE, mage.cards.s.SunbillowVerge.class)); + cards.add(new SetCardInfo("Sundial, Dawn Tyrant", 31, Rarity.UNCOMMON, mage.cards.s.SundialDawnTyrant.class)); cards.add(new SetCardInfo("Swamp", 274, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swiftwater Cliffs", 265, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); cards.add(new SetCardInfo("Syphon Fuel", 108, Rarity.COMMON, mage.cards.s.SyphonFuel.class)); -- 2.47.2 From 43d210fcc453d1f17fe09b11713bbb2a1bf16033 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:08:45 -0500 Subject: [PATCH 40/51] [DFT] Implement Leonin Surveyor --- .../src/mage/cards/l/LeoninSurveyor.java | 63 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 64 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/l/LeoninSurveyor.java diff --git a/Mage.Sets/src/mage/cards/l/LeoninSurveyor.java b/Mage.Sets/src/mage/cards/l/LeoninSurveyor.java new file mode 100644 index 00000000000..a81c83e1c03 --- /dev/null +++ b/Mage.Sets/src/mage/cards/l/LeoninSurveyor.java @@ -0,0 +1,63 @@ +package mage.cards.l; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class LeoninSurveyor extends CardImpl { + + public LeoninSurveyor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + + this.subtype.add(SubType.CAT); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // During your turn, this creature has first strike. + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield), + MyTurnCondition.instance, "during your turn, {this} has first strike." + ))); + + // Max speed -- {3}, Exile this card from your graveyard: Draw a card. + Ability ability = new SimpleActivatedAbility( + Zone.GRAVEYARD, new DrawCardSourceControllerEffect(1), new GenericManaCost(3) + ); + ability.addCost(new ExileSourceFromGraveCost()); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private LeoninSurveyor(final LeoninSurveyor card) { + super(card); + } + + @Override + public LeoninSurveyor copy() { + return new LeoninSurveyor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 543d519b594..6fcdb4cae78 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -107,6 +107,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Jungle Hollow", 256, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kalakscion, Hunger Tyrant", 93, Rarity.UNCOMMON, mage.cards.k.KalakscionHungerTyrant.class)); cards.add(new SetCardInfo("Lagorin, Soul of Alacria", 211, Rarity.UNCOMMON, mage.cards.l.LagorinSoulOfAlacria.class)); + cards.add(new SetCardInfo("Leonin Surveyor", 18, Rarity.COMMON, mage.cards.l.LeoninSurveyor.class)); cards.add(new SetCardInfo("Lightning Strike", 136, Rarity.COMMON, mage.cards.l.LightningStrike.class)); cards.add(new SetCardInfo("Lightshield Parry", 19, Rarity.COMMON, mage.cards.l.LightshieldParry.class)); cards.add(new SetCardInfo("Locust Spray", 95, Rarity.UNCOMMON, mage.cards.l.LocustSpray.class)); -- 2.47.2 From 0917b7739dec95d344165da186f1ebb588703d55 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:11:32 -0500 Subject: [PATCH 41/51] [DFT] Implement Gallant Strike --- Mage.Sets/src/mage/cards/g/GallantStrike.java | 47 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 48 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/g/GallantStrike.java diff --git a/Mage.Sets/src/mage/cards/g/GallantStrike.java b/Mage.Sets/src/mage/cards/g/GallantStrike.java new file mode 100644 index 00000000000..c19a31c8877 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GallantStrike.java @@ -0,0 +1,47 @@ +package mage.cards.g; + +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GallantStrike extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent("creature with toughness 4 or greater"); + + static { + filter.add(new ToughnessPredicate(ComparisonType.MORE_THAN, 3)); + } + + public GallantStrike(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); + + // Destroy target creature with toughness 4 or greater. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}"))); + } + + private GallantStrike(final GallantStrike card) { + super(card); + } + + @Override + public GallantStrike copy() { + return new GallantStrike(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 6fcdb4cae78..b629086075f 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -83,6 +83,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Forest", 289, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Foul Roads", 255, Rarity.UNCOMMON, mage.cards.f.FoulRoads.class)); cards.add(new SetCardInfo("Fuel the Flames", 126, Rarity.UNCOMMON, mage.cards.f.FuelTheFlames.class)); + cards.add(new SetCardInfo("Gallant Strike", 13, Rarity.UNCOMMON, mage.cards.g.GallantStrike.class)); cards.add(new SetCardInfo("Gas Guzzler", 85, Rarity.RARE, mage.cards.g.GasGuzzler.class)); cards.add(new SetCardInfo("Gastal Thrillroller", 129, Rarity.RARE, mage.cards.g.GastalThrillroller.class)); cards.add(new SetCardInfo("Gearseeker Serpent", 43, Rarity.COMMON, mage.cards.g.GearseekerSerpent.class)); -- 2.47.2 From faa6cae93174cf25f6d75a52fdc2ba410b33cffb Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:12:19 -0500 Subject: [PATCH 42/51] [DFT] Implement Broadcast Rambler --- .../src/mage/cards/b/BroadcastRambler.java | 42 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 43 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/b/BroadcastRambler.java diff --git a/Mage.Sets/src/mage/cards/b/BroadcastRambler.java b/Mage.Sets/src/mage/cards/b/BroadcastRambler.java new file mode 100644 index 00000000000..7467536dcbe --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BroadcastRambler.java @@ -0,0 +1,42 @@ +package mage.cards.b; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.CrewAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.game.permanent.token.ThopterColorlessToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BroadcastRambler extends CardImpl { + + public BroadcastRambler(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}{W}"); + + this.subtype.add(SubType.VEHICLE); + this.power = new MageInt(5); + this.toughness = new MageInt(4); + + // When this Vehicle enters, create a 1/1 colorless Thopter artifact creature token with flying. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ThopterColorlessToken()))); + + // Crew 1 + this.addAbility(new CrewAbility(1)); + } + + private BroadcastRambler(final BroadcastRambler card) { + super(card); + } + + @Override + public BroadcastRambler copy() { + return new BroadcastRambler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index b629086075f..ab9f4fe3ca6 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -49,6 +49,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Brightfield Glider", 4, Rarity.COMMON, mage.cards.b.BrightfieldGlider.class)); cards.add(new SetCardInfo("Brightfield Mustang", 5, Rarity.COMMON, mage.cards.b.BrightfieldMustang.class)); cards.add(new SetCardInfo("Brightglass Gearhulk", 191, Rarity.MYTHIC, mage.cards.b.BrightglassGearhulk.class)); + cards.add(new SetCardInfo("Broadcast Rambler", 6, Rarity.COMMON, mage.cards.b.BroadcastRambler.class)); cards.add(new SetCardInfo("Broadside Barrage", 192, Rarity.UNCOMMON, mage.cards.b.BroadsideBarrage.class)); cards.add(new SetCardInfo("Broken Wings", 156, Rarity.COMMON, mage.cards.b.BrokenWings.class)); cards.add(new SetCardInfo("Bulwark Ox", 7, Rarity.RARE, mage.cards.b.BulwarkOx.class)); -- 2.47.2 From 3bf949bc8e7f6b3b3ff94957bbe3475315c69994 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:15:26 -0500 Subject: [PATCH 43/51] [DFT] Implement Endrider Spikespitter --- .../mage/cards/e/EndriderSpikespitter.java | 48 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 49 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/e/EndriderSpikespitter.java diff --git a/Mage.Sets/src/mage/cards/e/EndriderSpikespitter.java b/Mage.Sets/src/mage/cards/e/EndriderSpikespitter.java new file mode 100644 index 00000000000..72a65c8bfa1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/EndriderSpikespitter.java @@ -0,0 +1,48 @@ +package mage.cards.e; + +import mage.MageInt; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect; +import mage.abilities.keyword.ReachAbility; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class EndriderSpikespitter extends CardImpl { + + public EndriderSpikespitter(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.MERCENARY); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- At the beginning of your upkeep, exile the top card of your library. You may play that card this turn. + this.addAbility(new MaxSpeedAbility(new BeginningOfUpkeepTriggeredAbility(new ExileTopXMayPlayUntilEffect(1, Duration.EndOfTurn)))); + } + + private EndriderSpikespitter(final EndriderSpikespitter card) { + super(card); + } + + @Override + public EndriderSpikespitter copy() { + return new EndriderSpikespitter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index ab9f4fe3ca6..9bcb484e830 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -79,6 +79,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Earthrumbler", 160, Rarity.UNCOMMON, mage.cards.e.Earthrumbler.class)); cards.add(new SetCardInfo("Embalmed Ascendant", 201, Rarity.UNCOMMON, mage.cards.e.EmbalmedAscendant.class)); cards.add(new SetCardInfo("Endrider Catalyzer", 124, Rarity.COMMON, mage.cards.e.EndriderCatalyzer.class)); + cards.add(new SetCardInfo("Endrider Spikespitter", 125, Rarity.UNCOMMON, mage.cards.e.EndriderSpikespitter.class)); cards.add(new SetCardInfo("Engine Rat", 84, Rarity.COMMON, mage.cards.e.EngineRat.class)); cards.add(new SetCardInfo("Fearless Swashbuckler", 204, Rarity.RARE, mage.cards.f.FearlessSwashbuckler.class)); cards.add(new SetCardInfo("Forest", 289, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); -- 2.47.2 From c44f2b2a52d066cfe99fbd02e3a9b3cb84421f94 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:17:24 -0500 Subject: [PATCH 44/51] [DFT] Implement Keen Buccaneer --- Mage.Sets/src/mage/cards/k/KeenBuccaneer.java | 50 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 51 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KeenBuccaneer.java diff --git a/Mage.Sets/src/mage/cards/k/KeenBuccaneer.java b/Mage.Sets/src/mage/cards/k/KeenBuccaneer.java new file mode 100644 index 00000000000..a35b1cf0e82 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KeenBuccaneer.java @@ -0,0 +1,50 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.ExhaustAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KeenBuccaneer extends CardImpl { + + public KeenBuccaneer(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.OCTOPUS); + this.subtype.add(SubType.PIRATE); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Exhaust -- {1}{U}: Draw a card, then discard a card. Put a +1/+1 counter on this creature. + Ability ability = new ExhaustAbility( + new DrawDiscardControllerEffect(1, 1), new ManaCostsImpl<>("{1}{U}") + ); + ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); + this.addAbility(ability); + } + + private KeenBuccaneer(final KeenBuccaneer card) { + super(card); + } + + @Override + public KeenBuccaneer copy() { + return new KeenBuccaneer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 9bcb484e830..0b3fe0c4a52 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -109,6 +109,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Jibbirik Omnivore", 166, Rarity.COMMON, mage.cards.j.JibbirikOmnivore.class)); cards.add(new SetCardInfo("Jungle Hollow", 256, Rarity.COMMON, mage.cards.j.JungleHollow.class)); cards.add(new SetCardInfo("Kalakscion, Hunger Tyrant", 93, Rarity.UNCOMMON, mage.cards.k.KalakscionHungerTyrant.class)); + cards.add(new SetCardInfo("Keen Buccaneer", 48, Rarity.COMMON, mage.cards.k.KeenBuccaneer.class)); cards.add(new SetCardInfo("Lagorin, Soul of Alacria", 211, Rarity.UNCOMMON, mage.cards.l.LagorinSoulOfAlacria.class)); cards.add(new SetCardInfo("Leonin Surveyor", 18, Rarity.COMMON, mage.cards.l.LeoninSurveyor.class)); cards.add(new SetCardInfo("Lightning Strike", 136, Rarity.COMMON, mage.cards.l.LightningStrike.class)); -- 2.47.2 From a6041a371eff4ab9e56d816ac42c253145fc8576 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:25:07 -0500 Subject: [PATCH 45/51] [DFT] Implement Spin Out --- Mage.Sets/src/mage/cards/s/SpinOut.java | 44 ++++++++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 45 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SpinOut.java diff --git a/Mage.Sets/src/mage/cards/s/SpinOut.java b/Mage.Sets/src/mage/cards/s/SpinOut.java new file mode 100644 index 00000000000..11350583803 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SpinOut.java @@ -0,0 +1,44 @@ +package mage.cards.s; + +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SpinOut extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle"); + + static { + filter.add(Predicates.or( + CardType.CREATURE.getPredicate(), + SubType.VEHICLE.getPredicate() + )); + } + + public SpinOut(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{B}"); + + // Destroy target creature or Vehicle. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + } + + private SpinOut(final SpinOut card) { + super(card); + } + + @Override + public SpinOut copy() { + return new SpinOut(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 0b3fe0c4a52..5687d706683 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -165,6 +165,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Skycrash", 146, Rarity.UNCOMMON, mage.cards.s.Skycrash.class)); cards.add(new SetCardInfo("Skystreak Engineer", 61, Rarity.COMMON, mage.cards.s.SkystreakEngineer.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); + cards.add(new SetCardInfo("Spin Out", 106, Rarity.COMMON, mage.cards.s.SpinOut.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); cards.add(new SetCardInfo("Starting Column", 244, Rarity.COMMON, mage.cards.s.StartingColumn.class)); cards.add(new SetCardInfo("Stock Up", 67, Rarity.UNCOMMON, mage.cards.s.StockUp.class)); -- 2.47.2 From 9dc08b6dfdd50d216fe4a8ea5335207c13fa653e Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:26:27 -0500 Subject: [PATCH 46/51] [DFT] Implement Stampeding Scurryfoot --- .../mage/cards/s/StampedingScurryfoot.java | 46 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/StampedingScurryfoot.java diff --git a/Mage.Sets/src/mage/cards/s/StampedingScurryfoot.java b/Mage.Sets/src/mage/cards/s/StampedingScurryfoot.java new file mode 100644 index 00000000000..c7c97746a1b --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/StampedingScurryfoot.java @@ -0,0 +1,46 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.ExhaustAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.game.permanent.token.ElephantToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class StampedingScurryfoot extends CardImpl { + + public StampedingScurryfoot(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); + + this.subtype.add(SubType.MOUSE); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Exhaust -- {3}{G}: Put a +1/+1 counter on this creature. Create a 3/3 green Elephant creature token. + Ability ability = new ExhaustAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{3}{G}") + ); + ability.addEffect(new CreateTokenEffect(new ElephantToken())); + this.addAbility(ability); + } + + private StampedingScurryfoot(final StampedingScurryfoot card) { + super(card); + } + + @Override + public StampedingScurryfoot copy() { + return new StampedingScurryfoot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 5687d706683..eb52f1504df 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -167,6 +167,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spin Out", 106, Rarity.COMMON, mage.cards.s.SpinOut.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); + cards.add(new SetCardInfo("Stampeding Scurryfoot", 181, Rarity.COMMON, mage.cards.s.StampedingScurryfoot.class)); cards.add(new SetCardInfo("Starting Column", 244, Rarity.COMMON, mage.cards.s.StartingColumn.class)); cards.add(new SetCardInfo("Stock Up", 67, Rarity.UNCOMMON, mage.cards.s.StockUp.class)); cards.add(new SetCardInfo("Streaking Oilgorger", 107, Rarity.COMMON, mage.cards.s.StreakingOilgorger.class)); -- 2.47.2 From 430ab985d3b04fd94ed49ff441d29d4615eefa88 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:28:21 -0500 Subject: [PATCH 47/51] [DFT] Implement Swiftwing Assailant --- .../src/mage/cards/s/SwiftwingAssailant.java | 53 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 54 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SwiftwingAssailant.java diff --git a/Mage.Sets/src/mage/cards/s/SwiftwingAssailant.java b/Mage.Sets/src/mage/cards/s/SwiftwingAssailant.java new file mode 100644 index 00000000000..3bb8596f1b7 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SwiftwingAssailant.java @@ -0,0 +1,53 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.MaxSpeedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.StartYourEnginesAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SwiftwingAssailant extends CardImpl { + + public SwiftwingAssailant(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); + + this.subtype.add(SubType.BIRD); + this.subtype.add(SubType.WARRIOR); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Start your engines! + this.addAbility(new StartYourEnginesAbility()); + + // Max speed -- This creature gets +0/+1 and has vigilance. + Ability ability = new SimpleStaticAbility(new BoostSourceEffect(0, 1, Duration.WhileOnBattlefield)); + ability.addEffect(new GainAbilitySourceEffect(VigilanceAbility.getInstance()).setText("and has vigilance")); + this.addAbility(new MaxSpeedAbility(ability)); + } + + private SwiftwingAssailant(final SwiftwingAssailant card) { + super(card); + } + + @Override + public SwiftwingAssailant copy() { + return new SwiftwingAssailant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index eb52f1504df..a1d80cd868e 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -175,6 +175,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Sundial, Dawn Tyrant", 31, Rarity.UNCOMMON, mage.cards.s.SundialDawnTyrant.class)); cards.add(new SetCardInfo("Swamp", 274, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swiftwater Cliffs", 265, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); + cards.add(new SetCardInfo("Swiftwing Assailant", 32, Rarity.COMMON, mage.cards.s.SwiftwingAssailant.class)); cards.add(new SetCardInfo("Syphon Fuel", 108, Rarity.COMMON, mage.cards.s.SyphonFuel.class)); cards.add(new SetCardInfo("Terrian, World Tyrant", 182, Rarity.UNCOMMON, mage.cards.t.TerrianWorldTyrant.class)); cards.add(new SetCardInfo("The Last Ride", 94, Rarity.MYTHIC, mage.cards.t.TheLastRide.class)); -- 2.47.2 From c3db99a0f06c1558e7bedbcc2b840adfd9ec825e Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:30:06 -0500 Subject: [PATCH 48/51] [DFT] Implement Voyager Quickwelder --- .../src/mage/cards/v/VoyagerQuickwelder.java | 42 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 43 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/v/VoyagerQuickwelder.java diff --git a/Mage.Sets/src/mage/cards/v/VoyagerQuickwelder.java b/Mage.Sets/src/mage/cards/v/VoyagerQuickwelder.java new file mode 100644 index 00000000000..954e187fbad --- /dev/null +++ b/Mage.Sets/src/mage/cards/v/VoyagerQuickwelder.java @@ -0,0 +1,42 @@ +package mage.cards.v; + +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.common.FilterArtifactCard; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class VoyagerQuickwelder extends CardImpl { + + private static final FilterCard filter = new FilterArtifactCard("artifact spells"); + + public VoyagerQuickwelder(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}"); + + this.subtype.add(SubType.ROBOT); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Artifact spells you cast cost {1} less to cast. + this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); + } + + private VoyagerQuickwelder(final VoyagerQuickwelder card) { + super(card); + } + + @Override + public VoyagerQuickwelder copy() { + return new VoyagerQuickwelder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index a1d80cd868e..67f49467da7 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -193,6 +193,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Venomsac Lagac", 185, Rarity.COMMON, mage.cards.v.VenomsacLagac.class)); cards.add(new SetCardInfo("Veteran Beastrider", 226, Rarity.UNCOMMON, mage.cards.v.VeteranBeastrider.class)); cards.add(new SetCardInfo("Voyage Home", 227, Rarity.UNCOMMON, mage.cards.v.VoyageHome.class)); + cards.add(new SetCardInfo("Voyager Quickwelder", 37, Rarity.COMMON, mage.cards.v.VoyagerQuickwelder.class)); cards.add(new SetCardInfo("Walking Sarcophagus", 246, Rarity.COMMON, mage.cards.w.WalkingSarcophagus.class)); cards.add(new SetCardInfo("Wastewood Verge", 268, Rarity.RARE, mage.cards.w.WastewoodVerge.class)); cards.add(new SetCardInfo("Waxen Shapethief", 74, Rarity.RARE, mage.cards.w.WaxenShapethief.class)); -- 2.47.2 From c838c8ad5102a30915f550ebd7b9efb7a988943d Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 31 Jan 2025 19:33:29 -0500 Subject: [PATCH 49/51] [DFT] Implement Spectral Interference --- .../mage/cards/s/SpectralInterference.java | 44 +++++++++++++++++++ Mage.Sets/src/mage/sets/Aetherdrift.java | 1 + 2 files changed, 45 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SpectralInterference.java diff --git a/Mage.Sets/src/mage/cards/s/SpectralInterference.java b/Mage.Sets/src/mage/cards/s/SpectralInterference.java new file mode 100644 index 00000000000..af74da4127c --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SpectralInterference.java @@ -0,0 +1,44 @@ +package mage.cards.s; + +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.FilterSpell; +import mage.filter.predicate.Predicates; +import mage.target.TargetSpell; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SpectralInterference extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("artifact or creature spell"); + + static { + filter.add(Predicates.or( + CardType.ARTIFACT.getPredicate(), + CardType.CREATURE.getPredicate() + )); + } + + public SpectralInterference(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); + + // Counter target artifact or creature spell unless its controller pays {4}. + this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new GenericManaCost(4))); + this.getSpellAbility().addTarget(new TargetSpell(filter)); + } + + private SpectralInterference(final SpectralInterference card) { + super(card); + } + + @Override + public SpectralInterference copy() { + return new SpectralInterference(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Aetherdrift.java b/Mage.Sets/src/mage/sets/Aetherdrift.java index 67f49467da7..4bea67031a4 100644 --- a/Mage.Sets/src/mage/sets/Aetherdrift.java +++ b/Mage.Sets/src/mage/sets/Aetherdrift.java @@ -164,6 +164,7 @@ public final class Aetherdrift extends ExpansionSet { cards.add(new SetCardInfo("Skybox Ferry", 243, Rarity.COMMON, mage.cards.s.SkyboxFerry.class)); cards.add(new SetCardInfo("Skycrash", 146, Rarity.UNCOMMON, mage.cards.s.Skycrash.class)); cards.add(new SetCardInfo("Skystreak Engineer", 61, Rarity.COMMON, mage.cards.s.SkystreakEngineer.class)); + cards.add(new SetCardInfo("Spectral Interference", 63, Rarity.COMMON, mage.cards.s.SpectralInterference.class)); cards.add(new SetCardInfo("Spell Pierce", 64, Rarity.UNCOMMON, mage.cards.s.SpellPierce.class)); cards.add(new SetCardInfo("Spin Out", 106, Rarity.COMMON, mage.cards.s.SpinOut.class)); cards.add(new SetCardInfo("Spotcycle Scouter", 30, Rarity.COMMON, mage.cards.s.SpotcycleScouter.class)); -- 2.47.2 From bbd0fa2ffbc3141dc453ee33f7029faa267d47f7 Mon Sep 17 00:00:00 2001 From: xenohedron <12538125+xenohedron@users.noreply.github.com> Date: Sat, 1 Feb 2025 00:43:51 -0500 Subject: [PATCH 50/51] fix Light Up the Night dealing double damage --- Mage.Sets/src/mage/cards/l/LightUpTheNight.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Mage.Sets/src/mage/cards/l/LightUpTheNight.java b/Mage.Sets/src/mage/cards/l/LightUpTheNight.java index 12053d405ec..e64d7dfed6a 100644 --- a/Mage.Sets/src/mage/cards/l/LightUpTheNight.java +++ b/Mage.Sets/src/mage/cards/l/LightUpTheNight.java @@ -16,7 +16,6 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetAnyTarget; -import mage.util.CardUtil; import java.util.UUID; @@ -69,8 +68,7 @@ class LightUpTheNightEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - // Normal cast + Flashback cast - int damage = CardUtil.getSourceCostsTag(game, source, "X", 0) + GetXValue.instance.calculate(game, source, this); + int damage = GetXValue.instance.calculate(game, source, this); UUID targetId = getTargetPointer().getFirst(game, source); Player player = game.getPlayer(targetId); if (player != null) { -- 2.47.2 From d75792312e49f2f6e685701a2eb2004e4af91914 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 1 Feb 2025 12:53:09 +0400 Subject: [PATCH 51/51] tests: added runtime check for wrong usage of inform messages inside layer effects (disabled by default, related to #13259, #11285) --- Mage/src/main/java/mage/game/GameImpl.java | 21 +++++++++++++++++-- .../java/mage/game/events/TableEvent.java | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 1bece076bd7..1f554dbdd4e 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -3169,6 +3169,7 @@ public abstract class GameImpl implements Game { if (simulation) { return; } + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.INFO, message, this); } @@ -3177,6 +3178,7 @@ public abstract class GameImpl implements Game { if (simulation) { return; } + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.STATUS, message, withTime, withTurnInfo, this); } @@ -3185,7 +3187,7 @@ public abstract class GameImpl implements Game { if (simulation) { return; } - logger.trace("fireUpdatePlayersEvent"); + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.UPDATE, null, this); getState().clearLookedAt(); getState().clearRevealed(); @@ -3196,15 +3198,27 @@ public abstract class GameImpl implements Game { if (simulation) { return; } - logger.trace("fireGameEndIfo"); + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.END_GAME_INFO, null, this); } @Override public void fireErrorEvent(String message, Exception ex) { + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.ERROR, message, ex, this); } + private void makeSureCalledOutsideLayersEffects() { + // very slow, enable/comment it for debug or load/stability tests only + // TODO: enable check and remove/rework all wrong usages + if (true) return; + Arrays.stream(Thread.currentThread().getStackTrace()).forEach(e -> { + if (e.toString().contains("GameState.applyEffects")) { + throw new IllegalStateException("Wrong code usage: client side events can't be called from layers effects (wrong informPlayers usage?"); + } + }); + } + @Override public Players getPlayers() { return state.getPlayers(); @@ -3871,6 +3885,7 @@ public abstract class GameImpl implements Game { @Override public void initTimer(UUID playerId) { if (priorityTime > 0) { + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.INIT_TIMER, playerId, null, this); } } @@ -3878,6 +3893,7 @@ public abstract class GameImpl implements Game { @Override public void resumeTimer(UUID playerId) { if (priorityTime > 0) { + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.RESUME_TIMER, playerId, null, this); } } @@ -3885,6 +3901,7 @@ public abstract class GameImpl implements Game { @Override public void pauseTimer(UUID playerId) { if (priorityTime > 0) { + makeSureCalledOutsideLayersEffects(); tableEventSource.fireTableEvent(EventType.PAUSE_TIMER, playerId, null, this); } } diff --git a/Mage/src/main/java/mage/game/events/TableEvent.java b/Mage/src/main/java/mage/game/events/TableEvent.java index ef9af06af82..ef3b80ff9da 100644 --- a/Mage/src/main/java/mage/game/events/TableEvent.java +++ b/Mage/src/main/java/mage/game/events/TableEvent.java @@ -57,7 +57,7 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab public TableEvent(EventType eventType, String message, boolean withTime, boolean withTurnInfo, Game game) { super(game); - this.game = game; + this.game = game; // TODO: potentially bugged and need game copy? See related makeSureCalledOutsideLayersEffects this.message = message; this.eventType = eventType; this.withTime = withTime; -- 2.47.2