diff --git a/Mage.Sets/src/mage/cards/w/WorldsoulsRage.java b/Mage.Sets/src/mage/cards/w/WorldsoulsRage.java new file mode 100644 index 00000000000..e13a332c8f1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WorldsoulsRage.java @@ -0,0 +1,105 @@ +package mage.cards.w; + +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.common.FilterLandCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetAnyTarget; + +/** + * + * @author DominionSpy + */ +public final class WorldsoulsRage extends CardImpl { + + public WorldsoulsRage(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{G}"); + + // Worldsoul's Rage deals X damage to any target. Put up to X land cards from your hand and/or graveyard onto the battlefield tapped. + this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR)); + this.getSpellAbility().addEffect(new WorldsoulsRageEffect()); + this.getSpellAbility().addTarget(new TargetAnyTarget()); + } + + private WorldsoulsRage(final WorldsoulsRage card) { + super(card); + } + + @Override + public WorldsoulsRage copy() { + return new WorldsoulsRage(this); + } +} + +class WorldsoulsRageEffect extends OneShotEffect { + + WorldsoulsRageEffect() { + super(Outcome.PutLandInPlay); + staticText = "put up to X land cards from your hand and/or graveyard onto the battlefield tapped."; + } + + private WorldsoulsRageEffect(final WorldsoulsRageEffect effect) { + super(effect); + } + + @Override + public WorldsoulsRageEffect copy() { + return new WorldsoulsRageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + + FilterCard filter = new FilterLandCard(); + + Cards landCards = new CardsImpl(); + landCards.addAllCards(controller.getHand().getCards(filter, source.getControllerId(), source, game)); + landCards.addAllCards(controller.getGraveyard().getCards(filter, source.getControllerId(), source, game)); + if (landCards.isEmpty()) { + return false; + } + + int maxTargets = source.getManaCostsToPay().getX(); + if (maxTargets == 0) { + return false; + } + + TargetCard target = new TargetCard(0, maxTargets, Zone.ALL, filter); + target.withNotTarget(true); + controller.chooseTarget(outcome, landCards, target, source, game); + + Set chosenCards = target.getTargets() + .stream() + .map(game::getCard) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (chosenCards.isEmpty()) { + return false; + } + + controller.moveCards(chosenCards, Zone.BATTLEFIELD, source, game, true, false, false, null); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java b/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java index 0480131ee2d..3a8f076b303 100644 --- a/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java +++ b/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java @@ -235,6 +235,7 @@ public final class MurdersAtKarlovManor extends ExpansionSet { cards.add(new SetCardInfo("Warleader's Call", 242, Rarity.RARE, mage.cards.w.WarleadersCall.class)); cards.add(new SetCardInfo("Wispdrinker Vampire", 243, Rarity.UNCOMMON, mage.cards.w.WispdrinkerVampire.class)); cards.add(new SetCardInfo("Wojek Investigator", 36, Rarity.RARE, mage.cards.w.WojekInvestigator.class)); + cards.add(new SetCardInfo("Worldsoul's Rage", 244, Rarity.RARE, mage.cards.w.WorldsoulsRage.class)); cards.add(new SetCardInfo("Wrench", 37, Rarity.UNCOMMON, mage.cards.w.Wrench.class)); cards.add(new SetCardInfo("Yarus, Roar of the Old Gods", 245, Rarity.RARE, mage.cards.y.YarusRoarOfTheOldGods.class));