diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/EldritchEvolution.java b/Mage.Sets/src/mage/sets/eldritchmoon/EldritchEvolution.java index cbd6a39a47d..828915d29a0 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/EldritchEvolution.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/EldritchEvolution.java @@ -41,6 +41,7 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.Filter; import mage.filter.FilterCard; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; import mage.game.Game; @@ -60,7 +61,7 @@ public class EldritchEvolution extends CardImpl { this.expansionSetCode = "EMN"; // As an additional cost to cast Eldritch Evolution, sacrifice a creature. - this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent())); + this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, new FilterControlledCreaturePermanent("a creature"), true))); // Search your library for a creature card with converted mana cost X or less, where X is 2 plus the sacrificed creature's converted mana cost. // Put that card onto the battlefield, then shuffle your library. Exile Eldritch Evolution. @@ -105,7 +106,7 @@ class EldritchEvolutionEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (sacrificedPermanent != null && controller != null) { int newConvertedCost = sacrificedPermanent.getConvertedManaCost() + 2; - FilterCard filter = new FilterCard("creature card with converted mana cost " + newConvertedCost + "or less"); + FilterCard filter = new FilterCard("creature card with converted mana cost " + newConvertedCost + " or less"); filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, newConvertedCost+1)); filter.add(new CardTypePredicate(CardType.CREATURE)); TargetCardInLibrary target = new TargetCardInLibrary(filter); diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/StromkirkMystic.java b/Mage.Sets/src/mage/sets/eldritchmoon/StromkirkMystic.java new file mode 100644 index 00000000000..5552e52335f --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/StromkirkMystic.java @@ -0,0 +1,150 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.eldritchmoon; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.MadnessAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Library; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author fireshoes + */ +public class StromkirkMystic extends CardImpl { + + public StromkirkMystic(UUID ownerId) { + super(ownerId, 146, "Stromkirk Mystic", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Vampire"); + this.subtype.add("Horror"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Whenever Stromkirk Mystic deals combat damage to a player, exile the top card of your library. Until end of turn, you may cast that card. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new StromkirkMysticExileEffect(), false)); + + // Madness {1}{R} + this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{1}{R}"))); + } + + public StromkirkMystic(final StromkirkMystic card) { + super(card); + } + + @Override + public StromkirkMystic copy() { + return new StromkirkMystic(this); + } +} + +class StromkirkMysticExileEffect extends OneShotEffect { + + public StromkirkMysticExileEffect() { + super(Outcome.Detriment); + this.staticText = "Exile the top card of your library. Until end of turn, you may cast that card"; + } + + public StromkirkMysticExileEffect(final StromkirkMysticExileEffect effect) { + super(effect); + } + + @Override + public StromkirkMysticExileEffect copy() { + return new StromkirkMysticExileEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (sourcePermanent != null && controller != null && controller.getLibrary().size() > 0) { + Library library = controller.getLibrary(); + Card card = library.removeFromTop(game); + if (card != null) { + String exileName = new StringBuilder(sourcePermanent.getIdName()).append(" ").toString(); + controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source.getSourceId(), game, Zone.LIBRARY, true); + ContinuousEffect effect = new StromkirkMysticCastFromExileEffect(); + effect.setTargetPointer(new FixedTarget(card.getId())); + game.addEffect(effect, source); + } + return true; + } + return false; + } +} + +class StromkirkMysticCastFromExileEffect extends AsThoughEffectImpl { + + public StromkirkMysticCastFromExileEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + staticText = "You may play the card from exile"; + } + + public StromkirkMysticCastFromExileEffect(final StromkirkMysticCastFromExileEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public StromkirkMysticCastFromExileEffect copy() { + return new StromkirkMysticCastFromExileEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + return source.getControllerId().equals(affectedControllerId) && + objectId.equals(getTargetPointer().getFirst(game, source)); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/UlvenwaldAbomination.java b/Mage.Sets/src/mage/sets/eldritchmoon/UlvenwaldAbomination.java new file mode 100644 index 00000000000..95b8e9874f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/UlvenwaldAbomination.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.eldritchmoon; + +import java.util.UUID; +import mage.MageInt; +import mage.Mana; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class UlvenwaldAbomination extends CardImpl { + + public UlvenwaldAbomination(UUID ownerId) { + super(ownerId, 175, "Ulvenwald Abomination", Rarity.COMMON, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.subtype.add("Eldrazi"); + this.subtype.add("Werewolf"); + this.power = new MageInt(4); + this.toughness = new MageInt(6); + + // this card is the second face of double-faced card + this.nightCard = true; + + // {T}: Add {C}{C} to your mana pool. + this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(2), new TapSourceCost())); + } + + public UlvenwaldAbomination(final UlvenwaldAbomination card) { + super(card); + } + + @Override + public UlvenwaldAbomination copy() { + return new UlvenwaldAbomination(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/UlvenwaldCaptive.java b/Mage.Sets/src/mage/sets/eldritchmoon/UlvenwaldCaptive.java new file mode 100644 index 00000000000..f4505fb8220 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/UlvenwaldCaptive.java @@ -0,0 +1,79 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.eldritchmoon; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.abilities.keyword.TransformAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class UlvenwaldCaptive extends CardImpl { + + public UlvenwaldCaptive(UUID ownerId) { + super(ownerId, 175, "Ulvenwald Captive", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Werewolf"); + this.subtype.add("Horror"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + this.canTransform = true; + this.secondSideCard = new UlvenwaldAbomination(ownerId); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // {T}: Add {G} to your mana pool. + this.addAbility(new GreenManaAbility()); + + // {5}{G}{G}: Transform Ulvenwald Captive. + this.addAbility(new TransformAbility()); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl("{5}{G}{G}"))); + } + + public UlvenwaldCaptive(final UlvenwaldCaptive card) { + super(card); + } + + @Override + public UlvenwaldCaptive copy() { + return new UlvenwaldCaptive(this); + } +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 521f31a5c72..4f2c351c722 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57343,14 +57343,18 @@ Hanweir, the Writhing Township|Eldritch Moon|130|R||Legendary Creature - Eldrazi Harmless Offering|Eldritch Moon|131|R|{2}{R}|Sorcery|||Target opponent gains control of target permanent you control.| Smoldering Werewolf|Eldritch Moon|142|U|{2}{R}{R}|Creature - Werewolf Horror|3|2|When Smoldering Werewolf enters the battlefield, it deals 1 damage to each of up to two target creatures.${4}{R}{R}: Transform Smoldering Werewolf.| Erupting Dreadwolf|Eldritch Moon|142|U||Creature - Eldrazi Werewolf|6|4|Whenever Erupting Dreadwolf attacks, it deals 2 damage to target creature or player.| +Stromkirk Mystic|Eldritch Moon|146|R|{2}{R}|Creature - Vampire Horror|3|2|Trample$Whenever Stromkirk Mystic deals combat damage to a player, exile the top card of your library. Until end of turn, you may cast that card.$Madness {1}{R} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.)| Vildin-Pack Outcast|Eldritch Moon|148|C|{4}{R}|Creature - Werewolf Horror|4|4|Trample${R}: Vildin-Pack Outcast gets +1/-1 until end of turn.${5}{R}{R}: Transform Vildin-Pack Outcast.| Dronepack Kindred|Eldritch Moon|148|C||Creature - Eldrazi Werewolf|5|7|Trample${1}: Dronepack Kindred gets +1/+0 until end of turn.| Eldritch Evolution|Eldritch Moon|155|R|{1}{G}{G}|Sorcery|||As an additional cost to cast Eldritch Evolution, sacrifice a creature.$Search your library for a creature card with converted mana cost X or less, where X is 2 plus the sacrificed creature's converted mana cost. Put that card onto the battlefield, then shuffle your library. Exile Eldritch Evolution.| +Emrakul's Evangel|Eldritch Moon|156|R|{2}{G}|Creature - Human Horror|3|2|{T}, Sacrifice Emrakul's Evangel and any number of other non-Eldrazi creatures: Put a 3/2 colorless Eldrazi Horror creature token onto the battlefield for each creature sacrificed this way.| Emrakul's Influence|Eldritch Moon|157|U|{2}{G}{G}|Enchantment|||Whenever you cast an Eldrazi creature spell with converted mana cost 7 or greater, draw two cards.| Gnarlwood Dryad|Eldritch Moon|159|U|{G}|Creature - Dryad Horror|1|1|Deathtouch$Delirium &mdash Gnarlwood Dryad gets +2/+2 as long as there are four or more card types among cards in your graveyard.| Grapple with the Past|Eldritch Moon|160|C|{1}{G}|Instant|||Put the top three cards of your library into your graveyard, then you may return a creature or land card from your graveyard to your hand.| Kessig Prowler|Eldritch Moon|163|U|{G}|Creature - Werewolf Horror|2|1|{4}{G}: Transform Kessig Prowler.| Sinous Predator|Eldritch Moon|163|U||Creature - Eldrazi Werewolf|4|4|Sinous Predator can't be blocked by more than one creature.| +Ulvenwald Captive|Eldritch Moon|175|C|{1}{G}|Creature - Werewolf Horror|1|2|Defender${T}: Add {G} to your mana pool.${5}{G}{G}: Transform Ulvenwald Captive.| +Ulvenwald Abomination|Eldritch Moon|175|C||Creature - Eldrazi Werewolf|4|6|{T}: Add {C}{C} to your mana pool.| Ulvenwald Observer|Eldritch Moon|176|R|{4}{G}{G}|Creature - Treefolk|6|6|Whenever a creature you control with toughness 4 or greater dies, draw a card.| Bloodhall Priest|Eldritch Moon|181|R|{2}{B}{R}|Creature - Vampire Cleric|4|4|Whenever Bloodhall Priest enters the battlefield or attacks, if you have no cards in hand, Bloodhall Priest deals 2 damage to target creature or player.$Madness {1}{B}{R} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.)| Gisa and Geralf|Eldritch Moon|183|M|{2}{U}{B}|Legendary Creature - Human Wizard|4|4|When Gisa and Geralf enters the battlefield, put the top four cards of your library into your graveyard.$During each of your turns, you may cast a Zombie creature card from your graveyard.|