From e54210ad2ef0aea6b365e70690f6d98c38bc66db Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sun, 13 Apr 2025 18:00:14 -0400 Subject: [PATCH] [TDM] Implement Desperate Measures --- .../src/mage/cards/d/DesperateMeasures.java | 41 +++++++++++++++++++ .../src/mage/sets/TarkirDragonstorm.java | 1 + ...WhenTargetDiesDelayedTriggeredAbility.java | 12 +++++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/d/DesperateMeasures.java diff --git a/Mage.Sets/src/mage/cards/d/DesperateMeasures.java b/Mage.Sets/src/mage/cards/d/DesperateMeasures.java new file mode 100644 index 00000000000..446b737329c --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DesperateMeasures.java @@ -0,0 +1,41 @@ +package mage.cards.d; + +import mage.abilities.common.delayed.WhenTargetDiesDelayedTriggeredAbility; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SetTargetPointer; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DesperateMeasures extends CardImpl { + + public DesperateMeasures(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}"); + + // Target creature gets +1/-1 until end of turn. When it dies under your control this turn, draw two cards. + this.getSpellAbility().addEffect(new BoostTargetEffect(1, -1)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect( + new WhenTargetDiesDelayedTriggeredAbility( + new DrawCardSourceControllerEffect(2), Duration.EndOfTurn, + SetTargetPointer.NONE, true + ), true + )); + } + + private DesperateMeasures(final DesperateMeasures card) { + super(card); + } + + @Override + public DesperateMeasures copy() { + return new DesperateMeasures(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 6a7085c8ffc..ac12291e318 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -80,6 +80,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Defibrillating Current", 177, Rarity.UNCOMMON, mage.cards.d.DefibrillatingCurrent.class)); cards.add(new SetCardInfo("Delta Bloodflies", 77, Rarity.COMMON, mage.cards.d.DeltaBloodflies.class)); cards.add(new SetCardInfo("Descendant of Storms", 8, Rarity.UNCOMMON, mage.cards.d.DescendantOfStorms.class)); + cards.add(new SetCardInfo("Desperate Measures", 78, Rarity.UNCOMMON, mage.cards.d.DesperateMeasures.class)); cards.add(new SetCardInfo("Devoted Duelist", 104, Rarity.COMMON, mage.cards.d.DevotedDuelist.class)); cards.add(new SetCardInfo("Dirgur Island Dragon", 40, Rarity.COMMON, mage.cards.d.DirgurIslandDragon.class)); cards.add(new SetCardInfo("Dismal Backwater", 254, Rarity.COMMON, mage.cards.d.DismalBackwater.class)); diff --git a/Mage/src/main/java/mage/abilities/common/delayed/WhenTargetDiesDelayedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/delayed/WhenTargetDiesDelayedTriggeredAbility.java index 9fb75825cde..1e0b599c360 100644 --- a/Mage/src/main/java/mage/abilities/common/delayed/WhenTargetDiesDelayedTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/delayed/WhenTargetDiesDelayedTriggeredAbility.java @@ -18,6 +18,7 @@ public class WhenTargetDiesDelayedTriggeredAbility extends DelayedTriggeredAbili protected MageObjectReference mor; private final SetTargetPointer setTargetPointer; + private final boolean onlyControlled; public WhenTargetDiesDelayedTriggeredAbility(Effect effect) { this(effect, SetTargetPointer.NONE); @@ -28,15 +29,21 @@ public class WhenTargetDiesDelayedTriggeredAbility extends DelayedTriggeredAbili } public WhenTargetDiesDelayedTriggeredAbility(Effect effect, Duration duration, SetTargetPointer setTargetPointer) { + this(effect, duration, setTargetPointer, false); + } + + public WhenTargetDiesDelayedTriggeredAbility(Effect effect, Duration duration, SetTargetPointer setTargetPointer, boolean onlyControlled) { super(effect, duration, true); this.setTargetPointer = setTargetPointer; - setTriggerPhrase("When that creature dies" + (duration == Duration.EndOfTurn ? " this turn, " : ", ")); + this.onlyControlled = onlyControlled; + setTriggerPhrase("When that creature dies" + (onlyControlled ? " under your control" : "") + (duration == Duration.EndOfTurn ? " this turn, " : ", ")); } protected WhenTargetDiesDelayedTriggeredAbility(final WhenTargetDiesDelayedTriggeredAbility ability) { super(ability); this.mor = ability.mor; this.setTargetPointer = ability.setTargetPointer; + this.onlyControlled = ability.onlyControlled; } @Override @@ -62,7 +69,8 @@ public class WhenTargetDiesDelayedTriggeredAbility extends DelayedTriggeredAbili return false; } Permanent permanent = zEvent.getTarget(); - if (mor == null || !mor.refersTo(permanent, game)) { + if (mor == null || !mor.refersTo(permanent, game) + || onlyControlled && !permanent.isControlledBy(getControllerId())) { return false; } switch (setTargetPointer) {