From 690ba64d97d3bb742d4a942264fc1f04b60ca3b3 Mon Sep 17 00:00:00 2001 From: emerald000 Date: Wed, 27 Aug 2014 19:18:56 -0400 Subject: [PATCH] Added Decree of Justice, Diabolic Intent, Martyr's Cause, Victimize and Winding Canyons. --- .../src/mage/sets/conspiracy/Victimize.java | 107 ++++++++++++++++ .../mage/sets/planeshift/DiabolicIntent.java | 67 ++++++++++ .../mage/sets/scourge/DecreeOfJustice.java | 52 ++++++++ .../mage/sets/urzaslegacy/MartyrsCause.java | 70 +++++++++++ .../src/mage/sets/urzassaga/Victimize.java | 52 ++++++++ .../sets/vintagemasters/DecreeOfJustice.java | 114 ++++++++++++++++++ .../sets/weatherlight/WindingCanyons.java | 75 ++++++++++++ ...tDamageFromChosenSourceToTargetEffect.java | 82 +++++++++++++ 8 files changed, 619 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/conspiracy/Victimize.java create mode 100644 Mage.Sets/src/mage/sets/planeshift/DiabolicIntent.java create mode 100644 Mage.Sets/src/mage/sets/scourge/DecreeOfJustice.java create mode 100644 Mage.Sets/src/mage/sets/urzaslegacy/MartyrsCause.java create mode 100644 Mage.Sets/src/mage/sets/urzassaga/Victimize.java create mode 100644 Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java create mode 100644 Mage.Sets/src/mage/sets/weatherlight/WindingCanyons.java create mode 100644 Mage/src/mage/abilities/effects/common/PreventNextDamageFromChosenSourceToTargetEffect.java diff --git a/Mage.Sets/src/mage/sets/conspiracy/Victimize.java b/Mage.Sets/src/mage/sets/conspiracy/Victimize.java new file mode 100644 index 00000000000..c7c8e8146d7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/conspiracy/Victimize.java @@ -0,0 +1,107 @@ +/* + * 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.conspiracy; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.OneShotEffect; +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.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class Victimize extends CardImpl { + + public Victimize(UUID ownerId) { + super(ownerId, 133, "Victimize", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{B}"); + this.expansionSetCode = "CNS"; + + this.color.setBlack(true); + + // Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped. + this.getSpellAbility().addEffect(new VictimizeEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(2, new FilterCreatureCard("creature cards in your graveyard"))); + } + + public Victimize(final Victimize card) { + super(card); + } + + @Override + public Victimize copy() { + return new Victimize(this); + } +} + +class VictimizeEffect extends OneShotEffect { + + VictimizeEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped"; + } + + VictimizeEffect(final VictimizeEffect effect) { + super(effect); + } + + @Override + public VictimizeEffect copy() { + return new VictimizeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + SacrificeTargetCost cost = new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature"))); + if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), true)) { + for (UUID targetId: getTargetPointer().getTargets(game, source)) { + Card card = game.getCard(targetId); + if (card != null) { + player.putOntoBattlefieldWithInfo(card, game, Zone.GRAVEYARD, source.getSourceId(), true); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/planeshift/DiabolicIntent.java b/Mage.Sets/src/mage/sets/planeshift/DiabolicIntent.java new file mode 100644 index 00000000000..061be13828c --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/DiabolicIntent.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.planeshift; + +import java.util.UUID; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class DiabolicIntent extends CardImpl { + + public DiabolicIntent(UUID ownerId) { + super(ownerId, 42, "Diabolic Intent", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{B}"); + this.expansionSetCode = "PLS"; + + this.color.setBlack(true); + + // As an additional cost to cast Diabolic Intent, sacrifice a creature. + this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); + + // Search your library for a card and put that card into your hand. Then shuffle your library. + this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary())); + } + + public DiabolicIntent(final DiabolicIntent card) { + super(card); + } + + @Override + public DiabolicIntent copy() { + return new DiabolicIntent(this); + } +} diff --git a/Mage.Sets/src/mage/sets/scourge/DecreeOfJustice.java b/Mage.Sets/src/mage/sets/scourge/DecreeOfJustice.java new file mode 100644 index 00000000000..c45fcab4a43 --- /dev/null +++ b/Mage.Sets/src/mage/sets/scourge/DecreeOfJustice.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.scourge; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class DecreeOfJustice extends mage.sets.vintagemasters.DecreeOfJustice { + + public DecreeOfJustice(UUID ownerId) { + super(ownerId); + this.cardNumber = 8; + this.expansionSetCode = "SCG"; + } + + public DecreeOfJustice(final DecreeOfJustice card) { + super(card); + } + + @Override + public DecreeOfJustice copy() { + return new DecreeOfJustice(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/MartyrsCause.java b/Mage.Sets/src/mage/sets/urzaslegacy/MartyrsCause.java new file mode 100644 index 00000000000..c163e236d58 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzaslegacy/MartyrsCause.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.urzaslegacy; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.PreventNextDamageFromChosenSourceToTargetEffect; +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.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author emerald000 + */ +public class MartyrsCause extends CardImpl { + + public MartyrsCause(UUID ownerId) { + super(ownerId, 13, "Martyr's Cause", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + this.expansionSetCode = "ULG"; + + this.color.setWhite(true); + + // Sacrifice a creature: The next time a source of your choice would deal damage to target creature or player this turn, prevent that damage. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventNextDamageFromChosenSourceToTargetEffect(Duration.EndOfTurn), new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public MartyrsCause(final MartyrsCause card) { + super(card); + } + + @Override + public MartyrsCause copy() { + return new MartyrsCause(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/Victimize.java b/Mage.Sets/src/mage/sets/urzassaga/Victimize.java new file mode 100644 index 00000000000..bc495ff9c81 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/Victimize.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.urzassaga; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class Victimize extends mage.sets.conspiracy.Victimize { + + public Victimize(UUID ownerId) { + super(ownerId); + this.cardNumber = 166; + this.expansionSetCode = "USG"; + } + + public Victimize(final Victimize card) { + super(card); + } + + @Override + public Victimize copy() { + return new Victimize(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java b/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java new file mode 100644 index 00000000000..aef5c2587da --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java @@ -0,0 +1,114 @@ +/* + * 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.vintagemasters; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.CycleTriggeredAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCost; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.CyclingAbility; +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.AngelToken; +import mage.game.permanent.token.SoldierToken; +import mage.game.permanent.token.Token; +import mage.players.Player; + +/** + * + * @author emerald000 + */ +public class DecreeOfJustice extends CardImpl { + + public DecreeOfJustice(UUID ownerId) { + super(ownerId, 22, "Decree of Justice", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{X}{X}{2}{W}{W}"); + this.expansionSetCode = "VMA"; + + this.color.setWhite(true); + + // Put X 4/4 white Angel creature tokens with flying onto the battlefield. + this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), new ManacostVariableValue())); + + // Cycling {2}{W} + this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{W}"))); + + // When you cycle Decree of Justice, you may pay {X}. If you do, put X 1/1 white Soldier creature tokens onto the battlefield. + Ability ability = new CycleTriggeredAbility(new DecreeOfJusticeCycleEffect(), true); + this.addAbility(ability); + } + + public DecreeOfJustice(final DecreeOfJustice card) { + super(card); + } + + @Override + public DecreeOfJustice copy() { + return new DecreeOfJustice(this); + } +} + +class DecreeOfJusticeCycleEffect extends OneShotEffect { + + DecreeOfJusticeCycleEffect() { + super(Outcome.Benefit); + this.staticText = "you may pay {X}. If you do, put X 1/1 white Soldier creature tokens onto the battlefield"; + } + + DecreeOfJusticeCycleEffect(final DecreeOfJusticeCycleEffect effect) { + super(effect); + } + + @Override + public DecreeOfJusticeCycleEffect copy() { + return new DecreeOfJusticeCycleEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + ManaCosts cost = new ManaCostsImpl<>("{X}"); + if (player != null) { + int costX = player.announceXMana(0, Integer.MAX_VALUE, "Announce the value for {X}", game, source); + cost.add(new GenericManaCost(costX)); + if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { + Token token = new SoldierToken(); + token.putOntoBattlefield(costX, game, source.getSourceId(), source.getControllerId()); + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/weatherlight/WindingCanyons.java b/Mage.Sets/src/mage/sets/weatherlight/WindingCanyons.java new file mode 100644 index 00000000000..68d8d8193d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/WindingCanyons.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.weatherlight; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AddContinuousEffectToGame; +import mage.abilities.effects.common.continious.CastAsThoughItHadFlashEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; + +/** + * + * @author emerald000 + */ +public class WindingCanyons extends CardImpl { + + public WindingCanyons(UUID ownerId) { + super(ownerId, 167, "Winding Canyons", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "WTH"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {2}, {tap}: Until end of turn, you may play creature cards as though they had flash. + Effect effect = new AddContinuousEffectToGame(new CastAsThoughItHadFlashEffect(Duration.EndOfTurn, new FilterCreatureCard())); + effect.setText("Until end of turn, you may play creature cards as though they had flash"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public WindingCanyons(final WindingCanyons card) { + super(card); + } + + @Override + public WindingCanyons copy() { + return new WindingCanyons(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/PreventNextDamageFromChosenSourceToTargetEffect.java b/Mage/src/mage/abilities/effects/common/PreventNextDamageFromChosenSourceToTargetEffect.java new file mode 100644 index 00000000000..a8674ea668d --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/PreventNextDamageFromChosenSourceToTargetEffect.java @@ -0,0 +1,82 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.PreventionEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.FilterObject; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.TargetSource; + +/** + * + * @author emerald000 + */ +public class PreventNextDamageFromChosenSourceToTargetEffect extends PreventionEffectImpl { + + protected final TargetSource targetSource; + + public PreventNextDamageFromChosenSourceToTargetEffect(Duration duration) { + this(duration, new FilterObject<>("source")); + } + + public PreventNextDamageFromChosenSourceToTargetEffect(Duration duration, FilterObject filter) { + this(duration, filter, false); + } + + public PreventNextDamageFromChosenSourceToTargetEffect(Duration duration, FilterObject filter, boolean onlyCombat) { + super(duration, Integer.MAX_VALUE, onlyCombat); + this.targetSource = new TargetSource(filter); + } + + public PreventNextDamageFromChosenSourceToTargetEffect(final PreventNextDamageFromChosenSourceToTargetEffect effect) { + super(effect); + this.targetSource = effect.targetSource.copy(); + } + + @Override + public PreventNextDamageFromChosenSourceToTargetEffect copy() { + return new PreventNextDamageFromChosenSourceToTargetEffect(this); + } + + @Override + public void init(Ability source, Game game) { + this.targetSource.choose(Outcome.PreventDamage, source.getControllerId(), source.getSourceId(), game); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + preventDamageAction(event, source, game); + this.used = true; + return false; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (!this.used && super.applies(event, source, game)) { + if (event.getTargetId().equals(targetPointer.getFirst(game, source)) && event.getSourceId().equals(targetSource.getFirstTarget())) { + return true; + } + } + return false; + } + + @Override + public String getText(Mode mode) { + StringBuilder sb = new StringBuilder("The next time a ").append(targetSource.getFilter().getMessage()); + sb.append(" of your choice would deal damage to target "); + sb.append(mode.getTargets().get(0).getTargetName()); + if (duration.equals(Duration.EndOfTurn)) { + sb.append(" this turn"); + } + sb.append(", prevent that damage"); + return sb.toString(); + } +}