From 967e8e6bcb5dbc0d7fb9bbe39f9035fbbe54415b Mon Sep 17 00:00:00 2001 From: PurpleCrowbar <26198472+PurpleCrowbar@users.noreply.github.com> Date: Fri, 17 Oct 2025 18:56:43 +0100 Subject: [PATCH] [DSK] Implement Walk-In Closet // Forgotten Cellar (#14027) --- .../cards/w/WalkInClosetForgottenCellar.java | 49 +++++++++++++++++++ .../src/mage/sets/DuskmournHouseOfHorror.java | 2 + 2 files changed, 51 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java diff --git a/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java b/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java new file mode 100644 index 00000000000..1c78a4c29da --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WalkInClosetForgottenCellar.java @@ -0,0 +1,49 @@ +package mage.cards.w; + +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.UnlockThisDoorTriggeredAbility; +import mage.abilities.effects.common.replacement.GraveyardFromAnywhereExileReplacementEffect; +import mage.abilities.effects.common.ruleModifying.PlayFromGraveyardControllerEffect; +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; + +import java.util.UUID; + +/** + * @author PurpleCrowbar + */ +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); + this.subtype.add(SubType.ROOM); + + // Walk-In Closet: You may play lands from your graveyard. + SimpleStaticAbility left = new SimpleStaticAbility(PlayFromGraveyardControllerEffect.playLands()); + + // Forgotten Cellar: When you unlock this door, you may cast spells from your graveyard this turn, and if a card would be put into your graveyard from anywhere this turn, exile it instead. + UnlockThisDoorTriggeredAbility right = new UnlockThisDoorTriggeredAbility( + new PlayFromGraveyardControllerEffect(StaticFilters.FILTER_CARD_NON_LAND, Duration.EndOfTurn) + .setText("you may cast spells from your graveyard this turn"), false, false + ); + right.addEffect(new GraveyardFromAnywhereExileReplacementEffect(Duration.EndOfTurn).concatBy(", and") + .setText("if a card would be put into your graveyard from anywhere this turn, exile it instead") + ); + + this.addRoomAbilities(left, right); + } + + private WalkInClosetForgottenCellar(final WalkInClosetForgottenCellar card) { + super(card); + } + + @Override + public WalkInClosetForgottenCellar copy() { + return new WalkInClosetForgottenCellar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index 4120c778c0c..758db29e33c 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -387,6 +387,8 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { 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)); + cards.add(new SetCardInfo("Walk-In Closet // Forgotten Cellar", 341, Rarity.MYTHIC, mage.cards.w.WalkInClosetForgottenCellar.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Waltz of Rage", 165, Rarity.RARE, mage.cards.w.WaltzOfRage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Waltz of Rage", 318, Rarity.RARE, mage.cards.w.WaltzOfRage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wary Watchdog", 206, Rarity.COMMON, mage.cards.w.WaryWatchdog.class));