From 6720bd333f5cff90a55282914a57650f72146774 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 6 Sep 2014 12:53:00 +0200 Subject: [PATCH] [KTK] Added 11 gold cards. --- .../sets/khansoftarkir/CracklingDoom.java | 141 +++++++++++++++ .../sets/khansoftarkir/FrontierBivouac.java | 65 +++++++ .../sets/khansoftarkir/OpulentPalace.java | 65 +++++++ .../khansoftarkir/SageOfTheInwardEye.java | 86 +++++++++ .../mage/sets/khansoftarkir/SaguMauler.java | 72 ++++++++ .../sets/khansoftarkir/SandsteppeCitadel.java | 65 +++++++ .../khansoftarkir/SavageKnuckleblade.java | 83 +++++++++ .../sets/khansoftarkir/SidisiBroodTyrant.java | 164 ++++++++++++++++++ .../khansoftarkir/SorinSolemnVisitor.java | 121 +++++++++++++ .../sets/khansoftarkir/SultaiAscendancy.java | 71 ++++++++ .../src/mage/sets/khansoftarkir/UtterEnd.java | 63 +++++++ .../src/mage/sets/magic2011/GraveTitan.java | 2 +- 12 files changed, 997 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/CracklingDoom.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/FrontierBivouac.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/OpulentPalace.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SageOfTheInwardEye.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SaguMauler.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SandsteppeCitadel.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SavageKnuckleblade.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SorinSolemnVisitor.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SultaiAscendancy.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/UtterEnd.java diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/CracklingDoom.java b/Mage.Sets/src/mage/sets/khansoftarkir/CracklingDoom.java new file mode 100644 index 0000000000..d7ccad6483 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/CracklingDoom.java @@ -0,0 +1,141 @@ +/* + * 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.khansoftarkir; + +import java.util.ArrayList; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.Filter; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class CracklingDoom extends CardImpl { + + public CracklingDoom(UUID ownerId) { + super(ownerId, 171, "Crackling Doom", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{R}{W}{B}"); + this.expansionSetCode = "KTK"; + + this.color.setRed(true); + this.color.setBlack(true); + this.color.setWhite(true); + + // Crackling Doom deals 2 damage to each opponent. Each opponent sacrifices a creature with the greatest power among creatures he or she controls. + this.getSpellAbility().addEffect(new DamagePlayersEffect(2, TargetController.OPPONENT)); + + } + + public CracklingDoom(final CracklingDoom card) { + super(card); + } + + @Override + public CracklingDoom copy() { + return new CracklingDoom(this); + } +} + +class CracklingDoomEffect extends OneShotEffect { + + public CracklingDoomEffect() { + super(Outcome.Sacrifice); + this.staticText = "Each opponent sacrifices a creature with the greatest power among creatures he or she controls"; + } + + public CracklingDoomEffect(final CracklingDoomEffect effect) { + super(effect); + } + + @Override + public CracklingDoomEffect copy() { + return new CracklingDoomEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + ArrayList toSacrifice = new ArrayList<>(); + for (UUID playerId: controller.getInRange()) { + if (controller.hasOpponent(playerId, game)) { + Player opponent = game.getPlayer(playerId); + if (opponent != null) { + int greatestPower = Integer.MIN_VALUE; + int numberOfCreatures = 0; + Permanent permanentToSacrifice = null; + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), playerId, game)) { + if (permanent.getPower().getValue() > greatestPower) { + greatestPower = permanent.getPower().getValue(); + numberOfCreatures = 1; + permanentToSacrifice = permanent; + } else if (permanent.getPower().getValue() == greatestPower) { + numberOfCreatures++; + } + } + if (numberOfCreatures == 1) { + if (permanentToSacrifice != null) { + toSacrifice.add(permanentToSacrifice); + } + } else if (greatestPower != Integer.MIN_VALUE) { + FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature to sacrifice with power equal to " + greatestPower); + filter.add(new PowerPredicate(Filter.ComparisonType.Equal, greatestPower)); + Target target = new TargetControlledCreaturePermanent(filter); + if (opponent.choose(outcome, target, playerId, game)) { + Permanent permanent = game.getPermanent(target.getFirstTarget()); + if (permanent != null) { + toSacrifice.add(permanent); + } + } + } + } + } + } + for (Permanent permanent :toSacrifice) { + permanent.sacrifice(source.getSourceId(), game); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/FrontierBivouac.java b/Mage.Sets/src/mage/sets/khansoftarkir/FrontierBivouac.java new file mode 100644 index 0000000000..734a02b609 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/FrontierBivouac.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.khansoftarkir; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class FrontierBivouac extends CardImpl { + + public FrontierBivouac(UUID ownerId) { + super(ownerId, 234, "Frontier Bivouac", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "KTK"; + + // Frontier Bivouac enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {T}: Add {G}, {U}, or {R} to your mana pool. + this.addAbility(new GreenManaAbility()); + this.addAbility(new BlueManaAbility()); + this.addAbility(new RedManaAbility()); + } + + public FrontierBivouac(final FrontierBivouac card) { + super(card); + } + + @Override + public FrontierBivouac copy() { + return new FrontierBivouac(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/OpulentPalace.java b/Mage.Sets/src/mage/sets/khansoftarkir/OpulentPalace.java new file mode 100644 index 0000000000..4c89bc5b06 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/OpulentPalace.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.khansoftarkir; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class OpulentPalace extends CardImpl { + + public OpulentPalace(UUID ownerId) { + super(ownerId, 238, "Opulent Palace", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "KTK"; + + // Opulent Palace enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {T}: Add {B}, {G}, or {U} to your mana pool. + this.addAbility(new BlackManaAbility()); + this.addAbility(new GreenManaAbility()); + this.addAbility(new BlueManaAbility()); + } + + public OpulentPalace(final OpulentPalace card) { + super(card); + } + + @Override + public OpulentPalace copy() { + return new OpulentPalace(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SageOfTheInwardEye.java b/Mage.Sets/src/mage/sets/khansoftarkir/SageOfTheInwardEye.java new file mode 100644 index 0000000000..086ad6c8ff --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SageOfTheInwardEye.java @@ -0,0 +1,86 @@ +/* + * 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.khansoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author LevelX2 + */ +public class SageOfTheInwardEye extends CardImpl { + + private static final FilterSpell filterNonCreature = new FilterSpell("a noncreature spell"); + + static { + filterNonCreature.add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); + } + + public SageOfTheInwardEye(UUID ownerId) { + super(ownerId, 195, "Sage of the Inward Eye", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{U}{R}{W}"); + this.expansionSetCode = "KTK"; + this.subtype.add("Djinn"); + this.subtype.add("Wizard"); + + this.color.setRed(true); + this.color.setBlue(true); + this.color.setWhite(true); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Whenever you cast a noncreature spell, creatures you control gain lifelink until end of turn. + this.addAbility(new SpellCastControllerTriggeredAbility( + new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent(), false), + filterNonCreature, false)); + + } + + public SageOfTheInwardEye(final SageOfTheInwardEye card) { + super(card); + } + + @Override + public SageOfTheInwardEye copy() { + return new SageOfTheInwardEye(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SaguMauler.java b/Mage.Sets/src/mage/sets/khansoftarkir/SaguMauler.java new file mode 100644 index 0000000000..7e44ffb13d --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SaguMauler.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.khansoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.TrampleAbility; +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.MorphAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SaguMauler extends CardImpl { + + public SaguMauler(UUID ownerId) { + super(ownerId, 196, "Sagu Mauler", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{G}{U}"); + this.expansionSetCode = "KTK"; + this.subtype.add("Beast"); + + this.color.setBlue(true); + this.color.setGreen(true); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Hexproof + this.addAbility(HexproofAbility.getInstance()); + // Morph {3}{G}{U} + this.addAbility(new MorphAbility(this, new ManaCostsImpl("{3}{G}{U}"))); + } + + public SaguMauler(final SaguMauler card) { + super(card); + } + + @Override + public SaguMauler copy() { + return new SaguMauler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SandsteppeCitadel.java b/Mage.Sets/src/mage/sets/khansoftarkir/SandsteppeCitadel.java new file mode 100644 index 0000000000..95d79a2519 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SandsteppeCitadel.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.khansoftarkir; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SandsteppeCitadel extends CardImpl { + + public SandsteppeCitadel(UUID ownerId) { + super(ownerId, 241, "Sandsteppe Citadel", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "KTK"; + + // Sandsteppe Citadel enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {T}: Add {W}, {B}, or {G} to your mana pool. + this.addAbility(new WhiteManaAbility()); + this.addAbility(new BlackManaAbility()); + this.addAbility(new GreenManaAbility()); + } + + public SandsteppeCitadel(final SandsteppeCitadel card) { + super(card); + } + + @Override + public SandsteppeCitadel copy() { + return new SandsteppeCitadel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SavageKnuckleblade.java b/Mage.Sets/src/mage/sets/khansoftarkir/SavageKnuckleblade.java new file mode 100644 index 0000000000..ada6a5cb27 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SavageKnuckleblade.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.khansoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.continious.BoostSourceEffect; +import mage.abilities.effects.common.continious.GainAbilitySourceEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class SavageKnuckleblade extends CardImpl { + + public SavageKnuckleblade(UUID ownerId) { + super(ownerId, 197, "Savage Knuckleblade", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{G}{U}{R}"); + this.expansionSetCode = "KTK"; + this.subtype.add("Ogre"); + this.subtype.add("Warrior"); + + this.color.setRed(true); + this.color.setBlue(true); + this.color.setGreen(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // {2}{G}: Savage Knuckleblade gets +2/+2 until end of turn. Activate this ability only once each turn. + this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl("{2}{G}"))); + + // {2}{U}: Return Savage Knuckleblade to its owner's hand. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(), new ManaCostsImpl("{2}{U}"))); + + // {R}: Savage Knuckleblade gains haste until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + + + } + + public SavageKnuckleblade(final SavageKnuckleblade card) { + super(card); + } + + @Override + public SavageKnuckleblade copy() { + return new SavageKnuckleblade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java b/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java new file mode 100644 index 0000000000..e371b7a3fe --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java @@ -0,0 +1,164 @@ +/* + * 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.khansoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.ZoneChangeTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.PutTopCardOfLibraryIntoGraveControllerEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.token.ZombieToken; +import mage.game.stack.StackObject; + +/** + * + * @author LevelX2 + */ +public class SidisiBroodTyrant extends CardImpl { + + public SidisiBroodTyrant(UUID ownerId) { + super(ownerId, 199, "Sidisi, Brood Tyrant", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{1}{B}{G}{U}"); + this.expansionSetCode = "KTK"; + this.supertype.add("Legendary"); + this.subtype.add("Naga"); + this.subtype.add("Shaman"); + + this.color.setBlue(true); + this.color.setGreen(true); + this.color.setBlack(true); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Whenever Sidisi, Brood Tyrant enters the battlefield or attacks, put the top three cards of your library into your graveyard. + this.addAbility(new SidisiBroodTyrantAbility()); + // Whenever one or more creature cards are put into your graveyard from your library, put a 2/2 black Zombie creature token onto the battlefield. + this.addAbility(new SidisiBroodTyrantTriggeredAbility()); + } + + public SidisiBroodTyrant(final SidisiBroodTyrant card) { + super(card); + } + + @Override + public SidisiBroodTyrant copy() { + return new SidisiBroodTyrant(this); + } +} + +class SidisiBroodTyrantAbility extends TriggeredAbilityImpl { + + public SidisiBroodTyrantAbility() { + super(Zone.BATTLEFIELD, new PutTopCardOfLibraryIntoGraveControllerEffect(3), false); + } + + public SidisiBroodTyrantAbility(final SidisiBroodTyrantAbility ability) { + super(ability); + } + + @Override + public SidisiBroodTyrantAbility copy() { + return new SidisiBroodTyrantAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.ATTACKER_DECLARED && event.getSourceId().equals(this.getSourceId())) { + return true; + } + if (event.getType() == EventType.ENTERS_THE_BATTLEFIELD && event.getTargetId().equals(this.getSourceId()) ) { + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} enters the battlefield or attacks, put the top three cards of your library into your graveyard."; + } + +} + +class SidisiBroodTyrantTriggeredAbility extends ZoneChangeTriggeredAbility { + + UUID lastStackObjectId = null; + + public SidisiBroodTyrantTriggeredAbility() { + super(Zone.LIBRARY, Zone.GRAVEYARD, new CreateTokenEffect(new ZombieToken("KTK")), "", false); + this.zone = Zone.BATTLEFIELD; + } + + public SidisiBroodTyrantTriggeredAbility(final SidisiBroodTyrantTriggeredAbility ability) { + super(ability); + this.lastStackObjectId = ability.lastStackObjectId; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.ZONE_CHANGE) { + ZoneChangeEvent zEvent = (ZoneChangeEvent)event; + if ((fromZone == null || zEvent.getFromZone() == fromZone) && (toZone == null || zEvent.getToZone() == toZone)) { + Card card = game.getCard(event.getTargetId()); + if (card != null && card.getOwnerId().equals(getControllerId()) && card.getCardType().contains(CardType.CREATURE)) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject != null) { + if (lastStackObjectId.equals(stackObject.getId())) { + return false; // was already handled + } + lastStackObjectId = stackObject.getId(); + return true; + } else { + // special action or replacement effect, so we can't check yet if multiple cards are moved with one effect + return true; + } + } + } + } + return false; + } + + @Override + public SidisiBroodTyrantTriggeredAbility copy() { + return new SidisiBroodTyrantTriggeredAbility(this); + } + + + @Override + public String getRule() { + return "Whenever one or more creature cards are put into your graveyard from your library, put a 2/2 black Zombie creature token onto the battlefield."; + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SorinSolemnVisitor.java b/Mage.Sets/src/mage/sets/khansoftarkir/SorinSolemnVisitor.java new file mode 100644 index 0000000000..dbf1ebded5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SorinSolemnVisitor.java @@ -0,0 +1,121 @@ +/* + * 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.khansoftarkir; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.GetEmblemEffect; +import mage.abilities.effects.common.SacrificeEffect; +import mage.abilities.effects.common.continious.BoostControlledEffect; +import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.LifelinkAbility; +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.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.command.Emblem; +import mage.game.permanent.token.Token; + + +/** + * + * @author LevelX2 + */ +public class SorinSolemnVisitor extends CardImpl { + + public SorinSolemnVisitor(UUID ownerId) { + super(ownerId, 202, "Sorin, Solemn Visitor", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{B}"); + this.expansionSetCode = "KTK"; + this.subtype.add("Sorin"); + + this.color.setBlack(true); + this.color.setWhite(true); + + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(4)), false)); + + // +1: Until your next turn, creatures you control get +1/+0 and gain lifelink. + Effect effect = new BoostControlledEffect(1, 0, Duration.UntilYourNextTurn, new FilterCreaturePermanent()); + effect.setText("Until your next turn, creatures you control get +1/+0"); + LoyaltyAbility loyaltyAbility = new LoyaltyAbility(effect, 1); + effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.UntilYourNextTurn, new FilterCreaturePermanent()); + effect.setText("and gain lifelink"); + loyaltyAbility.addEffect(effect); + this.addAbility(loyaltyAbility); + + // -2: Put a 2/2 black Vampire creature token with flying onto the battlefield. + this.addAbility(new LoyaltyAbility(new CreateTokenEffect(new SorinSolemnVisitorVampireToken()), -2)); + + // -6: You get an emblem with "At the beginning of each opponent's upkeep, that player sacrifices a creature." + this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new SorinEmblem()), -6)); + + } + + public SorinSolemnVisitor(final SorinSolemnVisitor card) { + super(card); + } + + @Override + public SorinSolemnVisitor copy() { + return new SorinSolemnVisitor(this); + } +} +/** + * Emblem: "At the beginning of each opponent's upkeep, that player sacrifices a creature." + */ +class SorinEmblem extends Emblem { + public SorinEmblem() { + this.setName("EMBLEM: Sorin, Solemn Visitor"); + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new SacrificeEffect(new FilterCreaturePermanent(),1 ,"that player"), TargetController.OPPONENT, false, true); + this.getAbilities().add(ability); + } +} + +class SorinSolemnVisitorVampireToken extends Token { + SorinSolemnVisitorVampireToken() { + super("Vampire", "a 2/2 black Vampire creature token with flying"); + setOriginalExpansionSetCode("KTK"); + cardType.add(CardType.CREATURE); + color.setBlack(true); + subtype.add("Vampire"); + power = new MageInt(2); + toughness = new MageInt(2); + addAbility(FlyingAbility.getInstance()); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SultaiAscendancy.java b/Mage.Sets/src/mage/sets/khansoftarkir/SultaiAscendancy.java new file mode 100644 index 0000000000..0b397101b6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SultaiAscendancy.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.khansoftarkir; + +import java.util.UUID; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; + +/** + * + * @author LevelX2 + */ +public class SultaiAscendancy extends CardImpl { + + public SultaiAscendancy(UUID ownerId) { + super(ownerId, 203, "Sultai Ascendancy", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{G}{B}{U}"); + this.expansionSetCode = "KTK"; + + this.color.setBlue(true); + this.color.setBlack(true); + this.color.setGreen(true); + + // At the beginning of your upkeep, look at the top two cards of your library. Put any number of them into your graveyard and the rest on top of your library in any order. + Effect effect = new LookLibraryAndPickControllerEffect( + new StaticValue(2), false, new StaticValue(2), new FilterCard(), Zone.LIBRARY, true, false, true, Zone.GRAVEYARD, false); + effect.setText("look at the top two cards of your library. Put any number of them into your graveyard and the rest on top of your library in any order"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, false)); + } + + public SultaiAscendancy(final SultaiAscendancy card) { + super(card); + } + + @Override + public SultaiAscendancy copy() { + return new SultaiAscendancy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/UtterEnd.java b/Mage.Sets/src/mage/sets/khansoftarkir/UtterEnd.java new file mode 100644 index 0000000000..86ca037f37 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/UtterEnd.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.khansoftarkir; + +import java.util.UUID; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetNonlandPermanent; + +/** + * + * @author LevelX2 + */ +public class UtterEnd extends CardImpl { + + public UtterEnd(UUID ownerId) { + super(ownerId, 210, "Utter End", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{W}{B}"); + this.expansionSetCode = "KTK"; + + this.color.setBlack(true); + this.color.setWhite(true); + + // Exile target nonland permanent. + this.getSpellAbility().addEffect(new ExileTargetEffect()); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); + } + + public UtterEnd(final UtterEnd card) { + super(card); + } + + @Override + public UtterEnd copy() { + return new UtterEnd(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magic2011/GraveTitan.java b/Mage.Sets/src/mage/sets/magic2011/GraveTitan.java index 9d3e0075ee..de1c1111b3 100644 --- a/Mage.Sets/src/mage/sets/magic2011/GraveTitan.java +++ b/Mage.Sets/src/mage/sets/magic2011/GraveTitan.java @@ -99,7 +99,7 @@ class GraveTitanAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever {this} enters the battlefield or attacks, put two 2/2 black Zombie creature tokens onto the battlefield"; + return "Whenever {this} enters the battlefield or attacks, put two 2/2 black Zombie creature tokens onto the battlefield."; } }