From caba72094e204fb28a9487c9a532178f8dd1105f Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sun, 7 Dec 2025 11:40:43 -0500 Subject: [PATCH] [DSK] Implement Grand Entryway // Elegant Rotunda --- .../cards/b/BottomlessPoolLockerRoom.java | 4 +- .../mage/cards/d/DazzlingTheaterPropRoom.java | 3 +- .../d/DollmakersShopPorcelainGallery.java | 2 +- .../cards/f/FuneralRoomAwakeningHall.java | 3 +- .../cards/g/GrandEntrywayElegantRotunda.java | 42 +++++++++++++++++++ .../cards/s/SurgicalSuiteHospitalRoom.java | 3 +- .../cards/u/UnholyAnnexRitualChamber.java | 3 +- .../cards/w/WalkInClosetForgottenCellar.java | 3 +- .../src/mage/sets/DuskmournHouseOfHorror.java | 2 + Mage/src/main/java/mage/cards/RoomCard.java | 12 +++--- 10 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/g/GrandEntrywayElegantRotunda.java diff --git a/Mage.Sets/src/mage/cards/b/BottomlessPoolLockerRoom.java b/Mage.Sets/src/mage/cards/b/BottomlessPoolLockerRoom.java index 24bbd2026fa..d465923a418 100644 --- a/Mage.Sets/src/mage/cards/b/BottomlessPoolLockerRoom.java +++ b/Mage.Sets/src/mage/cards/b/BottomlessPoolLockerRoom.java @@ -27,7 +27,7 @@ public final class BottomlessPoolLockerRoom extends RoomCard { // Whenever one or more creatures you control deal combat damage to a player, draw a card. super(ownerId, setInfo, new CardType[] { CardType.ENCHANTMENT }, - "{U}", "{4}{U}", SpellAbilityType.SPLIT); + "{U}", "{4}{U}"); this.subtype.add(SubType.ROOM); // Left half ability - "When you unlock this door, return up to one target creature to its owner’s hand." @@ -52,4 +52,4 @@ public final class BottomlessPoolLockerRoom extends RoomCard { public BottomlessPoolLockerRoom copy() { return new BottomlessPoolLockerRoom(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DazzlingTheaterPropRoom.java b/Mage.Sets/src/mage/cards/d/DazzlingTheaterPropRoom.java index 46d4dc6c385..e6597d7d3a8 100644 --- a/Mage.Sets/src/mage/cards/d/DazzlingTheaterPropRoom.java +++ b/Mage.Sets/src/mage/cards/d/DazzlingTheaterPropRoom.java @@ -8,7 +8,6 @@ import mage.abilities.keyword.ConvokeAbility; import mage.cards.CardSetInfo; import mage.cards.RoomCard; import mage.constants.CardType; -import mage.constants.SpellAbilityType; import mage.constants.SubType; import mage.filter.StaticFilters; import mage.filter.common.FilterNonlandCard; @@ -30,7 +29,7 @@ public final class DazzlingTheaterPropRoom extends RoomCard { } public DazzlingTheaterPropRoom(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}", "{2}{W}", SpellAbilityType.SPLIT); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}", "{2}{W}"); this.subtype.add(SubType.ROOM); // Dazzling Theater: Creature spells you cast have convoke. diff --git a/Mage.Sets/src/mage/cards/d/DollmakersShopPorcelainGallery.java b/Mage.Sets/src/mage/cards/d/DollmakersShopPorcelainGallery.java index 1566406118a..c90d0f9da09 100644 --- a/Mage.Sets/src/mage/cards/d/DollmakersShopPorcelainGallery.java +++ b/Mage.Sets/src/mage/cards/d/DollmakersShopPorcelainGallery.java @@ -29,7 +29,7 @@ public final class DollmakersShopPorcelainGallery extends RoomCard { } public DollmakersShopPorcelainGallery(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}", "{4}{W}{W}", SpellAbilityType.SPLIT); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}", "{4}{W}{W}"); this.subtype.add(SubType.ROOM); // Dollmaker's Shop: Whenever one or more non-Toy creatures you control attack a player, create a 1/1 white Toy artifact creature token. diff --git a/Mage.Sets/src/mage/cards/f/FuneralRoomAwakeningHall.java b/Mage.Sets/src/mage/cards/f/FuneralRoomAwakeningHall.java index a10d8b8f31e..600193ad515 100644 --- a/Mage.Sets/src/mage/cards/f/FuneralRoomAwakeningHall.java +++ b/Mage.Sets/src/mage/cards/f/FuneralRoomAwakeningHall.java @@ -9,7 +9,6 @@ import mage.abilities.effects.common.ReturnFromYourGraveyardToBattlefieldAllEffe import mage.cards.CardSetInfo; import mage.cards.RoomCard; import mage.constants.CardType; -import mage.constants.SpellAbilityType; import mage.constants.SubType; import mage.filter.StaticFilters; @@ -21,7 +20,7 @@ import java.util.UUID; public final class FuneralRoomAwakeningHall extends RoomCard { public FuneralRoomAwakeningHall(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{6}{B}{B}", SpellAbilityType.SPLIT); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{6}{B}{B}"); this.subtype.add(SubType.ROOM); // Funeral Room: Whenever a creature you control dies, each opponent loses 1 life and you gain 1 life. diff --git a/Mage.Sets/src/mage/cards/g/GrandEntrywayElegantRotunda.java b/Mage.Sets/src/mage/cards/g/GrandEntrywayElegantRotunda.java new file mode 100644 index 00000000000..1f35d8f6c7f --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/GrandEntrywayElegantRotunda.java @@ -0,0 +1,42 @@ +package mage.cards.g; + +import mage.abilities.Ability; +import mage.abilities.common.UnlockThisDoorTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardSetInfo; +import mage.cards.RoomCard; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.game.permanent.token.GlimmerToken; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class GrandEntrywayElegantRotunda extends RoomCard { + public GrandEntrywayElegantRotunda(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}", "{2}{W}"); + + // Grand Entryway + // When you unlock this door, create a 1/1 white Glimmer enchantment creature token. + this.getLeftHalfCard().addAbility(new UnlockThisDoorTriggeredAbility(new CreateTokenEffect(new GlimmerToken()), false, true)); + + // Elegant Rotunda + // When you unlock this door, put a +1/+1 counter on each of up to two target creatures. + Ability ability = new UnlockThisDoorTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false, false); + ability.addTarget(new TargetCreaturePermanent(0, 2)); + this.getRightHalfCard().addAbility(ability); + } + + private GrandEntrywayElegantRotunda(final GrandEntrywayElegantRotunda card) { + super(card); + } + + @Override + public GrandEntrywayElegantRotunda copy() { + return new GrandEntrywayElegantRotunda(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/SurgicalSuiteHospitalRoom.java b/Mage.Sets/src/mage/cards/s/SurgicalSuiteHospitalRoom.java index 05814b89827..6a224dbf5ec 100644 --- a/Mage.Sets/src/mage/cards/s/SurgicalSuiteHospitalRoom.java +++ b/Mage.Sets/src/mage/cards/s/SurgicalSuiteHospitalRoom.java @@ -8,7 +8,6 @@ import mage.cards.CardSetInfo; import mage.cards.RoomCard; import mage.constants.CardType; import mage.constants.ComparisonType; -import mage.constants.SpellAbilityType; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterCard; @@ -42,7 +41,7 @@ public final class SurgicalSuiteHospitalRoom extends RoomCard { // Whenever you attack, put a +1/+1 counter on target attacking creature. super(ownerId, setInfo, new CardType[] { CardType.ENCHANTMENT }, - "{1}{W}", "{3}{W}", SpellAbilityType.SPLIT); + "{1}{W}", "{3}{W}"); this.subtype.add(SubType.ROOM); // Left half ability - "When you unlock this door, return target creature card with mana value 3 or less from your graveyard to the battlefield." diff --git a/Mage.Sets/src/mage/cards/u/UnholyAnnexRitualChamber.java b/Mage.Sets/src/mage/cards/u/UnholyAnnexRitualChamber.java index 0e84acb85eb..2b070feb959 100644 --- a/Mage.Sets/src/mage/cards/u/UnholyAnnexRitualChamber.java +++ b/Mage.Sets/src/mage/cards/u/UnholyAnnexRitualChamber.java @@ -14,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.cards.RoomCard; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.SpellAbilityType; import mage.constants.SubType; import mage.filter.common.FilterControlledPermanent; import mage.game.Game; @@ -35,7 +34,7 @@ public final class UnholyAnnexRitualChamber extends RoomCard { } public UnholyAnnexRitualChamber(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{3}{B}{B}", SpellAbilityType.SPLIT); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{3}{B}{B}"); this.subtype.add(SubType.ROOM); // Unholy Annex: At the beginning of your end step, draw a card. If you control a Demon, each opponent loses 2 life and you gain 2 life. Otherwise, you lose 2 life. diff --git a/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java b/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java index 5cebbbdc39c..c7c03a48dad 100644 --- a/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java +++ b/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java @@ -8,7 +8,6 @@ import mage.cards.CardSetInfo; import mage.cards.RoomCard; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.SpellAbilityType; import mage.constants.SubType; import mage.filter.StaticFilters; @@ -20,7 +19,7 @@ import java.util.UUID; public final class WalkInClosetForgottenCellar extends RoomCard { public WalkInClosetForgottenCellar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}", "{3}{G}{G}", SpellAbilityType.SPLIT); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}", "{3}{G}{G}"); this.subtype.add(SubType.ROOM); // Walk-In Closet: You may play lands from your graveyard. diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index 869362df083..a45c1d22c9d 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -158,6 +158,8 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { 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, 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", 287, Rarity.COMMON, mage.cards.g.GrandEntrywayElegantRotunda.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Grand Entryway // Elegant Rotunda", 15, Rarity.COMMON, mage.cards.g.GrandEntrywayElegantRotunda.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grasping Longneck", 180, Rarity.COMMON, mage.cards.g.GraspingLongneck.class)); cards.add(new SetCardInfo("Gremlin Tamer", 215, Rarity.UNCOMMON, mage.cards.g.GremlinTamer.class)); cards.add(new SetCardInfo("Grievous Wound", 102, Rarity.RARE, mage.cards.g.GrievousWound.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/cards/RoomCard.java b/Mage/src/main/java/mage/cards/RoomCard.java index 8685b9c84f1..d3542473435 100644 --- a/Mage/src/main/java/mage/cards/RoomCard.java +++ b/Mage/src/main/java/mage/cards/RoomCard.java @@ -22,19 +22,18 @@ import java.util.UUID; public abstract class RoomCard extends SplitCard { private SpellAbilityType lastCastHalf = null; - protected RoomCard(UUID ownerId, CardSetInfo setInfo, CardType[] types, String costsLeft, - String costsRight, SpellAbilityType spellAbilityType) { - super(ownerId, setInfo, costsLeft, costsRight, spellAbilityType, types); + protected RoomCard(UUID ownerId, CardSetInfo setInfo, CardType[] types, String costsLeft, String costsRight) { + super(ownerId, setInfo, costsLeft, costsRight, SpellAbilityType.SPLIT, types); String[] names = setInfo.getName().split(" // "); leftHalfCard = new RoomCardHalfImpl( this.getOwnerId(), new CardSetInfo(names[0], setInfo.getExpansionSetCode(), setInfo.getCardNumber(), - setInfo.getRarity(), setInfo.getGraphicInfo()), + setInfo.getRarity(), setInfo.getGraphicInfo()), types, costsLeft, this, SpellAbilityType.SPLIT_LEFT); rightHalfCard = new RoomCardHalfImpl( this.getOwnerId(), new CardSetInfo(names[1], setInfo.getExpansionSetCode(), setInfo.getCardNumber(), - setInfo.getRarity(), setInfo.getGraphicInfo()), + setInfo.getRarity(), setInfo.getGraphicInfo()), types, costsRight, this, SpellAbilityType.SPLIT_RIGHT); // Add the one-shot effect to unlock a door on cast -> ETB @@ -113,7 +112,7 @@ public abstract class RoomCard extends SplitCard { Abilities rightAbilities = roomCard.getRightHalfCard().getAbilities(); for (Ability ability : rightAbilities) { - permanent.addAbility(ability, roomCard.getRightHalfCard().getId(), game,true); + permanent.addAbility(ability, roomCard.getRightHalfCard().getId(), game, true); } } } @@ -173,4 +172,3 @@ class RoomEnterUnlockEffect extends OneShotEffect { return true; } } -