From 3f486b0f1b7f24d28d61583bb92e49b0b462accb Mon Sep 17 00:00:00 2001 From: theelk801 Date: Mon, 26 May 2025 08:44:25 -0400 Subject: [PATCH] [FIN] Implement Dion, Bahamut's Dominant --- .../mage/cards/b/BahamutWardenOfLight.java | 71 ++++++++++++++++++ .../mage/cards/d/DionBahamutsDominant.java | 75 +++++++++++++++++++ Mage.Sets/src/mage/cards/e/EsperTerra.java | 4 +- .../src/mage/cards/p/PhoenixWardenOfFire.java | 4 +- .../src/mage/cards/s/ShivaWardenOfIce.java | 4 +- Mage.Sets/src/mage/sets/FinalFantasy.java | 6 ++ Utils/mtg-cards-data.txt | 6 ++ 7 files changed, 164 insertions(+), 6 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java create mode 100644 Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java diff --git a/Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java b/Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java new file mode 100644 index 00000000000..ccd8cd3eb2a --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java @@ -0,0 +1,71 @@ +package mage.cards.b; + +import mage.MageInt; +import mage.abilities.common.SagaAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.target.TargetPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BahamutWardenOfLight extends CardImpl { + + public BahamutWardenOfLight(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.SAGA); + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + this.nightCard = true; + this.color.setWhite(true); + + // (As this Saga enters and after your draw step, add a lore counter.) + SagaAbility sagaAbility = new SagaAbility(this); + + // I, II -- Wings of Light -- Put a +1/+1 counter on each other creature you control. Those creatures gain flying until end of turn. + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, ability -> { + ability.addEffect(new AddCountersAllEffect( + CounterType.P1P1.createInstance(), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE + )); + ability.addEffect(new GainAbilityControlledEffect( + FlyingAbility.getInstance(), Duration.EndOfTurn, + StaticFilters.FILTER_CONTROLLED_CREATURE + ).setText("Those creatures gain flying until end of turn")); + ability.withFlavorWord("Wings of Light"); + }); + + // III -- Gigaflare -- Destroy target permanent. Exile Bahamut, then return it to the battlefield. + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, ability -> { + ability.addEffect(new DestroyTargetEffect()); + ability.addEffect(new ExileSourceAndReturnFaceUpEffect()); + ability.addTarget(new TargetPermanent()); + ability.withFlavorWord("Gigaflare"); + }); + this.addAbility(sagaAbility); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + } + + private BahamutWardenOfLight(final BahamutWardenOfLight card) { + super(card); + } + + @Override + public BahamutWardenOfLight copy() { + return new BahamutWardenOfLight(this); + } +} diff --git a/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java b/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java new file mode 100644 index 00000000000..169722a42e3 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java @@ -0,0 +1,75 @@ +package mage.cards.d; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.game.permanent.token.WaylayToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DionBahamutsDominant extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent(SubType.KNIGHT, ""); + + public DionBahamutsDominant(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.NOBLE); + this.subtype.add(SubType.KNIGHT); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + this.secondSideCardClazz = mage.cards.b.BahamutWardenOfLight.class; + + // Dragonfire Dive -- During your turn, Dion and other Knights you control have flying. + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance()), + MyTurnCondition.instance, "during your turn, {this}" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileControlled, filter), + MyTurnCondition.instance, "and other Knights you control have flying" + )); + this.addAbility(ability.withFlavorWord("Dragonfire Dive")); + + // When Dion enters, create a 2/2 white Knight creature token. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WaylayToken()))); + + // {4}{W}{W}, {T}: Exile Dion, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery. + this.addAbility(new TransformAbility()); + ability = new ActivateAsSorceryActivatedAbility( + new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED), new ManaCostsImpl<>("{4}{W}{W}") + ); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + private DionBahamutsDominant(final DionBahamutsDominant card) { + super(card); + } + + @Override + public DionBahamutsDominant copy() { + return new DionBahamutsDominant(this); + } +} diff --git a/Mage.Sets/src/mage/cards/e/EsperTerra.java b/Mage.Sets/src/mage/cards/e/EsperTerra.java index 9397c73f147..884d7dfb4c4 100644 --- a/Mage.Sets/src/mage/cards/e/EsperTerra.java +++ b/Mage.Sets/src/mage/cards/e/EsperTerra.java @@ -6,7 +6,7 @@ import mage.abilities.Ability; import mage.abilities.common.SagaAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenCopyTargetEffect; -import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect; import mage.abilities.effects.mana.BasicManaEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.HasteAbility; @@ -62,7 +62,7 @@ public final class EsperTerra extends CardImpl { new BasicManaEffect(new Mana( 2, 2, 2, 2, 2, 0, 0, 0 )).setText("add {W}{W}, {U}{U}, {B}{B}, {R}{R}, and {G}{G}"), - new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD)); + new ExileSourceAndReturnFaceUpEffect()); this.addAbility(sagaAbility); // Flying diff --git a/Mage.Sets/src/mage/cards/p/PhoenixWardenOfFire.java b/Mage.Sets/src/mage/cards/p/PhoenixWardenOfFire.java index 8c126c5fc65..f95a9a46b15 100644 --- a/Mage.Sets/src/mage/cards/p/PhoenixWardenOfFire.java +++ b/Mage.Sets/src/mage/cards/p/PhoenixWardenOfFire.java @@ -5,7 +5,7 @@ import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SagaAbility; import mage.abilities.effects.common.DamagePlayersEffect; -import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.LifelinkAbility; @@ -51,7 +51,7 @@ public final class PhoenixWardenOfFire extends CardImpl { // III -- Flames of Rebirth -- Return any number of target creature cards with total mana value 6 or less from your graveyard to the battlefield. Exile Phoenix, then return it to the battlefield. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, ability -> { ability.addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); - ability.addEffect(new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD)); + ability.addEffect(new ExileSourceAndReturnFaceUpEffect()); ability.addTarget(new PhoenixWardenOfFireTarget()); ability.withFlavorWord("Flames of Rebirth"); }); diff --git a/Mage.Sets/src/mage/cards/s/ShivaWardenOfIce.java b/Mage.Sets/src/mage/cards/s/ShivaWardenOfIce.java index 44eb95bf35b..cf667f30444 100644 --- a/Mage.Sets/src/mage/cards/s/ShivaWardenOfIce.java +++ b/Mage.Sets/src/mage/cards/s/ShivaWardenOfIce.java @@ -2,7 +2,7 @@ package mage.cards.s; import mage.MageInt; import mage.abilities.common.SagaAbility; -import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect; import mage.abilities.effects.common.TapAllEffect; import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; import mage.cards.CardImpl; @@ -49,7 +49,7 @@ public final class ShivaWardenOfIce extends CardImpl { // III -- Cold Snap -- Tap all lands your opponents control. Exile Shiva, then return it to the battlefield. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, ability -> { ability.addEffect(new TapAllEffect(filter)); - ability.addEffect(new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD)); + ability.addEffect(new ExileSourceAndReturnFaceUpEffect()); ability.withFlavorWord("Cold Snap"); }); this.addAbility(sagaAbility); diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index c3f11cc1b39..e395e03d1a4 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -48,6 +48,9 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Astrologian's Planisphere", 46, Rarity.RARE, mage.cards.a.AstrologiansPlanisphere.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Astrologian's Planisphere", 581, Rarity.RARE, mage.cards.a.AstrologiansPlanisphere.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Auron's Inspiration", 8, Rarity.UNCOMMON, mage.cards.a.AuronsInspiration.class)); + cards.add(new SetCardInfo("Bahamut, Warden of Light", 16, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bahamut, Warden of Light", 376, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bahamut, Warden of Light", 428, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Balamb Garden, Airborne", 272, Rarity.RARE, mage.cards.b.BalambGardenAirborne.class)); cards.add(new SetCardInfo("Balamb Garden, SeeD Academy", 272, Rarity.RARE, mage.cards.b.BalambGardenSeeDAcademy.class)); cards.add(new SetCardInfo("Balamb T-Rexaur", 173, Rarity.COMMON, mage.cards.b.BalambTRexaur.class)); @@ -130,6 +133,9 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Dark Confidant", 334, Rarity.MYTHIC, mage.cards.d.DarkConfidant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dark Confidant", 94, Rarity.MYTHIC, mage.cards.d.DarkConfidant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Deadly Embrace", 557, Rarity.RARE, mage.cards.d.DeadlyEmbrace.class)); + cards.add(new SetCardInfo("Dion, Bahamut's Dominant", 16, Rarity.RARE, mage.cards.d.DionBahamutsDominant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dion, Bahamut's Dominant", 376, Rarity.RARE, mage.cards.d.DionBahamutsDominant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Dion, Bahamut's Dominant", 428, Rarity.RARE, mage.cards.d.DionBahamutsDominant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dragoon's Lance", 17, Rarity.UNCOMMON, mage.cards.d.DragoonsLance.class)); cards.add(new SetCardInfo("Dragoon's Wyvern", 49, Rarity.COMMON, mage.cards.d.DragoonsWyvern.class)); cards.add(new SetCardInfo("Dreams of Laguna", 50, Rarity.COMMON, mage.cards.d.DreamsOfLaguna.class)); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index c7aa91313f7..b1f0085a264 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57637,6 +57637,8 @@ Coeurl|Final Fantasy|12|C|{1}{W}|Creature - Cat Beast|2|2|{1}{W}, {T}: Tap targe Crystal Fragments|Final Fantasy|13|U|{W}|Artifact - Equipment|||Equipped creature gets +1/+1.${5}{W}{W}: Exile this Equipment, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery.$Equip {1}| Summon: Alexander|Final Fantasy|13|U||Enchantment Creature - Saga Construct|4|3|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I, II -- Prevent all damage that would be dealt to creatures you control this turn.$III -- Tap all creatures your opponents control.$Flying| The Crystal's Chosen|Final Fantasy|14|U|{5}{W}{W}|Sorcery|||Create four 1/1 colorless Hero creature tokens. Then put a +1/+1 counter on each creature you control.| +Dion, Bahamut's Dominant|Final Fantasy|16|R|{3}{W}|Legendary Creature - Human Noble Knight|3|3|Dragonfire Dive -- During your turn, Dion and other Knights you control have flying.$When Dion enters, create a 2/2 white Knight creature token.${4}{W}{W}, {T}: Exile Dion, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery.| +Bahamut, Warden of Light|Final Fantasy|16|R||Legendary Enchantment Creature - Saga Dragon|5|5|(As this Saga enters and after your draw step, add a lore counter.)$I, II -- Wings of Light -- Put a +1/+1 counter on each other creature you control. Those creatures gain flying until end of turn.$III -- Gigaflare -- Destroy target permanent. Exile Bahamut, then return it to the battlefield.$Flying| Dragoon's Lance|Final Fantasy|17|U|{1}{W}|Artifact - Equipment|||Job select$Equipped creature gets +1/+0 and is a Knight in addition to its other types.$During your turn, equipped creature has flying.$Gae Bolg -- Equip {4}| Dwarven Castle Guard|Final Fantasy|18|C|{1}{W}|Creature - Dwarf Soldier|2|1|When this creature dies, create a 1/1 colorless Hero creature token.| Fate of the Sun-Cryst|Final Fantasy|19|C|{4}{W}|Instant|||This spell costs {2} less to cast if it targets a tapped creature.$Destroy target nonland permanent.| @@ -57938,6 +57940,8 @@ Summon: Fenrir|Final Fantasy|372|U|{2}{G}|Enchantment Creature - Saga Wolf|3|2|( Summon: Titan|Final Fantasy|373|R|{3}{G}{G}|Enchantment Creature - Saga Giant|7|7|(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)$I - Mill five cards.$II - Return all land cards from your graveyard to the battlefield tapped.$III - Until end of turn, another target creature you control gains trample and gets +X/+X, where X is the number of lands you control.$Reach, trample| Aerith Gainsborough|Final Fantasy|374|R|{2}{W}|Legendary Creature - Human Cleric|2|2|Lifelink$Whenever you gain life, put a +1/+1 counter on Aerith Gainsborough.$When Aerith Gainsborough dies, put X +1/+1 counters on each legendary creature you control, where X is the number of +1/+1 counters on Aerith Gainsborough.| Cloud, Midgar Mercenary|Final Fantasy|375|M|{W}{W}|Legendary Creature - Human Soldier Mercenary|2|1|When Cloud enters, search your library for an Equipment card, reveal it, put it into your hand, then shuffle.$As long as Cloud is equipped, if an ability of Cloud or an Equipment attached to it triggers, that ability triggers an additional time.| +Dion, Bahamut's Dominant|Final Fantasy|376|R|{3}{W}|Legendary Creature - Human Noble Knight|3|3|Dragonfire Dive -- During your turn, Dion and other Knights you control have flying.$When Dion enters, create a 2/2 white Knight creature token.${4}{W}{W}, {T}: Exile Dion, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery.| +Bahamut, Warden of Light|Final Fantasy|376|R||Legendary Enchantment Creature - Saga Dragon|5|5|(As this Saga enters and after your draw step, add a lore counter.)$I, II -- Wings of Light -- Put a +1/+1 counter on each other creature you control. Those creatures gain flying until end of turn.$III -- Gigaflare -- Destroy target permanent. Exile Bahamut, then return it to the battlefield.$Flying| Gogo, Master of Mimicry|Final Fantasy|377|M|{2}{U}|Legendary Creature - Wizard|2|4|{X}{X}, {T}: Copy target activated or triggered ability you control X times. You may choose new targets for the copy. This ability can't be copied, and X can't be 0.| Jill, Shiva's Dominant|Final Fantasy|378|R|{2}{U}|Legendary Creature - Human Noble Warrior|2|2|When Jill enters, return up to one other target nonland permanent to its owner's hand.${3}{U}{U}, {T}: Exile Jill, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery.| Shiva, Warden of Ice|Final Fantasy|378|R||Legendary Enchantment Creature - Saga Elemental|4|5|(As this Saga enters and after your draw step, add a lore counter.)$I, II -- Mesmerize -- Target creature can't be blocked this turn.$III -- Cold Snap -- Tap all lands your opponents control. Exile Shiva, then return it to the battlefield.| @@ -57996,6 +58000,8 @@ Aerith Gainsborough|Final Fantasy|423|R|{2}{W}|Legendary Creature - Human Cleric Ambrosia Whiteheart|Final Fantasy|424|U|{1}{W}|Legendary Creature - Bird|2|2|Flash$When Ambrosia Whiteheart enters, you may return another permanent you control to its owner's hand.$Landfall -- Whenever a land you control enters, Ambrosia Whiteheart gets +1/+0 until end of turn.| Beatrix, Loyal General|Final Fantasy|426|R|{4}{W}{W}|Legendary Creature - Human Soldier|4|4|Vigilance$At the beginning of combat on your turn, you may attach any number of Equipment you control to target creature you control.| Cloud, Midgar Mercenary|Final Fantasy|427|M|{W}{W}|Legendary Creature - Human Soldier Mercenary|2|1|When Cloud enters, search your library for an Equipment card, reveal it, put it into your hand, then shuffle.$As long as Cloud is equipped, if an ability of Cloud or an Equipment attached to it triggers, that ability triggers an additional time.| +Dion, Bahamut's Dominant|Final Fantasy|428|R|{3}{W}|Legendary Creature - Human Noble Knight|3|3|Dragonfire Dive -- During your turn, Dion and other Knights you control have flying.$When Dion enters, create a 2/2 white Knight creature token.${4}{W}{W}, {T}: Exile Dion, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery.| +Bahamut, Warden of Light|Final Fantasy|428|R||Legendary Enchantment Creature - Saga Dragon|5|5|(As this Saga enters and after your draw step, add a lore counter.)$I, II -- Wings of Light -- Put a +1/+1 counter on each other creature you control. Those creatures gain flying until end of turn.$III -- Gigaflare -- Destroy target permanent. Exile Bahamut, then return it to the battlefield.$Flying| Rosa, Resolute White Mage|Final Fantasy|431|R|{3}{W}|Legendary Creature - Human Noble Cleric|2|3|Reach$At the beginning of combat on your turn, put a +1/+1 counter on target creature you control. It gains lifelink until end of turn.| Snow Villiers|Final Fantasy|432|U|{2}{W}|Legendary Creature - Human Rebel Monk|*|3|Vigilance$Snow Villiers's power is equal to the number of creatures you control.| Stiltzkin, Moogle Merchant|Final Fantasy|433|R|{W}|Legendary Creature - Moogle|1|2|Lifelink${2}, {T}: Target opponent gains control of another target permanent you control. If they do, you draw a card.|