From 1132bb8eb2ae0916e4374cfb2eb41d93b81a8352 Mon Sep 17 00:00:00 2001 From: Styxo Date: Mon, 28 Mar 2016 19:11:22 +0200 Subject: [PATCH 1/2] Untap All Lands Effect - Added Filter --- .../common/UntapAllLandsControllerEffect.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java index 0c41f9cd9f2..7e180474270 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/UntapAllLandsControllerEffect.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; import mage.constants.Outcome; @@ -40,23 +39,32 @@ import mage.players.Player; * * @author Viserion */ - public class UntapAllLandsControllerEffect extends OneShotEffect { + private final FilterLandPermanent filter; + public UntapAllLandsControllerEffect() { super(Outcome.Untap); staticText = "Untap all lands you control"; + filter = new FilterLandPermanent(); } public UntapAllLandsControllerEffect(final UntapAllLandsControllerEffect effect) { super(effect); + this.filter = effect.filter; + } + + public UntapAllLandsControllerEffect(FilterLandPermanent filter) { + super(Outcome.Untap); + staticText = "Untap all " + filter.getMessage() + " you control"; + this.filter = filter; } @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - for (Permanent land: game.getBattlefield().getAllActivePermanents(new FilterLandPermanent(), player.getId(), game)) { + for (Permanent land : game.getBattlefield().getAllActivePermanents(filter, player.getId(), game)) { land.untap(game); } return true; @@ -69,4 +77,4 @@ public class UntapAllLandsControllerEffect extends OneShotEffect { return new UntapAllLandsControllerEffect(this); } -} \ No newline at end of file +} From 88477f4c17f86988017168c724bf8a7001d92495 Mon Sep 17 00:00:00 2001 From: Styxo Date: Mon, 28 Mar 2016 19:12:59 +0200 Subject: [PATCH 2/2] Added Gilt-Leaf Ambush and Woodland Guidance --- .../src/mage/sets/lorwyn/GiltLeafAmbush.java | 110 ++++++++++++++++++ .../mage/sets/lorwyn/WoodlandGuidance.java | 106 +++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/lorwyn/GiltLeafAmbush.java create mode 100644 Mage.Sets/src/mage/sets/lorwyn/WoodlandGuidance.java diff --git a/Mage.Sets/src/mage/sets/lorwyn/GiltLeafAmbush.java b/Mage.Sets/src/mage/sets/lorwyn/GiltLeafAmbush.java new file mode 100644 index 00000000000..949f72ba808 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/GiltLeafAmbush.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.lorwyn; + +import java.util.UUID; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ClashEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.ElfToken; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author Styxo + */ +public class GiltLeafAmbush extends CardImpl { + + public GiltLeafAmbush(UUID ownerId) { + super(ownerId, 214, "Gilt-Leaf Ambush", Rarity.COMMON, new CardType[]{CardType.TRIBAL, CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Elf"); + + // Put two 1/1 green Elf Warrior creature tokens into play. Clash with an opponent. If you win, those creatures gain deathtouch until end of turn + this.getSpellAbility().addEffect(new GiltLeafAmbushCreateTokenEffect()); + } + + public GiltLeafAmbush(final GiltLeafAmbush card) { + super(card); + } + + @Override + public GiltLeafAmbush copy() { + return new GiltLeafAmbush(this); + } +} + +class GiltLeafAmbushCreateTokenEffect extends OneShotEffect { + + public GiltLeafAmbushCreateTokenEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Put two 1/1 green Elf Warrior creature tokens into play. Clash with an opponent. If you win, those creatures gain deathtouch until end of turn"; + } + + public GiltLeafAmbushCreateTokenEffect(final GiltLeafAmbushCreateTokenEffect effect) { + super(effect); + } + + @Override + public GiltLeafAmbushCreateTokenEffect copy() { + return new GiltLeafAmbushCreateTokenEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + CreateTokenEffect effect = new CreateTokenEffect(new ElfToken(), 2); + effect.apply(game, source); + if (ClashEffect.getInstance().apply(game, source)) { + for (UUID tokenId : effect.getLastAddedTokenIds()) { + Permanent token = game.getPermanent(tokenId); + if (token != null) { + ContinuousEffect continuousEffect = new GainAbilityTargetEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn); + continuousEffect.setTargetPointer(new FixedTarget(tokenId)); + game.addEffect(continuousEffect, source); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/WoodlandGuidance.java b/Mage.Sets/src/mage/sets/lorwyn/WoodlandGuidance.java new file mode 100644 index 00000000000..a9d0e90bda7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/WoodlandGuidance.java @@ -0,0 +1,106 @@ +/* + * 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.lorwyn; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ClashEffect; +import mage.abilities.effects.common.ExileSpellEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.effects.common.UntapAllLandsControllerEffect; +import mage.constants.Outcome; +import mage.filter.common.FilterLandPermanent; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Styxo + */ +public class WoodlandGuidance extends CardImpl { + + public WoodlandGuidance(UUID ownerId) { + super(ownerId, 243, "Woodland Guidance", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{G}"); + this.expansionSetCode = "LRW"; + + // Return target card from your graveyard to your hand + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard()); + + // Clash with an opponent. If you win, untap all Forest you control + this.getSpellAbility().addEffect(new WoodlandGuidanceEffect()); + + // Remove WoodlandGuidance from the game + this.getSpellAbility().addEffect(ExileSpellEffect.getInstance()); + } + + public WoodlandGuidance(final WoodlandGuidance card) { + super(card); + } + + @Override + public WoodlandGuidance copy() { + return new WoodlandGuidance(this); + } +} + +class WoodlandGuidanceEffect extends OneShotEffect { + + public WoodlandGuidanceEffect() { + super(Outcome.ReturnToHand); + this.staticText = "Clash with an opponent. If you win, untap all Forest you control"; + } + + public WoodlandGuidanceEffect(final WoodlandGuidanceEffect effect) { + super(effect); + } + + @Override + public WoodlandGuidanceEffect copy() { + return new WoodlandGuidanceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + if (ClashEffect.getInstance().apply(game, source)) { + Effect effect = new UntapAllLandsControllerEffect(new FilterLandPermanent("Forest", "Forests")); + effect.apply(game, source); + } + return true; + } + return false; + } +}