From 3f5f6a6166ba64e32b0e222266298ecb9b82071f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 2 Sep 2014 02:03:14 +0200 Subject: [PATCH] [KTK] Added 6 cards and some fixes. --- .../sets/alarareborn/GodtrackerOfJund.java | 2 +- .../sets/khansoftarkir/EndHostilities.java | 106 ++++++++++++++++++ .../mage/sets/khansoftarkir/JeskaiElder.java | 2 +- .../sets/khansoftarkir/MarduHeartPiercer.java | 2 +- .../sets/khansoftarkir/MarduSkullhunter.java | 2 +- .../sets/khansoftarkir/MysticMonastery.java | 65 +++++++++++ .../sets/khansoftarkir/NecropolisFiend.java | 35 +++--- .../mage/sets/khansoftarkir/NomadOutpost.java | 65 +++++++++++ .../mage/sets/khansoftarkir/SultaiCharm.java | 90 +++++++++++++++ .../sets/khansoftarkir/TemurAscendancy.java | 80 +++++++++++++ .../sets/khansoftarkir/ThousandWinds.java | 2 +- .../sets/khansoftarkir/ZurgoHelmsmasher.java | 89 +++++++++++++++ .../sets/returntoravnica/UltimatePrice.java | 3 +- .../mage/game/permanent/PermanentCard.java | 11 ++ Mage/src/mage/players/PlayerImpl.java | 46 ++++++-- Utils/mtg-cards-data.txt | 19 +++- 16 files changed, 581 insertions(+), 38 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/EndHostilities.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/MysticMonastery.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/NomadOutpost.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/SultaiCharm.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/TemurAscendancy.java create mode 100644 Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java diff --git a/Mage.Sets/src/mage/sets/alarareborn/GodtrackerOfJund.java b/Mage.Sets/src/mage/sets/alarareborn/GodtrackerOfJund.java index 619a0c51d8e..aec6a1d022b 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/GodtrackerOfJund.java +++ b/Mage.Sets/src/mage/sets/alarareborn/GodtrackerOfJund.java @@ -52,7 +52,7 @@ public class GodtrackerOfJund extends CardImpl { filter.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 4)); } - String rule = "Whenever a creature with power 5 or greater enters the battlefield under your control, you may put a +1/+1 counter on Godtracker of Jund."; + String rule = "Whenever a creature with power 5 or greater enters the battlefield under your control, you may put a +1/+1 counter on {this}."; public GodtrackerOfJund(UUID ownerId) { super(ownerId, 55, "Godtracker of Jund", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}{G}"); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/EndHostilities.java b/Mage.Sets/src/mage/sets/khansoftarkir/EndHostilities.java new file mode 100644 index 00000000000..367e11be39c --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/EndHostilities.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.khansoftarkir; + +import java.util.ArrayList; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class EndHostilities extends CardImpl { + + public EndHostilities(UUID ownerId) { + super(ownerId, 8, "End Hostilities", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{W}{W}"); + this.expansionSetCode = "KTK"; + + this.color.setWhite(true); + + // Destroy all creatures and all permanents attached to creatures. + this.getSpellAbility().addEffect(new EndHostilitiesEffect()); + } + + public EndHostilities(final EndHostilities card) { + super(card); + } + + @Override + public EndHostilities copy() { + return new EndHostilities(this); + } +} + +class EndHostilitiesEffect extends OneShotEffect { + + public EndHostilitiesEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Destroy all creatures and all permanents attached to creatures."; + } + + public EndHostilitiesEffect(final EndHostilitiesEffect effect) { + super(effect); + } + + @Override + public EndHostilitiesEffect copy() { + return new EndHostilitiesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + ArrayList toDestroy = new ArrayList<>(); + for (Permanent permanent : game.getBattlefield().getActivePermanents(controller.getId(), game)) { + if (permanent.getCardType().contains(CardType.CREATURE)) { + toDestroy.add(permanent); + } else if (permanent.getAttachedTo() != null) { + Permanent attachedTo = game.getPermanent(permanent.getAttachedTo()); + if (attachedTo != null && attachedTo.getCardType().contains(CardType.CREATURE)) { + toDestroy.add(permanent); + } + } + } + for (Permanent permanent : toDestroy){ + permanent.destroy(source.getSourceId(), game, false); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/JeskaiElder.java b/Mage.Sets/src/mage/sets/khansoftarkir/JeskaiElder.java index b0f745780fe..b19cfce3c16 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/JeskaiElder.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/JeskaiElder.java @@ -44,7 +44,7 @@ import mage.constants.Rarity; public class JeskaiElder extends CardImpl { public JeskaiElder(UUID ownerId) { - super(ownerId, 9990, "Jeskai Elder", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + super(ownerId, 43, "Jeskai Elder", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); this.expansionSetCode = "KTK"; this.subtype.add("Human"); this.subtype.add("Monk"); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/MarduHeartPiercer.java b/Mage.Sets/src/mage/sets/khansoftarkir/MarduHeartPiercer.java index 0c4f3fe432c..939452d4d06 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/MarduHeartPiercer.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/MarduHeartPiercer.java @@ -44,7 +44,7 @@ import mage.target.common.TargetCreatureOrPlayer; public class MarduHeartPiercer extends CardImpl { public MarduHeartPiercer(UUID ownerId) { - super(ownerId, 9993, "Mardu Heart-Piercer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + super(ownerId, 116, "Mardu Heart-Piercer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); this.expansionSetCode = "KTK"; this.subtype.add("Human"); this.subtype.add("Archer"); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/MarduSkullhunter.java b/Mage.Sets/src/mage/sets/khansoftarkir/MarduSkullhunter.java index a9541d4250c..2bfd8dbd235 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/MarduSkullhunter.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/MarduSkullhunter.java @@ -45,7 +45,7 @@ import mage.target.common.TargetOpponent; public class MarduSkullhunter extends CardImpl { public MarduSkullhunter(UUID ownerId) { - super(ownerId, 9992, "Mardu Skullhunter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + super(ownerId, 78, "Mardu Skullhunter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); this.expansionSetCode = "KTK"; this.subtype.add("Human"); this.subtype.add("Warrior"); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/MysticMonastery.java b/Mage.Sets/src/mage/sets/khansoftarkir/MysticMonastery.java new file mode 100644 index 00000000000..5e69419ca5d --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/MysticMonastery.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.RedManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class MysticMonastery extends CardImpl { + + public MysticMonastery(UUID ownerId) { + super(ownerId, 236, "Mystic Monastery", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "KTK"; + + // Mystic Monastery enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {T}: Add {U}, {R}, or {W} to your mana pool. + this.addAbility(new BlueManaAbility()); + this.addAbility(new RedManaAbility()); + this.addAbility(new WhiteManaAbility()); + } + + public MysticMonastery(final MysticMonastery card) { + super(card); + } + + @Override + public MysticMonastery copy() { + return new MysticMonastery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/NecropolisFiend.java b/Mage.Sets/src/mage/sets/khansoftarkir/NecropolisFiend.java index 15123802dc3..34fa39bad8f 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/NecropolisFiend.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/NecropolisFiend.java @@ -82,15 +82,29 @@ public class NecropolisFiend extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{X}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent()); - ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(1,1,new FilterCard("cards")), "Exile X cards from your graveyard")); + ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(1,1,new FilterCard("cards from your graveyard")), "Exile X cards from your graveyard")); this.addAbility(ability); } @Override - public void adjustTargets(Ability ability, Game game) { + public void adjustChoices(Ability ability, Game game) { if (ability instanceof SimpleActivatedAbility) { - int xValue = ability.getManaCosts().getX(); + Player controller = game.getPlayer(ability.getControllerId()); + if (controller != null) { + for (VariableCost variableCost: ability.getManaCostsToPay().getVariableCosts()) { + if (variableCost instanceof VariableManaCost) { + ((VariableManaCost)variableCost).setMaxX(controller.getGraveyard().size()); + } + } + } + } + } + + @Override + public void adjustCosts(Ability ability, Game game) { + if (ability instanceof SimpleActivatedAbility) { + int xValue = ability.getManaCostsToPay().getX(); for(Cost cost: ability.getCosts()) { if (cost instanceof ExileFromGraveCost) { ExileFromGraveCost exileCost = (ExileFromGraveCost) cost; @@ -106,21 +120,6 @@ public class NecropolisFiend extends CardImpl { } } - - @Override - public void adjustCosts(Ability ability, Game game) { - if (ability instanceof SimpleActivatedAbility) { - Player controller = game.getPlayer(ability.getControllerId()); - if (controller != null) { - for (VariableCost variableCost: ability.getManaCosts().getVariableCosts()) { - if (variableCost instanceof VariableManaCost) { - ((VariableManaCost)variableCost).setMaxX(controller.getGraveyard().size()); - } - } - } - } - } - public NecropolisFiend(final NecropolisFiend card) { super(card); } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/NomadOutpost.java b/Mage.Sets/src/mage/sets/khansoftarkir/NomadOutpost.java new file mode 100644 index 00000000000..32777d20a31 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/NomadOutpost.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.RedManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class NomadOutpost extends CardImpl { + + public NomadOutpost(UUID ownerId) { + super(ownerId, 237, "Nomad Outpost", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "KTK"; + + // Nomad Outpost enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {T}: Add {R}, {W}, or {B} to your mana pool. + this.addAbility(new RedManaAbility()); + this.addAbility(new WhiteManaAbility()); + this.addAbility(new BlackManaAbility()); + } + + public NomadOutpost(final NomadOutpost card) { + super(card); + } + + @Override + public NomadOutpost copy() { + return new NomadOutpost(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SultaiCharm.java b/Mage.Sets/src/mage/sets/khansoftarkir/SultaiCharm.java new file mode 100644 index 00000000000..059094ff29f --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SultaiCharm.java @@ -0,0 +1,90 @@ +/* + * 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.Mode; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterArtifactOrEnchantmentPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.MonocoloredPredicate; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ + +public class SultaiCharm extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("monocolored creature"); + + static { + filter.add(new MonocoloredPredicate()); + } + + public SultaiCharm(UUID ownerId) { + super(ownerId, 204, "Sultai Charm", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{B}{G}{U}"); + this.expansionSetCode = "KTK"; + + this.color.setBlue(true); + this.color.setGreen(true); + this.color.setBlack(true); + + // Choose one - + // * Destroy target monocolored creature. + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + + // * Destroy target artifact or enchantment. + Mode mode = new Mode(); + mode.getEffects().add(new DestroyTargetEffect()); + mode.getTargets().add(new TargetPermanent(new FilterArtifactOrEnchantmentPermanent())); + this.getSpellAbility().addMode(mode); + + // * Draw two cards, then discard a card. + mode = new Mode(); + mode.getEffects().add(new DrawDiscardControllerEffect(2,1)); + this.getSpellAbility().addMode(mode); + + } + + public SultaiCharm(final SultaiCharm card) { + super(card); + } + + @Override + public SultaiCharm copy() { + return new SultaiCharm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/TemurAscendancy.java b/Mage.Sets/src/mage/sets/khansoftarkir/TemurAscendancy.java new file mode 100644 index 00000000000..a2db32986f6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/TemurAscendancy.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.khansoftarkir; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +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; +import mage.filter.Filter; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; + +/** + * + * @author LevelX2 + */ +public class TemurAscendancy extends CardImpl { + + final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 4 or greater"); + + static { + filter.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 3)); + } + + public TemurAscendancy(UUID ownerId) { + super(ownerId, 207, "Temur Ascendancy", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{G}{U}{R}"); + this.expansionSetCode = "KTK"; + + this.color.setRed(true); + this.color.setBlue(true); + this.color.setGreen(true); + + // Creatures you control have haste. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, new FilterControlledCreaturePermanent("Creatures")))); + // Whenever a creature with power 4 or greater enters the battlefield under your control, you may draw a card. + this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), filter, true)); + } + + public TemurAscendancy(final TemurAscendancy card) { + super(card); + } + + @Override + public TemurAscendancy copy() { + return new TemurAscendancy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/ThousandWinds.java b/Mage.Sets/src/mage/sets/khansoftarkir/ThousandWinds.java index 2e4509319a0..ec6b8eeb5cd 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/ThousandWinds.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/ThousandWinds.java @@ -55,7 +55,7 @@ public class ThousandWinds extends CardImpl { } public ThousandWinds(UUID ownerId) { - super(ownerId, 9991, "Thousand Winds", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); + super(ownerId, 58, "Thousand Winds", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); this.expansionSetCode = "KTK"; this.subtype.add("Elemental"); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java b/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java new file mode 100644 index 00000000000..5e2057b7f33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java @@ -0,0 +1,89 @@ +/* + * 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.AttacksEachTurnStaticAbility; +import mage.abilities.common.DiesAndDealtDamageThisTurnTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.decorator.ConditionalContinousEffect; +import mage.abilities.effects.common.continious.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author LevelX2 + */ +public class ZurgoHelmsmasher extends CardImpl { + + public ZurgoHelmsmasher(UUID ownerId) { + super(ownerId, 214, "Zurgo Helmsmasher", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{R}{W}{B}"); + this.expansionSetCode = "KTK"; + this.supertype.add("Legendary"); + this.subtype.add("Orc"); + this.subtype.add("Warrior"); + + this.color.setRed(true); + this.color.setBlack(true); + this.color.setWhite(true); + this.power = new MageInt(7); + this.toughness = new MageInt(2); + + // Haste + this.addAbility(HasteAbility.getInstance()); + // Zurgo Helmsmasher attacks each combat if able. + this.addAbility(new AttacksEachTurnStaticAbility()); + // Zurgo Helmsmasher has indestructible as long as it's your turn. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new ConditionalContinousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), + MyTurnCondition.getInstance(), + "{this} has indestructible as long as it's your turn"))); + + // Whenever a creature dealt damage by Zurgo Helmsmasher this turn dies, put a +1/+1 counter on Zurgo Helmsmasher. + this.addAbility(new DiesAndDealtDamageThisTurnTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false)); + } + + public ZurgoHelmsmasher(final ZurgoHelmsmasher card) { + super(card); + } + + @Override + public ZurgoHelmsmasher copy() { + return new ZurgoHelmsmasher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/returntoravnica/UltimatePrice.java b/Mage.Sets/src/mage/sets/returntoravnica/UltimatePrice.java index 257bec6d60e..dabf0deb9e1 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/UltimatePrice.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/UltimatePrice.java @@ -56,8 +56,7 @@ public class UltimatePrice extends CardImpl { this.color.setBlack(true); // Destroy target monocolored creature. - Target target = new TargetCreaturePermanent(filter); - this.getSpellAbility().addTarget(target); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); } diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index eb7ae5fff46..68b225abaeb 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -132,6 +132,9 @@ public class PermanentCard extends PermanentImpl { Zone fromZone = game.getState().getZone(objectId); Player controller = game.getPlayer(controllerId); if (controller != null && controller.removeFromBattlefield(this, game)) { + if (isFaceDown()) { + setFaceDown(false); + } ZoneChangeEvent event = new ZoneChangeEvent(this, sourceId, controllerId, fromZone, toZone, appliedEffects); if (!game.replaceEvent(event)) { Player owner = game.getPlayer(ownerId); @@ -238,5 +241,13 @@ public class PermanentCard extends PermanentImpl { public void adjustChoices(Ability ability, Game game) { card.adjustChoices(ability, game); } + + @Override + public void setFaceDown(boolean value) { + super.setFaceDown(value); + if (card != null) { + card.setFaceDown(value); + } + } } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 4b3ac95949a..a2691af9491 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -28,9 +28,31 @@ package mage.players; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; +import java.util.UUID; import mage.MageObject; import mage.Mana; -import mage.abilities.*; +import mage.abilities.Abilities; +import mage.abilities.AbilitiesImpl; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbility; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.Mode; +import mage.abilities.PlayLandAbility; +import mage.abilities.SpecialAction; +import mage.abilities.SpellAbility; +import mage.abilities.TriggeredAbility; import mage.abilities.common.PassAbility; import mage.abilities.common.delayed.AtTheEndOfTurnStepPostDelayedTriggeredAbility; import mage.abilities.costs.AdjustingSourceCosts; @@ -40,7 +62,13 @@ import mage.abilities.costs.AlternativeSourceCosts; import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.RestrictionUntapNotMoreThanEffect; import mage.abilities.effects.common.LoseControlOnOtherPlayersControllerEffect; -import mage.abilities.keyword.*; +import mage.abilities.keyword.ConvokeAbility; +import mage.abilities.keyword.FlashbackAbility; +import mage.abilities.keyword.HexproofAbility; +import mage.abilities.keyword.InfectAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.abilities.keyword.ShroudAbility; import mage.abilities.mana.ManaAbility; import mage.abilities.mana.ManaOptions; import mage.actions.MageDrawAction; @@ -49,7 +77,15 @@ import mage.cards.Cards; import mage.cards.CardsImpl; import mage.cards.SplitCard; import mage.cards.decks.Deck; -import mage.constants.*; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.ManaType; +import mage.constants.Outcome; +import mage.constants.PhaseStep; +import mage.constants.RangeOfInfluence; +import mage.constants.SpellAbilityType; +import mage.constants.TimingRule; +import mage.constants.Zone; import mage.counters.Counter; import mage.counters.CounterType; import mage.counters.Counters; @@ -83,10 +119,6 @@ import mage.target.common.TargetDiscard; import mage.watchers.common.BloodthirstWatcher; import org.apache.log4j.Logger; -import java.io.Serializable; -import java.util.*; -import java.util.Map.Entry; - public abstract class PlayerImpl implements Player, Serializable { private static final transient Logger log = Logger.getLogger(PlayerImpl.class); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 66e2b396046..3827b659fba 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -24137,15 +24137,18 @@ Tormod's Crypt|Magic 2015|237|U|{0}|Artifact|||{T}, Sacrifice Tormod's Crypt: Ex Tyrant's Machine|Magic 2015|238|C|{2}|Artifact|||{4}, {T}: Tap target creature.| Will-Forged Golem|Magic 2015|239|C|{6}|Artifact Creature - Golem|4|4|Convoke| Ainok Bond-Kin|Khans of Tarkir|3|C|{1}{W}|Creature - Hound Soldier|2|1|Outlast {1}{W} ({1}{W}, {T}: Put a +1/+1 counter on this creature. Outlast only as a sorcery.)$Each creature you control with a +1/+1 counter on it has first strike.| +End Hostilities|Khans of Tarkir|8|R|{3}{W}{W}|Sorcery|||Destroy all creatures and all permanents attached to creatures.| Herald of Anafenza|Khans of Tarkir|12|R|{W}|Creature - Human Soldier|1|2|Outlast {2}{W} ({2}{W}, {T}: Put a +1/+1 counter on this creature. Outlast only as a sorcery.)$Whenever you activate Herald of Anafenza's outlast ability, put a 1/1 white Warrior creature token onto the battlefield.| -Jeskai Elder|Khans of Tarkir|?|U|{1}{U}|Creature - Human Monk|1|2|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever Jeskai Elder deals combat damage to a player, you may draw a card. If you do, discard a card.| -Thousand Winds|Khans of Tarkir|9991|R|{4}{U}{U}|Creature - Elemental|5|6|Flying$Morph {5}{U}{U}$When Thousand Winds is turned face up, return all other tapped creatures to their owners' hands.| +Jeskai Elder|Khans of Tarkir|43|U|{1}{U}|Creature - Human Monk|1|2|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever Jeskai Elder deals combat damage to a player, you may draw a card. If you do, discard a card.| Jeskai Windscout|Khans of Tarkir|44|C|{2}{U}|Creature - Bird Scout|2|1|Flying$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| -Mardu Skullhunter|Khans of Tarkir|9992|C|{1}{B}|Creature - Human Warrior|2|1|Mardu Skullhunter enters the battlefield tapped.$Raid — When Mardu Skullhunter enters the battlefield, if you attacked with a creature this turn, target opponent discards a card.| +Thousand Winds|Khans of Tarkir|58|R|{4}{U}{U}|Creature - Elemental|5|6|Flying$Morph {5}{U}{U}$When Thousand Winds is turned face up, return all other tapped creatures to their owners' hands.| +Bitter Revelation|Khans of Tarkir|65|C|{3}{B}|Sorcery|||Look at the top four cards of your library. Put two of them into your hand and the rest into your graveyard. You lose 2 life.| +Mardu Skullhunter|Khans of Tarkir|78|C|{1}{B}|Creature - Human Warrior|2|1|Mardu Skullhunter enters the battlefield tapped.$Raid — When Mardu Skullhunter enters the battlefield, if you attacked with a creature this turn, target opponent discards a card.| Necropolis Fiend|Khans of Tarkir|82|R|{7}{B}{B}|Creature - Demon|4|5|Delve$Flying${X}, {T}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn.| Shambling Attendants|Khans of Tarkir|89|C|{7}{B}|Creature - Zombie|3|5|Delve$Deathtouch| -Mardu Heart-Piercer|Khans of Tarkir|9993|U|{3}{R}|Creature - Human Archer|2|3|Raid — When Mardu Heart-Piercer enters the battlefield, if you attacked with a creature this turn, Mardu Heart-Piercer deals 2 damage to target creature or player.| Dragon-Style Twins|Khans of Tarkir|108|R|{3}{R}{R}|Creature - Human Monk|3|3|Double strike$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| +Howl of the Horde|Khans of Tarkir|112|R|{2}{R}|Sorcery|||When you cast your next instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy. $Raid — If you attacked with a creature this turn, when you cast your next instant or sorcery spell this turn, copy that spell an additional time. You may choose new targets for the copy.| +Mardu Heart-Piercer|Khans of Tarkir|116|U|{3}{R}|Creature - Human Archer|2|3|Raid — When Mardu Heart-Piercer enters the battlefield, if you attacked with a creature this turn, Mardu Heart-Piercer deals 2 damage to target creature or player.| Mardu Warshrieker|Khans of Tarkir|117|C|{3}{R}|Creature - Orc Shaman|3|3|Raid — When Mardu Warshrieker enters the battlefield, if you attacked with a creature this turn, add {R}{W}{B} to your mana pool.| Sarkhan, the Dragonspeaker|Khans of Tarkir|119|M|{3}{R}{R}|Planeswalker - Sarkhan|-|4|+1: Until end of turn, Sarkhan, the Dragonspeaker becomes a legendary 4/4 red Dragon creature with flying, indestructible, and haste. (He doesn't lose loyalty while he's not a planeswalker.)$-3: Sarkhan, the Dragonspeaker deals 4 damage to target creature.$-6: You get an emblem with "At the beginning of your draw step, draw two additional cards" and "At the beginning of your end step, discard your hand."| Heir of the Wilds|Khans of Tarkir|134|U|{1}{G}|Creature - Human Warrior|2|2|Deathtouch$Ferocious — Whenever Heir of the Wilds attacks, if you control a creature with power 4 or greater, Heir of the Wilds gets +1/+1 until end of turn.| @@ -24154,14 +24157,17 @@ Abzan Guide|Khans of Tarkir|162|C|{3}{W}{B}{G}|Creature - Human Warrior|4|4|Life Crackling Doom|Khans of Tarkir|171|R|{R}{W}{B}|Instant|||Crackling Doom deals 2 damage to each opponent. Each opponent sacrifices a creature with the greatest power among creatures he or she controls.| Duneblast|Khans of Tarkir|174|R|{4}{W}{G}{B}|Sorcery|||Choose up to one creature. Destroy the rest.| Icefeather Aven|Khans of Tarkir|178|U|{G}{U}|Creature - Bird Shaman|2|2|Flying$Morph {1}{G}{U}$When Icefeather Aven is turned face up, you may return another target creature to its owner's hand.| +Ivorytusk Fortress|Khans of Tarkir|179|R|{2}{W}{B}{G}|Creature - Elephant|5|7|Untap each creature you control with a +1/+1 counter on it during each other player's untap step.| Narset, Enlightened Master|Khans of Tarkir|190|M|{3}{U}{R}{W}|Legendary Creature - Human Monk|3|2|First strike, hexproof$Whenever Narset, Enlightented Master attacks, exile the top four cards of your library. Until end of turn, you may cast noncreature cards exiled with Narset this turn without paying their mana costs.| +Sidisi, Brood Tyrant|Khans of Tarkir|199|M|{1}{B}{G}{U}|Legendary Creature - Naga Shaman|3|3|Whenever Sidisi, Brood Tyrant enters the battlefield or attacks, put the top three cards of your library into your graveyard.$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.| +Sorin, Solemn Visitor|Khans of Tarkir|202|M|{2}{W}{B}|Planeswalker - Sorin||4|+1: Until your next turn, creatures you control get +1/+0 and gain lifelink.$-2: Put a 2/2 black Vampire creature token with flying onto the battlefield.$-6: You get an emblem with "At the beginning of each opponent's upkeep, that player sacrifices a creature."| Sultai Charm|Khans of Tarkir|204|U|{B}{G}{U}|Instant|||Choose one —$ Destroy target monocolored creature.$ Destroy target artifact or enchantment.$ Draw two cards, then discard a card.| Temur Ascendancy|Khans of Tarkir|207|R|{G}{U}{R}|Enchantment|||Creatures you control have haste.$Whenever a creature with power 4 or greater enters the battlefield under your control, you may draw a card.| Zurgo Helmsmasher|Khans of Tarkir|214|M|{2}{R}{W}{B}|Legendary Creature - Orc Warrior|7|2|Haste$Zurgo Helmsmasher attacks each combat if able.$Zurgo Helmsmasher has indestructible as long as it's your turn.$Whenever a creature dealt damage by Zurgo Helmsmasher this turn dies, put a +1/+1 counter on Zurgo Helmsmasher.| -Mystic Monastery|Khans of Tarkir|9994|U||Land|||Mystic Monastery enters the battlefield tapped.${T}: Add {U}, {R}, or {W} to your mana pool.| -Nomad Outpost|Khans of Tarkir|9995|U||Land|||Nomad Outpost enters the battlefield tapped.${T}: Add {R}, {W}, or {B} to your mana pool.| Bloodstained Mire|Khans of Tarkir|230|R||Land|||{T}, Pay 1 life, Sacrifice Bloodstained Mire: Search your library for a Swamp or Mountain card and put it onto the battlefield. Then shuffle your library.| Flooded Strand|Khans of Tarkir|233|R||Land|||{T}, Pay 1 life, Sacrifice Flooded Strand: Search your library for a Plains or Island card and put it onto the battlefield. Then shuffle your library.| +Mystic Monastery|Khans of Tarkir|236|U||Land|||Mystic Monastery enters the battlefield tapped.${T}: Add {U}, {R}, or {W} to your mana pool.| +Nomad Outpost|Khans of Tarkir|237|U||Land|||Nomad Outpost enters the battlefield tapped.${T}: Add {R}, {W}, or {B} to your mana pool.| Polluted Delta|Khans of Tarkir|239|R||Land|||{T}, Pay 1 life, Sacrifice Polluted Delta: Search your library for an Island or Swamp card and put it onto the battlefield. Then shuffle your library.| Windswept Heath|Khans of Tarkir|248|R||Land|||{T}, Pay 1 life, Sacrifice Windswept Heath: Search your library for a Forest or Plains card and put it onto the battlefield. Then shuffle your library.| Wooded Foothills|Khans of Tarkir|249|R||Land|||{T}, Pay 1 life, Sacrifice Wooded Foothills: Search your library for a Mountain or Forest card and put it onto the battlefield. Then shuffle your library.| @@ -24187,3 +24193,4 @@ Forest|Khans of Tarkir|268|L||Basic Land - Forest|||| Forest|Khans of Tarkir|269|L||Basic Land - Forest|||| Dragon Throne of Tarkir|Khans of Tarkir|219|R|{4}|Legendary Artifact - Equipment|||Equipped creature has defender and "{2}, {T}: Other creatures you control gain trample and get +X/+X until end of turn, where X is this creature's power."$Equip {3}| Lens of Clarity|Khans of Tarkir|223|C|{1}|Artifact|||You may look at the top card of your library and at face-down creatures you don't control. (You may do this at any time.)| +Ugin's Nexus|Khans of Tarkir|227|M|{5}|Legendary Artifact|||If a player would begin an extra turn, that player skips that turn instead.$If Ugin's Nexus would be put into a graveyard from the battlefield, instead exile it and take an extra turn after this one.|