From 1da557534eb4f8486a8d36173c715051d30540ef Mon Sep 17 00:00:00 2001 From: theelk801 Date: Mon, 31 Mar 2025 16:21:41 -0400 Subject: [PATCH] [TDM] Implement Thunder of Unity --- .../src/mage/cards/t/ThunderOfUnity.java | 83 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + 2 files changed, 84 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/t/ThunderOfUnity.java diff --git a/Mage.Sets/src/mage/cards/t/ThunderOfUnity.java b/Mage.Sets/src/mage/cards/t/ThunderOfUnity.java new file mode 100644 index 00000000000..e1619ec66d4 --- /dev/null +++ b/Mage.Sets/src/mage/cards/t/ThunderOfUnity.java @@ -0,0 +1,83 @@ +package mage.cards.t; + +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.SagaAbility; +import mage.abilities.effects.common.*; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SagaChapter; +import mage.constants.SubType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ThunderOfUnity extends CardImpl { + + public ThunderOfUnity(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}{W}{B}"); + + this.subtype.add(SubType.SAGA); + + // (As this Saga enters step, add a lore counter. Sacrifice after III.) + SagaAbility sagaAbility = new SagaAbility(this); + + // I -- You draw two cards and you lose 2 life. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_I, + new DrawCardSourceControllerEffect(2, true), + new LoseLifeSourceControllerEffect(2).concatBy("and") + ); + + // II, III -- Whenever a creature you control enters this turn, each opponent loses 1 life and you gain 1 life. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_III, + new CreateDelayedTriggeredAbilityEffect(new ThunderOfUnityTriggeredAbility()) + ); + this.addAbility(sagaAbility); + } + + private ThunderOfUnity(final ThunderOfUnity card) { + super(card); + } + + @Override + public ThunderOfUnity copy() { + return new ThunderOfUnity(this); + } +} + +class ThunderOfUnityTriggeredAbility extends DelayedTriggeredAbility { + + ThunderOfUnityTriggeredAbility() { + super(new LoseLifeOpponentsEffect(1), Duration.EndOfTurn, false, false); + this.addEffect(new GainLifeEffect(1).concatBy("and")); + this.setTriggerPhrase("Whenever a creature you control enters this turn, "); + } + + private ThunderOfUnityTriggeredAbility(final ThunderOfUnityTriggeredAbility ability) { + super(ability); + } + + @Override + public ThunderOfUnityTriggeredAbility copy() { + return new ThunderOfUnityTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + return permanent != null && permanent.isCreature(game) && permanent.isControlledBy(getControllerId()); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 281702bf3f3..c4938d72957 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -200,6 +200,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Temur Tawnyback", 229, Rarity.COMMON, mage.cards.t.TemurTawnyback.class)); cards.add(new SetCardInfo("The Sibsig Ceremony", 91, Rarity.RARE, mage.cards.t.TheSibsigCeremony.class)); cards.add(new SetCardInfo("Thornwood Falls", 269, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); + cards.add(new SetCardInfo("Thunder of Unity", 231, Rarity.RARE, mage.cards.t.ThunderOfUnity.class)); cards.add(new SetCardInfo("Trade Route Envoy", 163, Rarity.COMMON, mage.cards.t.TradeRouteEnvoy.class)); cards.add(new SetCardInfo("Tranquil Cove", 270, Rarity.COMMON, mage.cards.t.TranquilCove.class)); cards.add(new SetCardInfo("Twin Bolt", 128, Rarity.COMMON, mage.cards.t.TwinBolt.class));