diff --git a/Mage.Sets/src/mage/cards/s/SivrissNightmareSpeaker.java b/Mage.Sets/src/mage/cards/s/SivrissNightmareSpeaker.java new file mode 100644 index 00000000000..b8af6381e0e --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SivrissNightmareSpeaker.java @@ -0,0 +1,95 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ChooseABackgroundAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SivrissNightmareSpeaker extends CardImpl { + + public SivrissNightmareSpeaker(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.SNAKE); + this.subtype.add(SubType.CLERIC); + this.subtype.add(SubType.WARLOCK); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {T}, Sacrifice another creature or an artifact: For each opponent, you mill a card, then return that card from your graveyard to your hand unless that player pays 3 life. + Ability ability = new SimpleActivatedAbility(new SivrissNightmareSpeakerEffect(), new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ARTIFACT_OR_OTHER_CREATURE)); + this.addAbility(ability); + + // Choose a Background + this.addAbility(ChooseABackgroundAbility.getInstance()); + } + + private SivrissNightmareSpeaker(final SivrissNightmareSpeaker card) { + super(card); + } + + @Override + public SivrissNightmareSpeaker copy() { + return new SivrissNightmareSpeaker(this); + } +} + +class SivrissNightmareSpeakerEffect extends OneShotEffect { + + SivrissNightmareSpeakerEffect() { + super(Outcome.Benefit); + staticText = "for each opponent, you mill a card, then return that card " + + "from your graveyard to your hand unless that player pays 3 life"; + } + + private SivrissNightmareSpeakerEffect(final SivrissNightmareSpeakerEffect effect) { + super(effect); + } + + @Override + public SivrissNightmareSpeakerEffect copy() { + return new SivrissNightmareSpeakerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + for (UUID playerId : game.getOpponents(source.getControllerId())) { + Player opponent = game.getPlayer(playerId); + if (opponent == null) { + continue; + } + Cards cards = player.millCards(1, source, game); + Cost cost = new PayLifeCost(3); + if (!cost.canPay(source, source, playerId, game) + || !opponent.chooseUse(outcome, "Pay 3 life?", source, game) + || !cost.pay(source, game, source, playerId, true)) { + cards.retainZone(Zone.GRAVEYARD, game); + player.moveCards(cards, Zone.HAND, source, game); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java index 49bcf962eef..4ef5bcc63f8 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java +++ b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java @@ -476,6 +476,7 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet { cards.add(new SetCardInfo("Sharpshooter Elf", 253, Rarity.UNCOMMON, mage.cards.s.SharpshooterElf.class)); cards.add(new SetCardInfo("Shiny Impetus", 194, Rarity.COMMON, mage.cards.s.ShinyImpetus.class)); cards.add(new SetCardInfo("Silvanus's Invoker", 254, Rarity.COMMON, mage.cards.s.SilvanussInvoker.class)); + cards.add(new SetCardInfo("Sivriss, Nightmare Speaker", 148, Rarity.UNCOMMON, mage.cards.s.SivrissNightmareSpeaker.class)); cards.add(new SetCardInfo("Skanos Dragonheart", 255, Rarity.UNCOMMON, mage.cards.s.SkanosDragonheart.class)); cards.add(new SetCardInfo("Skullclamp", 870, Rarity.UNCOMMON, mage.cards.s.Skullclamp.class)); cards.add(new SetCardInfo("Skullport Merchant", 149, Rarity.UNCOMMON, mage.cards.s.SkullportMerchant.class)); diff --git a/Mage/src/main/java/mage/abilities/common/ChooseABackgroundAbility.java b/Mage/src/main/java/mage/abilities/common/ChooseABackgroundAbility.java index 6cb9c06e60a..208013c746e 100644 --- a/Mage/src/main/java/mage/abilities/common/ChooseABackgroundAbility.java +++ b/Mage/src/main/java/mage/abilities/common/ChooseABackgroundAbility.java @@ -23,7 +23,7 @@ public class ChooseABackgroundAbility extends StaticAbility implements MageSingl } private ChooseABackgroundAbility() { - super(Zone.ALL, new InfoEffect("choose a background (You can have a Background as a second commander.)")); + super(Zone.ALL, new InfoEffect("choose a Background (You can have a Background as a second commander.)")); } @Override