From fe6082001cbc3700dd0c1b216759ebb6ac52e1e1 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 28 May 2024 10:10:34 -0400 Subject: [PATCH] [MH3] Implement Quest for the Necropolis --- .../mage/cards/q/QuestForTheNecropolis.java | 68 +++++++++++++++++++ Mage.Sets/src/mage/sets/ModernHorizons3.java | 1 + 2 files changed, 69 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/q/QuestForTheNecropolis.java diff --git a/Mage.Sets/src/mage/cards/q/QuestForTheNecropolis.java b/Mage.Sets/src/mage/cards/q/QuestForTheNecropolis.java new file mode 100644 index 00000000000..5f414f65a42 --- /dev/null +++ b/Mage.Sets/src/mage/cards/q/QuestForTheNecropolis.java @@ -0,0 +1,68 @@ +package mage.cards.q; + +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.LandfallAbility; +import mage.abilities.costs.CostAdjuster; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.InfoEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.target.common.TargetCardInGraveyard; +import mage.util.CardUtil; + +import java.util.Optional; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class QuestForTheNecropolis extends CardImpl { + + public QuestForTheNecropolis(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}"); + + // Landfall -- Whenever a land enters the battlefield under your control, put a quest counter on Quest for the Necropolis. + this.addAbility(new LandfallAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()))); + + // {5}{B}, Sacrifice Quest for the Necropolis: Put target creature card from a graveyard onto the battlefield under your control. This ability costs {1} less to activate for each quest counter on Quest for the Necropolis. Activate only as a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility( + new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl<>("{5}{B}") + ); + ability.addCost(new SacrificeSourceCost()); + ability.addEffect(new InfoEffect("This ability costs {1} less to activate for each quest counter on {this}")); + ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_A_GRAVEYARD)); + this.addAbility(ability.setCostAdjuster(QuestForTheNecropolisAdjuster.instance)); + } + + private QuestForTheNecropolis(final QuestForTheNecropolis card) { + super(card); + } + + @Override + public QuestForTheNecropolis copy() { + return new QuestForTheNecropolis(this); + } +} + +enum QuestForTheNecropolisAdjuster implements CostAdjuster { + instance; + + @Override + public void adjustCosts(Ability ability, Game game) { + int amount = Optional + .ofNullable(ability.getSourcePermanentIfItStillExists(game)) + .map(permanent -> permanent.getCounters(game).getCount(CounterType.QUEST)) + .orElse(0); + if (amount > 0) { + CardUtil.reduceCost(ability, amount); + } + } +} diff --git a/Mage.Sets/src/mage/sets/ModernHorizons3.java b/Mage.Sets/src/mage/sets/ModernHorizons3.java index af49231adbf..1338838a158 100644 --- a/Mage.Sets/src/mage/sets/ModernHorizons3.java +++ b/Mage.Sets/src/mage/sets/ModernHorizons3.java @@ -122,6 +122,7 @@ public final class ModernHorizons3 extends ExpansionSet { cards.add(new SetCardInfo("Polluted Delta", 224, Rarity.RARE, mage.cards.p.PollutedDelta.class)); cards.add(new SetCardInfo("Priest of Titania", 286, Rarity.UNCOMMON, mage.cards.p.PriestOfTitania.class)); cards.add(new SetCardInfo("Psychic Frog", 199, Rarity.RARE, mage.cards.p.PsychicFrog.class)); + cards.add(new SetCardInfo("Quest for the Necropolis", 104, Rarity.UNCOMMON, mage.cards.q.QuestForTheNecropolis.class)); cards.add(new SetCardInfo("Ral, Leyline Prodigy", 247, Rarity.MYTHIC, mage.cards.r.RalLeylineProdigy.class)); cards.add(new SetCardInfo("Ral, Monsoon Mage", 247, Rarity.MYTHIC, mage.cards.r.RalMonsoonMage.class)); cards.add(new SetCardInfo("Razorgrass Ambush", 238, Rarity.UNCOMMON, mage.cards.r.RazorgrassAmbush.class));