From df6f5e2652975a213d5465c0f646f615935c3f02 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Thu, 30 May 2019 16:49:11 -0400 Subject: [PATCH] Implemented Mirrodin Besieged --- .../src/mage/cards/m/MirrodinBesieged.java | 100 ++++++++++++++++++ Mage.Sets/src/mage/sets/ModernHorizons.java | 1 + 2 files changed, 101 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MirrodinBesieged.java diff --git a/Mage.Sets/src/mage/cards/m/MirrodinBesieged.java b/Mage.Sets/src/mage/cards/m/MirrodinBesieged.java new file mode 100644 index 00000000000..7b3b4aa04a8 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MirrodinBesieged.java @@ -0,0 +1,100 @@ +package mage.cards.m; + +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.condition.common.ModeChoiceSourceCondition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ChooseModeEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.filter.common.FilterArtifactSpell; +import mage.game.Game; +import mage.game.permanent.token.MyrToken; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MirrodinBesieged extends CardImpl { + + private static final String ruleTrigger1 = "&bull Mirran — Whenever you cast an artifact spell, " + + "create a 1/1 colorless Myr artifact creature token."; + private static final String ruleTrigger2 = "&bull Phyrexian — At the beginning of your end step, " + + "draw a card, then discard a card. Then if there are fifteen or more artifact cards in your graveyard, " + + "target opponent loses the game."; + private static final FilterSpell filter = new FilterArtifactSpell(); + + public MirrodinBesieged(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + + // As Mirrodin Besieged enters the battlefield, choose Mirran or Phyrexian. + this.addAbility(new EntersBattlefieldAbility( + new ChooseModeEffect("Mirran or Phyrexian?", "Mirran", "Phyrexian"), + null, "As {this} enters the battlefield, choose Mirran or Phyrexian.", "" + )); + + // • Mirran — Whenever you cast an artifact spell, create a 1/1 colorless Myr artifact creature token. + this.addAbility(new ConditionalTriggeredAbility(new SpellCastControllerTriggeredAbility( + new CreateTokenEffect(new MyrToken()), filter, false + ), new ModeChoiceSourceCondition("Mirran"), ruleTrigger1)); + + // • Phyrexian — At the beginning of your end step, draw a card, then discard a card. Then if there are fifteen or more artifact cards in your graveyard, target opponent loses the game. + Ability ability = new ConditionalTriggeredAbility(new BeginningOfEndStepTriggeredAbility( + new MirrodinBesiegedEffect(), TargetController.YOU, false + ), new ModeChoiceSourceCondition("Phyrexian"), ruleTrigger2); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + private MirrodinBesieged(final MirrodinBesieged card) { + super(card); + } + + @Override + public MirrodinBesieged copy() { + return new MirrodinBesieged(this); + } +} + +class MirrodinBesiegedEffect extends OneShotEffect { + + MirrodinBesiegedEffect() { + super(Outcome.Benefit); + } + + private MirrodinBesiegedEffect(final MirrodinBesiegedEffect effect) { + super(effect); + } + + @Override + public MirrodinBesiegedEffect copy() { + return new MirrodinBesiegedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + new DrawDiscardControllerEffect(1, 1).apply(game, source); + Player player = game.getPlayer(source.getControllerId()); + Player opponent = game.getPlayer(source.getFirstTarget()); + if (player == null || opponent == null) { + return false; + } + if (player.getGraveyard().getCards(StaticFilters.FILTER_CARD_ARTIFACT, source.getSourceId(), source.getControllerId(), game).size() >= 15) { + opponent.lost(game); + } + return true; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ModernHorizons.java b/Mage.Sets/src/mage/sets/ModernHorizons.java index ba8087fd6d6..2b5a6439ffe 100644 --- a/Mage.Sets/src/mage/sets/ModernHorizons.java +++ b/Mage.Sets/src/mage/sets/ModernHorizons.java @@ -117,6 +117,7 @@ public final class ModernHorizons extends ExpansionSet { cards.add(new SetCardInfo("Man-o'-War", 55, Rarity.COMMON, mage.cards.m.ManOWar.class)); cards.add(new SetCardInfo("Martyr's Soul", 19, Rarity.COMMON, mage.cards.m.MartyrsSoul.class)); cards.add(new SetCardInfo("Mind Rake", 96, Rarity.COMMON, mage.cards.m.MindRake.class)); + cards.add(new SetCardInfo("Mirrodin Besieged", 57, Rarity.RARE, mage.cards.m.MirrodinBesieged.class)); cards.add(new SetCardInfo("Mist-Syndicate Naga", 58, Rarity.RARE, mage.cards.m.MistSyndicateNaga.class)); cards.add(new SetCardInfo("Morophon, the Boundless", 1, Rarity.MYTHIC, mage.cards.m.MorophonTheBoundless.class)); cards.add(new SetCardInfo("Mother Bear", 171, Rarity.COMMON, mage.cards.m.MotherBear.class));