From 7e2ec0ffa99aec02f57140d07154c605f40395e4 Mon Sep 17 00:00:00 2001 From: hanasu Date: Fri, 18 Sep 2015 09:40:22 -0400 Subject: [PATCH 01/23] [HML] Implemented 3 cards --- .../mage/sets/homelands/ClockworkGnomes.java | 54 +++++++++++++ .../sets/homelands/GrandmotherSengir.java | 52 +++++++++++++ .../sets/homelands/RevekaWizardSavant.java | 54 +++++++++++++ .../masterseditionii/GrandmotherSengir.java | 74 ++++++++++++++++++ .../masterseditioniii/RevekaWizardSavant.java | 74 ++++++++++++++++++ .../masterseditioniv/ClockworkGnomes.java | 78 +++++++++++++++++++ 6 files changed, 386 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/homelands/ClockworkGnomes.java create mode 100644 Mage.Sets/src/mage/sets/homelands/GrandmotherSengir.java create mode 100644 Mage.Sets/src/mage/sets/homelands/RevekaWizardSavant.java create mode 100644 Mage.Sets/src/mage/sets/masterseditionii/GrandmotherSengir.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniii/RevekaWizardSavant.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniv/ClockworkGnomes.java diff --git a/Mage.Sets/src/mage/sets/homelands/ClockworkGnomes.java b/Mage.Sets/src/mage/sets/homelands/ClockworkGnomes.java new file mode 100644 index 00000000000..d46a6c006b4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/ClockworkGnomes.java @@ -0,0 +1,54 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author hanasu + */ +public class ClockworkGnomes extends mage.sets.masterseditioniv.ClockworkGnomes { + + public ClockworkGnomes(UUID ownerId) { + super(ownerId); + this.cardNumber = 127; + this.expansionSetCode = "HML"; + this.rarity = Rarity.COMMON; + } + + public ClockworkGnomes(final ClockworkGnomes card) { + super(card); + } + + @Override + public ClockworkGnomes copy() { + return new ClockworkGnomes(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/GrandmotherSengir.java b/Mage.Sets/src/mage/sets/homelands/GrandmotherSengir.java new file mode 100644 index 00000000000..a1b27a00df1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/GrandmotherSengir.java @@ -0,0 +1,52 @@ +/* + * 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.homelands; + +import java.util.UUID; + +/** + * + * @author hanasu + */ +public class GrandmotherSengir extends mage.sets.masterseditionii.GrandmotherSengir { + + public GrandmotherSengir(UUID ownerId) { + super(ownerId); + this.cardNumber = 13; + this.expansionSetCode = "HML"; + } + + public GrandmotherSengir(final GrandmotherSengir card) { + super(card); + } + + @Override + public GrandmotherSengir copy() { + return new GrandmotherSengir(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/RevekaWizardSavant.java b/Mage.Sets/src/mage/sets/homelands/RevekaWizardSavant.java new file mode 100644 index 00000000000..8a878245f28 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/RevekaWizardSavant.java @@ -0,0 +1,54 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author hanasu + */ +public class RevekaWizardSavant extends mage.sets.masterseditioniii.RevekaWizardSavant { + + public RevekaWizardSavant(UUID ownerId) { + super(ownerId); + this.cardNumber = 47; + this.expansionSetCode = "HML"; + this.rarity = Rarity.RARE; + } + + public RevekaWizardSavant(final RevekaWizardSavant card) { + super(card); + } + + @Override + public RevekaWizardSavant copy() { + return new RevekaWizardSavant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditionii/GrandmotherSengir.java b/Mage.Sets/src/mage/sets/masterseditionii/GrandmotherSengir.java new file mode 100644 index 00000000000..5a1ea84a567 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditionii/GrandmotherSengir.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.masterseditionii; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +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 hanasu + */ +public class GrandmotherSengir extends CardImpl { + + public GrandmotherSengir(UUID ownerId) { + super(ownerId, 93, "Grandmother Sengir", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "ME2"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {1}{B}, {tap}: Target creature gets -1/-1 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-1, -1, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public GrandmotherSengir(final GrandmotherSengir card) { + super(card); + } + + @Override + public GrandmotherSengir copy() { + return new GrandmotherSengir(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/RevekaWizardSavant.java b/Mage.Sets/src/mage/sets/masterseditioniii/RevekaWizardSavant.java new file mode 100644 index 00000000000..2416727587a --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/RevekaWizardSavant.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.masterseditioniii; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author hanasu + */ +public class RevekaWizardSavant extends CardImpl { + + public RevekaWizardSavant(UUID ownerId) { + super(ownerId, 49, "Reveka, Wizard Savant", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "ME3"; + this.supertype.add("Legendary"); + this.subtype.add("Dwarf"); + this.subtype.add("Wizard"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // {tap}: Reveka, Wizard Savant deals 2 damage to target creature or player and doesn't untap during your next untap step. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new TapSourceCost()); + ability.addTarget(new TargetCreatureOrPlayer()); + ability.addEffect(new DontUntapInControllersNextUntapStepSourceEffect()); + this.addAbility(ability); + } + + public RevekaWizardSavant(final RevekaWizardSavant card) { + super(card); + } + + @Override + public RevekaWizardSavant copy() { + return new RevekaWizardSavant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniv/ClockworkGnomes.java b/Mage.Sets/src/mage/sets/masterseditioniv/ClockworkGnomes.java new file mode 100644 index 00000000000..d56765d987f --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniv/ClockworkGnomes.java @@ -0,0 +1,78 @@ +/* + * 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.masterseditioniv; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RegenerateTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author hanasu + */ +public class ClockworkGnomes extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("artifact creature"); + + static { + filter.add(new CardTypePredicate(CardType.ARTIFACT)); + } + + public ClockworkGnomes(UUID ownerId) { + super(ownerId, 191, "Clockwork Gnomes", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); + this.expansionSetCode = "ME4"; + this.subtype.add("Gnome"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {3}, {tap}: Regenerate target artifact creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateTargetEffect(), new ManaCostsImpl("{3}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + } + + public ClockworkGnomes(final ClockworkGnomes card) { + super(card); + } + + @Override + public ClockworkGnomes copy() { + return new ClockworkGnomes(this); + } +} From f121225e2bd37e2fa648e600d28f7b52f40d1c67 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 18 Sep 2015 19:32:01 +0200 Subject: [PATCH 02/23] [BFZ] Added full spoiler to mtg-cards-data.txt --- Utils/mtg-cards-data.txt | 373 ++++++++++++++++++++++++++------------- 1 file changed, 252 insertions(+), 121 deletions(-) diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index c4c09c39715..ea8b48c0b41 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -27356,146 +27356,277 @@ Swamp|Duel Decks: Zendikar vs. Eldrazi|72|L||Basic Land - Swamp|||B| Mountain|Duel Decks: Zendikar vs. Eldrazi|73|L||Basic Land - Mountain|||M| Mountain|Duel Decks: Zendikar vs. Eldrazi|74|L||Basic Land - Mountain|||M| Mountain|Duel Decks: Zendikar vs. Eldrazi|75|L||Basic Land - Mountain|||M| -Blight Herder|Battle for Zendikar|2|R|{5}|Creature - Eldrazi Processor|4|5|When you cast Blight Herder, you may put two cards your opponents own from exile into their owners' graveyards. If you do, put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."| -Breaker of Armies|Battle for Zendikar|3|U|{8}|Creature - Eldrazi|10|8|All creatures able to block Breaker of Armies do so.| -Conduit of Ruin|Battle for Zendikar|4|R|{6}|Creature - Eldrazi|5|5|When you cast Conduit of Ruin, you may search your library for a colorless creature card with converted mana cost 7 or greater, then shuffle your library and put that card on top of it. The first creature spell you cast each turn costs {2} less to cast.| -Deathless Behemoth|Battle for Zendikar|5|R|{6}|Creature - Eldrazi|6|6|Vigilance$Sacrifice two Eldrazi Scions: Return Deathless Behemoth from your graveyard to your hand. Activate this ability only any time you could cast a sorcery.| -Desolation Twin|Battle for Zendikar|6|R|{10}|Creature - Eldrazi|10|10|When you cast Desolation Twin, put a 10/10 colorless Eldrazi creature token onto the battlefield.| -Eldrazi Devastator|Battle for Zendikar|7|C|{8}|Creature - Eldrazi|8|9|Trample| -Endless One|Battle for Zendikar|8|R|{X}|Creature - Eldrazi|0|0|Endless One enters the battlefield with X +1/+1 counters on it.| -Gruesome Slaughter|Battle for Zendikar|9|R|{6}|Sorcery|||Until end of turn, colorless creatures you control gain "{T}: This creature deals damage equal to its power to target creature."| -Kozilek's Channeler|Battle for Zendikar|10|C|{5}|Creature - Eldrazi|4|4|{T}: Add {2} to your mana pool.| -Oblivion Sower|Battle for Zendikar|11|M|{6}|Creature - Eldrazi|5|8|When you cast Oblivion Sower, target opponent exiles the top four cards of his or her library, then you may put any number of land cards that player owns from exile onto the battlefield under your control.| -Scour from Existence|Battle for Zendikar|13|C|{7}|Instant|||Exile target permanent.| -Titan's Presence|Battle for Zendikar|14|U|{3}|Instant|||As an additional cost to cast Titan's Presence, reveal a colorless creature card from your hand.$Exile target creature if its power is less than or equal to the revealed card's power.| -Ulamog, the Ceaseless Hunger|Battle for Zendikar|15|M|{10}|Legendary Creature - Eldrazi|10|10|When you cast Ulamog, the Ceaseless Hunger, exile two target permanents.$Indestructible$Whenever Ulamog attacks, defending player exiles the top twenty cards of his or her library.| -Void Winnower|Battle for Zendikar|17|M|{9}|Your opponents can't cast spells with even converted mana costs. (Zero is even.)$Your opponents can't block with creatures with even converted mana costs.| +Blight Herder|Battle for Zendikar|002|R|{5}|Creature - Eldrazi Processor|4|5|When you cast Blight Herder, you may put two cards your opponents own from exile into their owners' graveyards. If you do, put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."| +Kozilek's Channeler|Battle for Zendikar|010|C|{5}|Creature - Eldrazi|4|4|{T}: Add {2} to your mana pool.| +Eldrazi Devastator|Battle for Zendikar|007|C|{8}|Creature - Eldrazi|8|9|Trample| +Titan's Presence|Battle for Zendikar|014|U|{3}|Instant|||As an additional cost to cast Titan's Presence, reveal a colorless creature card from your hand.$Exile target creature if its power is less than or equal to the revealed card's power.| +Ulamog, the Ceaseless Hunger|Battle for Zendikar|015|M|{1}{0}|Legendary Creature - Eldrazi|10|10|When you cast Ulamog, the Ceaseless Hunger, exile two target permanents.$Indestructible$Whenever Ulamog attacks, defending player exiles the top twenty cards of his or her library.| +Breaker of Armies|Battle for Zendikar|003|U|{8}|Creature - Eldrazi|10|8|All creatures able to block Breaker of Armies do so.| +Desolation Twin|Battle for Zendikar|006|R|{1}{0}|Creature - Eldrazi|10|10|When you cast Desolation Twin, put a 10/10 colorless Eldrazi creature token onto the battlefield.| +Conduit of Ruin|Battle for Zendikar|004|R|{6}|Creature - Eldrazi|5|5|When you cast Conduit of Ruin, you may search your library for a colorless creature card with converted mana cost 7 or greater, reveal it, then shuffle your library and put that card on top of it.$The first creature spell you cast each turn costs {2} less to cast.| +Deathless Behemoth|Battle for Zendikar|005|U|{6}|Creature - Eldrazi|6|6|Vigilance$Sacrifice two Eldrazi Scions: Return Deathless Behemoth from your graveyard to your hand. Activate this ability only any time you could cast a sorcery.| +Void Winnower|Battle for Zendikar|017|M|{9}|Creature - Eldrazi|11|9|Your opponent can't cast spells with even converted mana costs. (Zero is even.)$Your opponents can't block with creatures with even converted mana costs.| +Endless One|Battle for Zendikar|008|R|{X}|Creature - Eldrazi|0|0|Endless One enters the battlefield with X +1/+1 counters on it.| +Scour from Existence|Battle for Zendikar|013|C|{7}|Instant|||Exile target permanent.| +Gruesome Slaughter|Battle for Zendikar|009|R|{6}|Sorcery|||Until end of turn, colorless creatures you control gain "{T}: This creature deals damage equal to its power to target creature."| +Bane of Bala Ged|Battle for Zendikar|001|U|{7}|Creature - Eldrazi|7|5|Whenever Bane of Bala Ged attacks, defending player exiles two permanents he or she controls.| +Ruin Processor|Battle for Zendikar|012|U|{7}|Creature - Eldrazi Processor|7|8|When you cast Ruin Processor, you may put a card an opponent owns from exile into that player's graveyard. If you do, you gain 5 life.| +Ulamog's Despoiler|Battle for Zendikar|016|U|{6}|Creature - Eldrazi Processor|5|5|As Ulamog's Despoiler enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, Ulamog's Despoiler enters the battlefield with four +1/+1 counters on it.| +Oblivion Sower|Battle for Zendikar|011|M|{6}|Creature - Eldrazi|5|8|When you cast Oblivion Sower, target opponent exiles the top four cards of his or her library, then you may put any number of land cards that player owns from exile onto the battlefield under your control.| +Angel of Renewal|Battle for Zendikar|018|U|{5}{W}|Creature - Angel Ally|4|4|Flying$When Angel of Renewal enters the battlefield, you gain 1 life for each creature you control.| +Angelic Gift|Battle for Zendikar|019|C|{1}{W}|Enchantment - Aura|||Enchant creature$When Angelic Gift enters the battlefield, draw a card.$Enchanted creature has flying.| +Cliffside Lookout|Battle for Zendikar|020|C|{W}|Creature - Kor Scout Ally|1|1|{4}{W}: Creatures you control get +1/+1 until end of turn.| +Courier Griffin|Battle for Zendikar|020|C|{3}{W}|Creature - Griffin|2|3|Flying$When Courier Griffin enters the battlefield, you gain 2 life.| +Emeria Shepherd|Battle for Zendikar|22|R|{5}{W}{W}|Creature - Angel|4|4|Flying$Landfall — Whenever a land enters the battlefield under your control, you may return target nonland permanent card from your graveyard to your hand. If that land is a Plains, you may return that nonland permanent card to the battlefield instead.| +Encircling Fissure|Battle for Zendikar|023|U|{2}{W}|Instant|||Prevent all combat damage that would be dealt this turn by creatures target opponent controls.$Awaken 2 —{4}{W} (If you cast this spell for 5U, also put two +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Expedition Envoy|Battle for Zendikar|024|U|{W}|Creature - Human Scout Ally|2|1|| Felidar Cub|Battle for Zendikar|25|C|{1}{W}|Creature - Cat Beast|2|2|Sacrifice Felidar Cub: Destroy target enchantment.| Felidar Sovereign|Battle for Zendikar|26|R|{4}{W}{W}|Creature - Cat Beast|4|6|Vigilance, lifelink$At the beginning of your upkeep, if you have 40 or more life, you win the game.| -Gideon, Ally of Zendikar|Battle for Zendikar|29|M|{2}{W}{W}|Planeswalker - Gideon|||+1: Until end of turn, Gideon, Ally of Zendikar becomes a 5/5 Human Soldier Ally creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.$0: Put a 2/2 white Knight Ally creature token onto the battlefield.$-4: You get an emblem with "Creatures you control get +1/+1."| +Fortified Rampart|Battle for Zendikar|027|C|{1}{W}|Creature - Wall|0|6|Defender| +Ghostly Sentinel|Battle for Zendikar|028|C|{4}{W}|Creature - Kor Spirit|3|3|Flying, vigilance| +Gideon, Ally of Zendikar|Battle for Zendikar|29|M|{2}{W}{W}|Planeswalker - Gideon|4|+1: Until end of turn, Gideon, Ally of Zendikar becomes a 5/5 Human Soldier Ally creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn.$0: Put a 2/2 white Knight Ally creature token onto the battlefield.$-4: You get an emblem with "Creatures you control get +1/+1."| Gideon's Reproach|Battle for Zendikar|30|C|{1}{W}|Instant|||Gideon's Reproach deals 4 damage to target attacking or blocking creature.| -Hero of Goma Fada|Battle for Zendikar|31|R|{4}{W}|Creature - Human Knight Ally|4|3|Rally - Whenever Hero of Goma Fada or another Ally enters the battlefield under your control, creatures you control gain indestructible until end of turn.| -Lantern Scout|Battle for Zendikar|37|R|{2}{W}|Creature - Human Scout Ally|3|2|Rally - Whenever Lantern Scout or another Ally enters the battlefield under your control, creatures you control gain lifelink until end of turn.| -Planar Outburst|Battle for Zendikar|42|R|{3}{W}{W}|Sorcery|||Destroy all nonland creatures.$Awaken 4-{5}{W}{W}{W} If you cast this spell for {5}{W}{W}{W}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| -Quarantine Field|Battle for Zendikar|43|M|{X}{X}{W}{W}|Enchantment|||Quarantine Field enters the battlefield with X isolation counters on it.$When Quarantine Field enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponenet controls until Quarantine Field leaves the battlefield.| -Retreat to Emeria|Battle for Zendikar|44|U|{3}{W}|Enchantment|||Landfall - Whenever a land enters the battlefield under you control, choose one - Put a 1/1 white Kor Ally creature token onto the battlefield; or Creatures you control get +1/+1 until end of turn.| -Sheer Drop|Battle for Zendikar|48|C|{2}{W}|Sorcery|||Destroy target tapped creature.$Awaken 3-{5}{W} (If you cast this spell for {5}{W}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| -Stasis Snare|Battle for Zendikar|50|U|{1}{W}{W}|Enchantment|||Flash$When Stasis Snare enters the battlefield, exile target creature an opponent controls until Stasis Snare leaves the battlefield.| +Hero of Goma Fada|Battle for Zendikar|31|R|{4}{W}|Creature - Human Knight Ally|4|3|Rally — Whenever Hero of Goma Fada or another Ally enters the battlefield under your control, creatures you control gain indestructible until end of turn.| +Inspired Charge|Battle for Zendikar|032|C|{2}{W}{W}|Instant|||Creatures you control get +2/+1 until end of turn.| +Kitesail Scout|Battle for Zendikar|033|C|{W}|Creature - Kor Scout|1|1|Flying| +Kor Bladewhirl|Battle for Zendikar|034|U|{1}{W}|Creature - Kor Soldier Ally|2|2|Rally — Whenever Kor Bladewhirl or another Ally enters the battlefield under your control, creatures you control gain first strike until end of turn.| +Kor Castigator|Battle for Zendikar|035|C|{1}{W}|Creature - Kor Wizard Ally|3|1|Kor Castigator can't be blocked by Eldrazi Scions.| +Kor Entanglers|Battle for Zendikar|036|U|{4}{W}|Creature - Kor Soldier Ally|3|4|Rally — Whenever Kor Entanglers or another Ally enters the battlefield under your control, tap target creature an opponent controls.| +Lantern Scout|Battle for Zendikar|37|R|{2}{W}|Creature - Human Scout Ally|3|2|Rally — Whenever Lantern Scout or another Ally enters the battlefield under your control, creatures you control gain lifelink until end of turn.| +Lithomancer's Focus|Battle for Zendikar|038|C|{W}|Instant|||Target creature gets +2/+2 until end of turn. Prevent all damage that would be dealt to that creature this turn by colorless sources.| +Makindi Patrol|Battle for Zendikar|039|C|{2}{W}|Creature - Human Knight Ally|2|3|Rally — Whenever Makindi Patrol or another Ally enters the battlefield under your control, creatures you control gain vigilance until end of turn.| +Ondu Greathorn|Battle for Zendikar|040|C|{3}{W}|Creature - Beast|2|3|First strike$Landfall — Whenever a land enters the battlefield under your control, Ondu Greathorn gets +2/+2 until end of turn.| +Ondu Rising|Battle for Zendikar|041|U|{1}{W}|Sorcery|||Whenever a creature attacks this turn, it gains lifelink until end of turn.$Awaken 4—{4}{W} (If you cast this spell for 5U, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Planar Outburst|Battle for Zendikar|42|R|{3}{W}{W}|Sorcery|||Destroy all nonland creatures.$Awaken 4—{5}{W}{W}{W} (If you cast this spell for {5}{W}{W}{W}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Quarantine Field|Battle for Zendikar|43|M|{X}{X}{W}{W}|Enchantment|||Quarantine Field enters the battlefield with X isolation counters on it.$When Quarantine Field enters the battlefield, for each isolation counter on it, exile up to one target nonland permanent an opponent controls until Quarantine Field leaves the battlefield.| +Retreat to Emeria|Battle for Zendikar|44|U|{3}{W}|Enchantment|||Landfall — Whenever a land enters the battlefield under your control, choose one —$• Put a 1/1 white Kor Ally creature token onto the battlefield.$• Creatures you control get +1/+1 until end of turn.| +Roil's Retribution|Battle for Zendikar|045|U|{3}{W}{W}|Instant|||Roil's Retribution deals 5 damage divided as you choose among any number of target attacking or blocking creatures.| +Serene Steward|Battle for Zendikar|046|U|{1}{W}|Creature - Human Cleric Ally|2|2|Whenever you gain life, you may pay {W}. If you do, put a +1/+1 counter on target creature.| +Shadow Glider|Battle for Zendikar|047|C|{2}{W}|Creature - Kor Soldier|2|2|Flying| +Sheer Drop|Battle for Zendikar|48|C|{2}{W}|Sorcery|||Destroy target tapped creature.$Awaken 3—{5}{W} (If you cast this spell for {5}{W}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Smite the Monstrous|Battle for Zendikar|049|C|{3}{W}|Instant|||Destroy target creature with power 4 or greater.| +Stasis Snare|Battle for Zendikar|50|U|{1}{W}{W}|Enchantment|||Flash$When Stasis Snare enters the battlefield, exile target creature an opponent controls until Stasis Snare leaves the battlefield. (That creature returns under its owner's control.)| +Stone Haven Medic|Battle for Zendikar|051|C|{1}{W}|Creature - Kor Cleric|1|3|{W}, {t}: You gain 1 life.| Tandem Tactics|Battle for Zendikar|52|C|{1}{W}|Instant|||Up to two target creatures each get +1/+2 until end of turn. You gain 2 life.| +Unified Front|Battle for Zendikar|053|U|{3}{W}|Sorcery|||Converge — Put a 1/1 white Kor Ally creature token onto the battlefield for each color of mana spent to cast Unified Front.| +Adverse Conditions|Battle for Zendikar|54|U|{3}{U}|Instant|||Devoid (This card has no color.)$Tap up to two target creatures. Those creatures don't untap during their controller's next untap step. Put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."| +Anticipate|Battle for Zendikar|69|C|{1}{U}|Instant|||Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.| Benthic Infiltrator|Battle for Zendikar|55|C|{2}{U}|Creature - Eldrazi Drone|1|4|Devoid (This card has no color.)$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)$Benthic Infiltrator can't be blocked.| -Drowner of Hope|Battle for Zendikar|57|R|{5}{U}|Creature - Eldrazi|5|5|Devoid (This card has no color.)$When Drowner of Hope enters the battlefield, put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."$Sacrifice an Eldrazi Scion: Tap target creature.| -Horribly Awry|Battle for Zendikar|59|U|{1}{U}|Instant|||Devoid (This card has no color.)$Counter target creature spell with converted mana cost 4 or less. If that spell is countered this way, exile it instead of putting it into its owner's graveyard.| -Incubator Drone|Battle for Zendikar|60|C|{3}{U}|Creature - Eldrazi Drone|2|3|Devoid (This card has no color.)$Whenever Incubator Drone enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."| -Mist Intruder|Battle for Zendikar|61|C|{1}{U}|Creature - Eldrazi Drone|1|2|Devoid (This card has no color.)$Flying$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)| -Murk Strider|Battle for Zendikar|62|C|{3}{U}|Creature - Eldrazi Processor|3|2|Devoid (This card has no color.)$When Murk Strider enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, return target creature to its owner's hand.| -Coastal Discovery|Battle for Zendikar|73|U|{3}{U}|Sorcery|||Draw two cards.$Awaken 4 - {5}U} If you cast this spell for {5}{U}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| -Exert Influence|Battle for Zendikar|77|R|{4}{U}|Sorcery|||Converge-Gain control of target creature if its power is less than or equal to the number of colors spent to cast Exert Influence.| -Guardian of Tazeem|Battle for Zendikar|78|R|{3}{U}{U}|Creature - Sphinx|4|5|Flying$Landfall - Whenever a land enters the battlefield under your control, tap target creature an opponent controls. If that land is an Island, that creature doesn't untap during its controller's next untap step.| -Part the Waterveil|Battle for Zendikar|80|M|{4}{U}{U}|Sorcery|||Take an extra turn after this one. Exile Part the Waterveil.$Awaken 6-{6}{U}{U}{U} (If you cast this spell for {6}{U}{U}{U}, also put six +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| -Prism Array|Battle for Zendikar|81|R|{4}{U}|Enchantment|||Converge - Prism Array enters the battlefield with a crystal counter on it for each color of mana spent to cast it.$Remove a crystal counter from Prism Array: Tap target creature.${W}{U}{B}{R}{G}: Scry 3. (Look at the top three cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)| -Retreat to Coralhelm|Battle for Zendikar|82|U|{2}{U}|Enchantment|||Landfall- Whenever a land enters the battlefield under your control, choose one - You may tap or untap target creature; or Scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)| -Scatter to the Winds|Battle for Zendikar|85|R|{1}{U}{U}|Instant|||Counter target spell.$Awaken 3-{4}{U}{U} (If you cast this spell for {4}{U}{U}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| -Ugin's Insight|Battle for Zendikar|87|R|{3}{U}{U}|Sorcery|||Scry X, where X is the highest converted mana cost among permanents you control, then draw three cards.| +Brilliant Spectrum|Battle for Zendikar|70|C|{3}{U}|Sorcery|||Converge — Draw X cards, where X is the number of colors of mana spent to cast Brilliant Spectrum. Then discard two cards.| +Cloud Manta|Battle for Zendikar|71|C|{3}{U}|Creature - Fish|3|2|Flying| +Clutch of Currents|Battle for Zendikar|72|C|{U}|Sorcery|||Return target creature to its owner's hand.$Awaken 3—{4}{U} (If you cast this spell for {4}{U}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Coastal Discovery|Battle for Zendikar|073|U|{3}{U}|Sorcery|||Draw two cards.$Awaken 4—{5}{U} (If you cast this spell for {5}{U}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Coralhelm Guide|Battle for Zendikar|74|C|{1}{U}|Creature - Merfolk Scout Ally|2|1|{4}{U}: Target creature can't be blocked this turn.| +Cryptic Cruiser|Battle for Zendikar|56|U|{3}{U}|Creature - Eldrazi Processor|3|3|Devoid (This card has no color.)${2}{U}, Put a card an opponent owns from exile into that player's graveyard: Tap target creature.| +Dampening Pulse|Battle for Zendikar|75|U|{3}{U}|Enchantment|||Creatures your opponents control get -1/-0.| +Dispel|Battle for Zendikar|76|C|{U}|Instant|||Counter target instant spell.| +Drowner of Hope|Battle for Zendikar|057|R|{5}{U}|Creature - Eldrazi|5|5|Devoid (This card has no color.)$When Drowner of Hope enters the battlefield, put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."$Sacrifice an Eldrazi Scion: Tap Target creature.| +Eldrazi Skyspawner|Battle for Zendikar|58|C|{2}{U}|Creature - Eldrazi Drone|2|1|Devoid (This card has no color.)$Flying$When Eldrazi Skyspawner enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."| +Exert Influence|Battle for Zendikar|077|R|{4}{U}|Sorcery|||Converge — Gain control of target creature if its power is less than or equal to the number of colors of mana spent to cast Exert Influence.| +Guardian of Tazeem|Battle for Zendikar|078|R|{3}{U}{U}|Creature - Sphinx|4|5|Flying$Landfall — Whenever a land enters the battlefield under your control, tap target creature an opponent controls. If that land is an Island, that creature doesn't untap during its controller's next untap step. | +Halimar Tidecaller|Battle for Zendikar|79|U|{2}{U}|Creature - Human Wizard Ally|2|3|When Halimar Tidecaller enters the battlefield, you may return target card with awaken from your graveyard to your hand.$Land creatures you control have flying.| +Horribly Awry|Battle for Zendikar|059|U|{1}{U}|Instant|||Devoid (This card has no color.)$Counter target creature spell with converted mana cost 4 or less. If that spell is countered this way, exile it instead of putting it into its owner's graveyard.| +Incubator Drone|Battle for Zendikar|060|C|{3}{U}|Creature - Eldrazi Drone|2|3|Devoid (This card has no color.)$When Incubator Drone enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."| +Mist Intruder|Battle for Zendikar|061|C|{1}{U}|Creature - Eldrazi Drone|1|2|Devoid (This card has no color.)$Flying$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)| +Murk Strider|Battle for Zendikar|62|C|{3}{U}|Creature - Eldrazi Processor|3|2|When Murk Strider enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, return target creature to its owner's hand.| +Oracle of Dust|Battle for Zendikar|63|C|{4}{U}|Creature - Eldrazi Processor|3|5|Devoid (This card has no color.)${2}, Put a card an opponent owns from exile into that player's graveyard: Draw a card, then discard a card.| +Part the Waterveil|Battle for Zendikar|80|M|{4}{U}{U}|Sorcery|||Take an extra turn after this one. Exile Part the Waterveil.$Awaken 6—{6}{U}{U}{U} (If you cast this spell for {6}{U}{U}{U}, also put six +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Prism Array|Battle for Zendikar|081|R|{4}{U}|Enchantment|||Converge — Prism Array enters the battlfield with a crystal counter on it for each color of mana spent to cast it.$Remove a crystal counter from Prism Array: Tap target creature.${W}{U}{B}{R}{G}: Scry 3. | +Retreat to Coralhelm|Battle for Zendikar|082|U|{2}{U}|Enchantment|||Landfall — Whenever a land enters the battlefield under your control, choose one —$• You may tap or untap target creature.$• Scry 1.| +Roilmage's Trick|Battle for Zendikar|83|C|{3}{U}|Instant|||Converge — Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast Roilmage's Trick.$Draw a card.| +Ruination Guide|Battle for Zendikar|64|U|{2}{U}|Creature - Eldrazi Drone|3|2|Devoid (This card has no color.)$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)$Other colorless creatures you control get +1/+0.| +Rush of Ice|Battle for Zendikar|84|C|{U}|Sorcery|||Tap target creature. It doesn't untap during its controller's next untap step.$Awaken 3—{4}{U} (If you cast this spell for {4}{U}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Salvage Drone|Battle for Zendikar|65|C|{U}|Creature - Eldrazi Drone|1|1|Devoid (This card has no color.)$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)$When Salvage Drone dies, you may draw a card. If you do, discard a card.| +Scatter to the Winds|Battle for Zendikar|85|R|{1}{U}{U}|Instant|||Counter target spell.$Awaken 3—{4}{U}{U} (If you cast this spell for {4}{U}{U}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Spell Shrivel|Battle for Zendikar|66|C|{2}{U}|Instant|||Devoid (This card has no color.)$Counter target spell unless its controller pays {4}. If that spell is countered this way, exile it instead of putting it into its owner's graveyard.| +Tide Drifter|Battle for Zendikar|67|U|{1}{U}|Creature - Eldrazi Drone|0|5|Devoid (This card has no color.)$Other colorless creatures you control get +0/+1.| +Tightening Coils|Battle for Zendikar|86|C|{1}{U}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -6/-0 and loses flying.| +Ugin's Insight|Battle for Zendikar|087|R|{3}{U}{U}|Sorcery|||Scry X, where X is the highest converted mana cost among permanents you control, then draw three cards.| +Ulamog's Reclaimer|Battle for Zendikar|68|U|{4}{U}|Creature - Eldrazi Processor|2|5|Devoid (This card has no color.)$When Ulamog's Reclaimer enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, return target instant or sorcery card from your graveyard to your hand.| +Wave-Wing Elemental|Battle for Zendikar|088|C|{5}{U}|Creature - Elemental|3|4|Flying$Landfall — Whenver a land enters the battlefield under your control, Wave-Wing Elemental gets +2/+2 until end of turn.| +Windrider Patrol|Battle for Zendikar|089|U|{3}{U}{U}|Creature - Merfolk Wizard|4|3|Flying$Whenever Windrider Patrol deals combat damage to a player, scry 2.| +Altar's Reap|Battle for Zendikar|103|C|{1}{B}|Instant|||As an additional cost to cast Altar's Reap, sacrifice a creature.$Draw two cards.| +Bloodbond Vampire|Battle for Zendikar|104|U|{2}{B}{B}|Creature - Vampire Shaman Ally|3|3|Whenever you gain life, put a +1/+1 counter on Bloodbond Vampire.| +Bone Splinters|Battle for Zendikar|105|C|{B}|Sorcery|||As an additional cost to cast Bone Splinters, sacrifice a creature.$Destroy target creature.| +Carrier Thrall|Battle for Zendikar|106|U|{1}{B}|Creature - Vampire|2|1|When Carrier Thrall dies, put a 1/1 colorless Eldrazi Scion token onto the battlefield. It has "Sacrifice this creature. Add {1} to your mana pool."| Complete Disregard|Battle for Zendikar|90|C|{2}{B}|Instant|||Devoid (This card has no color.)$Exile target creature with power 3 or less.| Culling Drone|Battle for Zendikar|91|C|{1}{B}|Creature - Eldrazi Drone|2|2|Devoid (This card has no color.)$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)| -Dominator Drone|Battle for Zendikar|92|C|{2}{B}|Creature - Eldrazi Drone|3|2|Devoid (This card has no color.)$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)$When Dominator Drone enters the battlefield, if you control another colorless creature, each opponent loses 2 life.| -Mind Raker|Battle for Zendikar|95|C|{3}{B}|Creature - Eldrazi Processor|3|3|Devoid (This card has no color.)$When Mind Raker enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, each opponent discards a card.| -Skitterskin|Battle for Zendikar|97|U|{3}{B}|Creature - Eldrazi Drone|4|3|Devoid (This card has no color.)$Skitterskin can't block.${1}{B}: Regenerate Skitterskin. Activate this ability only if you control another colorless creature.| -Smothering Abomination|Battle for Zendikar|99|R|{2}{B}{B}|Creature - Eldrazi|4|3|Devoid (This card has no color.)$Flying$At the beginning of your upkeep, sacrifice a creature.$Whenever you sacrifice a creature, draw a card.| -Transgress the Mind|Battle for Zendikar|101|U|{1}{B}|Sorcery|||Devoid (This card has no color.)$Target player reveals his or her hand. You may choose a card from it with converted mana cost 3 or greater and exile that card.| -Wasteland Strangler|Battle for Zendikar|102|R|{2}{B}|Creature - Eldrazi Processor|3|2|Devoid (This card has no color.)$When Wasteland Strangler enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, target creature gets -3/-3 until end of turn.| Defiant Bloodlord|Battle for Zendikar|107|R|{5}{B}{B}|Creature - Vampire|4|5|Flying$Whenever you gain life, target opponent loses that much life.| -Drana, Liberator of Malakir|Battle for Zendikar|109|M|{1}{B}{B}|Legendary Creature - Vampire Ally|2|3|Flying, first strike$Whenever Drana, Liberator of Malakir deals combat damage to player, put a +1/+1 counter on each attacking creature you control.| -Guul Draz Overseer|Battle for Zendikar|112|R|{4}{B}{B}|Creature - Vampire|3|4|Flying$Landfall- Whenever a land enters the battlefield under your control, other creatures you control get +1/+0 until end of turn. If that land is a Swamp, those creatures get +2/+0 until end of turn instead.| -Ob Nixilis Reignited|Battle for Zendikar|119|M|{3}{B}{B}|Planeswalker - Nixilis|||+1: You draw a card and you lose 1 life.$-3: Destroy target creature.$-8: Target opponent gets an emblem with "Whenever a player draws a card, you lose 2 life."| -Painful Truths|Battle for Zendikar|120|R|{2}{B}|Sorcery|||Converge - Draw X cards and lose X life, where X is the number of colors of mana spent to cast Painful Truths.| -Retreat to Hagra|Battle for Zendikar|121|U|{2}{B}|Enchantment|||Landfall- Whenever a land enters the battlefield under your control, choose one - Target creature gets +1/+0 and gains deathtouch until end of turn; or Each opponent loses 1 life and you gain 1 life.| -Ruinous Path|Battle for Zendikar|123|R|{1}{B}{B}|Sorcery|||Destroy target creature or planeswalker.$Awaken 4-{5}{B}{B} (If you cast this spell for {5}{B}{B}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Demon's Grasp|Battle for Zendikar|108|C|{4}{B}|Sorcery|||Target creature gets -5/-5 until end of turn.| +Dominator Drone|Battle for Zendikar|92|C|{2}{B}|Creature - Eldrazi Drone|3|2|Devoid (This creature has no color.)$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)$When Dominator Drone enters the battlefield, if you control another colorless creature, each opponent loses 2 life.| +Drana, Liberator of Malakir|Battle for Zendikar|109|M|{1}{B}{B}|Legendary Creature - Vampire Ally|2|3|Flying, first strike$Whenever Drana, Liberator of Malakir deals combat damage to a player, put a +1/+1 counter on each attacking creature you control.| +Dutiful Return|Battle for Zendikar|110|C|{3}{B}|Sorcery|||Return up to two target creature cards from your graveyard to your hand.| +Geyserfield Stalker|Battle for Zendikar|111|C|{4}{B}|Creature - Elemental|3|2|Menace$Landfall - Whenever a land enters the battlefield under your control, Geyserfield Stalker gets +2/+2 until end of turn.| +Grave Birthing|Battle for Zendikar|93|C|{2}{B}|Instant|||Devoid (This card has no color.)$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."$Draw a card.| +Grip of Desolation|Battle for Zendikar|94|U|{4}{B}{B}|Intant|||Devoid (This card has no color.)$Exile target creature and target land.| +Guul Draz Overseer|Battle for Zendikar|112|R|{4}{B}{B}|Creature - Vampire|3|4|Flying$Landfall — Whenever a land enters the battlefield under your control, other creatures you control get +1/+0 until end of turn. If that land is a Swamp, those creatures get +2/+0 until end of turn instead.| +Hagra Sharpshooter|Battle for Zendikar|113|U|{2}{B}|Creature - Human Assassin Ally|2|2|{4}{B}: Target creature gets -1/-1 until end of turn.| +Kalastria Healer|Battle for Zendikar|114|C|{1}{B}|Creature - Vampire Cleric Ally|1|2|Rally - Whenever Kalastria Healer or another Ally enters the battlefield under your control, each opponent loses 1 life and you gain 1 life.| +Kalastria Nightwatch|Battle for Zendikar|115|C|{4}{B}|Creature - Vampire Warrior Ally|4|5|Whenever you gain life, Kalastria Nightwatch gains flying until end of turn.| +Malakir Familiar|Battle for Zendikar|116|U|{2}{B}|Creature - Bat|2|1|Flying, deahtouch$Whenever you gain life, Malakir Familiar gets +1/+1 until end of turn.| +Mind Raker|Battle for Zendikar|95|C|{3}{B}|Creature - Eldrazi Processor|3|3|Devoid (This card has no color.)$When Mind Raker enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, each opponent discards a card.| +Mire's Malice|Battle for Zendikar|117|C|{3}{B}|Sorcery|||Target opponent discards two cards.$Awaken 3 - {5}{B} (If you cast this spell for {5}{B}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Nirkana Assassin|Battle for Zendikar|118|C|{2}{B}|Creature - Vampire Assassin Ally|2|3|Whenever you gain life, Nirkana Assassin gains deathtouch until end of turn.| +Ob Nixilis Reignited|Battle for Zendikar|119|M|{3}{B}{B}|Planeswalker - Nixilis|5|+1: You draw a card and you lose 1 life.$-3: Destroy target creature.$-8: Target opponent gets an emblem with "Whenever a player draws a card, you lose 2 life."| +Painful Truths|Battle for Zendikar|120|R|{2}{B}|Sorcery|||Converge — You draw X cards and you lose X life, where X is the number of colors of mana spent to cast Painful Truths.| +Retreat to Hagra|Battle for Zendikar|121|U|{2}{B}|Enchantment|||Landfall — Whenever a land enters the battlefield under your control, choose one —$• Target creature gets +1/+0 and gains deathtouch until end of turn.$• Each opponent loses 1 life and you gain 1 life.| +Rising Miasma|Battle for Zendikar|122|U|{3}{B}|Sorcery|||All creatures get -2/-2 until end of turn. $Awaken 3 - {5}{B}{B} (If you cast this spell for {5}{B}{B}, also put three +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Ruinous Path|Battle for Zendikar|123|R|{1}{B}{B}|Sorcery|||Destroy target creature or planeswalker.$Awaken 4—{5}{B}{B} (If you cast this spell for {5}{B}{B}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Silent Skimmer|Battle for Zendikar|96|C|{3}{B}|Creature - Eldrazi Drone|0|4|Devoid (This card has no color.)$Flying$Whenever Silent Skimmer attacks, defending player loses 2 life.| +Skitterskin|Battle for Zendikar|97|U|{3}{B}|Creature - Eldrazi Drone|4|3|Devoid (This card has no color.)$Skitterskin can't block.${1}{B}: Regenerate Skitterskin. Activate this ability only if you control another colorless creature.| +Sludge Crawler|Battle for Zendikar|98|C|{B}|Creature - Eldrazi Drone|1|1|Devoid (This card has no color.)$Ingest (Whenever this creature deals combat damage to a player, exile the top card of his or her library)${2}: Sludge Crawler gets +1/+1 until end of turn.| +Smothering Abomination|Battle for Zendikar|99|R|{2}{B}{B}|Creature - Eldrazi|4|3|Devoid (This card has no color.)$Flying$At the beginning of your upkeep, sacrifice a creature.$Whenever you sacrifice a creature, draw a card.| +Swarm Surge|Battle for Zendikar|100|C|{2}{B}|Sorcery|||Devoid (This card has no color.)$Creatures you control get +2/+0 until end of turn. Colorless creatures you control also gain first strike until end of turn.| +Transgress the Mind|Battle for Zendikar|101|U|{1}{B}|Sorcery|||Devoid (This card has no color.)$Target player reveals his or her hand. You choose a card with converted mana cost 3 or greater and exile that card.| +Vampiric Rites|Battle for Zendikar|124|U|{B}|Enchantment|||{1}{B}, Sacrifice a creature: You gain 1 life and draw a card.| +Voracious Null|Battle for Zendikar|125|C|{2}{B}|Creature - Zombie|2|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.| +Wasteland Strangler|Battle for Zendikar|102|R|{2}{B}|Creature - Eldrazi Processor|3|2|Devoid (This card has no color.)$When Wasteland Strangler enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, target creature gets -3/-3 until end of turn.| +Zulaport Cutthroat|Battle for Zendikar|126|U|{1}{B}|Creature - Human Rogue Ally|1|1|Whenever Zulaport Cutthroat or another creature you control dies, each opponent loses 1 life and you gain 1 life.| +Akoum Firebird|Battle for Zendikar|138|M|{2}{R}{R}|Creature - Phoenix|3|3|Flying, haste$Akoum Firebird attacks each turn if able.$Landfall — Whenever a land enters the battlefield under your control, you may pay {4}{R}{R}. If you do, return Akoum Firebird from your graveyard to the battlefield.| +Akoum Hellkite|Battle for Zendikar|139|R|{4}{R}{R}|Creature - Dragon|4|4|Flying$Landfall — Whenever a land enters the battlefield under your control, Akoum Hellkite deals 1 damage to target creature or player. If that land was a Mountain, Akoum Hellkite deals 2 damage to that creature or player instead.| +Akoum Stonewaker|Battle for Zendikar|140|U|{1}{R}|Creature - Human Shaman|2|1|Landfall — Whenever a land enters the battlefield under your control, you may pay {2}{R}. If you do, put a 3/1 red Elemental creature token with trample and haste onto the battlefield. Exile that token at the beginning of the next end step.| Barrage Tyrant|Battle for Zendikar|127|R|{4}{R}|Creature - Eldrazi|5|3|Devoid (This card has no color.)${2}{R}, Sacrifice another colorless creature: Barrage Tyrant deals damage equal to the sacrificed creature's power to target creature or player.| -Crumble to Dust|Battle for Zendikar|128|U|{3}{R}|Sorcery|||Devoid (This card has no color.)$Exile target nonbasic land. Search its controller's graveyard, hand, and library for any number of cards with the same name as that land and exile them. Then that player shuffles his or her library.| +Belligerent Whiptail|Battle for Zendikar|141|C|{3}{R}|Creature - Wurm|4|2|Landfall — Whenever a land enters the battlefield under your control, Belligerent Whiptail gains first strike until end of turn.| +Boiling Earth|Battle for Zendikar|142|C|{1}{R}|Sorcery|||Boiling Earth deals 1 damage to each creature your opponents control.$Awaken 4—{6}{R} (If you cast this spell for 5U, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Chasm Guide|Battle for Zendikar|143|U|{3}{R}|Creature - Goblin Scout Ally|3|2|Rally — Whenever Chasm Guide or another Ally enters the battlefield under your control, creatures you control gain haste until end of turn.| +Crumble to Dust|Battle for Zendikar|128|U|{3}{R}|Sorcery|||Devoid (This card has no color.)$Exile target nonbasic land. Search it's controller's graveyard, hand and library for any number of cards with the same name as that land and exile them. Then that player shuffles his or her library.| +Dragonmaster Outcast|Battle for Zendikar|144|M|{R}|Creature - Human Shaman|1|1|At the beginning of your upkeep, if you control six or more lands, put a 5/5 red Dragon creature token with flying onto the battlefield.| +Firemantle Mage|Battle for Zendikar|145|U|{2}{R}|Creature - Human Shaman Ally|2|2|Rally — Whenver Firemantle Mage or another Ally enters the battlefield under your control, creatures you control gain menace until end of turn.| +Goblin War Paint|Battle for Zendikar|146|C|{1}{R}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+2 and has haste.| +Kozilek's Sentinel|Battle for Zendikar|129|C|{1}{R}|Creature - Eldrazi Drone|1|4|Devoid (This card has no color.)$Whenever you cast a colorless spell, Kozilek's Sentinel gets +1/+0 until end of turn.| +Lavastep Raider|Battle for Zendikar|147|C|{R}|Creature - Goblin Warrior|1|1|{2}{R}: Lavastep Raider gets +2/+0 until end of turn.| +Makindi Sliderunner|Battle for Zendikar|148|C|{1}{R}|Creature - Beast|2|1|Trample$Landfall — Whenever a land enters the battlefield under your control, Makindi Sliderunner gets +1/+1 until end of turn.| Molten Nursery|Battle for Zendikar|130|U|{2}{R}|Enchantment|||Devoid (This card has no color.)$Whenever you cast a colorless spell, Molten Nursery deals 1 damage to target creature or player.| -Akoum Firebird|Battle for Zendikar|138|M|{2}{R}{R}|Creature - Phoenix|3|3|Flying, haste$Akoum Firebird attacks each turn if able.$Landfall-Whenever a land enters the battlefield under your control, you may pay {4}{R}{R}. If you do, return Akoum Firebird from your graveyard to the battlefield.| -Akoum Hellkite|Battle for Zendikar|139|R|{4}{R}{R}|Creature - Dragon|4|4|Flying$Landfall-Whenever a land enters the battlefield under you control, Akoum Hellkite deals 1 damage to target creature or player. If that land is a Mountain, Akoum Hellkite deals 2 damage to that creature or player instead.| -Dragonmaster Outcast|Battle for Zendikar|144|M|Creature - Human Shaman|1|1|At the beginning of your upkeep, if you control six or more lands, put a 5/5 red Dragon creature token with flying onto the battlefield.| -Radiant Flames|Battle for Zendikar|151|R|{2}{R}|Sorcery||Converge - Radiant Flames deals X damage to each creature, where X is the number of colors of mana spent to cast Radiant Flames.| -Retreat to Valakut|Battle for Zendikar|153|U|{2}{R}|Enchantment|||Landfall- Whenever a land enters the battlefield under your control, choose one - Target creature gets +2/+0 until end of turn; or Target creature can't block this turn.| +Nettle Drone|Battle for Zendikar|131|C|{2}{R}|Creature - Eldrazi Drone|3|1|Devoid (This card has no color.)${t}: Nettle Drone deals 1 damage to each opponent.$Whenever you cast a colorless spell, untap Nettle Drone.| +Ondu Champion|Battle for Zendikar|149|C|{2}{R}{R}|Creature - Minotaur Warrior Ally|4|3|Rally — Whenever Ondu Champion or another Ally enters the battlefield under your control, creatures you control gain trample until end of turn.| +Outnumber|Battle for Zendikar|150|C|{R}|Instant|||Outnumber deals damage to target creature equal to the number of creatures you control.| +Processor Assault|Battle for Zendikar|132|U|{1}{R}|Sorcery|||Devoid (This card has no color.)$As an additional cost to cast Processor Assault, put a card an opponent controls from exile into its owner's graveyard.$Processor Assault deals 5 damage to target creature.| +Radiant Flames|Battle for Zendikar|151|R|{2}{R}|Sorcery|||Converge — Radiant Flames deals X damage to each creature, where X is the number of colors of mana spent to cast Radiant Flames.| +Reckless Cohort|Battle for Zendikar|152|C|{1}{R}|Creature - Human Warrior Ally|2|2|Reckless Cohort attacks each combat if able unless you control another Ally.| +Retreat to Valakut|Battle for Zendikar|153|U|{2}{R}|Enchantment|||Landfall — Whenever a land enters the battlefield under your control, choose one —$• Target creature gets +2/+0 until end of turn.$• Target creature can't block this turn.| Rolling Thunder|Battle for Zendikar|154|U|{X}{R}{R}|Sorcery|||Rolling Thunder deals X damage divided as you choose among any number of target creatures and/or players.| -Zada, Hedron Grinder|Battle for Zendikar|162|R|{3}{R}|Legendary Creature - Goblin Ally|3|3|Whenever you cast an instant or sorcery spell that targets only Zada, Hedron Grinder, copy that spell for each other creature you control that the spell could target. Each copy targets a different one of those creatures.| +Serpentine Spike|Battle for Zendikar|133|R|{5}{R}{R}|Sorcery|||Devoid (This card has no color.)$Serpentine Spike deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead.| +Shatterskull Recruit|Battle for Zendikar|155|C|{3}{R}{R}|Creature - Giant Warrior Ally|4|4|Menace| +Stonefury|Battle for Zendikar|156|C|{3}{R}{R}|Instant|||Stonefury deals damage to target creature equal to the number of lands you control.| +Sure Strike|Battle for Zendikar|157|C|{1}{R}|Instant|||Target creature gets +3/+0 and gains first strike until end of turn.| +Touch of the Void|Battle for Zendikar|134|C|{2}{R}|Sorcery|||Devoid (This card has no color.)$Touch of the Void deals 3 damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead.| +Tunneling Geopede|Battle for Zendikar|158|U|{2}{R}|Creature - Insect|3|2|Landfall - Whenever a land enters the battlefield under your control, Tunneling Geopede deals 1 damage to each opponent.| +Turn Against|Battle for Zendikar|135|U|{4}{R}|Instant|||Devoid (This card has no color.)$Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| +Valakut Invoker|Battle for Zendikar|159|C|{2}{R}|Creature - Human Shaman|2|3|{8}: Valakut Invoker deals 3 damage to target creature or player.| +Valakut Predator|Battle for Zendikar|160|C|{2}{R}|Creature - Elemental|2|2|Landfall - Whenever a land enters the battlefield under your control, Valakut Predator gets +2/+2 until end of turn.| +Vestige of Emrakul|Battle for Zendikar|136|C|{3}{R}|Creature - Eldrazi Drone|3|4|Devoid (This card has no color.)$Trample| +Vile Aggregate|Battle for Zendikar|137|U|{2}{R}|Creature - Eldrazi Drone|0|5|Devoid (This card has no color.)$Vile Aggregate's power is equal to the number of colorless creatures you control.$Trample$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)| +Volcanic Upheaval|Battle for Zendikar|161|C|{3}{R}|Instant|||Destroy target land.| +Zada, Hedron Grinder|Battle for Zendikar|162|R|{3}{R}|Legendary Creature - Goblin Ally|3|3|Whenever you cast an instant or sorcery spell that targets only Zada, Hedron Grinder, copy that spell for each other creature you control that the spell could target. Each copy targets a different one of those creatures.| +Beastcaller Savant|Battle for Zendikar|170|R|{1}{G}|Creature - Elf Shaman Ally|1|1|Haste${T}: Add one mana of any color to your mana pool. Spend this mana only to cast a creature spell.| +Blisterpod|Battle for Zendikar|163|C|{G}|Creature - Eldrazi Drone|1|1|Devoid (This card has no color.)$When Blisterpod dies, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."| +Brood Monitor|Battle for Zendikar|164|U|{4}{G}{G}|Creature - Eldrazi Drone|3|3|Devoid (This card has no color.)$When Brood Monitor enters the battlefield, put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."| +Broodhunter Wurm|Battle for Zendikar|171|C|{3}{G}|Creature - Wurm|4|3|| +Call the Scions|Battle for Zendikar|165|C|{2}{G}|Sorcery|||Devoid (This card has no color.)$Put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: add {1} to your mana pool."| +Earthen Arms|Battle for Zendikar|172|C|{1}{G}|Sorcery|||Put two +1/+1 counters on target permanent.$Awaken 4 - {6}{G} (If you cast this spell for {6}{G}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Eyeless Watcher|Battle for Zendikar|166|C|{3}{G}|Creature - Eldrazi Drone|1|1|Devoid (This card has no color.)$When Eyeless Watcher enters the battlefield, put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."| From Beyond|Battle for Zendikar|167|R|{3}{G}|Enchantment|||Devoid (This card has no color.)$At the beginning of your upkeep, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."${1}{G}, Sacrifice From Beyond: Search your library for an Eldrazi card, reveal it, put it into your hand, then shuffle your library.| -Beastcaller Expert|Battle for Zendikar|170|R|{1}{G}|Creature - Elf Shaman Ally|1|1|Haste${T}: Add one mana of any color to you mana pool. Use this mana only to cast creature spells.| -Greenwarden of Murasa|Battle for Zendikar|174|M|{4}{G}{G}|Creature - Elemental|5|4|When Greenwarden of Murasa enters the battlefield, you may return target card from your graveyard to your hand.$When Greenwarden of Murasa dies, you may exile it. If you do, return target card from your graveyard to your hand.| +Giant Mantis|Battle for Zendikar|173|C|{3}{G}|Creature - Insect|2|4|Reach (This creature can block creatures with flying.)| +Greenwarden of Murasa|Battle for Zendikar|174|M|{4}{G}{G}|Creature - Elemental|5|4|When Greenwarden of Murasa enters the battlefield, you may return target card from your graveyard to your hand.$When Greenwarden of Murasa dies, you may exile it. If you do, you may return target card from your graveyard to your hand.| +Infuse with the Elements|Battle for Zendikar|175|U|{3}{G}|Instant|||Converge - Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast Infuse with the Elements. That creature gains trample until end of turn.| +Jaddi Offshoot|Battle for Zendikar|176|U|{G}|Creature - Plant|0|3|Defender$Landfall - Whenever a land enters the battlefield under your control, you gain 1 life.| +Lifespring Druid|Battle for Zendikar|177|C|{2}{G}|Creature - Elf Druid|2|1|{T}: Add one mana of any color to your mana pool.| +Murasa Ranger|Battle for Zendikar|178|U|{3}{G}|Creature - Human Warrior|3|3|Landfall - Whenever a land enters the battlefield under your control, you may pay {3}{G}. IF you do, put two +1/+1 counters on Murasa Ranger.| +Natural Connection|Battle for Zendikar|179|C|{2}{G}|Instant|||Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.| Nissa's Renewal|Battle for Zendikar|180|R|{5}{G}|Sorcery|||Search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library. You gain 7 life.| -Oran-Rief Hydra|Battle for Zendikar|181|R|{4}{G}{G}|Creature - Hydra|5|5|Trample$Landfall - Whenever a land enters the battlefield under your control, put a +1/+1 counter on Oran-Rief Hydra. If that land is a Forest, put two +1/+1 counters on Oran-Rief Hydra instead.| -Retreat to Kazandu|Battle for Zendikar|186||U|{2}{G}|Enchantment|||Landfall-Whenever a land enters the battlefield under your control, choose one - Put a +1/+1 counter on target creature; or You gain 2 life.| -Scythe Leopard|Battle for Zendikar|188|U|{G}|Creature - Cat|1|1|Landfall-Whenever a land enters the battlefield under your control, Scythe Leopard gets +1/+1 until end of turn.| +Oran-Rief Hydra|Battle for Zendikar|181|R|{4}{G}{G}|Creature - Hydra|5|5|Trample$Landfall — Whenever a land enters the battlefield under your control, put a +1/+1 counter on Oran-Rief Hydra. If that land is a Forest, put two +1/+1 counters on Oran-Rief Hydra instead.| +Oran-Rief Invoker|Battle for Zendikar|182|C|{1}{G}|Creature - Human Shaman|2|2|{8}: Oran-Rief Invoker gets +5/+5 and gains trample until end of turn.| +Plated Crusher|Battle for Zendikar|183|U|{4}{G}{G}{G}|Creature - Beast|7|6|Trample, hexproof| +Plummet|Battle for Zendikar|184|C|{1}{G}|Instant|||Destroy target creature with flying.| +Reclaiming Vines|Battle for Zendikar|185|C|{2}{G}{G}|Sorcery|||Destroy target artifact, enchantment, or land.| +Retreat to Kazandu|Battle for Zendikar|186|U|{2}{G}|Enchantment|||Landfall — Whenever a land enters the battlefield under your control, choose one —$• Put a +1/+1 counter on target creature.$• You gain 2 life.| +Rot Shambler|Battle for Zendikar|187|U|{1}{G}|Creature - Fungus|1|1|Whenever another creature you control dies, put a +1/+1 counter on Rot Shambler.| +Scythe Leopard|Battle for Zendikar|188|U|{G}|Creature - Cat|1|1|Landfall — Whenever a land enters the battlefield under your control, Scythe Leopard gets +1/+1 until end of turn.| +Seek the Wilds|Battle for Zendikar|189|C|{1}{G}|Sorcery|||Look at the top four cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in any order.| +Snapping Gnarlid|Battle for Zendikar|190|C|{1}{G}|Creature - Beast|2|2|Landfall — Whenever a land enters the battlefield under your control, Snapping Gnarlid gets +1/+1 until end of turn.| +Swell of Growth|Battle for Zendikar|191|C|{1}{G}|Instant|||Target creature gets +2/+2 until end of turn. You may put a land card from your hand onto the battlefield.| Sylvan Scrying|Battle for Zendikar|192|U|{1}{G}|Sorcery|||Search your library for a land card, reveal it, and put it into your hand. Then shuffle your library.| -Tajuru Warcaller|Battle for Zendikar|195|U|{3}{G}{G}|Creature - Elf Warrior Ally|2|1|Rally-Whenever Tajuru Warcaller or another Ally enters the battlefield under your control, creatures you control get +2/+2 until end of turn.| -Undergrowth Champion|Battle for Zendikar|197|M|{1}{G}{G}|Creature - Elemental|2|2|If damage would be dealt to Undergrowth Champion while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from Undergrowth Champion.$Landfall-Whenever a land enters the battlefield under your control, put a +1/+1 counter on Undergrowth Champion.| -Woodland Wanderer|Battle for Zendikar|198|R|{3}{G}|Creature - Elemental|2|2|Vigilance, trample$Converge - Woodland Wanderer enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.| -Brood Butcher|Battle for Zendikar|199|R|{3}{B}{G}|Creature - Eldrazi Drone|3|3|Devoid (This card has no color.)$When Brood Butcher enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."${B}{G}, Sacrifice a creature: Target creature gets -2/-2 until end of turn.| -Brutal Expulsion|Battle for Zendikar|200|R|{2}{U}{R}|Instant|||Devoid (This card has no color.)$Choose one or both - Return target spell or creature to its owner's hand; or Brutal Expulsion deals 2 damage to target creature or planeswalker. If that permanent would be put into a graveyard this turn, exile it instead.| -Catacomb Sifter|Battle for Zendikar|201|U|{1}{B}{G}|Creature - Eldrazi Drone|2|3|Devoid (This card has no color.)$When Catacomb Sifter enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."$Whenever another creature you control dies, scry 1 (Look at the top card of your library. You may put that card on the bottom of your library.)| -Dust Stalker|Battle for Zendikar|202|R|{2}{B}{R}|Creautre - Eldrazi|5|3|Devoid (This card has no color.)$Haste$At the beginning of each end step, if you control no other colorless creatures, return Dust Stalker to its owner's hand.| -Fathom Feeder|Battle for Zendikar|203|R|{U}{B}|Creature - Eldrazi Drone|1|1|Devoid (This card has no color.)$Deathtouch$Ingest Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)${3}{U}{B}: Draw a card. Each opponent exiles the top card of his or her library.| -Forerunner of Slaughter|Battle for Zendikar|204|U|{B}{R}|Creature - Eldrazi Drone|3|2|Devoid (This card has no color.)${1}: Target colorless creature gains haste until end of turn.| -Herald of Kozilek|Battle for Zendikar|205|U|{1}{U}{R}|Creature - Eldrazi Drone|2|4|Devoid (This card has no color.)$Colorless spells you cast cost {1} less to cast.| -Ulamog's Nullifier|Battle for Zendikar|207|U|{2}{U}{B}|Creature - Eldrazi Processor|2|3|Devoid (This card has no color.)$Flash$Flying$When Ulamog's Nullifier enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, counter target spell.| +Tajuru Beastmaster|Battle for Zendikar|193|C|{5}{G}|Creature - Elf Warrior Ally|5|5|Rally - Whenever Tajuru Beastmaster or another Ally creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn.| +Tajuru Stalwart|Battle for Zendikar|194|C|{2}{G}|Creature - Elf Scout Ally|0|1|Converge - Tajuru Stalwart enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.| +Tajuru Warcaller|Battle for Zendikar|195|U|{3}{G}{G}|Creature - Elf Warrior Ally|2|1|Rally — Whenever Tajuru Warcaller or another Ally enters the battlefield under your control, creatures you control get +2/+2 until end of turn.| +Territorial Baloth|Battle for Zendikar|196|C|{4}{G}|Creature - Beast|4|4|Landfall - Whenever a land enters the battlefield under your control, Territorial Baloth gets +2/+2 until end of turn.| +Undergrowth Champion|Battle for Zendikar|197|M|{1}{G}{G}|Creature - Elemental|2|2|If damage would be dealt to Undergrowth Champion while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from Undergrowth Champion.$Landfall — Whenever a land enters the battlefield under your control, put a +1/+1 counter on Undergrowth Champion.| +Unnatural Aggression|Battle for Zendikar|168|C|{2}{G}|Instant|||Devoid (This card has no color.)$Target creature you control fights target creature an opponent controls. If the creature an opponent controls would die this turn, exile it instead.| +Void Attendant|Battle for Zendikar|169|U|{2}{G}|Creature - Eldrazi Processor|2|3|Devoid (This card has no color.)${1}{G}, Put a card an opponent owns from exile into that player's graveyard: Put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."| +Woodland Wanderer|Battle for Zendikar|198|R|{3}{G}|Creature - Elemental|2|2|Vigilance, trample$Converge — Woodland Wanderer enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.| Angelic Captain|Battle for Zendikar|208|R|{3}{R}{W}|Creature - Angel Ally|4|3|Flying$Whenever Angelic Captain attacks, it gets +1/+1 until end of turn for each other attacking Ally.| -Bring to Light|Battle for Zendikar|209|R|{3}{G}{U}|Sorcery|||Converge-Search your library for a creature, instant, or sorcery card with converted mana cost less than or equal to the number of colors of mana spent to cast Bring to Light, exile that card, then shuffle your library. You may cast that card without paying its mana cost.| +Bring to Light|Battle for Zendikar|209|R|{3}{G}{U}|Sorcery|||Converge — Search your library for a creature, instant, or sorcery card with converted mana cost less than or equal to the number of colors of mana spent to cast Bring to Light, exile that card, then shuffle your library. You may cast that card without paying its mana cost.| +Brood Butcher|Battle for Zendikar|199|R|{3}{B}{G}|Creature - Eldrazi Drone|3|3|Devoid (This card has no color.)$When Brood Butcher enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {1} to your mana pool."${B}{G}, Sacrifice a creature: Target creature gets -2/-2 until end of turn.| +Brutal Expulsion|Battle for Zendikar|200|R|{2}{U}{R}|Instant|||Devoid (This card has no color.)$Choose one or both —$• Return target spell or creature to its owner's hand.$• Brutal Expulsion deals 2 damage to target creature or planeswalker. If that permanent would be put into a graveyard this turn, exile it instead.| +Catacomb Sifter|Battle for Zendikar|201|U|{1}{B}{G}|Creature - Eldrazi Drone|2|3|Devoid (This card has no color.)$When Catacomb Sifter enters the battlefield, put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: add {1} to your mana pool."$Whenever another creature you control dies, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)| Drana's Emissary|Battle for Zendikar|210|U|{1}{W}{B}|Creature - Vampire Cleric Ally|2|2|Flying$At the beginning of your upkeep, each opponent loses 1 life and you gain 1 life.| -Grove Rumbler|Battle for Zendikar|211|U|{2}{R}{G}|Creature - Elemental|3|3|Trample$Landfall-Whenever a land enters the battlefield under your control, Grove Rumbler gets +2/+2 until end of turn.| -Grovetender Druids|Battle for Zendikar|212|U|{2}{G}{W}|Creature - Elf Druid Ally|3|3|Rally-Whenever Grovetender Druids or another Ally enters the battlefield under your control, you may pay {1}. If you do, put a 1/1 green Plant creature token onto the battlefield.| -Kiora, Master of the Depths|Battle for Zendikar|213|M|{2}{G}{U}|Planeswalker - Kiora|||+1: Untap up to one target creature and up to one target land.$-2: Reveal the top four cards of your library. You may put a creature card and/or a land card from among them into your hand. Put the rest into your graveyard.$-8: You get an emblem with "Whenever a creature enters the battlefield under your control, you may have it fight target creature." Then put three 8/8 blue Octopus creature tokens onto the battlefield.| -March from the Tomb|Battle for Zendikar|214|R|{3}{W}{B}|Sorcery|||Return any number of target Ally creature cards with total converted mana cost of 8 or less from your graveyard to the battlefield.| -Munda, Ambush Leader|Battle for Zendikar|215|R|{2}{R}{W}|Legendary Creature - Kor Ally|3|4|Haste$Rally-Whenever Munda, Ambush Leader or another Ally enters the battlefield under your control, you may look at the top four cards of your library. If you do, reveal any number of Ally cards from among them, then put those cards on top of your library in any order and the rest on the bottom in any order.| +Dust Stalker|Battle for Zendikar|202|R|{2}{B}{R}|Creature - Eldrazi|5|3|Devoid (This card has no color.)$Haste$At the beginning of each end step, if you control no other colorless creatures, return Dust Stalker to its owner's hand.| +Fathom Feeder|Battle for Zendikar|203|R|{U}{B}|Creature - Eldrazi Drone|1|1|Devoid (This creature has no color.)$Deathtouch$Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.)${3}{U}{B}: Draw a card. Each opponent exiles the top card of his or her library.| +Forerunner of Slaughter|Battle for Zendikar|204|U|{B}{R}|Creature - Eldrazi Drone|3|2|Devoid (This card has no color.)${1}: Target colorless creature gains haste until end of turn.| +Grove Rumbler|Battle for Zendikar|211|U|{2}{R}{G}|Creature - Elemental|3|3|Trample$Landfall — Whenever a land enters the battlefield under your control, Grove Rumbler gets +2/+2 until end of turn.| +Grovetender Druids|Battle for Zendikar|212|U|{2}{G}{W}|Creature - Elf Druid Ally|3|3|Rally — Whenever Grovetender Druids or another Ally enters the battlefield under your control, you may pay {1}. If you do, put a 1/1 green Plant creature token onto the battlefield.| +Herald of Kozilek|Battle for Zendikar|205|U|{1}{U}{R}|Creature - Eldrazi Drone|2|4|Devoid (This card has no color.)$Colorless spells you cast cost {1} less.| +Kiora, Master of the Depths|Battle for Zendikar|213|M|{2}{G}{U}|Planeswalker - Kiora|4|+1: Untap up to one target creature and up to one target land.$-2: Reveal the top four cards of your library. You may put a creature card and/or a land card from among them into your hand. Put the rest into your graveyard.$-8: You get an emblem with "Whenever a creature enters the battlefield under your control, you may have it fight target creature." Then put three 8/8 blue Octopus creature tokens onto the battlefield under your control.| +March from the Tomb|Battle for Zendikar|214|R|{3}{W}{B}|Sorcery|||Return any number of target Ally creature cards with total converted mana cost 8 or less from your graveyard to the battlefield.| +Munda, Ambush Leader|Battle for Zendikar|215|R|{2}{R}{W}|Legendary Creature - Kor Ally|3|4|Haste$Rally — Whenever Munda, Ambush Leader or another Ally enters the battlefield under you control, you may look at the top four cards of your library. If you do, reveal any number of Ally cards from among them, then put those cards on top of your library in any order and the rest on the bottom in any order.| Noyan Dar, Roil Shaper|Battle for Zendikar|216|R|{3}{W}{U}|Legendary Creature - Merfolk Ally|4|4|Whenever you cast an instant or sorcery spell, you may put three +1/+1 counters on target land you control. If you do, that land becomes a 0/0 Elemental creature with haste that's still a land.| -Omnath, Locus of Rage|Battle for Zendikar|217|M|{3}{R}{R}{G}{G}|Legendary Creature - Elemental|5|5|Landfall - Whenever a land enters the battlefield under your control, put a 5/5 red and green Elemental creature token onto the battlefield.$Whenever Omnath, Locus of Rage or another Elemental you control dies, Omnath deals 3 damage to target creature or player.| -Resolute Blademaster|Battle for Zendikar|218|U|{3}{R}{W}|Creature - Human Soldier Ally|2|2|Rally-Whenever Resolute Blademaster or another Ally enters the battlefield under your control, creatures you control gain double strike until end of turn.| -Roil Spout|Battle for Zendikar|219|U|{1}{W}{U}|Sorcery|||Put target creature on top of its owner's library.$Awaken 4-{4}{W}{U} (If you cast this spell for {4}{W}{U}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| -Skyrider Elf|Battle for Zendikar|220|U|{X}{G}{U}|Creature - Elf Warrior Ally|0|0|Flying$Converge-Skyrider Elf enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.| +Omnath, Locus of Rage|Battle for Zendikar|217|M|{3}{R}{R}{G}{G}|Legendary Creature - Elemental|5|5|Landfall — Whenever a land enters the battlefield under your control, put a 5/5 red and green Elemental creature token onto the battlefield.$Whenever Omnath, Locus of Rage or another Elemental you control dies, Omnath deals 3 damage to target creature or player.| +Resolute Blademaster|Battle for Zendikar|218|U|{3}{R}{W}|Creature - Human Soldier Ally|2|2|Rally — Whenever Resolute Blademaster or another Ally enters the battlefield under your control, creatures you control gain double strike until end of turn.| +Roil Spout|Battle for Zendikar|219|U|{1}{W}{U}|Sorcery|||Put target creature on top of its owner's library.$Awaken 4—{4}{W}{U} (If you cast this spell for {4}{W}{U}, also put four +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)| +Sire of Stagnation|Battle for Zendikar|206|M|{4}{U}{B}|Creature - Eldrazi|5|7|Devoid (This card has no color.)$Whenever a land enters the battlefield under an opponent's control, that player exiles the top two cards of his or her library and you draw two cards.| +Skyrider Elf|Battle for Zendikar|220|U|{X}{G}{U}|Creature - Elf Warrior Ally|0|0|Flying$Converge — Skyrider Elf enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.| +Ulamog's Nullifier|Battle for Zendikar|207|U|{2}{U}{B}|Creature - Eldrazi Processor|2|3|Devoid (This card has no color.)$Flash$Flying$When Ulamog's Nullifier enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, counter target spell.| Veteran Warleader|Battle for Zendikar|221|R|{1}{G}{W}|Creature - Human Soldier Ally|0|0|Veteran Warleader's power and toughness are each equal to the number of creatures you control.$Tap another untapped Ally you control: Veteran Warleader gains your choice of first strike, vigilance, or trample until end of turn.| -Aligned Hedron Network|Battle for Zendikar|222|R|{4}|Artifact|||When Aligned Hedron Network enters the battlefield, exile all creatures with power 5 or greater until Aligned Hedron Network leaves the battlefield. (Those creatures return under their owners' control.)| -Hedron Archive|Battle for Zendikar|223|U|{4}|Artifact|||{T}: Add {2} to your mana pool.${2}, {T}, Sacrifice Hedron Archive: Draw two cards.| -Ally Encampment|Battle for Zendikar|228|R||Land|||{T}: Add {1} to your mana pool.${T} Add one mana of any color to your mana pool. Spend this mana only to cast an Ally spell.${1}, {T}, Sacrifice Ally Encampment: Return target Ally you control to its owner's hand.| -Blighted Cataract|Battle for Zendikar|229|U||Land|||{T}: Add {1} to your mana pool.${5}{U}, {T}, Sacrifice Blighted Cataract: Draw two cards.| -Canopy Vista|Battle for Zendikar|234|R||Land - Forest Plains|||Canopy Vista enters the battlefield tapped unless you control two or more basic lands.| -Cinder Glade|Battle for Zendikar|235|R||Land - Mountain Forest|||Cinder Glade enters the battlefield tapped unless you control two or more basic lands.| +Aligned Hedron Network|Battle for Zendikar|222|R|{4}|Artifact|||When Aligned Hedron Network enters the battlefield, exile all creatures with power 5 or greater until Aligned Hedron Network leaves the battlefield. (Those creatures return under their owners' control.)| +Hedron Archive|Battle for Zendikar|223|U|{4}|Artifact|||{t}: Add {2} to your mana pool.${2}, {t}, Sacrifice Hedron Archive: Draw two cards.| +Hedron Blade|Battle for Zendikar|224|C|{1}|Artifact - Equipment|||Equipped creature gets +1/+1.$Whenever equipped creature becomes blocked by one or more colorless creatures, it gains deathtouch until end of turn. (Any amount of damage it deals to a creature is enough to destroy it.)$Equip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)| +Pathway Arrows|Battle for Zendikar|225|U|{1}|Artifact - Equipment|||Equipped creature has "{2}, {T}: This creature deals 1 damage to target creature. If a colorless creature is dealt damage this way, tap it."$Equip {2}| +Pilgrim's Eye|Battle for Zendikar|226|U|{3}|Artifact Creature - Thopter|1|1|Flying$When Pilgrim's Eye enters the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.| +Slab Hammer|Battle for Zendikar|227|U|{2}|Artifact - Equipment|||Whenever equipped creature attacks, you may return a land you control to its owner's hand. If you do, the creature gets +2/+2 until end of turn.$Equip {2}| +Ally Encampment|Battle for Zendikar|228|R||Land|||{t}: Add {1} to your mana pool.${t}: Add one mana of any color to your mana pool. Spend this mana only to cast an Ally spell.${1}, {t}, Sacrifice Ally Encampment: Return an Ally you control to its owner's hand.| +Blighted Cataract|Battle for Zendikar|229|U||Land|||{T}: Add {1} to your mana pool.${5}{U}, {T}, Sacrifice Blighted Cataract: Draw 2 cards.| +Blighted Fen|Battle for Zendikar|230|U||Land|||{T}: Add {1} to your mana pool.${4}{B}, {T}, Sacrifice Blighted Fen: Target opponent sacrifices a creature.| +Blighted Gorge|Battle for Zendikar|231|U||Land|||{T}: Add {1} to your mana pool.${4}{R}, {T}, Sacrifice Blighted Gorge: Blighted Gorge deals 2 damage to target creature or player.| +Blighted Steppe|Battle for Zendikar|232|U||Land|||{T}: Add {1} to your mana pool.${3}{W}, {T}, Sacrifice Blighted Steppe: You gain 2 life for each creature you control.| +Blighted Woodland|Battle for Zendikar|233|U||Land|||{T}: Add {1} to your mana pool.${3}{G}, {T}, Sacrifice Blighted Woodland: Search your library for up to two basic land cards and put them onto the battlefield tapped. Then shuffle your library.| +Canopy Vista|Battle for Zendikar|234|R||Land - Forest Plains|||({T}: Add {G} or {W} to your mana pool.)$Canopy Vista enters the battlefield tapped unless you control two or more basic lands.| +Cinder Glade|Battle for Zendikar|235|R||Land - Mountain Forest|||({T}: Add {R} or {G} to your mana pool.)$Cinder Glade enters the battlefield tapped unless you control two or more basic lands.| Evolving Wilds|Battle for Zendikar|236|C||Land|||{T}, Sacrifice Evolving Wilds: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.| -Fertile Thicket|Battle for Zendikar|237|C||Land|||Fertile Thicket enters the battlefield tapped.$When Fertile Thicket enters the battlefield, you may look at the top five cards of your library. If you do, reveal up to one basic land card from among them, then put that card on top of your library and the rest on the bottom in any order.| -Looming Spires|Battle for Zendikar|238|C||Land|||Looming Spires enters the battlefield tapped.$When Looming Spires enters the battlefield, target creature gets +1/+1 and gain first strike until end of turn.${T}: Add {R} to your mana pool.| -Lumbering Falls|Battle for Zendikar|239|R||Land|||Lumbering Falls enters the battlefield tapped.${T}: Add {G} or {U} to your mana pool.${2}{G}{U}: Lumbering Falls becomes a 3/3 green and blue Elemental creature with hexproof until end of turn. It's still a land.| +Fertile Thicket|Battle for Zendikar|237|C||Land|||Fertile Thicket enters the battlefield tapped.$When Fertile Thicket enters the battlefield, you may look at the top five cards of your library. If you do, reveal up to one basic land card from among them, then put that card on top of your library and the rest on the bottom in any order.${T}: Add {G} to your mana pool.| +Forest|Battle for Zendikar|273|L||Basic Land - Forest|||| +Forest|Battle for Zendikar|274|L||Basic Land - Forest|||| +Forest|Battle for Zendikar|272|L||Basic Land - Forest|||| +Forest|Battle for Zendikar|271|L||Basic Land - Forest|||| +Forest|Battle for Zendikar|270|L||Basic Land - Forest|||| +Island|Battle for Zendikar|258|L||Basic Land - Island|||({t}: Add {U} to yoru mana pool.)| +Island|Battle for Zendikar|259|L||Basic Land - Island|||({t}: Add {U} to your mana pool.)| +Island|Battle for Zendikar|256|L||Basic Land - Island|||({t}: Add {U} to your mana pool.)| +Island|Battle for Zendikar|257|L||Basic Land - Island|||({t}: Add {U} to your mana pool.)| +Island|Battle for Zendikar|255|L||Basic Land - Island|||({t}: Add {U} to your mana pool.)| +Looming Spires|Battle for Zendikar|238|C||Land|||Looming Spires enters the battlefield tapped.$When Looming Spires enters the battlefield, target creature gets +1/+1 and gains first strike until end of turn.${T}: Add {R} to your mana pool.| +Lumbering Falls|Battle for Zendikar|239|R||Land|||Lumbering falls enters the battlefield tapped.${t}: Add {G} or {U} to your mana pool.${2}{G}{U}: Lumbering Falls becomes a 3/3 green and blue Elemental creature with hexproof until end of turn. It's still a land.| Mortuary Mire|Battle for Zendikar|240|C||Land|||Mortuary Mire enters the battlefield tapped.$When Mortuary Mire enters the battlefield, you may put target creature card from your graveyard on top of your library.${T}: Add {B} to your mana pool.| -Prairie Stream|Battle for Zendikar|241|R||Land - Plains Island|||Prairie Stream enters the battlefield tapped unless you control two or more basic lands.| -Sanctum of Ugin|Battle for Zendikar|242|R||Land|||{T}: Add {1} to your mana pool.$Whenever you cast a colorless spell with converted mana costs 7 or greater, you may sacrifice Sanctum of Ugin. If you do, search your library for a colorless creature card, reveal it, put it into your hand, then shuffle your library.| +Mountain|Battle for Zendikar|265|L||Basic Land - Mountain|||| +Mountain|Battle for Zendikar|266|L||Basic Land - Mountain|||| +Mountain|Battle for Zendikar|267|L||Basic Land - Mountain|||| +Mountain|Battle for Zendikar|269|L||Basic Land - Mountain|||| +Mountain|Battle for Zendikar|268|L||Basic Land - Mountain|||| +Plains|Battle for Zendikar|250|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| +Plains|Battle for Zendikar|252|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| +Plains|Battle for Zendikar|253|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| +Plains|Battle for Zendikar|254|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| +Plains|Battle for Zendikar|251|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| +Prairie Stream|Battle for Zendikar|241|R||Land - Plains Island|||({T}: Add {W} or {U} to your mana pool.)$Prairie Stream enters the battlefield tapped unless you control two or more basic lands.| +Sanctum of Ugin|Battle for Zendikar|242|R||Land|||{T}: Add {1} to your mana pool.$Whenever you cast a colorless spell with converted mana cost 7 or greater, you may sacrifice Sanctum of Ugin. If you do, search your library for a colorless creature card, reveal it, put it into your hand, then shuffle your library.| Sandstone Bridge|Battle for Zendikar|243|C||Land|||Sandstone Bridge enters the battlefield tapped.$When Sandstone Bridge enters the battlefield, target creature gets +1/+1 and gains vigilance until end of turn.${T}: Add {W} to your mana pool.| -Shambling Vent|Battle for Zendikar|244|R||Land|||Shambling Vent enters the battlefield tapped.${T}: Add {W} or {B} to your mana pool.${1}{W}{B}: Shambling Vent becomes a 2/3 white and black Elemental creature with lifelink until end of turn. It's still a land.| -Shrine of the Forsaken Gods|Battle for Zendikar|245|R||Land|||{T}: Add {1} to your mana pool.${T}: Add {2} to your mana pool. Spend this mana only to cast colorless spells. Activate this ability only if you control seven or more lands.| +Shambling Vent|Battle for Zendikar|244|R||Land|||Shambling Vent enters the battlefield tapped.${T}: Add {W} or {B} to your mana pool.${1}{W}{B}: Shambling Vent becomes a 2/3 white and black elemental creature with lifelink until end of turn. It's still a land.| +Shrine of the Forsaken Gods|Battle for Zendikar|245|R||Land|||{t}: Add {1} to your mana pool.${t}: Add {2} to your mana pool. Spend this mana only to cast colorless spells. Activate this ability only if you control seven or more lands.| Skyline Cascade|Battle for Zendikar|246|C||Land|||Skyline Cascade enters the battlefield tapped.$When Skyline Cascade enters the battlefield, target creature an opponent controls doesn't untap during its controller's next untap step.${T}: Add {U} to your mana pool.| -Smoldering Marsh|Battle for Zendikar|247|R||Land - Swamp Mountain|||Smoldering Marsh enters the battlefield tapped unless you control two or more basic lands.| -Spawning Bed|Battle for Zendikar|248|U||Land|||{T}: Add {1} to your mana pool.${6}, {T}, Sacrifice Spawning Bed: Put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."| -Sunken Hollow|Battle for Zendikar|249|R||Land - Island Swamp|||Sunken Hollow enters the battlefield tapped unless you control two or more basic lands.| -Plains|Battle for Zendikar|250|L||Basic Land - Forest|||W| -Plains|Battle for Zendikar|251|L||Basic Land - Forest|||W| -Plains|Battle for Zendikar|252|L||Basic Land - Forest|||W| -Plains|Battle for Zendikar|253|L||Basic Land - Forest|||W| -Plains|Battle for Zendikar|254|L||Basic Land - Forest|||W| -Island|Battle for Zendikar|255|L||Basic Land - Forest|||U| -Island|Battle for Zendikar|256|L||Basic Land - Forest|||U| -Island|Battle for Zendikar|257|L||Basic Land - Forest|||U| -Island|Battle for Zendikar|258|L||Basic Land - Forest|||U| -Island|Battle for Zendikar|259|L||Basic Land - Forest|||U| -Swamp|Battle for Zendikar|260|L||Basic Land - Forest|||B| -Swamp|Battle for Zendikar|261|L||Basic Land - Forest|||B| -Swamp|Battle for Zendikar|262|L||Basic Land - Forest|||B| -Swamp|Battle for Zendikar|263|L||Basic Land - Forest|||B| -Swamp|Battle for Zendikar|264|L||Basic Land - Forest|||B| -Mountain|Battle for Zendikar|265|L||Basic Land - Forest|||R| -Mountain|Battle for Zendikar|266|L||Basic Land - Forest|||R| -Mountain|Battle for Zendikar|267|L||Basic Land - Forest|||R| -Mountain|Battle for Zendikar|268|L||Basic Land - Forest|||R| -Mountain|Battle for Zendikar|269|L||Basic Land - Forest|||R| -Forest|Battle for Zendikar|270|L||Basic Land - Forest|||G| -Forest|Battle for Zendikar|271|L||Basic Land - Forest|||G| -Forest|Battle for Zendikar|272|L||Basic Land - Forest|||G| -Forest|Battle for Zendikar|273|L||Basic Land - Forest|||G| -Forest|Battle for Zendikar|274|L||Basic Land - Forest|||G| \ No newline at end of file +Smoldering Marsh|Battle for Zendikar|247|R||Land - Swamp Mountain|||({T}: Add {B} or {R} to your mana pool.)$Smoldering Marsh enters the battlefield tapped unless you control two or more basic lands.| +Spawning Bed|Battle for Zendikar|248|U||Land|||{T}: Add {1} to your mana pool.${6}, {T}, Sacrifice Spawning Bed: Put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool."| +Sunken Hollow|Battle for Zendikar|249|R||Land - Island Swamp|||({T}: Add {U} or {B} to your mana pool.)$Sunken Hollow enters the battlefield tapped unless you control two or more basic lands.| +Swamp|Battle for Zendikar|263|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| +Swamp|Battle for Zendikar|262|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| +Swamp|Battle for Zendikar|264|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| +Swamp|Battle for Zendikar|260|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| +Swamp|Battle for Zendikar|261|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| \ No newline at end of file From 5118e4c22ce27f841c5d6736461a6d071bd0b0b7 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 18 Sep 2015 19:40:52 +0200 Subject: [PATCH 03/23] [BFZ] Added already implemented and simple cards (21 cards). --- .../sets/battleforzendikar/AltarsReap.java | 52 +++++++++++++++ .../sets/battleforzendikar/Anticipate.java | 52 +++++++++++++++ .../sets/battleforzendikar/BoneSplinters.java | 52 +++++++++++++++ .../battleforzendikar/BroodhunterWurm.java | 58 ++++++++++++++++ .../sets/battleforzendikar/CloudManta.java | 62 +++++++++++++++++ .../mage/sets/battleforzendikar/Dispel.java | 52 +++++++++++++++ .../sets/battleforzendikar/DutifulReturn.java | 52 +++++++++++++++ .../battleforzendikar/ExpeditionEnvoy.java | 60 +++++++++++++++++ .../battleforzendikar/FortifiedRampart.java | 62 +++++++++++++++++ .../battleforzendikar/GhostlySentinel.java | 66 +++++++++++++++++++ .../sets/battleforzendikar/GiantMantis.java | 52 +++++++++++++++ .../battleforzendikar/GoblinWarPaint.java | 52 +++++++++++++++ .../battleforzendikar/InspiredCharge.java | 52 +++++++++++++++ .../sets/battleforzendikar/KitesailScout.java | 63 ++++++++++++++++++ .../sets/battleforzendikar/PlatedCrusher.java | 65 ++++++++++++++++++ .../mage/sets/battleforzendikar/Plummet.java | 52 +++++++++++++++ .../sets/battleforzendikar/ShadowGlider.java | 63 ++++++++++++++++++ .../ShatterskullRecruit.java | 64 ++++++++++++++++++ .../battleforzendikar/SmiteTheMonstrous.java | 52 +++++++++++++++ .../battleforzendikar/TerritorialBaloth.java | 52 +++++++++++++++ .../battleforzendikar/VestigeOfEmrakul.java | 66 +++++++++++++++++++ 21 files changed, 1201 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/AltarsReap.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/Anticipate.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BoneSplinters.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BroodhunterWurm.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CloudManta.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/Dispel.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/DutifulReturn.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/GhostlySentinel.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/GiantMantis.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/GoblinWarPaint.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/PlatedCrusher.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/Plummet.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ShatterskullRecruit.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SmiteTheMonstrous.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TerritorialBaloth.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/VestigeOfEmrakul.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AltarsReap.java b/Mage.Sets/src/mage/sets/battleforzendikar/AltarsReap.java new file mode 100644 index 00000000000..6af209c70a5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AltarsReap.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class AltarsReap extends mage.sets.innistrad.AltarsReap { + + public AltarsReap(UUID ownerId) { + super(ownerId); + this.cardNumber = 103; + this.expansionSetCode = "BFZ"; + } + + public AltarsReap(final AltarsReap card) { + super(card); + } + + @Override + public AltarsReap copy() { + return new AltarsReap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/Anticipate.java b/Mage.Sets/src/mage/sets/battleforzendikar/Anticipate.java new file mode 100644 index 00000000000..820a17c2723 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/Anticipate.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class Anticipate extends mage.sets.dragonsoftarkir.Anticipate { + + public Anticipate(UUID ownerId) { + super(ownerId); + this.cardNumber = 69; + this.expansionSetCode = "BFZ"; + } + + public Anticipate(final Anticipate card) { + super(card); + } + + @Override + public Anticipate copy() { + return new Anticipate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BoneSplinters.java b/Mage.Sets/src/mage/sets/battleforzendikar/BoneSplinters.java new file mode 100644 index 00000000000..275ba4d99d0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BoneSplinters.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class BoneSplinters extends mage.sets.shardsofalara.BoneSplinters { + + public BoneSplinters(UUID ownerId) { + super(ownerId); + this.cardNumber = 105; + this.expansionSetCode = "BFZ"; + } + + public BoneSplinters(final BoneSplinters card) { + super(card); + } + + @Override + public BoneSplinters copy() { + return new BoneSplinters(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BroodhunterWurm.java b/Mage.Sets/src/mage/sets/battleforzendikar/BroodhunterWurm.java new file mode 100644 index 00000000000..59dcb212687 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BroodhunterWurm.java @@ -0,0 +1,58 @@ +/* + * 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.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class BroodhunterWurm extends CardImpl { + + public BroodhunterWurm(UUID ownerId) { + super(ownerId, 171, "Broodhunter Wurm", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Wurm"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + } + + public BroodhunterWurm(final BroodhunterWurm card) { + super(card); + } + + @Override + public BroodhunterWurm copy() { + return new BroodhunterWurm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CloudManta.java b/Mage.Sets/src/mage/sets/battleforzendikar/CloudManta.java new file mode 100644 index 00000000000..6771fb73cdb --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CloudManta.java @@ -0,0 +1,62 @@ +/* + * 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.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class CloudManta extends CardImpl { + + public CloudManta(UUID ownerId) { + super(ownerId, 71, "Cloud Manta", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Fish"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + } + + public CloudManta(final CloudManta card) { + super(card); + } + + @Override + public CloudManta copy() { + return new CloudManta(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/Dispel.java b/Mage.Sets/src/mage/sets/battleforzendikar/Dispel.java new file mode 100644 index 00000000000..7a408452173 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/Dispel.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class Dispel extends mage.sets.worldwake.Dispel { + + public Dispel(UUID ownerId) { + super(ownerId); + this.cardNumber = 76; + this.expansionSetCode = "BFZ"; + } + + public Dispel(final Dispel card) { + super(card); + } + + @Override + public Dispel copy() { + return new Dispel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/DutifulReturn.java b/Mage.Sets/src/mage/sets/battleforzendikar/DutifulReturn.java new file mode 100644 index 00000000000..16f15a891a4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/DutifulReturn.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class DutifulReturn extends mage.sets.khansoftarkir.DutifulReturn { + + public DutifulReturn(UUID ownerId) { + super(ownerId); + this.cardNumber = 110; + this.expansionSetCode = "BFZ"; + } + + public DutifulReturn(final DutifulReturn card) { + super(card); + } + + @Override + public DutifulReturn copy() { + return new DutifulReturn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java b/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java new file mode 100644 index 00000000000..e48615cc187 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java @@ -0,0 +1,60 @@ +/* + * 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.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ExpeditionEnvoy extends CardImpl { + + public ExpeditionEnvoy(UUID ownerId) { + super(ownerId, 024, "Expedition Envoy", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Scout"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + } + + public ExpeditionEnvoy(final ExpeditionEnvoy card) { + super(card); + } + + @Override + public ExpeditionEnvoy copy() { + return new ExpeditionEnvoy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java b/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java new file mode 100644 index 00000000000..81ce7972850 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java @@ -0,0 +1,62 @@ +/* + * 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.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class FortifiedRampart extends CardImpl { + + public FortifiedRampart(UUID ownerId) { + super(ownerId, 027, "Fortified Rampart", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Wall"); + this.power = new MageInt(0); + this.toughness = new MageInt(6); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + } + + public FortifiedRampart(final FortifiedRampart card) { + super(card); + } + + @Override + public FortifiedRampart copy() { + return new FortifiedRampart(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/GhostlySentinel.java b/Mage.Sets/src/mage/sets/battleforzendikar/GhostlySentinel.java new file mode 100644 index 00000000000..c9397deeb45 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/GhostlySentinel.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.keyword.FlyingAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class GhostlySentinel extends CardImpl { + + public GhostlySentinel(UUID ownerId) { + super(ownerId, 28, "Ghostly Sentinel", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Spirit"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + } + + public GhostlySentinel(final GhostlySentinel card) { + super(card); + } + + @Override + public GhostlySentinel copy() { + return new GhostlySentinel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/GiantMantis.java b/Mage.Sets/src/mage/sets/battleforzendikar/GiantMantis.java new file mode 100644 index 00000000000..02586302d79 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/GiantMantis.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class GiantMantis extends mage.sets.mirage.GiantMantis { + + public GiantMantis(UUID ownerId) { + super(ownerId); + this.cardNumber = 173; + this.expansionSetCode = "BFZ"; + } + + public GiantMantis(final GiantMantis card) { + super(card); + } + + @Override + public GiantMantis copy() { + return new GiantMantis(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/GoblinWarPaint.java b/Mage.Sets/src/mage/sets/battleforzendikar/GoblinWarPaint.java new file mode 100644 index 00000000000..454e583840b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/GoblinWarPaint.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class GoblinWarPaint extends mage.sets.zendikar.GoblinWarPaint { + + public GoblinWarPaint(UUID ownerId) { + super(ownerId); + this.cardNumber = 146; + this.expansionSetCode = "BFZ"; + } + + public GoblinWarPaint(final GoblinWarPaint card) { + super(card); + } + + @Override + public GoblinWarPaint copy() { + return new GoblinWarPaint(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java b/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java new file mode 100644 index 00000000000..057788a5971 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class InspiredCharge extends mage.sets.magic2011.InspiredCharge { + + public InspiredCharge(UUID ownerId) { + super(ownerId); + this.cardNumber = 032; + this.expansionSetCode = "BFZ"; + } + + public InspiredCharge(final InspiredCharge card) { + super(card); + } + + @Override + public InspiredCharge copy() { + return new InspiredCharge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java b/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java new file mode 100644 index 00000000000..999ff2d0c55 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.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.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class KitesailScout extends CardImpl { + + public KitesailScout(UUID ownerId) { + super(ownerId, 033, "Kitesail Scout", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Scout"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + } + + public KitesailScout(final KitesailScout card) { + super(card); + } + + @Override + public KitesailScout copy() { + return new KitesailScout(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/PlatedCrusher.java b/Mage.Sets/src/mage/sets/battleforzendikar/PlatedCrusher.java new file mode 100644 index 00000000000..cb0d151b5ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/PlatedCrusher.java @@ -0,0 +1,65 @@ +/* + * 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.keyword.TrampleAbility; +import mage.abilities.keyword.HexproofAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class PlatedCrusher extends CardImpl { + + public PlatedCrusher(UUID ownerId) { + super(ownerId, 183, "Plated Crusher", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}{G}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Beast"); + this.power = new MageInt(7); + this.toughness = new MageInt(6); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Hexproof + this.addAbility(HexproofAbility.getInstance()); + } + + public PlatedCrusher(final PlatedCrusher card) { + super(card); + } + + @Override + public PlatedCrusher copy() { + return new PlatedCrusher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/Plummet.java b/Mage.Sets/src/mage/sets/battleforzendikar/Plummet.java new file mode 100644 index 00000000000..a1aad2c25e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/Plummet.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class Plummet extends mage.sets.magic2011.Plummet { + + public Plummet(UUID ownerId) { + super(ownerId); + this.cardNumber = 184; + this.expansionSetCode = "BFZ"; + } + + public Plummet(final Plummet card) { + super(card); + } + + @Override + public Plummet copy() { + return new Plummet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java b/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java new file mode 100644 index 00000000000..0f7f9c83a69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.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.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ShadowGlider extends CardImpl { + + public ShadowGlider(UUID ownerId) { + super(ownerId, 047, "Shadow Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Soldier"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + } + + public ShadowGlider(final ShadowGlider card) { + super(card); + } + + @Override + public ShadowGlider copy() { + return new ShadowGlider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ShatterskullRecruit.java b/Mage.Sets/src/mage/sets/battleforzendikar/ShatterskullRecruit.java new file mode 100644 index 00000000000..b60833dab6a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ShatterskullRecruit.java @@ -0,0 +1,64 @@ +/* + * 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.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ShatterskullRecruit extends CardImpl { + + public ShatterskullRecruit(UUID ownerId) { + super(ownerId, 155, "Shatterskull Recruit", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Giant"); + this.subtype.add("Warrior"); + this.subtype.add("Ally"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Menace + this.addAbility(new MenaceAbility()); + } + + public ShatterskullRecruit(final ShatterskullRecruit card) { + super(card); + } + + @Override + public ShatterskullRecruit copy() { + return new ShatterskullRecruit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SmiteTheMonstrous.java b/Mage.Sets/src/mage/sets/battleforzendikar/SmiteTheMonstrous.java new file mode 100644 index 00000000000..3599031904a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SmiteTheMonstrous.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class SmiteTheMonstrous extends mage.sets.innistrad.SmiteTheMonstrous { + + public SmiteTheMonstrous(UUID ownerId) { + super(ownerId); + this.cardNumber = 49; + this.expansionSetCode = "BFZ"; + } + + public SmiteTheMonstrous(final SmiteTheMonstrous card) { + super(card); + } + + @Override + public SmiteTheMonstrous copy() { + return new SmiteTheMonstrous(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TerritorialBaloth.java b/Mage.Sets/src/mage/sets/battleforzendikar/TerritorialBaloth.java new file mode 100644 index 00000000000..11c2e194b31 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TerritorialBaloth.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author LevelX2 + */ +public class TerritorialBaloth extends mage.sets.zendikar.TerritorialBaloth { + + public TerritorialBaloth(UUID ownerId) { + super(ownerId); + this.cardNumber = 196; + this.expansionSetCode = "BFZ"; + } + + public TerritorialBaloth(final TerritorialBaloth card) { + super(card); + } + + @Override + public TerritorialBaloth copy() { + return new TerritorialBaloth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VestigeOfEmrakul.java b/Mage.Sets/src/mage/sets/battleforzendikar/VestigeOfEmrakul.java new file mode 100644 index 00000000000..3f49bcfc75c --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VestigeOfEmrakul.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.keyword.DevoidAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class VestigeOfEmrakul extends CardImpl { + + public VestigeOfEmrakul(UUID ownerId) { + super(ownerId, 136, "Vestige of Emrakul", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Trample + this.addAbility(TrampleAbility.getInstance()); + } + + public VestigeOfEmrakul(final VestigeOfEmrakul card) { + super(card); + } + + @Override + public VestigeOfEmrakul copy() { + return new VestigeOfEmrakul(this); + } +} From 030b72b29394317bf24252d67496ec9eaf7d3663 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 18 Sep 2015 20:21:39 +0200 Subject: [PATCH 04/23] [BFZ] Added missing land and artifacts (4 cards). --- .../sets/battleforzendikar/BlightedFen.java | 76 ++++++++++ .../sets/battleforzendikar/BlightedGorge.java | 2 +- .../sets/battleforzendikar/HedronBlade.java | 131 ++++++++++++++++++ .../sets/battleforzendikar/PathwayArrows.java | 112 +++++++++++++++ .../sets/battleforzendikar/SlabHammer.java | 79 +++++++++++ .../sets/scarsofmirrodin/ArgentumArmor.java | 20 +-- 6 files changed, 411 insertions(+), 9 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BlightedFen.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/HedronBlade.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/PathwayArrows.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SlabHammer.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BlightedFen.java b/Mage.Sets/src/mage/sets/battleforzendikar/BlightedFen.java new file mode 100644 index 00000000000..253e3d337c9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BlightedFen.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.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.SacrificeEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public class BlightedFen extends CardImpl { + + public BlightedFen(UUID ownerId) { + super(ownerId, 230, "Blighted Fen", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "BFZ"; + + // {T}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {4}{B}, {T}, Sacrifice Blighted Fen: Target opponent sacrifices a creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new SacrificeEffect(new FilterCreaturePermanent(), 1, "Target opponent"), + new ManaCostsImpl<>("{4}{B}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public BlightedFen(final BlightedFen card) { + super(card); + } + + @Override + public BlightedFen copy() { + return new BlightedFen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BlightedGorge.java b/Mage.Sets/src/mage/sets/battleforzendikar/BlightedGorge.java index f1e27410aea..b67954fd390 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/BlightedGorge.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BlightedGorge.java @@ -57,7 +57,7 @@ public class BlightedGorge extends CardImpl { // {4}{R}, {T}, Sacrifice Blighted Gorge: Blighted Gorge deals 2 damage to target creature or player. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), - new ManaCostsImpl<>("{3}{R}")); + new ManaCostsImpl<>("{4}{R}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCreatureOrPlayer()); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/HedronBlade.java b/Mage.Sets/src/mage/sets/battleforzendikar/HedronBlade.java new file mode 100644 index 00000000000..a91a6049a96 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/HedronBlade.java @@ -0,0 +1,131 @@ +/* + * 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.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; + +/** + * + * @author LevelX2 + */ +public class HedronBlade extends CardImpl { + + public HedronBlade(UUID ownerId) { + super(ownerId, 224, "Hedron Blade", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{1}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Equipment"); + + // Equipped creature gets +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1))); + + // Whenever equipped creature becomes blocked by one or more colorless creatures, it gains deathtouch until end of turn. + this.addAbility(new HedronBladeTriggeredAbility( + new GainAbilityAttachedEffect(DeathtouchAbility.getInstance(), AttachmentType.EQUIPMENT, Duration.EndOfTurn))); + + // Equip {2} + this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2))); + } + + public HedronBlade(final HedronBlade card) { + super(card); + } + + @Override + public HedronBlade copy() { + return new HedronBlade(this); + } +} + +class HedronBladeTriggeredAbility extends TriggeredAbilityImpl { + + HedronBladeTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect, false); + } + + HedronBladeTriggeredAbility(final HedronBladeTriggeredAbility ability) { + super(ability); + } + + @Override + public HedronBladeTriggeredAbility copy() { + return new HedronBladeTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DECLARED_BLOCKERS; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent equipment = game.getPermanentOrLKIBattlefield((this.getSourceId())); + if (equipment != null && equipment.getAttachedTo() != null) { + Permanent equippedPermanent = game.getPermanentOrLKIBattlefield((equipment.getAttachedTo())); + if (equippedPermanent != null) { + if (equippedPermanent.isAttacking()) { + for (CombatGroup group : game.getCombat().getGroups()) { + if (group.getAttackers().contains(equippedPermanent.getId())) { + for (UUID blockerId : group.getBlockers()) { + Permanent blocker = game.getPermanent(blockerId); + if (blocker != null && blocker.getColor(game).isColorless()) { + return true; + } + } + } + } + } + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever equipped creature becomes blocked by one or more colorless creatures, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/PathwayArrows.java b/Mage.Sets/src/mage/sets/battleforzendikar/PathwayArrows.java new file mode 100644 index 00000000000..ae0a741649f --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/PathwayArrows.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.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class PathwayArrows extends CardImpl { + + public PathwayArrows(UUID ownerId) { + super(ownerId, 225, "Pathway Arrows", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{1}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Equipment"); + + // Equipped creature has "{2}, {T}: This creature deals 1 damage to target creature. If a colorless creature is dealt damage this way, tap it." + SimpleActivatedAbility ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PathwayArrowsEffect(), new GenericManaCost(2)); + ability2.addCost(new TapSourceCost()); + ability2.addTarget(new TargetCreaturePermanent()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability2, AttachmentType.EQUIPMENT))); + + // Equip {2} + this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2))); + } + + public PathwayArrows(final PathwayArrows card) { + super(card); + } + + @Override + public PathwayArrows copy() { + return new PathwayArrows(this); + } +} + +class PathwayArrowsEffect extends OneShotEffect { + + public PathwayArrowsEffect() { + super(Outcome.Benefit); + this.staticText = "This creature deals 1 damage to target creature. If a colorless creature is dealt damage this way, tap it"; + } + + public PathwayArrowsEffect(final PathwayArrowsEffect effect) { + super(effect); + } + + @Override + public PathwayArrowsEffect copy() { + return new PathwayArrowsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (targetCreature != null) { + int damageDealt = targetCreature.damage(1, source.getSourceId(), game, false, true); + if (damageDealt > 0 && targetCreature.getColor(game).isColorless()) { + targetCreature.tap(game); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SlabHammer.java b/Mage.Sets/src/mage/sets/battleforzendikar/SlabHammer.java new file mode 100644 index 00000000000..31b09aed229 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SlabHammer.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.abilities.Ability; +import mage.abilities.common.AttacksAttachedTriggeredAbility; +import mage.abilities.costs.common.ReturnToHandTargetPermanentCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author LevelX2 + */ +public class SlabHammer extends CardImpl { + + public SlabHammer(UUID ownerId) { + super(ownerId, 227, "Slab Hammer", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Equipment"); + + // Whenever equipped creature attacks, you may return a land you control to its owner's hand. If you do, the creature gets +2/+2 until end of turn. + Ability ability = new AttacksAttachedTriggeredAbility( + new DoIfCostPaid(new BoostEquippedEffect(2, 2, Duration.EndOfTurn), + new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(new FilterControlledLandPermanent())), + "Return a land you control to its owner's hand? (giving +2/+2 to the equipped creature)")); + ability.addTarget(new TargetPermanent()); + this.addAbility(ability); + + // Equip {2} + this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2))); + + } + + public SlabHammer(final SlabHammer card) { + super(card); + } + + @Override + public SlabHammer copy() { + return new SlabHammer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentumArmor.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentumArmor.java index bcf45fb822a..3063cec871f 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentumArmor.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentumArmor.java @@ -25,23 +25,21 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets.scarsofmirrodin; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.common.AttacksAttachedTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.keyword.EquipAbility; import mage.cards.CardImpl; +import mage.constants.CardType; import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.target.TargetPermanent; /** @@ -50,18 +48,24 @@ import mage.target.TargetPermanent; */ public class ArgentumArmor extends CardImpl { - public ArgentumArmor (UUID ownerId) { + public ArgentumArmor(UUID ownerId) { super(ownerId, 137, "Argentum Armor", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{6}"); this.expansionSetCode = "SOM"; this.subtype.add("Equipment"); + + // Equipped creature gets +6/+6. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(6, 6))); + + // Whenever equipped creature attacks, destroy target permanent. Ability ability = new AttacksAttachedTriggeredAbility(new DestroyTargetEffect()); ability.addTarget(new TargetPermanent()); this.addAbility(ability); + + // Equip {6} this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(6))); } - public ArgentumArmor (final ArgentumArmor card) { + public ArgentumArmor(final ArgentumArmor card) { super(card); } From cf12430787bc857302904b1fe43ccf6cec05276b Mon Sep 17 00:00:00 2001 From: odowdb Date: Fri, 18 Sep 2015 15:17:39 -0400 Subject: [PATCH 05/23] Fix for Dredge tooltip reporting incorrect number of cards --- Mage/src/mage/abilities/keyword/DredgeAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/keyword/DredgeAbility.java b/Mage/src/mage/abilities/keyword/DredgeAbility.java index afed19ef46b..44ff99b07ff 100644 --- a/Mage/src/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/mage/abilities/keyword/DredgeAbility.java @@ -71,7 +71,7 @@ class DredgeEffect extends ReplacementEffectImpl { super(Duration.WhileInGraveyard, Outcome.ReturnToHand); this.amount = value; this.staticText = new StringBuilder("Dredge ").append(Integer.toString(value)) - .append(" (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); + .append(" (If you would draw a card, instead you may put exactly " + value + " card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); } public DredgeEffect(final DredgeEffect effect) { From 3c840db8716309b19bd3d2855e599d8a914dd35b Mon Sep 17 00:00:00 2001 From: hanasu Date: Fri, 18 Sep 2015 15:22:27 -0400 Subject: [PATCH 06/23] [LEG] Implemented 3 cards --- .../mage/sets/legends/GhostsOfTheDamned.java | 52 ++++++++++ .../src/mage/sets/legends/PixieQueen.java | 76 +++++++++++++++ .../src/mage/sets/legends/StormSeeker.java | 52 ++++++++++ .../mage/sets/mastersedition/StormSeeker.java | 95 +++++++++++++++++++ .../masterseditioniii/GhostsOfTheDamned.java | 70 ++++++++++++++ 5 files changed, 345 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/legends/GhostsOfTheDamned.java create mode 100644 Mage.Sets/src/mage/sets/legends/PixieQueen.java create mode 100644 Mage.Sets/src/mage/sets/legends/StormSeeker.java create mode 100644 Mage.Sets/src/mage/sets/mastersedition/StormSeeker.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniii/GhostsOfTheDamned.java diff --git a/Mage.Sets/src/mage/sets/legends/GhostsOfTheDamned.java b/Mage.Sets/src/mage/sets/legends/GhostsOfTheDamned.java new file mode 100644 index 00000000000..3f713ceaa40 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/GhostsOfTheDamned.java @@ -0,0 +1,52 @@ +/* + * 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.legends; + +import java.util.UUID; + +/** + * + * @author hanasu + */ +public class GhostsOfTheDamned extends mage.sets.masterseditioniii.GhostsOfTheDamned { + + public GhostsOfTheDamned(UUID ownerId) { + super(ownerId); + this.cardNumber = 12; + this.expansionSetCode = "LEG"; + } + + public GhostsOfTheDamned(final GhostsOfTheDamned card) { + super(card); + } + + @Override + public GhostsOfTheDamned copy() { + return new GhostsOfTheDamned(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/PixieQueen.java b/Mage.Sets/src/mage/sets/legends/PixieQueen.java new file mode 100644 index 00000000000..1bfe612f28b --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/PixieQueen.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.legends; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.FlyingAbility; +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 hanasu + */ +public class PixieQueen extends CardImpl { + + public PixieQueen(UUID ownerId) { + super(ownerId, 110, "Pixie Queen", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "LEG"; + this.subtype.add("Faerie"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {G}{G}{G}, {tap}: Target creature gains flying until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{G}{G}{G}")); + ability.addTarget(new TargetCreaturePermanent()); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public PixieQueen(final PixieQueen card) { + super(card); + } + + @Override + public PixieQueen copy() { + return new PixieQueen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/StormSeeker.java b/Mage.Sets/src/mage/sets/legends/StormSeeker.java new file mode 100644 index 00000000000..53dd9ddc226 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/StormSeeker.java @@ -0,0 +1,52 @@ +/* + * 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.legends; + +import java.util.UUID; + +/** + * + * @author hanasu + */ +public class StormSeeker extends mage.sets.mastersedition.StormSeeker { + + public StormSeeker(UUID ownerId) { + super(ownerId); + this.cardNumber = 119; + this.expansionSetCode = "LEG"; + } + + public StormSeeker(final StormSeeker card) { + super(card); + } + + @Override + public StormSeeker copy() { + return new StormSeeker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mastersedition/StormSeeker.java b/Mage.Sets/src/mage/sets/mastersedition/StormSeeker.java new file mode 100644 index 00000000000..d2aca3cc6b1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/StormSeeker.java @@ -0,0 +1,95 @@ +/* + * 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.mastersedition; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +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.game.Game; +import mage.players.Player; +import mage.target.TargetPlayer; + +/** + * + * @author hanasu + */ +public class StormSeeker extends CardImpl { + + public StormSeeker(UUID ownerId) { + super(ownerId, 132, "Storm Seeker", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{G}"); + this.expansionSetCode = "MED"; + + // Storm Seeker deals damage to target player equal to the number of cards in that player's hand. + Effect effect = new DamageTargetEffect(new TargetPlayerCardsInHandCount()); + effect.setText("{this} deals damage to target player equal to the number of cards in that player's hand."); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetPlayer()); + } + + public StormSeeker(final StormSeeker card) { + super(card); + } + + @Override + public StormSeeker copy() { + return new StormSeeker(this); + } +} + +class TargetPlayerCardsInHandCount implements DynamicValue { + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + Player targetPlayer = game.getPlayer(sourceAbility.getFirstTarget()); + if (targetPlayer != null) { + return targetPlayer.getHand().size(); + } + + return 0; + } + + @Override + public DynamicValue copy() { + return new TargetPlayerCardsInHandCount(); + } + + @Override + public String toString() { + return "1"; + } + + @Override + public String getMessage() { + return "target player's cards in hand"; + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/GhostsOfTheDamned.java b/Mage.Sets/src/mage/sets/masterseditioniii/GhostsOfTheDamned.java new file mode 100644 index 00000000000..e2d6369df47 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/GhostsOfTheDamned.java @@ -0,0 +1,70 @@ +/* + * 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.masterseditioniii; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +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 hanasu + */ +public class GhostsOfTheDamned extends CardImpl { + + public GhostsOfTheDamned(UUID ownerId) { + super(ownerId, 68, "Ghosts of the Damned", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + this.expansionSetCode = "ME3"; + this.subtype.add("Spirit"); + this.power = new MageInt(0); + this.toughness = new MageInt(2); + + // {tap}: Target creature gets -1/-0 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-1, 0, Duration.EndOfTurn), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public GhostsOfTheDamned(final GhostsOfTheDamned card) { + super(card); + } + + @Override + public GhostsOfTheDamned copy() { + return new GhostsOfTheDamned(this); + } +} From 37d4acff2e89480b033972822327c7988826fc81 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Sep 2015 15:36:03 -0400 Subject: [PATCH 07/23] Revert "Fix for Dredge tooltip reporting incorrect number of cards" This reverts commit cf12430787bc857302904b1fe43ccf6cec05276b. Incorrect username on commit. --- Mage/src/mage/abilities/keyword/DredgeAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/keyword/DredgeAbility.java b/Mage/src/mage/abilities/keyword/DredgeAbility.java index 44ff99b07ff..afed19ef46b 100644 --- a/Mage/src/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/mage/abilities/keyword/DredgeAbility.java @@ -71,7 +71,7 @@ class DredgeEffect extends ReplacementEffectImpl { super(Duration.WhileInGraveyard, Outcome.ReturnToHand); this.amount = value; this.staticText = new StringBuilder("Dredge ").append(Integer.toString(value)) - .append(" (If you would draw a card, instead you may put exactly " + value + " card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); + .append(" (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); } public DredgeEffect(final DredgeEffect effect) { From 85e71fa162e6248ebd79ec800e9f66d6cd68de70 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Sep 2015 15:38:34 -0400 Subject: [PATCH 08/23] Fixed issue with Dredge reminder text always indicating three cards --- Mage/src/mage/abilities/keyword/DredgeAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/keyword/DredgeAbility.java b/Mage/src/mage/abilities/keyword/DredgeAbility.java index afed19ef46b..44ff99b07ff 100644 --- a/Mage/src/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/mage/abilities/keyword/DredgeAbility.java @@ -71,7 +71,7 @@ class DredgeEffect extends ReplacementEffectImpl { super(Duration.WhileInGraveyard, Outcome.ReturnToHand); this.amount = value; this.staticText = new StringBuilder("Dredge ").append(Integer.toString(value)) - .append(" (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); + .append(" (If you would draw a card, instead you may put exactly " + value + " card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); } public DredgeEffect(final DredgeEffect effect) { From 899e2921f0a0ed8cc0fcff7b5fc0f75413579c28 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Sep 2015 15:39:43 -0400 Subject: [PATCH 09/23] Revert "Fixed issue with Dredge reminder text always indicating three cards" This reverts commit 85e71fa162e6248ebd79ec800e9f66d6cd68de70. Username incorrectly specified. --- Mage/src/mage/abilities/keyword/DredgeAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/keyword/DredgeAbility.java b/Mage/src/mage/abilities/keyword/DredgeAbility.java index 44ff99b07ff..afed19ef46b 100644 --- a/Mage/src/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/mage/abilities/keyword/DredgeAbility.java @@ -71,7 +71,7 @@ class DredgeEffect extends ReplacementEffectImpl { super(Duration.WhileInGraveyard, Outcome.ReturnToHand); this.amount = value; this.staticText = new StringBuilder("Dredge ").append(Integer.toString(value)) - .append(" (If you would draw a card, instead you may put exactly " + value + " card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); + .append(" (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); } public DredgeEffect(final DredgeEffect effect) { From 04f6686ff5e4765bb88525eb86443f65a6536b7b Mon Sep 17 00:00:00 2001 From: hanasu Date: Fri, 18 Sep 2015 15:42:08 -0400 Subject: [PATCH 10/23] Fixed issue with Dredge ability reminder text having wrong number of cards --- Mage/src/mage/abilities/keyword/DredgeAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/keyword/DredgeAbility.java b/Mage/src/mage/abilities/keyword/DredgeAbility.java index afed19ef46b..44ff99b07ff 100644 --- a/Mage/src/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/mage/abilities/keyword/DredgeAbility.java @@ -71,7 +71,7 @@ class DredgeEffect extends ReplacementEffectImpl { super(Duration.WhileInGraveyard, Outcome.ReturnToHand); this.amount = value; this.staticText = new StringBuilder("Dredge ").append(Integer.toString(value)) - .append(" (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); + .append(" (If you would draw a card, instead you may put exactly " + value + " card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); } public DredgeEffect(final DredgeEffect effect) { From c1ff3c2927d165e3242f1e04a3db0bd5d697148b Mon Sep 17 00:00:00 2001 From: hanasu Date: Fri, 18 Sep 2015 15:51:34 -0400 Subject: [PATCH 11/23] Fixed issue with Dredge rules text where it always read "three cards" --- Mage/src/mage/abilities/keyword/DredgeAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/mage/abilities/keyword/DredgeAbility.java b/Mage/src/mage/abilities/keyword/DredgeAbility.java index afed19ef46b..44ff99b07ff 100644 --- a/Mage/src/mage/abilities/keyword/DredgeAbility.java +++ b/Mage/src/mage/abilities/keyword/DredgeAbility.java @@ -71,7 +71,7 @@ class DredgeEffect extends ReplacementEffectImpl { super(Duration.WhileInGraveyard, Outcome.ReturnToHand); this.amount = value; this.staticText = new StringBuilder("Dredge ").append(Integer.toString(value)) - .append(" (If you would draw a card, instead you may put exactly three cards from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); + .append(" (If you would draw a card, instead you may put exactly " + value + " card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card.)").toString(); } public DredgeEffect(final DredgeEffect effect) { From 13fa7aeb6294d9e7df038797e602ce891a65c2d0 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 18 Sep 2015 23:04:03 +0200 Subject: [PATCH 12/23] [BFZ] Added missing red cards (22 cards). --- .../battleforzendikar/AkoumStonewaker.java | 126 +++++++++++++++++ .../BelligerentWhiptail.java | 66 +++++++++ .../sets/battleforzendikar/BoilingEarth.java | 71 ++++++++++ .../sets/battleforzendikar/ChasmGuide.java | 67 +++++++++ .../battleforzendikar/FiremantleMage.java | 67 +++++++++ .../battleforzendikar/KozileksSentinel.java | 78 +++++++++++ .../battleforzendikar/LavastepRaider.java | 67 +++++++++ .../sets/battleforzendikar/NettleDrone.java | 84 ++++++++++++ .../sets/battleforzendikar/OnduChampion.java | 67 +++++++++ .../sets/battleforzendikar/Outnumber.java | 66 +++++++++ .../battleforzendikar/ProcessorAssault.java | 127 ++++++++++++++++++ .../battleforzendikar/RecklessCohort.java | 84 ++++++++++++ .../battleforzendikar/SerpentineSpike.java | 112 +++++++++++++++ .../sets/battleforzendikar/Stonefury.java | 65 +++++++++ .../sets/battleforzendikar/SureStrike.java | 69 ++++++++++ .../battleforzendikar/TouchOfTheVoid.java | 71 ++++++++++ .../battleforzendikar/TunnelingGeopede.java | 64 +++++++++ .../sets/battleforzendikar/TurnAgainst.java | 69 ++++++++++ .../battleforzendikar/ValakutInvoker.java | 70 ++++++++++ .../battleforzendikar/ValakutPredator.java | 64 +++++++++ .../sets/battleforzendikar/VileAggregate.java | 87 ++++++++++++ .../battleforzendikar/VolcanicUpheaval.java | 61 +++++++++ .../sets/bornofthegods/SatyrNyxSmith.java | 1 - .../sets/magic2014/MaraudingMaulhorn.java | 6 - .../riseoftheeldrazi/SoulsurgeElemental.java | 10 +- ...utTopCardOfYourLibraryToGraveyardCost.java | 12 +- .../keyword/DoubleStrikeAbility.java | 64 +++++---- Utils/mtg-cards-data.txt | 2 +- 28 files changed, 1738 insertions(+), 59 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BelligerentWhiptail.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BoilingEarth.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KozileksSentinel.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/NettleDrone.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/Outnumber.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RecklessCohort.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/Stonefury.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SureStrike.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TunnelingGeopede.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ValakutInvoker.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ValakutPredator.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/VileAggregate.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/VolcanicUpheaval.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java b/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java new file mode 100644 index 00000000000..aa2253b1e40 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java @@ -0,0 +1,126 @@ +/* + * 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.DelayedTriggeredAbility; +import mage.abilities.common.LandfallAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.token.Token; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class AkoumStonewaker extends CardImpl { + + public AkoumStonewaker(UUID ownerId) { + super(ownerId, 140, "Akoum Stonewaker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Landfall — Whenever a land enters the battlefield under your control, you may pay {2}{R}. If you do, put a 3/1 red Elemental creature token with trample and haste onto the battlefield. + // Exile that token at the beginning of the next end step. + this.addAbility(new LandfallAbility(new DoIfCostPaid(new AkoumStonewakerEffect(), new ManaCostsImpl("{2}{R}")), false)); + + } + + public AkoumStonewaker(final AkoumStonewaker card) { + super(card); + } + + @Override + public AkoumStonewaker copy() { + return new AkoumStonewaker(this); + } +} + +class AkoumStonewakerEffect extends OneShotEffect { + + public AkoumStonewakerEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "put a 3/1 red Elemental creature token with trample and haste onto the battlefield. Exile that token at the beginning of the next end step"; + } + + public AkoumStonewakerEffect(final AkoumStonewakerEffect effect) { + super(effect); + } + + @Override + public AkoumStonewakerEffect copy() { + return new AkoumStonewakerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Token token = new AkoumStonewakerElementalToken(); + if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); + DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + game.addDelayedTriggeredAbility(delayedAbility); + return true; + } + return false; + } +} + +class AkoumStonewakerElementalToken extends Token { + + public AkoumStonewakerElementalToken() { + super("Elemental", "3/1 red Elemental creature token with trample and haste"); + cardType.add(CardType.CREATURE); + color.setRed(true); + subtype.add("Elemental"); + power = new MageInt(3); + toughness = new MageInt(1); + this.addAbility(TrampleAbility.getInstance()); + this.addAbility(HasteAbility.getInstance()); + this.setOriginalExpansionSetCode("BFZ"); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BelligerentWhiptail.java b/Mage.Sets/src/mage/sets/battleforzendikar/BelligerentWhiptail.java new file mode 100644 index 00000000000..587fa780eed --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BelligerentWhiptail.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.LandfallAbility; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class BelligerentWhiptail extends CardImpl { + + public BelligerentWhiptail(UUID ownerId) { + super(ownerId, 141, "Belligerent Whiptail", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Wurm"); + this.power = new MageInt(4); + this.toughness = new MageInt(2); + + // Landfall — Whenever a land enters the battlefield under your control, Belligerent Whiptail gains first strike until end of turn. + this.addAbility(new LandfallAbility(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), false)); + + } + + public BelligerentWhiptail(final BelligerentWhiptail card) { + super(card); + } + + @Override + public BelligerentWhiptail copy() { + return new BelligerentWhiptail(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BoilingEarth.java b/Mage.Sets/src/mage/sets/battleforzendikar/BoilingEarth.java new file mode 100644 index 00000000000..45dbf95132a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BoilingEarth.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.abilities.effects.common.DamageAllEffect; +import mage.abilities.keyword.AwakenAbility; +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 BoilingEarth extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature your opponents control"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public BoilingEarth(UUID ownerId) { + super(ownerId, 142, "Boiling Earth", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{R}"); + this.expansionSetCode = "BFZ"; + + // Boiling Earth deals 1 damage to each creature your opponents control. + this.getSpellAbility().addEffect(new DamageAllEffect(1, filter)); + + // Awaken 4—{6}{R} + this.addAbility(new AwakenAbility(this, 4, "{6}{R}")); + } + + public BoilingEarth(final BoilingEarth card) { + super(card); + } + + @Override + public BoilingEarth copy() { + return new BoilingEarth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java b/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java new file mode 100644 index 00000000000..c0e52a735e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.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.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ChasmGuide extends CardImpl { + + public ChasmGuide(UUID ownerId) { + super(ownerId, 143, "Chasm Guide", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Goblin"); + this.subtype.add("Scout"); + this.subtype.add("Ally"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Rally — Whenever Chasm Guide or another Ally enters the battlefield under your control, creatures you control gain haste until end of turn. + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfTurn), false)); + } + + public ChasmGuide(final ChasmGuide card) { + super(card); + } + + @Override + public ChasmGuide copy() { + return new ChasmGuide(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java b/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java new file mode 100644 index 00000000000..610370d6342 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.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.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +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 FiremantleMage extends CardImpl { + + public FiremantleMage(UUID ownerId) { + super(ownerId, 145, "Firemantle Mage", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Shaman"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Rally — Whenver Firemantle Mage or another Ally enters the battlefield under your control, creatures you control gain menace until end of turn. + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(new MenaceAbility(), Duration.EndOfTurn), false)); + } + + public FiremantleMage(final FiremantleMage card) { + super(card); + } + + @Override + public FiremantleMage copy() { + return new FiremantleMage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KozileksSentinel.java b/Mage.Sets/src/mage/sets/battleforzendikar/KozileksSentinel.java new file mode 100644 index 00000000000..2832635146f --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KozileksSentinel.java @@ -0,0 +1,78 @@ +/* + * 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.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.ColorlessPredicate; + +/** + * + * @author LevelX2 + */ +public class KozileksSentinel extends CardImpl { + + private static final FilterSpell filterSpell = new FilterSpell("a colorless spell"); + + static { + filterSpell.add(new ColorlessPredicate()); + } + + public KozileksSentinel(UUID ownerId) { + super(ownerId, 129, "Kozilek's Sentinel", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + + // Whenever you cast a colorless spell, Kozilek's Sentinel gets +1/+0 until end of turn. + this.addAbility(new SpellCastControllerTriggeredAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn), filterSpell, false)); + + } + + public KozileksSentinel(final KozileksSentinel card) { + super(card); + } + + @Override + public KozileksSentinel copy() { + return new KozileksSentinel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java b/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java new file mode 100644 index 00000000000..598beceec6b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.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.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class LavastepRaider extends CardImpl { + + public LavastepRaider(UUID ownerId) { + super(ownerId, 147, "Lavastep Raider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Goblin"); + this.subtype.add("Warrior"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {2}{R}: Lavastep Raider gets +2/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{2}{R}"))); + } + + public LavastepRaider(final LavastepRaider card) { + super(card); + } + + @Override + public LavastepRaider copy() { + return new LavastepRaider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/NettleDrone.java b/Mage.Sets/src/mage/sets/battleforzendikar/NettleDrone.java new file mode 100644 index 00000000000..8c3a075642b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/NettleDrone.java @@ -0,0 +1,84 @@ +/* + * 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.SimpleActivatedAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.ColorlessPredicate; + +/** + * + * @author LevelX2 + */ +public class NettleDrone extends CardImpl { + + private static final FilterSpell filterSpell = new FilterSpell("a colorless spell"); + + static { + filterSpell.add(new ColorlessPredicate()); + } + + public NettleDrone(UUID ownerId) { + super(ownerId, 131, "Nettle Drone", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + + // {T}: Nettle Drone deals 1 damage to each opponent. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(1, TargetController.OPPONENT), new TapSourceCost())); + + // Whenever you cast a colorless spell, untap Nettle Drone. + this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filterSpell, false)); + } + + public NettleDrone(final NettleDrone card) { + super(card); + } + + @Override + public NettleDrone copy() { + return new NettleDrone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java b/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java new file mode 100644 index 00000000000..bd0a4c52632 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.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.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class OnduChampion extends CardImpl { + + public OnduChampion(UUID ownerId) { + super(ownerId, 149, "Ondu Champion", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Minotaur"); + this.subtype.add("Warrior"); + this.subtype.add("Ally"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Rally — Whenever Ondu Champion or another Ally enters the battlefield under your control, creatures you control gain trample until end of turn. + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), false)); + } + + public OnduChampion(final OnduChampion card) { + super(card); + } + + @Override + public OnduChampion copy() { + return new OnduChampion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/Outnumber.java b/Mage.Sets/src/mage/sets/battleforzendikar/Outnumber.java new file mode 100644 index 00000000000..1c11d5b6658 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/Outnumber.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.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +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.filter.common.FilterControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class Outnumber extends CardImpl { + + public Outnumber(UUID ownerId) { + super(ownerId, 150, "Outnumber", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{R}"); + this.expansionSetCode = "BFZ"; + + // Outnumber deals damage to target creature equal to the number of creatures you control. + Effect effect = new DamageTargetEffect(new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent("the number of creatures you control"))); + effect.setText("{this} deals damage to target creature equal to the number of creatures you control"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + } + + public Outnumber(final Outnumber card) { + super(card); + } + + @Override + public Outnumber copy() { + return new Outnumber(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java b/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java new file mode 100644 index 00000000000..a198f062322 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java @@ -0,0 +1,127 @@ +/* + * 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.costs.CostImpl; +import mage.abilities.effects.common.DamageTargetEffect; +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.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.other.OwnerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCardInExile; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class ProcessorAssault extends CardImpl { + + public ProcessorAssault(UUID ownerId) { + super(ownerId, 132, "Processor Assault", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{R}"); + this.expansionSetCode = "BFZ"; + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + + // As an additional cost to cast Processor Assault, put a card an opponent owns from exile into its owner's graveyard. + this.getSpellAbility().addCost(new PutOpponentExileCardToGraveyardCost()); + + // Processor Assault deals 5 damage to target creature. + this.getSpellAbility().addEffect(new DamageTargetEffect(5)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public ProcessorAssault(final ProcessorAssault card) { + super(card); + } + + @Override + public ProcessorAssault copy() { + return new ProcessorAssault(this); + } +} + +class PutOpponentExileCardToGraveyardCost extends CostImpl { + + public PutOpponentExileCardToGraveyardCost() { + this.text = "put a card an opponent owns from exile into its owner's graveyard"; + } + + public PutOpponentExileCardToGraveyardCost(PutOpponentExileCardToGraveyardCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + Player controller = game.getPlayer(controllerId); + if (controller != null) { + FilterCard filter = new FilterCard(); + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + Target target = new TargetCardInExile(filter); + if (controller.chooseTarget(Outcome.Damage, target, ability, game)) { + Card card = game.getCard(target.getFirstTarget()); + if (card != null) { + paid = true; + controller.moveCards(card, null, Zone.GRAVEYARD, ability, game); + } + } + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Player controller = game.getPlayer(controllerId); + if (controller != null) { + for (Card card : game.getExile().getAllCards(game)) { + if (controller.hasOpponent(card.getOwnerId(), game)) { + return true; + } + } + } + return false; + } + + @Override + public PutOpponentExileCardToGraveyardCost copy() { + return new PutOpponentExileCardToGraveyardCost(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RecklessCohort.java b/Mage.Sets/src/mage/sets/battleforzendikar/RecklessCohort.java new file mode 100644 index 00000000000..3bebab684a3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RecklessCohort.java @@ -0,0 +1,84 @@ +/* + * 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.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.decorator.ConditionalRequirementEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.AnotherPredicate; + +/** + * + * @author LevelX2 + */ +public class RecklessCohort extends CardImpl { + + private final static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Ally"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new SubtypePredicate("Ally")); + } + + public RecklessCohort(UUID ownerId) { + super(ownerId, 152, "Reckless Cohort", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Warrior"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Reckless Cohort attacks each combat if able unless you control another Ally. + Effect effect = new ConditionalRequirementEffect( + new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield, true), + new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.FEWER_THAN, 1)); + effect.setText("{this} attacks each combat if able unless you control another Ally"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + } + + public RecklessCohort(final RecklessCohort card) { + super(card); + } + + @Override + public RecklessCohort copy() { + return new RecklessCohort(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java b/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java new file mode 100644 index 00000000000..ee803053c4e --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.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.replacement.DealtDamageToCreatureBySourceDies; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; +import mage.watchers.common.DamagedByWatcher; + +/** + * + * @author LevelX2 + */ +public class SerpentineSpike extends CardImpl { + + public SerpentineSpike(UUID ownerId) { + super(ownerId, 133, "Serpentine Spike", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{5}{R}{R}"); + this.expansionSetCode = "BFZ"; + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Serpentine Spike deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead. + this.getSpellAbility().addEffect(new SerpentineSpikeEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature (2 damage)"))); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature (3 damage)"))); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature (4 damage)"))); + Effect effect = new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn); + effect.setText("If a creature dealt damage this way would die this turn, exile it instead"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addWatcher(new DamagedByWatcher()); + } + + public SerpentineSpike(final SerpentineSpike card) { + super(card); + } + + @Override + public SerpentineSpike copy() { + return new SerpentineSpike(this); + } +} + +class SerpentineSpikeEffect extends OneShotEffect { + + public SerpentineSpikeEffect() { + super(Outcome.Damage); + this.staticText = "{this} deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature"; + } + + public SerpentineSpikeEffect(final SerpentineSpikeEffect effect) { + super(effect); + } + + @Override + public SerpentineSpikeEffect copy() { + return new SerpentineSpikeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getTargets().get(0).getFirstTarget()); + if (permanent != null) { + permanent.damage(2, source.getSourceId(), game, false, true); + } + permanent = game.getPermanent(source.getTargets().get(1).getFirstTarget()); + if (permanent != null) { + permanent.damage(3, source.getSourceId(), game, false, true); + } + permanent = game.getPermanent(source.getTargets().get(2).getFirstTarget()); + if (permanent != null) { + permanent.damage(4, source.getSourceId(), game, false, true); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/Stonefury.java b/Mage.Sets/src/mage/sets/battleforzendikar/Stonefury.java new file mode 100644 index 00000000000..8c58f9e9520 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/Stonefury.java @@ -0,0 +1,65 @@ +/* + * 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.dynamicvalue.common.PermanentsOnBattlefieldCount; +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.filter.common.FilterControlledLandPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class Stonefury extends CardImpl { + + public Stonefury(UUID ownerId) { + super(ownerId, 156, "Stonefury", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{R}{R}"); + this.expansionSetCode = "BFZ"; + + // Stonefury deals damage to target creature equal to the number of lands you control. + Effect effect = new DamageTargetEffect(new PermanentsOnBattlefieldCount(new FilterControlledLandPermanent("the number of lands you control"))); + effect.setText("{this} deals damage to target creature equal to the number of lands you control"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public Stonefury(final Stonefury card) { + super(card); + } + + @Override + public Stonefury copy() { + return new Stonefury(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SureStrike.java b/Mage.Sets/src/mage/sets/battleforzendikar/SureStrike.java new file mode 100644 index 00000000000..be9007a33d4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SureStrike.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.battleforzendikar; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.FirstStrikeAbility; +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 SureStrike extends CardImpl { + + public SureStrike(UUID ownerId) { + super(ownerId, 157, "Sure Strike", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "BFZ"; + + // Target creature gets +3/+0 and gains first strike until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + Effect effect = new BoostTargetEffect(3, 0, Duration.EndOfTurn); + effect.setText("Target creature gets +3/+0"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains first strike until end of turn"); + this.getSpellAbility().addEffect(effect); + } + + public SureStrike(final SureStrike card) { + super(card); + } + + @Override + public SureStrike copy() { + return new SureStrike(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java b/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java new file mode 100644 index 00000000000..e762dd6c31c --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.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.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.replacement.DealtDamageToCreatureBySourceDies; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; +import mage.watchers.common.DamagedByWatcher; + +/** + * + * @author LevelX2 + */ +public class TouchOfTheVoid extends CardImpl { + + public TouchOfTheVoid(UUID ownerId) { + super(ownerId, 134, "Touch of the Void", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Touch of the Void deals 3 damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead. + this.getSpellAbility().addEffect(new DamageTargetEffect(3)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + Effect effect = new DealtDamageToCreatureBySourceDies(this, Duration.EndOfTurn); + effect.setText("If a creature dealt damage this way would die this turn, exile it instead"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addWatcher(new DamagedByWatcher()); + } + + public TouchOfTheVoid(final TouchOfTheVoid card) { + super(card); + } + + @Override + public TouchOfTheVoid copy() { + return new TouchOfTheVoid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TunnelingGeopede.java b/Mage.Sets/src/mage/sets/battleforzendikar/TunnelingGeopede.java new file mode 100644 index 00000000000..c93253bcf38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TunnelingGeopede.java @@ -0,0 +1,64 @@ +/* + * 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.DamagePlayersEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; + +/** + * + * @author LevelX2 + */ +public class TunnelingGeopede extends CardImpl { + + public TunnelingGeopede(UUID ownerId) { + super(ownerId, 158, "Tunneling Geopede", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Insect"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Landfall - Whenever a land enters the battlefield under your control, Tunneling Geopede deals 1 damage to each opponent. + this.addAbility(new LandfallAbility(new DamagePlayersEffect(1, TargetController.OPPONENT), false)); + } + + public TunnelingGeopede(final TunnelingGeopede card) { + super(card); + } + + @Override + public TunnelingGeopede copy() { + return new TunnelingGeopede(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java b/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java new file mode 100644 index 00000000000..890f78f1812 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.battleforzendikar; + +import java.util.UUID; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.HasteAbility; +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 TurnAgainst extends CardImpl { + + public TurnAgainst(UUID ownerId) { + super(ownerId, 135, "Turn Against", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{4}{R}"); + this.expansionSetCode = "BFZ"; + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new UntapTargetEffect()); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); + } + + public TurnAgainst(final TurnAgainst card) { + super(card); + } + + @Override + public TurnAgainst copy() { + return new TurnAgainst(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ValakutInvoker.java b/Mage.Sets/src/mage/sets/battleforzendikar/ValakutInvoker.java new file mode 100644 index 00000000000..e974588fa5e --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ValakutInvoker.java @@ -0,0 +1,70 @@ +/* + * 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.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author LevelX2 + */ +public class ValakutInvoker extends CardImpl { + + public ValakutInvoker(UUID ownerId) { + super(ownerId, 159, "Valakut Invoker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // {8}: Valakut Invoker deals 3 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new GenericManaCost(8)); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public ValakutInvoker(final ValakutInvoker card) { + super(card); + } + + @Override + public ValakutInvoker copy() { + return new ValakutInvoker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ValakutPredator.java b/Mage.Sets/src/mage/sets/battleforzendikar/ValakutPredator.java new file mode 100644 index 00000000000..21e53fa69eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ValakutPredator.java @@ -0,0 +1,64 @@ +/* + * 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.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ValakutPredator extends CardImpl { + + public ValakutPredator(UUID ownerId) { + super(ownerId, 160, "Valakut Predator", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Elemental"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Landfall - Whenever a land enters the battlefield under your control, Valakut Predator gets +2/+2 until end of turn. + this.addAbility(new LandfallAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), false)); + } + + public ValakutPredator(final ValakutPredator card) { + super(card); + } + + @Override + public ValakutPredator copy() { + return new ValakutPredator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VileAggregate.java b/Mage.Sets/src/mage/sets/battleforzendikar/VileAggregate.java new file mode 100644 index 00000000000..60d925eb737 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VileAggregate.java @@ -0,0 +1,87 @@ +/* + * 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.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.SetPowerSourceEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.IngestAbility; +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; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.ColorlessPredicate; + +/** + * + * @author LevelX2 + */ +public class VileAggregate extends CardImpl { + + private final static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("colorless creatures you control"); + + static { + filter.add(new ColorlessPredicate()); + } + + public VileAggregate(UUID ownerId) { + super(ownerId, 137, "Vile Aggregate", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(0); + this.toughness = new MageInt(5); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Vile Aggregate's power is equal to the number of colorless creatures you control. + Effect effect = new SetPowerSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame); + this.addAbility(new SimpleStaticAbility(Zone.ALL, effect)); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Ingest + this.addAbility(new IngestAbility()); + } + + public VileAggregate(final VileAggregate card) { + super(card); + } + + @Override + public VileAggregate copy() { + return new VileAggregate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VolcanicUpheaval.java b/Mage.Sets/src/mage/sets/battleforzendikar/VolcanicUpheaval.java new file mode 100644 index 00000000000..dfb56c8fb84 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VolcanicUpheaval.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.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LevelX2 + */ +public class VolcanicUpheaval extends CardImpl { + + public VolcanicUpheaval(UUID ownerId) { + super(ownerId, 161, "Volcanic Upheaval", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{R}"); + this.expansionSetCode = "BFZ"; + + // Destroy target land. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetLandPermanent()); + + } + + public VolcanicUpheaval(final VolcanicUpheaval card) { + super(card); + } + + @Override + public VolcanicUpheaval copy() { + return new VolcanicUpheaval(this); + } +} diff --git a/Mage.Sets/src/mage/sets/bornofthegods/SatyrNyxSmith.java b/Mage.Sets/src/mage/sets/bornofthegods/SatyrNyxSmith.java index 0c39cbb9c97..79f54d94c8f 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/SatyrNyxSmith.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/SatyrNyxSmith.java @@ -29,7 +29,6 @@ package mage.sets.bornofthegods; import java.util.UUID; import mage.MageInt; -import mage.ObjectColor; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DoIfCostPaid; diff --git a/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java b/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java index 3a4ab14bfe0..7a36230e0cb 100644 --- a/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java +++ b/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java @@ -29,7 +29,6 @@ package mage.sets.magic2014; import java.util.UUID; import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.decorator.ConditionalRequirementEffect; import mage.abilities.effects.Effect; @@ -38,10 +37,8 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; -import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.NamePredicate; -import mage.watchers.common.AttackedThisTurnWatcher; /** * @@ -68,9 +65,6 @@ public class MaraudingMaulhorn extends CardImpl { new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield, true), new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.FEWER_THAN, 1)); effect.setText("{this} attacks each combat if able unless you control a creature named Advocate of the Beast"); - - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect), new AttackedThisTurnWatcher()); - } public MaraudingMaulhorn(final MaraudingMaulhorn card) { diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SoulsurgeElemental.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SoulsurgeElemental.java index 227628209b9..0e049447a51 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SoulsurgeElemental.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SoulsurgeElemental.java @@ -28,19 +28,16 @@ package mage.sets.riseoftheeldrazi; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.SetPowerSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; @@ -50,7 +47,6 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public class SoulsurgeElemental extends CardImpl { - public SoulsurgeElemental(UUID ownerId) { super(ownerId, 163, "Soulsurge Elemental", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); this.expansionSetCode = "ROE"; diff --git a/Mage/src/mage/abilities/costs/common/PutTopCardOfYourLibraryToGraveyardCost.java b/Mage/src/mage/abilities/costs/common/PutTopCardOfYourLibraryToGraveyardCost.java index bd097d47ab7..2b1b4f28595 100644 --- a/Mage/src/mage/abilities/costs/common/PutTopCardOfYourLibraryToGraveyardCost.java +++ b/Mage/src/mage/abilities/costs/common/PutTopCardOfYourLibraryToGraveyardCost.java @@ -25,26 +25,16 @@ * 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.UUID; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.costs.CostImpl; -import mage.cards.Card; -import mage.cards.Cards; -import mage.cards.CardsImpl; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; import mage.util.CardUtil; -/** - * - * @author LevelX2 - */ - - public class PutTopCardOfYourLibraryToGraveyardCost extends CostImpl { int numberOfCards; diff --git a/Mage/src/mage/abilities/keyword/DoubleStrikeAbility.java b/Mage/src/mage/abilities/keyword/DoubleStrikeAbility.java index f1988843f67..ab99217ac27 100644 --- a/Mage/src/mage/abilities/keyword/DoubleStrikeAbility.java +++ b/Mage/src/mage/abilities/keyword/DoubleStrikeAbility.java @@ -1,38 +1,36 @@ /* -* 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. -*/ - + * 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.abilities.keyword; -import mage.constants.Zone; +import java.io.ObjectStreamException; import mage.abilities.MageSingleton; import mage.abilities.StaticAbility; - -import java.io.ObjectStreamException; +import mage.constants.Zone; /** * @@ -40,7 +38,7 @@ import java.io.ObjectStreamException; */ public class DoubleStrikeAbility extends StaticAbility implements MageSingleton { - private static final DoubleStrikeAbility fINSTANCE = new DoubleStrikeAbility(); + private static final DoubleStrikeAbility fINSTANCE = new DoubleStrikeAbility(); private Object readResolve() throws ObjectStreamException { return fINSTANCE; @@ -56,7 +54,7 @@ public class DoubleStrikeAbility extends StaticAbility implements MageSingleton @Override public String getRule() { - return "Double Strike"; + return "double strike"; } @Override @@ -64,4 +62,4 @@ public class DoubleStrikeAbility extends StaticAbility implements MageSingleton return fINSTANCE; } -} \ No newline at end of file +} diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 54ff762b86b..fb9c4a5cac6 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -27500,7 +27500,7 @@ Molten Nursery|Battle for Zendikar|130|U|{2}{R}|Enchantment|||Devoid (This ca Nettle Drone|Battle for Zendikar|131|C|{2}{R}|Creature - Eldrazi Drone|3|1|Devoid (This card has no color.)${t}: Nettle Drone deals 1 damage to each opponent.$Whenever you cast a colorless spell, untap Nettle Drone.| Ondu Champion|Battle for Zendikar|149|C|{2}{R}{R}|Creature - Minotaur Warrior Ally|4|3|Rally — Whenever Ondu Champion or another Ally enters the battlefield under your control, creatures you control gain trample until end of turn.| Outnumber|Battle for Zendikar|150|C|{R}|Instant|||Outnumber deals damage to target creature equal to the number of creatures you control.| -Processor Assault|Battle for Zendikar|132|U|{1}{R}|Sorcery|||Devoid (This card has no color.)$As an additional cost to cast Processor Assault, put a card an opponent controls from exile into its owner's graveyard.$Processor Assault deals 5 damage to target creature.| +Processor Assault|Battle for Zendikar|132|U|{1}{R}|Sorcery|||Devoid (This card has no color.)$As an additional cost to cast Processor Assault, put a card an opponent owns from exile into its owner's graveyard.$Processor Assault deals 5 damage to target creature.| Radiant Flames|Battle for Zendikar|151|R|{2}{R}|Sorcery|||Converge — Radiant Flames deals X damage to each creature, where X is the number of colors of mana spent to cast Radiant Flames.| Reckless Cohort|Battle for Zendikar|152|C|{1}{R}|Creature - Human Warrior Ally|2|2|Reckless Cohort attacks each combat if able unless you control another Ally.| Retreat to Valakut|Battle for Zendikar|153|U|{2}{R}|Enchantment|||Landfall — Whenever a land enters the battlefield under your control, choose one —$• Target creature gets +2/+0 until end of turn.$• Target creature can't block this turn.| From c659f79b960fd5daeecd12dcecd7e973c3bde818 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 00:43:21 +0200 Subject: [PATCH 13/23] [BFZ] Added missing white cards (16 cards). --- .../battleforzendikar/AngelOfRenewal.java | 71 +++++++++++ .../sets/battleforzendikar/AngelicGift.java | 81 +++++++++++++ .../sets/battleforzendikar/ChasmGuide.java | 4 +- .../battleforzendikar/CliffsideLookout.java | 68 +++++++++++ .../battleforzendikar/CourierGriffin.java | 66 +++++++++++ .../battleforzendikar/EncirclingFissure.java | 103 ++++++++++++++++ .../battleforzendikar/ExpeditionEnvoy.java | 2 +- .../battleforzendikar/FiremantleMage.java | 4 +- .../battleforzendikar/FortifiedRampart.java | 2 +- .../battleforzendikar/InspiredCharge.java | 2 +- .../sets/battleforzendikar/KitesailScout.java | 2 +- .../sets/battleforzendikar/KorBladewhirl.java | 69 +++++++++++ .../sets/battleforzendikar/KorCastigator.java | 75 ++++++++++++ .../sets/battleforzendikar/KorEntanglers.java | 79 +++++++++++++ .../battleforzendikar/LithomancersFocus.java | 96 +++++++++++++++ .../sets/battleforzendikar/MakindiPatrol.java | 69 +++++++++++ .../sets/battleforzendikar/OnduChampion.java | 4 +- .../sets/battleforzendikar/OnduGreathorn.java | 67 +++++++++++ .../sets/battleforzendikar/OnduRising.java | 110 ++++++++++++++++++ .../battleforzendikar/RoilsRetribution.java | 61 ++++++++++ .../sets/battleforzendikar/SereneSteward.java | 74 ++++++++++++ .../sets/battleforzendikar/ShadowGlider.java | 2 +- .../battleforzendikar/StoneHavenMedic.java | 70 +++++++++++ .../sets/battleforzendikar/UnifiedFront.java | 63 ++++++++++ .../mage/sets/zendikar/ArrowVolleyTrap.java | 14 +-- 25 files changed, 1239 insertions(+), 19 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/AngelOfRenewal.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/AngelicGift.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CliffsideLookout.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CourierGriffin.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/EncirclingFissure.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KorBladewhirl.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KorCastigator.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/KorEntanglers.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/LithomancersFocus.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/MakindiPatrol.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/OnduGreathorn.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/OnduRising.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RoilsRetribution.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SereneSteward.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/StoneHavenMedic.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AngelOfRenewal.java b/Mage.Sets/src/mage/sets/battleforzendikar/AngelOfRenewal.java new file mode 100644 index 00000000000..67671cfd94a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AngelOfRenewal.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.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class AngelOfRenewal extends CardImpl { + + public AngelOfRenewal(UUID ownerId) { + super(ownerId, 18, "Angel of Renewal", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{5}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Angel"); + this.subtype.add("Ally"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // When Angel of Renewal enters the battlefield, you gain 1 life for each creature you control. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect( + new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent())))); + + } + + public AngelOfRenewal(final AngelOfRenewal card) { + super(card); + } + + @Override + public AngelOfRenewal copy() { + return new AngelOfRenewal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AngelicGift.java b/Mage.Sets/src/mage/sets/battleforzendikar/AngelicGift.java new file mode 100644 index 00000000000..66d622f82e5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AngelicGift.java @@ -0,0 +1,81 @@ +/* + * 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.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class AngelicGift extends CardImpl { + + public AngelicGift(UUID ownerId) { + super(ownerId, 19, "Angelic Gift", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // When Angelic Gift enters the battlefield, draw a card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false)); + + // Enchanted creature has flying. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); + } + + public AngelicGift(final AngelicGift card) { + super(card); + } + + @Override + public AngelicGift copy() { + return new AngelicGift(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java b/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java index c0e52a735e1..ecade73ae51 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ChasmGuide.java @@ -36,6 +36,7 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; /** * @@ -53,7 +54,8 @@ public class ChasmGuide extends CardImpl { this.toughness = new MageInt(2); // Rally — Whenever Chasm Guide or another Ally enters the battlefield under your control, creatures you control gain haste until end of turn. - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfTurn), false)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility( + new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures you control")), false)); } public ChasmGuide(final ChasmGuide card) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CliffsideLookout.java b/Mage.Sets/src/mage/sets/battleforzendikar/CliffsideLookout.java new file mode 100644 index 00000000000..a362b9e360f --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CliffsideLookout.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.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class CliffsideLookout extends CardImpl { + + public CliffsideLookout(UUID ownerId) { + super(ownerId, 20, "Cliffside Lookout", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Scout"); + this.subtype.add("Ally"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {4}{W}: Creatures you control get +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl<>("{4}{W}"))); + } + + public CliffsideLookout(final CliffsideLookout card) { + super(card); + } + + @Override + public CliffsideLookout copy() { + return new CliffsideLookout(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CourierGriffin.java b/Mage.Sets/src/mage/sets/battleforzendikar/CourierGriffin.java new file mode 100644 index 00000000000..88a03fe4f6f --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CourierGriffin.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.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class CourierGriffin extends CardImpl { + + public CourierGriffin(UUID ownerId) { + super(ownerId, 21, "Courier Griffin", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Griffin"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // When Courier Griffin enters the battlefield, you gain 2 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(2), false)); + } + + public CourierGriffin(final CourierGriffin card) { + super(card); + } + + @Override + public CourierGriffin copy() { + return new CourierGriffin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/EncirclingFissure.java b/Mage.Sets/src/mage/sets/battleforzendikar/EncirclingFissure.java new file mode 100644 index 00000000000..3722f671901 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/EncirclingFissure.java @@ -0,0 +1,103 @@ +/* + * 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.PreventionEffectImpl; +import mage.abilities.keyword.AwakenAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.events.DamageEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public class EncirclingFissure extends CardImpl { + + public EncirclingFissure(UUID ownerId) { + super(ownerId, 23, "Encircling Fissure", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{W}"); + this.expansionSetCode = "BFZ"; + + // Prevent all combat damage that would be dealt this turn by creatures target opponent controls. + this.getSpellAbility().addEffect(new EncirclingFissurePreventEffect()); + this.getSpellAbility().addTarget(new TargetOpponent()); + + // Awaken 2 —{4}{W} + this.addAbility(new AwakenAbility(this, 2, "{4}{W}")); + } + + public EncirclingFissure(final EncirclingFissure card) { + super(card); + } + + @Override + public EncirclingFissure copy() { + return new EncirclingFissure(this); + } +} + +class EncirclingFissurePreventEffect extends PreventionEffectImpl { + + public EncirclingFissurePreventEffect() { + super(Duration.EndOfTurn, Integer.MAX_VALUE, true, false); + staticText = "Prevent all combat damage that would be dealt this turn by creatures target opponent controls"; + } + + public EncirclingFissurePreventEffect(final EncirclingFissurePreventEffect effect) { + super(effect); + } + + @Override + public EncirclingFissurePreventEffect copy() { + return new EncirclingFissurePreventEffect(this); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (super.applies(event, source, game) && event instanceof DamageEvent && event.getAmount() > 0) { + DamageEvent damageEvent = (DamageEvent) event; + if (damageEvent.isCombatDamage()) { + Permanent permanent = game.getPermanent(damageEvent.getSourceId()); + if (permanent != null + && permanent.getCardType().contains(CardType.CREATURE) + && permanent.getControllerId().equals(getTargetPointer().getFirst(game, source))) { + return true; + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java b/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java index e48615cc187..2238af4b527 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ExpeditionEnvoy.java @@ -40,7 +40,7 @@ import mage.constants.Rarity; public class ExpeditionEnvoy extends CardImpl { public ExpeditionEnvoy(UUID ownerId) { - super(ownerId, 024, "Expedition Envoy", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}"); + super(ownerId, 24, "Expedition Envoy", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}"); this.expansionSetCode = "BFZ"; this.subtype.add("Human"); this.subtype.add("Scout"); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java b/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java index 610370d6342..4dfae72574a 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/FiremantleMage.java @@ -36,6 +36,7 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; /** * @@ -53,7 +54,8 @@ public class FiremantleMage extends CardImpl { this.toughness = new MageInt(2); // Rally — Whenver Firemantle Mage or another Ally enters the battlefield under your control, creatures you control gain menace until end of turn. - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(new MenaceAbility(), Duration.EndOfTurn), false)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility( + new GainAbilityControlledEffect(new MenaceAbility(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures you control")), false)); } public FiremantleMage(final FiremantleMage card) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java b/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java index 81ce7972850..73543737e94 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/FortifiedRampart.java @@ -41,7 +41,7 @@ import mage.constants.Rarity; public class FortifiedRampart extends CardImpl { public FortifiedRampart(UUID ownerId) { - super(ownerId, 027, "Fortified Rampart", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + super(ownerId, 27, "Fortified Rampart", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.expansionSetCode = "BFZ"; this.subtype.add("Wall"); this.power = new MageInt(0); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java b/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java index 057788a5971..3b5d54435b3 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/InspiredCharge.java @@ -37,7 +37,7 @@ public class InspiredCharge extends mage.sets.magic2011.InspiredCharge { public InspiredCharge(UUID ownerId) { super(ownerId); - this.cardNumber = 032; + this.cardNumber = 32; this.expansionSetCode = "BFZ"; } diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java b/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java index 999ff2d0c55..4bc5547dbd3 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KitesailScout.java @@ -41,7 +41,7 @@ import mage.constants.Rarity; public class KitesailScout extends CardImpl { public KitesailScout(UUID ownerId) { - super(ownerId, 033, "Kitesail Scout", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); + super(ownerId, 33, "Kitesail Scout", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); this.expansionSetCode = "BFZ"; this.subtype.add("Kor"); this.subtype.add("Scout"); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KorBladewhirl.java b/Mage.Sets/src/mage/sets/battleforzendikar/KorBladewhirl.java new file mode 100644 index 00000000000..283723fab14 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KorBladewhirl.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +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.FilterControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class KorBladewhirl extends CardImpl { + + public KorBladewhirl(UUID ownerId) { + super(ownerId, 34, "Kor Bladewhirl", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Soldier"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Rally — Whenever Kor Bladewhirl or another Ally enters the battlefield under your control, creatures you control gain first strike until end of turn. + this.addAbility(new AllyEntersBattlefieldTriggeredAbility( + new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures you control")), false)); + } + + public KorBladewhirl(final KorBladewhirl card) { + super(card); + } + + @Override + public KorBladewhirl copy() { + return new KorBladewhirl(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KorCastigator.java b/Mage.Sets/src/mage/sets/battleforzendikar/KorCastigator.java new file mode 100644 index 00000000000..2595f18b8b3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KorCastigator.java @@ -0,0 +1,75 @@ +/* + * 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.SimpleEvasionAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; +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.SubtypePredicate; + +/** + * + * @author LevelX2 + */ +public class KorCastigator extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Eldrazi Scions"); + + static { + filter.add(new SubtypePredicate("Eldrazi")); + filter.add(new SubtypePredicate("Scion")); + } + + public KorCastigator(UUID ownerId) { + super(ownerId, 35, "Kor Castigator", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Wizard"); + this.subtype.add("Ally"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Kor Castigator can't be blocked by Eldrazi Scions. + this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); + } + + public KorCastigator(final KorCastigator card) { + super(card); + } + + @Override + public KorCastigator copy() { + return new KorCastigator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/KorEntanglers.java b/Mage.Sets/src/mage/sets/battleforzendikar/KorEntanglers.java new file mode 100644 index 00000000000..7e4e28338d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/KorEntanglers.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.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.TapTargetEffect; +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; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class KorEntanglers extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public KorEntanglers(UUID ownerId) { + super(ownerId, 36, "Kor Entanglers", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Soldier"); + this.subtype.add("Ally"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Rally — Whenever Kor Entanglers or another Ally enters the battlefield under your control, tap target creature an opponent controls. + Ability ability = new AllyEntersBattlefieldTriggeredAbility(new TapTargetEffect(), false); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + + } + + public KorEntanglers(final KorEntanglers card) { + super(card); + } + + @Override + public KorEntanglers copy() { + return new KorEntanglers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/LithomancersFocus.java b/Mage.Sets/src/mage/sets/battleforzendikar/LithomancersFocus.java new file mode 100644 index 00000000000..93abab3bb34 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/LithomancersFocus.java @@ -0,0 +1,96 @@ +/* + * 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.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.PreventionEffectImpl; +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.game.Game; +import mage.game.events.GameEvent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class LithomancersFocus extends CardImpl { + + public LithomancersFocus(UUID ownerId) { + super(ownerId, 38, "Lithomancer's Focus", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}"); + this.expansionSetCode = "BFZ"; + + // Target creature gets +2/+2 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Prevent all damage that would be dealt to that creature this turn by colorless sources. + this.getSpellAbility().addEffect(new LithomancersFocusPreventDamageToTargetEffect()); + } + + public LithomancersFocus(final LithomancersFocus card) { + super(card); + } + + @Override + public LithomancersFocus copy() { + return new LithomancersFocus(this); + } +} + +class LithomancersFocusPreventDamageToTargetEffect extends PreventionEffectImpl { + + public LithomancersFocusPreventDamageToTargetEffect() { + super(Duration.EndOfTurn, Integer.MAX_VALUE, false); + staticText = "Prevent all damage that would be dealt to that creature this turn by colorless sources"; + } + + public LithomancersFocusPreventDamageToTargetEffect(final LithomancersFocusPreventDamageToTargetEffect effect) { + super(effect); + } + + @Override + public LithomancersFocusPreventDamageToTargetEffect copy() { + return new LithomancersFocusPreventDamageToTargetEffect(this); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (super.applies(event, source, game) && event.getTargetId().equals(targetPointer.getFirst(game, source))) { + MageObject object = game.getObject(event.getSourceId()); + return object != null && object.getColor(game).isColorless(); + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MakindiPatrol.java b/Mage.Sets/src/mage/sets/battleforzendikar/MakindiPatrol.java new file mode 100644 index 00000000000..52a9f396492 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MakindiPatrol.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class MakindiPatrol extends CardImpl { + + public MakindiPatrol(UUID ownerId) { + super(ownerId, 39, "Makindi Patrol", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Rally — Whenever Makindi Patrol or another Ally enters the battlefield under your control, creatures you control gain vigilance until end of turn. + this.addAbility(new AllyEntersBattlefieldTriggeredAbility( + new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures you control")), false)); + } + + public MakindiPatrol(final MakindiPatrol card) { + super(card); + } + + @Override + public MakindiPatrol copy() { + return new MakindiPatrol(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java b/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java index bd0a4c52632..1db9a5e52e2 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OnduChampion.java @@ -36,6 +36,7 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; /** * @@ -53,7 +54,8 @@ public class OnduChampion extends CardImpl { this.toughness = new MageInt(3); // Rally — Whenever Ondu Champion or another Ally enters the battlefield under your control, creatures you control gain trample until end of turn. - this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), false)); + this.addAbility(new AllyEntersBattlefieldTriggeredAbility( + new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("creatures you control")), false)); } public OnduChampion(final OnduChampion card) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OnduGreathorn.java b/Mage.Sets/src/mage/sets/battleforzendikar/OnduGreathorn.java new file mode 100644 index 00000000000..008e92ca918 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OnduGreathorn.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.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class OnduGreathorn extends CardImpl { + + public OnduGreathorn(UUID ownerId) { + super(ownerId, 40, "Ondu Greathorn", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Beast"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // First strike + this.addAbility(FirstStrikeAbility.getInstance()); + // Landfall — Whenever a land enters the battlefield under your control, Ondu Greathorn gets +2/+2 until end of turn. + this.addAbility(new LandfallAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), false)); + } + + public OnduGreathorn(final OnduGreathorn card) { + super(card); + } + + @Override + public OnduGreathorn copy() { + return new OnduGreathorn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OnduRising.java b/Mage.Sets/src/mage/sets/battleforzendikar/OnduRising.java new file mode 100644 index 00000000000..d10af4706ce --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OnduRising.java @@ -0,0 +1,110 @@ +/* + * 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.DelayedTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class OnduRising extends CardImpl { + + public OnduRising(UUID ownerId) { + super(ownerId, 41, "Ondu Rising", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + + // Whenever a creature attacks this turn, it gains lifelink until end of turn. + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new OnduRisingTriggeredAbility())); + + // Awaken 4—{4}{W} + this.addAbility(new AwakenAbility(this, 4, "{4}{W}")); + } + + public OnduRising(final OnduRising card) { + super(card); + } + + @Override + public OnduRising copy() { + return new OnduRising(this); + } +} + +class OnduRisingTriggeredAbility extends DelayedTriggeredAbility { + + public OnduRisingTriggeredAbility() { + super(new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn), Duration.EndOfTurn, false); + } + + public OnduRisingTriggeredAbility(OnduRisingTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DECLARE_ATTACKER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null) { + for (Effect effect : getEffects()) { + effect.setTargetPointer(new FixedTarget(permanent, game)); + } + return true; + } + return false; + } + + @Override + public OnduRisingTriggeredAbility copy() { + return new OnduRisingTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever a creature attacks this turn, it gains lifelink until end of turn."; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RoilsRetribution.java b/Mage.Sets/src/mage/sets/battleforzendikar/RoilsRetribution.java new file mode 100644 index 00000000000..b94090773f5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RoilsRetribution.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.DamageMultiEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterAttackingOrBlockingCreature; +import mage.target.common.TargetCreaturePermanentAmount; + +/** + * + * @author LevelX2 + */ +public class RoilsRetribution extends CardImpl { + + public RoilsRetribution(UUID ownerId) { + super(ownerId, 45, "Roil's Retribution", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{W}{W}"); + this.expansionSetCode = "BFZ"; + + // Roil's Retribution deals 5 damage divided as you choose among any number of target attacking or blocking creatures. + this.getSpellAbility().addEffect(new DamageMultiEffect(5)); + this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(5, new FilterAttackingOrBlockingCreature("attacking or blocking creatures"))); + } + + public RoilsRetribution(final RoilsRetribution card) { + super(card); + } + + @Override + public RoilsRetribution copy() { + return new RoilsRetribution(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SereneSteward.java b/Mage.Sets/src/mage/sets/battleforzendikar/SereneSteward.java new file mode 100644 index 00000000000..3b965ef9d60 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SereneSteward.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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.GainLifeControllerTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class SereneSteward extends CardImpl { + + public SereneSteward(UUID ownerId) { + super(ownerId, 46, "Serene Steward", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever you gain life, you may pay {W}. If you do, put a +1/+1 counter on target creature. + Ability ability = new GainLifeControllerTriggeredAbility( + new DoIfCostPaid(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl("{W}")), + false); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public SereneSteward(final SereneSteward card) { + super(card); + } + + @Override + public SereneSteward copy() { + return new SereneSteward(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java b/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java index 0f7f9c83a69..786eac4e37e 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ShadowGlider.java @@ -41,7 +41,7 @@ import mage.constants.Rarity; public class ShadowGlider extends CardImpl { public ShadowGlider(UUID ownerId) { - super(ownerId, 047, "Shadow Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + super(ownerId, 47, "Shadow Glider", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.expansionSetCode = "BFZ"; this.subtype.add("Kor"); this.subtype.add("Soldier"); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/StoneHavenMedic.java b/Mage.Sets/src/mage/sets/battleforzendikar/StoneHavenMedic.java new file mode 100644 index 00000000000..1395376edab --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/StoneHavenMedic.java @@ -0,0 +1,70 @@ +/* + * 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.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class StoneHavenMedic extends CardImpl { + + public StoneHavenMedic(UUID ownerId) { + super(ownerId, 51, "Stone Haven Medic", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Kor"); + this.subtype.add("Cleric"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {W}, {T}: You gain 1 life. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), new ManaCostsImpl("{W}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public StoneHavenMedic(final StoneHavenMedic card) { + super(card); + } + + @Override + public StoneHavenMedic copy() { + return new StoneHavenMedic(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java b/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java new file mode 100644 index 00000000000..bff442256cc --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.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.dynamicvalue.common.ColorsOfManaSpentToCastCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class UnifiedFront extends CardImpl { + + public UnifiedFront(UUID ownerId) { + super(ownerId, 53, "Unified Front", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{W}"); + this.expansionSetCode = "BFZ"; + + // Converge — Put a 1/1 white Kor Ally creature token onto the battlefield for each color of mana spent to cast Unified Front. + getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); + Effect effect = new CreateTokenEffect(new KorAllyToken(), ColorsOfManaSpentToCastCount.getInstance()); + getSpellAbility().addEffect(effect); + } + + public UnifiedFront(final UnifiedFront card) { + super(card); + } + + @Override + public UnifiedFront copy() { + return new UnifiedFront(this); + } +} diff --git a/Mage.Sets/src/mage/sets/zendikar/ArrowVolleyTrap.java b/Mage.Sets/src/mage/sets/zendikar/ArrowVolleyTrap.java index 704c1011a60..cf786931cf8 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ArrowVolleyTrap.java +++ b/Mage.Sets/src/mage/sets/zendikar/ArrowVolleyTrap.java @@ -35,8 +35,7 @@ import mage.abilities.effects.common.DamageMultiEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.AttackingPredicate; +import mage.filter.common.FilterAttackingCreature; import mage.game.Game; import mage.target.common.TargetCreaturePermanentAmount; @@ -45,23 +44,16 @@ import mage.target.common.TargetCreaturePermanentAmount; */ public class ArrowVolleyTrap extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("attacking creatures"); - - static { - filter.add(new AttackingPredicate()); - } - public ArrowVolleyTrap(UUID ownerId) { super(ownerId, 2, "Arrow Volley Trap", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{W}{W}"); this.expansionSetCode = "ZEN"; - // If four or more creatures are attacking, you may pay {1}{W} rather than pay Arrow Volley Trap's mana cost. this.getSpellAbility().addAlternativeCost(new ArrowVolleyTrapAlternativeCost()); // Arrow Volley Trap deals 5 damage divided as you choose among any number of target attacking creatures. this.getSpellAbility().addEffect(new DamageMultiEffect(5)); - this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(5, filter)); + this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(5, new FilterAttackingCreature("attacking creatures"))); } @@ -100,4 +92,4 @@ class ArrowVolleyTrapAlternativeCost extends AlternativeCostImpl { public String getText() { return "If four or more creatures are attacking, you may pay {1}{W} rather than pay {this}'s mana cost"; } -} \ No newline at end of file +} From fffeaf1e5c83b89f41e8d8ffd341547615f48f76 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 01:12:47 +0200 Subject: [PATCH 14/23] [BFZ] Added missing colorless cards (3 cards). --- .../sets/battleforzendikar/BaneOfBalaGed.java | 101 +++++++++++++++ .../sets/battleforzendikar/RuinProcessor.java | 118 +++++++++++++++++ .../battleforzendikar/UlamogsDespoiler.java | 119 ++++++++++++++++++ .../common/AttacksTriggeredAbility.java | 23 ++-- 4 files changed, 349 insertions(+), 12 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BaneOfBalaGed.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/UlamogsDespoiler.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BaneOfBalaGed.java b/Mage.Sets/src/mage/sets/battleforzendikar/BaneOfBalaGed.java new file mode 100644 index 00000000000..38e38e9c644 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BaneOfBalaGed.java @@ -0,0 +1,101 @@ +/* + * 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.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author LevelX2 + */ +public class BaneOfBalaGed extends CardImpl { + + public BaneOfBalaGed(UUID ownerId) { + super(ownerId, 1, "Bane of Bala Ged", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{7}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.power = new MageInt(7); + this.toughness = new MageInt(5); + + // Whenever Bane of Bala Ged attacks, defending player exiles two permanents he or she controls. + this.addAbility(new AttacksTriggeredAbility(new BaneOfBalaGedEffect(), false, "", SetTargetPointer.PLAYER)); + } + + public BaneOfBalaGed(final BaneOfBalaGed card) { + super(card); + } + + @Override + public BaneOfBalaGed copy() { + return new BaneOfBalaGed(this); + } +} + +class BaneOfBalaGedEffect extends OneShotEffect { + + public BaneOfBalaGedEffect() { + super(Outcome.Benefit); + this.staticText = "defending player exiles two permanents he or she controls"; + } + + public BaneOfBalaGedEffect(final BaneOfBalaGedEffect effect) { + super(effect); + } + + @Override + public BaneOfBalaGedEffect copy() { + return new BaneOfBalaGedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player defendingPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (defendingPlayer != null) { + Target target = new TargetControlledPermanent(2); + defendingPlayer.chooseTarget(outcome, target, source, game); + defendingPlayer.moveCards(new CardsImpl(target.getTargets()), null, Zone.EXILED, source, game); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java b/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java new file mode 100644 index 00000000000..1b4c18931d8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java @@ -0,0 +1,118 @@ +/* + * 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.effects.OneShotEffect; +import mage.abilities.effects.common.CastSourceTriggeredAbility; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.other.OwnerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCardInExile; + +/** + * + * @author LevelX2 + */ +public class RuinProcessor extends CardImpl { + + public RuinProcessor(UUID ownerId) { + super(ownerId, 12, "Ruin Processor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{7}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Processor"); + this.power = new MageInt(7); + this.toughness = new MageInt(8); + + // When you cast Ruin Processor, you may put a card an opponent owns from exile into that player's graveyard. If you do, you gain 5 life. + this.addAbility(new CastSourceTriggeredAbility(new RuinProcessorEffect())); + + } + + public RuinProcessor(final RuinProcessor card) { + super(card); + } + + @Override + public RuinProcessor copy() { + return new RuinProcessor(this); + } +} + +class RuinProcessorEffect extends OneShotEffect { + + private final static FilterCard filter = new FilterCard("card an opponent owns from exile"); + + static { + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + } + + public RuinProcessorEffect() { + super(Outcome.Discard); + this.staticText = "you may put a card an opponent owns from exile into that player's graveyard. If you do, you gain 5 life"; + } + + public RuinProcessorEffect(final RuinProcessorEffect effect) { + super(effect); + } + + @Override + public RuinProcessorEffect copy() { + return new RuinProcessorEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Target target = new TargetCardInExile(1, 1, filter, null); + if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { + if (controller.chooseTarget(outcome, target, source, game)) { + Cards cardsToGraveyard = new CardsImpl(target.getTargets()); + controller.moveCards(cardsToGraveyard, null, Zone.GRAVEYARD, source, game); + controller.gainLife(5, game); + return true; + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/UlamogsDespoiler.java b/Mage.Sets/src/mage/sets/battleforzendikar/UlamogsDespoiler.java new file mode 100644 index 00000000000..c879bbeb29e --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/UlamogsDespoiler.java @@ -0,0 +1,119 @@ +/* + * 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.EntersBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.predicate.other.OwnerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCardInExile; + +/** + * + * @author LevelX2 + */ +public class UlamogsDespoiler extends CardImpl { + + public UlamogsDespoiler(UUID ownerId) { + super(ownerId, 16, "Ulamog's Despoiler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{6}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Processor"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // As Ulamog's Despoiler enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, Ulamog's Despoiler enters the battlefield with four +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new UlamogsDespoilerEffect(), null, true, + "As {this} enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, {this} enters the battlefield with four +1/+1 counters on it", null)); + } + + public UlamogsDespoiler(final UlamogsDespoiler card) { + super(card); + } + + @Override + public UlamogsDespoiler copy() { + return new UlamogsDespoiler(this); + } +} + +class UlamogsDespoilerEffect extends OneShotEffect { + + private final static FilterCard filter = new FilterCard("cards your opponents own from exile"); + + static { + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + } + + public UlamogsDespoilerEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "you may put two cards your opponents own from exile into their owners' graveyards. If you do, {this} enters the battlefield with four +1/+1 counters on it"; + } + + public UlamogsDespoilerEffect(final UlamogsDespoilerEffect effect) { + super(effect); + } + + @Override + public UlamogsDespoilerEffect copy() { + return new UlamogsDespoilerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Target target = new TargetCardInExile(2, 2, filter, null); + if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { + if (controller.chooseTarget(outcome, target, source, game)) { + Cards cardsToGraveyard = new CardsImpl(target.getTargets()); + controller.moveCards(cardsToGraveyard, null, Zone.GRAVEYARD, source, game); + return new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)).apply(game, source); + } + } + return true; + } + return false; + } +} diff --git a/Mage/src/mage/abilities/common/AttacksTriggeredAbility.java b/Mage/src/mage/abilities/common/AttacksTriggeredAbility.java index c7e021de865..7d25d03291f 100644 --- a/Mage/src/mage/abilities/common/AttacksTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/AttacksTriggeredAbility.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.common; import java.util.UUID; @@ -42,14 +41,14 @@ import mage.target.targetpointer.FixedTarget; * @author BetaSteward_at_googlemail.com */ public class AttacksTriggeredAbility extends TriggeredAbilityImpl { - + protected SetTargetPointer setTargetPointer; protected String text; public AttacksTriggeredAbility(Effect effect, boolean optional) { this(effect, optional, null); } - + public AttacksTriggeredAbility(Effect effect, boolean optional, String text) { this(effect, optional, text, SetTargetPointer.NONE); } @@ -73,12 +72,12 @@ public class AttacksTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - if (game.getCombat().getAttackers().contains(this.getSourceId()) ) { - switch(setTargetPointer) { + if (game.getCombat().getAttackers().contains(this.getSourceId())) { + switch (setTargetPointer) { case PLAYER: UUID defendingPlayerId = game.getCombat().getDefendingPlayerId(getSourceId(), game); if (defendingPlayerId != null) { - for (Effect effect: getEffects()) { + for (Effect effect : getEffects()) { effect.setTargetPointer(new FixedTarget(defendingPlayerId)); } } @@ -93,7 +92,7 @@ public class AttacksTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { if (text == null || text.isEmpty()) { - return "When {this} attacks, " + super.getRule(); + return "Whenever {this} attacks, " + super.getRule(); } return text; } From 1708a49d37b4a95ec476306e7c386b29414b7cea Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 02:22:08 +0200 Subject: [PATCH 15/23] [BFZ] Added missing green cards (19 cards). --- .../sets/battleforzendikar/Blisterpod.java | 71 +++++++++ .../sets/battleforzendikar/BroodMonitor.java | 72 +++++++++ .../sets/battleforzendikar/CallTheScions.java | 66 ++++++++ .../battleforzendikar/DeathlessBehemoth.java | 3 +- .../sets/battleforzendikar/EarthenArms.java | 65 ++++++++ .../battleforzendikar/EyelessWatcher.java | 72 +++++++++ .../InfuseWithTheElements.java | 72 +++++++++ .../sets/battleforzendikar/JaddiOffshoot.java | 66 ++++++++ .../battleforzendikar/LifespringDruid.java | 63 ++++++++ .../sets/battleforzendikar/MurasaRanger.java | 67 ++++++++ .../battleforzendikar/NaturalConnection.java | 62 ++++++++ .../battleforzendikar/OranRiefInvoker.java | 77 ++++++++++ .../battleforzendikar/ReclaimingVines.java | 72 +++++++++ .../sets/battleforzendikar/RotShambler.java | 76 ++++++++++ .../sets/battleforzendikar/RuinProcessor.java | 2 +- .../sets/battleforzendikar/SeekTheWilds.java | 69 +++++++++ .../sets/battleforzendikar/SwellOfGrowth.java | 63 ++++++++ .../battleforzendikar/TajuruBeastmaster.java | 66 ++++++++ .../battleforzendikar/TajuruStalwart.java | 70 +++++++++ .../UnnaturalAggression.java | 143 ++++++++++++++++++ .../sets/battleforzendikar/VoidAttendant.java | 136 +++++++++++++++++ .../counter/AddCountersTargetEffect.java | 52 +++---- .../DealtDamageToCreatureBySourceDies.java | 8 +- 23 files changed, 1480 insertions(+), 33 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/Blisterpod.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BroodMonitor.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/EarthenArms.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/EyelessWatcher.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/JaddiOffshoot.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/LifespringDruid.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/MurasaRanger.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/NaturalConnection.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/OranRiefInvoker.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ReclaimingVines.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RotShambler.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SeekTheWilds.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SwellOfGrowth.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TajuruBeastmaster.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TajuruStalwart.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/Blisterpod.java b/Mage.Sets/src/mage/sets/battleforzendikar/Blisterpod.java new file mode 100644 index 00000000000..41398c4c2d7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/Blisterpod.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.DiesTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; + +/** + * + * @author LevelX2 + */ +public class Blisterpod extends CardImpl { + + public Blisterpod(UUID ownerId) { + super(ownerId, 163, "Blisterpod", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // When Blisterpod 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 Blisterpod(final Blisterpod card) { + super(card); + } + + @Override + public Blisterpod copy() { + return new Blisterpod(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BroodMonitor.java b/Mage.Sets/src/mage/sets/battleforzendikar/BroodMonitor.java new file mode 100644 index 00000000000..ecf6c1431d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BroodMonitor.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.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; + +/** + * + * @author LevelX2 + */ +public class BroodMonitor extends CardImpl { + + public BroodMonitor(UUID ownerId) { + super(ownerId, 164, "Brood Monitor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // When Brood Monitor enters the battlefield, put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool." + Effect effect = new CreateTokenEffect(new EldraziScionToken(), 3); + effect.setText("put three 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have \"Sacrifice this creature: Add {1} to your mana pool.\""); + this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false)); + + } + + public BroodMonitor(final BroodMonitor card) { + super(card); + } + + @Override + public BroodMonitor copy() { + return new BroodMonitor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java b/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java new file mode 100644 index 00000000000..ee853f0190f --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.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.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; + +/** + * + * @author LevelX2 + */ +public class CallTheScions extends CardImpl { + + public CallTheScions(UUID ownerId) { + super(ownerId, 165, "Call the Scions", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{G}"); + this.expansionSetCode = "BFZ"; + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: add {1} to your mana pool." + Effect effect = new CreateTokenEffect(new EldraziScionToken(), 2); + effect.setText("put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have \"Sacrifice this creature: Add {1} to your mana pool.\""); + this.getSpellAbility().addEffect(effect); + + } + + public CallTheScions(final CallTheScions card) { + super(card); + } + + @Override + public CallTheScions copy() { + return new CallTheScions(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/DeathlessBehemoth.java b/Mage.Sets/src/mage/sets/battleforzendikar/DeathlessBehemoth.java index aac83b5c1bb..36085ecf6d1 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/DeathlessBehemoth.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/DeathlessBehemoth.java @@ -49,6 +49,7 @@ import mage.target.common.TargetControlledPermanent; public class DeathlessBehemoth extends CardImpl { private final static FilterControlledPermanent filter = new FilterControlledPermanent("two Eldrazi Scions"); + static { filter.add(Predicates.and( new SubtypePredicate("Eldrazi"), @@ -56,7 +57,7 @@ public class DeathlessBehemoth extends CardImpl { } public DeathlessBehemoth(UUID ownerId) { - super(ownerId, 5, "Deathless Behemoth", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}"); + super(ownerId, 5, "Deathless Behemoth", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{6}"); this.expansionSetCode = "BFZ"; this.subtype.add("Eldrazi"); this.power = new MageInt(6); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/EarthenArms.java b/Mage.Sets/src/mage/sets/battleforzendikar/EarthenArms.java new file mode 100644 index 00000000000..b59920c5383 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/EarthenArms.java @@ -0,0 +1,65 @@ +/* + * 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.counter.AddCountersTargetEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.TargetPermanent; + +/** + * + * @author LevelX2 + */ +public class EarthenArms extends CardImpl { + + public EarthenArms(UUID ownerId) { + super(ownerId, 172, "Earthen Arms", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{G}"); + this.expansionSetCode = "BFZ"; + + // Put two +1/+1 counters on target permanent. + this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))); + this.getSpellAbility().addTarget(new TargetPermanent()); + + // Awaken 4 - {6}{G} + this.addAbility(new AwakenAbility(this, 4, "{6}{G}")); + } + + public EarthenArms(final EarthenArms card) { + super(card); + } + + @Override + public EarthenArms copy() { + return new EarthenArms(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/EyelessWatcher.java b/Mage.Sets/src/mage/sets/battleforzendikar/EyelessWatcher.java new file mode 100644 index 00000000000..f21d030f168 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/EyelessWatcher.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.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; + +/** + * + * @author LevelX2 + */ +public class EyelessWatcher extends CardImpl { + + public EyelessWatcher(UUID ownerId) { + super(ownerId, 166, "Eyeless Watcher", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // When Eyeless Watcher enters the battlefield, put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: Add {1} to your mana pool." + Effect effect = new CreateTokenEffect(new EldraziScionToken(), 2); + effect.setText("put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have \"Sacrifice this creature: Add {1} to your mana pool.\""); + this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false)); + + } + + public EyelessWatcher(final EyelessWatcher card) { + super(card); + } + + @Override + public EyelessWatcher copy() { + return new EyelessWatcher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java b/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java new file mode 100644 index 00000000000..2a5dd29f42b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.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.dynamicvalue.common.ColorsOfManaSpentToCastCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class InfuseWithTheElements extends CardImpl { + + public InfuseWithTheElements(UUID ownerId) { + super(ownerId, 175, "Infuse with the Elements", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{G}"); + this.expansionSetCode = "BFZ"; + + // Converge - Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast Infuse with the Elements. + this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); + this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), ColorsOfManaSpentToCastCount.getInstance())); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + // That creature gains trample until end of turn. + Effect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); + effect.setText("That creature gains trample until end of turn"); + this.getSpellAbility().addEffect(effect); + } + + public InfuseWithTheElements(final InfuseWithTheElements card) { + super(card); + } + + @Override + public InfuseWithTheElements copy() { + return new InfuseWithTheElements(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/JaddiOffshoot.java b/Mage.Sets/src/mage/sets/battleforzendikar/JaddiOffshoot.java new file mode 100644 index 00000000000..20a35fa49f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/JaddiOffshoot.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.LandfallAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class JaddiOffshoot extends CardImpl { + + public JaddiOffshoot(UUID ownerId) { + super(ownerId, 176, "Jaddi Offshoot", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Plant"); + this.power = new MageInt(0); + this.toughness = new MageInt(3); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + // Landfall - Whenever a land enters the battlefield under your control, you gain 1 life. + this.addAbility(new LandfallAbility(new GainLifeEffect(1), false)); + } + + public JaddiOffshoot(final JaddiOffshoot card) { + super(card); + } + + @Override + public JaddiOffshoot copy() { + return new JaddiOffshoot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/LifespringDruid.java b/Mage.Sets/src/mage/sets/battleforzendikar/LifespringDruid.java new file mode 100644 index 00000000000..72cfe4c7392 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/LifespringDruid.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.MageInt; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class LifespringDruid extends CardImpl { + + public LifespringDruid(UUID ownerId) { + super(ownerId, 177, "Lifespring Druid", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Elf"); + this.subtype.add("Druid"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // {T}: Add one mana of any color to your mana pool. + this.addAbility(new AnyColorManaAbility()); + } + + public LifespringDruid(final LifespringDruid card) { + super(card); + } + + @Override + public LifespringDruid copy() { + return new LifespringDruid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MurasaRanger.java b/Mage.Sets/src/mage/sets/battleforzendikar/MurasaRanger.java new file mode 100644 index 00000000000..39b26a74afb --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MurasaRanger.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.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DoIfCostPaid; +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 MurasaRanger extends CardImpl { + + public MurasaRanger(UUID ownerId) { + super(ownerId, 178, "Murasa Ranger", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Warrior"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Landfall - Whenever a land enters the battlefield under your control, you may pay {3}{G}. IF you do, put two +1/+1 counters on Murasa Ranger. + this.addAbility(new LandfallAbility(new DoIfCostPaid(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), new ManaCostsImpl("{3}{G}")), false)); + } + + public MurasaRanger(final MurasaRanger card) { + super(card); + } + + @Override + public MurasaRanger copy() { + return new MurasaRanger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/NaturalConnection.java b/Mage.Sets/src/mage/sets/battleforzendikar/NaturalConnection.java new file mode 100644 index 00000000000..acd8ac264e2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/NaturalConnection.java @@ -0,0 +1,62 @@ +/* + * 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.search.SearchLibraryPutInPlayEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterBasicLandCard; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author LevelX2 + */ +public class NaturalConnection extends CardImpl { + + public NaturalConnection(UUID ownerId) { + super(ownerId, 179, "Natural Connection", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "BFZ"; + + // Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. + TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard()); + this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(target, true)); + + } + + public NaturalConnection(final NaturalConnection card) { + super(card); + } + + @Override + public NaturalConnection copy() { + return new NaturalConnection(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OranRiefInvoker.java b/Mage.Sets/src/mage/sets/battleforzendikar/OranRiefInvoker.java new file mode 100644 index 00000000000..3328a451a09 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OranRiefInvoker.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.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.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +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 LevelX2 + */ +public class OranRiefInvoker extends CardImpl { + + public OranRiefInvoker(UUID ownerId) { + super(ownerId, 182, "Oran-Rief Invoker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {8}: Oran-Rief Invoker gets +5/+5 and gains trample until end of turn. + Effect effect = new BoostSourceEffect(5, 5, Duration.EndOfTurn); + effect.setText("{source} gets +5/+5"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(8)); + effect = new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains trample until end of turn"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public OranRiefInvoker(final OranRiefInvoker card) { + super(card); + } + + @Override + public OranRiefInvoker copy() { + return new OranRiefInvoker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ReclaimingVines.java b/Mage.Sets/src/mage/sets/battleforzendikar/ReclaimingVines.java new file mode 100644 index 00000000000..8481715ce96 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ReclaimingVines.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.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPermanent; + +/** + * + * @author LevelX2 + */ +public class ReclaimingVines extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact, enchantment, or land"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.ARTIFACT), + new CardTypePredicate(CardType.ENCHANTMENT), + new CardTypePredicate(CardType.LAND))); + } + + public ReclaimingVines(UUID ownerId) { + super(ownerId, 185, "Reclaiming Vines", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{G}{G}"); + this.expansionSetCode = "BFZ"; + + // Destroy target artifact, enchantment, or land. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + } + + public ReclaimingVines(final ReclaimingVines card) { + super(card); + } + + @Override + public ReclaimingVines copy() { + return new ReclaimingVines(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RotShambler.java b/Mage.Sets/src/mage/sets/battleforzendikar/RotShambler.java new file mode 100644 index 00000000000..b42c874827b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RotShambler.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.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LevelX2 + */ +public class RotShambler extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature you control"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public RotShambler(UUID ownerId) { + super(ownerId, 187, "Rot Shambler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Fungus"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever another creature you control dies, put a +1/+1 counter on Rot Shambler. + this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter)); + + } + + public RotShambler(final RotShambler card) { + super(card); + } + + @Override + public RotShambler copy() { + return new RotShambler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java b/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java index 1b4c18931d8..96200d7cb4c 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java @@ -54,7 +54,7 @@ import mage.target.common.TargetCardInExile; public class RuinProcessor extends CardImpl { public RuinProcessor(UUID ownerId) { - super(ownerId, 12, "Ruin Processor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{7}"); + super(ownerId, 12, "Ruin Processor", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{7}"); this.expansionSetCode = "BFZ"; this.subtype.add("Eldrazi"); this.subtype.add("Processor"); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SeekTheWilds.java b/Mage.Sets/src/mage/sets/battleforzendikar/SeekTheWilds.java new file mode 100644 index 00000000000..40a3d84db60 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SeekTheWilds.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.battleforzendikar; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author LevelX2 + */ +public class SeekTheWilds extends CardImpl { + + private static final FilterCard filter = new FilterCard("a creature or land card"); + + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.CREATURE), new CardTypePredicate(CardType.LAND))); + } + + public SeekTheWilds(UUID ownerId) { + super(ownerId, 189, "Seek the Wilds", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{G}"); + this.expansionSetCode = "BFZ"; + + // Look at the top four cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in any order. + this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(new StaticValue(4), false, new StaticValue(1), filter, false)); + + } + + public SeekTheWilds(final SeekTheWilds card) { + super(card); + } + + @Override + public SeekTheWilds copy() { + return new SeekTheWilds(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SwellOfGrowth.java b/Mage.Sets/src/mage/sets/battleforzendikar/SwellOfGrowth.java new file mode 100644 index 00000000000..21da131ea05 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SwellOfGrowth.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.PutLandFromHandOntoBattlefieldEffect; +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 SwellOfGrowth extends CardImpl { + + public SwellOfGrowth(UUID ownerId) { + super(ownerId, 191, "Swell of Growth", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "BFZ"; + + // Target creature gets +2/+2 until end of turn. You may put a land card from your hand onto the battlefield. + this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new PutLandFromHandOntoBattlefieldEffect()); + } + + public SwellOfGrowth(final SwellOfGrowth card) { + super(card); + } + + @Override + public SwellOfGrowth copy() { + return new SwellOfGrowth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TajuruBeastmaster.java b/Mage.Sets/src/mage/sets/battleforzendikar/TajuruBeastmaster.java new file mode 100644 index 00000000000..a73c8265b5e --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TajuruBeastmaster.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.AllyEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class TajuruBeastmaster extends CardImpl { + + public TajuruBeastmaster(UUID ownerId) { + super(ownerId, 193, "Tajuru Beastmaster", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Elf"); + this.subtype.add("Warrior"); + this.subtype.add("Ally"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Rally - Whenever Tajuru Beastmaster or another Ally creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn. + this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn), false)); + } + + public TajuruBeastmaster(final TajuruBeastmaster card) { + super(card); + } + + @Override + public TajuruBeastmaster copy() { + return new TajuruBeastmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TajuruStalwart.java b/Mage.Sets/src/mage/sets/battleforzendikar/TajuruStalwart.java new file mode 100644 index 00000000000..15981c7815d --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TajuruStalwart.java @@ -0,0 +1,70 @@ +/* + * 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.EntersBattlefieldAbility; +import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; +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 TajuruStalwart extends CardImpl { + + public TajuruStalwart(UUID ownerId) { + super(ownerId, 194, "Tajuru Stalwart", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Elf"); + this.subtype.add("Scout"); + this.subtype.add("Ally"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Converge - Tajuru Stalwart enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(), ColorsOfManaSpentToCastCount.getInstance(), true), + null, true, "Converge - {this} enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.", null)); + + } + + public TajuruStalwart(final TajuruStalwart card) { + super(card); + } + + @Override + public TajuruStalwart copy() { + return new TajuruStalwart(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java b/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java new file mode 100644 index 00000000000..e6524803953 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java @@ -0,0 +1,143 @@ +/* + * 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.ReplacementEffectImpl; +import mage.abilities.effects.common.FightTargetsEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class UnnaturalAggression extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public UnnaturalAggression(UUID ownerId) { + super(ownerId, 168, "Unnatural Aggression", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "BFZ"; + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Target creature you control fights target creature an opponent controls. + this.getSpellAbility().addEffect(new FightTargetsEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + // If the creature an opponent controls would die this turn, exile it instead. + this.getSpellAbility().addEffect(new DealtDamageToOpponentsCreatureDiesEffect(Duration.EndOfTurn)); + } + + public UnnaturalAggression(final UnnaturalAggression card) { + super(card); + } + + @Override + public UnnaturalAggression copy() { + return new UnnaturalAggression(this); + } +} + +class DealtDamageToOpponentsCreatureDiesEffect extends ReplacementEffectImpl { + + public DealtDamageToOpponentsCreatureDiesEffect(Duration duration) { + super(Duration.EndOfTurn, Outcome.Exile); + staticText = "If the creature an opponent controls would die this turn, exile it instead"; + } + + public DealtDamageToOpponentsCreatureDiesEffect(final DealtDamageToOpponentsCreatureDiesEffect effect) { + super(effect); + } + + @Override + public DealtDamageToOpponentsCreatureDiesEffect copy() { + return new DealtDamageToOpponentsCreatureDiesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + Permanent opponentCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget()); + if (opponentCreature != null) { + this.setTargetPointer(new FixedTarget(opponentCreature, game)); + } else { + discard(); + } + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Permanent permanent = ((ZoneChangeEvent) event).getTarget(); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && permanent != null) { + return controller.moveCards(permanent, null, Zone.EXILED, source, game); + } + return false; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.ZONE_CHANGE; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + ZoneChangeEvent zce = (ZoneChangeEvent) event; + return zce.isDiesEvent() && zce.getTargetId().equals(getTargetPointer().getFirst(game, source)); + } + +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java b/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java new file mode 100644 index 00000000000..6bda7350b34 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java @@ -0,0 +1,136 @@ +/* + * 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.CostImpl; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +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.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.other.OwnerPredicate; +import mage.game.Game; +import mage.game.permanent.token.EldraziScionToken; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCardInExile; + +/** + * + * @author LevelX2 + */ +public class VoidAttendant extends CardImpl { + + public VoidAttendant(UUID ownerId) { + super(ownerId, 169, "Void Attendant", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Processor"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + + // {1}{G}, Put a card an opponent owns from exile into that player's graveyard: 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.\""); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{G}")); + ability.addCost(new VoidAttendantPutOpponentExileCardToGraveyardCost()); + this.addAbility(ability); + + } + + public VoidAttendant(final VoidAttendant card) { + super(card); + } + + @Override + public VoidAttendant copy() { + return new VoidAttendant(this); + } +} + +class VoidAttendantPutOpponentExileCardToGraveyardCost extends CostImpl { + + public VoidAttendantPutOpponentExileCardToGraveyardCost() { + this.text = "Put a card an opponent owns from exile into that player's graveyard"; + } + + public VoidAttendantPutOpponentExileCardToGraveyardCost(VoidAttendantPutOpponentExileCardToGraveyardCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + Player controller = game.getPlayer(controllerId); + if (controller != null) { + FilterCard filter = new FilterCard(); + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + Target target = new TargetCardInExile(filter); + if (controller.chooseTarget(Outcome.Damage, target, ability, game)) { + Card card = game.getCard(target.getFirstTarget()); + if (card != null) { + paid = true; + controller.moveCards(card, null, Zone.GRAVEYARD, ability, game); + } + } + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Player controller = game.getPlayer(controllerId); + if (controller != null) { + for (Card card : game.getExile().getAllCards(game)) { + if (controller.hasOpponent(card.getOwnerId(), game)) { + return true; + } + } + } + return false; + } + + @Override + public VoidAttendantPutOpponentExileCardToGraveyardCost copy() { + return new VoidAttendantPutOpponentExileCardToGraveyardCost(this); + } + +} diff --git a/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java b/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java index 25df790451c..9f421323473 100644 --- a/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.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,28 +20,26 @@ * 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.effects.common.counter; -import mage.constants.Outcome; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.counters.Counter; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - import java.util.UUID; import mage.MageObject; +import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.counters.Counter; import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; import mage.util.CardUtil; /** @@ -54,7 +52,7 @@ public class AddCountersTargetEffect extends OneShotEffect { private DynamicValue amount; public AddCountersTargetEffect(Counter counter) { - this(counter, counter.getName().equals(CounterType.M1M1.getName()) ? Outcome.UnboostCreature: Outcome.Benefit); + this(counter, counter.getName().equals(CounterType.M1M1.getName()) ? Outcome.UnboostCreature : Outcome.Benefit); } public AddCountersTargetEffect(Counter counter, DynamicValue amount) { @@ -94,10 +92,10 @@ public class AddCountersTargetEffect extends OneShotEffect { int before = permanent.getCounters().getCount(counter.getName()); permanent.addCounters(newCounter, game); int numberAdded = permanent.getCounters().getCount(counter.getName()) - before; - affectedTargets ++; + affectedTargets++; if (!game.isSimulation()) { - game.informPlayers(sourceObject.getLogName() +": "+ controller.getLogName()+ " puts " + - numberAdded + " " + counter.getName().toLowerCase() + " counter on " + permanent.getLogName()); + game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " puts " + + numberAdded + " " + counter.getName().toLowerCase() + " counter on " + permanent.getLogName()); } } } else { @@ -106,14 +104,14 @@ public class AddCountersTargetEffect extends OneShotEffect { Counter newCounter = counter.copy(); newCounter.add(amount.calculate(game, source, this)); player.addCounters(newCounter, game); - affectedTargets ++; + affectedTargets++; if (!game.isSimulation()) { - game.informPlayers(sourceObject.getLogName() +": " + controller.getLogName() + " puts " + - counter.getCount() + " " + counter.getName().toLowerCase() + " counter on " + player.getLogName()); - } + game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " puts " + + counter.getCount() + " " + counter.getName().toLowerCase() + " counter on " + player.getLogName()); + } } } - } + } return affectedTargets > 0; } return false; @@ -131,8 +129,11 @@ public class AddCountersTargetEffect extends OneShotEffect { } else { sb.append("a "); } - sb.append(counter.getName().toLowerCase()).append(" counter on "); - + sb.append(counter.getName().toLowerCase()).append(" counter"); + if (counter.getCount() > 1) { + sb.append("s"); + } + sb.append(" on "); // TODO: add normal text infrastructure for target pointers if (mode.getTargets().size() > 0) { @@ -155,5 +156,4 @@ public class AddCountersTargetEffect extends OneShotEffect { return new AddCountersTargetEffect(this); } - } diff --git a/Mage/src/mage/abilities/effects/common/replacement/DealtDamageToCreatureBySourceDies.java b/Mage/src/mage/abilities/effects/common/replacement/DealtDamageToCreatureBySourceDies.java index 7132048114b..ddb8825748e 100644 --- a/Mage/src/mage/abilities/effects/common/replacement/DealtDamageToCreatureBySourceDies.java +++ b/Mage/src/mage/abilities/effects/common/replacement/DealtDamageToCreatureBySourceDies.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.effects.common.replacement; import mage.abilities.Ability; @@ -47,11 +46,10 @@ import mage.watchers.common.DamagedByWatcher; * * @author LevelX2 */ - public class DealtDamageToCreatureBySourceDies extends ReplacementEffectImpl { public DealtDamageToCreatureBySourceDies(Card card, Duration duration) { - super(Duration.WhileOnBattlefield, Outcome.Exile); + super(duration, Outcome.Exile); if (card.getCardType().contains(CardType.CREATURE)) { staticText = "If a creature dealt damage by {this} this turn would die, exile it instead"; } else { @@ -75,7 +73,7 @@ public class DealtDamageToCreatureBySourceDies extends ReplacementEffectImpl { @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { - Permanent permanent = ((ZoneChangeEvent)event).getTarget(); + Permanent permanent = ((ZoneChangeEvent) event).getTarget(); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && permanent != null) { return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); @@ -90,7 +88,7 @@ public class DealtDamageToCreatureBySourceDies extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - ZoneChangeEvent zce = (ZoneChangeEvent) event; + ZoneChangeEvent zce = (ZoneChangeEvent) event; if (zce.isDiesEvent()) { DamagedByWatcher watcher = (DamagedByWatcher) game.getState().getWatchers().get("DamagedByWatcher", source.getSourceId()); if (watcher != null) { From 26ac193b0afc83dd7556f8928fff32072fc2866b Mon Sep 17 00:00:00 2001 From: Thomas Dwyer Date: Sat, 19 Sep 2015 01:08:31 -0700 Subject: [PATCH 16/23] Added one card, Book Burning, to the Judgement Set --- .../src/mage/sets/judgment/BookBurning.java | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/judgment/BookBurning.java diff --git a/Mage.Sets/src/mage/sets/judgment/BookBurning.java b/Mage.Sets/src/mage/sets/judgment/BookBurning.java new file mode 100644 index 00000000000..e9d834945b2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgment/BookBurning.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.judgment; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +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.stack.Spell; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.TargetPlayer; + +/** + * + * @author tomd1990 + */ +public class BookBurning extends CardImpl { + + public BookBurning(UUID ownerId) { + super(ownerId, 80, "Book Burning", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{R}"); + this.expansionSetCode = "JUD"; + + // Any player may have Book Burning deal 6 damage to him or her. If no one does, target player puts the top six cards of his or her library into his or her graveyard. + this.getSpellAbility().addEffect(new BookBurningMillEffect()); + this.getSpellAbility().addTarget(new TargetPlayer()); + + } + + public BookBurning(final BookBurning card) { + super(card); + } + + @Override + public BookBurning copy() { + return new BookBurning(this); + } +} + +class BookBurningMillEffect extends OneShotEffect { + + public BookBurningMillEffect() { + super(Outcome.Detriment); + staticText = "Any player may have {source} deal 6 damage to him or her. If no one does, target player puts the top six cards of his or her library into his or her graveyard."; + } + + public BookBurningMillEffect(final BookBurningMillEffect effect) { + super(effect); + } + + @Override + public BookBurningMillEffect copy() { + return new BookBurningMillEffect(this); + } + + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + StackObject spell = null; + for(StackObject object : game.getStack()){ + if(object instanceof Spell && object.getSourceId().equals(source.getSourceId())){ + spell = object; + } + } + if(spell != null){ + boolean MillCards = true; + for(UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)){ + Player player = game.getPlayer(playerId); + if (player != null && player.chooseUse(Outcome.Detriment, "Have " + spell.getLogName() + " deal 6 damage to you?", source, game)){ + MillCards = false; + player.damage(6, source.getSourceId(), game, false, true); + game.informPlayers(player.getLogName() + " has " + spell.getLogName() + " deal 6 to him or her"); + } + } + if (MillCards) { + UUID targetPlayer = getTargetPointer().getFirst(game, source); + if (targetPlayer != null) { + Player player = game.getPlayer(targetPlayer); + player.moveCards(player.getLibrary().getTopCards(game, 6), Zone.LIBRARY, Zone.GRAVEYARD, source, game); + } + } + return MillCards; + } + return false; + } +} \ No newline at end of file From f18b29bec96196268c6b8622bf4d08be335a5823 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 10:42:36 +0200 Subject: [PATCH 17/23] [BFZ] Some fixes to tooltip texts. Some minor bugs fixed. --- .../sets/battleforzendikar/CallTheScions.java | 5 +- .../battleforzendikar/CompleteDisregard.java | 5 +- .../sets/battleforzendikar/CrumbleToDust.java | 7 +- .../battleforzendikar/ExertInfluence.java | 4 +- .../sets/battleforzendikar/HorriblyAwry.java | 5 +- .../battleforzendikar/IncubatorDrone.java | 7 +- .../InfuseWithTheElements.java | 6 +- .../sets/battleforzendikar/MindRaker.java | 57 ++-------------- .../sets/battleforzendikar/MurkStrider.java | 57 ++-------------- .../sets/battleforzendikar/PainfulTruths.java | 9 ++- .../battleforzendikar/ProcessorAssault.java | 66 ++----------------- .../sets/battleforzendikar/RuinProcessor.java | 60 ++--------------- .../battleforzendikar/SerpentineSpike.java | 4 +- .../battleforzendikar/TouchOfTheVoid.java | 5 +- .../battleforzendikar/TransgressTheMind.java | 7 +- .../sets/battleforzendikar/TurnAgainst.java | 5 +- .../sets/battleforzendikar/UnifiedFront.java | 1 + .../UnnaturalAggression.java | 4 +- .../sets/battleforzendikar/VoidAttendant.java | 61 +---------------- .../battleforzendikar/WastelandStrangler.java | 57 ++-------------- .../mage/sets/returntoravnica/Syncopate.java | 24 ++----- Mage/src/mage/abilities/AbilityImpl.java | 7 +- .../effects/common/DoIfCostPaid.java | 1 + .../DrawCardSourceControllerEffect.java | 16 ++--- .../common/DrawDiscardControllerEffect.java | 6 +- .../abilities/effects/keyword/ScryEffect.java | 2 +- 26 files changed, 104 insertions(+), 384 deletions(-) diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java b/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java index ee853f0190f..439dbe84a3a 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CallTheScions.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.DevoidAbility; @@ -47,7 +48,9 @@ public class CallTheScions extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have "Sacrifice this creature: add {1} to your mana pool." Effect effect = new CreateTokenEffect(new EldraziScionToken(), 2); effect.setText("put two 1/1 colorless Eldrazi Scion creature tokens onto the battlefield. They have \"Sacrifice this creature: Add {1} to your mana pool.\""); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CompleteDisregard.java b/Mage.Sets/src/mage/sets/battleforzendikar/CompleteDisregard.java index 28a73d38ebe..9a923541d9c 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/CompleteDisregard.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CompleteDisregard.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; @@ -55,7 +56,9 @@ public class CompleteDisregard extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Exile target creature with power 3 or less. this.getSpellAbility().addEffect(new ExileTargetEffect()); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CrumbleToDust.java b/Mage.Sets/src/mage/sets/battleforzendikar/CrumbleToDust.java index c0e0d8f5073..fcbcf0a1c03 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/CrumbleToDust.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CrumbleToDust.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.common.ExileTargetAndSearchGraveyardHandLibraryEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; @@ -46,11 +47,13 @@ public class CrumbleToDust extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Exile target nonbasic land. Search its controller's graveyard, hand, and library for any number of cards with the same name as that land and exile them. Then that player shuffles his or her library. this.getSpellAbility().addTarget(new TargetNonBasicLandPermanent()); - this.getSpellAbility().addEffect(new ExileTargetAndSearchGraveyardHandLibraryEffect(false, "its controller's","any number of cards with the same name as that land")); + this.getSpellAbility().addEffect(new ExileTargetAndSearchGraveyardHandLibraryEffect(false, "its controller's", "any number of cards with the same name as that land")); } public CrumbleToDust(final CrumbleToDust card) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ExertInfluence.java b/Mage.Sets/src/mage/sets/battleforzendikar/ExertInfluence.java index e408f80f981..479fdb7709e 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ExertInfluence.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ExertInfluence.java @@ -34,6 +34,7 @@ import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.cards.CardImpl; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; @@ -54,6 +55,7 @@ public class ExertInfluence extends CardImpl { this.expansionSetCode = "BFZ"; // Converge-Gain control of target creature if its power is less than or equal to the number of colors spent to cast Exert Influence. + getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); getSpellAbility().addEffect(new ExertInfluenceEffect()); getSpellAbility().addTarget(new TargetCreaturePermanent()); @@ -73,7 +75,7 @@ class ExertInfluenceEffect extends OneShotEffect { public ExertInfluenceEffect() { super(Outcome.GainControl); - this.staticText = "Converge-Gain control of target creature if its power is less than or equal to the number of colors spent to cast {this}"; + this.staticText = "Gain control of target creature if its power is less than or equal to the number of colors spent to cast {this}"; } public ExertInfluenceEffect(final ExertInfluenceEffect effect) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/HorriblyAwry.java b/Mage.Sets/src/mage/sets/battleforzendikar/HorriblyAwry.java index ab9c0d95dab..793c186d79e 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/HorriblyAwry.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/HorriblyAwry.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.common.CounterTargetWithReplacementEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; @@ -56,7 +57,9 @@ public class HorriblyAwry extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Counter target creature spell with converted mana cost 4 or less. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. this.getSpellAbility().addEffect(new CounterTargetWithReplacementEffect(Zone.EXILED)); this.getSpellAbility().addTarget(new TargetSpell(filter)); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/IncubatorDrone.java b/Mage.Sets/src/mage/sets/battleforzendikar/IncubatorDrone.java index c6e27dff96f..aeba4330a7e 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/IncubatorDrone.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/IncubatorDrone.java @@ -30,6 +30,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; @@ -53,9 +54,11 @@ public class IncubatorDrone extends CardImpl { // Devoid this.addAbility(new DevoidAbility(this.color)); - + // Whenever Incubator Drone enters the battlefield, 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 EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new EldraziScionToken()))); + 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 EntersBattlefieldTriggeredAbility(effect, false)); } public IncubatorDrone(final IncubatorDrone card) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java b/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java index 2a5dd29f42b..656f335ff61 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/InfuseWithTheElements.java @@ -53,10 +53,12 @@ public class InfuseWithTheElements extends CardImpl { // Converge - Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast Infuse with the Elements. this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); - this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), ColorsOfManaSpentToCastCount.getInstance())); + Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(), ColorsOfManaSpentToCastCount.getInstance()); + effect.setText("Put X +1/+1 counters on target creature, where X is the number of colors of mana spent to cast {this}"); + this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // That creature gains trample until end of turn. - Effect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); + effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect.setText("That creature gains trample until end of turn"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java b/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java index a452f219ffc..c3db5959c7c 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java @@ -29,25 +29,15 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; +import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.discard.DiscardEachPlayerEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; -import mage.cards.Cards; -import mage.cards.CardsImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.other.OwnerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetCardInExile; /** * @@ -67,7 +57,8 @@ public class MindRaker extends CardImpl { this.addAbility(new DevoidAbility(this.color)); // When Mind Raker enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, each opponent discards a card. - this.addAbility(new EntersBattlefieldTriggeredAbility(new MindRakerEffect(), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new DoIfCostPaid(new DiscardEachPlayerEffect(TargetController.OPPONENT), new ExileOpponentsCardFromExileToGraveyardCost(true)), true)); } public MindRaker(final MindRaker card) { @@ -79,43 +70,3 @@ public class MindRaker extends CardImpl { return new MindRaker(this); } } - -class MindRakerEffect extends OneShotEffect { - - private final static FilterCard filter = new FilterCard("card an opponent owns from exile"); - - static { - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - } - - public MindRakerEffect() { - super(Outcome.Discard); - this.staticText = "you may put a card an opponent owns from exile into that player's graveyard. If you do, each opponent discards a card."; - } - - public MindRakerEffect(final MindRakerEffect effect) { - super(effect); - } - - @Override - public MindRakerEffect copy() { - return new MindRakerEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Target target = new TargetCardInExile(1, 1, filter, null); - if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { - if (controller.chooseTarget(outcome, target, source, game)) { - Cards cardsToGraveyard = new CardsImpl(target.getTargets()); - controller.moveCards(cardsToGraveyard, null, Zone.GRAVEYARD, source, game); - return new DiscardEachPlayerEffect(TargetController.OPPONENT).apply(game, source); - } - } - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MurkStrider.java b/Mage.Sets/src/mage/sets/battleforzendikar/MurkStrider.java index fc7edd52c3f..0cc67d861b1 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/MurkStrider.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MurkStrider.java @@ -31,23 +31,13 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; +import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; -import mage.cards.Cards; -import mage.cards.CardsImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.other.OwnerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetCardInExile; import mage.target.common.TargetCreaturePermanent; /** @@ -68,7 +58,8 @@ public class MurkStrider extends CardImpl { this.addAbility(new DevoidAbility(this.color)); // When Murk Strider enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, return target creature to its owner's hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new MurkStriderEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility( + new DoIfCostPaid(new ReturnToHandTargetEffect(), new ExileOpponentsCardFromExileToGraveyardCost(true)), true); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } @@ -82,43 +73,3 @@ public class MurkStrider extends CardImpl { return new MurkStrider(this); } } - -class MurkStriderEffect extends OneShotEffect { - - private final static FilterCard filter = new FilterCard("card an opponent owns from exile"); - - static { - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - } - - public MurkStriderEffect() { - super(Outcome.Discard); - this.staticText = "you may put a card an opponent owns from exile into that player's graveyard. If you do, return target creature to its owner's hand."; - } - - public MurkStriderEffect(final MurkStriderEffect effect) { - super(effect); - } - - @Override - public MurkStriderEffect copy() { - return new MurkStriderEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Target target = new TargetCardInExile(1, 1, filter, null); - if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { - if (controller.chooseTarget(outcome, target, source, game)) { - Cards cardsToGraveyard = new CardsImpl(target.getTargets()); - controller.moveCards(cardsToGraveyard, null, Zone.GRAVEYARD, source, game); - return new ReturnToHandTargetEffect().apply(game, source); - } - } - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java b/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java index d4b561b056d..92a547499c0 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/PainfulTruths.java @@ -29,6 +29,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; @@ -48,8 +49,12 @@ public class PainfulTruths extends CardImpl { // Converge - 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); - getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance())); - getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance())); + Effect effect = new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance()); + effect.setText("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}"); + getSpellAbility().addEffect(effect); } public PainfulTruths(final PainfulTruths card) { diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java b/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java index a198f062322..dbcf4c0b8df 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ProcessorAssault.java @@ -29,22 +29,12 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; import mage.abilities.effects.common.DamageTargetEffect; 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.TargetController; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.other.OwnerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetCardInExile; import mage.target.common.TargetCreaturePermanent; /** @@ -58,10 +48,12 @@ public class ProcessorAssault extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // As an additional cost to cast Processor Assault, put a card an opponent owns from exile into its owner's graveyard. - this.getSpellAbility().addCost(new PutOpponentExileCardToGraveyardCost()); + this.getSpellAbility().addCost(new ExileOpponentsCardFromExileToGraveyardCost(false)); // Processor Assault deals 5 damage to target creature. this.getSpellAbility().addEffect(new DamageTargetEffect(5)); @@ -77,51 +69,3 @@ public class ProcessorAssault extends CardImpl { return new ProcessorAssault(this); } } - -class PutOpponentExileCardToGraveyardCost extends CostImpl { - - public PutOpponentExileCardToGraveyardCost() { - this.text = "put a card an opponent owns from exile into its owner's graveyard"; - } - - public PutOpponentExileCardToGraveyardCost(PutOpponentExileCardToGraveyardCost cost) { - super(cost); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { - Player controller = game.getPlayer(controllerId); - if (controller != null) { - FilterCard filter = new FilterCard(); - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - Target target = new TargetCardInExile(filter); - if (controller.chooseTarget(Outcome.Damage, target, ability, game)) { - Card card = game.getCard(target.getFirstTarget()); - if (card != null) { - paid = true; - controller.moveCards(card, null, Zone.GRAVEYARD, ability, game); - } - } - } - return paid; - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - Player controller = game.getPlayer(controllerId); - if (controller != null) { - for (Card card : game.getExile().getAllCards(game)) { - if (controller.hasOpponent(card.getOwnerId(), game)) { - return true; - } - } - } - return false; - } - - @Override - public PutOpponentExileCardToGraveyardCost copy() { - return new PutOpponentExileCardToGraveyardCost(this); - } - -} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java b/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java index 96200d7cb4c..32c73d263fc 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RuinProcessor.java @@ -29,23 +29,13 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; import mage.abilities.effects.common.CastSourceTriggeredAbility; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; -import mage.cards.Cards; -import mage.cards.CardsImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.other.OwnerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetCardInExile; /** * @@ -62,7 +52,8 @@ public class RuinProcessor extends CardImpl { this.toughness = new MageInt(8); // When you cast Ruin Processor, you may put a card an opponent owns from exile into that player's graveyard. If you do, you gain 5 life. - this.addAbility(new CastSourceTriggeredAbility(new RuinProcessorEffect())); + this.addAbility(new CastSourceTriggeredAbility( + new DoIfCostPaid(new GainLifeEffect(5), new ExileOpponentsCardFromExileToGraveyardCost(true)), true)); } @@ -75,44 +66,3 @@ public class RuinProcessor extends CardImpl { return new RuinProcessor(this); } } - -class RuinProcessorEffect extends OneShotEffect { - - private final static FilterCard filter = new FilterCard("card an opponent owns from exile"); - - static { - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - } - - public RuinProcessorEffect() { - super(Outcome.Discard); - this.staticText = "you may put a card an opponent owns from exile into that player's graveyard. If you do, you gain 5 life"; - } - - public RuinProcessorEffect(final RuinProcessorEffect effect) { - super(effect); - } - - @Override - public RuinProcessorEffect copy() { - return new RuinProcessorEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Target target = new TargetCardInExile(1, 1, filter, null); - if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { - if (controller.chooseTarget(outcome, target, source, game)) { - Cards cardsToGraveyard = new CardsImpl(target.getTargets()); - controller.moveCards(cardsToGraveyard, null, Zone.GRAVEYARD, source, game); - controller.gainLife(5, game); - return true; - } - } - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java b/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java index ee803053c4e..b6de1e9f1a6 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SerpentineSpike.java @@ -55,7 +55,9 @@ public class SerpentineSpike extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Serpentine Spike deals 2 damage to target creature, 3 damage to another target creature, and 4 damage to a third target creature. If a creature dealt damage this way would die this turn, exile it instead. this.getSpellAbility().addEffect(new SerpentineSpikeEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature (2 damage)"))); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java b/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java index e762dd6c31c..3ade709aaba 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TouchOfTheVoid.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.replacement.DealtDamageToCreatureBySourceDies; @@ -50,7 +51,9 @@ public class TouchOfTheVoid extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Touch of the Void deals 3 damage to target creature or player. If a creature dealt damage this way would die this turn, exile it instead. this.getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TransgressTheMind.java b/Mage.Sets/src/mage/sets/battleforzendikar/TransgressTheMind.java index 3f865e205cb..aaaef82e6cf 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/TransgressTheMind.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TransgressTheMind.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileCardYouChooseTargetOpponentEffect; import mage.abilities.keyword.DevoidAbility; @@ -56,7 +57,9 @@ public class TransgressTheMind extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Target player reveals his or her hand. You may choose a card from it with converted mana cost 3 or greater and exile that card. Effect effect = new ExileCardYouChooseTargetOpponentEffect(filter); @@ -73,4 +76,4 @@ public class TransgressTheMind extends CardImpl { public TransgressTheMind copy() { return new TransgressTheMind(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java b/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java index 890f78f1812..50defaa5d03 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TurnAgainst.java @@ -28,6 +28,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; +import mage.abilities.Ability; import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect; @@ -50,7 +51,9 @@ public class TurnAgainst extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java b/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java index bff442256cc..a80690b6504 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/UnifiedFront.java @@ -49,6 +49,7 @@ public class UnifiedFront extends CardImpl { // Converge — Put a 1/1 white Kor Ally creature token onto the battlefield for each color of mana spent to cast Unified Front. getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); Effect effect = new CreateTokenEffect(new KorAllyToken(), ColorsOfManaSpentToCastCount.getInstance()); + effect.setText("Put a 1/1 white Kor Ally creature token onto the battlefield for each color of mana spent to cast {this}"); getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java b/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java index e6524803953..2bc63e6feed 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/UnnaturalAggression.java @@ -68,7 +68,9 @@ public class UnnaturalAggression extends CardImpl { this.expansionSetCode = "BFZ"; // Devoid - this.addAbility(new DevoidAbility(this.color)); + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); // Target creature you control fights target creature an opponent controls. this.getSpellAbility().addEffect(new FightTargetsEffect()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java b/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java index 6bda7350b34..44baa72841d 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VoidAttendant.java @@ -31,25 +31,16 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; 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.TargetController; import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.other.OwnerPredicate; -import mage.game.Game; import mage.game.permanent.token.EldraziScionToken; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetCardInExile; /** * @@ -72,7 +63,7 @@ public class VoidAttendant extends CardImpl { 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.\""); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{G}")); - ability.addCost(new VoidAttendantPutOpponentExileCardToGraveyardCost()); + ability.addCost(new ExileOpponentsCardFromExileToGraveyardCost(true)); this.addAbility(ability); } @@ -86,51 +77,3 @@ public class VoidAttendant extends CardImpl { return new VoidAttendant(this); } } - -class VoidAttendantPutOpponentExileCardToGraveyardCost extends CostImpl { - - public VoidAttendantPutOpponentExileCardToGraveyardCost() { - this.text = "Put a card an opponent owns from exile into that player's graveyard"; - } - - public VoidAttendantPutOpponentExileCardToGraveyardCost(VoidAttendantPutOpponentExileCardToGraveyardCost cost) { - super(cost); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { - Player controller = game.getPlayer(controllerId); - if (controller != null) { - FilterCard filter = new FilterCard(); - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - Target target = new TargetCardInExile(filter); - if (controller.chooseTarget(Outcome.Damage, target, ability, game)) { - Card card = game.getCard(target.getFirstTarget()); - if (card != null) { - paid = true; - controller.moveCards(card, null, Zone.GRAVEYARD, ability, game); - } - } - } - return paid; - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - Player controller = game.getPlayer(controllerId); - if (controller != null) { - for (Card card : game.getExile().getAllCards(game)) { - if (controller.hasOpponent(card.getOwnerId(), game)) { - return true; - } - } - } - return false; - } - - @Override - public VoidAttendantPutOpponentExileCardToGraveyardCost copy() { - return new VoidAttendantPutOpponentExileCardToGraveyardCost(this); - } - -} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/WastelandStrangler.java b/Mage.Sets/src/mage/sets/battleforzendikar/WastelandStrangler.java index 0b98f9db22e..739f0d27721 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/WastelandStrangler.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/WastelandStrangler.java @@ -31,24 +31,14 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; +import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.keyword.DevoidAbility; import mage.cards.CardImpl; -import mage.cards.Cards; -import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.other.OwnerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetCardInExile; import mage.target.common.TargetCreaturePermanent; /** @@ -69,7 +59,8 @@ public class WastelandStrangler extends CardImpl { this.addAbility(new DevoidAbility(this.color)); // When Wasteland Strangler enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, target creature gets -3/-3 until end of turn. - Ability ability = new EntersBattlefieldTriggeredAbility(new WastelandStranglerEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility( + new DoIfCostPaid(new BoostTargetEffect(-3, -3, Duration.EndOfTurn), new ExileOpponentsCardFromExileToGraveyardCost(true)), true); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } @@ -83,43 +74,3 @@ public class WastelandStrangler extends CardImpl { return new WastelandStrangler(this); } } - -class WastelandStranglerEffect extends OneShotEffect { - - private final static FilterCard filter = new FilterCard("card an opponent owns from exile"); - - static { - filter.add(new OwnerPredicate(TargetController.OPPONENT)); - } - - public WastelandStranglerEffect() { - super(Outcome.Discard); - this.staticText = "you may put a card an opponent owns from exile into that player's graveyard. If you do, target creature gets -3/-3 until end of turn."; - } - - public WastelandStranglerEffect(final WastelandStranglerEffect effect) { - super(effect); - } - - @Override - public WastelandStranglerEffect copy() { - return new WastelandStranglerEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Target target = new TargetCardInExile(1, 1, filter, null); - if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { - if (controller.chooseTarget(outcome, target, source, game)) { - Cards cardsToGraveyard = new CardsImpl(target.getTargets()); - controller.moveCards(cardsToGraveyard, null, Zone.GRAVEYARD, source, game); - game.addEffect(new BoostTargetEffect(-3, -3, Duration.EndOfTurn), source); - } - } - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/returntoravnica/Syncopate.java b/Mage.Sets/src/mage/sets/returntoravnica/Syncopate.java index e275c8a853f..aa20cacdeb1 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/Syncopate.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/Syncopate.java @@ -40,7 +40,6 @@ import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.stack.Spell; @@ -56,7 +55,6 @@ public class Syncopate extends CardImpl { super(ownerId, 54, "Syncopate", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{X}{U}"); this.expansionSetCode = "RTR"; - // Counter target spell unless its controller pays {X}. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. this.getSpellAbility().addEffect(new SyncopateCounterUnlessPaysEffect()); this.getSpellAbility().addTarget(new TargetSpell()); @@ -90,27 +88,19 @@ class SyncopateCounterUnlessPaysEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source)); - if (spell != null) { - Player player = game.getPlayer(spell.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (spell != null && (spell instanceof Spell) && sourceObject != null) { Player controller = game.getPlayer(source.getControllerId()); - if (player != null && controller != null) { - + if (controller != null) { int amount = source.getManaCostsToPay().getX(); if (amount > 0) { GenericManaCost cost = new GenericManaCost(amount); if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) { - StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget()); if (stackObject != null && !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER, source.getFirstTarget(), source.getSourceId(), stackObject.getControllerId()))) { - game.informPlayers("Syncopate: cost wasn't payed - countering " + stackObject.getName()); - if (stackObject instanceof Spell) { - game.rememberLKI(source.getFirstTarget(), Zone.STACK, (Spell) stackObject); - } - game.getStack().remove(stackObject); - MageObject card = game.getObject(stackObject.getSourceId()); - if (card instanceof Card) { - ((Card) card).moveToZone(Zone.EXILED, source.getSourceId(), game, false); - } + game.informPlayers(sourceObject.getIdName() + ": cost wasn't payed - countering " + stackObject.getName()); + game.rememberLKI(source.getFirstTarget(), Zone.STACK, (Spell) stackObject); + controller.moveCards((Spell) spell, null, Zone.EXILED, source, game); game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTERED, source.getFirstTarget(), source.getSourceId(), stackObject.getControllerId())); return true; } @@ -127,4 +117,4 @@ class SyncopateCounterUnlessPaysEffect extends OneShotEffect { return "Counter target spell unless its controller pays {X}. If that spell is countered this way, exile it instead of putting it into its owner's graveyard"; } -} \ No newline at end of file +} diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index 838204cfa09..50746636057 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -759,9 +759,7 @@ public abstract class AbilityImpl implements Ability { sbRule.append(": "); } } - if (abilityWord != null) { - sbRule.insert(0, new StringBuilder("").append(abilityWord.toString()).append(" — ")); - } + String ruleStart = sbRule.toString(); String text = modes.getText(); String rule; @@ -779,6 +777,9 @@ public abstract class AbilityImpl implements Ability { } else { rule = ruleStart; } + if (abilityWord != null) { + rule = "" + abilityWord + " — " + Character.toUpperCase(rule.charAt(0)) + rule.substring(1); + } return rule; } diff --git a/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java b/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java index 35ff9555c63..2d33c3d7484 100644 --- a/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java +++ b/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java @@ -94,6 +94,7 @@ public class DoIfCostPaid extends OneShotEffect { StringBuilder sb = new StringBuilder(); String costText = cost.getText(); if (costText != null + && !costText.toLowerCase().startsWith("put") && !costText.toLowerCase().startsWith("exile") && !costText.toLowerCase().startsWith("discard") && !costText.toLowerCase().startsWith("sacrifice") diff --git a/Mage/src/mage/abilities/effects/common/DrawCardSourceControllerEffect.java b/Mage/src/mage/abilities/effects/common/DrawCardSourceControllerEffect.java index 00ce366db90..2a152eebc1d 100644 --- a/Mage/src/mage/abilities/effects/common/DrawCardSourceControllerEffect.java +++ b/Mage/src/mage/abilities/effects/common/DrawCardSourceControllerEffect.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,20 +20,19 @@ * 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.effects.common; -import mage.constants.Outcome; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; import mage.util.CardUtil; @@ -78,7 +77,7 @@ public class DrawCardSourceControllerEffect extends OneShotEffect { private void setText() { StringBuilder sb = new StringBuilder(); boolean oneCard = (amount instanceof StaticValue && amount.calculate(null, null, this) == 1) - || amount instanceof PermanentsOnBattlefieldCount || amount.toString().equals("1"); + || amount instanceof PermanentsOnBattlefieldCount || amount.toString().equals("1"); sb.append("draw ").append(oneCard ? "a" : CardUtil.numberToText(amount.toString())).append(" card"); if (!oneCard) { sb.append("s"); @@ -91,5 +90,4 @@ public class DrawCardSourceControllerEffect extends OneShotEffect { staticText = sb.toString(); } - } diff --git a/Mage/src/mage/abilities/effects/common/DrawDiscardControllerEffect.java b/Mage/src/mage/abilities/effects/common/DrawDiscardControllerEffect.java index 811addcd588..a710d9aff7e 100644 --- a/Mage/src/mage/abilities/effects/common/DrawDiscardControllerEffect.java +++ b/Mage/src/mage/abilities/effects/common/DrawDiscardControllerEffect.java @@ -57,10 +57,12 @@ public class DrawDiscardControllerEffect extends OneShotEffect { this.cardsToDraw = cardsToDraw; this.cardsToDiscard = cardsToDiscard; this.optional = optional; - staticText = new StringBuilder("Draw ") + staticText = new StringBuilder(optional ? "you may " : "") + .append("draw ") .append(cardsToDraw == 1 ? "a" : CardUtil.numberToText(cardsToDraw)) .append(" card").append(cardsToDraw == 1 ? "" : "s") - .append(", then discard ") + .append(optional ? ", if you do" : ", then") + .append(" discard ") .append(cardsToDiscard == 1 ? "a" : CardUtil.numberToText(cardsToDiscard)) .append(" card").append(cardsToDiscard == 1 ? "" : "s").toString(); } diff --git a/Mage/src/mage/abilities/effects/keyword/ScryEffect.java b/Mage/src/mage/abilities/effects/keyword/ScryEffect.java index dec42b05dae..ab35b3dfdd0 100644 --- a/Mage/src/mage/abilities/effects/keyword/ScryEffect.java +++ b/Mage/src/mage/abilities/effects/keyword/ScryEffect.java @@ -71,7 +71,7 @@ public class ScryEffect extends OneShotEffect { } private void setText() { - StringBuilder sb = new StringBuilder("Scry ").append(scryNumber); + StringBuilder sb = new StringBuilder("scry ").append(scryNumber); if (scryNumber == 1) { sb.append(". (Look at the top card of your library. You may put that card on the bottom of your library.)"); } else { From 39baa82ce00702a9fac2cf29e4e56484a9a46129 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 10:43:03 +0200 Subject: [PATCH 18/23] [BFZ] Added missing blue cards (20 cards). --- .../battleforzendikar/AdverseConditions.java | 77 +++++++++++ .../battleforzendikar/BrilliantSpectrum.java | 66 +++++++++ .../battleforzendikar/ClutchOfCurrents.java | 64 +++++++++ .../battleforzendikar/CoralhelmGuide.java | 72 ++++++++++ .../battleforzendikar/CrypticCruiser.java | 76 +++++++++++ .../battleforzendikar/DampeningPulse.java | 71 ++++++++++ .../battleforzendikar/EldraziSkyspawner.java | 74 +++++++++++ .../battleforzendikar/HalimarTidecaller.java | 93 +++++++++++++ .../sets/battleforzendikar/OracleOfDust.java | 73 ++++++++++ .../battleforzendikar/RoilmagesTrick.java | 80 +++++++++++ .../battleforzendikar/RuinationGuide.java | 82 ++++++++++++ .../sets/battleforzendikar/RushOfIce.java | 66 +++++++++ .../sets/battleforzendikar/SalvageDrone.java | 71 ++++++++++ .../sets/battleforzendikar/SpellShrivel.java | 125 ++++++++++++++++++ .../sets/battleforzendikar/TideDrifter.java | 80 +++++++++++ .../battleforzendikar/TighteningCoils.java | 84 ++++++++++++ .../battleforzendikar/UlamogsReclaimer.java | 75 +++++++++++ .../battleforzendikar/WaveWingElemental.java | 68 ++++++++++ .../battleforzendikar/WindriderPatrol.java | 67 ++++++++++ ...OpponentsCardFromExileToGraveyardCost.java | 76 +++++++++++ 20 files changed, 1540 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/AdverseConditions.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/BrilliantSpectrum.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/ClutchOfCurrents.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CoralhelmGuide.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/CrypticCruiser.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/DampeningPulse.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/EldraziSkyspawner.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/HalimarTidecaller.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/OracleOfDust.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RuinationGuide.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/RushOfIce.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SalvageDrone.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/SpellShrivel.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TideDrifter.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/TighteningCoils.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/UlamogsReclaimer.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/WaveWingElemental.java create mode 100644 Mage.Sets/src/mage/sets/battleforzendikar/WindriderPatrol.java create mode 100644 Mage/src/mage/abilities/costs/common/ExileOpponentsCardFromExileToGraveyardCost.java diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AdverseConditions.java b/Mage.Sets/src/mage/sets/battleforzendikar/AdverseConditions.java new file mode 100644 index 00000000000..fef0c55058b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AdverseConditions.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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class AdverseConditions extends CardImpl { + + public AdverseConditions(UUID ownerId) { + super(ownerId, 54, "Adverse Conditions", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{U}"); + this.expansionSetCode = "BFZ"; + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + + // Tap up to two target creatures. Those creatures don't untap during their controller's next untap step. + this.getSpellAbility().addEffect(new TapTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); + this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); + // 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.getSpellAbility().addEffect(effect); + + } + + public AdverseConditions(final AdverseConditions card) { + super(card); + } + + @Override + public AdverseConditions copy() { + return new AdverseConditions(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BrilliantSpectrum.java b/Mage.Sets/src/mage/sets/battleforzendikar/BrilliantSpectrum.java new file mode 100644 index 00000000000..b1874062817 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/BrilliantSpectrum.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.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.discard.DiscardControllerEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class BrilliantSpectrum extends CardImpl { + + public BrilliantSpectrum(UUID ownerId) { + super(ownerId, 70, "Brilliant Spectrum", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{U}"); + this.expansionSetCode = "BFZ"; + + // Converge — Draw X cards, where X is the number of colors of mana spent to cast Brilliant Spectrum. Then discard two cards. + this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); + Effect effect = new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance()); + effect.setText("Draw X cards, where X is the number of colors of mana spent to cast {this}"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new DiscardControllerEffect(2)); + } + + public BrilliantSpectrum(final BrilliantSpectrum card) { + super(card); + } + + @Override + public BrilliantSpectrum copy() { + return new BrilliantSpectrum(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ClutchOfCurrents.java b/Mage.Sets/src/mage/sets/battleforzendikar/ClutchOfCurrents.java new file mode 100644 index 00000000000..2619589cb6a --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ClutchOfCurrents.java @@ -0,0 +1,64 @@ +/* + * 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.ReturnToHandTargetEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class ClutchOfCurrents extends CardImpl { + + public ClutchOfCurrents(UUID ownerId) { + super(ownerId, 72, "Clutch of Currents", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{U}"); + this.expansionSetCode = "BFZ"; + + // Return target creature to its owner's hand. + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Awaken 3—{4}{U} + this.addAbility(new AwakenAbility(this, 3, "{4}{U}")); + } + + public ClutchOfCurrents(final ClutchOfCurrents card) { + super(card); + } + + @Override + public ClutchOfCurrents copy() { + return new ClutchOfCurrents(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CoralhelmGuide.java b/Mage.Sets/src/mage/sets/battleforzendikar/CoralhelmGuide.java new file mode 100644 index 00000000000..30105514328 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CoralhelmGuide.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.combat.CantBeBlockedTargetEffect; +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 CoralhelmGuide extends CardImpl { + + public CoralhelmGuide(UUID ownerId) { + super(ownerId, 74, "Coralhelm Guide", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Merfolk"); + this.subtype.add("Scout"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // {4}{U}: Target creature can't be blocked this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{4}{U}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public CoralhelmGuide(final CoralhelmGuide card) { + super(card); + } + + @Override + public CoralhelmGuide copy() { + return new CoralhelmGuide(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/CrypticCruiser.java b/Mage.Sets/src/mage/sets/battleforzendikar/CrypticCruiser.java new file mode 100644 index 00000000000..e54defd0ce1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/CrypticCruiser.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.common.ExileOpponentsCardFromExileToGraveyardCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class CrypticCruiser extends CardImpl { + + public CrypticCruiser(UUID ownerId) { + super(ownerId, 56, "Cryptic Cruiser", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Processor"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // {2}{U}, Put a card an opponent owns from exile into that player's graveyard: Tap target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl<>("{2}{U}")); + ability.addCost(new ExileOpponentsCardFromExileToGraveyardCost(true)); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + } + + public CrypticCruiser(final CrypticCruiser card) { + super(card); + } + + @Override + public CrypticCruiser copy() { + return new CrypticCruiser(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/DampeningPulse.java b/Mage.Sets/src/mage/sets/battleforzendikar/DampeningPulse.java new file mode 100644 index 00000000000..e03a58c6f97 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/DampeningPulse.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.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LevelX2 + */ +public class DampeningPulse extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public DampeningPulse(UUID ownerId) { + super(ownerId, 75, "Dampening Pulse", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}"); + this.expansionSetCode = "BFZ"; + + // Creatures your opponents control get -1/-0. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(-1, -0, Duration.WhileOnBattlefield, filter, false))); + + } + + public DampeningPulse(final DampeningPulse card) { + super(card); + } + + @Override + public DampeningPulse copy() { + return new DampeningPulse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/EldraziSkyspawner.java b/Mage.Sets/src/mage/sets/battleforzendikar/EldraziSkyspawner.java new file mode 100644 index 00000000000..f741b022af0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/EldraziSkyspawner.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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.EldraziScionToken; + +/** + * + * @author LevelX2 + */ +public class EldraziSkyspawner extends CardImpl { + + public EldraziSkyspawner(UUID ownerId) { + super(ownerId, 58, "Eldrazi Skyspawner", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Flying + this.addAbility(FlyingAbility.getInstance()); + // When Eldrazi Skyspawner enters the battlefield, 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 EntersBattlefieldTriggeredAbility(effect, false)); + } + + public EldraziSkyspawner(final EldraziSkyspawner card) { + super(card); + } + + @Override + public EldraziSkyspawner copy() { + return new EldraziSkyspawner(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/HalimarTidecaller.java b/Mage.Sets/src/mage/sets/battleforzendikar/HalimarTidecaller.java new file mode 100644 index 00000000000..7afb519a95f --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/HalimarTidecaller.java @@ -0,0 +1,93 @@ +/* + * 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.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author LevelX2 + */ +public class HalimarTidecaller extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("Land creatures"); + private static final FilterCard filterCard = new FilterCard("card with awaken from your graveyard"); + + static { + filter.add(new CardTypePredicate(CardType.LAND)); + filter.add(new CardTypePredicate(CardType.CREATURE)); + filterCard.add(new AbilityPredicate(AwakenAbility.class)); + } + + public HalimarTidecaller(UUID ownerId) { + super(ownerId, 79, "Halimar Tidecaller", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.subtype.add("Ally"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // When Halimar Tidecaller enters the battlefield, you may return target card with awaken from your graveyard to your hand. + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); + ability.addTarget(new TargetCardInYourGraveyard(filterCard)); + + this.addAbility(ability); + + // Land creatures you control have flying. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter))); + + } + + public HalimarTidecaller(final HalimarTidecaller card) { + super(card); + } + + @Override + public HalimarTidecaller copy() { + return new HalimarTidecaller(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OracleOfDust.java b/Mage.Sets/src/mage/sets/battleforzendikar/OracleOfDust.java new file mode 100644 index 00000000000..26cfc75ed68 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OracleOfDust.java @@ -0,0 +1,73 @@ +/* + * 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.common.ExileOpponentsCardFromExileToGraveyardCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class OracleOfDust extends CardImpl { + + public OracleOfDust(UUID ownerId) { + super(ownerId, 63, "Oracle of Dust", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Processor"); + this.power = new MageInt(3); + this.toughness = new MageInt(5); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // {2}, Put a card an opponent owns from exile into that player's graveyard: Draw a card, then discard a card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawDiscardControllerEffect(1, 1), new ManaCostsImpl<>("{2}")); + ability.addCost(new ExileOpponentsCardFromExileToGraveyardCost(true)); + this.addAbility(ability); + } + + public OracleOfDust(final OracleOfDust card) { + super(card); + } + + @Override + public OracleOfDust copy() { + return new OracleOfDust(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java b/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java new file mode 100644 index 00000000000..5692d5a6cfa --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.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.battleforzendikar; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; +import mage.abilities.dynamicvalue.common.SignInversionDynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.cards.CardImpl; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LevelX2 + */ +public class RoilmagesTrick extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures your opponents control"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public RoilmagesTrick(UUID ownerId) { + super(ownerId, 83, "Roilmage's Trick", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{U}"); + this.expansionSetCode = "BFZ"; + + // Converge — Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast Roilmage's Trick. + this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); + Effect effect = new BoostAllEffect(new SignInversionDynamicValue(ColorsOfManaSpentToCastCount.getInstance()), new StaticValue(-0), Duration.EndOfTurn, filter, false); + effect.setText("Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast {this}.
"); + this.getSpellAbility().addEffect(effect); + + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public RoilmagesTrick(final RoilmagesTrick card) { + super(card); + } + + @Override + public RoilmagesTrick copy() { + return new RoilmagesTrick(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RuinationGuide.java b/Mage.Sets/src/mage/sets/battleforzendikar/RuinationGuide.java new file mode 100644 index 00000000000..a30a353a99b --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RuinationGuide.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.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +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; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorlessPredicate; +import mage.filter.predicate.permanent.AnotherPredicate; + +/** + * + * @author LevelX2 + */ +public class RuinationGuide extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Other colorless creatures you control"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new ColorlessPredicate()); + } + + public RuinationGuide(UUID ownerId) { + super(ownerId, 64, "Ruination Guide", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Ingest + this.addAbility(new IngestAbility()); + // Other colorless creatures you control get +1/+0. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, filter))); + } + + public RuinationGuide(final RuinationGuide card) { + super(card); + } + + @Override + public RuinationGuide copy() { + return new RuinationGuide(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RushOfIce.java b/Mage.Sets/src/mage/sets/battleforzendikar/RushOfIce.java new file mode 100644 index 00000000000..284b9088325 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RushOfIce.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.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.AwakenAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class RushOfIce extends CardImpl { + + public RushOfIce(UUID ownerId) { + super(ownerId, 84, "Rush of Ice", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{U}"); + this.expansionSetCode = "BFZ"; + + // Tap target creature. It doesn't untap during its controller's next untap step. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new TapTargetEffect()); + this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It")); + + // Awaken 3—{4}{U} + this.addAbility(new AwakenAbility(this, 3, "{4}{U}")); + } + + public RushOfIce(final RushOfIce card) { + super(card); + } + + @Override + public RushOfIce copy() { + return new RushOfIce(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SalvageDrone.java b/Mage.Sets/src/mage/sets/battleforzendikar/SalvageDrone.java new file mode 100644 index 00000000000..ddc93565ded --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SalvageDrone.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.DiesTriggeredAbility; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.abilities.keyword.IngestAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SalvageDrone extends CardImpl { + + public SalvageDrone(UUID ownerId) { + super(ownerId, 65, "Salvage Drone", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Ingest (Whenever this creature deals combat damage to a player, that player exiles the top card of his or her library.) + this.addAbility(new IngestAbility()); + // When Salvage Drone dies, you may draw a card. If you do, discard a card. + this.addAbility(new DiesTriggeredAbility(new DrawDiscardControllerEffect(1, 1, true), false)); + + } + + public SalvageDrone(final SalvageDrone card) { + super(card); + } + + @Override + public SalvageDrone copy() { + return new SalvageDrone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/SpellShrivel.java b/Mage.Sets/src/mage/sets/battleforzendikar/SpellShrivel.java new file mode 100644 index 00000000000..0ad2aad05c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/SpellShrivel.java @@ -0,0 +1,125 @@ +/* + * 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.MageObject; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.DevoidAbility; +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.events.GameEvent; +import mage.game.stack.Spell; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.TargetSpell; + +/** + * + * @author LevelX2 + */ +public class SpellShrivel extends CardImpl { + + public SpellShrivel(UUID ownerId) { + super(ownerId, 66, "Spell Shrivel", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{U}"); + this.expansionSetCode = "BFZ"; + + // Devoid + Ability ability = new DevoidAbility(this.color); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // Counter target spell unless its controller pays {4}. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. + this.getSpellAbility().addEffect(new SpellShrivelCounterUnlessPaysEffect()); + this.getSpellAbility().addTarget(new TargetSpell()); + } + + public SpellShrivel(final SpellShrivel card) { + super(card); + } + + @Override + public SpellShrivel copy() { + return new SpellShrivel(this); + } +} + +class SpellShrivelCounterUnlessPaysEffect extends OneShotEffect { + + public SpellShrivelCounterUnlessPaysEffect() { + super(Outcome.Detriment); + } + + public SpellShrivelCounterUnlessPaysEffect(final SpellShrivelCounterUnlessPaysEffect effect) { + super(effect); + } + + @Override + public SpellShrivelCounterUnlessPaysEffect copy() { + return new SpellShrivelCounterUnlessPaysEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source)); + MageObject sourceObject = source.getSourceObject(game); + if (spell != null && (spell instanceof Spell) && sourceObject != null) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int amount = 4; + if (amount > 0) { + GenericManaCost cost = new GenericManaCost(amount); + if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) { + StackObject stackObject = game.getStack().getStackObject(source.getFirstTarget()); + if (stackObject != null && !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.COUNTER, source.getFirstTarget(), source.getSourceId(), stackObject.getControllerId()))) { + game.informPlayers(sourceObject.getIdName() + ": cost wasn't payed - countering " + stackObject.getName()); + game.rememberLKI(source.getFirstTarget(), Zone.STACK, (Spell) stackObject); + controller.moveCards((Spell) spell, null, Zone.EXILED, source, game); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.COUNTERED, source.getFirstTarget(), source.getSourceId(), stackObject.getControllerId())); + return true; + } + return false; + } + } + } + } + return false; + } + + @Override + public String getText(Mode mode) { + return "Counter target spell unless its controller pays {4}. If that spell is countered this way, exile it instead of putting it into its owner's graveyard"; + } + +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TideDrifter.java b/Mage.Sets/src/mage/sets/battleforzendikar/TideDrifter.java new file mode 100644 index 00000000000..aad5defd960 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TideDrifter.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.battleforzendikar; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorlessPredicate; +import mage.filter.predicate.permanent.AnotherPredicate; + +/** + * + * @author LevelX2 + */ +public class TideDrifter extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Other colorless creatures you control"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new ColorlessPredicate()); + } + + public TideDrifter(UUID ownerId) { + super(ownerId, 67, "Tide Drifter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Drone"); + this.power = new MageInt(0); + this.toughness = new MageInt(5); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // Other colorless creatures you control get +0/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter))); + + } + + public TideDrifter(final TideDrifter card) { + super(card); + } + + @Override + public TideDrifter copy() { + return new TideDrifter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/TighteningCoils.java b/Mage.Sets/src/mage/sets/battleforzendikar/TighteningCoils.java new file mode 100644 index 00000000000..229c632b796 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/TighteningCoils.java @@ -0,0 +1,84 @@ +/* + * 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.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.LoseAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class TighteningCoils extends CardImpl { + + public TighteningCoils(UUID ownerId) { + super(ownerId, 86, "Tightening Coils", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature gets -6/-0 and loses flying. + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(-6, 0, Duration.WhileOnBattlefield)); + Effect effect = new LoseAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); + effect.setText("and loses flying"); + ability.addEffect(effect); + this.addAbility(ability); + + } + + public TighteningCoils(final TighteningCoils card) { + super(card); + } + + @Override + public TighteningCoils copy() { + return new TighteningCoils(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/UlamogsReclaimer.java b/Mage.Sets/src/mage/sets/battleforzendikar/UlamogsReclaimer.java new file mode 100644 index 00000000000..5d9788b7724 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/UlamogsReclaimer.java @@ -0,0 +1,75 @@ +/* + * 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.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.ExileOpponentsCardFromExileToGraveyardCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.keyword.DevoidAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterInstantOrSorceryCard; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author LevelX2 + */ +public class UlamogsReclaimer extends CardImpl { + + public UlamogsReclaimer(UUID ownerId) { + super(ownerId, 68, "Ulamog's Reclaimer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Eldrazi"); + this.subtype.add("Processor"); + this.power = new MageInt(2); + this.toughness = new MageInt(5); + + // Devoid + this.addAbility(new DevoidAbility(this.color)); + // When Ulamog's Reclaimer enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, return target instant or sorcery card from your graveyard to your hand. + Ability ability = new EntersBattlefieldTriggeredAbility( + new DoIfCostPaid(new ReturnFromGraveyardToHandTargetEffect(), new ExileOpponentsCardFromExileToGraveyardCost(true)), true); + ability.addTarget(new TargetCardInYourGraveyard(new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard"))); + this.addAbility(ability); + } + + public UlamogsReclaimer(final UlamogsReclaimer card) { + super(card); + } + + @Override + public UlamogsReclaimer copy() { + return new UlamogsReclaimer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/WaveWingElemental.java b/Mage.Sets/src/mage/sets/battleforzendikar/WaveWingElemental.java new file mode 100644 index 00000000000..6baccf24d65 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/WaveWingElemental.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.LandfallAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +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 WaveWingElemental extends CardImpl { + + public WaveWingElemental(UUID ownerId) { + super(ownerId, 88, "Wave-Wing Elemental", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Elemental"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Landfall — Whenever a land enters the battlefield under your control, Wave-Wing Elemental gets +2/+2 until end of turn. + this.addAbility(new LandfallAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), false)); + + } + + public WaveWingElemental(final WaveWingElemental card) { + super(card); + } + + @Override + public WaveWingElemental copy() { + return new WaveWingElemental(this); + } +} diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/WindriderPatrol.java b/Mage.Sets/src/mage/sets/battleforzendikar/WindriderPatrol.java new file mode 100644 index 00000000000..bde6805b885 --- /dev/null +++ b/Mage.Sets/src/mage/sets/battleforzendikar/WindriderPatrol.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.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class WindriderPatrol extends CardImpl { + + public WindriderPatrol(UUID ownerId) { + super(ownerId, 89, "Windrider Patrol", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "BFZ"; + this.subtype.add("Merfolk"); + this.subtype.add("Wizard"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Whenever Windrider Patrol deals combat damage to a player, scry 2. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new ScryEffect(2), false)); + } + + public WindriderPatrol(final WindriderPatrol card) { + super(card); + } + + @Override + public WindriderPatrol copy() { + return new WindriderPatrol(this); + } +} diff --git a/Mage/src/mage/abilities/costs/common/ExileOpponentsCardFromExileToGraveyardCost.java b/Mage/src/mage/abilities/costs/common/ExileOpponentsCardFromExileToGraveyardCost.java new file mode 100644 index 00000000000..94e498b2e3d --- /dev/null +++ b/Mage/src/mage/abilities/costs/common/ExileOpponentsCardFromExileToGraveyardCost.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.costs.common; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.CostImpl; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.other.OwnerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCardInExile; + +/** + * + * @author LevelX2 + */ +public class ExileOpponentsCardFromExileToGraveyardCost extends CostImpl { + + public ExileOpponentsCardFromExileToGraveyardCost(boolean thatPlayersText) { + if (false) { + this.text = "put a card an opponent owns from exile into its owner's graveyard"; + } else { + this.text = "put a card an opponent owns from exile into that player's graveyard"; + } + } + + public ExileOpponentsCardFromExileToGraveyardCost(ExileOpponentsCardFromExileToGraveyardCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + Player controller = game.getPlayer(controllerId); + if (controller != null) { + FilterCard filter = new FilterCard(); + filter.add(new OwnerPredicate(TargetController.OPPONENT)); + Target target = new TargetCardInExile(filter); + if (controller.chooseTarget(Outcome.Damage, target, ability, game)) { + Card card = game.getCard(target.getFirstTarget()); + if (card != null) { + paid = true; + controller.moveCards(card, null, Zone.GRAVEYARD, ability, game); + } + } + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Player controller = game.getPlayer(controllerId); + if (controller != null) { + for (Card card : game.getExile().getAllCards(game)) { + if (controller.hasOpponent(card.getOwnerId(), game)) { + return true; + } + } + } + return false; + } + + @Override + public ExileOpponentsCardFromExileToGraveyardCost copy() { + return new ExileOpponentsCardFromExileToGraveyardCost(this); + } + +} From f101db7c849b7631d0a070e1f1fd1627eba51b16 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 11:54:31 +0200 Subject: [PATCH 19/23] [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 00000000000..c2e4713537b --- /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 00000000000..a3097ea8114 --- /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 00000000000..33b905ad211 --- /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 00000000000..4dac3868387 --- /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 00000000000..a33a559e1bd --- /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 00000000000..25c3015a0ad --- /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 00000000000..848b4e1aab4 --- /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 00000000000..961116a0201 --- /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 00000000000..46641e624ae --- /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 00000000000..2fc7b1abe4b --- /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 00000000000..be28d713154 --- /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 00000000000..53442a1ddf5 --- /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 82ea5a1df23..036ce0ccb58 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 92a547499c0..c8e1fd01582 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 03e0c89e393..49dd0bc33ad 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 00000000000..0fd0a1fe951 --- /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 00000000000..bd3526bc99b --- /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 00000000000..e758d0d2264 --- /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 00000000000..4c86dffec66 --- /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 00000000000..349e6d21773 --- /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 00000000000..e8ddb52479b --- /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 00000000000..0264a61edf6 --- /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 c499cc268e0..002f0c851c2 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 96f21b26ec7..8e33063ba2f 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; From aa78456acafb9e3aa3d25885af90b593fee8a004 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 12:04:31 +0200 Subject: [PATCH 20/23] Minor changes to Book Burning. --- .../src/mage/sets/judgment/BookBurning.java | 55 +++++++------------ 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/Mage.Sets/src/mage/sets/judgment/BookBurning.java b/Mage.Sets/src/mage/sets/judgment/BookBurning.java index e9d834945b2..c6ff0c160f7 100644 --- a/Mage.Sets/src/mage/sets/judgment/BookBurning.java +++ b/Mage.Sets/src/mage/sets/judgment/BookBurning.java @@ -28,6 +28,7 @@ package mage.sets.judgment; import java.util.UUID; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -36,8 +37,6 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.game.Game; -import mage.game.stack.Spell; -import mage.game.stack.StackObject; import mage.players.Player; import mage.target.TargetPlayer; @@ -54,7 +53,6 @@ public class BookBurning extends CardImpl { // Any player may have Book Burning deal 6 damage to him or her. If no one does, target player puts the top six cards of his or her library into his or her graveyard. this.getSpellAbility().addEffect(new BookBurningMillEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); - } public BookBurning(final BookBurning card) { @@ -68,53 +66,42 @@ public class BookBurning extends CardImpl { } class BookBurningMillEffect extends OneShotEffect { - - public BookBurningMillEffect() { + + public BookBurningMillEffect() { super(Outcome.Detriment); - staticText = "Any player may have {source} deal 6 damage to him or her. If no one does, target player puts the top six cards of his or her library into his or her graveyard."; + staticText = "Any player may have {source} deal 6 damage to him or her. If no one does, target player puts the top six cards of his or her library into his or her graveyard"; } - - public BookBurningMillEffect(final BookBurningMillEffect effect) { + + public BookBurningMillEffect(final BookBurningMillEffect effect) { super(effect); } - + @Override public BookBurningMillEffect copy() { return new BookBurningMillEffect(this); } - - + @Override public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - StackObject spell = null; - for(StackObject object : game.getStack()){ - if(object instanceof Spell && object.getSourceId().equals(source.getSourceId())){ - spell = object; - } - } - if(spell != null){ - boolean MillCards = true; - for(UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)){ + MageObject sourceObject = source.getSourceObject(game); + if (sourceObject != null) { + boolean millCards = true; + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { Player player = game.getPlayer(playerId); - if (player != null && player.chooseUse(Outcome.Detriment, "Have " + spell.getLogName() + " deal 6 damage to you?", source, game)){ - MillCards = false; + if (player != null && player.chooseUse(Outcome.Detriment, "Have " + sourceObject.getLogName() + " deal 6 damage to you?", source, game)) { + millCards = false; player.damage(6, source.getSourceId(), game, false, true); - game.informPlayers(player.getLogName() + " has " + spell.getLogName() + " deal 6 to him or her"); + game.informPlayers(player.getLogName() + " has " + sourceObject.getLogName() + " deal 6 damage to him or her"); } } - if (MillCards) { - UUID targetPlayer = getTargetPointer().getFirst(game, source); + if (millCards) { + Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); if (targetPlayer != null) { - Player player = game.getPlayer(targetPlayer); - player.moveCards(player.getLibrary().getTopCards(game, 6), Zone.LIBRARY, Zone.GRAVEYARD, source, game); + targetPlayer.moveCards(targetPlayer.getLibrary().getTopCards(game, 6), Zone.LIBRARY, Zone.GRAVEYARD, source, game); } - } - return MillCards; + } + return true; } return false; } -} \ No newline at end of file +} From cd2842d457a33b6958e5cd04e8e22e4a40ca7af7 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 13:09:27 +0200 Subject: [PATCH 21/23] XMage 1.4.4v4 --- Mage.Common/src/mage/utils/MageVersion.java | 2 +- .../battleforzendikar/RoilmagesTrick.java | 7 +++--- .../zendikarvseldrazi/VeteranWarleader.java | 9 ++++---- .../abilities/costs/common/TapTargetCost.java | 22 +++++++++---------- .../effects/common/DestroyAllEffect.java | 9 ++++---- .../mage/cards/repository/CardRepository.java | 2 +- Utils/release/getting_implemented_cards.txt | 5 ++++- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Mage.Common/src/mage/utils/MageVersion.java b/Mage.Common/src/mage/utils/MageVersion.java index 57351660d59..b1adde18b0b 100644 --- a/Mage.Common/src/mage/utils/MageVersion.java +++ b/Mage.Common/src/mage/utils/MageVersion.java @@ -41,7 +41,7 @@ public class MageVersion implements Serializable, Comparable { public final static int MAGE_VERSION_MAJOR = 1; public final static int MAGE_VERSION_MINOR = 4; public final static int MAGE_VERSION_PATCH = 4; - public final static String MAGE_VERSION_MINOR_PATCH = "v3"; + public final static String MAGE_VERSION_MINOR_PATCH = "v4"; public final static String MAGE_VERSION_INFO = ""; private final int major; diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java b/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java index 5692d5a6cfa..de6e77d02c8 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/RoilmagesTrick.java @@ -31,7 +31,6 @@ import java.util.UUID; import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount; import mage.abilities.dynamicvalue.common.SignInversionDynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; @@ -61,9 +60,9 @@ public class RoilmagesTrick extends CardImpl { // Converge — Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast Roilmage's Trick. this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); - Effect effect = new BoostAllEffect(new SignInversionDynamicValue(ColorsOfManaSpentToCastCount.getInstance()), new StaticValue(-0), Duration.EndOfTurn, filter, false); - effect.setText("Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast {this}.
"); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new BoostAllEffect( + new SignInversionDynamicValue(ColorsOfManaSpentToCastCount.getInstance()), new StaticValue(-0), Duration.EndOfTurn, filter, false, + "Creatures your opponents control get -X/-0 until end of turn, where X is the number of colors of mana spent to cast {this}.
", true)); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/sets/zendikarvseldrazi/VeteranWarleader.java b/Mage.Sets/src/mage/sets/zendikarvseldrazi/VeteranWarleader.java index 234e3e4a159..7da3274afa2 100644 --- a/Mage.Sets/src/mage/sets/zendikarvseldrazi/VeteranWarleader.java +++ b/Mage.Sets/src/mage/sets/zendikarvseldrazi/VeteranWarleader.java @@ -64,8 +64,8 @@ import mage.target.common.TargetControlledPermanent; * @author fireshoes */ public class VeteranWarleader extends CardImpl { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another untapped Ally"); + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another untapped Ally you control"); static { filter.add(new AnotherPredicate()); @@ -84,9 +84,9 @@ public class VeteranWarleader extends CardImpl { // Veteran Warleader's power and toughness are each equal to the number of creatures you control. this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect( new PermanentsOnBattlefieldCount(new FilterControlledCreaturePermanent()), Duration.EndOfGame))); - + // Tap another untapped Ally you control: Veteran Warleader gains your choice of first strike, vigilance, or trample until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new VeteranWarleaderEffect(), new TapTargetCost(new TargetControlledPermanent(1, 1, filter, true)))); } @@ -101,6 +101,7 @@ public class VeteranWarleader extends CardImpl { } class VeteranWarleaderEffect extends OneShotEffect { + VeteranWarleaderEffect() { super(Outcome.AddAbility); staticText = "{this} gains your choice of first strike, vigilance, or trample until end of turn"; diff --git a/Mage/src/mage/abilities/costs/common/TapTargetCost.java b/Mage/src/mage/abilities/costs/common/TapTargetCost.java index a793bd6e3ba..749eea7aff5 100644 --- a/Mage/src/mage/abilities/costs/common/TapTargetCost.java +++ b/Mage/src/mage/abilities/costs/common/TapTargetCost.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.List; @@ -49,10 +48,10 @@ public class TapTargetCost extends CostImpl { public TapTargetCost(TargetControlledPermanent target) { this.target = target; this.target.setNotTarget(true); // costs are never targeted - this.text = - new StringBuilder("Tap ") - .append(target.getTargetName().startsWith("a ") || target.getTargetName().startsWith("an ") ? "":CardUtil.numberToText(target.getMaxNumberOfTargets())) - .append(" ") + this.text + = new StringBuilder("Tap ") + .append((target.getTargetName().startsWith("a ") || target.getTargetName().startsWith("an ") || target.getTargetName().startsWith("another")) + ? "" : CardUtil.numberToText(target.getMaxNumberOfTargets()) + " ") .append(target.getTargetName()).toString(); } @@ -64,7 +63,7 @@ public class TapTargetCost extends CostImpl { @Override public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { if (target.choose(Outcome.Tap, controllerId, sourceId, game)) { - for (UUID targetId: (List)target.getTargets()) { + for (UUID targetId : (List) target.getTargets()) { Permanent permanent = game.getPermanent(targetId); if (permanent == null) { return false; @@ -85,5 +84,4 @@ public class TapTargetCost extends CostImpl { return new TapTargetCost(this); } - } diff --git a/Mage/src/mage/abilities/effects/common/DestroyAllEffect.java b/Mage/src/mage/abilities/effects/common/DestroyAllEffect.java index 6546b17f8ae..51331c4e819 100644 --- a/Mage/src/mage/abilities/effects/common/DestroyAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/DestroyAllEffect.java @@ -42,6 +42,10 @@ public class DestroyAllEffect extends OneShotEffect { private FilterPermanent filter; private boolean noRegen; + public DestroyAllEffect(FilterPermanent filter) { + this(filter, false); + } + public DestroyAllEffect(FilterPermanent filter, boolean noRegen) { super(Outcome.DestroyPermanent); this.filter = filter; @@ -53,10 +57,6 @@ public class DestroyAllEffect extends OneShotEffect { } } - public DestroyAllEffect(FilterPermanent filter) { - this(filter, false); - } - public DestroyAllEffect(final DestroyAllEffect effect) { super(effect); this.filter = effect.filter.copy(); @@ -70,7 +70,6 @@ public class DestroyAllEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { permanent.destroy(source.getSourceId(), game, noRegen); } diff --git a/Mage/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java index 6cd148fbe91..4691eaa4f6f 100644 --- a/Mage/src/mage/cards/repository/CardRepository.java +++ b/Mage/src/mage/cards/repository/CardRepository.java @@ -63,7 +63,7 @@ public enum CardRepository { // raise this if db structure was changed private static final long CARD_DB_VERSION = 41; // raise this if new cards were added to the server - private static final long CARD_CONTENT_VERSION = 36; + private static final long CARD_CONTENT_VERSION = 37; private final Random random = new Random(); private Dao cardDao; diff --git a/Utils/release/getting_implemented_cards.txt b/Utils/release/getting_implemented_cards.txt index e8cb6d2f32d..a8e576fdfed 100644 --- a/Utils/release/getting_implemented_cards.txt +++ b/Utils/release/getting_implemented_cards.txt @@ -25,7 +25,10 @@ since 1.4.4.v0 git log 0a458707ddaaa5e7e82ab06d17633084f67077c1..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt since 1.4.4.v3 -git log 3d8494edb5c0fddcb972758f7d983b8b66a9651e..0a458707ddaaa5e7e82ab06d17633084f67077c1 --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt +git log 3d8494edb5c0fddcb972758f7d983b8b66a9651e..head --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt + +since 1.4.4.v4 +git log 513a574ae98aff3d7820e5411a8e5f2a6506e69c..head --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt 3. Copy added_cards.txt to trunk\Utils folder 4. Run script: From 12a8e69f3a9a90904c326ea65c51af25939ef0b5 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 19:49:20 +0200 Subject: [PATCH 22/23] * Lavastep Rider - Fixed wrong value for toughness. --- Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java | 2 +- Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java b/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java index 598beceec6b..e418f4d8807 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/LavastepRaider.java @@ -50,7 +50,7 @@ public class LavastepRaider extends CardImpl { this.subtype.add("Goblin"); this.subtype.add("Warrior"); this.power = new MageInt(1); - this.toughness = new MageInt(1); + this.toughness = new MageInt(2); // {2}{R}: Lavastep Raider gets +2/+0 until end of turn. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{2}{R}"))); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java b/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java index c3db5959c7c..a03fa277ee2 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/MindRaker.java @@ -58,7 +58,7 @@ public class MindRaker extends CardImpl { // When Mind Raker enters the battlefield, you may put a card an opponent owns from exile into that player's graveyard. If you do, each opponent discards a card. this.addAbility(new EntersBattlefieldTriggeredAbility( - new DoIfCostPaid(new DiscardEachPlayerEffect(TargetController.OPPONENT), new ExileOpponentsCardFromExileToGraveyardCost(true)), true)); + new DoIfCostPaid(new DiscardEachPlayerEffect(TargetController.OPPONENT), new ExileOpponentsCardFromExileToGraveyardCost(true)), false)); } public MindRaker(final MindRaker card) { From e7e0125720a6c84e141f13888b1fa548799b67f6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Sep 2015 19:52:51 +0200 Subject: [PATCH 23/23] * Ally Encampment - Fixed wrong conditional filter for the any mana ability. --- Mage.Sets/src/mage/sets/battleforzendikar/AllyEncampment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AllyEncampment.java b/Mage.Sets/src/mage/sets/battleforzendikar/AllyEncampment.java index 0aeea5e3b1e..8f2e4c81fb0 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/AllyEncampment.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AllyEncampment.java @@ -43,7 +43,7 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.FilterSpell; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.ColorlessPredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; import mage.target.common.TargetControlledCreaturePermanent; /** @@ -55,7 +55,7 @@ public class AllyEncampment extends CardImpl { private static final FilterSpell filter = new FilterSpell("an Ally spell"); static { - filter.add(new ColorlessPredicate()); + filter.add(new SubtypePredicate("Ally")); } public AllyEncampment(UUID ownerId) {