From 323961e9a35e65ab2abe786e02702871dd511461 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 10 Jul 2025 18:42:38 -0400 Subject: [PATCH] [EOE] Implement Mutinous Massacre --- .../src/mage/cards/m/MutinousMassacre.java | 84 +++++++++++++++++++ Mage.Sets/src/mage/sets/EdgeOfEternities.java | 4 + 2 files changed, 88 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/m/MutinousMassacre.java diff --git a/Mage.Sets/src/mage/cards/m/MutinousMassacre.java b/Mage.Sets/src/mage/cards/m/MutinousMassacre.java new file mode 100644 index 00000000000..4ea83ce8cec --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MutinousMassacre.java @@ -0,0 +1,84 @@ +package mage.cards.m; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainControlAllUntapGainHasteEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ManaValueParityPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MutinousMassacre extends CardImpl { + + public MutinousMassacre(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}{B}{R}{R}"); + + // Choose odd or even. Destroy each creature with mana value of the chosen quality. Then gain control of all creatures until end of turn. Untap them. They gain haste until end of turn. + this.getSpellAbility().addEffect(new MutinousMassacreEffect()); + this.getSpellAbility().addEffect(new GainControlAllUntapGainHasteEffect(StaticFilters.FILTER_PERMANENT_CREATURES).concatBy("Then")); + } + + private MutinousMassacre(final MutinousMassacre card) { + super(card); + } + + @Override + public MutinousMassacre copy() { + return new MutinousMassacre(this); + } +} + +class MutinousMassacreEffect extends OneShotEffect { + + private static final FilterPermanent evenFilter = new FilterCreaturePermanent(); + private static final FilterPermanent oddFilter = new FilterCreaturePermanent(); + + static { + evenFilter.add(ManaValueParityPredicate.EVEN); + oddFilter.add(ManaValueParityPredicate.ODD); + } + + MutinousMassacreEffect() { + super(Outcome.Benefit); + staticText = "choose odd or even. Destroy each creature with mana value of the chosen quality"; + } + + private MutinousMassacreEffect(final MutinousMassacreEffect effect) { + super(effect); + } + + @Override + public MutinousMassacreEffect copy() { + return new MutinousMassacreEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + FilterPermanent filter = player.chooseUse( + outcome, "Odd or even?", null, + "Odd", "Even", source, game + ) ? oddFilter : evenFilter; + for (Permanent permanent : game.getBattlefield().getActivePermanents( + filter, source.getControllerId(), source, game + )) { + permanent.destroy(source, game); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/EdgeOfEternities.java b/Mage.Sets/src/mage/sets/EdgeOfEternities.java index 25e7656d7a5..c1ca0367e32 100644 --- a/Mage.Sets/src/mage/sets/EdgeOfEternities.java +++ b/Mage.Sets/src/mage/sets/EdgeOfEternities.java @@ -115,6 +115,10 @@ public final class EdgeOfEternities extends ExpansionSet { cards.add(new SetCardInfo("Mountain", 274, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mountain", 370, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Mouth of the Storm", 70, Rarity.UNCOMMON, mage.cards.m.MouthOfTheStorm.class)); + cards.add(new SetCardInfo("Mutinous Massacre", 222, Rarity.RARE, mage.cards.m.MutinousMassacre.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mutinous Massacre", 314, Rarity.RARE, mage.cards.m.MutinousMassacre.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mutinous Massacre", 363, Rarity.MYTHIC, mage.cards.m.MutinousMassacre.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mutinous Massacre", 389, Rarity.MYTHIC, mage.cards.m.MutinousMassacre.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nova Hellkite", 148, Rarity.RARE, mage.cards.n.NovaHellkite.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nova Hellkite", 309, Rarity.RARE, mage.cards.n.NovaHellkite.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nutrient Block", 243, Rarity.COMMON, mage.cards.n.NutrientBlock.class));