From a045afbd5bc5ff7b568147c8599253d36f519cb9 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sat, 14 Sep 2024 16:26:29 -0400 Subject: [PATCH] [DSK] Implement Unidentified Hovership --- .../mage/cards/u/UnidentifiedHovership.java | 103 ++++++++++++++++++ .../src/mage/sets/DuskmournHouseOfHorror.java | 1 + 2 files changed, 104 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/u/UnidentifiedHovership.java diff --git a/Mage.Sets/src/mage/cards/u/UnidentifiedHovership.java b/Mage.Sets/src/mage/cards/u/UnidentifiedHovership.java new file mode 100644 index 00000000000..bd8dc5aa691 --- /dev/null +++ b/Mage.Sets/src/mage/cards/u/UnidentifiedHovership.java @@ -0,0 +1,103 @@ +package mage.cards.u; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetForSourceEffect; +import mage.abilities.effects.keyword.ManifestDreadEffect; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.game.ExileZone; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class UnidentifiedHovership extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent("creature with toughness 5 or less"); + + static { + filter.add(new ToughnessPredicate(ComparisonType.FEWER_THAN, 6)); + } + + public UnidentifiedHovership(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}{W}"); + + this.subtype.add(SubType.VEHICLE); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Unidentified Hovership enters, exile up to one target creature with toughness 5 or less. + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect()); + ability.addTarget(new TargetPermanent(0, 1, filter)); + this.addAbility(ability); + + // When Unidentified Hovership leaves the battlefield, the exiled card's owner manifests dread. + this.addAbility(new LeavesBattlefieldTriggeredAbility(new UnidentifiedHovershipEffect())); + + // Crew 1 + this.addAbility(new CrewAbility(1)); + } + + private UnidentifiedHovership(final UnidentifiedHovership card) { + super(card); + } + + @Override + public UnidentifiedHovership copy() { + return new UnidentifiedHovership(this); + } +} + +class UnidentifiedHovershipEffect extends OneShotEffect { + + UnidentifiedHovershipEffect() { + super(Outcome.Benefit); + staticText = "the exiled card's owner manifests dread"; + } + + private UnidentifiedHovershipEffect(final UnidentifiedHovershipEffect effect) { + super(effect); + } + + @Override + public UnidentifiedHovershipEffect copy() { + return new UnidentifiedHovershipEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + ExileZone exileZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source)); + if (exileZone == null || exileZone.isEmpty()) { + return false; + } + for (Card card : exileZone.getCards(game)) { + Player player = game.getPlayer(card.getOwnerId()); + if (player != null) { + ManifestDreadEffect.doManifestDread(player, source, game); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index 9fba5211edd..cd39ac7ef96 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -215,6 +215,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Twitching Doll", 201, Rarity.RARE, mage.cards.t.TwitchingDoll.class)); cards.add(new SetCardInfo("Tyvar, the Pummeler", 202, Rarity.MYTHIC, mage.cards.t.TyvarThePummeler.class)); cards.add(new SetCardInfo("Under the Skin", 203, Rarity.UNCOMMON, mage.cards.u.UnderTheSkin.class)); + cards.add(new SetCardInfo("Unidentified Hovership", 37, Rarity.RARE, mage.cards.u.UnidentifiedHovership.class)); cards.add(new SetCardInfo("Unnerving Grasp", 80, Rarity.UNCOMMON, mage.cards.u.UnnervingGrasp.class)); cards.add(new SetCardInfo("Unsettling Twins", 38, Rarity.COMMON, mage.cards.u.UnsettlingTwins.class)); cards.add(new SetCardInfo("Untimely Malfunction", 161, Rarity.UNCOMMON, mage.cards.u.UntimelyMalfunction.class));