diff --git a/Mage.Sets/src/mage/sets/CommanderMasters.java b/Mage.Sets/src/mage/sets/CommanderMasters.java index cc1250b3821..7e1851e878a 100644 --- a/Mage.Sets/src/mage/sets/CommanderMasters.java +++ b/Mage.Sets/src/mage/sets/CommanderMasters.java @@ -15,8 +15,11 @@ public final class CommanderMasters extends ExpansionSet { private CommanderMasters() { super("Commander Masters", "CMM", ExpansionSet.buildDate(2023, 8, 4), SetType.SUPPLEMENTAL); this.blockName = "Commander Masters"; - this.hasBasicLands = true; - this.hasBoosters = false; //temporary + + // possible boosters: set, draft, collector (simplified to use set booster with any cards) + // https://mtg.fandom.com/wiki/Commander_Masters + // https://magic.wizards.com/en/news/feature/collecting-commander-masters + this.enableSetBooster(Integer.MAX_VALUE); cards.add(new SetCardInfo("Abrade", 203, Rarity.COMMON, mage.cards.a.Abrade.class)); cards.add(new SetCardInfo("Abstruse Archaic", 712, Rarity.RARE, mage.cards.a.AbstruseArchaic.class, NON_FULL_USE_VARIOUS)); @@ -84,9 +87,9 @@ public final class CommanderMasters extends ExpansionSet { cards.add(new SetCardInfo("Balefire Dragon", 697, Rarity.MYTHIC, mage.cards.b.BalefireDragon.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bane of Bala Ged", 802, Rarity.UNCOMMON, mage.cards.b.BaneOfBalaGed.class)); cards.add(new SetCardInfo("Bastion of Remembrance", 138, Rarity.UNCOMMON, mage.cards.b.BastionOfRemembrance.class)); - cards.add(new SetCardInfo("Battle Screech", 17, Rarity.COMMON, mage.cards.b.BattleScreech.class)); cards.add(new SetCardInfo("Battle at the Helvault", 719, Rarity.RARE, mage.cards.b.BattleAtTheHelvault.class)); cards.add(new SetCardInfo("Battle for Bretagard", 916, Rarity.RARE, mage.cards.b.BattleForBretagard.class)); + cards.add(new SetCardInfo("Battle Screech", 17, Rarity.COMMON, mage.cards.b.BattleScreech.class)); cards.add(new SetCardInfo("Beanstalk Giant", 275, Rarity.UNCOMMON, mage.cards.b.BeanstalkGiant.class)); cards.add(new SetCardInfo("Binding the Old Gods", 917, Rarity.UNCOMMON, mage.cards.b.BindingTheOldGods.class)); cards.add(new SetCardInfo("Blade Sliver", 871, Rarity.UNCOMMON, mage.cards.b.BladeSliver.class)); @@ -834,7 +837,7 @@ public final class CommanderMasters extends ExpansionSet { cards.add(new SetCardInfo("Smothering Tithe", 693, Rarity.MYTHIC, mage.cards.s.SmotheringTithe.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Snakeskin Veil", 323, Rarity.COMMON, mage.cards.s.SnakeskinVeil.class)); cards.add(new SetCardInfo("Sol Ring", 410, Rarity.UNCOMMON, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sol Ring", 703, Rarity.UNCOMMON, mage.cards.s.SolRing.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sol Ring", 703, Rarity.UNCOMMON, mage.cards.s.SolRing.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Solemn Simulacrum", 973, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); cards.add(new SetCardInfo("Song of the Dryads", 324, Rarity.RARE, mage.cards.s.SongOfTheDryads.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Song of the Dryads", 572, Rarity.RARE, mage.cards.s.SongOfTheDryads.class, NON_FULL_USE_VARIOUS)); @@ -925,8 +928,8 @@ public final class CommanderMasters extends ExpansionSet { cards.add(new SetCardInfo("Temple of Malady", 1043, Rarity.RARE, mage.cards.t.TempleOfMalady.class)); cards.add(new SetCardInfo("Temple of Plenty", 1044, Rarity.RARE, mage.cards.t.TempleOfPlenty.class)); cards.add(new SetCardInfo("Temple of Silence", 1045, Rarity.RARE, mage.cards.t.TempleOfSilence.class)); - cards.add(new SetCardInfo("Temple of Triumph", 1047, Rarity.RARE, mage.cards.t.TempleOfTriumph.class)); cards.add(new SetCardInfo("Temple of the False God", 1046, Rarity.UNCOMMON, mage.cards.t.TempleOfTheFalseGod.class)); + cards.add(new SetCardInfo("Temple of Triumph", 1047, Rarity.RARE, mage.cards.t.TempleOfTriumph.class)); cards.add(new SetCardInfo("Tempt with Vengeance", 263, Rarity.RARE, mage.cards.t.TemptWithVengeance.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tempt with Vengeance", 551, Rarity.RARE, mage.cards.t.TemptWithVengeance.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Temur Battle Rage", 264, Rarity.COMMON, mage.cards.t.TemurBattleRage.class)); diff --git a/Mage.Sets/src/mage/sets/Unfinity.java b/Mage.Sets/src/mage/sets/Unfinity.java index cf31e282786..d64beec852e 100644 --- a/Mage.Sets/src/mage/sets/Unfinity.java +++ b/Mage.Sets/src/mage/sets/Unfinity.java @@ -16,9 +16,9 @@ public final class Unfinity extends ExpansionSet { } private Unfinity() { - super("Unfinity", "UNF", ExpansionSet.buildDate(2022, 4, 1), SetType.SUPPLEMENTAL); + super("Unfinity", "UNF", ExpansionSet.buildDate(2022, 4, 1), SetType.JOKE_SET); this.hasBasicLands = true; - this.hasBoosters = false; // not likely to be able to drafts at any point + this.hasBoosters = false; // un-set, low implemented cards cards.add(new SetCardInfo("\"Name Sticker\" Goblin", "107m", Rarity.COMMON, mage.cards.n.NameStickerGoblin.class)); cards.add(new SetCardInfo("Atomwheel Acrobats", 130, Rarity.COMMON, mage.cards.a.AtomwheelAcrobats.class)); diff --git a/Mage.Sets/src/mage/sets/Unglued.java b/Mage.Sets/src/mage/sets/Unglued.java index 4e82ce7edf3..cbd2a73f50d 100644 --- a/Mage.Sets/src/mage/sets/Unglued.java +++ b/Mage.Sets/src/mage/sets/Unglued.java @@ -19,6 +19,7 @@ public final class Unglued extends ExpansionSet { private Unglued() { super("Unglued", "UGL", ExpansionSet.buildDate(1998, 8, 11), SetType.JOKE_SET); + this.hasBoosters = false; // un-set, low implemented cards cards.add(new SetCardInfo("Burning Cinder Fury of Crimson Chaos Fire", 40, Rarity.RARE, mage.cards.b.BurningCinderFuryOfCrimsonChaosFire.class)); cards.add(new SetCardInfo("Checks and Balances", 16, Rarity.UNCOMMON, mage.cards.c.ChecksAndBalances.class)); diff --git a/Mage.Sets/src/mage/sets/Unhinged.java b/Mage.Sets/src/mage/sets/Unhinged.java index 5d46318ff71..f1f0899c4f0 100644 --- a/Mage.Sets/src/mage/sets/Unhinged.java +++ b/Mage.Sets/src/mage/sets/Unhinged.java @@ -19,6 +19,7 @@ public final class Unhinged extends ExpansionSet { private Unhinged() { super("Unhinged", "UNH", ExpansionSet.buildDate(2004, 11, 20), SetType.JOKE_SET); + this.hasBoosters = false; // un-set, low implemented cards cards.add(new SetCardInfo("\"Ach! Hans, Run!\"", 116, Rarity.RARE, mage.cards.a.AchHansRun.class)); cards.add(new SetCardInfo("B-I-N-G-O", 92, Rarity.RARE, mage.cards.b.BINGO.class)); diff --git a/Mage.Sets/src/mage/sets/Unstable.java b/Mage.Sets/src/mage/sets/Unstable.java index 7701bd108f8..2acddad3415 100644 --- a/Mage.Sets/src/mage/sets/Unstable.java +++ b/Mage.Sets/src/mage/sets/Unstable.java @@ -21,6 +21,7 @@ public final class Unstable extends ExpansionSet { private Unstable() { super("Unstable", "UST", ExpansionSet.buildDate(2017, 12, 8), SetType.JOKE_SET); + this.hasBoosters = false; // un-set, low implemented cards cards.add(new SetCardInfo("Amateur Auteur", "3a", Rarity.COMMON, mage.cards.a.AmateurAuteur.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Amateur Auteur", "3b", Rarity.COMMON, mage.cards.a.AmateurAuteur.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index da2dcf13a53..e1d48ff7bb9 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -758,6 +758,48 @@ public abstract class ExpansionSet implements Serializable { this.ratioBoosterMythic = 8; // 12.5% chance of a mythic rare } + /** + * Old default booster configuration (after 2020 - ZNR and before 2024 - MKM) + */ + public void enableSetBooster(int maxCardNumberInBooster) { + // https://draftsim.com/draft-booster-vs-set-booster-mtg/ + this.hasBoosters = true; + this.maxCardNumberInBooster = maxCardNumberInBooster; + + this.hasBasicLands = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 0; + this.numBoosterUncommon = 0; + this.numBoosterRare = 0; + + // Set boosters contain 12 cards — fewer cards than a Draft booster — but the distribution is much more complex: + // 1 art card (5% chance of having a gold signature) + this.numBoosterCommon += 1; + // 1 basic land (15% chance of being foil) + this.numBoosterLands += 1; + // 6 commons/uncommons (different combinations possible, the most common is 4 commons and 2 uncommons) + this.numBoosterCommon += 4; + this.numBoosterUncommon += 2; + // 1 unique common/uncommon + this.numBoosterCommon += 1; + // 2 “wild cards” (any rarity from common to mythic) + this.numBoosterUncommon += 1; + this.numBoosterRare += 1; + // 1 rare (13.5% chance of being a mythic) + this.numBoosterRare += 1; + this.ratioBoosterMythic = 8; + // 1 foil card + // - ignore + // 1 marketing card/token (25% chance of being a card from The List) + // - ignore + + // total 12: + // 1 land + // 6 common + // 3 uncommon + // 2 rare + } + /** * New default booster configuration (after 2024 - MKM) */