From 5e8c63ad2c29f3b9e9f815a8d286e6a3f718493a Mon Sep 17 00:00:00 2001 From: theelk801 Date: Mon, 21 Apr 2025 20:02:06 -0400 Subject: [PATCH] [DSK] Implement Keys to the House --- .../src/mage/cards/k/KeysToTheHouse.java | 57 +++++++++++++++++++ .../src/mage/sets/DuskmournHouseOfHorror.java | 1 + .../common/LockOrUnlockRoomTargetEffect.java | 32 +++++++++++ 3 files changed, 90 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KeysToTheHouse.java create mode 100644 Mage/src/main/java/mage/abilities/effects/common/LockOrUnlockRoomTargetEffect.java diff --git a/Mage.Sets/src/mage/cards/k/KeysToTheHouse.java b/Mage.Sets/src/mage/cards/k/KeysToTheHouse.java new file mode 100644 index 00000000000..2f7522dfebc --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KeysToTheHouse.java @@ -0,0 +1,57 @@ +package mage.cards.k; + +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.LockOrUnlockRoomTargetEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCardInLibrary; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KeysToTheHouse extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ROOM); + + public KeysToTheHouse(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); + + // {1}, {T}, Sacrifice Keys to the House: Search your library for a basic land card, reveal it, put it into your hand, then shuffle. + Ability ability = new SimpleActivatedAbility(new SearchLibraryPutInHandEffect( + new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true + ), new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + + // {3}, {T}, Sacrifice Keys to the House: Lock or unlock a door of target Room you control. Activate only as a sorcery. + ability = new ActivateAsSorceryActivatedAbility(new LockOrUnlockRoomTargetEffect(), new GenericManaCost(3)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + } + + private KeysToTheHouse(final KeysToTheHouse card) { + super(card); + } + + @Override + public KeysToTheHouse copy() { + return new KeysToTheHouse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index e4ba4029585..5eeed75d932 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -181,6 +181,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { 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, 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)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/LockOrUnlockRoomTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/LockOrUnlockRoomTargetEffect.java new file mode 100644 index 00000000000..c0ee3efe42b --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/LockOrUnlockRoomTargetEffect.java @@ -0,0 +1,32 @@ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; + +/** + * @author TheElk801 + */ +public class LockOrUnlockRoomTargetEffect extends OneShotEffect { + + public LockOrUnlockRoomTargetEffect() { + super(Outcome.Benefit); + staticText = "lock or unlock a door of target Room you control"; + } + + private LockOrUnlockRoomTargetEffect(final LockOrUnlockRoomTargetEffect effect) { + super(effect); + } + + @Override + public LockOrUnlockRoomTargetEffect copy() { + return new LockOrUnlockRoomTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + // TODO: Implement this + return true; + } +}