From f101db7c849b7631d0a070e1f1fd1627eba51b16 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 11:54:31 +0200 Subject: [PATCH] [BFZ] Added missing blue cards (19 cards). Some minor fixes. BFZ COMPLETE! --- .../battleforzendikar/BloodbondVampire.java | 66 +++++++++++ .../sets/battleforzendikar/CarrierThrall.java | 68 +++++++++++ .../sets/battleforzendikar/DemonsGrasp.java | 61 ++++++++++ .../battleforzendikar/GeyserfieldStalker.java | 67 +++++++++++ .../sets/battleforzendikar/GraveBirthing.java | 112 ++++++++++++++++++ .../battleforzendikar/GripOfDesolation.java | 76 ++++++++++++ .../battleforzendikar/HagraSharpshooter.java | 72 +++++++++++ .../battleforzendikar/KalastriaHealer.java | 72 +++++++++++ .../KalastriaNightwatch.java | 67 +++++++++++ .../battleforzendikar/MalakirFamiliar.java | 71 +++++++++++ .../sets/battleforzendikar/MiresMalice.java | 63 ++++++++++ .../battleforzendikar/NirkanaAssassin.java | 67 +++++++++++ .../battleforzendikar/ObNixilisReignited.java | 24 ++-- .../sets/battleforzendikar/PainfulTruths.java | 4 +- .../battleforzendikar/RetreatToHagra.java | 5 +- .../sets/battleforzendikar/RisingMiasma.java | 63 ++++++++++ .../sets/battleforzendikar/SilentSkimmer.java | 76 ++++++++++++ .../sets/battleforzendikar/SludgeCrawler.java | 76 ++++++++++++ .../sets/battleforzendikar/SwarmSurge.java | 82 +++++++++++++ .../sets/battleforzendikar/VampiricRites.java | 72 +++++++++++ .../sets/battleforzendikar/VoraciousNull.java | 79 ++++++++++++ .../battleforzendikar/ZulaportCutthroat.java | 82 +++++++++++++ .../sets/shardsofalara/BoneSplinters.java | 8 +- .../costs/common/SacrificeTargetCost.java | 25 ++-- 24 files changed, 1428 insertions(+), 30 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BloodbondVampire.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CarrierThrall.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/DemonsGrasp.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/GeyserfieldStalker.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/GraveBirthing.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/GripOfDesolation.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/HagraSharpshooter.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KalastriaHealer.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KalastriaNightwatch.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/MalakirFamiliar.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/MiresMalice.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/NirkanaAssassin.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RisingMiasma.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SilentSkimmer.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SludgeCrawler.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SwarmSurge.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/VampiricRites.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/VoraciousNull.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ZulaportCutthroat.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BloodbondVampire.java b/Mage.Sets/src/mage/sets/battleforzendikar/BloodbondVampire.java new file mode 100644 index 0000000000..c2e4713537 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BloodbondVampire.java @@ -0,0 +1,66 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.GainLifeControllerTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author LevelX2 + */ +public class BloodbondVampire extends CardImpl { + + public BloodbondVampire(UUID ownerId) { + super(ownerId, 104, "Bloodbond Vampire", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Vampire"); + this.subtype.add("Shaman"); + this.subtype.add("Ally"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Whenever you gain life, put a +1/+1 counter on Bloodbond Vampire. + this.addAbility(new GainLifeControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false)); + } + + public BloodbondVampire(final BloodbondVampire card) { + super(card); + } + + @Override + public BloodbondVampire copy() { + return new BloodbondVampire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CarrierThrall.java b/Mage.Sets/src/mage/sets/battleforzendikar/CarrierThrall.java new file mode 100644 index 0000000000..a3097ea811 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CarrierThrall.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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; + +/** + * + * @author LevelX2 + */ +public class CarrierThrall extends CardImpl { + + public CarrierThrall(UUID ownerId) { + super(ownerId, 106, "Carrier Thrall", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Vampire"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // When Carrier Thrall dies, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature. Add {1} to your mana pool." + Effect effect = new CreateTokenEffect(new EldraziScionToken()); + effect.setText("put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has \"Sacrifice this creature: Add {1} to your mana pool.\""); + this.addAbility(new DiesTriggeredAbility(effect, false)); + + } + + public CarrierThrall(final CarrierThrall card) { + super(card); + } + + @Override + public CarrierThrall copy() { + return new CarrierThrall(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/DemonsGrasp.java b/Mage.Sets/src/mage/sets/battleforzendikar/DemonsGrasp.java new file mode 100644 index 0000000000..33b905ad21 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/DemonsGrasp.java @@ -0,0 +1,61 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class DemonsGrasp extends CardImpl { + + public DemonsGrasp(UUID ownerId) { + super(ownerId, 108, "Demon's Grasp", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{4}{B}"); + this.expansionSetCode = "BFZ"; + + // Target creature gets -5/-5 until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new BoostTargetEffect(-5, -5, Duration.EndOfTurn)); + } + + public DemonsGrasp(final DemonsGrasp card) { + super(card); + } + + @Override + public DemonsGrasp copy() { + return new DemonsGrasp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/GeyserfieldStalker.java b/Mage.Sets/src/mage/sets/battleforzendikar/GeyserfieldStalker.java new file mode 100644 index 0000000000..4dac386838 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/GeyserfieldStalker.java @@ -0,0 +1,67 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.LandfallAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class GeyserfieldStalker extends CardImpl { + + public GeyserfieldStalker(UUID ownerId) { + super(ownerId, 111, "Geyserfield Stalker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Elemental"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Menace + this.addAbility(new MenaceAbility()); + // Landfall - Whenever a land enters the battlefield under your control, Geyserfield Stalker gets +2/+2 until end of turn. + this.addAbility(new LandfallAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), false)); + } + + public GeyserfieldStalker(final GeyserfieldStalker card) { + super(card); + } + + @Override + public GeyserfieldStalker copy() { + return new GeyserfieldStalker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/GraveBirthing.java b/Mage.Sets/src/mage/sets/battleforzendikar/GraveBirthing.java new file mode 100644 index 0000000000..a33a559e1b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/GraveBirthing.java @@ -0,0 +1,112 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.token.EldraziScionToken; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public class GraveBirthing extends CardImpl { + + public GraveBirthing(UUID ownerId) { + super(ownerId, 93, "Grave Birthing", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{B}"); + this.expansionSetCode = "BFZ"; + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // Target opponent exiles a card from his or her graveyard. You put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool." + this.getSpellAbility().addEffect(new GraveBirthingEffect()); + this.getSpellAbility().addTarget(new TargetOpponent()); + Effect effect = new CreateTokenEffect(new EldraziScionToken()); + effect.setText("You put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has \"Sacrifice this creature: Add {1} to your mana pool.\"
"); + this.getSpellAbility().addEffect(effect); // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public GraveBirthing(final GraveBirthing card) { + super(card); + } + + @Override + public GraveBirthing copy() { + return new GraveBirthing(this); + } +} + +class GraveBirthingEffect extends OneShotEffect { + + public GraveBirthingEffect() { + super(Outcome.Benefit); + this.staticText = "Target opponent exiles a card from his or her graveyard"; + } + + public GraveBirthingEffect(final GraveBirthingEffect effect) { + super(effect); + } + + @Override + public GraveBirthingEffect copy() { + return new GraveBirthingEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player opponent = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (opponent != null) { + Target target = new TargetCardInYourGraveyard(); + target.setNotTarget(true); + opponent.chooseTarget(outcome, target, source, game); + Card card = game.getCard(target.getFirstTarget()); + opponent.moveCards(card, null, Zone.EXILED, source, game); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/GripOfDesolation.java b/Mage.Sets/src/mage/sets/battleforzendikar/GripOfDesolation.java new file mode 100644 index 0000000000..25c3015a0a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/GripOfDesolation.java @@ -0,0 +1,76 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetLandPermanent; +import mage.target.targetpointer.SecondTargetPointer; + +/** + * + * @author LevelX2 + */ +public class GripOfDesolation extends CardImpl { + + public GripOfDesolation(UUID ownerId) { + super(ownerId, 94, "Grip of Desolation", Rarity.UNCOMMON, new CardType[]{}, "{4}{B}{B}"); + this.expansionSetCode = "BFZ"; + this.supertype.add("Intant"); + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // Exile target creature and target land. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + Effect effect = new ExileTargetEffect(); + effect.setTargetPointer(new SecondTargetPointer()); + effect.setText("and target land"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetLandPermanent()); + + } + + public GripOfDesolation(final GripOfDesolation card) { + super(card); + } + + @Override + public GripOfDesolation copy() { + return new GripOfDesolation(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/HagraSharpshooter.java b/Mage.Sets/src/mage/sets/battleforzendikar/HagraSharpshooter.java new file mode 100644 index 0000000000..848b4e1aab --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/HagraSharpshooter.java @@ -0,0 +1,72 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class HagraSharpshooter extends CardImpl { + + public HagraSharpshooter(UUID ownerId) { + super(ownerId, 113, "Hagra Sharpshooter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Assassin"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {4}{B}: Target creature gets -1/-1 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-1, -1, Duration.EndOfTurn), new ManaCostsImpl("{4}{B}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public HagraSharpshooter(final HagraSharpshooter card) { + super(card); + } + + @Override + public HagraSharpshooter copy() { + return new HagraSharpshooter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KalastriaHealer.java b/Mage.Sets/src/mage/sets/battleforzendikar/KalastriaHealer.java new file mode 100644 index 0000000000..961116a020 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KalastriaHealer.java @@ -0,0 +1,72 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class KalastriaHealer extends CardImpl { + + public KalastriaHealer(UUID ownerId) { + super(ownerId, 114, "Kalastria Healer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Vampire"); + this.subtype.add("Cleric"); + this.subtype.add("Ally"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Rally - Whenever Kalastria Healer or another Ally enters the battlefield under your control, each opponent loses 1 life and you gain 1 life. + Ability ability = new AllyEntersBattlefieldTriggeredAbility(new LoseLifeOpponentsEffect(1), false); + Effect effect = new GainLifeEffect(1); + effect.setText("and you gain 1 life"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public KalastriaHealer(final KalastriaHealer card) { + super(card); + } + + @Override + public KalastriaHealer copy() { + return new KalastriaHealer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KalastriaNightwatch.java b/Mage.Sets/src/mage/sets/battleforzendikar/KalastriaNightwatch.java new file mode 100644 index 0000000000..46641e624a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KalastriaNightwatch.java @@ -0,0 +1,67 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.GainLifeControllerTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class KalastriaNightwatch extends CardImpl { + + public KalastriaNightwatch(UUID ownerId) { + super(ownerId, 115, "Kalastria Nightwatch", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Vampire"); + this.subtype.add("Warrior"); + this.subtype.add("Ally"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Whenever you gain life, Kalastria Nightwatch gains flying until end of turn. + this.addAbility(new GainLifeControllerTriggeredAbility(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), false)); + } + + public KalastriaNightwatch(final KalastriaNightwatch card) { + super(card); + } + + @Override + public KalastriaNightwatch copy() { + return new KalastriaNightwatch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MalakirFamiliar.java b/Mage.Sets/src/mage/sets/battleforzendikar/MalakirFamiliar.java new file mode 100644 index 0000000000..2fc7b1abe4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MalakirFamiliar.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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.GainLifeControllerTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class MalakirFamiliar extends CardImpl { + + public MalakirFamiliar(UUID ownerId) { + super(ownerId, 116, "Malakir Familiar", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Bat"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Deahtouch + this.addAbility(DeathtouchAbility.getInstance()); + // Whenever you gain life, Malakir Familiar gets +1/+1 until end of turn. + this.addAbility(new GainLifeControllerTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), false)); + + } + + public MalakirFamiliar(final MalakirFamiliar card) { + super(card); + } + + @Override + public MalakirFamiliar copy() { + return new MalakirFamiliar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MiresMalice.java b/Mage.Sets/src/mage/sets/battleforzendikar/MiresMalice.java new file mode 100644 index 0000000000..be28d71315 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MiresMalice.java @@ -0,0 +1,63 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public class MiresMalice extends CardImpl { + + public MiresMalice(UUID ownerId) { + super(ownerId, 117, "Mire's Malice", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{B}"); + this.expansionSetCode = "BFZ"; + + // Target opponent discards two cards. + this.getSpellAbility().addEffect(new DiscardTargetEffect(2)); + this.getSpellAbility().addTarget(new TargetOpponent()); + // Awaken 3 - {5}{B} + this.addAbility(new AwakenAbility(this, 3, "{5}{B}")); + } + + public MiresMalice(final MiresMalice card) { + super(card); + } + + @Override + public MiresMalice copy() { + return new MiresMalice(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/NirkanaAssassin.java b/Mage.Sets/src/mage/sets/battleforzendikar/NirkanaAssassin.java new file mode 100644 index 0000000000..53442a1ddf --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/NirkanaAssassin.java @@ -0,0 +1,67 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.GainLifeControllerTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class NirkanaAssassin extends CardImpl { + + public NirkanaAssassin(UUID ownerId) { + super(ownerId, 118, "Nirkana Assassin", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Vampire"); + this.subtype.add("Assassin"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Whenever you gain life, Nirkana Assassin gains deathtouch until end of turn. + this.addAbility(new GainLifeControllerTriggeredAbility(new GainAbilitySourceEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn), false)); + } + + public NirkanaAssassin(final NirkanaAssassin card) { + super(card); + } + + @Override + public NirkanaAssassin copy() { + return new NirkanaAssassin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ObNixilisReignited.java b/Mage.Sets/src/mage/sets/battleforzendikar/ObNixilisReignited.java index 82ea5a1df2..036ce0ccb5 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ObNixilisReignited.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ObNixilisReignited.java @@ -60,20 +60,24 @@ public class ObNixilisReignited extends CardImpl { this.expansionSetCode = "BFZ"; this.subtype.add("Nixilis"); - this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(5)), false)); - + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(5)), false)); + // +1: You draw a card and you lose 1 life. - LoyaltyAbility ability1 = new LoyaltyAbility(new DrawCardSourceControllerEffect(1), 1); - ability1.addEffect(new LoseLifeSourceControllerEffect(1)); + Effect effect = new DrawCardSourceControllerEffect(1); + effect.setText("You draw a card"); + LoyaltyAbility ability1 = new LoyaltyAbility(effect, 1); + effect = new LoseLifeSourceControllerEffect(1); + effect.setText("and you lose 1 life"); + ability1.addEffect(effect); this.addAbility(ability1); - + // -3: Destroy target creature. LoyaltyAbility ability2 = new LoyaltyAbility(new DestroyTargetEffect(), -3); ability2.addTarget(new TargetCreaturePermanent()); this.addAbility(ability2); - + // -8: Target opponent gets an emblem with "Whenever a player draws a card, you lose 2 life." - Effect effect = new GetEmblemTargetPlayerEffect(new ObNixilisReignitedEmblem()); + effect = new GetEmblemTargetPlayerEffect(new ObNixilisReignitedEmblem()); effect.setText("Target opponent gets an emblem with \"Whenever a player draws a card, you lose 2 life.\""); LoyaltyAbility ability3 = new LoyaltyAbility(effect, -8); ability3.addTarget(new TargetOpponent()); @@ -94,12 +98,12 @@ class ObNixilisReignitedEmblem extends Emblem { public ObNixilisReignitedEmblem() { setName("EMBLEM: Ob Nixilis Reignited"); - + this.getAbilities().add(new ObNixilisEmblemTriggeredAbility(new LoseLifeSourceControllerEffect(2), false)); } } -class ObNixilisEmblemTriggeredAbility extends TriggeredAbilityImpl { +class ObNixilisEmblemTriggeredAbility extends TriggeredAbilityImpl { public ObNixilisEmblemTriggeredAbility(Effect effect, boolean optional) { super(Zone.COMMAND, effect, optional); @@ -128,4 +132,4 @@ class ObNixilisEmblemTriggeredAbility extends TriggeredAbilityImpl { public ObNixilisEmblemTriggeredAbility copy() { return new ObNixilisEmblemTriggeredAbility(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java b/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java index 92a547499c..c8e1fd0158 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java @@ -47,10 +47,10 @@ public class PainfulTruths extends CardImpl { super(ownerId, 120, "Painful Truths", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{B}"); this.expansionSetCode = "BFZ"; - // Converge - Draw X cards and lose X life, where X is the number of colors of mana spent to cast Painful Truths. + // Converge - You draw X cards and lose X life, where X is the number of colors of mana spent to cast Painful Truths. getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); Effect effect = new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance()); - effect.setText("Draw X cards"); + effect.setText("You draw X cards"); getSpellAbility().addEffect(effect); effect = new LoseLifeSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance()); effect.setText("and lose X life, where X is the number of colors of mana spent to cast {this}"); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RetreatToHagra.java b/Mage.Sets/src/mage/sets/battleforzendikar/RetreatToHagra.java index 03e0c89e39..49dd0bc33a 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/RetreatToHagra.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RetreatToHagra.java @@ -30,6 +30,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.abilities.Mode; import mage.abilities.common.LandfallAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeOpponentsEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; @@ -59,7 +60,9 @@ public class RetreatToHagra extends CardImpl { // or Each opponent loses 1 life and you gain 1 life. Mode mode = new Mode(); mode.getEffects().add(new LoseLifeOpponentsEffect(1)); - mode.getEffects().add(new GainLifeEffect(1)); + Effect effect = new GainLifeEffect(1); + effect.setText("and you gain 1 life"); + mode.getEffects().add(effect); ability.addMode(mode); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RisingMiasma.java b/Mage.Sets/src/mage/sets/battleforzendikar/RisingMiasma.java new file mode 100644 index 0000000000..0fd0a1fe95 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RisingMiasma.java @@ -0,0 +1,63 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class RisingMiasma extends CardImpl { + + public RisingMiasma(UUID ownerId) { + super(ownerId, 122, "Rising Miasma", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{B}"); + this.expansionSetCode = "BFZ"; + + // All creatures get -2/-2 until end of turn. + this.getSpellAbility().addEffect(new BoostAllEffect(-2, -2, Duration.EndOfTurn)); + + // Awaken 3 - {5}{B}{B} + this.addAbility(new AwakenAbility(this, 3, "{5}{B}{B}")); + } + + public RisingMiasma(final RisingMiasma card) { + super(card); + } + + @Override + public RisingMiasma copy() { + return new RisingMiasma(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SilentSkimmer.java b/Mage.Sets/src/mage/sets/battleforzendikar/SilentSkimmer.java new file mode 100644 index 0000000000..bd3526bc99 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SilentSkimmer.java @@ -0,0 +1,76 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; + +/** + * + * @author LevelX2 + */ +public class SilentSkimmer extends CardImpl { + + public SilentSkimmer(UUID ownerId) { + super(ownerId, 96, "Silent Skimmer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(0); + this.toughness = new MageInt(4); + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Whenever Silent Skimmer attacks, defending player loses 2 life. + this.addAbility(new AttacksTriggeredAbility(new LoseLifeTargetEffect(2), false, + "Whenever {this} attacks, defending player loses 2 life", SetTargetPointer.PLAYER)); + + } + + public SilentSkimmer(final SilentSkimmer card) { + super(card); + } + + @Override + public SilentSkimmer copy() { + return new SilentSkimmer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SludgeCrawler.java b/Mage.Sets/src/mage/sets/battleforzendikar/SludgeCrawler.java new file mode 100644 index 0000000000..e758d0d226 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SludgeCrawler.java @@ -0,0 +1,76 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.IngestAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class SludgeCrawler extends CardImpl { + + public SludgeCrawler(UUID ownerId) { + super(ownerId, 98, "Sludge Crawler", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // Ingest + this.addAbility(new IngestAbility()); + // {2}: Sludge Crawler gets +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new GenericManaCost(2))); + } + + public SludgeCrawler(final SludgeCrawler card) { + super(card); + } + + @Override + public SludgeCrawler copy() { + return new SludgeCrawler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SwarmSurge.java b/Mage.Sets/src/mage/sets/battleforzendikar/SwarmSurge.java new file mode 100644 index 0000000000..4c86dffec6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SwarmSurge.java @@ -0,0 +1,82 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorlessPredicate; + +/** + * + * @author LevelX2 + */ +public class SwarmSurge extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Colorless creatures you control"); + + static { + filter.add(new ColorlessPredicate()); + } + + public SwarmSurge(UUID ownerId) { + super(ownerId, 100, "Swarm Surge", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{B}"); + this.expansionSetCode = "BFZ"; + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + + // Creatures you control get +2/+0 until end of turn. + this.getSpellAbility().addEffect(new BoostControlledEffect(2, 0, Duration.EndOfTurn)); + + // Colorless creatures you control also gain first strike until end of turn. + Effect effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter); + effect.setText("Colorless creatures you control also gain first strike until end of turn"); + this.getSpellAbility().addEffect(effect); + } + + public SwarmSurge(final SwarmSurge card) { + super(card); + } + + @Override + public SwarmSurge copy() { + return new SwarmSurge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VampiricRites.java b/Mage.Sets/src/mage/sets/battleforzendikar/VampiricRites.java new file mode 100644 index 0000000000..349e6d2177 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VampiricRites.java @@ -0,0 +1,72 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class VampiricRites extends CardImpl { + + public VampiricRites(UUID ownerId) { + super(ownerId, 124, "Vampiric Rites", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{B}"); + this.expansionSetCode = "BFZ"; + + // {1}{B}, Sacrifice a creature: You gain 1 life and draw a card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), new ManaCostsImpl<>("{1}{B}")); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); + Effect effect = new DrawCardSourceControllerEffect(1); + effect.setText("and draw a card"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public VampiricRites(final VampiricRites card) { + super(card); + } + + @Override + public VampiricRites copy() { + return new VampiricRites(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VoraciousNull.java b/Mage.Sets/src/mage/sets/battleforzendikar/VoraciousNull.java new file mode 100644 index 0000000000..e8ddb52479 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VoraciousNull.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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class VoraciousNull extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature"); + + static { + filter.add(new AnotherPredicate()); + } + + public VoraciousNull(UUID ownerId) { + super(ownerId, 125, "Voracious Null", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Zombie"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {1}{B}, Sacrifice another creature: Put two +1/+1 counters on Voracious Null. Activate this ability only any time you could cast a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), new ManaCostsImpl("{1}{B}")); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false))); + this.addAbility(ability); + } + + public VoraciousNull(final VoraciousNull card) { + super(card); + } + + @Override + public VoraciousNull copy() { + return new VoraciousNull(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ZulaportCutthroat.java b/Mage.Sets/src/mage/sets/battleforzendikar/ZulaportCutthroat.java new file mode 100644 index 0000000000..0264a61edf --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ZulaportCutthroat.java @@ -0,0 +1,82 @@ +/* + * 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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesThisOrAnotherCreatureTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LevelX2 + */ +public class ZulaportCutthroat extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you control"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public ZulaportCutthroat(UUID ownerId) { + super(ownerId, 126, "Zulaport Cutthroat", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.subtype.add("Ally"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever Zulaport Cutthroat or another creature you control dies, each opponent loses 1 life and you gain 1 life. + Ability ability = new DiesThisOrAnotherCreatureTriggeredAbility(new LoseLifeOpponentsEffect(1), false, filter); + Effect effect = new GainLifeEffect(1); + effect.setText("and you gain 1 life"); + ability.addEffect(effect); + this.addAbility(ability); + + } + + public ZulaportCutthroat(final ZulaportCutthroat card) { + super(card); + } + + @Override + public ZulaportCutthroat copy() { + return new ZulaportCutthroat(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shardsofalara/BoneSplinters.java b/Mage.Sets/src/mage/sets/shardsofalara/BoneSplinters.java index c499cc268e..002f0c851c 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/BoneSplinters.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/BoneSplinters.java @@ -28,11 +28,12 @@ package mage.sets.shardsofalara; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; @@ -46,9 +47,8 @@ public class BoneSplinters extends CardImpl { super(ownerId, 67, "Bone Splinters", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}"); this.expansionSetCode = "ALA"; - // As an additional cost to cast Bone Splinters, sacrifice a creature. - this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent())); + this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); // Destroy target creature. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new DestroyTargetEffect()); diff --git a/Mage/src/mage/abilities/costs/common/SacrificeTargetCost.java b/Mage/src/mage/abilities/costs/common/SacrificeTargetCost.java index 96f21b26ec..8e33063ba2 100644 --- a/Mage/src/mage/abilities/costs/common/SacrificeTargetCost.java +++ b/Mage/src/mage/abilities/costs/common/SacrificeTargetCost.java @@ -1,16 +1,16 @@ /* * 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 @@ -20,12 +20,11 @@ * 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.abilities.costs.common; import java.util.ArrayList; @@ -51,16 +50,16 @@ public class SacrificeTargetCost extends CostImpl { public SacrificeTargetCost(TargetControlledPermanent target) { this.addTarget(target); target.setNotTarget(true); // sacrifice is never targeted - this.text = "Sacrifice " + target.getTargetName(); + this.text = "sacrifice " + target.getTargetName(); } - + public SacrificeTargetCost(TargetControlledPermanent target, boolean noText) { this.addTarget(target); } public SacrificeTargetCost(SacrificeTargetCost cost) { super(cost); - for (Permanent permanent: cost.permanents) { + for (Permanent permanent : cost.permanents) { this.permanents.add(permanent.copy()); } } @@ -69,10 +68,10 @@ public class SacrificeTargetCost extends CostImpl { public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { UUID activator = controllerId; if (ability.getAbilityType().equals(AbilityType.ACTIVATED) || ability.getAbilityType().equals(AbilityType.SPECIAL_ACTION)) { - activator = ((ActivatedAbilityImpl)ability).getActivatorId(); + activator = ((ActivatedAbilityImpl) ability).getActivatorId(); } if (targets.choose(Outcome.Sacrifice, activator, sourceId, game)) { - for (UUID targetId: targets.get(0).getTargets()) { + for (UUID targetId : targets.get(0).getTargets()) { Permanent permanent = game.getPermanent(targetId); if (permanent == null) { return false; @@ -91,8 +90,8 @@ public class SacrificeTargetCost extends CostImpl { public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { UUID activator = controllerId; if (ability.getAbilityType().equals(AbilityType.ACTIVATED) || ability.getAbilityType().equals(AbilityType.SPECIAL_ACTION)) { - if (((ActivatedAbilityImpl)ability).getActivatorId() != null) { - activator = ((ActivatedAbilityImpl)ability).getActivatorId(); + if (((ActivatedAbilityImpl) ability).getActivatorId() != null) { + activator = ((ActivatedAbilityImpl) ability).getActivatorId(); } else { // Aktivator not filled? activator = controllerId;