From 2d19f88c8bb71f31ce280ebe5b769f5040d33af2 Mon Sep 17 00:00:00 2001 From: emerald000 Date: Tue, 16 Sep 2014 13:42:31 -0400 Subject: [PATCH] Added Grenzo, Dungeon Warden, Culling the Weak, Nameless Inversion, Goblin Pyromancer and Tower of the Magistrate. --- .../sets/conspiracy/GrenzoDungeonWarden.java | 152 ++++++++++++++++++ .../src/mage/sets/exodus/CullingTheWeak.java | 67 ++++++++ .../mage/sets/lorwyn/NamelessInversion.java | 75 +++++++++ .../TowerOfTheMagistrate.java | 73 +++++++++ .../mage/sets/onslaught/GoblinPyromancer.java | 83 ++++++++++ .../vintagemasters/GrenzoDungeonWarden.java | 52 ++++++ .../LoseAllCreatureTypesTargetEffect.java | 76 +++++++++ 7 files changed, 578 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/conspiracy/GrenzoDungeonWarden.java create mode 100644 Mage.Sets/src/mage/sets/exodus/CullingTheWeak.java create mode 100644 Mage.Sets/src/mage/sets/lorwyn/NamelessInversion.java create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/TowerOfTheMagistrate.java create mode 100644 Mage.Sets/src/mage/sets/onslaught/GoblinPyromancer.java create mode 100644 Mage.Sets/src/mage/sets/vintagemasters/GrenzoDungeonWarden.java create mode 100644 Mage/src/mage/abilities/effects/common/continious/LoseAllCreatureTypesTargetEffect.java diff --git a/Mage.Sets/src/mage/sets/conspiracy/GrenzoDungeonWarden.java b/Mage.Sets/src/mage/sets/conspiracy/GrenzoDungeonWarden.java new file mode 100644 index 00000000000..e53f4f7ad25 --- /dev/null +++ b/Mage.Sets/src/mage/sets/conspiracy/GrenzoDungeonWarden.java @@ -0,0 +1,152 @@ +/* + * 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.MageInt; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +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.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author emerald000 + */ +public class GrenzoDungeonWarden extends CardImpl { + + public GrenzoDungeonWarden(UUID ownerId) { + super(ownerId, 47, "Grenzo, Dungeon Warden", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{X}{B}{R}"); + this.expansionSetCode = "CNS"; + this.supertype.add("Legendary"); + this.subtype.add("Goblin"); + this.subtype.add("Rogue"); + + this.color.setRed(true); + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Grenzo, Dungeon Warden enters the battlefield with X +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new GrenzoDungeonWardenEtBEffect())); + + // {2}: Put the bottom card of your library into your graveyard. If it's a creature card with power less than or equal to Grenzo's power, put it onto the battlefield. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrenzoDungeonWardenEffect(), new GenericManaCost(2))); + } + + public GrenzoDungeonWarden(final GrenzoDungeonWarden card) { + super(card); + } + + @Override + public GrenzoDungeonWarden copy() { + return new GrenzoDungeonWarden(this); + } +} + +class GrenzoDungeonWardenEtBEffect extends OneShotEffect { + + GrenzoDungeonWardenEtBEffect() { + super(Outcome.BoostCreature); + staticText = "{this} enters the battlefield with X +1/+1 counters on it"; + } + + GrenzoDungeonWardenEtBEffect(final GrenzoDungeonWardenEtBEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + Object obj = getValue(mage.abilities.effects.EntersBattlefieldEffect.SOURCE_CAST_SPELL_ABILITY); + if (obj != null && obj instanceof SpellAbility) { + int amount = ((Ability) obj).getManaCostsToPay().getX(); + if (amount > 0) { + permanent.addCounters(CounterType.P1P1.createInstance(amount), game); + } + } + } + return true; + } + + @Override + public GrenzoDungeonWardenEtBEffect copy() { + return new GrenzoDungeonWardenEtBEffect(this); + } +} + +class GrenzoDungeonWardenEffect extends OneShotEffect { + + GrenzoDungeonWardenEffect() { + super(Outcome.Benefit); + this.staticText = "Put the bottom card of your library into your graveyard. If it's a creature card with power less than or equal to Grenzo's power, put it onto the battlefield"; + } + + GrenzoDungeonWardenEffect(final GrenzoDungeonWardenEffect effect) { + super(effect); + } + + @Override + public GrenzoDungeonWardenEffect copy() { + return new GrenzoDungeonWardenEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + if (player.getLibrary().size() > 0) { + Card card = player.getLibrary().removeFromBottom(game); + if (card != null) { + player.moveCardToGraveyardWithInfo(card, source.getSourceId(), game, Zone.LIBRARY); + if (card.getCardType().contains(CardType.CREATURE)) { + Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (sourcePermanent != null && card.getPower().getValue() <= sourcePermanent.getPower().getValue()) { + player.putOntoBattlefieldWithInfo(card, game, Zone.GRAVEYARD, source.getSourceId()); + } + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/CullingTheWeak.java b/Mage.Sets/src/mage/sets/exodus/CullingTheWeak.java new file mode 100644 index 00000000000..2faa7d99334 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/CullingTheWeak.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.exodus; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.BasicManaEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class CullingTheWeak extends CardImpl { + + public CullingTheWeak(UUID ownerId) { + super(ownerId, 55, "Culling the Weak", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{B}"); + this.expansionSetCode = "EXO"; + + this.color.setBlack(true); + + // As an additional cost to cast Culling the Weak, sacrifice a creature. + this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); + + // Add {B}{B}{B}{B} to your mana pool. + this.getSpellAbility().addEffect(new BasicManaEffect(new Mana(0, 0, 0, 0, 4, 0, 0))); + } + + public CullingTheWeak(final CullingTheWeak card) { + super(card); + } + + @Override + public CullingTheWeak copy() { + return new CullingTheWeak(this); + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/NamelessInversion.java b/Mage.Sets/src/mage/sets/lorwyn/NamelessInversion.java new file mode 100644 index 00000000000..cbcbc0445ba --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/NamelessInversion.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.lorwyn; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continious.BoostTargetEffect; +import mage.abilities.effects.common.continious.LoseAllCreatureTypesTargetEffect; +import mage.abilities.keyword.ChangelingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class NamelessInversion extends CardImpl { + + public NamelessInversion(UUID ownerId) { + super(ownerId, 128, "Nameless Inversion", Rarity.COMMON, new CardType[]{CardType.TRIBAL, CardType.INSTANT}, "{1}{B}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Shapeshifter"); + + this.color.setBlack(true); + + // Changeling + this.addAbility(ChangelingAbility.getInstance()); + + // Target creature gets +3/-3 and loses all creature types until end of turn. + Effect effect = new BoostTargetEffect(3, -3, Duration.EndOfTurn); + effect.setText("Target creature gets +3/-3"); + this.getSpellAbility().addEffect(effect); + effect = new LoseAllCreatureTypesTargetEffect(Duration.EndOfTurn); + effect.setText("and loses all creature types until end of turn"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public NamelessInversion(final NamelessInversion card) { + super(card); + } + + @Override + public NamelessInversion copy() { + return new NamelessInversion(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/TowerOfTheMagistrate.java b/Mage.Sets/src/mage/sets/mercadianmasques/TowerOfTheMagistrate.java new file mode 100644 index 00000000000..8db58a540b1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/TowerOfTheMagistrate.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.mercadianmasques; + +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.common.continious.GainProtectionFromTypeTargetEffect; +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.FilterArtifactCard; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class TowerOfTheMagistrate extends CardImpl { + + public TowerOfTheMagistrate(UUID ownerId) { + super(ownerId, 330, "Tower of the Magistrate", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {1}, {tap}: Target creature gains protection from artifacts until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainProtectionFromTypeTargetEffect(Duration.EndOfTurn, new FilterArtifactCard("artifacts")), new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public TowerOfTheMagistrate(final TowerOfTheMagistrate card) { + super(card); + } + + @Override + public TowerOfTheMagistrate copy() { + return new TowerOfTheMagistrate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/GoblinPyromancer.java b/Mage.Sets/src/mage/sets/onslaught/GoblinPyromancer.java new file mode 100644 index 00000000000..8c2c35cc4c6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/GoblinPyromancer.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.abilities.effects.common.continious.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author emerald000 + */ +public class GoblinPyromancer extends CardImpl { + + private static final FilterCreaturePermanent filterCreature = new FilterCreaturePermanent("Goblin creatures"); + private static final FilterPermanent filterPermanent = new FilterPermanent("Goblins"); + static { + filterCreature.add(new SubtypePredicate("Goblin")); + filterPermanent.add(new SubtypePredicate("Goblin")); + } + + public GoblinPyromancer(UUID ownerId) { + super(ownerId, 206, "Goblin Pyromancer", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Goblin"); + this.subtype.add("Wizard"); + + this.color.setRed(true); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Goblin Pyromancer enters the battlefield, Goblin creatures get +3/+0 until end of turn. + this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostControlledEffect(3, 0, Duration.EndOfTurn, filterCreature))); + + // At the beginning of the end step, destroy all Goblins. + this.addAbility(new BeginningOfEndStepTriggeredAbility(new DestroyAllEffect(filterPermanent, false), TargetController.ANY, false)); + } + + public GoblinPyromancer(final GoblinPyromancer card) { + super(card); + } + + @Override + public GoblinPyromancer copy() { + return new GoblinPyromancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/GrenzoDungeonWarden.java b/Mage.Sets/src/mage/sets/vintagemasters/GrenzoDungeonWarden.java new file mode 100644 index 00000000000..b2cb91acbba --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/GrenzoDungeonWarden.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.vintagemasters; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class GrenzoDungeonWarden extends mage.sets.conspiracy.GrenzoDungeonWarden { + + public GrenzoDungeonWarden(UUID ownerId) { + super(ownerId); + this.cardNumber = 254; + this.expansionSetCode = "VMA"; + } + + public GrenzoDungeonWarden(final GrenzoDungeonWarden card) { + super(card); + } + + @Override + public GrenzoDungeonWarden copy() { + return new GrenzoDungeonWarden(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/continious/LoseAllCreatureTypesTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/LoseAllCreatureTypesTargetEffect.java new file mode 100644 index 00000000000..fd4a4a05295 --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/continious/LoseAllCreatureTypesTargetEffect.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.abilities.effects.common.continious; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author emerald000 + */ +public class LoseAllCreatureTypesTargetEffect extends ContinuousEffectImpl { + + public LoseAllCreatureTypesTargetEffect(Duration duration) { + super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Neutral); + } + + public LoseAllCreatureTypesTargetEffect(final LoseAllCreatureTypesTargetEffect effect) { + super(effect); + } + + @Override + public LoseAllCreatureTypesTargetEffect copy() { + return new LoseAllCreatureTypesTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (permanent != null) { + permanent.getSubtype().clear(); + return true; + } + return false; + } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + return "Target " + mode.getTargets().get(0).getTargetName() + " loses all creature types " + duration.toString(); + } +}