From c1ebc5fb166448da1a8eb4eea984a2cba686c75b Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 29 May 2025 13:53:36 -0400 Subject: [PATCH] [FIN] Implement Exdeath, Void Warlock / Neo Exdeath, Dimension's End --- .../src/mage/cards/e/ExdeathVoidWarlock.java | 61 +++++++++++++++++++ .../mage/cards/n/NeoExdeathDimensionsEnd.java | 52 ++++++++++++++++ Mage.Sets/src/mage/sets/FinalFantasy.java | 2 + Utils/mtg-cards-data.txt | 2 + 4 files changed, 117 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/e/ExdeathVoidWarlock.java create mode 100644 Mage.Sets/src/mage/cards/n/NeoExdeathDimensionsEnd.java diff --git a/Mage.Sets/src/mage/cards/e/ExdeathVoidWarlock.java b/Mage.Sets/src/mage/cards/e/ExdeathVoidWarlock.java new file mode 100644 index 00000000000..4a941ceec6a --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/ExdeathVoidWarlock.java @@ -0,0 +1,61 @@ +package mage.cards.e; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; +import mage.abilities.keyword.TransformAbility; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ExdeathVoidWarlock extends CardImpl { + + private static final Condition condition = new CardsInControllerGraveyardCondition(6, StaticFilters.FILTER_CARD_PERMANENTS); + private static final Hint hint = new ValueHint( + "Permanent cards in your graveyard", + new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_PERMANENT) + ); + + public ExdeathVoidWarlock(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.SPIRIT); + this.subtype.add(SubType.WARLOCK); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + this.secondSideCardClazz = mage.cards.n.NeoExdeathDimensionsEnd.class; + + // When Exdeath enters, you gain 3 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3))); + + // At the beginning of your end step, if there are six or more permanent cards in your graveyard, transform Exdeath. + this.addAbility(new TransformAbility()); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect()) + .withInterveningIf(condition).addHint(hint)); + } + + private ExdeathVoidWarlock(final ExdeathVoidWarlock card) { + super(card); + } + + @Override + public ExdeathVoidWarlock copy() { + return new ExdeathVoidWarlock(this); + } +} diff --git a/Mage.Sets/src/mage/cards/n/NeoExdeathDimensionsEnd.java b/Mage.Sets/src/mage/cards/n/NeoExdeathDimensionsEnd.java new file mode 100644 index 00000000000..d2602d2d66b --- /dev/null +++ b/Mage.Sets/src/mage/cards/n/NeoExdeathDimensionsEnd.java @@ -0,0 +1,52 @@ +package mage.cards.n; + +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class NeoExdeathDimensionsEnd extends CardImpl { + + private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_PERMANENTS); + + public NeoExdeathDimensionsEnd(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.SPIRIT); + this.subtype.add(SubType.AVATAR); + this.power = new MageInt(0); + this.toughness = new MageInt(3); + this.nightCard = true; + this.color.setBlack(true); + this.color.setGreen(true); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Neo Exdeath's power is equal to the number of permanent cards in your graveyard. + this.addAbility(new SimpleStaticAbility(new SetBasePowerSourceEffect(xValue))); + } + + private NeoExdeathDimensionsEnd(final NeoExdeathDimensionsEnd card) { + super(card); + } + + @Override + public NeoExdeathDimensionsEnd copy() { + return new NeoExdeathDimensionsEnd(this); + } +} diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 29eb28f3529..cf8b6ee6004 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -190,6 +190,7 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Evil Reawakened", 98, Rarity.UNCOMMON, mage.cards.e.EvilReawakened.class)); cards.add(new SetCardInfo("Excalibur II", 257, Rarity.RARE, mage.cards.e.ExcaliburII.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Excalibur II", 352, Rarity.RARE, mage.cards.e.ExcaliburII.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Exdeath, Void Warlock", 220, Rarity.UNCOMMON, mage.cards.e.ExdeathVoidWarlock.class)); cards.add(new SetCardInfo("Fang, Fearless l'Cie", 381, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fang, Fearless l'Cie", 446, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Fang, Fearless l'Cie", 526, Rarity.UNCOMMON, mage.cards.f.FangFearlessLCie.class, NON_FULL_USE_VARIOUS)); @@ -354,6 +355,7 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Mountain", 575, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Mysidian Elder", 145, Rarity.COMMON, mage.cards.m.MysidianElder.class)); cards.add(new SetCardInfo("Namazu Trader", 107, Rarity.COMMON, mage.cards.n.NamazuTrader.class)); + cards.add(new SetCardInfo("Neo Exdeath, Dimension's End", 220, Rarity.UNCOMMON, mage.cards.n.NeoExdeathDimensionsEnd.class)); cards.add(new SetCardInfo("Nibelheim Aflame", 146, Rarity.MYTHIC, mage.cards.n.NibelheimAflame.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nibelheim Aflame", 339, Rarity.MYTHIC, mage.cards.n.NibelheimAflame.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ninja's Blades", 108, Rarity.RARE, mage.cards.n.NinjasBlades.class)); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 2b1f06e7c48..c75350a1c78 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57860,6 +57860,8 @@ Emet-Selch, Unsundered|Final Fantasy|218|M|{1}{U}{B}|Legendary Creature - Elder Hades, Sorcerer of Eld|Final Fantasy|218|M||Legendary Creature - Avatar|6|6|Vigilance$Echo of the Lost -- During your turn, you may play cards from your graveyard.$If a card or token would be put into your graveyard from anywhere, exile it instead.| The Emperor of Palamecia|Final Fantasy|219|U|{U}{R}|Legendary Creature - Human Noble Wizard|2|2|{T}: Add {U} or {R}. Spend this mana only to cast a noncreature spell.$Whenever you cast a noncreature spell, if at least four mana was spent to cast it, put a +1/+1 counter on The Emperor of Palamecia. Then if it has three or more +1/+1 counters on it, transform it.| The Lord Master of Hell|Final Fantasy|219|U||Legendary Creature - Demon Noble Wizard|3|3|Starfall -- Whenever The Lord Master of Hell attacks, it deals X damage to each opponent, where X is the number of noncreature, nonland cards in your graveyard.| +Exdeath, Void Warlock|Final Fantasy|220|U|{1}{B}{G}|Legendary Creature - Spirit Warlock|3|3|When Exdeath enters, you gain 3 life.$At the beginning of your end step, if there are six or more permanent cards in your graveyard, transform Exdeath.| +Neo Exdeath, Dimension's End|Final Fantasy|220|U||Legendary Creature - Spirit Avatar|*|3|Trample$Neo Exdeath's power is equal to the number of permanent cards in your graveyard.| Garland, Knight of Cornelia|Final Fantasy|221|U|{B}{R}|Legendary Creature - Human Knight|3|2|Whenever you cast a noncreature spell, surveil 1.${3}{B}{B}{R}{R}: Return this card from your graveyard to the battlefield transformed. Activate only as a sorcery.| Chaos, the Endless|Final Fantasy|221|U||Legendary Creature - Demon|5|5|Flying$When Chaos dies, put it on the bottom of its owner's library.| Garnet, Princess of Alexandria|Final Fantasy|222|U|{G}{W}|Legendary Creature - Human Noble Cleric|2|2|Lifelink$Whenever Garnet attacks, you may remove a lore counter from each of any number of Sagas you control. Put a +1/+1 counter on Garnet for each lore counter removed this way.|