diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/AbolisherOfBloodlines.java b/Mage.Sets/src/mage/sets/eldritchmoon/AbolisherOfBloodlines.java new file mode 100644 index 00000000000..eff8b97ecc5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/AbolisherOfBloodlines.java @@ -0,0 +1,120 @@ +/* + * 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.TriggeredAbilityImpl; +import mage.abilities.effects.common.SacrificeEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.Target; +import mage.target.common.TargetOpponent; + +/** + * + * @author fireshoes + */ +public class AbolisherOfBloodlines extends CardImpl { + + public AbolisherOfBloodlines(UUID ownerId) { + super(ownerId, 111, "Abolisher of Bloodlines", Rarity.RARE, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.subtype.add("Eldrazi"); + this.subtype.add("Vampire"); + this.power = new MageInt(6); + this.toughness = new MageInt(5); + + // this card is the second face of double-faced card + this.nightCard = true; + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When this creature transforms into Abolisher of Bloodlines, target opponent sacrifices three creatures. + this.addAbility(new AbolisherOfBloodlinesAbility()); + } + + public AbolisherOfBloodlines(final AbolisherOfBloodlines card) { + super(card); + } + + @Override + public AbolisherOfBloodlines copy() { + return new AbolisherOfBloodlines(this); + } +} + +class AbolisherOfBloodlinesAbility extends TriggeredAbilityImpl { + + public static final String RULE_TEXT = "When this creature transforms into Abolisher of Bloodlines, target opponent sacrifices three creatures"; + + public AbolisherOfBloodlinesAbility() { + super(Zone.BATTLEFIELD, new SacrificeEffect(new FilterCreaturePermanent(), 3, "Target opponent"), false); + Target target = new TargetOpponent(); + this.addTarget(target); + } + + public AbolisherOfBloodlinesAbility(final AbolisherOfBloodlinesAbility ability) { + super(ability); + } + + @Override + public AbolisherOfBloodlinesAbility copy() { + return new AbolisherOfBloodlinesAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.TRANSFORMED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getTargetId().equals(sourceId)) { + Permanent permanent = game.getPermanent(sourceId); + if (permanent != null && permanent.isTransformed()) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return RULE_TEXT + '.'; + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/AssembledAlphas.java b/Mage.Sets/src/mage/sets/eldritchmoon/AssembledAlphas.java index 800b22767d7..18d77a78587 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/AssembledAlphas.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/AssembledAlphas.java @@ -53,7 +53,7 @@ public class AssembledAlphas extends CardImpl { // Whenever Assembled Alphas blocks or becomes blocked by a creature, Assembled Alphas deals 3 damage to that creature and 3 damage to that creature's controller. Ability ability = new BlocksOrBecomesBlockedByCreatureTriggeredAbility(new DamageTargetEffect(3, true, "that creature"), false); - Effect effect = new DamageTargetControllerEffect(2); + Effect effect = new DamageTargetControllerEffect(3); effect.setText("and 3 damage to that creature's controller"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/BloodhallPriest.java b/Mage.Sets/src/mage/sets/eldritchmoon/BloodhallPriest.java new file mode 100644 index 00000000000..519f7fa58a4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/BloodhallPriest.java @@ -0,0 +1,111 @@ +/* + * 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.TriggeredAbilityImpl; +import mage.abilities.condition.common.HellbentCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.MadnessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class BloodhallPriest extends CardImpl { + + public BloodhallPriest(UUID ownerId) { + super(ownerId, 181, "Bloodhall Priest", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}{R}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Vampire"); + this.subtype.add("Cleric"); + this.power = new MageInt(4); + this.toughness = new MageInt(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. + this.addAbility(new ConditionalTriggeredAbility(new BloodhallPriestAbility(), HellbentCondition.getInstance(), null)); + + // Madness {1}{B}{R} + this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{1}{B}{R}"))); + } + + public BloodhallPriest(final BloodhallPriest card) { + super(card); + } + + @Override + public BloodhallPriest copy() { + return new BloodhallPriest(this); + } +} + +class BloodhallPriestAbility extends TriggeredAbilityImpl { + + public BloodhallPriestAbility() { + super(Zone.BATTLEFIELD, new DamageTargetEffect(2), false); + this.addTarget(new TargetCreatureOrPlayer()); + } + + public BloodhallPriestAbility(final BloodhallPriestAbility ability) { + super(ability); + } + + @Override + public BloodhallPriestAbility copy() { + return new BloodhallPriestAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.ATTACKER_DECLARED || event.getType() == EventType.ENTERS_THE_BATTLEFIELD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.ATTACKER_DECLARED && event.getSourceId().equals(this.getSourceId())) { + return true; + } + return event.getType() == EventType.ENTERS_THE_BATTLEFIELD && event.getTargetId().equals(this.getSourceId()); + } + + @Override + public String getRule() { + return "Whenever {this} enters the battlefield or attacks, if you have no cards in hand, {this} deals 2 damage to target creature or player."; + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/CuriousHomunculus.java b/Mage.Sets/src/mage/sets/eldritchmoon/CuriousHomunculus.java new file mode 100644 index 00000000000..b37e6680388 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/CuriousHomunculus.java @@ -0,0 +1,149 @@ +/* + * 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.ConditionalMana; +import mage.MageInt; +import mage.MageObject; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.TransformAbility; +import mage.abilities.mana.ConditionalColorlessManaAbility; +import mage.abilities.mana.builder.ConditionalManaBuilder; +import mage.abilities.mana.conditional.ManaCondition; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterInstantOrSorceryCard; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author fireshoes + */ +public class CuriousHomunculus extends CardImpl { + + public CuriousHomunculus(UUID ownerId) { + super(ownerId, 54, "Curious Homunculus", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Homunculus"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + this.canTransform = true; + this.secondSideCard = new VoraciousReader(ownerId); + + // {T}: Add {C} to your mana pool. Spend this mana only to cast an instant or sorcery spell. + this.addAbility(new ConditionalColorlessManaAbility(new TapSourceCost(), 1, new InstantOrSorcerySpellManaBuilder())); + + // At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform Curious Homunculus. + this.addAbility(new TransformAbility()); + this.addAbility(new ConditionalTriggeredAbility( + new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(true), TargetController.YOU, false), + new InstantOrSorceryCardsInControllerGraveCondition(3), + "At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform {this}")); + } + + public CuriousHomunculus(final CuriousHomunculus card) { + super(card); + } + + @Override + public CuriousHomunculus copy() { + return new CuriousHomunculus(this); + } +} + +class InstantOrSorcerySpellManaBuilder extends ConditionalManaBuilder { + + @Override + public ConditionalMana build(Object... options) { + return new InstantOrSorceryCastConditionalMana(this.mana); + } + + @Override + public String getRule() { + return "Spend this mana only to cast an instant or sorcery spell"; + } +} + +class InstantOrSorceryCastConditionalMana extends ConditionalMana { + + public InstantOrSorceryCastConditionalMana(Mana mana) { + super(mana); + staticText = "Spend this mana only to cast an instant or sorcery spell"; + addCondition(new InstantOrSorceryCastManaCondition()); + } +} + +class InstantOrSorceryCastManaCondition extends ManaCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + if (source instanceof SpellAbility) { + MageObject object = game.getObject(source.getSourceId()); + if (object != null && (object.getCardType().contains(CardType.INSTANT) || object.getCardType().contains(CardType.SORCERY))) { + return true; + } + } + return false; + } + + @Override + public boolean apply(Game game, Ability source, UUID originalId, Cost costsToPay) { + return apply(game, source); + } +} + +class InstantOrSorceryCardsInControllerGraveCondition implements Condition { + + private int value; + + public InstantOrSorceryCardsInControllerGraveCondition(int value) { + this.value = value; + } + + @Override + public boolean apply(Game game, Ability source) { + Player p = game.getPlayer(source.getControllerId()); + if (p != null && p.getGraveyard().count(new FilterInstantOrSorceryCard(), game) >= value) { + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/DocentOfPerfection.java b/Mage.Sets/src/mage/sets/eldritchmoon/DocentOfPerfection.java index 16c1105c243..5d1b54ccc21 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/DocentOfPerfection.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/DocentOfPerfection.java @@ -104,7 +104,7 @@ class DocentOfPerfectionEffect extends OneShotEffect { private static final FilterPermanent filter = new FilterPermanent("Wizards"); static { - filter.add(new SubtypePredicate("Wizards")); + filter.add(new SubtypePredicate("Wizard")); filter.add(new ControllerPredicate(TargetController.YOU)); } diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/DronepackKindred.java b/Mage.Sets/src/mage/sets/eldritchmoon/DronepackKindred.java new file mode 100644 index 00000000000..96e7ae3e342 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/DronepackKindred.java @@ -0,0 +1,74 @@ +/* + * 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.GenericManaCost; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class DronepackKindred extends CardImpl { + + public DronepackKindred(UUID ownerId) { + super(ownerId, 148, "Dronepack Kindred", Rarity.COMMON, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.subtype.add("Eldrazi"); + this.subtype.add("Werewolf"); + this.power = new MageInt(5); + this.toughness = new MageInt(7); + + // this card is the second face of double-faced card + this.nightCard = true; + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // {1}: Dronepack Kindred gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new GenericManaCost(1))); + } + + public DronepackKindred(final DronepackKindred card) { + super(card); + } + + @Override + public DronepackKindred copy() { + return new DronepackKindred(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/EruptingDreadwolf.java b/Mage.Sets/src/mage/sets/eldritchmoon/EruptingDreadwolf.java new file mode 100644 index 00000000000..0e9343031a1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/EruptingDreadwolf.java @@ -0,0 +1,74 @@ +/* + * 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.AttacksTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class EruptingDreadwolf extends CardImpl { + + public EruptingDreadwolf(UUID ownerId) { + super(ownerId, 142, "Erupting Dreadwolf", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.subtype.add("Eldrazi"); + this.subtype.add("Werewolf"); + this.power = new MageInt(6); + this.toughness = new MageInt(4); + + // this card is the second face of double-faced card + this.nightCard = true; + + // Whenever Erupting Dreadwolf attacks, it deals 2 damage to target creature or player. + Effect effect = new DamageTargetEffect(2); + effect.setText("it deals 2 damage to target creature or player"); + Ability ability = new AttacksTriggeredAbility(effect, false); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public EruptingDreadwolf(final EruptingDreadwolf card) { + super(card); + } + + @Override + public EruptingDreadwolf copy() { + return new EruptingDreadwolf(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/GisaAndGeralf.java b/Mage.Sets/src/mage/sets/eldritchmoon/GisaAndGeralf.java new file mode 100644 index 00000000000..840dea61695 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/GisaAndGeralf.java @@ -0,0 +1,198 @@ +/* + * 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.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.PutTopCardOfLibraryIntoGraveControllerEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SubLayer; +import mage.constants.WatcherScope; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.stack.Spell; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.Watcher; + +/** + * + * @author fireshoes + */ +public class GisaAndGeralf extends CardImpl { + + public GisaAndGeralf(UUID ownerId) { + super(ownerId, 183, "Gisa and Geralf", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{U}{B}"); + this.expansionSetCode = "EMN"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // When Gisa and Geralf enters the battlefield, put the top four cards of your library into your graveyard. + this.addAbility(new EntersBattlefieldTriggeredAbility(new PutTopCardOfLibraryIntoGraveControllerEffect(4))); + + // During each of your turns, you may cast a Zombie creature card from your graveyard. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GisaAndGeralfContinuousEffect()), new GisaAndGeralfWatcher()); + } + + public GisaAndGeralf(final GisaAndGeralf card) { + super(card); + } + + @Override + public GisaAndGeralf copy() { + return new GisaAndGeralf(this); + } +} + +class GisaAndGeralfContinuousEffect extends ContinuousEffectImpl { + + private static final FilterCreatureCard filter = new FilterCreatureCard("Zombie creature card"); + + static { + filter.add(new SubtypePredicate("Zombie")); + } + + GisaAndGeralfContinuousEffect() { + super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); + staticText = "During each of your turns, you may cast a Zombie creature card from your graveyard"; + } + + GisaAndGeralfContinuousEffect(final GisaAndGeralfContinuousEffect effect) { + super(effect); + } + + @Override + public GisaAndGeralfContinuousEffect copy() { + return new GisaAndGeralfContinuousEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + for (Card card : player.getGraveyard().getCards(filter, game)) { + ContinuousEffect effect = new GisaAndGeralfCastFromGraveyardEffect(); + effect.setTargetPointer(new FixedTarget(card.getId())); + game.addEffect(effect, source); + } + return true; + } + return false; + } +} + +class GisaAndGeralfCastFromGraveyardEffect extends AsThoughEffectImpl { + + GisaAndGeralfCastFromGraveyardEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + staticText = "You may cast a Zombie creature card from your graveyard"; + } + + GisaAndGeralfCastFromGraveyardEffect(final GisaAndGeralfCastFromGraveyardEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public GisaAndGeralfCastFromGraveyardEffect copy() { + return new GisaAndGeralfCastFromGraveyardEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (objectId.equals(getTargetPointer().getFirst(game, source))) { + if (affectedControllerId.equals(source.getControllerId())) { + GisaAndGeralfWatcher watcher = (GisaAndGeralfWatcher) game.getState().getWatchers().get("GisaAndGeralfWatcher", source.getSourceId()); + return !watcher.isAbilityUsed(); + } + } + return false; + } +} + +class GisaAndGeralfWatcher extends Watcher { + + boolean abilityUsed = false; + + GisaAndGeralfWatcher() { + super("GisaAndGeralfWatcher", WatcherScope.CARD); + } + + GisaAndGeralfWatcher(final GisaAndGeralfWatcher watcher) { + super(watcher); + this.abilityUsed = watcher.abilityUsed; + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.SPELL_CAST && event.getZone() == Zone.GRAVEYARD) { + Spell spell = (Spell) game.getObject(event.getTargetId()); + if (spell.getCardType().contains(CardType.CREATURE) && spell.getSubtype().contains("Zombie")) { + abilityUsed = true; + } + } + } + + @Override + public GisaAndGeralfWatcher copy() { + return new GisaAndGeralfWatcher(this); + } + + @Override + public void reset() { + super.reset(); + abilityUsed = false; + } + + public boolean isAbilityUsed() { + return abilityUsed; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/HauntedDead.java b/Mage.Sets/src/mage/sets/eldritchmoon/HauntedDead.java new file mode 100644 index 00000000000..c2abf61acb1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/HauntedDead.java @@ -0,0 +1,77 @@ +/* + * 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.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.permanent.token.SpiritWhiteToken; +import mage.target.common.TargetCardInHand; + +/** + * + * @author fireshoes + */ +public class HauntedDead extends CardImpl { + + public HauntedDead(UUID ownerId) { + super(ownerId, 92, "Haunted Dead", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Zombie"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Haunted Dead enters the battlefield, put a 1/1 white Spirit creature token with flying onto the battlefield. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken()))); + + // {1}{B}, Discard two cards: Return Haunted Dead from your graveyard to the battlefield tapped. + Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true), new ManaCostsImpl("{1}{B}")); + ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, new FilterCard("two cards")))); + this.addAbility(ability); + } + + public HauntedDead(final HauntedDead card) { + super(card); + } + + @Override + public HauntedDead copy() { + return new HauntedDead(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/IngeniousSkaab.java b/Mage.Sets/src/mage/sets/eldritchmoon/IngeniousSkaab.java new file mode 100644 index 00000000000..a8b77040fe8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/IngeniousSkaab.java @@ -0,0 +1,71 @@ +/* + * 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.continuous.BoostSourceEffect; +import mage.abilities.keyword.ProwessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class IngeniousSkaab extends CardImpl { + + public IngeniousSkaab(UUID ownerId) { + super(ownerId, 66, "Ingenious Skaab", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Zombie"); + this.subtype.add("Horror"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Prowess + this.addAbility(new ProwessAbility()); + + // {U}: Ingenius Skaab gets +1/-1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, -1, Duration.EndOfTurn), new ManaCostsImpl("{U}"))); + } + + public IngeniousSkaab(final IngeniousSkaab card) { + super(card); + } + + @Override + public IngeniousSkaab copy() { + return new IngeniousSkaab(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/KessigProwler.java b/Mage.Sets/src/mage/sets/eldritchmoon/KessigProwler.java new file mode 100644 index 00000000000..360a2c17f31 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/KessigProwler.java @@ -0,0 +1,71 @@ +/* + * 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.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class KessigProwler extends CardImpl { + + public KessigProwler(UUID ownerId) { + super(ownerId, 163, "Kessig Prowler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Werewolf"); + this.subtype.add("Horror"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + this.canTransform = true; + this.secondSideCard = new SinousPredator(ownerId); + + // {4}{G}: Transform Kessig Prowler. + this.addAbility(new TransformAbility()); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl("{4}{G}"))); + } + + public KessigProwler(final KessigProwler card) { + super(card); + } + + @Override + public KessigProwler copy() { + return new KessigProwler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/LoneRider.java b/Mage.Sets/src/mage/sets/eldritchmoon/LoneRider.java index 63a123a751f..1270259e411 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/LoneRider.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/LoneRider.java @@ -30,11 +30,9 @@ package mage.sets.eldritchmoon; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.TriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.IntCompareCondition; -import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.LifelinkAbility; @@ -43,6 +41,7 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.TargetController; +import mage.constants.Zone; import mage.game.Game; import mage.watchers.common.PlayerGainedLifeWatcher; @@ -71,9 +70,8 @@ public class LoneRider extends CardImpl { // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. this.addAbility(new TransformAbility()); - TriggeredAbility ability = new BeginningOfEndStepTriggeredAbility(new TransformSourceEffect(true), TargetController.ANY, false); - this.addAbility(new ConditionalTriggeredAbility(ability, new YouGainedLifeCondition(Condition.ComparisonType.GreaterThan, 2), - "At the beginning of the end step, if you gained 3 or more life this turn, transform {this}")); + this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect(true), TargetController.ANY, + new YouGainedLifeCondition(Condition.ComparisonType.GreaterThan, 2), false), new PlayerGainedLifeWatcher()); } public LoneRider(final LoneRider card) { diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/SinousPredator.java b/Mage.Sets/src/mage/sets/eldritchmoon/SinousPredator.java new file mode 100644 index 00000000000..473a9390c1e --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/SinousPredator.java @@ -0,0 +1,68 @@ +/* + * 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.SimpleStaticAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByMoreThanOneSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class SinousPredator extends CardImpl { + + public SinousPredator(UUID ownerId) { + super(ownerId, 163, "Sinous Predator", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.subtype.add("Eldrazi"); + this.subtype.add("Werewolf"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // this card is the second face of double-faced card + this.nightCard = true; + + // Sinous Predator can't be blocked by more than one creature. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByMoreThanOneSourceEffect())); + } + + public SinousPredator(final SinousPredator card) { + super(card); + } + + @Override + public SinousPredator copy() { + return new SinousPredator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/SmolderingWerewolf.java b/Mage.Sets/src/mage/sets/eldritchmoon/SmolderingWerewolf.java new file mode 100644 index 00000000000..6dbdaff3b6d --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/SmolderingWerewolf.java @@ -0,0 +1,83 @@ +/* + * 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.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SmolderingWerewolf extends CardImpl { + + public SmolderingWerewolf(UUID ownerId) { + super(ownerId, 142, "Smoldering Werewolf", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Werewolf"); + this.subtype.add("Horror"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + this.canTransform = true; + this.secondSideCard = new EruptingDreadwolf(ownerId); + + // When Smoldering Werewolf enters the battlefield, it deals 1 damage to each of up to two target creatures. + Effect effect = new DamageTargetEffect(1); + effect.setText("it deals 1 damage to each of up to two target creatures"); + Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); + ability.addTarget(new TargetCreaturePermanent(0, 2)); + this.addAbility(ability); + + // {4}{R}{R}: Transform Smoldering Werewolf. + this.addAbility(new TransformAbility()); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl("{4}{R}{R}"))); + } + + public SmolderingWerewolf(final SmolderingWerewolf card) { + super(card); + } + + @Override + public SmolderingWerewolf copy() { + return new SmolderingWerewolf(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/VildinPackOutcast.java b/Mage.Sets/src/mage/sets/eldritchmoon/VildinPackOutcast.java new file mode 100644 index 00000000000..91506e037df --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/VildinPackOutcast.java @@ -0,0 +1,80 @@ +/* + * 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.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class VildinPackOutcast extends CardImpl { + + public VildinPackOutcast(UUID ownerId) { + super(ownerId, 148, "Vildin-Pack Outcast", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{R}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Werewolf"); + this.subtype.add("Horror"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + this.canTransform = true; + this.secondSideCard = new DronepackKindred(ownerId); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // {R}: Vildin-Pack Outcast gets +1/-1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, -1, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + + // {5}{R}{R}: Transform Vildin-Pack Outcast. + this.addAbility(new TransformAbility()); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl("{5}{R}{R}"))); + } + + public VildinPackOutcast(final VildinPackOutcast card) { + super(card); + } + + @Override + public VildinPackOutcast copy() { + return new VildinPackOutcast(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/VoldarenPariah.java b/Mage.Sets/src/mage/sets/eldritchmoon/VoldarenPariah.java new file mode 100644 index 00000000000..0fb98ec9655 --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/VoldarenPariah.java @@ -0,0 +1,90 @@ +/* + * 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.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.MadnessAbility; +import mage.abilities.keyword.TransformAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author fireshoes + */ +public class VoldarenPariah extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("three other creatures"); + + static { + filter.add(new AnotherPredicate()); + } + + public VoldarenPariah(UUID ownerId) { + super(ownerId, 111, "Voldaren Pariah", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "EMN"; + this.subtype.add("Vampire"); + this.subtype.add("Horror"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + this.canTransform = true; + this.secondSideCard = new AbolisherOfBloodlines(ownerId); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Sacrifice three other creatures: Transform Voldaren Pariah. + this.addAbility(new TransformAbility()); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new TransformSourceEffect(true), + new SacrificeTargetCost(new TargetControlledPermanent(3, 3, filter, false)))); + + // Madness {B}{B}{B} + this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{B}{B}{B}"))); + } + + public VoldarenPariah(final VoldarenPariah card) { + super(card); + } + + @Override + public VoldarenPariah copy() { + return new VoldarenPariah(this); + } +} diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/VoraciousReader.java b/Mage.Sets/src/mage/sets/eldritchmoon/VoraciousReader.java new file mode 100644 index 00000000000..30043032d1d --- /dev/null +++ b/Mage.Sets/src/mage/sets/eldritchmoon/VoraciousReader.java @@ -0,0 +1,83 @@ +/* + * 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.SimpleStaticAbility; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; +import mage.abilities.keyword.ProwessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author fireshoes + */ +public class VoraciousReader extends CardImpl { + + private static final FilterCard filter = new FilterCard("Instant and sorcery spells"); + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.INSTANT), + new CardTypePredicate(CardType.SORCERY) + )); + } + + public VoraciousReader(UUID ownerId) { + super(ownerId, 54, "Voracious Reader", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, ""); + this.expansionSetCode = "EMN"; + this.subtype.add("Eldrazi"); + this.subtype.add("Homunculus"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // this card is the second face of double-faced card + this.nightCard = true; + + // Prowess + this.addAbility(new ProwessAbility()); + + // Instant and sorcery spells you cast cost {1} less to cast. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + } + + public VoraciousReader(final VoraciousReader card) { + super(card); + } + + @Override + public VoraciousReader copy() { + return new VoraciousReader(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magic2014/AngelicAccord.java b/Mage.Sets/src/mage/sets/magic2014/AngelicAccord.java index dc121e71504..fceba94b121 100644 --- a/Mage.Sets/src/mage/sets/magic2014/AngelicAccord.java +++ b/Mage.Sets/src/mage/sets/magic2014/AngelicAccord.java @@ -54,7 +54,8 @@ public class AngelicAccord extends CardImpl { // At the beginning of each end step, if you gained 4 or more life this turn, put a 4/4 white Angel creature token with flying onto the battlefield. - this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), TargetController.ANY, new YouGainedLifeCondition(Condition.ComparisonType.GreaterThan, 3), false), new PlayerGainedLifeWatcher()); + this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), TargetController.ANY, + new YouGainedLifeCondition(Condition.ComparisonType.GreaterThan, 3), false), new PlayerGainedLifeWatcher()); } public AngelicAccord(final AngelicAccord card) { @@ -82,7 +83,7 @@ class YouGainedLifeCondition extends IntCompareCondition { } return gainedLife; } - + @Override public String toString() { return "if you gained 4 or more life this turn "; diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index e12fdc8ef97..cf681d73a3c 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -57295,6 +57295,7 @@ Shivan Dragon|Welcome Deck 2016|13|R|{4}{R}{R}|Creature - Dragon|5|5|Flying${R}: Soul of the Harvest|Welcome Deck 2016|16|R|{4}{G}{G}|Creature - Elemental|6|6|Trample$Whenever another nontoken creature enters the battlefield under your control, you may draw a card.| Sphinx of Magosi|Welcome Deck 2016|6|R|{3}{U}{U}{U}|Creature - Sphinx|6|6|Flying${2}{U}: Draw a card, then put a +1/+1 counter on Sphinx of Magosi.| Walking Corpse|Welcome Deck 2016|10|C|{1}{B}|Creature - Zombie|2|2|| +Decimator of the Provinces|Eldritch Moon|2|M|{10}|Creature - Eldrazi Boar|7|7|Emerge {6}{G}{G}{G} ((You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost)$When you cast Decimator of the Provinces, creatures you control get +2/+2 and gain trample until end of turn.$Haste, trample| Elder Deep-Fiend|Eldritch Moon|5|R|{8}|Creature - Eldrazi Octopus|5|6|Flash$Emerge {5}{U}{U} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost)$When you cast Elder Deep-Fiend, tap up to four target permanents.| Emrakul, the Promised End|Eldritch Moon|6|M|{13}|Legendary Creature - Eldrazi|13|13|Emrakul, the Promised End costs {1} less to cast for each card type among cards in your graveyard.$When you cast Emrakul, you gain control of target opponent during that player's next turn. After that turn, that player takes an extra turn.$Flying, trample, protection from instants| Wretched Gryff|Eldritch Moon|12|C|{7}|Creature - Eldrazi Hippogriff|3|4|Emerge {5}{U} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost.)$When you cast Wretched Gryff, draw a card.$Flying| @@ -57318,26 +57319,30 @@ Final Iteration|Eldritch Moon|56|R||Creature - Eldrazi Insect|6|5|Flying$Wizards Grizzled Angler|Eldritch Moon|63|U|{2}{U}|Creature - Human|2|3|{T}: Put the top two cards of your library into your graveyard. Then if there is a colorless creature card in your graveyard, transform Grizzled Angler.| Grisly Anglerfish|Eldritch Moon|63|U||Creature - Eldrazi Fish|4|5|{6}: Creatures your opponents control attack this turn if able.| Identity Thief|Eldritch Moon|64|R|{2}{U}{U}|Creature - Shapeshifter|0|3|Whenever Identity Thief attacks, you may exile another target non-token creature. If you do, Identity Thief becomes a copy of that creature until end of turn. Return the exiled card to the battlefield under its owner's control at the beginning of the next end step.| -Ingenius Skaab|Eldritch Moon|66|C|{2}{U}|Creature - Zombie Horror|2|3|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)${U}: Ingenius Skaab gets +1/-1 until end of turn.| +Ingenious Skaab|Eldritch Moon|66|C|{2}{U}|Creature - Zombie Horror|2|3|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)${U}: Ingenious Skaab gets +1/-1 until end of turn.| Niblis of Frost|Eldritch Moon|72|R|{2}{U}{U}|Creature - Spirit|3|3|Flying$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever you cast an instant or sorcery spell, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step.| Take Inventory|Eldritch Moon|76|C|{1}{U}|Sorcery|||Draw a card, then draw cards equal to the number of cards named Take Inventory in your graveyard.| Unsubstantiate|Eldritch Moon|79|U|{1}{U}|Instant|||Return target spell or creature to its owner's hand.| +Wharf Infiltrator|Eldritch Moon|80|R|{1}{U}|Creature - Human Horror|1|1|Skulk (This creature can't be blocked by creatures with greater power.)$Whenever Wharf Infiltrator deals combat damage to a player, you may draw card. If you do, discard a card.$Whenever you discard a creature card, you may pay {2}. If you do, put a 3/2 colorless Eldrazi Horror creature token onto the battlefield.| Borrowed Malevolence|Eldritch Moon|82|C|{B}|Instant|||Escalate {2} (Pay this cost for each mode chosen beyond the first.)$Choose one or both &mdash Target creature gets +1/+1 until end of turn. Target creature gets -1/-1 until end of turn.| Cemetery Recruitment|Eldritch Moon|83|C|{1}{B}|Sorcery|||Return target creature card from your graveyard to your hand. If it's a Zombie card, draw a card.| Graf Rats|Eldritch Moon|91|C|{1}{B}|Creature - Rat|2|1|At the beginning of combat on your turn, if you both own and control Graf Rats and a creature named Midnight Scavengers, exile them, then meld them into Chittering Host.| Haunted Dead|Eldritch Moon|92|U|{3}{B}|Creature - Zombie|2|2|When Haunted Dead enters the battlefield, put a 1/1 white Spirit creature token with flying onto the battlefield.${1}{B}, Discard two cards: Return Haunted Dead from your graveyard to the battlefield tapped.| Midnight Scavengers|Eldritch Moon|96|C|{4}{B}|Creature - Human Rogue|3|3|When Midnight Scavengers enters the battlefield, you may return target creature card with converted mana cost 3 or less from your graveyard to your hand.$(Melds with Graf Rats.)| Noosegraf Mob|Eldritch Moon|98|R|{4}{B}{B}|Creature - Zombie|0|0|Noosegraf Mob enters the battlefield with five +1/+1 counters on it.$Whenever a player casts a spell, remove a +1/+1 counter from Noosegraf Mob. If you do, put a 2/2 black Zombie creature token onto the battlefield.| +Stromkirk Condemned|Eldritch Moon|105|R|{B}{B}|Creature - Vampire Horror|2|2|Discard a card: Vampires you control get +1/+1 until end of turn. Activate this ability only once each turn.| Voldaren Pariah|Eldritch Moon|111|R|{3}{B}{B}|Creature - Vampire Horror|3|3|Flying$Sacrifice three other creatures: Transform Voldaren Pariah.$Madness {B}{B}{B} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.)| Abolisher of Bloodlines|Eldritch Moon|111|R||Creature - Eldrazi Vampire|6|5|Flying$When this creature transforms into Abolisher of Bloodlines, target opponent sacrifices three creatures.| Assembled Alphas|Eldritch Moon|117|R|{5}{R}|Creature - Wolf|5|5|Whenever Assembled Alphas blocks or becomes blocked by a creature, Assembled Alphas deals 3 damage to that creature and 3 damage to that creature's controller.| Galvanic Bombardment|Eldritch Moon|129|C|{R}|Instant|||Galvanic Bombardment deals X damage to target creature, where X is 2 plus the number of cards named Galvanic Bombardment in your graveyard.| Hanweir Garrison|Eldritch Moon|130|R|{2}{R}|Creature - Human Soldier|2|3|Whenever Hanweir Garrison attacks, put two 1/1 red Human creature tokens onto the battlefield tapped and attacking.$(Melds with Hanweir Battlements.)| Hanweir, the Writhing Township|Eldritch Moon|130|R||Legendary Creature - Eldrazi Ooze|7|4|Trample, haste$Whenever Hanweir, the Writhing Township attacks, put two 3/2 colorless Eldrazi Horror creature tokens onto the battlefield tapped and attacking.| +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.| 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 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.| Kessig Prowler|Eldritch Moon|163|U|{G}|Creature - Werewolf Horror|2|1|{4}{G}: Transform Kessig Prowler.| @@ -57351,4 +57356,5 @@ Cryptolith Fragment|Eldritch Moon|193|U|{3}|Artifact|||Cryptolith Fragment enter Aurora of Emrakul|Eldritch Moon|193|U||Creature - Eldrazi Reflection|1|4|Flying, deathtouch$Whenever Aurora of Emrakul attacks, each opponent loses 3 life.| Soul Separator|Eldritch Moon|199|R|{3}|Artifact|||{5}, {T}, Sacrifice Soul Separator: Exile target creature card from your graveyard. Put a token onto the battlefield that's a copy of that card except it's 1/1, it's a Spirit in addition to its other types, and it has flying. Put a black Zombie creature token onto the battlefield with power equal to that card's power and toughness equal that card's toughness.| Stitcher's Graft|Eldritch Moon|200|R|{1}|Artifact - Equipment|||Equipped creature gets +3/+3.$Whenever equipped creature attacks, it doesn't untap during its controller's next untap step.$Whenever Stitcher's Graft becomes unequipped from a creature, sacrifice that creature.$Equip {2}| +Geier Reach Sanitarium|Eldritch Moon|203||Legendary Land|||{T}: Add {C} to your mana pool.${2}, {T}: Each player draws a card, then discards a card.| Hanweir Battlements|Eldritch Moon|204|R||Land|||{T}: Add {C} to your mana pool.${R},{T}: Target creature gains haste until end of turn.${3}{R}{R},{T}: If you both own and control Hanweir Battlements and a creature named Hanweir Garrison, exile them, then meld them into Hanweir, the Writhing Township.| \ No newline at end of file