From 69c08002a580b07b64935bb5aabe31db6f9c8dce Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sat, 14 Sep 2024 11:41:57 -0400 Subject: [PATCH] [DSK] Implement Norin, Swift Survivalist --- .../mage/cards/n/NorinSwiftSurvivalist.java | 87 +++++++++++++++++++ .../src/mage/sets/DuskmournHouseOfHorror.java | 1 + 2 files changed, 88 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/n/NorinSwiftSurvivalist.java diff --git a/Mage.Sets/src/mage/cards/n/NorinSwiftSurvivalist.java b/Mage.Sets/src/mage/cards/n/NorinSwiftSurvivalist.java new file mode 100644 index 00000000000..bf61b2ada3b --- /dev/null +++ b/Mage.Sets/src/mage/cards/n/NorinSwiftSurvivalist.java @@ -0,0 +1,87 @@ +package mage.cards.n; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BecomesBlockedAllTriggeredAbility; +import mage.abilities.common.CantBlockAbility; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class NorinSwiftSurvivalist extends CardImpl { + + public NorinSwiftSurvivalist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.COWARD); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Norin, Swift Survivalist can't block. + this.addAbility(new CantBlockAbility()); + + // Whenever a creature you control becomes blocked, you may exile it. You may play that card from exile this turn. + this.addAbility(new BecomesBlockedAllTriggeredAbility( + new NorinSwiftSurvivalistEffect(), true, + StaticFilters.FILTER_CONTROLLED_A_CREATURE, true + )); + } + + private NorinSwiftSurvivalist(final NorinSwiftSurvivalist card) { + super(card); + } + + @Override + public NorinSwiftSurvivalist copy() { + return new NorinSwiftSurvivalist(this); + } +} + +class NorinSwiftSurvivalistEffect extends OneShotEffect { + + NorinSwiftSurvivalistEffect() { + super(Outcome.Benefit); + staticText = "exile it. You may play that card from exile this turn"; + } + + private NorinSwiftSurvivalistEffect(final NorinSwiftSurvivalistEffect effect) { + super(effect); + } + + @Override + public NorinSwiftSurvivalistEffect copy() { + return new NorinSwiftSurvivalistEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (player == null || permanent == null) { + return false; + } + Card card = permanent.getMainCard(); + player.moveCards(permanent, Zone.EXILED, source, game); + if (card != null) { + CardUtil.makeCardPlayable( + game, source, card, false, + Duration.EndOfTurn, false, player.getId(), null + ); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index ef483f9e0d3..56cadc0b09b 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -142,6 +142,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Murky Sewer", 263, Rarity.COMMON, mage.cards.m.MurkySewer.class)); cards.add(new SetCardInfo("Nashi, Searcher in the Dark", 223, Rarity.RARE, mage.cards.n.NashiSearcherInTheDark.class)); cards.add(new SetCardInfo("Neglected Manor", 264, Rarity.COMMON, mage.cards.n.NeglectedManor.class)); + cards.add(new SetCardInfo("Norin, Swift Survivalist", 145, Rarity.UNCOMMON, mage.cards.n.NorinSwiftSurvivalist.class)); cards.add(new SetCardInfo("Oblivious Bookworm", 225, Rarity.UNCOMMON, mage.cards.o.ObliviousBookworm.class)); cards.add(new SetCardInfo("Optimistic Scavenger", 21, Rarity.UNCOMMON, mage.cards.o.OptimisticScavenger.class)); cards.add(new SetCardInfo("Orphans of the Wheat", 22, Rarity.UNCOMMON, mage.cards.o.OrphansOfTheWheat.class));