diff --git a/Mage.Sets/src/mage/cards/d/DisturbingMirth.java b/Mage.Sets/src/mage/cards/d/DisturbingMirth.java new file mode 100644 index 00000000000..272f04ec34c --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DisturbingMirth.java @@ -0,0 +1,54 @@ +package mage.cards.d; + +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SacrificeSourceTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.keyword.ManifestDreadEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AnotherPredicate; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DisturbingMirth extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledPermanent("another enchantment or creature"); + + static { + filter.add(AnotherPredicate.instance); + filter.add(Predicates.or( + CardType.ENCHANTMENT.getPredicate(), + CardType.CREATURE.getPredicate() + )); + } + + public DisturbingMirth(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{R}"); + + // When Disturbing Mirth enters, you may sacrifice another enchantment or creature. If you do, draw two cards. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new DoIfCostPaid(new DrawCardSourceControllerEffect(2), new SacrificeTargetCost(filter)) + )); + + // When you sacrifice Disturbing Mirth, manifest dread. + this.addAbility(new SacrificeSourceTriggeredAbility(new ManifestDreadEffect())); + } + + private DisturbingMirth(final DisturbingMirth card) { + super(card); + } + + @Override + public DisturbingMirth copy() { + return new DisturbingMirth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index 61c515429a5..58b411e8aca 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -23,6 +23,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Chainsaw", 128, Rarity.RARE, mage.cards.c.Chainsaw.class)); cards.add(new SetCardInfo("Cursed Recording", 131, Rarity.RARE, mage.cards.c.CursedRecording.class)); + cards.add(new SetCardInfo("Disturbing Mirth", 212, Rarity.UNCOMMON, mage.cards.d.DisturbingMirth.class)); cards.add(new SetCardInfo("Doomsday Excruciator", 94, Rarity.RARE, mage.cards.d.DoomsdayExcruciator.class)); cards.add(new SetCardInfo("Enduring Tenacity", 95, Rarity.RARE, mage.cards.e.EnduringTenacity.class)); cards.add(new SetCardInfo("Fear of Lost Teeth", 97, Rarity.COMMON, mage.cards.f.FearOfLostTeeth.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ManifestDreadEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ManifestDreadEffect.java new file mode 100644 index 00000000000..ee2bffd7068 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/keyword/ManifestDreadEffect.java @@ -0,0 +1,62 @@ +package mage.abilities.effects.keyword; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInLibrary; + +/** + * @author TheElk801 + */ +public class ManifestDreadEffect extends OneShotEffect { + + public ManifestDreadEffect() { + super(Outcome.Benefit); + staticText = "manifest dread"; + } + + private ManifestDreadEffect(final ManifestDreadEffect effect) { + super(effect); + } + + @Override + public ManifestDreadEffect copy() { + return new ManifestDreadEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + return player != null && doManifestDread(player, source, game); + } + + public static boolean doManifestDread(Player player, Ability source, Game game) { + Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 2)); + Card card; + switch (cards.size()) { + case 0: + return false; + case 1: + card = cards.getRandom(game); + break; + default: + TargetCard target = new TargetCardInLibrary(); + target.withChooseHint("to manifest"); + player.choose(Outcome.PutCreatureInPlay, target, source, game); + card = cards.get(target.getFirstTarget(), game); + } + if (card != null) { + ManifestEffect.doManifestCards(game, source, player, new CardsImpl(card).getCards(game)); + } + cards.retainZone(Zone.LIBRARY, game); + player.moveCards(cards, Zone.GRAVEYARD, source, game); + return true; + } +}