[MH3] Implement Quest for the Necropolis

This commit is contained in:
theelk801 2024-05-28 10:10:34 -04:00
parent 26c72ae0bf
commit fe6082001c
2 changed files with 69 additions and 0 deletions

View file

@ -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);
}
}
}

View file

@ -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));