From a42449d9d7ca725c5162dbdd5f7f3ebdf0191480 Mon Sep 17 00:00:00 2001 From: Muz Ali Date: Fri, 3 Jul 2026 19:04:41 -0500 Subject: [PATCH] [MSC] Implement Asgardian Inspiration --- .../mage/cards/a/AsgardianInspiration.java | 54 +++++++++++++++++++ .../mage/sets/MarvelSuperHeroesCommander.java | 1 + ...ombatDamageToOpponentTriggeredAbility.java | 6 ++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/cards/a/AsgardianInspiration.java diff --git a/Mage.Sets/src/mage/cards/a/AsgardianInspiration.java b/Mage.Sets/src/mage/cards/a/AsgardianInspiration.java new file mode 100644 index 000000000000..28895bbd0e0f --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AsgardianInspiration.java @@ -0,0 +1,54 @@ +package mage.cards.a; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SourceDealsNoncombatDamageToOpponentTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.watchers.common.DamagedPlayerThisCombatWatcher; + +/** + * + * @author muz + */ +public final class AsgardianInspiration extends CardImpl { + + public AsgardianInspiration(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}"); + + // Exile the top card of your library. You may play it this turn. + this.getSpellAbility().addEffect( + new ExileTopXMayPlayUntilEffect(1, Duration.EndOfTurn).withTextOptions("it", true) + ); + + // Whenever a source you control deals noncombat damage to an opponent, you may pay {2}. If you do, return this card from your graveyard to your hand. + Ability ability = new SourceDealsNoncombatDamageToOpponentTriggeredAbility( + Zone.GRAVEYARD, + new DoIfCostPaid( + new ReturnSourceFromGraveyardToHandEffect(), + new ManaCostsImpl<>("{2}") + ), + false, SetTargetPointer.NONE + ); + ability.addWatcher(new DamagedPlayerThisCombatWatcher()); + this.addAbility(ability); + } + + private AsgardianInspiration(final AsgardianInspiration card) { + super(card); + } + + @Override + public AsgardianInspiration copy() { + return new AsgardianInspiration(this); + } +} diff --git a/Mage.Sets/src/mage/sets/MarvelSuperHeroesCommander.java b/Mage.Sets/src/mage/sets/MarvelSuperHeroesCommander.java index 6b576cc20e53..06c69cca661e 100644 --- a/Mage.Sets/src/mage/sets/MarvelSuperHeroesCommander.java +++ b/Mage.Sets/src/mage/sets/MarvelSuperHeroesCommander.java @@ -44,6 +44,7 @@ private MarvelSuperHeroesCommander() { cards.add(new SetCardInfo("Arcane Signet", 193, Rarity.UNCOMMON, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Arcane Signet", 194, Rarity.UNCOMMON, mage.cards.a.ArcaneSignet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Armed Assailant", 647, Rarity.COMMON, mage.cards.a.ArmedAssailant.class)); + cards.add(new SetCardInfo("Asgardian Inspiration", 678, Rarity.UNCOMMON, mage.cards.a.AsgardianInspiration.class)); cards.add(new SetCardInfo("Astonishing Spider-Man", 740, Rarity.RARE, mage.cards.a.AstonishingSpiderMan.class)); cards.add(new SetCardInfo("Atlantean Skirmisher", 616, Rarity.UNCOMMON, mage.cards.a.AtlanteanSkirmisher.class)); cards.add(new SetCardInfo("Aunt May", 768, Rarity.UNCOMMON, mage.cards.a.AuntMay.class)); diff --git a/Mage/src/main/java/mage/abilities/common/SourceDealsNoncombatDamageToOpponentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/SourceDealsNoncombatDamageToOpponentTriggeredAbility.java index 355cc197350a..90a7a2b95133 100644 --- a/Mage/src/main/java/mage/abilities/common/SourceDealsNoncombatDamageToOpponentTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SourceDealsNoncombatDamageToOpponentTriggeredAbility.java @@ -24,7 +24,11 @@ public SourceDealsNoncombatDamageToOpponentTriggeredAbility(Effect effect, SetTa } public SourceDealsNoncombatDamageToOpponentTriggeredAbility(Effect effect, boolean optional, SetTargetPointer setTargetPointer) { - super(Zone.BATTLEFIELD, effect, optional); + this(Zone.BATTLEFIELD, effect, optional, setTargetPointer); + } + + public SourceDealsNoncombatDamageToOpponentTriggeredAbility(Zone zone, Effect effect, boolean optional, SetTargetPointer setTargetPointer) { + super(zone, effect, optional); this.setTargetPointer = setTargetPointer; setTriggerPhrase("Whenever a source you control deals noncombat damage to an opponent, "); }