diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java b/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java index 7a869aa38e..fc3fb61e28 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java @@ -172,7 +172,6 @@ public class CardsStorage { readUnimplemented("ZEN", "/zen.txt", names, cards); readUnimplemented("WWK", "/wwk.txt", names, cards); readUnimplemented("ROE", "/roe.txt", names, cards); - readUnimplemented("SOM", "/som.txt", names, cards); readUnimplemented("MBS", "/mbs.txt", names, cards); readUnimplemented("NPH", "/nph.txt", names, cards); readUnimplemented("M12", "/m12.txt", names, cards); diff --git a/Mage.Client/src/main/resources/som.txt b/Mage.Client/src/main/resources/som.txt deleted file mode 100644 index bfe305cb4e..0000000000 --- a/Mage.Client/src/main/resources/som.txt +++ /dev/null @@ -1,249 +0,0 @@ -1|Abuna Acolyte -2|Arrest -3|Auriok Edgewright -4|Auriok Sunchaser -5|Dispense Justice -6|Elspeth Tirel -7|Fulgent Distraction -8|Ghalma's Warden -9|Glimmerpoint Stag -10|Glint Hawk -11|Indomitable Archangel -12|Kemba, Kha Regent -13|Kemba's Skyguard -14|Leonin Arbiter -15|Loxodon Wayfarer -16|Myrsmith -17|Razor Hippogriff -18|Revoke Existence -19|Salvage Scout -20|Seize the Initiative -21|Soul Parry -22|Sunblast Angel -23|Sunspear Shikari -24|Tempered Steel -25|True Conviction -26|Vigil for the Lost -27|Whitesun's Passage -28|Argent Sphinx -29|Bonds of Quicksilver -30|Darkslick Drake -31|Disperse -32|Dissipation Field -33|Grand Architect -34|Halt Order -35|Inexorable Tide -36|Lumengrid Drake -37|Neurok Invisimancer -38|Plated Seastrider -39|Quicksilver Gargantuan -40|Riddlesmith -41|Scrapdiver Serpent -42|Screeching Silcaw -43|Shape Anew -44|Sky-Eel School -45|Steady Progress -46|Stoic Rebuttal -47|Thrummingbird -48|Trinket Mage -49|Turn Aside -50|Twisted Image -51|Vault Skyward -52|Vedalken Certarch -53|Volition Reins -54|Blackcleave Goblin -55|Bleak Coven Vampires -56|Blistergrub -57|Carnifex Demon -58|Contagious Nim -59|Corrupted Harvester -60|Dross Hopper -61|Exsanguinate -62|Flesh Allergy -63|Fume Spitter -64|Geth, Lord of the Vault -65|Grasp of Darkness -66|Hand of the Praetors -67|Ichor Rats -68|Instill Infection -69|Memoricide -70|Moriok Reaver -71|Necrogen Scudder -72|Necrotic Ooze -73|Painful Quandary -74|Painsmith -75|Plague Stinger -76|Psychic Miasma -77|Relic Putrescence -78|Skinrender -79|Skithiryx, the Blight Dragon -80|Tainted Strike -81|Arc Trail -82|Assault Strobe -83|Barrage Ogre -84|Blade-Tribe Berserkers -85|Bloodshot Trainee -86|Cerebral Eruption -87|Embersmith -88|Ferrovore -89|Flameborn Hellion -90|Furnace Celebration -91|Galvanic Blast -92|Goblin Gaveleer -93|Hoard-Smelter Dragon -94|Koth of the Hammer -95|Kuldotha Phoenix -96|Kuldotha Rebirth -97|Melt Terrain -98|Molten Psyche -99|Ogre Geargrabber -100|Oxidda Daredevil -101|Oxidda Scrapmelter -102|Scoria Elemental -103|Shatter -104|Spikeshot Elder -105|Tunnel Ignus -106|Turn to Slag -107|Vulshok Heartstoker -108|Acid Web Spider -109|Alpha Tyrranax -110|Asceticism -111|Bellowing Tanglewurm -112|Blight Mamba -113|Blunt the Assault -114|Carapace Forger -115|Carrion Call -116|Copperhorn Scout -117|Cystbearer -118|Engulfing Slagwurm -119|Ezuri, Renegade Leader -120|Ezuri's Archers -121|Ezuri's Brigade -122|Genesis Wave -123|Liege of the Tangle -124|Lifesmith -125|Molder Beast -126|Putrefax -127|Slice in Twain -128|Tangle Angler -129|Tel-Jilad Defiance -130|Tel-Jilad Fallen -131|Untamed Might -132|Viridian Revel -133|Wing Puncture -134|Withstand Death -135|Venser, the Sojourner -136|Accorder's Shield -137|Argentum Armor -138|Auriok Replica -139|Barbed Battlegear -140|Bladed Pinions -141|Chimeric Mass -142|Chrome Steed -143|Clone Shell -144|Contagion Clasp -145|Contagion Engine -146|Copper Myr -147|Corpse Cur -148|Culling Dais -149|Darksteel Axe -150|Darksteel Juggernaut -151|Darksteel Myr -152|Darksteel Sentinel -153|Echo Circlet -154|Etched Champion -155|Flight Spellbomb -156|Glint Hawk Idol -157|Gold Myr -158|Golden Urn -159|Golem Artisan -160|Golem Foundry -161|Golem's Heart -162|Grafted Exoskeleton -163|Grindclock -164|Heavy Arbalest -165|Horizon Spellbomb -166|Ichorclaw Myr -167|Infiltration Lens -168|Iron Myr -169|Kuldotha Forgemaster -170|Leaden Myr -171|Liquimetal Coating -172|Livewire Lash -173|Lux Cannon -174|Memnite -175|Mimic Vat -176|Mindslaver -177|Molten-Tail Masticore -178|Moriok Replica -179|Mox Opal -180|Myr Battlesphere -181|Myr Galvanizer -182|Myr Propagator -183|Myr Reservoir -184|Necrogen Censer -185|Necropede -186|Neurok Replica -187|Nihil Spellbomb -188|Nim Deathmantle -189|Origin Spellbomb -190|Palladium Myr -191|Panic Spellbomb -192|Perilous Myr -193|Platinum Emperion -194|Precursor Golem -195|Prototype Portal -196|Ratchet Bomb -197|Razorfield Thresher -198|Rust Tick -199|Rusted Relic -200|Saberclaw Golem -201|Semblance Anvil -202|Silver Myr -203|Snapsail Glider -204|Soliton -205|Steel Hellkite -206|Strata Scythe -207|Strider Harness -208|Sword of Body and Mind -209|Sylvok Lifestaff -210|Sylvok Replica -211|Throne of Geth -212|Tower of Calamities -213|Trigon of Corruption -214|Trigon of Infestation -215|Trigon of Mending -216|Trigon of Rage -217|Trigon of Thought -218|Tumble Magnet -219|Vector Asp -220|Venser's Journal -221|Vulshok Replica -222|Wall of Tanglecord -223|Wurmcoil Engine -224|Blackcleave Cliffs -225|Copperline Gorge -226|Darkslick Shores -227|Glimmerpost -228|Razorverge Thicket -229|Seachrome Coast -230|Plains -231|Plains -232|Plains -233|Plains -234|Island -235|Island -236|Island -237|Island -238|Swamp -239|Swamp -240|Swamp -241|Swamp -242|Mountain -243|Mountain -244|Mountain -245|Mountain -246|Forest -247|Forest -248|Forest -249|Forest \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java b/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java index de3f1ff55b..9e9768bbce 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java @@ -106,7 +106,7 @@ class BudokaGardenerEffect extends OneShotEffect { p.flip(game); } } - return false; + return true; } @Override diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/CloudcrestLake.java b/Mage.Sets/src/mage/sets/championsofkamigawa/CloudcrestLake.java new file mode 100644 index 0000000000..4bd8ab4385 --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/CloudcrestLake.java @@ -0,0 +1,68 @@ +/* + * 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.championsofkamigawa; + +import java.util.UUID; + +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.effects.common.SkipUntapSourceEffect; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; + +/** + * @author Loki + */ +public class CloudcrestLake extends CardImpl { + + public CloudcrestLake(UUID ownerId) { + super(ownerId, 274, "Cloudcrest Lake", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "CHK"; + this.addAbility(new ColorlessManaAbility()); + Ability whiteManaAbility = new WhiteManaAbility(); + whiteManaAbility.addEffect(new SkipUntapSourceEffect()); + this.addAbility(whiteManaAbility); + Ability blueManaAbility = new BlueManaAbility(); + blueManaAbility.addEffect(new SkipUntapSourceEffect()); + this.addAbility(blueManaAbility); + } + + public CloudcrestLake(final CloudcrestLake card) { + super(card); + } + + @Override + public CloudcrestLake copy() { + return new CloudcrestLake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java b/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java new file mode 100644 index 0000000000..103c478b17 --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java @@ -0,0 +1,113 @@ +/* + * 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.championsofkamigawa; + +import java.util.List; +import java.util.UUID; + +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.SearchEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.filter.Filter; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Loki + */ +public class InameDeathAspect extends CardImpl { + + public InameDeathAspect(UUID ownerId) { + super(ownerId, 118, "Iname, Death Aspect", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); + this.expansionSetCode = "CHK"; + this.supertype.add("Legendary"); + this.subtype.add("Spirit"); + this.color.setBlack(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + this.addAbility(new EntersBattlefieldTriggeredAbility(new InameDeathAspectEffect(), true)); + } + + public InameDeathAspect(final InameDeathAspect card) { + super(card); + } + + @Override + public InameDeathAspect copy() { + return new InameDeathAspect(this); + } +} + +class InameDeathAspectEffect extends SearchEffect { + + private final static FilterCreatureCard filter = new FilterCreatureCard(); + +// static { +// filter.getSubtype().add("Spirit"); +// filter.setScopeSubtype(Filter.ComparisonScope.Any); +// } + + public InameDeathAspectEffect() { + super(new TargetCardInLibrary(0, 0, filter), Constants.Outcome.Neutral); + staticText = "search your library for any number of Spirit cards and put them into your graveyard. If you do, shuffle your library"; + } + + public InameDeathAspectEffect(final InameDeathAspectEffect effect) { + super(effect); + } + + @Override + public InameDeathAspectEffect copy() { + return new InameDeathAspectEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + player.searchLibrary(target, game); + if (target.getTargets().size() > 0) { + for (UUID cardId: target.getTargets()) { + Card card = player.getLibrary().remove(cardId, game); + if (card != null){ + card.moveToZone(Constants.Zone.GRAVEYARD, source.getId(), game, false); + } + } + player.shuffleLibrary(game); + } + return true; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java b/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java new file mode 100644 index 0000000000..6615a71c51 --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java @@ -0,0 +1,79 @@ +/* + * 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.championsofkamigawa; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.common.ExileSourceEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.filter.Filter; +import mage.filter.FilterCard; +import mage.target.common.TargetCardInGraveyard; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author Loki + */ +public class InameLifeAspect extends CardImpl { + + private final static FilterCard filter = new FilterCard("Spirit cards"); + + static { + filter.getSubtype().add("Spirit"); + filter.setScopeSubtype(Filter.ComparisonScope.Any); + } + + public InameLifeAspect(UUID ownerId) { + super(ownerId, 215, "Iname, Life Aspect", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); + this.expansionSetCode = "CHK"; + this.supertype.add("Legendary"); + this.subtype.add("Spirit"); + this.color.setGreen(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + Ability ability = new DiesTriggeredAbility(new ExileSourceEffect(), true); + ability.addEffect(new ReturnToHandTargetEffect()); + ability.addTarget(new TargetCardInYourGraveyard(0, 0, filter)); + this.addAbility(ability); + } + + public InameLifeAspect(final InameLifeAspect card) { + super(card); + } + + @Override + public InameLifeAspect copy() { + return new InameLifeAspect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/KitsuneHealer.java b/Mage.Sets/src/mage/sets/championsofkamigawa/KitsuneHealer.java index 050244da29..68780dce34 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/KitsuneHealer.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/KitsuneHealer.java @@ -71,7 +71,7 @@ public class KitsuneHealer extends CardImpl { Ability firstAbility = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new PreventDamageTargetEffect(Constants.Duration.EndOfTurn, 1), new TapSourceCost()); firstAbility.addTarget(new TargetCreatureOrPlayer()); this.addAbility(firstAbility); - Ability secondAbility = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new KitsuneHealerEffect(Constants.Duration.EndOfTurn), new TapSourceCost()); + Ability secondAbility = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new KitsuneHealerEffect(), new TapSourceCost()); secondAbility.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(secondAbility); } @@ -89,9 +89,9 @@ public class KitsuneHealer extends CardImpl { class KitsuneHealerEffect extends PreventionEffectImpl { - public KitsuneHealerEffect(Constants.Duration duration) { - super(duration); - staticText = "Prevent all damage that would be dealt to target legendary creature " + duration.toString(); + public KitsuneHealerEffect() { + super(Constants.Duration.EndOfTurn); + staticText = "Prevent all damage that would be dealt to target legendary creature this turn"; } public KitsuneHealerEffect(final PreventAllCombatDamageEffect effect) { @@ -100,7 +100,7 @@ class KitsuneHealerEffect extends PreventionEffectImpl { @Override public KitsuneHealerEffect copy() { - return new KitsuneHealerEffect(Constants.Duration.EndOfTurn); + return new KitsuneHealerEffect(); } @Override diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/KuroPitlord.java b/Mage.Sets/src/mage/sets/championsofkamigawa/KuroPitlord.java new file mode 100644 index 0000000000..4bd97f137d --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/KuroPitlord.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.championsofkamigawa; + +import java.util.UUID; + +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.abilities.effects.common.continious.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Loki + */ +public class KuroPitlord extends CardImpl { + + public KuroPitlord(UUID ownerId) { + super(ownerId, 123, "Kuro, Pitlord", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}{B}{B}{B}"); + this.expansionSetCode = "CHK"; + this.supertype.add("Legendary"); + this.subtype.add("Demon"); + this.subtype.add("Spirit"); + this.color.setBlack(true); + this.power = new MageInt(9); + this.toughness = new MageInt(9); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{B}{B}{B}{B}")), Constants.TargetController.YOU, false)); + Ability ability = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new BoostTargetEffect(-1, -1, Constants.Duration.EndOfTurn), new PayLifeCost(1)); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public KuroPitlord(final KuroPitlord card) { + super(card); + } + + @Override + public KuroPitlord copy() { + return new KuroPitlord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/LanternLitGraveyard.java b/Mage.Sets/src/mage/sets/championsofkamigawa/LanternLitGraveyard.java new file mode 100644 index 0000000000..f919f09b93 --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/LanternLitGraveyard.java @@ -0,0 +1,66 @@ +/* + * 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.championsofkamigawa; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.effects.common.SkipUntapSourceEffect; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.cards.CardImpl; + +/** + * + * @author Loki + */ +public class LanternLitGraveyard extends CardImpl { + + public LanternLitGraveyard(UUID ownerId) { + super(ownerId, 278, "Lantern-Lit Graveyard", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "CHK"; + this.addAbility(new ColorlessManaAbility()); + Ability blueManaAbility = new BlueManaAbility(); + blueManaAbility.addEffect(new SkipUntapSourceEffect()); + this.addAbility(blueManaAbility); + Ability redManaAbility = new RedManaAbility(); + redManaAbility.addEffect(new SkipUntapSourceEffect()); + this.addAbility(redManaAbility); + } + + public LanternLitGraveyard(final LanternLitGraveyard card) { + super(card); + } + + @Override + public LanternLitGraveyard copy() { + return new LanternLitGraveyard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/NagaoBoundByHonor.java b/Mage.Sets/src/mage/sets/championsofkamigawa/NagaoBoundByHonor.java new file mode 100644 index 0000000000..19748bcfc7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/NagaoBoundByHonor.java @@ -0,0 +1,78 @@ +/* + * 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.championsofkamigawa; + +import java.util.UUID; + +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.continious.BoostControlledEffect; +import mage.abilities.keyword.BushidoAbility; +import mage.cards.CardImpl; +import mage.filter.Filter; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Loki + */ +public class NagaoBoundByHonor extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Samurai creatures"); + + static { + filter.getSubtype().add("Samurai"); + filter.setScopeSubtype(Filter.ComparisonScope.Any); + } + + public NagaoBoundByHonor(UUID ownerId) { + super(ownerId, 36, "Nagao, Bound by Honor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "CHK"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Samurai"); + this.color.setWhite(true); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + this.addAbility(new BushidoAbility(1)); + this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(1, 1, Constants.Duration.EndOfTurn, filter, false), false)); + } + + public NagaoBoundByHonor(final NagaoBoundByHonor card) { + super(card); + } + + @Override + public NagaoBoundByHonor copy() { + return new NagaoBoundByHonor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java new file mode 100644 index 0000000000..ae0e63720f --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java @@ -0,0 +1,135 @@ +/* + * 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.championsofkamigawa; + +import java.util.UUID; + +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.Flipped; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalContinousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.*; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreatureCard; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.Token; +import mage.players.Player; +import mage.target.common.TargetCardInGraveyard; +import mage.target.common.TargetCardInOpponentsGraveyard; + +/** + * @author Loki + */ +public class NezumiGraverobber extends CardImpl { + + public NezumiGraverobber(UUID ownerId) { + super(ownerId, 129, "Nezumi Graverobber", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "CHK"; + this.subtype.add("Rat"); + this.subtype.add("Rogue"); + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + Ability ability = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{1}{B}")); + ability.addTarget(new TargetCardInOpponentsGraveyard(new FilterCard())); + ability.addEffect(new NezumiGraverobberFlipEffect()); + this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(Constants.Zone.BATTLEFIELD, new ConditionalContinousEffect(new CopyTokenEffect(new NighteyesTheDesecratorToken()), Flipped.getInstance(), ""))); + } + + public NezumiGraverobber(final NezumiGraverobber card) { + super(card); + } + + @Override + public NezumiGraverobber copy() { + return new NezumiGraverobber(this); + } +} + +class NezumiGraverobberFlipEffect extends OneShotEffect { + + NezumiGraverobberFlipEffect() { + super(Constants.Outcome.BecomeCreature); + staticText = "If no cards are in that graveyard, flip Nezumi Graverobber"; + } + + NezumiGraverobberFlipEffect(final NezumiGraverobberFlipEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Card card = game.getCard(targetPointer.getFirst(source)); + if (card != null) { + Player player = game.getPlayer(card.getOwnerId()); + if (player != null) { + if (player.getGraveyard().size() == 0) { + Permanent p = game.getPermanent(source.getSourceId()); + if (p != null) { + p.flip(game); + } + } + } + } + return true; + } + + @Override + public NezumiGraverobberFlipEffect copy() { + return new NezumiGraverobberFlipEffect(this); + } + +} + +class NighteyesTheDesecratorToken extends Token { + NighteyesTheDesecratorToken() { + super("Nighteyes The Desecrator", ""); + supertype.add("Legendary"); + cardType.add(CardType.CREATURE); + color.setBlack(true); + subtype.add("Rat"); + subtype.add("Wizard"); + power = new MageInt(4); + toughness = new MageInt(2); + Ability ability = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{4}{B}")); + ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard())); + this.addAbility(ability); + } +} diff --git a/Mage.Sets/src/mage/sets/planechase/VerdantForce.java b/Mage.Sets/src/mage/sets/planechase/VerdantForce.java new file mode 100644 index 0000000000..c1e0b9fe9f --- /dev/null +++ b/Mage.Sets/src/mage/sets/planechase/VerdantForce.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.planechase; + +import java.util.UUID; + +/** + * + * @author Loki + */ +public class VerdantForce extends mage.sets.tempest.VerdantForce { + + public VerdantForce(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + this.expansionSetCode = "HOP"; + } + + public VerdantForce(final VerdantForce card) { + super(card); + } + + @Override + public VerdantForce copy() { + return new VerdantForce(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnika/CivicWayfinder.java b/Mage.Sets/src/mage/sets/ravnika/CivicWayfinder.java new file mode 100644 index 0000000000..2b9b1e714d --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnika/CivicWayfinder.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.ravnika; + +import java.util.UUID; + +/** + * + * @author Loki + */ +public class CivicWayfinder extends mage.sets.tenth.CivicWayfinder { + + public CivicWayfinder(UUID ownerId) { + super(ownerId); + this.cardNumber = 157; + this.expansionSetCode = "RAV"; + } + + public CivicWayfinder(final CivicWayfinder card) { + super(card); + } + + @Override + public CivicWayfinder copy() { + return new CivicWayfinder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnika/ScionOfTheWild.java b/Mage.Sets/src/mage/sets/ravnika/ScionOfTheWild.java new file mode 100644 index 0000000000..88340e9437 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnika/ScionOfTheWild.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.ravnika; + +import java.util.UUID; + +/** + * + * @author Loki + */ +public class ScionOfTheWild extends mage.sets.tenth.ScionOfTheWild { + + public ScionOfTheWild(UUID ownerId) { + super(ownerId); + this.cardNumber = 182; + this.expansionSetCode = "RAV"; + } + + public ScionOfTheWild(final ScionOfTheWild card) { + super(card); + } + + @Override + public ScionOfTheWild copy() { + return new ScionOfTheWild(this); + } +} diff --git a/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java b/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java new file mode 100644 index 0000000000..487e6ad576 --- /dev/null +++ b/Mage.Sets/src/mage/sets/zendikar/BoldDefense.java @@ -0,0 +1,69 @@ +/* + * 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.zendikar; + +import java.util.UUID; + +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continious.BoostControlledEffect; +import mage.abilities.effects.common.continious.GainAbilityControlledEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Loki + */ +public class BoldDefense extends CardImpl { + + public BoldDefense(UUID ownerId) { + super(ownerId, 3, "Bold Defense", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{W}"); + this.expansionSetCode = "ZEN"; + this.color.setWhite(true); + Ability kickedAbility = new KickerAbility(new BoostControlledEffect(2, 2, Constants.Duration.EndOfTurn), true); + kickedAbility.addCost(new ManaCostsImpl("{3}{W}")); + kickedAbility.addEffect(new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Constants.Duration.EndOfTurn, FilterCreaturePermanent.getDefault(), false)); + this.addAbility(kickedAbility); + this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Constants.Duration.EndOfTurn)); + } + + public BoldDefense(final BoldDefense card) { + super(card); + } + + @Override + public BoldDefense copy() { + return new BoldDefense(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/ExileSourceEffect.java b/Mage/src/mage/abilities/effects/common/ExileSourceEffect.java index 562befbd98..03ab5285cb 100644 --- a/Mage/src/mage/abilities/effects/common/ExileSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/ExileSourceEffect.java @@ -31,6 +31,7 @@ package mage.abilities.effects.common; import mage.Constants.Outcome; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.game.Game; import mage.game.permanent.Permanent; @@ -59,7 +60,13 @@ public class ExileSourceEffect extends OneShotEffect { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { return permanent.moveToExile(null, "", source.getId(), game); - } + } else { + // try to exile card + Card card = game.getCard(source.getSourceId()); + if (card != null) { + return card.moveToExile(null, "", source.getId(), game); + } + } return false; } diff --git a/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java b/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java index 588d4bdd0a..6a60d07663 100644 --- a/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java @@ -33,6 +33,7 @@ import mage.Constants.Outcome; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.game.Game; import mage.game.permanent.Permanent; @@ -68,11 +69,16 @@ public class ExileTargetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getFirstTarget()); + Permanent permanent = game.getPermanent(targetPointer.getFirst(source)); if (permanent != null) { return permanent.moveToExile(exileId, exileZone, source.getId(), game); - } - return false; + } else { + Card card = game.getCard(targetPointer.getFirst(source)); + if (card != null) { + return card.moveToExile(exileId, exileZone, source.getId(), game); + } + } + return false; } @Override diff --git a/Mage/src/mage/target/TargetImpl.java b/Mage/src/mage/target/TargetImpl.java index 9e829fcc20..9596498a99 100644 --- a/Mage/src/mage/target/TargetImpl.java +++ b/Mage/src/mage/target/TargetImpl.java @@ -157,7 +157,7 @@ public abstract class TargetImpl> implements Target { @Override public void add(UUID id, Game game) { - if (targets.size() < maxNumberOfTargets) { + if (maxNumberOfTargets == 0 || targets.size() < maxNumberOfTargets) { if (!targets.containsKey(id)) { targets.put(id, 0); } diff --git a/Mage/src/mage/target/common/TargetCardInOpponentsGraveyard.java b/Mage/src/mage/target/common/TargetCardInOpponentsGraveyard.java new file mode 100644 index 0000000000..ada238d497 --- /dev/null +++ b/Mage/src/mage/target/common/TargetCardInOpponentsGraveyard.java @@ -0,0 +1,48 @@ +package mage.target.common; + +import mage.Constants; +import mage.abilities.Ability; +import mage.cards.Card; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.target.TargetCard; + +import java.util.UUID; + + +public class TargetCardInOpponentsGraveyard extends TargetCard { + + public TargetCardInOpponentsGraveyard(FilterCard filter) { + this(1, 1, filter); + } + + public TargetCardInOpponentsGraveyard(int minNumTargets, int maxNumTargets, FilterCard filter) { + super(minNumTargets, maxNumTargets, Constants.Zone.GRAVEYARD, filter); + this.targetName = filter.getMessage() + " from an opponent's graveyard"; + } + + public TargetCardInOpponentsGraveyard(final TargetCardInOpponentsGraveyard target) { + super(target); + } + + @Override + public boolean canTarget(UUID id, Ability source, Game game) { + Card card = game.getCard(id); + if (card != null && game.getZone(card.getId()) == Constants.Zone.GRAVEYARD) { + if (game.getOpponents(source.getControllerId()).contains(card.getOwnerId())) { + return filter.match(card); + } + } + return false; + } + + @Override + public boolean canChoose(UUID sourceControllerId, Game game) { + return true; + } + + @Override + public TargetCardInOpponentsGraveyard copy() { + return new TargetCardInOpponentsGraveyard(this); + } +}