diff --git a/.gitignore b/.gitignore index ca85c84005..5b29a55679 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ Mage.Server.Plugins/Mage.Deck.Limited/target Mage.Server.Plugins/Mage.Game.CommanderDuel/target Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/target/ Mage.Server.Plugins/Mage.Game.FreeForAll/target +Mage.Server.Plugins/Mage.Game.MomirDuel/target Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/target Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/target Mage.Server.Plugins/Mage.Player.AI.DraftBot/target diff --git a/Mage.Client/plugins/mage-theme-plugin.jar b/Mage.Client/plugins/mage-theme-plugin.jar deleted file mode 100644 index 1448724874..0000000000 Binary files a/Mage.Client/plugins/mage-theme-plugin.jar and /dev/null differ diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck b/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck new file mode 100644 index 0000000000..f30c179656 --- /dev/null +++ b/Mage.Client/release/sample-decks/Commander/Commander 2015/Call the Spirits (WB).dck @@ -0,0 +1,85 @@ +NAME:Call the Spirits (WB) +1 [C15:312] Barren Moor +1 [C15:172] New Benalia +1 [C15:140] Tainted Field +1 [C15:165] Wayfarer's Bauble +1 [C15:116] Black Market +1 [C15:229] Terramorphic Expanse +1 [C15:6] Dawn to Dusk +1 [C15:281] Command Tower +1 [C15:171] Scoured Barrens +3 [C15:323] Plains +3 [C15:324] Plains +3 [C15:325] Plains +1 [C15:155] Orzhov Signet +1 [C15:142] Orzhov Cluestone +2 [C15:326] Plains +1 [C15:26] Karmic Justice +1 [C15:3] Celestial Archon +1 [C15:22] Kor Sanctifiers +1 [C15:12] Ghostblade Eidolon +1 [C15:201] Treasury Thrull +1 [C15:108] Teysa, Envoy of Ghosts +1 [C15:63] Phyrexian Reclamation +1 [C15:236] Evolving Wilds +1 [C15:2] Ajani's Chosen +1 [C15:324] Secluded Steppe +1 [C15:157] Underworld Coinsmith +1 [C15:84] Vow of Duty +1 [C15:109] Fallen Ideal +1 [C15:25] Mesa Enchantress +1 [C15:5] Banishing Light +1 [C15:7] Celestial Ancient +1 [C15:95] Death Grasp +1 [C15:8] Dictate of Heliod +1 [C15:114] Ancient Craving +1 [C15:46] Karlov of the Ghost Council +1 [C15:153] Orzhov Guildgate +1 [C15:20] Monk Idealist +1 [C15:250] Rogue's Passage +1 [C15:26] Silent Sentinel +1 [C15:68] Fate Unraveler +1 [C15:15] Marshal's Anthem +1 [C15:278] Vivid Marsh +1 [C15:21] Open the Vaults +1 [C15:279] Vivid Meadow +1 [C15:55] Thought Vessel +1 [C15:52] Sandstone Oracle +1 [C15:67] Dreadbringer Lampads +1 [C15:140] Vow of Malice +1 [C15:152] Phyrexian Arena +1 [C15:66] Doomwake Giant +1 [C15:19] Deadly Tempest +1 [C15:18] Daxos's Torment +1 [C15:17] Corpse Augur +1 [C15:16] Banshee of the Dread Choir +1 [C15:274] Sol Ring +1 [C15:82] Necromancer's Covenant +1 [C15:73] Gild +1 [C15:240] Ghost Quarter +1 [C15:31] Sigil of the Empty Throne +1 [C15:22] Thief of Blood +1 [C15:213] Burnished Hart +1 [C15:83] Underworld Connections +1 [C15:67] Grave Peril +1 [C15:16] Dawnglare Invoker +1 [C15:6] Aura of Silence +1 [C15:143] Temple of the False God +4 [C15:331] Swamp +3 [C15:332] Swamp +1 [C15:53] Seal of Doom +3 [C15:333] Swamp +3 [C15:334] Swamp +1 [C15:8] Shielded by Faith +1 [C15:7] Righteous Confluence +1 [C15:6] Oreskos Explorer +1 [C15:4] Herald of the Host +1 [C15:3] Cage of Hands +1 [C15:3] Grasp of Fate +1 [C15:18] Seal of Cleansing +1 [C15:1] Bastion Protector +1 [C15:161] Orzhov Basilica +1 [C15:199] Lightning Greaves +1 [C15:292] Crystal Chimes +1 [C15:98] Nighthowler +SB: 1 [C15:43] Daxos the Returned diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2015/Plunder the Graves (GB).dck b/Mage.Client/release/sample-decks/Commander/Commander 2015/Plunder the Graves (GB).dck new file mode 100644 index 0000000000..7bc0b440d5 --- /dev/null +++ b/Mage.Client/release/sample-decks/Commander/Commander 2015/Plunder the Graves (GB).dck @@ -0,0 +1,84 @@ +NAME:Plunder the Graves (GB) +1 [C15:33] Bloodspore Thrinax +1 [C15:229] Terramorphic Expanse +1 [C15:281] Command Tower +1 [C15:278] Golgari Rot Farm +1 [C15:39] Skullwinder +1 [C15:38] Pathbreaker Ibex +1 [C15:189] Overwhelming Stampede +1 [C15:86] Indrik Stomphowler +1 [C15:37] Great Oak Guardian +1 [C15:35] Centaur Vinecrasher +1 [C15:198] Satyr Wayfinder +1 [C15:140] Mycoloth +1 [C15:34] Caller of the Pack +1 [C15:143] Tainted Wood +1 [C15:204] Terastodon +1 [C15:206] Tribute to the Wild +1 [C15:327] Slippery Karst +1 [C15:323] Polluted Mire +1 [C15:166] Victimize +1 [C15:90] Viridian Zealot +1 [C15:238] Vulturous Zombie +1 [C15:149] Golgari Guildgate +1 [C15:118] Ambition's Cost +1 [C15:189] Kessig Cagebreakers +1 [C15:93] Putrefy +1 [C15:236] Evolving Wilds +1 [C15:75] Wall of Blossoms +1 [C15:87] Primal Growth +1 [C15:153] Phyrexian Plaguelord +1 [C15:283] Wood Elves +1 [C15:95] Viridian Emissary +1 [C15:51] Phyrexian Rager +1 [C15:320] High Market +1 [C15:159] Acidic Slime +1 [C15:199] Eldrazi Monument +1 [C15:48] Mazirek, Kraul Death Priest +1 [C15:262] Golgari Signet +1 [C15:177] Lotleth Troll +1 [C15:176] Korozda Guildmage +1 [C15:86] Eternal Witness +1 [C15:44] Extractor Demon +1 [C15:196] Mulch +1 [C15:115] Sever the Bloodline +1 [C15:53] Butcher of Malakir +1 [C15:239] Sakura-Tribe Elder +1 [C15:66] Eater of Hope +1 [C15:103] Altar's Reap +1 [C15:277] Vivid Grove +1 [C15:63] Champion of Stray Souls +1 [C15:278] Vivid Marsh +1 [C15:55] Thought Vessel +1 [C15:85] Barter in Blood +1 [C15:107] Rise from the Grave +3 [C15:340] Forest +3 [C15:341] Forest +1 [C15:17] Corpse Augur +3 [C15:342] Forest +1 [C15:16] Banshee of the Dread Choir +1 [C15:174] Jarad, Golgari Lich Lord +1 [C15:274] Sol Ring +1 [C15:165] Grisly Salvage +1 [C15:307] Verdant Force +1 [C15:203] Spider Spawning +1 [C15:202] Cloudthresher +1 [C15:22] Thief of Blood +1 [C15:21] Scourge of Nel Toth +1 [C15:20] Dread Summons +1 [C15:140] Skullclamp +3 [C15:331] Swamp +4 [C15:332] Swamp +1 [C15:164] Golgari Charm +3 [C15:333] Swamp +1 [C15:169] Jungle Hollow +3 [C15:334] Swamp +1 [C15:23] Wretched Confluence +1 [C15:156] Grim Backwoods +3 [C15:339] Forest +1 [C15:139] Shriekmaw +1 [C15:199] Lightning Greaves +1 [C15:87] Blood Bairn +1 [C15:130] Diabolic Servitude +1 [C15:100] Bonehoard +SB: 1 [C15:49] Meren of Clan Nel Toth diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2015/Seize Control (UR).dck b/Mage.Client/release/sample-decks/Commander/Commander 2015/Seize Control (UR).dck new file mode 100644 index 0000000000..ed4cf799a5 --- /dev/null +++ b/Mage.Client/release/sample-decks/Commander/Commander 2015/Seize Control (UR).dck @@ -0,0 +1,72 @@ +NAME:Seize Control (UR) +1 [C15:32] Arachnogenesis +1 [C15:76] Monk Idealist +2 [C15:31] Warchief Giant +2 [C15:30] Rite of the Raging Storm +1 [C15:74] Marshal's Anthem +1 [C15:281] Command Tower +1 [C15:72] Karmic Justice +1 [C15:71] Jareth, Leonine Titan +1 [C15:162] Magmaquake +1 [C15:70] Ghostblade Eidolon +1 [C15:163] Mizzium Mortars +1 [C15:126] Fate Unraveler +2 [C15:78] Orim's Thunder +1 [C15:205] Thelonite Hermit +4 [C15:327] Island +4 [C15:328] Island +3 [C15:329] Island +2 [C15:87] Blatant Thievery +2 [C15:42] Arjun, the Shifting Flame +1 [C15:41] Anya, Merciless Angel +1 [C15:84] Vow of Duty +1 [C15:151] Dragon Mage +1 [C15:152] Earthquake +2 [C15:274] Wayfarer's Bauble +1 [C15:153] Faithless Looting +1 [C15:275] Worn Powerstone +2 [C15:111] Windfall +1 [C15:276] Ancient Amphitheater +1 [C15:236] Trygon Predator +2 [C15:159] Hunted Dragon +1 [C15:116] Black Market +1 [C15:318] Vivid Grove +1 [C15:11] Gigantoplasm +1 [C15:55] Thought Vessel +1 [C15:98] Mystic Retrieval +1 [C15:10] Broodbirth Viper +1 [C15:54] Seal of the Guildpact +1 [C15:53] Scytheclaw +1 [C15:140] Vow of Malice +1 [C15:143] Breath of Darigaaz +1 [C15:188] Kodama's Reach +1 [C15:100] Plaxmanta +1 [C15:101] Preordain +1 [C15:59] Arbiter of Knollridge +1 [C15:14] Mystic Confluence +1 [C15:57] Ajani's Chosen +1 [C15:13] Mirror Match +1 [C15:12] Illusory Ambusher +1 [C15:227] Melek, Izzet Paragon +1 [C15:229] Necromancer's Covenant +1 [C15:21] Scourge of Nel Toth +1 [C15:64] Celestial Archon +1 [C15:20] Dread Summons +1 [C15:172] Word of Seizing +2 [C15:61] Banishing Light +1 [C15:250] Crystal Chimes +2 [C15:29] Mizzix's Mastery +3 [C15:330] Island +1 [C15:28] Meteor Volley +1 [C15:178] Chameleon Colossus +1 [C15:9] AEthersnatch +1 [C15:24] Awaken the Sky Tyrant +4 [C15:335] Mountain +1 [C15:67] Dawnglare Invoker +3 [C15:336] Mountain +3 [C15:337] Mountain +1 [C15:139] Victimize +1 [C15:217] Etherium-Horn Sorcerer +3 [C15:338] Mountain +1 [ISD:134] Charmbreaker Devils +SB: 1 [C15:50] Mizzix of the Izmagnus diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2015/Swell the Host (GU).dck b/Mage.Client/release/sample-decks/Commander/Commander 2015/Swell the Host (GU).dck new file mode 100644 index 0000000000..765e68826b --- /dev/null +++ b/Mage.Client/release/sample-decks/Commander/Commander 2015/Swell the Host (GU).dck @@ -0,0 +1,80 @@ +NAME:Swell the Host (GU) +1 [C15:32] Arachnogenesis +1 [C15:76] Monk Idealist +1 [C15:31] Warchief Giant +1 [C15:281] Command Tower +1 [C15:160] Inferno Titan +1 [C15:161] Magma Giant +1 [C15:120] Diabolic Servitude +1 [C15:121] Doomwake Giant +1 [C15:165] Stoneshock Giant +1 [C15:39] Skullwinder +1 [C15:243] Wistful Selkie +1 [C15:320] Vivid Meadow +1 [C15:166] Sunrise Sovereign +1 [C15:37] Great Oak Guardian +1 [C15:36] Ezuri's Predation +1 [C15:202] Spider Spawning +1 [C15:34] Caller of the Pack +3 [C15:327] Island +3 [C15:328] Island +3 [C15:329] Island +2 [C15:44] Ezuri, Claw of Progress +1 [C15:87] Blatant Thievery +1 [C15:190] Loaming Shaman +1 [C15:86] Bident of Thassa +1 [C15:42] Arjun, the Shifting Flame +1 [C15:270] Staff of Nin +1 [C15:40] Verdant Confluence +1 [C15:150] Disaster Radius +1 [C15:197] Patagia Viper +1 [C15:274] Wayfarer's Bauble +1 [C15:276] Ancient Amphitheater +1 [C15:156] Hamletback Goliath +1 [C15:277] Barren Moor +1 [C15:47] Kaseto, Orochi Archmage +1 [C15:236] Trygon Predator +1 [C15:159] Hunted Dragon +1 [C15:115] Barter in Blood +1 [C15:237] Underworld Coinsmith +1 [C15:89] Blustersquall +1 [C15:116] Black Market +1 [C15:239] Biomantic Mastery +1 [C15:119] Champion of Stray Souls +1 [C15:55] Thought Vessel +1 [C15:10] Broodbirth Viper +2 [C15:180] Cobra Trap +1 [C15:53] Scytheclaw +1 [C15:97] Mulldrifter +1 [C15:186] Indrik Stomphowler +4 [C15:340] Forest +1 [C15:142] Borderland Behemoth +3 [C15:341] Forest +1 [C15:221] Golgari Charm +3 [C15:342] Forest +1 [C15:188] Kodama's Reach +1 [C15:101] Preordain +1 [C15:266] Simic Signet +1 [C15:15] Synthetic Destiny +1 [C15:225] Lorescale Coatl +1 [C15:13] Mirror Match +1 [C15:12] Illusory Ambusher +1 [C15:56] Command Beacon +1 [C15:149] Desperate Ravings +1 [C15:227] Melek, Izzet Paragon +1 [C15:228] Mystic Snake +1 [C15:107] Stolen Goods +1 [C15:229] Necromancer's Covenant +1 [C15:308] Smoldering Crater +1 [C15:171] Warstorm Surge +1 [C15:173] Acidic Slime +1 [C15:130] Phyrexian Arena +3 [C15:175] Bane of Progress +1 [C15:29] Mizzix's Mastery +2 [C15:330] Island +1 [C15:133] Phyrexian Reclamation +1 [C15:216] Epic Experiment +1 [C15:217] Etherium-Horn Sorcerer +4 [C15:339] Forest +1 [C15:219] Gisela, Blade of Goldnight +SB: 1 [C15:44] Ezuri, Claw of Progress diff --git a/Mage.Client/release/sample-decks/Commander/Commander 2015/Wade into Battle (RW)..dck b/Mage.Client/release/sample-decks/Commander/Commander 2015/Wade into Battle (RW)..dck new file mode 100644 index 0000000000..e1e18c6a80 --- /dev/null +++ b/Mage.Client/release/sample-decks/Commander/Commander 2015/Wade into Battle (RW)..dck @@ -0,0 +1,84 @@ +NAME:Wade into Battle (RW). +1 [C15:195] Thundercloud Shaman +1 [C15:275] Boros Garrison +1 [C15:31] Warchief Giant +1 [C15:229] Terramorphic Expanse +1 [C15:175] Wind-Scarred Crag +1 [C15:30] Rite of the Raging Storm +1 [C15:275] Vivid Crag +1 [C15:191] Stinkdrinker Daredevil +1 [C15:281] Command Tower +1 [C15:192] Sunrise Sovereign +1 [C15:317] Forgotten Cave +1 [C15:297] Fellwar Stone +1 [C15:134] Earthquake +1 [C15:104] Fumiko the Lowblood +1 [C15:87] Borderland Behemoth +3 [C15:323] Plains +1 [C15:328] Smoldering Crater +3 [C15:324] Plains +3 [C15:325] Plains +1 [C15:72] Magma Giant +2 [C15:326] Plains +1 [C15:209] Gisela, Blade of Goldnight +1 [C15:160] Warstorm Surge +1 [C15:93] Fall of the Hammer +1 [C15:320] Drifting Meadow +1 [C15:236] Evolving Wilds +1 [C15:266] Ancient Amphitheater +1 [C15:147] Boros Guildgate +1 [C15:141] Disaster Radius +1 [C15:15] Orim's Thunder +1 [C15:324] Secluded Steppe +1 [C15:41] Anya, Merciless Angel +1 [C15:11] Crib Swap +1 [C15:5] Banishing Light +1 [C15:147] Inferno Titan +1 [C15:319] Blasted Landscape +1 [C15:43] Jareth, Leonine Titan +1 [C15:318] Worn Powerstone +1 [C15:235] Basalt Monolith +1 [C15:207] Darksteel Ingot +1 [C15:142] Urza's Incubator +1 [C15:279] Vivid Meadow +1 [C15:39] Sun Titan +1 [C15:55] Thought Vessel +1 [C15:131] Hunted Dragon +1 [C15:255] Boros Signet +1 [C15:57] Desolation Giant +1 [C15:176] Hostility +1 [C15:52] Sandstone Oracle +1 [C15:142] Stoneshock Giant +1 [C15:51] Blade of Selves +1 [C15:1] Angel of Serenity +1 [C15:216] Dreamstone Hedron +1 [C15:130] Hammerfist Giant +1 [C15:274] Sol Ring +1 [C15:16] Faith's Fetters +1 [C15:18] Victory's Herald +1 [C15:130] Seer's Sundial +1 [C15:138] Breath of Darigaaz +1 [C15:2] Arbiter of Knollridge +1 [C15:16] Dawnglare Invoker +1 [C15:217] Staff of Nin +1 [C15:136] Hamletback Goliath +1 [C15:28] Meteor Volley +1 [C15:27] Magus of the Wheel +1 [C15:26] Fiery Confluence +1 [C15:25] Dream Pillager +1 [C15:335] Mind Stone +1 [C15:109] Taurean Mauler +1 [C15:332] Loxodon Warhammer +4 [C15:335] Mountain +4 [C15:336] Mountain +1 [C15:6] Oreskos Explorer +3 [C15:337] Mountain +1 [C15:5] Kalemne's Captain +3 [C15:338] Mountain +1 [C15:4] Herald of the Host +1 [C15:2] Dawnbreak Reclaimer +1 [C15:137] Curse of the Nightly Hunt +1 [C15:199] Lightning Greaves +1 [C15:137] Boros Cluestone +1 [CSP:136] Coldsteel Heart +SB: 1 [C15:45] Kalemne, Disciple of Iroas diff --git a/Mage.Client/release/sample-decks/Mormir Basic/Mormir Basic.dck b/Mage.Client/release/sample-decks/Mormir Basic/Mormir Basic.dck new file mode 100644 index 0000000000..1295622aa2 --- /dev/null +++ b/Mage.Client/release/sample-decks/Mormir Basic/Mormir Basic.dck @@ -0,0 +1,23 @@ +NAME:Mormir Basic +3 [BFZ:259] Island +3 [BFZ:261] Swamp +3 [BFZ:250] Plains +3 [BFZ:272] Forest +3 [BFZ:260] Swamp +3 [BFZ:271] Forest +3 [BFZ:270] Forest +3 [BFZ:265] Mountain +2 [BFZ:254] Plains +3 [BFZ:264] Swamp +3 [BFZ:274] Forest +1 [BFZ:252] Plains +3 [BFZ:262] Swamp +3 [BFZ:251] Plains +2 [BFZ:273] Forest +3 [BFZ:258] Island +2 [BFZ:269] Mountain +3 [BFZ:268] Mountain +3 [BFZ:257] Island +3 [BFZ:267] Mountain +3 [BFZ:266] Mountain +2 [BFZ:255] Island diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index 9f0dd4a649..71135fc798 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -1,30 +1,30 @@ /* -* 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. -*/ + * 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.client.dialog; import java.io.FileNotFoundException; @@ -71,7 +71,9 @@ public class NewTableDialog extends MageDialog { private static final String LIMITED = "Limited"; - /** Creates new form NewTableDialog */ + /** + * Creates new form NewTableDialog + */ public NewTableDialog() { session = MageFrame.getSession(); lastSessionId = ""; @@ -79,13 +81,13 @@ public class NewTableDialog extends MageDialog { player1Panel.showLevel(false); this.spnNumWins.setModel(new SpinnerNumberModel(1, 1, 5, 1)); this.spnFreeMulligans.setModel(new SpinnerNumberModel(0, 0, 5, 1)); - MageFrame.getUI().addButton(MageComponents.NEW_TABLE_OK_BUTTON, btnOK); + MageFrame.getUI().addButton(MageComponents.NEW_TABLE_OK_BUTTON, btnOK); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -361,7 +363,7 @@ public class NewTableDialog extends MageDialog { GameTypeView gameType = (GameTypeView) cbGameType.getSelectedItem(); MatchOptions options = new MatchOptions(this.txtName.getText(), gameType.getName()); options.getPlayerTypes().add("Human"); - for (TablePlayerPanel player: players) { + for (TablePlayerPanel player : players) { options.getPlayerTypes().add(player.getPlayerType()); } options.setDeckType((String) this.cbDeckType.getSelectedItem()); @@ -370,9 +372,9 @@ public class NewTableDialog extends MageDialog { options.setAttackOption((MultiplayerAttackOption) this.cbAttackOption.getSelectedItem()); options.setSkillLevel((SkillLevel) this.cbSkillLevel.getSelectedItem()); options.setRange((RangeOfInfluence) this.cbRange.getSelectedItem()); - options.setWinsNeeded((Integer)this.spnNumWins.getValue()); + options.setWinsNeeded((Integer) this.spnNumWins.getValue()); options.setRollbackTurnsAllowed(chkRollbackTurnsAllowed.isSelected()); - options.setFreeMulligans((Integer)this.spnFreeMulligans.getValue()); + options.setFreeMulligans((Integer) this.spnFreeMulligans.getValue()); options.setPassword(this.txtPassword.getText()); if (!checkMatchOptions(options)) { return; @@ -391,9 +393,8 @@ public class NewTableDialog extends MageDialog { this.player1Panel.getPlayerName(), "Human", 1, DeckImporterUtil.importDeck(this.player1Panel.getDeckFile()), - this.txtPassword.getText()) - ) { - for (TablePlayerPanel player: players) { + this.txtPassword.getText())) { + for (TablePlayerPanel player : players) { if (!player.getPlayerType().equals("Human")) { if (!player.joinTable(roomId, table.getTableId())) { // error message must be send by the server @@ -423,7 +424,7 @@ public class NewTableDialog extends MageDialog { }//GEN-LAST:event_cbGameTypeActionPerformed private void numPlayersChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_numPlayersChanged - int numPlayers = (Integer)this.spnNumPlayers.getValue() - 1; + int numPlayers = (Integer) this.spnNumPlayers.getValue() - 1; createPlayers(numPlayers); }//GEN-LAST:event_numPlayersChanged @@ -432,9 +433,10 @@ public class NewTableDialog extends MageDialog { }//GEN-LAST:event_spnNumWinsnumPlayersChanged /** - * Checks about not valid game option combinations and shows an error message - * - * @return + * Checks about not valid game option combinations and shows an error + * message + * + * @return */ private boolean checkMatchOptions(MatchOptions options) { switch (options.getDeckType()) { @@ -451,11 +453,17 @@ public class NewTableDialog extends MageDialog { return false; } break; + case "Variant Magic - Momir Basic": + if (!options.getGameType().startsWith("Momir Basic")) { + JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Deck type Momir Basic needs also a Momir Basic game type", "Error", JOptionPane.ERROR_MESSAGE); + return false; + } + break; } switch (options.getGameType()) { case "Commander Two Player Duel": case "Commander Free For All": - if (!options.getDeckType().equals("Variant Magic - Commander") && !options.getDeckType().equals("Variant Magic - Duel Commander") ) { + if (!options.getDeckType().equals("Variant Magic - Commander") && !options.getDeckType().equals("Variant Magic - Duel Commander")) { JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Deck type Commander needs also a Commander game type", "Error", JOptionPane.ERROR_MESSAGE); return false; } @@ -466,16 +474,16 @@ public class NewTableDialog extends MageDialog { return false; } break; - } + } return true; } - + private void setGameOptions() { GameTypeView gameType = (GameTypeView) cbGameType.getSelectedItem(); int oldValue = (Integer) this.spnNumPlayers.getValue(); this.spnNumPlayers.setModel(new SpinnerNumberModel(gameType.getMinPlayers(), gameType.getMinPlayers(), gameType.getMaxPlayers(), 1)); this.spnNumPlayers.setEnabled(gameType.getMinPlayers() != gameType.getMaxPlayers()); - if (oldValue >= gameType.getMinPlayers() && oldValue <= gameType.getMaxPlayers()){ + if (oldValue >= gameType.getMinPlayers() && oldValue <= gameType.getMaxPlayers()) { this.spnNumPlayers.setValue(oldValue); } this.cbAttackOption.setEnabled(gameType.isUseAttackOption()); @@ -495,17 +503,16 @@ public class NewTableDialog extends MageDialog { playerPanel.init(players.size() + 2, playerType); players.add(playerPanel); playerPanel.addPlayerTypeEventListener( - new Listener () { - @Override - public void event(Event event) { - drawPlayers(); + new Listener() { + @Override + public void event(Event event) { + drawPlayers(); + } } - } ); } - - } - // remove player panels no longer needed + + } // remove player panels no longer needed else if (numPlayers < players.size()) { while (players.size() != numPlayers) { players.remove(players.size() - 1); @@ -516,7 +523,7 @@ public class NewTableDialog extends MageDialog { private void drawPlayers() { this.pnlOtherPlayers.removeAll(); - for (TablePlayerPanel panel: players) { + for (TablePlayerPanel panel : players) { this.pnlOtherPlayers.add(panel); } this.pack(); @@ -531,7 +538,7 @@ public class NewTableDialog extends MageDialog { } public void showDialog(UUID roomId) { - this.roomId = roomId; + this.roomId = roomId; if (!lastSessionId.equals(MageFrame.getSession().getSessionId())) { lastSessionId = session.getSessionId(); this.player1Panel.setPlayerName(session.getUserName()); @@ -543,8 +550,8 @@ public class NewTableDialog extends MageDialog { cbAttackOption.setModel(new DefaultComboBoxModel(MultiplayerAttackOption.values())); cbSkillLevel.setModel(new DefaultComboBoxModel(SkillLevel.values())); // Update the existing player panels (neccessary if server was changes = new session) - int i=2; - for (TablePlayerPanel tablePlayerPanel :players) { + int i = 2; + for (TablePlayerPanel tablePlayerPanel : players) { tablePlayerPanel.init(i++, tablePlayerPanel.getPlayerType()); } setGameSettingsFromPrefs(); @@ -565,7 +572,7 @@ public class NewTableDialog extends MageDialog { private void selectLimitedByDefault() { for (int i = 0; i < cbDeckType.getItemCount(); i++) { - String name = (String)cbDeckType.getItemAt(i); + String name = (String) cbDeckType.getItemAt(i); if (name.equals(LIMITED)) { cbDeckType.setSelectedIndex(i); break; @@ -574,9 +581,9 @@ public class NewTableDialog extends MageDialog { } /** - * set the table settings from java prefs + * set the table settings from java prefs */ - private void setGameSettingsFromPrefs () { + private void setGameSettingsFromPrefs() { txtName.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NAME, "Game")); txtPassword.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD, "")); @@ -585,7 +592,6 @@ public class NewTableDialog extends MageDialog { prefPlayerTypes.addAll(Arrays.asList(playerTypes.split(","))); this.spnNumPlayers.setValue(Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_PLAYERS, "2"))); - String gameTypeName = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_GAME_TYPE, "Two Player Duel"); for (GameTypeView gtv : session.getGameTypes()) { if (gtv.getName().equals(gameTypeName)) { @@ -594,7 +600,7 @@ public class NewTableDialog extends MageDialog { } } int timeLimit = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_TIME_LIMIT, "1500")); - for (MatchTimeLimit mtl :MatchTimeLimit.values()) { + for (MatchTimeLimit mtl : MatchTimeLimit.values()) { if (mtl.getTimeLimit() == timeLimit) { this.cbTimeLimit.setSelectedItem(mtl); break; @@ -608,32 +614,32 @@ public class NewTableDialog extends MageDialog { this.spnNumWins.setValue(Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_OF_WINS, "2"))); this.chkRollbackTurnsAllowed.setSelected(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_ROLLBACK_TURNS_ALLOWED, "Yes").equals("Yes")); - int range = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_RANGE, "1")); - for (RangeOfInfluence roi :RangeOfInfluence.values()) { + for (RangeOfInfluence roi : RangeOfInfluence.values()) { if (roi.getRange() == range) { this.cbRange.setSelectedItem(roi); break; } } String attackOption = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_ATTACK_OPTION, "Attack Multiple Players"); - for (MultiplayerAttackOption mao :MultiplayerAttackOption.values()) { + for (MultiplayerAttackOption mao : MultiplayerAttackOption.values()) { if (mao.toString().equals(attackOption)) { this.cbAttackOption.setSelectedItem(mao); break; } } String skillLevelDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_SKILL_LEVEL, "Casual"); - for (SkillLevel skillLevel :SkillLevel.values()) { + for (SkillLevel skillLevel : SkillLevel.values()) { if (skillLevel.toString().equals(skillLevelDefault)) { this.cbSkillLevel.setSelectedItem(skillLevel); break; } - } + } } /** - * Save the settings to java prefs to reload it next time the dialog will be created + * Save the settings to java prefs to reload it next time the dialog will be + * created * * @param options * @param deckFile @@ -645,7 +651,7 @@ public class NewTableDialog extends MageDialog { PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_TIME_LIMIT, Integer.toString(options.getPriorityTime())); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_GAME_TYPE, options.getGameType()); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_OF_WINS, Integer.toString(options.getWinsNeeded())); - PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_ROLLBACK_TURNS_ALLOWED, options.isRollbackTurnsAllowed() ? "Yes": "No"); + PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_ROLLBACK_TURNS_ALLOWED, options.isRollbackTurnsAllowed() ? "Yes" : "No"); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_OF_FREE_MULLIGANS, Integer.toString(options.getFreeMulligans())); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_DECK_FILE, deckFile); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_PLAYERS, spnNumPlayers.getValue().toString()); @@ -655,7 +661,7 @@ public class NewTableDialog extends MageDialog { StringBuilder playerTypesString = new StringBuilder(); ListIterator iterator = players.listIterator(); while (iterator.hasNext()) { - if (playerTypesString.length()>0) { + if (playerTypesString.length() > 0) { playerTypesString.append(","); } TablePlayerPanel tpp = (TablePlayerPanel) iterator.next(); diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index ff35040971..7122488094 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -802,7 +802,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { } private void btnCommandZoneActionPerformed(java.awt.event.ActionEvent evt) { - DialogManager.getManager(gameId).showEmblemsDialog(CardsViewUtil.convertCommandObject(player.getCommadObjectList()), bigCard, gameId); + DialogManager.getManager(gameId).showEmblemsDialog(CardsViewUtil.convertCommandObject(player.getCommandObjectList()), bigCard, gameId); } private void btnExileZoneActionPerformed(java.awt.event.ActionEvent evt) { diff --git a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java index 733a87391c..ee1dcbcef4 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java +++ b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java @@ -58,7 +58,6 @@ public class Plugins implements MagePlugins { pm.addPluginsFrom(new File(PLUGINS_DIRECTORY).toURI()); this.cardPlugin = new CardPluginImpl(); this.counterPlugin = pm.getPlugin(CounterPlugin.class); - //this.themePlugin = pm.getPlugin(ThemePlugin.class); this.themePlugin = new ThemePluginImpl(); logger.info("Done."); } diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 1a56c2873d..c6dbe61297 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -501,7 +501,7 @@ public class TablesPanel extends javax.swing.JPanel { // type List> typeFilterList = new ArrayList<>(); if (btnTypeMatch.isSelected()) { - typeFilterList.add(RowFilter.regexFilter("Two|Commander|Free|Tiny", TableTableModel.COLUMN_GAME_TYPE)); + typeFilterList.add(RowFilter.regexFilter("Two|Commander|Free|Tiny|Momir", TableTableModel.COLUMN_GAME_TYPE)); } if (btnTypeTourneyConstructed.isSelected()) { typeFilterList.add(RowFilter.regexFilter("Constructed", TableTableModel.COLUMN_GAME_TYPE)); @@ -537,7 +537,7 @@ public class TablesPanel extends javax.swing.JPanel { formatFilterList.add(RowFilter.regexFilter("^Limited", TableTableModel.COLUMN_DECK_TYPE)); } if (btnFormatOther.isSelected()) { - formatFilterList.add(RowFilter.regexFilter("^Constructed - Pauper|^Constructed - Extended|^Constructed - Historical|^Constructed - Super", TableTableModel.COLUMN_DECK_TYPE)); + formatFilterList.add(RowFilter.regexFilter("^Momir Basic|^Constructed - Pauper|^Constructed - Extended|^Constructed - Historical|^Constructed - Super", TableTableModel.COLUMN_DECK_TYPE)); } List> skillFilterList = new ArrayList<>(); diff --git a/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java b/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java index 9e9dd416a2..a27a48f1a3 100644 --- a/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java +++ b/Mage.Client/src/main/java/mage/client/util/audio/AudioManager.java @@ -303,7 +303,7 @@ public class AudioManager { private static void checkAndPlayClip(MageClip mageClip) { try { - if (mageClip != null) { + if (mageClip != null && mageClip.getClip() != null) { boolean playSound = false; switch (mageClip.getAudioGroup()) { case GameSounds: diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java b/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java index 7c99afe599..6dd83a1535 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java @@ -81,6 +81,7 @@ public class CardPluginImpl implements CardPlugin { @PluginLoaded public void newPlugin(CardPlugin plugin) { + log.info(plugin.toString() + " has been loaded."); } @Override diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java index 497bc1c188..b84f07cc1a 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java @@ -9,7 +9,7 @@ import org.mage.plugins.card.images.CardDownloadData; public interface CardImageSource { String generateURL(CardDownloadData card) throws Exception; - String generateTokenUrl(CardDownloadData card); + String generateTokenUrl(CardDownloadData card) throws Exception; String getSourceName(); Float getAverageSize(); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java index 68877f48eb..5b2ab1a20b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/MagicCardsImageSource.java @@ -157,7 +157,12 @@ public class MagicCardsImageSource implements CardImageSource { @Override public String generateTokenUrl(CardDownloadData card) { - String name = card.getName().replaceAll(" ", "-").replace(",", "").toLowerCase(); + String name = card.getName(); + // add type to name if it's not 0 + if (card.getType() > 0) { + name = name + " " + card.getType(); + } + name = name.replaceAll(" ", "-").replace(",", "").toLowerCase(); String set = "not-supported-set"; if (setNameTokenReplacement.containsKey(card.getSet())) { set = setNameTokenReplacement.get(card.getSet()); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java new file mode 100644 index 0000000000..fbdfb89d91 --- /dev/null +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/TokensMtgImageSource.java @@ -0,0 +1,324 @@ +/* + * 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 org.mage.plugins.card.dl.sources; + +import org.apache.log4j.Logger; +import org.mage.plugins.card.images.CardDownloadData; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * + * @author Quercitron + */ +public class TokensMtgImageSource implements CardImageSource { + + private static final Logger logger = Logger.getLogger(TokensMtgImageSource.class); + + private static CardImageSource instance = new TokensMtgImageSource(); + + public static CardImageSource getInstance() { + if (instance == null) { + instance = new TokensMtgImageSource(); + } + return instance; + } + + @Override + public String getSourceName() { + return "tokens.mtg.onl"; + } + + @Override + public Float getAverageSize() { + return 26.7f; + } + + @Override + public String generateURL(CardDownloadData card) throws Exception { + return null; + } + + private static final String[] EMBLEMS = { + "Ajani", + "Chandra", + "Dack", + "Daretti", + "Domri", + "Elspeth", + "Garruk", + "Gideon", + "Jace", + "Kiora", + "Koth", + "Liliana", + "Narset", + "Nixilis", + "Sarkhan", + "Sorin", + "Tamiyo", + "Teferi", + "Venser", + }; + + private static final Map SET_NAMES_REPLACEMENT = new HashMap() { + { + put("con", "CFX"); + put("fnmp", "FNM"); + } + }; + + @Override + public String generateTokenUrl(CardDownloadData card) throws IOException { + String name = card.getName(); + String set = card.getSet(); + int type = card.getType(); + + // handle emblems + if (name.toLowerCase().contains("emblem")) { + for (String emblem : EMBLEMS) { + if (name.toLowerCase().contains(emblem.toLowerCase())){ + name = emblem + " Emblem"; + break; + } + } + } + + // we should replace some set names + if (SET_NAMES_REPLACEMENT.containsKey(set.toLowerCase())) { + set = SET_NAMES_REPLACEMENT.get(set.toLowerCase()); + } + + // Image URL contains token number + // e.g. http://tokens.mtg.onl/tokens/ORI_010-Thopter.jpg -- token number 010 + // We don't know these numbers, but we can take them from a file + // with tokens information that can be downloaded from the site. + List tokensData = getTokensData(); + + if (tokensData.isEmpty()) { + return null; + } + + List matchedTokens = new ArrayList(); + for (TokenData token : tokensData) { + if (name.equalsIgnoreCase(token.getName()) && set.equalsIgnoreCase(token.getExpansionSetCode())) { + matchedTokens.add(token); + } + } + + if (matchedTokens.isEmpty()) { + logger.info("Could not find data for token " + name + ", set " + set + "."); + return null; + } + + TokenData tokenData; + if (type == 0) { + if (matchedTokens.size() > 1) { + logger.info("Multiple images were found for token " + name + ", set " + set + "."); + } + tokenData = matchedTokens.get(0); + } else { + if (type > matchedTokens.size()) { + logger.warn("Not enough images for token with type " + type + ", name " + name + ", set " + set + "."); + return null; + } + tokenData = matchedTokens.get(card.getType() - 1); + } + + String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_" + + tokenData.getNumber().trim() + "-" + tokenData.getName().trim()+ ".jpg"; + url = url.replace(' ', '-'); + return url; + } + + private List tokensData; + + private final Object tokensDataSync = new Object(); + + private List getTokensData() throws IOException { + if (tokensData == null) { + synchronized (tokensDataSync) { + if (tokensData == null) { + tokensData = new ArrayList(); + + // get tokens data from resource file + InputStream inputStream = null; + try { + inputStream = this.getClass().getResourceAsStream("/tokens-mtg-onl-list.csv"); + List fileTokensData = parseTokensData(inputStream); + tokensData.addAll(fileTokensData); + } catch (Exception exception) { + logger.warn("Failed to get tokens description from resource file tokens-mtg-onl-list.csv", exception); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (Exception e) { + logger.error("Input stream close failed:", e); + } + } + } + + // description on site may contain new information + // try to add it + try { + URL url = new URL("http://tokens.mtg.onl/data/SetsWithTokens.csv"); + inputStream = url.openStream(); + List siteTokensData = parseTokensData(inputStream); + + List newTokensData = new ArrayList(); + for (TokenData siteData : siteTokensData) { + boolean isNew = true; + for (TokenData fileData : tokensData) { + if (siteData.getName().equalsIgnoreCase(fileData.getName()) + && siteData.getNumber().equalsIgnoreCase(fileData.getNumber()) + && siteData.getExpansionSetCode().equalsIgnoreCase(fileData.getExpansionSetCode())) { + isNew = false; + break; + } + } + if (isNew) { + newTokensData.add(siteData); + } + } + + tokensData.addAll(newTokensData); + } catch (Exception exception) { + logger.warn("Failed to get tokens description from tokens.mtg.onl", exception); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (Exception e) { + logger.error("Input stream close failed:", e); + } + } + } + } + } + } + + return tokensData; + } + + private List parseTokensData(InputStream inputStream) throws IOException { + List tokensData = new ArrayList(); + + InputStreamReader inputReader = null; + BufferedReader reader = null; + try { + // we have to specify encoding to read special comma + inputReader = new InputStreamReader(inputStream, "Cp1252"); + reader = new BufferedReader(inputReader); + + reader.readLine(); // skip header + String line = reader.readLine(); + // states + // 0 - wait set name + // 1 - wait cards + // 2 - process cards + int state = 0; + String set = null; + while (line != null) { + if (line.trim().isEmpty()) { + if (state == 2) { + state = 0; + } + } else { + if (state == 0) { + set = line.substring(0, 3); + state = 1; + } else { + if (state == 1) { + state = 2; + } + String[] split = line.split(","); + // replace special comma for cards like 'Ashaya‚ the Awoken World' + String name = split[0].replace('‚', ','); + String number = split[1]; + TokenData token = new TokenData(name, number, set); + tokensData.add(token); + } + } + + line = reader.readLine(); + } + } finally { + if (inputReader != null) { + try { + inputReader.close(); + } catch (Exception e) { + logger.error("Input reader close failed:", e); + } + } + if (reader != null) { + try { + reader.close(); + } catch (Exception e) { + logger.error("Buffered reader close failed:", e); + } + } + } + + return tokensData; + } + + final class TokenData { + final private String name; + final private String number; + final private String expansionSetCode; + + public TokenData(String name, String number, String expansionSetCode) { + this.name = name; + this.number = number; + this.expansionSetCode = expansionSetCode; + } + + public String getName() { + return name; + } + + public String getNumber() { + return number; + } + + public String getExpansionSetCode() { + return expansionSetCode; + } + } + +} diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java index 2423f21520..fae3f0ca07 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java @@ -54,10 +54,7 @@ import net.java.truevfs.access.TFileOutputStream; import net.java.truevfs.access.TVFS; import net.java.truevfs.kernel.spec.FsSyncException; import org.apache.log4j.Logger; -import org.mage.plugins.card.dl.sources.CardImageSource; -import org.mage.plugins.card.dl.sources.MagicCardsImageSource; -import org.mage.plugins.card.dl.sources.MythicspoilerComSource; -import org.mage.plugins.card.dl.sources.WizardCardsImageSource; +import org.mage.plugins.card.dl.sources.*; import org.mage.plugins.card.properties.SettingsManager; import org.mage.plugins.card.utils.CardImageUtils; @@ -138,7 +135,16 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab p0.add(jLabel1); p0.add(Box.createVerticalStrut(5)); - ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[] { "magiccards.info", "wizards.com", "mythicspoiler.com" /*, "mtgimage.com (HQ)" , "mtgathering.ru HQ", "mtgathering.ru MQ", "mtgathering.ru LQ"*/}); + ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[] { + "magiccards.info", + "wizards.com", + "mythicspoiler.com", + "tokens.mtg.onl", + //"mtgimage.com (HQ)", + //"mtgathering.ru HQ", + //"mtgathering.ru MQ", + //"mtgathering.ru LQ", + }); jComboBox1 = new JComboBox(); cardImageSource = MagicCardsImageSource.getInstance(); @@ -159,6 +165,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab case 2: cardImageSource = MythicspoilerComSource.getInstance(); break; + case 3: + cardImageSource = TokensMtgImageSource.getInstance(); + break; } int count = DownloadPictures.this.cards.size(); float mb = (count * cardImageSource.getAverageSize()) / 1024; @@ -361,23 +370,27 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab while (line != null) { line = line.trim(); if (line.startsWith("|")) { // new format - String[] params = line.split("\\|"); - if (params.length >= 4) { + String[] params = line.split("\\|", -1); + if (params.length >= 5) { + int type = 0; + if (params[4] != null && ! params[4].isEmpty()) { + type = Integer.parseInt(params[4].trim()); + } if (params[1].toLowerCase().equals("generate") && params[2].startsWith("TOK:")) { String set = params[2].substring(4); - CardDownloadData card = new CardDownloadData(params[3], set, 0, false, 0, "", true); + CardDownloadData card = new CardDownloadData(params[3], set, 0, false, type, "", true); list.add(card); } else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM:")) { String set = params[2].substring(7); - CardDownloadData card = new CardDownloadData("Emblem " + params[3], set, 0, false,0, "", true); + CardDownloadData card = new CardDownloadData("Emblem " + params[3], set, 0, false, type, "", true); list.add(card); } else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM-:")) { String set = params[2].substring(8); - CardDownloadData card = new CardDownloadData(params[3] + " Emblem", set, 0, false, 0, "", true); + CardDownloadData card = new CardDownloadData(params[3] + " Emblem", set, 0, false, type, "", true); list.add(card); } else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM!:")) { String set = params[2].substring(8); - CardDownloadData card = new CardDownloadData(params[3], set, 0, false, 0, "", true); + CardDownloadData card = new CardDownloadData(params[3], set, 0, false, type, "", true); list.add(card); } } else { diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index 3b5f1bafbe..0b57a3fd92 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -1,531 +1,531 @@ -#Generate|TOK:C15|Angel| -#Generate|TOK:C15|Bear| -#Generate|TOK:C15|Beast| -#Generate|TOK:C15|Cat| -#Generate|TOK:C15|Dragon| -#Generate|TOK:C15|Drake| -#Generate|TOK:C15|Elemental Shaman| -#Generate|TOK:C15|Elemental| -#Generate|TOK:C15|Elephant| -#Generate|TOK:C15|Frog Lizard| -#Generate|TOK:C15|Germ| -#Generate|TOK:C15|Gold| -#Generate|TOK:C15|Knight 1| -#Generate|TOK:C15|Knight 2| -#Generate|TOK:C15|Lightning Rager| -#Generate|TOK:C15|Saproling| -#Generate|TOK:C15|Shapeshifter| -#Generate|TOK:C15|Snake 1| -#Generate|TOK:C15|Snake 2| -#Generate|TOK:C15|Spider| -#Generate|TOK:C15|Spirit 1| -#Generate|TOK:C15|Spirit 2| -#Generate|TOK:C15|Wolf| -#Generate|TOK:C15|Zombie| - -Generate|TOK:BFZ|Dragon| -Generate|TOK:BFZ|Eldrazi| -Generate|TOK:BFZ|Eldrazi Scion 1| -Generate|TOK:BFZ|Eldrazi Scion 2| -Generate|TOK:BFZ|Eldrazi Scion 3| -Generate|TOK:BFZ|Elemental 1| -Generate|TOK:BFZ|Elemental 2| -Generate|TOK:BFZ|Knight Ally| -Generate|TOK:BFZ|Kor Ally| -Generate|TOK:BFZ|Octopus| -Generate|TOK:BFZ|Plant| -|Generate|EMBLEM!:BFZ|Emblem Gideon, Ally of Zendikar| -|Generate|EMBLEM!:BFZ|Emblem Kiora, Master of the Depths| -|Generate|EMBLEM!:BFZ|Emblem Ob Nixilis Reignited| - -Generate|TOK:DDP|Eldrazi Spawn 1| -Generate|TOK:DDP|Eldrazi Spawn 2| -Generate|TOK:DDP|Eldrazi Spawn 3| -Generate|TOK:DDP|Hellion| -Generate|TOK:DDP|Plant| - -Generate|TOK:MM2|Eldrazi Spawn 1| -Generate|TOK:MM2|Eldrazi Spawn 2| -Generate|TOK:MM2|Eldrazi Spawn 3| -Generate|TOK:MM2|Elephant| -Generate|TOK:MM2|Faerie Rogue| -Generate|TOK:MM2|Germ| -Generate|TOK:MM2|Golem| -Generate|TOK:MM2|Insect| -Generate|TOK:MM2|Myr| -Generate|TOK:MM2|Saproling| -Generate|TOK:MM2|Snake| -Generate|TOK:MM2|Soldier| -Generate|TOK:MM2|Spirit| -Generate|TOK:MM2|Thrull| -Generate|TOK:MM2|Wolf| -Generate|TOK:MM2|Wurm| - -#Generate|TOK:TPR|Goblin| -#Generate|TOK:TPR|Pegasus| -#Generate|TOK:TPR|Rat| -#Generate|TOK:TPR|Reflection| -#Generate|TOK:TPR|Saproling| -#Generate|TOK:TPR|Sliver| -#Generate|TOK:TPR|Spike| -#Generate|TOK:TPR|Spirit| -#Generate|TOK:TPR|Thopter| -#Generate|TOK:TPR|Zombie| - -|Generate|TOK:ORI|Ashaya, the Awoken World| -|Generate|TOK:ORI|Angel| -|Generate|TOK:ORI|Demon| -|Generate|TOK:ORI|Elemental| -|Generate|TOK:ORI|Elf Warrior| -|Generate|TOK:ORI|Goblin| -|Generate|TOK:ORI|Knight| -|Generate|TOK:ORI|Soldier| -|Generate|TOK:ORI|Thopter 1| -|Generate|TOK:ORI|Thopter 2| -|Generate|TOK:ORI|Zombie| -|Generate|EMBLEM!:ORI|Emblem Chandra, Roaring Flame| -|Generate|EMBLEM!:ORI|Emblem Jace, Telepath Unbound| -|Generate|EMBLEM!:ORI|Emblem Liliana, Defiant Necromancer| - -#|Generate|TOK:PTC|Angel| -#|Generate|TOK:PTC|Avatar| -#|Generate|TOK:PTC|Beast| -#|Generate|TOK:PTC|Dragon| -#|Generate|TOK:PTC|Elemental| -#|Generate|TOK:PTC|Harpy| -#|Generate|TOK:PTC|Hippo| -#|Generate|TOK:PTC|Soldier| -#|Generate|TOK:PTC|Wolf| -#|Generate|TOK:PTC|Wurm| - -|Generate|TOK:DTK|Djinn Monk| -|Generate|TOK:DTK|Dragon| -|Generate|TOK:DTK|Goblin| -|Generate|TOK:DTK|Morph| -|Generate|TOK:DTK|Warrior| -|Generate|TOK:DTK|Zombie| -|Generate|TOK:DTK|Zombie Horror| -|Generate|EMBLEM!:DTK|Emblem Narset| - -|Generate|TOK:FRF|Monk| -|Generate|TOK:FRF|Spirit| -|Generate|TOK:FRF|Warrior| -|Generate|TOK:FRF|Manifest| - -#|Generate|TOK:GRC|Bird| -#|Generate|TOK:GRC|Golem| -#|Generate|TOK:GRC|Human| -#|Generate|TOK:GRC|Myr| -#|Generate|TOK:GRC|Saproling| - -#|Generate|TOK:MBP:Beast| -#|Generate|TOK:MBP|Cat| -#|Generate|TOK:MBP|Dragon| -#|Generate|TOK:MBP|Elephant| -#|Generate|TOK:MBP|Goblin| -#|Generate|TOK:MBP|Zombie| - -#|Generate|TOK:MLP|Thopter| - -#|Generate|TOK:WMCQ|Angel| - -#|Generate|TOK:GPX|Elephant| -#|Generate|TOK:GPX|Germ| - -#|Generate|TOK:JR|Angel| -#|Generate|TOK:JR|Faerie Rogue| -#|Generate|TOK:JR|Soldier| -#|Generate|TOK:JR|Squirrel| - -#|Generate|TOK:MGDC|Centaur| -#|Generate|TOK:MGDC|Knight| -#|Generate|TOK:MGDC|Rhino| -#|Generate|TOK:MGDC|Sliver| - -#|Generate|TOK:FNMP|Centaur| -|Generate|TOK:FNMP|Human| -|Generate|TOK:FNMP|Wolf| -#|Generate|TOK:FNMP|Wurm| - -|Generate|TOK:C14|Angel| -|Generate|TOK:C14|Cat| -|Generate|TOK:C14|Goat| -|Generate|TOK:C14|Kor Soldier| -|Generate|TOK:C14|Pegasus| -|Generate|TOK:C14|Soldier| -|Generate|TOK:C14|Spirit| -|Generate|TOK:C14|Fish| -|Generate|TOK:C14|Kraken| -|Generate|TOK:C14|Whale| -|Generate|TOK:C14|Zombie 1| -|Generate|TOK:C14|Demon 1| -|Generate|TOK:C14|Demon 2| -|Generate|TOK:C14|Germ| -|Generate|TOK:C14|Horror| -|Generate|TOK:C14|Zombie 2| -|Generate|TOK:C14|Goblin| -|Generate|TOK:C14|Ape| -|Generate|TOK:C14|Beast 1| -|Generate|TOK:C14|Beast 2| -|Generate|TOK:C14|Elemental| -|Generate|TOK:C14|Elephant| -|Generate|TOK:C14|Elf Druid| -|Generate|TOK:C14|Elf Warrior| -|Generate|TOK:C14|Treefolk| -|Generate|TOK:C14|Wolf| -|Generate|TOK:C14|Gargoyle| -|Generate|TOK:C14|Myr| -|Generate|TOK:C14|Pentavite| -|Generate|TOK:C14|Stoneforged Blade| -|Generate|TOK:C14|Tuktuk the Returned| -|Generate|TOK:C14|Wurm 1| -|Generate|TOK:C14|Wurm 2| -|Generate|EMBLEM!:C14|Emblem Teferi -|Generate|EMBLEM!:C14|Emblem Nixilis -|Generate|EMBLEM!:C14|Emblem Daretti - - -|Generate|TOK:DDN|Goblin| - -|Generate|TOK:KTK|Bear| -|Generate|TOK:KTK|Bird| -|Generate|TOK:KTK|Goblin| -|Generate|TOK:KTK|Morph| -|Generate|TOK:KTK|Snake| -|Generate|TOK:KTK|Spirit Warrior| -|Generate|TOK:KTK|Spirit| -|Generate|TOK:KTK|Vampire| -|Generate|TOK:KTK|Warrior 1| -|Generate|TOK:KTK|Warrior 2| -|Generate|TOK:KTK|Zombie| -|Generate|EMBLEM!:KTK|Emblem Sarkhan| -|Generate|EMBLEM!:KTK|Emblem Sorin| - -|Generate|TOK:M15|Sliver| -|Generate|TOK:M15|Soldier| -|Generate|TOK:M15|Zombie| -|Generate|TOK:M15|Goblin| -|Generate|TOK:M15|Beast 1| -|Generate|TOK:M15|Insect| -|Generate|TOK:M15|Spirit| -|Generate|TOK:M15|Squid| -|Generate|TOK:M15|Beast 2| -|Generate|TOK:M15|Dragon| -|Generate|TOK:M15|Treefolk Warrior| -|Generate|TOK:M15|Land Mine| -|Generate|EMBLEM!:M15|Emblem Ajani| -|Generate|EMBLEM!:M15|Emblem Garruk| - -|Generate|TOK:CNS|Zombie| -|Generate|TOK:CNS|Spirit| -|Generate|TOK:CNS|Demon| -|Generate|TOK:CNS|Ogre| -|Generate|TOK:CNS|Elephant| -|Generate|TOK:CNS|Squirrel| -|Generate|TOK:CNS|Wolf| -|Generate|TOK:CNS|Construct| -|Generate|EMBLEM!:CNS|Emblem Dack Fayden| - -|Generate|TOK:JOU|Sphinx| -|Generate|TOK:JOU|Zombie| -|Generate|TOK:JOU|Minotaur| -|Generate|TOK:JOU|Hydra| -|Generate|TOK:JOU|Spider| -|Generate|TOK:JOU|Snake| - -|Generate|TOK:DDM|Assassin| - -|Generate|TOK:BNG|Bird 1| -|Generate|TOK:BNG|Cat Soldier| -|Generate|TOK:BNG|Soldier| -|Generate|TOK:BNG|Bird 2| -|Generate|TOK:BNG|Kraken| -|Generate|TOK:BNG|Zombie| -|Generate|TOK:BNG|Elemental| -|Generate|TOK:BNG|Centaur| -|Generate|TOK:BNG|Wolf| -|Generate|TOK:BNG|Gold| -|Generate|EMBLEM:BNG|Kiora, the Crashing Wave| - -|Generate|TOK:M14|Sliver| -|Generate|TOK:M14|Angel| -|Generate|TOK:M14|Cat| -|Generate|TOK:M14|Goat| -|Generate|TOK:M14|Zombie| -|Generate|TOK:M14|Dragon| -|Generate|TOK:M14|Elemental 1| -|Generate|TOK:M14|Elemental 2| -|Generate|TOK:M14|Beast| -|Generate|TOK:M14|Saproling| -|Generate|TOK:M14|Wolf| -|Generate|EMBLEM:M14|Liliana of the Dark Realms| -|Generate|EMBLEM:M14|Garruk, Caller of Beasts| - -|Generate|TOK:THS|Cleric| -|Generate|TOK:THS|Soldier 1| -|Generate|TOK:THS|Soldier 2| -|Generate|TOK:THS|Bird| -|Generate|TOK:THS|Elemental| -|Generate|TOK:THS|Harpy| -|Generate|TOK:THS|Soldier 3| -|Generate|TOK:THS|Boar| -|Generate|TOK:THS|Satyr| -|Generate|TOK:THS|Golem| -|Generate|EMBLEM-:THS|Elspeth, Suns Champion| - -|Generate|TOK:DDL|Griffin| -|Generate|TOK:DDL|Beast| - -|Generate|TOK:MMA|Giant Warrior| -|Generate|TOK:MMA|Kithkin Soldier| -|Generate|TOK:MMA|Soldier| -|Generate|TOK:MMA|Illusion| -|Generate|TOK:MMA|Bat| -|Generate|TOK:MMA|Goblin Rogue| -|Generate|TOK:MMA|Spider| -|Generate|TOK:MMA|Zombie| -|Generate|TOK:MMA|Dragon| -|Generate|TOK:MMA|Goblin| -|Generate|TOK:MMA|Elemental| -|Generate|TOK:MMA|Saproling| -|Generate|TOK:MMA|Treefolk Shaman| -|Generate|TOK:MMA|Faerie Rogue| -|Generate|TOK:MMA|Worm| -|Generate|EMBLEM:MMA|Elspeth, Knight Errant| - -|Generate|TOK:DGM|Elemental| - -|Generate|TOK:DDK|Spirit| - -|Generate|TOK:GTC|Angel| -|Generate|TOK:GTC|Rat| -|Generate|TOK:GTC|Frog Lizard| -|Generate|TOK:GTC|Cleric| -|Generate|TOK:GTC|Horror| -|Generate|TOK:GTC|Soldier| -|Generate|TOK:GTC|Spirit| -|Generate|EMBLEM:GTC|Domri Rade| - -|Generate|TOK:RTR|Bird| -|Generate|TOK:RTR|Knight| -|Generate|TOK:RTR|Soldier| -|Generate|TOK:RTR|Assassin| -|Generate|TOK:RTR|Dragon| -|Generate|TOK:RTR|Goblin| -|Generate|TOK:RTR|Centaur 1| -|Generate|TOK:RTR|Ooze| -|Generate|TOK:RTR|Rhino| -|Generate|TOK:RTR|Saproling| -|Generate|TOK:RTR|Wurm| -|Generate|TOK:RTR|Elemental| -|Generate|TOK:RTR|Centaur 2| - -|Generate|EMBLEM-:M13|Liliana of the Dark Realms| - -|Generate|TOK:DDJ|Saproling| - -|Generate|TOK:M13|Cat| -|Generate|TOK:M13|Goat| -|Generate|TOK:M13|Soldier| -|Generate|TOK:M13|Drake| -|Generate|TOK:M13|Zombie| -|Generate|TOK:M13|Goblin| -|Generate|TOK:M13|Hellion| -|Generate|TOK:M13|Beast| -|Generate|TOK:M13|Saproling| -|Generate|TOK:M13|Wurm| - -|Generate|EMBLEM:AVR|Tamiyo, the Moon Sage| - -|Generate|TOK:AVR|Angel| -|Generate|TOK:AVR|Human 1| -|Generate|TOK:AVR|Spirit 1| -|Generate|TOK:AVR|Spirit 2| -|Generate|TOK:AVR|Demon| -|Generate|TOK:AVR|Zombie| -|Generate|TOK:AVR|Human 2| - -|Generate|EMBLEM:DDI|Venser, the Sojourner| -|Generate|EMBLEM:DDI|Koth of the Hammer| - -|Generate|TOK:DKA|Human| -|Generate|TOK:DKA|Vampire| - -|Generate|TOK:ISD|Angel| -|Generate|TOK:ISD|Spirit| -|Generate|TOK:ISD|Homunculus| -|Generate|TOK:ISD|Demon| -|Generate|TOK:ISD|Vampire| -|Generate|TOK:ISD|Wolf 1| -|Generate|TOK:ISD|Zombie 1| -|Generate|TOK:ISD|Zombie 2| -|Generate|TOK:ISD|Zombie 3| -|Generate|TOK:ISD|Ooze| -|Generate|TOK:ISD|Spider| -|Generate|TOK:ISD|Wolf 2| - -|Generate|TOK:DDH|Griffin| -|Generate|TOK:DDH|Saproling| - -|Generate|TOK:M12|Bird| -|Generate|TOK:M12|Soldier| -|Generate|TOK:M12|Zombie| -|Generate|TOK:M12|Beast| -|Generate|TOK:M12|Saproling| -|Generate|TOK:M12|Wurm| -|Generate|TOK:M12|Pentavite| - -|Generate|TOK:NPH|Beast| -|Generate|TOK:NPH|Beast| -|Generate|TOK:NPH|Goblin| -|Generate|TOK:NPH|Golem| -|Generate|TOK:NPH|Myr| - -|Generate|TOK:DDG|Goblin| - -|Generate|TOK:MBS|Germ| -|Generate|TOK:MBS|Zombie| -|Generate|TOK:MBS|Golem| -|Generate|TOK:MBS|Horror| -|Generate|TOK:MBS|Thopter| -|Generate|TOK:MBS|Zombie| -|Generate|TOK:MBS|Zombie| - -|Generate|TOK:DDF|Soldier| - -|Generate|TOK:SOM|Cat| -|Generate|TOK:SOM|Soldier| -|Generate|TOK:SOM|Goblin| -|Generate|TOK:SOM|Insect| -|Generate|TOK:SOM|Wolf| -|Generate|TOK:SOM|Golem| -|Generate|TOK:SOM|Myr| -|Generate|TOK:SOM|Wurm 1| -|Generate|TOK:SOM|Wurm 2| - -|Generate|TOK:M11|Avatar| -|Generate|TOK:M11|Bird| -|Generate|TOK:M11|Zombie| -|Generate|TOK:M11|Beast| -|Generate|TOK:M11|Ooze 1| -|Generate|TOK:M11|Ooze 2| - -|Generate|TOK:ROE|Eldrazi Spawn 1| -|Generate|TOK:ROE|Eldrazi Spawn 2| -|Generate|TOK:ROE|Eldrazi Spawn 3| -|Generate|TOK:ROE|Elemental| -|Generate|TOK:ROE|Ooze| -|Generate|TOK:ROE|Tuktuk the Returned| - -|Generate|TOK:DDE|Saproling| -|Generate|TOK:DDE|Hornet| -|Generate|TOK:DDE|Minion| - -|Generate|TOK:WWK|Soldier Ally| -|Generate|TOK:WWK|Dragon| -|Generate|TOK:WWK|Ogre| -|Generate|TOK:WWK|Elephant| -|Generate|TOK:WWK|Plant| -|Generate|TOK:WWK|Construct| - -|Generate|TOK:ZEN|Angel| -|Generate|TOK:ZEN|Bird| -|Generate|TOK:ZEN|Kor Soldier| -|Generate|TOK:ZEN|Illusion| -|Generate|TOK:ZEN|Merfolk| -|Generate|TOK:ZEN|Vampire| -|Generate|TOK:ZEN|Zombie Giant| -|Generate|TOK:ZEN|Elemental| -|Generate|TOK:ZEN|Beast| -|Generate|TOK:ZEN|Snake| -|Generate|TOK:ZEN|Wolf| - -|Generate|TOK:M10|Avatar| -|Generate|TOK:M10|Beast| -|Generate|TOK:M10|Gargoyle| -|Generate|TOK:M10|Goblin| -|Generate|TOK:M10|Insect| -|Generate|TOK:M10|Soldier| -|Generate|TOK:M10|Wolf| -|Generate|TOK:M10|Zombie| - -|Generate|TOK:DDD|Beast 1| -|Generate|TOK:DDD|Beast 2| -|Generate|TOK:DDD|Elephant| - -|Generate|TOK:ARB|Bird Soldier| -|Generate|TOK:ARB|Lizard| -|Generate|TOK:ARB|Dragon| -|Generate|TOK:ARB|Zombie Wizard| - -|Generate|TOK:DDC|Spirit| -|Generate|TOK:DDC|Demon| -|Generate|TOK:DDC|Thrull| - -|Generate|TOK:CON|Angel| -|Generate|TOK:CON|Elemental| - -|Generate|TOK:DD2|Elemental Shaman| - -|Generate|TOK:ALA|Soldier| -|Generate|TOK:ALA|Beast| -|Generate|TOK:ALA|Homunculus| -|Generate|TOK:ALA|Thopter| -|Generate|TOK:ALA|Skeleton| -|Generate|TOK:ALA|Zombie| -|Generate|TOK:ALA|Dragon| -|Generate|TOK:ALA|Goblin| -|Generate|TOK:ALA|Ooze| -|Generate|TOK:ALA|Saproling| - -|Generate|TOK:EVE|Goat| -|Generate|TOK:EVE|Bird| -|Generate|TOK:EVE|Beast| -|Generate|TOK:EVE|Spirit| -|Generate|TOK:EVE|Elemental| -|Generate|TOK:EVE|Worm| -|Generate|TOK:EVE|Goblin Soldier| - -|Generate|TOK:SHM|Kithkin Soldier| -|Generate|TOK:SHM|Spirit| -|Generate|TOK:SHM|Rat| -|Generate|TOK:SHM|Elemental 1| -|Generate|TOK:SHM|Elf Warrior 1| -|Generate|TOK:SHM|Spider| -|Generate|TOK:SHM|Wolf| -|Generate|TOK:SHM|Faerie Rogue| -|Generate|TOK:SHM|Elemental 2| -|Generate|TOK:SHM|Giant Warrior| -|Generate|TOK:SHM|Goblin Warrior| -|Generate|TOK:SHM|Elf Warrior 2| - -|Generate|TOK:EVG|Elemental| -|Generate|TOK:EVG|Elf Warrior| -|Generate|TOK:EVG|Goblin| - -|Generate|TOK:MOR|Giant Warrior| -|Generate|TOK:MOR|Faerie Rogue| -|Generate|TOK:MOR|Treefolk Shaman| - -|Generate|TOK:LRW|Avatar| -|Generate|TOK:LRW|Elemental 1| -|Generate|TOK:LRW|Kithkin Soldier| -|Generate|TOK:LRW|Merfolk Wizard| -|Generate|TOK:LRW|Goblin Rogue| -|Generate|TOK:LRW|Elemental Shaman| -|Generate|TOK:LRW|Beast| -|Generate|TOK:LRW|Elemental 2| -|Generate|TOK:LRW|Elf Warrior| -|Generate|TOK:LRW|Wolf| -|Generate|TOK:LRW|Shapeshifter| - -|Generate|TOK:10E|Soldier| -|Generate|TOK:10E|Zombie| -|Generate|TOK:10E|Dragon| -|Generate|TOK:10E|Goblin| -|Generate|TOK:10E|Saproling| -|Generate|TOK:10E|Wasp| - -|Generate|TOK:CSP|Marit Lage| - -#|Generate|TOK:CHK|Spirit| \ No newline at end of file +|Generate|TOK:C15|Angel|| +|Generate|TOK:C15|Bear|| +|Generate|TOK:C15|Beast|| +|Generate|TOK:C15|Cat|| +|Generate|TOK:C15|Dragon|| +|Generate|TOK:C15|Drake|| +|Generate|TOK:C15|Elemental Shaman|| +|Generate|TOK:C15|Elemental|| +|Generate|TOK:C15|Elephant|| +|Generate|TOK:C15|Frog Lizard|| +|Generate|TOK:C15|Germ|| +|Generate|TOK:C15|Gold|| +|Generate|TOK:C15|Knight|1| +|Generate|TOK:C15|Knight|2| +|Generate|TOK:C15|Lightning Rager|| +|Generate|TOK:C15|Saproling|| +|Generate|TOK:C15|Shapeshifter|| +|Generate|TOK:C15|Snake|1| +|Generate|TOK:C15|Snake|2| +|Generate|TOK:C15|Spider|| +|Generate|TOK:C15|Spirit|1| +|Generate|TOK:C15|Spirit|2| +|Generate|TOK:C15|Wolf|| +|Generate|TOK:C15|Zombie|| + +|Generate|TOK:BFZ|Dragon|| +|Generate|TOK:BFZ|Eldrazi|| +|Generate|TOK:BFZ|Eldrazi Scion|1| +|Generate|TOK:BFZ|Eldrazi Scion|2| +|Generate|TOK:BFZ|Eldrazi Scion|3| +|Generate|TOK:BFZ|Elemental|1| +|Generate|TOK:BFZ|Elemental|2| +|Generate|TOK:BFZ|Knight Ally|| +|Generate|TOK:BFZ|Kor Ally|| +|Generate|TOK:BFZ|Octopus|| +|Generate|TOK:BFZ|Plant|| +|Generate|EMBLEM!:BFZ|Emblem Gideon, Ally of Zendikar|| +|Generate|EMBLEM!:BFZ|Emblem Kiora, Master of the Depths|| +|Generate|EMBLEM!:BFZ|Emblem Ob Nixilis Reignited|| + +|Generate|TOK:DDP|Eldrazi Spawn|1| +|Generate|TOK:DDP|Eldrazi Spawn|2| +|Generate|TOK:DDP|Eldrazi Spawn|3| +|Generate|TOK:DDP|Hellion|| +|Generate|TOK:DDP|Plant|| + +|Generate|TOK:MM2|Eldrazi Spawn|1| +|Generate|TOK:MM2|Eldrazi Spawn|2| +|Generate|TOK:MM2|Eldrazi Spawn|3| +|Generate|TOK:MM2|Elephant|| +|Generate|TOK:MM2|Faerie Rogue|| +|Generate|TOK:MM2|Germ|| +|Generate|TOK:MM2|Golem|| +|Generate|TOK:MM2|Insect|| +|Generate|TOK:MM2|Myr|| +|Generate|TOK:MM2|Saproling|| +|Generate|TOK:MM2|Snake|| +|Generate|TOK:MM2|Soldier|| +|Generate|TOK:MM2|Spirit|| +|Generate|TOK:MM2|Thrull|| +|Generate|TOK:MM2|Wolf|| +|Generate|TOK:MM2|Worm|| + +#Generate|TOK:TPR|Goblin|| +#Generate|TOK:TPR|Pegasus|| +#Generate|TOK:TPR|Rat|| +#Generate|TOK:TPR|Reflection|| +#Generate|TOK:TPR|Saproling|| +#Generate|TOK:TPR|Sliver|| +#Generate|TOK:TPR|Spike|| +#Generate|TOK:TPR|Spirit|| +#Generate|TOK:TPR|Thopter|| +#Generate|TOK:TPR|Zombie|| + +|Generate|TOK:ORI|Ashaya, the Awoken World|| +|Generate|TOK:ORI|Angel|| +|Generate|TOK:ORI|Demon|| +|Generate|TOK:ORI|Elemental|| +|Generate|TOK:ORI|Elf Warrior|| +|Generate|TOK:ORI|Goblin|| +|Generate|TOK:ORI|Knight|| +|Generate|TOK:ORI|Soldier|| +|Generate|TOK:ORI|Thopter|1| +|Generate|TOK:ORI|Thopter|2| +|Generate|TOK:ORI|Zombie|| +|Generate|EMBLEM!:ORI|Emblem Chandra, Roaring Flame|| +|Generate|EMBLEM!:ORI|Emblem Jace, Telepath Unbound|| +|Generate|EMBLEM!:ORI|Emblem Liliana, Defiant Necromancer|| + +#|Generate|TOK:PTC|Angel|| +#|Generate|TOK:PTC|Avatar|| +#|Generate|TOK:PTC|Beast|| +#|Generate|TOK:PTC|Dragon|| +#|Generate|TOK:PTC|Elemental|| +#|Generate|TOK:PTC|Harpy|| +#|Generate|TOK:PTC|Hippo|| +#|Generate|TOK:PTC|Soldier|| +#|Generate|TOK:PTC|Wolf|| +#|Generate|TOK:PTC|Wurm|| + +|Generate|TOK:DTK|Djinn Monk|| +|Generate|TOK:DTK|Dragon|| +|Generate|TOK:DTK|Goblin|| +|Generate|TOK:DTK|Morph|| +|Generate|TOK:DTK|Warrior|| +|Generate|TOK:DTK|Zombie|| +|Generate|TOK:DTK|Zombie Horror|| +|Generate|EMBLEM!:DTK|Emblem Narset|| + +|Generate|TOK:FRF|Monk|| +|Generate|TOK:FRF|Spirit|| +|Generate|TOK:FRF|Warrior|| +|Generate|TOK:FRF|Manifest|| + +#|Generate|TOK:GRC|Bird|| +#|Generate|TOK:GRC|Golem|| +#|Generate|TOK:GRC|Human|| +#|Generate|TOK:GRC|Myr|| +#|Generate|TOK:GRC|Saproling|| + +#|Generate|TOK:MBP:Beast|| +#|Generate|TOK:MBP|Cat|| +#|Generate|TOK:MBP|Dragon|| +#|Generate|TOK:MBP|Elephant|| +#|Generate|TOK:MBP|Goblin|| +#|Generate|TOK:MBP|Zombie|| + +#|Generate|TOK:MLP|Thopter|| + +#|Generate|TOK:WMCQ|Angel|| + +#|Generate|TOK:GPX|Elephant|| +#|Generate|TOK:GPX|Germ|| + +#|Generate|TOK:JR|Angel|| +#|Generate|TOK:JR|Faerie Rogue|| +#|Generate|TOK:JR|Soldier|| +#|Generate|TOK:JR|Squirrel|| + +#|Generate|TOK:MGDC|Centaur|| +#|Generate|TOK:MGDC|Knight|| +#|Generate|TOK:MGDC|Rhino|| +#|Generate|TOK:MGDC|Sliver|| + +#|Generate|TOK:FNMP|Centaur|| +|Generate|TOK:FNMP|Human|| +|Generate|TOK:FNMP|Wolf|| +#|Generate|TOK:FNMP|Wurm|| + +|Generate|TOK:C14|Angel|| +|Generate|TOK:C14|Cat|| +|Generate|TOK:C14|Goat|| +|Generate|TOK:C14|Kor Soldier|| +|Generate|TOK:C14|Pegasus|| +|Generate|TOK:C14|Soldier|| +|Generate|TOK:C14|Spirit|| +|Generate|TOK:C14|Fish|| +|Generate|TOK:C14|Kraken|| +|Generate|TOK:C14|Whale|| +|Generate|TOK:C14|Zombie|1| +|Generate|TOK:C14|Demon|1| +|Generate|TOK:C14|Demon|2| +|Generate|TOK:C14|Germ|| +|Generate|TOK:C14|Horror|| +|Generate|TOK:C14|Zombie|2| +|Generate|TOK:C14|Goblin|| +|Generate|TOK:C14|Ape|| +|Generate|TOK:C14|Beast|1| +|Generate|TOK:C14|Beast|2| +|Generate|TOK:C14|Elemental|| +|Generate|TOK:C14|Elephant|| +|Generate|TOK:C14|Elf Druid|| +|Generate|TOK:C14|Elf Warrior|| +|Generate|TOK:C14|Treefolk|| +|Generate|TOK:C14|Wolf|| +|Generate|TOK:C14|Gargoyle|| +|Generate|TOK:C14|Myr|| +|Generate|TOK:C14|Pentavite|| +|Generate|TOK:C14|Stoneforged Blade|| +|Generate|TOK:C14|Tuktuk the Returned|| +|Generate|TOK:C14|Wurm|1| +|Generate|TOK:C14|Wurm|2| +|Generate|EMBLEM!:C14|Emblem Teferi| +|Generate|EMBLEM!:C14|Emblem Nixilis| +|Generate|EMBLEM!:C14|Emblem Daretti| + + +|Generate|TOK:DDN|Goblin|| + +|Generate|TOK:KTK|Bear|| +|Generate|TOK:KTK|Bird|| +|Generate|TOK:KTK|Goblin|| +|Generate|TOK:KTK|Morph|| +|Generate|TOK:KTK|Snake|| +|Generate|TOK:KTK|Spirit Warrior|| +|Generate|TOK:KTK|Spirit|| +|Generate|TOK:KTK|Vampire|| +|Generate|TOK:KTK|Warrior|1| +|Generate|TOK:KTK|Warrior|2| +|Generate|TOK:KTK|Zombie|| +|Generate|EMBLEM!:KTK|Emblem Sarkhan|| +|Generate|EMBLEM!:KTK|Emblem Sorin|| + +|Generate|TOK:M15|Sliver|| +|Generate|TOK:M15|Soldier|| +|Generate|TOK:M15|Zombie|| +|Generate|TOK:M15|Goblin|| +|Generate|TOK:M15|Beast|1| +|Generate|TOK:M15|Insect|| +|Generate|TOK:M15|Spirit|| +|Generate|TOK:M15|Squid|| +|Generate|TOK:M15|Beast|2| +|Generate|TOK:M15|Dragon|| +|Generate|TOK:M15|Treefolk Warrior|| +|Generate|TOK:M15|Land Mine|| +|Generate|EMBLEM!:M15|Emblem Ajani|| +|Generate|EMBLEM!:M15|Emblem Garruk|| + +|Generate|TOK:CNS|Zombie|| +|Generate|TOK:CNS|Spirit|| +|Generate|TOK:CNS|Demon|| +|Generate|TOK:CNS|Ogre|| +|Generate|TOK:CNS|Elephant|| +|Generate|TOK:CNS|Squirrel|| +|Generate|TOK:CNS|Wolf|| +|Generate|TOK:CNS|Construct|| +|Generate|EMBLEM!:CNS|Emblem Dack Fayden|| + +|Generate|TOK:JOU|Sphinx|| +|Generate|TOK:JOU|Zombie|| +|Generate|TOK:JOU|Minotaur|| +|Generate|TOK:JOU|Hydra|| +|Generate|TOK:JOU|Spider|| +|Generate|TOK:JOU|Snake|| + +|Generate|TOK:DDM|Assassin|| + +|Generate|TOK:BNG|Bird|1| +|Generate|TOK:BNG|Cat Soldier|| +|Generate|TOK:BNG|Soldier|| +|Generate|TOK:BNG|Bird|2| +|Generate|TOK:BNG|Kraken|| +|Generate|TOK:BNG|Zombie|| +|Generate|TOK:BNG|Elemental|| +|Generate|TOK:BNG|Centaur|| +|Generate|TOK:BNG|Wolf|| +|Generate|TOK:BNG|Gold|| +|Generate|EMBLEM:BNG|Kiora, the Crashing Wave|| + +|Generate|TOK:M14|Sliver|| +|Generate|TOK:M14|Angel|| +|Generate|TOK:M14|Cat|| +|Generate|TOK:M14|Goat|| +|Generate|TOK:M14|Zombie|| +|Generate|TOK:M14|Dragon|| +|Generate|TOK:M14|Elemental|1| +|Generate|TOK:M14|Elemental|2| +|Generate|TOK:M14|Beast|| +|Generate|TOK:M14|Saproling|| +|Generate|TOK:M14|Wolf|| +|Generate|EMBLEM:M14|Liliana of the Dark Realms|| +|Generate|EMBLEM:M14|Garruk, Caller of Beasts|| + +|Generate|TOK:THS|Cleric|| +|Generate|TOK:THS|Soldier|1| +|Generate|TOK:THS|Soldier|2| +|Generate|TOK:THS|Bird|| +|Generate|TOK:THS|Elemental|| +|Generate|TOK:THS|Harpy|| +|Generate|TOK:THS|Soldier|3| +|Generate|TOK:THS|Boar|| +|Generate|TOK:THS|Satyr|| +|Generate|TOK:THS|Golem|| +|Generate|EMBLEM-:THS|Elspeth, Suns Champion|| + +|Generate|TOK:DDL|Griffin|| +|Generate|TOK:DDL|Beast|| + +|Generate|TOK:MMA|Giant Warrior|| +|Generate|TOK:MMA|Kithkin Soldier|| +|Generate|TOK:MMA|Soldier|| +|Generate|TOK:MMA|Illusion|| +|Generate|TOK:MMA|Bat|| +|Generate|TOK:MMA|Goblin Rogue|| +|Generate|TOK:MMA|Spider|| +|Generate|TOK:MMA|Zombie|| +|Generate|TOK:MMA|Dragon|| +|Generate|TOK:MMA|Goblin|| +|Generate|TOK:MMA|Elemental|| +|Generate|TOK:MMA|Saproling|| +|Generate|TOK:MMA|Treefolk Shaman|| +|Generate|TOK:MMA|Faerie Rogue|| +|Generate|TOK:MMA|Worm|| +|Generate|EMBLEM:MMA|Elspeth, Knight Errant|| + +|Generate|TOK:DGM|Elemental|| + +|Generate|TOK:DDK|Spirit|| + +|Generate|TOK:GTC|Angel|| +|Generate|TOK:GTC|Rat|| +|Generate|TOK:GTC|Frog Lizard|| +|Generate|TOK:GTC|Cleric|| +|Generate|TOK:GTC|Horror|| +|Generate|TOK:GTC|Soldier|| +|Generate|TOK:GTC|Spirit|| +|Generate|EMBLEM:GTC|Domri Rade|| + +|Generate|TOK:RTR|Bird|| +|Generate|TOK:RTR|Knight|| +|Generate|TOK:RTR|Soldier|| +|Generate|TOK:RTR|Assassin|| +|Generate|TOK:RTR|Dragon|| +|Generate|TOK:RTR|Goblin|| +|Generate|TOK:RTR|Centaur|1| +|Generate|TOK:RTR|Ooze|| +|Generate|TOK:RTR|Rhino|| +|Generate|TOK:RTR|Saproling|| +|Generate|TOK:RTR|Wurm|| +|Generate|TOK:RTR|Elemental|| +|Generate|TOK:RTR|Centaur|2| + +|Generate|EMBLEM-:M13|Liliana of the Dark Realms|| + +|Generate|TOK:DDJ|Saproling|| + +|Generate|TOK:M13|Cat|| +|Generate|TOK:M13|Goat|| +|Generate|TOK:M13|Soldier|| +|Generate|TOK:M13|Drake|| +|Generate|TOK:M13|Zombie|| +|Generate|TOK:M13|Goblin|| +|Generate|TOK:M13|Hellion|| +|Generate|TOK:M13|Beast|| +|Generate|TOK:M13|Saproling|| +|Generate|TOK:M13|Wurm|| + +|Generate|EMBLEM:AVR|Tamiyo, the Moon Sage|| + +|Generate|TOK:AVR|Angel|| +|Generate|TOK:AVR|Human|1| +|Generate|TOK:AVR|Spirit|1| +|Generate|TOK:AVR|Spirit|2| +|Generate|TOK:AVR|Demon|| +|Generate|TOK:AVR|Zombie|| +|Generate|TOK:AVR|Human|2| + +|Generate|EMBLEM:DDI|Venser, the Sojourner|| +|Generate|EMBLEM:DDI|Koth of the Hammer|| + +|Generate|TOK:DKA|Human|| +|Generate|TOK:DKA|Vampire|| + +|Generate|TOK:ISD|Angel|| +|Generate|TOK:ISD|Spirit|| +|Generate|TOK:ISD|Homunculus|| +|Generate|TOK:ISD|Demon|| +|Generate|TOK:ISD|Vampire|| +|Generate|TOK:ISD|Wolf|1| +|Generate|TOK:ISD|Zombie|1| +|Generate|TOK:ISD|Zombie|2| +|Generate|TOK:ISD|Zombie|3| +|Generate|TOK:ISD|Ooze|| +|Generate|TOK:ISD|Spider|| +|Generate|TOK:ISD|Wolf|2| + +|Generate|TOK:DDH|Griffin|| +|Generate|TOK:DDH|Saproling|| + +|Generate|TOK:M12|Bird|| +|Generate|TOK:M12|Soldier|| +|Generate|TOK:M12|Zombie|| +|Generate|TOK:M12|Beast|| +|Generate|TOK:M12|Saproling|| +|Generate|TOK:M12|Wurm|| +|Generate|TOK:M12|Pentavite|| + +|Generate|TOK:NPH|Beast|| +|Generate|TOK:NPH|Beast|| +|Generate|TOK:NPH|Goblin|| +|Generate|TOK:NPH|Golem|| +|Generate|TOK:NPH|Myr|| + +|Generate|TOK:DDG|Goblin|| + +|Generate|TOK:MBS|Germ|| +|Generate|TOK:MBS|Zombie|| +|Generate|TOK:MBS|Golem|| +|Generate|TOK:MBS|Horror|| +|Generate|TOK:MBS|Thopter|| +|Generate|TOK:MBS|Zombie|| +|Generate|TOK:MBS|Zombie|| + +|Generate|TOK:DDF|Soldier|| + +|Generate|TOK:SOM|Cat|| +|Generate|TOK:SOM|Soldier|| +|Generate|TOK:SOM|Goblin|| +|Generate|TOK:SOM|Insect|| +|Generate|TOK:SOM|Wolf|| +|Generate|TOK:SOM|Golem|| +|Generate|TOK:SOM|Myr|| +|Generate|TOK:SOM|Wurm|1| +|Generate|TOK:SOM|Wurm|2| + +|Generate|TOK:M11|Avatar|| +|Generate|TOK:M11|Bird|| +|Generate|TOK:M11|Zombie|| +|Generate|TOK:M11|Beast|| +|Generate|TOK:M11|Ooze|1| +|Generate|TOK:M11|Ooze|2| + +|Generate|TOK:ROE|Eldrazi Spawn|1| +|Generate|TOK:ROE|Eldrazi Spawn|2| +|Generate|TOK:ROE|Eldrazi Spawn|3| +|Generate|TOK:ROE|Elemental|| +|Generate|TOK:ROE|Ooze|| +|Generate|TOK:ROE|Tuktuk the Returned|| + +|Generate|TOK:DDE|Saproling|| +|Generate|TOK:DDE|Hornet|| +|Generate|TOK:DDE|Minion|| + +|Generate|TOK:WWK|Soldier Ally|| +|Generate|TOK:WWK|Dragon|| +|Generate|TOK:WWK|Ogre|| +|Generate|TOK:WWK|Elephant|| +|Generate|TOK:WWK|Plant|| +|Generate|TOK:WWK|Construct|| + +|Generate|TOK:ZEN|Angel|| +|Generate|TOK:ZEN|Bird|| +|Generate|TOK:ZEN|Kor Soldier|| +|Generate|TOK:ZEN|Illusion|| +|Generate|TOK:ZEN|Merfolk|| +|Generate|TOK:ZEN|Vampire|| +|Generate|TOK:ZEN|Zombie Giant|| +|Generate|TOK:ZEN|Elemental|| +|Generate|TOK:ZEN|Beast|| +|Generate|TOK:ZEN|Snake|| +|Generate|TOK:ZEN|Wolf|| + +|Generate|TOK:M10|Avatar|| +|Generate|TOK:M10|Beast|| +|Generate|TOK:M10|Gargoyle|| +|Generate|TOK:M10|Goblin|| +|Generate|TOK:M10|Insect|| +|Generate|TOK:M10|Soldier|| +|Generate|TOK:M10|Wolf|| +|Generate|TOK:M10|Zombie|| + +|Generate|TOK:DDD|Beast|1| +|Generate|TOK:DDD|Beast|2| +|Generate|TOK:DDD|Elephant|| + +|Generate|TOK:ARB|Bird Soldier|| +|Generate|TOK:ARB|Lizard|| +|Generate|TOK:ARB|Dragon|| +|Generate|TOK:ARB|Zombie Wizard|| + +|Generate|TOK:DDC|Spirit|| +|Generate|TOK:DDC|Demon|| +|Generate|TOK:DDC|Thrull|| + +|Generate|TOK:CON|Angel|| +|Generate|TOK:CON|Elemental|| + +|Generate|TOK:DD2|Elemental Shaman|| + +|Generate|TOK:ALA|Soldier|| +|Generate|TOK:ALA|Beast|| +|Generate|TOK:ALA|Homunculus|| +|Generate|TOK:ALA|Thopter|| +|Generate|TOK:ALA|Skeleton|| +|Generate|TOK:ALA|Zombie|| +|Generate|TOK:ALA|Dragon|| +|Generate|TOK:ALA|Goblin|| +|Generate|TOK:ALA|Ooze|| +|Generate|TOK:ALA|Saproling|| + +|Generate|TOK:EVE|Goat|| +|Generate|TOK:EVE|Bird|| +|Generate|TOK:EVE|Beast|| +|Generate|TOK:EVE|Spirit|| +|Generate|TOK:EVE|Elemental|| +|Generate|TOK:EVE|Worm|| +|Generate|TOK:EVE|Goblin Soldier|| + +|Generate|TOK:SHM|Kithkin Soldier|| +|Generate|TOK:SHM|Spirit|| +|Generate|TOK:SHM|Rat|| +|Generate|TOK:SHM|Elemental|1| +|Generate|TOK:SHM|Elf Warrior|1| +|Generate|TOK:SHM|Spider|| +|Generate|TOK:SHM|Wolf|| +|Generate|TOK:SHM|Faerie Rogue|| +|Generate|TOK:SHM|Elemental|2| +|Generate|TOK:SHM|Giant Warrior|| +|Generate|TOK:SHM|Goblin Warrior|| +|Generate|TOK:SHM|Elf Warrior|2| + +|Generate|TOK:EVG|Elemental|| +|Generate|TOK:EVG|Elf Warrior|| +|Generate|TOK:EVG|Goblin|| + +|Generate|TOK:MOR|Giant Warrior|| +|Generate|TOK:MOR|Faerie Rogue|| +|Generate|TOK:MOR|Treefolk Shaman|| + +|Generate|TOK:LRW|Avatar|| +|Generate|TOK:LRW|Elemental|1| +|Generate|TOK:LRW|Kithkin Soldier|| +|Generate|TOK:LRW|Merfolk Wizard|| +|Generate|TOK:LRW|Goblin Rogue|| +|Generate|TOK:LRW|Elemental Shaman|| +|Generate|TOK:LRW|Beast|| +|Generate|TOK:LRW|Elemental|2| +|Generate|TOK:LRW|Elf Warrior|| +|Generate|TOK:LRW|Wolf|| +|Generate|TOK:LRW|Shapeshifter|| + +|Generate|TOK:10E|Soldier|| +|Generate|TOK:10E|Zombie|| +|Generate|TOK:10E|Dragon|| +|Generate|TOK:10E|Goblin|| +|Generate|TOK:10E|Saproling|| +|Generate|TOK:10E|Wasp|| + +|Generate|TOK:CSP|Marit Lage|| + +#|Generate|TOK:CHK|Spirit|| \ No newline at end of file diff --git a/Mage.Client/src/main/resources/tokens-mtg-onl-list.csv b/Mage.Client/src/main/resources/tokens-mtg-onl-list.csv new file mode 100644 index 0000000000..2a64a370e0 --- /dev/null +++ b/Mage.Client/src/main/resources/tokens-mtg-onl-list.csv @@ -0,0 +1,712 @@ +Token name, Number, Color, P/T, Promo, Type, Artist, Text + +UGL - Unglued (1998-08-11) + +Pegasus, 89, W, 1|1, -, Creature - Pegasus, Mark Zug, Flying +Soldier, 90, W, 1|1, -, Creature - Soldier, Daren Bader, - +Zombie, 91, B, 2|2, -, Creature - Zombie, Christopher Rush, - +Goblin, 92, R, 1|1, -, Creature - Goblin, Pete Venters, - +Sheep, 93, G, 1|1, -, Creature - Sheep, Kev Walker, - +Squirrel, 94, G, 1|1, -, Creature - Squirrel, Ron Spencer, - + +ATH - Anthologies (1998-11-01) + +Pegasus, 89, W, 1|1, -, Creature - Pegasus, Mark Zug, Flying +Goblin, 92, R, 1|1, -, Creature - Goblin, Pete Venters, - + +INV - Invasion (2000-10-02) + +Bird, T1, U, 1|1, Player Rewards, Creature - Bird, Michael Sutfin, Flying +Elephant, T2, G, 3|3, Player Rewards, Creature - Elephant, Terese Nielsen, - +Saproling, T3, G, 1|1, Player Rewards, Creature - Saproling, Jeff Laubenstein, - + +PLS - Planeshift (2001-02-05) + +Spirit, T1, W, 1|1, Player Rewards, Creature - Spirit, John Matson, Flying + +APC - Apocalypse (2001-06-04) + +Goblin Soldier, T1, R W, 1|1, Player Rewards, Creature - Goblin Soldier, Ron Spears, - + +ODY - Odyssey (2001-10-01) + +Bear, T1, G, 2|2, Player Rewards, Creature - Bear, Heather Hudson, - +Beast, T2, G, 4|4, Player Rewards, Creature - Beast, Larry Elmore, - +Elephant, T3, G, 3|3, Player Rewards, Creature - Elephant, Arnie Swekel, - +Squirrel, T4, G, 1|1, Player Rewards, Creature - Squirrel, Ron Spencer, - +Wurm, T5, G, 6|6, Player Rewards, Creature - Wurm, Alan Pollack, - +Zombie, T6, B, 2|2, Player Rewards, Creature - Zombie, Dana Knutson, - + +ONS - Onslaught (2002-10-07) + +Bear, T1, G, 2|2, Player Rewards, Creature - Bear, Glen Angus, - +Dragon, T2, R, 5|5, Player Rewards, Creature - Dragon, Glen Angus, Flying +Insect, T3, G, 1|1, Player Rewards, Creature - Insect, Anthony S. Waters, - +Soldier, T4, W, 1|1, Player Rewards, Creature - Soldier, Ron Spencer, - + +LGN - Legions (2003-02-03) + +Goblin, T1, R, 1|1, Player Rewards, Creature - Goblin, Darrell Riche, - +Sliver, T2, -, 1|1, Player Rewards, Creature - Sliver, Tony Szczudlo, - + +SCG - Scourge (2003-05-26) + +Angel, T1, W, 4|4, Player Rewards, Creature - Angel, Scott M. Fischer, Flying + +8ED - Eighth Edition (2003-07-28) + +Rukh, T1, R, 4|4, Player Rewards, Creature - Rukh, Edward P. Beard Jr., Flying + +MRD - Mirrodin (2003-10-02) + +Demon, T1, B, *|*, Player Rewards, Creature - Demon, Pete Venters, - +Myr, T2, -, 1|1, Player Rewards, Creature - Myr, Wayne England, - +Pentavite, T3, -, 1|1, Player Rewards, Artifact Creature - Pentavite, Greg Staples, - + +DST - Darksteel (2004-02-06) + +Beast, T1, G, 3|3, Player Rewards, Creature - Beast, Edward P. Beard Jr., - + +CHK - Champions of Kamigawa (2004-10-01) + +Spirit, T1, -, 1|1, Player Rewards, Creature - Spirit, Hugh Jamieson, - + +CSP - Coldsnap (2006-07-21) + +Marit Lage, T1, B, 20|20, Pre-Release, Creature - Avatar, Stephan Martiniere, Flying indestructible + +10E - Tenth Edition (2007-07-13) + +Soldier, 1, W, 1|1, -, Creature - Soldier, Parente, - +Zombie, 2, B, 2|2, -, Creature - Zombie, Carl Critchlow, - +Dragon, 3, R, 5|5, -, Creature - Dragon, Jim Pavelec, Flying +Goblin, 4, R, 1|1, -, Creature - Goblin, Dave Kendall, - +Saproling, 5, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, - +Wasp, 6, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying + +LRW - Lorwyn (2007-10-12) + +Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total. +Elemental, 2, W, 4|4, -, Creature - Elemental, Anthony S. Waters, Flying +Kithkin Soldier, 3, W, 1|1, -, Creature - Kithkin Soldier, Greg Hildebrandt, - +Merfolk Wizard, 4, U, 1|1, -, Creature - Merfolk Wizard, Mark Poole, - +Goblin Rogue, 5, B, 1|1, -, Creature - Goblin Rogue, Richard Sardinha, - +Elemental Shaman, 6, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, - +Beast, 7, G, 3|3, -, Creature - Beast, John Donahue, - +Elemental, 8, G, 4|4, -, Creature - Elemental, Brandon Kitkouski, - +Elf Warrior, 9, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, - +Wolf, 10, G, 2|2, -, Creature - Wolf, Pete Venters, - +Shapeshifter, 11, -, 1|1, -, Creature - Shapeshifter, Franz Vohwinkel, Changeling + +EVG - Duel Decks: Elves vs. Goblins (2007-11-16) + +Elemental, T1, G, 7|7, -, Creature - Elemental, Anthony S. Waters, Trample +Elf Warrior, T2, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, - +Goblin, T3, R, 1|1, -, Creature - Goblin, Dave Kendall, - + +MOR - Morningtide (2008-02-01) + +Giant Warrior, 1, W, 5|5, -, Creature - Giant Warrior, Steve Ellis, - +Faerie Rogue, 2, B, 1|1, -, Creature - Faerie Rogue, Jim Nelson, Flying +Treefolk Shaman, 3, G, 2|5, -, Creature - Treefolk Shaman, Richard Sardinha, - + +SHM - Shadowmoor (2008-05-02) + +Kithkin Soldier, 1, W, 1|1, -, Creature - Kithkin Soldier, Randy Gallegos, - +Spirit, 2, W, 1|1, -, Creature - Spirit, Jeremy Enecio, Flying +Rat, 3, B, 1|1, -, Creature - Rat, Carl Critchlow, - +Elemental, 4, R, 1|1, -, Creature - Elemental, Cyril Van Der Haegen, Haste +Elf Warrior, 5, G, 1|1, -, Creature - Elf Warrior, William O'Connor, - +Spider, 6, G, 1|2, -, Creature - Spider, Thomas M. Baxa, Reach +Wolf, 7, G, 2|2, -, Creature - Wolf, Lars Grant-West, - +Faerie Rogue, 8, U B, 1|1, -, Creature - Faerie Rogue, E. M. Gist, Flying +Elemental, 9, B R, 5|5, -, Creature - Elemental, Dave Dorman, - +Giant Warrior, 10, R G, 4|4, -, Creature - Giant Warrior, Trevor Hairsine, Haste +Goblin Warrior, 11, R G, 1|1, -, Creature - Goblin Warrior, Dave Allsop, - +Elf Warrior, 12, G W, 1|1, -, Creature - Elf Warrior, Carl Frank, - + +EVE - Eventide (2008-07-25) + +Goat, 1, W, -, -, Creature - Goat, Terese Nielsen, - +Bird, 2, U, 1|1, -, Creature - Bird, Heather Hudson, Flying +Beast, 3, G, 3|3, -, Creature - Beast, William O'Connor, - +Spirit, 4, W B, 1|1, -, Creature - Spirit, Larry MacDougall, Flying +Elemental, 5, U R, 5|5, -, Creature - Elemental, Randy Gallegos, Flying +Worm, 6, B G, 1|1, -, Creature - Worm, Chuck Lukacs, - +Goblin Soldier, 7, R W, 1|1, -, Creature - Goblin Soldier, Jeff Miracola, - + +ALA - Shards of Alara (2008-10-03) + +Soldier, 1, W, 1|1, -, Creature - Soldier, Alan Pollack, - +Homunculus, 2, U, -, -, Artifact Creature - Homunculus, Howard Lyon, - +Thopter, 3, U, 1|1, -, Artifact Creature - Thopter, Andrew Murray, Flying +Skeleton, 4, B, 1|1, -, Creature - Skeleton, Thomas M. Baxa, {B}: Regenerate this creature. +Zombie, 5, B, 2|2, -, Creature - Zombie, Dave Kendall, - +Dragon, 6, R, 4|4, -, Creature - Dragon, Vance Kovacs, Flying +Goblin, 7, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, - +Ooze, 8, G, *|*, -, Creature - Ooze, Anthony S. Waters, - +Saproling, 9, G, 1|1, -, Creature - Saproling, Trevor Claxton, - +Beast, 10, R G W, 8|8, -, Creature - Beast, Parente, - + +DD2 - Duel Decks: Jace vs. Chandra (2008-11-07) + +Elemental Shaman, T1, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, - + +CFX - Conflux (2009-02-06) + +Angel, 1, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying +Elemental, 2, R, 3|1, -, Creature - Elemental, Vance Kovacs, - + +DDC - Duel Decks: Divine vs. Demonic (2009-04-10) + +Spirit, T1, W, 1|1, -, Creature - Spirit, Luca Zontini, Flying +Demon, T2, B, *|*, -, Creature - Demon, Pete Venters, Flying +Thrull, T3, B, -, -, Creature - Thrull, Veronique Meignaud, - + +ARB - Alara Reborn (2009-04-30) + +Bird Soldier, 1, W, 1|1, -, Creature - Bird Soldier, Matt Cavotta, Flying +Lizard, 2, G, 2|2, -, Creature - Lizard, Anthony S. Waters, - +Dragon, 3, R G, 1|1, -, Creature - Dragon, Jaime Jones, Flying devour 2 +Zombie Wizard, 4, U B, 1|1, -, Creature - Zombie Wizard, Dave Allsop, - + +M10 - Magic 2010 (2009-07-17) + +Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total. +Soldier, 2, W, 1|1, -, Creature - Soldier, Parente, - +Zombie, 3, B, 2|2, -, Creature - Zombie, Bud Cook, - +Goblin, 4, R, 1|1, -, Creature - Goblin, Dave Kendall, - +Beast, 5, G, 3|3, -, Creature - Beast, John Donahue, - +Insect, 6, G, 1|1, -, Creature - Insect, Ron Spencer, - +Wolf, 7, G, 2|2, -, Creature - Wolf, Lars Grant-West, - +Gargoyle, 8, -, 3|4, -, Artifact Creature - Gargoyle, Paul Bonner, Flying + +ZEN - Zendikar (2009-10-02) + +Angel, 1, W, 4|4, -, Creature - Angel, Adi Granov, Flying +Bird, 2, W, 1|1, -, Creature - Bird, Howard Lyon, Flying +Kor Soldier, 3, W, 1|1, -, Creature - Kor Soldier, Daren Bader, - +Illusion, 4, U, 2|2, -, Creature - Illusion, Cyril Van Der Haegen, - +Merfolk, 5, U, 1|1, -, Creature - Merfolk, Warren Mahy, - +Vampire, 6, B, *|*, -, Creature - Vampire, Kekai Kotaki, - +Zombie Giant, 7, B, 5|5, -, Creature - Zombie Giant, Igor Kieryluk, - +Elemental, 8, R, 7|1, -, Creature - Elemental, Anthony Francisco, Trample haste +Beast, 9, G, 4|4, -, Creature - Beast, Steve Prescott, - +Snake, 10, G, 1|1, -, Creature - Snake, Austin Hsu, - +Wolf, 11, G, 2|2, -, Creature - Wolf, Daren Bader, - + +DDD - Duel Decks: Garruk vs. Liliana (2009-10-30) + +Beast, T1, G, 3|3, -, Creature - Beast, John Donahue, - +Beast, T2, G, 4|4, -, Creature - Beast, Steve Prescott, - +Elephant, T3, G, 3|3, -, Creature - Elephant, Arnie Swekel, - + +WWK - Worldwake (2010-02-05) + +Soldier Ally, 1, W, 1|1, -, Creature - Soldier Ally, Kekai Kotaki, - +Dragon, 2, R, 5|5, -, Creature - Dragon, Raymond Swanland, Flying +Ogre, 3, R, 3|3, -, Creature - Ogre, Paul Bonner, - +Elephant, 4, G, 3|3, -, Creature - Elephant, Lars Grant-West, - +Plant, 5, G, -, -, Creature - Plant, Daren Bader, - +Construct, 6, -, 6|12, -, Artifact Creature - Construct, Jung Park, Trample + +DDE - Duel Decks: Phyrexia vs. the Coalition (2010-03-19) + +Hornet, T1, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying haste +Minion, T2, B, *|*, -, Creature - Minion, Dave Kendall, - +Saproling, T3, G, 1|1, -, Creature - Saproling, Warren Mahy, - + +ROE - Rise of the Eldrazi (2010-04-23) + +Eldrazi Spawn, 1a, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Spawn, 1b, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Spawn, 1c, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool. +Elemental, 2, R, *|*, -, Creature - Elemental, Jung Park, - +Hellion, 3, R, 4|4, -, Creature - Hellion, Anthony Francisco, - +Ooze, 4, G, *|*, -, Creature - Ooze, Daniel Ljunggren, - +Tuktuk The Returned, 5, -, 5|5, -, Legendary Artifact Creature - Goblin Golem, Franz Vohwinkel, - + +M11 - Magic 2011 (2010-07-16) + +Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total. +Bird, 2, W, 3|3, -, Creature - Bird, Paul Bonner, Flying +Zombie, 3, B, 2|2, -, Creature - Zombie, Bud Cook, - +Beast, 4, G, 3|3, -, Creature - Beast, John Donahue, - +Ooze, 5, G, 2|2, -, Creature - Ooze, Raymond Swanland, When this creature dies put two 1/1 green Ooze creature tokens onto the battlefield. +Ooze, 6, G, 1|1, -, Creature - Ooze, Raymond Swanland, - + +DDF - Duel Decks: Elspeth vs. Tezzeret (2010-09-03) + +Soldier, T1, W, 1|1, -, Creature - Soldier, Parente, - + +SOM - Scars of Mirrodin (2010-10-01) + +Cat, 1, W, 2|2, -, Creature - Cat, Scott Chou, - +Soldier, 2, W, 1|1, -, Creature - Soldier, Goran Josic, - +Goblin, 3, R, 1|1, -, Creature - Goblin, Goran Josic, - +Insect, 4, G, 1|1, -, Creature - Insect, Adrian Smith, Infect +Wolf, 5, G, 2|2, -, Creature - Wolf, Chris Rahn, - +Golem, 6, -, 3|3, -, Artifact Creature - Golem, Nic Klein, - +Myr, 7, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, - +Wurm, 8, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Deathtouch +Wurm, 9, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Lifelink +Poison Counter, -, -, -, -, Emblem, -, - + +MBS - Mirrodin Besieged (2011-02-04) + +Germ, 1, B, -, -, Creature - Germ, Igor Kieryluk, - +Zombie, 2, B, 2|2, -, Creature - Zombie, Dave Kendall, - +Golem, 3, -, 9|9, -, Artifact Creature - Golem, Svetlin Velinov, - +Horror, 4, -, *|*, -, Artifact Creature - Horror, Scott Chou, - +Thopter, 5, -, 1|1, -, Artifact Creature - Thopter, Volkan Baga, Flying +Poison Counter, -, -, -, -, Emblem, -, - + +DDG - Duel Decks: Knights vs. Dragons (2011-04-01) + +Goblin, T1, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, - + +NPH - New Phyrexia (2011-05-13) + +Beast, 1, G, 3|3, -, Creature - Beast, Dave Allsop, - +Goblin, 2, R, 1|1, -, Creature - Goblin, Jaime Jones, - +Golem, 3, -, 3|3, -, Artifact Creature - Golem, Volkan Baga, - +Myr, 4, -, 1|1, -, Artifact Creature - Myr, Matt Stewart, - +Poison Counter, -, -, -, -, Emblem, -, - + +M12 - Magic 2012 (2011-07-15) + +Bird, 1, W, 3|3, -, Creature - Bird, Paul Bonner, Flying +Soldier, 2, W, 1|1, -, Creature - Soldier, Parente, - +Zombie, 3, B, 2|2, -, Creature - Zombie, Carl Critchlow, - +Beast, 4, G, 3|3, -, Creature - Beast, John Donahue, - +Saproling, 5, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, - +Wurm, 6, G, 6|6, -, Creature - Wurm, Anthony Francisco, - +Pentavite, 7, -, 1|1, -, Artifact Creature - Pentavite, Greg Staples, Flying + +DDH - Duel Decks: Ajani vs. Nicol Bolas (2011-09-02) + +Griffin, T1, W, 2|2, -, Creature - Griffin, Jim Nelson, Flying +Saproling, T2, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, - + +ISD - Innistrad (2011-09-30) + +Angel, 1, W, 4|4, -, Creature - Angel, Winona Nelson, Flying +Spirit, 2, W, 1|1, -, Creature - Spirit, Kev Walker, Flying +Homunculus, 3, U, 2|2, -, Creature - Homunculus, Johann Bodin, - +Demon, 4, B, 5|5, -, Creature - Demon, Kev Walker, Flying +Vampire, 5, B, 2|2, -, Creature - Vampire, Svetlin Velinov, Flying +Wolf, 6, B, 1|1, -, Creature - Wolf, Daniel Ljunggren, Deathtouch +Zombie, 7, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Zombie, 8, B, 2|2, -, Creature - Zombie, Christopher Moeller, - +Zombie, 9, B, 2|2, -, Creature - Zombie, Cynthia Sheppard, - +Ooze, 10, G, *|*, -, Creature - Ooze, Erica Yang, This creature's power and toughness are each equal to the number of slime counters on Gutter Grime. +Spider, 11, G, 1|2, -, Creature - Spider, Daniel Ljunggren, Reach +Wolf, 12, G, 2|2, -, Creature - Wolf, David Palumbo, - +Wolf, T12, G, 2|2, Judge, Creature - Wolf, David Palumbo, - + +DKA - Dark Ascension (2012-02-03) + +Human, 1, W, 1|1, -, Creature - Human, John Stanko, - +Vampire, 2, B, 1|1, -, Creature - Vampire, Peter Mohrbacher, Lifelink +Sorin Emblem, 3, -, -, -, Emblem - Sorin, Michael Komrack, Creatures you control get +1/+0. + +DDI - Duel Decks: Venser vs. Koth (2012-03-30) + +Koth Emblem, E1, -, -, -, Emblem - Koth, Eric Deschamps, Mountains you control have Tap: This land deals 1 damage to target creature or player.' +Venser Emblem, E2, -, -, -, Emblem - Venser, Eric Deschamps, Whenever you cast a spell exile target permanent. + +FNM - Friday Night Magic (2012-04-01) + +Human, T1a, W, 1|1, Full Moon, Creature - Human, Lars Grant-West, - +Wolf, T1b, G, 2|2, Full Moon, Creature - Wolf, Lars Grant-West, - + +AVR - Avacyn Restored (2012-05-04) + +Angel, 1, W, 4|4, -, Creature - Angel, Anthony Palumbo, Flying +Human, 2, W, 1|1, -, Creature - Human, Michael C. Hayes, - +Spirit, 3, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying +Spirit, 4, U, 1|1, -, Creature - Spirit, Dan Scott, Flying +Demon, 5, B, 5|5, -, Creature - Demon, Kev Walker, Flying +Zombie, 6, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Human, 7, R, 1|1, -, Creature - Human, Ryan Pancoast, Haste +Tamiyo Emblem, 8, -, -, -, Emblem - Tamiyo, Eric Deschamps, You have no maximum hand size. Whenever a card is put into your graveyard from anywhere you may return it to your hand. +Angel, T1, W, 4|4, Pre-Release, Creature - Angel, James Ryman, Flying +Angel, T1F, W, 4|4, Pre-Release, Creature - Angel, James Ryman, Flying +Demon, T5, B, 5|5, Pre-Release, Creature - Demon, Karl Kopinski, Flying +Demon, T5F, B, 5|5, Pre-Release, Creature - Demon, Karl Kopinski, Flying + +M13 - Magic 2013 (2012-07-13) + +Goblin, 1, R, 1|1, League, Creature - Goblin, Jim Nelson, - +Cat, 1, W, 2|2, -, Creature - Cat, Jesper Ejsing, - +Goat, 2, W, -, -, Creature - Goat, Adam Paquette, - +Soldier, 3, W, 1|1, -, Creature - Soldier, Greg Staples, - +Drake, 4, U, 2|2, -, Creature - Drake, Svetlin Velinov, Flying +Zombie, 5, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Goblin, 6, R, 1|1, -, Creature - Goblin, Karl Kopinski, - +Hellion, 7, R, 4|4, -, Creature - Hellion, Anthony Francisco, - +Beast, 8, G, 3|3, -, Creature - Beast, John Donahue, - +Saproling, 9, G, 1|1, -, Creature - Saproling, Brad Rigney, - +Wurm, 10, G, 6|6, -, Creature - Wurm, Anthony Francisco, - +Liliana Emblem, 11, -, -, -, Emblem - Liliana, D. Alexander Gregory, Swamps you control have Tap: Add {B}{B}{B}{B} to your mana pool.' + +DDJ - Duel Decks: Izzet vs. Golgari (2012-09-07) + +Saproling, T1, G, 1|1, -, Creature - Saproling, Brad Rigney, - + +RTR - Return to Ravnica (2012-10-05) + +Centaur, 1, G, 3|3, Judge, Creature - Centaur, James Ryman, - +Knight, 1, W, 2|2, League, Creature - Knight, Lucas Graciano, Vigilance +Bird, 1, W, 1|1, -, Creature - Bird, James Ryman, Flying +Knight, 2, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance +Soldier, 3, W, 1|1, -, Creature - Soldier, Steve Prescott, - +Assassin, 4, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player that player loses the game. +Dragon, 5, R, 6|6, -, Creature - Dragon, Mark Zug, Flying +Goblin, 6, R, 1|1, -, Creature - Goblin, Christopher Moeller, - +Centaur, 7, G, 3|3, -, Creature - Centaur, Slawomir Maniak, - +Ooze, 8, G, *|*, -, Creature - Ooze, Marco Nelor, - +Rhino, 9, G, 4|4, -, Creature - Rhino, Tomasz Jedruszek, Trample +Saproling, 10, G, 1|1, -, Creature - Saproling, Raoul Vitale, - +Wurm, 11, G, 5|5, -, Creature - Wurm, Anthony Palumbo, Trample +Elemental, 12, G W, 8|8, -, Creature - Elemental, Yeong-Hao Han, Vigilance + +GTC - Gatecrash (2013-02-01) + +Soldier, 1, R W, 1|1, League, Creature - Soldier, Zoltan Boros, Haste +Angel, 1, W, 4|4, -, Creature - Angel, Steve Argyle, Flying +Rat, 2, B, 1|1, -, Creature - Rat, Nils Hamm, - +Frog Lizard, 3, G, 3|3, -, Creature - Frog Lizard, Jack Wang, - +Cleric, 4, W B, 1|1, -, Creature - Cleric, Jason Chan, {3}{W}{B}{B} {T} Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield. +Horror, 5, U B, 1|1, -, Creature - Horror, Adam Paquette, Flying +Soldier, 6, R W, 1|1, -, Creature - Soldier, David Palumbo, Haste +Spirit, 7, W B, 1|1, -, Creature - Spirit, Cliff Childs, Flying +Domri Emblem, 8, -, -, -, Emblem - Domri, Tyler Jacobson, Creatures you control have double strike trample hexproof and haste. + +DDK - Duel Decks: Sorin vs. Tibalt (2013-03-15) + +Spirit, T1, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying + +DGM - Dragon's Maze (2013-05-03) + +Bird, 1, W, 1|1, League, Creature - Bird, Martina Pilcerova, Flying +Elemental, 1, G W, *|*, -, Creature - Elemental, Mark Winters, This creature's power and toughness are each equal to the number of creatures you control. + +MMA - Modern Masters (2013-06-07) + +Giant Warrior, 1, W, 5|5, -, Creature - Giant Warrior, Svetlin Velinov, - +Kithkin Soldier, 2, W, 1|1, -, Creature - Kithkin Soldier, Randy Gallegos, - +Soldier, 3, W, 1|1, -, Creature - Soldier, Goran Josic, - +Illusion, 4, U, 1|1, -, Creature - Illusion, Veronique Meignaud, - +Bat, 5, B, 1|1, -, Creature - Bat, Wayne Reynolds, Flying +Goblin Rogue, 6, B, 1|1, -, Creature - Goblin Rogue, Dave Kendall, - +Spider, 7, B, 2|4, -, Creature - Spider, Lars Grant-West, Reach +Zombie, 8, B, 2|2, -, Creature - Zombie, Bud Cook, - +Dragon, 9, R, 4|4, -, Creature - Dragon, Vance Kovacs, Flying +Goblin, 10, R, 1|1, -, Creature - Goblin, Dave Kendall, - +Elemental, 11, G, 4|4, -, Creature - Elemental, Brandon Kitkouski, - +Saproling, 12, G, 1|1, -, Creature - Saproling, Warren Mahy, - +Treefolk Shaman, 13, G, 2|5, -, Creature - Treefolk Shaman, Zack Stella, - +Faerie Rogue, 14, U B, 1|1, -, Creature - Faerie Rogue, E. M. Gist, Flying +Worm, 15, B G, 1|1, -, Creature - Worm, Chuck Lukacs, - +Elspeth Emblem, 16, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts creatures enchantments and lands you control have indestructible. + +M14 - Magic 2014 Core Set (2013-07-19) + +Sliver, 1, -, 1|1, -, Creature - Sliver, Igor Kieryluk, - +Angel, 1, W, 4|4, -, Creature - Angel, James Ryman, Flying +Cat, 3, W, 2|2, -, Creature - Cat, Jesper Ejsing, - +Goat, 4, W, -, -, Creature - Goat, Adam Paquette, - +Zombie, 5, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Dragon, 6, R, 2|2, -, Creature - Dragon, Jack Wang, Flying {R}: This creature gets +1/+0 until end of turn. +Elemental, 7, R, 1|1, -, Creature - Elemental, Jaime Jones, - +Elemental, 8, R, 1|1, -, Creature - Elemental, Winona Nelson, - +Beast, 9, G, 3|3, -, Creature - Beast, John Donahue, - +Saproling, 10, G, 1|1, -, Creature - Saproling, Brad Rigney, - +Wolf, 11, G, 2|2, -, Creature - Wolf, Lars Grant-West, - +Liliana Emblem, 12, -, -, -, Emblem - Liliana, D. Alexander Gregory, Swamps you control have Tap: Add {B}{B}{B}{B} to your mana pool.' +Garruk Emblem, 13, -, -, -, Emblem - Garruk, Karl Kopinski, Whenever you cast a creature spell you may search your library for a creature card put it onto the battlefield then shuffle your library. +Sliver, T1, -, 1|1, League, Creature - Sliver, Vincent Proce, - + +DDL - Duel Decks: Heroes vs. Monsters (2013-09-06) + +Griffin, T1, W, 2|2, -, Creature - Griffin, Johann Bodin, Flying +Beast, T2, G, 3|3, -, Creature - Beast, Jesper Ejsing, - + +THS - Theros (2013-09-27) + +Golem, 1, -, 3|3, Judge, Enchantment Artifact Creature - Golem, Yeong-Hao Han, - +Soldier, 1, W, 1|1, League, Creature - Soldier, Johann Bodin, - +Cleric, 1, W, 2|1, -, Enchantment Creature - Cleric, Johann Bodin, - +Soldier, 2, W, 1|1, -, Creature - Soldier, Seb McKinnon, - +Soldier, 3, W, 1|1, -, Creature - Soldier, Svetlin Velinov, - +Bird, 4, U, 2|2, -, Creature - Bird, Peter Mohrbacher, Flying +Elemental, 5, U, 1|0, -, Creature - Elemental, Karl Kopinski, - +Harpy, 6, B, 1|1, -, Creature - Harpy, Nils Hamm, Flying +Soldier, 7, R, 1|1, -, Creature - Soldier, Johann Bodin, - +Boar, 8, G, 2|2, -, Creature - Boar, James Ryman, - +Satyr, 9, R G, 2|2, -, Creature - Satyr, Johann Bodin, - +Golem, 10, -, 3|3, -, Enchantment Artifact Creature - Golem, Yeong-Hao Han, - +Elspeth Emblem, 11, -, -, -, Emblem - Elspeth, Eric Deschamps, Creatures you control get +2/+2 and have flying. + +BNG - Born of the Gods (2014-02-07) + +Soldier, 1, W, 1|1, League, Enchantment Creature - Soldier, Ryan Barger, - +Bird, 1, W, 1|1, -, Creature - Bird, Clint Cearly, Flying +Cat Soldier, 2, W, 1|1, -, Creature - Cat Soldier, Scott Chou, Vigilance +Soldier, 3, W, 1|1, -, Enchantment Creature - Soldier, David Palumbo, - +Bird, 4, U, 2|2, -, Enchantment Creature - Bird, Mike Sass, Flying +Kraken, 5, U, 9|9, -, Creature - Kraken, Dan Scott, - +Zombie, 6, B, 2|2, -, Enchantment Creature - Zombie, Winona Nelson, - +Elemental, 7, R, 3|1, -, Enchantment Creature - Elemental, Greg Staples, - +Centaur, 8, G, 3|3, -, Enchantment Creature - Centaur, Ryan Barger, - +Wolf, 9, G, 2|2, -, Creature - Wolf, Raoul Vitale, - +Gold, 10, -, -, -, Artifact, Richard Wright, Sacrifice this artifact: Add one mana of any color to your mana pool. +Kiora Emblem, 11, -, -, -, Emblem - Kiora, Scott M. Fischer, At the beginning of your end step put a 9/9 blue Kraken creature token onto the battlefield. + +DDM - Duel Decks: Jace vs. Vraska (2014-03-14) + +Assassin, T1, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player that player loses the game. + +JOU - Journey into Nyx (2014-05-02) + +Minotaur, 1, R, 2|3, League, Creature - Minotaur, Scott Murphy, - +Sphinx, 1, U, 4|4, -, Creature - Sphinx, Jesper Ejsing, Flying +Zombie, 2, B, *|*, -, Creature - Zombie, Zack Stella, - +Minotaur, 3, R, 2|3, -, Creature - Minotaur, Craig J Spearing, - +Hydra, 4, G, *|*, -, Creature - Hydra, Steve Prescott, - +Spider, 5, G, 1|3, -, Enchantment Creature - Spider, Yohann Schepacz, Reach +Snake, 6, G B, 1|1, -, Enchantment Creature - Snake, Greg Staples, Deathtouch + +MD1 - Modern Event Deck 2014 (2014-05-30) + +Soldier, 1, W, 1|1, -, Creature - Soldier, Goran Josic, - +Spirit, 2, W, 1|1, -, Creature - Spirit, Kev Walker, Flying +Myr, 3, -, 1|1, -, Artifact Creature - Myr, Matt Stewart, - +Elspeth Emblem, 4, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts creatures enchantments and lands you control have indestructible. + +CNS - Conspiracy (2014-06-06) + +Spirit, 1, W, 1|1, -, Creature - Spirit, Jeff Simpson, Flying +Demon, 2, B, *|*, -, Creature - Demon, Evan Shipard, Flying +Zombie, 3, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Ogre, 4, R, 4|4, -, Creature - Ogre, Dave Kendall, - +Elephant, 5, G, 3|3, -, Creature - Elephant, Lars Grant-West, - +Squirrel, 6, G, 1|1, -, Creature - Squirrel, Daniel Ljunggren, - +Wolf, 7, G, 2|2, -, Creature - Wolf, Raoul Vitale, - +Construct, 8, -, 1|1, -, Artifact Creature - Construct, Adam Paquette, Defender +Dack Emblem, 9, -, -, -, Emblem - Dack, Eric Deschamps, Whenever you cast a spell that targets one or more permanents gain control of those permanents. + +M15 - Magic 2015 Core Set (2014-07-18) + +Wolf, 001, G, 1|1, Pre-Release, Creature - Wolf, David Palumbo, - +Sliver, 001, -, 1|1, -, Creature - Sliver, Igor Kieryluk, - +Squid, 001, U, 1|1, League, Creature - Squid, Richard Wright, Islandwalk +Soldier, 002, W, 1|1, -, Creature - Soldier, Greg Staples, - +Spirit, 003, W, 1|1, -, Creature - Spirit, Mike Sass, Flying +Squid, 004, U, 1|1, -, Creature - Squid, Jack Wang, Islandwalk +Beast, 005, B, 3|3, -, Creature - Beast, John Donahue, Deathtouch +Zombie, 006, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Dragon, 007, R, 2|2, -, Creature - Dragon, Jack Wang, Flying {R}: This creature gets +1/+0 until end of turn. +Goblin, 008, R, 1|1, -, Creature - Goblin, Karl Kopinski, - +Beast, 009, G, 3|3, -, Creature - Beast, Dave Kendall, - +Insect, 010, G, 1|1, -, Creature - Insect, Martina Pilcerova, Flying deathtouch +Treefolk Warrior, 011, G, *|*, -, Creature - Treefolk Warrior, Todd Lockwood, This creature's power and toughness are each equal to the number of Forests you control. +Land Mine, 012, -, -, -, Artifact, Kev Walker, {R} Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying. +Ajani Emblem, 013, -, -, -, Emblem - Ajani, Chris Rahn, If a source would deal damage to you or a planeswalker you control prevent all but 1 of that damage. +Garruk Emblem, 014, -, -, -, Emblem - Garruk, Tyler Jacobson, Whenever a creature attacks you it gets +5/+5 and gains trample until end of turn. + +DDN - Duel Decks: Speed vs. Cunning (2014-09-05) + +Goblin, 082, R, 1|1, -, Creature - Goblin, Karl Kopinski, - + +KTK - Khans of Tarkir (2014-09-26) + +Warrior, 001, W, 1|1, League, Creature - Warrior, Winona Nelson, - +Bird, 001, W, 3|4, -, Creature - Bird, Mark Zug, Flying +Spirit, 002, W, 1|1, -, Creature - Spirit, Mike Sass, Flying +Warrior, 003, W, 1|1, -, Creature - Warrior, Ryan Barger, - +Warrior, 004, W, 1|1, -, Creature - Warrior, Yefim Kligerman, - +Vampire, 005, B, 2|2, -, Creature - Vampire, Cynthia Sheppard, Flying +Zombie, 006, B, 2|2, -, Creature - Zombie, Wayne Reynolds, - +Goblin, 007, R, 1|1, -, Creature - Goblin, Kev Walker, - +Bear, 008, G, 4|4, -, Creature - Bear, Kev Walker, - +Snake, 009, G, 1|1, -, Creature - Snake, Lars Grant-West, - +Spirit Warrior, 010, B G, *|*, -, Creature - Spirit Warrior, Ryan Alexander Lee, - +Morph, 011, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down creature with this reminder card. A card with morph can be turned face up any time for its morph cost.) +Sarkhan Emblem, 012, -, -, -, Emblem - Sarkhan, Daarken, At the beginning of your draw step draw two additional cards. At the beginning of your end step discard your hand. +Sorin Emblem, 013, -, -, -, Emblem - Sorin, Cynthia Sheppard, At the beginning of each opponent's upkeep that player sacrifices a creature. + +C14 - Commander 2014 (2014-11-07) + +Angel, 001, W, 4|4, -, Creature - Angel, Anthony Palumbo, Flying +Cat, 002, W, 2|2, -, Creature - Cat, Scott Chou, - +Goat, 003, W, -, -, Creature - Goat, Adam Paquette, - +Kor Soldier, 004, W, 1|1, -, Creature - Kor Soldier, Daren Bader, - +Pegasus, 005, W, 1|1, -, Creature - Pegasus, Greg Hildebrandt, Flying +Soldier, 006, W, 1|1, -, Creature - Soldier, Goran Josic, - +Spirit, 007, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying +Fish, 008, U, 3|3, -, Creature - Fish, Dan Scott, When this creature dies put a 6/6 blue Whale creature token onto the battlefield with "When this creature dies put a 9/9 blue Kraken creature token onto the battlefield." +Kraken, 009, U, 9|9, -, Creature - Kraken, Dan Scott, - +Whale, 010, U, 6|6, -, Creature - Whale, Dan Scott, When this creature dies put a 9/9 blue Kraken creature token onto the battlefield. +Zombie, 011, U, *|*, -, Creature - Zombie, Dave Kendall, - +Demon, 012, B, *|*, -, Creature - Demon, Pete Venters, Flying +Demon, 013, B, 5|5, -, Creature - Demon, Kev Walker, Flying +Germ, 014, B, -, -, Creature - Germ, Igor Kieryluk, - +Horror, 015, B, *|*, -, Creature - Horror, Jason Felix, - +Zombie, 016, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Goblin, 017, R, 1|1, -, Creature - Goblin, Dave Kendall, - +Ape, 018, G, 3|3, -, Creature - Ape, Lars Grant-West, - +Beast, 019, G, 3|3, -, Creature - Beast, Dave Allsop, - +Beast, 020, G, 4|4, -, Creature - Beast, Steve Prescott, - +Elemental, 021, G, 5|3, -, Creature - Elemental, Nils Hamm, - +Elephant, 022, G, 3|3, -, Creature - Elephant, Lars Grant-West, - +Elf Druid, 023, G, 1|1, -, Creature - Elf Druid, Raymond Swanland, {T}: Add {G} to your mana pool. +Elf Warrior, 024, G, 1|1, -, Creature - Elf Warrior, William O'Connor, - +Treefolk, 025, G, *|*, -, Creature - Treefolk, Filip Burburan, - +Wolf, 026, G, 2|2, -, Creature - Wolf, Daren Bader, - +Gargoyle, 027, -, 3|4, -, Artifact Creature - Gargoyle, Paul Bonner, Flying +Myr, 028, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, - +Pentavite, 029, -, 1|1, -, Artifact Creature - Pentavite, Greg Staples, Flying +Stoneforged Blade, 030, -, -, -, Artifact - Equipment, Eric Deschamps, Indestructible Equipped creature gets +5/+5 and has double strike. Equip {0} +Tuktuk The Returned, 031, -, 5|5, -, Legendary Artifact Creature - Goblin Golem, Franz Vohwinkel, - +Wurm, 032, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Deathtouch +Wurm, 033, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Lifelink +Teferi Emblem, 034, -, -, -, Emblem - Teferi, Tyler Jacobson, You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant. +Nixilis Emblem, 035, -, -, -, Emblem - Nixilis, Daarken, {1}{B} Sacrifice a creature: You gain X life and draw X cards where X is the sacrificed creature's power. +Daretti Emblem, 036, -, -, -, Emblem - Daretti, Dan Scott, Whenever an artifact is put into your graveyard from the battlefield return that card to the battlefield at the beginning of the next end step. + +DD3_EVG - Duel Decks Anthology Elves vs. Goblins (2014-12-05) + +Elemental, 001, G, 7|7, -, Creature - Elemental, Anthony S. Waters, Trample +Elf Warrior, 002, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, - +Goblin, 003, R, 1|1, -, Creature - Goblin, Dave Kendall, - + +DD3_JVC - Duel Decks Anthology Jace vs. Chandra (2014-12-05) + +Elemental Shaman, 004, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, - + +DD3_DVD - Duel Decks Anthology Divine vs. Demonic (2014-12-05) + +Spirit, 005, W, 1|1, -, Creature - Spirit, Luca Zontini, Flying +Demon, 006, B, *|*, -, Creature - Demon, Pete Venters, Flying +Thrull, 007, B, -, -, Creature - Thrull, Veronique Meignaud, - + +DD3_GVL - Duel Decks Anthology Garruk vs. Liliana (2014-12-05) + +Beast, 008, G, 3|3, -, Creature - Beast, John Donahue, - +Beast, 009, G, 4|4, -, Creature - Beast, Steve Prescott, - +Elephant, 010, G, 3|3, -, Creature - Elephant, Arnie Swekel, - +Bat, 011, B, 1|1, -, Creature - Bat, Wayne Reynolds, Flying + +FRF - Fate Reforged (2015-01-23) + +Monk, 001, W, 1|1, -, Creature - Monk, Steven Belledin, Prowess +Monk, 001T, W, 1|1, League, Creature - Monk, Magali Villeneuve, Prowess +Spirit, 002, W, 1|1, -, Creature - Spirit, Aaron Miller, Flying +Warrior, 003, B, 2|1, -, Creature - Warrior, Zoltan Boros, - +Manifest, 004, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down manifested creature with this reminder card. A manifested creature card can be turned face up any time for its mana cost. A face-down card can also be turned face up for its morph cost.) + +DDO - Duel Decks: Elspeth vs. Kiora (2015-02-27) + +Soldier, 066, W, 1|1, -, Creature - Soldier, Svetlin Velinov, - +Kraken, 067, U, 9|9, -, Creature - Kraken, Dan Scott, - + +DTK - Dragons of Tarkir (2015-03-27) + +Warrior, 001, W, 1|1, -, Creature - Warrior, Aaron Miller, - +Djinn Monk, 002, U, 2|2, -, Creature - Djinn Monk, Izzy, Flying +Zombie, 003, B, 2|2, -, Creature - Zombie, Vincent Proce, - +Zombie Horror, 004, B, *|*, -, Creature - Zombie Horror, Nils Hamm, - +Dragon, 005, R, 4|4, -, Creature - Dragon, Gabor Szikszai, Flying +Goblin, 006, R, 1|1, -, Creature - Goblin, Mike Bierek, - +Morph, 007, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down creature with this reminder card. A card with morph can be turned face up any time for its morph cost.) +Narset Emblem, 008, -, -, -, Emblem - Narset, Magali Villeneuve, Your opponents can't cast noncreature spells. + +MM2 - Modern Masters 2015 Edition (2015-05-22) + +Eldrazi Spawn, 001, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Spawn, 002, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Spawn, 003, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool. +Soldier, 004, W, 1|1, -, Creature - Soldier, Greg Staples, - +Spirit, 005, W, 1|1, -, Creature - Spirit, Mike Sass, Flying +Faerie Rogue, 006, B, 1|1, -, Creature - Faerie Rogue, Dave Allsop, Flying +Germ, 007, B, -, -, Creature - Germ, Igor Kieryluk, - +Thrull, 008, B, 1|1, -, Creature - Thrull, Mark Tedin, - +Elephant, 009, G, 3|3, -, Creature - Elephant, Lars Grant-West, - +Insect, 010, G, 1|1, -, Creature - Insect, Ron Spencer, - +Saproling, 011, G, 1|1, -, Creature - Saproling, Warren Mahy, - +Snake, 012, G, 1|1, -, Creature - Snake, Austin Hsu, - +Wolf, 013, G, 2|2, -, Creature - Wolf, Daren Bader, - +Worm, 014, B G, 1|1, -, Creature - Worm, Chuck Lukacs, - +Golem, 015, -, 3|3, -, Artifact Creature - Golem, Nic Klein, - +Myr, 016, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, - + +ORI - Magic Origins (2015-07-17) + +Angel, 001, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying +Knight, 002, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance +Soldier, 003, W, 1|1, -, Creature - Soldier, Steve Prescott, - +Demon, 004, B, 5|5, -, Creature - Demon, Kev Walker, Flying +Zombie, 005, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Goblin, 006, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, - +Ashaya the Awoken World, 007, G, 4|4, -, Legendary Creature - Elemental, Raymond Swanland, - +Elemental, 008, G, 2|2, -, Creature - Elemental, Marco Nelor, - +Elf Warrior, 009, G, 1|1, -, Creature - Elf Warrior, William O'Connor, - +Thopter, 010, -, 1|1, -, Artifact Creature - Thopter, Adam Paquette, Flying +Thopter, 011, -, 1|1, -, Artifact Creature - Thopter, Svetlin Velinov, Flying +Jace Emblem, 012, -, -, -, Emblem - Jace, Jaime Jones, Whenever you cast a spell target opponent puts the top five cards of his or her library into his or her graveyard. +Liliana Emblem, 013, -, -, -, Emblem - Liliana, Karla Ortiz, Whenever a creature dies return it to the battlefield under your control at the beginning of the next end step. +Chandra Emblem, 014, -, -, -, Emblem - Chandra, Eric Deschamps, At the beginning of your upkeep this emblem deals 3 damage to you. + +DDP - Duel Decks: Zendikar vs. Eldrazi (2015-08-28) + +Eldrazi Spawn, 076, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Spawn, 077, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Spawn, 078, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool. +Hellion, 079, R, 4|4, -, Creature - Hellion, Anthony Francisco, - +Plant, 080, G, -, -, Creature - Plant, Daren Bader, - + +BFZ - Battle for Zendikar (2015-10-09) + +Eldrazi, 001, -, 10|10, -, Creature - Eldrazi, Jack Wang, - +Eldrazi Scion, 002, -, 1|1, -, Creature - Eldrazi Scion, Izzy, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Scion, 003, -, 1|1, -, Creature - Eldrazi Scion, Winona Nelson, Sacrifice this creature: Add {1} to your mana pool. +Eldrazi Scion, 004, -, 1|1, -, Creature - Eldrazi Scion, Svetlin Velinov, Sacrifice this creature: Add {1} to your mana pool. +Knight Ally, 005, W, 2|2, -, Creature - Knight Ally, Josu Hernaiz, - +Kor Ally, 006, W, 1|1, -, Creature - Kor Ally, Jeremy Wilson, - +Octopus, 007, U, 8|8, -, Creature - Octopus, Craig J Spearing, - +Dragon, 008, R, 5|5, -, Creature - Dragon, Raymond Swanland, Flying +Plant, 009, G, 1|1, -, Creature - Plant, Sam Burley, - +Elemental, 009, R, 3|1, -, Creature - Elemental, Victor Adame Minguez, Trample Haste +Elemental, 011, G R, 5|5, -, Creature - Elemental, Brad Rigney, - +Gideon Emblem, 012, -, -, -, Emblem - Gideon, Eric Deschamps, - +Nixilis Emblem, 013, -, -, -, Emblem - Nixilis, Chris Rahn, - +Kiora Emblem, 014, -, -, -, Emblem - Kiora, Jason Chan, - + +C15 - Commander 2015 (2015-11-13) + +Shapeshifter, 001, -, 1|1, -, Creature - Shapeshifter, Franz Vohwinkel, Changeling +Angel, 002, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying +Cat, 003, W, 2|2, -, Creature - Cat, Jesper Ejsing, - +Knight, 004, W, 2|2, -, Creature - Knight, Hideaki Takamura, First strike +Knight, 005, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance +Drake, 006, U, 2|2, -, Creature - Drake, Svetlin Velinov, Flying +Germ, 007, B, -, -, Creature - Germ, Igor Kieryluk, - +Zombie, 008, B, 2|2, -, Creature - Zombie, Lucas Graciano, - +Dragon, 009, R, 5|5, -, Creature - Dragon, Jim Pavelec, Flying +Elemental Shaman, 010, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, - +Lightning Rager, 011, R, 5|1, -, Creature - Elemental, Svetlin Velinov, Trample Haste At the beginning of your end step sacrifice this creature. +Bear, 012, G, 2|2, -, Creature - Bear, Heather Hudson, - +Beast, 013, G, 4|4, -, Creature - Beast, Svetlin Velinov, - +Elephant, 014, G, 3|3, -, Creature - Elephant, Lars Grant-West, - +Frog Lizard, 015, G, 3|3, -, Creature - Frog Lizard, Jack Wang, - +Saproling, 016, G, 1|1, -, Creature - Saproling, Brad Rigney, - +Snake, 017, G, 1|1, -, Creature - Snake, Dan Scott, - +Spider, 018, G, 1|2, -, Creature - Spider, Daniel Ljunggren, Reach +Wolf, 019, G, 2|2, -, Creature - Wolf, David Palumbo, - +Elemental, 020, U R, 5|5, -, Creature - Elemental, Randy Gallegos, Flying +Snake, 021, G U, 1|1, -, Creature - Snake, Christopher Moeller, - +Spirit, 022, W B, 1|1, -, Creature - Spirit, Cliff Childs, Flying +Spirit, 023, -, *|*, -, Enchantment Creature - Spirit, Adam Paquette, This creature's power and toughness are each equal to the number of experience counters you have. +Gold, 024, -, -, -, Artifact, Richard Wright, Sacrifice this artifact: Add one mana of any color to your mana pool. diff --git a/Mage.Client/src/test/java/mage/client/game/TokensMtgImageSourceTest.java b/Mage.Client/src/test/java/mage/client/game/TokensMtgImageSourceTest.java new file mode 100644 index 0000000000..b33b81d0b9 --- /dev/null +++ b/Mage.Client/src/test/java/mage/client/game/TokensMtgImageSourceTest.java @@ -0,0 +1,32 @@ +package mage.client.game; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.plugins.card.dl.sources.CardImageSource; +import org.mage.plugins.card.dl.sources.TokensMtgImageSource; +import org.mage.plugins.card.images.CardDownloadData; + +/** + * + * @author Quercitron + */ +@Ignore +public class TokensMtgImageSourceTest { + + @Test + public void generateTokenUrlTest() throws Exception { + CardImageSource imageSource = TokensMtgImageSource.getInstance(); + + String url = imageSource.generateTokenUrl(new CardDownloadData("Thopter", "ORI", 0, false, 1, "ORI")); + Assert.assertEquals("http://tokens.mtg.onl/tokens/ORI_010-Thopter.jpg", url); + url = imageSource.generateTokenUrl(new CardDownloadData("Thopter", "ORI", 0, false, 2, "ORI")); + Assert.assertEquals("http://tokens.mtg.onl/tokens/ORI_011-Thopter.jpg", url); + + url = imageSource.generateTokenUrl(new CardDownloadData("Ashaya, the Awoken World", "ORI", 0, false, 0, "ORI")); + Assert.assertEquals("http://tokens.mtg.onl/tokens/ORI_007-Ashaya,-the-Awoken-World.jpg", url); + + url = imageSource.generateTokenUrl(new CardDownloadData("Emblem Gideon, Ally of Zendikar", "BFZ", 0, false, 0, null)); + Assert.assertEquals("http://tokens.mtg.onl/tokens/BFZ_012-Gideon-Emblem.jpg", url); + } +} diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 7216ba5c49..5be823cbe3 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -32,7 +32,7 @@ import java.util.List; import java.util.UUID; import mage.MageObject; import mage.ObjectColor; -import mage.abilities.Modes; +import mage.abilities.Mode; import mage.abilities.SpellAbility; import mage.abilities.costs.mana.ManaCosts; import mage.cards.Card; @@ -311,19 +311,16 @@ public class CardView extends SimpleCardView { this.mageObjectType = MageObjectType.SPELL; Spell spell = (Spell) card; for (SpellAbility spellAbility : spell.getSpellAbilities()) { - for (UUID modeId : spellAbility.getModes().getSelectedModes()) { - spellAbility.getModes().setActiveMode(modeId); - if (spellAbility.getTargets().size() > 0) { + for (Mode mode : spellAbility.getModes().getSelectedModes()) { + if (mode.getTargets().size() > 0) { setTargets(spellAbility.getTargets()); } } } // show for modal spell, which mode was choosen if (spell.getSpellAbility().isModal()) { - Modes modes = spell.getSpellAbility().getModes(); - for (UUID modeId : modes.getSelectedModes()) { - modes.setActiveMode(modeId); - this.rules.add("Chosen mode: " + spell.getSpellAbility().getEffects().getText(modes.get(modeId)) + ""); + for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) { + this.rules.add("Chosen mode: " + mode.getEffects().getText(mode) + ""); } } } diff --git a/Mage.Common/src/mage/view/EmblemView.java b/Mage.Common/src/mage/view/EmblemView.java index e4971d5cec..1681f05de9 100644 --- a/Mage.Common/src/mage/view/EmblemView.java +++ b/Mage.Common/src/mage/view/EmblemView.java @@ -28,6 +28,13 @@ public class EmblemView implements CommandObjectView, Serializable { rules = emblem.getAbilities().getRules(sourceCard.getName()); } + public EmblemView(Emblem emblem) { + id = emblem.getId(); + name = emblem.getName(); + expansionSetCode = emblem.getExpansionSetCodeForImage(); + rules = emblem.getAbilities().getRules(emblem.getName()); + } + @Override public String getExpansionSetCode() { return expansionSetCode; diff --git a/Mage.Common/src/mage/view/GameView.java b/Mage.Common/src/mage/view/GameView.java index 15731967b2..ad27715f41 100644 --- a/Mage.Common/src/mage/view/GameView.java +++ b/Mage.Common/src/mage/view/GameView.java @@ -123,6 +123,7 @@ public class GameView implements Serializable { checkPaid(stackObject.getId(), (StackAbility) stackObject); } else if (object instanceof Emblem) { Card sourceCard = game.getCard(((Emblem) object).getSourceId()); + CardView cardView; if (sourceCard != null) { if (!sourceCard.getCardType().contains(CardType.PLANESWALKER)) { if (sourceCard.getSecondCardFace() != null) { @@ -131,11 +132,12 @@ public class GameView implements Serializable { } ((StackAbility) stackObject).setName("Emblem " + sourceCard.getName()); ((StackAbility) stackObject).setExpansionSetCode(sourceCard.getExpansionSetCode()); + cardView = new CardView(new EmblemView(((Emblem) object), sourceCard)); } else { - throw new IllegalArgumentException("Source card for emblem not found."); + cardView = new CardView(new EmblemView((Emblem) object)); } stack.put(stackObject.getId(), - new StackAbilityView(game, (StackAbility) stackObject, object.getName(), new CardView(new EmblemView(((Emblem) object), sourceCard)))); + new StackAbilityView(game, (StackAbility) stackObject, object.getName(), cardView)); checkPaid(stackObject.getId(), ((StackAbility) stackObject)); } else { if (object instanceof StackAbility) { diff --git a/Mage.Common/src/mage/view/PlayerView.java b/Mage.Common/src/mage/view/PlayerView.java index ce66a5ffbe..51b49dc418 100644 --- a/Mage.Common/src/mage/view/PlayerView.java +++ b/Mage.Common/src/mage/view/PlayerView.java @@ -132,6 +132,8 @@ public class PlayerView implements Serializable { } } commandList.add(new EmblemView(emblem, sourceCard)); + } else { + commandList.add(new EmblemView(emblem)); } } } else if (commandObject instanceof Commander) { @@ -229,7 +231,7 @@ public class PlayerView implements Serializable { return this.userData; } - public List getCommadObjectList() { + public List getCommandObjectList() { return commandList; } diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index 6fb4d3c486..815c0ec13d 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; import mage.MageObject; +import mage.abilities.Mode; import mage.abilities.Modes; import mage.abilities.effects.Effect; import mage.cards.Card; @@ -98,13 +99,12 @@ public class StackAbilityView extends CardView { private void updateTargets(Game game, StackAbility ability) { List names = new ArrayList<>(); - for (UUID modeId : ability.getModes().getSelectedModes()) { - ability.getModes().setActiveMode(modeId); - if (ability.getTargets().size() > 0) { - setTargets(ability.getTargets()); + for (Mode mode : ability.getModes().getSelectedModes()) { + if (mode.getTargets().size() > 0) { + setTargets(mode.getTargets()); } else { List targetList = new ArrayList<>(); - for (Effect effect : ability.getEffects()) { + for (Effect effect : mode.getEffects()) { TargetPointer targetPointer = effect.getTargetPointer(); if (targetPointer instanceof FixedTarget) { targetList.add(((FixedTarget) targetPointer).getTarget()); @@ -132,9 +132,8 @@ public class StackAbilityView extends CardView { // show for modal ability, which mode was choosen if (ability.isModal()) { Modes modes = ability.getModes(); - for (UUID modeId : modes.getSelectedModes()) { - modes.setActiveMode(modeId); - this.rules.add("Chosen mode: " + ability.getEffects().getText(modes.get(modeId)) + ""); + for (Mode mode : modes.getSelectedModes()) { + this.rules.add("Chosen mode: " + mode.getEffects().getText(mode) + ""); } } } diff --git a/Mage.Plugins/Mage.Theme.Plugin/pom.xml b/Mage.Plugins/Mage.Theme.Plugin/pom.xml deleted file mode 100644 index f58f45d1d6..0000000000 --- a/Mage.Plugins/Mage.Theme.Plugin/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - - - org.mage - mage-plugins - 1.4.4 - - - mage-theme-plugin - jar - 0.5 - Mage Theme Plugin - Contains resources for drawing background - - - - ${project.groupId} - mage-common - ${mage-version} - - - log4j - log4j - provided - - - ${project.groupId} - mage-client - 1.4.4 - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.7 - 1.7 - - - - - mage-theme-plugin - - diff --git a/Mage.Plugins/Mage.Theme.Plugin/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java b/Mage.Plugins/Mage.Theme.Plugin/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java deleted file mode 100644 index f2a10884a1..0000000000 --- a/Mage.Plugins/Mage.Theme.Plugin/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java +++ /dev/null @@ -1,210 +0,0 @@ -package org.mage.plugins.theme; - -import mage.components.ImagePanel; -import mage.interfaces.plugin.ThemePlugin; -import mage.client.dialog.PreferencesDialog; -import net.xeoh.plugins.base.annotations.PluginImplementation; -import net.xeoh.plugins.base.annotations.events.Init; -import net.xeoh.plugins.base.annotations.events.PluginLoaded; -import net.xeoh.plugins.base.annotations.meta.Author; -import org.apache.log4j.Logger; - -import javax.imageio.ImageIO; -import javax.swing.*; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.*; -import java.io.InputStream; -import java.util.Map; - -@PluginImplementation -@Author(name = "nantuko") -public class ThemePluginImpl implements ThemePlugin { - - private static final Logger log = Logger.getLogger(ThemePluginImpl.class); - private static BufferedImage background; - private List flist = new List(); - private String BackgroundDir = "plugins" + File.separator + "plugin.data" + File.separator - + "background" + File.separator; - @Init - public void init() { - } - - @PluginLoaded - public void newPlugin(ThemePlugin plugin) { - log.info(plugin.toString() + " has been loaded."); - } - - public String toString() { - return "[Theme plugin, version 0.5]"; - } - - public boolean loadimages(){ - File filedir = new File(BackgroundDir); - File[] filelist = filedir.listFiles(); - if(filelist == null) return false; - if(filelist.length == 0) return false; - for(File f:filelist){ - String filename = f.getName().toLowerCase(); - if(filename != null && (filename.endsWith(".png") || filename.endsWith(".jpg") - || filename.endsWith(".bmp"))){ - flist.add(filename); - } - } - if(flist.getItemCount() == 0) return false; - return true; - } - - public void applyInGame(Map ui) { - BufferedImage background; - try { - - if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE_DEFAULT, - "true").equals("true")){ - - background = loadbuffer_default(); - - }else if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE_RANDOM, - "true").equals("true")){ - - background = loadbuffer_random(); - - }else if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE, "") != null){ - - background = loadbuffer_selected(); - - }else{ - background = loadbuffer_default(); - } - - - - /* - if(loadimages()){ - int it = (int)Math.abs(Math.random()*(flist.getItemCount())); - filename = BackgroundDir + flist.getItem(it); - background = ImageIO.read(new File(filename)); - }else{ - filename = "/dragon.png"; - InputStream is = this.getClass().getResourceAsStream(filename); - if (is == null) - throw new FileNotFoundException("Couldn't find " + filename + " in resources."); - background = ImageIO.read(is); - } - */ - if (background == null) { - throw new FileNotFoundException("Couldn't find background file in resources."); - } - - if (ui.containsKey("gamePanel") && ui.containsKey("jLayeredPane")) { - ImagePanel bgPanel = new ImagePanel(background, ImagePanel.TILED); - - unsetOpaque(ui.get("jSplitPane1")); - unsetOpaque(ui.get("pnlBattlefield")); - unsetOpaque(ui.get("jPanel3")); - unsetOpaque(ui.get("hand")); - unsetOpaque(ui.get("gameChatPanel")); - unsetOpaque(ui.get("userChatPanel")); - - ui.get("gamePanel").remove(ui.get("jLayeredPane")); - bgPanel.add(ui.get("jLayeredPane")); - ui.get("gamePanel").add(bgPanel); - } else { - log.error("error: no components"); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - return; - } - } - - - private BufferedImage loadbuffer_default() throws IOException{ - String filename = "/dragon.png"; - BufferedImage res; - InputStream is = this.getClass().getResourceAsStream(filename); - res = ImageIO.read(is); - return res; - } - - private BufferedImage loadbuffer_random() throws IOException{ - BufferedImage res; - if(loadimages()){ - int it = (int)Math.abs(Math.random()*(flist.getItemCount())); - String filename = BackgroundDir + flist.getItem(it); - res = ImageIO.read(new File(filename)); - return res; - } - return null; - } - - private BufferedImage loadbuffer_selected() throws IOException{ - BufferedImage res; - String path = PreferencesDialog.getCachedValue(PreferencesDialog. - KEY_BATTLEFIELD_IMAGE, ""); - if(path != null){ - res = ImageIO.read(new File(path)); - return res; - } - return null; - } - - - public JComponent updateTable(Map ui) { - ImagePanel bgPanel = createImagePanelInstance(); - - unsetOpaque(ui.get("jScrollPane1")); - unsetOpaque(ui.get("jPanel1")); - unsetOpaque(ui.get("tablesPanel")); - JComponent viewport = ui.get("jScrollPane1ViewPort"); - if (viewport != null) { - viewport.setBackground(new Color(255,255,255,50)); - } - return bgPanel; - } - - private ImagePanel createImagePanelInstance() { - if (background == null) { - synchronized (ThemePluginImpl.class) { - if (background == null) { - String filename = "/background.png"; - try { - if(PreferencesDialog.getCachedValue(PreferencesDialog. - KEY_BACKGROUND_IMAGE_DEFAULT, "true").equals("true")){ - InputStream is = this.getClass().getResourceAsStream(filename); - if (is == null) - throw new FileNotFoundException("Couldn't find " + filename + " in resources."); - background = ImageIO.read(is); - }else if(PreferencesDialog.getCachedValue(PreferencesDialog. - KEY_BACKGROUND_IMAGE, "") != null){ - String path = PreferencesDialog.getCachedValue(PreferencesDialog. - KEY_BATTLEFIELD_IMAGE, ""); - if(path != null){ - background = ImageIO.read(new File(path)); - }else{ - InputStream is = this.getClass().getResourceAsStream(filename); - if (is == null) - throw new FileNotFoundException("Couldn't find " + filename + " in resources."); - background = ImageIO.read(is); - } - } - - if (background == null) - throw new FileNotFoundException("Couldn't find " + filename + " in resources."); - } catch (Exception e) { - log.error(e.getMessage(), e); - return null; - } - } - } - } - return new ImagePanel(background, ImagePanel.SCALED); - } - - private void unsetOpaque(JComponent c) { - if (c != null) { - c.setOpaque(false); - } - } -} diff --git a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/background.png b/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/background.png deleted file mode 100644 index 01acc151f2..0000000000 Binary files a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/background.png and /dev/null differ diff --git a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/dk_gray.jpg b/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/dk_gray.jpg deleted file mode 100644 index 2e0776d606..0000000000 Binary files a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/dk_gray.jpg and /dev/null differ diff --git a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/dragon.png b/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/dragon.png deleted file mode 100644 index 634f56c21c..0000000000 Binary files a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/dragon.png and /dev/null differ diff --git a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/green.jpg b/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/green.jpg deleted file mode 100644 index f570525329..0000000000 Binary files a/Mage.Plugins/Mage.Theme.Plugin/src/main/resources/green.jpg and /dev/null differ diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml index e1a1ba632b..62bbc48c9c 100644 --- a/Mage.Plugins/pom.xml +++ b/Mage.Plugins/pom.xml @@ -16,7 +16,6 @@ Mage Plugins POM - Mage.Theme.Plugin Mage.Counter.Plugin diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java new file mode 100644 index 0000000000..48a05c3c81 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Momir.java @@ -0,0 +1,70 @@ +/* + * Copyright 2011 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.deck; + +import mage.cards.Card; +import mage.cards.decks.Deck; +import mage.cards.decks.DeckValidator; + +import java.util.*; + +/** + * + * @author nigelzor + */ +public class Momir extends DeckValidator { + + public Momir() { + this("Momir Basic"); + } + + public Momir(String name) { + super(name); + } + + @Override + public boolean validate(Deck deck) { + boolean valid = true; + + if (deck.getCards().size() != 60) { + invalid.put("Deck", "Must contain 60 cards: has " + deck.getCards().size() + " cards"); + valid = false; + } + + List basicLandNames = new ArrayList<>(Arrays.asList("Forest", "Island", "Mountain", "Swamp", "Plains")); + for (Card card : deck.getCards()) { + if (!basicLandNames.contains(card.getName())) { + invalid.put(card.getName(), "Only basic lands are allowed"); + valid = false; + } + } + + return valid; + } + +} diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml new file mode 100644 index 0000000000..295da53266 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + + org.mage + mage-server-plugins + 1.4.4 + + + mage-game-momirduel + jar + Mage Game Momir Basic Two Player + + + + ${project.groupId} + mage + ${project.version} + + + + + src + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + maven-resources-plugin + + UTF-8 + + + + + + mage-game-momirduel + + + + + diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java new file mode 100644 index 0000000000..e34dd81d2a --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java @@ -0,0 +1,159 @@ +/* + * 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.game; + +import mage.abilities.Ability; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.costs.mana.VariableManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.InfoEffect; +import mage.cards.Card; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; +import mage.constants.*; +import mage.game.command.Emblem; +import mage.game.match.MatchType; +import mage.game.permanent.token.EmptyToken; +import mage.game.turn.TurnMod; +import mage.players.Player; +import mage.util.CardUtil; + +import java.util.*; + +/** + * + * @author nigelzor + */ +public class MomirDuel extends GameImpl { + + public MomirDuel(MultiplayerAttackOption attackOption, RangeOfInfluence range, int freeMulligans, int startLife) { + super(attackOption, range, freeMulligans, startLife); + } + + public MomirDuel(final MomirDuel game) { + super(game); + } + + @Override + public MatchType getGameType() { + return new MomirDuelType(); + } + + @Override + public int getNumPlayers() { + return 2; + } + + @Override + protected void init(UUID choosingPlayerId) { + Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Vanguard effects")); + for (UUID playerId : state.getPlayerList(startingPlayerId)) { + Player player = getPlayer(playerId); + if (player != null) { + addEmblem(new MomirEmblem(), ability, playerId); + } + } + getState().addAbility(ability, null); + super.init(choosingPlayerId); + state.getTurnMods().add(new TurnMod(startingPlayerId, PhaseStep.DRAW)); + } + + @Override + public Set getOpponents(UUID playerId) { + Set opponents = new HashSet<>(); + for (UUID opponentId: this.getPlayer(playerId).getInRange()) { + if (!opponentId.equals(playerId)) { + opponents.add(opponentId); + } + } + return opponents; + } + + @Override + public boolean isOpponent(Player player, UUID playerToCheck) { + return !player.getId().equals(playerToCheck); + } + + @Override + public MomirDuel copy() { + return new MomirDuel(this); + } + +} + +// faking Vanguard as an Emblem; need to come back to this and add a new type of CommandObject +class MomirEmblem extends Emblem { + + public MomirEmblem() { + setName("Momir Vig, Simic Visionary"); + + // {X}, Discard a card: Put a token into play as a copy of a random creature card with converted mana cost X. Play this ability only any time you could play a sorcery and only once each turn. + LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(Zone.COMMAND, new MomirEffect(), new VariableManaCost()); + ability.addCost(new DiscardCardCost()); + ability.setTiming(TimingRule.SORCERY); + this.getAbilities().add(ability); + + } +} + +class MomirEffect extends OneShotEffect { + + private static final Random rnd = new Random(); + + public MomirEffect() { + super(Outcome.PutCreatureInPlay); + } + + public MomirEffect(MomirEffect effect) { + super(effect); + staticText = "Put a token into play as a copy of a random creature card with converted mana cost X"; + } + + @Override + public MomirEffect copy() { + return new MomirEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int value = source.getManaCostsToPay().getX(); + // should this be random across card names, or card printings? + CardCriteria criteria = new CardCriteria().types(CardType.CREATURE).convertedManaCost(value); + List options = CardRepository.instance.findCards(criteria); + if (options != null && !options.isEmpty()) { + Card card = options.get(rnd.nextInt(options.size())).getCard(); + EmptyToken token = new EmptyToken(); + CardUtil.copyTo(token).from(card); + token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), false, false); + } + return true; + } +} \ No newline at end of file diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuelMatch.java b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuelMatch.java new file mode 100644 index 0000000000..9f91e749f0 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuelMatch.java @@ -0,0 +1,55 @@ +/* + * 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.game; + +import mage.game.match.MatchImpl; +import mage.game.match.MatchOptions; + +/** + * + * @author nigelzor + */ +public class MomirDuelMatch extends MatchImpl { + + public MomirDuelMatch(MatchOptions options) { + super(options); + } + + @Override + public void startGame() throws GameException { + // Momir Vig, Simic Visionary gives +4 starting life + int startLife = 24; + + MomirDuel game = new MomirDuel(options.getAttackOption(), options.getRange(), options.getFreeMulligans(), startLife); + game.setStartMessage(this.createGameStartMessage()); + + this.initGame(game); + games.add(game); + } + +} diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuelType.java b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuelType.java new file mode 100644 index 0000000000..4ec7925477 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuelType.java @@ -0,0 +1,57 @@ +/* + * 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.game; + +import mage.game.match.MatchType; + +/** + * + * @author nigelzor + */ +public class MomirDuelType extends MatchType { + + public MomirDuelType() { + this.name = "Momir Basic Two Player Duel"; + this.maxPlayers = 2; + this.minPlayers = 2; + this.numTeams = 0; + this.useAttackOption = false; + this.useRange = false; + this.sideboardingAllowed = true; + } + + protected MomirDuelType(final MomirDuelType matchType){ + super(matchType); + } + + @Override + public MomirDuelType copy() { + return new MomirDuelType(this); + } + +} diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index d967799a0d..4fff0604db 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -1568,9 +1568,14 @@ public class ComputerPlayer extends PlayerImpl implements Player { return modes.getMode(); } //TODO: improve this; + AvailableMode: for (Mode mode : modes.getAvailableModes(source, game)) { - if (!modes.getSelectedModes().contains(mode.getId()) // select only modes not already selected - && mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and where targets are available + for (Mode selectedMode : modes.getSelectedModes()) { + if (selectedMode.getId().equals(mode.getId())) { + continue AvailableMode; + } + } + if (mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and where targets are available return mode; } } diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 96a5dfc7eb..ee62a58f33 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -64,7 +64,16 @@ import mage.constants.ManaType; import mage.constants.Outcome; import mage.constants.PhaseStep; import mage.constants.PlayerAction; +import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_ID_NO; +import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_ID_YES; import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_RESET_ALL; +import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_TEXT_NO; +import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_TEXT_YES; +import static mage.constants.PlayerAction.RESET_AUTO_SELECT_REPLACEMENT_EFFECTS; +import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_ABILITY_FIRST; +import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_ABILITY_LAST; +import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_NAME_FIRST; +import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_NAME_LAST; import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_RESET_ALL; import mage.constants.RangeOfInfluence; import mage.constants.Zone; @@ -790,6 +799,7 @@ public class HumanPlayer extends PlayerImpl { if (unpaid instanceof ManaCostsImpl) { specialManaAction(unpaid, game); // TODO: delve or convoke cards with PhyrexianManaCost won't work together (this combinaton does not exist yet) + @SuppressWarnings("unchecked") ManaCostsImpl costs = (ManaCostsImpl) unpaid; for (ManaCost cost : costs.getUnpaid()) { if (cost instanceof PhyrexianManaCost) { @@ -1284,12 +1294,27 @@ public class HumanPlayer extends PlayerImpl { if (modes.size() > 1) { MageObject obj = game.getObject(source.getSourceId()); Map modeMap = new LinkedHashMap<>(); + AvailableModes: for (Mode mode : modes.getAvailableModes(source, game)) { - if (!modes.getSelectedModes().contains(mode.getId()) // show only modes not already selected - && mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and where targets are available + int timesSelected = 0; + for (Mode selectedMode : modes.getSelectedModes()) { + if (mode.getId().equals(selectedMode.getId())) { + if (modes.isEachModeMoreThanOnce()) { + timesSelected++; + } else { + continue AvailableModes; + } + } + } + if (mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and needed targets have to be available String modeText = mode.getEffects().getText(mode); if (obj != null) { - modeText = modeText.replace("{source}", obj.getName()); + modeText = modeText.replace("{source}", obj.getName()).replace("{this}", obj.getName()); + } + if (modes.isEachModeMoreThanOnce()) { + if (timesSelected > 0) { + modeText = "(selected " + timesSelected + "x) " + modeText; + } } modeMap.put(mode.getId(), modeText); } @@ -1316,6 +1341,7 @@ public class HumanPlayer extends PlayerImpl { } return null; } + return modes.getMode(); } diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/LegendaryCube.java b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/LegendaryCube.java new file mode 100644 index 0000000000..9e5c8a3573 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/cubes/LegendaryCube.java @@ -0,0 +1,641 @@ +/* + * 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.tournament.cubes; + +import mage.game.draft.DraftCube; + +/** + * + * @author fireshoes + */ + +public class LegendaryCube extends DraftCube { + +public LegendaryCube() { + super("Legendary Cube (598 cards)"); // http://magic.wizards.com/en/MTGO/articles/archive/legendary-cube-cardlist-2015-11-09 + + cubeCards.add(new CardIdentity("Aboshan, Cephalid Emperor", "")); + cubeCards.add(new CardIdentity("Absorb Vis", "")); + cubeCards.add(new CardIdentity("Akroma's Memorial", "")); + cubeCards.add(new CardIdentity("Akroma's Vengeance", "")); + cubeCards.add(new CardIdentity("Akroma, Angel of Wrath", "")); + cubeCards.add(new CardIdentity("Akuta, Born of Ash", "")); + cubeCards.add(new CardIdentity("Alesha, Who Smiles at Death", "")); + cubeCards.add(new CardIdentity("Alhammarret's Archive", "")); + cubeCards.add(new CardIdentity("All Suns' Dawn", "")); + cubeCards.add(new CardIdentity("Anafenza, Kin-Tree Spirit", "")); + cubeCards.add(new CardIdentity("Anger of the Gods", "")); + cubeCards.add(new CardIdentity("Anticipate", "")); + cubeCards.add(new CardIdentity("Arashi, the Sky Asunder", "")); + cubeCards.add(new CardIdentity("Arcane Denial", "")); + cubeCards.add(new CardIdentity("Arcane Sanctum", "")); + cubeCards.add(new CardIdentity("Arcanis the Omnipotent", "")); + cubeCards.add(new CardIdentity("Arid Mesa", "")); + cubeCards.add(new CardIdentity("Armillary Sphere", "")); + cubeCards.add(new CardIdentity("Ascendant Evincar", "")); + cubeCards.add(new CardIdentity("Ashling the Pilgrim", "")); + cubeCards.add(new CardIdentity("Ashling, the Extinguisher", "")); + cubeCards.add(new CardIdentity("Atarka, World Render", "")); + cubeCards.add(new CardIdentity("Austere Command", "")); + cubeCards.add(new CardIdentity("Avacyn, Angel of Hope", "")); + cubeCards.add(new CardIdentity("Ayumi, the Last Visitor", "")); + cubeCards.add(new CardIdentity("Azami, Lady of Scrolls", "")); + cubeCards.add(new CardIdentity("Azorius Chancery", "")); + cubeCards.add(new CardIdentity("Azorius Signet", "")); + cubeCards.add(new CardIdentity("Azusa, Lost but Seeking", "")); + cubeCards.add(new CardIdentity("Bad River", "")); + cubeCards.add(new CardIdentity("Badlands", "")); + cubeCards.add(new CardIdentity("Banishing Light", "")); + cubeCards.add(new CardIdentity("Basalt Monolith", "")); + cubeCards.add(new CardIdentity("Basilisk Collar", "")); + cubeCards.add(new CardIdentity("Bayou", "")); + cubeCards.add(new CardIdentity("Beacon of Destruction", "")); + cubeCards.add(new CardIdentity("Beacon of Tomorrows", "")); + cubeCards.add(new CardIdentity("Beast Within", "")); + cubeCards.add(new CardIdentity("Berserkers' Onslaught", "")); + cubeCards.add(new CardIdentity("Black Market", "")); + cubeCards.add(new CardIdentity("Black Sun's Zenith", "")); + cubeCards.add(new CardIdentity("Blasphemous Act", "")); + cubeCards.add(new CardIdentity("Blood Crypt", "")); + cubeCards.add(new CardIdentity("Bloodstained Mire", "")); + cubeCards.add(new CardIdentity("Bonfire of the Damned", "")); + cubeCards.add(new CardIdentity("Boros Garrison", "")); + cubeCards.add(new CardIdentity("Boros Signet", "")); + cubeCards.add(new CardIdentity("Brago, King Eternal", "")); + cubeCards.add(new CardIdentity("Brainbite", "")); + cubeCards.add(new CardIdentity("Brainstorm", "")); + cubeCards.add(new CardIdentity("Breeding Pool", "")); + cubeCards.add(new CardIdentity("Brimaz, King of Oreskos", "")); + cubeCards.add(new CardIdentity("Brion Stoutarm", "")); + cubeCards.add(new CardIdentity("Brothers Yamazaki", "")); + cubeCards.add(new CardIdentity("Brothers Yamazaki", "")); + cubeCards.add(new CardIdentity("Caged Sun", "")); + cubeCards.add(new CardIdentity("Calciform Pools", "")); + cubeCards.add(new CardIdentity("Canopy Vista", "")); + cubeCards.add(new CardIdentity("Captain Sisay", "")); + cubeCards.add(new CardIdentity("Careful Consideration", "")); + cubeCards.add(new CardIdentity("Cascade Bluffs", "")); + cubeCards.add(new CardIdentity("Catch // Release", "")); + cubeCards.add(new CardIdentity("Cauldron of Souls", "")); + cubeCards.add(new CardIdentity("Chain Reaction", "")); + cubeCards.add(new CardIdentity("Chainer's Edict", "")); + cubeCards.add(new CardIdentity("Champion's Helm", "")); + cubeCards.add(new CardIdentity("Chandra, Fire of Kaladesh", "")); + cubeCards.add(new CardIdentity("Charcoal Diamond", "")); + cubeCards.add(new CardIdentity("Cho-Manno, Revolutionary", "")); + cubeCards.add(new CardIdentity("Chromatic Lantern", "")); + cubeCards.add(new CardIdentity("Chromatic Sphere", "")); + cubeCards.add(new CardIdentity("Chromatic Star", "")); + cubeCards.add(new CardIdentity("Cinder Glade", "")); + cubeCards.add(new CardIdentity("Clifftop Retreat", "")); + cubeCards.add(new CardIdentity("Coalition Relic", "")); + cubeCards.add(new CardIdentity("Coalition Victory", "")); + cubeCards.add(new CardIdentity("Coldsteel Heart", "")); + cubeCards.add(new CardIdentity("Commander Eesha", "")); + cubeCards.add(new CardIdentity("Compulsive Research", "")); + cubeCards.add(new CardIdentity("Condemn", "")); + cubeCards.add(new CardIdentity("Conflux", "")); + cubeCards.add(new CardIdentity("Contagion Clasp", "")); + cubeCards.add(new CardIdentity("Council's Judgment", "")); + cubeCards.add(new CardIdentity("Crackling Doom", "")); + cubeCards.add(new CardIdentity("Crib Swap", "")); + cubeCards.add(new CardIdentity("Cromat", "")); + cubeCards.add(new CardIdentity("Crovax, Ascendant Hero", "")); + cubeCards.add(new CardIdentity("Cruel Ultimatum", "")); + cubeCards.add(new CardIdentity("Crumbling Necropolis", "")); + cubeCards.add(new CardIdentity("Crux of Fate", "")); + cubeCards.add(new CardIdentity("Crystal Ball", "")); + cubeCards.add(new CardIdentity("Cultivate", "")); + cubeCards.add(new CardIdentity("Cyclonic Rift", "")); + cubeCards.add(new CardIdentity("Daretti, Scrap Savant", "")); + cubeCards.add(new CardIdentity("Dark Depths", "")); + cubeCards.add(new CardIdentity("Daxos of Meletis", "")); + cubeCards.add(new CardIdentity("Day of Destiny", "")); + cubeCards.add(new CardIdentity("Death Denied", "")); + cubeCards.add(new CardIdentity("Detention Sphere", "")); + cubeCards.add(new CardIdentity("Devour Flesh", "")); + cubeCards.add(new CardIdentity("Devour in Shadow", "")); + cubeCards.add(new CardIdentity("Diabolic Tutor", "")); + cubeCards.add(new CardIdentity("Diaochan, Artful Beauty", "")); + cubeCards.add(new CardIdentity("Dimir Aqueduct", "")); + cubeCards.add(new CardIdentity("Dimir Signet", "")); + cubeCards.add(new CardIdentity("Disenchant", "")); + cubeCards.add(new CardIdentity("Dismantling Blow", "")); + cubeCards.add(new CardIdentity("Divine Reckoning", "")); + cubeCards.add(new CardIdentity("Door to Nothingness", "")); + cubeCards.add(new CardIdentity("Doran, the Siege Tower", "")); + cubeCards.add(new CardIdentity("Doubling Season", "")); + cubeCards.add(new CardIdentity("Dragon Breath", "")); + cubeCards.add(new CardIdentity("Dragonlord Atarka", "")); + cubeCards.add(new CardIdentity("Dragonlord Dromoka", "")); + cubeCards.add(new CardIdentity("Dragonlord Ojutai", "")); + cubeCards.add(new CardIdentity("Dragonlord Silumgar", "")); + cubeCards.add(new CardIdentity("Dragonskull Summit", "")); + cubeCards.add(new CardIdentity("Drana, Kalastria Bloodchief", "")); + cubeCards.add(new CardIdentity("Drana, Liberator of Malakir", "")); + cubeCards.add(new CardIdentity("Dreadship Reef", "")); + cubeCards.add(new CardIdentity("Dromoka's Command", "")); + cubeCards.add(new CardIdentity("Drowned Catacomb", "")); + cubeCards.add(new CardIdentity("Duress", "")); + cubeCards.add(new CardIdentity("Dwynen, Gilt-Leaf Daen", "")); + cubeCards.add(new CardIdentity("Edric, Spymaster of Trest", "")); + cubeCards.add(new CardIdentity("Eiganjo Castle", "")); + cubeCards.add(new CardIdentity("Eight-and-a-Half-Tails", "")); + cubeCards.add(new CardIdentity("Eladamri's Call", "")); + cubeCards.add(new CardIdentity("Eladamri, Lord of Leaves", "")); + cubeCards.add(new CardIdentity("Elbrus, the Binding Blade", "")); + cubeCards.add(new CardIdentity("Elesh Norn, Grand Cenobite", "")); + cubeCards.add(new CardIdentity("Emrakul, the Aeons Torn", "")); + cubeCards.add(new CardIdentity("Endrek Sahr, Master Breeder", "")); + cubeCards.add(new CardIdentity("Engineered Explosives", "")); + cubeCards.add(new CardIdentity("Enlightened Tutor", "")); + cubeCards.add(new CardIdentity("Esper Charm", "")); + cubeCards.add(new CardIdentity("Everflowing Chalice", "")); + cubeCards.add(new CardIdentity("Evolving Wilds", "")); + cubeCards.add(new CardIdentity("Exava, Rakdos Blood Witch", "")); + cubeCards.add(new CardIdentity("Experiment Kraj", "")); + cubeCards.add(new CardIdentity("Explore", "")); + cubeCards.add(new CardIdentity("Explosive Vegetation", "")); + cubeCards.add(new CardIdentity("Expunge", "")); + cubeCards.add(new CardIdentity("Ezuri, Claw of Progress", "")); + cubeCards.add(new CardIdentity("Fact or Fiction", "")); + cubeCards.add(new CardIdentity("Faith's Fetters", "")); + cubeCards.add(new CardIdentity("Faithless Looting", "")); + cubeCards.add(new CardIdentity("Far // Away", "")); + cubeCards.add(new CardIdentity("Farseek", "")); + cubeCards.add(new CardIdentity("Fellwar Stone", "")); + cubeCards.add(new CardIdentity("Fetid Heath", "")); + cubeCards.add(new CardIdentity("Fiery Confluence", "")); + cubeCards.add(new CardIdentity("Fiery Fall", "")); + cubeCards.add(new CardIdentity("Finest Hour", "")); + cubeCards.add(new CardIdentity("Fire Diamond", "")); + cubeCards.add(new CardIdentity("Fire-Lit Thicket", "")); + cubeCards.add(new CardIdentity("Firebolt", "")); + cubeCards.add(new CardIdentity("Fires of Yavimaya", "")); + cubeCards.add(new CardIdentity("Flood Plain", "")); + cubeCards.add(new CardIdentity("Flooded Grove", "")); + cubeCards.add(new CardIdentity("Flooded Strand", "")); + cubeCards.add(new CardIdentity("Forbidden Alchemy", "")); + cubeCards.add(new CardIdentity("Foresee", "")); + cubeCards.add(new CardIdentity("Frontier Bivouac", "")); + cubeCards.add(new CardIdentity("Fungal Reaches", "")); + cubeCards.add(new CardIdentity("Genesis Wave", "")); + cubeCards.add(new CardIdentity("Genju of the Realm", "")); + cubeCards.add(new CardIdentity("Ghave, Guru of Spores", "")); + cubeCards.add(new CardIdentity("Ghoulcaller Gisa", "")); + cubeCards.add(new CardIdentity("Gift of the Gargantuan", "")); + cubeCards.add(new CardIdentity("Gilded Light", "")); + cubeCards.add(new CardIdentity("Gilded Lotus", "")); + cubeCards.add(new CardIdentity("Gisela, Blade of Goldnight", "")); + cubeCards.add(new CardIdentity("Glacial Fortress", "")); + cubeCards.add(new CardIdentity("Gleam of Resistance", "")); + cubeCards.add(new CardIdentity("Glissa Sunseeker", "")); + cubeCards.add(new CardIdentity("Glissa, the Traitor", "")); + cubeCards.add(new CardIdentity("Godless Shrine", "")); + cubeCards.add(new CardIdentity("Godo, Bandit Warlord", "")); + cubeCards.add(new CardIdentity("Gods Willing", "")); + cubeCards.add(new CardIdentity("Golgari Rot Farm", "")); + cubeCards.add(new CardIdentity("Golgari Signet", "")); + cubeCards.add(new CardIdentity("Grasslands", "")); + cubeCards.add(new CardIdentity("Graven Cairns", "")); + cubeCards.add(new CardIdentity("Grenzo, Dungeon Warden", "")); + cubeCards.add(new CardIdentity("Griselbrand", "")); + cubeCards.add(new CardIdentity("Gruul Signet", "")); + cubeCards.add(new CardIdentity("Gruul Turf", "")); + cubeCards.add(new CardIdentity("Hallowed Fountain", "")); + cubeCards.add(new CardIdentity("Hanna, Ship's Navigator", "")); + cubeCards.add(new CardIdentity("Harmonize", "")); + cubeCards.add(new CardIdentity("Heartless Hidetsugu", "")); + cubeCards.add(new CardIdentity("Hedron Archive", "")); + cubeCards.add(new CardIdentity("Helvault", "")); + cubeCards.add(new CardIdentity("Hero's Blade", "")); + cubeCards.add(new CardIdentity("Hero's Demise", "")); + cubeCards.add(new CardIdentity("Hero's Downfall", "")); + cubeCards.add(new CardIdentity("Heroes' Podium", "")); + cubeCards.add(new CardIdentity("Hide // Seek", "")); + cubeCards.add(new CardIdentity("Hidetsugu's Second Rite", "")); + cubeCards.add(new CardIdentity("Hinterland Harbor", "")); + cubeCards.add(new CardIdentity("Homicidal Seclusion", "")); + cubeCards.add(new CardIdentity("Honden of Cleansing Fire", "")); + cubeCards.add(new CardIdentity("Honden of Infinite Rage", "")); + cubeCards.add(new CardIdentity("Honden of Life's Web", "")); + cubeCards.add(new CardIdentity("Honden of Night's Reach", "")); + cubeCards.add(new CardIdentity("Honden of Seeing Winds", "")); + cubeCards.add(new CardIdentity("Honor-Worn Shaku", "")); + cubeCards.add(new CardIdentity("Horobi, Death's Wail", "")); + cubeCards.add(new CardIdentity("Hua Tuo, Honored Physician", "")); + cubeCards.add(new CardIdentity("Hull Breach", "")); + cubeCards.add(new CardIdentity("Hythonia the Cruel", "")); + cubeCards.add(new CardIdentity("Ichor Wellspring", "")); + cubeCards.add(new CardIdentity("Impulse", "")); + cubeCards.add(new CardIdentity("Into the Roil", "")); + cubeCards.add(new CardIdentity("Isamaru, Hound of Konda", "")); + cubeCards.add(new CardIdentity("Isao, Enlightened Bushi", "")); + cubeCards.add(new CardIdentity("Isolated Chapel", "")); + cubeCards.add(new CardIdentity("Ith, High Arcanist", "")); + cubeCards.add(new CardIdentity("Izzet Boilerworks", "")); + cubeCards.add(new CardIdentity("Izzet Signet", "")); + cubeCards.add(new CardIdentity("Jace, Vryn's Prodigy", "")); + cubeCards.add(new CardIdentity("Jareth, Leonine Titan", "")); + cubeCards.add(new CardIdentity("Jaya Ballard, Task Mage", "")); + cubeCards.add(new CardIdentity("Jazal Goldmane", "")); + cubeCards.add(new CardIdentity("Jenara, Asura of War", "")); + cubeCards.add(new CardIdentity("Jeska, Warrior Adept", "")); + cubeCards.add(new CardIdentity("Jeskai Ascendancy", "")); + cubeCards.add(new CardIdentity("Jin-Gitaxias, Core Augur", "")); + cubeCards.add(new CardIdentity("Jiwari, the Earth Aflame", "")); + cubeCards.add(new CardIdentity("Jor Kadeen, the Prevailer", "")); + cubeCards.add(new CardIdentity("Jungle Shrine", "")); + cubeCards.add(new CardIdentity("Kaervek the Merciless", "")); + cubeCards.add(new CardIdentity("Kagemaro, First to Suffer", "")); + cubeCards.add(new CardIdentity("Kaho, Minamo Historian", "")); + cubeCards.add(new CardIdentity("Kalemne, Disciple of Iroas", "")); + cubeCards.add(new CardIdentity("Kalitas, Bloodchief of Ghet", "")); + cubeCards.add(new CardIdentity("Kamahl, Fist of Krosa", "")); + cubeCards.add(new CardIdentity("Kamahl, Pit Fighter", "")); + cubeCards.add(new CardIdentity("Karador, Ghost Chieftain", "")); + cubeCards.add(new CardIdentity("Karlov of the Ghost Council", "")); + cubeCards.add(new CardIdentity("Karn, Silver Golem", "")); + cubeCards.add(new CardIdentity("Kataki, War's Wage", "")); + cubeCards.add(new CardIdentity("Kazuul, Tyrant of the Cliffs", "")); + cubeCards.add(new CardIdentity("Keiga, the Tide Star", "")); + cubeCards.add(new CardIdentity("Kemba, Kha Regent", "")); + cubeCards.add(new CardIdentity("Keranos, God of Storms", "")); + cubeCards.add(new CardIdentity("Kira, Great Glass-Spinner", "")); + cubeCards.add(new CardIdentity("Kodama of the North Tree", "")); + cubeCards.add(new CardIdentity("Kodama's Reach", "")); + cubeCards.add(new CardIdentity("Kokusho, the Evening Star", "")); + cubeCards.add(new CardIdentity("Kolaghan's Command", "")); + cubeCards.add(new CardIdentity("Kolaghan, the Storm's Fury", "")); + cubeCards.add(new CardIdentity("Konda's Banner", "")); + cubeCards.add(new CardIdentity("Kongming, 'Sleeping Dragon'", "")); + cubeCards.add(new CardIdentity("Kozilek, Butcher of Truth", "")); + cubeCards.add(new CardIdentity("Krenko, Mob Boss", "")); + cubeCards.add(new CardIdentity("Kresh the Bloodbraided", "")); + cubeCards.add(new CardIdentity("Krosan Grip", "")); + cubeCards.add(new CardIdentity("Krosan Verge", "")); + cubeCards.add(new CardIdentity("Kumano, Master Yamabushi", "")); + cubeCards.add(new CardIdentity("Kurkesh, Onakke Ancient", "")); + cubeCards.add(new CardIdentity("Kytheon, Hero of Akros", "")); + cubeCards.add(new CardIdentity("Last Stand", "")); + cubeCards.add(new CardIdentity("Lavalanche", "")); + cubeCards.add(new CardIdentity("Legacy Weapon", "")); + cubeCards.add(new CardIdentity("Life's Legacy", "")); + cubeCards.add(new CardIdentity("Lightning Bolt", "")); + cubeCards.add(new CardIdentity("Lightning Greaves", "")); + cubeCards.add(new CardIdentity("Liliana, Heretical Healer", "")); + cubeCards.add(new CardIdentity("Linvala, Keeper of Silence", "")); + cubeCards.add(new CardIdentity("Llawan, Cephalid Empress", "")); + cubeCards.add(new CardIdentity("Lorthos, the Tidemaker", "")); + cubeCards.add(new CardIdentity("Lu Xun, Scholar General", "")); + cubeCards.add(new CardIdentity("Lyzolda, the Blood Witch", "")); + cubeCards.add(new CardIdentity("Maelstrom Nexus", "")); + cubeCards.add(new CardIdentity("Maelstrom Wanderer", "")); + cubeCards.add(new CardIdentity("Maga, Traitor to Mortals", "")); + cubeCards.add(new CardIdentity("Mage's Guile", "")); + cubeCards.add(new CardIdentity("Mageta the Lion", "")); + cubeCards.add(new CardIdentity("Mana Reflection", "")); + cubeCards.add(new CardIdentity("Marath, Will of the Wild", "")); + cubeCards.add(new CardIdentity("Marble Diamond", "")); + cubeCards.add(new CardIdentity("March of the Machines", "")); + cubeCards.add(new CardIdentity("Marchesa, the Black Rose", "")); + cubeCards.add(new CardIdentity("Marsh Flats", "")); + cubeCards.add(new CardIdentity("Mayael's Aria", "")); + cubeCards.add(new CardIdentity("Melek, Izzet Paragon", "")); + cubeCards.add(new CardIdentity("Memnarch", "")); + cubeCards.add(new CardIdentity("Meng Huo, Barbarian King", "")); + cubeCards.add(new CardIdentity("Meren of Clan Nel Toth", "")); + cubeCards.add(new CardIdentity("Mikaeus, the Lunarch", "")); + cubeCards.add(new CardIdentity("Mikaeus, the Unhallowed", "")); + cubeCards.add(new CardIdentity("Mikokoro, Center of the Sea", "")); + cubeCards.add(new CardIdentity("Minamo, School at Water's Edge", "")); + cubeCards.add(new CardIdentity("Mind Stone", "")); + cubeCards.add(new CardIdentity("Mind's Eye", "")); + cubeCards.add(new CardIdentity("Mindslaver", "")); + cubeCards.add(new CardIdentity("Mirari", "")); + cubeCards.add(new CardIdentity("Mirari's Wake", "")); + cubeCards.add(new CardIdentity("Miren, the Moaning Well", "")); + cubeCards.add(new CardIdentity("Mirri the Cursed", "")); + cubeCards.add(new CardIdentity("Mirri, Cat Warrior", "")); + cubeCards.add(new CardIdentity("Misdirection", "")); + cubeCards.add(new CardIdentity("Misty Rainforest", "")); + cubeCards.add(new CardIdentity("Mizzium Mortars", "")); + cubeCards.add(new CardIdentity("Mizzix of the Izmagnus", "")); + cubeCards.add(new CardIdentity("Mizzix's Mastery", "")); + cubeCards.add(new CardIdentity("Molten Slagheap", "")); + cubeCards.add(new CardIdentity("Momentous Fall", "")); + cubeCards.add(new CardIdentity("Mortify", "")); + cubeCards.add(new CardIdentity("Moss Diamond", "")); + cubeCards.add(new CardIdentity("Mountain Valley", "")); + cubeCards.add(new CardIdentity("Muddle the Mixture", "")); + cubeCards.add(new CardIdentity("Multani, Maro-Sorcerer", "")); + cubeCards.add(new CardIdentity("Muzzio, Visionary Architect", "")); + cubeCards.add(new CardIdentity("Mycosynth Wellspring", "")); + cubeCards.add(new CardIdentity("Myojin of Cleansing Fire", "")); + cubeCards.add(new CardIdentity("Myojin of Life's Web", "")); + cubeCards.add(new CardIdentity("Myriad Landscape", "")); + cubeCards.add(new CardIdentity("Mystic Confluence", "")); + cubeCards.add(new CardIdentity("Mystic Gate", "")); + cubeCards.add(new CardIdentity("Mystic Monastery", "")); + cubeCards.add(new CardIdentity("Nagao, Bound by Honor", "")); + cubeCards.add(new CardIdentity("Nath of the Gilt-Leaf", "")); + cubeCards.add(new CardIdentity("Naturalize", "")); + cubeCards.add(new CardIdentity("Negate", "")); + cubeCards.add(new CardIdentity("Night's Whisper", "")); + cubeCards.add(new CardIdentity("Nissa's Revelation", "")); + cubeCards.add(new CardIdentity("Nissa, Vastwood Seer", "")); + cubeCards.add(new CardIdentity("Niv-Mizzet, Dracogenius", "")); + cubeCards.add(new CardIdentity("Niv-Mizzet, the Firemind", "")); + cubeCards.add(new CardIdentity("Nomad Outpost", "")); + cubeCards.add(new CardIdentity("Noyan Dar, Roil Shaper", "")); + cubeCards.add(new CardIdentity("Ob Nixilis, the Fallen", "")); + cubeCards.add(new CardIdentity("Obelisk of Alara", "")); + cubeCards.add(new CardIdentity("Oblation", "")); + cubeCards.add(new CardIdentity("Oblivion Ring", "")); + cubeCards.add(new CardIdentity("Oblivion Stone", "")); + cubeCards.add(new CardIdentity("Obzedat, Ghost Council", "")); + cubeCards.add(new CardIdentity("Odric, Master Tactician", "")); + cubeCards.add(new CardIdentity("Okina, Temple to the Grandfathers", "")); + cubeCards.add(new CardIdentity("Omnath, Locus of Mana", "")); + cubeCards.add(new CardIdentity("Omnath, Locus of Rage", "")); + cubeCards.add(new CardIdentity("Opal-Eye, Konda's Yojimbo", "")); + cubeCards.add(new CardIdentity("Opulent Palace", "")); + cubeCards.add(new CardIdentity("Oran-Rief, the Vastwood", "")); + cubeCards.add(new CardIdentity("Orim, Samite Healer", "")); + cubeCards.add(new CardIdentity("Orzhov Basilica", "")); + cubeCards.add(new CardIdentity("Orzhov Signet", "")); + cubeCards.add(new CardIdentity("Outpost Siege", "")); + cubeCards.add(new CardIdentity("Overgrown Tomb", "")); + cubeCards.add(new CardIdentity("Panoptic Mirror", "")); + cubeCards.add(new CardIdentity("Pariah", "")); + cubeCards.add(new CardIdentity("Path to Exile", "")); + cubeCards.add(new CardIdentity("Pernicious Deed", "")); + cubeCards.add(new CardIdentity("Phage the Untouchable", "")); + cubeCards.add(new CardIdentity("Phyrexian Arena", "")); + cubeCards.add(new CardIdentity("Pia and Kiran Nalaar", "")); + cubeCards.add(new CardIdentity("Pianna, Nomad Captain", "")); + cubeCards.add(new CardIdentity("Pithing Needle", "")); + cubeCards.add(new CardIdentity("Plateau", "")); + cubeCards.add(new CardIdentity("Polluted Delta", "")); + cubeCards.add(new CardIdentity("Polukranos, World Eater", "")); + cubeCards.add(new CardIdentity("Praetor's Counsel", "")); + cubeCards.add(new CardIdentity("Prairie Stream", "")); + cubeCards.add(new CardIdentity("Prime Speaker Zegana", "")); + cubeCards.add(new CardIdentity("Primeval Bounty", "")); + cubeCards.add(new CardIdentity("Prismatic Lens", "")); + cubeCards.add(new CardIdentity("Progenitus", "")); + cubeCards.add(new CardIdentity("Prophetic Prism", "")); + cubeCards.add(new CardIdentity("Psychotic Fury", "")); + cubeCards.add(new CardIdentity("Pure // Simple", "")); + cubeCards.add(new CardIdentity("Putrefy", "")); + cubeCards.add(new CardIdentity("Pyromancer's Goggles", "")); + cubeCards.add(new CardIdentity("Radha, Heir to Keld", "")); + cubeCards.add(new CardIdentity("Radiant Purge", "")); + cubeCards.add(new CardIdentity("Radiant's Judgment", "")); + cubeCards.add(new CardIdentity("Rafiq of the Many", "")); + cubeCards.add(new CardIdentity("Rakdos Carnarium", "")); + cubeCards.add(new CardIdentity("Rakdos Signet", "")); + cubeCards.add(new CardIdentity("Rakka Mar", "")); + cubeCards.add(new CardIdentity("Rampant Growth", "")); + cubeCards.add(new CardIdentity("Ray of Command", "")); + cubeCards.add(new CardIdentity("Read the Bones", "")); + cubeCards.add(new CardIdentity("Recoup", "")); + cubeCards.add(new CardIdentity("Reflecting Pool", "")); + cubeCards.add(new CardIdentity("Regrowth", "")); + cubeCards.add(new CardIdentity("Reiterate", "")); + cubeCards.add(new CardIdentity("Reki, the History of Kamigawa", "")); + cubeCards.add(new CardIdentity("Repeal", "")); + cubeCards.add(new CardIdentity("Repulse", "")); + cubeCards.add(new CardIdentity("Rescind", "")); + cubeCards.add(new CardIdentity("Reya Dawnbringer", "")); + cubeCards.add(new CardIdentity("Rhys the Redeemed", "")); + cubeCards.add(new CardIdentity("Righteous Confluence", "")); + cubeCards.add(new CardIdentity("Rings of Brighthearth", "")); + cubeCards.add(new CardIdentity("Rocky Tar Pit", "")); + cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary", "")); + cubeCards.add(new CardIdentity("Rootbound Crag", "")); + cubeCards.add(new CardIdentity("Rorix Bladewing", "")); + cubeCards.add(new CardIdentity("Rugged Prairie", "")); + cubeCards.add(new CardIdentity("Rupture Spire", "")); + cubeCards.add(new CardIdentity("Ruric Thar, the Unbowed", "")); + cubeCards.add(new CardIdentity("Rush of Knowledge", "")); + cubeCards.add(new CardIdentity("Ryusei, the Falling Star", "")); + cubeCards.add(new CardIdentity("Sachi, Daughter of Seshiro", "")); + cubeCards.add(new CardIdentity("Sacred Foundry", "")); + cubeCards.add(new CardIdentity("Saffi Eriksdotter", "")); + cubeCards.add(new CardIdentity("Sakashima the Impostor", "")); + cubeCards.add(new CardIdentity("Saltcrusted Steppe", "")); + cubeCards.add(new CardIdentity("Sandsteppe Citadel", "")); + cubeCards.add(new CardIdentity("Savage Lands", "")); + cubeCards.add(new CardIdentity("Savannah", "")); + cubeCards.add(new CardIdentity("Scalding Tarn", "")); + cubeCards.add(new CardIdentity("Scion of the Ur-Dragon", "")); + cubeCards.add(new CardIdentity("Scrap", "")); + cubeCards.add(new CardIdentity("Scrubland", "")); + cubeCards.add(new CardIdentity("Sculpting Steel", "")); + cubeCards.add(new CardIdentity("Search for Tomorrow", "")); + cubeCards.add(new CardIdentity("Seaside Citadel", "")); + cubeCards.add(new CardIdentity("Seizan, Perverter of Truth", "")); + cubeCards.add(new CardIdentity("Selesnya Sanctuary", "")); + cubeCards.add(new CardIdentity("Selesnya Signet", "")); + cubeCards.add(new CardIdentity("Sensei Golden-Tail", "")); + cubeCards.add(new CardIdentity("Sharuum the Hegemon", "")); + cubeCards.add(new CardIdentity("Shattergang Brothers", "")); + cubeCards.add(new CardIdentity("Sheoldred, Whispering One", "")); + cubeCards.add(new CardIdentity("Shinka, the Bloodsoaked Keep", "")); + cubeCards.add(new CardIdentity("Shizo, Death's Storehouse", "")); + cubeCards.add(new CardIdentity("Shu Yun, the Silent Tempest", "")); + cubeCards.add(new CardIdentity("Sidar Jabari", "")); + cubeCards.add(new CardIdentity("Sidisi, Brood Tyrant", "")); + cubeCards.add(new CardIdentity("Sidisi, Undead Vizier", "")); + cubeCards.add(new CardIdentity("Sigarda, Host of Herons", "")); + cubeCards.add(new CardIdentity("Sign in Blood", "")); + cubeCards.add(new CardIdentity("Silence the Believers", "")); + cubeCards.add(new CardIdentity("Silumgar's Command", "")); + cubeCards.add(new CardIdentity("Silumgar, the Drifting Death", "")); + cubeCards.add(new CardIdentity("Silvos, Rogue Elemental", "")); + cubeCards.add(new CardIdentity("Simic Growth Chamber", "")); + cubeCards.add(new CardIdentity("Simic Signet", "")); + cubeCards.add(new CardIdentity("Skullbriar, the Walking Grave", "")); + cubeCards.add(new CardIdentity("Sky Diamond", "")); + cubeCards.add(new CardIdentity("Skyship Weatherlight", "")); + cubeCards.add(new CardIdentity("Smoldering Marsh", "")); + cubeCards.add(new CardIdentity("Song of the Dryads", "")); + cubeCards.add(new CardIdentity("Sorin's Vengeance", "")); + cubeCards.add(new CardIdentity("Soul's Fire", "")); + cubeCards.add(new CardIdentity("Sphere of the Suns", "")); + cubeCards.add(new CardIdentity("Sphinx-Bone Wand", "")); + cubeCards.add(new CardIdentity("Spine of Ish Sah", "")); + cubeCards.add(new CardIdentity("Spirit of the Night", "")); + cubeCards.add(new CardIdentity("Spite // Malice", "")); + cubeCards.add(new CardIdentity("Squee, Goblin Nabob", "")); + cubeCards.add(new CardIdentity("Staff of Nin", "")); + cubeCards.add(new CardIdentity("Steam Vents", "")); + cubeCards.add(new CardIdentity("Stitcher Geralf", "")); + cubeCards.add(new CardIdentity("Stomping Ground", "")); + cubeCards.add(new CardIdentity("Stubborn Denial", "")); + cubeCards.add(new CardIdentity("Sulfur Falls", "")); + cubeCards.add(new CardIdentity("Sultai Charm", "")); + cubeCards.add(new CardIdentity("Sun Ce, Young Conquerer", "")); + cubeCards.add(new CardIdentity("Sun Quan, Lord of Wu", "")); + cubeCards.add(new CardIdentity("Sunken Hollow", "")); + cubeCards.add(new CardIdentity("Sunken Ruins", "")); + cubeCards.add(new CardIdentity("Sunpetal Grove", "")); + cubeCards.add(new CardIdentity("Surrak Dragonclaw", "")); + cubeCards.add(new CardIdentity("Surrak, the Hunt Caller", "")); + cubeCards.add(new CardIdentity("Swiftfoot Boots", "")); + cubeCards.add(new CardIdentity("Sword of the Animist", "")); + cubeCards.add(new CardIdentity("Sword of the Chosen", "")); + cubeCards.add(new CardIdentity("Sydri, Galvanic Genius", "")); + cubeCards.add(new CardIdentity("Sygg, River Cutthroat", "")); + cubeCards.add(new CardIdentity("Sygg, River Guide", "")); + cubeCards.add(new CardIdentity("Sylvan Bounty", "")); + cubeCards.add(new CardIdentity("Tahngarth, Talruum Hero", "")); + cubeCards.add(new CardIdentity("Taiga", "")); + cubeCards.add(new CardIdentity("Tainted Pact", "")); + cubeCards.add(new CardIdentity("Tajic, Blade of the Legion", "")); + cubeCards.add(new CardIdentity("Talisman of Dominance", "")); + cubeCards.add(new CardIdentity("Talisman of Impulse", "")); + cubeCards.add(new CardIdentity("Talisman of Indulgence", "")); + cubeCards.add(new CardIdentity("Talisman of Progress", "")); + cubeCards.add(new CardIdentity("Talisman of Unity", "")); + cubeCards.add(new CardIdentity("Talrand, Sky Summoner", "")); + cubeCards.add(new CardIdentity("Tasigur, the Golden Fang", "")); + cubeCards.add(new CardIdentity("Tatsumasa, the Dragon's Fang", "")); + cubeCards.add(new CardIdentity("Teferi, Mage of Zhalfir", "")); + cubeCards.add(new CardIdentity("Temple Garden", "")); + cubeCards.add(new CardIdentity("Temple of Abandon", "")); + cubeCards.add(new CardIdentity("Temple of Deceit", "")); + cubeCards.add(new CardIdentity("Temple of Enlightenment", "")); + cubeCards.add(new CardIdentity("Temple of Epiphany", "")); + cubeCards.add(new CardIdentity("Temple of Malady", "")); + cubeCards.add(new CardIdentity("Temple of Malice", "")); + cubeCards.add(new CardIdentity("Temple of Mystery", "")); + cubeCards.add(new CardIdentity("Temple of Plenty", "")); + cubeCards.add(new CardIdentity("Temple of Silence", "")); + cubeCards.add(new CardIdentity("Temple of the False God", "")); + cubeCards.add(new CardIdentity("Temple of Triumph", "")); + cubeCards.add(new CardIdentity("Temur Ascendancy", "")); + cubeCards.add(new CardIdentity("Temur Battle Rage", "")); + cubeCards.add(new CardIdentity("Tenza, Godo's Maul", "")); + cubeCards.add(new CardIdentity("Terminate", "")); + cubeCards.add(new CardIdentity("Terramorphic Expanse", "")); + cubeCards.add(new CardIdentity("Terrarion", "")); + cubeCards.add(new CardIdentity("Teysa, Envoy of Ghosts", "")); + cubeCards.add(new CardIdentity("Tezzeret the Seeker", "")); + cubeCards.add(new CardIdentity("Thada Adel, Acquisitor", "")); + cubeCards.add(new CardIdentity("That Which Was Taken", "")); + cubeCards.add(new CardIdentity("The Mimeoplasm", "")); + cubeCards.add(new CardIdentity("Thirst for Knowledge", "")); + cubeCards.add(new CardIdentity("Thran Dynamo", "")); + cubeCards.add(new CardIdentity("Thraximundar", "")); + cubeCards.add(new CardIdentity("Thrun, the Last Troll", "")); + cubeCards.add(new CardIdentity("Time of Need", "")); + cubeCards.add(new CardIdentity("Time Stop", "")); + cubeCards.add(new CardIdentity("Time Warp", "")); + cubeCards.add(new CardIdentity("Titania, Protector of Argoth", "")); + cubeCards.add(new CardIdentity("Tithe", "")); + cubeCards.add(new CardIdentity("Tolsimir Wolfblood", "")); + cubeCards.add(new CardIdentity("Tomorrow, Azami's Familiar", "")); + cubeCards.add(new CardIdentity("Tormenting Voice", "")); + cubeCards.add(new CardIdentity("Toshiro Umezawa", "")); + cubeCards.add(new CardIdentity("Toxic Deluge", "")); + cubeCards.add(new CardIdentity("Trading Post", "")); + cubeCards.add(new CardIdentity("Tragic Slip", "")); + cubeCards.add(new CardIdentity("Transguild Promenade", "")); + cubeCards.add(new CardIdentity("Traumatic Visions", "")); + cubeCards.add(new CardIdentity("Tribute to Hunger", "")); + cubeCards.add(new CardIdentity("Tromokratis", "")); + cubeCards.add(new CardIdentity("Tropical Island", "")); + cubeCards.add(new CardIdentity("Tsabo Tavoc", "")); + cubeCards.add(new CardIdentity("Tuktuk the Explorer", "")); + cubeCards.add(new CardIdentity("Tumble Magnet", "")); + cubeCards.add(new CardIdentity("Tundra", "")); + cubeCards.add(new CardIdentity("Turn // Burn", "")); + cubeCards.add(new CardIdentity("Twilight Mire", "")); + cubeCards.add(new CardIdentity("Tymaret, the Murder King", "")); + cubeCards.add(new CardIdentity("Ugin's Insight", "")); + cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre", "")); + cubeCards.add(new CardIdentity("Ultimate Price", "")); + cubeCards.add(new CardIdentity("Underground Sea", "")); + cubeCards.add(new CardIdentity("Unexpectedly Absent", "")); + cubeCards.add(new CardIdentity("Unstable Obelisk", "")); + cubeCards.add(new CardIdentity("Untaidake, the Cloud Keeper", "")); + cubeCards.add(new CardIdentity("Urabrask the Hidden", "")); + cubeCards.add(new CardIdentity("Urban Evolution", "")); + cubeCards.add(new CardIdentity("Urza's Rage", "")); + cubeCards.add(new CardIdentity("Utter End", "")); + cubeCards.add(new CardIdentity("Uyo, Silent Prophet", "")); + cubeCards.add(new CardIdentity("Valorous Stance", "")); + cubeCards.add(new CardIdentity("Vampiric Tutor", "")); + cubeCards.add(new CardIdentity("Vanish into Memory", "")); + cubeCards.add(new CardIdentity("Vedalken Orrery", "")); + cubeCards.add(new CardIdentity("Vendetta", "")); + cubeCards.add(new CardIdentity("Vendilion Clique", "")); + cubeCards.add(new CardIdentity("Venser, Shaper Savant", "")); + cubeCards.add(new CardIdentity("Verdant Catacombs", "")); + cubeCards.add(new CardIdentity("Verdant Confluence", "")); + cubeCards.add(new CardIdentity("Verdeloth the Ancient", "")); + cubeCards.add(new CardIdentity("Vicious Shadows", "")); + cubeCards.add(new CardIdentity("Visara the Dreadful", "")); + cubeCards.add(new CardIdentity("Vish Kal, Blood Arbiter", "")); + cubeCards.add(new CardIdentity("Volcanic Island", "")); + cubeCards.add(new CardIdentity("Vorel of the Hull Clade", "")); + cubeCards.add(new CardIdentity("Vorinclex, Voice of Hunger", "")); + cubeCards.add(new CardIdentity("Warstorm Surge", "")); + cubeCards.add(new CardIdentity("Watery Grave", "")); + cubeCards.add(new CardIdentity("Wayfarer's Bauble", "")); + cubeCards.add(new CardIdentity("Wear // Tear", "")); + cubeCards.add(new CardIdentity("Whispers of the Muse", "")); + cubeCards.add(new CardIdentity("Wild Ricochet", "")); + cubeCards.add(new CardIdentity("Windswept Heath", "")); + cubeCards.add(new CardIdentity("Wooded Bastion", "")); + cubeCards.add(new CardIdentity("Wooded Foothills", "")); + cubeCards.add(new CardIdentity("Woodland Cemetery", "")); + cubeCards.add(new CardIdentity("Word of Seizing", "")); + cubeCards.add(new CardIdentity("Worldly Tutor", "")); + cubeCards.add(new CardIdentity("Worn Powerstone", "")); + cubeCards.add(new CardIdentity("Wort, the Raidmother", "")); + cubeCards.add(new CardIdentity("Wrath of God", "")); + cubeCards.add(new CardIdentity("Wretched Confluence", "")); + cubeCards.add(new CardIdentity("Wrexial, the Risen Deep", "")); + cubeCards.add(new CardIdentity("Wydwen, the Biting Gale", "")); + cubeCards.add(new CardIdentity("Xenagos, God of Revels", "")); + cubeCards.add(new CardIdentity("Xiahou Dun, the One-Eyed", "")); + cubeCards.add(new CardIdentity("Yasova Dragonclaw", "")); + cubeCards.add(new CardIdentity("Yawgmoth's Agenda", "")); + cubeCards.add(new CardIdentity("Yeva, Nature's Herald", "")); + cubeCards.add(new CardIdentity("Yisan, the Wanderer Bard", "")); + cubeCards.add(new CardIdentity("Yomiji, Who Bars the Way", "")); + cubeCards.add(new CardIdentity("Yosei, the Morning Star", "")); + cubeCards.add(new CardIdentity("Zedruu the Greathearted", "")); + cubeCards.add(new CardIdentity("Zirilan of the Claw", "")); + cubeCards.add(new CardIdentity("Zurgo Bellstriker", "")); + cubeCards.add(new CardIdentity("Zurgo Helmsmasher", "")); + } +} diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index 590c8fbc00..c7d32cb1d3 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -17,9 +17,10 @@ Mage.Deck.Constructed Mage.Deck.Limited - Mage.Game.CommanderDuel + Mage.Game.CommanderDuel Mage.Game.CommanderFreeForAll Mage.Game.FreeForAll + Mage.Game.MomirDuel Mage.Game.TinyLeadersDuel Mage.Game.TwoPlayerDuel Mage.Player.AI diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index f2538da69c..eb2c57ef45 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -49,6 +49,7 @@ + @@ -78,6 +79,7 @@ + @@ -93,6 +95,7 @@ + diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml index 7490945b1e..d91918733b 100644 --- a/Mage.Server/pom.xml +++ b/Mage.Server/pom.xml @@ -142,6 +142,12 @@ ${project.version} runtime + + ${project.groupId} + mage-game-momirduel + ${project.version} + runtime + diff --git a/Mage.Server/release/config/config.xml b/Mage.Server/release/config/config.xml index 42a18288e5..77ff19bb4b 100644 --- a/Mage.Server/release/config/config.xml +++ b/Mage.Server/release/config/config.xml @@ -28,6 +28,7 @@ + @@ -57,6 +58,7 @@ + @@ -72,6 +74,7 @@ + diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index d9f8aec6c2..7e83044274 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -166,12 +166,9 @@ public class Main { else { logger.fatal("Unable to start MAGE server - another server is already started"); } - } catch (IOException ex) { - logger.fatal("Failed to start server - " + connection.toString(), ex); } catch (Exception ex) { logger.fatal("Failed to start server - " + connection.toString(), ex); } - } static void initStatistics() { diff --git a/Mage.Sets/src/mage/sets/alliances/WildAesthir1.java b/Mage.Sets/src/mage/sets/alliances/WildAesthir1.java new file mode 100644 index 0000000000..7f7c785162 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/WildAesthir1.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.alliances; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class WildAesthir1 extends mage.sets.masterseditioniv.WildAesthir { + + public WildAesthir1(UUID ownerId) { + super(ownerId); + this.cardNumber = 154; + this.expansionSetCode = "ALL"; + } + + public WildAesthir1(final WildAesthir1 card) { + super(card); + } + + @Override + public WildAesthir1 copy() { + return new WildAesthir1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/alliances/WildAesthir2.java b/Mage.Sets/src/mage/sets/alliances/WildAesthir2.java new file mode 100644 index 0000000000..59c160f0cc --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/WildAesthir2.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.alliances; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class WildAesthir2 extends mage.sets.masterseditioniv.WildAesthir { + + public WildAesthir2(UUID ownerId) { + super(ownerId); + this.cardNumber = 155; + this.expansionSetCode = "ALL"; + } + + public WildAesthir2(final WildAesthir2 card) { + super(card); + } + + @Override + public WildAesthir2 copy() { + return new WildAesthir2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/antiquities/CoralHelm.java b/Mage.Sets/src/mage/sets/antiquities/CoralHelm.java new file mode 100644 index 0000000000..033986635c --- /dev/null +++ b/Mage.Sets/src/mage/sets/antiquities/CoralHelm.java @@ -0,0 +1,54 @@ +/* + * 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.antiquities; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author nigelzor + */ +public class CoralHelm extends mage.sets.masterseditioniv.CoralHelm { + + public CoralHelm(UUID ownerId) { + super(ownerId); + this.cardNumber = 12; + this.expansionSetCode = "ATQ"; + this.rarity = Rarity.RARE; + } + + public CoralHelm(final CoralHelm card) { + super(card); + } + + @Override + public CoralHelm copy() { + return new CoralHelm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/apocalypse/BogGnarr.java b/Mage.Sets/src/mage/sets/apocalypse/BogGnarr.java index efc75cfd61..560c89d024 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/BogGnarr.java +++ b/Mage.Sets/src/mage/sets/apocalypse/BogGnarr.java @@ -31,25 +31,26 @@ package mage.sets.apocalypse; import java.util.UUID; import mage.MageInt; import mage.ObjectColor; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SpellCastAllTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.ColorPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.stack.Spell; /** * @author Loki */ public class BogGnarr extends CardImpl { + private static final FilterSpell filter = new FilterSpell("a black spell"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + public BogGnarr(UUID ownerId) { super(ownerId, 76, "Bog Gnarr", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.expansionSetCode = "APC"; @@ -57,7 +58,9 @@ public class BogGnarr extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - this.addAbility(new BogGnarrTriggeredAbility()); + + // Whenever a player casts a black spell, Bog Gnarr gets +2/+2 until end of turn. + this.addAbility(new SpellCastAllTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), filter, false)); } public BogGnarr(final BogGnarr card) { @@ -68,43 +71,4 @@ public class BogGnarr extends CardImpl { public BogGnarr copy() { return new BogGnarr(this); } - } - -class BogGnarrTriggeredAbility extends TriggeredAbilityImpl { - - private static final FilterCard filter = new FilterCard("a black spell"); - - static { - filter.add(new ColorPredicate(ObjectColor.BLACK)); - } - - public BogGnarrTriggeredAbility() { - super(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), false); - } - - public BogGnarrTriggeredAbility(final BogGnarrTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.SPELL_CAST; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - return spell != null && filter.match(spell, game); - } - - @Override - public String getRule() { - return "Whenever a player casts " + filter.getMessage() + ", " + super.getRule(); - } - - @Override - public BogGnarrTriggeredAbility copy() { - return new BogGnarrTriggeredAbility(this); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/apocalypse/DesolationAngel.java b/Mage.Sets/src/mage/sets/apocalypse/DesolationAngel.java index dd1b5db3a3..be3613ad5a 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/DesolationAngel.java +++ b/Mage.Sets/src/mage/sets/apocalypse/DesolationAngel.java @@ -29,26 +29,31 @@ package mage.sets.apocalypse; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.common.KickedCondition; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DestroyAllEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.KickerAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.TargetController; import mage.filter.common.FilterLandPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.filter.predicate.permanent.ControllerPredicate; /** * @author Loki */ public class DesolationAngel extends CardImpl { + private static final FilterLandPermanent filter = new FilterLandPermanent("lands"); + private static final FilterLandPermanent filter2 = new FilterLandPermanent("lands you control"); + + static { + filter2.add(new ControllerPredicate(TargetController.YOU)); + } + public DesolationAngel(UUID ownerId) { super(ownerId, 38, "Desolation Angel", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.expansionSetCode = "APC"; @@ -64,7 +69,8 @@ public class DesolationAngel extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Desolation Angel enters the battlefield, destroy all lands you control. If it was kicked, destroy all lands instead. - this.addAbility(new EntersBattlefieldTriggeredAbility(new DesolationAngelEntersBattlefieldEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new ConditionalOneShotEffect(new DestroyAllEffect(filter), + new DestroyAllEffect(filter2), KickedCondition.getInstance(), "destroy all lands you control. If it was kicked, destroy all lands instead."))); } public DesolationAngel(final DesolationAngel card) { @@ -76,34 +82,3 @@ public class DesolationAngel extends CardImpl { return new DesolationAngel(this); } } - -class DesolationAngelEntersBattlefieldEffect extends OneShotEffect { - - DesolationAngelEntersBattlefieldEffect() { - super(Outcome.DestroyPermanent); - staticText = "destroy all lands you control. If it was kicked, destroy all lands instead"; - } - - DesolationAngelEntersBattlefieldEffect(final DesolationAngelEntersBattlefieldEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Card p = game.getCard(source.getSourceId()); - boolean kicked = KickedCondition.getInstance().apply(game, source); - for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterLandPermanent(), source.getControllerId(), source.getSourceId(), game)) { - if ((!kicked && permanent.getControllerId().equals(source.getControllerId())) - || kicked) { - permanent.destroy(source.getSourceId(), game, false); - } - } - return true; - } - - @Override - public DesolationAngelEntersBattlefieldEffect copy() { - return new DesolationAngelEntersBattlefieldEffect(this); - } - -} diff --git a/Mage.Sets/src/mage/sets/apocalypse/GladeGnarr.java b/Mage.Sets/src/mage/sets/apocalypse/GladeGnarr.java index 4ff643a49d..d09a25aafd 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/GladeGnarr.java +++ b/Mage.Sets/src/mage/sets/apocalypse/GladeGnarr.java @@ -30,25 +30,26 @@ package mage.sets.apocalypse; import java.util.UUID; import mage.MageInt; import mage.ObjectColor; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SpellCastAllTriggeredAbility; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.ColorPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.stack.Spell; /** * @author Loki */ public class GladeGnarr extends CardImpl { + private static final FilterSpell filter = new FilterSpell("a blue spell"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLUE)); + } + public GladeGnarr(UUID ownerId) { super(ownerId, 78, "Glade Gnarr", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{G}"); this.expansionSetCode = "APC"; @@ -56,7 +57,9 @@ public class GladeGnarr extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); - this.addAbility(new GladeGnarrTriggeredAbility()); + + // Whenever a player casts a blue spell, Glade Gnarr gets +2/+2 until end of turn. + this.addAbility(new SpellCastAllTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), filter, false)); } public GladeGnarr(final GladeGnarr card) { @@ -68,41 +71,3 @@ public class GladeGnarr extends CardImpl { return new GladeGnarr(this); } } - -class GladeGnarrTriggeredAbility extends TriggeredAbilityImpl { - - private static final FilterCard filter = new FilterCard("a black spell"); - - static { - filter.add(new ColorPredicate(ObjectColor.BLACK)); - } - - public GladeGnarrTriggeredAbility() { - super(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), false); - } - - public GladeGnarrTriggeredAbility(final GladeGnarrTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.SPELL_CAST; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - return spell != null && filter.match(spell, game); - } - - @Override - public String getRule() { - return "Whenever a player casts " + filter.getMessage() + ", " + super.getRule(); - } - - @Override - public GladeGnarrTriggeredAbility copy() { - return new GladeGnarrTriggeredAbility(this); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/arabiannights/Aladdin.java b/Mage.Sets/src/mage/sets/arabiannights/Aladdin.java new file mode 100644 index 0000000000..51906a0d33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/arabiannights/Aladdin.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.arabiannights; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class Aladdin extends mage.sets.masterseditioniv.Aladdin { + + public Aladdin(UUID ownerId) { + super(ownerId); + this.cardNumber = 42; + this.expansionSetCode = "ARN"; + } + + public Aladdin(final Aladdin card) { + super(card); + } + + @Override + public Aladdin copy() { + return new Aladdin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java b/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java index 0d5cdcee9d..7a5f29fbcd 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java @@ -34,6 +34,7 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; @@ -46,7 +47,6 @@ import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.SpiritWhiteToken; -import mage.game.permanent.token.Token; import mage.players.Player; import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; @@ -111,8 +111,7 @@ class GallowsAtWillowHillEffect extends OneShotEffect { Player controller = game.getPlayer(permanent.getControllerId()); permanent.destroy(source.getSourceId(), game, false); if (controller != null) { - Token spirit = new SpiritWhiteToken("AVR", 1); - spirit.putOntoBattlefield(1, game, source.getSourceId(), controller.getId()); + new CreateTokenEffect(new SpiritWhiteToken()).apply(game, source); } affectedTargets++; } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java b/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java index 1e1c67ad31..b1881c58e8 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java @@ -27,20 +27,22 @@ */ package mage.sets.avacynrestored; -import mage.constants.*; +import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ReplacementEffectImpl; -import mage.cards.Card; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamageCreatureEvent; import mage.game.events.GameEvent; import mage.players.Player; -import java.util.UUID; - /** * @author noxx */ @@ -86,19 +88,19 @@ class GloomSurgeonEffect extends ReplacementEffectImpl { int preventedDamage = event.getAmount(); game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, source.getFirstTarget(), source.getSourceId(), source.getControllerId(), preventedDamage)); Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - player.moveCards(player.getLibrary().getTopCards(game, preventedDamage), Zone.LIBRARY, Zone.EXILED, source, game); + if (player != null) { + player.moveCards(player.getLibrary().getTopCards(game, preventedDamage), Zone.EXILED, source, game); } return true; } return false; } - + @Override public boolean checksEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.DAMAGE_CREATURE; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getTargetId().equals(source.getSourceId())) { diff --git a/Mage.Sets/src/mage/sets/avacynrestored/MoonsilverSpear.java b/Mage.Sets/src/mage/sets/avacynrestored/MoonsilverSpear.java index 83d3afff42..66ed9f70c7 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/MoonsilverSpear.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/MoonsilverSpear.java @@ -54,7 +54,7 @@ public class MoonsilverSpear extends CardImpl { // Equipped creature has first strike. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT))); // Whenever equipped creature attacks, put a 4/4 white Angel creature token with flying onto the battlefield. - this.addAbility(new AttacksAttachedTriggeredAbility(new CreateTokenEffect(new AngelToken(expansionSetCode)))); + this.addAbility(new AttacksAttachedTriggeredAbility(new CreateTokenEffect(new AngelToken()))); // Equip {4} this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(4))); } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/NephaliaSmuggler.java b/Mage.Sets/src/mage/sets/avacynrestored/NephaliaSmuggler.java index e5cdcfb0e6..d939c4a073 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/NephaliaSmuggler.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/NephaliaSmuggler.java @@ -38,6 +38,8 @@ import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.cards.CardImpl; import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -47,6 +49,11 @@ import java.util.UUID; */ public class NephaliaSmuggler extends CardImpl { + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control"); + static { + filter.add(new AnotherPredicate()); + } + public NephaliaSmuggler(UUID ownerId) { super(ownerId, 69, "Nephalia Smuggler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}"); this.expansionSetCode = "AVR"; @@ -60,7 +67,7 @@ public class NephaliaSmuggler extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{3}{U}")); ability.addCost(new TapSourceCost()); ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)); - ability.addTarget(new TargetControlledCreaturePermanent()); + ability.addTarget(new TargetControlledCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java index f6550ca84e..591adb8e6a 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java @@ -141,7 +141,7 @@ class StolenGoodsCastFromExileEffect extends AsThoughEffectImpl { Card card = game.getCard(sourceId); if (card != null && game.getState().getZone(sourceId) == Zone.EXILED) { Player player = game.getPlayer(affectedControllerId); - player.setCastSourceIdWithAlternateMana(sourceId, null); + player.setCastSourceIdWithAlternateMana(sourceId, null, null); return true; } } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java b/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java index c2fc5802c1..3e3518eebd 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java @@ -31,7 +31,6 @@ import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.SacrificeTargetEffect; @@ -87,18 +86,14 @@ class ThatcherRevoltEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - for (int i = 0; i < 3; i++) { - RedHumanToken token = new RedHumanToken(); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - Permanent permanent = game.getPermanent(token.getLastAddedToken()); - if (permanent != null) { - SacrificeTargetEffect sacrificeEffect = new SacrificeTargetEffect("sacrifice this token", source.getControllerId()); - sacrificeEffect.setTargetPointer(new FixedTarget(permanent, game)); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + RedHumanToken token = new RedHumanToken(); + token.putOntoBattlefield(3, game, source.getSourceId(), source.getControllerId()); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + SacrificeTargetEffect sacrificeEffect = new SacrificeTargetEffect(); + sacrificeEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect), source); } } return true; diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java b/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java index aa2253b1e4..66d3ca61ff 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/AkoumStonewaker.java @@ -30,7 +30,6 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.LandfallAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; @@ -44,6 +43,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; @@ -97,13 +97,14 @@ class AkoumStonewakerEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Token token = new AkoumStonewakerElementalToken(); if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } return false; @@ -122,5 +123,6 @@ class AkoumStonewakerElementalToken extends Token { this.addAbility(TrampleAbility.getInstance()); this.addAbility(HasteAbility.getInstance()); this.setOriginalExpansionSetCode("BFZ"); + this.setTokenType(1); } } diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/OmnathLocusOfRage.java b/Mage.Sets/src/mage/sets/battleforzendikar/OmnathLocusOfRage.java index c09d7fe508..fff58c51cf 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/OmnathLocusOfRage.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/OmnathLocusOfRage.java @@ -88,7 +88,7 @@ class OmnathElementalToken extends Token { OmnathElementalToken() { super("Elemental", "5/5 red and green Elemental creature token"); - setTokenType(1); + setTokenType(2); setOriginalExpansionSetCode("BFZ"); cardType.add(CardType.CREATURE); subtype.add("Elemental"); diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/VoidWinnower.java b/Mage.Sets/src/mage/sets/battleforzendikar/VoidWinnower.java index 0a15ab9ecf..474486e701 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/VoidWinnower.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/VoidWinnower.java @@ -109,16 +109,16 @@ class VoidWinnowerCantCastEffect extends ContinuousRuleModifyingEffectImpl { @Override public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == EventType.CAST_SPELL; + return event.getType() == EventType.CAST_SPELL_LATE; } @Override public boolean applies(GameEvent event, Ability source, Game game) { if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { - MageObject object = game.getObject(event.getSourceId()); - if (object != null && (object instanceof Spell)) { + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null) { // the low bit will always be set on an odd number. - return (((Spell) object).getConvertedManaCost() & 1) == 0; + return (spell.getConvertedManaCost() & 1) == 0; } } return false; diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/ZadaHedronGrinder.java b/Mage.Sets/src/mage/sets/battleforzendikar/ZadaHedronGrinder.java index e34ac40666..48c1a77a9a 100644 --- a/Mage.Sets/src/mage/sets/battleforzendikar/ZadaHedronGrinder.java +++ b/Mage.Sets/src/mage/sets/battleforzendikar/ZadaHedronGrinder.java @@ -30,6 +30,7 @@ package mage.sets.battleforzendikar; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -102,9 +103,8 @@ class ZadaHedronGrinderTriggeredAbility extends TriggeredAbilityImpl { Spell spell = game.getStack().getSpell(event.getTargetId()); if (isControlledInstantOrSorcery(spell)) { boolean targetsSource = false; - for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) { - spell.getSpellAbility().getModes().setActiveMode(modeId); - for (Target target : spell.getSpellAbility().getTargets()) { + for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) { + for (Target target : mode.getTargets()) { for (UUID targetId : target.getTargets()) { if (targetId.equals(getSourceId())) { targetsSource = true; @@ -161,9 +161,8 @@ class ZadaHedronGrinderEffect extends OneShotEffect { if (spell != null && controller != null) { Target usedTarget = null; setUsedTarget: - for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) { - spell.getSpellAbility().getModes().setActiveMode(modeId); - for (Target target : spell.getSpellAbility().getTargets()) { + for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) { + for (Target target : mode.getTargets()) { if (target.getFirstTarget().equals(source.getSourceId())) { usedTarget = target.copy(); usedTarget.clearChosen(); @@ -178,9 +177,8 @@ class ZadaHedronGrinderEffect extends OneShotEffect { if (!creature.getId().equals(source.getSourceId()) && usedTarget.canTarget(source.getControllerId(), creature.getId(), source, game)) { Spell copy = spell.copySpell(); setTarget: - for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) { - copy.getSpellAbility().getModes().setActiveMode(modeId); - for (Target target : copy.getSpellAbility().getTargets()) { + for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) { + for (Target target : mode.getTargets()) { if (target.getClass().equals(usedTarget.getClass()) && target.getMessage().equals(usedTarget.getMessage())) { target.clearChosen(); target.add(creature.getId(), game); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/MogisGodOfSlaughter.java b/Mage.Sets/src/mage/sets/bornofthegods/MogisGodOfSlaughter.java index 85fb229bf7..d5bd22552a 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/MogisGodOfSlaughter.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/MogisGodOfSlaughter.java @@ -74,9 +74,9 @@ public class MogisGodOfSlaughter extends CardImpl { // As long as your devotion to black and red is less than seven, Mogis isn't a creature. Effect effect = new LoseCreatureTypeSourceEffect(new DevotionCount(ColoredManaSymbol.B, ColoredManaSymbol.R), 7); effect.setText("As long as your devotion to black and red is less than seven, Mogis isn't a creature"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); - - // At the beginning of each opponent's upkeep, Mogis deals 2 damage to that player unless he or she sacrifices a creature. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + + // At the beginning of each opponent's upkeep, Mogis deals 2 damage to that player unless he or she sacrifices a creature. effect = new DoUnlessTargetPaysCost(new DamageTargetEffect(2, false, "that player"), new SacrificeTargetCost(new TargetControlledCreaturePermanent()), "Sacrifice a creature? (otherwise you get 2 damage)"); effect.setText("Mogis deals 2 damage to that player unless he or she sacrifices a creature"); @@ -95,6 +95,7 @@ public class MogisGodOfSlaughter extends CardImpl { } class DoUnlessTargetPaysCost extends OneShotEffect { + private final OneShotEffect executingEffect; private final Cost cost; private final String userMessage; @@ -102,6 +103,7 @@ class DoUnlessTargetPaysCost extends OneShotEffect { public DoUnlessTargetPaysCost(OneShotEffect effect, Cost cost) { this(effect, cost, null); } + public DoUnlessTargetPaysCost(OneShotEffect effect, Cost cost, String userMessage) { super(Outcome.Benefit); this.executingEffect = effect; @@ -123,7 +125,7 @@ class DoUnlessTargetPaysCost extends OneShotEffect { if (player != null && mageObject != null) { String message = userMessage; if (message == null) { - message = new StringBuilder(getCostText()).append(" to prevent ").append(executingEffect.getText(source.getModes().getMode())).append("?").toString(); + message = getCostText() + " to prevent " + executingEffect.getText(source.getModes().getMode()) + "?"; } message = CardUtil.replaceSourceName(message, mageObject.getLogName()); cost.clearPaid(); @@ -132,8 +134,8 @@ class DoUnlessTargetPaysCost extends OneShotEffect { } if (!cost.isPaid()) { executingEffect.setTargetPointer(this.targetPointer); - return executingEffect.apply(game, source); - } + return executingEffect.apply(game, source); + } return true; } return false; @@ -153,8 +155,8 @@ class DoUnlessTargetPaysCost extends OneShotEffect { private String getCostText() { StringBuilder sb = new StringBuilder(); String costText = cost.getText(); - if (costText != null && - !costText.toLowerCase().startsWith("discard") + if (costText != null + && !costText.toLowerCase().startsWith("discard") && !costText.toLowerCase().startsWith("sacrifice") && !costText.toLowerCase().startsWith("remove")) { sb.append("pay "); diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java index 29c128af84..8cdf926c72 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java @@ -29,17 +29,16 @@ package mage.sets.championsofkamigawa; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; @@ -76,7 +75,10 @@ public class SosukeSonOfSeshiro extends CardImpl { // Other Snake creatures you control get +1/+0. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, filter, true))); // Whenever a Warrior you control deals combat damage to a creature, destroy that creature at end of combat. - this.addAbility(new SosukeSonOfSeshiroTriggeredAbility()); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new SosukeSonOfSeshiroTriggeredAbility(effect)); } public SosukeSonOfSeshiro(final SosukeSonOfSeshiro card) { @@ -91,8 +93,8 @@ public class SosukeSonOfSeshiro extends CardImpl { class SosukeSonOfSeshiroTriggeredAbility extends TriggeredAbilityImpl { - SosukeSonOfSeshiroTriggeredAbility() { - super(Zone.BATTLEFIELD, new SosukeSonOfSeshiroEffect()); + SosukeSonOfSeshiroTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); } SosukeSonOfSeshiroTriggeredAbility(final SosukeSonOfSeshiroTriggeredAbility ability) { @@ -128,35 +130,3 @@ class SosukeSonOfSeshiroTriggeredAbility extends TriggeredAbilityImpl { return "Whenever a Warrior you control deals combat damage to a creature, destroy that creature at end of combat."; } } - -class SosukeSonOfSeshiroEffect extends OneShotEffect { - - SosukeSonOfSeshiroEffect() { - super(Outcome.DestroyPermanent); - staticText = "destroy that creature at end of combat"; - } - - SosukeSonOfSeshiroEffect(final SosukeSonOfSeshiroEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (targetCreature != null) { - AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } - return false; - } - - @Override - public SosukeSonOfSeshiroEffect copy() { - return new SosukeSonOfSeshiroEffect(this); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/commander/AcornCatapult.java b/Mage.Sets/src/mage/sets/commander/AcornCatapult.java new file mode 100644 index 0000000000..c1bcbce94e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/AcornCatapult.java @@ -0,0 +1,111 @@ +/* + * 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.commander; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.SquirrelToken; +import mage.players.Player; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author LoneFox + */ +public class AcornCatapult extends CardImpl { + + public AcornCatapult(UUID ownerId) { + super(ownerId, 241, "Acorn Catapult", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}"); + this.expansionSetCode = "CMD"; + + // {1}, {tap}: Acorn Catapult deals 1 damage to target creature or player. That creature's controller or that player puts a 1/1 green Squirrel creature token onto the battlefield. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{1}")); + ability.addCost(new TapSourceCost()); + ability.addEffect(new AcornCatapultEffect()); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public AcornCatapult(final AcornCatapult card) { + super(card); + } + + @Override + public AcornCatapult copy() { + return new AcornCatapult(this); + } +} + + +class AcornCatapultEffect extends OneShotEffect { + + public AcornCatapultEffect() { + super(Outcome.PutCreatureInPlay); + staticText = "that creature's controller or that player puts a 1/1 green Squirrel creature token onto the battlefield"; + } + + public AcornCatapultEffect(final AcornCatapultEffect effect) { + super(effect); + } + + @Override + public AcornCatapultEffect copy() { + return new AcornCatapultEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + UUID targetId = getTargetPointer().getFirst(game, source); + Player player = game.getPlayer(targetId); + if(player == null) { + Permanent permanent = game.getPermanent(targetId); + if(permanent != null) { + player = game.getPlayer(permanent.getControllerId()); + } + } + + if(player != null) { + new SquirrelToken().putOntoBattlefield(1, game, source.getSourceId(), player.getId()); + return true; + } + + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander/ReinsOfPower.java b/Mage.Sets/src/mage/sets/commander/ReinsOfPower.java new file mode 100644 index 0000000000..5d5f0064b4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/ReinsOfPower.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.commander; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class ReinsOfPower extends mage.sets.stronghold.ReinsOfPower { + + public ReinsOfPower(UUID ownerId) { + super(ownerId); + this.cardNumber = 57; + this.expansionSetCode = "CMD"; + } + + public ReinsOfPower(final ReinsOfPower card) { + super(card); + } + + @Override + public ReinsOfPower copy() { + return new ReinsOfPower(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java b/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java index 7ff4058deb..f5d7604ef7 100644 --- a/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java +++ b/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java @@ -112,7 +112,7 @@ class TheMimeoplasmEffect extends OneShotEffect { Cards cardsToExile = new CardsImpl(); cardsToExile.add(cardToCopy); cardsToExile.add(cardForCounters); - controller.moveCards(cardsToExile, Zone.GRAVEYARD, Zone.EXILED, source, game); + controller.moveCards(cardsToExile, Zone.EXILED, source, game); CopyEffect copyEffect = new CopyEffect(Duration.Custom, cardToCopy, source.getSourceId()); game.addEffect(copyEffect, source); permanent.addCounters(CounterType.P1P1.createInstance(cardForCounters.getPower().getValue()), game); diff --git a/Mage.Sets/src/mage/sets/commander2013/EndrekSahrMasterBreeder.java b/Mage.Sets/src/mage/sets/commander2013/EndrekSahrMasterBreeder.java index dfed94b550..a0f9f59306 100644 --- a/Mage.Sets/src/mage/sets/commander2013/EndrekSahrMasterBreeder.java +++ b/Mage.Sets/src/mage/sets/commander2013/EndrekSahrMasterBreeder.java @@ -45,7 +45,7 @@ import mage.filter.FilterSpell; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.Game; -import mage.game.permanent.token.Token; +import mage.game.permanent.token.ThrullToken; import mage.game.stack.Spell; import mage.target.targetpointer.FixedTarget; @@ -114,22 +114,10 @@ class EndrekSahrMasterBreederEffect extends OneShotEffect { if (spell != null) { int cmc = spell.getConvertedManaCost(); if (cmc > 0) { - return new CreateTokenEffect(new EndrekSahrMasterBreederThrullToken(), cmc).apply(game, source); + return new CreateTokenEffect(new ThrullToken(), cmc).apply(game, source); } return true; } return false; } } - -class EndrekSahrMasterBreederThrullToken extends Token { - - public EndrekSahrMasterBreederThrullToken() { - super("Thrull", "1/1 black Thrull creature token"); - cardType.add(CardType.CREATURE); - color.setBlack(true); - subtype.add("Thrull"); - power = new MageInt(1); - toughness = new MageInt(1); - } -} diff --git a/Mage.Sets/src/mage/sets/commander2013/NayaSoulbeast.java b/Mage.Sets/src/mage/sets/commander2013/NayaSoulbeast.java index 4143523f77..64a2febb12 100644 --- a/Mage.Sets/src/mage/sets/commander2013/NayaSoulbeast.java +++ b/Mage.Sets/src/mage/sets/commander2013/NayaSoulbeast.java @@ -131,7 +131,7 @@ class NayaSoulbeastReplacementEffect extends ReplacementEffectImpl { public static final String SOURCE_CAST_SPELL_ABILITY = "sourceCastSpellAbility"; public NayaSoulbeastReplacementEffect() { - super(Duration.OneUse, Outcome.BoostCreature, true); + super(Duration.OneUse, Outcome.BoostCreature); staticText = "{this} enters the battlefield with X +1/+1 counters on it, where X is the total converted mana cost of all cards revealed this way"; } diff --git a/Mage.Sets/src/mage/sets/commander2013/TerraRavager.java b/Mage.Sets/src/mage/sets/commander2013/TerraRavager.java index 79aa1e4846..0dda70fa4d 100644 --- a/Mage.Sets/src/mage/sets/commander2013/TerraRavager.java +++ b/Mage.Sets/src/mage/sets/commander2013/TerraRavager.java @@ -106,6 +106,6 @@ class TerraRavagerLandCount implements DynamicValue { @Override public String getMessage() { - return "land defending player controls"; + return "the number of lands defending player controls"; } } diff --git a/Mage.Sets/src/mage/sets/commander2014/NahiriTheLithomancer.java b/Mage.Sets/src/mage/sets/commander2014/NahiriTheLithomancer.java index eb48023361..0e303f39bc 100644 --- a/Mage.Sets/src/mage/sets/commander2014/NahiriTheLithomancer.java +++ b/Mage.Sets/src/mage/sets/commander2014/NahiriTheLithomancer.java @@ -129,20 +129,22 @@ class NahiriTheLithomancerFirstAbilityEffect extends OneShotEffect { if (controller != null) { Token token = new KorSoldierToken(); if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - Permanent tokenPermanent = game.getPermanent(token.getLastAddedToken()); - if (tokenPermanent != null) { - //TODO: Make sure the Equipment can legally enchant the token, preferably on targetting. - Target target = new TargetControlledPermanent(0, 1, filter, true); - if (target.canChoose(source.getSourceId(), controller.getId(), game) - && controller.chooseUse(outcome, "Attach an Equipment you control to the created Token?", source, game)) { - if (target.choose(Outcome.Neutral, source.getControllerId(), source.getSourceId(), game)) { - Permanent equipmentPermanent = game.getPermanent(target.getFirstTarget()); - if (equipmentPermanent != null) { - Permanent attachedTo = game.getPermanent(equipmentPermanent.getAttachedTo()); - if (attachedTo != null) { - attachedTo.removeAttachment(equipmentPermanent.getId(), game); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + //TODO: Make sure the Equipment can legally enchant the token, preferably on targetting. + Target target = new TargetControlledPermanent(0, 1, filter, true); + if (target.canChoose(source.getSourceId(), controller.getId(), game) + && controller.chooseUse(outcome, "Attach an Equipment you control to the created " + tokenPermanent.getIdName() + "?", source, game)) { + if (target.choose(Outcome.Neutral, source.getControllerId(), source.getSourceId(), game)) { + Permanent equipmentPermanent = game.getPermanent(target.getFirstTarget()); + if (equipmentPermanent != null) { + Permanent attachedTo = game.getPermanent(equipmentPermanent.getAttachedTo()); + if (attachedTo != null) { + attachedTo.removeAttachment(equipmentPermanent.getId(), game); + } + tokenPermanent.addAttachment(equipmentPermanent.getId(), game); } - tokenPermanent.addAttachment(equipmentPermanent.getId(), game); } } } diff --git a/Mage.Sets/src/mage/sets/commander2015/AEtherize.java b/Mage.Sets/src/mage/sets/commander2015/AEtherize.java new file mode 100644 index 0000000000..685ee6dd1f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AEtherize.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AEtherize extends mage.sets.gatecrash.AEtherize { + + public AEtherize(UUID ownerId) { + super(ownerId); + this.cardNumber = 85; + this.expansionSetCode = "C15"; + } + + public AEtherize(final AEtherize card) { + super(card); + } + + @Override + public AEtherize copy() { + return new AEtherize(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AEthersnatch.java b/Mage.Sets/src/mage/sets/commander2015/AEthersnatch.java new file mode 100644 index 0000000000..c54aef189c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AEthersnatch.java @@ -0,0 +1,94 @@ +/* + * 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.commander2015; + +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.stack.Spell; +import mage.players.Player; +import mage.target.TargetSpell; + +/** + * + * @author emerald000 + */ +public class AEthersnatch extends CardImpl { + + public AEthersnatch(UUID ownerId) { + super(ownerId, 9, "AEthersnatch", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{4}{U}{U}"); + this.expansionSetCode = "C15"; + + // Gain control of target spell. You may choose new targets for it. + this.getSpellAbility().addEffect(new AEthersnatchEffect()); + this.getSpellAbility().addTarget(new TargetSpell()); + } + + public AEthersnatch(final AEthersnatch card) { + super(card); + } + + @Override + public AEthersnatch copy() { + return new AEthersnatch(this); + } +} + +class AEthersnatchEffect extends OneShotEffect { + + AEthersnatchEffect() { + super(Outcome.GainControl); + this.staticText = "Gain control of target spell. You may choose new targets for it"; + } + + AEthersnatchEffect(final AEthersnatchEffect effect) { + super(effect); + } + + @Override + public AEthersnatchEffect copy() { + return new AEthersnatchEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Spell spell = game.getStack().getSpell(this.getTargetPointer().getFirst(game, source)); + if (controller != null && spell != null) { + spell.setControllerId(controller.getId()); + spell.chooseNewTargets(game, controller.getId(), false, false, null); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AcidicSlime.java b/Mage.Sets/src/mage/sets/commander2015/AcidicSlime.java new file mode 100644 index 0000000000..945b301271 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AcidicSlime.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AcidicSlime extends mage.sets.magic2010.AcidicSlime { + + public AcidicSlime(UUID ownerId) { + super(ownerId); + this.cardNumber = 173; + this.expansionSetCode = "C15"; + } + + public AcidicSlime(final AcidicSlime card) { + super(card); + } + + @Override + public AcidicSlime copy() { + return new AcidicSlime(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ActOfAggression.java b/Mage.Sets/src/mage/sets/commander2015/ActOfAggression.java new file mode 100644 index 0000000000..2720002549 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ActOfAggression.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ActOfAggression extends mage.sets.newphyrexia.ActOfAggression { + + public ActOfAggression(UUID ownerId) { + super(ownerId); + this.cardNumber = 141; + this.expansionSetCode = "C15"; + } + + public ActOfAggression(final ActOfAggression card) { + super(card); + } + + @Override + public ActOfAggression copy() { + return new ActOfAggression(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AjanisChosen.java b/Mage.Sets/src/mage/sets/commander2015/AjanisChosen.java new file mode 100644 index 0000000000..aac099f95e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AjanisChosen.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AjanisChosen extends mage.sets.magic2014.AjanisChosen { + + public AjanisChosen(UUID ownerId) { + super(ownerId); + this.cardNumber = 57; + this.expansionSetCode = "C15"; + } + + public AjanisChosen(final AjanisChosen card) { + super(card); + } + + @Override + public AjanisChosen copy() { + return new AjanisChosen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AltarsReap.java b/Mage.Sets/src/mage/sets/commander2015/AltarsReap.java new file mode 100644 index 0000000000..70e3023ad7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AltarsReap.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AltarsReap extends mage.sets.innistrad.AltarsReap { + + public AltarsReap(UUID ownerId) { + super(ownerId); + this.cardNumber = 112; + this.expansionSetCode = "C15"; + } + + public AltarsReap(final AltarsReap card) { + super(card); + } + + @Override + public AltarsReap copy() { + return new AltarsReap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AmbitionsCost.java b/Mage.Sets/src/mage/sets/commander2015/AmbitionsCost.java new file mode 100644 index 0000000000..b0ebdb59ca --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AmbitionsCost.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AmbitionsCost extends mage.sets.eighthedition.AmbitionsCost { + + public AmbitionsCost(UUID ownerId) { + super(ownerId); + this.cardNumber = 113; + this.expansionSetCode = "C15"; + } + + public AmbitionsCost(final AmbitionsCost card) { + super(card); + } + + @Override + public AmbitionsCost copy() { + return new AmbitionsCost(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AncientAmphitheater.java b/Mage.Sets/src/mage/sets/commander2015/AncientAmphitheater.java new file mode 100644 index 0000000000..21a5f92ec7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AncientAmphitheater.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AncientAmphitheater extends mage.sets.lorwyn.AncientAmphitheater { + + public AncientAmphitheater(UUID ownerId) { + super(ownerId); + this.cardNumber = 276; + this.expansionSetCode = "C15"; + } + + public AncientAmphitheater(final AncientAmphitheater card) { + super(card); + } + + @Override + public AncientAmphitheater copy() { + return new AncientAmphitheater(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AncientCraving.java b/Mage.Sets/src/mage/sets/commander2015/AncientCraving.java new file mode 100644 index 0000000000..ec231cde4a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AncientCraving.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AncientCraving extends mage.sets.starter1999.AncientCraving { + + public AncientCraving(UUID ownerId) { + super(ownerId); + this.cardNumber = 114; + this.expansionSetCode = "C15"; + } + + public AncientCraving(final AncientCraving card) { + super(card); + } + + @Override + public AncientCraving copy() { + return new AncientCraving(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AnyaMercilessAngel.java b/Mage.Sets/src/mage/sets/commander2015/AnyaMercilessAngel.java new file mode 100644 index 0000000000..1bb34a90c3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AnyaMercilessAngel.java @@ -0,0 +1,144 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.MultipliedValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +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.game.Game; +import mage.players.Player; + +/** + * + * @author emerald000 + */ +public class AnyaMercilessAngel extends CardImpl { + + public AnyaMercilessAngel(UUID ownerId) { + super(ownerId, 41, "Anya, Merciless Angel", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{3}{R}{W}"); + this.expansionSetCode = "C15"; + this.supertype.add("Legendary"); + this.subtype.add("Angel"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Anya, Merciless Angel gets +3/+3 for each opponent whose life total is less than half his or her starting life total. + DynamicValue dValue = new MultipliedValue(new AnyaMercilessAngelDynamicValue(), 3); + Effect effect = new BoostSourceEffect(dValue, dValue, Duration.WhileOnBattlefield); + effect.setText("{this{ gets +3/+3 for each opponent whose life total is less than half his or her starting life total"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(dValue, dValue, Duration.WhileOnBattlefield))); + + // As long as an opponent's life total is less than half his or her starting life total, Anya has indestructible. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), + AnyaMercilessAngelCondition.getInstance(), + "As long as an opponent's life total is less than half his or her starting life total, {this} has indestructible"))); + } + + public AnyaMercilessAngel(final AnyaMercilessAngel card) { + super(card); + } + + @Override + public AnyaMercilessAngel copy() { + return new AnyaMercilessAngel(this); + } +} + +class AnyaMercilessAngelDynamicValue implements DynamicValue { + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + int opponentCount = 0; + Player controller = game.getPlayer(sourceAbility.getControllerId()); + if (controller != null) { + int startingLifeTotal = game.getLife(); + for (UUID opponentId : game.getOpponents(controller.getId())) { + Player opponent = game.getPlayer(opponentId); + if (opponent != null && opponent.getLife() < startingLifeTotal / 2) { + opponentCount++; + } + } + } + return opponentCount; + } + + @Override + public AnyaMercilessAngelDynamicValue copy() { + return new AnyaMercilessAngelDynamicValue(); + } + + @Override + public String getMessage() { + return "number of opponents whose life total is less than half his or her starting life total"; + } + + @Override + public String toString() { + return "X"; + } +} + +class AnyaMercilessAngelCondition implements Condition { + + private static final AnyaMercilessAngelCondition fInstance = new AnyaMercilessAngelCondition(); + + public static AnyaMercilessAngelCondition getInstance() { + return fInstance; + }; + + private AnyaMercilessAngelCondition() {} + + @Override + public boolean apply(Game game, Ability source) { + return new AnyaMercilessAngelDynamicValue().calculate(game, source, null) > 0; + } + + @Override + public String toString() { + return "an opponent's life total is less than half his or her starting life total"; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Arachnogenesis.java b/Mage.Sets/src/mage/sets/commander2015/Arachnogenesis.java new file mode 100644 index 0000000000..3f500fc132 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Arachnogenesis.java @@ -0,0 +1,104 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.PreventAllDamageByAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.permanent.token.SpiderToken; + +/** + * + * @author fireshoes + */ +public class Arachnogenesis extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spider creatures"); + + static { + filter.add(Predicates.not(new SubtypePredicate("Spider"))); + } + + public Arachnogenesis(UUID ownerId) { + super(ownerId, 32, "Arachnogenesis", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{G}"); + this.expansionSetCode = "C15"; + + // Put X 1/2 green Spider creature tokens with reach onto the battlefield, where X is the number of creatures attacking you. + Effect effect = new CreateTokenEffect(new SpiderToken(), new ArachnogenesisCount()); + effect.setText("Put X 1/2 green Spider creature tokens with reach onto the battlefield, where X is the number of creatures attacking you"); + this.getSpellAbility().addEffect(effect); + + // Prevent all combat damage that would be dealt this turn by non-Spider creatures. + this.getSpellAbility().addEffect(new PreventAllDamageByAllEffect(filter, Duration.EndOfTurn, true)); + } + + public Arachnogenesis(final Arachnogenesis card) { + super(card); + } + + @Override + public Arachnogenesis copy() { + return new Arachnogenesis(this); + } +} + +class ArachnogenesisCount implements DynamicValue { + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + int count = 0; + for (CombatGroup combatGroup : game.getCombat().getGroups()) { + if (combatGroup.getDefenderId().equals(sourceAbility.getControllerId())) { + count += combatGroup.getAttackers().size(); + } + } + return count; + } + + @Override + public DynamicValue copy() { + return this; + } + + @Override + public String getMessage() { + return "creatures attacking you"; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/commander2015/ArbiterOfKnollridge.java b/Mage.Sets/src/mage/sets/commander2015/ArbiterOfKnollridge.java new file mode 100644 index 0000000000..9c0a178294 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ArbiterOfKnollridge.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ArbiterOfKnollridge extends mage.sets.lorwyn.ArbiterOfKnollridge { + + public ArbiterOfKnollridge(UUID ownerId) { + super(ownerId); + this.cardNumber = 59; + this.expansionSetCode = "C15"; + } + + public ArbiterOfKnollridge(final ArbiterOfKnollridge card) { + super(card); + } + + @Override + public ArbiterOfKnollridge copy() { + return new ArbiterOfKnollridge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ArborColossus.java b/Mage.Sets/src/mage/sets/commander2015/ArborColossus.java new file mode 100644 index 0000000000..9c70b372a2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ArborColossus.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ArborColossus extends mage.sets.theros.ArborColossus { + + public ArborColossus(UUID ownerId) { + super(ownerId); + this.cardNumber = 174; + this.expansionSetCode = "C15"; + } + + public ArborColossus(final ArborColossus card) { + super(card); + } + + @Override + public ArborColossus copy() { + return new ArborColossus(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AuraOfSilence.java b/Mage.Sets/src/mage/sets/commander2015/AuraOfSilence.java new file mode 100644 index 0000000000..bde64e9122 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AuraOfSilence.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AuraOfSilence extends mage.sets.weatherlight.AuraOfSilence { + + public AuraOfSilence(UUID ownerId) { + super(ownerId); + this.cardNumber = 60; + this.expansionSetCode = "C15"; + } + + public AuraOfSilence(final AuraOfSilence card) { + super(card); + } + + @Override + public AuraOfSilence copy() { + return new AuraOfSilence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/AwakenTheSkyTyrant.java b/Mage.Sets/src/mage/sets/commander2015/AwakenTheSkyTyrant.java new file mode 100644 index 0000000000..8f9a09481c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/AwakenTheSkyTyrant.java @@ -0,0 +1,102 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.DragonToken2; + +/** + * + * @author LevelX2 + */ +public class AwakenTheSkyTyrant extends CardImpl { + + public AwakenTheSkyTyrant(UUID ownerId) { + super(ownerId, 24, "Awaken the Sky Tyrant", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); + this.expansionSetCode = "C15"; + + // When a source an opponent controls deals damage to you, sacrifice Awaken the Sky Tyrant. If you do, put a 5/5 red Dragon creature token with flying onto the battlefield. + this.addAbility(new AwakenTheSkyTyrantTriggeredAbility()); + } + + public AwakenTheSkyTyrant(final AwakenTheSkyTyrant card) { + super(card); + } + + @Override + public AwakenTheSkyTyrant copy() { + return new AwakenTheSkyTyrant(this); + } +} + +class AwakenTheSkyTyrantTriggeredAbility extends TriggeredAbilityImpl { + + public AwakenTheSkyTyrantTriggeredAbility() { + super(Zone.BATTLEFIELD, new DoIfCostPaid(new CreateTokenEffect(new DragonToken2(), 1), new SacrificeSourceCost(), null, false), false); + } + + public AwakenTheSkyTyrantTriggeredAbility(final AwakenTheSkyTyrantTriggeredAbility ability) { + super(ability); + } + + @java.lang.Override + public AwakenTheSkyTyrantTriggeredAbility copy() { + return new AwakenTheSkyTyrantTriggeredAbility(this); + } + + @java.lang.Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.DAMAGED_PLAYER); + } + + @java.lang.Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getTargetId().equals(controllerId)) { + UUID sourceControllerId = game.getControllerId(event.getSourceId()); + if (sourceControllerId != null && game.getOpponents(getControllerId()).contains(sourceControllerId)) { + return true; + } + } + return false; + } + + @java.lang.Override + public String getRule() { + return "When a source an opponent controls deals damage to you, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BaneOfProgress.java b/Mage.Sets/src/mage/sets/commander2015/BaneOfProgress.java new file mode 100644 index 0000000000..470b1b0d02 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BaneOfProgress.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BaneOfProgress extends mage.sets.commander2013.BaneOfProgress { + + public BaneOfProgress(UUID ownerId) { + super(ownerId); + this.cardNumber = 175; + this.expansionSetCode = "C15"; + } + + public BaneOfProgress(final BaneOfProgress card) { + super(card); + } + + @Override + public BaneOfProgress copy() { + return new BaneOfProgress(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BanishingLight.java b/Mage.Sets/src/mage/sets/commander2015/BanishingLight.java new file mode 100644 index 0000000000..56f19fe651 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BanishingLight.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BanishingLight extends mage.sets.journeyintonyx.BanishingLight { + + public BanishingLight(UUID ownerId) { + super(ownerId); + this.cardNumber = 61; + this.expansionSetCode = "C15"; + } + + public BanishingLight(final BanishingLight card) { + super(card); + } + + @Override + public BanishingLight copy() { + return new BanishingLight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BansheeOfTheDreadChoir.java b/Mage.Sets/src/mage/sets/commander2015/BansheeOfTheDreadChoir.java new file mode 100644 index 0000000000..061d769c8c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BansheeOfTheDreadChoir.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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.abilities.keyword.MyriadAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class BansheeOfTheDreadChoir extends CardImpl { + + public BansheeOfTheDreadChoir(UUID ownerId) { + super(ownerId, 16, "Banshee of the Dread Choir", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "C15"; + this.subtype.add("Spirit"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Myriad + this.addAbility(new MyriadAbility()); + // Whenever Banshee of the Dread Choir deals combat damage to a player, that player discards a card. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardTargetEffect(1), false, true)); + } + + public BansheeOfTheDreadChoir(final BansheeOfTheDreadChoir card) { + super(card); + } + + @Override + public BansheeOfTheDreadChoir copy() { + return new BansheeOfTheDreadChoir(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BarrenMoor.java b/Mage.Sets/src/mage/sets/commander2015/BarrenMoor.java new file mode 100644 index 0000000000..95a642c1e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BarrenMoor.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BarrenMoor extends mage.sets.onslaught.BarrenMoor { + + public BarrenMoor(UUID ownerId) { + super(ownerId); + this.cardNumber = 277; + this.expansionSetCode = "C15"; + } + + public BarrenMoor(final BarrenMoor card) { + super(card); + } + + @Override + public BarrenMoor copy() { + return new BarrenMoor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BarterInBlood.java b/Mage.Sets/src/mage/sets/commander2015/BarterInBlood.java new file mode 100644 index 0000000000..88b004a853 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BarterInBlood.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BarterInBlood extends mage.sets.avacynrestored.BarterInBlood { + + public BarterInBlood(UUID ownerId) { + super(ownerId); + this.cardNumber = 115; + this.expansionSetCode = "C15"; + } + + public BarterInBlood(final BarterInBlood card) { + super(card); + } + + @Override + public BarterInBlood copy() { + return new BarterInBlood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BasaltMonolith.java b/Mage.Sets/src/mage/sets/commander2015/BasaltMonolith.java new file mode 100644 index 0000000000..8caccf8959 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BasaltMonolith.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BasaltMonolith extends mage.sets.limitedalpha.BasaltMonolith { + + public BasaltMonolith(UUID ownerId) { + super(ownerId); + this.cardNumber = 244; + this.expansionSetCode = "C15"; + } + + public BasaltMonolith(final BasaltMonolith card) { + super(card); + } + + @Override + public BasaltMonolith copy() { + return new BasaltMonolith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BastionProtector.java b/Mage.Sets/src/mage/sets/commander2015/BastionProtector.java new file mode 100644 index 0000000000..0293878ca1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BastionProtector.java @@ -0,0 +1,82 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +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.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CommanderPredicate; + +/** + * + * @author LevelX2 + */ +public class BastionProtector extends CardImpl { + + private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Commander creatures you control"); + + static { + filter.add(new CommanderPredicate()); + } + + public BastionProtector(UUID ownerId) { + super(ownerId, 1, "Bastion Protector", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "C15"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Commander creatures you control get +2/+2 and have indestructible. + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, filter)); + Effect effect = new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter); + effect.setText("and have indestructible"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public BastionProtector(final BastionProtector card) { + super(card); + } + + @Override + public BastionProtector copy() { + return new BastionProtector(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BeastmasterAscension.java b/Mage.Sets/src/mage/sets/commander2015/BeastmasterAscension.java new file mode 100644 index 0000000000..8656995010 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BeastmasterAscension.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BeastmasterAscension extends mage.sets.zendikar.BeastmasterAscension { + + public BeastmasterAscension(UUID ownerId) { + super(ownerId); + this.cardNumber = 176; + this.expansionSetCode = "C15"; + } + + public BeastmasterAscension(final BeastmasterAscension card) { + super(card); + } + + @Override + public BeastmasterAscension copy() { + return new BeastmasterAscension(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BidentOfThassa.java b/Mage.Sets/src/mage/sets/commander2015/BidentOfThassa.java new file mode 100644 index 0000000000..3423b6dc81 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BidentOfThassa.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BidentOfThassa extends mage.sets.theros.BidentOfThassa { + + public BidentOfThassa(UUID ownerId) { + super(ownerId); + this.cardNumber = 86; + this.expansionSetCode = "C15"; + } + + public BidentOfThassa(final BidentOfThassa card) { + super(card); + } + + @Override + public BidentOfThassa copy() { + return new BidentOfThassa(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BiomanticMastery.java b/Mage.Sets/src/mage/sets/commander2015/BiomanticMastery.java new file mode 100644 index 0000000000..971dd0f6fe --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BiomanticMastery.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BiomanticMastery extends mage.sets.dissension.BiomanticMastery { + + public BiomanticMastery(UUID ownerId) { + super(ownerId); + this.cardNumber = 239; + this.expansionSetCode = "C15"; + } + + public BiomanticMastery(final BiomanticMastery card) { + super(card); + } + + @Override + public BiomanticMastery copy() { + return new BiomanticMastery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BladeOfSelves.java b/Mage.Sets/src/mage/sets/commander2015/BladeOfSelves.java new file mode 100644 index 0000000000..440c76269a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BladeOfSelves.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.commander2015; + +import java.util.UUID; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EquipAbility; +import mage.abilities.keyword.MyriadAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class BladeOfSelves extends CardImpl { + + public BladeOfSelves(UUID ownerId) { + super(ownerId, 51, "Blade of Selves", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "C15"; + this.subtype.add("Equipment"); + + // Equipped creature has myriad. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new MyriadAbility(), AttachmentType.EQUIPMENT))); + + // Equip {4} + this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4))); + } + + public BladeOfSelves(final BladeOfSelves card) { + super(card); + } + + @Override + public BladeOfSelves copy() { + return new BladeOfSelves(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BlastedLandscape.java b/Mage.Sets/src/mage/sets/commander2015/BlastedLandscape.java new file mode 100644 index 0000000000..8a3be21959 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BlastedLandscape.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BlastedLandscape extends mage.sets.urzassaga.BlastedLandscape { + + public BlastedLandscape(UUID ownerId) { + super(ownerId); + this.cardNumber = 278; + this.expansionSetCode = "C15"; + } + + public BlastedLandscape(final BlastedLandscape card) { + super(card); + } + + @Override + public BlastedLandscape copy() { + return new BlastedLandscape(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BlatantThievery.java b/Mage.Sets/src/mage/sets/commander2015/BlatantThievery.java new file mode 100644 index 0000000000..d201393e23 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BlatantThievery.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BlatantThievery extends mage.sets.onslaught.BlatantThievery { + + public BlatantThievery(UUID ownerId) { + super(ownerId); + this.cardNumber = 87; + this.expansionSetCode = "C15"; + } + + public BlatantThievery(final BlatantThievery card) { + super(card); + } + + @Override + public BlatantThievery copy() { + return new BlatantThievery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BloodBairn.java b/Mage.Sets/src/mage/sets/commander2015/BloodBairn.java new file mode 100644 index 0000000000..a6572bd9fb --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BloodBairn.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BloodBairn extends mage.sets.magic2014.BloodBairn { + + public BloodBairn(UUID ownerId) { + super(ownerId); + this.cardNumber = 117; + this.expansionSetCode = "C15"; + } + + public BloodBairn(final BloodBairn card) { + super(card); + } + + @Override + public BloodBairn copy() { + return new BloodBairn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BlueSunsZenith.java b/Mage.Sets/src/mage/sets/commander2015/BlueSunsZenith.java new file mode 100644 index 0000000000..2b03a31ef3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BlueSunsZenith.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BlueSunsZenith extends mage.sets.mirrodinbesieged.BlueSunsZenith { + + public BlueSunsZenith(UUID ownerId) { + super(ownerId); + this.cardNumber = 88; + this.expansionSetCode = "C15"; + } + + public BlueSunsZenith(final BlueSunsZenith card) { + super(card); + } + + @Override + public BlueSunsZenith copy() { + return new BlueSunsZenith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Blustersquall.java b/Mage.Sets/src/mage/sets/commander2015/Blustersquall.java new file mode 100644 index 0000000000..0277432714 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Blustersquall.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Blustersquall extends mage.sets.returntoravnica.Blustersquall { + + public Blustersquall(UUID ownerId) { + super(ownerId); + this.cardNumber = 89; + this.expansionSetCode = "C15"; + } + + public Blustersquall(final Blustersquall card) { + super(card); + } + + @Override + public Blustersquall copy() { + return new Blustersquall(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Bonehoard.java b/Mage.Sets/src/mage/sets/commander2015/Bonehoard.java new file mode 100644 index 0000000000..1594dc3822 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Bonehoard.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Bonehoard extends mage.sets.mirrodinbesieged.Bonehoard { + + public Bonehoard(UUID ownerId) { + super(ownerId); + this.cardNumber = 245; + this.expansionSetCode = "C15"; + } + + public Bonehoard(final Bonehoard card) { + super(card); + } + + @Override + public Bonehoard copy() { + return new Bonehoard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BorderlandBehemoth.java b/Mage.Sets/src/mage/sets/commander2015/BorderlandBehemoth.java new file mode 100644 index 0000000000..dc85158964 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BorderlandBehemoth.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.filter.predicate.permanent.PermanentIdPredicate; + +/** + * + * @author fireshoes + */ +public class BorderlandBehemoth extends CardImpl { + + public BorderlandBehemoth(UUID ownerId) { + super(ownerId, 142, "Borderland Behemoth", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{R}{R}"); + this.expansionSetCode = "C15"; + this.subtype.add("Giant"); + this.subtype.add("Warrior"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Borderland Behemoth gets +4/+4 for each other Giant you control. + FilterCreaturePermanent filter = new FilterCreaturePermanent("other Giant you control"); + filter.add(new SubtypePredicate("Giant")); + filter.add(Predicates.not(new PermanentIdPredicate(this.getId()))); + filter.add(new ControllerPredicate(TargetController.YOU)); + DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, 4); + Effect effect = new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield, false); + effect.setText("{this} gets +4/+4 for each other Giant you control"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + } + + public BorderlandBehemoth(final BorderlandBehemoth card) { + super(card); + } + + @Override + public BorderlandBehemoth copy() { + return new BorderlandBehemoth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BorosCluestone.java b/Mage.Sets/src/mage/sets/commander2015/BorosCluestone.java new file mode 100644 index 0000000000..c6b00359f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BorosCluestone.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BorosCluestone extends mage.sets.dragonsmaze.BorosCluestone { + + public BorosCluestone(UUID ownerId) { + super(ownerId); + this.cardNumber = 246; + this.expansionSetCode = "C15"; + } + + public BorosCluestone(final BorosCluestone card) { + super(card); + } + + @Override + public BorosCluestone copy() { + return new BorosCluestone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BorosGarrison.java b/Mage.Sets/src/mage/sets/commander2015/BorosGarrison.java new file mode 100644 index 0000000000..4228b3b0c7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BorosGarrison.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BorosGarrison extends mage.sets.planechase.BorosGarrison { + + public BorosGarrison(UUID ownerId) { + super(ownerId); + this.cardNumber = 279; + this.expansionSetCode = "C15"; + } + + public BorosGarrison(final BorosGarrison card) { + super(card); + } + + @Override + public BorosGarrison copy() { + return new BorosGarrison(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BorosGuildgate.java b/Mage.Sets/src/mage/sets/commander2015/BorosGuildgate.java new file mode 100644 index 0000000000..e0358daa1e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BorosGuildgate.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BorosGuildgate extends mage.sets.gatecrash.BorosGuildgate { + + public BorosGuildgate(UUID ownerId) { + super(ownerId); + this.cardNumber = 280; + this.expansionSetCode = "C15"; + } + + public BorosGuildgate(final BorosGuildgate card) { + super(card); + } + + @Override + public BorosGuildgate copy() { + return new BorosGuildgate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BorosSignet.java b/Mage.Sets/src/mage/sets/commander2015/BorosSignet.java new file mode 100644 index 0000000000..c5ff28ea13 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BorosSignet.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BorosSignet extends mage.sets.ravnica.BorosSignet { + + public BorosSignet(UUID ownerId) { + super(ownerId); + this.cardNumber = 247; + this.expansionSetCode = "C15"; + } + + public BorosSignet(final BorosSignet card) { + super(card); + } + + @Override + public BorosSignet copy() { + return new BorosSignet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Brainstorm.java b/Mage.Sets/src/mage/sets/commander2015/Brainstorm.java new file mode 100644 index 0000000000..d7eed4c41d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Brainstorm.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Brainstorm extends mage.sets.fifthedition.Brainstorm { + + public Brainstorm(UUID ownerId) { + super(ownerId); + this.cardNumber = 90; + this.expansionSetCode = "C15"; + } + + public Brainstorm(final Brainstorm card) { + super(card); + } + + @Override + public Brainstorm copy() { + return new Brainstorm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BreathOfDarigaaz.java b/Mage.Sets/src/mage/sets/commander2015/BreathOfDarigaaz.java new file mode 100644 index 0000000000..004bec7ae2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BreathOfDarigaaz.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BreathOfDarigaaz extends mage.sets.commander.BreathOfDarigaaz { + + public BreathOfDarigaaz(UUID ownerId) { + super(ownerId); + this.cardNumber = 143; + this.expansionSetCode = "C15"; + } + + public BreathOfDarigaaz(final BreathOfDarigaaz card) { + super(card); + } + + @Override + public BreathOfDarigaaz copy() { + return new BreathOfDarigaaz(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BroodbirthViper.java b/Mage.Sets/src/mage/sets/commander2015/BroodbirthViper.java new file mode 100644 index 0000000000..4f4c3d16d1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BroodbirthViper.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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.MyriadAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class BroodbirthViper extends CardImpl { + + public BroodbirthViper(UUID ownerId) { + super(ownerId, 10, "Broodbirth Viper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "C15"; + this.subtype.add("Snake"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Myriad + this.addAbility(new MyriadAbility()); + // Whenever Broodbirth Viper deals combat damage to a player, you may draw a card. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), true, false)); + } + + public BroodbirthViper(final BroodbirthViper card) { + super(card); + } + + @Override + public BroodbirthViper copy() { + return new BroodbirthViper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/BurnishedHart.java b/Mage.Sets/src/mage/sets/commander2015/BurnishedHart.java new file mode 100644 index 0000000000..37d613e3ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/BurnishedHart.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BurnishedHart extends mage.sets.theros.BurnishedHart { + + public BurnishedHart(UUID ownerId) { + super(ownerId); + this.cardNumber = 248; + this.expansionSetCode = "C15"; + } + + public BurnishedHart(final BurnishedHart card) { + super(card); + } + + @Override + public BurnishedHart copy() { + return new BurnishedHart(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ButcherOfMalakir.java b/Mage.Sets/src/mage/sets/commander2015/ButcherOfMalakir.java new file mode 100644 index 0000000000..cc13809840 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ButcherOfMalakir.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ButcherOfMalakir extends mage.sets.worldwake.ButcherOfMalakir { + + public ButcherOfMalakir(UUID ownerId) { + super(ownerId); + this.cardNumber = 118; + this.expansionSetCode = "C15"; + } + + public ButcherOfMalakir(final ButcherOfMalakir card) { + super(card); + } + + @Override + public ButcherOfMalakir copy() { + return new ButcherOfMalakir(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CageOfHands.java b/Mage.Sets/src/mage/sets/commander2015/CageOfHands.java new file mode 100644 index 0000000000..b66d7722b7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CageOfHands.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CageOfHands extends mage.sets.championsofkamigawa.CageOfHands { + + public CageOfHands(UUID ownerId) { + super(ownerId); + this.cardNumber = 62; + this.expansionSetCode = "C15"; + } + + public CageOfHands(final CageOfHands card) { + super(card); + } + + @Override + public CageOfHands copy() { + return new CageOfHands(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CallTheSkybreaker.java b/Mage.Sets/src/mage/sets/commander2015/CallTheSkybreaker.java new file mode 100644 index 0000000000..6fc69f0e5a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CallTheSkybreaker.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CallTheSkybreaker extends mage.sets.commander.CallTheSkybreaker { + + public CallTheSkybreaker(UUID ownerId) { + super(ownerId); + this.cardNumber = 240; + this.expansionSetCode = "C15"; + } + + public CallTheSkybreaker(final CallTheSkybreaker card) { + super(card); + } + + @Override + public CallTheSkybreaker copy() { + return new CallTheSkybreaker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CallerOfTheClaw.java b/Mage.Sets/src/mage/sets/commander2015/CallerOfTheClaw.java new file mode 100644 index 0000000000..00e1be423a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CallerOfTheClaw.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CallerOfTheClaw extends mage.sets.legions.CallerOfTheClaw { + + public CallerOfTheClaw(UUID ownerId) { + super(ownerId); + this.cardNumber = 177; + this.expansionSetCode = "C15"; + } + + public CallerOfTheClaw(final CallerOfTheClaw card) { + super(card); + } + + @Override + public CallerOfTheClaw copy() { + return new CallerOfTheClaw(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CallerOfThePack.java b/Mage.Sets/src/mage/sets/commander2015/CallerOfThePack.java new file mode 100644 index 0000000000..c3d55334a4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CallerOfThePack.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.MyriadAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class CallerOfThePack extends CardImpl { + + public CallerOfThePack(UUID ownerId) { + super(ownerId, 34, "Caller of the Pack", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{5}{G}{G}"); + this.expansionSetCode = "C15"; + this.subtype.add("Beast"); + this.power = new MageInt(8); + this.toughness = new MageInt(6); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Myriad (Whenever this creature attacks, for each opponent other than the defending player, put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile those tokens at the end of combat.) + this.addAbility(new MyriadAbility()); + + } + + public CallerOfThePack(final CallerOfThePack card) { + super(card); + } + + @Override + public CallerOfThePack copy() { + return new CallerOfThePack(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CelestialAncient.java b/Mage.Sets/src/mage/sets/commander2015/CelestialAncient.java new file mode 100644 index 0000000000..0d4a44192b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CelestialAncient.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CelestialAncient extends mage.sets.dissension.CelestialAncient { + + public CelestialAncient(UUID ownerId) { + super(ownerId); + this.cardNumber = 63; + this.expansionSetCode = "C15"; + } + + public CelestialAncient(final CelestialAncient card) { + super(card); + } + + @Override + public CelestialAncient copy() { + return new CelestialAncient(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CelestialArchon.java b/Mage.Sets/src/mage/sets/commander2015/CelestialArchon.java new file mode 100644 index 0000000000..efc1c6bcef --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CelestialArchon.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CelestialArchon extends mage.sets.theros.CelestialArchon { + + public CelestialArchon(UUID ownerId) { + super(ownerId); + this.cardNumber = 64; + this.expansionSetCode = "C15"; + } + + public CelestialArchon(final CelestialArchon card) { + super(card); + } + + @Override + public CelestialArchon copy() { + return new CelestialArchon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CentaurVinecrasher.java b/Mage.Sets/src/mage/sets/commander2015/CentaurVinecrasher.java new file mode 100644 index 0000000000..cb5b90bf3b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CentaurVinecrasher.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.PutCardIntoGraveFromAnywhereAllTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.CardsInAllGraveyardsCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterLandCard; + +/** + * + * @author LevelX2 + */ +public class CentaurVinecrasher extends CardImpl { + + public CentaurVinecrasher(UUID ownerId) { + super(ownerId, 35, "Centaur Vinecrasher", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "C15"; + this.subtype.add("Plant"); + this.subtype.add("Centaur"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Centaur Vinecrasher enters the battlefield with a number of +1/+1 counters on it equal to the number of land cards in all graveyards. + Effect effect = new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), new CardsInAllGraveyardsCount(new FilterLandCard()), true); + effect.setText("with a number of +1/+1 counters on it equal to the number of land cards in all graveyards"); + this.addAbility(new EntersBattlefieldAbility(effect)); + // Whenever a land card is put into a graveyard from anywhere, you may pay {G}{G}. If you do, return Centaur Vinecrasher from your graveyard to your hand. + this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( + new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new ManaCostsImpl<>("{G}{G}")), + false, new FilterLandCard("a land card"), TargetController.ANY + )); + } + + public CentaurVinecrasher(final CentaurVinecrasher card) { + super(card); + } + + @Override + public CentaurVinecrasher copy() { + return new CentaurVinecrasher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ChainReaction.java b/Mage.Sets/src/mage/sets/commander2015/ChainReaction.java new file mode 100644 index 0000000000..f4a7e53e10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ChainReaction.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ChainReaction extends mage.sets.worldwake.ChainReaction { + + public ChainReaction(UUID ownerId) { + super(ownerId); + this.cardNumber = 144; + this.expansionSetCode = "C15"; + } + + public ChainReaction(final ChainReaction card) { + super(card); + } + + @Override + public ChainReaction copy() { + return new ChainReaction(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ChameleonColossus.java b/Mage.Sets/src/mage/sets/commander2015/ChameleonColossus.java new file mode 100644 index 0000000000..93d764688f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ChameleonColossus.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ChameleonColossus extends mage.sets.morningtide.ChameleonColossus { + + public ChameleonColossus(UUID ownerId) { + super(ownerId); + this.cardNumber = 178; + this.expansionSetCode = "C15"; + } + + public ChameleonColossus(final ChameleonColossus card) { + super(card); + } + + @Override + public ChameleonColossus copy() { + return new ChameleonColossus(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ChampionOfStraySouls.java b/Mage.Sets/src/mage/sets/commander2015/ChampionOfStraySouls.java new file mode 100644 index 0000000000..de9ca77982 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ChampionOfStraySouls.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ChampionOfStraySouls extends mage.sets.bornofthegods.ChampionOfStraySouls { + + public ChampionOfStraySouls(UUID ownerId) { + super(ownerId); + this.cardNumber = 119; + this.expansionSetCode = "C15"; + } + + public ChampionOfStraySouls(final ChampionOfStraySouls card) { + super(card); + } + + @Override + public ChampionOfStraySouls copy() { + return new ChampionOfStraySouls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CharmbreakerDevils.java b/Mage.Sets/src/mage/sets/commander2015/CharmbreakerDevils.java new file mode 100644 index 0000000000..932ff9b7e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CharmbreakerDevils.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CharmbreakerDevils extends mage.sets.innistrad.CharmbreakerDevils { + + public CharmbreakerDevils(UUID ownerId) { + super(ownerId); + this.cardNumber = 145; + this.expansionSetCode = "C15"; + } + + public CharmbreakerDevils(final CharmbreakerDevils card) { + super(card); + } + + @Override + public CharmbreakerDevils copy() { + return new CharmbreakerDevils(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Cloudthresher.java b/Mage.Sets/src/mage/sets/commander2015/Cloudthresher.java new file mode 100644 index 0000000000..8cded42196 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Cloudthresher.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Cloudthresher extends mage.sets.lorwyn.Cloudthresher { + + public Cloudthresher(UUID ownerId) { + super(ownerId); + this.cardNumber = 179; + this.expansionSetCode = "C15"; + } + + public Cloudthresher(final Cloudthresher card) { + super(card); + } + + @Override + public Cloudthresher copy() { + return new Cloudthresher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CobraTrap.java b/Mage.Sets/src/mage/sets/commander2015/CobraTrap.java new file mode 100644 index 0000000000..d8a6571c1d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CobraTrap.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CobraTrap extends mage.sets.zendikar.CobraTrap { + + public CobraTrap(UUID ownerId) { + super(ownerId); + this.cardNumber = 180; + this.expansionSetCode = "C15"; + } + + public CobraTrap(final CobraTrap card) { + super(card); + } + + @Override + public CobraTrap copy() { + return new CobraTrap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ColdEyedSelkie.java b/Mage.Sets/src/mage/sets/commander2015/ColdEyedSelkie.java new file mode 100644 index 0000000000..adb74c1e18 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ColdEyedSelkie.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ColdEyedSelkie extends mage.sets.eventide.ColdEyedSelkie { + + public ColdEyedSelkie(UUID ownerId) { + super(ownerId); + this.cardNumber = 241; + this.expansionSetCode = "C15"; + } + + public ColdEyedSelkie(final ColdEyedSelkie card) { + super(card); + } + + @Override + public ColdEyedSelkie copy() { + return new ColdEyedSelkie(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ColdsteelHeart.java b/Mage.Sets/src/mage/sets/commander2015/ColdsteelHeart.java new file mode 100644 index 0000000000..af66575eca --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ColdsteelHeart.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ColdsteelHeart extends mage.sets.coldsnap.ColdsteelHeart { + + public ColdsteelHeart(UUID ownerId) { + super(ownerId); + this.cardNumber = 249; + this.expansionSetCode = "C15"; + } + + public ColdsteelHeart(final ColdsteelHeart card) { + super(card); + } + + @Override + public ColdsteelHeart copy() { + return new ColdsteelHeart(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CometStorm.java b/Mage.Sets/src/mage/sets/commander2015/CometStorm.java new file mode 100644 index 0000000000..2da821aaf9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CometStorm.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CometStorm extends mage.sets.worldwake.CometStorm { + + public CometStorm(UUID ownerId) { + super(ownerId); + this.cardNumber = 146; + this.expansionSetCode = "C15"; + } + + public CometStorm(final CometStorm card) { + super(card); + } + + @Override + public CometStorm copy() { + return new CometStorm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CommandBeacon.java b/Mage.Sets/src/mage/sets/commander2015/CommandBeacon.java new file mode 100644 index 0000000000..9d7004c9e3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CommandBeacon.java @@ -0,0 +1,102 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author emerald000 + */ +public class CommandBeacon extends CardImpl { + + public CommandBeacon(UUID ownerId) { + super(ownerId, 56, "Command Beacon", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "C15"; + + // {T}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {T}, Sacrifice Command Beacon: Put your commander into your hand from the command zone. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CommandBeaconEffect(), new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + } + + public CommandBeacon(final CommandBeacon card) { + super(card); + } + + @Override + public CommandBeacon copy() { + return new CommandBeacon(this); + } +} + +class CommandBeaconEffect extends OneShotEffect { + + CommandBeaconEffect() { + super(Outcome.ReturnToHand); + this.staticText = "Put your commander into your hand from the command zone"; + } + + CommandBeaconEffect(final CommandBeaconEffect effect) { + super(effect); + } + + @Override + public CommandBeaconEffect copy() { + return new CommandBeaconEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Card commander = game.getCard(controller.getCommanderId()); + if (commander != null && game.getState().getZone(commander.getId()) == Zone.COMMAND) { + controller.moveCards(commander, Zone.HAND, source, game); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CommandTower.java b/Mage.Sets/src/mage/sets/commander2015/CommandTower.java new file mode 100644 index 0000000000..c49aab943d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CommandTower.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CommandTower extends mage.sets.commander2013.CommandTower { + + public CommandTower(UUID ownerId) { + super(ownerId); + this.cardNumber = 281; + this.expansionSetCode = "C15"; + } + + public CommandTower(final CommandTower card) { + super(card); + } + + @Override + public CommandTower copy() { + return new CommandTower(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CorpseAugur.java b/Mage.Sets/src/mage/sets/commander2015/CorpseAugur.java new file mode 100644 index 0000000000..28a05b4c32 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CorpseAugur.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.dynamicvalue.common.CardsInTargetPlayersGraveyardCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author fireshoes + */ +public class CorpseAugur extends CardImpl { + + public CorpseAugur(UUID ownerId) { + super(ownerId, 17, "Corpse Augur", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "C15"; + this.subtype.add("Zombie"); + this.subtype.add("Wizard"); + this.power = new MageInt(4); + this.toughness = new MageInt(2); + + // When Corpse Augur dies, you draw X cards and you lose X life, where X is the number of creature cards in target player's graveyard. + Effect effect = new DrawCardSourceControllerEffect(new CardsInTargetPlayersGraveyardCount()); + effect.setText("You draw X cards"); + Ability ability = new DiesTriggeredAbility(effect, false); + effect = new LoseLifeSourceControllerEffect(new CardsInTargetPlayersGraveyardCount()); + effect.setText("and you lose X life, where X is the number of creature cards in target player's graveyard"); + ability.addEffect(effect); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public CorpseAugur(final CorpseAugur card) { + super(card); + } + + @Override + public CorpseAugur copy() { + return new CorpseAugur(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CribSwap.java b/Mage.Sets/src/mage/sets/commander2015/CribSwap.java new file mode 100644 index 0000000000..6a8f7f533a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CribSwap.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CribSwap extends mage.sets.lorwyn.CribSwap { + + public CribSwap(UUID ownerId) { + super(ownerId); + this.cardNumber = 65; + this.expansionSetCode = "C15"; + } + + public CribSwap(final CribSwap card) { + super(card); + } + + @Override + public CribSwap copy() { + return new CribSwap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CrystalChimes.java b/Mage.Sets/src/mage/sets/commander2015/CrystalChimes.java new file mode 100644 index 0000000000..8de0ce6f94 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CrystalChimes.java @@ -0,0 +1,98 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterEnchantmentCard; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author fireshoes + */ +public class CrystalChimes extends CardImpl { + + public CrystalChimes(UUID ownerId) { + super(ownerId, 250, "Crystal Chimes", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "C15"; + + // {3}, {tap}, Sacrifice Crystal Chimes: Return all enchantment cards from your graveyard to your hand. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CrystalChimesEffect(), new GenericManaCost(3)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + } + + public CrystalChimes(final CrystalChimes card) { + super(card); + } + + @Override + public CrystalChimes copy() { + return new CrystalChimes(this); + } +} + +class CrystalChimesEffect extends OneShotEffect { + + CrystalChimesEffect() { + super(Outcome.PutCardInPlay); + this.staticText = "Return all enchantment cards from your graveyard to your hand"; + } + + CrystalChimesEffect(final CrystalChimesEffect effect) { + super(effect); + } + + @Override + public CrystalChimesEffect copy() { + return new CrystalChimesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + return controller.moveCards(controller.getGraveyard().getCards(new FilterEnchantmentCard(), source.getSourceId(), + source.getControllerId(), game), Zone.HAND, source, game); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/CurseOfTheNightlyHunt.java b/Mage.Sets/src/mage/sets/commander2015/CurseOfTheNightlyHunt.java new file mode 100644 index 0000000000..51092b5411 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/CurseOfTheNightlyHunt.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CurseOfTheNightlyHunt extends mage.sets.innistrad.CurseOfTheNightlyHunt { + + public CurseOfTheNightlyHunt(UUID ownerId) { + super(ownerId); + this.cardNumber = 147; + this.expansionSetCode = "C15"; + } + + public CurseOfTheNightlyHunt(final CurseOfTheNightlyHunt card) { + super(card); + } + + @Override + public CurseOfTheNightlyHunt copy() { + return new CurseOfTheNightlyHunt(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DarksteelIngot.java b/Mage.Sets/src/mage/sets/commander2015/DarksteelIngot.java new file mode 100644 index 0000000000..02be9f3a79 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DarksteelIngot.java @@ -0,0 +1,54 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class DarksteelIngot extends mage.sets.darksteel.DarksteelIngot { + + public DarksteelIngot(UUID ownerId) { + super(ownerId); + this.cardNumber = 251; + this.expansionSetCode = "C15"; + this.rarity = Rarity.UNCOMMON; + } + + public DarksteelIngot(final DarksteelIngot card) { + super(card); + } + + @Override + public DarksteelIngot copy() { + return new DarksteelIngot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DawnToDusk.java b/Mage.Sets/src/mage/sets/commander2015/DawnToDusk.java new file mode 100644 index 0000000000..49ebac9323 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DawnToDusk.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DawnToDusk extends mage.sets.bornofthegods.DawnToDusk { + + public DawnToDusk(UUID ownerId) { + super(ownerId); + this.cardNumber = 66; + this.expansionSetCode = "C15"; + } + + public DawnToDusk(final DawnToDusk card) { + super(card); + } + + @Override + public DawnToDusk copy() { + return new DawnToDusk(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.java b/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.java new file mode 100644 index 0000000000..6e47df6028 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.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.commander2015; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.other.OwnerIdPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInGraveyard; +import mage.target.common.TargetCardInOpponentsGraveyard; +import mage.util.MessageToClient; + +/** + * + * @author LevelX2 + */ +public class DawnbreakReclaimer extends CardImpl { + + public DawnbreakReclaimer(UUID ownerId) { + super(ownerId, 2, "Dawnbreak Reclaimer", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); + this.expansionSetCode = "C15"; + this.subtype.add("Angel"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // At the beginning of your end step, choose a creature card in an opponent's graveyard, then that player chooses a creature card in your graveyard. + // You may return those cards to the battlefield under their owners' control. + this.addAbility(new BeginningOfEndStepTriggeredAbility(new DawnbreakReclaimerEffect(), TargetController.YOU, false)); + } + + public DawnbreakReclaimer(final DawnbreakReclaimer card) { + super(card); + } + + @Override + public DawnbreakReclaimer copy() { + return new DawnbreakReclaimer(this); + } +} + +class DawnbreakReclaimerEffect extends OneShotEffect { + + public DawnbreakReclaimerEffect() { + super(Outcome.Detriment); + this.staticText = "choose a creature card in an opponent's graveyard, then that player chooses a creature card in your graveyard. You may return those cards to the battlefield under their owners' control"; + } + + public DawnbreakReclaimerEffect(final DawnbreakReclaimerEffect effect) { + super(effect); + } + + @Override + public DawnbreakReclaimerEffect copy() { + return new DawnbreakReclaimerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + TargetCardInOpponentsGraveyard targetCreature = new TargetCardInOpponentsGraveyard(new FilterCreatureCard("a creature card in an opponent's graveyard")); + if (controller.choose(Outcome.Detriment, targetCreature, source.getSourceId(), game)) { + Card creatureCard = game.getCard(targetCreature.getFirstTarget()); + Player opponent = game.getPlayer(creatureCard.getOwnerId()); + if (opponent != null) { + game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " has chosen " + creatureCard.getIdName() + " of " + opponent.getLogName()); + FilterCreatureCard filter = new FilterCreatureCard("a creature card in " + controller.getName() + "'s the graveyard"); + filter.add(new OwnerIdPredicate(controller.getId())); + TargetCardInGraveyard targetCard = new TargetCardInGraveyard(filter); + targetCard.setNotTarget(true); + if (opponent.choose(outcome, targetCard, source.getSourceId(), game)) { + Card controllerCreatureCard = game.getCard(targetCard.getFirstTarget()); + if (controllerCreatureCard != null) { + MessageToClient message = new MessageToClient("Return those cards to the battlefield under their owners' control?", + "Opponent's creature card: " + creatureCard.getLogName() + " - Your creature: " + controllerCreatureCard.getLogName()); + if (controller.chooseUse(outcome, message, source, game)) { + Set cards = new HashSet<>(); + cards.add(creatureCard); + cards.add(controllerCreatureCard); + opponent.moveCards(cards, Zone.BATTLEFIELD, source, game, false, false, true, null); + } + } + } + } + } + return true; + } + return false; + + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DawnglareInvoker.java b/Mage.Sets/src/mage/sets/commander2015/DawnglareInvoker.java new file mode 100644 index 0000000000..9fbb403666 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DawnglareInvoker.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DawnglareInvoker extends mage.sets.riseoftheeldrazi.DawnglareInvoker { + + public DawnglareInvoker(UUID ownerId) { + super(ownerId); + this.cardNumber = 67; + this.expansionSetCode = "C15"; + } + + public DawnglareInvoker(final DawnglareInvoker card) { + super(card); + } + + @Override + public DawnglareInvoker copy() { + return new DawnglareInvoker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DayOfTheDragons.java b/Mage.Sets/src/mage/sets/commander2015/DayOfTheDragons.java new file mode 100644 index 0000000000..8e29a7a39d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DayOfTheDragons.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DayOfTheDragons extends mage.sets.scourge.DayOfTheDragons { + + public DayOfTheDragons(UUID ownerId) { + super(ownerId); + this.cardNumber = 91; + this.expansionSetCode = "C15"; + } + + public DayOfTheDragons(final DayOfTheDragons card) { + super(card); + } + + @Override + public DayOfTheDragons copy() { + return new DayOfTheDragons(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DeadlyTempest.java b/Mage.Sets/src/mage/sets/commander2015/DeadlyTempest.java new file mode 100644 index 0000000000..7af864bd0f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DeadlyTempest.java @@ -0,0 +1,107 @@ +/* + * 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.commander2015; + +import java.util.HashMap; +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.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class DeadlyTempest extends CardImpl { + + public DeadlyTempest(UUID ownerId) { + super(ownerId, 19, "Deadly Tempest", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{B}{B}"); + this.expansionSetCode = "C15"; + + // Destroy all creatures. Each player loses life equal to the number of creatures he or she controlled that were destroyed this way. + getSpellAbility().addEffect(new DeadlyTempestEffect()); + } + + public DeadlyTempest(final DeadlyTempest card) { + super(card); + } + + @Override + public DeadlyTempest copy() { + return new DeadlyTempest(this); + } +} + +class DeadlyTempestEffect extends OneShotEffect { + + public DeadlyTempestEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Destroy all creatures. Each player loses life equal to the number of creatures he or she controlled that were destroyed this way"; + } + + public DeadlyTempestEffect(final DeadlyTempestEffect effect) { + super(effect); + } + + @Override + public DeadlyTempestEffect copy() { + return new DeadlyTempestEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + HashMap destroyedCreatures = new HashMap<>(); + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { + if (permanent.destroy(source.getSourceId(), game, false)) { + int count = destroyedCreatures.containsKey(permanent.getControllerId()) ? destroyedCreatures.get(permanent.getControllerId()) : 0; + destroyedCreatures.put(permanent.getControllerId(), count + 1); + } + } + for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { + int count = destroyedCreatures.containsKey(playerId) ? destroyedCreatures.get(playerId) : 0; + if (count > 0) { + Player player = game.getPlayer(playerId); + if (player != null) { + player.damage(count, playerId, game, false, true); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DesertTwister.java b/Mage.Sets/src/mage/sets/commander2015/DesertTwister.java new file mode 100644 index 0000000000..bd7d8a64ff --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DesertTwister.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DesertTwister extends mage.sets.revisededition.DesertTwister { + + public DesertTwister(UUID ownerId) { + super(ownerId); + this.cardNumber = 181; + this.expansionSetCode = "C15"; + } + + public DesertTwister(final DesertTwister card) { + super(card); + } + + @Override + public DesertTwister copy() { + return new DesertTwister(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DesolationGiant.java b/Mage.Sets/src/mage/sets/commander2015/DesolationGiant.java new file mode 100644 index 0000000000..76982a9f58 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DesolationGiant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DesolationGiant extends mage.sets.apocalypse.DesolationGiant { + + public DesolationGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 148; + this.expansionSetCode = "C15"; + } + + public DesolationGiant(final DesolationGiant card) { + super(card); + } + + @Override + public DesolationGiant copy() { + return new DesolationGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DesperateRavings.java b/Mage.Sets/src/mage/sets/commander2015/DesperateRavings.java new file mode 100644 index 0000000000..2991bbcb07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DesperateRavings.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DesperateRavings extends mage.sets.innistrad.DesperateRavings { + + public DesperateRavings(UUID ownerId) { + super(ownerId); + this.cardNumber = 149; + this.expansionSetCode = "C15"; + } + + public DesperateRavings(final DesperateRavings card) { + super(card); + } + + @Override + public DesperateRavings copy() { + return new DesperateRavings(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DiabolicServitude.java b/Mage.Sets/src/mage/sets/commander2015/DiabolicServitude.java new file mode 100644 index 0000000000..7e226b8f4c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DiabolicServitude.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DiabolicServitude extends mage.sets.urzassaga.DiabolicServitude { + + public DiabolicServitude(UUID ownerId) { + super(ownerId); + this.cardNumber = 120; + this.expansionSetCode = "C15"; + } + + public DiabolicServitude(final DiabolicServitude card) { + super(card); + } + + @Override + public DiabolicServitude copy() { + return new DiabolicServitude(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DictateOfHeliod.java b/Mage.Sets/src/mage/sets/commander2015/DictateOfHeliod.java new file mode 100644 index 0000000000..e78f912347 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DictateOfHeliod.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DictateOfHeliod extends mage.sets.journeyintonyx.DictateOfHeliod { + + public DictateOfHeliod(UUID ownerId) { + super(ownerId); + this.cardNumber = 68; + this.expansionSetCode = "C15"; + } + + public DictateOfHeliod(final DictateOfHeliod card) { + super(card); + } + + @Override + public DictateOfHeliod copy() { + return new DictateOfHeliod(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DisasterRadius.java b/Mage.Sets/src/mage/sets/commander2015/DisasterRadius.java new file mode 100644 index 0000000000..cfb6de05ba --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DisasterRadius.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DisasterRadius extends mage.sets.riseoftheeldrazi.DisasterRadius { + + public DisasterRadius(UUID ownerId) { + super(ownerId); + this.cardNumber = 150; + this.expansionSetCode = "C15"; + } + + public DisasterRadius(final DisasterRadius card) { + super(card); + } + + @Override + public DisasterRadius copy() { + return new DisasterRadius(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Dominate.java b/Mage.Sets/src/mage/sets/commander2015/Dominate.java new file mode 100644 index 0000000000..8a6c392e21 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Dominate.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Dominate extends mage.sets.nemesis.Dominate { + + public Dominate(UUID ownerId) { + super(ownerId); + this.cardNumber = 92; + this.expansionSetCode = "C15"; + } + + public Dominate(final Dominate card) { + super(card); + } + + @Override + public Dominate copy() { + return new Dominate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DoomwakeGiant.java b/Mage.Sets/src/mage/sets/commander2015/DoomwakeGiant.java new file mode 100644 index 0000000000..e4fcc3a412 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DoomwakeGiant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DoomwakeGiant extends mage.sets.journeyintonyx.DoomwakeGiant { + + public DoomwakeGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 121; + this.expansionSetCode = "C15"; + } + + public DoomwakeGiant(final DoomwakeGiant card) { + super(card); + } + + @Override + public DoomwakeGiant copy() { + return new DoomwakeGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DragonMage.java b/Mage.Sets/src/mage/sets/commander2015/DragonMage.java new file mode 100644 index 0000000000..985eeb5a07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DragonMage.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DragonMage extends mage.sets.scourge.DragonMage { + + public DragonMage(UUID ownerId) { + super(ownerId); + this.cardNumber = 151; + this.expansionSetCode = "C15"; + } + + public DragonMage(final DragonMage card) { + super(card); + } + + @Override + public DragonMage copy() { + return new DragonMage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DreadSummons.java b/Mage.Sets/src/mage/sets/commander2015/DreadSummons.java new file mode 100644 index 0000000000..4f2b645a37 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DreadSummons.java @@ -0,0 +1,111 @@ +/* + * 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.commander2015; + +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.token.ZombieToken; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class DreadSummons extends CardImpl { + + public DreadSummons(UUID ownerId) { + super(ownerId, 20, "Dread Summons", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{X}{B}{B}"); + this.expansionSetCode = "C15"; + + // Each player puts the top X cards of his or her library into his or her graveyard. For each creature card put into a graveyard this way, you put a 2/2 black Zombie creature token onto the battlefield tapped. + getSpellAbility().addEffect(new DreadSummonsEffect()); + } + + public DreadSummons(final DreadSummons card) { + super(card); + } + + @Override + public DreadSummons copy() { + return new DreadSummons(this); + } +} + +class DreadSummonsEffect extends OneShotEffect { + + public DreadSummonsEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Each player puts the top X cards of his or her library into his or her graveyard. For each creature card put into a graveyard this way, you put a 2/2 black Zombie creature token onto the battlefield tapped"; + } + + public DreadSummonsEffect(final DreadSummonsEffect effect) { + super(effect); + } + + @Override + public DreadSummonsEffect copy() { + return new DreadSummonsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int numberOfCards = source.getManaCostsToPay().getX(); + if (numberOfCards > 0) { + int numberOfCreatureCards = 0; + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + Player player = game.getPlayer(playerId); + if (player != null) { + Set movedCards = player.moveCardsToGraveyardWithInfo(player.getLibrary().getTopCards(game, numberOfCards), source, game, Zone.LIBRARY); + for (Card card : movedCards) { + if (card.getCardType().contains(CardType.CREATURE)) { + numberOfCreatureCards++; + } + } + } + } + if (numberOfCreatureCards > 0) { + return new CreateTokenEffect(new ZombieToken(), numberOfCreatureCards, true, false).apply(game, source); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DreadbringerLampads.java b/Mage.Sets/src/mage/sets/commander2015/DreadbringerLampads.java new file mode 100644 index 0000000000..40bd277c59 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DreadbringerLampads.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DreadbringerLampads extends mage.sets.journeyintonyx.DreadbringerLampads { + + public DreadbringerLampads(UUID ownerId) { + super(ownerId); + this.cardNumber = 122; + this.expansionSetCode = "C15"; + } + + public DreadbringerLampads(final DreadbringerLampads card) { + super(card); + } + + @Override + public DreadbringerLampads copy() { + return new DreadbringerLampads(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DreamPillager.java b/Mage.Sets/src/mage/sets/commander2015/DreamPillager.java new file mode 100644 index 0000000000..e3845f46a2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DreamPillager.java @@ -0,0 +1,190 @@ +/* + * 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.commander2015; + +import java.util.Set; +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.DamagedPlayerEvent; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class DreamPillager extends CardImpl { + + public DreamPillager(UUID ownerId) { + super(ownerId, 25, "Dream Pillager", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{R}{R}"); + this.expansionSetCode = "C15"; + this.subtype.add("Dragon"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Whenever Dream Pillager deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way. + this.addAbility(new DreamPillagerTriggeredAbility()); + } + + public DreamPillager(final DreamPillager card) { + super(card); + } + + @Override + public DreamPillager copy() { + return new DreamPillager(this); + } +} + +class DreamPillagerTriggeredAbility extends TriggeredAbilityImpl { + + public DreamPillagerTriggeredAbility() { + super(Zone.BATTLEFIELD, new DreamPillagerEffect(), false); + } + + public DreamPillagerTriggeredAbility(final DreamPillagerTriggeredAbility ability) { + super(ability); + } + + @Override + public DreamPillagerTriggeredAbility copy() { + return new DreamPillagerTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DAMAGED_PLAYER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getSourceId().equals(this.sourceId) && ((DamagedPlayerEvent) event).isCombatDamage()) { + for (Effect effect : getEffects()) { + effect.setValue("damage", event.getAmount()); + } + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way."; + } +} + +class DreamPillagerEffect extends OneShotEffect { + + public DreamPillagerEffect() { + super(Outcome.Benefit); + this.staticText = "exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way"; + } + + public DreamPillagerEffect(final DreamPillagerEffect effect) { + super(effect); + } + + @Override + public DreamPillagerEffect copy() { + return new DreamPillagerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + int amount = (Integer) getValue("damage"); + if (amount > 0) { + Set cards = controller.getLibrary().getTopCards(game, amount); + if (!cards.isEmpty()) { + controller.moveCards(cards, Zone.EXILED, source, game); + for (Card card : cards) { + if (!card.getCardType().contains(CardType.LAND)) { + ContinuousEffect effect = new DreamPillagerCastFromExileEffect(); + effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); + game.addEffect(effect, source); + } + } + } + return true; + } + return true; + } + return false; + } +} + +class DreamPillagerCastFromExileEffect extends AsThoughEffectImpl { + + public DreamPillagerCastFromExileEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + staticText = "You may play the card from exile"; + } + + public DreamPillagerCastFromExileEffect(final DreamPillagerCastFromExileEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public DreamPillagerCastFromExileEffect copy() { + return new DreamPillagerCastFromExileEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + return source.getControllerId().equals(affectedControllerId) + && objectId.equals(getTargetPointer().getFirst(game, source)); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DreamstoneHedron.java b/Mage.Sets/src/mage/sets/commander2015/DreamstoneHedron.java new file mode 100644 index 0000000000..75d8d6a1a2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DreamstoneHedron.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DreamstoneHedron extends mage.sets.riseoftheeldrazi.DreamstoneHedron { + + public DreamstoneHedron(UUID ownerId) { + super(ownerId); + this.cardNumber = 252; + this.expansionSetCode = "C15"; + } + + public DreamstoneHedron(final DreamstoneHedron card) { + super(card); + } + + @Override + public DreamstoneHedron copy() { + return new DreamstoneHedron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/DriftingMeadow.java b/Mage.Sets/src/mage/sets/commander2015/DriftingMeadow.java new file mode 100644 index 0000000000..3f456bfd3b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/DriftingMeadow.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DriftingMeadow extends mage.sets.urzassaga.DriftingMeadow { + + public DriftingMeadow(UUID ownerId) { + super(ownerId); + this.cardNumber = 282; + this.expansionSetCode = "C15"; + } + + public DriftingMeadow(final DriftingMeadow card) { + super(card); + } + + @Override + public DriftingMeadow copy() { + return new DriftingMeadow(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Earthquake.java b/Mage.Sets/src/mage/sets/commander2015/Earthquake.java new file mode 100644 index 0000000000..bb54ec42ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Earthquake.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Earthquake extends mage.sets.magic2010.Earthquake { + + public Earthquake(UUID ownerId) { + super(ownerId); + this.cardNumber = 152; + this.expansionSetCode = "C15"; + } + + public Earthquake(final Earthquake card) { + super(card); + } + + @Override + public Earthquake copy() { + return new Earthquake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EaterOfHope.java b/Mage.Sets/src/mage/sets/commander2015/EaterOfHope.java new file mode 100644 index 0000000000..b044d9823f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EaterOfHope.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class EaterOfHope extends mage.sets.bornofthegods.EaterOfHope { + + public EaterOfHope(UUID ownerId) { + super(ownerId); + this.cardNumber = 123; + this.expansionSetCode = "C15"; + } + + public EaterOfHope(final EaterOfHope card) { + super(card); + } + + @Override + public EaterOfHope copy() { + return new EaterOfHope(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EchoingTruth.java b/Mage.Sets/src/mage/sets/commander2015/EchoingTruth.java new file mode 100644 index 0000000000..db0fe308b0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EchoingTruth.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class EchoingTruth extends mage.sets.elspethvstezzeret.EchoingTruth { + + public EchoingTruth(UUID ownerId) { + super(ownerId); + this.cardNumber = 93; + this.expansionSetCode = "C15"; + } + + public EchoingTruth(final EchoingTruth card) { + super(card); + } + + @Override + public EchoingTruth copy() { + return new EchoingTruth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EldraziMonument.java b/Mage.Sets/src/mage/sets/commander2015/EldraziMonument.java new file mode 100644 index 0000000000..ade2787147 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EldraziMonument.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class EldraziMonument extends mage.sets.zendikar.EldraziMonument { + + public EldraziMonument(UUID ownerId) { + super(ownerId); + this.cardNumber = 253; + this.expansionSetCode = "C15"; + } + + public EldraziMonument(final EldraziMonument card) { + super(card); + } + + @Override + public EldraziMonument copy() { + return new EldraziMonument(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ElvishVisionary.java b/Mage.Sets/src/mage/sets/commander2015/ElvishVisionary.java new file mode 100644 index 0000000000..c06da388da --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ElvishVisionary.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ElvishVisionary extends mage.sets.shardsofalara.ElvishVisionary { + + public ElvishVisionary(UUID ownerId) { + super(ownerId); + this.cardNumber = 182; + this.expansionSetCode = "C15"; + } + + public ElvishVisionary(final ElvishVisionary card) { + super(card); + } + + @Override + public ElvishVisionary copy() { + return new ElvishVisionary(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EpicExperiment.java b/Mage.Sets/src/mage/sets/commander2015/EpicExperiment.java new file mode 100644 index 0000000000..dd720ca83b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EpicExperiment.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class EpicExperiment extends mage.sets.returntoravnica.EpicExperiment { + + public EpicExperiment(UUID ownerId) { + super(ownerId); + this.cardNumber = 216; + this.expansionSetCode = "C15"; + } + + public EpicExperiment(final EpicExperiment card) { + super(card); + } + + @Override + public EpicExperiment copy() { + return new EpicExperiment(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EtheriumHornSorcerer.java b/Mage.Sets/src/mage/sets/commander2015/EtheriumHornSorcerer.java new file mode 100644 index 0000000000..82017cf6a1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EtheriumHornSorcerer.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class EtheriumHornSorcerer extends mage.sets.planechase2012.EtheriumHornSorcerer { + + public EtheriumHornSorcerer(UUID ownerId) { + super(ownerId); + this.cardNumber = 217; + this.expansionSetCode = "C15"; + } + + public EtheriumHornSorcerer(final EtheriumHornSorcerer card) { + super(card); + } + + @Override + public EtheriumHornSorcerer copy() { + return new EtheriumHornSorcerer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EvolvingWilds.java b/Mage.Sets/src/mage/sets/commander2015/EvolvingWilds.java new file mode 100644 index 0000000000..aa2e84982d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EvolvingWilds.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class EvolvingWilds extends mage.sets.riseoftheeldrazi.EvolvingWilds { + + public EvolvingWilds(UUID ownerId) { + super(ownerId); + this.cardNumber = 283; + this.expansionSetCode = "C15"; + } + + public EvolvingWilds(final EvolvingWilds card) { + super(card); + } + + @Override + public EvolvingWilds copy() { + return new EvolvingWilds(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ExperimentOne.java b/Mage.Sets/src/mage/sets/commander2015/ExperimentOne.java new file mode 100644 index 0000000000..4f670a31e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ExperimentOne.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ExperimentOne extends mage.sets.gatecrash.ExperimentOne { + + public ExperimentOne(UUID ownerId) { + super(ownerId); + this.cardNumber = 184; + this.expansionSetCode = "C15"; + } + + public ExperimentOne(final ExperimentOne card) { + super(card); + } + + @Override + public ExperimentOne copy() { + return new ExperimentOne(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ExtractorDemon.java b/Mage.Sets/src/mage/sets/commander2015/ExtractorDemon.java new file mode 100644 index 0000000000..36ea209566 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ExtractorDemon.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ExtractorDemon extends mage.sets.conflux.ExtractorDemon { + + public ExtractorDemon(UUID ownerId) { + super(ownerId); + this.cardNumber = 124; + this.expansionSetCode = "C15"; + } + + public ExtractorDemon(final ExtractorDemon card) { + super(card); + } + + @Override + public ExtractorDemon copy() { + return new ExtractorDemon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/EzurisPredation.java b/Mage.Sets/src/mage/sets/commander2015/EzurisPredation.java new file mode 100644 index 0000000000..3cf34bdbca --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/EzurisPredation.java @@ -0,0 +1,126 @@ +/* + * 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.commander2015; + +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.BeastToken2; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class EzurisPredation extends CardImpl { + + public EzurisPredation(UUID ownerId) { + super(ownerId, 36, "Ezuri's Predation", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{5}{G}{G}{G}"); + this.expansionSetCode = "C15"; + + // For each creature your opponents control, put a 4/4 green Beast creature token onto the battlefield. Each of those Beasts fights a different one of those creatures. + this.getSpellAbility().addEffect(new EzurisPredationEffect()); + } + + public EzurisPredation(final EzurisPredation card) { + super(card); + } + + @Override + public EzurisPredation copy() { + return new EzurisPredation(this); + } +} + +class EzurisPredationEffect extends OneShotEffect { + + public EzurisPredationEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "For each creature your opponents control, put a 4/4 green Beast creature token onto the battlefield. Each of those Beasts fights a different one of those creatures"; + } + + public EzurisPredationEffect(final EzurisPredationEffect effect) { + super(effect); + } + + @Override + public EzurisPredationEffect copy() { + return new EzurisPredationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + /* + * Players can't cast spells or activate any abilities in between the + * Beasts entering the battlefield and fighting the other creatures. + * Ifthe Beasts entering the battlefield cause any abilities to trigger, + * those abilities will be put onto the stack after Ezuri's Predation is + * finished resolving. + * You choose which Beast is fighting which creature + * an opponent controls. Each of the "fights" happens at the same time. + * If Ezuri's Predation creates more than one token for any given + * creature (due to an effect such as the one Doubling Season creates), + * the extra tokens won't fight any creature. + */ + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + FilterCreaturePermanent filterCreature = new FilterCreaturePermanent(); + filterCreature.add(new ControllerPredicate(TargetController.OPPONENT)); + List creaturesOfOpponents = game.getBattlefield().getActivePermanents(filterCreature, source.getControllerId(), source.getSourceId(), game); + if (!creaturesOfOpponents.isEmpty()) { + CreateTokenEffect effect = new CreateTokenEffect(new BeastToken2(), creaturesOfOpponents.size()); + effect.apply(game, source); + for (UUID tokenId : effect.getLastAddedTokenIds()) { + Permanent token = game.getPermanent(tokenId); + if (token != null) { + if (creaturesOfOpponents.isEmpty()) { + break; + } + Permanent opponentCreature = creaturesOfOpponents.iterator().next(); + creaturesOfOpponents.remove(opponentCreature); + token.fight(opponentCreature, source, game); + game.informPlayers(token.getLogName() + " fights " + opponentCreature.getLogName()); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FactOrFiction.java b/Mage.Sets/src/mage/sets/commander2015/FactOrFiction.java new file mode 100644 index 0000000000..388260e835 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FactOrFiction.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FactOrFiction extends mage.sets.invasion.FactOrFiction { + + public FactOrFiction(UUID ownerId) { + super(ownerId); + this.cardNumber = 94; + this.expansionSetCode = "C15"; + } + + public FactOrFiction(final FactOrFiction card) { + super(card); + } + + @Override + public FactOrFiction copy() { + return new FactOrFiction(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FaithlessLooting.java b/Mage.Sets/src/mage/sets/commander2015/FaithlessLooting.java new file mode 100644 index 0000000000..e6ca2d645d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FaithlessLooting.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FaithlessLooting extends mage.sets.darkascension.FaithlessLooting { + + public FaithlessLooting(UUID ownerId) { + super(ownerId); + this.cardNumber = 153; + this.expansionSetCode = "C15"; + } + + public FaithlessLooting(final FaithlessLooting card) { + super(card); + } + + @Override + public FaithlessLooting copy() { + return new FaithlessLooting(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FaithsFetters.java b/Mage.Sets/src/mage/sets/commander2015/FaithsFetters.java new file mode 100644 index 0000000000..533bef2645 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FaithsFetters.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FaithsFetters extends mage.sets.divinevsdemonic.FaithsFetters { + + public FaithsFetters(UUID ownerId) { + super(ownerId); + this.cardNumber = 69; + this.expansionSetCode = "C15"; + } + + public FaithsFetters(final FaithsFetters card) { + super(card); + } + + @Override + public FaithsFetters copy() { + return new FaithsFetters(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FallOfTheHammer.java b/Mage.Sets/src/mage/sets/commander2015/FallOfTheHammer.java new file mode 100644 index 0000000000..0d1ec478b7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FallOfTheHammer.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FallOfTheHammer extends mage.sets.bornofthegods.FallOfTheHammer { + + public FallOfTheHammer(UUID ownerId) { + super(ownerId); + this.cardNumber = 154; + this.expansionSetCode = "C15"; + } + + public FallOfTheHammer(final FallOfTheHammer card) { + super(card); + } + + @Override + public FallOfTheHammer copy() { + return new FallOfTheHammer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FallenIdeal.java b/Mage.Sets/src/mage/sets/commander2015/FallenIdeal.java new file mode 100644 index 0000000000..e5efb44f10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FallenIdeal.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FallenIdeal extends mage.sets.timespiral.FallenIdeal { + + public FallenIdeal(UUID ownerId) { + super(ownerId); + this.cardNumber = 125; + this.expansionSetCode = "C15"; + } + + public FallenIdeal(final FallenIdeal card) { + super(card); + } + + @Override + public FallenIdeal copy() { + return new FallenIdeal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FateUnraveler.java b/Mage.Sets/src/mage/sets/commander2015/FateUnraveler.java new file mode 100644 index 0000000000..f176fee913 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FateUnraveler.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FateUnraveler extends mage.sets.bornofthegods.FateUnraveler { + + public FateUnraveler(UUID ownerId) { + super(ownerId); + this.cardNumber = 126; + this.expansionSetCode = "C15"; + } + + public FateUnraveler(final FateUnraveler card) { + super(card); + } + + @Override + public FateUnraveler copy() { + return new FateUnraveler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FellwarStone.java b/Mage.Sets/src/mage/sets/commander2015/FellwarStone.java new file mode 100644 index 0000000000..94c57e79de --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FellwarStone.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FellwarStone extends mage.sets.ninthedition.FellwarStone { + + public FellwarStone(UUID ownerId) { + super(ownerId); + this.cardNumber = 254; + this.expansionSetCode = "C15"; + } + + public FellwarStone(final FellwarStone card) { + super(card); + } + + @Override + public FellwarStone copy() { + return new FellwarStone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FieryConfluence.java b/Mage.Sets/src/mage/sets/commander2015/FieryConfluence.java new file mode 100644 index 0000000000..29491222bb --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FieryConfluence.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.commander2015; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.target.common.TargetArtifactPermanent; + +/** + * + * @author fireshoes + */ +public class FieryConfluence extends CardImpl { + + public FieryConfluence(UUID ownerId) { + super(ownerId, 26, "Fiery Confluence", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{R}{R}"); + this.expansionSetCode = "C15"; + + // Choose three. You may choose the same mode more than once. + this.getSpellAbility().getModes().setMinModes(3); + this.getSpellAbility().getModes().setMaxModes(3); + this.getSpellAbility().getModes().setEachModeMoreThanOnce(true); + + // - Fiery Confluence deals 1 damage to each creature; + this.getSpellAbility().addEffect(new DamageAllEffect(1, new FilterCreaturePermanent())); + + // Fiery Confluence deals 2 damage to each opponent; + Mode mode = new Mode(); + mode.getEffects().add(new DamagePlayersEffect(2, TargetController.OPPONENT)); + this.getSpellAbility().getModes().addMode(mode); + + // Destroy target artifact. + mode = new Mode(); + mode.getEffects().add(new DestroyTargetEffect()); + mode.getTargets().add(new TargetArtifactPermanent()); + this.getSpellAbility().getModes().addMode(mode); + } + + public FieryConfluence(final FieryConfluence card) { + super(card); + } + + @Override + public FieryConfluence copy() { + return new FieryConfluence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FiremindsForesight.java b/Mage.Sets/src/mage/sets/commander2015/FiremindsForesight.java new file mode 100644 index 0000000000..4d5b379d65 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FiremindsForesight.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FiremindsForesight extends mage.sets.returntoravnica.FiremindsForesight { + + public FiremindsForesight(UUID ownerId) { + super(ownerId); + this.cardNumber = 218; + this.expansionSetCode = "C15"; + } + + public FiremindsForesight(final FiremindsForesight card) { + super(card); + } + + @Override + public FiremindsForesight copy() { + return new FiremindsForesight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Forest1.java b/Mage.Sets/src/mage/sets/commander2015/Forest1.java new file mode 100644 index 0000000000..57e1a2f25d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Forest1.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest1 extends mage.cards.basiclands.Forest { + + public Forest1(UUID ownerId) { + super(ownerId, 339); + this.expansionSetCode = "C15"; + } + + public Forest1(final Forest1 card) { + super(card); + } + + @Override + public Forest1 copy() { + return new Forest1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Forest2.java b/Mage.Sets/src/mage/sets/commander2015/Forest2.java new file mode 100644 index 0000000000..f38f60ee4d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Forest2.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest2 extends mage.cards.basiclands.Forest { + + public Forest2(UUID ownerId) { + super(ownerId, 340); + this.expansionSetCode = "C15"; + } + + public Forest2(final Forest2 card) { + super(card); + } + + @Override + public Forest2 copy() { + return new Forest2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Forest3.java b/Mage.Sets/src/mage/sets/commander2015/Forest3.java new file mode 100644 index 0000000000..e8b284ad20 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Forest3.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest3 extends mage.cards.basiclands.Forest { + + public Forest3(UUID ownerId) { + super(ownerId, 341); + this.expansionSetCode = "C15"; + } + + public Forest3(final Forest3 card) { + super(card); + } + + @Override + public Forest3 copy() { + return new Forest3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Forest4.java b/Mage.Sets/src/mage/sets/commander2015/Forest4.java new file mode 100644 index 0000000000..4ae9df6c82 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Forest4.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest4 extends mage.cards.basiclands.Forest { + + public Forest4(UUID ownerId) { + super(ownerId, 342); + this.expansionSetCode = "C15"; + } + + public Forest4(final Forest4 card) { + super(card); + } + + @Override + public Forest4 copy() { + return new Forest4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ForgottenAncient.java b/Mage.Sets/src/mage/sets/commander2015/ForgottenAncient.java new file mode 100644 index 0000000000..b056f39142 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ForgottenAncient.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ForgottenAncient extends mage.sets.scourge.ForgottenAncient { + + public ForgottenAncient(UUID ownerId) { + super(ownerId); + this.cardNumber = 185; + this.expansionSetCode = "C15"; + } + + public ForgottenAncient(final ForgottenAncient card) { + super(card); + } + + @Override + public ForgottenAncient copy() { + return new ForgottenAncient(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ForgottenCave.java b/Mage.Sets/src/mage/sets/commander2015/ForgottenCave.java new file mode 100644 index 0000000000..4fd1f75ed0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ForgottenCave.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ForgottenCave extends mage.sets.onslaught.ForgottenCave { + + public ForgottenCave(UUID ownerId) { + super(ownerId); + this.cardNumber = 284; + this.expansionSetCode = "C15"; + } + + public ForgottenCave(final ForgottenCave card) { + super(card); + } + + @Override + public ForgottenCave copy() { + return new ForgottenCave(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/FumikoTheLowblood.java b/Mage.Sets/src/mage/sets/commander2015/FumikoTheLowblood.java new file mode 100644 index 0000000000..08db13e13b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/FumikoTheLowblood.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FumikoTheLowblood extends mage.sets.betrayersofkamigawa.FumikoTheLowblood { + + public FumikoTheLowblood(UUID ownerId) { + super(ownerId); + this.cardNumber = 155; + this.expansionSetCode = "C15"; + } + + public FumikoTheLowblood(final FumikoTheLowblood card) { + super(card); + } + + @Override + public FumikoTheLowblood copy() { + return new FumikoTheLowblood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GhostQuarter.java b/Mage.Sets/src/mage/sets/commander2015/GhostQuarter.java new file mode 100644 index 0000000000..d1e13df5a1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GhostQuarter.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GhostQuarter extends mage.sets.innistrad.GhostQuarter { + + public GhostQuarter(UUID ownerId) { + super(ownerId); + this.cardNumber = 285; + this.expansionSetCode = "C15"; + } + + public GhostQuarter(final GhostQuarter card) { + super(card); + } + + @Override + public GhostQuarter copy() { + return new GhostQuarter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GhostbladeEidolon.java b/Mage.Sets/src/mage/sets/commander2015/GhostbladeEidolon.java new file mode 100644 index 0000000000..5f0ab56bf8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GhostbladeEidolon.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GhostbladeEidolon extends mage.sets.bornofthegods.GhostbladeEidolon { + + public GhostbladeEidolon(UUID ownerId) { + super(ownerId); + this.cardNumber = 70; + this.expansionSetCode = "C15"; + } + + public GhostbladeEidolon(final GhostbladeEidolon card) { + super(card); + } + + @Override + public GhostbladeEidolon copy() { + return new GhostbladeEidolon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Gild.java b/Mage.Sets/src/mage/sets/commander2015/Gild.java new file mode 100644 index 0000000000..1131c232db --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Gild.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Gild extends mage.sets.bornofthegods.Gild { + + public Gild(UUID ownerId) { + super(ownerId); + this.cardNumber = 127; + this.expansionSetCode = "C15"; + } + + public Gild(final Gild card) { + super(card); + } + + @Override + public Gild copy() { + return new Gild(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GoblinElectromancer.java b/Mage.Sets/src/mage/sets/commander2015/GoblinElectromancer.java new file mode 100644 index 0000000000..27b2012a43 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GoblinElectromancer.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GoblinElectromancer extends mage.sets.returntoravnica.GoblinElectromancer { + + public GoblinElectromancer(UUID ownerId) { + super(ownerId); + this.cardNumber = 220; + this.expansionSetCode = "C15"; + } + + public GoblinElectromancer(final GoblinElectromancer card) { + super(card); + } + + @Override + public GoblinElectromancer copy() { + return new GoblinElectromancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GolgariCharm.java b/Mage.Sets/src/mage/sets/commander2015/GolgariCharm.java new file mode 100644 index 0000000000..9df10beca4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GolgariCharm.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GolgariCharm extends mage.sets.returntoravnica.GolgariCharm { + + public GolgariCharm(UUID ownerId) { + super(ownerId); + this.cardNumber = 221; + this.expansionSetCode = "C15"; + } + + public GolgariCharm(final GolgariCharm card) { + super(card); + } + + @Override + public GolgariCharm copy() { + return new GolgariCharm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GolgariGuildgate.java b/Mage.Sets/src/mage/sets/commander2015/GolgariGuildgate.java new file mode 100644 index 0000000000..cf2660d677 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GolgariGuildgate.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GolgariGuildgate extends mage.sets.returntoravnica.GolgariGuildgate { + + public GolgariGuildgate(UUID ownerId) { + super(ownerId); + this.cardNumber = 286; + this.expansionSetCode = "C15"; + } + + public GolgariGuildgate(final GolgariGuildgate card) { + super(card); + } + + @Override + public GolgariGuildgate copy() { + return new GolgariGuildgate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GolgariRotFarm.java b/Mage.Sets/src/mage/sets/commander2015/GolgariRotFarm.java new file mode 100644 index 0000000000..cfe7028460 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GolgariRotFarm.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GolgariRotFarm extends mage.sets.ravnica.GolgariRotFarm { + + public GolgariRotFarm(UUID ownerId) { + super(ownerId); + this.cardNumber = 287; + this.expansionSetCode = "C15"; + } + + public GolgariRotFarm(final GolgariRotFarm card) { + super(card); + } + + @Override + public GolgariRotFarm copy() { + return new GolgariRotFarm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GolgariSignet.java b/Mage.Sets/src/mage/sets/commander2015/GolgariSignet.java new file mode 100644 index 0000000000..21269b7641 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GolgariSignet.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GolgariSignet extends mage.sets.ravnica.GolgariSignet { + + public GolgariSignet(UUID ownerId) { + super(ownerId); + this.cardNumber = 255; + this.expansionSetCode = "C15"; + } + + public GolgariSignet(final GolgariSignet card) { + super(card); + } + + @Override + public GolgariSignet copy() { + return new GolgariSignet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java b/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java new file mode 100644 index 0000000000..2849a7d5c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java @@ -0,0 +1,120 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.delayed.OnLeaveReturnExiledToBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import static mage.filter.predicate.permanent.ControllerControlsIslandPredicate.filter; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.util.CardUtil; + +/** + * + * @author fireshoes + */ +public class GraspOfFate extends CardImpl { + + public GraspOfFate(UUID ownerId) { + super(ownerId, 3, "Grasp of Fate", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{W}"); + this.expansionSetCode = "C15"; + + // When Grasp of Fate enters the battlefield, for each opponent, exile up to one target nonland permanent that player controls until Grasp of Fate leaves the battlefield. + Ability ability = new EntersBattlefieldTriggeredAbility(new GraspOfFateExileEffect()); + ability.addTarget(new TargetPermanent(filter)); + ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); + this.addAbility(ability); + } + + public GraspOfFate(final GraspOfFate card) { + super(card); + } + + @Override + public void adjustTargets(Ability ability, Game game) { + if (ability instanceof EntersBattlefieldTriggeredAbility) { + ability.getTargets().clear(); + for(UUID opponentId : game.getOpponents(ability.getControllerId())) { + Player opponent = game.getPlayer(opponentId); + if (opponent != null) { + FilterPermanent filter = new FilterPermanent("nonland permanent from opponent " + opponent.getLogName()); + filter.add(new ControllerIdPredicate(opponentId)); + filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); + TargetPermanent target = new TargetPermanent(0, 1, filter,false); + ability.addTarget(target); + } + } + } + } + + @Override + public GraspOfFate copy() { + return new GraspOfFate(this); + } +} + +class GraspOfFateExileEffect extends OneShotEffect { + + public GraspOfFateExileEffect() { + super(Outcome.Benefit); + this.staticText = "exile up to one target nonland permanent that player controls until {this} leaves the battlefield"; + } + + public GraspOfFateExileEffect(final GraspOfFateExileEffect effect) { + super(effect); + } + + @Override + public GraspOfFateExileEffect copy() { + return new GraspOfFateExileEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + return new ExileTargetEffect(CardUtil.getCardExileZoneId(game, source), permanent.getIdName()).apply(game, source); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GravePeril.java b/Mage.Sets/src/mage/sets/commander2015/GravePeril.java new file mode 100644 index 0000000000..dfe28a2ea0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GravePeril.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.commander2015; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class GravePeril extends mage.sets.futuresight.GravePeril { + + public GravePeril(UUID ownerId) { + super(ownerId); + this.cardNumber = 128; + this.expansionSetCode = "C15"; + } + + public GravePeril(final GravePeril card) { + super(card); + } + + @Override + public GravePeril copy() { + return new GravePeril(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GreatOakGuardian.java b/Mage.Sets/src/mage/sets/commander2015/GreatOakGuardian.java new file mode 100644 index 0000000000..3ed072bed0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GreatOakGuardian.java @@ -0,0 +1,128 @@ +/* + * 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.commander2015; + +import java.util.Iterator; +import java.util.List; +import java.util.UUID; +import mage.MageInt; +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SubLayer; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPlayer; + +/** + * + * @author fireshoes + */ +public class GreatOakGuardian extends CardImpl { + + public GreatOakGuardian(UUID ownerId) { + super(ownerId, 37, "Great Oak Guardian", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{5}{G}"); + this.expansionSetCode = "C15"; + this.subtype.add("Treefolk"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // When Great Oak Guardian enters the battlefield, creatures target player controls get +2/+2 until end of turn. Untap them. + Ability ability = new EntersBattlefieldTriggeredAbility(new GreatOakGuardianEffect(), false); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public GreatOakGuardian(final GreatOakGuardian card) { + super(card); + } + + @Override + public GreatOakGuardian copy() { + return new GreatOakGuardian(this); + } +} + +class GreatOakGuardianEffect extends ContinuousEffectImpl { + + public GreatOakGuardianEffect() { + super(Duration.EndOfTurn, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); + staticText = "creatures target player controls get +2/+2 until end of turn. Untap them"; + } + + public GreatOakGuardianEffect(final GreatOakGuardianEffect effect) { + super(effect); + } + + @Override + public GreatOakGuardianEffect copy() { + return new GreatOakGuardianEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (this.affectedObjectsSet) { + List creatures = game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), source.getFirstTarget(), game); + for (Permanent creature : creatures) { + affectedObjectList.add(new MageObjectReference(creature, game)); + } + } + } + + @Override + public boolean apply(Game game, Ability source) { + for (Iterator it = affectedObjectList.iterator(); it.hasNext();) { + Permanent permanent = it.next().getPermanent(game); + if (permanent != null) { + permanent.addPower(2); + permanent.addToughness(2); + permanent.untap(game); + } else { + it.remove(); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GrimBackwoods.java b/Mage.Sets/src/mage/sets/commander2015/GrimBackwoods.java new file mode 100644 index 0000000000..a2d518a782 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GrimBackwoods.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GrimBackwoods extends mage.sets.darkascension.GrimBackwoods { + + public GrimBackwoods(UUID ownerId) { + super(ownerId); + this.cardNumber = 288; + this.expansionSetCode = "C15"; + } + + public GrimBackwoods(final GrimBackwoods card) { + super(card); + } + + @Override + public GrimBackwoods copy() { + return new GrimBackwoods(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/GrislySalvage.java b/Mage.Sets/src/mage/sets/commander2015/GrislySalvage.java new file mode 100644 index 0000000000..8e1ef1e810 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/GrislySalvage.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GrislySalvage extends mage.sets.returntoravnica.GrislySalvage { + + public GrislySalvage(UUID ownerId) { + super(ownerId); + this.cardNumber = 222; + this.expansionSetCode = "C15"; + } + + public GrislySalvage(final GrislySalvage card) { + super(card); + } + + @Override + public GrislySalvage copy() { + return new GrislySalvage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/HamletbackGoliath.java b/Mage.Sets/src/mage/sets/commander2015/HamletbackGoliath.java new file mode 100644 index 0000000000..cf996481c2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/HamletbackGoliath.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HamletbackGoliath extends mage.sets.magic2013.HamletbackGoliath { + + public HamletbackGoliath(UUID ownerId) { + super(ownerId); + this.cardNumber = 156; + this.expansionSetCode = "C15"; + } + + public HamletbackGoliath(final HamletbackGoliath card) { + super(card); + } + + @Override + public HamletbackGoliath copy() { + return new HamletbackGoliath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/HammerfistGiant.java b/Mage.Sets/src/mage/sets/commander2015/HammerfistGiant.java new file mode 100644 index 0000000000..2b4697036a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/HammerfistGiant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HammerfistGiant extends mage.sets.ravnica.HammerfistGiant { + + public HammerfistGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 157; + this.expansionSetCode = "C15"; + } + + public HammerfistGiant(final HammerfistGiant card) { + super(card); + } + + @Override + public HammerfistGiant copy() { + return new HammerfistGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/HeraldOfTheHost.java b/Mage.Sets/src/mage/sets/commander2015/HeraldOfTheHost.java new file mode 100644 index 0000000000..662c7ff122 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/HeraldOfTheHost.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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.abilities.keyword.MyriadAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class HeraldOfTheHost extends CardImpl { + + public HeraldOfTheHost(UUID ownerId) { + super(ownerId, 4, "Herald of the Host", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); + this.expansionSetCode = "C15"; + this.subtype.add("Angel"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + // Myriad + this.addAbility(new MyriadAbility()); + } + + public HeraldOfTheHost(final HeraldOfTheHost card) { + super(card); + } + + @Override + public HeraldOfTheHost copy() { + return new HeraldOfTheHost(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/HighMarket.java b/Mage.Sets/src/mage/sets/commander2015/HighMarket.java new file mode 100644 index 0000000000..48b361b8b1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/HighMarket.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HighMarket extends mage.sets.mercadianmasques.HighMarket { + + public HighMarket(UUID ownerId) { + super(ownerId); + this.cardNumber = 289; + this.expansionSetCode = "C15"; + } + + public HighMarket(final HighMarket card) { + super(card); + } + + @Override + public HighMarket copy() { + return new HighMarket(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Hostility.java b/Mage.Sets/src/mage/sets/commander2015/Hostility.java new file mode 100644 index 0000000000..e4573dede9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Hostility.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Hostility extends mage.sets.jacevschandra.Hostility { + + public Hostility(UUID ownerId) { + super(ownerId); + this.cardNumber = 158; + this.expansionSetCode = "C15"; + } + + public Hostility(final Hostility card) { + super(card); + } + + @Override + public Hostility copy() { + return new Hostility(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/HuntedDragon.java b/Mage.Sets/src/mage/sets/commander2015/HuntedDragon.java new file mode 100644 index 0000000000..994af27c70 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/HuntedDragon.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HuntedDragon extends mage.sets.ravnica.HuntedDragon { + + public HuntedDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 159; + this.expansionSetCode = "C15"; + } + + public HuntedDragon(final HuntedDragon card) { + super(card); + } + + @Override + public HuntedDragon copy() { + return new HuntedDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/IndrikStomphowler.java b/Mage.Sets/src/mage/sets/commander2015/IndrikStomphowler.java new file mode 100644 index 0000000000..ebd219d35a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/IndrikStomphowler.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class IndrikStomphowler extends mage.sets.dissension.IndrikStomphowler { + + public IndrikStomphowler(UUID ownerId) { + super(ownerId); + this.cardNumber = 186; + this.expansionSetCode = "C15"; + } + + public IndrikStomphowler(final IndrikStomphowler card) { + super(card); + } + + @Override + public IndrikStomphowler copy() { + return new IndrikStomphowler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/InfernoTitan.java b/Mage.Sets/src/mage/sets/commander2015/InfernoTitan.java new file mode 100644 index 0000000000..332a7608c7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/InfernoTitan.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class InfernoTitan extends mage.sets.magic2011.InfernoTitan { + + public InfernoTitan(UUID ownerId) { + super(ownerId); + this.cardNumber = 160; + this.expansionSetCode = "C15"; + } + + public InfernoTitan(final InfernoTitan card) { + super(card); + } + + @Override + public InfernoTitan copy() { + return new InfernoTitan(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Island1.java b/Mage.Sets/src/mage/sets/commander2015/Island1.java new file mode 100644 index 0000000000..4bf7f90012 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Island1.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island1 extends mage.cards.basiclands.Island { + + public Island1(UUID ownerId) { + super(ownerId, 327); + this.expansionSetCode = "C15"; + } + + public Island1(final Island1 card) { + super(card); + } + + @Override + public Island1 copy() { + return new Island1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Island2.java b/Mage.Sets/src/mage/sets/commander2015/Island2.java new file mode 100644 index 0000000000..4981eb8d8f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Island2.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island2 extends mage.cards.basiclands.Island { + + public Island2(UUID ownerId) { + super(ownerId, 328); + this.expansionSetCode = "C15"; + } + + public Island2(final Island2 card) { + super(card); + } + + @Override + public Island2 copy() { + return new Island2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Island3.java b/Mage.Sets/src/mage/sets/commander2015/Island3.java new file mode 100644 index 0000000000..57a1ab281d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Island3.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island3 extends mage.cards.basiclands.Island { + + public Island3(UUID ownerId) { + super(ownerId, 329); + this.expansionSetCode = "C15"; + } + + public Island3(final Island3 card) { + super(card); + } + + @Override + public Island3 copy() { + return new Island3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Island4.java b/Mage.Sets/src/mage/sets/commander2015/Island4.java new file mode 100644 index 0000000000..40faa87d88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Island4.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island4 extends mage.cards.basiclands.Island { + + public Island4(UUID ownerId) { + super(ownerId, 330); + this.expansionSetCode = "C15"; + } + + public Island4(final Island4 card) { + super(card); + } + + @Override + public Island4 copy() { + return new Island4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/IzzetBoilerworks.java b/Mage.Sets/src/mage/sets/commander2015/IzzetBoilerworks.java new file mode 100644 index 0000000000..0c13f02a23 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/IzzetBoilerworks.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class IzzetBoilerworks extends mage.sets.guildpact.IzzetBoilerworks { + + public IzzetBoilerworks(UUID ownerId) { + super(ownerId); + this.cardNumber = 290; + this.expansionSetCode = "C15"; + } + + public IzzetBoilerworks(final IzzetBoilerworks card) { + super(card); + } + + @Override + public IzzetBoilerworks copy() { + return new IzzetBoilerworks(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/IzzetGuildgate.java b/Mage.Sets/src/mage/sets/commander2015/IzzetGuildgate.java new file mode 100644 index 0000000000..4b3e168dae --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/IzzetGuildgate.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class IzzetGuildgate extends mage.sets.returntoravnica.IzzetGuildgate { + + public IzzetGuildgate(UUID ownerId) { + super(ownerId); + this.cardNumber = 291; + this.expansionSetCode = "C15"; + } + + public IzzetGuildgate(final IzzetGuildgate card) { + super(card); + } + + @Override + public IzzetGuildgate copy() { + return new IzzetGuildgate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/IzzetSignet.java b/Mage.Sets/src/mage/sets/commander2015/IzzetSignet.java new file mode 100644 index 0000000000..93ef94f95e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/IzzetSignet.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class IzzetSignet extends mage.sets.guildpact.IzzetSignet { + + public IzzetSignet(UUID ownerId) { + super(ownerId); + this.cardNumber = 256; + this.expansionSetCode = "C15"; + } + + public IzzetSignet(final IzzetSignet card) { + super(card); + } + + @Override + public IzzetSignet copy() { + return new IzzetSignet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/JacesArchivist.java b/Mage.Sets/src/mage/sets/commander2015/JacesArchivist.java new file mode 100644 index 0000000000..536237f18e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/JacesArchivist.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class JacesArchivist extends mage.sets.magic2012.JacesArchivist { + + public JacesArchivist(UUID ownerId) { + super(ownerId); + this.cardNumber = 95; + this.expansionSetCode = "C15"; + } + + public JacesArchivist(final JacesArchivist card) { + super(card); + } + + @Override + public JacesArchivist copy() { + return new JacesArchivist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/JaradGolgariLichLord.java b/Mage.Sets/src/mage/sets/commander2015/JaradGolgariLichLord.java new file mode 100644 index 0000000000..111783a9e5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/JaradGolgariLichLord.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class JaradGolgariLichLord extends mage.sets.returntoravnica.JaradGolgariLichLord { + + public JaradGolgariLichLord(UUID ownerId) { + super(ownerId); + this.cardNumber = 223; + this.expansionSetCode = "C15"; + } + + public JaradGolgariLichLord(final JaradGolgariLichLord card) { + super(card); + } + + @Override + public JaradGolgariLichLord copy() { + return new JaradGolgariLichLord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/JarethLeonineTitan.java b/Mage.Sets/src/mage/sets/commander2015/JarethLeonineTitan.java new file mode 100644 index 0000000000..fcfe6a6472 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/JarethLeonineTitan.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class JarethLeonineTitan extends mage.sets.onslaught.JarethLeonineTitan { + + public JarethLeonineTitan(UUID ownerId) { + super(ownerId); + this.cardNumber = 71; + this.expansionSetCode = "C15"; + } + + public JarethLeonineTitan(final JarethLeonineTitan card) { + super(card); + } + + @Override + public JarethLeonineTitan copy() { + return new JarethLeonineTitan(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/JungleHollow.java b/Mage.Sets/src/mage/sets/commander2015/JungleHollow.java new file mode 100644 index 0000000000..459a994596 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/JungleHollow.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class JungleHollow extends mage.sets.khansoftarkir.JungleHollow { + + public JungleHollow(UUID ownerId) { + super(ownerId); + this.cardNumber = 292; + this.expansionSetCode = "C15"; + } + + public JungleHollow(final JungleHollow card) { + super(card); + } + + @Override + public JungleHollow copy() { + return new JungleHollow(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/KarmicJustice.java b/Mage.Sets/src/mage/sets/commander2015/KarmicJustice.java new file mode 100644 index 0000000000..fa59189a76 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/KarmicJustice.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class KarmicJustice extends mage.sets.odyssey.KarmicJustice { + + public KarmicJustice(UUID ownerId) { + super(ownerId); + this.cardNumber = 72; + this.expansionSetCode = "C15"; + } + + public KarmicJustice(final KarmicJustice card) { + super(card); + } + + @Override + public KarmicJustice copy() { + return new KarmicJustice(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/KessigCagebreakers.java b/Mage.Sets/src/mage/sets/commander2015/KessigCagebreakers.java new file mode 100644 index 0000000000..c8853c1200 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/KessigCagebreakers.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class KessigCagebreakers extends mage.sets.innistrad.KessigCagebreakers { + + public KessigCagebreakers(UUID ownerId) { + super(ownerId); + this.cardNumber = 187; + this.expansionSetCode = "C15"; + } + + public KessigCagebreakers(final KessigCagebreakers card) { + super(card); + } + + @Override + public KessigCagebreakers copy() { + return new KessigCagebreakers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/KodamasReach.java b/Mage.Sets/src/mage/sets/commander2015/KodamasReach.java new file mode 100644 index 0000000000..578869279f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/KodamasReach.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class KodamasReach extends mage.sets.commander.KodamasReach { + + public KodamasReach(UUID ownerId) { + super(ownerId); + this.cardNumber = 188; + this.expansionSetCode = "C15"; + } + + public KodamasReach(final KodamasReach card) { + super(card); + } + + @Override + public KodamasReach copy() { + return new KodamasReach(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/KorSanctifiers.java b/Mage.Sets/src/mage/sets/commander2015/KorSanctifiers.java new file mode 100644 index 0000000000..55363b484f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/KorSanctifiers.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class KorSanctifiers extends mage.sets.zendikar.KorSanctifiers { + + public KorSanctifiers(UUID ownerId) { + super(ownerId); + this.cardNumber = 73; + this.expansionSetCode = "C15"; + } + + public KorSanctifiers(final KorSanctifiers card) { + super(card); + } + + @Override + public KorSanctifiers copy() { + return new KorSanctifiers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/KorozdaGuildmage.java b/Mage.Sets/src/mage/sets/commander2015/KorozdaGuildmage.java new file mode 100644 index 0000000000..de30f3299b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/KorozdaGuildmage.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class KorozdaGuildmage extends mage.sets.returntoravnica.KorozdaGuildmage { + + public KorozdaGuildmage(UUID ownerId) { + super(ownerId); + this.cardNumber = 224; + this.expansionSetCode = "C15"; + } + + public KorozdaGuildmage(final KorozdaGuildmage card) { + super(card); + } + + @Override + public KorozdaGuildmage copy() { + return new KorozdaGuildmage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/KrosanGrip.java b/Mage.Sets/src/mage/sets/commander2015/KrosanGrip.java new file mode 100644 index 0000000000..218786c9fd --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/KrosanGrip.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class KrosanGrip extends mage.sets.timespiral.KrosanGrip { + + public KrosanGrip(UUID ownerId) { + super(ownerId); + this.cardNumber = 189; + this.expansionSetCode = "C15"; + } + + public KrosanGrip(final KrosanGrip card) { + super(card); + } + + @Override + public KrosanGrip copy() { + return new KrosanGrip(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LightningGreaves.java b/Mage.Sets/src/mage/sets/commander2015/LightningGreaves.java new file mode 100644 index 0000000000..c3bb0358be --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LightningGreaves.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LightningGreaves extends mage.sets.mirrodin.LightningGreaves { + + public LightningGreaves(UUID ownerId) { + super(ownerId); + this.cardNumber = 257; + this.expansionSetCode = "C15"; + } + + public LightningGreaves(final LightningGreaves card) { + super(card); + } + + @Override + public LightningGreaves copy() { + return new LightningGreaves(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LlanowarReborn.java b/Mage.Sets/src/mage/sets/commander2015/LlanowarReborn.java new file mode 100644 index 0000000000..0186c1edf6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LlanowarReborn.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LlanowarReborn extends mage.sets.heroesvsmonsters.LlanowarReborn { + + public LlanowarReborn(UUID ownerId) { + super(ownerId); + this.cardNumber = 293; + this.expansionSetCode = "C15"; + } + + public LlanowarReborn(final LlanowarReborn card) { + super(card); + } + + @Override + public LlanowarReborn copy() { + return new LlanowarReborn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LoamingShaman.java b/Mage.Sets/src/mage/sets/commander2015/LoamingShaman.java new file mode 100644 index 0000000000..e40d9147cb --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LoamingShaman.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LoamingShaman extends mage.sets.dissension.LoamingShaman { + + public LoamingShaman(UUID ownerId) { + super(ownerId); + this.cardNumber = 190; + this.expansionSetCode = "C15"; + } + + public LoamingShaman(final LoamingShaman card) { + super(card); + } + + @Override + public LoamingShaman copy() { + return new LoamingShaman(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LoneRevenant.java b/Mage.Sets/src/mage/sets/commander2015/LoneRevenant.java new file mode 100644 index 0000000000..5f209497ea --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LoneRevenant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LoneRevenant extends mage.sets.avacynrestored.LoneRevenant { + + public LoneRevenant(UUID ownerId) { + super(ownerId); + this.cardNumber = 96; + this.expansionSetCode = "C15"; + } + + public LoneRevenant(final LoneRevenant card) { + super(card); + } + + @Override + public LoneRevenant copy() { + return new LoneRevenant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LorescaleCoatl.java b/Mage.Sets/src/mage/sets/commander2015/LorescaleCoatl.java new file mode 100644 index 0000000000..974ff8433c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LorescaleCoatl.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LorescaleCoatl extends mage.sets.alarareborn.LorescaleCoatl { + + public LorescaleCoatl(UUID ownerId) { + super(ownerId); + this.cardNumber = 225; + this.expansionSetCode = "C15"; + } + + public LorescaleCoatl(final LorescaleCoatl card) { + super(card); + } + + @Override + public LorescaleCoatl copy() { + return new LorescaleCoatl(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LotlethTroll.java b/Mage.Sets/src/mage/sets/commander2015/LotlethTroll.java new file mode 100644 index 0000000000..9ee92a7b72 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LotlethTroll.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LotlethTroll extends mage.sets.returntoravnica.LotlethTroll { + + public LotlethTroll(UUID ownerId) { + super(ownerId); + this.cardNumber = 226; + this.expansionSetCode = "C15"; + } + + public LotlethTroll(final LotlethTroll card) { + super(card); + } + + @Override + public LotlethTroll copy() { + return new LotlethTroll(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/LoxodonWarhammer.java b/Mage.Sets/src/mage/sets/commander2015/LoxodonWarhammer.java new file mode 100644 index 0000000000..eb96bcf799 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/LoxodonWarhammer.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LoxodonWarhammer extends mage.sets.planechase.LoxodonWarhammer { + + public LoxodonWarhammer(UUID ownerId) { + super(ownerId); + this.cardNumber = 258; + this.expansionSetCode = "C15"; + } + + public LoxodonWarhammer(final LoxodonWarhammer card) { + super(card); + } + + @Override + public LoxodonWarhammer copy() { + return new LoxodonWarhammer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MagmaGiant.java b/Mage.Sets/src/mage/sets/commander2015/MagmaGiant.java new file mode 100644 index 0000000000..050fa02e2a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MagmaGiant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MagmaGiant extends mage.sets.portalsecondage.MagmaGiant { + + public MagmaGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 161; + this.expansionSetCode = "C15"; + } + + public MagmaGiant(final MagmaGiant card) { + super(card); + } + + @Override + public MagmaGiant copy() { + return new MagmaGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Magmaquake.java b/Mage.Sets/src/mage/sets/commander2015/Magmaquake.java new file mode 100644 index 0000000000..3c4691c371 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Magmaquake.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Magmaquake extends mage.sets.magic2013.Magmaquake { + + public Magmaquake(UUID ownerId) { + super(ownerId); + this.cardNumber = 162; + this.expansionSetCode = "C15"; + } + + public Magmaquake(final Magmaquake card) { + super(card); + } + + @Override + public Magmaquake copy() { + return new Magmaquake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MarshalsAnthem.java b/Mage.Sets/src/mage/sets/commander2015/MarshalsAnthem.java new file mode 100644 index 0000000000..7478fe0e18 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MarshalsAnthem.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MarshalsAnthem extends mage.sets.worldwake.MarshalsAnthem { + + public MarshalsAnthem(UUID ownerId) { + super(ownerId); + this.cardNumber = 74; + this.expansionSetCode = "C15"; + } + + public MarshalsAnthem(final MarshalsAnthem card) { + super(card); + } + + @Override + public MarshalsAnthem copy() { + return new MarshalsAnthem(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MelekIzzetParagon.java b/Mage.Sets/src/mage/sets/commander2015/MelekIzzetParagon.java new file mode 100644 index 0000000000..1ddf055d2d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MelekIzzetParagon.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MelekIzzetParagon extends mage.sets.dragonsmaze.MelekIzzetParagon { + + public MelekIzzetParagon(UUID ownerId) { + super(ownerId); + this.cardNumber = 227; + this.expansionSetCode = "C15"; + } + + public MelekIzzetParagon(final MelekIzzetParagon card) { + super(card); + } + + @Override + public MelekIzzetParagon copy() { + return new MelekIzzetParagon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MesaEnchantress.java b/Mage.Sets/src/mage/sets/commander2015/MesaEnchantress.java new file mode 100644 index 0000000000..c2d51b3c8b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MesaEnchantress.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MesaEnchantress extends mage.sets.magic2010.MesaEnchantress { + + public MesaEnchantress(UUID ownerId) { + super(ownerId); + this.cardNumber = 75; + this.expansionSetCode = "C15"; + } + + public MesaEnchantress(final MesaEnchantress card) { + super(card); + } + + @Override + public MesaEnchantress copy() { + return new MesaEnchantress(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MeteorBlast.java b/Mage.Sets/src/mage/sets/commander2015/MeteorBlast.java index 949e01b542..91f6998f97 100644 --- a/Mage.Sets/src/mage/sets/commander2015/MeteorBlast.java +++ b/Mage.Sets/src/mage/sets/commander2015/MeteorBlast.java @@ -47,17 +47,17 @@ import mage.target.common.TargetCreatureOrPlayer; public class MeteorBlast extends CardImpl { public MeteorBlast(UUID ownerId) { - super(ownerId, 28, "Meteor Volley", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{X}{R}{R}{R}"); + super(ownerId, 28, "Meteor Blast", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{X}{R}{R}{R}"); this.expansionSetCode = "C15"; - // Meteor Volley deals 4 damage to each of X target creatures and/or players. - this.getSpellAbility().addEffect(new MeteorVolleyEffect()); + // Meteor Blast deals 4 damage to each of X target creatures and/or players. + this.getSpellAbility().addEffect(new MeteorBlastEffect()); } public MeteorBlast(final MeteorBlast card) { super(card); } - + @Override public void adjustTargets(Ability ability, Game game) { int xValue = ability.getManaCostsToPay().getX(); @@ -73,21 +73,21 @@ public class MeteorBlast extends CardImpl { } } -class MeteorVolleyEffect extends OneShotEffect { +class MeteorBlastEffect extends OneShotEffect { - public MeteorVolleyEffect() { - super(Outcome.Benefit); + public MeteorBlastEffect() { + super(Outcome.Damage); staticText = "{this} deals 4 damage to each of X target creatures and/or players"; } - public MeteorVolleyEffect(final MeteorVolleyEffect effect) { + public MeteorBlastEffect(final MeteorBlastEffect effect) { super(effect); } @Override public boolean apply(Game game, Ability source) { - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { if (source.getTargets().size() > 0) { for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { Permanent creature = game.getPermanent(targetId); @@ -105,9 +105,9 @@ class MeteorVolleyEffect extends OneShotEffect { } return false; } - + @Override - public MeteorVolleyEffect copy() { - return new MeteorVolleyEffect(this); + public MeteorBlastEffect copy() { + return new MeteorBlastEffect(this); } } diff --git a/Mage.Sets/src/mage/sets/commander2015/MindStone.java b/Mage.Sets/src/mage/sets/commander2015/MindStone.java new file mode 100644 index 0000000000..3b699f3148 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MindStone.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MindStone extends mage.sets.tenthedition.MindStone { + + public MindStone(UUID ownerId) { + super(ownerId); + this.cardNumber = 259; + this.expansionSetCode = "C15"; + } + + public MindStone(final MindStone card) { + super(card); + } + + @Override + public MindStone copy() { + return new MindStone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MirrorMatch.java b/Mage.Sets/src/mage/sets/commander2015/MirrorMatch.java new file mode 100644 index 0000000000..dcff7fbe25 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MirrorMatch.java @@ -0,0 +1,166 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.PutTokenOntoBattlefieldCopyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.PhaseStep; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class MirrorMatch extends CardImpl { + + public MirrorMatch(UUID ownerId) { + super(ownerId, 13, "Mirror Match", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{4}{U}{U}"); + this.expansionSetCode = "C15"; + + // Cast Mirror Match only during the declare blockers step. + Ability ability = new SimpleStaticAbility(Zone.ALL, new MirrorMatchRuleModifyingEffect()); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + + // For each creature attacking you or a planeswalker you control, put a token that's a copy of that creature onto the battlefield blocking that creature. Exile those tokens at end of combat. + this.getSpellAbility().addEffect(new MirrorMatchEffect()); + + } + + public MirrorMatch(final MirrorMatch card) { + super(card); + } + + @Override + public MirrorMatch copy() { + return new MirrorMatch(this); + } +} + +class MirrorMatchRuleModifyingEffect extends ContinuousRuleModifyingEffectImpl { + + MirrorMatchRuleModifyingEffect() { + super(Duration.EndOfGame, Outcome.Detriment); + staticText = "Cast {this} only during the declare blockers step"; + } + + MirrorMatchRuleModifyingEffect(final MirrorMatchRuleModifyingEffect effect) { + super(effect); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return GameEvent.EventType.CAST_SPELL.equals(event.getType()); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getSourceId().equals(source.getSourceId())) { + return !game.getTurn().getStepType().equals(PhaseStep.DECLARE_BLOCKERS); + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public MirrorMatchRuleModifyingEffect copy() { + return new MirrorMatchRuleModifyingEffect(this); + } +} + +class MirrorMatchEffect extends OneShotEffect { + + public MirrorMatchEffect() { + super(Outcome.Benefit); + this.staticText = "For each creature attacking you or a planeswalker you control, put a token that's a copy of that creature onto the battlefield blocking that creature. Exile those tokens at end of combat"; + } + + public MirrorMatchEffect(final MirrorMatchEffect effect) { + super(effect); + } + + @Override + public MirrorMatchEffect copy() { + return new MirrorMatchEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (UUID attackerId : game.getCombat().getAttackers()) { + Permanent attacker = game.getPermanent(attackerId); + if (attacker != null + && source.getControllerId().equals(game.getCombat().getDefendingPlayerId(attackerId, game))) { + PutTokenOntoBattlefieldCopyTargetEffect effect = new PutTokenOntoBattlefieldCopyTargetEffect(source.getControllerId(), null, false); + effect.setTargetPointer(new FixedTarget(attacker, game)); + effect.apply(game, source); + CombatGroup group = game.getCombat().findGroup(attacker.getId()); + boolean isCreature = false; + if (group != null) { + for (Permanent addedToken : effect.getAddedPermanent()) { + if (addedToken.getCardType().contains(CardType.CREATURE)) { + group.addBlockerToGroup(addedToken.getId(), attackerId, game); + isCreature = true; + } + ExileTargetEffect exileEffect = new ExileTargetEffect("Exile the token at end of combat"); + exileEffect.setTargetPointer(new FixedTarget(addedToken, game)); + game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect), source); + } + if (isCreature) { + group.pickBlockerOrder(attacker.getControllerId(), game); + } + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MizziumMortars.java b/Mage.Sets/src/mage/sets/commander2015/MizziumMortars.java new file mode 100644 index 0000000000..1c7969c8a0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MizziumMortars.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MizziumMortars extends mage.sets.returntoravnica.MizziumMortars { + + public MizziumMortars(UUID ownerId) { + super(ownerId); + this.cardNumber = 163; + this.expansionSetCode = "C15"; + } + + public MizziumMortars(final MizziumMortars card) { + super(card); + } + + @Override + public MizziumMortars copy() { + return new MizziumMortars(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MizzixOfTheIzmagnus.java b/Mage.Sets/src/mage/sets/commander2015/MizzixOfTheIzmagnus.java new file mode 100644 index 0000000000..705872e164 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MizzixOfTheIzmagnus.java @@ -0,0 +1,157 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.effects.common.counter.AddCountersControllerEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterInstantOrSorceryCard; +import mage.filter.common.FilterInstantOrSorcerySpell; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.stack.Spell; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * + * @author emerald000 + */ +public class MizzixOfTheIzmagnus extends CardImpl { + + private static final FilterInstantOrSorcerySpell filter = new FilterInstantOrSorcerySpell("an instant or sorcery spell with converted mana cost greater than the number of experience counters you have"); + static { + filter.add(new MizzixOfTheIzmagnusPredicate()); + } + + public MizzixOfTheIzmagnus(UUID ownerId) { + super(ownerId, 50, "Mizzix of the Izmagnus", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{2}{U}{R}"); + this.expansionSetCode = "C15"; + this.supertype.add("Legendary"); + this.subtype.add("Goblin"); + this.subtype.add("Wizard"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever you cast an instant or sorcery spell with converted mana cost greater than the number of experience counters you have, you get an experience counter. + this.addAbility(new SpellCastControllerTriggeredAbility( + new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1), false), filter, false)); + + // Instant and sorcery spells you cast cost {1} less to cast for each experience counter you have. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MizzixOfTheIzmagnusCostReductionEffect())); + } + + public MizzixOfTheIzmagnus(final MizzixOfTheIzmagnus card) { + super(card); + } + + @Override + public MizzixOfTheIzmagnus copy() { + return new MizzixOfTheIzmagnus(this); + } +} + +class MizzixOfTheIzmagnusPredicate implements Predicate { + + @Override + public boolean apply(MageObject input, Game game) { + Spell spell = game.getStack().getSpell(input.getId()); + if (spell != null) { + Player controller = game.getPlayer(spell.getControllerId()); + if (controller != null) { + if (spell.getConvertedManaCost() > controller.getCounters().getCount(CounterType.EXPERIENCE)) { + return true; + } + } + } + return false; + } + + @Override + public String toString() { + return "VariableManaCost"; + } +} + +class MizzixOfTheIzmagnusCostReductionEffect extends CostModificationEffectImpl { + + MizzixOfTheIzmagnusCostReductionEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); + staticText = "Instant and sorcery spells you cast cost {1} less to cast for each experience counter you have"; + } + + MizzixOfTheIzmagnusCostReductionEffect(MizzixOfTheIzmagnusCostReductionEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + SpellAbility spellAbility = (SpellAbility) abilityToModify; + CardUtil.adjustCost(spellAbility, controller.getCounters().getCount(CounterType.EXPERIENCE)); + return true; + } + return false; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify instanceof SpellAbility && abilityToModify.getControllerId().equals(source.getControllerId())) { + Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId()); + if (spell != null) { + return new FilterInstantOrSorceryCard().match(spell, source.getSourceId(), source.getControllerId(), game); + } else { + // used at least for flashback ability because Flashback ability doesn't use stack or for getPlayables where spell is not cast yet + Card sourceCard = game.getCard(abilityToModify.getSourceId()); + return sourceCard != null && new FilterInstantOrSorceryCard().match(sourceCard, source.getSourceId(), source.getControllerId(), game); + } + } + return false; + } + + @Override + public MizzixOfTheIzmagnusCostReductionEffect copy() { + return new MizzixOfTheIzmagnusCostReductionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MizzixsMastery.java b/Mage.Sets/src/mage/sets/commander2015/MizzixsMastery.java new file mode 100644 index 0000000000..dfaf1c3b7e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MizzixsMastery.java @@ -0,0 +1,168 @@ +/* + * 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.commander2015; + +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileSpellEffect; +import mage.abilities.keyword.OverloadAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TimingRule; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.common.FilterInstantOrSorceryCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author LevelX2 + */ +public class MizzixsMastery extends CardImpl { + + public MizzixsMastery(UUID ownerId) { + super(ownerId, 29, "Mizzix's Mastery", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{R}"); + this.expansionSetCode = "C15"; + + // Exile target card that's an instant or sorcery from your graveyard. For each card exiled this way, copy it, and you may cast the copy without paying its mana cost. Exile Mizzix's Mastery. + this.getSpellAbility().addEffect(new MizzixsMasteryEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterInstantOrSorceryCard("card that's an instant or sorcery from your graveyard"))); + this.getSpellAbility().addEffect(ExileSpellEffect.getInstance()); + + // Overload {5}{R}{R}{R} + Ability ability = new OverloadAbility(this, new MizzixsMasteryOverloadEffect(), new ManaCostsImpl("{5}{R}{R}{R}"), TimingRule.SORCERY); + ability.addEffect(ExileSpellEffect.getInstance()); + this.addAbility(ability); + } + + public MizzixsMastery(final MizzixsMastery card) { + super(card); + } + + @Override + public MizzixsMastery copy() { + return new MizzixsMastery(this); + } +} + +class MizzixsMasteryEffect extends OneShotEffect { + + public MizzixsMasteryEffect() { + super(Outcome.PlayForFree); + this.staticText = "Exile target card that's an instant or sorcery from your graveyard. For each card exiled this way, copy it, and you may cast the copy without paying its mana cost. Exile {this}"; + } + + public MizzixsMasteryEffect(final MizzixsMasteryEffect effect) { + super(effect); + } + + @Override + public MizzixsMasteryEffect copy() { + return new MizzixsMasteryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Card card = game.getCard(getTargetPointer().getFirst(game, source)); + if (card != null) { + if (controller.moveCards(card, Zone.EXILED, source, game)) { + Card cardCopy = game.copyCard(card, source, source.getControllerId()); + if (cardCopy.getSpellAbility().canChooseTarget(game) + && controller.chooseUse(outcome, "Cast copy of " + card.getName() + " without paying its mana cost?", source, game)) { + controller.cast(cardCopy.getSpellAbility(), game, true); + } + } + } + return true; + } + return false; + } +} + +class MizzixsMasteryOverloadEffect extends OneShotEffect { + + public MizzixsMasteryOverloadEffect() { + super(Outcome.PlayForFree); + this.staticText = "Exile each card that's an instant or sorcery from your graveyard. For each card exiled this way, copy it, and you may cast the copy without paying its mana cost. Exile {this}"; + } + + public MizzixsMasteryOverloadEffect(final MizzixsMasteryOverloadEffect effect) { + super(effect); + } + + @Override + public MizzixsMasteryOverloadEffect copy() { + return new MizzixsMasteryOverloadEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Set cardsToExile = controller.getGraveyard().getCards(new FilterInstantOrSorceryCard(), source.getId(), source.getControllerId(), game); + if (!cardsToExile.isEmpty()) { + if (controller.moveCards(cardsToExile, Zone.EXILED, source, game)) { + Cards copiedCards = new CardsImpl(); + for (Card card : cardsToExile) { + copiedCards.add(game.copyCard(card, source, source.getControllerId())); + } + boolean continueCasting = true; + while (continueCasting) { + TargetCard targetCard = new TargetCard(0, 1, Zone.EXILED, new FilterCard("copied card to cast without paying its mana cost?")); + targetCard.setNotTarget(true); + if (controller.choose(outcome, copiedCards, targetCard, game)) { + Card selectedCard = game.getCard(targetCard.getFirstTarget()); + if (selectedCard != null && selectedCard.getSpellAbility().canChooseTarget(game)) { + if (controller.cast(selectedCard.getSpellAbility(), game, true)) { + copiedCards.remove(selectedCard); + } + } + } + continueCasting = copiedCards.size() > 0 + && controller.chooseUse(outcome, "Cast one of the copied cards without paying its mana cost?", source, game); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MonkIdealist.java b/Mage.Sets/src/mage/sets/commander2015/MonkIdealist.java new file mode 100644 index 0000000000..91dac8c97e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MonkIdealist.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MonkIdealist extends mage.sets.urzassaga.MonkIdealist { + + public MonkIdealist(UUID ownerId) { + super(ownerId); + this.cardNumber = 76; + this.expansionSetCode = "C15"; + } + + public MonkIdealist(final MonkIdealist card) { + super(card); + } + + @Override + public MonkIdealist copy() { + return new MonkIdealist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MosswortBridge.java b/Mage.Sets/src/mage/sets/commander2015/MosswortBridge.java new file mode 100644 index 0000000000..a67796f6cc --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MosswortBridge.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MosswortBridge extends mage.sets.commander2013.MosswortBridge { + + public MosswortBridge(UUID ownerId) { + super(ownerId); + this.cardNumber = 294; + this.expansionSetCode = "C15"; + } + + public MosswortBridge(final MosswortBridge card) { + super(card); + } + + @Override + public MosswortBridge copy() { + return new MosswortBridge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mountain1.java b/Mage.Sets/src/mage/sets/commander2015/Mountain1.java new file mode 100644 index 0000000000..653e03ee18 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mountain1.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain1 extends mage.cards.basiclands.Mountain { + + public Mountain1(UUID ownerId) { + super(ownerId, 335); + this.expansionSetCode = "C15"; + } + + public Mountain1(final Mountain1 card) { + super(card); + } + + @Override + public Mountain1 copy() { + return new Mountain1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mountain2.java b/Mage.Sets/src/mage/sets/commander2015/Mountain2.java new file mode 100644 index 0000000000..2abb1ad2b3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mountain2.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain2 extends mage.cards.basiclands.Mountain { + + public Mountain2(UUID ownerId) { + super(ownerId, 336); + this.expansionSetCode = "C15"; + } + + public Mountain2(final Mountain2 card) { + super(card); + } + + @Override + public Mountain2 copy() { + return new Mountain2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mountain3.java b/Mage.Sets/src/mage/sets/commander2015/Mountain3.java new file mode 100644 index 0000000000..02af3e46f1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mountain3.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain3 extends mage.cards.basiclands.Mountain { + + public Mountain3(UUID ownerId) { + super(ownerId, 337); + this.expansionSetCode = "C15"; + } + + public Mountain3(final Mountain3 card) { + super(card); + } + + @Override + public Mountain3 copy() { + return new Mountain3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mountain4.java b/Mage.Sets/src/mage/sets/commander2015/Mountain4.java new file mode 100644 index 0000000000..ea3e2e7f8a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mountain4.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain4 extends mage.cards.basiclands.Mountain { + + public Mountain4(UUID ownerId) { + super(ownerId, 338); + this.expansionSetCode = "C15"; + } + + public Mountain4(final Mountain4 card) { + super(card); + } + + @Override + public Mountain4 copy() { + return new Mountain4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mulch.java b/Mage.Sets/src/mage/sets/commander2015/Mulch.java new file mode 100644 index 0000000000..d5eab8ce89 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mulch.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mulch extends mage.sets.innistrad.Mulch { + + public Mulch(UUID ownerId) { + super(ownerId); + this.cardNumber = 191; + this.expansionSetCode = "C15"; + } + + public Mulch(final Mulch card) { + super(card); + } + + @Override + public Mulch copy() { + return new Mulch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mulldrifter.java b/Mage.Sets/src/mage/sets/commander2015/Mulldrifter.java new file mode 100644 index 0000000000..b916017ea3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mulldrifter.java @@ -0,0 +1,54 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Mulldrifter extends mage.sets.commander.Mulldrifter { + + public Mulldrifter(UUID ownerId) { + super(ownerId); + this.cardNumber = 97; + this.expansionSetCode = "C15"; + this.rarity = Rarity.UNCOMMON; + } + + public Mulldrifter(final Mulldrifter card) { + super(card); + } + + @Override + public Mulldrifter copy() { + return new Mulldrifter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Mycoloth.java b/Mage.Sets/src/mage/sets/commander2015/Mycoloth.java new file mode 100644 index 0000000000..5174b44b87 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Mycoloth.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mycoloth extends mage.sets.shardsofalara.Mycoloth { + + public Mycoloth(UUID ownerId) { + super(ownerId); + this.cardNumber = 192; + this.expansionSetCode = "C15"; + } + + public Mycoloth(final Mycoloth card) { + super(card); + } + + @Override + public Mycoloth copy() { + return new Mycoloth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MysticConfluence.java b/Mage.Sets/src/mage/sets/commander2015/MysticConfluence.java new file mode 100644 index 0000000000..cd6e2f946e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MysticConfluence.java @@ -0,0 +1,81 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetSpell; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class MysticConfluence extends CardImpl { + + public MysticConfluence(UUID ownerId) { + super(ownerId, 14, "Mystic Confluence", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{3}{U}{U}"); + this.expansionSetCode = "C15"; + + // Choose three. You may choose the same mode more than once. + this.getSpellAbility().getModes().setMinModes(3); + this.getSpellAbility().getModes().setMaxModes(3); + this.getSpellAbility().getModes().setEachModeMoreThanOnce(true); + + // - Counter target spell unless its controller pays {3}; + this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new GenericManaCost(3))); + this.getSpellAbility().addTarget(new TargetSpell()); + + // Return target creature to its owner's hand; + Mode mode = new Mode(); + mode.getEffects().add(new ReturnToHandTargetEffect()); + mode.getTargets().add(new TargetCreaturePermanent()); + this.getSpellAbility().getModes().addMode(mode); + + // Draw a card. + mode = new Mode(); + mode.getEffects().add(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().getModes().addMode(mode); + } + + public MysticConfluence(final MysticConfluence card) { + super(card); + } + + @Override + public MysticConfluence copy() { + return new MysticConfluence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MysticRetrieval.java b/Mage.Sets/src/mage/sets/commander2015/MysticRetrieval.java new file mode 100644 index 0000000000..6884113958 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MysticRetrieval.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MysticRetrieval extends mage.sets.darkascension.MysticRetrieval { + + public MysticRetrieval(UUID ownerId) { + super(ownerId); + this.cardNumber = 98; + this.expansionSetCode = "C15"; + } + + public MysticRetrieval(final MysticRetrieval card) { + super(card); + } + + @Override + public MysticRetrieval copy() { + return new MysticRetrieval(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/MysticSnake.java b/Mage.Sets/src/mage/sets/commander2015/MysticSnake.java new file mode 100644 index 0000000000..7f52cfdad5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/MysticSnake.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MysticSnake extends mage.sets.apocalypse.MysticSnake { + + public MysticSnake(UUID ownerId) { + super(ownerId); + this.cardNumber = 228; + this.expansionSetCode = "C15"; + } + + public MysticSnake(final MysticSnake card) { + super(card); + } + + @Override + public MysticSnake copy() { + return new MysticSnake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/NecromancersCovenant.java b/Mage.Sets/src/mage/sets/commander2015/NecromancersCovenant.java new file mode 100644 index 0000000000..4e33f50245 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/NecromancersCovenant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NecromancersCovenant extends mage.sets.alarareborn.NecromancersCovenant { + + public NecromancersCovenant(UUID ownerId) { + super(ownerId); + this.cardNumber = 229; + this.expansionSetCode = "C15"; + } + + public NecromancersCovenant(final NecromancersCovenant card) { + super(card); + } + + @Override + public NecromancersCovenant copy() { + return new NecromancersCovenant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/NewBenalia.java b/Mage.Sets/src/mage/sets/commander2015/NewBenalia.java new file mode 100644 index 0000000000..25f45dcb9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/NewBenalia.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NewBenalia extends mage.sets.futuresight.NewBenalia { + + public NewBenalia(UUID ownerId) { + super(ownerId); + this.cardNumber = 295; + this.expansionSetCode = "C15"; + } + + public NewBenalia(final NewBenalia card) { + super(card); + } + + @Override + public NewBenalia copy() { + return new NewBenalia(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Nighthowler.java b/Mage.Sets/src/mage/sets/commander2015/Nighthowler.java new file mode 100644 index 0000000000..35fb765437 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Nighthowler.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Nighthowler extends mage.sets.theros.Nighthowler { + + public Nighthowler(UUID ownerId) { + super(ownerId); + this.cardNumber = 129; + this.expansionSetCode = "C15"; + } + + public Nighthowler(final Nighthowler card) { + super(card); + } + + @Override + public Nighthowler copy() { + return new Nighthowler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/NinjaOfTheDeepHours.java b/Mage.Sets/src/mage/sets/commander2015/NinjaOfTheDeepHours.java new file mode 100644 index 0000000000..e3e028c624 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/NinjaOfTheDeepHours.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NinjaOfTheDeepHours extends mage.sets.betrayersofkamigawa.NinjaOfTheDeepHours { + + public NinjaOfTheDeepHours(UUID ownerId) { + super(ownerId); + this.cardNumber = 99; + this.expansionSetCode = "C15"; + } + + public NinjaOfTheDeepHours(final NinjaOfTheDeepHours card) { + super(card); + } + + @Override + public NinjaOfTheDeepHours copy() { + return new NinjaOfTheDeepHours(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/NobleQuarry.java b/Mage.Sets/src/mage/sets/commander2015/NobleQuarry.java new file mode 100644 index 0000000000..29d430a5a0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/NobleQuarry.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NobleQuarry extends mage.sets.bornofthegods.NobleQuarry { + + public NobleQuarry(UUID ownerId) { + super(ownerId); + this.cardNumber = 193; + this.expansionSetCode = "C15"; + } + + public NobleQuarry(final NobleQuarry card) { + super(card); + } + + @Override + public NobleQuarry copy() { + return new NobleQuarry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/NovijenHeartOfProgress.java b/Mage.Sets/src/mage/sets/commander2015/NovijenHeartOfProgress.java new file mode 100644 index 0000000000..d1863b2f48 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/NovijenHeartOfProgress.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NovijenHeartOfProgress extends mage.sets.dissension.NovijenHeartOfProgress { + + public NovijenHeartOfProgress(UUID ownerId) { + super(ownerId); + this.cardNumber = 296; + this.expansionSetCode = "C15"; + } + + public NovijenHeartOfProgress(final NovijenHeartOfProgress card) { + super(card); + } + + @Override + public NovijenHeartOfProgress copy() { + return new NovijenHeartOfProgress(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OhranViper.java b/Mage.Sets/src/mage/sets/commander2015/OhranViper.java new file mode 100644 index 0000000000..2b7dbbef60 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OhranViper.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OhranViper extends mage.sets.jacevsvraska.OhranViper { + + public OhranViper(UUID ownerId) { + super(ownerId); + this.cardNumber = 194; + this.expansionSetCode = "C15"; + } + + public OhranViper(final OhranViper card) { + super(card); + } + + @Override + public OhranViper copy() { + return new OhranViper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OpenTheVaults.java b/Mage.Sets/src/mage/sets/commander2015/OpenTheVaults.java new file mode 100644 index 0000000000..4cf2f4529b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OpenTheVaults.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OpenTheVaults extends mage.sets.magic2010.OpenTheVaults { + + public OpenTheVaults(UUID ownerId) { + super(ownerId); + this.cardNumber = 77; + this.expansionSetCode = "C15"; + } + + public OpenTheVaults(final OpenTheVaults card) { + super(card); + } + + @Override + public OpenTheVaults copy() { + return new OpenTheVaults(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OranRiefTheVastwood.java b/Mage.Sets/src/mage/sets/commander2015/OranRiefTheVastwood.java new file mode 100644 index 0000000000..3ddc215763 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OranRiefTheVastwood.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OranRiefTheVastwood extends mage.sets.zendikar.OranRiefTheVastwood { + + public OranRiefTheVastwood(UUID ownerId) { + super(ownerId); + this.cardNumber = 297; + this.expansionSetCode = "C15"; + } + + public OranRiefTheVastwood(final OranRiefTheVastwood card) { + super(card); + } + + @Override + public OranRiefTheVastwood copy() { + return new OranRiefTheVastwood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java b/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java new file mode 100644 index 0000000000..2eaff4701e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java @@ -0,0 +1,129 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterBasicLandCard; +import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author LevelX2 + */ +public class OreskosExplorer extends CardImpl { + + public OreskosExplorer(UUID ownerId) { + super(ownerId, 6, "Oreskos Explorer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "C15"; + this.subtype.add("Cat"); + this.subtype.add("Scout"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Oreskos Explorer enters the battlefield, search your library for up to X Plains cards, + // where X is the number of players who control more lands than you. Reveal those cards, put them into your hand, then shuffle your library. + this.addAbility(new EntersBattlefieldTriggeredAbility(new OreskosExplorerEffect())); + + } + + public OreskosExplorer(final OreskosExplorer card) { + super(card); + } + + @Override + public OreskosExplorer copy() { + return new OreskosExplorer(this); + } +} + +class OreskosExplorerEffect extends OneShotEffect { + + public OreskosExplorerEffect() { + super(Outcome.PutLandInPlay); + this.staticText = "search your library for up to X Plains cards, where X is the number of players who control more lands than you. Reveal those cards, put them into your hand, then shuffle your library"; + } + + public OreskosExplorerEffect(final OreskosExplorerEffect effect) { + super(effect); + } + + @Override + public OreskosExplorerEffect copy() { + return new OreskosExplorerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller == null || sourceObject == null) { + return false; + } + + int controllerLands = game.getBattlefield().countAll(new FilterLandPermanent(), controller.getId(), game); + int landsToSearch = 0; + for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { + if (!playerId.equals(controller.getId())) { + if (controllerLands < game.getBattlefield().countAll(new FilterLandPermanent(), playerId, game)) { + landsToSearch++; + } + } + } + if (landsToSearch > 0) { + FilterBasicLandCard filterPlains = new FilterBasicLandCard("up to " + landsToSearch + " Plains cards"); + filterPlains.add(new ControllerPredicate(TargetController.YOU)); + filterPlains.add(new SubtypePredicate("Plains")); + TargetCardInLibrary target = new TargetCardInLibrary(0, landsToSearch, filterPlains); + if (controller.searchLibrary(target, game)) { + Cards cards = new CardsImpl(target.getTargets()); + controller.revealCards(sourceObject.getIdName(), cards, game); + controller.moveCards(cards.getCards(game), Zone.HAND, source, game); + } + } + controller.shuffleLibrary(game); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OrimsThunder.java b/Mage.Sets/src/mage/sets/commander2015/OrimsThunder.java new file mode 100644 index 0000000000..d729ba66a6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OrimsThunder.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrimsThunder extends mage.sets.apocalypse.OrimsThunder { + + public OrimsThunder(UUID ownerId) { + super(ownerId); + this.cardNumber = 78; + this.expansionSetCode = "C15"; + } + + public OrimsThunder(final OrimsThunder card) { + super(card); + } + + @Override + public OrimsThunder copy() { + return new OrimsThunder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OrochiHatchery.java b/Mage.Sets/src/mage/sets/commander2015/OrochiHatchery.java new file mode 100644 index 0000000000..fd94f987e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OrochiHatchery.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrochiHatchery extends mage.sets.championsofkamigawa.OrochiHatchery { + + public OrochiHatchery(UUID ownerId) { + super(ownerId); + this.cardNumber = 260; + this.expansionSetCode = "C15"; + } + + public OrochiHatchery(final OrochiHatchery card) { + super(card); + } + + @Override + public OrochiHatchery copy() { + return new OrochiHatchery(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OrzhovBasilica.java b/Mage.Sets/src/mage/sets/commander2015/OrzhovBasilica.java new file mode 100644 index 0000000000..8415f29971 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OrzhovBasilica.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrzhovBasilica extends mage.sets.guildpact.OrzhovBasilica { + + public OrzhovBasilica(UUID ownerId) { + super(ownerId); + this.cardNumber = 298; + this.expansionSetCode = "C15"; + } + + public OrzhovBasilica(final OrzhovBasilica card) { + super(card); + } + + @Override + public OrzhovBasilica copy() { + return new OrzhovBasilica(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OrzhovCluestone.java b/Mage.Sets/src/mage/sets/commander2015/OrzhovCluestone.java new file mode 100644 index 0000000000..0849f9dfee --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OrzhovCluestone.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrzhovCluestone extends mage.sets.dragonsmaze.OrzhovCluestone { + + public OrzhovCluestone(UUID ownerId) { + super(ownerId); + this.cardNumber = 261; + this.expansionSetCode = "C15"; + } + + public OrzhovCluestone(final OrzhovCluestone card) { + super(card); + } + + @Override + public OrzhovCluestone copy() { + return new OrzhovCluestone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OrzhovGuildgate.java b/Mage.Sets/src/mage/sets/commander2015/OrzhovGuildgate.java new file mode 100644 index 0000000000..ecbb8a3628 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OrzhovGuildgate.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrzhovGuildgate extends mage.sets.gatecrash.OrzhovGuildgate { + + public OrzhovGuildgate(UUID ownerId) { + super(ownerId); + this.cardNumber = 299; + this.expansionSetCode = "C15"; + } + + public OrzhovGuildgate(final OrzhovGuildgate card) { + super(card); + } + + @Override + public OrzhovGuildgate copy() { + return new OrzhovGuildgate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OrzhovSignet.java b/Mage.Sets/src/mage/sets/commander2015/OrzhovSignet.java new file mode 100644 index 0000000000..50ac955686 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OrzhovSignet.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrzhovSignet extends mage.sets.guildpact.OrzhovSignet { + + public OrzhovSignet(UUID ownerId) { + super(ownerId); + this.cardNumber = 262; + this.expansionSetCode = "C15"; + } + + public OrzhovSignet(final OrzhovSignet card) { + super(card); + } + + @Override + public OrzhovSignet copy() { + return new OrzhovSignet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Overrun.java b/Mage.Sets/src/mage/sets/commander2015/Overrun.java new file mode 100644 index 0000000000..cb335fa682 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Overrun.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Overrun extends mage.sets.magic2010.Overrun { + + public Overrun(UUID ownerId) { + super(ownerId); + this.cardNumber = 195; + this.expansionSetCode = "C15"; + } + + public Overrun(final Overrun card) { + super(card); + } + + @Override + public Overrun copy() { + return new Overrun(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/OverwhelmingStampede.java b/Mage.Sets/src/mage/sets/commander2015/OverwhelmingStampede.java new file mode 100644 index 0000000000..83b92aa774 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/OverwhelmingStampede.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OverwhelmingStampede extends mage.sets.magic2011.OverwhelmingStampede { + + public OverwhelmingStampede(UUID ownerId) { + super(ownerId); + this.cardNumber = 196; + this.expansionSetCode = "C15"; + } + + public OverwhelmingStampede(final OverwhelmingStampede card) { + super(card); + } + + @Override + public OverwhelmingStampede copy() { + return new OverwhelmingStampede(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PatagiaViper.java b/Mage.Sets/src/mage/sets/commander2015/PatagiaViper.java new file mode 100644 index 0000000000..1a4949fe0b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PatagiaViper.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PatagiaViper extends mage.sets.dissension.PatagiaViper { + + public PatagiaViper(UUID ownerId) { + super(ownerId); + this.cardNumber = 197; + this.expansionSetCode = "C15"; + } + + public PatagiaViper(final PatagiaViper card) { + super(card); + } + + @Override + public PatagiaViper copy() { + return new PatagiaViper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PhyrexianArena.java b/Mage.Sets/src/mage/sets/commander2015/PhyrexianArena.java new file mode 100644 index 0000000000..5d56aca512 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PhyrexianArena.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PhyrexianArena extends mage.sets.apocalypse.PhyrexianArena { + + public PhyrexianArena(UUID ownerId) { + super(ownerId); + this.cardNumber = 130; + this.expansionSetCode = "C15"; + } + + public PhyrexianArena(final PhyrexianArena card) { + super(card); + } + + @Override + public PhyrexianArena copy() { + return new PhyrexianArena(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PhyrexianPlaguelord.java b/Mage.Sets/src/mage/sets/commander2015/PhyrexianPlaguelord.java new file mode 100644 index 0000000000..07d62c005f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PhyrexianPlaguelord.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PhyrexianPlaguelord extends mage.sets.urzaslegacy.PhyrexianPlaguelord { + + public PhyrexianPlaguelord(UUID ownerId) { + super(ownerId); + this.cardNumber = 131; + this.expansionSetCode = "C15"; + } + + public PhyrexianPlaguelord(final PhyrexianPlaguelord card) { + super(card); + } + + @Override + public PhyrexianPlaguelord copy() { + return new PhyrexianPlaguelord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PhyrexianRager.java b/Mage.Sets/src/mage/sets/commander2015/PhyrexianRager.java new file mode 100644 index 0000000000..c7bbc39f9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PhyrexianRager.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PhyrexianRager extends mage.sets.tenthedition.PhyrexianRager { + + public PhyrexianRager(UUID ownerId) { + super(ownerId); + this.cardNumber = 132; + this.expansionSetCode = "C15"; + } + + public PhyrexianRager(final PhyrexianRager card) { + super(card); + } + + @Override + public PhyrexianRager copy() { + return new PhyrexianRager(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PhyrexianReclamation.java b/Mage.Sets/src/mage/sets/commander2015/PhyrexianReclamation.java new file mode 100644 index 0000000000..09c579380e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PhyrexianReclamation.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PhyrexianReclamation extends mage.sets.urzaslegacy.PhyrexianReclamation { + + public PhyrexianReclamation(UUID ownerId) { + super(ownerId); + this.cardNumber = 133; + this.expansionSetCode = "C15"; + } + + public PhyrexianReclamation(final PhyrexianReclamation card) { + super(card); + } + + @Override + public PhyrexianReclamation copy() { + return new PhyrexianReclamation(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Plains1.java b/Mage.Sets/src/mage/sets/commander2015/Plains1.java new file mode 100644 index 0000000000..6df3c22bdf --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Plains1.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains1 extends mage.cards.basiclands.Plains { + + public Plains1(UUID ownerId) { + super(ownerId, 323); + this.expansionSetCode = "C15"; + } + + public Plains1(final Plains1 card) { + super(card); + } + + @Override + public Plains1 copy() { + return new Plains1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Plains2.java b/Mage.Sets/src/mage/sets/commander2015/Plains2.java new file mode 100644 index 0000000000..656f5074bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Plains2.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains2 extends mage.cards.basiclands.Plains { + + public Plains2(UUID ownerId) { + super(ownerId, 324); + this.expansionSetCode = "C15"; + } + + public Plains2(final Plains2 card) { + super(card); + } + + @Override + public Plains2 copy() { + return new Plains2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Plains3.java b/Mage.Sets/src/mage/sets/commander2015/Plains3.java new file mode 100644 index 0000000000..fdd6a0e8f1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Plains3.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains3 extends mage.cards.basiclands.Plains { + + public Plains3(UUID ownerId) { + super(ownerId, 325); + this.expansionSetCode = "C15"; + } + + public Plains3(final Plains3 card) { + super(card); + } + + @Override + public Plains3 copy() { + return new Plains3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Plains4.java b/Mage.Sets/src/mage/sets/commander2015/Plains4.java new file mode 100644 index 0000000000..630aab930c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Plains4.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains4 extends mage.cards.basiclands.Plains { + + public Plains4(UUID ownerId) { + super(ownerId, 326); + this.expansionSetCode = "C15"; + } + + public Plains4(final Plains4 card) { + super(card); + } + + @Override + public Plains4 copy() { + return new Plains4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Plaxmanta.java b/Mage.Sets/src/mage/sets/commander2015/Plaxmanta.java new file mode 100644 index 0000000000..1526d4e5c6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Plaxmanta.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plaxmanta extends mage.sets.dissension.Plaxmanta { + + public Plaxmanta(UUID ownerId) { + super(ownerId); + this.cardNumber = 100; + this.expansionSetCode = "C15"; + } + + public Plaxmanta(final Plaxmanta card) { + super(card); + } + + @Override + public Plaxmanta copy() { + return new Plaxmanta(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PollutedMire.java b/Mage.Sets/src/mage/sets/commander2015/PollutedMire.java new file mode 100644 index 0000000000..558092f2ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PollutedMire.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PollutedMire extends mage.sets.urzassaga.PollutedMire { + + public PollutedMire(UUID ownerId) { + super(ownerId); + this.cardNumber = 300; + this.expansionSetCode = "C15"; + } + + public PollutedMire(final PollutedMire card) { + super(card); + } + + @Override + public PollutedMire copy() { + return new PollutedMire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Preordain.java b/Mage.Sets/src/mage/sets/commander2015/Preordain.java new file mode 100644 index 0000000000..0bbe13d95f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Preordain.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Preordain extends mage.sets.magic2011.Preordain { + + public Preordain(UUID ownerId) { + super(ownerId); + this.cardNumber = 101; + this.expansionSetCode = "C15"; + } + + public Preordain(final Preordain card) { + super(card); + } + + @Override + public Preordain copy() { + return new Preordain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PrimalGrowth.java b/Mage.Sets/src/mage/sets/commander2015/PrimalGrowth.java new file mode 100644 index 0000000000..67fafd594a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PrimalGrowth.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PrimalGrowth extends mage.sets.planeshift.PrimalGrowth { + + public PrimalGrowth(UUID ownerId) { + super(ownerId); + this.cardNumber = 198; + this.expansionSetCode = "C15"; + } + + public PrimalGrowth(final PrimalGrowth card) { + super(card); + } + + @Override + public PrimalGrowth copy() { + return new PrimalGrowth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PrimeSpeakerZegana.java b/Mage.Sets/src/mage/sets/commander2015/PrimeSpeakerZegana.java new file mode 100644 index 0000000000..df10f93372 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PrimeSpeakerZegana.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PrimeSpeakerZegana extends mage.sets.gatecrash.PrimeSpeakerZegana { + + public PrimeSpeakerZegana(UUID ownerId) { + super(ownerId); + this.cardNumber = 230; + this.expansionSetCode = "C15"; + } + + public PrimeSpeakerZegana(final PrimeSpeakerZegana card) { + super(card); + } + + @Override + public PrimeSpeakerZegana copy() { + return new PrimeSpeakerZegana(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PropheticBolt.java b/Mage.Sets/src/mage/sets/commander2015/PropheticBolt.java new file mode 100644 index 0000000000..bd9a87ca73 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PropheticBolt.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PropheticBolt extends mage.sets.commander.PropheticBolt { + + public PropheticBolt(UUID ownerId) { + super(ownerId); + this.cardNumber = 231; + this.expansionSetCode = "C15"; + } + + public PropheticBolt(final PropheticBolt card) { + super(card); + } + + @Override + public PropheticBolt copy() { + return new PropheticBolt(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/PsychosisCrawler.java b/Mage.Sets/src/mage/sets/commander2015/PsychosisCrawler.java new file mode 100644 index 0000000000..745fa7cdfa --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/PsychosisCrawler.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PsychosisCrawler extends mage.sets.mirrodinbesieged.PsychosisCrawler { + + public PsychosisCrawler(UUID ownerId) { + super(ownerId); + this.cardNumber = 263; + this.expansionSetCode = "C15"; + } + + public PsychosisCrawler(final PsychosisCrawler card) { + super(card); + } + + @Override + public PsychosisCrawler copy() { + return new PsychosisCrawler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Putrefy.java b/Mage.Sets/src/mage/sets/commander2015/Putrefy.java new file mode 100644 index 0000000000..b2f063a6f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Putrefy.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Putrefy extends mage.sets.ravnica.Putrefy { + + public Putrefy(UUID ownerId) { + super(ownerId); + this.cardNumber = 232; + this.expansionSetCode = "C15"; + } + + public Putrefy(final Putrefy card) { + super(card); + } + + @Override + public Putrefy copy() { + return new Putrefy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/RampantGrowth.java b/Mage.Sets/src/mage/sets/commander2015/RampantGrowth.java new file mode 100644 index 0000000000..2905ac935b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RampantGrowth.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RampantGrowth extends mage.sets.magic2010.RampantGrowth { + + public RampantGrowth(UUID ownerId) { + super(ownerId); + this.cardNumber = 199; + this.expansionSetCode = "C15"; + } + + public RampantGrowth(final RampantGrowth card) { + super(card); + } + + @Override + public RampantGrowth copy() { + return new RampantGrowth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/RapidHybridization.java b/Mage.Sets/src/mage/sets/commander2015/RapidHybridization.java new file mode 100644 index 0000000000..8a781f0716 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RapidHybridization.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RapidHybridization extends mage.sets.gatecrash.RapidHybridization { + + public RapidHybridization(UUID ownerId) { + super(ownerId); + this.cardNumber = 102; + this.expansionSetCode = "C15"; + } + + public RapidHybridization(final RapidHybridization card) { + super(card); + } + + @Override + public RapidHybridization copy() { + return new RapidHybridization(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ReinsOfPower.java b/Mage.Sets/src/mage/sets/commander2015/ReinsOfPower.java new file mode 100644 index 0000000000..ad4a9c1826 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ReinsOfPower.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.commander2015; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class ReinsOfPower extends mage.sets.stronghold.ReinsOfPower { + + public ReinsOfPower(UUID ownerId) { + super(ownerId); + this.cardNumber = 103; + this.expansionSetCode = "C15"; + } + + public ReinsOfPower(final ReinsOfPower card) { + super(card); + } + + @Override + public ReinsOfPower copy() { + return new ReinsOfPower(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ReliquaryTower.java b/Mage.Sets/src/mage/sets/commander2015/ReliquaryTower.java new file mode 100644 index 0000000000..b9590f5136 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ReliquaryTower.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ReliquaryTower extends mage.sets.conflux.ReliquaryTower { + + public ReliquaryTower(UUID ownerId) { + super(ownerId); + this.cardNumber = 301; + this.expansionSetCode = "C15"; + } + + public ReliquaryTower(final ReliquaryTower card) { + super(card); + } + + @Override + public ReliquaryTower copy() { + return new ReliquaryTower(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Repeal.java b/Mage.Sets/src/mage/sets/commander2015/Repeal.java new file mode 100644 index 0000000000..cb707e76bf --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Repeal.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Repeal extends mage.sets.guildpact.Repeal { + + public Repeal(UUID ownerId) { + super(ownerId); + this.cardNumber = 104; + this.expansionSetCode = "C15"; + } + + public Repeal(final Repeal card) { + super(card); + } + + @Override + public Repeal copy() { + return new Repeal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/RighteousConfluence.java b/Mage.Sets/src/mage/sets/commander2015/RighteousConfluence.java new file mode 100644 index 0000000000..1edf38b36f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RighteousConfluence.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.commander2015; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.KnightToken; +import mage.target.common.TargetEnchantmentPermanent; + +/** + * + * @author LevelX2 + */ +public class RighteousConfluence extends CardImpl { + + public RighteousConfluence(UUID ownerId) { + super(ownerId, 7, "Righteous Confluence", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{W}{W}"); + this.expansionSetCode = "C15"; + + // Choose three - You may choose the same mode more than once. + this.getSpellAbility().getModes().setMinModes(3); + this.getSpellAbility().getModes().setMaxModes(3); + this.getSpellAbility().getModes().setEachModeMoreThanOnce(true); + + // - Put a 2/2 white Knight creature token with vigilance onto the battlefield; + this.getSpellAbility().addEffect(new CreateTokenEffect(new KnightToken())); + + // - Exile target enchantment; + Mode mode = new Mode(); + mode.getEffects().add(new ExileTargetEffect()); + mode.getTargets().add(new TargetEnchantmentPermanent()); + this.getSpellAbility().getModes().addMode(mode); + + // You gain 5 life; + mode = new Mode(); + mode.getEffects().add(new GainLifeEffect(5)); + this.getSpellAbility().getModes().addMode(mode); + } + + public RighteousConfluence(final RighteousConfluence card) { + super(card); + } + + @Override + public RighteousConfluence copy() { + return new RighteousConfluence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/RiseFromTheGrave.java b/Mage.Sets/src/mage/sets/commander2015/RiseFromTheGrave.java new file mode 100644 index 0000000000..8ff6e8908b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RiseFromTheGrave.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RiseFromTheGrave extends mage.sets.magic2010.RiseFromTheGrave { + + public RiseFromTheGrave(UUID ownerId) { + super(ownerId); + this.cardNumber = 134; + this.expansionSetCode = "C15"; + } + + public RiseFromTheGrave(final RiseFromTheGrave card) { + super(card); + } + + @Override + public RiseFromTheGrave copy() { + return new RiseFromTheGrave(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/RiteOfReplication.java b/Mage.Sets/src/mage/sets/commander2015/RiteOfReplication.java new file mode 100644 index 0000000000..59d33de763 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RiteOfReplication.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RiteOfReplication extends mage.sets.zendikar.RiteOfReplication { + + public RiteOfReplication(UUID ownerId) { + super(ownerId); + this.cardNumber = 105; + this.expansionSetCode = "C15"; + } + + public RiteOfReplication(final RiteOfReplication card) { + super(card); + } + + @Override + public RiteOfReplication copy() { + return new RiteOfReplication(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/RiteOfTheRagingStorm.java b/Mage.Sets/src/mage/sets/commander2015/RiteOfTheRagingStorm.java new file mode 100644 index 0000000000..bc5f29f0f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RiteOfTheRagingStorm.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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.effects.common.combat.CantAttackYouOrPlaneswalkerAllEffect; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.Game; +import mage.game.permanent.token.Token; +import mage.players.Player; + +/** + * + * @author fireshoes + */ +public class RiteOfTheRagingStorm extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures named Lightning Rager"); + + static { + filter.add(new NamePredicate("Lightning Rager")); + } + + public RiteOfTheRagingStorm(UUID ownerId) { + super(ownerId, 30, "Rite of the Raging Storm", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{R}"); + this.expansionSetCode = "C15"; + + // Creatures named Lightning Rager can't attack you or planeswalkers you control. + Effect effect = new CantAttackYouOrPlaneswalkerAllEffect(Duration.WhileOnBattlefield, filter); + effect.setText("Creatures named Lightning Rager can't attack you or planeswalkers you control"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + + // At the beginning of each player's upkeep, that player puts a 5/1 red Elemental creature token named Lightning Rager onto the battlefield. + // It has trample, haste, and "At the beginning of the end step, sacrifice this creature." + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new RiteOfTheRagingStormEffect(), TargetController.ANY, false)); + } + + public RiteOfTheRagingStorm(final RiteOfTheRagingStorm card) { + super(card); + } + + @Override + public RiteOfTheRagingStorm copy() { + return new RiteOfTheRagingStorm(this); + } +} + +class RiteOfTheRagingStormEffect extends OneShotEffect { + + private static final String effectText = "that player puts a 5/1 red Elemental creature token named Lightning Rager onto the battlefield." + + "It has trample, haste, and \"At the beginning of the end step, sacrifice this creature.\""; + + RiteOfTheRagingStormEffect() { + super(Outcome.Sacrifice); + staticText = effectText; + } + + RiteOfTheRagingStormEffect(RiteOfTheRagingStormEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(targetPointer.getFirst(game, source)); + if (player != null) { + Token lightningRagerToken = new LightningRagerToken(); + lightningRagerToken.putOntoBattlefield(1, game, this.getId(), player.getId()); + } + return false; + } + + @Override + public RiteOfTheRagingStormEffect copy() { + return new RiteOfTheRagingStormEffect(this); + } +} + +class LightningRagerToken extends Token { + LightningRagerToken() { + super("Lightning Rager", "5/1 red Elemental creature token named Lightning Rager onto the battlefield." + + "It has trample, haste, and \"At the beginning of the end step, sacrifice this creature.\""); + this.setOriginalExpansionSetCode("C15"); + cardType.add(CardType.CREATURE); + color.setRed(true); + subtype.add("Elemental"); + power = new MageInt(5); + toughness = new MageInt(1); + addAbility(TrampleAbility.getInstance()); + addAbility(HasteAbility.getInstance()); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect(), TargetController.ANY, false)); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/commander2015/RoguesPassage.java b/Mage.Sets/src/mage/sets/commander2015/RoguesPassage.java new file mode 100644 index 0000000000..439ba05fe7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/RoguesPassage.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RoguesPassage extends mage.sets.returntoravnica.RoguesPassage { + + public RoguesPassage(UUID ownerId) { + super(ownerId); + this.cardNumber = 301; + this.expansionSetCode = "C15"; + } + + public RoguesPassage(final RoguesPassage card) { + super(card); + } + + @Override + public RoguesPassage copy() { + return new RoguesPassage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SakuraTribeElder.java b/Mage.Sets/src/mage/sets/commander2015/SakuraTribeElder.java new file mode 100644 index 0000000000..c291e2e14f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SakuraTribeElder.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SakuraTribeElder extends mage.sets.championsofkamigawa.SakuraTribeElder { + + public SakuraTribeElder(UUID ownerId) { + super(ownerId); + this.cardNumber = 200; + this.expansionSetCode = "C15"; + } + + public SakuraTribeElder(final SakuraTribeElder card) { + super(card); + } + + @Override + public SakuraTribeElder copy() { + return new SakuraTribeElder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SandstoneOracle.java b/Mage.Sets/src/mage/sets/commander2015/SandstoneOracle.java new file mode 100644 index 0000000000..8aa6105dd7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SandstoneOracle.java @@ -0,0 +1,111 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author emerald000 + */ +public class SandstoneOracle extends CardImpl { + + public SandstoneOracle(UUID ownerId) { + super(ownerId, 52, "Sandstone Oracle", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}"); + this.expansionSetCode = "C15"; + this.subtype.add("Sphinx"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Sandstone Oracle enters the battlefield, choose an opponent. If that player has more cards in hand that you, draw cards equal to the difference. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SandstoneOracleEffect())); + } + + public SandstoneOracle(final SandstoneOracle card) { + super(card); + } + + @Override + public SandstoneOracle copy() { + return new SandstoneOracle(this); + } +} + +class SandstoneOracleEffect extends OneShotEffect { + + SandstoneOracleEffect() { + super(Outcome.DrawCard); + this.staticText = "choose an opponent. If that player has more cards in hand that you, draw cards equal to the difference"; + } + + SandstoneOracleEffect(final SandstoneOracleEffect effect) { + super(effect); + } + + @Override + public SandstoneOracleEffect copy() { + return new SandstoneOracleEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + TargetOpponent target = new TargetOpponent(true); + if (controller.choose(Outcome.DrawCard, target, source.getSourceId(), game)) { + Player opponent = game.getPlayer(target.getFirstTarget()); + if (opponent != null) { + game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " has chosen " + opponent.getLogName()); + int cardsDiff = opponent.getHand().size() - controller.getHand().size(); + if (cardsDiff > 0) { + controller.drawCards(cardsDiff, game); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SatyrWayfinder.java b/Mage.Sets/src/mage/sets/commander2015/SatyrWayfinder.java new file mode 100644 index 0000000000..61aebcfce3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SatyrWayfinder.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SatyrWayfinder extends mage.sets.bornofthegods.SatyrWayfinder { + + public SatyrWayfinder(UUID ownerId) { + super(ownerId); + this.cardNumber = 201; + this.expansionSetCode = "C15"; + } + + public SatyrWayfinder(final SatyrWayfinder card) { + super(card); + } + + @Override + public SatyrWayfinder copy() { + return new SatyrWayfinder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.java b/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.java new file mode 100644 index 0000000000..217cf672c2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ScouredBarrens.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ScouredBarrens extends mage.sets.khansoftarkir.ScouredBarrens { + + public ScouredBarrens(UUID ownerId) { + super(ownerId); + this.cardNumber = 302; + this.expansionSetCode = "C15"; + } + + public ScouredBarrens(final ScouredBarrens card) { + super(card); + } + + @Override + public ScouredBarrens copy() { + return new ScouredBarrens(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ScourgeOfNelToth.java b/Mage.Sets/src/mage/sets/commander2015/ScourgeOfNelToth.java new file mode 100644 index 0000000000..38eaaf4a7e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ScourgeOfNelToth.java @@ -0,0 +1,120 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.Costs; +import mage.abilities.costs.CostsImpl; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class ScourgeOfNelToth extends CardImpl { + + public ScourgeOfNelToth(UUID ownerId) { + super(ownerId, 21, "Scourge of Nel Toth", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{B}{B}"); + this.expansionSetCode = "C15"; + this.subtype.add("Zombie"); + this.subtype.add("Dragon"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // You may cast Scourge of Nel Toth from your graveyard by paying {B}{B} and sacrificing two creatures rather than paying its mana cost. + this.addAbility(new SimpleStaticAbility(Zone.ALL, new ScourgeOfNelTothPlayEffect())); + } + + public ScourgeOfNelToth(final ScourgeOfNelToth card) { + super(card); + } + + @Override + public ScourgeOfNelToth copy() { + return new ScourgeOfNelToth(this); + } +} + +class ScourgeOfNelTothPlayEffect extends AsThoughEffectImpl { + + public ScourgeOfNelTothPlayEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); + staticText = "You may cast {this} from your graveyard by paying {B}{B} and sacrificing two creatures rather than paying its mana cost"; + } + + public ScourgeOfNelTothPlayEffect(final ScourgeOfNelTothPlayEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public ScourgeOfNelTothPlayEffect copy() { + return new ScourgeOfNelTothPlayEffect(this); + } + + @Override + public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { + if (sourceId.equals(source.getSourceId()) && source.getControllerId().equals(affectedControllerId)) { + if (game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD) { + Player player = game.getPlayer(affectedControllerId); + if (player != null) { + // can sometimes be cast with base mana cost from grave???? + Costs costs = new CostsImpl<>(); + costs.add(new SacrificeTargetCost(new TargetControlledCreaturePermanent(2))); + player.setCastSourceIdWithAlternateMana(sourceId, new ManaCostsImpl<>("{B}{B}"), costs); + return true; + } + } + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SealOfCleansing.java b/Mage.Sets/src/mage/sets/commander2015/SealOfCleansing.java new file mode 100644 index 0000000000..244feeb52a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SealOfCleansing.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SealOfCleansing extends mage.sets.nemesis.SealOfCleansing { + + public SealOfCleansing(UUID ownerId) { + super(ownerId); + this.cardNumber = 79; + this.expansionSetCode = "C15"; + } + + public SealOfCleansing(final SealOfCleansing card) { + super(card); + } + + @Override + public SealOfCleansing copy() { + return new SealOfCleansing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SealOfDoom.java b/Mage.Sets/src/mage/sets/commander2015/SealOfDoom.java new file mode 100644 index 0000000000..5012cadab1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SealOfDoom.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SealOfDoom extends mage.sets.dissension.SealOfDoom { + + public SealOfDoom(UUID ownerId) { + super(ownerId); + this.cardNumber = 135; + this.expansionSetCode = "C15"; + } + + public SealOfDoom(final SealOfDoom card) { + super(card); + } + + @Override + public SealOfDoom copy() { + return new SealOfDoom(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SealOfTheGuildpact.java b/Mage.Sets/src/mage/sets/commander2015/SealOfTheGuildpact.java new file mode 100644 index 0000000000..11cf25b89c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SealOfTheGuildpact.java @@ -0,0 +1,190 @@ +/* + * 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.commander2015; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageObject; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.choices.ChoiceColor; +import mage.constants.CardType; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * + * @author emerald000 + */ +public class SealOfTheGuildpact extends CardImpl { + + public SealOfTheGuildpact(UUID ownerId) { + super(ownerId, 54, "Seal of the Guildpact", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{5}"); + this.expansionSetCode = "C15"; + + // As Seal of the Guildpact enters the battlefield, choose two colors. + this.addAbility(new EntersBattlefieldAbility(new SealOfTheGuildpactChooseColorEffect())); + + // Each spell you cast costs {1} less to cast for each of the chosen colors it is. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SealOfTheGuildpactCostReductionEffect())); + } + + public SealOfTheGuildpact(final SealOfTheGuildpact card) { + super(card); + } + + @Override + public SealOfTheGuildpact copy() { + return new SealOfTheGuildpact(this); + } +} + +class SealOfTheGuildpactChooseColorEffect extends OneShotEffect { + + SealOfTheGuildpactChooseColorEffect() { + super(Outcome.Benefit); + this.staticText = "choose two colors"; + } + + SealOfTheGuildpactChooseColorEffect(final SealOfTheGuildpactChooseColorEffect effect) { + super(effect); + } + + @Override + public SealOfTheGuildpactChooseColorEffect copy() { + return new SealOfTheGuildpactChooseColorEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject mageObject = game.getPermanentEntering(source.getSourceId()); + if (controller != null && mageObject != null) { + ChoiceColor choice1 = new ChoiceColor(); + while (!choice1.isChosen()) { + controller.choose(Outcome.Benefit, choice1, game); + if (!controller.canRespond()) { + return false; + } + } + String color1 = choice1.getChoice(); + Set choices2 = new HashSet<>(); + if (!color1.equals("White")) { + choices2.add("White"); + } + if (!color1.equals("Blue")) { + choices2.add("Blue"); + } + if (!color1.equals("Black")) { + choices2.add("Black"); + } + if (!color1.equals("Red")) { + choices2.add("Red"); + } + if (!color1.equals("Green")) { + choices2.add("Green"); + } + ChoiceColor choice2 = new ChoiceColor(); + choice2.setChoices(choices2); + while (!choice2.isChosen()) { + controller.choose(Outcome.Benefit, choice2, game); + if (!controller.canRespond()) { + return false; + } + } + String color2 = choice2.getChoice(); + if (!game.isSimulation()) { + game.informPlayers(mageObject.getLogName() + ": " + controller.getLogName() + " has chosen " + color1 + " and " + color2 + "."); + } + game.getState().setValue(mageObject.getId() + "_color1", choice1.getColor()); + game.getState().setValue(mageObject.getId() + "_color2", choice2.getColor()); + ((Card) mageObject).addInfo("chosen colors", CardUtil.addToolTipMarkTags("Chosen colors: " + color1 + " and " + color2), game); + return true; + } + return false; + } +} + +class SealOfTheGuildpactCostReductionEffect extends CostModificationEffectImpl { + + SealOfTheGuildpactCostReductionEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); + staticText = "Each spell you cast costs {1} less to cast for each of the chosen colors it is"; + } + + SealOfTheGuildpactCostReductionEffect(SealOfTheGuildpactCostReductionEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + MageObject sourceObject = game.getObject(abilityToModify.getSourceId()); + if (sourceObject != null) { + ObjectColor color1 = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color1"); + ObjectColor color2 = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color2"); + int amount = 0; + if (color1 != null && sourceObject.getColor(game).contains(color1)) { + amount++; + } + if (color2 != null && sourceObject.getColor(game).contains(color2)) { + amount++; + } + if (amount > 0) { + SpellAbility spellAbility = (SpellAbility) abilityToModify; + CardUtil.adjustCost(spellAbility, amount); + } + return true; + } + return false; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + return abilityToModify.getControllerId().equals(source.getControllerId()) && + abilityToModify instanceof SpellAbility; + } + + @Override + public SealOfTheGuildpactCostReductionEffect copy() { + return new SealOfTheGuildpactCostReductionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.java b/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.java new file mode 100644 index 0000000000..6443d1f85c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SecludedSteppe.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SecludedSteppe extends mage.sets.onslaught.SecludedSteppe { + + public SecludedSteppe(UUID ownerId) { + super(ownerId); + this.cardNumber = 303; + this.expansionSetCode = "C15"; + } + + public SecludedSteppe(final SecludedSteppe card) { + super(card); + } + + @Override + public SecludedSteppe copy() { + return new SecludedSteppe(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SeersSundial.java b/Mage.Sets/src/mage/sets/commander2015/SeersSundial.java new file mode 100644 index 0000000000..42c73d2a69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SeersSundial.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SeersSundial extends mage.sets.worldwake.SeersSundial { + + public SeersSundial(UUID ownerId) { + super(ownerId); + this.cardNumber = 264; + this.expansionSetCode = "C15"; + } + + public SeersSundial(final SeersSundial card) { + super(card); + } + + @Override + public SeersSundial copy() { + return new SeersSundial(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SeverTheBloodline.java b/Mage.Sets/src/mage/sets/commander2015/SeverTheBloodline.java new file mode 100644 index 0000000000..74b87eef06 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SeverTheBloodline.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SeverTheBloodline extends mage.sets.innistrad.SeverTheBloodline { + + public SeverTheBloodline(UUID ownerId) { + super(ownerId); + this.cardNumber = 136; + this.expansionSetCode = "C15"; + } + + public SeverTheBloodline(final SeverTheBloodline card) { + super(card); + } + + @Override + public SeverTheBloodline copy() { + return new SeverTheBloodline(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ShieldedByFaith.java b/Mage.Sets/src/mage/sets/commander2015/ShieldedByFaith.java new file mode 100644 index 0000000000..c88b135a94 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ShieldedByFaith.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.commander2015; + +import java.util.UUID; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ShieldedByFaith extends CardImpl { + + public ShieldedByFaith(UUID ownerId) { + super(ownerId, 8, "Shielded by Faith", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{W}"); + this.expansionSetCode = "C15"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + + // Enchanted creature has indestructible. + Effect effect = new GainAbilityAttachedEffect(IndestructibleAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield); + effect.setText("Enchanted creature has indestructible"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + + // Whenever a creature enters the battlefield, you may attach Shielded by Faith to that creature. + this.addAbility(new EntersBattlefieldAllTriggeredAbility( + Zone.BATTLEFIELD, new AttachEffect(Outcome.Neutral, "attach {source} to that creature"), + new FilterCreaturePermanent("a creature"), true, SetTargetPointer.PERMANENT, null, false)); + } + + public ShieldedByFaith(final ShieldedByFaith card) { + super(card); + } + + @Override + public ShieldedByFaith copy() { + return new ShieldedByFaith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Shriekmaw.java b/Mage.Sets/src/mage/sets/commander2015/Shriekmaw.java new file mode 100644 index 0000000000..025aad0dbf --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Shriekmaw.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Shriekmaw extends mage.sets.commander.Shriekmaw { + + public Shriekmaw(UUID ownerId) { + super(ownerId); + this.cardNumber = 137; + this.expansionSetCode = "C15"; + } + + public Shriekmaw(final Shriekmaw card) { + super(card); + } + + @Override + public Shriekmaw copy() { + return new Shriekmaw(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SigilOfTheEmptyThrone.java b/Mage.Sets/src/mage/sets/commander2015/SigilOfTheEmptyThrone.java new file mode 100644 index 0000000000..c78877b3f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SigilOfTheEmptyThrone.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SigilOfTheEmptyThrone extends mage.sets.conflux.SigilOfTheEmptyThrone { + + public SigilOfTheEmptyThrone(UUID ownerId) { + super(ownerId); + this.cardNumber = 80; + this.expansionSetCode = "C15"; + } + + public SigilOfTheEmptyThrone(final SigilOfTheEmptyThrone card) { + super(card); + } + + @Override + public SigilOfTheEmptyThrone copy() { + return new SigilOfTheEmptyThrone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SilentSentinel.java b/Mage.Sets/src/mage/sets/commander2015/SilentSentinel.java new file mode 100644 index 0000000000..d608fe628c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SilentSentinel.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SilentSentinel extends mage.sets.bornofthegods.SilentSentinel { + + public SilentSentinel(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + this.expansionSetCode = "C15"; + } + + public SilentSentinel(final SilentSentinel card) { + super(card); + } + + @Override + public SilentSentinel copy() { + return new SilentSentinel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SimicGrowthChamber.java b/Mage.Sets/src/mage/sets/commander2015/SimicGrowthChamber.java new file mode 100644 index 0000000000..ef06b1b9f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SimicGrowthChamber.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SimicGrowthChamber extends mage.sets.dissension.SimicGrowthChamber { + + public SimicGrowthChamber(UUID ownerId) { + super(ownerId); + this.cardNumber = 305; + this.expansionSetCode = "C15"; + } + + public SimicGrowthChamber(final SimicGrowthChamber card) { + super(card); + } + + @Override + public SimicGrowthChamber copy() { + return new SimicGrowthChamber(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SimicGuildgate.java b/Mage.Sets/src/mage/sets/commander2015/SimicGuildgate.java new file mode 100644 index 0000000000..254b864fcb --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SimicGuildgate.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SimicGuildgate extends mage.sets.gatecrash.SimicGuildgate { + + public SimicGuildgate(UUID ownerId) { + super(ownerId); + this.cardNumber = 306; + this.expansionSetCode = "C15"; + } + + public SimicGuildgate(final SimicGuildgate card) { + super(card); + } + + @Override + public SimicGuildgate copy() { + return new SimicGuildgate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SimicKeyrune.java b/Mage.Sets/src/mage/sets/commander2015/SimicKeyrune.java new file mode 100644 index 0000000000..f1f1b75b73 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SimicKeyrune.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SimicKeyrune extends mage.sets.gatecrash.SimicKeyrune { + + public SimicKeyrune(UUID ownerId) { + super(ownerId); + this.cardNumber = 265; + this.expansionSetCode = "C15"; + } + + public SimicKeyrune(final SimicKeyrune card) { + super(card); + } + + @Override + public SimicKeyrune copy() { + return new SimicKeyrune(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SimicSignet.java b/Mage.Sets/src/mage/sets/commander2015/SimicSignet.java new file mode 100644 index 0000000000..771152803e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SimicSignet.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SimicSignet extends mage.sets.dissension.SimicSignet { + + public SimicSignet(UUID ownerId) { + super(ownerId); + this.cardNumber = 266; + this.expansionSetCode = "C15"; + } + + public SimicSignet(final SimicSignet card) { + super(card); + } + + @Override + public SimicSignet copy() { + return new SimicSignet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Skullclamp.java b/Mage.Sets/src/mage/sets/commander2015/Skullclamp.java new file mode 100644 index 0000000000..88b37bc159 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Skullclamp.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Skullclamp extends mage.sets.darksteel.Skullclamp { + + public Skullclamp(UUID ownerId) { + super(ownerId); + this.cardNumber = 267; + this.expansionSetCode = "C15"; + } + + public Skullclamp(final Skullclamp card) { + super(card); + } + + @Override + public Skullclamp copy() { + return new Skullclamp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Skullwinder.java b/Mage.Sets/src/mage/sets/commander2015/Skullwinder.java new file mode 100644 index 0000000000..b098242ec2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Skullwinder.java @@ -0,0 +1,125 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public class Skullwinder extends CardImpl { + + public Skullwinder(UUID ownerId) { + super(ownerId, 39, "Skullwinder", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "C15"; + this.subtype.add("Snake"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // When Skullwinder enters the battlefield, return target card from your graveyard to your hand, then choose an opponent. That player returns a card from his or her graveyard to his or her hand. + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); + ability.addTarget(new TargetCardInYourGraveyard()); + ability.addEffect(new SkullwinderEffect()); + this.addAbility(ability); + } + + public Skullwinder(final Skullwinder card) { + super(card); + } + + @Override + public Skullwinder copy() { + return new Skullwinder(this); + } +} + +class SkullwinderEffect extends OneShotEffect { + + public SkullwinderEffect() { + super(Outcome.Benefit); + this.staticText = ", then choose an opponent. That player returns a card from his or her graveyard to his or her hand"; + } + + public SkullwinderEffect(final SkullwinderEffect effect) { + super(effect); + } + + @Override + public SkullwinderEffect copy() { + return new SkullwinderEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + TargetOpponent targetOpponent = new TargetOpponent(true); + if (controller.choose(Outcome.Detriment, targetOpponent, source.getSourceId(), game)) { + Player opponent = game.getPlayer(targetOpponent.getFirstTarget()); + if (opponent != null) { + game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " has chosen " + opponent.getLogName()); + // That player returns a card from his or her graveyard to his or her hand + TargetCardInYourGraveyard targetCard = new TargetCardInYourGraveyard(new FilterCard("a card from your graveyard to return to your hand")); + targetCard.setNotTarget(true); + if (opponent.choose(outcome, targetCard, source.getSourceId(), game)) { + Card card = game.getCard(targetCard.getFirstTarget()); + if (card != null) { + opponent.moveCards(card, Zone.HAND, source, game); + } + } + } + } + return true; + } + return false; + + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Sleep.java b/Mage.Sets/src/mage/sets/commander2015/Sleep.java new file mode 100644 index 0000000000..00425abf8a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Sleep.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Sleep extends mage.sets.magic2010.Sleep { + + public Sleep(UUID ownerId) { + super(ownerId); + this.cardNumber = 106; + this.expansionSetCode = "C15"; + } + + public Sleep(final Sleep card) { + super(card); + } + + @Override + public Sleep copy() { + return new Sleep(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SlipperyKarst.java b/Mage.Sets/src/mage/sets/commander2015/SlipperyKarst.java new file mode 100644 index 0000000000..c1db1cdc6c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SlipperyKarst.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SlipperyKarst extends mage.sets.urzassaga.SlipperyKarst { + + public SlipperyKarst(UUID ownerId) { + super(ownerId); + this.cardNumber = 307; + this.expansionSetCode = "C15"; + } + + public SlipperyKarst(final SlipperyKarst card) { + super(card); + } + + @Override + public SlipperyKarst copy() { + return new SlipperyKarst(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SmolderingCrater.java b/Mage.Sets/src/mage/sets/commander2015/SmolderingCrater.java new file mode 100644 index 0000000000..f8f6dac90b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SmolderingCrater.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SmolderingCrater extends mage.sets.urzassaga.SmolderingCrater { + + public SmolderingCrater(UUID ownerId) { + super(ownerId); + this.cardNumber = 308; + this.expansionSetCode = "C15"; + } + + public SmolderingCrater(final SmolderingCrater card) { + super(card); + } + + @Override + public SmolderingCrater copy() { + return new SmolderingCrater(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Snakeform.java b/Mage.Sets/src/mage/sets/commander2015/Snakeform.java new file mode 100644 index 0000000000..1d9be22ebf --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Snakeform.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Snakeform extends mage.sets.eventide.Snakeform { + + public Snakeform(UUID ownerId) { + super(ownerId); + this.cardNumber = 242; + this.expansionSetCode = "C15"; + } + + public Snakeform(final Snakeform card) { + super(card); + } + + @Override + public Snakeform copy() { + return new Snakeform(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SolRing.java b/Mage.Sets/src/mage/sets/commander2015/SolRing.java new file mode 100644 index 0000000000..e1f03fe39f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SolRing.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SolRing extends mage.sets.revisededition.SolRing { + + public SolRing(UUID ownerId) { + super(ownerId); + this.cardNumber = 268; + this.expansionSetCode = "C15"; + } + + public SolRing(final SolRing card) { + super(card); + } + + @Override + public SolRing copy() { + return new SolRing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SolemnSimulacrum.java b/Mage.Sets/src/mage/sets/commander2015/SolemnSimulacrum.java new file mode 100644 index 0000000000..c09472ce0e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SolemnSimulacrum.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SolemnSimulacrum extends mage.sets.magic2012.SolemnSimulacrum { + + public SolemnSimulacrum(UUID ownerId) { + super(ownerId); + this.cardNumber = 269; + this.expansionSetCode = "C15"; + } + + public SolemnSimulacrum(final SolemnSimulacrum card) { + super(card); + } + + @Override + public SolemnSimulacrum copy() { + return new SolemnSimulacrum(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SpinerockKnoll.java b/Mage.Sets/src/mage/sets/commander2015/SpinerockKnoll.java new file mode 100644 index 0000000000..979edfc61a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SpinerockKnoll.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpinerockKnoll extends mage.sets.lorwyn.SpinerockKnoll { + + public SpinerockKnoll(UUID ownerId) { + super(ownerId); + this.cardNumber = 309; + this.expansionSetCode = "C15"; + } + + public SpinerockKnoll(final SpinerockKnoll card) { + super(card); + } + + @Override + public SpinerockKnoll copy() { + return new SpinerockKnoll(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/StaffOfNin.java b/Mage.Sets/src/mage/sets/commander2015/StaffOfNin.java new file mode 100644 index 0000000000..c3a33f0467 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/StaffOfNin.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StaffOfNin extends mage.sets.magic2013.StaffOfNin { + + public StaffOfNin(UUID ownerId) { + super(ownerId); + this.cardNumber = 270; + this.expansionSetCode = "C15"; + } + + public StaffOfNin(final StaffOfNin card) { + super(card); + } + + @Override + public StaffOfNin copy() { + return new StaffOfNin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SteamAugury.java b/Mage.Sets/src/mage/sets/commander2015/SteamAugury.java new file mode 100644 index 0000000000..e8a9b3bade --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SteamAugury.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SteamAugury extends mage.sets.theros.SteamAugury { + + public SteamAugury(UUID ownerId) { + super(ownerId); + this.cardNumber = 233; + this.expansionSetCode = "C15"; + } + + public SteamAugury(final SteamAugury card) { + super(card); + } + + @Override + public SteamAugury copy() { + return new SteamAugury(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/StingerflingSpider.java b/Mage.Sets/src/mage/sets/commander2015/StingerflingSpider.java new file mode 100644 index 0000000000..c4672e6683 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/StingerflingSpider.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StingerflingSpider extends mage.sets.magic2012.StingerflingSpider { + + public StingerflingSpider(UUID ownerId) { + super(ownerId); + this.cardNumber = 203; + this.expansionSetCode = "C15"; + } + + public StingerflingSpider(final StingerflingSpider card) { + super(card); + } + + @Override + public StingerflingSpider copy() { + return new StingerflingSpider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/StinkdrinkerDaredevil.java b/Mage.Sets/src/mage/sets/commander2015/StinkdrinkerDaredevil.java new file mode 100644 index 0000000000..9e8dacaa58 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/StinkdrinkerDaredevil.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StinkdrinkerDaredevil extends mage.sets.lorwyn.StinkdrinkerDaredevil { + + public StinkdrinkerDaredevil(UUID ownerId) { + super(ownerId); + this.cardNumber = 164; + this.expansionSetCode = "C15"; + } + + public StinkdrinkerDaredevil(final StinkdrinkerDaredevil card) { + super(card); + } + + @Override + public StinkdrinkerDaredevil copy() { + return new StinkdrinkerDaredevil(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/StolenGoods.java b/Mage.Sets/src/mage/sets/commander2015/StolenGoods.java new file mode 100644 index 0000000000..a72735aaf6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/StolenGoods.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StolenGoods extends mage.sets.avacynrestored.StolenGoods { + + public StolenGoods(UUID ownerId) { + super(ownerId); + this.cardNumber = 107; + this.expansionSetCode = "C15"; + } + + public StolenGoods(final StolenGoods card) { + super(card); + } + + @Override + public StolenGoods copy() { + return new StolenGoods(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/StoneshockGiant.java b/Mage.Sets/src/mage/sets/commander2015/StoneshockGiant.java new file mode 100644 index 0000000000..fdf6e9245c --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/StoneshockGiant.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StoneshockGiant extends mage.sets.theros.StoneshockGiant { + + public StoneshockGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 165; + this.expansionSetCode = "C15"; + } + + public StoneshockGiant(final StoneshockGiant card) { + super(card); + } + + @Override + public StoneshockGiant copy() { + return new StoneshockGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/StrokeOfGenius.java b/Mage.Sets/src/mage/sets/commander2015/StrokeOfGenius.java new file mode 100644 index 0000000000..79953c02ae --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/StrokeOfGenius.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StrokeOfGenius extends mage.sets.urzassaga.StrokeOfGenius { + + public StrokeOfGenius(UUID ownerId) { + super(ownerId); + this.cardNumber = 108; + this.expansionSetCode = "C15"; + } + + public StrokeOfGenius(final StrokeOfGenius card) { + super(card); + } + + @Override + public StrokeOfGenius copy() { + return new StrokeOfGenius(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SunTitan.java b/Mage.Sets/src/mage/sets/commander2015/SunTitan.java new file mode 100644 index 0000000000..1e35975952 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SunTitan.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SunTitan extends mage.sets.magic2011.SunTitan { + + public SunTitan(UUID ownerId) { + super(ownerId); + this.cardNumber = 82; + this.expansionSetCode = "C15"; + } + + public SunTitan(final SunTitan card) { + super(card); + } + + @Override + public SunTitan copy() { + return new SunTitan(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SunriseSovereign.java b/Mage.Sets/src/mage/sets/commander2015/SunriseSovereign.java new file mode 100644 index 0000000000..bd0794d0e6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SunriseSovereign.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SunriseSovereign extends mage.sets.lorwyn.SunriseSovereign { + + public SunriseSovereign(UUID ownerId) { + super(ownerId); + this.cardNumber = 166; + this.expansionSetCode = "C15"; + } + + public SunriseSovereign(final SunriseSovereign card) { + super(card); + } + + @Override + public SunriseSovereign copy() { + return new SunriseSovereign(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Swamp1.java b/Mage.Sets/src/mage/sets/commander2015/Swamp1.java new file mode 100644 index 0000000000..536d848d27 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Swamp1.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp1 extends mage.cards.basiclands.Swamp { + + public Swamp1(UUID ownerId) { + super(ownerId, 331); + this.expansionSetCode = "C15"; + } + + public Swamp1(final Swamp1 card) { + super(card); + } + + @Override + public Swamp1 copy() { + return new Swamp1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Swamp2.java b/Mage.Sets/src/mage/sets/commander2015/Swamp2.java new file mode 100644 index 0000000000..9cca76feb1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Swamp2.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp2 extends mage.cards.basiclands.Swamp { + + public Swamp2(UUID ownerId) { + super(ownerId, 332); + this.expansionSetCode = "C15"; + } + + public Swamp2(final Swamp2 card) { + super(card); + } + + @Override + public Swamp2 copy() { + return new Swamp2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Swamp3.java b/Mage.Sets/src/mage/sets/commander2015/Swamp3.java new file mode 100644 index 0000000000..5c0449b2f4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Swamp3.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp3 extends mage.cards.basiclands.Swamp { + + public Swamp3(UUID ownerId) { + super(ownerId, 333); + this.expansionSetCode = "C15"; + } + + public Swamp3(final Swamp3 card) { + super(card); + } + + @Override + public Swamp3 copy() { + return new Swamp3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Swamp4.java b/Mage.Sets/src/mage/sets/commander2015/Swamp4.java new file mode 100644 index 0000000000..20be7ab857 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Swamp4.java @@ -0,0 +1,51 @@ +/* + * 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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp4 extends mage.cards.basiclands.Swamp { + + public Swamp4(UUID ownerId) { + super(ownerId, 334); + this.expansionSetCode = "C15"; + } + + public Swamp4(final Swamp4 card) { + super(card); + } + + @Override + public Swamp4 copy() { + return new Swamp4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SwiftfootBoots.java b/Mage.Sets/src/mage/sets/commander2015/SwiftfootBoots.java new file mode 100644 index 0000000000..de7e11c4be --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SwiftfootBoots.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SwiftfootBoots extends mage.sets.magic2012.SwiftfootBoots { + + public SwiftfootBoots(UUID ownerId) { + super(ownerId); + this.cardNumber = 271; + this.expansionSetCode = "C15"; + } + + public SwiftfootBoots(final SwiftfootBoots card) { + super(card); + } + + @Override + public SwiftfootBoots copy() { + return new SwiftfootBoots(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SwiftwaterCliffs.java b/Mage.Sets/src/mage/sets/commander2015/SwiftwaterCliffs.java new file mode 100644 index 0000000000..6ca4f2d701 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SwiftwaterCliffs.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SwiftwaterCliffs extends mage.sets.khansoftarkir.SwiftwaterCliffs { + + public SwiftwaterCliffs(UUID ownerId) { + super(ownerId); + this.cardNumber = 310; + this.expansionSetCode = "C15"; + } + + public SwiftwaterCliffs(final SwiftwaterCliffs card) { + super(card); + } + + @Override + public SwiftwaterCliffs copy() { + return new SwiftwaterCliffs(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SwordOfVengeance.java b/Mage.Sets/src/mage/sets/commander2015/SwordOfVengeance.java new file mode 100644 index 0000000000..b162c58e41 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SwordOfVengeance.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SwordOfVengeance extends mage.sets.magic2011.SwordOfVengeance { + + public SwordOfVengeance(UUID ownerId) { + super(ownerId); + this.cardNumber = 272; + this.expansionSetCode = "C15"; + } + + public SwordOfVengeance(final SwordOfVengeance card) { + super(card); + } + + @Override + public SwordOfVengeance copy() { + return new SwordOfVengeance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java b/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java new file mode 100644 index 0000000000..142ddc269a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java @@ -0,0 +1,158 @@ +/* + * 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.commander2015; + +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class SyntheticDestiny extends CardImpl { + + public SyntheticDestiny(UUID ownerId) { + super(ownerId, 15, "Synthetic Destiny", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{4}{U}{U}"); + this.expansionSetCode = "C15"; + + // Exile all creatures you control. At the beginning of the next end step, reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library. + getSpellAbility().addEffect(new SyntheticDestinyEffect()); + } + + public SyntheticDestiny(final SyntheticDestiny card) { + super(card); + } + + @Override + public SyntheticDestiny copy() { + return new SyntheticDestiny(this); + } +} + +class SyntheticDestinyEffect extends OneShotEffect { + + public SyntheticDestinyEffect() { + super(Outcome.Detriment); + this.staticText = "Exile all creatures you control. At the beginning of the next end step, reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library"; + } + + public SyntheticDestinyEffect(final SyntheticDestinyEffect effect) { + super(effect); + } + + @Override + public SyntheticDestinyEffect copy() { + return new SyntheticDestinyEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Set cardsToExile = new HashSet<>(); + cardsToExile.addAll(game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), controller.getId(), game)); + controller.moveCards(cardsToExile, Zone.EXILED, source, game); + //Delayed ability + Effect effect = new SyntheticDestinyDelayedEffect(cardsToExile.size()); + DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + game.addDelayedTriggeredAbility(delayedAbility); + + return true; + } + return false; + } +} + +class SyntheticDestinyDelayedEffect extends OneShotEffect { + + protected int numberOfCards; + + public SyntheticDestinyDelayedEffect(int numberOfCards) { + super(Outcome.PutCreatureInPlay); + this.numberOfCards = numberOfCards; + this.staticText = "reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library"; + } + + public SyntheticDestinyDelayedEffect(final SyntheticDestinyDelayedEffect effect) { + super(effect); + this.numberOfCards = effect.numberOfCards; + } + + @Override + public SyntheticDestinyDelayedEffect copy() { + return new SyntheticDestinyDelayedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + Cards revealed = new CardsImpl(); + Set creatureCards = new LinkedHashSet<>(); + Cards nonCreatureCards = new CardsImpl(); + while (creatureCards.size() < numberOfCards && controller.getLibrary().size() > 0) { + Card card = controller.getLibrary().removeFromTop(game); + revealed.add(card); + if (card.getCardType().contains(CardType.CREATURE)) { + creatureCards.add(card); + } else { + nonCreatureCards.add(card); + } + } + controller.revealCards(sourceObject.getIdName(), revealed, game); + controller.moveCards(creatureCards, Zone.BATTLEFIELD, source, game, false, false, true, null); + controller.putCardsOnTopOfLibrary(nonCreatureCards, game, source, false); + controller.shuffleLibrary(game); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TaintedField.java b/Mage.Sets/src/mage/sets/commander2015/TaintedField.java new file mode 100644 index 0000000000..80dc39b9fd --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TaintedField.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TaintedField extends mage.sets.torment.TaintedField { + + public TaintedField(UUID ownerId) { + super(ownerId); + this.cardNumber = 311; + this.expansionSetCode = "C15"; + } + + public TaintedField(final TaintedField card) { + super(card); + } + + @Override + public TaintedField copy() { + return new TaintedField(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TaintedWood.java b/Mage.Sets/src/mage/sets/commander2015/TaintedWood.java new file mode 100644 index 0000000000..7a8e5798e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TaintedWood.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TaintedWood extends mage.sets.torment.TaintedWood { + + public TaintedWood(UUID ownerId) { + super(ownerId); + this.cardNumber = 312; + this.expansionSetCode = "C15"; + } + + public TaintedWood(final TaintedWood card) { + super(card); + } + + @Override + public TaintedWood copy() { + return new TaintedWood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TalrandSkySummoner.java b/Mage.Sets/src/mage/sets/commander2015/TalrandSkySummoner.java new file mode 100644 index 0000000000..7e67d277f5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TalrandSkySummoner.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TalrandSkySummoner extends mage.sets.magic2013.TalrandSkySummoner { + + public TalrandSkySummoner(UUID ownerId) { + super(ownerId); + this.cardNumber = 109; + this.expansionSetCode = "C15"; + } + + public TalrandSkySummoner(final TalrandSkySummoner card) { + super(card); + } + + @Override + public TalrandSkySummoner copy() { + return new TalrandSkySummoner(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TaureanMauler.java b/Mage.Sets/src/mage/sets/commander2015/TaureanMauler.java new file mode 100644 index 0000000000..3647d880d9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TaureanMauler.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TaureanMauler extends mage.sets.planechase.TaureanMauler { + + public TaureanMauler(UUID ownerId) { + super(ownerId); + this.cardNumber = 167; + this.expansionSetCode = "C15"; + } + + public TaureanMauler(final TaureanMauler card) { + super(card); + } + + @Override + public TaureanMauler copy() { + return new TaureanMauler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TempleOfTheFalseGod.java b/Mage.Sets/src/mage/sets/commander2015/TempleOfTheFalseGod.java new file mode 100644 index 0000000000..d981aea81d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TempleOfTheFalseGod.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TempleOfTheFalseGod extends mage.sets.commander2013.TempleOfTheFalseGod { + + public TempleOfTheFalseGod(UUID ownerId) { + super(ownerId); + this.cardNumber = 313; + this.expansionSetCode = "C15"; + } + + public TempleOfTheFalseGod(final TempleOfTheFalseGod card) { + super(card); + } + + @Override + public TempleOfTheFalseGod copy() { + return new TempleOfTheFalseGod(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Terastodon.java b/Mage.Sets/src/mage/sets/commander2015/Terastodon.java new file mode 100644 index 0000000000..b63951115b --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Terastodon.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Terastodon extends mage.sets.worldwake.Terastodon { + + public Terastodon(UUID ownerId) { + super(ownerId); + this.cardNumber = 204; + this.expansionSetCode = "C15"; + } + + public Terastodon(final Terastodon card) { + super(card); + } + + @Override + public Terastodon copy() { + return new Terastodon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TerramorphicExpanse.java b/Mage.Sets/src/mage/sets/commander2015/TerramorphicExpanse.java new file mode 100644 index 0000000000..d3e55e2291 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TerramorphicExpanse.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TerramorphicExpanse extends mage.sets.tenthedition.TerramorphicExpanse { + + public TerramorphicExpanse(UUID ownerId) { + super(ownerId); + this.cardNumber = 314; + this.expansionSetCode = "C15"; + } + + public TerramorphicExpanse(final TerramorphicExpanse card) { + super(card); + } + + @Override + public TerramorphicExpanse copy() { + return new TerramorphicExpanse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TeysaEnvoyOfGhosts.java b/Mage.Sets/src/mage/sets/commander2015/TeysaEnvoyOfGhosts.java new file mode 100644 index 0000000000..c912353806 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TeysaEnvoyOfGhosts.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TeysaEnvoyOfGhosts extends mage.sets.dragonsmaze.TeysaEnvoyOfGhosts { + + public TeysaEnvoyOfGhosts(UUID ownerId) { + super(ownerId); + this.cardNumber = 234; + this.expansionSetCode = "C15"; + } + + public TeysaEnvoyOfGhosts(final TeysaEnvoyOfGhosts card) { + super(card); + } + + @Override + public TeysaEnvoyOfGhosts copy() { + return new TeysaEnvoyOfGhosts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TheloniteHermit.java b/Mage.Sets/src/mage/sets/commander2015/TheloniteHermit.java new file mode 100644 index 0000000000..44bc0e0304 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TheloniteHermit.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TheloniteHermit extends mage.sets.timespiral.TheloniteHermit { + + public TheloniteHermit(UUID ownerId) { + super(ownerId); + this.cardNumber = 205; + this.expansionSetCode = "C15"; + } + + public TheloniteHermit(final TheloniteHermit card) { + super(card); + } + + @Override + public TheloniteHermit copy() { + return new TheloniteHermit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ThiefOfBlood.java b/Mage.Sets/src/mage/sets/commander2015/ThiefOfBlood.java new file mode 100644 index 0000000000..31d1c181cd --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ThiefOfBlood.java @@ -0,0 +1,117 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.counters.Counter; +import mage.counters.CounterType; +import mage.counters.Counters; +import mage.filter.FilterPermanent; +import mage.filter.predicate.permanent.CounterPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author emerald000 + */ +public class ThiefOfBlood extends CardImpl { + + public ThiefOfBlood(UUID ownerId) { + super(ownerId, 22, "Thief of Blood", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); + this.expansionSetCode = "C15"; + this.power = new MageInt(1); + this.toughness = new MageInt(1); + this.subtype.add("Vampire"); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // As Thief of Blood enters the battlefield, remove all counters from all permanents. Thief of Blood enters the battlefield with a +1/+1 counter on it for each counter removed this way. + this.addAbility(new EntersBattlefieldAbility(new ThiefOfBloodEffect(), null, "As {this} enters the battlefield, remove all counters from all permanents. {this} enters the battlefield with a +1/+1 counter on it for each counter removed this way", null)); + } + + public ThiefOfBlood(final ThiefOfBlood card) { + super(card); + } + + @Override + public ThiefOfBlood copy() { + return new ThiefOfBlood(this); + } +} + +class ThiefOfBloodEffect extends OneShotEffect { + + private static final FilterPermanent filter = new FilterPermanent("permanent with a counter"); + static { + filter.add(new CounterPredicate(null)); + } + + ThiefOfBloodEffect() { + super(Outcome.BoostCreature); + this.staticText = "remove all counters from all permanents. {this} enters the battlefield with a +1/+1 counter on it for each counter removed this way"; + } + + ThiefOfBloodEffect(final ThiefOfBloodEffect effect) { + super(effect); + } + + @Override + public ThiefOfBloodEffect copy() { + return new ThiefOfBloodEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int countersRemoved = 0; + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { + Counters counters = permanent.getCounters().copy(); + for (Counter counter : counters.values()) { + permanent.getCounters().removeCounter(counter.getName(), counter.getCount()); + countersRemoved += counter.getCount(); + } + } + if (countersRemoved > 0) { + Permanent sourcePermanent = game.getPermanentEntering(source.getSourceId()); + if (sourcePermanent != null) { + sourcePermanent.addCounters(CounterType.P1P1.createInstance(countersRemoved), game); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ThornwoodFalls.java b/Mage.Sets/src/mage/sets/commander2015/ThornwoodFalls.java new file mode 100644 index 0000000000..4c32317d1a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ThornwoodFalls.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ThornwoodFalls extends mage.sets.khansoftarkir.ThornwoodFalls { + + public ThornwoodFalls(UUID ownerId) { + super(ownerId); + this.cardNumber = 315; + this.expansionSetCode = "C15"; + } + + public ThornwoodFalls(final ThornwoodFalls card) { + super(card); + } + + @Override + public ThornwoodFalls copy() { + return new ThornwoodFalls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ThoughtReflection.java b/Mage.Sets/src/mage/sets/commander2015/ThoughtReflection.java new file mode 100644 index 0000000000..16f50b59ca --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ThoughtReflection.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ThoughtReflection extends mage.sets.shadowmoor.ThoughtReflection { + + public ThoughtReflection(UUID ownerId) { + super(ownerId); + this.cardNumber = 110; + this.expansionSetCode = "C15"; + } + + public ThoughtReflection(final ThoughtReflection card) { + super(card); + } + + @Override + public ThoughtReflection copy() { + return new ThoughtReflection(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ThundercloudShaman.java b/Mage.Sets/src/mage/sets/commander2015/ThundercloudShaman.java new file mode 100644 index 0000000000..9de101c4d2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ThundercloudShaman.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ThundercloudShaman extends mage.sets.modernmasters.ThundercloudShaman { + + public ThundercloudShaman(UUID ownerId) { + super(ownerId); + this.cardNumber = 168; + this.expansionSetCode = "C15"; + } + + public ThundercloudShaman(final ThundercloudShaman card) { + super(card); + } + + @Override + public ThundercloudShaman copy() { + return new ThundercloudShaman(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TreasuryThrull.java b/Mage.Sets/src/mage/sets/commander2015/TreasuryThrull.java new file mode 100644 index 0000000000..259f0d81ed --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TreasuryThrull.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TreasuryThrull extends mage.sets.gatecrash.TreasuryThrull { + + public TreasuryThrull(UUID ownerId) { + super(ownerId); + this.cardNumber = 235; + this.expansionSetCode = "C15"; + } + + public TreasuryThrull(final TreasuryThrull card) { + super(card); + } + + @Override + public TreasuryThrull copy() { + return new TreasuryThrull(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TributeToTheWild.java b/Mage.Sets/src/mage/sets/commander2015/TributeToTheWild.java new file mode 100644 index 0000000000..ab082b37ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TributeToTheWild.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TributeToTheWild extends mage.sets.commander.TributeToTheWild { + + public TributeToTheWild(UUID ownerId) { + super(ownerId); + this.cardNumber = 206; + this.expansionSetCode = "C15"; + } + + public TributeToTheWild(final TributeToTheWild card) { + super(card); + } + + @Override + public TributeToTheWild copy() { + return new TributeToTheWild(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/TrygonPredator.java b/Mage.Sets/src/mage/sets/commander2015/TrygonPredator.java new file mode 100644 index 0000000000..f1f1b43982 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/TrygonPredator.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TrygonPredator extends mage.sets.modernmasters.TrygonPredator { + + public TrygonPredator(UUID ownerId) { + super(ownerId); + this.cardNumber = 236; + this.expansionSetCode = "C15"; + } + + public TrygonPredator(final TrygonPredator card) { + super(card); + } + + @Override + public TrygonPredator copy() { + return new TrygonPredator(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/UnderworldCoinsmith.java b/Mage.Sets/src/mage/sets/commander2015/UnderworldCoinsmith.java new file mode 100644 index 0000000000..28e3ee5185 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/UnderworldCoinsmith.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class UnderworldCoinsmith extends mage.sets.journeyintonyx.UnderworldCoinsmith { + + public UnderworldCoinsmith(UUID ownerId) { + super(ownerId); + this.cardNumber = 237; + this.expansionSetCode = "C15"; + } + + public UnderworldCoinsmith(final UnderworldCoinsmith card) { + super(card); + } + + @Override + public UnderworldCoinsmith copy() { + return new UnderworldCoinsmith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/UnderworldConnections.java b/Mage.Sets/src/mage/sets/commander2015/UnderworldConnections.java new file mode 100644 index 0000000000..fc9588828f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/UnderworldConnections.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class UnderworldConnections extends mage.sets.returntoravnica.UnderworldConnections { + + public UnderworldConnections(UUID ownerId) { + super(ownerId); + this.cardNumber = 138; + this.expansionSetCode = "C15"; + } + + public UnderworldConnections(final UnderworldConnections card) { + super(card); + } + + @Override + public UnderworldConnections copy() { + return new UnderworldConnections(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/UrzasRage.java b/Mage.Sets/src/mage/sets/commander2015/UrzasRage.java new file mode 100644 index 0000000000..bfd24ac640 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/UrzasRage.java @@ -0,0 +1,54 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class UrzasRage extends mage.sets.phyrexiavsthecoalition.UrzasRage { + + public UrzasRage(UUID ownerId) { + super(ownerId); + this.cardNumber = 169; + this.expansionSetCode = "C15"; + this.rarity = Rarity.RARE; + } + + public UrzasRage(final UrzasRage card) { + super(card); + } + + @Override + public UrzasRage copy() { + return new UrzasRage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Vandalblast.java b/Mage.Sets/src/mage/sets/commander2015/Vandalblast.java new file mode 100644 index 0000000000..5d4f5905b8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Vandalblast.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Vandalblast extends mage.sets.returntoravnica.Vandalblast { + + public Vandalblast(UUID ownerId) { + super(ownerId); + this.cardNumber = 170; + this.expansionSetCode = "C15"; + } + + public Vandalblast(final Vandalblast card) { + super(card); + } + + @Override + public Vandalblast copy() { + return new Vandalblast(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VerdantConfluence.java b/Mage.Sets/src/mage/sets/commander2015/VerdantConfluence.java new file mode 100644 index 0000000000..31e616feb4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VerdantConfluence.java @@ -0,0 +1,85 @@ +/* + * 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.commander2015; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterBasicLandCard; +import mage.filter.common.FilterPermanentCard; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class VerdantConfluence extends CardImpl { + + public VerdantConfluence(UUID ownerId) { + super(ownerId, 40, "Verdant Confluence", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{G}{G}"); + this.expansionSetCode = "C15"; + + // Choose three. You may choose the same mode more than once. + this.getSpellAbility().getModes().setMinModes(3); + this.getSpellAbility().getModes().setMaxModes(3); + this.getSpellAbility().getModes().setEachModeMoreThanOnce(true); + + // - Put two +1/+1 counters on target creature; + this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Return target permanent card from your graveyard to your hand; + Mode mode = new Mode(); + mode.getEffects().add(new ReturnFromGraveyardToHandTargetEffect()); + mode.getTargets().add(new TargetCardInYourGraveyard(new FilterPermanentCard())); + this.getSpellAbility().getModes().addMode(mode); + + // Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. + TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard()); + mode = new Mode(); + mode.getEffects().add(new SearchLibraryPutInPlayEffect(target, true)); + this.getSpellAbility().getModes().addMode(mode); + } + + public VerdantConfluence(final VerdantConfluence card) { + super(card); + } + + @Override + public VerdantConfluence copy() { + return new VerdantConfluence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VerdantForce.java b/Mage.Sets/src/mage/sets/commander2015/VerdantForce.java new file mode 100644 index 0000000000..fa57889476 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VerdantForce extends mage.sets.tempest.VerdantForce { + + public VerdantForce(UUID ownerId) { + super(ownerId); + this.cardNumber = 207; + this.expansionSetCode = "C15"; + } + + public VerdantForce(final VerdantForce card) { + super(card); + } + + @Override + public VerdantForce copy() { + return new VerdantForce(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Victimize.java b/Mage.Sets/src/mage/sets/commander2015/Victimize.java new file mode 100644 index 0000000000..a0f2bee200 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Victimize.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Victimize extends mage.sets.conspiracy.Victimize { + + public Victimize(UUID ownerId) { + super(ownerId); + this.cardNumber = 139; + this.expansionSetCode = "C15"; + } + + public Victimize(final Victimize card) { + super(card); + } + + @Override + public Victimize copy() { + return new Victimize(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VictorysHerald.java b/Mage.Sets/src/mage/sets/commander2015/VictorysHerald.java new file mode 100644 index 0000000000..6d6de19b30 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VictorysHerald.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VictorysHerald extends mage.sets.mirrodinbesieged.VictorysHerald { + + public VictorysHerald(UUID ownerId) { + super(ownerId); + this.cardNumber = 83; + this.expansionSetCode = "C15"; + } + + public VictorysHerald(final VictorysHerald card) { + super(card); + } + + @Override + public VictorysHerald copy() { + return new VictorysHerald(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ViridianEmissary.java b/Mage.Sets/src/mage/sets/commander2015/ViridianEmissary.java new file mode 100644 index 0000000000..b053b67fa3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ViridianEmissary.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ViridianEmissary extends mage.sets.mirrodinbesieged.ViridianEmissary { + + public ViridianEmissary(UUID ownerId) { + super(ownerId); + this.cardNumber = 208; + this.expansionSetCode = "C15"; + } + + public ViridianEmissary(final ViridianEmissary card) { + super(card); + } + + @Override + public ViridianEmissary copy() { + return new ViridianEmissary(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ViridianShaman.java b/Mage.Sets/src/mage/sets/commander2015/ViridianShaman.java new file mode 100644 index 0000000000..786f130155 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ViridianShaman.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ViridianShaman extends mage.sets.tenthedition.ViridianShaman { + + public ViridianShaman(UUID ownerId) { + super(ownerId); + this.cardNumber = 209; + this.expansionSetCode = "C15"; + } + + public ViridianShaman(final ViridianShaman card) { + super(card); + } + + @Override + public ViridianShaman copy() { + return new ViridianShaman(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ViridianZealot.java b/Mage.Sets/src/mage/sets/commander2015/ViridianZealot.java new file mode 100644 index 0000000000..c588747531 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ViridianZealot.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ViridianZealot extends mage.sets.darksteel.ViridianZealot { + + public ViridianZealot(UUID ownerId) { + super(ownerId); + this.cardNumber = 210; + this.expansionSetCode = "C15"; + } + + public ViridianZealot(final ViridianZealot card) { + super(card); + } + + @Override + public ViridianZealot copy() { + return new ViridianZealot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VividCrag.java b/Mage.Sets/src/mage/sets/commander2015/VividCrag.java new file mode 100644 index 0000000000..af972132ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VividCrag.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VividCrag extends mage.sets.lorwyn.VividCrag { + + public VividCrag(UUID ownerId) { + super(ownerId); + this.cardNumber = 316; + this.expansionSetCode = "C15"; + } + + public VividCrag(final VividCrag card) { + super(card); + } + + @Override + public VividCrag copy() { + return new VividCrag(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VividCreek.java b/Mage.Sets/src/mage/sets/commander2015/VividCreek.java new file mode 100644 index 0000000000..5f40f37d31 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VividCreek.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VividCreek extends mage.sets.lorwyn.VividCreek { + + public VividCreek(UUID ownerId) { + super(ownerId); + this.cardNumber = 317; + this.expansionSetCode = "C15"; + } + + public VividCreek(final VividCreek card) { + super(card); + } + + @Override + public VividCreek copy() { + return new VividCreek(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VividGrove.java b/Mage.Sets/src/mage/sets/commander2015/VividGrove.java new file mode 100644 index 0000000000..df5490213e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VividGrove.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VividGrove extends mage.sets.lorwyn.VividGrove { + + public VividGrove(UUID ownerId) { + super(ownerId); + this.cardNumber = 318; + this.expansionSetCode = "C15"; + } + + public VividGrove(final VividGrove card) { + super(card); + } + + @Override + public VividGrove copy() { + return new VividGrove(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VividMarsh.java b/Mage.Sets/src/mage/sets/commander2015/VividMarsh.java new file mode 100644 index 0000000000..84a2b6309f --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VividMarsh.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VividMarsh extends mage.sets.lorwyn.VividMarsh { + + public VividMarsh(UUID ownerId) { + super(ownerId); + this.cardNumber = 319; + this.expansionSetCode = "C15"; + } + + public VividMarsh(final VividMarsh card) { + super(card); + } + + @Override + public VividMarsh copy() { + return new VividMarsh(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VividMeadow.java b/Mage.Sets/src/mage/sets/commander2015/VividMeadow.java new file mode 100644 index 0000000000..f4261c57aa --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VividMeadow.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VividMeadow extends mage.sets.lorwyn.VividMeadow { + + public VividMeadow(UUID ownerId) { + super(ownerId); + this.cardNumber = 320; + this.expansionSetCode = "C15"; + } + + public VividMeadow(final VividMeadow card) { + super(card); + } + + @Override + public VividMeadow copy() { + return new VividMeadow(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VowOfDuty.java b/Mage.Sets/src/mage/sets/commander2015/VowOfDuty.java new file mode 100644 index 0000000000..77bc9a7d50 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VowOfDuty.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VowOfDuty extends mage.sets.commander.VowOfDuty { + + public VowOfDuty(UUID ownerId) { + super(ownerId); + this.cardNumber = 84; + this.expansionSetCode = "C15"; + } + + public VowOfDuty(final VowOfDuty card) { + super(card); + } + + @Override + public VowOfDuty copy() { + return new VowOfDuty(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VowOfMalice.java b/Mage.Sets/src/mage/sets/commander2015/VowOfMalice.java new file mode 100644 index 0000000000..0b95284416 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VowOfMalice.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VowOfMalice extends mage.sets.commander.VowOfMalice { + + public VowOfMalice(UUID ownerId) { + super(ownerId); + this.cardNumber = 140; + this.expansionSetCode = "C15"; + } + + public VowOfMalice(final VowOfMalice card) { + super(card); + } + + @Override + public VowOfMalice copy() { + return new VowOfMalice(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/VulturousZombie.java b/Mage.Sets/src/mage/sets/commander2015/VulturousZombie.java new file mode 100644 index 0000000000..a6676ea2c8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/VulturousZombie.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VulturousZombie extends mage.sets.commander.VulturousZombie { + + public VulturousZombie(UUID ownerId) { + super(ownerId); + this.cardNumber = 238; + this.expansionSetCode = "C15"; + } + + public VulturousZombie(final VulturousZombie card) { + super(card); + } + + @Override + public VulturousZombie copy() { + return new VulturousZombie(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WallOfBlossoms.java b/Mage.Sets/src/mage/sets/commander2015/WallOfBlossoms.java new file mode 100644 index 0000000000..49cf49d3a9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WallOfBlossoms.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WallOfBlossoms extends mage.sets.stronghold.WallOfBlossoms { + + public WallOfBlossoms(UUID ownerId) { + super(ownerId); + this.cardNumber = 211; + this.expansionSetCode = "C15"; + } + + public WallOfBlossoms(final WallOfBlossoms card) { + super(card); + } + + @Override + public WallOfBlossoms copy() { + return new WallOfBlossoms(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WarchiefGiant.java b/Mage.Sets/src/mage/sets/commander2015/WarchiefGiant.java new file mode 100644 index 0000000000..57f272644d --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WarchiefGiant.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.commander2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.MyriadAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class WarchiefGiant extends CardImpl { + + public WarchiefGiant(UUID ownerId) { + super(ownerId, 31, "Warchief Giant", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "C15"; + this.subtype.add("Giant"); + this.subtype.add("Warrior"); + this.power = new MageInt(5); + this.toughness = new MageInt(3); + + // Haste + this.addAbility(HasteAbility.getInstance()); + // Myriad + this.addAbility(new MyriadAbility()); + } + + public WarchiefGiant(final WarchiefGiant card) { + super(card); + } + + @Override + public WarchiefGiant copy() { + return new WarchiefGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WarstormSurge.java b/Mage.Sets/src/mage/sets/commander2015/WarstormSurge.java new file mode 100644 index 0000000000..8783c69380 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WarstormSurge.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WarstormSurge extends mage.sets.magic2012.WarstormSurge { + + public WarstormSurge(UUID ownerId) { + super(ownerId); + this.cardNumber = 171; + this.expansionSetCode = "C15"; + } + + public WarstormSurge(final WarstormSurge card) { + super(card); + } + + @Override + public WarstormSurge copy() { + return new WarstormSurge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WayfarersBauble.java b/Mage.Sets/src/mage/sets/commander2015/WayfarersBauble.java new file mode 100644 index 0000000000..9d3dcccc2a --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WayfarersBauble.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WayfarersBauble extends mage.sets.commander2013.WayfarersBauble { + + public WayfarersBauble(UUID ownerId) { + super(ownerId); + this.cardNumber = 274; + this.expansionSetCode = "C15"; + } + + public WayfarersBauble(final WayfarersBauble card) { + super(card); + } + + @Override + public WayfarersBauble copy() { + return new WayfarersBauble(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WindScarredCrag.java b/Mage.Sets/src/mage/sets/commander2015/WindScarredCrag.java new file mode 100644 index 0000000000..36eefa8c03 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WindScarredCrag.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WindScarredCrag extends mage.sets.khansoftarkir.WindScarredCrag { + + public WindScarredCrag(UUID ownerId) { + super(ownerId); + this.cardNumber = 321; + this.expansionSetCode = "C15"; + } + + public WindScarredCrag(final WindScarredCrag card) { + super(card); + } + + @Override + public WindScarredCrag copy() { + return new WindScarredCrag(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/Windfall.java b/Mage.Sets/src/mage/sets/commander2015/Windfall.java new file mode 100644 index 0000000000..33003e65c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/Windfall.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Windfall extends mage.sets.urzassaga.Windfall { + + public Windfall(UUID ownerId) { + super(ownerId); + this.cardNumber = 111; + this.expansionSetCode = "C15"; + } + + public Windfall(final Windfall card) { + super(card); + } + + @Override + public Windfall copy() { + return new Windfall(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WistfulSelkie.java b/Mage.Sets/src/mage/sets/commander2015/WistfulSelkie.java new file mode 100644 index 0000000000..a6b80795e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WistfulSelkie.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WistfulSelkie extends mage.sets.eventide.WistfulSelkie { + + public WistfulSelkie(UUID ownerId) { + super(ownerId); + this.cardNumber = 243; + this.expansionSetCode = "C15"; + } + + public WistfulSelkie(final WistfulSelkie card) { + super(card); + } + + @Override + public WistfulSelkie copy() { + return new WistfulSelkie(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WoodElves.java b/Mage.Sets/src/mage/sets/commander2015/WoodElves.java new file mode 100644 index 0000000000..9f1cfb554e --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WoodElves.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WoodElves extends mage.sets.ninthedition.WoodElves { + + public WoodElves(UUID ownerId) { + super(ownerId); + this.cardNumber = 212; + this.expansionSetCode = "C15"; + } + + public WoodElves(final WoodElves card) { + super(card); + } + + @Override + public WoodElves copy() { + return new WoodElves(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WordOfSeizing.java b/Mage.Sets/src/mage/sets/commander2015/WordOfSeizing.java new file mode 100644 index 0000000000..eafa253301 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WordOfSeizing.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WordOfSeizing extends mage.sets.commander2014.WordOfSeizing { + + public WordOfSeizing(UUID ownerId) { + super(ownerId); + this.cardNumber = 172; + this.expansionSetCode = "C15"; + } + + public WordOfSeizing(final WordOfSeizing card) { + super(card); + } + + @Override + public WordOfSeizing copy() { + return new WordOfSeizing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WornPowerstone.java b/Mage.Sets/src/mage/sets/commander2015/WornPowerstone.java new file mode 100644 index 0000000000..a4cc625b82 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WornPowerstone.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WornPowerstone extends mage.sets.urzassaga.WornPowerstone { + + public WornPowerstone(UUID ownerId) { + super(ownerId); + this.cardNumber = 275; + this.expansionSetCode = "C15"; + } + + public WornPowerstone(final WornPowerstone card) { + super(card); + } + + @Override + public WornPowerstone copy() { + return new WornPowerstone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/WretchedConfluence.java b/Mage.Sets/src/mage/sets/commander2015/WretchedConfluence.java new file mode 100644 index 0000000000..f4c162edce --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/WretchedConfluence.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.commander2015; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardTargetEffect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreatureCard; +import mage.target.TargetPlayer; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class WretchedConfluence extends CardImpl { + + public WretchedConfluence(UUID ownerId) { + super(ownerId, 23, "Wretched Confluence", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{3}{B}{B}"); + this.expansionSetCode = "C15"; + + // Choose three. You may choose the same mode more than once. + this.getSpellAbility().getModes().setMinModes(3); + this.getSpellAbility().getModes().setMaxModes(3); + this.getSpellAbility().getModes().setEachModeMoreThanOnce(true); + + // - Target player draws a card and loses 1 life; + Effect effect = new LoseLifeTargetEffect(1); + effect.setText("and loses 1 life"); + this.getSpellAbility().addEffect(new DrawCardTargetEffect(1)); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetPlayer()); + + // Target creature gets -2/-2 until end of turn; + Mode mode = new Mode(); + mode.getEffects().add(new BoostTargetEffect(-2, -2, Duration.EndOfTurn)); + mode.getTargets().add(new TargetCreaturePermanent()); + this.getSpellAbility().getModes().addMode(mode); + + // Return target creature card from your graveyard to your hand. + mode = new Mode(); + mode.getEffects().add(new ReturnFromGraveyardToHandTargetEffect()); + mode.getTargets().add(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard"))); + this.getSpellAbility().getModes().addMode(mode); + } + + public WretchedConfluence(final WretchedConfluence card) { + super(card); + } + + @Override + public WretchedConfluence copy() { + return new WretchedConfluence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander2015/ZoeticCavern.java b/Mage.Sets/src/mage/sets/commander2015/ZoeticCavern.java new file mode 100644 index 0000000000..745eb97f48 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander2015/ZoeticCavern.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.commander2015; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ZoeticCavern extends mage.sets.commander2014.ZoeticCavern { + + public ZoeticCavern(UUID ownerId) { + super(ownerId); + this.cardNumber = 322; + this.expansionSetCode = "C15"; + } + + public ZoeticCavern(final ZoeticCavern card) { + super(card); + } + + @Override + public ZoeticCavern copy() { + return new ZoeticCavern(this); + } +} diff --git a/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java b/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java index 193aee99a9..22098f98e2 100644 --- a/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java +++ b/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java @@ -101,7 +101,7 @@ public class HuntmasterOfTheFells extends CardImpl { class HuntmasterOfTheFellsAbility extends TriggeredAbilityImpl { public HuntmasterOfTheFellsAbility() { - super(Zone.BATTLEFIELD, new CreateTokenEffect(new WolfToken(Token.Type.SECOND)), false); + super(Zone.BATTLEFIELD, new CreateTokenEffect(new WolfToken()), false); this.addEffect(new GainLifeEffect(2)); } diff --git a/Mage.Sets/src/mage/sets/darkascension/RequiemAngel.java b/Mage.Sets/src/mage/sets/darkascension/RequiemAngel.java index 3f1263e0fb..7b98ac2bcb 100644 --- a/Mage.Sets/src/mage/sets/darkascension/RequiemAngel.java +++ b/Mage.Sets/src/mage/sets/darkascension/RequiemAngel.java @@ -67,7 +67,7 @@ public class RequiemAngel extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever another non-Spirit creature you control dies, put a 1/1 white Spirit creature token with flying onto the battlefield. - this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken(expansionSetCode), 1), false, filter)); + this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken("ISD"), 1), false, filter)); } public RequiemAngel(final RequiemAngel card) { diff --git a/Mage.Sets/src/mage/sets/darkascension/Seance.java b/Mage.Sets/src/mage/sets/darkascension/Seance.java index 5f848ebe8a..1b28fafa42 100644 --- a/Mage.Sets/src/mage/sets/darkascension/Seance.java +++ b/Mage.Sets/src/mage/sets/darkascension/Seance.java @@ -97,7 +97,7 @@ class SeanceEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null && card != null) { if (controller.moveCards(card, null, Zone.EXILED, source, game)) { - PutTokenOntoBattlefieldCopyTargetEffect effect = new PutTokenOntoBattlefieldCopyTargetEffect(source.getControllerId(), null, true); + PutTokenOntoBattlefieldCopyTargetEffect effect = new PutTokenOntoBattlefieldCopyTargetEffect(source.getControllerId(), null, false); effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); effect.setAdditionalSubType("Spirit"); effect.apply(game, source); diff --git a/Mage.Sets/src/mage/sets/dissension/PalliationAccord.java b/Mage.Sets/src/mage/sets/dissension/PalliationAccord.java index 0d98ccb205..9014dce734 100644 --- a/Mage.Sets/src/mage/sets/dissension/PalliationAccord.java +++ b/Mage.Sets/src/mage/sets/dissension/PalliationAccord.java @@ -29,7 +29,7 @@ package mage.sets.dissension; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BecomesTappedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.effects.PreventionEffectImpl; @@ -38,12 +38,14 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; +import mage.constants.TargetController; import mage.constants.Zone; import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; -import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; +import mage.game.events.GameEvent; /** * @@ -51,13 +53,19 @@ import mage.game.permanent.Permanent; */ public class PalliationAccord extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + public PalliationAccord(UUID ownerId) { super(ownerId, 122, "Palliation Accord", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{U}"); this.expansionSetCode = "DIS"; // Whenever a creature an opponent controls becomes tapped, put a shield counter on Palliation Accord. - this.addAbility(new PallationAccordTriggeredAbility()); - + this.addAbility(new BecomesTappedTriggeredAbility(new AddCountersSourceEffect(CounterType.SHIELD.createInstance()), false, filter)); + // Remove a shield counter from Palliation Accord: Prevent the next 1 damage that would be dealt to you this turn. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new PalliationAccordPreventionEffect(), new RemoveCountersSourceCost(CounterType.SHIELD.createInstance()))); } @@ -72,41 +80,6 @@ public class PalliationAccord extends CardImpl { } } -class PallationAccordTriggeredAbility extends TriggeredAbilityImpl { - PallationAccordTriggeredAbility() { - super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.SHIELD.createInstance())); - } - - PallationAccordTriggeredAbility(final PallationAccordTriggeredAbility ability) { - super(ability); - } - - @Override - public PallationAccordTriggeredAbility copy() { - return new PallationAccordTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.TAPPED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent p = game.getPermanent(event.getTargetId()); - if (p != null && p.getCardType().contains(CardType.CREATURE)) { - if (game.getOpponents(this.controllerId).contains(p.getControllerId())) - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever a creature an opponent controls becomes tapped, " + modes.getText(); - } -} - class PalliationAccordPreventionEffect extends PreventionEffectImpl { public PalliationAccordPreventionEffect() { @@ -151,4 +124,4 @@ class PalliationAccordPreventionEffect extends PreventionEffectImpl { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java b/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java index b4a6247fbe..0de01f222a 100644 --- a/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java +++ b/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java @@ -30,7 +30,6 @@ package mage.sets.dissension; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.DiscardCardCost; @@ -46,6 +45,7 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; @@ -66,11 +66,11 @@ public class RakdosGuildmage extends CardImpl { // ({BR} can be paid with either {B} or {R}.) // {3}{B}, Discard a card: Target creature gets -2/-2 until end of turn. - SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2,-2, Duration.EndOfTurn), new ManaCostsImpl("{3}{B}")); + SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -2, Duration.EndOfTurn), new ManaCostsImpl("{3}{B}")); ability.addTarget(new TargetCreaturePermanent()); ability.addCost(new DiscardCardCost()); this.addAbility(ability); - + // {3}{R}: Put a 2/1 red Goblin creature token with haste onto the battlefield. Exile it at the beginning of the next end step. SimpleActivatedAbility ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RakdosGuildmageEffect(), new ManaCostsImpl("{3}{R}")); this.addAbility(ability2); @@ -86,7 +86,6 @@ public class RakdosGuildmage extends CardImpl { } } - class RakdosGuildmageEffect extends OneShotEffect { public RakdosGuildmageEffect() { @@ -107,13 +106,14 @@ class RakdosGuildmageEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Token token = new RakdosGuildmageGoblinToken(); if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } return false; @@ -131,4 +131,4 @@ class RakdosGuildmageGoblinToken extends Token { toughness = new MageInt(1); this.addAbility(HasteAbility.getInstance()); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/dissension/SimicBasilisk.java b/Mage.Sets/src/mage/sets/dissension/SimicBasilisk.java index 2d6da8494b..09d54a7ec2 100644 --- a/Mage.Sets/src/mage/sets/dissension/SimicBasilisk.java +++ b/Mage.Sets/src/mage/sets/dissension/SimicBasilisk.java @@ -32,7 +32,10 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsDamageToACreatureTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.GraftAbility; @@ -69,7 +72,10 @@ public class SimicBasilisk extends CardImpl { this.addAbility(new GraftAbility(this, 3)); // {1}{G}: Until end of turn, target creature with a +1/+1 counter on it gains "Whenever this creature deals combat damage to a creature, destroy that creature at end of combat." - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(new DealsDamageToACreatureTriggeredAbility(new DestroyTargetEffect(), true, false, true), Duration.EndOfTurn), new ManaCostsImpl("{1}{G}")); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(new DealsDamageToACreatureTriggeredAbility(effect, true, false, true), Duration.EndOfTurn), new ManaCostsImpl("{1}{G}")); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java b/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java index ae7f5f64f0..cf82ebbf9e 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java @@ -141,15 +141,15 @@ class PlasmCaptureManaEffect extends ManaEffect { } if (choiceColor.getColor().isBlack()) { - mana.increaseBlack(); + mana.addBlack(); } else if (choiceColor.getColor().isBlue()) { - mana.increaseBlue(); + mana.addBlue(); } else if (choiceColor.getColor().isRed()) { - mana.increaseRed(); + mana.addRed(); } else if (choiceColor.getColor().isGreen()) { - mana.increaseGreen(); + mana.addGreen(); } else if (choiceColor.getColor().isWhite()) { - mana.increaseWhite(); + mana.addWhite(); } } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/RenegadeKrasis.java b/Mage.Sets/src/mage/sets/dragonsmaze/RenegadeKrasis.java index 6bd8f47bef..32b2b81941 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/RenegadeKrasis.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/RenegadeKrasis.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets.dragonsmaze; import java.util.UUID; @@ -44,13 +43,10 @@ import mage.filter.predicate.permanent.CounterPredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; -import mage.game.stack.StackObject; - - public class RenegadeKrasis extends CardImpl { - public RenegadeKrasis (UUID ownerId) { + public RenegadeKrasis(UUID ownerId) { super(ownerId, 47, "Renegade Krasis", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); this.expansionSetCode = "DGM"; this.subtype.add("Beast"); @@ -66,7 +62,7 @@ public class RenegadeKrasis extends CardImpl { this.addAbility(new RenegadeKrasisTriggeredAbility()); } - public RenegadeKrasis (final RenegadeKrasis card) { + public RenegadeKrasis(final RenegadeKrasis card) { super(card); } @@ -80,13 +76,14 @@ public class RenegadeKrasis extends CardImpl { class RenegadeKrasisTriggeredAbility extends TriggeredAbilityImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); + static { filter.add(new AnotherPredicate()); filter.add(new CounterPredicate(CounterType.P1P1)); } public RenegadeKrasisTriggeredAbility() { - super(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.P1P1.createInstance(1),filter), false); + super(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.P1P1.createInstance(1), filter), false); } public RenegadeKrasisTriggeredAbility(final RenegadeKrasisTriggeredAbility ability) { @@ -100,31 +97,16 @@ class RenegadeKrasisTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.COUNTER_ADDED; + return event.getType() == EventType.EVOLVED_CREATURE; } @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getTargetId().equals(getSourceId())) { - Object object = game.getState().getValue("EvolveAddCounterActive"); - if (object != null && (Boolean) object) { - StackObject stackObject = game.getStack().getLast(); - if (stackObject.getStackAbility() instanceof EvolveAbility) { - object = game.getState().getValue(this.getId() + "_lastUsedEvolveStackObject"); - if (object != null && ((UUID) object).equals(stackObject.getId())) { - // this evolve was already handled before (prevents to trigger multiple times if counter from evolve is e.g. doubled) - return false; - } - game.getState().setValue(this.getId() + "_lastUsedEvolveStackObject", stackObject.getId()); - return true; - } - } - } - return false; + return event.getTargetId().equals(getSourceId()); } @Override public String getRule() { - return "Whenever Renegade Krasis evolves, put a +1/+1 counter on each other creature you control with a +1/+1 counter on it."; + return "Whenever {this} evolves, put a +1/+1 counter on each other creature you control with a +1/+1 counter on it."; } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DeadlyWanderings.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DeadlyWanderings.java index dbedd9f34b..02dca44575 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/DeadlyWanderings.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DeadlyWanderings.java @@ -43,6 +43,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; /** * @@ -59,10 +60,10 @@ public class DeadlyWanderings extends CardImpl { Effect effect = new ConditionalContinuousEffect(boostEffect, new OneControlledCreatureCondition(), "As long as you control exactly one creature, that creature gets +2/+0"); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); - ContinuousEffect deathtouchEffect = new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield); + ContinuousEffect deathtouchEffect = new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()); effect = new ConditionalContinuousEffect(deathtouchEffect, new OneControlledCreatureCondition(), "and has deathtouch"); ability.addEffect(effect); - ContinuousEffect lifelinkEffect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield); + ContinuousEffect lifelinkEffect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent()); effect = new ConditionalContinuousEffect(lifelinkEffect, new OneControlledCreatureCondition(), "and lifelink"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java index 864a66b66d..e24b8c59f9 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java @@ -44,10 +44,8 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.players.Library; import mage.players.Player; import mage.target.targetpointer.FixedTarget; @@ -67,10 +65,10 @@ public class IreShaman extends CardImpl { // Menace (This creature can't be blocked except by two or more creatures.) this.addAbility(new MenaceAbility()); - + // Megamorph {R} this.addAbility(new MorphAbility(this, new ManaCostsImpl("{R}"), true)); - + // When Ire Shaman is turned face up, exile the top card of your library. Until end of turn, you may play that card. this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new IreShamanExileEffect(), false)); } @@ -106,11 +104,10 @@ class IreShamanExileEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (sourcePermanent != null && controller != null && controller.getLibrary().size() > 0) { - Library library = controller.getLibrary(); - Card card = library.removeFromTop(game); + Card card = controller.getLibrary().getFromTop(game); if (card != null) { - String exileName = new StringBuilder(sourcePermanent.getIdName()).append(" ").toString(); - controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source.getSourceId(), game, Zone.LIBRARY, true); + String exileName = sourcePermanent.getIdName() + " "; + controller.moveCardsToExile(card, source, game, true, source.getSourceId(), exileName); ContinuousEffect effect = new IreShamanCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); @@ -144,7 +141,7 @@ class IreShamanCastFromExileEffect extends AsThoughEffectImpl { @Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - return source.getControllerId().equals(affectedControllerId) && - objectId.equals(getTargetPointer().getFirst(game, source)); + return source.getControllerId().equals(affectedControllerId) + && objectId.equals(getTargetPointer().getFirst(game, source)); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SarkhanUnbroken.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SarkhanUnbroken.java index daf2b76935..ccd28a1c47 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/SarkhanUnbroken.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SarkhanUnbroken.java @@ -132,19 +132,19 @@ class SarkhanUnbrokenAbility1 extends OneShotEffect { switch (manaChoice.getChoice()) { case "White": - mana.increaseWhite(); + mana.addWhite(); break; case "Blue": - mana.increaseBlue(); + mana.addBlue(); break; case "Black": - mana.increaseBlack(); + mana.addBlack(); break; case "Red": - mana.increaseRed(); + mana.addRed(); break; case "Green": - mana.increaseGreen(); + mana.addGreen(); break; } diff --git a/Mage.Sets/src/mage/sets/eventide/BloomTender.java b/Mage.Sets/src/mage/sets/eventide/BloomTender.java index ecadab68f7..f4544ddc23 100644 --- a/Mage.Sets/src/mage/sets/eventide/BloomTender.java +++ b/Mage.Sets/src/mage/sets/eventide/BloomTender.java @@ -107,19 +107,19 @@ class BloomTenderEffect extends ManaEffect { Mana mana = new Mana(); for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) { if (mana.getBlack() == 0 && permanent.getColor(game).isBlack()) { - mana.increaseBlack(); + mana.addBlack(); } if (mana.getBlue() == 0 && permanent.getColor(game).isBlue()) { - mana.increaseBlue(); + mana.addBlue(); } if (mana.getRed() == 0 && permanent.getColor(game).isRed()) { - mana.increaseRed(); + mana.addRed(); } if (mana.getGreen() == 0 && permanent.getColor(game).isGreen()) { - mana.increaseGreen(); + mana.addGreen(); } if (mana.getWhite() == 0 && permanent.getColor(game).isWhite()) { - mana.increaseWhite(); + mana.addWhite(); } } return mana; diff --git a/Mage.Sets/src/mage/sets/eventide/GroundlingPouncer.java b/Mage.Sets/src/mage/sets/eventide/GroundlingPouncer.java index 79141ba5cc..9d6f8aa0df 100644 --- a/Mage.Sets/src/mage/sets/eventide/GroundlingPouncer.java +++ b/Mage.Sets/src/mage/sets/eventide/GroundlingPouncer.java @@ -27,32 +27,28 @@ */ package mage.sets.eventide; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; import mage.abilities.condition.Condition; +import mage.abilities.condition.common.OpponentControlsPermanentCondition; +import mage.abilities.costs.Cost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.Effect; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; -import mage.constants.AbilityType; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.EffectType; import mage.constants.Rarity; -import mage.constants.WatcherScope; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.stack.StackAbility; -import mage.game.stack.StackObject; -import mage.watchers.Watcher; /** * @@ -61,7 +57,11 @@ import mage.watchers.Watcher; */ public class GroundlingPouncer extends CardImpl { - private String rule = "{this} gets +1/+3 and gains flying until end of turn. Activate this ability only once each turn and only if an opponent controls a creature with flying."; + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(new AbilityPredicate(FlyingAbility.class)); + } public GroundlingPouncer(UUID ownerId) { super(ownerId, 154, "Groundling Pouncer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G/U}"); @@ -72,12 +72,14 @@ public class GroundlingPouncer extends CardImpl { this.toughness = new MageInt(1); // {GU}: Groundling Pouncer gets +1/+3 and gains flying until end of turn. Activate this ability only once each turn and only if an opponent controls a creature with flying. - Condition condition = new GroundingPouncerCondition(); - Effect effect = new BoostSourceEffect(1, 3, Duration.EndOfTurn); - Effect effect2 = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, false, true); - Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{G/U}"), condition, rule); - ability.addEffect(effect2); - this.addAbility(ability, new ActivatedAbilityUsedThisTurnWatcher()); + Ability ability = new GroundlingPouncerAbility( + Zone.BATTLEFIELD, + new BoostSourceEffect(1, 3, Duration.EndOfTurn), + new ManaCostsImpl("{G/U}"), + new OpponentControlsPermanentCondition(filter), + "{G/U}: {this} gets +1/+3 and gains flying until end of turn. Activate this ability only once each turn and only if an opponent controls a creature with flying."); + ability.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, false, true)); + this.addAbility(ability); } @@ -91,69 +93,48 @@ public class GroundlingPouncer extends CardImpl { } } -class GroundingPouncerCondition implements Condition { +class GroundlingPouncerAbility extends LimitedTimesPerTurnActivatedAbility { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private static final Effects emptyEffects = new Effects(); - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); + private final Condition condition; + private final String ruleText; + + public GroundlingPouncerAbility(Zone zone, Effect effect, Cost cost, Condition condition, String rule) { + super(zone, effect, cost); + this.condition = condition; + this.ruleText = rule; + } + + public GroundlingPouncerAbility(GroundlingPouncerAbility ability) { + super(ability); + this.condition = ability.condition; + this.ruleText = ability.ruleText; } @Override - public boolean apply(Game game, Ability source) { - ActivatedAbilityUsedThisTurnWatcher watcher = (ActivatedAbilityUsedThisTurnWatcher) game.getState().getWatchers().get("ActivatedAbilityUsedThisTurn"); - for (UUID opponentId : game.getOpponents(source.getControllerId())) { - if (game.getBattlefield().countAll(filter, opponentId, game) > 0 && !watcher.getActivatedThisTurn().contains(source.getSourceId())) { - return true; - } + public Effects getEffects(Game game, EffectType effectType) { + if (!condition.apply(game, this)) { + return emptyEffects; } - return false; + return super.getEffects(game, effectType); } @Override - public String toString() { - return "once each turn and only if an opponent controls a flying creature"; - } -} - -class ActivatedAbilityUsedThisTurnWatcher extends Watcher { - - public Set activatedThisTurn = new HashSet<>(); - - public ActivatedAbilityUsedThisTurnWatcher() { - super("ActivatedAbilityUsedThisTurn", WatcherScope.GAME); - } - - public ActivatedAbilityUsedThisTurnWatcher(final ActivatedAbilityUsedThisTurnWatcher watcher) { - super(watcher); - this.activatedThisTurn.addAll(watcher.activatedThisTurn); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ACTIVATED_ABILITY) { - StackObject stackObject = game.getStack().getStackObject(event.getTargetId()); - if (stackObject != null) { - StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getTargetId()); - if (stackAbility != null && stackAbility.getAbilityType() == AbilityType.ACTIVATED) { - this.activatedThisTurn.add(stackAbility.getOriginalId()); - } - } - } - } - - public Set getActivatedThisTurn() { - return this.activatedThisTurn; - } - - @Override - public ActivatedAbilityUsedThisTurnWatcher copy() { - return new ActivatedAbilityUsedThisTurnWatcher(this); - } - - @Override - public void reset() { - super.reset(); - this.activatedThisTurn.clear(); + public boolean canActivate(UUID playerId, Game game) { + if (!condition.apply(game, this)) { + return false; + } + return super.canActivate(playerId, game); + } + + @Override + public GroundlingPouncerAbility copy() { + return new GroundlingPouncerAbility(this); + } + + @Override + public String getRule() { + return ruleText; } } diff --git a/Mage.Sets/src/mage/sets/exodus/PlatedRootwalla.java b/Mage.Sets/src/mage/sets/exodus/PlatedRootwalla.java new file mode 100644 index 0000000000..2307b7a767 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/PlatedRootwalla.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.exodus; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class PlatedRootwalla extends CardImpl { + + public PlatedRootwalla(UUID ownerId) { + super(ownerId, 116, "Plated Rootwalla", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "EXO"; + this.subtype.add("Lizard"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {2}{G}: Plated Rootwalla gets +3/+3 until end of turn. Activate this ability only once each turn. + this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(3, 3, Duration.EndOfTurn), new ManaCostsImpl("{2}{G}"))); + } + + public PlatedRootwalla(final PlatedRootwalla card) { + super(card); + } + + @Override + public PlatedRootwalla copy() { + return new PlatedRootwalla(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/HewedStoneRetainers.java b/Mage.Sets/src/mage/sets/fatereforged/HewedStoneRetainers.java index 4a9df6b278..8d2e26b6d0 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/HewedStoneRetainers.java +++ b/Mage.Sets/src/mage/sets/fatereforged/HewedStoneRetainers.java @@ -29,18 +29,12 @@ package mage.sets.fatereforged; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.common.ruleModifying.CastOnlyIfYouHaveCastAnotherSpellEffect; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.watchers.common.CastSpellLastTurnWatcher; /** * @@ -56,7 +50,7 @@ public class HewedStoneRetainers extends CardImpl { this.toughness = new MageInt(4); // Cast Hewed Stone Retainers only if you've cast another spell this turn. - this.addAbility(new SimpleStaticAbility(Zone.ALL, new HewedStoneRetainersEffect())); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new CastOnlyIfYouHaveCastAnotherSpellEffect())); } public HewedStoneRetainers(final HewedStoneRetainers card) { @@ -69,40 +63,3 @@ public class HewedStoneRetainers extends CardImpl { } } -class HewedStoneRetainersEffect extends ContinuousRuleModifyingEffectImpl { - HewedStoneRetainersEffect() { - super(Duration.EndOfGame, Outcome.Detriment); - staticText = "Cast {this} only if you've cast another spell this turn"; - } - - HewedStoneRetainersEffect(final HewedStoneRetainersEffect effect) { - super(effect); - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.CAST_SPELL; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getSourceId().equals(source.getSourceId())) { - CastSpellLastTurnWatcher watcher = (CastSpellLastTurnWatcher) game.getState().getWatchers().get("CastSpellLastTurnWatcher"); - if (watcher != null && watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(source.getControllerId()) == 0) { - return true; - } - } - return false; - - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public HewedStoneRetainersEffect copy() { - return new HewedStoneRetainersEffect(this); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/fifthdawn/DawnsReflection.java b/Mage.Sets/src/mage/sets/fifthdawn/DawnsReflection.java index e511ed5586..417381b270 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/DawnsReflection.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/DawnsReflection.java @@ -142,15 +142,15 @@ class DawnsReflectionManaEffect extends ManaEffect { } if (choiceColor.getColor().isBlack()) { - mana.increaseBlack(); + mana.addBlack(); } else if (choiceColor.getColor().isBlue()) { - mana.increaseBlue(); + mana.addBlue(); } else if (choiceColor.getColor().isRed()) { - mana.increaseRed(); + mana.addRed(); } else if (choiceColor.getColor().isGreen()) { - mana.increaseGreen(); + mana.addGreen(); } else if (choiceColor.getColor().isWhite()) { - mana.increaseWhite(); + mana.addWhite(); } } diff --git a/Mage.Sets/src/mage/sets/fifthdawn/Ferropede.java b/Mage.Sets/src/mage/sets/fifthdawn/Ferropede.java new file mode 100644 index 0000000000..f680e10eea --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthdawn/Ferropede.java @@ -0,0 +1,70 @@ +/* + * 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.fifthdawn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.common.counter.RemoveCounterTargetEffect; +import mage.abilities.keyword.CantBeBlockedSourceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPermanent; + +/** + * + * @author LoneFox + */ +public class Ferropede extends CardImpl { + + public Ferropede(UUID ownerId) { + super(ownerId, 122, "Ferropede", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}"); + this.expansionSetCode = "5DN"; + this.subtype.add("Insect"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Ferropede is unblockable. + this.addAbility(new CantBeBlockedSourceAbility()); + // Whenever Ferropede deals combat damage to a player, you may remove a counter from target permanent. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new RemoveCounterTargetEffect(), true); + ability.addTarget(new TargetPermanent()); + this.addAbility(ability); + } + + public Ferropede(final Ferropede card) { + super(card); + } + + @Override + public Ferropede copy() { + return new Ferropede(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthdawn/LunarAvenger.java b/Mage.Sets/src/mage/sets/fifthdawn/LunarAvenger.java new file mode 100644 index 0000000000..99f441658e --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthdawn/LunarAvenger.java @@ -0,0 +1,139 @@ +/* + * 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.fifthdawn; + +import java.util.HashSet; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.SunburstAbility; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LoneFox + */ +public class LunarAvenger extends CardImpl { + + public LunarAvenger(UUID ownerId) { + super(ownerId, 136, "Lunar Avenger", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}"); + this.expansionSetCode = "5DN"; + this.subtype.add("Golem"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Sunburst + this.addAbility(new SunburstAbility(this)); + // Remove a +1/+1 counter from Lunar Avenger: Lunar Avenger gains your choice of flying, first strike, or haste until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new LunarAvengerEffect(), + new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)))); + } + + public LunarAvenger(final LunarAvenger card) { + super(card); + } + + @Override + public LunarAvenger copy() { + return new LunarAvenger(this); + } +} + + +class LunarAvengerEffect extends OneShotEffect { + + private static final HashSet choices = new HashSet<>(); + + static { + choices.add("Flying"); + choices.add("First Strike"); + choices.add("Haste"); + } + + public LunarAvengerEffect() { + super(Outcome.AddAbility); + staticText = "{this} gains your choice of flying, first strike, or haste until end of turn"; + } + + public LunarAvengerEffect(final LunarAvengerEffect effect) { + super(effect); + } + + @Override + public LunarAvengerEffect copy() { + return new LunarAvengerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if(controller != null) { + Choice choice = new ChoiceImpl(true); + choice.setMessage("Choose ability to add"); + choice.setChoices(choices); + while(!controller.choose(outcome, choice, game)) { + if(controller.canRespond()) { + return false; + } + } + + Ability gainedAbility; + String chosen = choice.getChoice(); + if(chosen.equals("Flying")) { + gainedAbility = FlyingAbility.getInstance(); + } + else if(chosen.equals("First strike")) { + gainedAbility = FirstStrikeAbility.getInstance(); + } + else { + gainedAbility = HasteAbility.getInstance(); + } + + game.addEffect(new GainAbilitySourceEffect(gainedAbility, Duration.EndOfTurn), source); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/fifthdawn/SpinalParasite.java b/Mage.Sets/src/mage/sets/fifthdawn/SpinalParasite.java new file mode 100644 index 0000000000..c80e694636 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthdawn/SpinalParasite.java @@ -0,0 +1,74 @@ +/* + * 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.fifthdawn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.effects.common.counter.RemoveCounterTargetEffect; +import mage.abilities.keyword.SunburstAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.TargetPermanent; + +/** + * + * @author LoneFox + */ +public class SpinalParasite extends CardImpl { + + public SpinalParasite(UUID ownerId) { + super(ownerId, 155, "Spinal Parasite", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); + this.expansionSetCode = "5DN"; + this.subtype.add("Insect"); + this.power = new MageInt(-1); + this.toughness = new MageInt(-1); + + // Sunburst + this.addAbility(new SunburstAbility(this)); + // Remove two +1/+1 counters from Spinal Parasite: Remove a counter from target permanent. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RemoveCounterTargetEffect(), + new RemoveCountersSourceCost(CounterType.P1P1.createInstance(2))); + ability.addTarget(new TargetPermanent()); + this.addAbility(ability); + } + + public SpinalParasite(final SpinalParasite card) { + super(card); + } + + @Override + public SpinalParasite copy() { + return new SpinalParasite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthdawn/TangleAsp.java b/Mage.Sets/src/mage/sets/fifthdawn/TangleAsp.java index 88d2760e80..1a5e0bb53e 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/TangleAsp.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/TangleAsp.java @@ -54,8 +54,8 @@ public class TangleAsp extends CardImpl { this.toughness = new MageInt(2); // Whenever Tangle Asp blocks or becomes blocked by a creature, destroy that creature at end of combat. - AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); - Effect effect = new CreateDelayedTriggeredAbilityEffect(delayedAbility, true); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); effect.setText("destroy that creature at end of combat"); this.addAbility(new BlocksOrBecomesBlockedByCreatureTriggeredAbility(effect, false)); } diff --git a/Mage.Sets/src/mage/sets/fifthedition/ArmorOfFaith.java b/Mage.Sets/src/mage/sets/fifthedition/ArmorOfFaith.java new file mode 100644 index 0000000000..0cbd046b05 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/ArmorOfFaith.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class ArmorOfFaith extends mage.sets.masterseditionii.ArmorOfFaith { + + public ArmorOfFaith(UUID ownerId) { + super(ownerId); + this.cardNumber = 284; + this.expansionSetCode = "5ED"; + } + + public ArmorOfFaith(final ArmorOfFaith card) { + super(card); + } + + @Override + public ArmorOfFaith copy() { + return new ArmorOfFaith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/AysenBureaucrats.java b/Mage.Sets/src/mage/sets/fifthedition/AysenBureaucrats.java new file mode 100644 index 0000000000..eb92598194 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/AysenBureaucrats.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AysenBureaucrats extends mage.sets.masterseditionii.AysenBureaucrats { + + public AysenBureaucrats(UUID ownerId) { + super(ownerId); + this.cardNumber = 285; + this.expansionSetCode = "5ED"; + } + + public AysenBureaucrats(final AysenBureaucrats card) { + super(card); + } + + @Override + public AysenBureaucrats copy() { + return new AysenBureaucrats(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/BindingGrasp.java b/Mage.Sets/src/mage/sets/fifthedition/BindingGrasp.java new file mode 100644 index 0000000000..6ac1c2e8f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/BindingGrasp.java @@ -0,0 +1,54 @@ +/* + * 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.fifthedition; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class BindingGrasp extends mage.sets.masterseditionii.BindingGrasp { + + public BindingGrasp(UUID ownerId) { + super(ownerId); + this.cardNumber = 74; + this.expansionSetCode = "5ED"; + this.rarity = Rarity.UNCOMMON; + } + + public BindingGrasp(final BindingGrasp card) { + super(card); + } + + @Override + public BindingGrasp copy() { + return new BindingGrasp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/CavePeople.java b/Mage.Sets/src/mage/sets/fifthedition/CavePeople.java new file mode 100644 index 0000000000..f5ffa299dc --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/CavePeople.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CavePeople extends mage.sets.thedark.CavePeople { + + public CavePeople(UUID ownerId) { + super(ownerId); + this.cardNumber = 215; + this.expansionSetCode = "5ED"; + } + + public CavePeople(final CavePeople card) { + super(card); + } + + @Override + public CavePeople copy() { + return new CavePeople(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/CoralHelm.java b/Mage.Sets/src/mage/sets/fifthedition/CoralHelm.java new file mode 100644 index 0000000000..2986ae235f --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/CoralHelm.java @@ -0,0 +1,54 @@ +/* + * 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.fifthedition; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author nigelzor + */ +public class CoralHelm extends mage.sets.masterseditioniv.CoralHelm { + + public CoralHelm(UUID ownerId) { + super(ownerId); + this.cardNumber = 359; + this.expansionSetCode = "5ED"; + this.rarity = Rarity.RARE; + } + + public CoralHelm(final CoralHelm card) { + super(card); + } + + @Override + public CoralHelm copy() { + return new CoralHelm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/DiabolicMachine.java b/Mage.Sets/src/mage/sets/fifthedition/DiabolicMachine.java new file mode 100644 index 0000000000..9472d8e8a6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/DiabolicMachine.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class DiabolicMachine extends mage.sets.fourthedition.DiabolicMachine { + + public DiabolicMachine(UUID ownerId) { + super(ownerId); + this.cardNumber = 363; + this.expansionSetCode = "5ED"; + } + + public DiabolicMachine(final DiabolicMachine card) { + super(card); + } + + @Override + public DiabolicMachine copy() { + return new DiabolicMachine(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/Lifetap.java b/Mage.Sets/src/mage/sets/fifthedition/Lifetap.java new file mode 100644 index 0000000000..0b0f027a7b --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/Lifetap.java @@ -0,0 +1,70 @@ +/* + * 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.fifthedition; + +import java.util.UUID; +import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LoneFox + */ +public class Lifetap extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("a Forest an opponent controls"); + + static { + filter.add(new SubtypePredicate("Forest")); + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public Lifetap(UUID ownerId) { + super(ownerId, 99, "Lifetap", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{U}{U}"); + this.expansionSetCode = "5ED"; + + // Whenever a Forest an opponent controls becomes tapped, you gain 1 life. + this.addAbility(new BecomesTappedTriggeredAbility(new GainLifeEffect(1), false, filter)); + } + + public Lifetap(final Lifetap card) { + super(card); + } + + @Override + public Lifetap copy() { + return new Lifetap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/ReefPirates.java b/Mage.Sets/src/mage/sets/fifthedition/ReefPirates.java new file mode 100644 index 0000000000..9bc5b4ba2b --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/ReefPirates.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class ReefPirates extends mage.sets.homelands.ReefPirates1 { + + public ReefPirates(UUID ownerId) { + super(ownerId); + this.cardNumber = 116; + this.expansionSetCode = "5ED"; + } + + public ReefPirates(final ReefPirates card) { + super(card); + } + + @Override + public ReefPirates copy() { + return new ReefPirates(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/Stampede.java b/Mage.Sets/src/mage/sets/fifthedition/Stampede.java new file mode 100644 index 0000000000..79a7b0eabd --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/Stampede.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Stampede extends mage.sets.iceage.Stampede { + + public Stampede(UUID ownerId) { + super(ownerId); + this.cardNumber = 189; + this.expansionSetCode = "5ED"; + } + + public Stampede(final Stampede card) { + super(card); + } + + @Override + public Stampede copy() { + return new Stampede(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/StoneSpirit.java b/Mage.Sets/src/mage/sets/fifthedition/StoneSpirit.java new file mode 100644 index 0000000000..2c9e46dc8c --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/StoneSpirit.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.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class StoneSpirit extends mage.sets.iceage.StoneSpirit { + + public StoneSpirit(UUID ownerId) { + super(ownerId); + this.cardNumber = 271; + this.expansionSetCode = "5ED"; + } + + public StoneSpirit(final StoneSpirit card) { + super(card); + } + + @Override + public StoneSpirit copy() { + return new StoneSpirit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/CavePeople.java b/Mage.Sets/src/mage/sets/fourthedition/CavePeople.java new file mode 100644 index 0000000000..69bcfadd19 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/CavePeople.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.fourthedition; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CavePeople extends mage.sets.thedark.CavePeople { + + public CavePeople(UUID ownerId) { + super(ownerId); + this.cardNumber = 199; + this.expansionSetCode = "4ED"; + } + + public CavePeople(final CavePeople card) { + super(card); + } + + @Override + public CavePeople copy() { + return new CavePeople(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/CoralHelm.java b/Mage.Sets/src/mage/sets/fourthedition/CoralHelm.java new file mode 100644 index 0000000000..af73dce6c9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/CoralHelm.java @@ -0,0 +1,54 @@ +/* + * 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.fourthedition; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author nigelzor + */ +public class CoralHelm extends mage.sets.masterseditioniv.CoralHelm { + + public CoralHelm(UUID ownerId) { + super(ownerId); + this.cardNumber = 328; + this.expansionSetCode = "4ED"; + this.rarity = Rarity.RARE; + } + + public CoralHelm(final CoralHelm card) { + super(card); + } + + @Override + public CoralHelm copy() { + return new CoralHelm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/DiabolicMachine.java b/Mage.Sets/src/mage/sets/fourthedition/DiabolicMachine.java new file mode 100644 index 0000000000..c739fc2a75 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/DiabolicMachine.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.fourthedition; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class DiabolicMachine extends CardImpl { + + public DiabolicMachine(UUID ownerId) { + super(ownerId, 332, "Diabolic Machine", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{7}"); + this.expansionSetCode = "4ED"; + this.subtype.add("Construct"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // {3}: Regenerate Diabolic Machine. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new GenericManaCost(3))); + } + + public DiabolicMachine(final DiabolicMachine card) { + super(card); + } + + @Override + public DiabolicMachine copy() { + return new DiabolicMachine(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/Lifetap.java b/Mage.Sets/src/mage/sets/fourthedition/Lifetap.java new file mode 100644 index 0000000000..72046df5bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/Lifetap.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.fourthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Lifetap extends mage.sets.fifthedition.Lifetap { + + public Lifetap(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + this.expansionSetCode = "4ED"; + } + + public Lifetap(final Lifetap card) { + super(card); + } + + @Override + public Lifetap copy() { + return new Lifetap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/CoalitionRelic.java b/Mage.Sets/src/mage/sets/futuresight/CoalitionRelic.java index 3c2b480ecb..1c7ec71523 100644 --- a/Mage.Sets/src/mage/sets/futuresight/CoalitionRelic.java +++ b/Mage.Sets/src/mage/sets/futuresight/CoalitionRelic.java @@ -109,15 +109,15 @@ class CoalitionRelicEffect extends OneShotEffect { player.choose(outcome, choice, game); } if (choice.getColor().isBlack()) { - mana.increaseBlack(); + mana.addBlack(); } else if (choice.getColor().isBlue()) { - mana.increaseBlue(); + mana.addBlue(); } else if (choice.getColor().isRed()) { - mana.increaseRed(); + mana.addRed(); } else if (choice.getColor().isGreen()) { - mana.increaseGreen(); + mana.addGreen(); } else if (choice.getColor().isWhite()) { - mana.increaseWhite(); + mana.addWhite(); } choice.clearChoice(); } diff --git a/Mage.Sets/src/mage/sets/futuresight/GravePeril.java b/Mage.Sets/src/mage/sets/futuresight/GravePeril.java new file mode 100644 index 0000000000..9b36c3b60a --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/GravePeril.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.futuresight; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author emerald000 + */ +public class GravePeril extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a nonblack creature"); + static { + filter.add(Predicates.not(new ColorPredicate(ObjectColor.BLACK))); + } + + public GravePeril(UUID ownerId) { + super(ownerId, 67, "Grave Peril", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + this.expansionSetCode = "FUT"; + + // When a nonblack creature enters the battlefield, sacrifice Grave Peril. If you do, destroy that creature. + this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GravePerilEffect(), filter, false, SetTargetPointer.PERMANENT, null)); + } + + public GravePeril(final GravePeril card) { + super(card); + } + + @Override + public GravePeril copy() { + return new GravePeril(this); + } +} + +class GravePerilEffect extends OneShotEffect { + + GravePerilEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "sacrifice Grave Peril. If you do, destroy that creature"; + } + + GravePerilEffect(final GravePerilEffect effect) { + super(effect); + } + + @Override + public GravePerilEffect copy() { + return new GravePerilEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); + if (permanent != null) { + if (permanent.sacrifice(source.getSourceId(), game)) { + Effect effect = new DestroyTargetEffect(); + effect.setTargetPointer(this.getTargetPointer()); + return effect.apply(game, source); + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/MagusOfTheMoon.java b/Mage.Sets/src/mage/sets/futuresight/MagusOfTheMoon.java index 4d1d52f33e..131e99c240 100644 --- a/Mage.Sets/src/mage/sets/futuresight/MagusOfTheMoon.java +++ b/Mage.Sets/src/mage/sets/futuresight/MagusOfTheMoon.java @@ -34,6 +34,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.mana.RedManaAbility; import mage.cards.CardImpl; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.DependencyType; import mage.constants.Duration; @@ -108,14 +109,16 @@ public class MagusOfTheMoon extends CardImpl { public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { for (Permanent land : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { switch (layer) { - case AbilityAddingRemovingEffects_6: - land.removeAllAbilities(source.getSourceId(), game); - land.addAbility(new RedManaAbility(), source.getSourceId(), game); - break; case TypeChangingEffects_4: - land.getSubtype().clear(); + // 305.7 Note that this doesn't remove any abilities that were granted to the land by other effects + // So the ability removing has to be done before Layer 6 + land.removeAllAbilities(source.getSourceId(), game); + land.getSubtype().removeAll(CardRepository.instance.getLandTypes()); land.getSubtype().add("Mountain"); break; + case AbilityAddingRemovingEffects_6: + land.addAbility(new RedManaAbility(), source.getSourceId(), game); + break; } } return true; diff --git a/Mage.Sets/src/mage/sets/futuresight/RamosianRevivalist.java b/Mage.Sets/src/mage/sets/futuresight/RamosianRevivalist.java new file mode 100644 index 0000000000..d79662101d --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/RamosianRevivalist.java @@ -0,0 +1,84 @@ +/* + * 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.futuresight; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.Filter; +import mage.filter.common.FilterPermanentCard; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author fireshoes + */ +public class RamosianRevivalist extends CardImpl { + + private static final FilterPermanentCard filter = new FilterPermanentCard("Rebel permanent card with converted mana cost 5 or less from your graveyard"); + + static { + filter.add(new SubtypePredicate("Rebel")); + filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, 6)); + } + + public RamosianRevivalist(UUID ownerId) { + super(ownerId, 30, "Ramosian Revivalist", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "FUT"; + this.subtype.add("Human"); + this.subtype.add("Rebel"); + this.subtype.add("Cleric"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {6}, {tap}: Return target Rebel permanent card with converted mana cost 5 or less from your graveyard to the battlefield. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new GenericManaCost(6)); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.addAbility(ability); + } + + public RamosianRevivalist(final RamosianRevivalist card) { + super(card); + } + + @Override + public RamosianRevivalist copy() { + return new RamosianRevivalist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/TaroxBladewing.java b/Mage.Sets/src/mage/sets/futuresight/TaroxBladewing.java index 74812fc311..08bcdb02e9 100644 --- a/Mage.Sets/src/mage/sets/futuresight/TaroxBladewing.java +++ b/Mage.Sets/src/mage/sets/futuresight/TaroxBladewing.java @@ -29,20 +29,15 @@ package mage.sets.futuresight; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.abilityword.GrandeurAbility; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; +import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.SubLayer; -import mage.game.Game; -import mage.game.permanent.Permanent; /** * @@ -66,7 +61,8 @@ public class TaroxBladewing extends CardImpl { this.addAbility(HasteAbility.getInstance()); // Grandeur - Discard another card named Tarox Bladewing: Tarox Bladewing gets +X/+X until end of turn, where X is its power. - this.addAbility(new GrandeurAbility(new TaroxBladewingEffect(), "Tarox Bladewing")); + SourcePermanentPowerCount x = new SourcePermanentPowerCount(); + this.addAbility(new GrandeurAbility(new BoostSourceEffect(x, x, Duration.EndOfTurn, true), "Tarox Bladewing")); } public TaroxBladewing(final TaroxBladewing card) { @@ -78,32 +74,3 @@ public class TaroxBladewing extends CardImpl { return new TaroxBladewing(this); } } - -class TaroxBladewingEffect extends ContinuousEffectImpl { - - TaroxBladewingEffect() { - super(Duration.EndOfTurn, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); - staticText = "{this} gets +X/+X until end of turn, where X is its power"; - } - - TaroxBladewingEffect(final TaroxBladewingEffect effect) { - super(effect); - } - - @Override - public TaroxBladewingEffect copy() { - return new TaroxBladewingEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - int power = permanent.getPower().getValue(); - permanent.addPower(power); - permanent.addToughness(power); - return true; - } - return false; - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/gameday/ScaleguardSentinels.java b/Mage.Sets/src/mage/sets/gameday/ScaleguardSentinels.java index 27985e968f..7588795fd9 100644 --- a/Mage.Sets/src/mage/sets/gameday/ScaleguardSentinels.java +++ b/Mage.Sets/src/mage/sets/gameday/ScaleguardSentinels.java @@ -111,7 +111,7 @@ class ScaleguardSentinelsCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + Permanent sourcePermanent = game.getPermanentEntering(source.getSourceId()); if (sourcePermanent != null) { DragonOnTheBattlefieldWhileSpellWasCastWatcher watcher = (DragonOnTheBattlefieldWhileSpellWasCastWatcher) game.getState().getWatchers().get("DragonOnTheBattlefieldWhileSpellWasCastWatcher"); return (watcher != null && watcher.castWithConditionTrue(sourcePermanent.getSpellAbility().getId())); diff --git a/Mage.Sets/src/mage/sets/gatecrash/CartelAristocrat.java b/Mage.Sets/src/mage/sets/gatecrash/CartelAristocrat.java index 83086c0d76..4ff2be9d3f 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/CartelAristocrat.java +++ b/Mage.Sets/src/mage/sets/gatecrash/CartelAristocrat.java @@ -32,7 +32,6 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.Zone; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.common.continuous.GainProtectionFromColorSourceEffect; @@ -44,19 +43,18 @@ import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetControlledPermanent; /** - * Gatecrash FAQ (01.2013) - * You choose the color when the ability resolves. + * Gatecrash FAQ (01.2013) You choose the color when the ability resolves. * * @author LevelX2 */ public class CartelAristocrat extends CardImpl { - + private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("another creature"); static { filter.add(new AnotherPredicate()); } - + public CartelAristocrat(UUID ownerId) { super(ownerId, 150, "Cartel Aristocrat", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}{B}"); this.expansionSetCode = "GTC"; diff --git a/Mage.Sets/src/mage/sets/gatecrash/RapidHybridization.java b/Mage.Sets/src/mage/sets/gatecrash/RapidHybridization.java index e78fd5d41f..42d9aa8bbf 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/RapidHybridization.java +++ b/Mage.Sets/src/mage/sets/gatecrash/RapidHybridization.java @@ -29,7 +29,6 @@ package mage.sets.gatecrash; import java.util.UUID; import mage.MageInt; -import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect; @@ -52,7 +51,6 @@ public class RapidHybridization extends CardImpl { super(ownerId, 44, "Rapid Hybridization", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}"); this.expansionSetCode = "GTC"; - // Destroy target creature. It can't be regenerated. That creature's controller puts a 3/3 green Frog Lizard creature token onto the battlefield. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new DestroyTargetEffect(true)); @@ -87,7 +85,7 @@ class RapidHybridizationEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = (Permanent) game.getPermanentOrLKIBattlefield(targetPointer.getFirst(game, source)); + Permanent permanent = game.getPermanentOrLKIBattlefield(targetPointer.getFirst(game, source)); if (permanent != null) { RapidHybridizationToken token = new RapidHybridizationToken(); token.putOntoBattlefield(1, game, source.getSourceId(), permanent.getControllerId()); @@ -103,14 +101,14 @@ class RapidHybridizationToken extends Token { super("Frog Lizard", "3/3 green Frog Lizard creature token onto the battlefield"); this.setOriginalExpansionSetCode("GTC"); cardType.add(CardType.CREATURE); - + color.setGreen(true); - + subtype.add("Frog"); subtype.add("Lizard"); - + power = new MageInt(3); toughness = new MageInt(3); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/ThrullParasite.java b/Mage.Sets/src/mage/sets/gatecrash/ThrullParasite.java index e989bcca14..d53ebeca49 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/ThrullParasite.java +++ b/Mage.Sets/src/mage/sets/gatecrash/ThrullParasite.java @@ -27,29 +27,18 @@ */ package mage.sets.gatecrash; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.RemoveCounterTargetEffect; import mage.abilities.keyword.ExtortAbility; import mage.cards.CardImpl; -import mage.choices.Choice; -import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.Zone; -import mage.counters.Counter; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.common.TargetNonlandPermanent; /** @@ -69,7 +58,7 @@ public class ThrullParasite extends CardImpl { // Extort this.addAbility(new ExtortAbility()); // {tap}, Pay 2 life: Remove a counter from target nonland permanent. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RemoveCounterTargetEffect(),new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RemoveCounterTargetEffect(), new TapSourceCost()); ability.addTarget(new TargetNonlandPermanent()); ability.addCost(new PayLifeCost(2)); this.addAbility(ability); @@ -84,75 +73,3 @@ public class ThrullParasite extends CardImpl { return new ThrullParasite(this); } } - -class RemoveCounterTargetEffect extends OneShotEffect { - - private CounterType counterTypeToRemove; - - public RemoveCounterTargetEffect() { - super(Outcome.Detriment); - this.staticText = "Remove a counter from target nonland permanent"; - } - - public RemoveCounterTargetEffect(CounterType counterTypeToRemove) { - super(Outcome.Detriment); - this.staticText = "Remove a " + counterTypeToRemove.getName() + " counter from target nonland permanent"; - this.counterTypeToRemove = counterTypeToRemove; - } - - public RemoveCounterTargetEffect(final RemoveCounterTargetEffect effect) { - super(effect); - this.counterTypeToRemove = effect.counterTypeToRemove; - } - - @Override - public RemoveCounterTargetEffect copy() { - return new RemoveCounterTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - boolean result = false; - Player controller = game.getPlayer(source.getControllerId()); - for (UUID targetId: getTargetPointer().getTargets(game, source)) { - Permanent permanent = game.getPermanent(targetId); - if (permanent != null) { - if (permanent.getCounters().size() > 0 && (counterTypeToRemove == null || permanent.getCounters().containsKey(counterTypeToRemove))) { - String counterName = null; - if (counterTypeToRemove != null) { - counterName = counterTypeToRemove.getName(); - } else { - if (permanent.getCounters().size() > 1 && counterTypeToRemove == null) { - Choice choice = new ChoiceImpl(true); - Set choices = new HashSet(); - for (Counter counter : permanent.getCounters().values()) { - if (permanent.getCounters().getCount(counter.getName()) > 0) { - choices.add(counter.getName()); - } - } - choice.setChoices(choices); - choice.setMessage("Choose a counter type to remove from " + permanent.getName()); - controller.choose(Outcome.Detriment, choice, game); - counterName = choice.getChoice(); - } else { - for (Counter counter : permanent.getCounters().values()) { - if (counter.getCount() > 0) { - counterName = counter.getName(); - } - } - } - } - if (counterName != null) { - permanent.removeCounters(counterName, 1, game); - if (permanent.getCounters().getCount(counterName) == 0 ){ - permanent.getCounters().removeCounter(counterName); - } - result |= true; - game.informPlayers(new StringBuilder(controller.getLogName()).append(" removes a ").append(counterName).append(" counter from ").append(permanent.getName()).toString()); - } - } - } - } - return result; - } -} diff --git a/Mage.Sets/src/mage/sets/guildpact/Borborygmos.java b/Mage.Sets/src/mage/sets/guildpact/Borborygmos.java new file mode 100644 index 0000000000..ae1d94838c --- /dev/null +++ b/Mage.Sets/src/mage/sets/guildpact/Borborygmos.java @@ -0,0 +1,70 @@ +/* + * 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.guildpact; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageTriggeredAbility; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class Borborygmos extends CardImpl { + + public Borborygmos(UUID ownerId) { + super(ownerId, 103, "Borborygmos", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{R}{G}{G}"); + this.expansionSetCode = "GPT"; + this.supertype.add("Legendary"); + this.subtype.add("Cyclops"); + this.power = new MageInt(6); + this.toughness = new MageInt(7); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // Whenever Borborygmos deals combat damage to a player, put a +1/+1 counter on each creature you control. + this.addAbility(new DealsCombatDamageTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()), false)); + } + + public Borborygmos(final Borborygmos card) { + super(card); + } + + @Override + public Borborygmos copy() { + return new Borborygmos(this); + } +} diff --git a/Mage.Sets/src/mage/sets/guildpact/BurningTreeShaman.java b/Mage.Sets/src/mage/sets/guildpact/BurningTreeShaman.java index 0405ecd60a..b4c5d10a83 100644 --- a/Mage.Sets/src/mage/sets/guildpact/BurningTreeShaman.java +++ b/Mage.Sets/src/mage/sets/guildpact/BurningTreeShaman.java @@ -30,6 +30,7 @@ package mage.sets.guildpact; import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; @@ -41,7 +42,6 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.game.stack.StackAbility; -import mage.target.TargetPlayer; import mage.target.targetpointer.FixedTarget; /** @@ -76,8 +76,7 @@ public class BurningTreeShaman extends CardImpl { class BurningTreeShamanTriggeredAbility extends TriggeredAbilityImpl { BurningTreeShamanTriggeredAbility() { - super(Zone.BATTLEFIELD, new DamageTargetEffect(1, false, "that player")); - this.addTarget(new TargetPlayer()); + super(Zone.BATTLEFIELD, new DamageTargetEffect(new StaticValue(1), false, "that player", true)); } BurningTreeShamanTriggeredAbility(final BurningTreeShamanTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/sets/guildpact/Thunderheads.java b/Mage.Sets/src/mage/sets/guildpact/Thunderheads.java new file mode 100644 index 0000000000..4cca565432 --- /dev/null +++ b/Mage.Sets/src/mage/sets/guildpact/Thunderheads.java @@ -0,0 +1,120 @@ +/* + * 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.guildpact; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ReplicateAbility; +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.game.permanent.token.Token; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author nigelzor + */ +public class Thunderheads extends CardImpl { + + public Thunderheads(UUID ownerId) { + super(ownerId, 37, "Thunderheads", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{U}"); + this.expansionSetCode = "GPT"; + + // Replicate {2}{U} + this.addAbility(new ReplicateAbility(this, "{2}{U}")); + // Put a 3/3 blue Weird creature token with defender and flying onto the battlefield. Exile it at the beginning of the next end step. + this.getSpellAbility().addEffect(new ThunderheadsEffect()); + } + + public Thunderheads(final Thunderheads card) { + super(card); + } + + @Override + public Thunderheads copy() { + return new Thunderheads(this); + } +} + +class ThunderheadsEffect extends OneShotEffect { + + public ThunderheadsEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Put a 3/3 blue Weird creature token with defender and flying onto the battlefield. Exile it at the beginning of the next end step."; + } + + public ThunderheadsEffect(ThunderheadsEffect effect) { + super(effect); + } + + @Override + public ThunderheadsEffect copy() { + return new ThunderheadsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Token token = new WeirdToken(); + if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } + return true; + } + return false; + } +} + +class WeirdToken extends Token { + + WeirdToken() { + super("Weird", "3/3 blue Weird create token with defender and flying"); + cardType.add(CardType.CREATURE); + color.setBlue(true); + subtype.add("Weird"); + power = new MageInt(3); + toughness = new MageInt(3); + this.addAbility(DefenderAbility.getInstance()); + this.addAbility(FlyingAbility.getInstance()); + } +} diff --git a/Mage.Sets/src/mage/sets/heroesvsmonsters/OrcishLumberjack.java b/Mage.Sets/src/mage/sets/heroesvsmonsters/OrcishLumberjack.java index 3a06eafc05..93277aa22f 100644 --- a/Mage.Sets/src/mage/sets/heroesvsmonsters/OrcishLumberjack.java +++ b/Mage.Sets/src/mage/sets/heroesvsmonsters/OrcishLumberjack.java @@ -123,10 +123,10 @@ class OrcishLumberjackManaEffect extends ManaEffect { } switch (manaChoice.getChoice()) { case "Green": - mana.increaseGreen(); + mana.addGreen(); break; case "Red": - mana.increaseRed(); + mana.addRed(); break; } diff --git a/Mage.Sets/src/mage/sets/homelands/AlibansTower1.java b/Mage.Sets/src/mage/sets/homelands/AlibansTower1.java new file mode 100644 index 0000000000..50f072111e --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AlibansTower1.java @@ -0,0 +1,62 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterBlockingCreature; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class AlibansTower1 extends CardImpl { + + public AlibansTower1(UUID ownerId) { + super(ownerId, 76, "Aliban's Tower", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "HML"; + + // Target blocking creature gets +3/+1 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(3, 1, Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterBlockingCreature())); + } + + public AlibansTower1(final AlibansTower1 card) { + super(card); + } + + @Override + public AlibansTower1 copy() { + return new AlibansTower1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/AlibansTower2.java b/Mage.Sets/src/mage/sets/homelands/AlibansTower2.java new file mode 100644 index 0000000000..f9841cce18 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AlibansTower2.java @@ -0,0 +1,51 @@ +/* + * 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.homelands; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class AlibansTower2 extends AlibansTower1 { + + public AlibansTower2(UUID ownerId) { + super(ownerId); + this.cardNumber = 77; + } + + public AlibansTower2(final AlibansTower2 card) { + super(card); + } + + @Override + public AlibansTower2 copy() { + return new AlibansTower2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/AysenBureaucrats1.java b/Mage.Sets/src/mage/sets/homelands/AysenBureaucrats1.java new file mode 100644 index 0000000000..41ecb5594d --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AysenBureaucrats1.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.homelands; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AysenBureaucrats1 extends mage.sets.masterseditionii.AysenBureaucrats { + + public AysenBureaucrats1(UUID ownerId) { + super(ownerId); + this.cardNumber = 104; + this.expansionSetCode = "HML"; + } + + public AysenBureaucrats1(final AysenBureaucrats1 card) { + super(card); + } + + @Override + public AysenBureaucrats1 copy() { + return new AysenBureaucrats1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/AysenBureaucrats2.java b/Mage.Sets/src/mage/sets/homelands/AysenBureaucrats2.java new file mode 100644 index 0000000000..001037563d --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AysenBureaucrats2.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.homelands; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AysenBureaucrats2 extends mage.sets.masterseditionii.AysenBureaucrats { + + public AysenBureaucrats2(UUID ownerId) { + super(ownerId); + this.cardNumber = 105; + this.expansionSetCode = "HML"; + } + + public AysenBureaucrats2(final AysenBureaucrats2 card) { + super(card); + } + + @Override + public AysenBureaucrats2 copy() { + return new AysenBureaucrats2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/FolkOfAnHavva1.java b/Mage.Sets/src/mage/sets/homelands/FolkOfAnHavva1.java new file mode 100644 index 0000000000..22ad5c2d3e --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/FolkOfAnHavva1.java @@ -0,0 +1,64 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BlocksTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class FolkOfAnHavva1 extends CardImpl { + + public FolkOfAnHavva1(UUID ownerId) { + super(ownerId, 58, "Folk of An-Havva", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "HML"; + this.subtype.add("Human"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever Folk of An-Havva blocks, it gets +2/+0 until end of turn. + this.addAbility(new BlocksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn), false)); + } + + public FolkOfAnHavva1(final FolkOfAnHavva1 card) { + super(card); + } + + @Override + public FolkOfAnHavva1 copy() { + return new FolkOfAnHavva1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/FolkOfAnHavva2.java b/Mage.Sets/src/mage/sets/homelands/FolkOfAnHavva2.java new file mode 100644 index 0000000000..f28dbedca2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/FolkOfAnHavva2.java @@ -0,0 +1,51 @@ +/* + * 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.homelands; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class FolkOfAnHavva2 extends FolkOfAnHavva1 { + + public FolkOfAnHavva2(UUID ownerId) { + super(ownerId); + this.cardNumber = 59; + } + + public FolkOfAnHavva2(final FolkOfAnHavva2 card) { + super(card); + } + + @Override + public FolkOfAnHavva2 copy() { + return new FolkOfAnHavva2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/LeapingLizard.java b/Mage.Sets/src/mage/sets/homelands/LeapingLizard.java new file mode 100644 index 0000000000..a702e236f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/LeapingLizard.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.homelands; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class LeapingLizard extends CardImpl { + + public LeapingLizard(UUID ownerId) { + super(ownerId, 63, "Leaping Lizard", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); + this.expansionSetCode = "HML"; + this.subtype.add("Lizard"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // {1}{G}: Leaping Lizard gets -0/-1 and gains flying until end of turn. + Effect effect = new BoostSourceEffect(0, -1, Duration.EndOfTurn); + effect.setText("{this} gets -0/-1"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{1}{G}")); + effect = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains flying until end of turn"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public LeapingLizard(final LeapingLizard card) { + super(card); + } + + @Override + public LeapingLizard copy() { + return new LeapingLizard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/MysticDecree.java b/Mage.Sets/src/mage/sets/homelands/MysticDecree.java new file mode 100644 index 0000000000..a4fb82b1e2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/MysticDecree.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.homelands; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.LoseAbilityAllEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.IslandwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class MysticDecree extends CardImpl { + + public MysticDecree(UUID ownerId) { + super(ownerId, 43, "Mystic Decree", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}{U}"); + this.expansionSetCode = "HML"; + this.supertype.add("World"); + + // All creatures lose flying and islandwalk. + Effect effect = new LoseAbilityAllEffect(new FilterCreaturePermanent("All creatures"), FlyingAbility.getInstance(), Duration.WhileOnBattlefield); + effect.setText("All creatures lose flying"); + Effect effect2 = new LoseAbilityAllEffect(new FilterCreaturePermanent("all creatures"), new IslandwalkAbility(), Duration.WhileOnBattlefield); + effect2.setText("and islandwalk"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + ability.addEffect(effect2); + this.addAbility(ability); + } + + public MysticDecree(final MysticDecree card) { + super(card); + } + + @Override + public MysticDecree copy() { + return new MysticDecree(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/ReefPirates1.java b/Mage.Sets/src/mage/sets/homelands/ReefPirates1.java new file mode 100644 index 0000000000..2414edbb0a --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/ReefPirates1.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.homelands; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class ReefPirates1 extends CardImpl { + + public ReefPirates1(UUID ownerId) { + super(ownerId, 45, "Reef Pirates", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + this.expansionSetCode = "HML"; + this.subtype.add("Zombie"); + this.subtype.add("Pirate"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever Reef Pirates deals damage to an opponent, that player puts the top card of his or her library into his or her graveyard. + Effect effect = new PutLibraryIntoGraveTargetEffect(1); + effect.setText("that player puts the top card of his or her library into his or her graveyard"); + this.addAbility(new DealsDamageToAPlayerTriggeredAbility(effect, false, true)); + } + + public ReefPirates1(final ReefPirates1 card) { + super(card); + } + + @Override + public ReefPirates1 copy() { + return new ReefPirates1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/ReefPirates2.java b/Mage.Sets/src/mage/sets/homelands/ReefPirates2.java new file mode 100644 index 0000000000..d7e484c14c --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/ReefPirates2.java @@ -0,0 +1,51 @@ +/* + * 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.homelands; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class ReefPirates2 extends ReefPirates1 { + + public ReefPirates2(UUID ownerId) { + super(ownerId); + this.cardNumber = 46; + } + + public ReefPirates2(final ReefPirates2 card) { + super(card); + } + + @Override + public ReefPirates2 copy() { + return new ReefPirates2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/SerratedArrows.java b/Mage.Sets/src/mage/sets/homelands/SerratedArrows.java index be8f776102..07d6551edd 100644 --- a/Mage.Sets/src/mage/sets/homelands/SerratedArrows.java +++ b/Mage.Sets/src/mage/sets/homelands/SerratedArrows.java @@ -59,7 +59,7 @@ public class SerratedArrows extends CardImpl { this.expansionSetCode = "HML"; // Serrated Arrows enters the battlefield with three arrowhead counters on it. - Effect effect = new AddCountersSourceEffect(CounterType.ARROWHEAD.createInstance(4)); + Effect effect = new AddCountersSourceEffect(CounterType.ARROWHEAD.createInstance(3)); effect.setText("with three arrowhead counters on it"); this.addAbility(new EntersBattlefieldAbility(effect)); // At the beginning of your upkeep, if there are no arrowhead counters on Serrated Arrows, sacrifice it. @@ -67,7 +67,7 @@ public class SerratedArrows extends CardImpl { "if there are no arrowhead counters on {this}, sacrifice it"); this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false, false)); // {tap}, Remove an arrowhead counter from Serrated Arrows: Put a -1/-1 counter on target creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.M1M1.createInstance()), new TapSourceCost()); ability.addCost(new RemoveCountersSourceCost(CounterType.ARROWHEAD.createInstance())); diff --git a/Mage.Sets/src/mage/sets/iceage/ArmorOfFaith.java b/Mage.Sets/src/mage/sets/iceage/ArmorOfFaith.java new file mode 100644 index 0000000000..5c6edff843 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/ArmorOfFaith.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class ArmorOfFaith extends mage.sets.masterseditionii.ArmorOfFaith { + + public ArmorOfFaith(UUID ownerId) { + super(ownerId); + this.cardNumber = 228; + this.expansionSetCode = "ICE"; + } + + public ArmorOfFaith(final ArmorOfFaith card) { + super(card); + } + + @Override + public ArmorOfFaith copy() { + return new ArmorOfFaith(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/ArnjlotsAscent.java b/Mage.Sets/src/mage/sets/iceage/ArnjlotsAscent.java new file mode 100644 index 0000000000..91dbff9f70 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/ArnjlotsAscent.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class ArnjlotsAscent extends CardImpl { + + public ArnjlotsAscent(UUID ownerId) { + super(ownerId, 57, "Arnjlot's Ascent", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}{U}"); + this.expansionSetCode = "ICE"; + + // Cumulative upkeep {U} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{U}"))); + // {1}: Target creature gains flying until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(FlyingAbility.getInstance(), + Duration.EndOfTurn), new ManaCostsImpl("{1}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public ArnjlotsAscent(final ArnjlotsAscent card) { + super(card); + } + + @Override + public ArnjlotsAscent copy() { + return new ArnjlotsAscent(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/BindingGrasp.java b/Mage.Sets/src/mage/sets/iceage/BindingGrasp.java new file mode 100644 index 0000000000..0188474a59 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/BindingGrasp.java @@ -0,0 +1,54 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class BindingGrasp extends mage.sets.masterseditionii.BindingGrasp { + + public BindingGrasp(UUID ownerId) { + super(ownerId); + this.cardNumber = 60; + this.expansionSetCode = "ICE"; + this.rarity = Rarity.UNCOMMON; + } + + public BindingGrasp(final BindingGrasp card) { + super(card); + } + + @Override + public BindingGrasp copy() { + return new BindingGrasp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/DespoticScepter.java b/Mage.Sets/src/mage/sets/iceage/DespoticScepter.java new file mode 100644 index 0000000000..4c30c61373 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/DespoticScepter.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class DespoticScepter extends mage.sets.masterseditionii.DespoticScepter { + + public DespoticScepter(UUID ownerId) { + super(ownerId); + this.cardNumber = 291; + this.expansionSetCode = "ICE"; + } + + public DespoticScepter(final DespoticScepter card) { + super(card); + } + + @Override + public DespoticScepter copy() { + return new DespoticScepter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/ForbiddenLore.java b/Mage.Sets/src/mage/sets/iceage/ForbiddenLore.java new file mode 100644 index 0000000000..ee5187aeb2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/ForbiddenLore.java @@ -0,0 +1,82 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LoneFox + */ +public class ForbiddenLore extends CardImpl { + + public ForbiddenLore(UUID ownerId) { + super(ownerId, 124, "Forbidden Lore", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Aura"); + + // Enchant land + TargetPermanent auraTarget = new TargetLandPermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Enchanted land has "{tap}: Target creature gets +2/+1 until end of turn." + Ability gainAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 1, Duration.EndOfTurn), new TapSourceCost()); + gainAbility.addTarget(new TargetCreaturePermanent()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainAbility, AttachmentType.AURA, + Duration.WhileOnBattlefield, "Enchanted land has \"{T}: Target creature gets +2/+1 until end of turn.\""))); + } + + public ForbiddenLore(final ForbiddenLore card) { + super(card); + } + + @Override + public ForbiddenLore copy() { + return new ForbiddenLore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/FoulFamiliar.java b/Mage.Sets/src/mage/sets/iceage/FoulFamiliar.java new file mode 100644 index 0000000000..af7dd89d64 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/FoulFamiliar.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class FoulFamiliar extends mage.sets.masterseditionii.FoulFamiliar { + + public FoulFamiliar(UUID ownerId) { + super(ownerId); + this.cardNumber = 14; + this.expansionSetCode = "ICE"; + } + + public FoulFamiliar(final FoulFamiliar card) { + super(card); + } + + @Override + public FoulFamiliar copy() { + return new FoulFamiliar(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/Fumarole.java b/Mage.Sets/src/mage/sets/iceage/Fumarole.java new file mode 100644 index 0000000000..5e8f34c463 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/Fumarole.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Fumarole extends mage.sets.masterseditionii.Fumarole { + + public Fumarole(UUID ownerId) { + super(ownerId); + this.cardNumber = 369; + this.expansionSetCode = "ICE"; + } + + public Fumarole(final Fumarole card) { + super(card); + } + + @Override + public Fumarole copy() { + return new Fumarole(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/FyndhornBow.java b/Mage.Sets/src/mage/sets/iceage/FyndhornBow.java new file mode 100644 index 0000000000..6be48bc5a7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/FyndhornBow.java @@ -0,0 +1,70 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class FyndhornBow extends CardImpl { + + public FyndhornBow(UUID ownerId) { + super(ownerId, 293, "Fyndhorn Bow", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "ICE"; + + // {3}, {tap}: Target creature gains first strike until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), + Duration.EndOfTurn), new ManaCostsImpl("{3}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public FyndhornBow(final FyndhornBow card) { + super(card); + } + + @Override + public FyndhornBow copy() { + return new FyndhornBow(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/GoblinMutant.java b/Mage.Sets/src/mage/sets/iceage/GoblinMutant.java index 2ca5bdcf9c..b1b2b82243 100644 --- a/Mage.Sets/src/mage/sets/iceage/GoblinMutant.java +++ b/Mage.Sets/src/mage/sets/iceage/GoblinMutant.java @@ -64,7 +64,8 @@ public class GoblinMutant extends CardImpl { super(ownerId, 188, "Goblin Mutant", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); this.expansionSetCode = "ICE"; this.subtype.add("Goblin"); - + this.subtype.add("Mutant"); + this.power = new MageInt(5); this.toughness = new MageInt(3); diff --git a/Mage.Sets/src/mage/sets/iceage/HotSprings.java b/Mage.Sets/src/mage/sets/iceage/HotSprings.java new file mode 100644 index 0000000000..c03aca6079 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/HotSprings.java @@ -0,0 +1,85 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author LoneFox + */ +public class HotSprings extends CardImpl { + + public HotSprings(UUID ownerId) { + super(ownerId, 136, "Hot Springs", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Aura"); + + // Enchant land you control + TargetPermanent auraTarget = new TargetControlledPermanent(new FilterControlledLandPermanent("land you control")); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Enchanted land has "{tap}: Prevent the next 1 damage that would be dealt to target creature or player this turn." + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost()); + ability.addTarget(new TargetCreatureOrPlayer()); + Effect effect = new GainAbilityAttachedEffect(ability, AttachmentType.AURA); + effect.setText("Enchanted land has \"{T}: Prevent the next 1 damage that would be dealt to target creature or player this turn.\""); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + } + + public HotSprings(final HotSprings card) { + super(card); + } + + @Override + public HotSprings copy() { + return new HotSprings(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/HyalopterousLemure.java b/Mage.Sets/src/mage/sets/iceage/HyalopterousLemure.java new file mode 100644 index 0000000000..07ad8bc2f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/HyalopterousLemure.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class HyalopterousLemure extends CardImpl { + + public HyalopterousLemure(UUID ownerId) { + super(ownerId, 21, "Hyalopterous Lemure", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Spirit"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // {0}: Hyalopterous Lemure gets -1/-0 and gains flying until end of turn. + Effect effect = new BoostSourceEffect(-1, 0, Duration.EndOfTurn); + effect.setText("{this} gets -1/-0"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{0}")); + effect = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains flying until end of turn"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public HyalopterousLemure(final HyalopterousLemure card) { + super(card); + } + + @Override + public HyalopterousLemure copy() { + return new HyalopterousLemure(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/HymnOfRebirth.java b/Mage.Sets/src/mage/sets/iceage/HymnOfRebirth.java new file mode 100644 index 0000000000..c17069ce9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/HymnOfRebirth.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class HymnOfRebirth extends mage.sets.mastersedition.HymnOfRebirth { + + public HymnOfRebirth(UUID ownerId) { + super(ownerId); + this.cardNumber = 373; + this.expansionSetCode = "ICE"; + } + + public HymnOfRebirth(final HymnOfRebirth card) { + super(card); + } + + @Override + public HymnOfRebirth copy() { + return new HymnOfRebirth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/MesmericTrance.java b/Mage.Sets/src/mage/sets/iceage/MesmericTrance.java new file mode 100644 index 0000000000..4286d8d173 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/MesmericTrance.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class MesmericTrance extends mage.sets.masterseditionii.MesmericTrance { + + public MesmericTrance(UUID ownerId) { + super(ownerId); + this.cardNumber = 83; + this.expansionSetCode = "ICE"; + } + + public MesmericTrance(final MesmericTrance card) { + super(card); + } + + @Override + public MesmericTrance copy() { + return new MesmericTrance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/MysticMight.java b/Mage.Sets/src/mage/sets/iceage/MysticMight.java new file mode 100644 index 0000000000..47ec41770f --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/MysticMight.java @@ -0,0 +1,88 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreatureOrPlayer; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class MysticMight extends CardImpl { + + public MysticMight(UUID ownerId) { + super(ownerId, 86, "Mystic Might", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Aura"); + + // Enchant land you control + TargetPermanent auraTarget = new TargetControlledPermanent(new FilterControlledLandPermanent("land you control")); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Cumulative upkeep {1}{U} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{1}{U}"))); + // Enchanted land has "{tap}: Target creature gets +2/+2 until end of turn." + Ability gainAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 2, Duration.EndOfTurn), new TapSourceCost()); + gainAbility.addTarget(new TargetCreaturePermanent()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainAbility, AttachmentType.AURA, + Duration.WhileOnBattlefield, "Enchanted land has \"{T}: Target creature gets +2/+2 until end of turn.\""))); + } + + public MysticMight(final MysticMight card) { + super(card); + } + + @Override + public MysticMight copy() { + return new MysticMight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/Rally.java b/Mage.Sets/src/mage/sets/iceage/Rally.java new file mode 100644 index 0000000000..16bd28f1c6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/Rally.java @@ -0,0 +1,61 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterBlockingCreature; + +/** + * + * @author LoneFox + */ +public class Rally extends CardImpl { + + public Rally(UUID ownerId) { + super(ownerId, 272, "Rally", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}{W}"); + this.expansionSetCode = "ICE"; + + // Blocking creatures get +1/+1 until end of turn. + this.getSpellAbility().addEffect(new BoostAllEffect(1, 1, Duration.EndOfTurn, + new FilterBlockingCreature("blocking creatures"), false)); + } + + public Rally(final Rally card) { + super(card); + } + + @Override + public Rally copy() { + return new Rally(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/SoulKiss.java b/Mage.Sets/src/mage/sets/iceage/SoulKiss.java new file mode 100644 index 0000000000..3dfbde1acd --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/SoulKiss.java @@ -0,0 +1,54 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class SoulKiss extends mage.sets.masterseditionii.SoulKiss { + + public SoulKiss(UUID ownerId) { + super(ownerId); + this.cardNumber = 50; + this.expansionSetCode = "ICE"; + this.rarity = Rarity.COMMON; + } + + public SoulKiss(final SoulKiss card) { + super(card); + } + + @Override + public SoulKiss copy() { + return new SoulKiss(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/Stampede.java b/Mage.Sets/src/mage/sets/iceage/Stampede.java new file mode 100644 index 0000000000..0a701005d9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/Stampede.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.iceage; + +import java.util.UUID; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterAttackingCreature; + +/** + * + * @author LoneFox + */ +public class Stampede extends CardImpl { + + public Stampede(UUID ownerId) { + super(ownerId, 153, "Stampede", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{1}{G}{G}"); + this.expansionSetCode = "ICE"; + + // Attacking creatures get +1/+0 and gain trample until end of turn. + Effect effect = new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature(), false); + effect.setText("attacking creatures get +1/+0"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, new FilterAttackingCreature()); + effect.setText("and gain trample until end of turn"); + this.getSpellAbility().addEffect(effect); + } + + public Stampede(final Stampede card) { + super(card); + } + + @Override + public Stampede copy() { + return new Stampede(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/StoneSpirit.java b/Mage.Sets/src/mage/sets/iceage/StoneSpirit.java new file mode 100644 index 0000000000..9f7af081f9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/StoneSpirit.java @@ -0,0 +1,74 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleEvasionAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; + +/** + * + * @author LoneFox + */ +public class StoneSpirit extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with flying"); + + static { + filter.add(new AbilityPredicate(FlyingAbility.class)); + } + + public StoneSpirit(UUID ownerId) { + super(ownerId, 218, "Stone Spirit", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{R}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Elemental"); + this.subtype.add("Spirit"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Stone Spirit can't be blocked by creatures with flying. + this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); + } + + public StoneSpirit(final StoneSpirit card) { + super(card); + } + + @Override + public StoneSpirit copy() { + return new StoneSpirit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/StormSpirit.java b/Mage.Sets/src/mage/sets/iceage/StormSpirit.java new file mode 100644 index 0000000000..c59492cc62 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/StormSpirit.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class StormSpirit extends mage.sets.masterseditionii.StormSpirit { + + public StormSpirit(UUID ownerId) { + super(ownerId); + this.cardNumber = 381; + this.expansionSetCode = "ICE"; + } + + public StormSpirit(final StormSpirit card) { + super(card); + } + + @Override + public StormSpirit copy() { + return new StormSpirit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/WarChariot.java b/Mage.Sets/src/mage/sets/iceage/WarChariot.java new file mode 100644 index 0000000000..af4c672353 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/WarChariot.java @@ -0,0 +1,70 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class WarChariot extends CardImpl { + + public WarChariot(UUID ownerId) { + super(ownerId, 323, "War Chariot", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "ICE"; + + // {3}, {tap}: Target creature gains trample until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(TrampleAbility.getInstance(), + Duration.EndOfTurn), new ManaCostsImpl("{3}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public WarChariot(final WarChariot card) { + super(card); + } + + @Override + public WarChariot copy() { + return new WarChariot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/Warning.java b/Mage.Sets/src/mage/sets/iceage/Warning.java new file mode 100644 index 0000000000..2894a43c78 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/Warning.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Warning extends mage.sets.masterseditionii.Warning { + + public Warning(UUID ownerId) { + super(ownerId); + this.cardNumber = 279; + this.expansionSetCode = "ICE"; + } + + public Warning(final Warning card) { + super(card); + } + + @Override + public Warning copy() { + return new Warning(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/WingsOfAesthir.java b/Mage.Sets/src/mage/sets/iceage/WingsOfAesthir.java new file mode 100644 index 0000000000..2f1e01acf7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/WingsOfAesthir.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.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class WingsOfAesthir extends mage.sets.masterseditionii.WingsOfAesthir { + + public WingsOfAesthir(UUID ownerId) { + super(ownerId); + this.cardNumber = 383; + this.expansionSetCode = "ICE"; + } + + public WingsOfAesthir(final WingsOfAesthir card) { + super(card); + } + + @Override + public WingsOfAesthir copy() { + return new WingsOfAesthir(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/YavimayaGnats.java b/Mage.Sets/src/mage/sets/iceage/YavimayaGnats.java new file mode 100644 index 0000000000..a2e726d4e6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/YavimayaGnats.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.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class YavimayaGnats extends CardImpl { + + public YavimayaGnats(UUID ownerId) { + super(ownerId, 168, "Yavimaya Gnats", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Insect"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // {G}: Regenerate Yavimaya Gnats. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{G}"))); + } + + public YavimayaGnats(final YavimayaGnats card) { + super(card); + } + + @Override + public YavimayaGnats copy() { + return new YavimayaGnats(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/ZuranEnchanter.java b/Mage.Sets/src/mage/sets/iceage/ZuranEnchanter.java new file mode 100644 index 0000000000..428f191c7d --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/ZuranEnchanter.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPlayer; + +/** + * + * @author nigelzor + */ +public class ZuranEnchanter extends CardImpl { + + public ZuranEnchanter(UUID ownerId) { + super(ownerId, 110, "Zuran Enchanter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {2}{B}, {tap}: Target player discards a card. Activate this ability only during your turn. + Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), new ManaCostsImpl("{2}{B}"), MyTurnCondition.getInstance()); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + } + + public ZuranEnchanter(final ZuranEnchanter card) { + super(card); + } + + @Override + public ZuranEnchanter copy() { + return new ZuranEnchanter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/innistrad/GeistOfSaintTraft.java b/Mage.Sets/src/mage/sets/innistrad/GeistOfSaintTraft.java index 121a77b270..ca4bb6e65c 100644 --- a/Mage.Sets/src/mage/sets/innistrad/GeistOfSaintTraft.java +++ b/Mage.Sets/src/mage/sets/innistrad/GeistOfSaintTraft.java @@ -35,14 +35,13 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.HexproofAbility; import mage.cards.CardImpl; import mage.constants.Outcome; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.AngelToken; import mage.players.Player; import mage.target.targetpointer.FixedTarget; @@ -79,6 +78,7 @@ public class GeistOfSaintTraft extends CardImpl { } class GeistOfSaintTraftEffect extends OneShotEffect { + GeistOfSaintTraftEffect() { super(Outcome.PutCreatureInPlay); staticText = "put a 4/4 white Angel creature token with flying onto the battlefield tapped and attacking. Exile that token at end of combat"; @@ -93,10 +93,14 @@ class GeistOfSaintTraftEffect extends OneShotEffect { AngelToken token = new AngelToken(); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), true, true)) { - Effect effect = new ExileTargetEffect(); - effect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - CreateDelayedTriggeredAbilityEffect createEffect = new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(effect), false); - createEffect.apply(game, source); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect), source); + } + } return true; } return false; diff --git a/Mage.Sets/src/mage/sets/innistrad/SpiderSpawning.java b/Mage.Sets/src/mage/sets/innistrad/SpiderSpawning.java index af915331c4..3b5ed551c2 100644 --- a/Mage.Sets/src/mage/sets/innistrad/SpiderSpawning.java +++ b/Mage.Sets/src/mage/sets/innistrad/SpiderSpawning.java @@ -1,82 +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.innistrad; - -import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.TimingRule; -import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.keyword.FlashbackAbility; -import mage.abilities.keyword.ReachAbility; -import mage.cards.CardImpl; -import mage.filter.common.FilterCreatureCard; -import mage.game.permanent.token.Token; - -/** - * - * @author North - */ -public class SpiderSpawning extends CardImpl { - - public SpiderSpawning(UUID ownerId) { - super(ownerId, 203, "Spider Spawning", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{4}{G}"); - this.expansionSetCode = "ISD"; - - - // Put a 1/2 green Spider creature token with reach onto the battlefield for each creature card in your graveyard. - this.getSpellAbility().addEffect(new CreateTokenEffect(new SpiderToken(), new CardsInControllerGraveyardCount(new FilterCreatureCard()))); - // Flashback {6}{B} - this.addAbility(new FlashbackAbility(new ManaCostsImpl("{6}{B}"), TimingRule.SORCERY)); - } - - public SpiderSpawning(final SpiderSpawning card) { - super(card); - } - - @Override - public SpiderSpawning copy() { - return new SpiderSpawning(this); - } -} - -class SpiderToken extends Token { - - public SpiderToken() { - super("Spider", "1/2 green Spider creature token with reach"); - cardType.add(CardType.CREATURE); - color.setGreen(true); - subtype.add("Spider"); - power = new MageInt(1); - toughness = new MageInt(2); - addAbility(ReachAbility.getInstance()); - } -} +/* + * 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.innistrad; + +import java.util.UUID; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.FlashbackAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TimingRule; +import mage.filter.common.FilterCreatureCard; +import mage.game.permanent.token.SpiderToken; + +/** + * + * @author North + */ +public class SpiderSpawning extends CardImpl { + + public SpiderSpawning(UUID ownerId) { + super(ownerId, 203, "Spider Spawning", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{4}{G}"); + this.expansionSetCode = "ISD"; + + + // Put a 1/2 green Spider creature token with reach onto the battlefield for each creature card in your graveyard. + this.getSpellAbility().addEffect(new CreateTokenEffect(new SpiderToken(), new CardsInControllerGraveyardCount(new FilterCreatureCard()))); + // Flashback {6}{B} + this.addAbility(new FlashbackAbility(new ManaCostsImpl("{6}{B}"), TimingRule.SORCERY)); + } + + public SpiderSpawning(final SpiderSpawning card) { + super(card); + } + + @Override + public SpiderSpawning copy() { + return new SpiderSpawning(this); + } +} + diff --git a/Mage.Sets/src/mage/sets/izzetvsgolgari/Thunderheads.java b/Mage.Sets/src/mage/sets/izzetvsgolgari/Thunderheads.java new file mode 100644 index 0000000000..8e10cd639f --- /dev/null +++ b/Mage.Sets/src/mage/sets/izzetvsgolgari/Thunderheads.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.izzetvsgolgari; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class Thunderheads extends mage.sets.guildpact.Thunderheads { + + public Thunderheads(UUID ownerId) { + super(ownerId); + this.cardNumber = 23; + this.expansionSetCode = "DDJ"; + } + + public Thunderheads(final Thunderheads card) { + super(card); + } + + @Override + public Thunderheads copy() { + return new Thunderheads(this); + } +} diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java b/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java index 3f758c3321..db20609309 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java @@ -192,7 +192,7 @@ class BrainMaggotReturnExiledCardEffect extends OneShotEffect { ExileZone exile = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter)); Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (exile != null && sourcePermanent != null) { - controller.moveCards(exile, null, Zone.HAND, source, game); + controller.moveCards(exile, Zone.HAND, source, game); return true; } } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/MarketFestival.java b/Mage.Sets/src/mage/sets/journeyintonyx/MarketFestival.java index daa67c1397..affa7e15e9 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/MarketFestival.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/MarketFestival.java @@ -154,15 +154,15 @@ class MarketFestivalManaEffect extends ManaEffect { } if (choiceColor.getColor().isBlack()) { - mana.increaseBlack(); + mana.addBlack(); } else if (choiceColor.getColor().isBlue()) { - mana.increaseBlue(); + mana.addBlue(); } else if (choiceColor.getColor().isRed()) { - mana.increaseRed(); + mana.addRed(); } else if (choiceColor.getColor().isGreen()) { - mana.increaseGreen(); + mana.addGreen(); } else if (choiceColor.getColor().isWhite()) { - mana.increaseWhite(); + mana.addWhite(); } } checkToFirePossibleEvents(mana, game, source); diff --git a/Mage.Sets/src/mage/sets/judgment/Spelljack.java b/Mage.Sets/src/mage/sets/judgment/Spelljack.java index 13152d6939..f6961e9683 100644 --- a/Mage.Sets/src/mage/sets/judgment/Spelljack.java +++ b/Mage.Sets/src/mage/sets/judgment/Spelljack.java @@ -141,7 +141,7 @@ class SpelljackCastFromExileEffect extends AsThoughEffectImpl { if (card != null) { if (game.getState().getZone(sourceId) == Zone.EXILED) { Player player = game.getPlayer(affectedControllerId); - player.setCastSourceIdWithAlternateMana(sourceId, null); + player.setCastSourceIdWithAlternateMana(sourceId, null, null); return true; } else { this.discard(); diff --git a/Mage.Sets/src/mage/sets/judgment/TestOfEndurance.java b/Mage.Sets/src/mage/sets/judgment/TestOfEndurance.java new file mode 100644 index 0000000000..ca29245261 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgment/TestOfEndurance.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.judgment; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.WinGameSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.game.Game; + +/** + * + * @author fireshoes + */ +public class TestOfEndurance extends CardImpl { + + public TestOfEndurance(UUID ownerId) { + super(ownerId, 29, "Test of Endurance", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}"); + this.expansionSetCode = "JUD"; + + // At the beginning of your upkeep, if you have 50 or more life, you win the game. + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new WinGameSourceControllerEffect(), TargetController.YOU, false); + this.addAbility(new ConditionalTriggeredAbility(ability, new FiftyOrMoreLifeCondition(), "At the beginning of your upkeep, if you have 50 or more life, you win the game.")); + } + + public TestOfEndurance(final TestOfEndurance card) { + super(card); + } + + @Override + public TestOfEndurance copy() { + return new TestOfEndurance(this); + } +} + + +class FiftyOrMoreLifeCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + return game.getPlayer(source.getControllerId()).getLife() >= 50; + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java b/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java index df16a3a0fb..2ce29a65aa 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/KheruSpellsnatcher.java @@ -158,7 +158,7 @@ class KheruSpellsnatcherCastFromExileEffect extends AsThoughEffectImpl { if (card != null) { if (game.getState().getZone(sourceId) == Zone.EXILED) { Player player = game.getPlayer(affectedControllerId); - player.setCastSourceIdWithAlternateMana(sourceId, null); + player.setCastSourceIdWithAlternateMana(sourceId, null, null); return true; } else { this.discard(); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java b/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java index a5093dcec4..f97744e57b 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java @@ -151,7 +151,7 @@ class NarsetEnlightenedMasterCastFromExileEffect extends AsThoughEffectImpl { if (card != null) { Player player = game.getPlayer(affectedControllerId); if (player != null) { - player.setCastSourceIdWithAlternateMana(objectId, null); + player.setCastSourceIdWithAlternateMana(objectId, null, null); return true; } } diff --git a/Mage.Sets/src/mage/sets/legends/Abomination.java b/Mage.Sets/src/mage/sets/legends/Abomination.java index 5bf815d95f..179e0541ff 100644 --- a/Mage.Sets/src/mage/sets/legends/Abomination.java +++ b/Mage.Sets/src/mage/sets/legends/Abomination.java @@ -29,22 +29,18 @@ package mage.sets.legends; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.ObjectColor; +import mage.abilities.common.BlocksOrBecomesBlockedByCreatureTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; /** * @@ -52,6 +48,12 @@ import mage.target.targetpointer.FixedTarget; */ public class Abomination extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("green or white creature"); + + static { + filter.add(Predicates.or(new ColorPredicate(ObjectColor.GREEN), new ColorPredicate(ObjectColor.WHITE))); + } + public Abomination(UUID ownerId) { super(ownerId, 1, "Abomination", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.expansionSetCode = "LEG"; @@ -61,7 +63,10 @@ public class Abomination extends CardImpl { this.toughness = new MageInt(6); // Whenever Abomination blocks or becomes blocked by a green or white creature, destroy that creature at end of combat. - this.addAbility(new AbominationTriggeredAbility()); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new BlocksOrBecomesBlockedByCreatureTriggeredAbility(effect, filter, false)); } public Abomination(final Abomination card) { @@ -73,99 +78,3 @@ public class Abomination extends CardImpl { return new Abomination(this); } } - -class AbominationTriggeredAbility extends TriggeredAbilityImpl { - - AbominationTriggeredAbility() { - super(Zone.BATTLEFIELD, new AbominationEffect()); - } - - AbominationTriggeredAbility(final AbominationTriggeredAbility ability) { - super(ability); - } - - @Override - public AbominationTriggeredAbility copy() { - return new AbominationTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.BLOCKER_DECLARED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent blocker = game.getPermanent(event.getSourceId()); - Permanent blocked = game.getPermanent(event.getTargetId()); - Permanent abomination = game.getPermanent(sourceId); - if (blocker != null && blocker != abomination - && blocker.getColor(game).isWhite() - && blocked == abomination) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getSourceId())); - return true; - } - } - if (blocker != null && blocker == abomination - && game.getPermanent(event.getTargetId()).getColor(game).isWhite()) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - return true; - } - } - if (blocker != null && blocker != abomination - && blocker.getColor(game).isGreen() - && blocked == abomination) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getSourceId())); - return true; - } - } - if (blocker != null && blocker == abomination - && game.getPermanent(event.getTargetId()).getColor(game).isGreen()) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever {this} blocks or becomes blocked by a green or white creature, destroy that creature at end of combat."; - } -} - -class AbominationEffect extends OneShotEffect { - - AbominationEffect() { - super(Outcome.Detriment); - staticText = "Destroy that creature at the end of combat"; - } - - AbominationEffect(final AbominationEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability event) { - Permanent permanent = game.getPermanent(targetPointer.getFirst(game, event)); - if (permanent != null) { - AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); - delayedAbility.setSourceId(permanent.getId()); - delayedAbility.setControllerId(event.getControllerId()); - delayedAbility.setSourceObject(event.getSourceObject(game), game); - delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(permanent.getId())); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } - return false; - } - - @Override - public AbominationEffect copy() { - return new AbominationEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/legends/ActiveVolcano.java b/Mage.Sets/src/mage/sets/legends/ActiveVolcano.java index 553776ba1d..8acab9a633 100644 --- a/Mage.Sets/src/mage/sets/legends/ActiveVolcano.java +++ b/Mage.Sets/src/mage/sets/legends/ActiveVolcano.java @@ -36,7 +36,6 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; import mage.filter.FilterPermanent; -import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.target.TargetPermanent; @@ -46,9 +45,9 @@ import mage.target.TargetPermanent; * @author emerald000 */ public class ActiveVolcano extends CardImpl { - + private static final FilterPermanent filterBlue = new FilterPermanent("blue permanent"); - private static final FilterLandPermanent filterIsland = new FilterLandPermanent("Island"); + private static final FilterPermanent filterIsland = new FilterPermanent("Island"); static { filterBlue.add(new ColorPredicate(ObjectColor.BLUE)); filterIsland.add(new SubtypePredicate("Island")); @@ -62,7 +61,7 @@ public class ActiveVolcano extends CardImpl { // Choose one - Destroy target blue permanent; this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetPermanent(filterBlue)); - + // or return target Island to its owner's hand. Mode mode = new Mode(); mode.getEffects().add(new ReturnToHandTargetEffect()); diff --git a/Mage.Sets/src/mage/sets/legends/Cleanse.java b/Mage.Sets/src/mage/sets/legends/Cleanse.java new file mode 100644 index 0000000000..bd851bdec0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/Cleanse.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.legends; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.effects.common.DestroyAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + */ +public class Cleanse extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("black creatures"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public Cleanse(UUID ownerId) { + super(ownerId, 174, "Cleanse", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{W}{W}"); + this.expansionSetCode = "LEG"; + + // Destroy all black creatures. + this.getSpellAbility().addEffect(new DestroyAllEffect(filter)); + } + + public Cleanse(final Cleanse card) { + super(card); + } + + @Override + public Cleanse copy() { + return new Cleanse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/FieldOfDreams.java b/Mage.Sets/src/mage/sets/legends/FieldOfDreams.java new file mode 100644 index 0000000000..5b44a48f7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/FieldOfDreams.java @@ -0,0 +1,61 @@ +/* + * 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.legends; + +import java.util.UUID; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.PlayWithTheTopCardRevealedEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class FieldOfDreams extends CardImpl { + + public FieldOfDreams(UUID ownerId) { + super(ownerId, 55, "Field of Dreams", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + this.expansionSetCode = "LEG"; + this.supertype.add("World"); + + // Players play with the top card of their libraries revealed. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PlayWithTheTopCardRevealedEffect(true))); + } + + public FieldOfDreams(final FieldOfDreams card) { + super(card); + } + + @Override + public FieldOfDreams copy() { + return new FieldOfDreams(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/FlashFlood.java b/Mage.Sets/src/mage/sets/legends/FlashFlood.java new file mode 100644 index 0000000000..b9ea644915 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/FlashFlood.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.legends; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.Mode; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.TargetPermanent; + +/** + * + * @author LoneFox + */ +public class FlashFlood extends CardImpl { + + private static final FilterPermanent filter1 = new FilterPermanent("red permanent"); + private static final FilterPermanent filter2 = new FilterPermanent("Mountain"); + + static { + filter1.add(new ColorPredicate(ObjectColor.RED)); + filter2.add(new SubtypePredicate("Mountain")); + } + + public FlashFlood(UUID ownerId) { + super(ownerId, 57, "Flash Flood", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{U}"); + this.expansionSetCode = "LEG"; + + // Choose one - Destroy target red permanent; + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter1)); + // or return target Mountain to its owner's hand. + Mode mode = new Mode(); + mode.getEffects().add(new ReturnToHandTargetEffect()); + mode.getTargets().add(new TargetPermanent(filter2)); + this.getSpellAbility().addMode(mode); + } + + public FlashFlood(final FlashFlood card) { + super(card); + } + + @Override + public FlashFlood copy() { + return new FlashFlood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/GravitySphere.java b/Mage.Sets/src/mage/sets/legends/GravitySphere.java new file mode 100644 index 0000000000..64d010fca1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/GravitySphere.java @@ -0,0 +1,64 @@ +/* + * 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.legends; + +import java.util.UUID; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.LoseAbilityAllEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class GravitySphere extends CardImpl { + + public GravitySphere(UUID ownerId) { + super(ownerId, 149, "Gravity Sphere", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); + this.expansionSetCode = "LEG"; + this.supertype.add("World"); + + // All creatures lose flying. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new LoseAbilityAllEffect(new FilterCreaturePermanent("All creatures"), FlyingAbility.getInstance(), Duration.WhileOnBattlefield))); + } + + public GravitySphere(final GravitySphere card) { + super(card); + } + + @Override + public GravitySphere copy() { + return new GravitySphere(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/Lifeblood.java b/Mage.Sets/src/mage/sets/legends/Lifeblood.java new file mode 100644 index 0000000000..9bca8d2d6f --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/Lifeblood.java @@ -0,0 +1,70 @@ +/* + * 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.legends; + +import java.util.UUID; +import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author LoneFox + */ +public class Lifeblood extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("a Mountain an opponent controls"); + + static { + filter.add(new SubtypePredicate("Mountain")); + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + + public Lifeblood(UUID ownerId) { + super(ownerId, 196, "Lifeblood", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}"); + this.expansionSetCode = "LEG"; + + // Whenever a Mountain an opponent controls becomes tapped, you gain 1 life. + this.addAbility(new BecomesTappedTriggeredAbility(new GainLifeEffect(1), false, filter)); + } + + public Lifeblood(final Lifeblood card) { + super(card); + } + + @Override + public Lifeblood copy() { + return new Lifeblood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/PavelMaliki.java b/Mage.Sets/src/mage/sets/legends/PavelMaliki.java new file mode 100644 index 0000000000..7b918d9fec --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/PavelMaliki.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.legends; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class PavelMaliki extends CardImpl { + + public PavelMaliki(UUID ownerId) { + super(ownerId, 288, "Pavel Maliki", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}{R}"); + this.expansionSetCode = "LEG"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.power = new MageInt(5); + this.toughness = new MageInt(3); + + // {B}{R}: Pavel Maliki gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{B}{R}"))); + } + + public PavelMaliki(final PavelMaliki card) { + super(card); + } + + @Override + public PavelMaliki copy() { + return new PavelMaliki(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/RamsesOverdark.java b/Mage.Sets/src/mage/sets/legends/RamsesOverdark.java new file mode 100644 index 0000000000..c1fab09480 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/RamsesOverdark.java @@ -0,0 +1,54 @@ +/* + * 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.legends; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RamsesOverdark extends mage.sets.masterseditioniii.RamsesOverdark { + + public RamsesOverdark(UUID ownerId) { + super(ownerId); + this.cardNumber = 292; + this.expansionSetCode = "LEG"; + this.rarity = Rarity.RARE; + } + + public RamsesOverdark(final RamsesOverdark card) { + super(card); + } + + @Override + public RamsesOverdark copy() { + return new RamsesOverdark(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/SpinalVillain.java b/Mage.Sets/src/mage/sets/legends/SpinalVillain.java new file mode 100644 index 0000000000..f5ed15de09 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/SpinalVillain.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.legends; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class SpinalVillain extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("blue creature"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLUE)); + } + + public SpinalVillain(UUID ownerId) { + super(ownerId, 161, "Spinal Villain", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "LEG"; + this.subtype.add("Beast"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {tap}: Destroy target blue creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public SpinalVillain(final SpinalVillain card) { + super(card); + } + + @Override + public SpinalVillain copy() { + return new SpinalVillain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legions/GoblinClearcutter.java b/Mage.Sets/src/mage/sets/legions/GoblinClearcutter.java index bce8de7308..20a5279fbb 100644 --- a/Mage.Sets/src/mage/sets/legions/GoblinClearcutter.java +++ b/Mage.Sets/src/mage/sets/legions/GoblinClearcutter.java @@ -32,11 +32,15 @@ import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.Mana; +import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; import mage.choices.Choice; import mage.choices.ChoiceImpl; @@ -44,11 +48,14 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreatureOrPlayer; /** * @author BursegSardaukar @@ -125,10 +132,10 @@ class GoblinClearCutterEffect extends OneShotEffect { } switch (manaChoice.getChoice()) { case "Green": - mana.increaseGreen(); + mana.addGreen(); break; case "Red": - mana.increaseRed(); + mana.addRed(); break; } player.getManaPool().addMana(mana, game, source); diff --git a/Mage.Sets/src/mage/sets/legions/HavocDemon.java b/Mage.Sets/src/mage/sets/legions/HavocDemon.java new file mode 100644 index 0000000000..71f5ecd394 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legions/HavocDemon.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.legions; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class HavocDemon extends CardImpl { + + public HavocDemon(UUID ownerId) { + super(ownerId, 74, "Havoc Demon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{B}{B}"); + this.expansionSetCode = "LGN"; + this.subtype.add("Demon"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // When Havoc Demon dies, all creatures get -5/-5 until end of turn. + this.addAbility(new DiesTriggeredAbility(new BoostAllEffect(-5, -5, Duration.EndOfTurn), false)); + } + + public HavocDemon(final HavocDemon card) { + super(card); + } + + @Override + public HavocDemon copy() { + return new HavocDemon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java b/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java index eb9712905e..e6896635fa 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java @@ -29,22 +29,18 @@ package mage.sets.limitedalpha; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BlocksOrBecomesBlockedByCreatureTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; /** * @@ -52,6 +48,12 @@ import mage.target.targetpointer.FixedTarget; */ public class Cockatrice extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Wall creature"); + + static { + filter.add(Predicates.not(new SubtypePredicate("Wall"))); + } + public Cockatrice(UUID ownerId) { super(ownerId, 98, "Cockatrice", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.expansionSetCode = "LEA"; @@ -60,10 +62,13 @@ public class Cockatrice extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(4); - // Flying - this.addAbility(FlyingAbility.getInstance()); + // Flying + this.addAbility(FlyingAbility.getInstance()); // Whenever Cockatrice blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat. - this.addAbility(new CockatriceTriggeredAbility()); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new BlocksOrBecomesBlockedByCreatureTriggeredAbility(effect, filter, false)); } public Cockatrice(final Cockatrice card) { @@ -75,80 +80,3 @@ public class Cockatrice extends CardImpl { return new Cockatrice(this); } } - -class CockatriceTriggeredAbility extends TriggeredAbilityImpl { - - CockatriceTriggeredAbility() { - super(Zone.BATTLEFIELD, new CockatriceEffect()); - } - - CockatriceTriggeredAbility(final CockatriceTriggeredAbility ability) { - super(ability); - } - - @Override - public CockatriceTriggeredAbility copy() { - return new CockatriceTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.BLOCKER_DECLARED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent blocker = game.getPermanent(event.getSourceId()); - Permanent blocked = game.getPermanent(event.getTargetId()); - Permanent cockatrice = game.getPermanent(sourceId); - if (blocker != null && blocker != cockatrice - && !blocker.getSubtype().contains("Wall") - && blocked == cockatrice) { - this.getEffects().get(0).setTargetPointer(new FixedTarget(blocker.getId())); - return true; - } - if (blocker != null && blocker == cockatrice - && !blocked.getSubtype().contains("Wall")) { - this.getEffects().get(0).setTargetPointer(new FixedTarget(blocked.getId())); - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever {this} blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat."; - } -} - -class CockatriceEffect extends OneShotEffect { - - CockatriceEffect() { - super(Outcome.DestroyPermanent); - staticText = "destroy that creature at end of combat"; - } - - CockatriceEffect(final CockatriceEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (targetCreature != null) { - AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } - return false; - } - - @Override - public CockatriceEffect copy() { - return new CockatriceEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/limitedalpha/Lifetap.java b/Mage.Sets/src/mage/sets/limitedalpha/Lifetap.java new file mode 100644 index 0000000000..23838ead6b --- /dev/null +++ b/Mage.Sets/src/mage/sets/limitedalpha/Lifetap.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.limitedalpha; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Lifetap extends mage.sets.fifthedition.Lifetap { + + public Lifetap(UUID ownerId) { + super(ownerId); + this.cardNumber = 62; + this.expansionSetCode = "LEA"; + } + + public Lifetap(final Lifetap card) { + super(card); + } + + @Override + public Lifetap copy() { + return new Lifetap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java b/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java index 1c8dfda7ce..329272766b 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java @@ -29,21 +29,17 @@ package mage.sets.limitedalpha; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BlocksOrBecomesBlockedByCreatureTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; /** * @@ -51,6 +47,12 @@ import mage.target.targetpointer.FixedTarget; */ public class ThicketBasilisk extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Wall creature"); + + static { + filter.add(Predicates.not(new SubtypePredicate("Wall"))); + } + public ThicketBasilisk(UUID ownerId) { super(ownerId, 127, "Thicket Basilisk", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.expansionSetCode = "LEA"; @@ -60,7 +62,10 @@ public class ThicketBasilisk extends CardImpl { this.toughness = new MageInt(4); // Whenever Thicket Basilisk blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat. - this.addAbility(new ThicketBasiliskTriggeredAbility()); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new BlocksOrBecomesBlockedByCreatureTriggeredAbility(effect, filter, false)); } public ThicketBasilisk(final ThicketBasilisk card) { @@ -72,80 +77,3 @@ public class ThicketBasilisk extends CardImpl { return new ThicketBasilisk(this); } } - -class ThicketBasiliskTriggeredAbility extends TriggeredAbilityImpl { - - ThicketBasiliskTriggeredAbility() { - super(Zone.BATTLEFIELD, new ThicketBasiliskEffect()); - } - - ThicketBasiliskTriggeredAbility(final ThicketBasiliskTriggeredAbility ability) { - super(ability); - } - - @Override - public ThicketBasiliskTriggeredAbility copy() { - return new ThicketBasiliskTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.BLOCKER_DECLARED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent blocker = game.getPermanent(event.getSourceId()); - Permanent blocked = game.getPermanent(event.getTargetId()); - Permanent thicketBasilisk = game.getPermanent(sourceId); - if (blocker != null && blocker != thicketBasilisk - && !blocker.getSubtype().contains("Wall") - && blocked == thicketBasilisk) { - this.getEffects().get(0).setTargetPointer(new FixedTarget(blocker.getId())); - return true; - } - if (blocker != null && blocker == thicketBasilisk - && !blocked.getSubtype().contains("Wall")) { - this.getEffects().get(0).setTargetPointer(new FixedTarget(blocked.getId())); - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever {this} blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat."; - } -} - -class ThicketBasiliskEffect extends OneShotEffect { - - ThicketBasiliskEffect() { - super(Outcome.DestroyPermanent); - staticText = "destroy that creature at end of combat"; - } - - ThicketBasiliskEffect(final ThicketBasiliskEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (targetCreature != null) { - AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } - return false; - } - - @Override - public ThicketBasiliskEffect copy() { - return new ThicketBasiliskEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/limitedbeta/Lifetap.java b/Mage.Sets/src/mage/sets/limitedbeta/Lifetap.java new file mode 100644 index 0000000000..effd512e82 --- /dev/null +++ b/Mage.Sets/src/mage/sets/limitedbeta/Lifetap.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.limitedbeta; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Lifetap extends mage.sets.fifthedition.Lifetap { + + public Lifetap(UUID ownerId) { + super(ownerId); + this.cardNumber = 62; + this.expansionSetCode = "LEB"; + } + + public Lifetap(final Lifetap card) { + super(card); + } + + @Override + public Lifetap copy() { + return new Lifetap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/ChangelingHero.java b/Mage.Sets/src/mage/sets/lorwyn/ChangelingHero.java new file mode 100644 index 0000000000..02cb5eb2aa --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/ChangelingHero.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.lorwyn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.ChampionAbility; +import mage.abilities.keyword.ChangelingAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ChangelingHero extends CardImpl { + + public ChangelingHero(UUID ownerId) { + super(ownerId, 9, "Changeling Hero", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{W}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Shapeshifter"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Changeling + this.addAbility(ChangelingAbility.getInstance()); + + // Champion a creature + this.addAbility(new ChampionAbility(this, "")); + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + } + + public ChangelingHero(final ChangelingHero card) { + super(card); + } + + @Override + public ChangelingHero copy() { + return new ChangelingHero(this); + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/Fallowsage.java b/Mage.Sets/src/mage/sets/lorwyn/Fallowsage.java index 81387b1efe..94e15d4b70 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/Fallowsage.java +++ b/Mage.Sets/src/mage/sets/lorwyn/Fallowsage.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; -import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.cards.CardImpl; @@ -51,7 +51,7 @@ public class Fallowsage extends CardImpl { this.toughness = new MageInt(2); // Whenever Fallowsage becomes tapped, you may draw a card. - this.addAbility(new BecomesTappedTriggeredAbility(new DrawCardSourceControllerEffect(1))); + this.addAbility(new BecomesTappedSourceTriggeredAbility(new DrawCardSourceControllerEffect(1))); } public Fallowsage(final Fallowsage card) { diff --git a/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.java b/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.java index 09bd019a92..b030484768 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.java +++ b/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.java @@ -29,7 +29,7 @@ package mage.sets.lorwyn; import java.util.UUID; import mage.MageInt; -import mage.abilities.common.BecomesTappedCreatureControlledTriggeredAbility; +import mage.abilities.common.BecomesTappedTriggeredAbility; import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -51,7 +51,7 @@ public class JudgeOfCurrents extends CardImpl { this.toughness = new MageInt(1); // Whenever a Merfolk you control becomes tapped, you may gain 1 life. - this.addAbility(new BecomesTappedCreatureControlledTriggeredAbility(new GainLifeEffect(1), true, new FilterControlledCreaturePermanent("Merfolk", "a Merfolk you control"))); + this.addAbility(new BecomesTappedTriggeredAbility(new GainLifeEffect(1), true, new FilterControlledCreaturePermanent("Merfolk", "a Merfolk you control"))); } public JudgeOfCurrents(final JudgeOfCurrents card) { diff --git a/Mage.Sets/src/mage/sets/lorwyn/Surgespanner.java b/Mage.Sets/src/mage/sets/lorwyn/Surgespanner.java index d7ded0f176..2d915af972 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/Surgespanner.java +++ b/Mage.Sets/src/mage/sets/lorwyn/Surgespanner.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnToHandTargetEffect; @@ -55,7 +55,7 @@ public class Surgespanner extends CardImpl { this.toughness = new MageInt(2); // Whenever Surgespanner becomes tapped, you may pay {1}{U}. If you do, return target permanent to its owner's hand. - Ability ability = new BecomesTappedTriggeredAbility(new DoIfCostPaid(new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{U}"))); + Ability ability = new BecomesTappedSourceTriggeredAbility(new DoIfCostPaid(new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{U}"))); ability.addTarget(new TargetPermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java b/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java index 9a1a079556..2e53c0c49e 100644 --- a/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java +++ b/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java @@ -28,10 +28,7 @@ package mage.sets.magic2010; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SpellCastOpponentTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -39,6 +36,10 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -52,7 +53,6 @@ public class LurkingPredators extends CardImpl { super(ownerId, 190, "Lurking Predators", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{4}{G}{G}"); this.expansionSetCode = "M10"; - // Whenever an opponent casts a spell, reveal the top card of your library. If it's a creature card, put it onto the battlefield. Otherwise, you may put that card on the bottom of your library. this.addAbility(new SpellCastOpponentTriggeredAbility(new LurkingPredatorsEffect(), false)); } @@ -85,26 +85,25 @@ class LurkingPredatorsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player == null) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (controller == null || sourceObject == null) { return false; } - if (player.getLibrary().size() > 0) { - Card card = player.getLibrary().getFromTop(game); - Cards cards = new CardsImpl(); - cards.add(card); - player.revealCards("Lurking Predators", cards, game); + if (controller.getLibrary().size() > 0) { + Card card = controller.getLibrary().getFromTop(game); + Cards cards = new CardsImpl(card); + controller.revealCards(sourceObject.getIdName(), cards, game); if (card != null) { if (card.getCardType().contains(CardType.CREATURE)) { - card = player.getLibrary().removeFromTop(game); - card.putOntoBattlefield(game, Zone.HAND, source.getSourceId(), source.getControllerId()); - } else if (player.chooseUse(Outcome.Neutral, "Put " + card.getName() + " on the bottom of your library?", source, game)) { - card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); + controller.moveCards(card, Zone.BATTLEFIELD, source, game); + } else if (controller.chooseUse(Outcome.Neutral, "Put " + card.getIdName() + " on the bottom of your library?", source, game)) { + controller.putCardsOnBottomOfLibrary(cards, game, source, false); } } } - return false; + return true; } } diff --git a/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java b/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java index c43cc027e9..f377e69b98 100644 --- a/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java +++ b/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java @@ -28,26 +28,22 @@ package mage.sets.magic2010; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.DestroyTargetAtBeginningOfNextEndStepEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; -import mage.target.targetpointer.FixedTarget; /** * @@ -68,7 +64,7 @@ public class StoneGiant extends CardImpl { new TapSourceCost()); ability.addTarget(new StoneGiantTarget()); // Destroy that creature at the beginning of the next end step. - ability.addEffect(new StoneGiantEffect()); + ability.addEffect(new DestroyTargetAtBeginningOfNextEndStepEffect()); this.addAbility(ability); } @@ -109,32 +105,3 @@ class StoneGiantTarget extends TargetPermanent { return false; } } - -class StoneGiantEffect extends OneShotEffect { - - public StoneGiantEffect() { - super(Outcome.Detriment); - this.staticText = "Destroy that creature at the beginning of the next end step"; - } - - public StoneGiantEffect(final StoneGiantEffect effect) { - super(effect); - } - - @Override - public StoneGiantEffect copy() { - return new StoneGiantEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - DestroyTargetEffect effect = new DestroyTargetEffect(); - effect.setTargetPointer(new FixedTarget(source.getFirstTarget())); - AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } -} diff --git a/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java b/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java index 95bb22a363..cd3743fde2 100644 --- a/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java +++ b/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java @@ -58,6 +58,8 @@ public class MassPolymorph extends CardImpl { super(ownerId, 64, "Mass Polymorph", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{5}{U}"); this.expansionSetCode = "M11"; + // Exile all creatures you control, then reveal cards from the top of your library until you reveal that many creature cards. + // Put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library. this.getSpellAbility().addEffect(new MassPolymorphEffect()); } @@ -93,7 +95,7 @@ class MassPolymorphEffect extends OneShotEffect { Set creaturesToExile = new HashSet<>(); creaturesToExile.addAll(creatures); count = creatures.size(); - controller.moveCards(creaturesToExile, null, Zone.HAND, source, game); + controller.moveCards(creaturesToExile, Zone.HAND, source, game); Cards revealed = new CardsImpl(); Set creatureCards = new LinkedHashSet<>(); diff --git a/Mage.Sets/src/mage/sets/magic2011/ShivsEmbrace.java b/Mage.Sets/src/mage/sets/magic2011/ShivsEmbrace.java index ce1bddb944..95304846b7 100644 --- a/Mage.Sets/src/mage/sets/magic2011/ShivsEmbrace.java +++ b/Mage.Sets/src/mage/sets/magic2011/ShivsEmbrace.java @@ -1,16 +1,16 @@ /* * 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 @@ -20,7 +20,7 @@ * 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. @@ -29,25 +29,23 @@ package mage.sets.magic2011; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.SubLayer; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -65,13 +63,15 @@ public class ShivsEmbrace extends CardImpl { // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - // Enchanted creature gets +2/+2 and has flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ShivsEmbraceEffect())); - + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2)); + Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); + effect.setText("and has flying"); + ability.addEffect(effect); + this.addAbility(ability); // {R}: Enchanted creature gets +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); @@ -86,56 +86,3 @@ public class ShivsEmbrace extends CardImpl { return new ShivsEmbrace(this); } } - -class ShivsEmbraceEffect extends ContinuousEffectImpl { - - public ShivsEmbraceEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment); - staticText = "Enchanted creature gets +2/+2 and has flying"; - } - - public ShivsEmbraceEffect(final ShivsEmbraceEffect effect) { - super(effect); - } - - @Override - public ShivsEmbraceEffect copy() { - return new ShivsEmbraceEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo() != null) { - Permanent creature = game.getPermanent(enchantment.getAttachedTo()); - if (creature != null) { - switch (layer) { - case PTChangingEffects_7: - if (sublayer == SubLayer.ModifyPT_7c) { - creature.addPower(2); - creature.addToughness(2); - } - break; - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - creature.addAbility(FlyingAbility.getInstance(), source.getSourceId(), game); - } - break; - } - return true; - } - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.AbilityAddingRemovingEffects_6 || layer == Layer.PTChangingEffects_7; - } - -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/magic2012/GideonsAvenger.java b/Mage.Sets/src/mage/sets/magic2012/GideonsAvenger.java index be7f26d112..5d147f63c4 100644 --- a/Mage.Sets/src/mage/sets/magic2012/GideonsAvenger.java +++ b/Mage.Sets/src/mage/sets/magic2012/GideonsAvenger.java @@ -29,17 +29,15 @@ package mage.sets.magic2012; import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BecomesTappedTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; -import mage.constants.Zone; +import mage.constants.TargetController; import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; /** * @@ -47,6 +45,12 @@ import mage.game.permanent.Permanent; */ public class GideonsAvenger extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + public GideonsAvenger(UUID ownerId) { super(ownerId, 17, "Gideon's Avenger", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); this.expansionSetCode = "M12"; @@ -56,7 +60,8 @@ public class GideonsAvenger extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - this.addAbility(new GideonsAvengerTriggeredAbility()); + // Whenever a creature an opponent controls becomes tapped, put a +1/+1 counter on Gideon's Avenger. + this.addAbility(new BecomesTappedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter)); } public GideonsAvenger(final GideonsAvenger card) { @@ -68,38 +73,3 @@ public class GideonsAvenger extends CardImpl { return new GideonsAvenger(this); } } - -class GideonsAvengerTriggeredAbility extends TriggeredAbilityImpl { - GideonsAvengerTriggeredAbility() { - super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance())); - } - - GideonsAvengerTriggeredAbility(final GideonsAvengerTriggeredAbility ability) { - super(ability); - } - - @Override - public GideonsAvengerTriggeredAbility copy() { - return new GideonsAvengerTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.TAPPED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent p = game.getPermanent(event.getTargetId()); - if (p != null && p.getCardType().contains(CardType.CREATURE)) { - if (game.getOpponents(this.controllerId).contains(p.getControllerId())) - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever a creature an opponent controls becomes tapped, " + modes.getText(); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java b/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java index 9896e6a542..c4b28fabab 100644 --- a/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java +++ b/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java @@ -28,21 +28,20 @@ package mage.sets.magic2013; import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.TargetController; import mage.constants.Zone; -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardImpl; import mage.filter.common.FilterBasicLandCard; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCardInLibrary; @@ -56,7 +55,6 @@ public class BoundlessRealms extends CardImpl { super(ownerId, 162, "Boundless Realms", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{6}{G}"); this.expansionSetCode = "M13"; - // Search your library for up to X basic land cards, where X is the number of lands you control, and put them onto the battlefield tapped. Then shuffle your library. this.getSpellAbility().addEffect(new BoundlessRealmsEffect()); } @@ -89,32 +87,19 @@ class BoundlessRealmsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } FilterLandPermanent filter = new FilterLandPermanent(); filter.add(new ControllerPredicate(TargetController.YOU)); int amount = new PermanentsOnBattlefieldCount(filter).calculate(game, source, this); TargetCardInLibrary target = new TargetCardInLibrary(0, amount, new FilterBasicLandCard()); - - Player player = game.getPlayer(source.getControllerId()); - if (player == null) { - return false; + if (controller.searchLibrary(target, game)) { + controller.moveCards(new CardsImpl(target.getTargets()).getCards(game), Zone.HAND, source, game, true, false, false, null); } - - if (player.searchLibrary(target, game)) { - for (UUID cardId : target.getTargets()) { - Card card = player.getLibrary().getCard(cardId, game); - if (card != null) { - if (card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId())) { - Permanent permanent = game.getPermanent(card.getId()); - if (permanent != null) { - permanent.setTapped(true); - } - } - } - } - } - - player.shuffleLibrary(game); + controller.shuffleLibrary(game); return true; } } diff --git a/Mage.Sets/src/mage/sets/magic2014/AjanisChosen.java b/Mage.Sets/src/mage/sets/magic2014/AjanisChosen.java index 1728e7f1f4..fbf9d88f79 100644 --- a/Mage.Sets/src/mage/sets/magic2014/AjanisChosen.java +++ b/Mage.Sets/src/mage/sets/magic2014/AjanisChosen.java @@ -29,7 +29,6 @@ package mage.sets.magic2014; import java.util.UUID; import mage.MageInt; -import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -39,8 +38,7 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.SetTargetPointer; import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.common.FilterControlledEnchantmentPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.CatToken; @@ -53,11 +51,6 @@ import mage.players.Player; */ public class AjanisChosen extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent(); - static { - filter.add(new CardTypePredicate(CardType.ENCHANTMENT)); - } - public AjanisChosen(UUID ownerId) { super(ownerId, 2, "Ajani's Chosen", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); this.expansionSetCode = "M14"; @@ -69,7 +62,7 @@ public class AjanisChosen extends CardImpl { // Whenever an enchantment enters the battlefield under your control, put a 2/2 white Cat creature token onto the battlefield. If that enchantment is an Aura, you may attach it to the token. this.addAbility(new EntersBattlefieldAllTriggeredAbility( - Zone.BATTLEFIELD, new AjanisChosenEffect(), filter, false, SetTargetPointer.PERMANENT, + Zone.BATTLEFIELD, new AjanisChosenEffect(), new FilterControlledEnchantmentPermanent(), false, SetTargetPointer.PERMANENT, "Whenever an enchantment enters the battlefield under your control, put a 2/2 white Cat creature token onto the battlefield. If that enchantment is an Aura, you may attach it to the token")); } @@ -85,7 +78,6 @@ public class AjanisChosen extends CardImpl { class AjanisChosenEffect extends OneShotEffect { - public AjanisChosenEffect() { super(Outcome.PutCreatureInPlay); staticText = "put a 2/2 white Cat creature token onto the battlefield. If that enchantment is an Aura, you may attach it to the token"; @@ -102,19 +94,22 @@ class AjanisChosenEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Token token = new CatToken(); - if(token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())){ - Player player = game.getPlayer(source.getControllerId()); - Permanent enchantement = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - Permanent tokenPermanent = game.getPermanent(token.getLastAddedToken()); - if(player != null && enchantement != null && tokenPermanent != null && enchantement.getSubtype().contains("Aura")) - { - Permanent oldCreature = game.getPermanent(enchantement.getAttachedTo()); - - if(oldCreature != null && enchantement.getSpellAbility().getTargets().get(0).canTarget(tokenPermanent.getId(), game) && player.chooseUse(Outcome.Neutral, "Attach " + enchantement.getName() + " to the token ?", source, game)) - { - if(oldCreature.removeAttachment(enchantement.getId(), game)){ - tokenPermanent.addAttachment(enchantement.getId(), game); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Token token = new CatToken(); + if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { + Permanent enchantment = game.getPermanent(this.getTargetPointer().getFirst(game, source)); + if (enchantment != null && enchantment.getSubtype().contains("Aura")) { + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + Permanent oldCreature = game.getPermanent(enchantment.getAttachedTo()); + if (oldCreature != null && enchantment.getSpellAbility().getTargets().get(0).canTarget(tokenPermanent.getId(), game) && controller.chooseUse(Outcome.Neutral, "Attach " + enchantment.getName() + " to the token ?", source, game)) { + if (oldCreature.removeAttachment(enchantment.getId(), game)) { + tokenPermanent.addAttachment(enchantment.getId(), game); + } + } + } } } } diff --git a/Mage.Sets/src/mage/sets/magic2014/DevoutInvocation.java b/Mage.Sets/src/mage/sets/magic2014/DevoutInvocation.java index 3f71b0c0a7..9dc699f772 100644 --- a/Mage.Sets/src/mage/sets/magic2014/DevoutInvocation.java +++ b/Mage.Sets/src/mage/sets/magic2014/DevoutInvocation.java @@ -55,10 +55,9 @@ public class DevoutInvocation extends CardImpl { super(ownerId, 16, "Devout Invocation", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{6}{W}"); this.expansionSetCode = "M14"; - // Tap any number of untapped creatures you control. Put a 4/4 white Angel creature token with flying onto the battlefield for each creature tapped this way. this.getSpellAbility().addEffect(new DevoutInvocationEffect()); - + } public DevoutInvocation(final DevoutInvocation card) { @@ -72,9 +71,9 @@ public class DevoutInvocation extends CardImpl { } class DevoutInvocationEffect extends OneShotEffect { - + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped creatures you control"); - + static { filter.add(Predicates.not(new TappedPredicate())); } @@ -93,7 +92,7 @@ class DevoutInvocationEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { int tappedAmount = 0; - TargetPermanent target = new TargetPermanent(0,1,filter, false); + TargetPermanent target = new TargetPermanent(0, 1, filter, false); while (true && controller.canRespond()) { target.clearChosen(); if (target.canChoose(source.getControllerId(), game)) { @@ -109,15 +108,13 @@ class DevoutInvocationEffect extends OneShotEffect { } else { break; } - } - else { + } else { break; } } if (tappedAmount > 0) { AngelToken angelToken = new AngelToken(); angelToken.putOntoBattlefield(tappedAmount, game, source.getSourceId(), source.getControllerId()); - game.informPlayers(new StringBuilder(controller.getLogName()).append(" puts ").append(tappedAmount).append(" token").append(tappedAmount != 1 ?"s":"").append(" onto the battlefield").toString()); } return true; } diff --git a/Mage.Sets/src/mage/sets/magic2015/MercurialPretender.java b/Mage.Sets/src/mage/sets/magic2015/MercurialPretender.java index fcfabc49c0..2152b28b88 100644 --- a/Mage.Sets/src/mage/sets/magic2015/MercurialPretender.java +++ b/Mage.Sets/src/mage/sets/magic2015/MercurialPretender.java @@ -1,78 +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.magic2015; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.EntersBattlefieldAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.CopyPermanentEffect; -import mage.abilities.effects.common.ReturnToHandSourceEffect; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.util.functions.AbilityApplier; - -/** - * - * @author LevelX2 - */ -public class MercurialPretender extends CardImpl { - - private static final String effectText = "as a copy of any creature you control except it gains \"{2}{U}{U}: Return this creature to its owner's hand.\""; - - public MercurialPretender(UUID ownerId) { - super(ownerId, 68, "Mercurial Pretender", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}"); - this.expansionSetCode = "M15"; - this.subtype.add("Shapeshifter"); - - this.color.setBlue(true); - this.power = new MageInt(0); - this.toughness = new MageInt(0); - - // You may have Mercurial Pretender enter the battlefield as a copy of any creature you control - // except it gains "{2}{U}{U}: Return this creature to its owner's hand." - Effect effect = new CopyPermanentEffect(new FilterCreaturePermanent(), - new AbilityApplier(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("{2}{U}{U}")))); - effect.setText(effectText); - this.addAbility(new EntersBattlefieldAbility(effect, true)); - } - - public MercurialPretender(final MercurialPretender card) { - super(card); - } - - @Override - public MercurialPretender copy() { - return new MercurialPretender(this); - } -} +/* + * 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.magic2015; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CopyPermanentEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.util.functions.AbilityApplier; + +/** + * + * @author LevelX2 + */ +public class MercurialPretender extends CardImpl { + + private static final String effectText = "as a copy of any creature you control except it gains \"{2}{U}{U}: Return this creature to its owner's hand.\""; + + public MercurialPretender(UUID ownerId) { + super(ownerId, 68, "Mercurial Pretender", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{U}"); + this.expansionSetCode = "M15"; + this.subtype.add("Shapeshifter"); + + this.color.setBlue(true); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // You may have Mercurial Pretender enter the battlefield as a copy of any creature you control + // except it gains "{2}{U}{U}: Return this creature to its owner's hand." + Effect effect = new CopyPermanentEffect(new FilterControlledCreaturePermanent(), + new AbilityApplier(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("{2}{U}{U}")))); + effect.setText(effectText); + this.addAbility(new EntersBattlefieldAbility(effect, true)); + } + + public MercurialPretender(final MercurialPretender card) { + super(card); + } + + @Override + public MercurialPretender copy() { + return new MercurialPretender(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/JaceTelepathUnbound.java b/Mage.Sets/src/mage/sets/magicorigins/JaceTelepathUnbound.java index 7e87bf53d0..3e55cfbfbd 100644 --- a/Mage.Sets/src/mage/sets/magicorigins/JaceTelepathUnbound.java +++ b/Mage.Sets/src/mage/sets/magicorigins/JaceTelepathUnbound.java @@ -124,7 +124,7 @@ class JaceTelepathUnboundEffect extends OneShotEffect { Card card = game.getCard(this.getTargetPointer().getFirst(game, source)); if (card != null) { ContinuousEffect effect = new JaceTelepathUnboundCastFromGraveyardEffect(); - effect.setTargetPointer(new FixedTarget(card.getId())); + effect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); game.addEffect(effect, source); effect = new JaceTelepathUnboundReplacementEffect(card.getId()); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/magicorigins/PiaAndKiranNalaar.java b/Mage.Sets/src/mage/sets/magicorigins/PiaAndKiranNalaar.java index a0d055231c..da04c314ed 100644 --- a/Mage.Sets/src/mage/sets/magicorigins/PiaAndKiranNalaar.java +++ b/Mage.Sets/src/mage/sets/magicorigins/PiaAndKiranNalaar.java @@ -34,6 +34,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; @@ -60,8 +61,10 @@ public class PiaAndKiranNalaar extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - // When Pia and Kiran Nalaar enters the battlefield put 2 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield. - this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ThopterColorlessToken(), 2))); + // When Pia and Kiran Nalaar enters the battlefield, put two 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield. + Effect effect = new CreateTokenEffect(new ThopterColorlessToken(), 2); + effect.setText("put two 1/1 colorless Thopter artifact creature tokens with flying onto the battlefield"); + this.addAbility(new EntersBattlefieldTriggeredAbility(effect)); // {2}{R}, Sacrifice an artifact: Pia and Kiran Nalaar deals 2 damage to target creature or player. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{2}{R}")); diff --git a/Mage.Sets/src/mage/sets/magicorigins/PsychicRebuttal.java b/Mage.Sets/src/mage/sets/magicorigins/PsychicRebuttal.java index cdc1ecbfb1..84aca36df0 100644 --- a/Mage.Sets/src/mage/sets/magicorigins/PsychicRebuttal.java +++ b/Mage.Sets/src/mage/sets/magicorigins/PsychicRebuttal.java @@ -29,6 +29,7 @@ package mage.sets.magicorigins; import java.util.UUID; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.condition.common.SpellMasteryCondition; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -137,9 +138,8 @@ class PsychicRebuttalPredicate implements ObjectPlayerPredicate("{W}{U}{B}{R}{G}")); + player.setCastSourceIdWithAlternateMana(sourceId, new ManaCostsImpl<>("{W}{U}{B}{R}{G}"), null); return true; } } diff --git a/Mage.Sets/src/mage/sets/morningtide/BorderlandBehemoth.java b/Mage.Sets/src/mage/sets/morningtide/BorderlandBehemoth.java new file mode 100644 index 0000000000..f4650f2c6a --- /dev/null +++ b/Mage.Sets/src/mage/sets/morningtide/BorderlandBehemoth.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.morningtide; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class BorderlandBehemoth extends mage.sets.commander2015.BorderlandBehemoth { + + public BorderlandBehemoth(UUID ownerId) { + super(ownerId); + this.cardNumber = 87; + this.expansionSetCode = "MOR"; + } + + public BorderlandBehemoth(final BorderlandBehemoth card) { + super(card); + } + + @Override + public BorderlandBehemoth copy() { + return new BorderlandBehemoth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/morningtide/ChameleonColossus.java b/Mage.Sets/src/mage/sets/morningtide/ChameleonColossus.java index 56d7df6a2e..a57e67d4f3 100644 --- a/Mage.Sets/src/mage/sets/morningtide/ChameleonColossus.java +++ b/Mage.Sets/src/mage/sets/morningtide/ChameleonColossus.java @@ -28,26 +28,22 @@ package mage.sets.morningtide; import java.util.UUID; + import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.SubLayer; import mage.constants.Zone; import mage.MageInt; import mage.ObjectColor; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; +import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.ChangelingAbility; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.ColorPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; /** * @@ -76,7 +72,8 @@ public class ChameleonColossus extends CardImpl { this.addAbility(new ProtectionAbility(filter)); // {2}{G}{G}: Chameleon Colossus gets +X/+X until end of turn, where X is its power. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ChameleonColossusEffect(), new ManaCostsImpl("{2}{G}{G}"))); + SourcePermanentPowerCount x = new SourcePermanentPowerCount(); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(x, x, Duration.EndOfTurn, true), new ManaCostsImpl("{2}{G}{G}"))); } public ChameleonColossus(final ChameleonColossus card) { @@ -88,31 +85,3 @@ public class ChameleonColossus extends CardImpl { return new ChameleonColossus(this); } } - -class ChameleonColossusEffect extends ContinuousEffectImpl { - public ChameleonColossusEffect() { - super(Duration.EndOfTurn, Layer.PTChangingEffects_7, SubLayer.ModifyPT_7c, Outcome.BoostCreature); - staticText = "{this} gets +X/+X until end of turn, where X is its power"; - } - - public ChameleonColossusEffect(final ChameleonColossusEffect effect) { - super(effect); - } - - @Override - public ChameleonColossusEffect copy() { - return new ChameleonColossusEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - if (sourcePermanent != null) { - int power = sourcePermanent.getPower().getValue(); - sourcePermanent.addPower(power); - sourcePermanent.addToughness(power); - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/morningtide/CountrysideCrusher.java b/Mage.Sets/src/mage/sets/morningtide/CountrysideCrusher.java index bc8f7d46c1..9bee542397 100644 --- a/Mage.Sets/src/mage/sets/morningtide/CountrysideCrusher.java +++ b/Mage.Sets/src/mage/sets/morningtide/CountrysideCrusher.java @@ -28,10 +28,6 @@ package mage.sets.morningtide; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -42,8 +38,11 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; +import mage.constants.CardType; import mage.constants.Outcome; +import mage.constants.Rarity; import mage.constants.TargetController; +import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.common.FilterLandCard; import mage.game.Game; @@ -70,7 +69,7 @@ public class CountrysideCrusher extends CardImpl { // Whenever a land card is put into your graveyard from anywhere, put a +1/+1 counter on Countryside Crusher. this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( new AddCountersSourceEffect(CounterType.P1P1.createInstance()), - false, new FilterLandCard("a land card"),TargetController.YOU + false, new FilterLandCard("a land card"), TargetController.YOU )); } @@ -111,7 +110,7 @@ class CountrysideCrusherEffect extends OneShotEffect { Card card = controller.getLibrary().getFromTop(game); cards.add(card); if (card.getCardType().contains(CardType.LAND)) { - controller.moveCards(card, Zone.LIBRARY, Zone.GRAVEYARD, source, game); + controller.moveCards(card, Zone.GRAVEYARD, source, game); } else { break; } diff --git a/Mage.Sets/src/mage/sets/morningtide/GrimoireThief.java b/Mage.Sets/src/mage/sets/morningtide/GrimoireThief.java index 47338c04de..17d751edb0 100644 --- a/Mage.Sets/src/mage/sets/morningtide/GrimoireThief.java +++ b/Mage.Sets/src/mage/sets/morningtide/GrimoireThief.java @@ -34,7 +34,7 @@ import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; -import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -65,9 +65,9 @@ import mage.util.CardUtil; * @author jeffwadsworth */ public class GrimoireThief extends CardImpl { - + protected static final String VALUE_PREFIX = "ExileZones"; - + public GrimoireThief(UUID ownerId) { super(ownerId, 35, "Grimoire Thief", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{U}{U}"); this.expansionSetCode = "MOR"; @@ -77,7 +77,7 @@ public class GrimoireThief extends CardImpl { this.toughness = new MageInt(2); // Whenever Grimoire Thief becomes tapped, exile the top three cards of target opponent's library face down. - Ability ability = new BecomesTappedTriggeredAbility(new GrimoireThiefExileEffect(), false); + Ability ability = new BecomesTappedSourceTriggeredAbility(new GrimoireThiefExileEffect(), false); ability.addTarget(new TargetOpponent()); this.addAbility(ability); @@ -88,13 +88,13 @@ public class GrimoireThief extends CardImpl { Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrimoireThiefCounterspellEffect(), new ManaCostsImpl("{U}")); ability2.addCost(new SacrificeSourceCost()); this.addAbility(ability2); - + } - + public GrimoireThief(final GrimoireThief card) { super(card); } - + @Override public GrimoireThief copy() { return new GrimoireThief(this); @@ -102,16 +102,16 @@ public class GrimoireThief extends CardImpl { } class GrimoireThiefExileEffect extends OneShotEffect { - + public GrimoireThiefExileEffect() { super(Outcome.Discard); staticText = "exile the top three cards of target opponent's library face down"; } - + public GrimoireThiefExileEffect(final GrimoireThiefExileEffect effect) { super(effect); } - + @Override public boolean apply(Game game, Ability source) { Player targetOpponent = game.getPlayer(source.getFirstTarget()); @@ -138,7 +138,7 @@ class GrimoireThiefExileEffect extends OneShotEffect { } return false; } - + @Override public GrimoireThiefExileEffect copy() { return new GrimoireThiefExileEffect(this); @@ -146,26 +146,26 @@ class GrimoireThiefExileEffect extends OneShotEffect { } class GrimoireThiefLookEffect extends AsThoughEffectImpl { - + public GrimoireThiefLookEffect() { super(AsThoughEffectType.LOOK_AT_FACE_DOWN, Duration.EndOfGame, Outcome.Benefit); staticText = "You may look at the cards exiled with {this}"; } - + public GrimoireThiefLookEffect(final GrimoireThiefLookEffect effect) { super(effect); } - + @Override public boolean apply(Game game, Ability source) { return true; } - + @Override public GrimoireThiefLookEffect copy() { return new GrimoireThiefLookEffect(this); } - + @Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { if (affectedControllerId.equals(source.getControllerId()) && game.getState().getZone(objectId).equals(Zone.EXILED)) { @@ -193,16 +193,16 @@ class GrimoireThiefLookEffect extends AsThoughEffectImpl { } class GrimoireThiefCounterspellEffect extends OneShotEffect { - + public GrimoireThiefCounterspellEffect() { super(Outcome.Discard); staticText = "Turn all cards exiled with {this} face up. Counter all spells with those names"; } - + public GrimoireThiefCounterspellEffect(final GrimoireThiefCounterspellEffect effect) { super(effect); } - + @Override public boolean apply(Game game, Ability source) { Cards cards = new CardsImpl(); @@ -245,7 +245,7 @@ class GrimoireThiefCounterspellEffect extends OneShotEffect { } return false; } - + @Override public GrimoireThiefCounterspellEffect copy() { return new GrimoireThiefCounterspellEffect(this); diff --git a/Mage.Sets/src/mage/sets/morningtide/StinkdrinkerBandit.java b/Mage.Sets/src/mage/sets/morningtide/StinkdrinkerBandit.java index b73d31f4b2..82fecdc17a 100644 --- a/Mage.Sets/src/mage/sets/morningtide/StinkdrinkerBandit.java +++ b/Mage.Sets/src/mage/sets/morningtide/StinkdrinkerBandit.java @@ -67,7 +67,7 @@ public class StinkdrinkerBandit extends CardImpl { this.subtype.add("Rogue"); this.power = new MageInt(2); - this.toughness = new MageInt(2); + this.toughness = new MageInt(1); // Prowl {1}, {B} (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Goblin or Rogue.) this.addAbility(new ProwlAbility(this, "{1}{B}")); diff --git a/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java b/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java index 691d5c6c07..f4c59c8063 100644 --- a/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java +++ b/Mage.Sets/src/mage/sets/morningtide/StonybrookSchoolmaster.java @@ -29,7 +29,7 @@ package mage.sets.morningtide; import java.util.UUID; import mage.MageInt; -import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -51,7 +51,7 @@ public class StonybrookSchoolmaster extends CardImpl { this.toughness = new MageInt(2); // Whenever Stonybrook Schoolmaster becomes tapped, you may put a 1/1 blue Merfolk Wizard creature token onto the battlefield. - this.addAbility(new BecomesTappedTriggeredAbility(new CreateTokenEffect(new MerfolkWizardToken()), true)); + this.addAbility(new BecomesTappedSourceTriggeredAbility(new CreateTokenEffect(new MerfolkWizardToken()), true)); } public StonybrookSchoolmaster(final StonybrookSchoolmaster card) { @@ -62,4 +62,4 @@ public class StonybrookSchoolmaster extends CardImpl { public StonybrookSchoolmaster copy() { return new StonybrookSchoolmaster(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/nemesis/Dominate.java b/Mage.Sets/src/mage/sets/nemesis/Dominate.java new file mode 100644 index 0000000000..6c03ea78dd --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/Dominate.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.nemesis; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.Filter; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.game.Game; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class Dominate extends CardImpl { + + public Dominate(UUID ownerId) { + super(ownerId, 31, "Dominate", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{X}{1}{U}{U}"); + this.expansionSetCode = "NMS"; + + // Gain control of target creature with converted mana cost X or less. + this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.Custom, true)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature with converted mana cost X or less"))); + } + + public Dominate(final Dominate card) { + super(card); + } + + @Override + public void adjustTargets(Ability ability, Game game) { + if(ability instanceof SpellAbility) { + ability.getTargets().clear(); + int xValue = ability.getManaCostsToPay().getX(); + FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with converted mana cost X or less"); + filter.add(Predicates.not(new ConvertedManaCostPredicate(Filter.ComparisonType.GreaterThan, xValue))); + ability.addTarget(new TargetCreaturePermanent(filter)); + } + } + + @Override + public Dominate copy() { + return new Dominate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/nemesis/Ensnare.java b/Mage.Sets/src/mage/sets/nemesis/Ensnare.java new file mode 100644 index 0000000000..85295255c9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/Ensnare.java @@ -0,0 +1,74 @@ +/* + * 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.nemesis; + +import java.util.UUID; +import mage.abilities.costs.AlternativeCostSourceAbility; +import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost; +import mage.abilities.effects.common.TapAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author fireshoes + */ +public class Ensnare extends CardImpl { + + private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("Islands"); + static{ + filter.add(new SubtypePredicate("Island")); + } + + public Ensnare(UUID ownerId) { + super(ownerId, 32, "Ensnare", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{U}"); + this.expansionSetCode = "NMS"; + + // You may return two Islands you control to their owner's hand rather than pay Ensnare's mana cost. + AlternativeCostSourceAbility ability; + ability = new AlternativeCostSourceAbility(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(2, 2, filter, true))); + this.addAbility(ability); + + // Tap all creatures. + this.getSpellAbility().addEffect(new TapAllEffect(new FilterCreaturePermanent())); + } + + public Ensnare(final Ensnare card) { + super(card); + } + + @Override + public Ensnare copy() { + return new Ensnare(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ninthedition/AnabaShaman.java b/Mage.Sets/src/mage/sets/ninthedition/AnabaShaman.java index 40ad710034..f1615de339 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/AnabaShaman.java +++ b/Mage.Sets/src/mage/sets/ninthedition/AnabaShaman.java @@ -28,16 +28,15 @@ package mage.sets.ninthedition; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.DamagePlayersEffect; +import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.Zone; import mage.target.common.TargetCreatureOrPlayer; @@ -57,7 +56,7 @@ public class AnabaShaman extends CardImpl { this.toughness = new MageInt(2); // {R}, {tap}: Anaba Shaman deals 1 damage to target creature or player. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(1), new ManaCostsImpl("{R}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{R}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreatureOrPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/ninthedition/BloodMoon.java b/Mage.Sets/src/mage/sets/ninthedition/BloodMoon.java index c374adde74..ac21d7d985 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/BloodMoon.java +++ b/Mage.Sets/src/mage/sets/ninthedition/BloodMoon.java @@ -28,6 +28,12 @@ package mage.sets.ninthedition; import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.mana.RedManaAbility; +import mage.cards.CardImpl; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -35,11 +41,6 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.SubLayer; import mage.constants.Zone; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.mana.RedManaAbility; -import mage.cards.CardImpl; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.SupertypePredicate; @@ -56,7 +57,6 @@ public class BloodMoon extends CardImpl { super(ownerId, 176, "Blood Moon", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); this.expansionSetCode = "9ED"; - // Nonbasic lands are Mountains. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BloodMoonEffect())); } @@ -74,6 +74,7 @@ public class BloodMoon extends CardImpl { class BloodMoonEffect extends ContinuousEffectImpl { private static final FilterLandPermanent filter = new FilterLandPermanent(); + static { filter.add(Predicates.not(new SupertypePredicate("Basic"))); } @@ -99,16 +100,18 @@ class BloodMoonEffect extends ContinuousEffectImpl { @Override public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - for (Permanent land: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { + for (Permanent land : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { switch (layer) { - case AbilityAddingRemovingEffects_6: - land.removeAllAbilities(source.getSourceId(), game); - land.addAbility(new RedManaAbility(), source.getSourceId(), game); - break; case TypeChangingEffects_4: - land.getSubtype().clear(); + // 305.7 Note that this doesn't remove any abilities that were granted to the land by other effects + // So the ability removing has to be done before Layer 6 + land.removeAllAbilities(source.getSourceId(), game); + land.getSubtype().removeAll(CardRepository.instance.getLandTypes()); land.getSubtype().add("Mountain"); break; + case AbilityAddingRemovingEffects_6: + land.addAbility(new RedManaAbility(), source.getSourceId(), game); + break; } } return true; diff --git a/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java b/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java index 68f56668e4..f8bd55460a 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java +++ b/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java @@ -29,18 +29,18 @@ package mage.sets.ninthedition; import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; +import mage.ObjectColor; +import mage.abilities.common.BlocksOrBecomesBlockedByCreatureTriggeredAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; /** * @@ -48,6 +48,12 @@ import mage.target.targetpointer.FixedTarget; */ public class Deathgazer extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonblack creature"); + + static { + filter.add(Predicates.not(new ColorPredicate(ObjectColor.BLACK))); + } + public Deathgazer(UUID ownerId) { super(ownerId, 124, "Deathgazer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.expansionSetCode = "9ED"; @@ -57,7 +63,11 @@ public class Deathgazer extends CardImpl { this.toughness = new MageInt(2); // Whenever Deathgazer blocks or becomes blocked by a nonblack creature, destroy that creature at end of combat. - this.addAbility(new DeathgazerTriggeredAbility(new DestroyTargetEffect(), false)); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new BlocksOrBecomesBlockedByCreatureTriggeredAbility(effect, filter, false)); + } public Deathgazer(final Deathgazer card) { @@ -69,54 +79,3 @@ public class Deathgazer extends CardImpl { return new Deathgazer(this); } } - -class DeathgazerTriggeredAbility extends TriggeredAbilityImpl { - - - - public DeathgazerTriggeredAbility(Effect effect, boolean optional) { - super(Zone.BATTLEFIELD, effect, optional); - } - - public DeathgazerTriggeredAbility(final DeathgazerTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.BLOCKER_DECLARED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getSourceId().equals(this.getSourceId())) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null && !permanent.getColor(game).isBlack()) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - } - return true; - } - } - if (event.getTargetId().equals(this.getSourceId())) { - Permanent permanent = game.getPermanent(event.getSourceId()); - if (permanent != null && !permanent.getColor(game).isBlack()) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getSourceId())); - } - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever {this} blocks or becomes blocked by a nonblack creature, " + super.getRule(); - } - - @Override - public DeathgazerTriggeredAbility copy() { - return new DeathgazerTriggeredAbility(this); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ninthedition/ViashinoSandstalker.java b/Mage.Sets/src/mage/sets/ninthedition/ViashinoSandstalker.java index e506714d39..c769466b30 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/ViashinoSandstalker.java +++ b/Mage.Sets/src/mage/sets/ninthedition/ViashinoSandstalker.java @@ -29,17 +29,14 @@ package mage.sets.ninthedition; import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; +import mage.constants.TargetController; import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; /** * @@ -61,8 +58,8 @@ public class ViashinoSandstalker extends CardImpl { this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, return Viashino Sandstalker to its owner's hand. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), false)); - + this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), + TargetController.ANY, false)); } public ViashinoSandstalker(final ViashinoSandstalker card) { @@ -74,34 +71,3 @@ public class ViashinoSandstalker extends CardImpl { return new ViashinoSandstalker(this); } } - -class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl { - - public BeginningOfEndStepTriggeredAbility(Effect effect, boolean optional) { - super(Zone.BATTLEFIELD, effect, optional); - } - - public BeginningOfEndStepTriggeredAbility(final BeginningOfEndStepTriggeredAbility ability) { - super(ability); - } - - @Override - public BeginningOfEndStepTriggeredAbility copy() { - return new BeginningOfEndStepTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.END_TURN_STEP_PRE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return true; - } - - @Override - public String getRule() { - return "At the beginning of the end step, return {this} to its owner's hand"; - } -} diff --git a/Mage.Sets/src/mage/sets/ninthedition/ZealousInquisitor.java b/Mage.Sets/src/mage/sets/ninthedition/ZealousInquisitor.java new file mode 100644 index 0000000000..f5053a18f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ninthedition/ZealousInquisitor.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.ninthedition; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RedirectDamageFromSourceToTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ZealousInquisitor extends CardImpl { + + public ZealousInquisitor(UUID ownerId) { + super(ownerId, 57, "Zealous Inquisitor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "9ED"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {1}{W}: The next 1 damage that would be dealt to Zealous Inquisitor this turn is dealt to target creature instead. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RedirectDamageFromSourceToTargetEffect(Duration.EndOfTurn, 1, true), new ManaCostsImpl("{1}{W}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public ZealousInquisitor(final ZealousInquisitor card) { + super(card); + } + + @Override + public ZealousInquisitor copy() { + return new ZealousInquisitor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/DivineSacrament.java b/Mage.Sets/src/mage/sets/odyssey/DivineSacrament.java index 0758743b18..c6650039d9 100644 --- a/Mage.Sets/src/mage/sets/odyssey/DivineSacrament.java +++ b/Mage.Sets/src/mage/sets/odyssey/DivineSacrament.java @@ -32,8 +32,7 @@ import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInControllerGraveCondition; -import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.common.AddContinuousEffectToGame; +import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -63,8 +62,8 @@ public class DivineSacrament extends CardImpl { Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)); this.addAbility(ability); // Threshold - White creatures get an additional +1/+1 as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalOneShotEffect( - new AddContinuousEffectToGame(new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)), + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false), new CardsInControllerGraveCondition(7), "Threshold - If seven or more cards are in your graveyard, white creatures get an additional +1/+1." )); diff --git a/Mage.Sets/src/mage/sets/onslaught/ConvalescentCare.java b/Mage.Sets/src/mage/sets/onslaught/ConvalescentCare.java new file mode 100644 index 0000000000..691e8fe9b2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/ConvalescentCare.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.onslaught; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.game.Game; + +/** + * + * @author fireshoes + */ +public class ConvalescentCare extends CardImpl { + + public ConvalescentCare(UUID ownerId) { + super(ownerId, 14, "Convalescent Care", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{W}"); + this.expansionSetCode = "ONS"; + + // At the beginning of your upkeep, if you have 5 or less life, you gain 3 life and draw a card. + Effect effect = new DrawCardSourceControllerEffect(1); + TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(3), TargetController.YOU, false); + ability.addEffect(effect); + this.addAbility(new ConditionalTriggeredAbility(ability, new FiveOrLessLifeCondition(), "At the beginning of your upkeep, if you have 5 or less life, you gain 3 life and draw a card.")); + } + + public ConvalescentCare(final ConvalescentCare card) { + super(card); + } + + @Override + public ConvalescentCare copy() { + return new ConvalescentCare(this); + } + + class FiveOrLessLifeCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + return game.getPlayer(source.getControllerId()).getLife() <= 5; + } + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/ElvishPathcutter.java b/Mage.Sets/src/mage/sets/onslaught/ElvishPathcutter.java new file mode 100644 index 0000000000..b78333c95a --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/ElvishPathcutter.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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.ForestwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ElvishPathcutter extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Elf creature"); + + static { + filter.add(new SubtypePredicate("Elf")); + } + + public ElvishPathcutter(UUID ownerId) { + super(ownerId, 256, "Elvish Pathcutter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Elf"); + this.subtype.add("Scout"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {2}{G}: Target Elf creature gains forestwalk until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(new ForestwalkAbility(), Duration.EndOfTurn), new ManaCostsImpl("{2}{G}")); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public ElvishPathcutter(final ElvishPathcutter card) { + super(card); + } + + @Override + public ElvishPathcutter copy() { + return new ElvishPathcutter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/ErraticExplosion.java b/Mage.Sets/src/mage/sets/onslaught/ErraticExplosion.java new file mode 100644 index 0000000000..d41a0f9f88 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/ErraticExplosion.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.onslaught; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class ErraticExplosion extends mage.sets.planechase2012.ErraticExplosion { + + public ErraticExplosion(UUID ownerId) { + super(ownerId); + this.cardNumber = 201; + this.expansionSetCode = "ONS"; + } + + public ErraticExplosion(final ErraticExplosion card) { + super(card); + } + + @Override + public ErraticExplosion copy() { + return new ErraticExplosion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java index 921db990ae..df761c9c72 100644 --- a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java +++ b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java @@ -29,7 +29,6 @@ package mage.sets.phyrexiavsthecoalition; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; @@ -42,6 +41,7 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.HornetToken; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; @@ -73,33 +73,33 @@ public class HornetCannon extends CardImpl { } class HornetCannonEffect extends OneShotEffect { - + public HornetCannonEffect() { super(Outcome.PutCreatureInPlay); staticText = "Put a 1/1 colorless Insect artifact creature token with flying and haste named Hornet onto the battlefield. Destroy it at the beginning of the next end step."; } - + public HornetCannonEffect(final HornetCannonEffect effect) { super(effect); } - + @Override public HornetCannonEffect copy() { return new HornetCannonEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Token hornetToken = new HornetToken(); hornetToken.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - - DestroyTargetEffect destroyEffect = new DestroyTargetEffect("destroy the token."); - destroyEffect.setTargetPointer(new FixedTarget(hornetToken.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(destroyEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + for (UUID tokenId : hornetToken.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + DestroyTargetEffect destroyEffect = new DestroyTargetEffect(false); + destroyEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(destroyEffect), source); + } + } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/planarchaos/FungalBehemoth.java b/Mage.Sets/src/mage/sets/planarchaos/FungalBehemoth.java index 7317d947f4..d701c130fe 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/FungalBehemoth.java +++ b/Mage.Sets/src/mage/sets/planarchaos/FungalBehemoth.java @@ -44,6 +44,7 @@ import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -122,7 +123,7 @@ class P1P1CountersOnControlledCreaturesCount implements DynamicValue { @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { int count = 0; - for (Permanent permanent :game.getBattlefield().getAllActivePermanents(CardType.CREATURE)) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), sourceAbility.getControllerId(), game)) { count += permanent.getCounters().getCount(CounterType.P1P1); } return count; diff --git a/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java b/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java index d3107a9bfb..4e45cd7b79 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java +++ b/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java @@ -166,7 +166,7 @@ class IntetTheDreamerCastEffect extends AsThoughEffectImpl { return controller.chooseUse(outcome, "Play " + card.getName() + "?", source, game); } } else { - controller.setCastSourceIdWithAlternateMana(objectId, null); + controller.setCastSourceIdWithAlternateMana(objectId, null, null); return true; } } diff --git a/Mage.Sets/src/mage/sets/planechase2012/ErraticExplosion.java b/Mage.Sets/src/mage/sets/planechase2012/ErraticExplosion.java new file mode 100644 index 0000000000..702660e5ae --- /dev/null +++ b/Mage.Sets/src/mage/sets/planechase2012/ErraticExplosion.java @@ -0,0 +1,121 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.planechase2012; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardsImpl; +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; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author nigelzor + */ +public class ErraticExplosion extends CardImpl { + + public ErraticExplosion(UUID ownerId) { + super(ownerId, 41, "Erratic Explosion", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{R}"); + this.expansionSetCode = "PC2"; + + // Choose target creature or player. Reveal cards from the top of your library until you reveal a nonland card. Erratic Explosion deals damage equal to that card's converted mana cost to that creature or player. Put the revealed cards on the bottom of your library in any order. + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + this.getSpellAbility().addEffect(new ErraticExplosionEffect()); + } + + public ErraticExplosion(final ErraticExplosion card) { + super(card); + } + + @Override + public ErraticExplosion copy() { + return new ErraticExplosion(this); + } +} + +class ErraticExplosionEffect extends OneShotEffect { + + public ErraticExplosionEffect() { + super(Outcome.Damage); + this.staticText = "Choose target creature or player. Reveal cards from the top of your library until you reveal a nonland card. {this} deals damage equal to that card's converted mana cost to that creature or player. Put the revealed cards on the bottom of your library in any order"; + } + + public ErraticExplosionEffect(ErraticExplosionEffect effect) { + super(effect); + } + + @Override + public ErraticExplosionEffect copy() { + return new ErraticExplosionEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (controller != null && sourceObject != null) { + CardsImpl toReveal = new CardsImpl(); + boolean nonLandFound = false; + Card nonLandCard = null; + + while (nonLandFound && controller.getLibrary().size() > 0) { + nonLandCard = controller.getLibrary().removeFromTop(game); + toReveal.add(nonLandCard); + nonLandFound = nonLandCard.getCardType().contains(CardType.LAND); + } + // reveal cards + if (!toReveal.isEmpty()) { + controller.revealCards(sourceObject.getIdName(), toReveal, game); + } + // the nonland card + if (nonLandCard != null) { + Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); + if (targetCreature != null) { + targetCreature.damage(nonLandCard.getManaCost().convertedManaCost(), source.getSourceId(), game, false, true); + } else { + Player targetPlayer = game.getPlayer(this.getTargetPointer().getFirst(game, source)); + if (targetPlayer != null) { + targetPlayer.damage(nonLandCard.getManaCost().convertedManaCost(), source.getSourceId(), game, false, true); + } + } + } + // put the cards on the bottom of the library in any order + return controller.putCardsOnBottomOfLibrary(toReveal, game, source, true); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java b/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java index 81f8242dc1..b7038bd470 100644 --- a/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java +++ b/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java @@ -28,21 +28,14 @@ package mage.sets.planechase2012; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.ruleModifying.CastOnlyIfYouHaveCastAnotherSpellEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.watchers.common.CastSpellLastTurnWatcher; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; /** * @@ -55,7 +48,6 @@ public class IllusoryAngel extends CardImpl { this.expansionSetCode = "PC2"; this.subtype.add("Angel"); this.subtype.add("Illusion"); - this.power = new MageInt(4); this.toughness = new MageInt(4); @@ -63,7 +55,7 @@ public class IllusoryAngel extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Cast Illusory Angel only if you've cast another spell this turn. - this.addAbility(new SimpleStaticAbility(Zone.ALL, new IllusoryAngelEffect())); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new CastOnlyIfYouHaveCastAnotherSpellEffect())); } public IllusoryAngel(final IllusoryAngel card) { @@ -75,36 +67,3 @@ public class IllusoryAngel extends CardImpl { return new IllusoryAngel(this); } } - -class IllusoryAngelEffect extends ContinuousRuleModifyingEffectImpl { - IllusoryAngelEffect() { - super(Duration.EndOfGame, Outcome.Detriment); - staticText = "Cast {this} only if you've cast another spell this turn"; - } - - IllusoryAngelEffect(final IllusoryAngelEffect effect) { - super(effect); - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.CAST_SPELL; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getSourceId().equals(source.getSourceId())) { - CastSpellLastTurnWatcher watcher = (CastSpellLastTurnWatcher) game.getState().getWatchers().get("CastSpellLastTurnWatcher"); - if (watcher != null && watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(source.getControllerId()) == 0) { - return true; - } - } - return false; - - } - - @Override - public IllusoryAngelEffect copy() { - return new IllusoryAngelEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/portal/SymbolOfUnsummoning.java b/Mage.Sets/src/mage/sets/portal/SymbolOfUnsummoning.java new file mode 100644 index 0000000000..271b7bb144 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portal/SymbolOfUnsummoning.java @@ -0,0 +1,64 @@ +/* + * 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.portal; + +import java.util.UUID; + +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author nigelzor + */ +public class SymbolOfUnsummoning extends CardImpl { + + public SymbolOfUnsummoning(UUID ownerId) { + super(ownerId, 71, "Symbol of Unsummoning", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{U}"); + this.expansionSetCode = "POR"; + + // Return target creature to its owner's hand. + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public SymbolOfUnsummoning(final SymbolOfUnsummoning card) { + super(card); + } + + @Override + public SymbolOfUnsummoning copy() { + return new SymbolOfUnsummoning(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portalsecondage/DeathcoilWurm.java b/Mage.Sets/src/mage/sets/portalsecondage/DeathcoilWurm.java new file mode 100644 index 0000000000..8838303696 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portalsecondage/DeathcoilWurm.java @@ -0,0 +1,62 @@ +/* + * 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.portalsecondage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DamageAsThoughNotBlockedAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author nigelzor + */ +public class DeathcoilWurm extends CardImpl { + + public DeathcoilWurm(UUID ownerId) { + super(ownerId, 65, "Deathcoil Wurm", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}{G}{G}"); + this.expansionSetCode = "PO2"; + this.subtype.add("Wurm"); + this.power = new MageInt(7); + this.toughness = new MageInt(6); + + // You may have Deathcoil Wurm assign its combat damage as though it weren't blocked. + this.addAbility(DamageAsThoughNotBlockedAbility.getInstance()); + } + + public DeathcoilWurm(final DeathcoilWurm card) { + super(card); + } + + @Override + public DeathcoilWurm copy() { + return new DeathcoilWurm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/prophecy/InfernalGenesis.java b/Mage.Sets/src/mage/sets/prophecy/InfernalGenesis.java index 166bde321c..9bcd7e9778 100644 --- a/Mage.Sets/src/mage/sets/prophecy/InfernalGenesis.java +++ b/Mage.Sets/src/mage/sets/prophecy/InfernalGenesis.java @@ -31,7 +31,6 @@ import java.util.UUID; import mage.constants.*; import mage.MageInt; -import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -51,7 +50,6 @@ public class InfernalGenesis extends CardImpl { super(ownerId, 68, "Infernal Genesis", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}{B}"); this.expansionSetCode = "PCY"; - // At the beginning of each player's upkeep, that player puts the top card of his or her library into his or her graveyard. Then he or she puts X 1/1 black Minion creature tokens onto the battlefield, where X is that card's converted mana cost. this.addAbility(new BeginningOfUpkeepTriggeredAbility(new InfernalGenesisEffect(), TargetController.ANY, false)); } @@ -81,9 +79,9 @@ class InfernalGenesisEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); if (player != null) { - Card card = player.getLibrary().removeFromTop(game); + Card card = player.getLibrary().getFromTop(game); if (card != null) { - if (player.moveCards(card, Zone.LIBRARY, Zone.GRAVEYARD, source, game)) { + if (player.moveCards(card, Zone.GRAVEYARD, source, game)) { int cmc = card.getManaCost().convertedManaCost(); MinionToken token = new MinionToken(); token.putOntoBattlefield(cmc, game, source.getSourceId(), player.getId()); diff --git a/Mage.Sets/src/mage/sets/prophecy/JolraelEmpressOfBeasts.java b/Mage.Sets/src/mage/sets/prophecy/JolraelEmpressOfBeasts.java index b2c681bde0..835d232934 100644 --- a/Mage.Sets/src/mage/sets/prophecy/JolraelEmpressOfBeasts.java +++ b/Mage.Sets/src/mage/sets/prophecy/JolraelEmpressOfBeasts.java @@ -45,7 +45,7 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.FilterPermanent; import mage.filter.common.FilterLandPermanent; -import mage.filter.predicate.other.PlayerIdPredicate; +import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; import mage.game.permanent.token.Token; import mage.players.Player; @@ -106,7 +106,7 @@ class JolraelEmpressOfBeastsEffect extends OneShotEffect { Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); if (targetPlayer != null) { FilterPermanent filter = new FilterLandPermanent(); - filter.add(new PlayerIdPredicate(targetPlayer.getId())); + filter.add(new ControllerIdPredicate(targetPlayer.getId())); game.addEffect(new BecomesCreatureAllEffect(new JolraelLandsToken(), "lands", filter, Duration.EndOfTurn), source); return true; } diff --git a/Mage.Sets/src/mage/sets/ravnica/Brainspoil.java b/Mage.Sets/src/mage/sets/ravnica/Brainspoil.java new file mode 100644 index 0000000000..0ecbcfd747 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/Brainspoil.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.ravnica; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.TransmuteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.EnchantedPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class Brainspoil extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature that isn't enchanted"); + + static { + filter.add(Predicates.not(new EnchantedPredicate())); + } + + public Brainspoil(UUID ownerId) { + super(ownerId, 78, "Brainspoil", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{B}{B}"); + this.expansionSetCode = "RAV"; + + // Destroy target creature that isn't enchanted. It can't be regenerated. + this.getSpellAbility().addEffect(new DestroyTargetEffect(true)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + + // Transmute {1}{B}{B} + this.addAbility(new TransmuteAbility("{1}{B}{B}")); + } + + public Brainspoil(final Brainspoil card) { + super(card); + } + + @Override + public Brainspoil copy() { + return new Brainspoil(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/ConcertedEffort.java b/Mage.Sets/src/mage/sets/ravnica/ConcertedEffort.java index 672cfe903e..f4998a9b5b 100644 --- a/Mage.Sets/src/mage/sets/ravnica/ConcertedEffort.java +++ b/Mage.Sets/src/mage/sets/ravnica/ConcertedEffort.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.DoubleStrikeAbility; import mage.abilities.keyword.FearAbility; import mage.abilities.keyword.FirstStrikeAbility; @@ -46,7 +46,7 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; import mage.game.permanent.Permanent; @@ -76,15 +76,16 @@ public class ConcertedEffort extends CardImpl { } class ConcertedEffortEffect extends OneShotEffect { - - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterFear = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterFirstStrike = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterDoubleStrike = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterLandwalk = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterProtection = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterTrample = new FilterCreaturePermanent(); - private static final FilterCreaturePermanent filterVigilance = new FilterCreaturePermanent(); + + private static final FilterControlledCreaturePermanent filterFlying = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterFear = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterFirstStrike = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterDoubleStrike = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterLandwalk = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterProtection = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterTrample = new FilterControlledCreaturePermanent(); + private static final FilterControlledCreaturePermanent filterVigilance = new FilterControlledCreaturePermanent(); + static { filterFlying.add(new AbilityPredicate(FlyingAbility.class)); filterFear.add(new AbilityPredicate(FearAbility.class)); @@ -95,69 +96,69 @@ class ConcertedEffortEffect extends OneShotEffect { filterTrample.add(new AbilityPredicate(TrampleAbility.class)); filterVigilance.add(new AbilityPredicate(VigilanceAbility.class)); } - + ConcertedEffortEffect() { super(Outcome.BoostCreature); this.staticText = "creatures you control gain flying until end of turn if a creature you control has flying. The same is true for fear, first strike, double strike, landwalk, protection, trample, and vigilance"; } - + ConcertedEffortEffect(final ConcertedEffortEffect effect) { super(effect); } - + @Override public ConcertedEffortEffect copy() { return new ConcertedEffortEffect(this); } - + @Override public boolean apply(Game game, Ability source) { // Flying if (game.getBattlefield().contains(filterFlying, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), source); } - + // Fear if (game.getBattlefield().contains(filterFear, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityAllEffect(FearAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(FearAbility.getInstance(), Duration.EndOfTurn), source); } - + // First strike if (game.getBattlefield().contains(filterFirstStrike, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), source); } - - // Double strike + + // Double strike if (game.getBattlefield().contains(filterDoubleStrike, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityAllEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn), source); } - + // Landwalk for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filterLandwalk, source.getControllerId(), game)) { for (Ability ability : permanent.getAbilities(game)) { if (ability instanceof LandwalkAbility) { - game.addEffect(new GainAbilityAllEffect(ability, Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn), source); } } } - + // Protection for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filterProtection, source.getControllerId(), game)) { for (Ability ability : permanent.getAbilities(game)) { if (ability instanceof ProtectionAbility) { - game.addEffect(new GainAbilityAllEffect(ability, Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn), source); } } } - + // Trample if (game.getBattlefield().contains(filterTrample, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityAllEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), source); } - + // Vigilance if (game.getBattlefield().contains(filterVigilance, source.getControllerId(), 1, game)) { - game.addEffect(new GainAbilityAllEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn), source); } return true; } diff --git a/Mage.Sets/src/mage/sets/ravnica/SavraQueenOfTheGolgari.java b/Mage.Sets/src/mage/sets/ravnica/SavraQueenOfTheGolgari.java new file mode 100644 index 0000000000..a3521d9cbd --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/SavraQueenOfTheGolgari.java @@ -0,0 +1,194 @@ +/* + * 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.ravnica; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class SavraQueenOfTheGolgari extends CardImpl { + + public SavraQueenOfTheGolgari(UUID ownerId) { + super(ownerId, 225, "Savra, Queen of the Golgari", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}{G}"); + this.expansionSetCode = "RAV"; + this.supertype.add("Legendary"); + this.subtype.add("Elf"); + this.subtype.add("Shaman"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever you sacrifice a black creature, you may pay 2 life. If you do, each other player sacrifices a creature. + this.addAbility(new SavraSacrificeBlackCreatureAbility()); + + // Whenever you sacrifice a green creature, you may gain 2 life. + this.addAbility(new SavraSacrificeGreenCreatureAbility()); + } + + public SavraQueenOfTheGolgari(final SavraQueenOfTheGolgari card) { + super(card); + } + + @Override + public SavraQueenOfTheGolgari copy() { + return new SavraQueenOfTheGolgari(this); + } +} + +class SavraSacrificeBlackCreatureAbility extends TriggeredAbilityImpl { + + public SavraSacrificeBlackCreatureAbility() { + super(Zone.BATTLEFIELD, new DoIfCostPaid(new SavraSacrificeEffect(), new PayLifeCost(2))); + this.addTarget(new TargetCreatureOrPlayer()); + } + + public SavraSacrificeBlackCreatureAbility(final SavraSacrificeBlackCreatureAbility ability) { + super(ability); + } + + @Override + public SavraSacrificeBlackCreatureAbility copy() { + return new SavraSacrificeBlackCreatureAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.SACRIFICED_PERMANENT; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getPlayerId().equals(this.getControllerId()) + && game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD).getCardType().contains(CardType.CREATURE) + && game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD).getColor(game).isBlack(); + } + + @Override + public String getRule() { + return "Whenever you sacrifice a black creature, " + super.getRule(); + } +} + +class SavraSacrificeEffect extends OneShotEffect { + + public SavraSacrificeEffect() { + super(Outcome.Sacrifice); + this.staticText = "each other player sacrifices a creature"; + } + + public SavraSacrificeEffect(final SavraSacrificeEffect effect) { + super(effect); + } + + @Override + public SavraSacrificeEffect copy() { + return new SavraSacrificeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + List perms = new ArrayList<>(); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (UUID playerId : controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null && !playerId.equals(source.getControllerId())) { + TargetControlledCreaturePermanent target = new TargetControlledCreaturePermanent(); + target.setNotTarget(true); + if (target.canChoose(player.getId(), game)) { + player.chooseTarget(Outcome.Sacrifice, target, source, game); + perms.addAll(target.getTargets()); + } + } + } + for (UUID permID : perms) { + Permanent permanent = game.getPermanent(permID); + if (permanent != null) { + permanent.sacrifice(source.getSourceId(), game); + } + } + return true; + } + return false; + } +} + +class SavraSacrificeGreenCreatureAbility extends TriggeredAbilityImpl { + + public SavraSacrificeGreenCreatureAbility() { + super(Zone.BATTLEFIELD, new GainLifeEffect(2)); + } + + public SavraSacrificeGreenCreatureAbility(final SavraSacrificeGreenCreatureAbility ability) { + super(ability); + } + + @Override + public SavraSacrificeGreenCreatureAbility copy() { + return new SavraSacrificeGreenCreatureAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.SACRIFICED_PERMANENT; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getPlayerId().equals(this.getControllerId()) + && game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD).getCardType().contains(CardType.CREATURE) + && game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD).getColor(game).isGreen(); + } + + @Override + public String getRule() { + return "Whenever you sacrifice a green creature, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/SelesnyaSagittars.java b/Mage.Sets/src/mage/sets/ravnica/SelesnyaSagittars.java new file mode 100644 index 0000000000..bb827afb96 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/SelesnyaSagittars.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.ravnica; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class SelesnyaSagittars extends CardImpl { + + public SelesnyaSagittars(UUID ownerId) { + super(ownerId, 229, "Selesnya Sagittars", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}{W}"); + this.expansionSetCode = "RAV"; + this.subtype.add("Elf"); + this.subtype.add("Archer"); + this.power = new MageInt(2); + this.toughness = new MageInt(5); + + // Reach + this.addAbility(ReachAbility.getInstance()); + // Selesnya Sagittars can block an additional creature. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAdditionalCreatureEffect())); + } + + public SelesnyaSagittars(final SelesnyaSagittars card) { + super(card); + } + + @Override + public SelesnyaSagittars copy() { + return new SelesnyaSagittars(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java b/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java index a199e0cfe0..ba8dd13ec2 100644 --- a/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java +++ b/Mage.Sets/src/mage/sets/ravnica/SinsOfThePast.java @@ -131,7 +131,7 @@ class SinsOfThePastCastFromGraveyardEffect extends AsThoughEffectImpl { public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { if (sourceId.equals(this.getTargetPointer().getFirst(game, source)) && affectedControllerId.equals(source.getControllerId())) { Player player = game.getPlayer(affectedControllerId); - player.setCastSourceIdWithAlternateMana(sourceId, null); + player.setCastSourceIdWithAlternateMana(sourceId, null, null); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/ravnica/SunhomeEnforcer.java b/Mage.Sets/src/mage/sets/ravnica/SunhomeEnforcer.java new file mode 100644 index 0000000000..4ea3335350 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/SunhomeEnforcer.java @@ -0,0 +1,117 @@ +/* + * 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.ravnica; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.DamagedEvent; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; + +/** + * + * @author fireshoes + */ +public class SunhomeEnforcer extends CardImpl { + + public SunhomeEnforcer(UUID ownerId) { + super(ownerId, 233, "Sunhome Enforcer", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}{W}"); + this.expansionSetCode = "RAV"; + this.subtype.add("Giant"); + this.subtype.add("Soldier"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Whenever Sunhome Enforcer deals combat damage, you gain that much life. + this.addAbility(new SunhomeEnforcerTriggeredAbility()); + + // {1}{R}: Sunhome Enforcer gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}{R}"))); + } + + public SunhomeEnforcer(final SunhomeEnforcer card) { + super(card); + } + + @Override + public SunhomeEnforcer copy() { + return new SunhomeEnforcer(this); + } +} + +class SunhomeEnforcerTriggeredAbility extends TriggeredAbilityImpl { + + public SunhomeEnforcerTriggeredAbility() { + super(Zone.BATTLEFIELD, null); + } + + public SunhomeEnforcerTriggeredAbility(final SunhomeEnforcerTriggeredAbility ability) { + super(ability); + } + + @Override + public SunhomeEnforcerTriggeredAbility copy() { + return new SunhomeEnforcerTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DAMAGED_CREATURE + || event.getType() == EventType.DAMAGED_PLAYER + || event.getType() == EventType.DAMAGED_PLANESWALKER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + DamagedEvent damageEvent = (DamagedEvent) event; + if (damageEvent.isCombatDamage()) { + if (event.getSourceId().equals(this.sourceId)) { + this.getEffects().clear(); + this.getEffects().add(new GainLifeEffect(damageEvent.getAmount())); + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} deals combat damage, you gain that much life."; + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/Terraformer.java b/Mage.Sets/src/mage/sets/ravnica/Terraformer.java index 13e1244601..9e1325f929 100644 --- a/Mage.Sets/src/mage/sets/ravnica/Terraformer.java +++ b/Mage.Sets/src/mage/sets/ravnica/Terraformer.java @@ -27,7 +27,6 @@ */ package mage.sets.ravnica; -import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; @@ -41,7 +40,8 @@ import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.WhiteManaAbility; import mage.cards.CardImpl; -import mage.choices.ChoiceImpl; +import mage.choices.Choice; +import mage.choices.ChoiceBasicLandType; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -103,15 +103,9 @@ class TerraformerEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - ChoiceImpl choices = new ChoiceImpl(true); - Set choicesSet = choices.getChoices(); - choicesSet.add("Forest"); - choicesSet.add("Plains"); - choicesSet.add("Mountain"); - choicesSet.add("Island"); - choicesSet.add("Swamp"); - if (player.choose(Outcome.Neutral, choices, game)) { - game.getState().setValue(source.getSourceId().toString() + "_Terraformer", choices.getChoice()); + Choice choice = new ChoiceBasicLandType(); + if (player.choose(Outcome.Neutral, choice, game)) { + game.getState().setValue(source.getSourceId().toString() + "_Terraformer", choice.getChoice()); } game.addEffect(new TerraformerContinuousEffect(), source); return true; diff --git a/Mage.Sets/src/mage/sets/ravnica/WizenedSnitches.java b/Mage.Sets/src/mage/sets/ravnica/WizenedSnitches.java new file mode 100644 index 0000000000..ae7d34724e --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/WizenedSnitches.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.ravnica; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.PlayWithTheTopCardRevealedEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class WizenedSnitches extends CardImpl { + + public WizenedSnitches(UUID ownerId) { + super(ownerId, 75, "Wizened Snitches", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "RAV"; + this.subtype.add("Faerie"); + this.subtype.add("Rogue"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Players play with the top card of their libraries revealed. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PlayWithTheTopCardRevealedEffect(true))); + } + + public WizenedSnitches(final WizenedSnitches card) { + super(card); + } + + @Override + public WizenedSnitches copy() { + return new WizenedSnitches(this); + } +} diff --git a/Mage.Sets/src/mage/sets/returntoravnica/ChromaticLantern.java b/Mage.Sets/src/mage/sets/returntoravnica/ChromaticLantern.java index f17b07b117..7f40206182 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/ChromaticLantern.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/ChromaticLantern.java @@ -28,14 +28,13 @@ package mage.sets.returntoravnica; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.mana.AnyColorManaAbility; import mage.cards.CardImpl; +import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterLandPermanent; @@ -51,7 +50,6 @@ public class ChromaticLantern extends CardImpl { // Lands you control have "{T}: Add one mana of any color to your mana pool." this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(new AnyColorManaAbility(), Duration.WhileOnBattlefield, new FilterLandPermanent("Lands"), false))); - // {T}: Add one mana of any color to your mana pool. this.addAbility(new AnyColorManaAbility()); @@ -66,4 +64,3 @@ public class ChromaticLantern extends CardImpl { return new ChromaticLantern(this); } } - diff --git a/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java b/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java index e656a073fb..1014b5d1a2 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java @@ -27,26 +27,26 @@ */ package mage.sets.returntoravnica; -import java.util.ArrayList; import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.Filter; import mage.filter.FilterCard; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.common.FilterInstantOrSorceryCard; import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; import mage.game.ExileZone; import mage.game.Game; import mage.players.Player; -import mage.target.common.TargetCardInExile; +import mage.target.TargetCard; /** * @@ -76,13 +76,6 @@ public class EpicExperiment extends CardImpl { class EpicExperimentEffect extends OneShotEffect { - private static final FilterCard filterStatic = new FilterCard(); - - static { - filterStatic.add(Predicates.or(new CardTypePredicate(CardType.INSTANT), - new CardTypePredicate(CardType.SORCERY))); - } - public EpicExperimentEffect() { super(Outcome.PlayForFree); staticText = "Exile the top X cards of your library. For each instant and sorcery card with converted mana cost X or less among them, you may cast that card without paying its mana cost. Then put all cards exiled this way that weren't cast into your graveyard"; @@ -95,38 +88,38 @@ class EpicExperimentEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = source.getSourceObject(game); + MageObject sourceObject = source.getSourceObject(game); if (controller != null && sourceObject != null) { // move cards from library to exile - for (int i = 0; i < source.getManaCostsToPay().getX(); i++) { - if (controller.getLibrary().size() > 0) { - Card topCard = controller.getLibrary().getFromTop(game); - controller.moveCardToExileWithInfo(topCard, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true); - } - } + controller.moveCardsToExile(controller.getLibrary().getTopCards(game, source.getManaCostsToPay().getX()), source, game, true, source.getSourceId(), sourceObject.getIdName()); // cast the possible cards without paying the mana ExileZone epicExperimentExileZone = game.getExile().getExileZone(source.getSourceId()); - FilterCard filter = filterStatic.copy(); + FilterCard filter = new FilterInstantOrSorceryCard(); filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, source.getManaCostsToPay().getX() + 1)); - filter.setMessage("instant and sorcery cards with converted mana cost "+ source.getManaCostsToPay().getX() +" or less"); - while (epicExperimentExileZone != null && epicExperimentExileZone.count(filter, game) > 0 - && controller.chooseUse(Outcome.PlayForFree, "Cast cards exiled with " + sourceObject.getLogName() + " without paying its mana cost?", source, game)) { - TargetCardInExile target = new TargetCardInExile(filter, source.getSourceId()); - while (epicExperimentExileZone.count(filter, game) > 0 && controller.choose(Outcome.PlayForFree, epicExperimentExileZone, target, game)) { - Card card = game.getCard(target.getFirstTarget()); - if (card != null) { - if (controller.cast(card.getSpellAbility(), game, true)) { - game.getExile().removeCard(card, game); - } + filter.setMessage("instant and sorcery cards with converted mana cost " + source.getManaCostsToPay().getX() + " or less"); + Cards cardsToCast = new CardsImpl(); + if (epicExperimentExileZone == null) { + return true; + } + cardsToCast.addAll(epicExperimentExileZone.getCards(filter, source.getSourceId(), source.getControllerId(), game)); + while (cardsToCast.size() > 0) { + if (!controller.chooseUse(Outcome.PlayForFree, "Cast (another) a card exiled with " + sourceObject.getLogName() + " without paying its mana cost?", source, game)) { + break; + } + TargetCard targetCard = new TargetCard(1, Zone.EXILED, new FilterCard("instant or sorcery card to cast for free")); + if (controller.choose(Outcome.PlayForFree, cardsToCast, targetCard, game)) { + Card card = game.getCard(targetCard.getFirstTarget()); + if (card != null) { + if (controller.cast(card.getSpellAbility(), game, true)) { + cardsToCast.remove(card); + } else { + game.informPlayer(controller, "You're not able to cast " + card.getIdName() + " or you canceled the casting."); } - target.clearChosen(); + } } } // move cards not cast to graveyard - ExileZone exile = game.getExile().getExileZone(source.getSourceId()); - if (exile != null) { - controller.moveCards(exile, Zone.EXILED, Zone.GRAVEYARD, source, game); - } + controller.moveCards(game.getExile().getExileZone(source.getSourceId()).getCards(game), Zone.GRAVEYARD, source, game); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/revisededition/Lifetap.java b/Mage.Sets/src/mage/sets/revisededition/Lifetap.java new file mode 100644 index 0000000000..fecddb4c9e --- /dev/null +++ b/Mage.Sets/src/mage/sets/revisededition/Lifetap.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.revisededition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Lifetap extends mage.sets.fifthedition.Lifetap { + + public Lifetap(UUID ownerId) { + super(ownerId); + this.cardNumber = 63; + this.expansionSetCode = "3ED"; + } + + public Lifetap(final Lifetap card) { + super(card); + } + + @Override + public Lifetap copy() { + return new Lifetap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/GodosIrregulars.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/GodosIrregulars.java index f346e94a31..1abf24633d 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/GodosIrregulars.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/GodosIrregulars.java @@ -39,9 +39,6 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.BlockingAttackerIdPredicate; -import mage.filter.predicate.permanent.BlockingPredicate; -import mage.game.Game; -import mage.target.Target; import mage.target.common.TargetCreaturePermanent; /** @@ -50,14 +47,6 @@ import mage.target.common.TargetCreaturePermanent; */ public class GodosIrregulars extends CardImpl { - private static final FilterCreaturePermanent basicFilter = new FilterCreaturePermanent("creature blocking it"); - - static { - basicFilter.add(new BlockingPredicate()); - } - - public UUID originalAbilityIdToAdjust; - public GodosIrregulars(UUID ownerId) { super(ownerId, 101, "Godo's Irregulars", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{R}"); this.expansionSetCode = "SOK"; @@ -69,25 +58,14 @@ public class GodosIrregulars extends CardImpl { // {R}: Godo's Irregulars deals 1 damage to target creature blocking it. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{R")); - ability.addTarget(new TargetCreaturePermanent()); - originalAbilityIdToAdjust = ability.getOriginalId(); + FilterCreaturePermanent filter = new FilterCreaturePermanent("creature blocking it"); + filter.add(new BlockingAttackerIdPredicate(this.getId())); + ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } - @Override - public void adjustTargets(Ability ability, Game game) { - if (originalAbilityIdToAdjust.equals(ability.getOriginalId())) { - ability.getTargets().clear(); - FilterCreaturePermanent filter = basicFilter.copy(); - filter.add(new BlockingAttackerIdPredicate(this.getId())); - Target target = new TargetCreaturePermanent(filter); - ability.addTarget(target); - } - } - public GodosIrregulars(final GodosIrregulars card) { super(card); - this.originalAbilityIdToAdjust = card.originalAbilityIdToAdjust; } @Override diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/SasayaOrochiAscendant.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/SasayaOrochiAscendant.java index 3804d61c11..3bc2a38c37 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/SasayaOrochiAscendant.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/SasayaOrochiAscendant.java @@ -202,22 +202,22 @@ class SasayasEssenceManaEffectEffect extends ManaEffect { } switch (choice.getChoice()) { case "Black": - newMana.increaseBlack(); + newMana.addBlack(); break; case "Blue": - newMana.increaseBlue(); + newMana.addBlue(); break; case "Red": - newMana.increaseRed(); + newMana.addRed(); break; case "Green": - newMana.increaseGreen(); + newMana.addGreen(); break; case "White": - newMana.increaseWhite(); + newMana.addWhite(); break; case "Colorless": - newMana.increaseColorless(); + newMana.addColorless(); break; } } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/KothOfTheHammer.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/KothOfTheHammer.java index 1af105c5b8..dd9e569ac9 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/KothOfTheHammer.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/KothOfTheHammer.java @@ -73,7 +73,7 @@ public class KothOfTheHammer extends CardImpl { static { filter.add(new SubtypePredicate("Mountain")); - filter.add(new ControllerPredicate(TargetController.YOU)); + filterCount.add(new SubtypePredicate("Mountain")); filterCount.add(new ControllerPredicate(TargetController.YOU)); } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/Myrsmith.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/Myrsmith.java index 7e1ebce026..845fe55962 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/Myrsmith.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/Myrsmith.java @@ -36,9 +36,8 @@ import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; -import mage.constants.Outcome; import mage.filter.common.FilterArtifactSpell; import mage.game.Game; import mage.game.permanent.token.MyrToken; @@ -71,9 +70,9 @@ public class Myrsmith extends CardImpl { } } -class MyrsmithEffect extends OneShotEffect { +class MyrsmithEffect extends CreateTokenEffect { public MyrsmithEffect() { - super(Outcome.PutCreatureInPlay); + super(new MyrToken()); staticText = "you may pay {1}. If you do, put a 1/1 colorless Myr artifact creature token onto the battlefield"; } @@ -86,7 +85,7 @@ class MyrsmithEffect extends OneShotEffect { Cost cost = new GenericManaCost(1); cost.clearPaid(); if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { - new MyrToken().putOntoBattlefield(1, game, source.getControllerId(), source.getControllerId()); + super.apply(game, source); } return true; } diff --git a/Mage.Sets/src/mage/sets/scourge/DayOfTheDragons.java b/Mage.Sets/src/mage/sets/scourge/DayOfTheDragons.java index 8ce0107426..3f3303be3c 100644 --- a/Mage.Sets/src/mage/sets/scourge/DayOfTheDragons.java +++ b/Mage.Sets/src/mage/sets/scourge/DayOfTheDragons.java @@ -27,9 +27,10 @@ */ package mage.sets.scourge; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; -import mage.MageInt; -import mage.ObjectColor; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; @@ -48,7 +49,10 @@ import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.ExileZone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentToken; import mage.game.permanent.token.DragonToken2; +import mage.players.Player; +import mage.util.CardUtil; /** * @@ -60,7 +64,6 @@ public class DayOfTheDragons extends CardImpl { super(ownerId, 31, "Day of the Dragons", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{4}{U}{U}{U}"); this.expansionSetCode = "SCG"; - // When Day of the Dragons enters the battlefield, exile all creatures you control. Then put that many 5/5 red Dragon creature tokens with flying onto the battlefield. this.addAbility(new EntersBattlefieldTriggeredAbility(new DayOfTheDragonsEntersEffect(), false)); @@ -98,18 +101,17 @@ class DayOfTheDragonsEntersEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - UUID exileId = source.getSourceId(); - int creaturesExiled = 0; - if (exileId != null) { - for (Permanent creature : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { - if (creature != null) { - if (creature.moveToExile(exileId, "Day of the Dragons", source.getSourceId(), game)) { - creaturesExiled++; - } - } + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (controller != null && sourceObject != null) { + Set toExile = new HashSet<>(); + toExile.addAll(game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)); + if (!toExile.isEmpty()) { + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); + controller.moveCardsToExile(toExile, source, game, true, exileId, sourceObject.getIdName()); + DragonToken2 token = new DragonToken2(); + token.putOntoBattlefield(toExile.size(), game, source.getSourceId(), source.getControllerId()); } - DragonToken2 token = new DragonToken2(); - token.putOntoBattlefield(creaturesExiled, game, source.getSourceId(), source.getControllerId()); return true; } return false; @@ -141,20 +143,22 @@ class DayOfTheDragonsLeavesEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - UUID exileId = source.getSourceId(); - for (Permanent dragon : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { - if (dragon != null) { - dragon.sacrifice(source.getSourceId(), game); + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null) { + for (Permanent dragon : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { + if (dragon != null) { + dragon.sacrifice(source.getSourceId(), game); + } } - } - ExileZone exile = game.getExile().getExileZone(exileId); - if (exile != null) { - exile = exile.copy(); - for (UUID cardId : exile) { - Card card = game.getCard(cardId); - card.putOntoBattlefield(game, Zone.EXILED, source.getSourceId(), source.getControllerId()); + int zoneChangeCounter = source.getSourceObjectZoneChangeCounter(); + if (zoneChangeCounter > 0 && !(sourceObject instanceof PermanentToken)) { + zoneChangeCounter--; + } + ExileZone exile = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter)); + if (exile != null) { + controller.moveCards(exile, Zone.BATTLEFIELD, source, game); } - game.getExile().getExileZone(exileId).clear(); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/scourge/ZealousInquisitor.java b/Mage.Sets/src/mage/sets/scourge/ZealousInquisitor.java new file mode 100644 index 0000000000..bc7954686e --- /dev/null +++ b/Mage.Sets/src/mage/sets/scourge/ZealousInquisitor.java @@ -0,0 +1,54 @@ +/* + * 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.scourge; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ZealousInquisitor extends mage.sets.ninthedition.ZealousInquisitor { + + public ZealousInquisitor(UUID ownerId) { + super(ownerId); + this.cardNumber = 27; + this.expansionSetCode = "SCG"; + this.rarity = Rarity.COMMON; + } + + public ZealousInquisitor(final ZealousInquisitor card) { + super(card); + } + + @Override + public ZealousInquisitor copy() { + return new ZealousInquisitor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java b/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java index 6071037d51..35bb06cb88 100644 --- a/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java +++ b/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java @@ -30,7 +30,7 @@ package mage.sets.seventhedition; import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; -import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.effects.common.DamageControllerEffect; import mage.abilities.mana.AnyColorManaAbility; import mage.cards.CardImpl; @@ -46,7 +46,7 @@ public class CityOfBrass extends CardImpl { this.expansionSetCode = "7ED"; // Whenever City of Brass becomes tapped, it deals 1 damage to you. - this.addAbility(new BecomesTappedTriggeredAbility(new DamageControllerEffect(1))); + this.addAbility(new BecomesTappedSourceTriggeredAbility(new DamageControllerEffect(1))); // {tap}: Add one mana of any color to your mana pool. this.addAbility(new AnyColorManaAbility()); diff --git a/Mage.Sets/src/mage/sets/seventhedition/Thoughtleech.java b/Mage.Sets/src/mage/sets/seventhedition/Thoughtleech.java index 2354dc80e4..1650ce93e7 100644 --- a/Mage.Sets/src/mage/sets/seventhedition/Thoughtleech.java +++ b/Mage.Sets/src/mage/sets/seventhedition/Thoughtleech.java @@ -28,16 +28,15 @@ package mage.sets.seventhedition; import java.util.UUID; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BecomesTappedTriggeredAbility; import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent.EventType; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; /** * @@ -46,12 +45,19 @@ import mage.game.permanent.Permanent; */ public class Thoughtleech extends CardImpl { + private static final FilterPermanent filter = new FilterPermanent("an Island an opponent controls"); + + static { + filter.add(new SubtypePredicate("Island")); + filter.add(new ControllerPredicate(TargetController.OPPONENT)); + } + public Thoughtleech(UUID ownerId) { super(ownerId, 274, "Thoughtleech", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}"); this.expansionSetCode = "7ED"; // Whenever an Island an opponent controls becomes tapped, you may gain 1 life. - this.addAbility(new ThoughtleechTriggeredAbility()); + this.addAbility(new BecomesTappedTriggeredAbility(new GainLifeEffect(1), true, filter)); } public Thoughtleech(final Thoughtleech card) { @@ -63,39 +69,3 @@ public class Thoughtleech extends CardImpl { return new Thoughtleech(this); } } - -class ThoughtleechTriggeredAbility extends TriggeredAbilityImpl { - - ThoughtleechTriggeredAbility() { - super(Zone.BATTLEFIELD, new GainLifeEffect(1), true); - } - - ThoughtleechTriggeredAbility(final ThoughtleechTriggeredAbility ability) { - super(ability); - } - - @Override - public ThoughtleechTriggeredAbility copy() { - return new ThoughtleechTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.TAPPED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent p = game.getPermanent(event.getTargetId()); - if(p != null && p.getSubtype().contains("Island")) { - if(game.getOpponents(this.controllerId).contains(p.getControllerId())) - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever an Island an opponent controls becomes tapped, " + modes.getText(); - } -} diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java b/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java index 7d06f99630..13c125f5bf 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java @@ -30,7 +30,6 @@ package mage.sets.shadowmoor; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -65,7 +64,6 @@ public class ElementalMastery extends CardImpl { this.expansionSetCode = "SHM"; this.subtype.add("Aura"); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); @@ -110,16 +108,17 @@ class ElementalMasteryEffect extends OneShotEffect { Permanent creatureAttached = game.getPermanent(source.getSourceId()); if (creatureAttached != null) { int power = creatureAttached.getPower().getValue(); - for (int i = 0; i < power; i++) { + if (power > 0) { ElementalToken token = new ElementalToken(); - token.putOntoBattlefield(1, game, creatureAttached.getId(), creatureAttached.getControllerId()); - ExileTargetEffect exileEffect = new ExileTargetEffect("exile the token"); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + token.putOntoBattlefield(power, game, creatureAttached.getId(), creatureAttached.getControllerId()); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } } return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ElsewhereFlask.java b/Mage.Sets/src/mage/sets/shadowmoor/ElsewhereFlask.java index ae8d945447..b370c7dc87 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/ElsewhereFlask.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/ElsewhereFlask.java @@ -27,7 +27,6 @@ */ package mage.sets.shadowmoor; -import java.util.Set; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -42,7 +41,8 @@ import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.WhiteManaAbility; import mage.cards.CardImpl; -import mage.choices.ChoiceImpl; +import mage.choices.Choice; +import mage.choices.ChoiceBasicLandType; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -103,15 +103,9 @@ class ElsewhereFlaskEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - ChoiceImpl choices = new ChoiceImpl(true); - Set choicesSet = choices.getChoices(); - choicesSet.add("Forest"); - choicesSet.add("Plains"); - choicesSet.add("Mountain"); - choicesSet.add("Island"); - choicesSet.add("Swamp"); - if (player.choose(Outcome.Neutral, choices, game)) { - game.getState().setValue(source.getSourceId().toString() + "_ElsewhereFlask", choices.getChoice()); + Choice choice = new ChoiceBasicLandType(); + if (player.choose(Outcome.Neutral, choice, game)) { + game.getState().setValue(source.getSourceId().toString() + "_ElsewhereFlask", choice.getChoice()); } game.addEffect(new ElsewhereFlaskContinuousEffect(), source); return true; diff --git a/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java b/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java index 146c80a3a3..38482fdf37 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java @@ -30,7 +30,6 @@ package mage.sets.shadowmoor; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileTargetEffect; @@ -41,6 +40,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; @@ -92,13 +92,14 @@ class GiantbaitingEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Token token = new GiantWarriorToken(); if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) { - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } return false; diff --git a/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java b/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java index f2b8a590be..018b0eebfd 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java @@ -1,126 +1,111 @@ -/* - * 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.shadowmoor; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.ReachAbility; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.permanent.token.Token; -import mage.target.TargetPermanent; - -/** - * - * @author jeffwadsworth - */ -public class GloomwidowsFeast extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - - public GloomwidowsFeast(UUID ownerId) { - super(ownerId, 118, "Gloomwidow's Feast", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{G}"); - this.expansionSetCode = "SHM"; - - - // Destroy target creature with flying. If that creature was blue or black, put a 1/2 green Spider creature token with reach onto the battlefield. - this.getSpellAbility().addEffect(new GloomwidowsFeastEffect()); - this.getSpellAbility().addTarget(new TargetPermanent(filter)); - - } - - public GloomwidowsFeast(final GloomwidowsFeast card) { - super(card); - } - - @Override - public GloomwidowsFeast copy() { - return new GloomwidowsFeast(this); - } -} - -class GloomwidowsFeastEffect extends OneShotEffect { - - boolean applied = false; - - public GloomwidowsFeastEffect() { - super(Outcome.DestroyPermanent); - this.staticText = "Destroy target creature with flying. If that creature was blue or black, put a 1/2 green Spider creature token with reach onto the battlefield"; - } - - public GloomwidowsFeastEffect(final GloomwidowsFeastEffect effect) { - super(effect); - } - - @Override - public GloomwidowsFeastEffect copy() { - return new GloomwidowsFeastEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(source.getFirstTarget()); - if (targetCreature != null) { - targetCreature.destroy(source.getSourceId(), game, false); - Permanent destroyedCreature = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); - if (destroyedCreature.getColor(game).isBlue() - || destroyedCreature.getColor(game).isBlack()) { - SpiderToken token = new SpiderToken(); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - return true; - } - } - return false; - } -} - -class SpiderToken extends Token { - - public SpiderToken() { - super("Spider", "1/2 green Spider creature token with reach"); - cardType.add(CardType.CREATURE); - color.setGreen(true); - subtype.add("Spider"); - power = new MageInt(1); - toughness = new MageInt(2); - addAbility(ReachAbility.getInstance()); - } -} +/* + * 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.shadowmoor; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.SpiderToken; +import mage.target.TargetPermanent; + +/** + * + * @author jeffwadsworth + */ +public class GloomwidowsFeast extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature with flying"); + + static { + filter.add(new AbilityPredicate(FlyingAbility.class)); + } + + public GloomwidowsFeast(UUID ownerId) { + super(ownerId, 118, "Gloomwidow's Feast", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{3}{G}"); + this.expansionSetCode = "SHM"; + + + // Destroy target creature with flying. If that creature was blue or black, put a 1/2 green Spider creature token with reach onto the battlefield. + this.getSpellAbility().addEffect(new GloomwidowsFeastEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + + } + + public GloomwidowsFeast(final GloomwidowsFeast card) { + super(card); + } + + @Override + public GloomwidowsFeast copy() { + return new GloomwidowsFeast(this); + } +} + +class GloomwidowsFeastEffect extends OneShotEffect { + + boolean applied = false; + + public GloomwidowsFeastEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Destroy target creature with flying. If that creature was blue or black, put a 1/2 green Spider creature token with reach onto the battlefield"; + } + + public GloomwidowsFeastEffect(final GloomwidowsFeastEffect effect) { + super(effect); + } + + @Override + public GloomwidowsFeastEffect copy() { + return new GloomwidowsFeastEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent targetCreature = game.getPermanent(source.getFirstTarget()); + if (targetCreature != null) { + targetCreature.destroy(source.getSourceId(), game, false); + Permanent destroyedCreature = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); + if (destroyedCreature.getColor(game).isBlue() + || destroyedCreature.getColor(game).isBlack()) { + SpiderToken token = new SpiderToken(); + token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ManaforgeCinder.java b/Mage.Sets/src/mage/sets/shadowmoor/ManaforgeCinder.java index 5501ab9ade..c650a49008 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/ManaforgeCinder.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/ManaforgeCinder.java @@ -114,10 +114,10 @@ class ManaforgeCinderManaEffect extends OneShotEffect { } switch (manaChoice.getChoice()) { case "Black": - mana.increaseBlack(); + mana.addBlack(); break; case "Red": - mana.increaseRed(); + mana.addRed(); break; } controller.getManaPool().addMana(mana, game, source); diff --git a/Mage.Sets/src/mage/sets/shadowmoor/MedicineRunner.java b/Mage.Sets/src/mage/sets/shadowmoor/MedicineRunner.java index 002c393ef7..5c122ca7ae 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/MedicineRunner.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/MedicineRunner.java @@ -27,29 +27,19 @@ */ package mage.sets.shadowmoor; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.RemoveCounterTargetEffect; import mage.cards.CardImpl; -import mage.choices.Choice; -import mage.choices.ChoiceImpl; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.counters.Counter; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.TargetPermanent; /** * - * @author jeffwadsworth using code from LevelX + * @author jeffwadsworth */ public class MedicineRunner extends CardImpl { @@ -77,75 +67,3 @@ public class MedicineRunner extends CardImpl { return new MedicineRunner(this); } } - -class RemoveCounterTargetEffect extends OneShotEffect { - - private CounterType counterTypeToRemove; - - public RemoveCounterTargetEffect() { - super(Outcome.Detriment); - this.staticText = "remove a counter from target permanent"; - } - - public RemoveCounterTargetEffect(CounterType counterTypeToRemove) { - super(Outcome.Detriment); - this.staticText = "remove a " + counterTypeToRemove.getName() + " counter from target permanent"; - this.counterTypeToRemove = counterTypeToRemove; - } - - public RemoveCounterTargetEffect(final RemoveCounterTargetEffect effect) { - super(effect); - this.counterTypeToRemove = effect.counterTypeToRemove; - } - - @Override - public RemoveCounterTargetEffect copy() { - return new RemoveCounterTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - boolean result = false; - Player controller = game.getPlayer(source.getControllerId()); - for (UUID targetId : getTargetPointer().getTargets(game, source)) { - Permanent permanent = game.getPermanent(targetId); - if (permanent != null) { - if (permanent.getCounters().size() > 0 && (counterTypeToRemove == null || permanent.getCounters().containsKey(counterTypeToRemove))) { - String counterName = null; - if (counterTypeToRemove != null) { - counterName = counterTypeToRemove.getName(); - } else { - if (permanent.getCounters().size() > 1 && counterTypeToRemove == null) { - Choice choice = new ChoiceImpl(true); - Set choices = new HashSet<>(); - for (Counter counter : permanent.getCounters().values()) { - if (permanent.getCounters().getCount(counter.getName()) > 0) { - choices.add(counter.getName()); - } - } - choice.setChoices(choices); - choice.setMessage("Choose a counter type to remove from " + permanent.getName()); - controller.choose(Outcome.Detriment, choice, game); - counterName = choice.getChoice(); - } else { - for (Counter counter : permanent.getCounters().values()) { - if (counter.getCount() > 0) { - counterName = counter.getName(); - } - } - } - } - if (counterName != null) { - permanent.removeCounters(counterName, 1, game); - if (permanent.getCounters().getCount(counterName) == 0) { - permanent.getCounters().removeCounter(counterName); - } - result |= true; - game.informPlayers(new StringBuilder(controller.getLogName()).append(" removes a ").append(counterName).append(" counter from ").append(permanent.getName()).toString()); - } - } - } - } - return result; - } -} diff --git a/Mage.Sets/src/mage/sets/shardsofalara/HinderingLight.java b/Mage.Sets/src/mage/sets/shardsofalara/HinderingLight.java index cd0dbc8e7f..7726f3ab80 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/HinderingLight.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/HinderingLight.java @@ -28,11 +28,12 @@ package mage.sets.shardsofalara; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; +import mage.abilities.Mode; import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.filter.FilterSpell; import mage.filter.predicate.ObjectPlayer; import mage.filter.predicate.ObjectPlayerPredicate; @@ -58,7 +59,6 @@ public class HinderingLight extends CardImpl { super(ownerId, 173, "Hindering Light", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}{U}"); this.expansionSetCode = "ALA"; - // Counter target spell that targets you or a permanent you control. this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addTarget(new TargetSpell(filter)); @@ -84,9 +84,8 @@ class HinderingLightPredicate implements ObjectPlayerPredicate yourCreatures = new HashSet<>(); + Set opponentCreatures = new HashSet<>(); + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { + yourCreatures.add(permanent.getId()); + } + FilterCreaturePermanent filterOpponent = new FilterCreaturePermanent(); + filterOpponent.add(new ControllerIdPredicate(opponentId)); + for (Permanent permanent : game.getBattlefield().getActivePermanents(filterOpponent, source.getControllerId(), source.getSourceId(), game)) { + opponentCreatures.add(permanent.getId()); + } + for (UUID creatureId : yourCreatures) { + ContinuousEffect effect = new GainControlTargetEffect(Duration.EndOfTurn, opponentId); + effect.setTargetPointer(new FixedTarget(creatureId)); + game.addEffect(effect, source); + } + for (UUID creatureId : opponentCreatures) { + ContinuousEffect effect = new GainControlTargetEffect(Duration.EndOfTurn); + effect.setTargetPointer(new FixedTarget(creatureId)); + game.addEffect(effect, source); + } + + // Those creatures gain haste until end of turn. + game.addEffect(new GainAbilityAllEffect(HasteAbility.getInstance(), Duration.EndOfTurn, filter), source); + + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/ApesOfRath.java b/Mage.Sets/src/mage/sets/tempest/ApesOfRath.java new file mode 100644 index 0000000000..9716244bdb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/ApesOfRath.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + */ +public class ApesOfRath extends CardImpl { + + public ApesOfRath(UUID ownerId) { + super(ownerId, 108, "Apes of Rath", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Ape"); + this.power = new MageInt(5); + this.toughness = new MageInt(4); + + // Whenever Apes of Rath attacks, it doesn't untap during its controller's next untap step. + this.addAbility(new AttacksTriggeredAbility(new DontUntapInControllersNextUntapStepSourceEffect(), false)); + } + + public ApesOfRath(final ApesOfRath card) { + super(card); + } + + @Override + public ApesOfRath copy() { + return new ApesOfRath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/BloodFrenzy.java b/Mage.Sets/src/mage/sets/tempest/BloodFrenzy.java new file mode 100644 index 0000000000..1409650117 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/BloodFrenzy.java @@ -0,0 +1,119 @@ +/* + * 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.tempest; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.common.DestroyTargetAtBeginningOfNextEndStepEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.PhaseStep; +import mage.constants.Rarity; +import mage.constants.TurnPhase; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.common.TargetAttackingOrBlockingCreature; + +/** + * + * @author LoneFox + */ +public class BloodFrenzy extends CardImpl { + + public BloodFrenzy(UUID ownerId) { + super(ownerId, 164, "Blood Frenzy", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "TMP"; + + // Cast Blood Frenzy only before the combat damage step. + Ability ability = new SimpleStaticAbility(Zone.ALL, new BloodFrenzyCastRestriction()); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + // Target attacking or blocking creature gets +4/+0 until end of turn. Destroy that creature at the beginning of the next end step. + this.getSpellAbility().addEffect(new BoostTargetEffect(4, 0, Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new DestroyTargetAtBeginningOfNextEndStepEffect()); + this.getSpellAbility().addTarget(new TargetAttackingOrBlockingCreature()); + } + + public BloodFrenzy(final BloodFrenzy card) { + super(card); + } + + @Override + public BloodFrenzy copy() { + return new BloodFrenzy(this); + } +} + + +class BloodFrenzyCastRestriction extends ContinuousRuleModifyingEffectImpl { + + BloodFrenzyCastRestriction() { + super(Duration.EndOfGame, Outcome.Detriment); + staticText = "Cast {this} only before the combat damage step"; + } + + BloodFrenzyCastRestriction(final BloodFrenzyCastRestriction effect) { + super(effect); + } + + @Override + public BloodFrenzyCastRestriction copy() { + return new BloodFrenzyCastRestriction(this); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.CAST_SPELL); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if(event.getSourceId().equals(source.getSourceId())) { + if(game.getPhase().getType().equals(TurnPhase.COMBAT) + // There cannot be a legal target before declare attackers, + // so in practice it is limited to these two steps. + && (game.getStep().getType().equals(PhaseStep.DECLARE_ATTACKERS) + || game.getStep().getType().equals(PhaseStep.DECLARE_BLOCKERS))) { + return false; + } + return true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/CanyonDrake.java b/Mage.Sets/src/mage/sets/tempest/CanyonDrake.java new file mode 100644 index 0000000000..8cdbe60df5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/CanyonDrake.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class CanyonDrake extends CardImpl { + + public CanyonDrake(UUID ownerId) { + super(ownerId, 166, "Canyon Drake", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Drake"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // {1}, Discard a card at random: Canyon Drake gets +2/+0 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}")); + ability.addCost(new DiscardCardCost(true)); + this.addAbility(ability); + } + + public CanyonDrake(final CanyonDrake card) { + super(card); + } + + @Override + public CanyonDrake copy() { + return new CanyonDrake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/EndlessScream.java b/Mage.Sets/src/mage/sets/tempest/EndlessScream.java new file mode 100644 index 0000000000..0b9e96f422 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/EndlessScream.java @@ -0,0 +1,82 @@ +/* + * 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.tempest; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.CountersCount; +import mage.abilities.dynamicvalue.common.CountersCount; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.EntersBattlefieldWithXCountersEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class EndlessScream extends CardImpl { + + public EndlessScream(UUID ownerId) { + super(ownerId, 26, "Endless Scream", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{X}{B}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Endless Scream enters the battlefield with X scream counters on it. + this.addAbility(new EntersBattlefieldAbility(new EntersBattlefieldWithXCountersEffect(CounterType.SCREAM.createInstance()))); + // Enchanted creature gets +1/+0 for each scream counter on Endless Scream. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(new CountersCount(CounterType.SCREAM), new StaticValue(0), Duration.WhileOnBattlefield))); + } + + public EndlessScream(final EndlessScream card) { + super(card); + } + + @Override + public EndlessScream copy() { + return new EndlessScream(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/FlowstoneSalamander.java b/Mage.Sets/src/mage/sets/tempest/FlowstoneSalamander.java new file mode 100644 index 0000000000..15ffce4603 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/FlowstoneSalamander.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.BlockingAttackerIdPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class FlowstoneSalamander extends CardImpl { + + public FlowstoneSalamander(UUID ownerId) { + super(ownerId, 175, "Flowstone Salamander", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Salamander"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // {R}: Flowstone Salamander deals 1 damage to target creature blocking it. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{R")); + FilterCreaturePermanent filter = new FilterCreaturePermanent("creature blocking it"); + filter.add(new BlockingAttackerIdPredicate(this.getId())); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public FlowstoneSalamander(final FlowstoneSalamander card) { + super(card); + } + + @Override + public FlowstoneSalamander copy() { + return new FlowstoneSalamander(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/FlowstoneSculpture.java b/Mage.Sets/src/mage/sets/tempest/FlowstoneSculpture.java new file mode 100644 index 0000000000..cc468438c4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/FlowstoneSculpture.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.tempest; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class FlowstoneSculpture extends mage.sets.vintagemasters.FlowstoneSculpture { + + public FlowstoneSculpture(UUID ownerId) { + super(ownerId); + this.cardNumber = 278; + this.expansionSetCode = "TMP"; + } + + public FlowstoneSculpture(final FlowstoneSculpture card) { + super(card); + } + + @Override + public FlowstoneSculpture copy() { + return new FlowstoneSculpture(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/FoolsTome.java b/Mage.Sets/src/mage/sets/tempest/FoolsTome.java new file mode 100644 index 0000000000..0e242c64b7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/FoolsTome.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.condition.common.HellbentCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class FoolsTome extends CardImpl { + + public FoolsTome(UUID ownerId) { + super(ownerId, 279, "Fool's Tome", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}"); + this.expansionSetCode = "TMP"; + + // {2}, {tap}: Draw a card. Activate this ability only if you have no cards in hand. + Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), + new ManaCostsImpl("{2}"), HellbentCondition.getInstance()); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public FoolsTome(final FoolsTome card) { + super(card); + } + + @Override + public FoolsTome copy() { + return new FoolsTome(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Fylamarid.java b/Mage.Sets/src/mage/sets/tempest/Fylamarid.java new file mode 100644 index 0000000000..38c20f6172 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Fylamarid.java @@ -0,0 +1,88 @@ +/* + * 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.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleEvasionAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; +import mage.abilities.effects.common.continuous.BecomesColorTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class Fylamarid extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("blue creatures"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLUE)); + } + + public Fylamarid(UUID ownerId) { + super(ownerId, 64, "Fylamarid", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Squid"); + this.subtype.add("Beast"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Fylamarid can't be blocked by blue creatures. + this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); + // {U}: Target creature becomes blue until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesColorTargetEffect(ObjectColor.BLUE, + Duration.EndOfTurn), new ManaCostsImpl("{U}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public Fylamarid(final Fylamarid card) { + super(card); + } + + @Override + public Fylamarid copy() { + return new Fylamarid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Havoc.java b/Mage.Sets/src/mage/sets/tempest/Havoc.java new file mode 100644 index 0000000000..9fa6a6ae8a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Havoc.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + */ +public class Havoc extends CardImpl { + + private final static FilterSpell filter = new FilterSpell("a white spell"); + + static { + filter.add(new ColorPredicate(ObjectColor.WHITE)); + } + + public Havoc(UUID ownerId) { + super(ownerId, 181, "Havoc", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}"); + this.expansionSetCode = "TMP"; + + // Whenever an opponent casts a white spell, he or she loses 2 life. + Effect effect = new LoseLifeTargetEffect(2); + effect.setText("he or she loses 2 life"); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, effect, filter, false, SetTargetPointer.PLAYER)); + } + + public Havoc(final Havoc card) { + super(card); + } + + @Override + public Havoc copy() { + return new Havoc(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/ImpsTaunt.java b/Mage.Sets/src/mage/sets/tempest/ImpsTaunt.java new file mode 100644 index 0000000000..19e76245e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/ImpsTaunt.java @@ -0,0 +1,64 @@ +/* + * 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.tempest; + +import java.util.UUID; +import mage.abilities.effects.common.combat.AttacksIfAbleTargetEffect; +import mage.abilities.keyword.BuybackAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class ImpsTaunt extends CardImpl { + + public ImpsTaunt(UUID ownerId) { + super(ownerId, 32, "Imps' Taunt", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{B}"); + this.expansionSetCode = "TMP"; + + // Buyback {3} + this.addAbility(new BuybackAbility("{3}")); + // Target creature attacks this turn if able. + this.getSpellAbility().addEffect(new AttacksIfAbleTargetEffect(Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public ImpsTaunt(final ImpsTaunt card) { + super(card); + } + + @Override + public ImpsTaunt copy() { + return new ImpsTaunt(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/MoggCannon.java b/Mage.Sets/src/mage/sets/tempest/MoggCannon.java new file mode 100644 index 0000000000..45a20e8f8f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/MoggCannon.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetAtBeginningOfNextEndStepEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class MoggCannon extends CardImpl { + + public MoggCannon(UUID ownerId) { + super(ownerId, 288, "Mogg Cannon", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "TMP"; + + // {tap}: Target creature you control gets +1/+0 and gains flying until end of turn. Destroy that creature at the beginning of the next end step. + Effect effect = new BoostTargetEffect(1, 0, Duration.EndOfTurn); + effect.setText("target creature you control gets +1/+0"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); + effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains flying until end of turn"); + ability.addEffect(effect); + ability.addEffect(new DestroyTargetAtBeginningOfNextEndStepEffect()); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public MoggCannon(final MoggCannon card) { + super(card); + } + + @Override + public MoggCannon copy() { + return new MoggCannon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/PitImp.java b/Mage.Sets/src/mage/sets/tempest/PitImp.java new file mode 100644 index 0000000000..c2ed9d8b2f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/PitImp.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.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class PitImp extends CardImpl { + + public PitImp(UUID ownerId) { + super(ownerId, 42, "Pit Imp", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Imp"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // {B}: Pit Imp gets +1/+0 until end of turn. Activate this ability no more than twice each turn. + this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0,Duration.EndOfTurn), new ManaCostsImpl("{B}"), 2)); + } + + public PitImp(final PitImp card) { + super(card); + } + + @Override + public PitImp copy() { + return new PitImp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Safeguard.java b/Mage.Sets/src/mage/sets/tempest/Safeguard.java new file mode 100644 index 0000000000..0b8df61487 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Safeguard.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.tempest; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.PreventDamageByTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + */ +public class Safeguard extends CardImpl { + + public Safeguard(UUID ownerId) { + super(ownerId, 251, "Safeguard", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{W}"); + this.expansionSetCode = "TMP"; + + // {2}{W}: Prevent all combat damage that would be dealt by target creature this turn. + Effect effect = new PreventDamageByTargetEffect(Duration.EndOfTurn, true); + effect.setText("Prevent all combat damage that would be dealt by target creature this turn."); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{2}{W}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public Safeguard(final Safeguard card) { + super(card); + } + + @Override + public Safeguard copy() { + return new Safeguard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SereneOffering.java b/Mage.Sets/src/mage/sets/tempest/SereneOffering.java new file mode 100644 index 0000000000..c0d9c5746b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SereneOffering.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.tempest; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.TargetConvertedManaCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetEnchantmentPermanent; + +/** + * + * @author LoneFox + */ +public class SereneOffering extends CardImpl { + + public SereneOffering(UUID ownerId) { + super(ownerId, 252, "Serene Offering", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{W}"); + this.expansionSetCode = "TMP"; + + // Destroy target enchantment. You gain life equal to its converted mana cost. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + Effect effect = new GainLifeEffect(new TargetConvertedManaCost()); + effect.setText("You gain life equal to its converted mana cost"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addTarget(new TargetEnchantmentPermanent()); + } + + public SereneOffering(final SereneOffering card) { + super(card); + } + + @Override + public SereneOffering copy() { + return new SereneOffering(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SkyshroudCondor.java b/Mage.Sets/src/mage/sets/tempest/SkyshroudCondor.java new file mode 100644 index 0000000000..79ba487f4d --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SkyshroudCondor.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.ruleModifying.CastOnlyIfYouHaveCastAnotherSpellEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + */ +public class SkyshroudCondor extends CardImpl { + + public SkyshroudCondor(UUID ownerId) { + super(ownerId, 88, "Skyshroud Condor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Bird"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Cast Skyshroud Condor only if you've cast another spell this turn. + this.addAbility(new SimpleStaticAbility(Zone.ALL, new CastOnlyIfYouHaveCastAnotherSpellEffect())); + } + + public SkyshroudCondor(final SkyshroudCondor card) { + super(card); + } + + @Override + public SkyshroudCondor copy() { + return new SkyshroudCondor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.java b/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.java index b74ed27145..9afdd7e1ac 100644 --- a/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.java +++ b/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.java @@ -57,7 +57,7 @@ public class FieldOfSouls extends CardImpl { this.expansionSetCode = "TPR"; // Whenever a nontoken creature is put into your graveyard from the battlefield, put a 1/1 white Spirit creature token with flying onto the battlefield. - this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken("KTK")), false, filter)); + this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken()), false, filter)); } public FieldOfSouls(final FieldOfSouls card) { diff --git a/Mage.Sets/src/mage/sets/tenthedition/SerrasEmbrace.java b/Mage.Sets/src/mage/sets/tenthedition/SerrasEmbrace.java index e4e3c20d73..fa86b26eaf 100644 --- a/Mage.Sets/src/mage/sets/tenthedition/SerrasEmbrace.java +++ b/Mage.Sets/src/mage/sets/tenthedition/SerrasEmbrace.java @@ -29,9 +29,10 @@ package mage.sets.tenthedition; import java.util.UUID; -import mage.constants.*; +import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -39,6 +40,11 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -53,14 +59,21 @@ public class SerrasEmbrace extends CardImpl { this.expansionSetCode = "10E"; this.subtype.add("Aura"); + // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA))); + // Enchanted creature gets +2/+2 and has flying and vigilance. + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2)); + Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); + effect.setText("and has flying"); + ability.addEffect(effect); + effect = new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA); + effect.setText("and vigilance"); + ability.addEffect(effect); + this.addAbility(ability); } public SerrasEmbrace(final SerrasEmbrace card) { diff --git a/Mage.Sets/src/mage/sets/thedark/BookOfRass.java b/Mage.Sets/src/mage/sets/thedark/BookOfRass.java new file mode 100644 index 0000000000..ca0a589254 --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/BookOfRass.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.thedark; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class BookOfRass extends CardImpl { + + public BookOfRass(UUID ownerId) { + super(ownerId, 95, "Book of Rass", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{6}"); + this.expansionSetCode = "DRK"; + + // {2}, Pay 2 life: Draw a card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2)); + ability.addCost(new PayLifeCost(2)); + this.addAbility(ability); + } + + public BookOfRass(final BookOfRass card) { + super(card); + } + + @Override + public BookOfRass copy() { + return new BookOfRass(this); + } +} diff --git a/Mage.Sets/src/mage/sets/thedark/CavePeople.java b/Mage.Sets/src/mage/sets/thedark/CavePeople.java new file mode 100644 index 0000000000..1bb0eef3cc --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/CavePeople.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.thedark; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.MountainwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class CavePeople extends CardImpl { + + public CavePeople(UUID ownerId) { + super(ownerId, 59, "Cave People", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); + this.expansionSetCode = "DRK"; + this.subtype.add("Human"); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Whenever Cave People attacks, it gets +1/-2 until end of turn. + this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(1, -2, Duration.EndOfTurn), false)); + + // {1}{R}{R}, {tap}: Target creature gains mountainwalk until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(new MountainwalkAbility(), Duration.EndOfTurn), new ManaCostsImpl("{1}{R}{R}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public CavePeople(final CavePeople card) { + super(card); + } + + @Override + public CavePeople copy() { + return new CavePeople(this); + } +} diff --git a/Mage.Sets/src/mage/sets/thedark/DiabolicMachine.java b/Mage.Sets/src/mage/sets/thedark/DiabolicMachine.java new file mode 100644 index 0000000000..5466c2308a --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/DiabolicMachine.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.thedark; + +import java.util.UUID; + +/** + * + * @author nigelzor + */ +public class DiabolicMachine extends mage.sets.fourthedition.DiabolicMachine { + + public DiabolicMachine(UUID ownerId) { + super(ownerId); + this.cardNumber = 98; + this.expansionSetCode = "DRK"; + } + + public DiabolicMachine(final DiabolicMachine card) { + super(card); + } + + @Override + public DiabolicMachine copy() { + return new DiabolicMachine(this); + } +} diff --git a/Mage.Sets/src/mage/sets/thedark/GoblinCaves.java b/Mage.Sets/src/mage/sets/thedark/GoblinCaves.java new file mode 100644 index 0000000000..641d77f9a0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/GoblinCaves.java @@ -0,0 +1,102 @@ +/* + * 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.thedark; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author nigelzor + */ +public class GoblinCaves extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Goblin", "Goblin creatures"); + + public GoblinCaves(UUID ownerId) { + super(ownerId, 63, "Goblin Caves", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}{R}"); + this.expansionSetCode = "DRK"; + this.subtype.add("Aura"); + + // Enchant land + TargetPermanent auraTarget = new TargetLandPermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + // As long as enchanted land is a basic Mountain, Goblin creatures get +0/+2. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new BoostAllEffect(0, 2, Duration.WhileOnBattlefield, filter, false), + new AttachedToBasicMountainCondition(), + "As long as enchanted land is a basic Mountain, Goblin creatures get +0/+2" + ))); + } + + public GoblinCaves(final GoblinCaves card) { + super(card); + } + + @Override + public GoblinCaves copy() { + return new GoblinCaves(this); + } +} + +class AttachedToBasicMountainCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null) { + Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); + if (enchanted != null) { + if (enchanted.hasSubtype("Mountain") && enchanted.getSupertype().contains("Basic")) { + return true; + } + } + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/thedark/MerfolkAssassin.java b/Mage.Sets/src/mage/sets/thedark/MerfolkAssassin.java new file mode 100644 index 0000000000..514698b1f1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/MerfolkAssassin.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.thedark; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.IslandwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class MerfolkAssassin extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with islandwalk"); + + static { + filter.add(new AbilityPredicate(IslandwalkAbility.class)); + } + + public MerfolkAssassin(UUID ownerId) { + super(ownerId, 31, "Merfolk Assassin", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}{U}"); + this.expansionSetCode = "DRK"; + this.subtype.add("Merfolk"); + this.subtype.add("Assassin"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {tap}: Destroy target creature with islandwalk. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public MerfolkAssassin(final MerfolkAssassin card) { + super(card); + } + + @Override + public MerfolkAssassin copy() { + return new MerfolkAssassin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/thedark/SkullOfOrm.java b/Mage.Sets/src/mage/sets/thedark/SkullOfOrm.java index dfc74fba39..d6ca4b86d3 100644 --- a/Mage.Sets/src/mage/sets/thedark/SkullOfOrm.java +++ b/Mage.Sets/src/mage/sets/thedark/SkullOfOrm.java @@ -40,7 +40,7 @@ import mage.cards.CardImpl; import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.CardTypePredicate; -import mage.target.common.TargetCardInGraveyard; +import mage.target.common.TargetCardInYourGraveyard; /** * @@ -48,7 +48,7 @@ import mage.target.common.TargetCardInGraveyard; */ public class SkullOfOrm extends CardImpl { - private static final FilterCard filter = new FilterCard("enchantment cards"); + private static final FilterCard filter = new FilterCard("enchantment card from your graveyard"); static { filter.add(new CardTypePredicate(CardType.ENCHANTMENT)); @@ -60,7 +60,7 @@ public class SkullOfOrm extends CardImpl { // {5}, {tap}: Return target enchantment card from your graveyard to your hand. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{5}")); - ability.addTarget(new TargetCardInGraveyard(filter)); + ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addCost(new TapSourceCost()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/thedark/Venom.java b/Mage.Sets/src/mage/sets/thedark/Venom.java index 42eb58e716..5c736ca71e 100644 --- a/Mage.Sets/src/mage/sets/thedark/Venom.java +++ b/Mage.Sets/src/mage/sets/thedark/Venom.java @@ -31,8 +31,9 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -66,7 +67,10 @@ public class Venom extends CardImpl { this.addAbility(ability); // Whenever enchanted creature blocks or becomes blocked by a non-Wall creature, destroy the other creature at end of combat. - this.addAbility(new VenomTriggeredAbility()); + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new VenomTriggeredAbility(effect)); } public Venom(final Venom card) { @@ -81,8 +85,8 @@ public class Venom extends CardImpl { class VenomTriggeredAbility extends TriggeredAbilityImpl { - VenomTriggeredAbility() { - super(Zone.BATTLEFIELD, new VenomEffect()); + VenomTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); } VenomTriggeredAbility(final VenomTriggeredAbility ability) { @@ -128,35 +132,3 @@ class VenomTriggeredAbility extends TriggeredAbilityImpl { return "Whenever enchanted creature blocks or becomes blocked by a non-Wall creature, destroy that creature at end of combat."; } } - -class VenomEffect extends OneShotEffect { - - VenomEffect() { - super(Outcome.DestroyPermanent); - staticText = "destroy that creature at end of combat"; - } - - VenomEffect(final VenomEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source)); - if (targetCreature != null) { - AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } - return false; - } - - @Override - public VenomEffect copy() { - return new VenomEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/theros/XenagosTheReveler.java b/Mage.Sets/src/mage/sets/theros/XenagosTheReveler.java index 781fe57fdb..8dca641395 100644 --- a/Mage.Sets/src/mage/sets/theros/XenagosTheReveler.java +++ b/Mage.Sets/src/mage/sets/theros/XenagosTheReveler.java @@ -130,10 +130,10 @@ class XenagosManaEffect extends OneShotEffect { } switch (manaChoice.getChoice()) { case "Green": - mana.increaseGreen(); + mana.addGreen(); break; case "Red": - mana.increaseRed(); + mana.addRed(); break; } player.getManaPool().addMana(mana, game, source); diff --git a/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java b/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java index ab0701cce4..60298b92a7 100644 --- a/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java +++ b/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java @@ -40,9 +40,6 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.permanent.AnotherPredicate; /** * @@ -50,12 +47,6 @@ import mage.filter.predicate.permanent.AnotherPredicate; */ public class GemstoneMine extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent(); - - static { - filter.add(Predicates.not(new AnotherPredicate())); - } - public GemstoneMine(UUID ownerId) { super(ownerId, 119, "Gemstone Mine", Rarity.RARE, new CardType[]{CardType.LAND}, ""); this.expansionSetCode = "TSB"; diff --git a/Mage.Sets/src/mage/sets/timeshifted/MerfolkAssassin.java b/Mage.Sets/src/mage/sets/timeshifted/MerfolkAssassin.java new file mode 100644 index 0000000000..c0f621caf5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timeshifted/MerfolkAssassin.java @@ -0,0 +1,54 @@ +/* + * 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.timeshifted; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class MerfolkAssassin extends mage.sets.thedark.MerfolkAssassin { + + public MerfolkAssassin(UUID ownerId) { + super(ownerId); + this.cardNumber = 25; + this.expansionSetCode = "TSB"; + this.rarity = Rarity.SPECIAL; + } + + public MerfolkAssassin(final MerfolkAssassin card) { + super(card); + } + + @Override + public MerfolkAssassin copy() { + return new MerfolkAssassin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/AssemblyWorker.java b/Mage.Sets/src/mage/sets/timespiral/AssemblyWorker.java index 221de05930..95ad4df289 100644 --- a/Mage.Sets/src/mage/sets/timespiral/AssemblyWorker.java +++ b/Mage.Sets/src/mage/sets/timespiral/AssemblyWorker.java @@ -32,12 +32,12 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; -import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.target.TargetPermanent; @@ -63,7 +63,7 @@ public class AssemblyWorker extends CardImpl { this.toughness = new MageInt(2); // {tap}: Target Assembly-Worker creature gets +1/+1 until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(1, 1, Duration.EndOfTurn), new TapSourceCost()); ability.addTarget(new TargetPermanent(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/timespiral/BrassGnat.java b/Mage.Sets/src/mage/sets/timespiral/BrassGnat.java new file mode 100644 index 0000000000..ffc42c4e19 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/BrassGnat.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.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; + +/** + * + * @author nigelzor + */ +public class BrassGnat extends CardImpl { + + public BrassGnat(UUID ownerId) { + super(ownerId, 249, "Brass Gnat", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Insect"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Brass Gnat doesn't untap during your untap step. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect())); + // At the beginning of your upkeep, you may pay {1}. If you do, untap Brass Gnat. + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + Zone.BATTLEFIELD, + new DoIfCostPaid(new UntapSourceEffect(), new GenericManaCost(1)), + TargetController.YOU, + false)); + } + + public BrassGnat(final BrassGnat card) { + super(card); + } + + @Override + public BrassGnat copy() { + return new BrassGnat(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/CallToTheNetherworld.java b/Mage.Sets/src/mage/sets/timespiral/CallToTheNetherworld.java new file mode 100644 index 0000000000..9c17bb589a --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/CallToTheNetherworld.java @@ -0,0 +1,74 @@ +/* + * 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.timespiral; + +import java.util.UUID; + +import mage.ObjectColor; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.keyword.MadnessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author nigelzor + */ +public class CallToTheNetherworld extends CardImpl { + + private static FilterCreatureCard filter = new FilterCreatureCard("black creature card from your graveyard"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public CallToTheNetherworld(UUID ownerId) { + super(ownerId, 97, "Call to the Netherworld", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}"); + this.expansionSetCode = "TSP"; + + // Return target black creature card from your graveyard to your hand. + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + // Madness {0} + this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{0}"))); + } + + public CallToTheNetherworld(final CallToTheNetherworld card) { + super(card); + } + + @Override + public CallToTheNetherworld copy() { + return new CallToTheNetherworld(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/ChronatogTotem.java b/Mage.Sets/src/mage/sets/timespiral/ChronatogTotem.java index 35c67c7ff6..492a19ee6c 100644 --- a/Mage.Sets/src/mage/sets/timespiral/ChronatogTotem.java +++ b/Mage.Sets/src/mage/sets/timespiral/ChronatogTotem.java @@ -27,35 +27,29 @@ */ package mage.sets.timespiral; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; +import mage.abilities.costs.Cost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.turn.SkipNextTurnSourceEffect; import mage.abilities.mana.BlueManaAbility; import mage.cards.CardImpl; -import mage.constants.AbilityType; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.EffectType; import mage.constants.Rarity; -import mage.constants.WatcherScope; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; -import mage.game.stack.StackAbility; -import mage.game.stack.StackObject; -import mage.watchers.Watcher; /** * @@ -74,14 +68,13 @@ public class ChronatogTotem extends CardImpl { this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new ChronatogTotemToken(), "", Duration.EndOfTurn), new ManaCostsImpl<>("{1}{U}"))); // {0}: Chronatog Totem gets +3/+3 until end of turn. You skip your next turn. Activate this ability only once each turn and only if Chronatog Totem is a creature. - Ability ability = new ConditionalActivatedAbility( + Ability ability = new ChronatogTotemAbility( Zone.BATTLEFIELD, new BoostSourceEffect(3, 3, Duration.EndOfTurn), new ManaCostsImpl<>("{0}"), - new ChronatogTotemCondition(), - "{0}: {this} gets +3/+3 until end of turn. You skip your next turn. Activate this ability only once each turn and only if {this} is a creature"); + new ChronatogTotemCondition()); ability.addEffect(new SkipNextTurnSourceEffect()); - this.addAbility(ability, new ActivatedAbilityUsedThisTurnWatcher()); + this.addAbility(ability); } public ChronatogTotem(final ChronatogTotem card) { @@ -94,6 +87,52 @@ public class ChronatogTotem extends CardImpl { } } +class ChronatogTotemAbility extends LimitedTimesPerTurnActivatedAbility { + + private static final Effects emptyEffects = new Effects(); + + private final Condition condition; + + public ChronatogTotemAbility(Zone zone, Effect effect, Cost cost, Condition condition) { + super(zone, effect, cost); + this.condition = condition; + } + + public ChronatogTotemAbility(ChronatogTotemAbility ability) { + super(ability); + this.condition = ability.condition; + } + + @Override + public Effects getEffects(Game game, EffectType effectType) { + if (!condition.apply(game, this)) { + return emptyEffects; + } + return super.getEffects(game, effectType); + } + + @Override + public boolean canActivate(UUID playerId, Game game) { + if (!condition.apply(game, this)) { + return false; + } + return super.canActivate(playerId, game); + } + + @Override + public ChronatogTotemAbility copy() { + return new ChronatogTotemAbility(this); + } + + @Override + public String getRule() { + StringBuilder sb = new StringBuilder(super.getRule()); + sb.deleteCharAt(sb.length() - 1); // remove last '.' + sb.append(" and only if ").append(condition.toString()).append("."); + return sb.toString(); + } +} + class ChronatogTotemToken extends Token { ChronatogTotemToken() { @@ -111,60 +150,15 @@ class ChronatogTotemCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - ActivatedAbilityUsedThisTurnWatcher watcher = (ActivatedAbilityUsedThisTurnWatcher) game.getState().getWatchers().get("ActivatedAbilityUsedThisTurn"); - if (!watcher.getActivatedThisTurn().contains(source.getOriginalId())) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - return permanent.getCardType().contains(CardType.CREATURE); - } + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + return permanent.getCardType().contains(CardType.CREATURE); } return false; } @Override public String toString() { - return "once each turn and only if an opponent controls a flying creature"; + return "{this} is a creature"; } } - -class ActivatedAbilityUsedThisTurnWatcher extends Watcher { - - public Set activatedThisTurn = new HashSet<>(0); - - ActivatedAbilityUsedThisTurnWatcher() { - super("ActivatedAbilityUsedThisTurn", WatcherScope.GAME); - } - - ActivatedAbilityUsedThisTurnWatcher(final ActivatedAbilityUsedThisTurnWatcher watcher) { - super(watcher); - this.activatedThisTurn.addAll(watcher.activatedThisTurn); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == EventType.ACTIVATED_ABILITY) { - StackObject stackObject = game.getStack().getStackObject(event.getTargetId()); - if (stackObject != null) { - StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getTargetId()); - if (stackAbility != null && stackAbility.getAbilityType() == AbilityType.ACTIVATED) { - this.activatedThisTurn.add(stackAbility.getOriginalId()); - } - } - } - } - - public Set getActivatedThisTurn() { - return Collections.unmodifiableSet(this.activatedThisTurn); - } - - @Override - public ActivatedAbilityUsedThisTurnWatcher copy() { - return new ActivatedAbilityUsedThisTurnWatcher(this); - } - - @Override - public void reset() { - super.reset(); - this.activatedThisTurn.clear(); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/timespiral/Conflagrate.java b/Mage.Sets/src/mage/sets/timespiral/Conflagrate.java index 1294976b01..e31f05b761 100644 --- a/Mage.Sets/src/mage/sets/timespiral/Conflagrate.java +++ b/Mage.Sets/src/mage/sets/timespiral/Conflagrate.java @@ -29,10 +29,12 @@ package mage.sets.timespiral; import java.util.UUID; import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.DiscardTargetCost; import mage.abilities.costs.common.DiscardXTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageMultiEffect; import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; @@ -40,6 +42,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.TimingRule; import mage.filter.FilterCard; +import mage.game.Game; import mage.target.common.TargetCreatureOrPlayerAmount; /** @@ -52,17 +55,16 @@ public class Conflagrate extends CardImpl { super(ownerId, 151, "Conflagrate", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{X}{X}{R}"); this.expansionSetCode = "TSP"; - // Conflagrate deals X damage divided as you choose among any number of target creatures and/or players. - DynamicValue xValue = new ManacostVariableValue(); + DynamicValue xValue = new ConflagrateVariableValue(); this.getSpellAbility().addEffect(new DamageMultiEffect(xValue)); - this.getSpellAbility().addTarget(new TargetCreatureOrPlayerAmount(xValue)); - + this.getSpellAbility().addTarget(new TargetCreatureOrPlayerAmount(xValue)); + // Flashback-{R}{R}, Discard X cards. Ability ability = new FlashbackAbility(new ManaCostsImpl("{R}{R}"), TimingRule.SORCERY); ability.addCost(new DiscardXTargetCost(new FilterCard("cards"))); this.addAbility(ability); - + } public Conflagrate(final Conflagrate card) { @@ -74,3 +76,31 @@ public class Conflagrate extends CardImpl { return new Conflagrate(this); } } + +class ConflagrateVariableValue implements DynamicValue { + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + for (Cost cost : sourceAbility.getCosts()) { + if (cost instanceof DiscardTargetCost) { + return ((DiscardTargetCost) cost).getCards().size(); + } + } + return sourceAbility.getManaCostsToPay().getX(); + } + + @Override + public ConflagrateVariableValue copy() { + return new ConflagrateVariableValue(); + } + + @Override + public String toString() { + return "X"; + } + + @Override + public String getMessage() { + return ""; + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/ErrantDoomsayers.java b/Mage.Sets/src/mage/sets/timespiral/ErrantDoomsayers.java new file mode 100644 index 0000000000..9167c2d475 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/ErrantDoomsayers.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.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.TapTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.Filter; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.target.Target; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class ErrantDoomsayers extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with toughness 2 or less"); + static { + filter.add(new ToughnessPredicate(Filter.ComparisonType.LessThan, 3)); + } + + public ErrantDoomsayers(UUID ownerId) { + super(ownerId, 15, "Errant Doomsayers", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Human"); + this.subtype.add("Rebel"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Tap target creature with toughness 2 or less. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost()); + Target target = new TargetCreaturePermanent(filter); + ability.addTarget(target); + this.addAbility(ability); + } + + public ErrantDoomsayers(final ErrantDoomsayers card) { + super(card); + } + + @Override + public ErrantDoomsayers copy() { + return new ErrantDoomsayers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/Feebleness.java b/Mage.Sets/src/mage/sets/timespiral/Feebleness.java new file mode 100644 index 0000000000..3f02843db9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/Feebleness.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.timespiral; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author nigelzor + */ +public class Feebleness extends CardImpl { + + public Feebleness(UUID ownerId) { + super(ownerId, 110, "Feebleness", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Aura"); + + // Flash + this.addAbility(FlashAbility.getInstance()); + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.UnboostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Enchanted creature gets -2/-1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(-2, -1, Duration.WhileOnBattlefield))); + } + + public Feebleness(final Feebleness card) { + super(card); + } + + @Override + public Feebleness copy() { + return new Feebleness(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/GorgonRecluse.java b/Mage.Sets/src/mage/sets/timespiral/GorgonRecluse.java new file mode 100644 index 0000000000..fec34f76e4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/GorgonRecluse.java @@ -0,0 +1,84 @@ +/* + * 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.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.common.BlocksOrBecomesBlockedByCreatureTriggeredAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.MadnessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; + +/** + * + * @author nigelzor + */ +public class GorgonRecluse extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonblack creature"); + + static { + filter.add(Predicates.not(new ColorPredicate(ObjectColor.BLACK))); + } + + public GorgonRecluse(UUID ownerId) { + super(ownerId, 111, "Gorgon Recluse", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Gorgon"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Whenever Gorgon Recluse blocks or becomes blocked by a nonblack creature, destroy that creature at end of combat. + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); + effect.setText("destroy that creature at end of combat"); + this.addAbility(new BlocksOrBecomesBlockedByCreatureTriggeredAbility(effect, filter, false)); + // Madness {B}{B} + this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{B}{B}"))); + } + + public GorgonRecluse(final GorgonRecluse card) { + super(card); + } + + @Override + public GorgonRecluse copy() { + return new GorgonRecluse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/HauntingHymn.java b/Mage.Sets/src/mage/sets/timespiral/HauntingHymn.java new file mode 100644 index 0000000000..0e0a924ce1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/HauntingHymn.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.timespiral; + +import java.util.UUID; + +import mage.abilities.condition.common.MyMainPhaseCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author nigelzor + */ +public class HauntingHymn extends CardImpl { + + public HauntingHymn(UUID ownerId) { + super(ownerId, 112, "Haunting Hymn", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{4}{B}{B}"); + this.expansionSetCode = "TSP"; + + // Target player discards two cards. If you cast this spell during your main phase, that player discards four cards instead. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DiscardTargetEffect(4), + new DiscardTargetEffect(2), + MyMainPhaseCondition.getInstance(), + "Target player discards two cards. If you cast this spell during your main phase, that player discards four cards instead")); + this.getSpellAbility().addTarget(new TargetPlayer()); + + } + + public HauntingHymn(final HauntingHymn card) { + super(card); + } + + @Override + public HauntingHymn copy() { + return new HauntingHymn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/ManaSkimmer.java b/Mage.Sets/src/mage/sets/timespiral/ManaSkimmer.java new file mode 100644 index 0000000000..a149585d33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/ManaSkimmer.java @@ -0,0 +1,116 @@ +/* + * 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.timespiral; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; + +/** + * + * @author nigelzor + */ +public class ManaSkimmer extends CardImpl { + + public ManaSkimmer(UUID ownerId) { + super(ownerId, 117, "Mana Skimmer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Leech"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Whenever Mana Skimmer deals damage to a player, tap target land that player controls. That land doesn't untap during its controller's next untap step. + this.addAbility(new ManaSkimmerTriggeredAbility()); + } + + public ManaSkimmer(final ManaSkimmer card) { + super(card); + } + + @Override + public ManaSkimmer copy() { + return new ManaSkimmer(this); + } +} + +class ManaSkimmerTriggeredAbility extends TriggeredAbilityImpl { + + ManaSkimmerTriggeredAbility() { + super(Zone.BATTLEFIELD, new TapTargetEffect(), false); + addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); + } + + ManaSkimmerTriggeredAbility(ManaSkimmerTriggeredAbility ability) { + super(ability); + } + + @Override + public ManaSkimmerTriggeredAbility copy() { + return new ManaSkimmerTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent source = game.getPermanent(event.getSourceId()); + if (source != null && source.getId().equals(this.getSourceId())) { + FilterLandPermanent filter = new FilterLandPermanent("land that player controls"); + filter.add(new ControllerIdPredicate(event.getPlayerId())); + filter.setMessage("land controlled by " + game.getPlayer(event.getTargetId()).getLogName()); + this.getTargets().clear(); + this.addTarget(new TargetPermanent(filter)); + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} deals damage to a player, tap target land that player controls. That land doesn't untap during its controller's next untap step."; + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/OutriderEnKor.java b/Mage.Sets/src/mage/sets/timespiral/OutriderEnKor.java new file mode 100644 index 0000000000..0084598919 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/OutriderEnKor.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.RedirectDamageFromSourceToTargetEffect; +import mage.abilities.keyword.FlankingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class OutriderEnKor extends CardImpl { + + public OutriderEnKor(UUID ownerId) { + super(ownerId, 31, "Outrider en-Kor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Kor"); + this.subtype.add("Rebel"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flanking + this.addAbility(new FlankingAbility()); + + // {0}: The next 1 damage that would be dealt to Outrider en-Kor this turn is dealt to target creature you control instead. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RedirectDamageFromSourceToTargetEffect(Duration.EndOfTurn, 1, true), new GenericManaCost(0)); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public OutriderEnKor(final OutriderEnKor card) { + super(card); + } + + @Override + public OutriderEnKor copy() { + return new OutriderEnKor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/Plunder.java b/Mage.Sets/src/mage/sets/timespiral/Plunder.java new file mode 100644 index 0000000000..f92736792d --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/Plunder.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timespiral; + +import java.util.UUID; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.SuspendAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPermanent; + +/** + * + * @author LoneFox + */ +public class Plunder extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or land"); + + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.LAND))); + } + + public Plunder(UUID ownerId) { + super(ownerId, 174, "Plunder", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{4}{R}"); + this.expansionSetCode = "TSP"; + + // Destroy target artifact or land. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + // Suspend 4-{1}{R} + this.addAbility(new SuspendAbility(4, new ManaCostsImpl("{1}{R}"), this)); + } + + public Plunder(final Plunder card) { + super(card); + } + + @Override + public Plunder copy() { + return new Plunder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/SarpadianEmpiresVolVii.java b/Mage.Sets/src/mage/sets/timespiral/SarpadianEmpiresVolVii.java index 8b3f154f19..b0ab59b347 100644 --- a/Mage.Sets/src/mage/sets/timespiral/SarpadianEmpiresVolVii.java +++ b/Mage.Sets/src/mage/sets/timespiral/SarpadianEmpiresVolVii.java @@ -46,6 +46,7 @@ import mage.game.Game; import mage.game.permanent.token.CitizenToken; import mage.game.permanent.token.GoblinToken; import mage.game.permanent.token.SaprolingToken; +import mage.game.permanent.token.ThrullToken; import mage.game.permanent.token.Token; import mage.players.Player; @@ -165,14 +166,3 @@ class CamaridToken extends Token { toughness = new MageInt(1); } } - -class ThrullToken extends Token { - public ThrullToken() { - super("Thrull", "1/1 black Thrull creature token"); - cardType.add(CardType.CREATURE); - subtype.add("Thrull"); - color.setBlack(true); - power = new MageInt(1); - toughness = new MageInt(1); - } -} diff --git a/Mage.Sets/src/mage/sets/timespiral/SkitteringMonstrosity.java b/Mage.Sets/src/mage/sets/timespiral/SkitteringMonstrosity.java new file mode 100644 index 0000000000..69ab924f76 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/SkitteringMonstrosity.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author nigelzor + */ +public class SkitteringMonstrosity extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("a creature spell"); + + static { + filter.add(new CardTypePredicate(CardType.CREATURE)); + } + + public SkitteringMonstrosity(UUID ownerId) { + super(ownerId, 129, "Skittering Monstrosity", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Horror"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // When you cast a creature spell, sacrifice Skittering Monstrosity. + this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), filter, false)); + } + + public SkitteringMonstrosity(final SkitteringMonstrosity card) { + super(card); + } + + @Override + public SkitteringMonstrosity copy() { + return new SkitteringMonstrosity(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/TemporalEddy.java b/Mage.Sets/src/mage/sets/timespiral/TemporalEddy.java new file mode 100644 index 0000000000..7c316993ed --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/TemporalEddy.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timespiral; + +import java.util.UUID; + +import mage.abilities.effects.common.PutOnLibraryTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetPermanent; + +/** + * + * @author nigelzor + */ +public class TemporalEddy extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("creature or land"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.CREATURE), + new CardTypePredicate(CardType.LAND))); + } + + public TemporalEddy(UUID ownerId) { + super(ownerId, 85, "Temporal Eddy", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{U}{U}"); + this.expansionSetCode = "TSP"; + + // Put target creature or land on top of its owner's library. + this.getSpellAbility().addEffect(new PutOnLibraryTargetEffect(true)); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + } + + public TemporalEddy(final TemporalEddy card) { + super(card); + } + + @Override + public TemporalEddy copy() { + return new TemporalEddy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/torment/ChainerDementiaMaster.java b/Mage.Sets/src/mage/sets/torment/ChainerDementiaMaster.java index 88929b04b2..253f7ade51 100644 --- a/Mage.Sets/src/mage/sets/torment/ChainerDementiaMaster.java +++ b/Mage.Sets/src/mage/sets/torment/ChainerDementiaMaster.java @@ -43,7 +43,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileAllEffect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.common.continuous.BecomesColorTargetEffect; -import mage.abilities.effects.common.continuous.BecomesSubtypeTargetEffect; +import mage.abilities.effects.common.continuous.BecomesCreatureTypeTargetEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -133,7 +133,7 @@ class ChainerDementiaMasterEffect extends OneShotEffect { ContinuousEffectImpl effect = new BecomesColorTargetEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield); effect.setTargetPointer(new FixedTarget(permanent, game)); game.addEffect(effect, source); - effect = new BecomesSubtypeTargetEffect(Duration.WhileOnBattlefield, new ArrayList<>(Arrays.asList("Nightmare")), false); + effect = new BecomesCreatureTypeTargetEffect(Duration.WhileOnBattlefield, new ArrayList<>(Arrays.asList("Nightmare")), false); effect.setTargetPointer(new FixedTarget(permanent, game)); game.addEffect(effect, source); } diff --git a/Mage.Sets/src/mage/sets/torment/KrosanConstrictor.java b/Mage.Sets/src/mage/sets/torment/KrosanConstrictor.java new file mode 100644 index 0000000000..05c8229f67 --- /dev/null +++ b/Mage.Sets/src/mage/sets/torment/KrosanConstrictor.java @@ -0,0 +1,82 @@ +/* + * 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.torment; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.keyword.SwampwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class KrosanConstrictor extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("black creature"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public KrosanConstrictor(UUID ownerId) { + super(ownerId, 129, "Krosan Constrictor", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "TOR"; + this.subtype.add("Snake"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Swampwalk + this.addAbility(new SwampwalkAbility()); + // {tap}: Target black creature gets -2/-0 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -0, Duration.EndOfTurn), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public KrosanConstrictor(final KrosanConstrictor card) { + super(card); + } + + @Override + public KrosanConstrictor copy() { + return new KrosanConstrictor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/unlimitededition/Lifetap.java b/Mage.Sets/src/mage/sets/unlimitededition/Lifetap.java new file mode 100644 index 0000000000..2e900c7bb5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/unlimitededition/Lifetap.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.unlimitededition; + +import java.util.UUID; + +/** + * + * @author LoneFox + */ +public class Lifetap extends mage.sets.fifthedition.Lifetap { + + public Lifetap(UUID ownerId) { + super(ownerId); + this.cardNumber = 62; + this.expansionSetCode = "2ED"; + } + + public Lifetap(final Lifetap card) { + super(card); + } + + @Override + public Lifetap copy() { + return new Lifetap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/ColosYearling.java b/Mage.Sets/src/mage/sets/urzasdestiny/ColosYearling.java new file mode 100644 index 0000000000..790d390a4e --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzasdestiny/ColosYearling.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.urzasdestiny; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.MountainwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class ColosYearling extends CardImpl { + + public ColosYearling(UUID ownerId) { + super(ownerId, 79, "Colos Yearling", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "UDS"; + this.subtype.add("Goat"); + this.subtype.add("Beast"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Mountainwalk + this.addAbility(new MountainwalkAbility()); + + // {R}: Colos Yearling gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + } + + public ColosYearling(final ColosYearling card) { + super(card); + } + + @Override + public ColosYearling copy() { + return new ColosYearling(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/SkitteringHorror.java b/Mage.Sets/src/mage/sets/urzasdestiny/SkitteringHorror.java new file mode 100644 index 0000000000..690ba9a05e --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzasdestiny/SkitteringHorror.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.urzasdestiny; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author nigelzor + */ +public class SkitteringHorror extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("a creature spell"); + + static { + filter.add(new CardTypePredicate(CardType.CREATURE)); + } + + public SkitteringHorror(UUID ownerId) { + super(ownerId, 70, "Skittering Horror", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "UDS"; + this.subtype.add("Horror"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // When you cast a creature spell, sacrifice Skittering Horror. + this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), filter, false)); + } + + public SkitteringHorror(final SkitteringHorror card) { + super(card); + } + + @Override + public SkitteringHorror copy() { + return new SkitteringHorror(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/GoblinMedics.java b/Mage.Sets/src/mage/sets/urzaslegacy/GoblinMedics.java index 94df69ca9a..0f51156ce5 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/GoblinMedics.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/GoblinMedics.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.BecomesTappedSourceTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; import mage.target.common.TargetCreatureOrPlayer; @@ -53,7 +53,7 @@ public class GoblinMedics extends CardImpl { this.toughness = new MageInt(1); // Whenever Goblin Medics becomes tapped, it deals 1 damage to target creature or player. - Ability ability = new BecomesTappedTriggeredAbility(new DamageTargetEffect(1)); + Ability ability = new BecomesTappedSourceTriggeredAbility(new DamageTargetEffect(1)); ability.addTarget(new TargetCreatureOrPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/JhoirasToolbox.java b/Mage.Sets/src/mage/sets/urzaslegacy/JhoirasToolbox.java index 667af6cd46..d3db8d8c98 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/JhoirasToolbox.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/JhoirasToolbox.java @@ -28,15 +28,14 @@ package mage.sets.urzaslegacy; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.RegenerateTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.CardTypePredicate; @@ -48,10 +47,10 @@ import mage.target.common.TargetCreaturePermanent; */ public class JhoirasToolbox extends CardImpl { - private static final FilterCreaturePermanent filer = new FilterCreaturePermanent("artifact creature"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("artifact creature"); static { - filer.add(new CardTypePredicate(CardType.ARTIFACT)); + filter.add(new CardTypePredicate(CardType.ARTIFACT)); } public JhoirasToolbox(UUID ownerId) { @@ -64,7 +63,8 @@ public class JhoirasToolbox extends CardImpl { // {2}: Regenerate target artifact creature. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateTargetEffect(), new ManaCostsImpl("{2}")); - ability.addTarget(new TargetCreaturePermanent(filer)); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); } public JhoirasToolbox(final JhoirasToolbox card) { diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/ViashinoSandscout.java b/Mage.Sets/src/mage/sets/urzaslegacy/ViashinoSandscout.java index 3bd1fc5154..113d371f98 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/ViashinoSandscout.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/ViashinoSandscout.java @@ -28,13 +28,14 @@ package mage.sets.urzaslegacy; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; -import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; /** * @@ -54,7 +55,7 @@ public class ViashinoSandscout extends CardImpl { // Haste this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, return Viashino Sandscout to its owner's hand. - this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.ANY, false)); } public ViashinoSandscout(final ViashinoSandscout card) { diff --git a/Mage.Sets/src/mage/sets/urzassaga/CacklingFiend.java b/Mage.Sets/src/mage/sets/urzassaga/CacklingFiend.java index 66f4639b0b..ec7a3b1cde 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/CacklingFiend.java +++ b/Mage.Sets/src/mage/sets/urzassaga/CacklingFiend.java @@ -29,19 +29,13 @@ package mage.sets.urzassaga; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.discard.DiscardEachPlayerEffect; -import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.TargetController; -import mage.game.Game; -import mage.players.Player; /** * @@ -57,7 +51,7 @@ public class CacklingFiend extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(1); - this.addAbility(FlyingAbility.getInstance()); + // When Cackling Fiend enters the battlefield, each opponent discards a card. this.addAbility(new EntersBattlefieldTriggeredAbility(new DiscardEachPlayerEffect(TargetController.OPPONENT), false)); } diff --git a/Mage.Sets/src/mage/sets/urzassaga/CrystalChimes.java b/Mage.Sets/src/mage/sets/urzassaga/CrystalChimes.java new file mode 100644 index 0000000000..7f46543994 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/CrystalChimes.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.urzassaga; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CrystalChimes extends mage.sets.commander2015.CrystalChimes { + + public CrystalChimes(UUID ownerId) { + super(ownerId); + this.cardNumber = 292; + this.expansionSetCode = "USG"; + } + + public CrystalChimes(final CrystalChimes card) { + super(card); + } + + @Override + public CrystalChimes copy() { + return new CrystalChimes(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/GaeasEmbrace.java b/Mage.Sets/src/mage/sets/urzassaga/GaeasEmbrace.java index 62339dbe56..2931fd3069 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/GaeasEmbrace.java +++ b/Mage.Sets/src/mage/sets/urzassaga/GaeasEmbrace.java @@ -28,16 +28,11 @@ package mage.sets.urzassaga; import java.util.UUID; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.RegenerateAttachedEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -45,6 +40,12 @@ import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -58,18 +59,18 @@ public class GaeasEmbrace extends CardImpl { this.expansionSetCode = "USG"; this.subtype.add("Aura"); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - // Enchanted creature gets +3/+3 and has trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA))); - + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3)); + Effect effect = new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA); + effect.setText("and has trample"); + ability.addEffect(effect); + this.addAbility(ability); // {G}: Regenerate enchanted creature. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateAttachedEffect(AttachmentType.AURA), new ColoredManaCost(ColoredManaSymbol.G))); } diff --git a/Mage.Sets/src/mage/sets/urzassaga/MobileFort.java b/Mage.Sets/src/mage/sets/urzassaga/MobileFort.java new file mode 100644 index 0000000000..c33774b356 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/MobileFort.java @@ -0,0 +1,77 @@ +/* + * 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.urzassaga; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.combat.CanAttackAsThoughItDidntHaveDefenderSourceEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class MobileFort extends CardImpl { + + public MobileFort(UUID ownerId) { + super(ownerId, 303, "Mobile Fort", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); + this.expansionSetCode = "USG"; + this.subtype.add("Wall"); + this.power = new MageInt(0); + this.toughness = new MageInt(6); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // {3}: Mobile Fort gets +3/-1 until end of turn and can attack this turn as though it didn't have defender. Activate this ability only once each turn. + Effect effect = new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn); + effect.setText("and can attack as though it didn't have defender"); + Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(3, -1, Duration.EndOfTurn), new ManaCostsImpl("{3}")); + ability.addEffect(effect); + this.addAbility(ability); + } + + public MobileFort(final MobileFort card) { + super(card); + } + + @Override + public MobileFort copy() { + return new MobileFort(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/SkitteringSkirge.java b/Mage.Sets/src/mage/sets/urzassaga/SkitteringSkirge.java index be3d7a9930..1b1815af39 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/SkitteringSkirge.java +++ b/Mage.Sets/src/mage/sets/urzassaga/SkitteringSkirge.java @@ -1,75 +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.urzassaga; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.effects.common.SacrificeSourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.filter.FilterSpell; -import mage.filter.predicate.mageobject.CardTypePredicate; - -/** - * - * @author hanasu - */ -public class SkitteringSkirge extends CardImpl { - - private static final FilterSpell filter = new FilterSpell("a creature spell"); - - static { - filter.add(new CardTypePredicate(CardType.CREATURE)); - } - - public SkitteringSkirge(UUID ownerId) { - super(ownerId, 158, "Skittering Skirge", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{B}"); - this.expansionSetCode = "USG"; - this.subtype.add("Imp"); - this.power = new MageInt(3); - this.toughness = new MageInt(2); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // When you cast a creature spell, sacrifice Skittering Skirge. - this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), filter, true)); - } - - public SkitteringSkirge(final SkitteringSkirge card) { - super(card); - } - - @Override - public SkitteringSkirge copy() { - return new SkitteringSkirge(this); - } -} +/* + * 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.urzassaga; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.CardTypePredicate; + +/** + * + * @author hanasu + */ +public class SkitteringSkirge extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("a creature spell"); + + static { + filter.add(new CardTypePredicate(CardType.CREATURE)); + } + + public SkitteringSkirge(UUID ownerId) { + super(ownerId, 158, "Skittering Skirge", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{B}"); + this.expansionSetCode = "USG"; + this.subtype.add("Imp"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When you cast a creature spell, sacrifice Skittering Skirge. + this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), filter, false)); + } + + public SkitteringSkirge(final SkitteringSkirge card) { + super(card); + } + + @Override + public SkitteringSkirge copy() { + return new SkitteringSkirge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/VampiricEmbrace.java b/Mage.Sets/src/mage/sets/urzassaga/VampiricEmbrace.java index e8157d73dc..325bceb58f 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/VampiricEmbrace.java +++ b/Mage.Sets/src/mage/sets/urzassaga/VampiricEmbrace.java @@ -31,6 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesAndDealtDamageThisTurnTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -65,11 +66,12 @@ public class VampiricEmbrace extends CardImpl { this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - // Enchanted creature gets +2/+2 and has flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); - + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2)); + Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); + effect.setText("and has flying"); + ability.addEffect(effect); + this.addAbility(ability); // Whenever a creature dealt damage by enchanted creature this turn dies, put a +1/+1 counter on that creature. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new DiesAndDealtDamageThisTurnTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false), AttachmentType.AURA))); } diff --git a/Mage.Sets/src/mage/sets/urzassaga/ZephidsEmbrace.java b/Mage.Sets/src/mage/sets/urzassaga/ZephidsEmbrace.java index 0c90e838c9..b3608bf3dc 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/ZephidsEmbrace.java +++ b/Mage.Sets/src/mage/sets/urzassaga/ZephidsEmbrace.java @@ -29,23 +29,21 @@ package mage.sets.urzassaga; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.SubLayer; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ShroudAbility; import mage.cards.CardImpl; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -58,15 +56,23 @@ public class ZephidsEmbrace extends CardImpl { public ZephidsEmbrace(UUID ownerId) { super(ownerId, 114, "Zephid's Embrace", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}{U}"); this.expansionSetCode = "USG"; - this.subtype.add("Aura"); + // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ZephidsEmbraceEffect())); + // Enchanted creature gets +2/+2 and has flying and shroud. + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2)); + Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); + effect.setText("and has flying"); + ability.addEffect(effect); + effect = new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA); + effect.setText("and shroud"); + ability.addEffect(effect); + this.addAbility(ability); } public ZephidsEmbrace(final ZephidsEmbrace card) { @@ -78,57 +84,3 @@ public class ZephidsEmbrace extends CardImpl { return new ZephidsEmbrace(this); } } - -class ZephidsEmbraceEffect extends ContinuousEffectImpl { - - public ZephidsEmbraceEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment); - staticText = "Enchanted creature gets +2/+2 and has flying and shroud"; - } - - public ZephidsEmbraceEffect(final ZephidsEmbraceEffect effect) { - super(effect); - } - - @Override - public ZephidsEmbraceEffect copy() { - return new ZephidsEmbraceEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo() != null) { - Permanent creature = game.getPermanent(enchantment.getAttachedTo()); - if (creature != null) { - switch (layer) { - case PTChangingEffects_7: - if (sublayer == SubLayer.ModifyPT_7c) { - creature.addPower(2); - creature.addToughness(2); - } - break; - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - creature.addAbility(FlyingAbility.getInstance(), game); - creature.addAbility(ShroudAbility.getInstance(), game); - } - break; - } - return true; - } - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.AbilityAddingRemovingEffects_6 || layer == Layer.PTChangingEffects_7; - } - -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java b/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java index 247b5ecf8b..241c2d5b49 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/DecreeOfJustice.java @@ -60,7 +60,7 @@ public class DecreeOfJustice extends CardImpl { // Put X 4/4 white Angel creature tokens with flying onto the battlefield. - this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken("C14"), new ManacostVariableValue())); + this.getSpellAbility().addEffect(new CreateTokenEffect(new AngelToken(), new ManacostVariableValue())); // Cycling {2}{W} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{W}"))); diff --git a/Mage.Sets/src/mage/sets/vintagemasters/FlowstoneSculpture.java b/Mage.Sets/src/mage/sets/vintagemasters/FlowstoneSculpture.java new file mode 100644 index 0000000000..6d67f89d7a --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/FlowstoneSculpture.java @@ -0,0 +1,144 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.vintagemasters; + +import java.util.HashSet; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LoneFox + */ +public class FlowstoneSculpture extends CardImpl { + + public FlowstoneSculpture(UUID ownerId) { + super(ownerId, 268, "Flowstone Sculpture", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{6}"); + this.expansionSetCode = "VMA"; + this.subtype.add("Shapeshifter"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // {2}, Discard a card: Put a +1/+1 counter on Flowstone Sculpture or Flowstone Sculpture gains flying, first strike, or trample. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new FlowstoneSculptureEffect(), new ManaCostsImpl("{2}")); + ability.addCost(new DiscardCardCost()); + this.addAbility(ability); + } + + public FlowstoneSculpture(final FlowstoneSculpture card) { + super(card); + } + + @Override + public FlowstoneSculpture copy() { + return new FlowstoneSculpture(this); + } +} + +class FlowstoneSculptureEffect extends OneShotEffect { + + private static final HashSet choices = new HashSet<>(); + + static { + choices.add("+1/+1 counter"); + choices.add("Flying"); + choices.add("First Strike"); + choices.add("Trample"); + } + + public FlowstoneSculptureEffect() { + super(Outcome.Benefit); + staticText = "Put a +1/+1 counter on {this} or {this} gains flying, first strike, or trample."; + } + + public FlowstoneSculptureEffect(final FlowstoneSculptureEffect effect) { + super(effect); + } + + @Override + public FlowstoneSculptureEffect copy() { + return new FlowstoneSculptureEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if(controller != null) { + Choice choice = new ChoiceImpl(true); + choice.setMessage("Choose ability to add"); + choice.setChoices(choices); + while(!controller.choose(outcome, choice, game)) { + if(controller.canRespond()) { + return false; + } + } + + String chosen = choice.getChoice(); + if(chosen.equals("+1/+1 counter")) { + return new AddCountersSourceEffect(CounterType.P1P1.createInstance()).apply(game, source); + } + else { + Ability gainedAbility; + if(chosen.equals("Flying")) { + gainedAbility = FlyingAbility.getInstance(); + } + else if(chosen.equals("First strike")) { + gainedAbility = FirstStrikeAbility.getInstance(); + } + else { + gainedAbility = TrampleAbility.getInstance(); + } + game.addEffect(new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield), source); + return true; + } + + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/KaerveksTorch.java b/Mage.Sets/src/mage/sets/vintagemasters/KaerveksTorch.java index d94e06339c..2af317e2e4 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/KaerveksTorch.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/KaerveksTorch.java @@ -29,6 +29,7 @@ package mage.sets.vintagemasters; import java.util.UUID; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.SpellAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.ManacostVariableValue; @@ -44,14 +45,13 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.game.Game; import mage.target.Target; -import mage.target.Targets; import mage.target.common.TargetCreatureOrPlayer; import mage.util.CardUtil; /** * * @author LoneFox - + * */ public class KaerveksTorch extends CardImpl { @@ -95,13 +95,11 @@ class KaerveksTorchCostIncreaseEffect extends CostModificationEffectImpl { @Override public boolean applies(Ability abilityToModify, Ability source, Game game) { - if(abilityToModify instanceof SpellAbility || abilityToModify instanceof FlashbackAbility) - { - for(UUID modeId: abilityToModify.getModes().getSelectedModes()) { - abilityToModify.getModes().setActiveMode(modeId); - for(Target target: abilityToModify.getTargets()) { - for(UUID id: target.getTargets()) { - if(id.equals(source.getSourceObject(game).getId())) { + if (abilityToModify instanceof SpellAbility || abilityToModify instanceof FlashbackAbility) { + for (Mode mode : abilityToModify.getModes().getSelectedModes()) { + for (Target target : mode.getTargets()) { + for (UUID targetId : target.getTargets()) { + if (targetId.equals(source.getSourceObject(game).getId())) { return true; } } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java index 0533cb5b64..184e2b898b 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java @@ -140,7 +140,7 @@ class MindsDesireCastFromExileEffect extends AsThoughEffectImpl { Card card = game.getCard(sourceId); if (card != null && game.getState().getZone(sourceId) == Zone.EXILED) { Player player = game.getPlayer(affectedControllerId); - player.setCastSourceIdWithAlternateMana(sourceId, null); + player.setCastSourceIdWithAlternateMana(sourceId, null, null); return true; } } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/ZhalfirinCrusader.java b/Mage.Sets/src/mage/sets/vintagemasters/ZhalfirinCrusader.java new file mode 100644 index 0000000000..1720e354f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/ZhalfirinCrusader.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.vintagemasters; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ZhalfirinCrusader extends mage.sets.visions.ZhalfirinCrusader { + + public ZhalfirinCrusader(UUID ownerId) { + super(ownerId); + this.cardNumber = 54; + this.expansionSetCode = "VMA"; + } + + public ZhalfirinCrusader(final ZhalfirinCrusader card) { + super(card); + } + + @Override + public ZhalfirinCrusader copy() { + return new ZhalfirinCrusader(this); + } +} diff --git a/Mage.Sets/src/mage/sets/visions/FloodedShoreline.java b/Mage.Sets/src/mage/sets/visions/FloodedShoreline.java new file mode 100644 index 0000000000..49d125f91b --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/FloodedShoreline.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.visions; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class FloodedShoreline extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Islands"); + + static { + filter.add(new SubtypePredicate("Island")); + } + + public FloodedShoreline(UUID ownerId) { + super(ownerId, 32, "Flooded Shoreline", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{U}{U}"); + this.expansionSetCode = "VIS"; + + // {U}{U}, Return two Islands you control to their owner's hand: Return target creature to its owner's hand. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{U}{U}")); + ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(2,2, filter, true))); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public FloodedShoreline(final FloodedShoreline card) { + super(card); + } + + @Override + public FloodedShoreline copy() { + return new FloodedShoreline(this); + } +} diff --git a/Mage.Sets/src/mage/sets/visions/Mundungu.java b/Mage.Sets/src/mage/sets/visions/Mundungu.java new file mode 100644 index 0000000000..ca0f29d4f2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/Mundungu.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.visions; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostsImpl; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetSpell; + +/** + * + * @author nigelzor + */ +public class Mundungu extends CardImpl { + + public Mundungu(UUID ownerId) { + super(ownerId, 132, "Mundungu", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}{B}"); + this.expansionSetCode = "VIS"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Counter target spell unless its controller pays {1} and 1 life. + CostsImpl costs = new CostsImpl<>(); + costs.add(new GenericManaCost(1)); + costs.add(new PayLifeCost(1)); + costs.setText("{1} and 1 life"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(costs), new TapSourceCost()); + ability.addTarget(new TargetSpell()); + this.addAbility(ability); + } + + public Mundungu(final Mundungu card) { + super(card); + } + + @Override + public Mundungu copy() { + return new Mundungu(this); + } +} diff --git a/Mage.Sets/src/mage/sets/visions/TalruumPiper.java b/Mage.Sets/src/mage/sets/visions/TalruumPiper.java new file mode 100644 index 0000000000..e37d25ad9d --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/TalruumPiper.java @@ -0,0 +1,112 @@ +/* + * 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.visions; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.RequirementEffect; +import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author nigelzor + */ +public class TalruumPiper extends CardImpl { + + public TalruumPiper(UUID ownerId) { + super(ownerId, 98, "Talruum Piper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{R}"); + this.expansionSetCode = "VIS"; + this.subtype.add("Minotaur"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // All creatures with flying able to block Talruum Piper do so. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TalruumPiperEffect())); + } + + public TalruumPiper(final TalruumPiper card) { + super(card); + } + + @Override + public TalruumPiper copy() { + return new TalruumPiper(this); + } +} + +class TalruumPiperEffect extends RequirementEffect { + + public TalruumPiperEffect() { + super(Duration.WhileOnBattlefield); + staticText = "All creatures with flying able to block {this} do so"; + } + + public TalruumPiperEffect(TalruumPiperEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + Permanent sourceCreature = game.getPermanent(source.getSourceId()); + if (sourceCreature != null && sourceCreature.isAttacking()) { + return permanent.getAbilities().contains(FlyingAbility.getInstance()) + && permanent.canBlock(source.getSourceId(), game); + } + return false; + } + + @Override + public boolean mustAttack(Game game) { + return false; + } + + @Override + public boolean mustBlock(Game game) { + return true; + } + + @Override + public UUID mustBlockAttacker(Ability source, Game game) { + return source.getSourceId(); + } + + @Override + public TalruumPiperEffect copy() { + return new TalruumPiperEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/visions/WakeOfVultures.java b/Mage.Sets/src/mage/sets/visions/WakeOfVultures.java new file mode 100644 index 0000000000..37f78dd931 --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/WakeOfVultures.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.visions; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author nigelzor + */ +public class WakeOfVultures extends CardImpl { + + public WakeOfVultures(UUID ownerId) { + super(ownerId, 24, "Wake of Vultures", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "VIS"; + this.subtype.add("Bird"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // {1}{B}, Sacrifice a creature: Regenerate Wake of Vultures. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{1}{B}")); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent())); + this.addAbility(ability); + } + + public WakeOfVultures(final WakeOfVultures card) { + super(card); + } + + @Override + public WakeOfVultures copy() { + return new WakeOfVultures(this); + } +} diff --git a/Mage.Sets/src/mage/sets/visions/ZhalfirinCrusader.java b/Mage.Sets/src/mage/sets/visions/ZhalfirinCrusader.java new file mode 100644 index 0000000000..e717afcf8f --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/ZhalfirinCrusader.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.visions; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.RedirectDamageFromSourceToTargetEffect; +import mage.abilities.keyword.FlankingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class ZhalfirinCrusader extends CardImpl { + + public ZhalfirinCrusader(UUID ownerId) { + super(ownerId, 125, "Zhalfirin Crusader", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); + this.expansionSetCode = "VIS"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flanking + this.addAbility(new FlankingAbility()); + + // {1}{W}: The next 1 damage that would be dealt to Zhalfirin Crusader this turn is dealt to target creature or player instead. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RedirectDamageFromSourceToTargetEffect(Duration.EndOfTurn, 1, true), new ManaCostsImpl("{1}{W}")); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public ZhalfirinCrusader(final ZhalfirinCrusader card) { + super(card); + } + + @Override + public ZhalfirinCrusader copy() { + return new ZhalfirinCrusader(this); + } +} diff --git a/Mage.Sets/src/mage/sets/worldwake/DeathsShadow.java b/Mage.Sets/src/mage/sets/worldwake/DeathsShadow.java index 06208b8a2b..57ea6364b1 100644 --- a/Mage.Sets/src/mage/sets/worldwake/DeathsShadow.java +++ b/Mage.Sets/src/mage/sets/worldwake/DeathsShadow.java @@ -55,7 +55,8 @@ public class DeathsShadow extends CardImpl { this.toughness = new MageInt(13); // Death's Shadow gets -X/-X, where X is your life total. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new SignInversionDynamicValue(new ControllerLifeCount()), new SignInversionDynamicValue(new ControllerLifeCount()), Duration.WhileOnBattlefield))); + SignInversionDynamicValue x = new SignInversionDynamicValue(new ControllerLifeCount()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(x, x, Duration.WhileOnBattlefield))); } public DeathsShadow(final DeathsShadow card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/QuestForRenewal.java b/Mage.Sets/src/mage/sets/worldwake/QuestForRenewal.java index 0e54dc6ac1..bea09ad6d9 100644 --- a/Mage.Sets/src/mage/sets/worldwake/QuestForRenewal.java +++ b/Mage.Sets/src/mage/sets/worldwake/QuestForRenewal.java @@ -28,7 +28,7 @@ package mage.sets.worldwake; import java.util.UUID; -import mage.abilities.common.BecomesTappedCreatureControlledTriggeredAbility; +import mage.abilities.common.BecomesTappedTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.SourceHasCounterCondition; import mage.abilities.decorator.ConditionalContinuousEffect; @@ -46,22 +46,20 @@ import mage.filter.common.FilterControlledCreaturePermanent; * @author jeffwadsworth */ public class QuestForRenewal extends CardImpl { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control"); public QuestForRenewal(UUID ownerId) { super(ownerId, 110, "Quest for Renewal", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); this.expansionSetCode = "WWK"; - // Whenever a creature you control becomes tapped, you may put a quest counter on Quest for Renewal. - this.addAbility(new BecomesTappedCreatureControlledTriggeredAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true)); - + this.addAbility(new BecomesTappedTriggeredAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()), + true, new FilterControlledCreaturePermanent("a creature you control"))); + // As long as there are four or more quest counters on Quest for Renewal, untap all creatures you control during each other player's untap step. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new UntapAllDuringEachOtherPlayersUntapStepEffect(filter), - new SourceHasCounterCondition(CounterType.QUEST, 4), - "As long as there are four or more quest counters on {this}, untap all creatures you control during each other player's untap step."))); + new UntapAllDuringEachOtherPlayersUntapStepEffect(new FilterControlledCreaturePermanent()), + new SourceHasCounterCondition(CounterType.QUEST, 4), + "As long as there are four or more quest counters on {this}, untap all creatures you control during each other player's untap step."))); } public QuestForRenewal(final QuestForRenewal card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java b/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java index 2bab309e9c..d6f1d3c739 100644 --- a/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java @@ -30,7 +30,6 @@ package mage.sets.worldwake; import mage.constants.*; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.SpellAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -47,6 +46,7 @@ import mage.target.targetpointer.FixedTarget; import mage.util.CardUtil; import java.util.UUID; +import mage.game.permanent.Permanent; /** * @@ -54,7 +54,6 @@ import java.util.UUID; */ public class StoneIdolTrap extends CardImpl { - public StoneIdolTrap(UUID ownerId) { super(ownerId, 93, "Stone Idol Trap", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{5}{R}"); this.expansionSetCode = "WWK"; @@ -86,6 +85,7 @@ class StoneIdolTrapCostReductionEffect extends CostModificationEffectImpl { static { filter.add(new AttackingPredicate()); } + public StoneIdolTrapCostReductionEffect() { super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST); staticText = "{this} costs {1} less to cast for each attacking creature"; @@ -97,7 +97,7 @@ class StoneIdolTrapCostReductionEffect extends CostModificationEffectImpl { @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { - int reductionAmount = game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(),game); + int reductionAmount = game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game); CardUtil.reduceCost(abilityToModify, reductionAmount); return true; } @@ -136,14 +136,14 @@ class StoneIdolTrapEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { StoneTrapIdolToken token = new StoneTrapIdolToken(); token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - ExileTargetEffect exileEffect = new ExileTargetEffect("exile the token"); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect, TargetController.YOU); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); - + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } } diff --git a/Mage.Sets/src/mage/sets/zendikar/BalothCageTrap.java b/Mage.Sets/src/mage/sets/zendikar/BalothCageTrap.java index 74f2f9c663..492af7f4d4 100644 --- a/Mage.Sets/src/mage/sets/zendikar/BalothCageTrap.java +++ b/Mage.Sets/src/mage/sets/zendikar/BalothCageTrap.java @@ -28,7 +28,6 @@ package mage.sets.zendikar; import java.util.UUID; -import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.costs.AlternativeCostImpl; import mage.abilities.costs.mana.ManaCostsImpl; @@ -54,7 +53,6 @@ public class BalothCageTrap extends CardImpl { this.expansionSetCode = "ZEN"; this.subtype.add("Trap"); - // If an opponent had an artifact enter the battlefield under his or her control this turn, you may pay {1}{G} rather than pay Baloth Cage Trap's mana cost. this.getSpellAbility().addAlternativeCost(new BalothCageTrapAlternativeCost()); this.getSpellAbility().addWatcher(new BalothCageTrapWatcher()); diff --git a/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java b/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java index dbe2952eb5..78c175f96c 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java +++ b/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java @@ -33,7 +33,6 @@ import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Rarity; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.condition.LockedInCondition; import mage.abilities.condition.common.KickedCondition; @@ -44,6 +43,7 @@ import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.keyword.KickerAbility; import mage.cards.CardImpl; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; /** @@ -56,7 +56,6 @@ public class ElementalAppeal extends CardImpl { super(ownerId, 123, "Elemental Appeal", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{R}{R}{R}{R}"); this.expansionSetCode = "ZEN"; - // Kicker {5} this.addAbility(new KickerAbility("{5}")); @@ -100,17 +99,14 @@ class ElementalAppealEffect extends OneShotEffect { ElementalToken token = new ElementalToken(); token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - FixedTarget fixedTarget = new FixedTarget(token.getLastAddedToken()); - source.getEffects().get(1).setTargetPointer(fixedTarget); - - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(fixedTarget); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); - + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } } diff --git a/Mage.Sets/src/mage/sets/zendikar/IorRuinExpedition.java b/Mage.Sets/src/mage/sets/zendikar/IorRuinExpedition.java index 57d4201cfc..c8df9cd151 100644 --- a/Mage.Sets/src/mage/sets/zendikar/IorRuinExpedition.java +++ b/Mage.Sets/src/mage/sets/zendikar/IorRuinExpedition.java @@ -27,8 +27,7 @@ */ package mage.sets.zendikar; -import mage.constants.CardType; -import mage.constants.Rarity; +import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.LandfallAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -37,11 +36,11 @@ import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.constants.Zone; import mage.counters.CounterType; -import java.util.UUID; - /** * * @author Loki @@ -52,9 +51,11 @@ public class IorRuinExpedition extends CardImpl { super(ownerId, 49, "Ior Ruin Expedition", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); this.expansionSetCode = "ZEN"; - + // Landfall - Whenever a land enters the battlefield under your control, you may put a quest counter on Ior Ruin Expedition. this.addAbility(new LandfallAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true)); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(3), new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3))); + + // Remove three quest counters from Ior Ruin Expedition and sacrifice it: Draw two cards. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2), new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3))); ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/zendikar/JourneyToNowhere.java b/Mage.Sets/src/mage/sets/zendikar/JourneyToNowhere.java index e4b5afec2e..5fce040e7d 100644 --- a/Mage.Sets/src/mage/sets/zendikar/JourneyToNowhere.java +++ b/Mage.Sets/src/mage/sets/zendikar/JourneyToNowhere.java @@ -1,43 +1,42 @@ /* -* Copyright 2010 maurer.it_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 maurer.it_at_googlemail.com. -*/ - + * Copyright 2010 maurer.it_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 maurer.it_at_googlemail.com. + */ package mage.sets.zendikar; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnFromExileForSourceEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.Target; @@ -53,7 +52,6 @@ public class JourneyToNowhere extends CardImpl { super(ownerId, 14, "Journey to Nowhere", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); this.expansionSetCode = "ZEN"; - // When Journey to Nowhere enters the battlefield, exile target creature. FilterCreaturePermanent filter = new FilterCreaturePermanent(); filter.add(new AnotherPredicate()); @@ -61,7 +59,7 @@ public class JourneyToNowhere extends CardImpl { Target target = new TargetPermanent(filter); ability1.addTarget(target); this.addAbility(ability1); - + // When Journey to Nowhere leaves the battlefield, return the exiled card to the battlefield under its owner's control. Ability ability2 = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false); this.addAbility(ability2); diff --git a/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java b/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java index a6d09201a6..8bc084c9f7 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java +++ b/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java @@ -28,14 +28,8 @@ package mage.sets.zendikar; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; -import mage.ObjectColor; import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.LandfallAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; @@ -47,8 +41,13 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.counters.CounterType; import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.target.targetpointer.FixedTarget; @@ -62,7 +61,6 @@ public class ZektarShrineExpedition extends CardImpl { super(ownerId, 155, "Zektar Shrine Expedition", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}"); this.expansionSetCode = "ZEN"; - // Landfall - Whenever a land enters the battlefield under your control, you may put a quest counter on Zektar Shrine Expedition. this.addAbility(new LandfallAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true)); // Remove three quest counters from Zektar Shrine Expedition and sacrifice it: Put a 7/1 red Elemental creature token with trample and haste onto the battlefield. Exile it at the beginning of the next end step. @@ -101,15 +99,14 @@ class ZektarShrineExpeditionEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { ElementalToken token = new ElementalToken(); token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); - + for (UUID tokenId : token.getLastAddedTokenIds()) { + Permanent tokenPermanent = game.getPermanent(tokenId); + if (tokenPermanent != null) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source); + } + } return true; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastDestroySpellsTest.java b/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastDestroySpellsTest.java index 458bd5012f..1e595c19e6 100644 --- a/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastDestroySpellsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastDestroySpellsTest.java @@ -45,11 +45,13 @@ public class CastDestroySpellsTest extends CardTestPlayerBaseAI { @Test public void testOrzhovCharm() { // Choose one - - // Return target creature you control and all Auras you control attached to it to their owner's hand; - // or destroy target creature and you lose life equal to its toughness; - // or return target creature card with converted mana cost 1 or less from your graveyard to the battlefield. + // - Return target creature you control and all Auras you control attached to it to their owner's hand; + // - Destroy target creature and you lose life equal to its toughness; + // - Return target creature card with converted mana cost 1 or less from your graveyard to the battlefield. addCard(Zone.HAND, playerA, "Orzhov Charm"); // {W}{B} + // {T}: Add {1} to your mana pool. + // {T} {W/B}, {T}: Add {W}{W}, {W}{B}, or {B}{B} to your mana pool. addCard(Zone.BATTLEFIELD, playerA, "Fetid Heath", 1); addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/abilitywords/DomainTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/abilitywords/DomainTest.java new file mode 100644 index 0000000000..a74ad001f9 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/abilitywords/DomainTest.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 org.mage.test.cards.abilities.abilitywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class DomainTest extends CardTestPlayerBase { + + /** + * Collapsing Borders correctly does the 3 damage to each player at the + * beginning of their upkeeps. However, it does NOT add any life for each + * type of basic land the player has on the field. + */ + @Test + public void testCollapsingBorders() { + // Domain - At the beginning of each player's upkeep, that player gains 1 life for each basic land type among lands he or she controls. + // Then Collapsing Borders deals 3 damage to him or her. + addCard(Zone.HAND, playerA, "Collapsing Borders", 1); // {3}{R} + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collapsing Borders"); + + setStopAt(3, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Collapsing Borders", 1); + + assertLife(playerA, 21); + assertLife(playerB, 18); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/ReturnToHandTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/ReturnToHandTest.java index 5e55cb4d37..22c8614b8a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/ReturnToHandTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/ReturnToHandTest.java @@ -51,10 +51,11 @@ public class ReturnToHandTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); addCard(Zone.BATTLEFIELD, playerB, "Mountain", 3); - addCard(Zone.HAND, playerB, "Bone Splinters"); // As an additional cost to cast Bone Splinters, sacrifice a creature. // Destroy target creature. + addCard(Zone.HAND, playerB, "Bone Splinters"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Bone Splinters", "Pillarfield Ox"); setChoice(playerB, "Skarrgan Firebird"); @@ -126,7 +127,7 @@ public class ReturnToHandTest extends CardTestPlayerBase { // Devoid // Choose one or both // - Return target spell or creature to its owner's hand; - // or Brutal Expulsion deals 2 damage to target creature or planeswalker. If that permanent would be put into a graveyard this turn, exile it instead. + // - Brutal Expulsion deals 2 damage to target creature or planeswalker. If that permanent would be put into a graveyard this turn, exile it instead. addCard(Zone.HAND, playerA, "Brutal Expulsion"); // {2}{U}{R} addCard(Zone.BATTLEFIELD, playerB, "Plains", 4); @@ -135,6 +136,8 @@ public class ReturnToHandTest extends CardTestPlayerBase { castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Pillarfield Ox"); castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerA, "Brutal Expulsion", "mode=1Pillarfield Ox^mode=2Silvercoat Lion", "Pillarfield Ox"); + setModeChoice(playerA, "1"); + setModeChoice(playerA, "2"); setStopAt(2, PhaseStep.BEGIN_COMBAT); execute(); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeathtouchTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeathtouchTest.java index 1f9a2f19cf..03e32789ff 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeathtouchTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeathtouchTest.java @@ -86,7 +86,7 @@ public class DeathtouchTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Marath, Will of the Wild"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", "Marath, Will of the Wild"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Equip {2}", "Marath, Will of the Wild", "Marath, Will of the Wild", StackClause.WHILE_NOT_ON_STACK); activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{X},Remove X +1/+1 counters from Marath", "Archangel of Thune"); setChoice(playerA, "X=3"); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java index 3472d6e139..54826d01ca 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EvolveTest.java @@ -25,11 +25,11 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package org.mage.test.cards.abilities.keywords; import mage.constants.PhaseStep; import mage.constants.Zone; +import mage.filter.Filter; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -37,15 +37,12 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ - - public class EvolveTest extends CardTestPlayerBase { @Test public void testCreatureComesIntoPlay() { // Cloudfin Raptor gets one +1/+1 because Mindeye Drake comes into play - addCard(Zone.BATTLEFIELD, playerA, "Island", 5); addCard(Zone.BATTLEFIELD, playerA, "Cloudfin Raptor", 1); @@ -70,7 +67,6 @@ public class EvolveTest extends CardTestPlayerBase { public void testCreatureComesIntoPlayNoCounter() { // Experiment One gets no counter because Kird Ape is 1/1 with no Forest in play - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); addCard(Zone.BATTLEFIELD, playerA, "Experiment One", 1); @@ -95,7 +91,6 @@ public class EvolveTest extends CardTestPlayerBase { public void testCreatureComesStrongerIntoPlayCounter() { // Experiment One gets a counter because Kird Ape is 2/2 with a Forest in play - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); addCard(Zone.BATTLEFIELD, playerA, "Experiment One", 1); @@ -121,7 +116,6 @@ public class EvolveTest extends CardTestPlayerBase { public void testEvolveWithMasterBiomance() { // Experiment One gets a counter because Kird Ape is 2/2 with a Forest in play - addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); addCard(Zone.BATTLEFIELD, playerA, "Experiment One", 1); addCard(Zone.BATTLEFIELD, playerA, "Master Biomancer", 1); @@ -145,20 +139,18 @@ public class EvolveTest extends CardTestPlayerBase { assertPowerToughness(playerA, "Experiment One", 3, 3); } - + @Test public void testMultipleCreaturesComeIntoPlay() { // Cloudfin Raptor gets one +1/+1 because itself and other creatur return from exile - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6); addCard(Zone.BATTLEFIELD, playerA, "Judge's Familiar", 1); addCard(Zone.BATTLEFIELD, playerA, "Cloudfin Raptor", 1); addCard(Zone.HAND, playerA, "Mizzium Mortars", 1); - + addCard(Zone.BATTLEFIELD, playerB, "Plains", 6); addCard(Zone.HAND, playerB, "Banisher Priest", 2); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Banisher Priest"); addTarget(playerB, "Cloudfin Raptor"); @@ -174,7 +166,7 @@ public class EvolveTest extends CardTestPlayerBase { assertLife(playerB, 20); assertPermanentCount(playerB, "Banisher Priest", 0); - + assertGraveyardCount(playerB, 2); assertGraveyardCount(playerA, 1); @@ -182,26 +174,22 @@ public class EvolveTest extends CardTestPlayerBase { assertPermanentCount(playerA, "Judge's Familiar", 1); assertPowerToughness(playerA, "Cloudfin Raptor", 1, 2); - - - } - + + } + @Test public void testMultipleCreaturesComeIntoPlaySuddenDisappearance() { // Sudden Disappearance // Sorcery {5}{W} - // Exile all nonland permanents target player controls. Return the exiled cards + // Exile all nonland permanents target player controls. Return the exiled cards // to the battlefield under their owner's control at the beginning of the next end step. - // Battering Krasis (2/1) and Crocanura (1/3) get both a +1/+1 counter each other because they come into play at the same time - addCard(Zone.BATTLEFIELD, playerA, "Battering Krasis", 1); addCard(Zone.BATTLEFIELD, playerA, "Crocanura", 1); - + addCard(Zone.BATTLEFIELD, playerB, "Plains", 6); addCard(Zone.HAND, playerB, "Sudden Disappearance", 2); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Sudden Disappearance", playerA); @@ -210,7 +198,7 @@ public class EvolveTest extends CardTestPlayerBase { assertLife(playerA, 20); assertLife(playerB, 20); - + assertGraveyardCount(playerB, 1); assertGraveyardCount(playerA, 0); @@ -219,9 +207,59 @@ public class EvolveTest extends CardTestPlayerBase { assertPowerToughness(playerA, "Battering Krasis", 3, 2); assertPowerToughness(playerA, "Crocanura", 2, 4); - - - } - - + + } + + /* + * Renegade Krasis's ability when trigger it evolves is not triggered under + * case. + * + * I control Renegade Krasis and two Ivy Lane Denizen. (Renegade Krasis and + * one of Ivy Lane Denizen have a +1/+1 counter on it) + * I cast Adaptive Snapjaw. + * When it resolves, there are three abilities on going to stack, + * Renegade Krasis's Evolve Ability, two Ivy Lane Denizen ability. + * I take two Ivy Lane Denizen on to the stack and then Renegade Krasis's Evolve + * Ability, so resolving Renegade Krasis's Evolve Ability is first . (Maybe + * Ivy Lane Denizen's target is any.) When Renegade Krasis's Evolve Ability + * resolves, +1/+1 counter is placed on it, but doesn't triggers Renegade + * Krasis's second ability. + */ + @Test + public void testRenegadeKrasis() { + + // Evolve (Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness + // than this creature, put a +1/+1 counter on this creature.) + // Whenever Renegade Krasis evolves, put a +1/+1 counter on each other creature you control with a +1/+1 counter on it. + addCard(Zone.BATTLEFIELD, playerA, "Renegade Krasis", 1); // 3/2 + addCard(Zone.BATTLEFIELD, playerA, "Ivy Lane Denizen", 1); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 9); + + // Whenever another green creature enters the battlefield under your control, put a +1/+1 counter on target creature. + addCard(Zone.HAND, playerA, "Ivy Lane Denizen", 1); // {3}{G} - Creature 2/3 + // Evolve + addCard(Zone.HAND, playerA, "Adaptive Snapjaw", 1); // {4}{G} - Creature 6/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ivy Lane Denizen"); + addTarget(playerA, "Ivy Lane Denizen"); + setChoice(playerA, "Evolve"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Adaptive Snapjaw"); + addTarget(playerA, "Adaptive Snapjaw"); + addTarget(playerA, "Adaptive Snapjaw"); + setChoice(playerA, "Whenever {this} evolves"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Renegade Krasis", 1); + assertPermanentCount(playerA, "Ivy Lane Denizen", 2); + assertPermanentCount(playerA, "Adaptive Snapjaw", 1); + + assertPowerToughness(playerA, "Adaptive Snapjaw", 9, 5); // +2 from Ivys and +1 from add to all with +1/+1 counter + assertPowerToughness(playerA, "Renegade Krasis", 5, 4); // +1 Evolve by Ivy and +1 Evolve by Snapjaw + assertPowerToughness(playerA, "Ivy Lane Denizen", 2, 3, Filter.ComparisonScope.Any); + assertPowerToughness(playerA, "Ivy Lane Denizen", 5, 6, Filter.ComparisonScope.Any); // +1 from Other Ivy + 2 from Krasis + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/FlashbackTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/FlashbackTest.java index 33e68b79c9..7f0273567c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/FlashbackTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/FlashbackTest.java @@ -148,4 +148,34 @@ public class FlashbackTest extends CardTestPlayerBase { assertExileCount("Unified Front", 1); } + + /** + * Conflagrate flashback no longer works. Requires mana payment but never + * allows target selection before resolving. + */ + @Test + public void testConflagrate() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + + // Conflagrate deals X damage divided as you choose among any number of target creatures and/or players. + // Flashback-{R}{R}, Discard X cards. + addCard(Zone.HAND, playerA, "Conflagrate", 1); + + addCard(Zone.HAND, playerA, "Forest", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Conflagrate"); + setChoice(playerA, "X=2"); + + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Flashback"); + setChoice(playerA, "X=4"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 14); + + assertExileCount("Conflagrate", 1); + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HeroicTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HeroicTest.java index 9ba14bc632..e1b4b6739d 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HeroicTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/HeroicTest.java @@ -36,30 +36,29 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ - public class HeroicTest extends CardTestPlayerBase { /** - * When casting Dromoka's Command targeting two of my own Heroic creatures, only one of them triggers. - * It appears to be the one targeted with mode 4 (fight) rather than the one targeted with mode 3 (+1/+1 counter). + * When casting Dromoka's Command targeting two of my own Heroic creatures, + * only one of them triggers. It appears to be the one targeted with mode 4 + * (fight) rather than the one targeted with mode 3 (+1/+1 counter). * Screenshot attached. Reproducible. */ - @Test public void testHeroicWithModal() { // Heroic - Whenever you cast a spell that targets Favored Hoplite, put a +1/+1 counter on Favored Hoplite and prevent all damage that would be dealt to it this turn. addCard(Zone.BATTLEFIELD, playerA, "Favored Hoplite", 1); // 1/2 // Heroic — Whenever you cast a spell that targets Lagonna-Band Trailblazer, put a +1/+1 counter on Lagonna-Band Trailblazer. addCard(Zone.BATTLEFIELD, playerA, "Lagonna-Band Trailblazer"); // 0/4 - + // Mode 3 = Put a +1/+1 counter on target creature // Mode 4 = Target creature you control fights target creature you don't control addCard(Zone.HAND, playerA, "Dromoka's Command", 1); // {G}{W} addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dromoka's Command", "mode=3Lagonna-Band Trailblazer^mode=4Favored Hoplite^Silvercoat Lion"); // Silvercoat lion will be set by AI as only possible target setModeChoice(playerA, "3"); @@ -69,11 +68,11 @@ public class HeroicTest extends CardTestPlayerBase { execute(); assertGraveyardCount(playerA, "Dromoka's Command", 1); - + assertPowerToughness(playerA, "Favored Hoplite", 2, 3); assertGraveyardCount(playerB, "Silvercoat Lion", 1); assertPowerToughness(playerA, "Lagonna-Band Trailblazer", 2, 6); - + } - + } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java index 0e045507f5..7b35f5ef6a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java @@ -47,7 +47,7 @@ public class MorphTest extends CardTestPlayerBase { * */ @Test - public void testCastMoprhCreatureWithoutMorph() { + public void testCastMorphCreatureWithoutMorph() { /* Pine Walker Creature - Elemental diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CrypticCommandTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CrypticCommandTest.java index 804af9f69d..5a8c29325c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CrypticCommandTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CrypticCommandTest.java @@ -1,31 +1,30 @@ /* -* 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. -*/ - + * 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 org.mage.test.cards.abilities.oneshot.counterspell; import mage.constants.PhaseStep; @@ -34,17 +33,17 @@ import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; /** - * Cryptic Command - * Instant, 1UUU - * Choose two — Counter target spell; or return target permanent to its owner's hand; or tap all creatures your opponents control; or draw a card. + * Cryptic Command Instant, 1UUU Choose two — Counter target spell; or return + * target permanent to its owner's hand; or tap all creatures your opponents + * control; or draw a card. * * @author LevelX2 */ public class CrypticCommandTest extends CardTestPlayerBase { /** - * Test that if command has only one target and that targets is not valid on resolution, Cryptic Command fizzeles - * The player does not draw a card + * Test that if command has only one target and that targets is not valid on + * resolution, Cryptic Command fizzeles The player does not draw a card */ @Test public void testCommand() { @@ -54,16 +53,16 @@ public class CrypticCommandTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Remand"); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); addCard(Zone.BATTLEFIELD, playerA, "Island", 2); - + addCard(Zone.HAND, playerB, "Cryptic Command"); addCard(Zone.BATTLEFIELD, playerB, "Island", 4); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thoughtseize", playerB); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Cryptic Command", "Thoughtseize"); setModeChoice(playerB, "1"); // Counter target spell setModeChoice(playerB, "4"); // Draw a card - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Remand", "Thoughtseize", "Cast Cryptic Command"); setStopAt(1, PhaseStep.CLEANUP); @@ -78,14 +77,16 @@ public class CrypticCommandTest extends CardTestPlayerBase { assertGraveyardCount(playerB, 1); assertHandCount(playerA, 2); // Thoughtsize + card drawn from Remand assertHandCount(playerB, 0); // Because Cryptic Command has no legal target playerB does not draw a card and has 0 cards in hand - + } - /** - * Game is not letting me play Ricochet Trap targetting oponent's Cryptic Command, - * modes 1 and 4. It only has one target and should be allowed + + /** + * Game is not letting me play Ricochet Trap targetting oponent's Cryptic + * Command, modes 1 and 4. It only has one target and should be allowed */ @Test public void testCommandChangeTarget() { + // Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. You lose 2 life. addCard(Zone.HAND, playerA, "Thoughtseize"); // Counter target spell. If that spell is countered this way, put it into its owner's hand instead of into that player's graveyard. // Draw a card. @@ -93,19 +94,19 @@ public class CrypticCommandTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Lightning Bolt"); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); - + addCard(Zone.HAND, playerB, "Cryptic Command"); addCard(Zone.BATTLEFIELD, playerB, "Island", 4); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thoughtseize", playerB); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Cryptic Command", "Thoughtseize"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Cryptic Command", "mode=1Thoughtseize", "Thoughtseize", StackClause.WHILE_ON_STACK); setModeChoice(playerB, "1"); // Counter target spell setModeChoice(playerB, "4"); // Draw a card - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ricochet Trap", "Cryptic Command"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ricochet Trap", "Cryptic Command", "Cryptic Command", StackClause.WHILE_ON_STACK); addTarget(playerA, "Lightning Bolt"); - + setStopAt(1, PhaseStep.CLEANUP); execute(); @@ -118,6 +119,6 @@ public class CrypticCommandTest extends CardTestPlayerBase { assertGraveyardCount(playerA, "Lightning Bolt", 1); assertHandCount(playerB, 1); // card drawn from Cryptic Command - + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/NotOfThisWorldTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/NotOfThisWorldTest.java index 41d3992a21..dbd08d1412 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/NotOfThisWorldTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/NotOfThisWorldTest.java @@ -63,6 +63,7 @@ public class NotOfThisWorldTest extends CardTestPlayerBase { setStopAt(2, PhaseStep.PRECOMBAT_MAIN); execute(); + assertHandCount(playerB, "Not of This World", 0); assertGraveyardCount(playerB, "Not of This World", 1); assertPermanentCount(playerB, "Ruhan of the Fomori", 1); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/JayaBallardTaskMageTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/JayaBallardTaskMageTest.java new file mode 100644 index 0000000000..809e42c861 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/JayaBallardTaskMageTest.java @@ -0,0 +1,122 @@ +/* + * 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 org.mage.test.cards.abilities.oneshot.damage; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class JayaBallardTaskMageTest extends CardTestPlayerBase { + + @Test + public void testDamageNormal() { + // {R}, {tap}, Discard a card: Destroy target blue permanent. + // {1}{R}, {tap}, Discard a card: Jaya Ballard, Task Mage deals 3 damage to target creature or player. A creature dealt damage this way can't be regenerated this turn. + // {5}{R}{R}, {tap}, Discard a card: Jaya Ballard deals 6 damage to each creature and each player. + addCard(Zone.BATTLEFIELD, playerA, "Jaya Ballard, Task Mage"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{5}{R}{R}"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Jaya Ballard, Task Mage", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + + assertGraveyardCount(playerB, "Pillarfield Ox", 1); + + assertLife(playerA, 14); + assertLife(playerB, 14); + } + + @Test + public void testDamageWithDeathPitsOfRath() { + // {R}, {tap}, Discard a card: Destroy target blue permanent. + // {1}{R}, {tap}, Discard a card: Jaya Ballard, Task Mage deals 3 damage to target creature or player. A creature dealt damage this way can't be regenerated this turn. + // {5}{R}{R}, {tap}, Discard a card: Jaya Ballard deals 6 damage to each creature and each player. + addCard(Zone.BATTLEFIELD, playerA, "Jaya Ballard, Task Mage"); + // Whenever a creature is dealt damage, destroy it. It can't be regenerated. + addCard(Zone.BATTLEFIELD, playerA, "Death Pits of Rath"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{5}{R}{R}"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Jaya Ballard, Task Mage", 1); + assertPermanentCount(playerA, "Death Pits of Rath", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + + assertGraveyardCount(playerB, "Pillarfield Ox", 1); + + assertLife(playerA, 14); + assertLife(playerB, 14); + } + + @Test + public void testDamageWithRepercussion() { + // {R}, {tap}, Discard a card: Destroy target blue permanent. + // {1}{R}, {tap}, Discard a card: Jaya Ballard, Task Mage deals 3 damage to target creature or player. A creature dealt damage this way can't be regenerated this turn. + // {5}{R}{R}, {tap}, Discard a card: Jaya Ballard deals 6 damage to each creature and each player. + addCard(Zone.BATTLEFIELD, playerA, "Jaya Ballard, Task Mage"); + // Whenever a creature is dealt damage, Repercussion deals that much damage to that creature's controller. + addCard(Zone.BATTLEFIELD, playerA, "Repercussion"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 2); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{5}{R}{R}"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Jaya Ballard, Task Mage", 1); + assertPermanentCount(playerA, "Repercussion", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + + assertGraveyardCount(playerB, "Pillarfield Ox", 2); + + assertLife(playerA, 8); + assertLife(playerB, 2); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffects.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffects.java new file mode 100644 index 0000000000..3805325ccb --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LandTypeChangingEffects.java @@ -0,0 +1,100 @@ +/* + * 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 org.mage.test.cards.continuous; + +import mage.abilities.mana.AnyColorManaAbility; +import mage.constants.CardType; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class LandTypeChangingEffects extends CardTestPlayerBase { + + /** + * + * Playing a commander game. Opponent had a Magus of the Moon, and I later + * dropped a Chromatic Lantern. + * + * I was not allowed to use the Chromatic Lantern's ability. Since layers + * are tricky I asked on the Judge's chat to confirm and the user "luma" + * said it should work on this scenario. + * + */ + @Test + public void testMagusOfTheMoonAndChromaticLantern() { + // Nonbasic lands are Mountains. + addCard(Zone.BATTLEFIELD, playerA, "Magus of the Moon"); + + addCard(Zone.BATTLEFIELD, playerB, "Canopy Vista", 1); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + // Lands you control have "{T}: Add one mana of any color to your mana pool." + // {T}: Add one mana of any color to your mana pool. + addCard(Zone.HAND, playerB, "Chromatic Lantern"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Chromatic Lantern"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, "Chromatic Lantern", 1); + + assertType("Canopy Vista", CardType.LAND, "Mountain"); + assertAbility(playerB, "Canopy Vista", new AnyColorManaAbility(), true); + } + + @Test + public void testChromaticLanternBeforeMagusOfTheMoon() { + // Nonbasic lands are Mountains. + addCard(Zone.HAND, playerA, "Magus of the Moon");// {2}{R} + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + + addCard(Zone.BATTLEFIELD, playerB, "Canopy Vista", 1); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + // Lands you control have "{T}: Add one mana of any color to your mana pool." + // {T}: Add one mana of any color to your mana pool. + addCard(Zone.HAND, playerB, "Chromatic Lantern"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Chromatic Lantern"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Magus of the Moon"); + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, "Chromatic Lantern", 1); + assertPermanentCount(playerA, "Magus of the Moon", 1); + + assertType("Canopy Vista", CardType.LAND, "Mountain"); + assertAbility(playerB, "Canopy Vista", new AnyColorManaAbility(), true); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlTargetEffectTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlTargetEffectTest.java index 3b73418f9d..ed2edd6897 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlTargetEffectTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlTargetEffectTest.java @@ -22,6 +22,7 @@ public class GainControlTargetEffectTest extends CardTestPlayerBase { */ @Test public void testPermanentControlEffect() { + // When Smelt-Ward Gatekeepers enters the battlefield, if you control two or more Gates, gain control of target creature an opponent controls until end of turn. Untap that creature. That creature gains haste until end of turn. addCard(Zone.HAND, playerA, "Smelt-Ward Gatekeepers", 1); addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4); addCard(Zone.BATTLEFIELD, playerA, "Boros Guildgate", 2); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CryptoplasmTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CryptoplasmTest.java index f57e5f9342..f2985fdfaa 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CryptoplasmTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CryptoplasmTest.java @@ -114,4 +114,25 @@ public class CryptoplasmTest extends CardTestPlayerBase { assertLife(playerB, 16); assertLife(playerA, 25); } + + @Test + public void testTransformMultipleTime() { + // At the beginning of your upkeep, you may have Cryptoplasm become a copy of another target creature. If you do, Cryptoplasm gains this ability. + addCard(Zone.BATTLEFIELD, playerA, "Cryptoplasm", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); // 6/4 + addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm", 1); // 6/4 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cryptoplasm"); + addTarget(playerA, "Silvercoat Lion"); + addTarget(playerA, "Craw Wurm"); + setStopAt(5, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + assertPermanentCount(playerA, "Silvercoat Lion", 0); + assertPermanentCount(playerA, "Craw Wurm", 1); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/cost/kicker/GatekeeperOfMalakirTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/cost/kicker/GatekeeperOfMalakirTest.java index 322cc8f420..770f6265f6 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/cost/kicker/GatekeeperOfMalakirTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/cost/kicker/GatekeeperOfMalakirTest.java @@ -17,6 +17,8 @@ public class GatekeeperOfMalakirTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Gatekeeper of Malakir"); addCard(Zone.BATTLEFIELD, playerB, "Llanowar Elves"); + // Kicker {B} (You may pay an additional {B} as you cast this spell.) + // When Gatekeeper of Malakir enters the battlefield, if it was kicked, target player sacrifices a creature. castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gatekeeper of Malakir"); setStopAt(1, PhaseStep.BEGIN_COMBAT); @@ -29,5 +31,4 @@ public class GatekeeperOfMalakirTest extends CardTestPlayerBase { assertGraveyardCount(playerB, 1); } - } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantCastTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantCastTest.java new file mode 100644 index 0000000000..1e55f7efd5 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantCastTest.java @@ -0,0 +1,139 @@ +/* + * 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 org.mage.test.cards.rules; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class CantCastTest extends CardTestPlayerBase { + + /** + * I control Void Winnower. But my opponent can cast Jayemdae Tome (that's + * converted mana cost is even) He can cast other even spell. + * + */ + @Test + public void testVoidWinnower() { + // Your opponent can't cast spells with even converted mana costs. (Zero is even.) + // Your opponents can't block with creatures with even converted mana costs. + addCard(Zone.BATTLEFIELD, playerB, "Void Winnower"); + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.HAND, playerA, "Jayemdae Tome", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Jayemdae Tome"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertHandCount(playerA, "Jayemdae Tome", 1); + + assertPermanentCount(playerA, "Jayemdae Tome", 0); + + } + + @Test + public void testVoidWinnower2() { + // Your opponent can't cast spells with even converted mana costs. (Zero is even.) + // Your opponents can't block with creatures with even converted mana costs. + addCard(Zone.BATTLEFIELD, playerB, "Void Winnower"); + + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4); + + // Blaze deals X damage to target creature or player. + addCard(Zone.HAND, playerA, "Blaze", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blaze", playerA); + setChoice(playerA, "X=3"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertHandCount(playerA, "Blaze", 1); + + assertLife(playerB, 20); + + } + + @Test + public void testVoidWinnower3() { + // Your opponent can't cast spells with even converted mana costs. (Zero is even.) + // Your opponents can't block with creatures with even converted mana costs. + addCard(Zone.BATTLEFIELD, playerB, "Void Winnower"); + + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); + + // Blaze deals X damage to target creature or player. + addCard(Zone.HAND, playerA, "Blaze", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blaze", playerB); + setChoice(playerA, "X=4"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertHandCount(playerA, "Blaze", 0); + assertGraveyardCount(playerA, "Blaze", 1); + + assertLife(playerB, 16); + + } + + @Test + public void testVoidWinnowerWithMorph() { + // Your opponent can't cast spells with even converted mana costs. (Zero is even.) + // Your opponents can't block with creatures with even converted mana costs. + addCard(Zone.BATTLEFIELD, playerB, "Void Winnower"); + /* + Pine Walker + Creature - Elemental + 5/5 + Morph {4}{G} (You may cast this card face down as a 2/2 creature for . Turn it face up any time for its morph cost.) + Whenever Pine Walker or another creature you control is turned face up, untap that creature. + */ + addCard(Zone.HAND, playerA, "Pine Walker"); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pine Walker"); + setChoice(playerA, "Yes"); // cast it face down as 2/2 creature + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "", 0); + assertHandCount(playerA, "Pine Walker", 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/AbattoirGhoulTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/AbattoirGhoulTest.java index fc9b33bc59..03c88dc474 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/AbattoirGhoulTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/AbattoirGhoulTest.java @@ -13,25 +13,25 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author jeffwadsworth */ -public class AbattoirGhoulTest extends CardTestPlayerBase{ - +public class AbattoirGhoulTest extends CardTestPlayerBase { + @Test public void testAbattoirGhoulEffect() { - + // Whenever a creature dealt damage by Abattoir Ghoul this turn dies, you gain life equal to that creature's toughness. addCard(Zone.BATTLEFIELD, playerA, "Abattoir Ghoul", 1); addCard(Zone.BATTLEFIELD, playerB, "Memnite", 1); addCard(Zone.BATTLEFIELD, playerB, "Shivan Dragon", 1); - + attack(1, playerA, "Abattoir Ghoul"); block(1, playerB, "Memnite", "Abattoir Ghoul"); block(1, playerB, "Shivan Dragon", "Abattoir Ghoul"); - + setStopAt(1, PhaseStep.END_TURN); execute(); - + assertLife(playerA, 21); assertLife(playerB, 20); - + } - + } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DayOfTheDragonsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DayOfTheDragonsTest.java new file mode 100644 index 0000000000..467f540a78 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DayOfTheDragonsTest.java @@ -0,0 +1,96 @@ +/* + * 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 org.mage.test.cards.triggers; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class DayOfTheDragonsTest extends CardTestPlayerBase { + + @Test + public void TestTokensAreCreated() { + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + addCard(Zone.BATTLEFIELD, playerA, "Pillarfield Ox", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 7); + // When Day of the Dragons enters the battlefield, exile all creatures you control. Then put that many 5/5 red Dragon creature tokens with flying onto the battlefield. + // When Day of the Dragons leaves the battlefield, sacrifice all Dragons you control. Then return the exiled cards to the battlefield under your control. + addCard(Zone.HAND, playerA, "Day of the Dragons"); // Enchantment - {4}{U}{U}{U} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Shivan Dragon"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Day of the Dragons"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertExileCount("Silvercoat Lion", 1); + assertExileCount("Pillarfield Ox", 1); + assertPermanentCount(playerA, "Dragon", 2); + + assertPermanentCount(playerB, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Shivan Dragon", 1); + } + + @Test + public void TestTokensAreCreatedAndExiled() { + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + addCard(Zone.BATTLEFIELD, playerA, "Pillarfield Ox", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 7); + // When Day of the Dragons enters the battlefield, exile all creatures you control. Then put that many 5/5 red Dragon creature tokens with flying onto the battlefield. + // When Day of the Dragons leaves the battlefield, sacrifice all Dragons you control. Then return the exiled cards to the battlefield under your control. + addCard(Zone.HAND, playerA, "Day of the Dragons"); // Enchantment - {4}{U}{U}{U} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Shivan Dragon"); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + addCard(Zone.HAND, playerB, "Disenchant"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Day of the Dragons"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Disenchant", "Day of the Dragons"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Day of the Dragons", 1); + assertGraveyardCount(playerB, "Disenchant", 1); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerA, "Pillarfield Ox", 1); + assertPermanentCount(playerA, "Dragon", 0); + + assertPermanentCount(playerB, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Shivan Dragon", 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/GoldnightCommanderTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/GoldnightCommanderTest.java index 6da6f33709..acdced5c75 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/GoldnightCommanderTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/GoldnightCommanderTest.java @@ -37,20 +37,16 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LevelX2 */ - public class GoldnightCommanderTest extends CardTestPlayerBase { - /** - * Goldnight Commander {3}{W} - * Human Cleric Soldier - * Whenever another creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn. - * - + /* + * Goldnight Commander {3}{W} Human Cleric Soldier + * Whenever another creature enters the battlefield under your control, creatures you control get + * +1/+1 until end of turn. */ @Test public void testThreeCreaturesEnterAtTheSameTime() { // The ability of the Commander triggers three times and each trigger sees all three creatures - addCard(Zone.HAND, playerA, "Thatcher Revolt"); addCard(Zone.BATTLEFIELD, playerA, "Goldnight Commander", 1); addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JourneyToNowhereTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JourneyToNowhereTest.java index 8cef82f899..c659066251 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JourneyToNowhereTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JourneyToNowhereTest.java @@ -36,23 +36,21 @@ import org.mage.test.serverside.base.CardTestPlayerBase; * * @author LeveX2 */ - public class JourneyToNowhereTest extends CardTestPlayerBase { /* Journey to Nowhere Enchantment {1}{W} - When Journey to Nowhere enters the battlefield, exile target creature. - When Journey to Nowhere leaves the battlefield, return the exiled card to the battlefield under its owner's control. - - 10/1/2009: If Journey to Nowhere leaves the battlefield before its first ability has resolved, its second ability will - trigger and do nothing. Then its first ability will resolve and exile the targeted creature forever. - */ + When Journey to Nowhere enters the battlefield, exile target creature. + When Journey to Nowhere leaves the battlefield, return the exiled card to the battlefield under its owner's control. + 10/1/2009: If Journey to Nowhere leaves the battlefield before its first ability has resolved, its second ability will + trigger and do nothing. Then its first ability will resolve and exile the targeted creature forever. + */ @Test public void testTargetGetsExiled() { addCard(Zone.HAND, playerA, "Journey to Nowhere"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Journey to Nowhere"); @@ -63,13 +61,12 @@ public class JourneyToNowhereTest extends CardTestPlayerBase { assertPermanentCount(playerA, "Journey to Nowhere", 1); assertExileCount("Silvercoat Lion", 1); } - - + @Test public void testTargetGetsExiledAndReturns() { addCard(Zone.HAND, playerA, "Journey to Nowhere"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - + addCard(Zone.HAND, playerB, "Disenchant", 1); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); @@ -78,7 +75,7 @@ public class JourneyToNowhereTest extends CardTestPlayerBase { addTarget(playerA, "Silvercoat Lion"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Disenchant", "Journey to Nowhere"); - + setStopAt(1, PhaseStep.END_TURN); execute(); @@ -88,14 +85,14 @@ public class JourneyToNowhereTest extends CardTestPlayerBase { } /* - 10/1/2009: If Journey to Nowhere leaves the battlefield before its first ability has resolved, its second ability will - trigger and do nothing. Then its first ability will resolve and exile the targeted creature forever. - */ + 10/1/2009: If Journey to Nowhere leaves the battlefield before its first ability has resolved, its second ability will + trigger and do nothing. Then its first ability will resolve and exile the targeted creature forever. + */ @Test public void testTargetGetsExiledAndDoesNeverReturn() { addCard(Zone.HAND, playerA, "Journey to Nowhere"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - + addCard(Zone.HAND, playerB, "Disenchant", 1); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); @@ -103,29 +100,29 @@ public class JourneyToNowhereTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Journey to Nowhere"); addTarget(playerA, "Silvercoat Lion"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disenchant", "Journey to Nowhere"); - + setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); assertGraveyardCount(playerA, "Journey to Nowhere", 1); assertGraveyardCount(playerB, "Disenchant", 1); assertExileCount("Silvercoat Lion", 1); - } + } /* - Journey is played and targets the creature as it enters the battlefield. - The Journey will be returned to hand before the ability resolves. - The Journey will be played again targeting another creature. - The Journey will be disenchanted later, so only the second creature has to return to battlefield. - - */ + Journey is played and targets the creature as it enters the battlefield. + The Journey will be returned to hand before the ability resolves. + The Journey will be played again targeting another creature. + The Journey will be disenchanted later, so only the second creature has to return to battlefield. + + */ @Test public void testTargetGetsExiledAndDoesNeverReturnAndJourneyPlayedAgain() { addCard(Zone.HAND, playerA, "Journey to Nowhere"); addCard(Zone.HAND, playerA, "Boomerang"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); addCard(Zone.BATTLEFIELD, playerA, "Island", 4); - + addCard(Zone.HAND, playerB, "Disenchant", 1); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 1); @@ -133,11 +130,11 @@ public class JourneyToNowhereTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Journey to Nowhere"); addTarget(playerA, "Silvercoat Lion"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Boomerang", "Journey to Nowhere"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Boomerang", "Journey to Nowhere", "Journey to Nowhere", StackClause.WHILE_NOT_ON_STACK); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Journey to Nowhere"); addTarget(playerA, "Pillarfield Ox"); - + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Disenchant", "Journey to Nowhere"); setStopAt(2, PhaseStep.BEGIN_COMBAT); @@ -145,11 +142,11 @@ public class JourneyToNowhereTest extends CardTestPlayerBase { assertGraveyardCount(playerA, "Boomerang", 1); assertGraveyardCount(playerA, "Journey to Nowhere", 1); - assertGraveyardCount(playerB, "Disenchant", 1); + assertGraveyardCount(playerB, "Disenchant", 1); assertPermanentCount(playerB, "Pillarfield Ox", 1); - + assertPermanentCount(playerB, "Silvercoat Lion", 0); assertExileCount("Silvercoat Lion", 1); - - } + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ReturnToHandEffectsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ReturnToHandEffectsTest.java index 63fff00ea5..16dc31153e 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ReturnToHandEffectsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ReturnToHandEffectsTest.java @@ -94,12 +94,12 @@ public class ReturnToHandEffectsTest extends CardTestPlayerBase { execute(); assertPermanentCount(playerA, "Stormfront Riders", 1); - assertPermanentCount(playerA, "Rat", 0); assertHandCount(playerA, "Silvercoat Lion", 2); assertGraveyardCount(playerA, "Lab Rats", 1); assertGraveyardCount(playerB, "Boomerang", 1); assertPermanentCount(playerA, "Soldier", 3); + assertPermanentCount(playerA, "Rat", 0); } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java index f59cd5cd9d..5c2a7cdd98 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java @@ -123,10 +123,10 @@ public class SpellskiteTest extends CardTestPlayerBase { public void testSpellskite() { addCard(Zone.BATTLEFIELD, playerA, "Island", 4); // Choose two - - // Counter target spell; - // or return target permanent to its owner's hand; - // or tap all creatures your opponents control; - // or draw a card. + // - Counter target spell; + // - return target permanent to its owner's hand; + // - tap all creatures your opponents control; + // - draw a card. addCard(Zone.HAND, playerA, "Cryptic Command"); addCard(Zone.BATTLEFIELD, playerB, "Spellskite", 1); @@ -141,7 +141,7 @@ public class SpellskiteTest extends CardTestPlayerBase { setModeChoice(playerA, "1"); // Counter target spell setModeChoice(playerA, "2"); // return target permanent to its owner's hand - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{UP}: Change a target of target spell or ability to {this}.", "Cryptic Command"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{UP}: Change a target of target spell or ability to {this}.", "Cryptic Command", "Cryptic Command"); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); diff --git a/Mage.Tests/src/test/java/org/mage/test/lki/LastKnownInformationTest.java b/Mage.Tests/src/test/java/org/mage/test/lki/LastKnownInformationTest.java index 5449da60a6..64d7963201 100644 --- a/Mage.Tests/src/test/java/org/mage/test/lki/LastKnownInformationTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/lki/LastKnownInformationTest.java @@ -3,7 +3,6 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ - package org.mage.test.lki; import mage.constants.PhaseStep; @@ -20,10 +19,10 @@ public class LastKnownInformationTest extends CardTestPlayerBase { /** * see here for more information * http://www.slightlymagic.net/forum/viewtopic.php?f=116&t=14516 - * - * Tests Safehold Elite with persist returns to battlefield with -1/-1 counter - * Murder Investigation has to put 2 tokens onto battlefield because enchanted Safehold Elite - * was 2/2 + * + * Tests Safehold Elite with persist returns to battlefield with -1/-1 + * counter Murder Investigation has to put 2 tokens onto battlefield because + * enchanted Safehold Elite was 2/2 * * @author LevelX */ @@ -38,9 +37,9 @@ public class LastKnownInformationTest extends CardTestPlayerBase { // {1}{W} // Enchant creature you control // When enchanted creature dies, put X 1/1 white Soldier creature tokens onto the battlefield, where X is its power. - addCard(Zone.HAND, playerA, "Murder Investigation",1); + addCard(Zone.HAND, playerA, "Murder Investigation", 1); - addCard(Zone.HAND, playerB, "Lightning Bolt",2); + addCard(Zone.HAND, playerB, "Lightning Bolt", 2); addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Murder Investigation", "Safehold Elite"); @@ -58,17 +57,20 @@ public class LastKnownInformationTest extends CardTestPlayerBase { // because enchanted Safehold Elite's P/T was 2/2, Murder Investigation has to put 2 Soldier onto the battlefield assertPermanentCount(playerA, "Soldier", 2); assertGraveyardCount(playerB, "Lightning Bolt", 2); - - assertActionCount(playerB, 0); + + assertActionCount(playerB, 0); } - + /** - * Here we test that Trostani's first ability checks the toughness on resolve. + * Here we test that Trostani's first ability checks the toughness on + * resolve. * */ @Test public void testTrostaniSelesnyasVoice1() { + // Whenever another creature enters the battlefield under your control, you gain life equal to that creature's toughness. + // {1}{G}{W}, {T}: Populate. (Put a token onto the battlefield that's a copy of a creature token you control.) addCard(Zone.BATTLEFIELD, playerA, "Trostani, Selesnya's Voice"); addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); @@ -76,20 +78,21 @@ public class LastKnownInformationTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Grizzly Bears", 1); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears", "Grizzly Bears", StackClause.WHILE_NOT_ON_STACK); setStopAt(1, PhaseStep.END_TURN); execute(); + assertGraveyardCount(playerA, "Giant Growth", 1); assertPermanentCount(playerA, "Grizzly Bears", 1); assertLife(playerA, 25); } /** - * Here we test correct spell interaction by playing Cloudshift BEFORE Giant Growth resolves. - * Cloudshift will remove 2/2 creature and it will return as 2/2. - * Giant Growth will be fizzled. - * That means that player should gain 2 + 2 life. + * Here we test correct spell interaction by playing Cloudshift BEFORE Giant + * Growth resolves. Cloudshift will remove 2/2 creature and it will return + * as 2/2. Giant Growth will be fizzled. That means that player should gain + * 2 + 2 life. */ @Test public void testTrostaniSelesnyasVoice2() { @@ -102,7 +105,7 @@ public class LastKnownInformationTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Grizzly Bears", 1); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears", "Grizzly Bears", StackClause.WHILE_NOT_ON_STACK); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Grizzly Bears", "Giant Growth", StackClause.WHILE_ON_STACK); @@ -114,8 +117,8 @@ public class LastKnownInformationTest extends CardTestPlayerBase { } /** - * Here we test actual use of LKI by playing Cloudshift AFTER Giant Growth resolves. - * Cloudshift will remove 5/5 creature and it will return as 2/2. + * Here we test actual use of LKI by playing Cloudshift AFTER Giant Growth + * resolves. Cloudshift will remove 5/5 creature and it will return as 2/2. * That means that player should gain 5 + 2 life. * */ @@ -130,7 +133,7 @@ public class LastKnownInformationTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Grizzly Bears", 1); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears", "Grizzly Bears", StackClause.WHILE_NOT_ON_STACK); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Grizzly Bears", "Giant Growth", StackClause.WHILE_NOT_ON_STACK); @@ -142,5 +145,4 @@ public class LastKnownInformationTest extends CardTestPlayerBase { } - } diff --git a/Mage.Tests/src/test/java/org/mage/test/mana/ManaTest.java b/Mage.Tests/src/test/java/org/mage/test/mana/ManaTest.java index 28c03a91a9..396a224881 100644 --- a/Mage.Tests/src/test/java/org/mage/test/mana/ManaTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/mana/ManaTest.java @@ -1,6 +1,5 @@ package org.mage.test.mana; -import junit.framework.Assert; import mage.Mana; import mage.constants.ColoredManaSymbol; import mage.constants.ManaType; diff --git a/Mage.Tests/src/test/java/org/mage/test/multiplayer/MyriadTest.java b/Mage.Tests/src/test/java/org/mage/test/multiplayer/MyriadTest.java new file mode 100644 index 0000000000..eb0c3c4477 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/multiplayer/MyriadTest.java @@ -0,0 +1,123 @@ +/* + * 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 org.mage.test.multiplayer; + +import java.io.FileNotFoundException; +import mage.constants.MultiplayerAttackOption; +import mage.constants.PhaseStep; +import mage.constants.RangeOfInfluence; +import mage.constants.Zone; +import mage.game.FreeForAll; +import mage.game.Game; +import mage.game.GameException; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestMultiPlayerBase; + +/** + * + * @author LevelX2 + */ +public class MyriadTest extends CardTestMultiPlayerBase { + + @Override + protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { + Game game = new FreeForAll(MultiplayerAttackOption.MULTIPLE, RangeOfInfluence.ALL, 0, 40); + // Player order: A -> D -> C -> B + playerA = createPlayer(game, playerA, "PlayerA"); + playerB = createPlayer(game, playerB, "PlayerB"); + playerC = createPlayer(game, playerC, "PlayerC"); + playerD = createPlayer(game, playerD, "PlayerD"); + return game; + } + + /** + * Tests Myriad multiplayer effects Player order: A -> D -> C -> B + */ + @Test + public void CallerOfThePackTest() { + // Trample + // Myriad (Whenever this creature attacks, for each opponent other than the defending player, put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile those tokens at the end of combat.) + addCard(Zone.BATTLEFIELD, playerD, "Caller of the Pack"); // 8/6 + + attack(2, playerD, "Caller of the Pack", playerA); + + setStopAt(2, PhaseStep.DECLARE_BLOCKERS); + execute(); + + assertPermanentCount(playerD, "Caller of the Pack", 3); + } + + @Test + public void CallerOfThePackTestExile() { + // Trample + // Myriad (Whenever this creature attacks, for each opponent other than the defending player, put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile those tokens at the end of combat.) + addCard(Zone.BATTLEFIELD, playerD, "Caller of the Pack"); // 8/6 + + attack(2, playerD, "Caller of the Pack", playerA); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerD, "Caller of the Pack", 1); + + assertLife(playerA, 32); + assertLife(playerB, 32); + assertLife(playerC, 32); + assertLife(playerD, 40); + + } + + @Test + public void CallerOfThePackTestExilePlaneswalker() { + // Trample + // Myriad (Whenever this creature attacks, for each opponent other than the defending player, put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile those tokens at the end of combat.) + addCard(Zone.BATTLEFIELD, playerD, "Caller of the Pack"); // 8/6 + + // +1: You gain 2 life. + // -1: Put a +1/+1 counter on each creature you control. Those creatures gain vigilance until end of turn. + // -6: Put a white Avatar creature token onto the battlefield. It has "This creature's power and toughness are each equal to your life total." + addCard(Zone.BATTLEFIELD, playerA, "Ajani Goldmane"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1:"); + + attack(2, playerD, "Caller of the Pack", playerC); + addTarget(playerD, "Ajani Goldmane"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerD, "Caller of the Pack", 1); + assertGraveyardCount(playerA, "Ajani Goldmane", 1); + + assertLife(playerA, 42); + assertLife(playerB, 32); + assertLife(playerC, 32); + assertLife(playerD, 40); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 8827ac622b..1f59b9387a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -43,6 +43,8 @@ import mage.abilities.Modes; import mage.abilities.SpellAbility; import mage.abilities.TriggeredAbility; import mage.abilities.costs.AlternativeSourceCosts; +import mage.abilities.costs.Cost; +import mage.abilities.costs.Costs; import mage.abilities.costs.VariableCost; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; @@ -118,6 +120,8 @@ public class TestPlayer implements Player { private final ComputerPlayer computerPlayer; + private String[] groupsForTargetHandling = null; + public TestPlayer(ComputerPlayer computerPlayer) { this.computerPlayer = computerPlayer; AIPlayer = false; @@ -204,23 +208,14 @@ public class TestPlayer implements Player { return true; } -// private boolean checkSpellOnTopOfStackCondition(String[] groups, Game game) { -// if (groups.length > 2 && groups[2].startsWith("spellOnTopOfStack=")) { -// String spellOnTopOFStack = groups[2].substring(18); -// if (game.getStack().size() > 0) { -// StackObject stackObject = game.getStack().getFirst(); -// if (stackObject != null && stackObject.getStackAbility().toString().contains(spellOnTopOFStack)) { -// return true; -// } -// } -// return false; -// } -// return true; -// } - private boolean addTargets(Ability ability, String[] groups, Game game) { + @Override + public boolean addTargets(Ability ability, Game game) { + if (groupsForTargetHandling == null) { + return true; + } boolean result = true; - for (int i = 1; i < groups.length; i++) { - String group = groups[i]; + for (int i = 1; i < groupsForTargetHandling.length; i++) { + String group = groupsForTargetHandling[i]; if (group.startsWith("spellOnStack") || group.startsWith("spellOnTopOfStack") || group.startsWith("!spellOnStack") || group.startsWith("target=null") || group.startsWith("manaInPool=")) { break; } @@ -277,29 +272,36 @@ public class TestPlayer implements Player { int index = 0; int targetsSet = 0; for (String targetName : targetList) { + Mode selectedMode = null; if (targetName.startsWith("mode=")) { int modeNr = Integer.parseInt(targetName.substring(5, 6)); if (modeNr == 0 || modeNr > ability.getModes().size()) { throw new UnsupportedOperationException("Given mode number (" + modeNr + ") not available for " + ability.toString()); } - int modeCounter = 1; - for (Mode mode : ability.getModes().values()) { - if (modeCounter == modeNr) { - ability.getModes().setMode(mode); + UUID modeId = ability.getModes().getModeId(modeNr); + + for (Mode mode : ability.getModes().getSelectedModes()) { + if (mode.getId().equals(modeId)) { + selectedMode = mode; + ability.getModes().setActiveMode(mode); index = 0; // reset target index if mode changes break; } - modeCounter++; } targetName = targetName.substring(6); + } else { + selectedMode = ability.getModes().getMode(); } - if (ability.getTargets().size() == 0) { + if (selectedMode == null) { + throw new UnsupportedOperationException("Mode not available for " + ability.toString()); + } + if (selectedMode.getTargets().size() == 0) { throw new AssertionError("Ability has no targets. " + ability.toString()); } - if (index >= ability.getTargets().size()) { + if (index >= selectedMode.getTargets().size()) { break; // this can happen if targets should be set but can't be used because of hexproof e.g. } - Target currentTarget = ability.getTargets().get(index); + Target currentTarget = selectedMode.getTargets().get(index); if (targetName.startsWith("targetPlayer=")) { target = targetName.substring(targetName.indexOf("targetPlayer=") + 13); for (Player player : game.getPlayers().values()) { @@ -362,6 +364,7 @@ public class TestPlayer implements Player { if (action.getAction().startsWith("activate:")) { String command = action.getAction(); command = command.substring(command.indexOf("activate:") + 9); + groupsForTargetHandling = null; String[] groups = command.split("\\$"); if (groups.length > 2 && !checkExecuteCondition(groups, game)) { break; @@ -371,13 +374,11 @@ public class TestPlayer implements Player { int bookmark = game.bookmarkState(); Ability newAbility = ability.copy(); if (groups.length > 1 && !groups[1].equals("target=NO_TARGET")) { - if (!addTargets(newAbility, groups, game)) { - // targets could not be set -> try next priority - break; - } + groupsForTargetHandling = groups; } if (computerPlayer.activateAbility((ActivatedAbility) newAbility, game)) { actions.remove(action); + groupsForTargetHandling = null; return true; } else { game.restoreState(bookmark, ability.getRule()); @@ -1123,8 +1124,8 @@ public class TestPlayer implements Player { } @Override - public void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts) { - computerPlayer.setCastSourceIdWithAlternateMana(sourceId, manaCosts); + public void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts, Costs costs) { + computerPlayer.setCastSourceIdWithAlternateMana(sourceId, manaCosts, costs); } @Override @@ -1137,6 +1138,11 @@ public class TestPlayer implements Player { return computerPlayer.getCastSourceIdManaCosts(); } + @Override + public Costs getCastSourceIdCosts() { + return computerPlayer.getCastSourceIdCosts(); + } + @Override public boolean isInPayManaMode() { return computerPlayer.isInPayManaMode(); @@ -1913,6 +1919,7 @@ public class TestPlayer implements Player { @Override public boolean playMana(Ability ability, ManaCost unpaid, String promptText, Game game) { + groupsForTargetHandling = null; return computerPlayer.playMana(ability, unpaid, promptText, game); } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestMultiPlayerBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestMultiPlayerBase.java index 36ededfe4a..863ac2b256 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestMultiPlayerBase.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestMultiPlayerBase.java @@ -1,22 +1,18 @@ package org.mage.test.serverside.base; -import mage.cards.Card; -import mage.cards.decks.Deck; -import mage.cards.decks.importer.DeckImporterUtil; +import java.io.FileNotFoundException; import mage.constants.MultiplayerAttackOption; import mage.constants.RangeOfInfluence; -import mage.game.*; -import mage.game.permanent.Permanent; -import mage.players.Player; -import org.junit.Assert; +import mage.game.FreeForAll; +import mage.game.Game; +import mage.game.GameException; import org.mage.test.serverside.base.impl.CardTestPlayerAPIImpl; -import java.io.File; -import java.io.FileNotFoundException; - /** - * Base class for testing single cards and effects in multiplayer game. - * For PvP games {@see CardTestPlayerBase} + * Base class for testing single cards and effects in multiplayer game. For PvP + * games { + * + * @see CardTestPlayerBase} * * @author magenoxx_at_gmail.com */ @@ -25,12 +21,12 @@ public abstract class CardTestMultiPlayerBase extends CardTestPlayerAPIImpl { @Override protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { Game game = new FreeForAll(MultiplayerAttackOption.LEFT, RangeOfInfluence.ONE, 0, 20); - + // Player order: A -> D -> C -> B playerA = createPlayer(game, playerA, "PlayerA"); playerB = createPlayer(game, playerB, "PlayerB"); playerC = createPlayer(game, playerC, "PlayerC"); playerD = createPlayer(game, playerD, "PlayerD"); return game; } - + } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBaseAI.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBaseAI.java index 910f3de6ec..94e0699a28 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBaseAI.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBaseAI.java @@ -55,13 +55,13 @@ public abstract class CardTestPlayerBaseAI extends CardTestPlayerAPIImpl { } @Override - protected TestPlayer createPlayer(String name) { + protected TestPlayer createPlayer(String name, RangeOfInfluence rangeOfInfluence) { if (name.equals("PlayerA")) { TestPlayer testPlayer = new TestPlayer(new ComputerPlayer7("PlayerA", RangeOfInfluence.ONE, skill)); testPlayer.setAIPlayer(true); return testPlayer; } - return super.createPlayer(name); + return super.createPlayer(name, rangeOfInfluence); } public void setAISkill(int skill) { diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java index 32805289ed..6568f377b3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java @@ -1,15 +1,26 @@ package org.mage.test.serverside.base; -import mage.constants.PhaseStep; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FilenameFilter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import mage.cards.Card; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; +import mage.constants.PhaseStep; import mage.constants.RangeOfInfluence; import mage.constants.Zone; import mage.game.Game; import mage.game.match.MatchType; import mage.game.permanent.PermanentCard; import mage.game.tournament.TournamentType; +import mage.player.ai.ComputerPlayer; import mage.players.Player; import mage.server.game.GameFactory; import mage.server.util.ConfigSettings; @@ -22,20 +33,13 @@ import org.apache.log4j.Logger; import org.junit.BeforeClass; import org.mage.test.player.TestPlayer; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FilenameFilter; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import mage.player.ai.ComputerPlayer; - /** * Base class for all tests. * * @author ayratn */ public abstract class MageTestPlayerBase { + protected static Logger logger = Logger.getLogger(MageTestPlayerBase.class); public static PluginClassLoader classLoader = new PluginClassLoader(); @@ -62,8 +66,7 @@ public abstract class MageTestPlayerBase { protected static Game currentGame = null; /** - * Player thats starts the game first. - * By default, it is ComputerA. + * Player thats starts the game first. By default, it is ComputerA. */ protected static Player activePlayer = null; @@ -72,6 +75,7 @@ public abstract class MageTestPlayerBase { protected PhaseStep stopAtStep = PhaseStep.UNTAP; protected enum ParserState { + INIT, OPTIONS, EXPECTED @@ -80,16 +84,11 @@ public abstract class MageTestPlayerBase { protected ParserState parserState; /** - * Expected results of the test. - * Read from test case in {@link String} based format: + * Expected results of the test. Read from test case in {@link String} based + * format: *

- * Example: - * turn:1 - * result:won:ComputerA - * life:ComputerA:20 - * life:ComputerB:0 - * battlefield:ComputerB:Tine Shrike:0 - * graveyard:ComputerB:Tine Shrike:1 + * Example: turn:1 result:won:ComputerA life:ComputerA:20 life:ComputerB:0 + * battlefield:ComputerB:Tine Shrike:0 graveyard:ComputerB:Tine Shrike:1 */ protected List expectedResults = new ArrayList<>(); @@ -259,7 +258,7 @@ public abstract class MageTestPlayerBase { logger.warn("Init string wasn't parsed: " + line); } } - + private TestPlayer getPlayer(String name) { switch (name) { case "ComputerA": @@ -282,7 +281,7 @@ public abstract class MageTestPlayerBase { handCards.put(player, hand); return hand; } - + protected List getGraveCards(TestPlayer player) { if (graveyardCards.containsKey(player)) { return graveyardCards.get(player); @@ -319,7 +318,6 @@ public abstract class MageTestPlayerBase { return command; } - private void includeFrom(String line) throws FileNotFoundException { String[] params = line.split(" "); if (params.length == 2) { @@ -340,8 +338,8 @@ public abstract class MageTestPlayerBase { } } - protected TestPlayer createPlayer(String name) { - return new TestPlayer(new ComputerPlayer(name, RangeOfInfluence.ONE)); + protected TestPlayer createPlayer(String name, RangeOfInfluence rangeOfInfluence) { + return new TestPlayer(new ComputerPlayer(name, rangeOfInfluence)); } - + } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index 6e85c699d7..9a02e9bcf8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -12,6 +12,7 @@ import mage.cards.repository.CardRepository; import mage.cards.repository.CardScanner; import mage.constants.CardType; import mage.constants.PhaseStep; +import mage.constants.RangeOfInfluence; import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.Filter; @@ -141,7 +142,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } protected TestPlayer createPlayer(Game game, TestPlayer player, String name, String deckName) throws GameException { - player = createNewPlayer(name); + player = createNewPlayer(name, game.getRangeOfInfluence()); player.setTestMode(true); logger.debug("Loading deck..."); Deck deck = Deck.load(DeckImporterUtil.importDeck(deckName), false, false); @@ -187,8 +188,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement } - protected TestPlayer createNewPlayer(String playerName) { - return createPlayer(playerName); + protected TestPlayer createNewPlayer(String playerName, RangeOfInfluence rangeOfInfluence) { + return createPlayer(playerName, rangeOfInfluence); } protected Player getPlayerFromName(String playerName, String line) { diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/tournament/SwissPairingMinimalWeightMatchingTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/tournament/SwissPairingMinimalWeightMatchingTest.java new file mode 100644 index 0000000000..c132059c79 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/tournament/SwissPairingMinimalWeightMatchingTest.java @@ -0,0 +1,360 @@ +/* + * 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 org.mage.test.serverside.tournament; + + +import java.util.*; + +import mage.game.tournament.*; +import mage.game.tournament.pairing.RoundPairings; +import mage.game.tournament.pairing.SwissPairingMinimalWeightMatching; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.stub.PlayerStub; +import org.mage.test.stub.TournamentStub; + + +/** + * + * @author Quercitron + */ +public class SwissPairingMinimalWeightMatchingTest { + + @Test + public void FourPlayersSecondRoundTest() { + // 1 > 3 + // 2 > 4 + + TournamentPlayer player1 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player2 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player3 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player4 = new TournamentPlayer(new PlayerStub(), null); + List players = new ArrayList<>(); + players.add(player4); + players.add(player2); + players.add(player3); + players.add(player1); + + player1.setPoints(3); + player2.setPoints(3); + player3.setPoints(0); + player4.setPoints(0); + + List rounds = new ArrayList<>(); + Round round = new Round(1, new TournamentStub()); + TournamentPairing pair1 = new TournamentPairing(player1, player3); + round.addPairing(pair1); + TournamentPairing pair2 = new TournamentPairing(player4, player2); + round.addPairing(pair2); + rounds.add(round); + + SwissPairingMinimalWeightMatching swissPairing = new SwissPairingMinimalWeightMatching(players, rounds, false); + RoundPairings roundPairings = swissPairing.getRoundPairings(); + + Assert.assertEquals(2, roundPairings.getPairings().size()); + Assert.assertEquals(0, roundPairings.getPlayerByes().size()); + + CheckPair(roundPairings.getPairings(), player1, player2); + CheckPair(roundPairings.getPairings(), player3, player4); + Assert.assertEquals(0, roundPairings.getPlayerByes().size()); + } + + @Test + public void FourPlayersSecondThirdTest() { + // 1 > 3 + // 2 > 4 + // + // 1 > 2 + // 3 > 4 + + TournamentPlayer player3 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player2 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player4 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player1 = new TournamentPlayer(new PlayerStub(), null); + List players = new ArrayList<>(); + players.add(player4); + players.add(player2); + players.add(player3); + players.add(player1); + + player1.setPoints(6); + player2.setPoints(3); + player3.setPoints(3); + player4.setPoints(0); + + List rounds = new ArrayList<>(); + // round 1 + Round round = new Round(1, new TournamentStub()); + TournamentPairing pair1 = new TournamentPairing(player1, player3); + round.addPairing(pair1); + TournamentPairing pair2 = new TournamentPairing(player4, player2); + round.addPairing(pair2); + rounds.add(round); + // round 2 + round = new Round(2, new TournamentStub()); + pair1 = new TournamentPairing(player2, player1); + round.addPairing(pair1); + pair2 = new TournamentPairing(player4, player3); + round.addPairing(pair2); + rounds.add(round); + + SwissPairingMinimalWeightMatching swissPairing = new SwissPairingMinimalWeightMatching(players, rounds, true); + RoundPairings roundPairings = swissPairing.getRoundPairings(); + + Assert.assertEquals(2, roundPairings.getPairings().size()); + Assert.assertEquals(0, roundPairings.getPlayerByes().size()); + + CheckPair(roundPairings.getPairings(), player1, player4); + CheckPair(roundPairings.getPairings(), player2, player3); + Assert.assertEquals(0, roundPairings.getPlayerByes().size()); + } + + @Test + public void PlayerLeftTournamentAfterFirstRound() { + // 1 > 3 + // 2 > 4 + // 4 left the tournament + + TournamentPlayer player1 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player2 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player3 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player4 = new TournamentPlayer(new PlayerStub(), null); + List players = new ArrayList<>(); + //players.add(player4); -- player 4 is not active + players.add(player2); + players.add(player3); + players.add(player1); + + player1.setPoints(3); + player2.setPoints(3); + player3.setPoints(0); + player4.setPoints(0); + + List rounds = new ArrayList<>(); + Round round = new Round(1, new TournamentStub()); + TournamentPairing pair1 = new TournamentPairing(player1, player3); + round.addPairing(pair1); + TournamentPairing pair2 = new TournamentPairing(player4, player2); + round.addPairing(pair2); + rounds.add(round); + + SwissPairingMinimalWeightMatching swissPairing = new SwissPairingMinimalWeightMatching(players, rounds, false); + RoundPairings roundPairings = swissPairing.getRoundPairings(); + + Assert.assertEquals(1, roundPairings.getPairings().size()); + Assert.assertEquals(1, roundPairings.getPlayerByes().size()); + + CheckPair(roundPairings.getPairings(), player1, player2); + Assert.assertTrue(roundPairings.getPlayerByes().contains(player3)); + } + + @Test + public void FivePlayersThirdRoundTest() { + // 1 > 2 + // 3 > 4 + // 5 + // + // 1 > 5 + // 2 > 3 + // 4 + + TournamentPlayer player1 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player2 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player3 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player4 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player5 = new TournamentPlayer(new PlayerStub(), null); + List players = new ArrayList<>(); + players.add(player4); + players.add(player2); + players.add(player5); + players.add(player3); + players.add(player1); + + player1.setPoints(6); + player2.setPoints(3); + player3.setPoints(3); + player4.setPoints(3); + player5.setPoints(3); + + List rounds = new ArrayList<>(); + // first round + Round round = new Round(1, new TournamentStub()); + TournamentPairing pair1 = new TournamentPairing(player1, player2); + round.addPairing(pair1); + TournamentPairing pair2 = new TournamentPairing(player3, player4); + round.addPairing(pair2); + round.getPlayerByes().add(player5); + rounds.add(round); + // second round + round = new Round(1, new TournamentStub()); + pair1 = new TournamentPairing(player1, player5); + round.addPairing(pair1); + pair2 = new TournamentPairing(player2, player3); + round.addPairing(pair2); + round.getPlayerByes().add(player4); + rounds.add(round); + + SwissPairingMinimalWeightMatching swissPairing = new SwissPairingMinimalWeightMatching(players, rounds, false); + RoundPairings roundPairings = swissPairing.getRoundPairings(); + + Assert.assertEquals(2, roundPairings.getPairings().size()); + Assert.assertEquals(1, roundPairings.getPlayerByes().size()); + + CheckPair(roundPairings.getPairings(), player1, player4); + CheckPair(roundPairings.getPairings(), player2, player5); + Assert.assertTrue(roundPairings.getPlayerByes().contains(player3)); + } + + @Test + public void PlayerWithByeLeftTournament() { + // 1 > 2 + // 3 > 4 + // 5 + // 5 left the tournament + + + TournamentPlayer player1 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player2 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player3 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player4 = new TournamentPlayer(new PlayerStub(), null); + TournamentPlayer player5 = new TournamentPlayer(new PlayerStub(), null); + List players = new ArrayList<>(); + //players.add(player5); -- player 5 is not active + players.add(player4); + players.add(player2); + players.add(player3); + players.add(player1); + + player1.setPoints(3); + player2.setPoints(0); + player3.setPoints(3); + player4.setPoints(0); + player5.setPoints(3); + + List rounds = new ArrayList<>(); + // first round + Round round = new Round(1, new TournamentStub()); + TournamentPairing pair1 = new TournamentPairing(player1, player2); + round.addPairing(pair1); + TournamentPairing pair2 = new TournamentPairing(player3, player4); + round.addPairing(pair2); + round.getPlayerByes().add(player5); + rounds.add(round); + + SwissPairingMinimalWeightMatching swissPairing = new SwissPairingMinimalWeightMatching(players, rounds, false); + RoundPairings roundPairings = swissPairing.getRoundPairings(); + + Assert.assertEquals(2, roundPairings.getPairings().size()); + Assert.assertEquals(0, roundPairings.getPlayerByes().size()); + + CheckPair(roundPairings.getPairings(), player1, player3); + CheckPair(roundPairings.getPairings(), player2, player4); + Assert.assertEquals(0, roundPairings.getPlayerByes().size()); + } + + @Test + public void SimulateDifferentTournaments() { + int playersCount = 12; + for (int i = 0; i <= playersCount; i++) { + int roundsCount = ((i + 1) / 2) * 2 - 1; + for (int j = 1; j <= roundsCount; j++) { + SimulateTournament(i, j); + } + } + } + + private void SimulateTournament(int playersCount, int roundsCount) { + Random rnd = new Random(); + + List players = new ArrayList<>(); + for (int i = 0; i < playersCount; i++) { + players.add(new TournamentPlayer(new PlayerStub(), null)); + } + + List playedPairs = new ArrayList<>(); + Set playersByes = new HashSet<>(); + + List rounds = new ArrayList<>(); + for (int i = 0; i < roundsCount; i++) { + SwissPairingMinimalWeightMatching swissPairing = + new SwissPairingMinimalWeightMatching(new ArrayList<>(players), rounds, i + 1 == roundsCount); + RoundPairings roundPairings = swissPairing.getRoundPairings(); + + Assert.assertEquals(playersCount / 2, roundPairings.getPairings().size()); + Assert.assertEquals(playersCount % 2, roundPairings.getPlayerByes().size()); + + Round round = new Round(1, new TournamentStub()); + rounds.add(round); + for (TournamentPairing pairing : roundPairings.getPairings()) { + if (ContainsPair(playedPairs, pairing.getPlayer1(), pairing.getPlayer2())) { + if (i < (playersCount + 1) / 2) { + throw new AssertionError("Match between players has been played already."); + } + } + playedPairs.add(pairing); + + round.addPairing(pairing); + if (rnd.nextBoolean()) { + pairing.getPlayer1().setPoints(pairing.getPlayer1().getPoints() + 3); + } else { + pairing.getPlayer2().setPoints(pairing.getPlayer2().getPoints() + 3); + } + } + for (TournamentPlayer playerBye : roundPairings.getPlayerByes()) { + if (playersByes.contains(playerBye)) { + throw new AssertionError("Player already had bye."); + } + playersByes.add(playerBye); + + round.getPlayerByes().add(playerBye); + playerBye.setPoints(playerBye.getPoints() + 3); + } + } + } + + private void CheckPair(List pairs, TournamentPlayer player1, TournamentPlayer player2) { + if (!ContainsPair(pairs, player1, player2)) { + throw new AssertionError("Pairing doesn't contain expected pair of players."); + } + } + + private boolean ContainsPair(List pairs, TournamentPlayer player1, TournamentPlayer player2) { + for (TournamentPairing pair : pairs) { + if (pair.getPlayer1().equals(player1) && pair.getPlayer2().equals(player2)) { + return true; + } + if (pair.getPlayer1().equals(player2) && pair.getPlayer2().equals(player1)) { + return true; + } + } + return false; + } +} + + diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java new file mode 100644 index 0000000000..0ae6463b2a --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java @@ -0,0 +1,1222 @@ +/* + * 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 org.mage.test.stub; + +import mage.MageObject; +import mage.abilities.*; +import mage.abilities.costs.AlternativeSourceCosts; +import mage.abilities.costs.Cost; +import mage.abilities.costs.Costs; +import mage.abilities.costs.VariableCost; +import mage.abilities.costs.mana.ManaCost; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.mana.ManaOptions; +import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.decks.Deck; +import mage.choices.Choice; +import mage.constants.*; +import mage.constants.PlayerAction; +import mage.counters.Counter; +import mage.counters.Counters; +import mage.game.Game; +import mage.game.Graveyard; +import mage.game.Table; +import mage.game.combat.CombatGroup; +import mage.game.draft.Draft; +import mage.game.match.Match; +import mage.game.match.MatchPlayer; +import mage.game.permanent.Permanent; +import mage.game.tournament.Tournament; +import mage.players.Library; +import mage.players.ManaPool; +import mage.players.Player; +import mage.players.net.UserData; +import mage.target.Target; +import mage.target.TargetAmount; +import mage.target.TargetCard; +import mage.target.common.TargetCardInLibrary; +import mage.util.MessageToClient; + +import java.io.Serializable; +import java.util.*; + +/** + * + * @author Quercitron + */ +public class PlayerStub implements Player { + + private final UUID id = UUID.randomUUID(); + + @Override + public UUID getId() { + return id; + } + + @Override + public boolean isHuman() { + return false; + } + + @Override + public String getName() { + return null; + } + + @Override + public String getLogName() { + return null; + } + + @Override + public RangeOfInfluence getRange() { + return null; + } + + @Override + public Library getLibrary() { + return null; + } + + @Override + public Cards getSideboard() { + return null; + } + + @Override + public Graveyard getGraveyard() { + return null; + } + + @Override + public Abilities getAbilities() { + return null; + } + + @Override + public void addAbility(Ability ability) { + + } + + @Override + public Counters getCounters() { + return null; + } + + @Override + public int getLife() { + return 0; + } + + @Override + public void initLife(int life) { + + } + + @Override + public void setLife(int life, Game game) { + + } + + @Override + public int loseLife(int amount, Game game) { + return 0; + } + + @Override + public int gainLife(int amount, Game game) { + return 0; + } + + @Override + public int damage(int damage, UUID sourceId, Game game, boolean combatDamage, boolean preventable) { + return 0; + } + + @Override + public int damage(int damage, UUID sourceId, Game game, boolean combatDamage, boolean preventable, ArrayList appliedEffects) { + return 0; + } + + @Override + public boolean isCanLoseLife() { + return false; + } + + @Override + public void setCanLoseLife(boolean canLoseLife) { + + } + + @Override + public void setCanGainLife(boolean canGainLife) { + + } + + @Override + public boolean isCanGainLife() { + return false; + } + + @Override + public void setCanPayLifeCost(boolean canPayLifeCost) { + + } + + @Override + public boolean canPayLifeCost() { + return false; + } + + @Override + public void setCanPaySacrificeCost(boolean canPaySacrificeCost) { + + } + + @Override + public boolean canPaySacrificeCost() { + return false; + } + + @Override + public void setLifeTotalCanChange(boolean lifeTotalCanChange) { + + } + + @Override + public boolean isLifeTotalCanChange() { + return false; + } + + @Override + public void setLoseByZeroOrLessLife(boolean loseByZeroOrLessLife) { + + } + + @Override + public boolean canLoseByZeroOrLessLife() { + return false; + } + + @Override + public void setPlayCardsFromGraveyard(boolean playCardsFromGraveyard) { + + } + + @Override + public boolean canPlayCardsFromGraveyard() { + return false; + } + + @Override + public List getAlternativeSourceCosts() { + return null; + } + + @Override + public Cards getHand() { + return null; + } + + @Override + public int getLandsPlayed() { + return 0; + } + + @Override + public int getLandsPerTurn() { + return 0; + } + + @Override + public void setLandsPerTurn(int landsPerTurn) { + + } + + @Override + public int getLoyaltyUsePerTurn() { + return 0; + } + + @Override + public void setLoyaltyUsePerTurn(int loyaltyUsePerTurn) { + + } + + @Override + public int getMaxHandSize() { + return 0; + } + + @Override + public void setMaxHandSize(int maxHandSize) { + + } + + @Override + public int getMaxAttackedBy() { + return 0; + } + + @Override + public void setMaxAttackedBy(int maxAttackedBy) { + + } + + @Override + public boolean isPassed() { + return false; + } + + @Override + public boolean isEmptyDraw() { + return false; + } + + @Override + public void pass(Game game) { + + } + + @Override + public void resetPassed() { + + } + + @Override + public void resetPlayerPassedActions() { + + } + + @Override + public boolean getPassedTurn() { + return false; + } + + @Override + public boolean getPassedUntilEndOfTurn() { + return false; + } + + @Override + public boolean getPassedUntilNextMain() { + return false; + } + + @Override + public boolean getPassedUntilStackResolved() { + return false; + } + + @Override + public boolean getPassedAllTurns() { + return false; + } + + @Override + public AbilityType getJustActivatedType() { + return null; + } + + @Override + public void setJustActivatedType(AbilityType abilityType) { + + } + + @Override + public boolean hasLost() { + return false; + } + + @Override + public boolean hasWon() { + return false; + } + + @Override + public boolean hasQuit() { + return false; + } + + @Override + public void quit(Game game) { + + } + + @Override + public boolean hasTimerTimeout() { + return false; + } + + @Override + public void timerTimeout(Game game) { + + } + + @Override + public boolean hasIdleTimeout() { + return false; + } + + @Override + public void idleTimeout(Game game) { + + } + + @Override + public boolean hasLeft() { + return false; + } + + @Override + public boolean isInGame() { + return false; + } + + @Override + public boolean canRespond() { + return false; + } + + @Override + public void otherPlayerLeftGame(Game game) { + + } + + @Override + public ManaPool getManaPool() { + return null; + } + + @Override + public Set getInRange() { + return null; + } + + @Override + public boolean isTopCardRevealed() { + return false; + } + + @Override + public void setTopCardRevealed(boolean topCardRevealed) { + + } + + @Override + public UserData getUserData() { + return null; + } + + @Override + public void setUserData(UserData userData) { + + } + + @Override + public boolean canLose(Game game) { + return false; + } + + @Override + public boolean autoLoseGame() { + return false; + } + + @Override + public Set getPlayersUnderYourControl() { + return null; + } + + @Override + public void controlPlayersTurn(Game game, UUID playerId) { + + } + + @Override + public void setTurnControlledBy(UUID playerId) { + + } + + @Override + public UUID getTurnControlledBy() { + return null; + } + + @Override + public void resetOtherTurnsControlled() { + + } + + @Override + public boolean isGameUnderControl() { + return false; + } + + @Override + public void setGameUnderYourControl(boolean value) { + + } + + @Override + public boolean isTestMode() { + return false; + } + + @Override + public void setTestMode(boolean value) { + + } + + @Override + public void addAction(String action) { + + } + + @Override + public int getActionCount() { + return 0; + } + + @Override + public void setAllowBadMoves(boolean allowBadMoves) { + + } + + @Override + public void init(Game game) { + + } + + @Override + public void init(Game game, boolean testMode) { + + } + + @Override + public void useDeck(Deck deck, Game game) { + + } + + @Override + public void reset() { + + } + + @Override + public void shuffleLibrary(Game game) { + + } + + @Override + public int drawCards(int num, Game game) { + return 0; + } + + @Override + public int drawCards(int num, Game game, ArrayList appliedEffects) { + return 0; + } + + @Override + public boolean cast(SpellAbility ability, Game game, boolean noMana) { + return false; + } + + @Override + public SpellAbility chooseSpellAbilityForCast(SpellAbility ability, Game game, boolean noMana) { + return null; + } + + @Override + public boolean putInHand(Card card, Game game) { + return false; + } + + @Override + public boolean removeFromHand(Card card, Game game) { + return false; + } + + @Override + public boolean removeFromBattlefield(Permanent permanent, Game game) { + return false; + } + + @Override + public boolean putInGraveyard(Card card, Game game, boolean fromBattlefield) { + return false; + } + + @Override + public boolean removeFromGraveyard(Card card, Game game) { + return false; + } + + @Override + public boolean removeFromLibrary(Card card, Game game) { + return false; + } + + @Override + public boolean searchLibrary(TargetCardInLibrary target, Game game) { + return false; + } + + @Override + public boolean searchLibrary(TargetCardInLibrary target, Game game, UUID targetPlayerId) { + return false; + } + + @Override + public boolean canPlayLand() { + return false; + } + + @Override + public boolean playLand(Card card, Game game) { + return false; + } + + @Override + public boolean activateAbility(ActivatedAbility ability, Game game) { + return false; + } + + @Override + public boolean triggerAbility(TriggeredAbility ability, Game game) { + return false; + } + + @Override + public boolean canBeTargetedBy(MageObject source, UUID sourceControllerId, Game game) { + return false; + } + + @Override + public boolean hasProtectionFrom(MageObject source, Game game) { + return false; + } + + @Override + public boolean flipCoin(Game game) { + return false; + } + + @Override + public boolean flipCoin(Game game, ArrayList appliedEffects) { + return false; + } + + @Override + public void discard(int amount, Ability source, Game game) { + + } + + @Override + public Card discardOne(boolean random, Ability source, Game game) { + return null; + } + + @Override + public Cards discard(int amount, boolean random, Ability source, Game game) { + return null; + } + + @Override + public void discardToMax(Game game) { + + } + + @Override + public boolean discard(Card card, Ability source, Game game) { + return false; + } + + @Override + public void lost(Game game) { + + } + + @Override + public void lostForced(Game game) { + + } + + @Override + public void won(Game game) { + + } + + @Override + public void leave() { + + } + + @Override + public void concede(Game game) { + + } + + @Override + public void abort() { + + } + + @Override + public void abortReset() { + + } + + @Override + public void skip() { + + } + + @Override + public void sendPlayerAction(PlayerAction passPriorityAction, Game game, Object data) { + + } + + @Override + public int getStoredBookmark() { + return 0; + } + + @Override + public void setStoredBookmark(int bookmark) { + + } + + @Override + public void resetStoredBookmark(Game game) { + + } + + @Override + public void revealCards(String name, Cards cards, Game game) { + + } + + @Override + public void revealCards(String name, Cards cards, Game game, boolean postToLog) { + + } + + @Override + public void lookAtCards(String name, Card card, Game game) { + + } + + @Override + public void lookAtCards(String name, Cards cards, Game game) { + + } + + @Override + public Player copy() { + return null; + } + + @Override + public void restore(Player player) { + + } + + @Override + public void setResponseString(String responseString) { + + } + + @Override + public void setResponseUUID(UUID responseUUID) { + + } + + @Override + public void setResponseBoolean(Boolean responseBoolean) { + + } + + @Override + public void setResponseInteger(Integer data) { + + } + + @Override + public void setResponseManaType(UUID manaTypePlayerId, ManaType responseManaType) { + + } + + @Override + public boolean priority(Game game) { + return false; + } + + @Override + public boolean choose(Outcome outcome, Target target, UUID sourceId, Game game) { + return false; + } + + @Override + public boolean choose(Outcome outcome, Target target, UUID sourceId, Game game, Map options) { + return false; + } + + @Override + public boolean choose(Outcome outcome, Cards cards, TargetCard target, Game game) { + return false; + } + + @Override + public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) { + return false; + } + + @Override + public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) { + return false; + } + + @Override + public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) { + return false; + } + + @Override + public boolean chooseMulligan(Game game) { + return false; + } + + @Override + public boolean chooseUse(Outcome outcome, String message, Ability source, Game game) { + return false; + } + + @Override + public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) { + return false; + } + + @Override + public boolean choose(Outcome outcome, Choice choice, Game game) { + return false; + } + + @Override + public boolean choosePile(Outcome outcome, String message, List pile1, List pile2, Game game) { + return false; + } + + @Override + public boolean playMana(Ability ability, ManaCost unpaid, String promptText, Game game) { + return false; + } + + @Override + public boolean putCardsOnBottomOfLibrary(Cards cards, Game game, Ability source, boolean anyOrder) { + return false; + } + + @Override + public boolean putCardsOnTopOfLibrary(Cards cards, Game game, Ability source, boolean anyOrder) { + return false; + } + + @Override + public int announceXMana(int min, int max, String message, Game game, Ability ability) { + return 0; + } + + @Override + public int announceXCost(int min, int max, String message, Game game, Ability ability, VariableCost variableCost) { + return 0; + } + + @Override + public int chooseReplacementEffect(Map abilityMap, Game game) { + return 0; + } + + @Override + public TriggeredAbility chooseTriggeredAbility(List abilities, Game game) { + return null; + } + + @Override + public Mode chooseMode(Modes modes, Ability source, Game game) { + return null; + } + + @Override + public void selectAttackers(Game game, UUID attackingPlayerId) { + + } + + @Override + public void selectBlockers(Game game, UUID defendingPlayerId) { + + } + + @Override + public UUID chooseAttackerOrder(List attacker, Game game) { + return null; + } + + @Override + public UUID chooseBlockerOrder(List blockers, CombatGroup combatGroup, List blockerOrder, Game game) { + return null; + } + + @Override + public void assignDamage(int damage, List targets, String singleTargetName, UUID sourceId, Game game) { + + } + + @Override + public int getAmount(int min, int max, String message, Game game) { + return 0; + } + + @Override + public void sideboard(Match match, Deck deck) { + + } + + @Override + public void construct(Tournament tournament, Deck deck) { + + } + + @Override + public void pickCard(List cards, Deck deck, Draft draft) { + + } + + @Override + public void declareAttacker(UUID attackerId, UUID defenderId, Game game, boolean allowUndo) { + + } + + @Override + public void declareBlocker(UUID defenderId, UUID blockerId, UUID attackerId, Game game) { + + } + + @Override + public List getAvailableAttackers(Game game) { + return null; + } + + @Override + public List getAvailableAttackers(UUID defenderId, Game game) { + return null; + } + + @Override + public List getAvailableBlockers(Game game) { + return null; + } + + @Override + public void beginTurn(Game game) { + + } + + @Override + public void endOfTurn(Game game) { + + } + + @Override + public void phasing(Game game) { + + } + + @Override + public void untap(Game game) { + + } + + @Override + public ManaOptions getManaAvailable(Game game) { + return null; + } + + @Override + public List getPlayable(Game game, boolean hidden) { + return null; + } + + @Override + public List getPlayableOptions(Ability ability, Game game) { + return null; + } + + @Override + public Set getPlayableInHand(Game game) { + return null; + } + + @Override + public LinkedHashMap getUseableActivatedAbilities(MageObject object, Zone zone, Game game) { + return null; + } + + @Override + public void addCounters(Counter counter, Game game) { + + } + + @Override + public List getAttachments() { + return null; + } + + @Override + public boolean addAttachment(UUID permanentId, Game game) { + return false; + } + + @Override + public boolean removeAttachment(Permanent permanent, Game game) { + return false; + } + + @Override + public void becomesActivePlayer() { + + } + + @Override + public int getTurns() { + return 0; + } + + @Override + public boolean lookAtFaceDownCard(Card card, Game game) { + return false; + } + + @Override + public void setPriorityTimeLeft(int timeLeft) { + + } + + @Override + public int getPriorityTimeLeft() { + return 0; + } + + @Override + public void setReachedNextTurnAfterLeaving(boolean reachedNextTurnAfterLeaving) { + + } + + @Override + public boolean hasReachedNextTurnAfterLeaving() { + return false; + } + + @Override + public boolean canJoinTable(Table table) { + return false; + } + + @Override + public void setCommanderId(UUID commanderId) { + + } + + @Override + public UUID getCommanderId() { + return null; + } + + @Override + public boolean moveCards(Cards cards, Zone fromZone, Zone toZone, Ability source, Game game) { + return false; + } + + @Override + public boolean moveCards(Card card, Zone fromZone, Zone toZone, Ability source, Game game) { + return false; + } + + @Override + public boolean moveCards(Set cards, Zone fromZone, Zone toZone, Ability source, Game game) { + return false; + } + + @Override + public boolean moveCards(Card card, Zone toZone, Ability source, Game game) { + return false; + } + + @Override + public boolean moveCards(Card card, Zone toZone, Ability source, Game game, boolean tapped, boolean faceDown, boolean byOwner, ArrayList appliedEffects) { + return false; + } + + @Override + public boolean moveCards(Cards cards, Zone toZone, Ability source, Game game) { + return false; + } + + @Override + public boolean moveCards(Set cards, Zone toZone, Ability source, Game game) { + return false; + } + + @Override + public boolean moveCards(Set cards, Zone toZone, Ability source, Game game, boolean tapped, boolean faceDown, boolean byOwner, ArrayList appliedEffects) { + return false; + } + + @Override + public boolean moveCardsToExile(Card card, Ability source, Game game, boolean withName, UUID exileId, String exileZoneName) { + return false; + } + + @Override + public boolean moveCardsToExile(Set cards, Ability source, Game game, boolean withName, UUID exileId, String exileZoneName) { + return false; + } + + @Override + public boolean moveCardToHandWithInfo(Card card, UUID sourceId, Game game) { + return false; + } + + @Override + public boolean moveCardToHandWithInfo(Card card, UUID sourceId, Game game, boolean withName) { + return false; + } + + @Override + public boolean moveCardToExileWithInfo(Card card, UUID exileId, String exileName, UUID sourceId, Game game, Zone fromZone, boolean withName) { + return false; + } + + @Override + public boolean moveCardToGraveyardWithInfo(Card card, UUID sourceId, Game game, Zone fromZone) { + return false; + } + + @Override + public Set moveCardsToGraveyardWithInfo(Set cards, Ability source, Game game, Zone fromZone) { + return null; + } + + @Override + public boolean moveCardToLibraryWithInfo(Card card, UUID sourceId, Game game, Zone fromZone, boolean toTop, boolean withName) { + return false; + } + + @Override + public boolean hasOpponent(UUID playerToCheckId, Game game) { + return false; + } + + @Override + public void cleanUpOnMatchEnd() { + + } + + @Override + public void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts, Costs costs) { + + } + + @Override + public UUID getCastSourceIdWithAlternateMana() { + return null; + } + + @Override + public ManaCosts getCastSourceIdManaCosts() { + return null; + } + + @Override + public Costs getCastSourceIdCosts() { + return null; + } + + @Override + public void addPermissionToShowHandCards(UUID watcherUserId) { + + } + + @Override + public boolean hasUserPermissionToSeeHand(UUID userId) { + return false; + } + + @Override + public void revokePermissionToSeeHandCards() { + + } + + @Override + public boolean isRequestToShowHandCardsAllowed() { + return false; + } + + @Override + public Set getUsersAllowedToSeeHandCards() { + return null; + } + + @Override + public boolean isInPayManaMode() { + return false; + } + + @Override + public void setMatchPlayer(MatchPlayer matchPlayer) { + + } + + @Override + public MatchPlayer getMatchPlayer() { + return null; + } + + @Override + public boolean scry(int value, Ability source, Game game) { + return false; + } + + @Override + public boolean addTargets(Ability ability, Game game) { + return false; + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/TournamentStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/TournamentStub.java new file mode 100644 index 0000000000..acdc6c43e7 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/stub/TournamentStub.java @@ -0,0 +1,237 @@ +/* + * 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 org.mage.test.stub; + +import mage.cards.ExpansionSet; +import mage.cards.decks.Deck; +import mage.game.draft.Draft; +import mage.game.events.Listener; +import mage.game.events.PlayerQueryEvent; +import mage.game.events.TableEvent; +import mage.game.tournament.*; +import mage.players.Player; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +/** + * + * @author Quercitron + */ +public class TournamentStub implements Tournament { + + private final UUID id = UUID.randomUUID(); + + @Override + public UUID getId() { + return id; + } + + @Override + public void addPlayer(Player player, String playerType) { + + } + + @Override + public void removePlayer(UUID playerId) { + + } + + @Override + public TournamentPlayer getPlayer(UUID playerId) { + return null; + } + + @Override + public Collection getPlayers() { + return null; + } + + @Override + public Collection getRounds() { + return null; + } + + @Override + public List getSets() { + return null; + } + + @Override + public void updateResults() { + + } + + @Override + public void setBoosterInfo(String setInfo) { + + } + + @Override + public String getBoosterInfo() { + return null; + } + + @Override + public void submitDeck(UUID playerId, Deck deck) { + + } + + @Override + public void updateDeck(UUID playerId, Deck deck) { + + } + + @Override + public void autoSubmit(UUID playerId, Deck deck) { + + } + + @Override + public boolean allJoined() { + return false; + } + + @Override + public boolean isDoneConstructing() { + return false; + } + + @Override + public void quit(UUID playerId) { + + } + + @Override + public void leave(UUID playerId) { + + } + + @Override + public void nextStep() { + + } + + @Override + public void addTableEventListener(Listener listener) { + + } + + @Override + public void addPlayerQueryEventListener(Listener listener) { + + } + + @Override + public void fireConstructEvent(UUID playerId) { + + } + + @Override + public TournamentOptions getOptions() { + return null; + } + + @Override + public void setStartTime() { + + } + + @Override + public Date getStartTime() { + return null; + } + + @Override + public Date getEndTime() { + return null; + } + + @Override + public Date getStepStartTime() { + return null; + } + + @Override + public void setStepStartTime(Date date) { + + } + + @Override + public TournamentType getTournamentType() { + return null; + } + + @Override + public void setTournamentType(TournamentType tournamentType) { + + } + + @Override + public String getTournamentState() { + return null; + } + + @Override + public void setTournamentState(String tournamentState) { + + } + + @Override + public int getNumberRounds() { + return 0; + } + + @Override + public void cleanUpOnTournamentEnd() { + + } + + @Override + public boolean isAbort() { + return false; + } + + @Override + public void setAbort(boolean abort) { + + } + + @Override + public void clearDraft() { + + } + + @Override + public Draft getDraft() { + return null; + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/utils/ManaUtilTest.java b/Mage.Tests/src/test/java/org/mage/test/utils/ManaUtilTest.java index 3534b4a6ac..fbc1cd7518 100644 --- a/Mage.Tests/src/test/java/org/mage/test/utils/ManaUtilTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/utils/ManaUtilTest.java @@ -3,6 +3,7 @@ package org.mage.test.utils; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.UUID; +import mage.Mana; import mage.abilities.Ability; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -88,6 +89,42 @@ public class ManaUtilTest extends CardTestPlayerBase { Assert.assertEquals("", ManaUtil.condenseManaCostString("{}")); } + /** + * Mana.enough is used to check if a spell can be cast with an given amount + * of avalable mana + */ + @Test + public void testManaEnough() { + testManaAvailEnough("{G}", 1, "", true); + testManaAvailEnough("{G}", 0, "{G}", true); + testManaAvailEnough("{R}", 0, "{G}", false); + testManaAvailEnough("{B}", 0, "{G}", false); + testManaAvailEnough("{U}", 0, "{G}", false); + testManaAvailEnough("{W}", 0, "{G}", false); + + testManaAvailEnough("{R}", 1, "", true); + testManaAvailEnough("{R}", 0, "{R}", true); + testManaAvailEnough("{G}", 0, "{R}", false); + testManaAvailEnough("{B}", 0, "{R}", false); + testManaAvailEnough("{U}", 0, "{R}", false); + testManaAvailEnough("{W}", 0, "{R}", false); + + testManaAvailEnough("{U}{B}{W}{G}{R}", 4, "{R}", true); + testManaAvailEnough("{U}{B}{W}{G}{R}", 3, "{R}{B}", true); + + testManaAvailEnough("{U}{U}{U}{G}{G}{2}", 2, "{U}{U}{G}{R}{B}", true); + + testManaAvailEnough("{2}{U}{U}", 0, "{U}{U}{U}{U}", true); + testManaAvailEnough("{2}{U}{U}", 0, "{4}", false); + testManaAvailEnough("{2}{U}{U}", 0, "{B}{B}{4}", false); + + testManaAvailEnough("{G}", 0, "{G/W}", true); + testManaAvailEnough("{G}{W}", 0, "{G/W}{G/W}", true); + testManaAvailEnough("{W}{W}", 0, "{G/W}{G/W}", true); + testManaAvailEnough("{G}{G}", 0, "{G/W}{G/W}", true); + + } + /** * Common way to test ManaUtil.tryToAutoPay * @@ -142,6 +179,26 @@ public class ManaUtilTest extends CardTestPlayerBase { Assert.assertTrue("Wrong mana ability has been chosen", expectedChosen.isInstance(ability)); } + /** + * Checks if the given available Mana is enough to pay a given mana cost + * + * @param manaCostsToPay + * @param availablyAny + * @param available + * @param expected + */ + private void testManaAvailEnough(String manaCostsToPay, int availablyAny, String available, boolean expected) { + ManaCost unpaid = new ManaCostsImpl(manaCostsToPay); + ManaCost costAvailable = new ManaCostsImpl(available); + Mana manaAvailable = costAvailable.getMana(); + manaAvailable.setAny(availablyAny); + if (expected) { + Assert.assertTrue("The available Mana " + costAvailable.getText() + " should be enough to pay the costs " + unpaid.getText(), unpaid.getMana().enough(manaAvailable)); + } else { + Assert.assertFalse("The available Mana " + costAvailable.getText() + " shouldn't be enough to pay the costs " + unpaid.getText(), unpaid.getMana().enough(manaAvailable)); + } + } + /** * Extracts mana abilities from the card. * diff --git a/Mage/src/mage/Mana.java b/Mage/src/mage/Mana.java index 461e41bf35..fd22fbbe8b 100644 --- a/Mage/src/mage/Mana.java +++ b/Mage/src/mage/Mana.java @@ -28,32 +28,19 @@ package mage; import java.io.Serializable; -import java.util.Objects; -import java.util.logging.Logger; - import mage.constants.ColoredManaSymbol; import mage.constants.ManaType; +import static mage.constants.ManaType.COLORLESS; import mage.filter.FilterMana; import mage.util.Copyable; -import mage.util.Logging; +import mage.util.ThreadLocalStringBuilder; /** - * Representation of a mana pool. Can contain colored and colorless mana. * * @author BetaSteward_at_googlemail.com */ public class Mana implements Comparable, Serializable, Copyable { - private static Logger logger = Logging.getLogger(Mana.class.getName()); - - public static final String RED = "RED"; - public static final String GREEN = "GREEN"; - public static final String BLUE = "BLUE"; - public static final String WHITE = "WHITE"; - public static final String BLACK = "BLACK"; - public static final String COLORLESS = "COLORLESS"; - public static final String ANY = "ANY"; - protected int red; protected int green; protected int blue; @@ -63,8 +50,6 @@ public class Mana implements Comparable, Serializable, Copyable { protected int any; protected boolean flag = false; - //TODO THIS IS UNSAFE AND MUTABLE - //TODO THIS SHOULD BE REMOVED public static final Mana RedMana = RedMana(1); public static final Mana GreenMana = GreenMana(1); public static final Mana BlueMana = BlueMana(1); @@ -75,13 +60,7 @@ public class Mana implements Comparable, Serializable, Copyable { public Mana() { } - /** - * Copy constructor. - * - * @param mana The {@link Mana} to copy from. Can not be null. - */ public Mana(final Mana mana) { - Objects.requireNonNull(mana, "The passed in Mana can not be null"); this.red = mana.red; this.green = mana.green; this.blue = mana.blue; @@ -92,38 +71,7 @@ public class Mana implements Comparable, Serializable, Copyable { this.flag = mana.flag; } - - /** - * Creates a {@link Mana} object with the mana passed in. - * - * @param red Total red mana to add. - * @param green Total green mana to add. - * @param blue Total blue mana to add. - * @param white Total white mana to add. - * @param black Total black mana to add. - * @param colorless Total colorless mana to add. - * @param any Total any colored mana to add. - */ - public Mana(final int red, final int green, final int blue, final int white, - final int black, final int colorless, final int any) { - this.red = notNegative(red, RED); - this.green = notNegative(green, GREEN); - this.blue = notNegative(blue, BLUE); - this.white = notNegative(white, WHITE); - this.black = notNegative(black, BLACK); - this.colorless = notNegative(colorless, COLORLESS); - this.any = notNegative(any, ANY); - } - - - /** - * Creates a {@link Mana} object from the {@link ColoredManaSymbol} {@code color}. - * - * @param color The {@link ColoredManaSymbol} to create {@link Mana} from. - * Can not be null. - */ - public Mana(final ColoredManaSymbol color) { - Objects.requireNonNull(color, "The passed in ColoredManaSymbol can not be null"); + public Mana(ColoredManaSymbol color) { switch (color) { case G: green = 1; @@ -140,125 +88,73 @@ public class Mana implements Comparable, Serializable, Copyable { case W: white = 1; break; - default: - throw new IllegalArgumentException("Unknown color " + color.getColorName()); } } - /** - * Creates a {@link Mana} object with {@code num} Red mana. - * - * @param num The amount of Red mana to add. Can not be negative. - * @return {@link Mana} object with {@code num} Red mana. - */ - public static Mana RedMana(final int num) { - return new Mana(notNegative(num, RED), 0, 0, 0, 0, 0, 0); + public static Mana RedMana(int num) { + return new Mana(num, 0, 0, 0, 0, 0, 0); } - /** - * Creates a {@link Mana} object with {@code num} Green mana. - * - * @param num The amount of Green mana to add. Can not be negative. - * @return {@link Mana} object with {@code num} Green mana. - */ - public static Mana GreenMana(final int num) { - return new Mana(0, notNegative(num, GREEN), 0, 0, 0, 0, 0); + public static Mana GreenMana(int num) { + return new Mana(0, num, 0, 0, 0, 0, 0); } - /** - * Creates a {@link Mana} object with {@code num} Blue mana. - * - * @param num The amount of Blue mana to add. Can not be negative. - * @return {@link Mana} object with {@code num} Blue mana. - */ - public static Mana BlueMana(final int num) { - return new Mana(0, 0, notNegative(num, BLUE), 0, 0, 0, 0); + public static Mana BlueMana(int num) { + return new Mana(0, 0, num, 0, 0, 0, 0); } - /** - * Creates a {@link Mana} object with {@code num} White mana. - * - * @param num The amount of White mana to add. Can not be negative. - * @return {@link Mana} object with {@code num} White mana. - */ - public static Mana WhiteMana(final int num) { - return new Mana(0, 0, 0, notNegative(num, WHITE), 0, 0, 0); + public static Mana WhiteMana(int num) { + return new Mana(0, 0, 0, num, 0, 0, 0); } - /** - * Creates a {@link Mana} object with {@code num} Black mana. - * - * @param num The amount of Black mana to add. Can not be negative. - * @return {@link Mana} object with {@code num} Black mana. - */ - public static Mana BlackMana(final int num) { - return new Mana(0, 0, 0, 0, notNegative(num, BLACK), 0, 0); + public static Mana BlackMana(int num) { + return new Mana(0, 0, 0, 0, num, 0, 0); } - /** - * Creates a {@link Mana} object with {@code num} Colorless mana. - * - * @param num The amount of Colorless mana to add. Can not be negative. - * @return {@link Mana} object with {@code num} Colorless mana. - */ - public static Mana ColorlessMana(final int num) { - return new Mana(0, 0, 0, 0, 0, notNegative(num, COLORLESS), 0); + public static Mana ColorlessMana(int num) { + return new Mana(0, 0, 0, 0, 0, num, 0); } - - /** - * Increases the mana in this object by the relative mana in the passed in {@link Mana} object. - * - * @param mana {@link Mana} object to increase this mana by. - */ - public void add(final Mana mana) { - red += mana.red; - green += mana.green; - blue += mana.blue; - white += mana.white; - black += mana.black; - colorless += mana.colorless; - any += mana.any; + public Mana(int red, int green, int blue, int white, int black, int colorless, int any) { + this.red = red; + this.green = green; + this.blue = blue; + this.white = white; + this.black = black; + this.colorless = colorless; + this.any = any; + } + + public void add(Mana mana) { + red += mana.getRed(); + green += mana.getGreen(); + blue += mana.getBlue(); + white += mana.getWhite(); + black += mana.getBlack(); + colorless += mana.getColorless(); + any += mana.getAny(); } - /** - * Increases the Red mana by one. - */ public void increaseRed() { red++; } - /** - * Increases the Green mana by one. - */ public void increaseGreen() { green++; } - /** - * Increases the Blue mana by one. - */ public void increaseBlue() { blue++; } - /** - * Increases the White mana by one. - */ public void increaseWhite() { white++; } - /** - * Increases the Black mana by one. - */ public void increaseBlack() { black++; } - /** - * Increases the Colorless mana by one. - */ public void increaseColorless() { colorless++; } @@ -330,77 +226,20 @@ public class Mana implements Comparable, Serializable, Copyable { colorless++; } if (oldColorless == colorless) { - throw new ArithmeticException("Not enough mana to pay colorless"); + break; // to prevent endless loop -> should not be possible, but who knows } } } - /** - * Sets this object's mana to be equal to the passed in {@code mana} - * - * @param mana the mana to copy from - */ - public void setToMana(final Mana mana) { - any = mana.any; - red = mana.red; - green = mana.green; - white = mana.white; - blue = mana.blue; - black = mana.black; - colorless = mana.colorless; - } - - /** - * Returns the total mana count. - * - * @return the total mana count. - */ public int count() { return red + green + blue + white + black + colorless + any; } - /** - * Returns the total colored mana count. - * - * @return the total colored mana count. - */ public int countColored() { return red + green + blue + white + black + any; } - - /** - * Returns how many colors are currently more than 0. - * - * @return how many colors are currently more than 0. - */ - public int getDifferentColors() { - int count = 0; - if (blue > 0) { - count++; - } - if (black > 0) { - count++; - } - if (green > 0) { - count++; - } - if (white > 0) { - count++; - } - if (red > 0) { - count++; - } - return count; - } - - /** - * Returns the total mana with a {@link FilterMana} applied. - * - * @param filter the filter to apply when counting mana - * @return the total mana after filtration. - */ - public int count(final FilterMana filter) { + public int count(FilterMana filter) { if (filter == null) { return count(); } @@ -426,9 +265,6 @@ public class Mana implements Comparable, Serializable, Copyable { return count; } - /** - * Resets all mana to 0 - */ public void clear() { red = 0; green = 0; @@ -439,11 +275,6 @@ public class Mana implements Comparable, Serializable, Copyable { any = 0; } - /** - * Returns {@link String} of internal state. - * - * @return text version of internal state. - */ @Override public String toString() { StringBuilder sbMana = new StringBuilder(); @@ -471,32 +302,16 @@ public class Mana implements Comparable, Serializable, Copyable { return sbMana.toString(); } + private static final transient ThreadLocalStringBuilder threadLocalBuilder = new ThreadLocalStringBuilder(10); - /** - * Returns a deep copy of this object - * - * @return a deep copy of this object - */ @Override public Mana copy() { return new Mana(this); } - /** - * Returns if there is enough mana available compared to the passed in {@link Mana} - * - * @param avail value to compare with - * @return if there is enough mana in the mana pool compared to the passed in {@link Mana} - */ - public boolean enough(final Mana avail) { + public boolean enough(Mana avail) { Mana compare = avail.copy(); - red -= avail.red; - green -= avail.green; - blue -= avail.blue; - white -= avail.white; - black -= avail.black; - colorless -= avail.colorless; - any -= avail.any; + compare.subtract(this); if (compare.getRed() < 0) { compare.setAny(compare.getAny() + compare.getRed()); if (compare.getAny() < 0) { @@ -541,13 +356,7 @@ public class Mana implements Comparable, Serializable, Copyable { return true; } - /** - * Returns how much mana is needed to meet the passed in cost - * - * @param avail mana cost to meet - * @return how much mana is needed to meet the passed in cost - */ - public Mana needed(final Mana avail) { + public Mana needed(Mana avail) { Mana compare = avail.copy(); compare.subtract(this); if (compare.getRed() < 0 && compare.getAny() > 0) { @@ -614,8 +423,8 @@ public class Mana implements Comparable, Serializable, Copyable { return red; } - public void setRed(final int red) { - this.red = notNegative(red, "Red"); + public void setRed(int red) { + this.red = red; } public int getGreen() { @@ -623,7 +432,7 @@ public class Mana implements Comparable, Serializable, Copyable { } public void setGreen(int green) { - this.green = notNegative(green, "Green"); + this.green = green; } public int getBlue() { @@ -631,7 +440,7 @@ public class Mana implements Comparable, Serializable, Copyable { } public void setBlue(int blue) { - this.blue = notNegative(blue, "Blue"); + this.blue = blue; } public int getWhite() { @@ -639,7 +448,7 @@ public class Mana implements Comparable, Serializable, Copyable { } public void setWhite(int white) { - this.white = notNegative(white, "White"); + this.white = white; } public int getBlack() { @@ -647,7 +456,7 @@ public class Mana implements Comparable, Serializable, Copyable { } public void setBlack(int black) { - this.black = notNegative(black, "Black"); + this.black = black; } public int getColorless() { @@ -655,7 +464,7 @@ public class Mana implements Comparable, Serializable, Copyable { } public void setColorless(int colorless) { - this.colorless = notNegative(colorless, "Colorless"); + this.colorless = colorless; } public int getAny() { @@ -663,51 +472,43 @@ public class Mana implements Comparable, Serializable, Copyable { } public void setAny(int any) { - this.any = notNegative(any, "Any"); + this.any = any; } - @Override - public int compareTo(final Mana o) { - return count() - o.count(); + public int compareTo(Mana o) { + return this.count() - o.count(); } /** + * * @param mana * @return true if this contains any values that mana has */ - // todo what purpose does this serve? - // todo what if you want to check for red, and you have black? public boolean contains(Mana mana) { - if (mana.black > 0 && black > 0) { + if (mana.black > 0 && this.black > 0) { return true; } - if (mana.blue > 0 && blue > 0) { + if (mana.blue > 0 && this.blue > 0) { return true; } - if (mana.red > 0 && red > 0) { + if (mana.red > 0 && this.red > 0) { return true; } - if (mana.white > 0 && white > 0) { + if (mana.white > 0 && this.white > 0) { return true; } - if (mana.green > 0 && green > 0) { + if (mana.green > 0 && this.green > 0) { return true; } - if (mana.colorless > 0 && count() > 0) { + if (mana.colorless > 0 && this.count() > 0) { return true; } return false; } - /** - * Returns the total color based on the {@link ColoredManaSymbol} passed in - * - * @param color the {@link ColoredManaSymbol} to get mana for - * @return the total color based on the {@link ColoredManaSymbol} passed in - */ - public int getColor(final ColoredManaSymbol color) { + public int getColor(ColoredManaSymbol color) { if (color.equals(ColoredManaSymbol.G)) { return getGreen(); } @@ -726,13 +527,7 @@ public class Mana implements Comparable, Serializable, Copyable { return 0; } - /** - * Returns the total color based on the {@link ManaType} passed in - * - * @param manaType the {@link ManaType} to return the color for - * @return the total color based on the {@link ManaType} passed in - */ - public int get(final ManaType manaType) { + public int get(ManaType manaType) { switch (manaType) { case BLACK: return black; @@ -750,14 +545,7 @@ public class Mana implements Comparable, Serializable, Copyable { return 0; } - /** - * Sets the total mana based on the passed int {@code manaType} and {@code amount} - * - * @param manaType the type of mana - * @param amount the amount to set the mana to, can not be negative - */ - public void set(final ManaType manaType, final int amount) { - notNegative(amount, manaType.toString()); + public void set(ManaType manaType, int amount) { switch (manaType) { case BLACK: black = amount; @@ -780,7 +568,6 @@ public class Mana implements Comparable, Serializable, Copyable { } } - //todo not sure what this does, should we add some documentation of what a flag is? public void setFlag(boolean flag) { this.flag = flag; } @@ -789,21 +576,24 @@ public class Mana implements Comparable, Serializable, Copyable { return flag; } + public void setToMana(Mana mana) { + this.any = mana.any; + this.red = mana.red; + this.green = mana.green; + this.white = mana.white; + this.blue = mana.blue; + this.black = mana.black; + this.colorless = mana.colorless; + } - /** - * Checks if this object has the same mana values as the passed in {@link Mana} - * - * @param mana the {@link Mana} to compare to - * @return if both {@link Mana} objects have the same mana values - */ - public boolean equalManaValue(final Mana mana) { - return any == mana.any - && red == mana.red - && green == mana.green - && white == mana.white - && blue == mana.blue - && black == mana.black - && colorless == mana.colorless; + public boolean equalManaValue(Mana mana) { + return this.any == mana.any + && this.red == mana.red + && this.green == mana.green + && this.white == mana.white + && this.blue == mana.blue + && this.black == mana.black + && this.colorless == mana.colorless; } /** @@ -814,13 +604,14 @@ public class Mana implements Comparable, Serializable, Copyable { * @return */ public boolean includesMana(Mana mana) { - return green >= mana.green - && blue >= mana.blue - && white >= mana.white - && black >= mana.black - && red >= mana.red - && (colorless >= mana.colorless - || countColored() >= mana.countColored() + mana.colorless); + return this.green >= mana.green + && this.blue >= mana.blue + && this.white >= mana.white + && this.black >= mana.black + && this.red >= mana.red + && (this.colorless >= mana.colorless + || this.countColored() >= mana.countColored() + mana.colorless); + } /** @@ -855,49 +646,23 @@ public class Mana implements Comparable, Serializable, Copyable { return moreMana; } - - /** - * Used to check if a passed in value is less than 0. Log if the value is. - * - * @param value The value to check - * @param valueName The name of the value - * @return 0 if less than 0, or the value if more than 0 - */ - private static int notNegative(int value, final String valueName) { - if (value < 0) { - logger.info(valueName + " can not be set to less than 0. Setting to 0"); - value = 0; + public int getDifferentColors() { + int count = 0; + if (blue > 0) { + count++; } - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Mana mana = (Mana) o; - - if (red != mana.red) return false; - if (green != mana.green) return false; - if (blue != mana.blue) return false; - if (white != mana.white) return false; - if (black != mana.black) return false; - if (colorless != mana.colorless) return false; - if (any != mana.any) return false; - return flag == mana.flag; - } - - @Override - public int hashCode() { - int result = red; - result = 31 * result + green; - result = 31 * result + blue; - result = 31 * result + white; - result = 31 * result + black; - result = 31 * result + colorless; - result = 31 * result + any; - result = 31 * result + (flag ? 1 : 0); - return result; + if (black > 0) { + count++; + } + if (green > 0) { + count++; + } + if (white > 0) { + count++; + } + if (red > 0) { + count++; + } + return count; } } diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index 659d4987fb..4043b0701e 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -155,7 +155,7 @@ public abstract class AbilityImpl implements Ability { subAbilities.add(subAbility.copy()); } } - this.modes = ability.modes.copy(); + this.modes = ability.getModes().copy(); this.ruleAtTheTop = ability.ruleAtTheTop; this.ruleVisible = ability.ruleVisible; this.ruleAdditionalCostsVisible = ability.ruleAdditionalCostsVisible; @@ -196,6 +196,7 @@ public abstract class AbilityImpl implements Ability { boolean result = true; //20100716 - 117.12 if (checkIfClause(game)) { + for (Effect effect : getEffects()) { if (effect instanceof OneShotEffect) { boolean effectResult = effect.apply(game, this); @@ -255,9 +256,14 @@ public abstract class AbilityImpl implements Ability { /* 20130201 - 601.2b * If the spell is modal the player announces the mode choice (see rule 700.2). */ - if (!modes.choose(game, this)) { + if (!getModes().choose(game, this)) { return false; } + if (controller.isTestMode()) { + if (!controller.addTargets(this, game)) { + return false; + } + } getSourceObject(game); @@ -274,9 +280,8 @@ public abstract class AbilityImpl implements Ability { } // TODO: Because all (non targeted) choices have to be done during resolution // this has to be removed, if all using effects are changed - for (UUID modeId : this.getModes().getSelectedModes()) { - this.getModes().setActiveMode(modeId); - if (getChoices().size() > 0 && getChoices().choose(game, this) == false) { + for (Mode mode : this.getModes().getSelectedModes()) { + if (mode.getChoices().size() > 0 && mode.getChoices().choose(game, this) == false) { logger.debug("activate failed - choice"); return false; } @@ -312,9 +317,12 @@ public abstract class AbilityImpl implements Ability { // its mana cost; see rule 107.3), the player announces the value of that variable. VariableManaCost variableManaCost = handleManaXCosts(game, noMana, controller); String announceString = handleOtherXCosts(game, controller); - - for (UUID modeId : this.getModes().getSelectedModes()) { - this.getModes().setActiveMode(modeId); + // For effects from cards like Void Winnower x costs have to be set + if (game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.CAST_SPELL_LATE, getId(), getSourceId(), getControllerId()), this)) { + return false; + } + for (Mode mode : this.getModes().getSelectedModes()) { + this.getModes().setActiveMode(mode); //20121001 - 601.2c // 601.2c The player announces his or her choice of an appropriate player, object, or zone for // each target the spell requires. A spell may require some targets only if an alternative or @@ -335,7 +343,7 @@ public abstract class AbilityImpl implements Ability { if (sourceObject != null && !this.getAbilityType().equals(AbilityType.TRIGGERED)) { // triggered abilities check this already in playerImpl.triggerAbility sourceObject.adjustTargets(this, game); } - if (getTargets().size() > 0 && getTargets().chooseTargets(getEffects().get(0).getOutcome(), this.controllerId, this, noMana, game) == false) { + if (mode.getTargets().size() > 0 && mode.getTargets().chooseTargets(getEffects().get(0).getOutcome(), this.controllerId, this, noMana, game) == false) { if ((variableManaCost != null || announceString != null) && !game.isSimulation()) { game.informPlayer(controller, (sourceObject != null ? sourceObject.getIdName() : "") + ": no valid targets with this value of X"); } @@ -408,7 +416,7 @@ public abstract class AbilityImpl implements Ability { } if (variableManaCost != null) { int xValue = getManaCostsToPay().getX(); - game.informPlayers(new StringBuilder(controller.getLogName()).append(" announces a value of ").append(xValue).append(" for ").append(variableManaCost.getText()).toString()); + game.informPlayers(controller.getLogName() + " announces a value of " + xValue + " for " + variableManaCost.getText()); } } activated = true; @@ -681,7 +689,7 @@ public abstract class AbilityImpl implements Ability { @Override public Effects getEffects() { - return modes.getMode().getEffects(); + return getModes().getMode().getEffects(); } @Override @@ -706,7 +714,7 @@ public abstract class AbilityImpl implements Ability { @Override public Choices getChoices() { - return modes.getMode().getChoices(); + return getModes().getMode().getChoices(); } @Override @@ -781,7 +789,7 @@ public abstract class AbilityImpl implements Ability { } String ruleStart = sbRule.toString(); - String text = modes.getText(); + String text = getModes().getText(); String rule; if (!text.isEmpty()) { if (ruleStart.length() > 1) { @@ -873,7 +881,7 @@ public abstract class AbilityImpl implements Ability { @Override public Targets getTargets() { - return modes.getMode().getTargets(); + return getModes().getMode().getTargets(); } @Override @@ -883,12 +891,12 @@ public abstract class AbilityImpl implements Ability { @Override public boolean isModal() { - return this.modes.size() > 1; + return getModes().size() > 1; } @Override public void addMode(Mode mode) { - this.modes.addMode(mode); + getModes().addMode(mode); } @Override @@ -899,9 +907,12 @@ public abstract class AbilityImpl implements Ability { @Override public boolean canChooseTarget(Game game) { int found = 0; - for (Mode mode : modes.values()) { + for (Mode mode : getModes().values()) { if (mode.getTargets().canChoose(sourceId, controllerId, game)) { found++; + if (getModes().isEachModeMoreThanOnce()) { + return true; + } if (found >= getModes().getMinModes()) { return true; } @@ -1034,7 +1045,7 @@ public abstract class AbilityImpl implements Ability { logger.warn("Could get no object: " + this.toString()); } return new StringBuilder(" activates: ") - .append(object != null ? this.formatRule(modes.getText(), object.getLogName()) : modes.getText()) + .append(object != null ? this.formatRule(getModes().getText(), object.getLogName()) : getModes().getText()) .append(" from ") .append(getMessageText(game)).toString(); } @@ -1103,13 +1114,15 @@ public abstract class AbilityImpl implements Ability { } } else if (object instanceof Spell && ((Spell) object).getSpellAbility().getModes().size() > 1) { Modes spellModes = ((Spell) object).getSpellAbility().getModes(); - int item = 0; - for (Mode mode : spellModes.values()) { - item++; - if (spellModes.getSelectedModes().contains(mode.getId())) { - spellModes.setActiveMode(mode.getId()); - sb.append(" (mode ").append(item).append(")"); - sb.append(getTargetDescriptionForLog(getTargets(), game)); + for (Mode selectedMode : spellModes.getSelectedModes()) { + int item = 0; + for (Mode mode : spellModes.values()) { + item++; + if (mode.getId().equals(selectedMode.getId())) { + sb.append(" (mode ").append(item).append(")"); + sb.append(getTargetDescriptionForLog(selectedMode.getTargets(), game)); + break; + } } } } else { diff --git a/Mage/src/mage/abilities/Modes.java b/Mage/src/mage/abilities/Modes.java index be01464e4f..08a317f95c 100644 --- a/Mage/src/mage/abilities/Modes.java +++ b/Mage/src/mage/abilities/Modes.java @@ -30,7 +30,6 @@ package mage.abilities; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -50,33 +49,52 @@ import mage.util.CardUtil; */ public class Modes extends LinkedHashMap { - private UUID modeId; - private final Set selectedModes = new LinkedHashSet<>(); + private Mode mode; // the current mode of the selected modes + private final ArrayList selectedModes = new ArrayList<>(); private int minModes; private int maxModes; private TargetController modeChooser; - private boolean eachModeOnlyOnce; // state if each mode can be chosen only once + private boolean eachModeMoreThanOnce; // each mode can be selected multiple times during one choice + private boolean eachModeOnlyOnce; // state if each mode can be chosen only once as long as the source object exists public Modes() { - Mode mode = new Mode(); + this.mode = new Mode(); this.put(mode.getId(), mode); - this.modeId = mode.getId(); this.minModes = 1; this.maxModes = 1; - this.selectedModes.add(modeId); + this.selectedModes.add(mode); this.modeChooser = TargetController.YOU; + this.eachModeOnlyOnce = false; + this.eachModeMoreThanOnce = false; } public Modes(final Modes modes) { - this.modeId = modes.modeId; for (Map.Entry entry : modes.entrySet()) { this.put(entry.getKey(), entry.getValue().copy()); } this.minModes = modes.minModes; this.maxModes = modes.maxModes; - this.selectedModes.addAll(modes.selectedModes); + + if (modes.size() == 1) { + this.mode = values().iterator().next(); + this.selectedModes.add(mode); + } else { + // probably there is still a problem with copying modes with the same mode selected multiple times. + for (Mode selectedMode : modes.getSelectedModes()) { + Mode copiedMode = selectedMode.copy(); + this.selectedModes.add(copiedMode); + if (modes.getSelectedModes().size() == 1) { + this.mode = copiedMode; + } else { + if (selectedMode.equals(modes.getMode())) { + this.mode = copiedMode; + } + } + } + } this.modeChooser = modes.modeChooser; this.eachModeOnlyOnce = modes.eachModeOnlyOnce; + this.eachModeMoreThanOnce = modes.eachModeMoreThanOnce; } public Modes copy() { @@ -84,10 +102,21 @@ public class Modes extends LinkedHashMap { } public Mode getMode() { - return get(modeId); + return mode; } - public Set getSelectedModes() { + public UUID getModeId(int index) { + int idx = 0; + for (Mode currentMode : this.values()) { + idx++; + if (idx == index) { + return currentMode.getId(); + } + } + return null; + } + + public ArrayList getSelectedModes() { return selectedModes; } @@ -115,24 +144,9 @@ public class Modes extends LinkedHashMap { return this.modeChooser; } - public void setActiveMode(UUID modeId) { - if (selectedModes.contains(modeId)) { - this.modeId = modeId; - } - } - - public void setMode(Mode mode) { - if (this.containsKey(mode.getId())) { - this.modeId = mode.getId(); - this.selectedModes.add(mode.getId()); - Set copySelectedModes = new LinkedHashSet<>(); - copySelectedModes.addAll(selectedModes); - selectedModes.clear(); - for (UUID basicModeId : this.keySet()) { - if (copySelectedModes.contains(basicModeId)) { - selectedModes.add(basicModeId); - } - } + public void setActiveMode(Mode mode) { + if (selectedModes.contains(mode)) { + this.mode = mode; } } @@ -153,7 +167,7 @@ public class Modes extends LinkedHashMap { } } // check if all modes can be activated automatically - if (this.size() == this.getMinModes()) { + if (this.size() == this.getMinModes() && !isEachModeMoreThanOnce()) { Set onceSelectedModes = null; if (isEachModeOnlyOnce()) { onceSelectedModes = getAlreadySelectedModes(source, game); @@ -161,7 +175,7 @@ public class Modes extends LinkedHashMap { for (Mode mode : this.values()) { if ((!isEachModeOnlyOnce() || onceSelectedModes == null || !onceSelectedModes.contains(mode.getId())) && mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { - this.selectedModes.add(mode.getId()); + this.selectedModes.add(mode.copy()); } } if (isEachModeOnlyOnce()) { @@ -189,6 +203,7 @@ public class Modes extends LinkedHashMap { Player player = game.getPlayer(playerId); // player chooses modes manually + this.mode = null; while (this.selectedModes.size() < this.getMaxModes()) { Mode choice = player.chooseMode(this, source, game); if (choice == null) { @@ -197,28 +212,38 @@ public class Modes extends LinkedHashMap { } return this.selectedModes.size() >= this.getMinModes(); } - setMode(choice); + this.selectedModes.add(choice.copy()); + if (mode == null) { + mode = choice; + } } if (isEachModeOnlyOnce()) { setAlreadySelectedModes(selectedModes, source, game); } return true; } - this.modeId = this.values().iterator().next().getId(); - this.selectedModes.add(modeId); + if (mode == null) { + this.selectedModes.clear(); + Mode copiedMode = this.values().iterator().next().copy(); + this.selectedModes.add(copiedMode); + this.setActiveMode(copiedMode); + } if (isEachModeOnlyOnce()) { setAlreadySelectedModes(selectedModes, source, game); } return true; } - private void setAlreadySelectedModes(Set selectedModes, Ability source, Game game) { + private void setAlreadySelectedModes(ArrayList selectedModes, Ability source, Game game) { String key = getKey(source, game); Set onceSelectedModes = (Set) game.getState().getValue(key); if (onceSelectedModes == null) { onceSelectedModes = new HashSet<>(); } - onceSelectedModes.addAll(selectedModes); + for (Mode mode : selectedModes) { + onceSelectedModes.add(mode.getId()); + } + game.getState().setValue(key, onceSelectedModes); } @@ -232,7 +257,12 @@ public class Modes extends LinkedHashMap { public List getAvailableModes(Ability source, Game game) { List availableModes = new ArrayList<>(); - Set nonAvailableModes = getAlreadySelectedModes(source, game); + Set nonAvailableModes; + if (isEachModeMoreThanOnce()) { + nonAvailableModes = new HashSet<>(); + } else { + nonAvailableModes = getAlreadySelectedModes(source, game); + } for (Mode mode : this.values()) { if (isEachModeOnlyOnce() && nonAvailableModes != null && nonAvailableModes.contains(mode.getId())) { continue; @@ -253,13 +283,19 @@ public class Modes extends LinkedHashMap { sb.append("choose one or both "); } else if (this.getMinModes() == 2 && this.getMaxModes() == 2) { sb.append("choose two "); + } else if (this.getMinModes() == 3 && this.getMaxModes() == 3) { + sb.append("choose three "); } else { sb.append("choose one "); } if (isEachModeOnlyOnce()) { sb.append("that hasn't been chosen "); } - sb.append("—
"); + if (isEachModeMoreThanOnce()) { + sb.append(". You may choose the same mode more than once.
"); + } else { + sb.append("—
"); + } for (Mode mode : this.values()) { sb.append("&bull "); sb.append(mode.getEffects().getTextStartingUpperCase(mode)); @@ -283,4 +319,12 @@ public class Modes extends LinkedHashMap { this.eachModeOnlyOnce = eachModeOnlyOnce; } + public boolean isEachModeMoreThanOnce() { + return eachModeMoreThanOnce; + } + + public void setEachModeMoreThanOnce(boolean eachModeMoreThanOnce) { + this.eachModeMoreThanOnce = eachModeMoreThanOnce; + } + } diff --git a/Mage/src/mage/abilities/SpellAbility.java b/Mage/src/mage/abilities/SpellAbility.java index 5106b8dc61..01adf094ff 100644 --- a/Mage/src/mage/abilities/SpellAbility.java +++ b/Mage/src/mage/abilities/SpellAbility.java @@ -178,4 +178,23 @@ public class SpellAbility extends ActivatedAbilityImpl { return cardName; } + public int getConvertedManaCost() { + int cmc = 0; + int xMultiplier = 0; + for (String symbolString : getManaCosts().getSymbols()) { + int index = symbolString.indexOf("{X}"); + while (index != -1) { + xMultiplier++; + symbolString = symbolString.substring(index + 3); + index = symbolString.indexOf("{X}"); + } + } + if (getSpellAbilityType().equals(SpellAbilityType.BASE_ALTERNATE)) { + cmc += getManaCostsToPay().getX() * xMultiplier; + } else { + cmc += getManaCosts().convertedManaCost() + getManaCostsToPay().getX() * xMultiplier; + } + return cmc; + + } } diff --git a/Mage/src/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/mage/abilities/TriggeredAbilityImpl.java index aabda88d3c..2db3f564bd 100644 --- a/Mage/src/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/mage/abilities/TriggeredAbilityImpl.java @@ -133,7 +133,8 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge || ruleLow.startsWith("return") || ruleLow.startsWith("tap") || ruleLow.startsWith("untap") - || ruleLow.startsWith("put")) { + || ruleLow.startsWith("put") + || ruleLow.startsWith("remove")) { sb.append("you may "); } else { if (!ruleLow.startsWith("its controller may")) { diff --git a/Mage/src/mage/abilities/common/BecomesTappedCreatureControlledTriggeredAbility.java b/Mage/src/mage/abilities/common/BecomesTappedCreatureControlledTriggeredAbility.java deleted file mode 100644 index 4961f8af29..0000000000 --- a/Mage/src/mage/abilities/common/BecomesTappedCreatureControlledTriggeredAbility.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; - -/** - * - * @author Jeff - */ -public class BecomesTappedCreatureControlledTriggeredAbility extends TriggeredAbilityImpl{ - - FilterControlledCreaturePermanent filter; - - public BecomesTappedCreatureControlledTriggeredAbility(Effect effect, boolean optional) { - this(effect, optional, new FilterControlledCreaturePermanent("a creature you control")); - } - public BecomesTappedCreatureControlledTriggeredAbility(Effect effect, boolean optional, FilterControlledCreaturePermanent filter) { - super(Zone.BATTLEFIELD, effect, optional); - this.filter = filter; - } - - public BecomesTappedCreatureControlledTriggeredAbility(final BecomesTappedCreatureControlledTriggeredAbility ability) { - super(ability); - this.filter = ability.filter; - } - - @Override - public BecomesTappedCreatureControlledTriggeredAbility copy() { - return new BecomesTappedCreatureControlledTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.TAPPED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - return permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game); - } - - @Override - public String getRule() { - return "When " + filter.getMessage() + " becomes tapped, " + super.getRule(); - } -} diff --git a/Mage/src/mage/abilities/common/BecomesTappedSourceTriggeredAbility.java b/Mage/src/mage/abilities/common/BecomesTappedSourceTriggeredAbility.java new file mode 100644 index 0000000000..aeab425137 --- /dev/null +++ b/Mage/src/mage/abilities/common/BecomesTappedSourceTriggeredAbility.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.abilities.common; + +import mage.constants.Zone; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; + +/** + * + * @author nantuko + */ +public class BecomesTappedSourceTriggeredAbility extends TriggeredAbilityImpl { + + public BecomesTappedSourceTriggeredAbility(Effect effect, boolean isOptional) { + super(Zone.BATTLEFIELD, effect, isOptional); + } + + public BecomesTappedSourceTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); + } + + public BecomesTappedSourceTriggeredAbility(final BecomesTappedSourceTriggeredAbility ability) { + super(ability); + } + + @Override + public BecomesTappedSourceTriggeredAbility copy() { + return new BecomesTappedSourceTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TAPPED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getTargetId().equals(sourceId); + } + + @Override + public String getRule() { + return "When {this} becomes tapped, " + super.getRule(); + } +} diff --git a/Mage/src/mage/abilities/common/BecomesTappedTriggeredAbility.java b/Mage/src/mage/abilities/common/BecomesTappedTriggeredAbility.java index 666e6b1f89..c771945c0e 100644 --- a/Mage/src/mage/abilities/common/BecomesTappedTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/BecomesTappedTriggeredAbility.java @@ -1,74 +1,56 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.abilities.common; - -import mage.constants.Zone; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; - -/** - * - * @author nantuko - */ -public class BecomesTappedTriggeredAbility extends TriggeredAbilityImpl { - - public BecomesTappedTriggeredAbility(Effect effect, boolean isOptional) { - super(Zone.BATTLEFIELD, effect, isOptional); - } - - public BecomesTappedTriggeredAbility(Effect effect) { - super(Zone.BATTLEFIELD, effect); - } - - public BecomesTappedTriggeredAbility(final BecomesTappedTriggeredAbility ability) { - super(ability); - } - - @Override - public BecomesTappedTriggeredAbility copy() { - return new BecomesTappedTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.TAPPED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return event.getTargetId().equals(sourceId); - } - - @Override - public String getRule() { - return "When {this} becomes tapped, " + super.getRule(); - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * + * @author Jeff + */ +public class BecomesTappedTriggeredAbility extends TriggeredAbilityImpl{ + + FilterPermanent filter; + + public BecomesTappedTriggeredAbility(Effect effect, boolean optional) { + this(effect, optional, new FilterPermanent("a permanent")); + } + public BecomesTappedTriggeredAbility(Effect effect, boolean optional, FilterPermanent filter) { + super(Zone.BATTLEFIELD, effect, optional); + this.filter = filter; + } + + public BecomesTappedTriggeredAbility(final BecomesTappedTriggeredAbility ability) { + super(ability); + this.filter = ability.filter.copy(); + } + + @Override + public BecomesTappedTriggeredAbility copy() { + return new BecomesTappedTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TAPPED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + return permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game); + } + + @Override + public String getRule() { + return "When " + filter.getMessage() + " becomes tapped, " + super.getRule(); + } +} diff --git a/Mage/src/mage/abilities/common/BlocksOrBecomesBlockedByCreatureTriggeredAbility.java b/Mage/src/mage/abilities/common/BlocksOrBecomesBlockedByCreatureTriggeredAbility.java index 88c172b7a1..b4231f41b1 100644 --- a/Mage/src/mage/abilities/common/BlocksOrBecomesBlockedByCreatureTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/BlocksOrBecomesBlockedByCreatureTriggeredAbility.java @@ -30,8 +30,11 @@ package mage.abilities.common; import mage.constants.Zone; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; /** @@ -40,19 +43,29 @@ import mage.target.targetpointer.FixedTarget; */ public class BlocksOrBecomesBlockedByCreatureTriggeredAbility extends TriggeredAbilityImpl { + // note that this is using the Filter#match(E e, Game game), + // not FilterInPlay#(E o, UUID sourceId, UUID playerId, Game game) + // this triggers on both blocked and blocking, so source and player don't have a consistent definition + protected FilterPermanent filter; protected String rule; public BlocksOrBecomesBlockedByCreatureTriggeredAbility(Effect effect, boolean optional) { - this(effect, optional, null); + this(effect, new FilterCreaturePermanent(), optional, null); } - public BlocksOrBecomesBlockedByCreatureTriggeredAbility(Effect effect, boolean optional, String rule) { + public BlocksOrBecomesBlockedByCreatureTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional) { + this(effect, filter, optional, null); + } + + public BlocksOrBecomesBlockedByCreatureTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, String rule) { super(Zone.BATTLEFIELD, effect, optional); + this.filter = filter; this.rule = rule; } public BlocksOrBecomesBlockedByCreatureTriggeredAbility(final BlocksOrBecomesBlockedByCreatureTriggeredAbility ability) { super(ability); + this.filter = ability.filter; this.rule = ability.rule; } @@ -64,16 +77,22 @@ public class BlocksOrBecomesBlockedByCreatureTriggeredAbility extends TriggeredA @Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getSourceId().equals(this.getSourceId())) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); + Permanent blocked = game.getPermanent(event.getTargetId()); + if (blocked != null && filter.match(blocked, game)) { + for (Effect effect : this.getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getTargetId())); + } + return true; } - return true; } if (event.getTargetId().equals(this.getSourceId())) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getSourceId())); + Permanent blocker = game.getPermanent(event.getSourceId()); + if (blocker != null && filter.match(blocker, game)) { + for (Effect effect : this.getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getSourceId())); + } + return true; } - return true; } return false; } @@ -83,7 +102,7 @@ public class BlocksOrBecomesBlockedByCreatureTriggeredAbility extends TriggeredA if (rule != null) { return rule; } - return "Whenever {this} blocks or becomes blocked by a creature, " + super.getRule(); + return "Whenever {this} blocks or becomes blocked by a " + filter.getMessage() + ", " + super.getRule(); } @Override diff --git a/Mage/src/mage/abilities/common/DiesAttachedTriggeredAbility.java b/Mage/src/mage/abilities/common/DiesAttachedTriggeredAbility.java index 11d4a2764f..d623e85a57 100644 --- a/Mage/src/mage/abilities/common/DiesAttachedTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/DiesAttachedTriggeredAbility.java @@ -70,9 +70,12 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl { Permanent attachment = game.getPermanentOrLKIBattlefield(getSourceId()); if (attachment != null && zEvent.getTargetId() != null && attachment.getAttachedTo() != null - && zEvent.getTargetId().equals(attachment.getAttachedTo()) - && attachment.getAttachedToZoneChangeCounter() == zEvent.getTarget().getZoneChangeCounter(game) - 1) { - triggered = true; + && zEvent.getTargetId().equals(attachment.getAttachedTo())) { + Permanent attachedTo = game.getPermanentOrLKIBattlefield(attachment.getAttachedTo()); + if (attachedTo != null + && attachment.getAttachedToZoneChangeCounter() == attachedTo.getZoneChangeCounter(game)) { // zoneChangeCounter is stored in Permanent + triggered = true; + } } } if (triggered) { diff --git a/Mage/src/mage/abilities/common/EntersBattlefieldTriggeredAbility.java b/Mage/src/mage/abilities/common/EntersBattlefieldTriggeredAbility.java index ddaf6be2b8..528a8c65c1 100644 --- a/Mage/src/mage/abilities/common/EntersBattlefieldTriggeredAbility.java +++ b/Mage/src/mage/abilities/common/EntersBattlefieldTriggeredAbility.java @@ -27,9 +27,9 @@ */ package mage.abilities.common; -import mage.constants.Zone; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; +import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; @@ -73,7 +73,7 @@ public class EntersBattlefieldTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - return event.getTargetId().equals(getSourceId()); + return event.getTargetId().equals(getSourceId()); } @Override @@ -81,7 +81,7 @@ public class EntersBattlefieldTriggeredAbility extends TriggeredAbilityImpl { if (noRule) { return super.getRule(); } - return (rulePrefix != null ? rulePrefix : "") + "When {this} enters the battlefield, "+ super.getRule(); + return (rulePrefix != null ? rulePrefix : "") + "When {this} enters the battlefield, " + super.getRule(); } @Override diff --git a/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java b/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java index 53d4053903..a415bb19a1 100644 --- a/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java +++ b/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java @@ -71,16 +71,17 @@ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl { @Override public boolean canActivate(UUID playerId, Game game) { - if (super.canActivate(playerId, game)) { - ActivationInfo activationInfo = getActivationInfo(game); - return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < maxActivationsPerTurn; - } - return false; + return super.canActivate(playerId, game) && hasMoreActivationsThisTurn(game); + } + + private boolean hasMoreActivationsThisTurn(Game game) { + ActivationInfo activationInfo = getActivationInfo(game); + return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < maxActivationsPerTurn; } @Override public boolean activate(Game game, boolean noMana) { - if (canActivate(this.controllerId, game)) { + if (hasMoreActivationsThisTurn(game)) { if (super.activate(game, noMana)) { ActivationInfo activationInfo = getActivationInfo(game); if (activationInfo == null) { diff --git a/Mage/src/mage/abilities/condition/common/HellbentCondition.java b/Mage/src/mage/abilities/condition/common/HellbentCondition.java index 598c207fd4..842e960e50 100644 --- a/Mage/src/mage/abilities/condition/common/HellbentCondition.java +++ b/Mage/src/mage/abilities/condition/common/HellbentCondition.java @@ -43,4 +43,9 @@ public class HellbentCondition implements Condition { public boolean apply(Game game, Ability source) { return game.getPlayer(source.getControllerId()).getHand().size() == 0; } + + @Override + public String toString() { + return "if you have no cards in hand"; + } } diff --git a/Mage/src/mage/abilities/costs/common/UntapSourceCost.java b/Mage/src/mage/abilities/costs/common/UntapSourceCost.java index ad86161595..8c28bce5b5 100644 --- a/Mage/src/mage/abilities/costs/common/UntapSourceCost.java +++ b/Mage/src/mage/abilities/costs/common/UntapSourceCost.java @@ -1,31 +1,30 @@ /* -* 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. -*/ - + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ package mage.abilities.costs.common; import java.util.UUID; @@ -61,7 +60,7 @@ public class UntapSourceCost extends CostImpl { public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { Permanent permanent = game.getPermanent(sourceId); if (permanent != null) { - return permanent.isTapped(); + return permanent.isTapped() && !permanent.hasSummoningSickness(); } return false; } diff --git a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java index ac056ba437..c9ac7dd244 100644 --- a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java +++ b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java @@ -67,12 +67,12 @@ public class ManaCostsImpl extends ArrayList implements M public ManaCostsImpl(final ManaCostsImpl costs) { this.id = costs.id; for (T cost : costs) { - this.add((T) cost.copy()); + this.add(cost.copy()); } } @Override - public boolean add(ManaCost cost) { + public final boolean add(ManaCost cost) { if (cost instanceof ManaCosts) { for (ManaCost manaCost : (ManaCosts) cost) { super.add((T) manaCost); @@ -298,7 +298,7 @@ public class ManaCostsImpl extends ArrayList implements M } @Override - public void load(String mana) { + public final void load(String mana) { this.clear(); if (costs.containsKey(mana)) { ManaCosts savedCosts = costs.get(mana); @@ -433,7 +433,7 @@ public class ManaCostsImpl extends ArrayList implements M @Override public boolean isPaid() { for (T cost : this) { - if (!((T) cost instanceof VariableManaCost) && !cost.isPaid()) { + if (!(cost instanceof VariableManaCost) && !cost.isPaid()) { return false; } } @@ -465,7 +465,7 @@ public class ManaCostsImpl extends ArrayList implements M @Override public ManaCosts copy() { - return new ManaCostsImpl(this); + return new ManaCostsImpl<>(this); } @Override diff --git a/Mage/src/mage/abilities/dynamicvalue/common/DomainValue.java b/Mage/src/mage/abilities/dynamicvalue/common/DomainValue.java index 06c0efeef4..9470119c0d 100644 --- a/Mage/src/mage/abilities/dynamicvalue/common/DomainValue.java +++ b/Mage/src/mage/abilities/dynamicvalue/common/DomainValue.java @@ -53,11 +53,10 @@ public class DomainValue implements DynamicValue { int haveSwamps = 0; int haveForests = 0; UUID targetPlayer; - if(playerId != null) { + if (playerId != null) { targetPlayer = playerId; - } - else if(countTargetPlayer) { - targetPlayer = sourceAbility.getTargets().getFirstTarget(); + } else if (countTargetPlayer) { + targetPlayer = effect.getTargetPointer().getFirst(game, sourceAbility); } else { targetPlayer = sourceAbility.getControllerId(); } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 86b9389a11..fdffd3f118 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -388,7 +388,9 @@ public class ContinuousEffects implements Serializable { // for replacment effects of static abilities do not use LKI to check if to apply if (ability.getAbilityType() != AbilityType.STATIC || ability.isInUseableZone(game, null, event)) { if (effect.getDuration() != Duration.OneUse || !effect.isUsed()) { - if (!game.getScopeRelevant() || effect.hasSelfScope() || !event.getTargetId().equals(ability.getSourceId())) { + if (!game.getScopeRelevant() + || effect.hasSelfScope() + || !event.getTargetId().equals(ability.getSourceId())) { if (effect.applies(event, ability, game)) { applicableAbilities.add(ability); } diff --git a/Mage/src/mage/abilities/effects/PlaneswalkerRedirectionEffect.java b/Mage/src/mage/abilities/effects/PlaneswalkerRedirectionEffect.java index 7f2ee3c504..e435a88f4c 100644 --- a/Mage/src/mage/abilities/effects/PlaneswalkerRedirectionEffect.java +++ b/Mage/src/mage/abilities/effects/PlaneswalkerRedirectionEffect.java @@ -109,6 +109,7 @@ public class PlaneswalkerRedirectionEffect extends RedirectionEffect { if (permanent != null) { return permanent.getControllerId(); } - return null; + // for effects like Deflecting Palm (could be wrong if card was played multiple times by different players) + return game.getContinuousEffects().getControllerOfSourceId(sourceId); } } diff --git a/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java b/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java index a0c2208381..9d77944003 100644 --- a/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java +++ b/Mage/src/mage/abilities/effects/ReplacementEffectImpl.java @@ -1,31 +1,30 @@ /* -* 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. -*/ - + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ package mage.abilities.effects; import mage.abilities.Ability; @@ -50,13 +49,19 @@ public abstract class ReplacementEffectImpl extends ContinuousEffectImpl impleme // the resolution of spells or abilities that changed the permanent's characteristics on the stack // (see rule 400.7a), and continuous effects from the permanent's own static abilities, but ignoring // continuous effects from any other source that would affect it. - protected boolean selfScope; public ReplacementEffectImpl(Duration duration, Outcome outcome) { this(duration, outcome, true); } + /** + * + * @param duration + * @param outcome + * @param selfScope - is only relevant while permanents entering the + * battlefield events + */ public ReplacementEffectImpl(Duration duration, Outcome outcome, boolean selfScope) { super(duration, outcome); this.effectType = EffectType.REPLACEMENT; diff --git a/Mage/src/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java b/Mage/src/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java index e660cd1967..d332b7ac6c 100644 --- a/Mage/src/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java @@ -8,6 +8,7 @@ package mage.abilities.effects.common; import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.game.Game; @@ -50,9 +51,8 @@ public class ChangeATargetOfTargetSpellAbilityToSourceEffect extends OneShotEffe } else { return false; } - for (UUID modeId : sourceAbility.getModes().getSelectedModes()) { - sourceAbility.getModes().setActiveMode(modeId); - targets.addAll(sourceAbility.getTargets()); + for (Mode mode : sourceAbility.getModes().getSelectedModes()) { + targets.addAll(mode.getTargets()); } boolean twoTimesTarget = false; diff --git a/Mage/src/mage/abilities/effects/common/ChooseBasicLandTypeEffect.java b/Mage/src/mage/abilities/effects/common/ChooseBasicLandTypeEffect.java index 5d73e8dd40..9aa16ac8c5 100644 --- a/Mage/src/mage/abilities/effects/common/ChooseBasicLandTypeEffect.java +++ b/Mage/src/mage/abilities/effects/common/ChooseBasicLandTypeEffect.java @@ -8,6 +8,7 @@ package mage.abilities.effects.common; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.choices.ChoiceBasicLandType; import mage.choices.ChoiceImpl; import mage.constants.Outcome; import mage.game.Game; @@ -45,14 +46,7 @@ public class ChooseBasicLandTypeEffect extends OneShotEffect { mageObject = game.getObject(source.getSourceId()); } if (controller != null && mageObject != null) { - ChoiceImpl choices = new ChoiceImpl(true); - choices.setMessage("Choose basic land type"); - choices.isRequired(); - choices.getChoices().add("Forest"); - choices.getChoices().add("Plains"); - choices.getChoices().add("Mountain"); - choices.getChoices().add("Island"); - choices.getChoices().add("Swamp"); + ChoiceImpl choices = new ChoiceBasicLandType(); if (controller.choose(Outcome.Neutral, choices, game)) { game.informPlayers(mageObject.getName() + ": Chosen basic land type is " + choices.getChoice()); game.getState().setValue(mageObject.getId().toString() + VALUE_KEY, choices.getChoice()); diff --git a/Mage/src/mage/abilities/effects/common/CreateTokenEffect.java b/Mage/src/mage/abilities/effects/common/CreateTokenEffect.java index 00c9dbd3a3..5b61e675d2 100644 --- a/Mage/src/mage/abilities/effects/common/CreateTokenEffect.java +++ b/Mage/src/mage/abilities/effects/common/CreateTokenEffect.java @@ -29,12 +29,10 @@ package mage.abilities.effects.common; import java.util.ArrayList; import java.util.UUID; -import mage.MageObject; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.token.Token; @@ -52,7 +50,6 @@ public class CreateTokenEffect extends OneShotEffect { private boolean attacking; private UUID lastAddedTokenId; private ArrayList lastAddedTokenIds = new ArrayList<>(); - private boolean expansionSetCodeChecked; public CreateTokenEffect(Token token) { this(token, new StaticValue(1)); @@ -76,7 +73,6 @@ public class CreateTokenEffect extends OneShotEffect { this.amount = amount.copy(); this.tapped = tapped; this.attacking = attacking; - this.expansionSetCodeChecked = false; setText(); } @@ -88,7 +84,6 @@ public class CreateTokenEffect extends OneShotEffect { this.attacking = effect.attacking; this.lastAddedTokenId = effect.lastAddedTokenId; this.lastAddedTokenIds.addAll(effect.lastAddedTokenIds); - this.expansionSetCodeChecked = effect.expansionSetCodeChecked; } @Override @@ -98,9 +93,6 @@ public class CreateTokenEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - if (!expansionSetCodeChecked) { - updateExpansionSetCode(game, source); - } int value = amount.calculate(game, source, this); token.putOntoBattlefield(value, game, source.getSourceId(), source.getControllerId(), tapped, attacking); this.lastAddedTokenId = token.getLastAddedToken(); @@ -108,14 +100,6 @@ public class CreateTokenEffect extends OneShotEffect { return true; } - private void updateExpansionSetCode(Game game, Ability source) { - MageObject sourceObject = source.getSourceObject(game); - if (sourceObject instanceof Card) { - token.setExpansionSetCodeForImage(((Card) sourceObject).getExpansionSetCode()); - } - expansionSetCodeChecked = true; - } - public UUID getLastAddedTokenId() { return lastAddedTokenId; } diff --git a/Mage/src/mage/abilities/effects/common/DestroyTargetAtBeginningOfNextEndStepEffect.java b/Mage/src/mage/abilities/effects/common/DestroyTargetAtBeginningOfNextEndStepEffect.java new file mode 100644 index 0000000000..02bb996773 --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/DestroyTargetAtBeginningOfNextEndStepEffect.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.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LoneFox + */ +public class DestroyTargetAtBeginningOfNextEndStepEffect extends OneShotEffect { + + public DestroyTargetAtBeginningOfNextEndStepEffect() { + super(Outcome.Detriment); + this.staticText = "Destroy that creature at the beginning of the next end step"; + } + + public DestroyTargetAtBeginningOfNextEndStepEffect(final DestroyTargetAtBeginningOfNextEndStepEffect effect) { + super(effect); + } + + @Override + public DestroyTargetAtBeginningOfNextEndStepEffect copy() { + return new DestroyTargetAtBeginningOfNextEndStepEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + DestroyTargetEffect effect = new DestroyTargetEffect(); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget())); + AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + game.addDelayedTriggeredAbility(delayedAbility); + return true; + } +} diff --git a/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java b/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java index 2d33c3d748..e16c66de7b 100644 --- a/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java +++ b/Mage/src/mage/abilities/effects/common/DoIfCostPaid.java @@ -18,16 +18,22 @@ public class DoIfCostPaid extends OneShotEffect { protected Effects executingEffects = new Effects(); private final Cost cost; private String chooseUseText; + private boolean optional; public DoIfCostPaid(Effect effect, Cost cost) { this(effect, cost, null); } public DoIfCostPaid(Effect effect, Cost cost, String chooseUseText) { + this(effect, cost, chooseUseText, true); + } + + public DoIfCostPaid(Effect effect, Cost cost, String chooseUseText, boolean optional) { super(Outcome.Benefit); this.executingEffects.add(effect); this.cost = cost; this.chooseUseText = chooseUseText; + this.optional = optional; } public DoIfCostPaid(final DoIfCostPaid effect) { @@ -35,6 +41,7 @@ public class DoIfCostPaid extends OneShotEffect { this.executingEffects = effect.executingEffects.copy(); this.cost = effect.cost.copy(); this.chooseUseText = effect.chooseUseText; + this.optional = effect.optional; } public void addEffect(Effect effect) { @@ -59,7 +66,8 @@ public class DoIfCostPaid extends OneShotEffect { } message = CardUtil.replaceSourceName(message, mageObject.getLogName()); boolean result = true; - if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(executingEffects.get(0).getOutcome(), message, source, game)) { + if (cost.canPay(source, source.getSourceId(), player.getId(), game) + && (optional && player.chooseUse(executingEffects.get(0).getOutcome(), message, source, game))) { cost.clearPaid(); if (cost.pay(source, game, source.getSourceId(), player.getId(), false)) { for (Effect effect : executingEffects) { @@ -70,7 +78,7 @@ public class DoIfCostPaid extends OneShotEffect { game.addEffect((ContinuousEffect) effect, source); } } - player.resetStoredBookmark(game); // otherwise you can undo card drawn with Mentor of the Meek + player.resetStoredBookmark(game); // otherwise you can e.g. undo card drawn with Mentor of the Meek } } return result; @@ -87,7 +95,7 @@ public class DoIfCostPaid extends OneShotEffect { if (!staticText.isEmpty()) { return staticText; } - return "you may " + getCostText() + ". If you do, " + executingEffects.getText(mode); + return (optional ? "you may " : "") + getCostText() + ". If you do, " + executingEffects.getText(mode); } protected String getCostText() { diff --git a/Mage/src/mage/abilities/effects/common/ExileSpellEffect.java b/Mage/src/mage/abilities/effects/common/ExileSpellEffect.java index 2725630dc3..f74c0d9fd3 100644 --- a/Mage/src/mage/abilities/effects/common/ExileSpellEffect.java +++ b/Mage/src/mage/abilities/effects/common/ExileSpellEffect.java @@ -64,7 +64,7 @@ public class ExileSpellEffect extends OneShotEffect implements MageSingleton { if (controller != null) { Card spellCard = game.getStack().getSpell(source.getSourceId()).getCard(); if (spellCard != null) { - controller.moveCards(spellCard, null, Zone.EXILED, source, game); + controller.moveCards(spellCard, Zone.EXILED, source, game); } return true; } diff --git a/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java b/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java index f909d0828e..697c07435a 100644 --- a/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java @@ -1,43 +1,39 @@ /* -* 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. -*/ - + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ package mage.abilities.effects.common; import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.Mode; -import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; -import mage.constants.AbilityType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -49,7 +45,6 @@ import mage.util.CardUtil; */ public class ExileTargetForSourceEffect extends OneShotEffect { - public ExileTargetForSourceEffect() { super(Outcome.Exile); } @@ -71,11 +66,11 @@ public class ExileTargetForSourceEffect extends OneShotEffect { Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getIdName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); + return controller.moveCardsToExile(permanent, source, game, true, exileId, sourceObject.getIdName()); } else { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { - return controller.moveCardToExileWithInfo(card, exileId, sourceObject.getIdName(), source.getSourceId(), game, game.getState().getZone(card.getId()), true); + return controller.moveCardsToExile(card, source, game, true, exileId, sourceObject.getIdName()); } } } @@ -84,14 +79,14 @@ public class ExileTargetForSourceEffect extends OneShotEffect { @Override public String getText(Mode mode) { - if(staticText != null && !staticText.isEmpty()) { + if (staticText != null && !staticText.isEmpty()) { return staticText; } if (mode.getTargets().isEmpty()) { - return "Exile it"; + return "exile it"; } else { - return "Exile target " + mode.getTargets().get(0).getTargetName(); + return "exile target " + mode.getTargets().get(0).getTargetName(); } } } diff --git a/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java b/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java index 3d42d6db09..61f433d298 100644 --- a/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java @@ -60,6 +60,7 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect { private String additionalSubType; private boolean tapped; private boolean attacking; + private UUID attackedPlayer; public PutTokenOntoBattlefieldCopyTargetEffect() { super(Outcome.PutCreatureInPlay); @@ -68,6 +69,7 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect { this.addedTokenPermanents = new ArrayList<>(); this.number = 1; this.additionalSubType = null; + this.attackedPlayer = null; } public PutTokenOntoBattlefieldCopyTargetEffect(UUID playerId) { @@ -89,8 +91,14 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect { * @param additionalCardType the token gains tis card types in addition * @param gainsHaste the token gains haste * @param number number of tokens to put into play + * @param tapped + * @param attacking */ public PutTokenOntoBattlefieldCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste, int number, boolean tapped, boolean attacking) { + this(playerId, additionalCardType, gainsHaste, number, tapped, attacking, null); + } + + public PutTokenOntoBattlefieldCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste, int number, boolean tapped, boolean attacking, UUID attackedPlayer) { super(Outcome.PutCreatureInPlay); this.playerId = playerId; this.additionalCardType = additionalCardType; @@ -99,6 +107,7 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect { this.number = number; this.tapped = tapped; this.attacking = attacking; + this.attackedPlayer = attackedPlayer; } public PutTokenOntoBattlefieldCopyTargetEffect(final PutTokenOntoBattlefieldCopyTargetEffect effect) { @@ -111,6 +120,7 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect { this.additionalSubType = effect.additionalSubType; this.tapped = effect.tapped; this.attacking = effect.attacking; + this.attackedPlayer = effect.attackedPlayer; } @Override @@ -154,12 +164,10 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect { if (gainsHaste) { token.addAbility(HasteAbility.getInstance()); } - if (additionalSubType != null) { - if (token.getSubtype().contains(additionalSubType)) { - token.getSubtype().add(additionalSubType); - } + if (additionalSubType != null && !token.getSubtype().contains(additionalSubType)) { + token.getSubtype().add(additionalSubType); } - token.putOntoBattlefield(number, game, source.getSourceId(), playerId == null ? source.getControllerId() : playerId, tapped, attacking); + token.putOntoBattlefield(number, game, source.getSourceId(), playerId == null ? source.getControllerId() : playerId, tapped, attacking, attackedPlayer); for (UUID tokenId : token.getLastAddedTokenIds()) { // by cards like Doubling Season multiple tokens can be added to the battlefield Permanent tokenPermanent = game.getPermanent(tokenId); if (tokenPermanent != null) { diff --git a/Mage/src/mage/abilities/effects/common/PutTopCardOfLibraryIntoGraveEachPlayerEffect.java b/Mage/src/mage/abilities/effects/common/PutTopCardOfLibraryIntoGraveEachPlayerEffect.java index c52b88fff0..421a97c768 100644 --- a/Mage/src/mage/abilities/effects/common/PutTopCardOfLibraryIntoGraveEachPlayerEffect.java +++ b/Mage/src/mage/abilities/effects/common/PutTopCardOfLibraryIntoGraveEachPlayerEffect.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.effects.common; import java.util.UUID; @@ -44,7 +43,6 @@ import mage.util.CardUtil; * * @author LevelX2 */ - public class PutTopCardOfLibraryIntoGraveEachPlayerEffect extends OneShotEffect { private final DynamicValue numberCards; @@ -53,7 +51,7 @@ public class PutTopCardOfLibraryIntoGraveEachPlayerEffect extends OneShotEffect public PutTopCardOfLibraryIntoGraveEachPlayerEffect(int numberCards, TargetController targetController) { this(new StaticValue(numberCards), targetController); } - + public PutTopCardOfLibraryIntoGraveEachPlayerEffect(DynamicValue numberCards, TargetController targetController) { super(Outcome.Discard); this.numberCards = numberCards; @@ -76,42 +74,42 @@ public class PutTopCardOfLibraryIntoGraveEachPlayerEffect extends OneShotEffect public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - switch(targetController) { + switch (targetController) { case OPPONENT: - for(UUID playerId: game.getOpponents(source.getControllerId()) ) { + for (UUID playerId : game.getOpponents(source.getControllerId())) { putCardsToGravecard(playerId, source, game); } break; case ANY: - for(UUID playerId: player.getInRange() ) { + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { putCardsToGravecard(playerId, source, game); } break; case NOT_YOU: - for(UUID playerId: player.getInRange() ) { + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { if (!playerId.equals(source.getSourceId())) { putCardsToGravecard(playerId, source, game); } } break; default: - throw new UnsupportedOperationException("TargetController type not supported."); - } + throw new UnsupportedOperationException("TargetController type not supported."); + } return true; } return false; } - + private void putCardsToGravecard(UUID playerId, Ability source, Game game) { Player player = game.getPlayer(playerId); if (player != null) { - player.moveCards(player.getLibrary().getTopCards(game, numberCards.calculate(game, source, this)), Zone.LIBRARY, Zone.GRAVEYARD, source, game); + player.moveCards(player.getLibrary().getTopCards(game, numberCards.calculate(game, source, this)), Zone.GRAVEYARD, source, game); } } private String setText() { StringBuilder sb = new StringBuilder(); - switch(targetController) { + switch (targetController) { case OPPONENT: sb.append("Each opponent "); break; @@ -120,14 +118,14 @@ public class PutTopCardOfLibraryIntoGraveEachPlayerEffect extends OneShotEffect break; case NOT_YOU: sb.append("Each other player "); - break; + break; default: - throw new UnsupportedOperationException("TargetController type not supported."); + throw new UnsupportedOperationException("TargetController type not supported."); } sb.append("puts the top "); - sb.append(CardUtil.numberToText(numberCards.toString(),"a")); + sb.append(CardUtil.numberToText(numberCards.toString(), "a")); sb.append(" card"); - sb.append(numberCards.toString().equals("1")?"":"s"); + sb.append(numberCards.toString().equals("1") ? "" : "s"); sb.append(" of his or her library into his or her graveyard"); return sb.toString(); } diff --git a/Mage/src/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java b/Mage/src/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java index 1276b0acdf..beefcf4ca7 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java @@ -104,7 +104,7 @@ public class ReturnFromExileForSourceEffect extends OneShotEffect { if (returnToZone.equals(Zone.BATTLEFIELD)) { controller.moveCards(exile.getCards(game), returnToZone, source, game, false, false, true, null); } else { - controller.moveCards(exile, null, returnToZone, source, game); + controller.moveCards(exile, returnToZone, source, game); } } return true; diff --git a/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java b/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java index 7e6d25c147..f4af1e29b0 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java @@ -27,10 +27,14 @@ */ package mage.abilities.effects.common; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; -import mage.cards.CardsImpl; +import mage.cards.Card; import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; @@ -70,7 +74,14 @@ public class ReturnToHandTargetEffect extends OneShotEffect { if (controller == null) { return false; } - return controller.moveCards(new CardsImpl(targetPointer.getTargets(game, source)), null, Zone.HAND, source, game); + Set cards = new LinkedHashSet<>(); + for (UUID targetId : targetPointer.getTargets(game, source)) { + MageObject mageObject = game.getObject(targetId); + if (mageObject instanceof Card) { + cards.add((Card) mageObject); + } + } + return controller.moveCards(cards, Zone.HAND, source, game); } @Override diff --git a/Mage/src/mage/abilities/effects/common/combat/CantAttackControllerAttachedEffect.java b/Mage/src/mage/abilities/effects/common/combat/CantAttackControllerAttachedEffect.java index 693b73307a..8c6f3c40fe 100644 --- a/Mage/src/mage/abilities/effects/common/combat/CantAttackControllerAttachedEffect.java +++ b/Mage/src/mage/abilities/effects/common/combat/CantAttackControllerAttachedEffect.java @@ -1,80 +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.abilities.effects.common.combat; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.RestrictionEffect; -import mage.constants.AttachmentType; -import mage.constants.Duration; -import mage.game.Game; -import mage.game.permanent.Permanent; - - -/** - * - * @author LevelX2 - */ - -public class CantAttackControllerAttachedEffect extends RestrictionEffect { - - public CantAttackControllerAttachedEffect(AttachmentType attachmentType) { - super(Duration.WhileOnBattlefield); - if (attachmentType.equals(AttachmentType.AURA)) { - this.staticText = "Enchanted creature can't attack you or a planeswalker you control"; - } else { - this.staticText = "Equipped creature can't attack you or a planeswalker you control"; - } - } - - public CantAttackControllerAttachedEffect(final CantAttackControllerAttachedEffect effect) { - super(effect); - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return permanent.getAttachments().contains(source.getSourceId()); - } - - @Override - public boolean canAttack(UUID defenderId, Ability source, Game game) { - if (defenderId.equals(source.getControllerId())) { - return false; - } - Permanent plainswalker = game.getPermanent(defenderId); - return plainswalker == null || !plainswalker.getControllerId().equals(source.getControllerId()); - } - - - @Override - public CantAttackControllerAttachedEffect copy() { - return new CantAttackControllerAttachedEffect(this); - } - -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.abilities.effects.common.combat; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.RestrictionEffect; +import mage.constants.AttachmentType; +import mage.constants.Duration; +import mage.game.Game; +import mage.game.permanent.Permanent; + + +/** + * + * @author LevelX2 + */ + +public class CantAttackControllerAttachedEffect extends RestrictionEffect { + + public CantAttackControllerAttachedEffect(AttachmentType attachmentType) { + super(Duration.WhileOnBattlefield); + if (attachmentType.equals(AttachmentType.AURA)) { + this.staticText = "Enchanted creature can't attack you or a planeswalker you control"; + } else { + this.staticText = "Equipped creature can't attack you or a planeswalker you control"; + } + } + + public CantAttackControllerAttachedEffect(final CantAttackControllerAttachedEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getAttachments().contains(source.getSourceId()); + } + + @Override + public boolean canAttack(UUID defenderId, Ability source, Game game) { + if (defenderId.equals(source.getControllerId())) { + return false; + } + Permanent planeswalker = game.getPermanent(defenderId); + return planeswalker == null || !planeswalker.getControllerId().equals(source.getControllerId()); + } + + + @Override + public CantAttackControllerAttachedEffect copy() { + return new CantAttackControllerAttachedEffect(this); + } + +} diff --git a/Mage/src/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.java b/Mage/src/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.java new file mode 100644 index 0000000000..96aa778fba --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.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.abilities.effects.common.combat; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.RestrictionEffect; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author fireshoes + */ +public class CantAttackYouOrPlaneswalkerAllEffect extends RestrictionEffect { + + private final FilterCreaturePermanent filterAttacker; + + public CantAttackYouOrPlaneswalkerAllEffect(Duration duration) { + this(duration, new FilterCreaturePermanent()); + } + + public CantAttackYouOrPlaneswalkerAllEffect(Duration duration, FilterCreaturePermanent filter) { + super(duration, Outcome.Benefit); + this.filterAttacker = filter; + staticText = "Creatures can't attack you"; + } + + CantAttackYouOrPlaneswalkerAllEffect(final CantAttackYouOrPlaneswalkerAllEffect effect) { + super(effect); + this.filterAttacker = effect.filterAttacker; + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return filterAttacker.match(permanent, source.getSourceId(), source.getControllerId(), game); + } + + @Override + public boolean canAttack(UUID defenderId, Ability source, Game game) { + if (defenderId.equals(source.getControllerId())) { + return false; + } + Permanent planeswalker = game.getPermanent(defenderId); + return planeswalker == null || !planeswalker.getControllerId().equals(source.getControllerId()); + } + + @Override + public CantAttackYouOrPlaneswalkerAllEffect copy() { + return new CantAttackYouOrPlaneswalkerAllEffect(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java index 536b87db16..06f4388a58 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java @@ -51,7 +51,7 @@ public class BecomesBasicLandEnchantedEffect extends ContinuousEffectImpl { allLandTypes.add("Forest"); allLandTypes.add("Swamp"); allLandTypes.add("Plains"); - allLandTypes.add("Mountains"); + allLandTypes.add("Mountain"); allLandTypes.add("Island"); allLandTypes.add("Urza's"); allLandTypes.add("Mine"); diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java index 43e1bf12aa..e29c167c5c 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandTargetEffect.java @@ -37,6 +37,7 @@ import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.GreenManaAbility; import mage.abilities.mana.RedManaAbility; import mage.abilities.mana.WhiteManaAbility; +import mage.cards.repository.CardRepository; import mage.choices.Choice; import mage.choices.ChoiceBasicLandType; import mage.constants.CardType; @@ -147,8 +148,19 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { Permanent land = game.getPermanent(targetPermanent); if (land != null) { switch (layer) { - case AbilityAddingRemovingEffects_6: + case TypeChangingEffects_4: + // Attention: Cards like Unstable Frontier that use this class do not give the "Basic" supertype to the target + if (!land.getCardType().contains(CardType.LAND)) { + land.getCardType().add(CardType.LAND); + } + // 305.7 Note that this doesn't remove any abilities that were granted to the land by other effects + // So the ability removing has to be done before Layer 6 land.removeAllAbilities(source.getSourceId(), game); + // 305.7 + land.getSubtype().removeAll(CardRepository.instance.getLandTypes()); + land.getSubtype().addAll(landTypes); + break; + case AbilityAddingRemovingEffects_6: for (String landType : landTypes) { switch (landType) { case "Swamp": @@ -169,14 +181,6 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { } } break; - case TypeChangingEffects_4: - // Attention: Cards like Unstable Frontier that use this class do not give the "Basic" supertype to the target - if (!land.getCardType().contains(CardType.LAND)) { - land.getCardType().add(CardType.LAND); - } - land.getSubtype().clear(); - land.getSubtype().addAll(landTypes); - break; } } } diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesChosenCreatureTypeTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesChosenCreatureTypeTargetEffect.java index 67c07ee1c0..538a4841fb 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesChosenCreatureTypeTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesChosenCreatureTypeTargetEffect.java @@ -67,7 +67,7 @@ public class BecomesChosenCreatureTypeTargetEffect extends OneShotEffect { chosenType = typeChoice.getChoice(); if (chosenType != null && !chosenType.isEmpty()) { // ADD TYPE TO TARGET - ContinuousEffect effect = new BecomesSubtypeTargetEffect(Duration.EndOfTurn, chosenType); + ContinuousEffect effect = new BecomesCreatureTypeTargetEffect(Duration.EndOfTurn, chosenType); effect.setTargetPointer(new FixedTarget(getTargetPointer().getFirst(game, source))); game.addEffect(effect, source); return true; diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java index f891657cff..b01e282fb3 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java @@ -27,14 +27,14 @@ */ package mage.abilities.effects.common.continuous; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.ContinuousEffectImpl; import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -42,13 +42,13 @@ import mage.game.permanent.token.Token; /** * @author LevelX2 - * + * */ public class BecomesCreatureAllEffect extends ContinuousEffectImpl { protected Token token; protected String type; - private FilterPermanent filter; + private final FilterPermanent filter; public BecomesCreatureAllEffect(Token token, String type, FilterPermanent filter, Duration duration) { super(duration, Outcome.BecomeCreature); @@ -71,7 +71,7 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl { @Override public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { if (permanent != null) { switch (layer) { case TypeChangingEffects_4: @@ -93,8 +93,9 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - if (token.getColor(game).hasColor()) + if (token.getColor(game).hasColor()) { permanent.getColor(game).setColor(token.getColor(game)); + } } break; case AbilityAddingRemovingEffects_6: diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java index 1658b00fc8..5a0f47fce5 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java @@ -29,6 +29,7 @@ package mage.abilities.effects.common.continuous; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -110,7 +111,7 @@ public class BecomesCreatureAttachedEffect extends ContinuousEffectImpl { switch (loseType) { case ALL: case ALL_BUT_COLOR: - permanent.getSubtype().clear(); + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); break; } if (token.getSubtype().size() > 0) { diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java index 37d0e41ac4..6202880d9b 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java @@ -25,13 +25,13 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.effects.common.continuous; import mage.MageInt; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -106,7 +106,7 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements } } if ("".equals(type) || type == null) { - permanent.getSubtype().clear(); + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); } if (token.getSubtype().size() > 0) { permanent.getSubtype().addAll(token.getSubtype()); @@ -123,7 +123,7 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements case AbilityAddingRemovingEffects_6: if (sublayer == SubLayer.NA) { if (token.getAbilities().size() > 0) { - for (Ability ability: token.getAbilities()) { + for (Ability ability : token.getAbilities()) { permanent.addAbility(ability, game); } } @@ -156,8 +156,7 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements private void setText() { if (type != null && type.length() > 0) { staticText = duration.toString() + " {this} becomes a " + token.getDescription() + " that's still a " + this.type; - } - else { + } else { staticText = duration.toString() + " {this} becomes a " + token.getDescription(); } } diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java index 10c22909b9..87eb0e989e 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java @@ -1,16 +1,16 @@ /* * Copyright 2011 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 @@ -20,7 +20,7 @@ * 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. @@ -28,14 +28,15 @@ package mage.abilities.effects.common.continuous; import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.ContinuousEffectImpl; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; @@ -87,11 +88,11 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl { case TypeChangingEffects_4: if (sublayer == SubLayer.NA) { if (loseAllAbilities) { - permanent.getSubtype().clear(); + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); permanent.getSubtype().addAll(token.getSubtype()); } else { if (token.getSubtype().size() > 0) { - for (String subtype :token.getSubtype()) { + for (String subtype : token.getSubtype()) { if (!permanent.getSubtype().contains(subtype)) { permanent.getSubtype().add(subtype); } @@ -143,7 +144,7 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl { result = true; } } - if (!result && this.duration.equals(Duration.Custom) ) { + if (!result && this.duration.equals(Duration.Custom)) { this.discard(); } return result; @@ -166,7 +167,7 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl { } StringBuilder sb = new StringBuilder(); Target target = mode.getTargets().get(0); - if(target.getMaxNumberOfTargets() > 1){ + if (target.getMaxNumberOfTargets() > 1) { if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) { sb.append("up to "); } diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTypeTargetEffect.java similarity index 76% rename from Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeTargetEffect.java rename to Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTypeTargetEffect.java index f056b1ffee..b675cb4834 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTypeTargetEffect.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.Duration; import mage.constants.Layer; import static mage.constants.Layer.TypeChangingEffects_4; @@ -21,20 +22,20 @@ import mage.game.permanent.Permanent; * * @author LevelX2 */ -public class BecomesSubtypeTargetEffect extends ContinuousEffectImpl { +public class BecomesCreatureTypeTargetEffect extends ContinuousEffectImpl { protected ArrayList subtypes = new ArrayList(); - protected boolean loseOther; // loses other subtypes + protected boolean loseOther; // loses other creature types - public BecomesSubtypeTargetEffect(Duration duration, String subtype) { + public BecomesCreatureTypeTargetEffect(Duration duration, String subtype) { this(duration, createArrayList(subtype)); } - public BecomesSubtypeTargetEffect(Duration duration, ArrayList subtypes) { + public BecomesCreatureTypeTargetEffect(Duration duration, ArrayList subtypes) { this(duration, subtypes, true); } - public BecomesSubtypeTargetEffect(Duration duration, ArrayList subtypes, boolean loseOther) { + public BecomesCreatureTypeTargetEffect(Duration duration, ArrayList subtypes, boolean loseOther) { super(duration, Outcome.Detriment); this.subtypes = subtypes; this.staticText = setText(); @@ -47,7 +48,7 @@ public class BecomesSubtypeTargetEffect extends ContinuousEffectImpl { return subtypes; } - public BecomesSubtypeTargetEffect(final BecomesSubtypeTargetEffect effect) { + public BecomesCreatureTypeTargetEffect(final BecomesCreatureTypeTargetEffect effect) { super(effect); this.subtypes.addAll(effect.subtypes); this.loseOther = effect.loseOther; @@ -60,8 +61,8 @@ public class BecomesSubtypeTargetEffect extends ContinuousEffectImpl { } @Override - public BecomesSubtypeTargetEffect copy() { - return new BecomesSubtypeTargetEffect(this); + public BecomesCreatureTypeTargetEffect copy() { + return new BecomesCreatureTypeTargetEffect(this); } @Override @@ -72,7 +73,7 @@ public class BecomesSubtypeTargetEffect extends ContinuousEffectImpl { switch (layer) { case TypeChangingEffects_4: if (loseOther) { - permanent.getSubtype().clear(); + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); permanent.getSubtype().addAll(subtypes); } else { for (String subtype : subtypes) { diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java index 80e7bcdb69..5b126ac4b5 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java @@ -6,12 +6,9 @@ package mage.abilities.effects.common.continuous; import java.util.ArrayList; -import java.util.Iterator; - -import mage.MageObjectReference; import mage.abilities.Ability; -import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -26,90 +23,90 @@ import mage.game.permanent.Permanent; */ public class BecomesSubtypeAllEffect extends ContinuousEffectImpl { - protected ArrayList subtypes = new ArrayList(); - protected boolean loseOther; // loses other subtypes + protected ArrayList subtypes = new ArrayList(); + protected boolean loseOther; // loses other subtypes protected FilterCreaturePermanent filter; public BecomesSubtypeAllEffect(Duration duration, String subtype) { - this(duration, createArrayList(subtype)); - } + this(duration, createArrayList(subtype)); + } - public BecomesSubtypeAllEffect(Duration duration, ArrayList subtypes) { - this(duration, subtypes, new FilterCreaturePermanent("All creatures"), true); - } + public BecomesSubtypeAllEffect(Duration duration, ArrayList subtypes) { + this(duration, subtypes, new FilterCreaturePermanent("All creatures"), true); + } - public BecomesSubtypeAllEffect(Duration duration, - ArrayList subtypes, FilterCreaturePermanent filter, boolean loseOther) { - super(duration, Outcome.Detriment); - this.subtypes = subtypes; - this.staticText = setText(); - this.loseOther = loseOther; + public BecomesSubtypeAllEffect(Duration duration, + ArrayList subtypes, FilterCreaturePermanent filter, boolean loseOther) { + super(duration, Outcome.Detriment); + this.subtypes = subtypes; + this.staticText = setText(); + this.loseOther = loseOther; this.filter = filter; - } + } - private static ArrayList createArrayList(String subtype) { - ArrayList subtypes = new ArrayList<>(); - subtypes.add(subtype); - return subtypes; - } + private static ArrayList createArrayList(String subtype) { + ArrayList subtypes = new ArrayList<>(); + subtypes.add(subtype); + return subtypes; + } - public BecomesSubtypeAllEffect(final BecomesSubtypeAllEffect effect) { - super(effect); - this.subtypes.addAll(effect.subtypes); - this.loseOther = effect.loseOther; - this.filter = effect.filter; - } + public BecomesSubtypeAllEffect(final BecomesSubtypeAllEffect effect) { + super(effect); + this.subtypes.addAll(effect.subtypes); + this.loseOther = effect.loseOther; + this.filter = effect.filter; + } - @Override - public boolean apply(Game game, Ability source) { - return false; - } + @Override + public boolean apply(Game game, Ability source) { + return false; + } - @Override - public BecomesSubtypeAllEffect copy() { - return new BecomesSubtypeAllEffect(this); - } + @Override + public BecomesSubtypeAllEffect copy() { + return new BecomesSubtypeAllEffect(this); + } - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, - Game game) { - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, game)) { - if (permanent != null) { - switch (layer) { - case TypeChangingEffects_4: - if (loseOther) { - permanent.getSubtype().clear(); - permanent.getSubtype().addAll(subtypes); - } else { - for (String subtype : subtypes) { - if (!permanent.getSubtype().contains(subtype)) { - permanent.getSubtype().add(subtype); - } - } - } - break; - } - } else { - if (duration.equals(Duration.Custom)) { - discard(); - } - } - } - return true; - } + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, + Game game) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, game)) { + if (permanent != null) { + switch (layer) { + case TypeChangingEffects_4: + if (loseOther) { + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); + permanent.getSubtype().addAll(subtypes); + } else { + for (String subtype : subtypes) { + if (!permanent.getSubtype().contains(subtype)) { + permanent.getSubtype().add(subtype); + } + } + } + break; + } + } else { + if (duration.equals(Duration.Custom)) { + discard(); + } + } + } + return true; + } - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.TypeChangingEffects_4; - } + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.TypeChangingEffects_4; + } - private String setText() { - StringBuilder sb = new StringBuilder(); - sb.append("Target creature becomes that type"); - if (!duration.toString().isEmpty() - && !duration.equals(Duration.EndOfGame)) { - sb.append(" ").append(duration.toString()); - } - return sb.toString(); - } + private String setText() { + StringBuilder sb = new StringBuilder(); + sb.append("Target creature becomes that type"); + if (!duration.toString().isEmpty() + && !duration.equals(Duration.EndOfGame)) { + sb.append(" ").append(duration.toString()); + } + return sb.toString(); + } } diff --git a/Mage/src/mage/abilities/effects/common/continuous/BoostSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BoostSourceEffect.java index bb671aa3b6..93ab0363ad 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BoostSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BoostSourceEffect.java @@ -137,14 +137,24 @@ public class BoostSourceEffect extends ContinuousEffectImpl implements SourceEff if (duration != Duration.WhileOnBattlefield) { sb.append(" ").append(duration.toString()); } - String message = power.getMessage(); - if (message.length() == 0) { + String message = null; + String fixedPart = null; + if (t.contains("X")) { message = toughness.getMessage(); + fixedPart = ", where X is "; + } else if (p.contains("X")) { + message = power.getMessage(); + fixedPart = ", where X is "; + } else if (!power.getMessage().isEmpty()) { + message = power.getMessage(); + fixedPart = " for each "; + } else if (!toughness.getMessage().isEmpty()) { + message = toughness.getMessage(); + fixedPart = " for each "; } - if (message.length() > 0) { - sb.append(" for each "); + if (message != null && !message.isEmpty() && fixedPart != null) { + sb.append(fixedPart).append(message); } - sb.append(message); staticText = sb.toString(); } diff --git a/Mage/src/mage/abilities/effects/common/continuous/BoostTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BoostTargetEffect.java index 1d11baae79..9ced7947bb 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BoostTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BoostTargetEffect.java @@ -150,10 +150,10 @@ public class BoostTargetEffect extends ContinuousEffectImpl { } String message = null; String fixedPart = null; - if (t.equals("X")) { + if (t.contains("X")) { message = toughness.getMessage(); fixedPart = ", where X is "; - } else if (p.equals("X")) { + } else if (p.contains("X")) { message = power.getMessage(); fixedPart = ", where X is "; } else if (!power.getMessage().isEmpty()) { diff --git a/Mage/src/mage/abilities/effects/common/continuous/LoseAllCreatureTypesTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/LoseAllCreatureTypesTargetEffect.java index fdb1d714b8..de41de7c2b 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/LoseAllCreatureTypesTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/LoseAllCreatureTypesTargetEffect.java @@ -30,6 +30,7 @@ package mage.abilities.effects.common.continuous; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -42,30 +43,29 @@ import mage.game.permanent.Permanent; * @author emerald000 */ public class LoseAllCreatureTypesTargetEffect extends ContinuousEffectImpl { - + public LoseAllCreatureTypesTargetEffect(Duration duration) { super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Neutral); } - + public LoseAllCreatureTypesTargetEffect(final LoseAllCreatureTypesTargetEffect effect) { super(effect); } - + @Override public LoseAllCreatureTypesTargetEffect copy() { return new LoseAllCreatureTypesTargetEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (permanent != null) { - permanent.getSubtype().clear(); - return true; + return permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); } return false; } - + @Override public String getText(Mode mode) { if (staticText != null && !staticText.isEmpty()) { diff --git a/Mage/src/mage/abilities/effects/common/continuous/LoseCreatureTypeSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/LoseCreatureTypeSourceEffect.java index 4f64c3fb86..660b98fc33 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/LoseCreatureTypeSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/LoseCreatureTypeSourceEffect.java @@ -30,6 +30,7 @@ package mage.abilities.effects.common.continuous; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; @@ -50,10 +51,11 @@ public class LoseCreatureTypeSourceEffect extends ContinuousEffectImpl implement private final int lessThan; /** - * Permanent loses the creature type as long as the dynamic value is less than the value of lessThan. - * + * Permanent loses the creature type as long as the dynamic value is less + * than the value of lessThan. + * * @param dynamicValue - * @param lessThan + * @param lessThan */ public LoseCreatureTypeSourceEffect(DynamicValue dynamicValue, int lessThan) { super(Duration.WhileOnBattlefield, Outcome.Detriment); @@ -84,7 +86,7 @@ public class LoseCreatureTypeSourceEffect extends ContinuousEffectImpl implement case TypeChangingEffects_4: if (sublayer == SubLayer.NA) { permanent.getCardType().remove(CardType.CREATURE); - permanent.getSubtype().clear(); + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); if (permanent.isAttacking() || permanent.getBlocking() > 0) { permanent.removeFromCombat(game); } diff --git a/Mage/src/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java index e7a6b7cddc..c7f6a8a0be 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java @@ -41,18 +41,18 @@ import mage.players.Player; * @author nantuko */ public class PlayWithTheTopCardRevealedEffect extends ContinuousEffectImpl { - + protected boolean allPlayers; public PlayWithTheTopCardRevealedEffect() { this(false); } - + public PlayWithTheTopCardRevealedEffect(boolean allPlayers) { super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Detriment); this.allPlayers = allPlayers; if (allPlayers) { - staticText = "Each player plays with the top card of his or her library revealed."; + staticText = "Players play with the top card of their libraries revealed."; } else { staticText = "Play with the top card of your library revealed"; @@ -89,4 +89,4 @@ public class PlayWithTheTopCardRevealedEffect extends ContinuousEffectImpl { return new PlayWithTheTopCardRevealedEffect(this); } -} \ No newline at end of file +} diff --git a/Mage/src/mage/abilities/effects/common/continuous/SetCardSubtypeAttachedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/SetCardSubtypeAttachedEffect.java index 8dc84e142b..6c00848529 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/SetCardSubtypeAttachedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/SetCardSubtypeAttachedEffect.java @@ -29,10 +29,14 @@ package mage.abilities.effects.common.continuous; import java.util.ArrayList; import java.util.List; - import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.*; +import mage.cards.repository.CardRepository; +import mage.constants.AttachmentType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; import mage.game.Game; import mage.game.permanent.Permanent; @@ -48,14 +52,14 @@ public class SetCardSubtypeAttachedEffect extends ContinuousEffectImpl { super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Benefit); this.setSubtypes.add(setSubtype); this.attachmentType = attachmentType; - setText(); + setText(); } public SetCardSubtypeAttachedEffect(List setSubtypes, Duration duration, AttachmentType attachmentType) { super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Benefit); this.setSubtypes.addAll(setSubtypes); this.attachmentType = attachmentType; - setText(); + setText(); } public SetCardSubtypeAttachedEffect(final SetCardSubtypeAttachedEffect effect) { @@ -70,8 +74,8 @@ public class SetCardSubtypeAttachedEffect extends ContinuousEffectImpl { if (equipment != null && equipment.getAttachedTo() != null) { Permanent target = game.getPermanent(equipment.getAttachedTo()); if (target != null) { - target.getSubtype().clear(); - target.getSubtype().addAll(setSubtypes); + target.getSubtype().retainAll(CardRepository.instance.getLandTypes()); + target.getSubtype().addAll(setSubtypes); } } return true; @@ -91,7 +95,7 @@ public class SetCardSubtypeAttachedEffect extends ContinuousEffectImpl { } sb.append(" creature is a"); - for (String subtype: this.setSubtypes) { + for (String subtype : this.setSubtypes) { sb.append(" ").append(subtype); } staticText = sb.toString(); diff --git a/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java b/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java index b91b76a182..9fd1453f42 100644 --- a/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java +++ b/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java @@ -29,8 +29,10 @@ package mage.abilities.effects.common.cost; import java.util.LinkedHashSet; import java.util.Set; +import mage.MageObject; import mage.Mana; import mage.abilities.Ability; +import mage.abilities.ActivatedAbility; import mage.abilities.SpellAbility; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; @@ -100,23 +102,31 @@ public class SpellsCostReductionControllerEffect extends CostModificationEffectI if (upTo) { Mana mana = abilityToModify.getManaCostsToPay().getMana(); int reduceMax = mana.getColorless(); - if (reduceMax > 2) { - reduceMax = 2; + if (reduceMax > amount) { + reduceMax = amount; } if (reduceMax > 0) { Player controller = game.getPlayer(abilityToModify.getControllerId()); if (controller == null) { return false; } - ChoiceImpl choice = new ChoiceImpl(true); - Set set = new LinkedHashSet<>(); - for (int i = 0; i <= reduceMax; i++) { - set.add(String.valueOf(i)); + int reduce = reduceMax; + if (!(abilityToModify instanceof ActivatedAbility) || !((ActivatedAbility) abilityToModify).isCheckPlayableMode()) { + ChoiceImpl choice = new ChoiceImpl(false); + Set set = new LinkedHashSet<>(); + for (int i = 0; i <= amount; i++) { + set.add(String.valueOf(i)); + } + choice.setChoices(set); + MageObject mageObject = game.getObject(abilityToModify.getSourceId()); + choice.setMessage("Reduce cost of " + (mageObject != null ? mageObject.getIdName() : filter.getMessage())); + if (controller.choose(Outcome.Benefit, choice, game)) { + reduce = Integer.parseInt(choice.getChoice()); + } else { + reduce = reduceMax; // cancel will be set to max possible reduce + } } - choice.setChoices(set); - choice.setMessage("Reduce cost of " + filter); - if (controller.choose(Outcome.Benefit, choice, game)) { - int reduce = Integer.parseInt(choice.getChoice()); + if (reduce > 0) { CardUtil.reduceCost(abilityToModify, reduce); } } diff --git a/Mage/src/mage/abilities/effects/common/counter/AddCountersAllEffect.java b/Mage/src/mage/abilities/effects/common/counter/AddCountersAllEffect.java index a818747e8e..709eb78698 100644 --- a/Mage/src/mage/abilities/effects/common/counter/AddCountersAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/counter/AddCountersAllEffect.java @@ -27,12 +27,10 @@ */ package mage.abilities.effects.common.counter; -import java.util.List; -import java.util.UUID; import mage.MageObject; -import mage.constants.Outcome; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; import mage.counters.Counter; import mage.filter.FilterPermanent; import mage.game.Game; @@ -67,21 +65,16 @@ public class AddCountersAllEffect extends OneShotEffect { MageObject sourceObject = game.getObject(source.getSourceId()); if (controller != null && sourceObject != null) { if (counter != null) { - UUID controllerId = source.getControllerId(); - List permanents = game.getBattlefield().getAllActivePermanents(); - for (Permanent permanent : permanents) { - if (filter.match(permanent, source.getSourceId(), controllerId, game)) { - permanent.addCounters(counter.copy(), game); - if (!game.isSimulation()) - game.informPlayers(new StringBuilder(sourceObject.getName()).append(": ") - .append(controller.getLogName()).append(" puts ") - .append(counter.getCount()).append(" ").append(counter.getName().toLowerCase()) - .append(" counter on ").append(permanent.getName()).toString()); + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { + permanent.addCounters(counter.copy(), game); + if (!game.isSimulation()) { + game.informPlayers(sourceObject.getLogName() + ": " + controller.getLogName() + " puts " + counter.getCount() + " " + counter.getName().toLowerCase() + + " counter on " + permanent.getLogName()); } } - } + } return true; - } + } return false; } diff --git a/Mage/src/mage/abilities/effects/common/counter/RemoveCounterTargetEffect.java b/Mage/src/mage/abilities/effects/common/counter/RemoveCounterTargetEffect.java index 5b651f6662..9f636d65b5 100644 --- a/Mage/src/mage/abilities/effects/common/counter/RemoveCounterTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/counter/RemoveCounterTargetEffect.java @@ -28,14 +28,19 @@ package mage.abilities.effects.common.counter; +import java.util.HashSet; +import java.util.Set; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; import mage.constants.Outcome; import mage.counters.Counter; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.players.Player; import mage.util.CardUtil; /** @@ -46,6 +51,11 @@ import mage.util.CardUtil; public class RemoveCounterTargetEffect extends OneShotEffect { private final Counter counter; + public RemoveCounterTargetEffect() { + super(Outcome.UnboostCreature); + counter = null; + } + public RemoveCounterTargetEffect(Counter counter) { super(Outcome.UnboostCreature); this.counter = counter; @@ -53,21 +63,24 @@ public class RemoveCounterTargetEffect extends OneShotEffect { public RemoveCounterTargetEffect(RemoveCounterTargetEffect effect) { super(effect); - this.counter = effect.counter.copy(); + this.counter = effect.counter == null ? null : effect.counter.copy(); } @Override public boolean apply(Game game, Ability source) { Permanent p = game.getPermanent(targetPointer.getFirst(game, source)); - if (p != null && p.getCounters().getCount(counter.getName()) >= counter.getCount()) { - p.removeCounters(counter.getName(), counter.getCount(), game); - if (!game.isSimulation()) - game.informPlayers(new StringBuilder("Removed ").append(counter.getCount()).append(" ").append(counter.getName()) - .append(" counter from ").append(p.getName()).toString()); - return true; + if(p != null) { + Counter toRemove = (counter == null ? selectCounterType(game, source, p) : counter); + if(toRemove != null && p.getCounters().getCount(toRemove.getName()) >= toRemove.getCount()) { + p.removeCounters(toRemove.getName(), toRemove.getCount(), game); + if(!game.isSimulation()) + game.informPlayers("Removed " + toRemove.getCount() + " " + toRemove.getName() + + " counter from " + p.getName()); + return true; + } } Card c = game.getCard(targetPointer.getFirst(game, source)); - if (c != null && c.getCounters(game).getCount(counter.getName()) >= counter.getCount()) { + if (c != null && counter != null && c.getCounters(game).getCount(counter.getName()) >= counter.getCount()) { c.removeCounters(counter.getName(), counter.getCount(), game); if (!game.isSimulation()) game.informPlayers(new StringBuilder("Removed ").append(counter.getCount()).append(" ").append(counter.getName()) @@ -78,21 +91,54 @@ public class RemoveCounterTargetEffect extends OneShotEffect { return false; } + private Counter selectCounterType(Game game, Ability source, Permanent permanent) { + Player controller = game.getPlayer(source.getControllerId()); + if(controller != null && permanent.getCounters().size() > 0) { + String counterName = null; + if(permanent.getCounters().size() > 1) { + Choice choice = new ChoiceImpl(true); + Set choices = new HashSet<>(); + for(Counter counter : permanent.getCounters().values()) { + if (permanent.getCounters().getCount(counter.getName()) > 0) { + choices.add(counter.getName()); + } + } + choice.setChoices(choices); + choice.setMessage("Choose a counter type to remove from " + permanent.getName()); + controller.choose(Outcome.Detriment, choice, game); + counterName = choice.getChoice(); + } else { + for(Counter counter : permanent.getCounters().values()) { + if(counter.getCount() > 0) { + counterName = counter.getName(); + } + } + } + return new Counter(counterName); + } + return null; + } + @Override public RemoveCounterTargetEffect copy() { return new RemoveCounterTargetEffect(this); } @Override - public String getText(Mode mode) { - if (staticText != null && !staticText.isEmpty()) { - return staticText; - } - StringBuilder sb = new StringBuilder("remove "); - sb.append(CardUtil.numberToText(counter.getCount(), "a")); - sb.append(" ").append(counter.getName()); - sb.append(counter.getCount() > 1 ?" counters from ":" counter from "); - sb.append(mode.getTargets().get(0).getTargetName()); - return sb.toString(); + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + + String text = "remove "; + if(counter == null) { + text += "a counter"; + } + else { + text += CardUtil.numberToText(counter.getCount(), "a") + " " + counter.getName(); + text += counter.getCount() > 1 ? " counters" : " counter"; + } + text += " from target " + mode.getTargets().get(0).getTargetName(); + return text; } } diff --git a/Mage/src/mage/abilities/effects/common/ruleModifying/CastOnlyIfYouHaveCastAnotherSpellEffect.java b/Mage/src/mage/abilities/effects/common/ruleModifying/CastOnlyIfYouHaveCastAnotherSpellEffect.java new file mode 100644 index 0000000000..072e2360ef --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/ruleModifying/CastOnlyIfYouHaveCastAnotherSpellEffect.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.abilities.effects.common.ruleModifying; + +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.watchers.common.CastSpellLastTurnWatcher; + +/** + * + * @author LoneFox + */ + +public class CastOnlyIfYouHaveCastAnotherSpellEffect extends ContinuousRuleModifyingEffectImpl { + public CastOnlyIfYouHaveCastAnotherSpellEffect() { + super(Duration.EndOfGame, Outcome.Detriment); + staticText = "Cast {this} only if you've cast another spell this turn"; + } + + public CastOnlyIfYouHaveCastAnotherSpellEffect(final CastOnlyIfYouHaveCastAnotherSpellEffect effect) { + super(effect); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getSourceId().equals(source.getSourceId())) { + CastSpellLastTurnWatcher watcher = (CastSpellLastTurnWatcher) game.getState().getWatchers().get("CastSpellLastTurnWatcher"); + if (watcher != null && watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(source.getControllerId()) == 0) { + return true; + } + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public CastOnlyIfYouHaveCastAnotherSpellEffect copy() { + return new CastOnlyIfYouHaveCastAnotherSpellEffect(this); + } +} diff --git a/Mage/src/mage/abilities/keyword/BestowAbility.java b/Mage/src/mage/abilities/keyword/BestowAbility.java index 3f721f8700..93307330d3 100644 --- a/Mage/src/mage/abilities/keyword/BestowAbility.java +++ b/Mage/src/mage/abilities/keyword/BestowAbility.java @@ -35,6 +35,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.SourceEffect; import mage.cards.Card; +import mage.cards.repository.CardRepository; import mage.constants.CardType; import mage.constants.DependencyType; import mage.constants.Duration; @@ -181,7 +182,7 @@ public class BestowAbility extends SpellAbility { } } else { permanent.getCardType().remove(CardType.CREATURE); - permanent.getSubtype().clear(); + permanent.getSubtype().retainAll(CardRepository.instance.getLandTypes()); if (!permanent.getSubtype().contains("Aura")) { permanent.getSubtype().add("Aura"); } diff --git a/Mage/src/mage/abilities/keyword/EvolveAbility.java b/Mage/src/mage/abilities/keyword/EvolveAbility.java index 00712d973c..a23e25143b 100644 --- a/Mage/src/mage/abilities/keyword/EvolveAbility.java +++ b/Mage/src/mage/abilities/keyword/EvolveAbility.java @@ -166,9 +166,8 @@ class EvolveEffect extends OneShotEffect { if (triggeringCreature != null) { Permanent sourceCreature = game.getPermanent(source.getSourceId()); if (sourceCreature != null && EvolveAbility.isPowerOrThoughnessGreater(sourceCreature, triggeringCreature)) { - game.getState().setValue("EvolveAddCounterActive", Boolean.TRUE); sourceCreature.addCounters(CounterType.P1P1.createInstance(), game); - game.getState().setValue("EvolveAddCounterActive", Boolean.FALSE); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.EVOLVED_CREATURE, sourceCreature.getId(), source.getSourceId(), source.getControllerId())); } return true; } diff --git a/Mage/src/mage/abilities/keyword/FlashbackAbility.java b/Mage/src/mage/abilities/keyword/FlashbackAbility.java index b8631af452..9b51438039 100644 --- a/Mage/src/mage/abilities/keyword/FlashbackAbility.java +++ b/Mage/src/mage/abilities/keyword/FlashbackAbility.java @@ -31,6 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.costs.Cost; +import mage.abilities.costs.VariableCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.ReplacementEffectImpl; import mage.cards.Card; @@ -121,6 +122,9 @@ public class FlashbackAbility extends SpellAbility { sbRule.append(manaCosts.getText()); } if (costs.size() > 0) { + if (manaCosts.size() > 0) { + sbRule.append(", "); + } sbRule.append(costs.getText()); sbRule.append("."); } @@ -173,19 +177,26 @@ class FlashbackEffect extends OneShotEffect { SpellAbility spellAbility; switch (((FlashbackAbility) source).getSpellAbilityType()) { case SPLIT_LEFT: - spellAbility = ((SplitCard) card).getLeftHalfCard().getSpellAbility(); + spellAbility = ((SplitCard) card).getLeftHalfCard().getSpellAbility().copy(); break; case SPLIT_RIGHT: - spellAbility = ((SplitCard) card).getRightHalfCard().getSpellAbility(); + spellAbility = ((SplitCard) card).getRightHalfCard().getSpellAbility().copy(); break; default: - spellAbility = card.getSpellAbility(); + spellAbility = card.getSpellAbility().copy(); } spellAbility.clear(); // set the payed flashback costs to the spell ability so abilities like Converge or calculation of {X} values work spellAbility.getManaCostsToPay().clear(); spellAbility.getManaCostsToPay().addAll(source.getManaCostsToPay()); + // needed to get e.g. paid costs from Conflagrate + spellAbility.getCosts().clear(); + for (Cost cost : source.getCosts()) { + if (!(cost instanceof VariableCost)) { + spellAbility.getCosts().add(cost); + } + } if (!game.isSimulation()) { game.informPlayers(controller.getLogName() + " flashbacks " + card.getLogName()); } diff --git a/Mage/src/mage/abilities/keyword/HeroicAbility.java b/Mage/src/mage/abilities/keyword/HeroicAbility.java index 5b89f5d65b..2df1ea081c 100644 --- a/Mage/src/mage/abilities/keyword/HeroicAbility.java +++ b/Mage/src/mage/abilities/keyword/HeroicAbility.java @@ -1,34 +1,34 @@ /* -* 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. -*/ - + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ package mage.abilities.keyword; import java.util.UUID; +import mage.abilities.Mode; import mage.abilities.SpellAbility; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; @@ -44,7 +44,6 @@ import mage.target.Target; * * @author LevelX2 */ - public class HeroicAbility extends TriggeredAbilityImpl { public HeroicAbility(Effect effect) { @@ -83,19 +82,19 @@ public class HeroicAbility extends TriggeredAbilityImpl { private boolean checkSpell(Spell spell, Game game) { if (spell != null) { SpellAbility sa = spell.getSpellAbility(); - for(UUID modeId :sa.getModes().getSelectedModes()) { - for (Target target : sa.getModes().get(modeId).getTargets()) { + for (Mode mode : sa.getModes().getSelectedModes()) { + for (Target target : mode.getTargets()) { if (!target.isNotTarget() && target.getTargets().contains(this.getSourceId())) { return true; } } - for (Effect effect : sa.getModes().get(modeId).getEffects()) { + for (Effect effect : mode.getEffects()) { for (UUID targetId : effect.getTargetPointer().getTargets(game, sa)) { if (targetId.equals(this.getSourceId())) { return true; } } - } + } } } return false; diff --git a/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java b/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java index f97bb51129..4dc5426b41 100644 --- a/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java +++ b/Mage/src/mage/abilities/keyword/LivingWeaponAbility.java @@ -1,11 +1,14 @@ package mage.abilities.keyword; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.constants.CardType; -import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; @@ -31,9 +34,9 @@ public class LivingWeaponAbility extends EntersBattlefieldTriggeredAbility { } } -class LivingWeaponEffect extends OneShotEffect { +class LivingWeaponEffect extends CreateTokenEffect { LivingWeaponEffect() { - super(Outcome.PutCreatureInPlay); + super(new GermToken()); } LivingWeaponEffect(final LivingWeaponEffect effect) { @@ -44,13 +47,13 @@ class LivingWeaponEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - GermToken token = new GermToken(); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - Permanent p = game.getPermanent(token.getLastAddedToken()); - if (p != null) { - p.addAttachment(source.getSourceId(), game); - return true; - } + if (super.apply(game, source)) { + Permanent p = game.getPermanent(this.getLastAddedTokenId()); + if (p != null) { + p.addAttachment(source.getSourceId(), game); + return true; + } + } } return false; } @@ -62,9 +65,16 @@ class LivingWeaponEffect extends OneShotEffect { } class GermToken extends Token { + + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("C14", "MBS", "MM2")); + } + public GermToken() { super("Germ", "a 0/0 black Germ creature token"); - this.setOriginalExpansionSetCode("MBS"); + availableImageSetCodes = tokenImageSets; cardType.add(CardType.CREATURE); color.setBlack(true); subtype.add("Germ"); diff --git a/Mage/src/mage/abilities/keyword/MyriadAbility.java b/Mage/src/mage/abilities/keyword/MyriadAbility.java new file mode 100644 index 0000000000..273cc5ac59 --- /dev/null +++ b/Mage/src/mage/abilities/keyword/MyriadAbility.java @@ -0,0 +1,89 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.keyword; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.PutTokenOntoBattlefieldCopyTargetEffect; +import mage.constants.Outcome; +import mage.constants.SetTargetPointer; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +public class MyriadAbility extends AttacksTriggeredAbility { + + public MyriadAbility() { + super(new MyriadEffect(), false, + "Myriad (Whenever this creature attacks, for each opponent other than the defending player, put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile those tokens at the end of combat.)", + SetTargetPointer.PLAYER + ); + } + + public MyriadAbility(final MyriadAbility ability) { + super(ability); + } + + @Override + public MyriadAbility copy() { + return new MyriadAbility(this); + } + +} + +class MyriadEffect extends OneShotEffect { + + public MyriadEffect() { + super(Outcome.Benefit); + this.staticText = "for each opponent other than the defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at the end of combat"; + } + + public MyriadEffect(final MyriadEffect effect) { + super(effect); + } + + @Override + public MyriadEffect copy() { + return new MyriadEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourceObject = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (controller != null && sourceObject != null) { + for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { + if (playerId != getTargetPointer().getFirst(game, source) && controller.hasOpponent(playerId, game)) { + Player opponent = game.getPlayer(playerId); + if (opponent != null && controller.chooseUse(Outcome.PutCreatureInPlay, + "Put a copy of " + sourceObject.getIdName() + " onto battlefield attacking " + opponent.getName() + "?", source, game)) { + PutTokenOntoBattlefieldCopyTargetEffect effect = new PutTokenOntoBattlefieldCopyTargetEffect(controller.getId(), null, false, 1, true, true, playerId); + effect.setTargetPointer(new FixedTarget(sourceObject, game)); + effect.apply(game, source); + for (Permanent tokenPermanent : effect.getAddedPermanent()) { + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game)); + DelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + game.addDelayedTriggeredAbility(delayedAbility); + } + } + } + + } + return true; + } + return false; + } +} diff --git a/Mage/src/mage/abilities/keyword/ProvokeAbility.java b/Mage/src/mage/abilities/keyword/ProvokeAbility.java index 94b4c53f65..d92a4f1642 100644 --- a/Mage/src/mage/abilities/keyword/ProvokeAbility.java +++ b/Mage/src/mage/abilities/keyword/ProvokeAbility.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.keyword; import java.util.UUID; @@ -42,26 +41,24 @@ import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; /** - * 702.38. Provoke - * 702.38a Provoke is a triggered ability. “Provoke” means “Whenever this creature attacks, you may - * choose to have target creature defending player controls block this creature this combat - * if able. If you do, untap that creature.” - * 702.38b If a creature has multiple instances of provoke, each triggers separately. + * 702.38. Provoke 702.38a Provoke is a triggered ability. “Provoke” means + * “Whenever this creature attacks, you may choose to have target creature + * defending player controls block this creature this combat if able. If you do, + * untap that creature.” 702.38b If a creature has multiple instances of + * provoke, each triggers separately. * * @author LevelX2 * */ - public class ProvokeAbility extends AttacksTriggeredAbility { - public ProvokeAbility() { + public ProvokeAbility() { super(new UntapTargetEffect(), true, "Provoke (Whenever this attacks, you may have target creature defending player controls untap and block it if able.)"); this.addEffect(new ProvokeRequirementEffect()); } public ProvokeAbility(final ProvokeAbility ability) { super(ability); - this.text = ability.text; } @Override diff --git a/Mage/src/mage/cards/repository/CardCriteria.java b/Mage/src/mage/cards/repository/CardCriteria.java index 3f33e19da6..38e25425db 100644 --- a/Mage/src/mage/cards/repository/CardCriteria.java +++ b/Mage/src/mage/cards/repository/CardCriteria.java @@ -59,6 +59,7 @@ public class CardCriteria { private boolean red; private boolean white; private boolean colorless; + private Integer convertedManaCost; private String sortBy; private Long start; private Long count; @@ -173,6 +174,11 @@ public class CardCriteria { return this; } + public CardCriteria convertedManaCost(Integer convertedManaCost) { + this.convertedManaCost = convertedManaCost; + return this; + } + public CardCriteria maxCardNumber(int maxCardNumber) { this.maxCardNumber = maxCardNumber; return this; @@ -248,6 +254,11 @@ public class CardCriteria { clausesCount++; } + if (convertedManaCost != null) { + where.eq("convertedManaCost", convertedManaCost); + clausesCount++; + } + if (!black || !blue || !green || !red || !white || !colorless) { int colorClauses = 0; if (black) { diff --git a/Mage/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java index 6e96be70a8..972b5351f8 100644 --- a/Mage/src/mage/cards/repository/CardRepository.java +++ b/Mage/src/mage/cards/repository/CardRepository.java @@ -61,14 +61,16 @@ public enum CardRepository { private static final String JDBC_URL = "jdbc:h2:file:./db/cards.h2;AUTO_SERVER=TRUE"; private static final String VERSION_ENTITY_NAME = "card"; // raise this if db structure was changed - private static final long CARD_DB_VERSION = 42; + private static final long CARD_DB_VERSION = 43; // raise this if new cards were added to the server - private static final long CARD_CONTENT_VERSION = 42; + private static final long CARD_CONTENT_VERSION = 43; private final Random random = new Random(); private Dao cardDao; private Set classNames; + private final TreeSet landTypes = new TreeSet(); + private CardRepository() { File file = new File("db"); if (!file.exists()) { @@ -85,7 +87,7 @@ public enum CardRepository { TableUtils.createTableIfNotExists(connectionSource, CardInfo.class); cardDao = DaoManager.createDao(connectionSource, CardInfo.class); } catch (SQLException ex) { - ex.printStackTrace(); + Logger.getLogger(CardRepository.class).error("Error creating card repository - ", ex); } } @@ -102,7 +104,7 @@ public enum CardRepository { } } } catch (SQLException ex) { - Logger.getLogger(CardRepository.class).error("Error adding cards to DB: " + ex.getCause()); + Logger.getLogger(CardRepository.class).error("Error adding cards to DB - ", ex); } return null; } @@ -252,21 +254,22 @@ public enum CardRepository { } public Set getLandTypes() { - TreeSet subtypes = new TreeSet<>(); - try { - QueryBuilder qb = cardDao.queryBuilder(); - qb.distinct().selectColumns("subtypes"); - qb.where().like("types", new SelectArg('%' + CardType.LAND.name() + '%')); - List results = cardDao.query(qb.prepare()); - for (CardInfo card : results) { - subtypes.addAll(card.getSubTypes()); - } - // Removing Dryad because of Dryad Arbor - subtypes.remove("Dryad"); + if (landTypes.isEmpty()) { + try { + QueryBuilder qb = cardDao.queryBuilder(); + qb.distinct().selectColumns("subtypes"); + qb.where().like("types", new SelectArg('%' + CardType.LAND.name() + '%')); + List results = cardDao.query(qb.prepare()); + for (CardInfo card : results) { + landTypes.addAll(card.getSubTypes()); + } + // Removing Dryad because of Dryad Arbor + landTypes.remove("Dryad"); - } catch (SQLException ex) { + } catch (SQLException ex) { + } } - return subtypes; + return landTypes; } public CardInfo findCard(String setCode, int cardNumber) { @@ -391,7 +394,7 @@ public enum CardRepository { ConnectionSource connectionSource = new JdbcConnectionSource(JDBC_URL); return RepositoryUtil.getDatabaseVersion(connectionSource, VERSION_ENTITY_NAME + "Content"); } catch (SQLException ex) { - ex.printStackTrace(); + Logger.getLogger(CardRepository.class).error("Error getting content version from DB - ", ex); } return 0; } @@ -401,7 +404,7 @@ public enum CardRepository { ConnectionSource connectionSource = new JdbcConnectionSource(JDBC_URL); RepositoryUtil.updateVersion(connectionSource, VERSION_ENTITY_NAME + "Content", version); } catch (SQLException ex) { - ex.printStackTrace(); + Logger.getLogger(CardRepository.class).error("Error getting content version - ", ex); } } diff --git a/Mage/src/mage/counters/CounterType.java b/Mage/src/mage/counters/CounterType.java index 907e0cc852..6b5335c246 100644 --- a/Mage/src/mage/counters/CounterType.java +++ b/Mage/src/mage/counters/CounterType.java @@ -88,6 +88,7 @@ public enum CounterType { POISON("poison"), PRESSURE("pressure"), QUEST("quest"), + SCREAM("scream"), SHELL("shell"), SHIELD("shield"), SHRED("shred"), diff --git a/Mage/src/mage/filter/predicate/mageobject/NumberOfTargetsPredicate.java b/Mage/src/mage/filter/predicate/mageobject/NumberOfTargetsPredicate.java index 7284bd1943..6d40519920 100644 --- a/Mage/src/mage/filter/predicate/mageobject/NumberOfTargetsPredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/NumberOfTargetsPredicate.java @@ -27,7 +27,6 @@ */ package mage.filter.predicate.mageobject; -import java.util.UUID; import mage.MageObject; import mage.abilities.Mode; import mage.filter.predicate.Predicate; @@ -52,8 +51,7 @@ public class NumberOfTargetsPredicate implements Predicate { Spell spell = game.getStack().getSpell(input.getId()); if (spell != null) { int numberOfTargets = 0; - for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) { - Mode mode = spell.getSpellAbility().getModes().get(modeId); + for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) { for (Target target : mode.getTargets()) { numberOfTargets += target.getTargets().size(); } diff --git a/Mage/src/mage/filter/predicate/other/TargetsPermanentPredicate.java b/Mage/src/mage/filter/predicate/other/TargetsPermanentPredicate.java index 5471eae280..aad5bb551b 100644 --- a/Mage/src/mage/filter/predicate/other/TargetsPermanentPredicate.java +++ b/Mage/src/mage/filter/predicate/other/TargetsPermanentPredicate.java @@ -53,13 +53,12 @@ public class TargetsPermanentPredicate implements ObjectSourcePlayerPredicate input, Game game) { StackObject object = game.getStack().getStackObject(input.getObject().getId()); - if(object != null) { - for(UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { - Mode mode = object.getStackAbility().getModes().get(modeId); - for(Target target : mode.getTargets()) { - for(UUID targetId : target.getTargets()) { + if (object != null) { + for (Mode mode : object.getStackAbility().getModes().getSelectedModes()) { + for (Target target : mode.getTargets()) { + for (UUID targetId : target.getTargets()) { Permanent permanent = game.getPermanentOrLKIBattlefield(targetId); - if(permanent != null && targetFilter.match(permanent, input.getSourceId(), input.getPlayerId(), game)) { + if (permanent != null && targetFilter.match(permanent, input.getSourceId(), input.getPlayerId(), game)) { return true; } } diff --git a/Mage/src/mage/filter/predicate/permanent/CommanderPredicate.java b/Mage/src/mage/filter/predicate/permanent/CommanderPredicate.java new file mode 100644 index 0000000000..1e12b9d6ac --- /dev/null +++ b/Mage/src/mage/filter/predicate/permanent/CommanderPredicate.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.filter.predicate.permanent; + +import mage.constants.CardType; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class CommanderPredicate implements Predicate { + + @Override + public boolean apply(Permanent input, Game game) { + Player owner = game.getPlayer(input.getOwnerId()); + return input.getCardType().contains(CardType.CREATURE) + && owner != null + && input.getId().equals(owner.getCommanderId()); + } + + @Override + public String toString() { + return "Commander creature"; + } +} diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 432ade1bf8..3e44fb3657 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -290,6 +290,8 @@ public interface Game extends MageItem, Serializable { boolean replaceEvent(GameEvent event); + boolean replaceEvent(GameEvent event, Ability targetAbility); + /** * Creates and fires an damage prevention event * @@ -383,6 +385,8 @@ public interface Game extends MageItem, Serializable { UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility); + UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility, Ability source); + void applyEffects(); boolean checkStateAndTriggered(); @@ -421,7 +425,7 @@ public interface Game extends MageItem, Serializable { void cheat(UUID ownerId, List library, List hand, List battlefield, List graveyard); - // controlling the behaviour of replacement effects + // controlling the behaviour of replacement effects while permanents entering the battlefield void setScopeRelevant(boolean scopeRelevant); public boolean getScopeRelevant(); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 6edfd87c44..d950276633 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1490,6 +1490,14 @@ public abstract class GameImpl implements Game, Serializable { } } + @Override + public UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility, Ability source) { + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(this), this); + return addDelayedTriggeredAbility(delayedAbility); + } + @Override public UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility) { DelayedTriggeredAbility newAbility = delayedAbility.copy(); @@ -2291,6 +2299,11 @@ public abstract class GameImpl implements Game, Serializable { return state.replaceEvent(event, this); } + @Override + public boolean replaceEvent(GameEvent event, Ability targetAbility) { + return state.replaceEvent(event, targetAbility, this); + } + @Override public PreventionEffectData preventDamage(GameEvent event, Ability source, Game game, boolean preventAllDamage) { return preventDamage(event, source, game, Integer.MAX_VALUE); diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 68f312ad7a..0119c0920e 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -309,7 +309,7 @@ public class GameState implements Serializable, Copyable { for (StackObject spell : stack) { sb.append(spell.getControllerId()).append(spell.getName()); sb.append(spell.getStackAbility().toString()); - for (Mode mode : spell.getStackAbility().getModes().values()) { + for (Mode mode : spell.getStackAbility().getModes().getSelectedModes()) { if (!mode.getTargets().isEmpty()) { sb.append("targets"); for (Target target : mode.getTargets()) { @@ -367,7 +367,7 @@ public class GameState implements Serializable, Copyable { for (StackObject spell : stack) { sb.append(spell.getControllerId()).append(spell.getName()); sb.append(spell.getStackAbility().toString()); - for (Mode mode : spell.getStackAbility().getModes().values()) { + for (Mode mode : spell.getStackAbility().getModes().getSelectedModes()) { if (!mode.getTargets().isEmpty()) { sb.append("targets"); for (Target target : mode.getTargets()) { @@ -668,7 +668,11 @@ public class GameState implements Serializable, Copyable { } public boolean replaceEvent(GameEvent event, Game game) { - if (effects.preventedByRuleModification(event, null, game, false)) { + return replaceEvent(event, null, game); + } + + public boolean replaceEvent(GameEvent event, Ability targetAbility, Game game) { + if (effects.preventedByRuleModification(event, targetAbility, game, false)) { return true; } return effects.replaceEvent(event, game); @@ -709,7 +713,7 @@ public class GameState implements Serializable, Copyable { public void addAbility(Ability ability, MageObject attachedTo) { if (ability instanceof StaticAbility) { - for (Mode mode : ability.getModes().values()) { + for (Mode mode : ability.getModes().getSelectedModes()) { for (Effect effect : mode.getEffects()) { if (effect instanceof ContinuousEffect) { addEffect((ContinuousEffect) effect, ability); @@ -731,7 +735,7 @@ public class GameState implements Serializable, Copyable { */ public void addAbility(Ability ability, UUID sourceId, Card attachedTo) { if (ability instanceof StaticAbility) { - for (Mode mode : ability.getModes().values()) { + for (Mode mode : ability.getModes().getSelectedModes()) { for (Effect effect : mode.getEffects()) { if (effect instanceof ContinuousEffect) { addEffect((ContinuousEffect) effect, sourceId, ability); diff --git a/Mage/src/mage/game/combat/Combat.java b/Mage/src/mage/game/combat/Combat.java index b03625617c..4d501304bf 100644 --- a/Mage/src/mage/game/combat/Combat.java +++ b/Mage/src/mage/game/combat/Combat.java @@ -212,12 +212,31 @@ public class Combat implements Serializable, Copyable { * @return */ public boolean addAttackingCreature(UUID creatureId, Game game) { + return this.addAttackingCreature(creatureId, game, null); + } + + public boolean addAttackingCreature(UUID creatureId, Game game, UUID playerToAttack) { + Set possibleDefenders; + if (playerToAttack != null) { + possibleDefenders = new HashSet<>(); + for (UUID objectId : defenders) { + Permanent planeswalker = game.getPermanent(objectId); + if (planeswalker != null && planeswalker.getControllerId().equals(playerToAttack)) { + possibleDefenders.add(objectId); + } else if (playerToAttack.equals(objectId)) { + possibleDefenders.add(objectId); + } + } + } else { + possibleDefenders = new HashSet(defenders); + } Player player = game.getPlayer(attackerId); - if (defenders.size() == 1) { - addAttackerToCombat(creatureId, defenders.iterator().next(), game); + if (possibleDefenders.size() == 1) { + addAttackerToCombat(creatureId, possibleDefenders.iterator().next(), game); return true; } else { - TargetDefender target = new TargetDefender(defenders, creatureId); + TargetDefender target = new TargetDefender(possibleDefenders, creatureId); + target.setNotTarget(true); target.setRequired(true); player.chooseTarget(Outcome.Damage, target, null, game); if (target.getFirstTarget() != null) { diff --git a/Mage/src/mage/game/combat/CombatGroup.java b/Mage/src/mage/game/combat/CombatGroup.java index e7cf83c8a7..51c1c19625 100644 --- a/Mage/src/mage/game/combat/CombatGroup.java +++ b/Mage/src/mage/game/combat/CombatGroup.java @@ -411,12 +411,30 @@ public class CombatGroup implements Serializable, Copyable { return true; } + /** + * + * @param blockerId + * @param playerId controller of the blocking creature + * @param game + */ public void addBlocker(UUID blockerId, UUID playerId, Game game) { for (UUID attackerId : attackers) { if (game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.DECLARE_BLOCKER, attackerId, blockerId, playerId))) { return; } } + addBlockerToGroup(blockerId, playerId, game); + } + + /** + * Adds a blocker to a combat group without creating a DECLARE_BLOCKER + * event. + * + * @param blockerId + * @param playerId controller of the blocking creature + * @param game + */ + public void addBlockerToGroup(UUID blockerId, UUID playerId, Game game) { Permanent blocker = game.getPermanent(blockerId); if (blockerId != null && blocker != null) { blocker.setBlocking(blocker.getBlocking() + 1); diff --git a/Mage/src/mage/game/events/GameEvent.java b/Mage/src/mage/game/events/GameEvent.java index 38e9ebeefe..95b1a318e6 100644 --- a/Mage/src/mage/game/events/GameEvent.java +++ b/Mage/src/mage/game/events/GameEvent.java @@ -109,6 +109,10 @@ public class GameEvent implements Serializable { LOSE_LIFE, LOST_LIFE, PLAY_LAND, LAND_PLAYED, CAST_SPELL, + /* SPELL_CAST + x-Costs are already defined + */ + CAST_SPELL_LATE, /* SPELL_CAST targetId id of the spell that's cast sourceId sourceId of the spell that's cast @@ -214,6 +218,7 @@ public class GameEvent implements Serializable { SACRIFICE_PERMANENT, SACRIFICED_PERMANENT, FIGHTED_PERMANENT, EXPLOITED_CREATURE, + EVOLVED_CREATURE, ATTACH, ATTACHED, UNATTACH, UNATTACHED, ADD_COUNTER, COUNTER_ADDED, diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index 2e87290d9e..795f83501e 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -48,18 +48,20 @@ public class PermanentCard extends PermanentImpl { protected int maxLevelCounters; protected Card card; - // protected int zoneChangeCounter; + // the number this permanent instance had + protected int zoneChangeCounter; public PermanentCard(Card card, UUID controllerId, Game game) { super(card.getId(), card.getOwnerId(), controllerId, card.getName()); // this.card = card.copy(); this.card = card; + this.zoneChangeCounter = card.getZoneChangeCounter(game); // local value already set to the raised number init(card, game); } private void init(Card card, Game game) { copyFromCard(card); - // this.zoneChangeCounter = card.getZoneChangeCounter(game); + /*if (card.getCardType().contains(CardType.PLANESWALKER)) { this.loyalty = new MageInt(card.getLoyalty().getValue()); }*/ @@ -79,6 +81,7 @@ public class PermanentCard extends PermanentImpl { super(permanent); this.card = permanent.card.copy(); this.maxLevelCounters = permanent.maxLevelCounters; + this.zoneChangeCounter = permanent.zoneChangeCounter; } @Override @@ -89,7 +92,7 @@ public class PermanentCard extends PermanentImpl { super.reset(game); } - protected void copyFromCard(Card card) { + protected void copyFromCard(final Card card) { this.name = card.getName(); this.abilities.clear(); if (this.faceDown) { @@ -257,12 +260,14 @@ public class PermanentCard extends PermanentImpl { @Override public int getZoneChangeCounter(Game game) { - return card.getZoneChangeCounter(game); + // permanent value of zone change counter stays always the same without exception of update during the process of putting the permanent onto the battlefield + return zoneChangeCounter; } @Override public void updateZoneChangeCounter(Game game) { card.updateZoneChangeCounter(game); + zoneChangeCounter = card.getZoneChangeCounter(game); } @Override diff --git a/Mage/src/mage/game/permanent/token/AngelToken.java b/Mage/src/mage/game/permanent/token/AngelToken.java index c21fd10160..95a43e3464 100644 --- a/Mage/src/mage/game/permanent/token/AngelToken.java +++ b/Mage/src/mage/game/permanent/token/AngelToken.java @@ -1,25 +1,34 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import mage.MageInt; import mage.abilities.keyword.FlyingAbility; import mage.constants.CardType; public class AngelToken extends Token { - + + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("AVR", "C14", "CFX", "GTC", "ISD", "M14", "ORI", "ZEN")); + } + public AngelToken() { - this("M14"); + this(null); } public AngelToken(String setCode) { super("Angel", "4/4 white Angel creature token with flying"); - this.setOriginalExpansionSetCode(setCode); + availableImageSetCodes = tokenImageSets; + setOriginalExpansionSetCode(setCode); + cardType.add(CardType.CREATURE); color.setWhite(true); - subtype.add("Angel"); power = new MageInt(4); toughness = new MageInt(4); addAbility(FlyingAbility.getInstance()); - } } diff --git a/Mage/src/mage/game/permanent/token/BeastToken2.java b/Mage/src/mage/game/permanent/token/BeastToken2.java index 57b22f20eb..4304707b4e 100644 --- a/Mage/src/mage/game/permanent/token/BeastToken2.java +++ b/Mage/src/mage/game/permanent/token/BeastToken2.java @@ -1,36 +1,35 @@ /* -* 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. -*/ - + * 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.game.permanent.token; import java.util.Arrays; -import mage.constants.CardType; import mage.MageInt; +import mage.constants.CardType; /** * @@ -45,7 +44,7 @@ public class BeastToken2 extends Token { subtype.add("Beast"); power = new MageInt(4); toughness = new MageInt(4); - availableImageSetCodes.addAll(Arrays.asList("ZEN", "C14", "DDD")); + availableImageSetCodes.addAll(Arrays.asList("ZEN", "C14", "DDD", "C15")); } public BeastToken2(final BeastToken2 token) { @@ -53,14 +52,14 @@ public class BeastToken2 extends Token { } @Override - public BeastToken2 copy() { + public BeastToken2 copy() { return new BeastToken2(this); } @Override public void setExpansionSetCodeForImage(String code) { super.setExpansionSetCodeForImage(code); - if(getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD")) { + if (getOriginalExpansionSetCode().equals("C14") || getOriginalExpansionSetCode().equals("DDD")) { this.setTokenType(2); } } diff --git a/Mage/src/mage/game/permanent/token/EldraziSpawnToken.java b/Mage/src/mage/game/permanent/token/EldraziSpawnToken.java index ec4e3a30a7..c5139001e9 100644 --- a/Mage/src/mage/game/permanent/token/EldraziSpawnToken.java +++ b/Mage/src/mage/game/permanent/token/EldraziSpawnToken.java @@ -28,6 +28,9 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Random; import mage.constants.CardType; import mage.constants.Zone; @@ -42,6 +45,12 @@ import mage.abilities.mana.SimpleManaAbility; */ public class EldraziSpawnToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("ROE", "MM2", "DDP")); + } + public EldraziSpawnToken() { super("Eldrazi Spawn", "0/1 colorless Eldrazi Spawn creature with \"Sacrifice this creature: Add {1} to your mana pool.\""); cardType.add(CardType.CREATURE); @@ -50,7 +59,8 @@ public class EldraziSpawnToken extends Token { power = new MageInt(0); toughness = new MageInt(1); addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana, new SacrificeSourceCost())); - this.setOriginalExpansionSetCode("ROE"); + + availableImageSetCodes = tokenImageSets; // Get one of the three possible token images this.setTokenType(new Random().nextInt(3) + 1); } diff --git a/Mage/src/mage/game/permanent/token/ElephantToken.java b/Mage/src/mage/game/permanent/token/ElephantToken.java index 2b04118862..a95182b2b1 100644 --- a/Mage/src/mage/game/permanent/token/ElephantToken.java +++ b/Mage/src/mage/game/permanent/token/ElephantToken.java @@ -28,6 +28,10 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.ObjectColor; import mage.constants.CardType; @@ -38,6 +42,12 @@ import mage.constants.CardType; */ public class ElephantToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("C14", "CNS", "DDD", "MM2", "WWK")); + } + public ElephantToken() { super("Elephant", "3/3 green Elephant creature token"); cardType.add(CardType.CREATURE); @@ -46,7 +56,7 @@ public class ElephantToken extends Token { power = new MageInt(3); toughness = new MageInt(3); - this.setOriginalExpansionSetCode("DDD"); + availableImageSetCodes = tokenImageSets; } } \ No newline at end of file diff --git a/Mage/src/mage/game/permanent/token/FaerieRogueToken.java b/Mage/src/mage/game/permanent/token/FaerieRogueToken.java index a64ff36448..d4c111c324 100644 --- a/Mage/src/mage/game/permanent/token/FaerieRogueToken.java +++ b/Mage/src/mage/game/permanent/token/FaerieRogueToken.java @@ -28,7 +28,10 @@ package mage.game.permanent.token; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; + import mage.constants.CardType; import mage.MageInt; import mage.abilities.keyword.FlyingAbility; @@ -39,6 +42,12 @@ import mage.abilities.keyword.FlyingAbility; */ public class FaerieRogueToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("SHM", "MOR", "MMA", "MM2")); + } + public FaerieRogueToken() { super("Faerie Rogue", "1/1 black Faerie Rogue creature token with flying"); cardType.add(CardType.CREATURE); @@ -48,6 +57,7 @@ public class FaerieRogueToken extends Token { power = new MageInt(1); toughness = new MageInt(1); addAbility(FlyingAbility.getInstance()); - availableImageSetCodes.addAll(Arrays.asList("SHM", "MOR", "MMA")); + + availableImageSetCodes = tokenImageSets; } } diff --git a/Mage/src/mage/game/permanent/token/GolemToken.java b/Mage/src/mage/game/permanent/token/GolemToken.java index 273943d7fa..e17e3754f1 100644 --- a/Mage/src/mage/game/permanent/token/GolemToken.java +++ b/Mage/src/mage/game/permanent/token/GolemToken.java @@ -27,6 +27,10 @@ */ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.constants.CardType; import mage.MageInt; @@ -36,8 +40,14 @@ import mage.MageInt; */ public class GolemToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("MM2", "NPH", "SOM")); + } + public GolemToken() { - this("SOM"); + this(null); } public GolemToken(String setCode) { @@ -48,5 +58,7 @@ public class GolemToken extends Token { subtype.add("Golem"); power = new MageInt(3); toughness = new MageInt(3); + + availableImageSetCodes = tokenImageSets; } } diff --git a/Mage/src/mage/game/permanent/token/InsectToken.java b/Mage/src/mage/game/permanent/token/InsectToken.java index 4fe7f8533b..cd1e1be168 100644 --- a/Mage/src/mage/game/permanent/token/InsectToken.java +++ b/Mage/src/mage/game/permanent/token/InsectToken.java @@ -28,6 +28,10 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.constants.CardType; @@ -37,8 +41,14 @@ import mage.constants.CardType; */ public class InsectToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("M10", "MM2")); + } + public InsectToken() { - this("M10"); + this(null); } public InsectToken(String setCode) { @@ -49,5 +59,7 @@ public class InsectToken extends Token { subtype.add("Insect"); power = new MageInt(1); toughness = new MageInt(1); + + availableImageSetCodes = tokenImageSets; } } \ No newline at end of file diff --git a/Mage/src/mage/game/permanent/token/KnightToken.java b/Mage/src/mage/game/permanent/token/KnightToken.java index 3ffd6de935..909b39ab18 100644 --- a/Mage/src/mage/game/permanent/token/KnightToken.java +++ b/Mage/src/mage/game/permanent/token/KnightToken.java @@ -1,5 +1,8 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import mage.constants.CardType; import mage.MageInt; import mage.abilities.keyword.VigilanceAbility; @@ -10,15 +13,21 @@ import mage.abilities.keyword.VigilanceAbility; */ public class KnightToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("ORI", "RTR")); + } + public KnightToken() { super("Knight", "2/2 white Knight creature token with vigilance"); cardType.add(CardType.CREATURE); color.setWhite(true); - subtype.add("Knight"); power = new MageInt(2); toughness = new MageInt(2); this.addAbility(VigilanceAbility.getInstance()); - setOriginalExpansionSetCode("RTR"); + + availableImageSetCodes = tokenImageSets; } } diff --git a/Mage/src/mage/game/permanent/token/MyrToken.java b/Mage/src/mage/game/permanent/token/MyrToken.java index 0d26eb7c3b..63d6866176 100644 --- a/Mage/src/mage/game/permanent/token/MyrToken.java +++ b/Mage/src/mage/game/permanent/token/MyrToken.java @@ -1,12 +1,22 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.constants.CardType; public class MyrToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("C14", "MM2", "NPH", "SOM")); + } + public MyrToken() { - this("SOM"); + this(null); } public MyrToken(String expansionSetCode) { @@ -17,5 +27,7 @@ public class MyrToken extends Token { subtype.add("Myr"); power = new MageInt(1); toughness = new MageInt(1); + + availableImageSetCodes = tokenImageSets; } } \ No newline at end of file diff --git a/Mage/src/mage/game/permanent/token/PlantToken.java b/Mage/src/mage/game/permanent/token/PlantToken.java index f44a3f854a..054a798df2 100644 --- a/Mage/src/mage/game/permanent/token/PlantToken.java +++ b/Mage/src/mage/game/permanent/token/PlantToken.java @@ -28,10 +28,21 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.constants.CardType; public class PlantToken extends Token { + + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("WWK", "DDP")); + } + public PlantToken() { super("Plant", "0/1 green Plant creature"); cardType.add(CardType.CREATURE); @@ -39,6 +50,7 @@ public class PlantToken extends Token { subtype.add("Plant"); power = new MageInt(0); toughness = new MageInt(1); - this.setOriginalExpansionSetCode("WWK"); + + availableImageSetCodes = tokenImageSets; } } diff --git a/Mage/src/mage/game/permanent/token/SaprolingToken.java b/Mage/src/mage/game/permanent/token/SaprolingToken.java index b6c0fc5c5a..b6e79eb952 100644 --- a/Mage/src/mage/game/permanent/token/SaprolingToken.java +++ b/Mage/src/mage/game/permanent/token/SaprolingToken.java @@ -28,6 +28,10 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.constants.CardType; @@ -37,6 +41,12 @@ import mage.constants.CardType; */ public class SaprolingToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("10E", "ALA", "DDE", "DDH", "DDJ", "M12", "M13", "M14", "MM2", "MMA", "RTR")); + } + public SaprolingToken() { super("Saproling", "1/1 green Saproling creature token"); this.setOriginalExpansionSetCode("MMA"); @@ -45,5 +55,7 @@ public class SaprolingToken extends Token { subtype.add("Saproling"); power = new MageInt(1); toughness = new MageInt(1); + + availableImageSetCodes = tokenImageSets; } } \ No newline at end of file diff --git a/Mage/src/mage/game/permanent/token/SnakeToken.java b/Mage/src/mage/game/permanent/token/SnakeToken.java index 47d6700aa9..19e778a015 100644 --- a/Mage/src/mage/game/permanent/token/SnakeToken.java +++ b/Mage/src/mage/game/permanent/token/SnakeToken.java @@ -28,6 +28,10 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.MageInt; import mage.constants.CardType; @@ -37,18 +41,26 @@ import mage.constants.CardType; */ public class SnakeToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("ZEN", "KTK", "MM2")); + } + public SnakeToken() { - this("ZEN"); + this(null); } public SnakeToken(String setCode) { super("Snake", "1/1 green Snake creature token"); - setOriginalExpansionSetCode(setCode); cardType.add(CardType.CREATURE); color.setGreen(true); subtype.add("Snake"); power = new MageInt(1); toughness = new MageInt(1); + + availableImageSetCodes = tokenImageSets; + setOriginalExpansionSetCode(setCode); } } diff --git a/Mage/src/mage/game/permanent/token/SoldierToken.java b/Mage/src/mage/game/permanent/token/SoldierToken.java index 956f808b5b..6264190b01 100644 --- a/Mage/src/mage/game/permanent/token/SoldierToken.java +++ b/Mage/src/mage/game/permanent/token/SoldierToken.java @@ -43,7 +43,7 @@ public class SoldierToken extends Token { final static private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("10E", "M15", "C14", "ORI", "ALA", "DDF", "THS", "M12", "M13", "MM2", "MMA", "RTR", "SOM")); + tokenImageSets.addAll(Arrays.asList("10E", "M15", "C14", "ORI", "ALA", "DDF", "THS", "M12", "M13", "MM2", "MMA", "RTR", "SOM", "DDF", "M10")); } public SoldierToken() { diff --git a/Mage/src/mage/game/permanent/token/SpiderToken.java b/Mage/src/mage/game/permanent/token/SpiderToken.java new file mode 100644 index 0000000000..98333d8fc9 --- /dev/null +++ b/Mage/src/mage/game/permanent/token/SpiderToken.java @@ -0,0 +1,27 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.game.permanent.token; + +import mage.MageInt; +import mage.abilities.keyword.ReachAbility; +import mage.constants.CardType; + +/** + * + * @author fireshoes + */ +public class SpiderToken extends Token { + + public SpiderToken() { + super("Spider", "1/2 green Spider creature token with reach"); + cardType.add(CardType.CREATURE); + color.setGreen(true); + subtype.add("Spider"); + power = new MageInt(1); + toughness = new MageInt(2); + addAbility(ReachAbility.getInstance()); + } +} diff --git a/Mage/src/mage/game/permanent/token/SpiritWhiteToken.java b/Mage/src/mage/game/permanent/token/SpiritWhiteToken.java index ad7532b5d6..75ef08c185 100644 --- a/Mage/src/mage/game/permanent/token/SpiritWhiteToken.java +++ b/Mage/src/mage/game/permanent/token/SpiritWhiteToken.java @@ -27,6 +27,9 @@ */ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import mage.MageInt; import mage.abilities.keyword.FlyingAbility; import mage.constants.CardType; @@ -36,15 +39,23 @@ import mage.constants.CardType; */ public class SpiritWhiteToken extends Token { + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("AVR", "C14", "CNS", "DDC", "DDK", "FRF", "ISD", "KTK", "M15", "MM2", "SHM")); + } + public SpiritWhiteToken() { - this("SHM", 0); + this(null, 0); } public SpiritWhiteToken(String setCode) { this(setCode, 0); } + public SpiritWhiteToken(String setCode, int tokenType) { super("Spirit", "1/1 white Spirit creature token with flying"); + availableImageSetCodes = tokenImageSets; setOriginalExpansionSetCode(setCode); if (tokenType > 0) { setTokenType(tokenType); @@ -57,4 +68,21 @@ public class SpiritWhiteToken extends Token { addAbility(FlyingAbility.getInstance()); } + + @Override + public void setExpansionSetCodeForImage(String code) { + super.setExpansionSetCodeForImage(code); + if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("AVR")) { + setTokenType(1); + } + } + + public SpiritWhiteToken(final SpiritWhiteToken token) { + super(token); + } + + @Override + public SpiritWhiteToken copy() { + return new SpiritWhiteToken(this); + } } diff --git a/Mage/src/mage/game/permanent/token/ThrullToken.java b/Mage/src/mage/game/permanent/token/ThrullToken.java new file mode 100644 index 0000000000..3ce76ac9e2 --- /dev/null +++ b/Mage/src/mage/game/permanent/token/ThrullToken.java @@ -0,0 +1,59 @@ +/* +* 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.game.permanent.token; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import mage.MageInt; +import mage.constants.CardType; + +/** + * + * @author Quercitron + */ +public class ThrullToken extends Token { + + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("MM2")); + } + + public ThrullToken() { + super("Thrull", "1/1 black Thrull creature token"); + cardType.add(CardType.CREATURE); + subtype.add("Thrull"); + color.setBlack(true); + power = new MageInt(1); + toughness = new MageInt(1); + + availableImageSetCodes = tokenImageSets; + } +} diff --git a/Mage/src/mage/game/permanent/token/Token.java b/Mage/src/mage/game/permanent/token/Token.java index 5f9686cf8a..5db9c045be 100644 --- a/Mage/src/mage/game/permanent/token/Token.java +++ b/Mage/src/mage/game/permanent/token/Token.java @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.UUID; +import mage.MageObject; import mage.MageObjectImpl; import mage.ObjectColor; import mage.abilities.Abilities; @@ -54,6 +55,7 @@ public class Token extends MageObjectImpl { private int tokenType; private int originalCardNumber; private String originalExpansionSetCode; + private boolean expansionSetCodeChecked; private Card copySourceCard; // the card the Token is a copy from // list of set codes tokene images are available for @@ -90,6 +92,7 @@ public class Token extends MageObjectImpl { if (abilities != null) { this.abilities = abilities.copy(); } + this.expansionSetCodeChecked = false; } public Token(final Token token) { @@ -100,6 +103,7 @@ public class Token extends MageObjectImpl { this.lastAddedTokenIds.addAll(token.lastAddedTokenIds); this.originalCardNumber = token.originalCardNumber; this.originalExpansionSetCode = token.originalExpansionSetCode; + this.expansionSetCodeChecked = token.expansionSetCodeChecked; this.copySourceCard = token.copySourceCard; // will never be changed this.availableImageSetCodes = token.availableImageSetCodes; } @@ -133,13 +137,24 @@ public class Token extends MageObjectImpl { } public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking) { + return putOntoBattlefield(amount, game, sourceId, controllerId, tapped, attacking, null); + } + + public boolean putOntoBattlefield(int amount, Game game, UUID sourceId, UUID controllerId, boolean tapped, boolean attacking, UUID attackedPlayer) { Player controller = game.getPlayer(controllerId); if (controller == null) { return false; } lastAddedTokenIds.clear(); - // TODO: Check this setCode handling because it makes no sense if token put into play with e.g. "Feldon of the third Path" + + // moved here from CreateTokenEffect because not all cards that create tokens use CreateTokenEffect + // they use putOntoBattlefield directly Card source = game.getCard(sourceId); + if (!expansionSetCodeChecked) { + expansionSetCodeChecked = this.updateExpansionSetCode(source); + } + + // TODO: Check this setCode handling because it makes no sense if token put into play with e.g. "Feldon of the third Path" String setCode; if (this.getOriginalExpansionSetCode() != null && !this.getOriginalExpansionSetCode().isEmpty()) { setCode = this.getOriginalExpansionSetCode(); @@ -178,7 +193,7 @@ public class Token extends MageObjectImpl { this.lastAddedTokenId = permanent.getId(); game.addSimultaneousEvent(new ZoneChangeEvent(permanent, permanent.getControllerId(), Zone.OUTSIDE, Zone.BATTLEFIELD)); if (attacking && game.getCombat() != null) { - game.getCombat().addAttackingCreature(permanent.getId(), game); + game.getCombat().addAttackingCreature(permanent.getId(), game, attackedPlayer); } if (!game.isSimulation()) { game.informPlayers(controller.getLogName() + " puts a " + permanent.getLogName() + " token onto the battlefield"); @@ -230,7 +245,11 @@ public class Token extends MageObjectImpl { if (availableImageSetCodes.contains(code)) { setOriginalExpansionSetCode(code); } else { - setOriginalExpansionSetCode(availableImageSetCodes.get(new Random().nextInt(availableImageSetCodes.size()))); + // we should not set random set if appropriate set is already used + if (getOriginalExpansionSetCode() == null || getOriginalExpansionSetCode().isEmpty() + || !availableImageSetCodes.contains(getOriginalExpansionSetCode())) { + setOriginalExpansionSetCode(availableImageSetCodes.get(new Random().nextInt(availableImageSetCodes.size()))); + } } } else { if (getOriginalExpansionSetCode() == null || getOriginalExpansionSetCode().isEmpty()) { @@ -238,4 +257,12 @@ public class Token extends MageObjectImpl { } } } + + public boolean updateExpansionSetCode(Card source) { + if (source == null) { + return false; + } + this.setExpansionSetCodeForImage(source.getExpansionSetCode()); + return true; + } } diff --git a/Mage/src/mage/game/permanent/token/WolfToken.java b/Mage/src/mage/game/permanent/token/WolfToken.java index 77cf16ad89..bae3122003 100644 --- a/Mage/src/mage/game/permanent/token/WolfToken.java +++ b/Mage/src/mage/game/permanent/token/WolfToken.java @@ -28,9 +28,12 @@ package mage.game.permanent.token; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import mage.constants.CardType; import mage.MageInt; -import mage.ObjectColor; /** * @@ -38,16 +41,21 @@ import mage.ObjectColor; */ public class WolfToken extends Token { - public WolfToken() { - this("ISD"); + final static private List tokenImageSets = new ArrayList<>(); + + static { + tokenImageSets.addAll(Arrays.asList("BNG", "C14", "CNS", "FNMP", "ISD", "LRW", "M10", "M14", "MM2", "SHM", "SOM", "ZEN")); } - + + public WolfToken() { + this((String) null); + } + public WolfToken(String setCode) { super("Wolf", "2/2 green Wolf creature token"); - this.setOriginalExpansionSetCode(setCode); - if (setCode.equals("ISD")) { - setTokenType(Type.SECOND.code); - } + availableImageSetCodes = tokenImageSets; + setOriginalExpansionSetCode(setCode); + cardType.add(CardType.CREATURE); color.setGreen(true); subtype.add("Wolf"); @@ -55,9 +63,20 @@ public class WolfToken extends Token { toughness = new MageInt(2); } - public WolfToken(Token.Type type) { - this(); - setTokenType(type.getCode()); + @Override + public void setExpansionSetCodeForImage(String code) { + super.setExpansionSetCodeForImage(code); + if (getOriginalExpansionSetCode() != null && getOriginalExpansionSetCode().equals("ISD")) { + this.setTokenType(2); + } } + public WolfToken(final WolfToken token) { + super(token); + } + + @Override + public Token copy() { + return new WolfToken(this); + } } diff --git a/Mage/src/mage/game/permanent/token/ZombieToken.java b/Mage/src/mage/game/permanent/token/ZombieToken.java index 90b9381004..28d1e5b4ce 100644 --- a/Mage/src/mage/game/permanent/token/ZombieToken.java +++ b/Mage/src/mage/game/permanent/token/ZombieToken.java @@ -43,7 +43,7 @@ public class ZombieToken extends Token { final static private List tokenImageSets = new ArrayList<>(); static { - tokenImageSets.addAll(Arrays.asList("10E", "M10", "M11", "M12", "M13", "M14", "M15", "MBS", "ALA", "ISD", "C14", "CNS", "MMA", "BNG", "KTK", "DTK", "ORI")); + tokenImageSets.addAll(Arrays.asList("10E", "M10", "M11", "M12", "M13", "M14", "M15", "MBS", "ALA", "ISD", "C14", "C15", "CNS", "MMA", "BNG", "KTK", "DTK", "ORI")); } public ZombieToken() { diff --git a/Mage/src/mage/game/stack/Spell.java b/Mage/src/mage/game/stack/Spell.java index 79092da68a..5e23cf1f1d 100644 --- a/Mage/src/mage/game/stack/Spell.java +++ b/Mage/src/mage/game/stack/Spell.java @@ -36,6 +36,7 @@ import mage.Mana; import mage.ObjectColor; import mage.abilities.Abilities; import mage.abilities.Ability; +import mage.abilities.Mode; import mage.abilities.SpellAbility; import mage.abilities.costs.AlternativeSourceCosts; import mage.abilities.costs.Cost; @@ -195,9 +196,9 @@ public class Spell extends StackObjImpl implements Card { if (notTargeted || legalParts) { for (SpellAbility spellAbility : this.spellAbilities) { if (spellAbilityHasLegalParts(spellAbility, game)) { - for (UUID modeId : spellAbility.getModes().getSelectedModes()) { - spellAbility.getModes().setActiveMode(modeId); - if (spellAbility.getTargets().stillLegal(spellAbility, game)) { + for (Mode mode : spellAbility.getModes().getSelectedModes()) { + spellAbility.getModes().setActiveMode(mode); + if (mode.getTargets().stillLegal(spellAbility, game)) { if (!spellAbility.getSpellAbilityType().equals(SpellAbilityType.SPLICE)) { updateOptionalCosts(index); } @@ -268,9 +269,8 @@ public class Spell extends StackObjImpl implements Card { private boolean hasTargets(SpellAbility spellAbility, Game game) { if (spellAbility.getModes().getSelectedModes().size() > 1) { - for (UUID modeId : spellAbility.getModes().getSelectedModes()) { - spellAbility.getModes().setActiveMode(modeId); - if (!spellAbility.getTargets().isEmpty()) { + for (Mode mode : spellAbility.getModes().getSelectedModes()) { + if (!mode.getTargets().isEmpty()) { return true; } @@ -285,11 +285,10 @@ public class Spell extends StackObjImpl implements Card { if (spellAbility.getModes().getSelectedModes().size() > 1) { boolean targetedMode = false; boolean legalTargetedMode = false; - for (UUID modeId : spellAbility.getModes().getSelectedModes()) { - spellAbility.getModes().setActiveMode(modeId); - if (spellAbility.getTargets().size() > 0) { + for (Mode mode : spellAbility.getModes().getSelectedModes()) { + if (mode.getTargets().size() > 0) { targetedMode = true; - if (spellAbility.getTargets().stillLegal(spellAbility, game)) { + if (mode.getTargets().stillLegal(spellAbility, game)) { legalTargetedMode = true; } } @@ -492,21 +491,8 @@ public class Spell extends StackObjImpl implements Card { if (faceDown) { return 0; } - for (Ability spellAbility : spellAbilities) { - int xMultiplier = 0; - for (String symbolString : spellAbility.getManaCosts().getSymbols()) { - int index = symbolString.indexOf("{X}"); - while (index != -1) { - xMultiplier++; - symbolString = symbolString.substring(index + 3); - index = symbolString.indexOf("{X}"); - } - } - if (this.getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.BASE_ALTERNATE)) { - cmc += spellAbility.getManaCostsToPay().getX() * xMultiplier; - } else { - cmc += spellAbility.getManaCosts().convertedManaCost() + spellAbility.getManaCostsToPay().getX() * xMultiplier; - } + for (SpellAbility spellAbility : spellAbilities) { + cmc += spellAbility.getConvertedManaCost(); } if (this.getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.BASE_ALTERNATE)) { cmc += getCard().getManaCost().convertedManaCost(); diff --git a/Mage/src/mage/game/stack/StackAbility.java b/Mage/src/mage/game/stack/StackAbility.java index 6b689529d9..7215000ee4 100644 --- a/Mage/src/mage/game/stack/StackAbility.java +++ b/Mage/src/mage/game/stack/StackAbility.java @@ -86,14 +86,14 @@ public class StackAbility extends StackObjImpl implements Ability { public StackAbility(Ability ability, UUID controllerId) { this.ability = ability; this.controllerId = controllerId; - this.name = new StringBuilder("stack ability (").append(ability.getRule()).append(")").toString(); + this.name = "stack ability (" + ability.getRule() + ")"; } - public StackAbility(final StackAbility spell) { - this.ability = spell.ability.copy(); - this.controllerId = spell.controllerId; - this.name = spell.name; - this.expansionSetCode = spell.expansionSetCode; + public StackAbility(final StackAbility stackAbility) { + this.ability = stackAbility.ability.copy(); + this.controllerId = stackAbility.controllerId; + this.name = stackAbility.name; + this.expansionSetCode = stackAbility.expansionSetCode; } @Override diff --git a/Mage/src/mage/game/stack/StackObjImpl.java b/Mage/src/mage/game/stack/StackObjImpl.java index 6cf33e65ea..447b1a00c5 100644 --- a/Mage/src/mage/game/stack/StackObjImpl.java +++ b/Mage/src/mage/game/stack/StackObjImpl.java @@ -117,8 +117,8 @@ public abstract class StackObjImpl implements StackObject { } for (Ability ability : objectAbilities) { // Some spells can have more than one mode - for (UUID modeId : ability.getModes().getSelectedModes()) { - Mode mode = ability.getModes().get(modeId); + for (Mode mode : ability.getModes().getSelectedModes()) { + ability.getModes().setActiveMode(mode); oldTargetDescription.append(ability.getTargetDescription(mode.getTargets(), game)); for (Target target : mode.getTargets()) { Target newTarget = chooseNewTarget(targetController, ability, mode, target, forceChange, filterNewTarget, game); diff --git a/Mage/src/mage/game/tournament/TournamentSwiss.java b/Mage/src/mage/game/tournament/TournamentSwiss.java index 6855e57eb0..e755d47a6f 100644 --- a/Mage/src/mage/game/tournament/TournamentSwiss.java +++ b/Mage/src/mage/game/tournament/TournamentSwiss.java @@ -27,13 +27,15 @@ */ package mage.game.tournament; -import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.UUID; + import mage.constants.TournamentPlayerState; import mage.game.events.TableEvent; +import mage.game.tournament.pairing.RoundPairings; +import mage.game.tournament.pairing.SwissPairingMinimalWeightMatching; +import mage.game.tournament.pairing.SwissPairingSimple; /** * @@ -65,76 +67,36 @@ public abstract class TournamentSwiss extends TournamentImpl { } protected Round createRoundSwiss() { + List roundPlayers = getActivePlayers(); + boolean isLastRound = (rounds.size() + 1 == getNumberRounds()); + + RoundPairings roundPairings; + if (roundPlayers.size() <= 16) { + SwissPairingMinimalWeightMatching swissPairing = new SwissPairingMinimalWeightMatching(roundPlayers, rounds, isLastRound); + roundPairings = swissPairing.getRoundPairings(); + } else { + SwissPairingSimple swissPairing = new SwissPairingSimple(roundPlayers, rounds); + roundPairings = swissPairing.getRoundPairings(); + } + Round round = new Round(rounds.size() + 1, this); rounds.add(round); - List roundPlayers = getActivePlayers(); - // sort players by tournament points - Collections.sort(roundPlayers, new Comparator() { - @Override - public int compare(TournamentPlayer p1, TournamentPlayer p2) { - return p2.getPoints() - p1.getPoints(); - } - - }); - // create pairings - while (roundPlayers.size() > 0) { - TournamentPlayer player1 = roundPlayers.get(0); - roundPlayers.remove(0); - TournamentPlayer playerForPossibleSecondPairing = null; - for (TournamentPlayer player2 : roundPlayers) { - if (alreadyPaired(player1, player2)) { - // if already paired but equal points -> remember if second pairing is needed - if (playerForPossibleSecondPairing == null) { - playerForPossibleSecondPairing = player2; - } - } else { - if (player2.getPoints() < player1.getPoints() && playerForPossibleSecondPairing != null) { - // pair again with a player - round.addPairing(new TournamentPairing(player1, playerForPossibleSecondPairing)); - roundPlayers.remove(playerForPossibleSecondPairing); - player1 = null; - break; - } else { - // pair agains the next not paired before - round.addPairing(new TournamentPairing(player1, player2)); - roundPlayers.remove(player2); - player1 = null; - break; - } - } - } - if (player1 != null) { - // no pairing done yet - if (playerForPossibleSecondPairing != null) { - // pair again with a player - round.addPairing(new TournamentPairing(player1, playerForPossibleSecondPairing)); - roundPlayers.remove(playerForPossibleSecondPairing); - } else { - // player free round - add to bye players of this round - round.getPlayerByes().add(player1); - if (round.getRoundNumber() == getNumberRounds()) { - player1.setState(TournamentPlayerState.FINISHED); - } else { - player1.setState(TournamentPlayerState.WAITING); - } - player1.setStateInfo("Round Bye"); - updateResults(); - } - } + for (TournamentPairing pairing : roundPairings.getPairings()) { + round.addPairing(pairing); } + for (TournamentPlayer playerBye : roundPairings.getPlayerByes()) { + // player free round - add to bye players of this round + round.getPlayerByes().add(playerBye); + if (isLastRound) { + playerBye.setState(TournamentPlayerState.FINISHED); + } else { + playerBye.setState(TournamentPlayerState.WAITING); + } + playerBye.setStateInfo("Round Bye"); + updateResults(); + } + return round; } - protected boolean alreadyPaired(TournamentPlayer player1, TournamentPlayer player2) { - for (Round round : rounds) { - for (TournamentPairing pairing : round.getPairs()) { - if (pairing.getPlayer1().equals(player1) || pairing.getPlayer2().equals(player1)) { - if (pairing.getPlayer1().equals(player2) || pairing.getPlayer2().equals(player2)) { - return true; - } - } - } - } - return false; - } } diff --git a/Mage/src/mage/game/tournament/pairing/RoundPairings.java b/Mage/src/mage/game/tournament/pairing/RoundPairings.java new file mode 100644 index 0000000000..b6c77874e1 --- /dev/null +++ b/Mage/src/mage/game/tournament/pairing/RoundPairings.java @@ -0,0 +1,64 @@ +/* + * Copyright 2011 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.game.tournament.pairing; + +import mage.game.tournament.TournamentPairing; +import mage.game.tournament.TournamentPlayer; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author Quercitron + */ +public class RoundPairings { + + public RoundPairings() { + this(new ArrayList(), new ArrayList()); + } + + public RoundPairings(List pairings, List playerByes) { + this.pairings = pairings; + this.playerByes = playerByes; + } + + private final List pairings; + + private final List playerByes; + + public List getPairings() { + return pairings; + } + + public List getPlayerByes() { + return playerByes; + } + +} diff --git a/Mage/src/mage/game/tournament/pairing/SwissPairingMinimalWeightMatching.java b/Mage/src/mage/game/tournament/pairing/SwissPairingMinimalWeightMatching.java new file mode 100644 index 0000000000..22040ac3a1 --- /dev/null +++ b/Mage/src/mage/game/tournament/pairing/SwissPairingMinimalWeightMatching.java @@ -0,0 +1,303 @@ +/* + * Copyright 2011 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.game.tournament.pairing; + +import mage.game.tournament.Round; +import mage.game.tournament.TournamentPairing; +import mage.game.tournament.TournamentPlayer; + +import java.util.*; + +/** + * + * @author Quercitron + */ + +// SwissPairingMinimalWeightMatching creates round pairings for swiss tournament. +// It assigns weight to each possible pair and searches perfect matching with minimal weight +// for more details see https://www.leaguevine.com/blog/18/swiss-tournament-scheduling-leaguevines-new-algorithm/ +// This implementation don't use fast minimum weight maximum matching algorithm, +// it uses brute-force search, so it works reasonably fast only up to 16 players. + +public class SwissPairingMinimalWeightMatching { + + private final int playersCount; + + List swissPlayers; + + // number of vertexes in graph + private final int n; + + // weight of pairings + private final int[][] w; + + public SwissPairingMinimalWeightMatching(List players, List rounds, boolean isLastRound) { + playersCount = players.size(); + + swissPlayers = new ArrayList(); + for (TournamentPlayer tournamentPlayer : players) { + PlayerInfo swissPlayer = new PlayerInfo(); + swissPlayer.tournamentPlayer = tournamentPlayer; + swissPlayer.points = tournamentPlayer.getPoints(); + swissPlayers.add(swissPlayer); + } + + // shuffle players first to add some randomness + Collections.shuffle(swissPlayers); + Map map = new HashMap<>(); + for (int i = 0; i < playersCount; i++) { + swissPlayers.get(i).id = i; + map.put(swissPlayers.get(i).tournamentPlayer, i); + } + + // calculate Tie Breaker points -- Sum of Opponents' Scores (SOS) + // see http://senseis.xmp.net/?SOS + for (Round round : rounds) { + for (TournamentPairing pairing : round.getPairs()) { + TournamentPlayer player1 = pairing.getPlayer1(); + TournamentPlayer player2 = pairing.getPlayer2(); + + Integer id1 = map.get(player1); + Integer id2 = map.get(player2); + + // a player could have left the tournament, so we should check if id is not null + if (id1 != null) { + swissPlayers.get(id1).sosPoints += player2.getPoints(); + } + if (id2 != null) { + swissPlayers.get(id2).sosPoints += player1.getPoints(); + } + // todo: sos points for byes? maybe add player points? + } + } + + // sort by points and then by sos points + Collections.sort(swissPlayers, new Comparator() { + @Override + public int compare(PlayerInfo p1, PlayerInfo p2) { + int result = p2.points - p1.points; + if (result != 0) { + return result; + } + return p2.sosPoints - p1.sosPoints; + } + }); + + // order could be changed, update ids and mapping + map.clear(); + for (int i = 0; i < playersCount; i++) { + swissPlayers.get(i).id = i; + map.put(swissPlayers.get(i).tournamentPlayer, i); + } + + // count ties and matches between players + int[][] duels = new int[playersCount][playersCount]; + int[] byes = new int[playersCount]; + for (Round round : rounds) { + for (TournamentPairing pairing : round.getPairs()) { + TournamentPlayer player1 = pairing.getPlayer1(); + TournamentPlayer player2 = pairing.getPlayer2(); + + Integer id1 = map.get(player1); + Integer id2 = map.get(player2); + + if (id1 != null && id2 != null) { + duels[id1][id2]++; + duels[id2][id1]++; + } + } + for (TournamentPlayer playerBye : round.getPlayerByes()) { + Integer id = map.get(playerBye); + if (id != null) { + byes[id]++; + } + } + } + + // set vertex count + // add vertex for bye if we have odd number of players + n = (playersCount % 2 == 1 ? playersCount + 1 : playersCount); + + // calculate weight + // try to pair players with equal scores + w = new int[n][n]; + int pointsDiffMultiplier = 10; + if (isLastRound) { + // for the last round, for each unpaired player starting with the first place, pair + // against the highest ranked player they haven't played against + for (int i = 0; i < playersCount; i++) { + for (int j = 0; j < i; j++) { + w[i][j] = Math.abs(i - j) + + pointsDiffMultiplier * Math.abs(swissPlayers.get(i).points - swissPlayers.get(j).points); + w[j][i] = w[i][j]; + } + } + } else { + for (int i = 0; i < playersCount; i++) { + PlayerInfo player = swissPlayers.get(i); + for (int p = player.points; p >= 0; p--) { + int first = -1; + int last = -1; + for (int j = 0; j < playersCount; j++) { + if (swissPlayers.get(j).points == p) { + if (first < 0) { + first = j; + } + last = j; + } + } + if (first < 0) { + continue; + } + int self = (p == player.points ? i : first - 1); + int diff = pointsDiffMultiplier * (player.points - p); + for (int j = Math.max(first, i); j <= last; j++) { + w[i][j] = Math.abs(j - (last + first - self)) + diff; + w[j][i] = w[i][j]; + } + } + } + } + + // avoid pairing players that have played each other already + for (int i = 0; i < playersCount; i++) { + for (int j = 0; j < i; j++) { + w[i][j] += duels[i][j] * 500; + w[j][i] = w[i][j]; + } + } + + // try to give bye to a player with a low score + // try to avoid giving the same person multiple byes + if (n > playersCount) { + for (int i = 0; i < playersCount; i++) { + w[i][n - 1] = 10 * (swissPlayers.get(i).points - swissPlayers.get(playersCount - 1).points) + (playersCount - i - 1); + w[i][n - 1] += byes[i] * 2000; + w[n - 1][i] = w[i][n - 1]; + } + } + + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + w[i][j] *= w[i][j]; + } + } + + // initialize variables for backtrack + used = new boolean[n]; + pairs = new int[n]; + Arrays.fill(pairs, -1); + result = new int[n]; + weight = 0; + minCost = -1; + makePairings(0); + } + + public RoundPairings getRoundPairings() { + // return round pairings with minimal weight + List pairings = new ArrayList<>(); + List playerByes = new ArrayList<>(); + + Map map = new HashMap<>(); + for (PlayerInfo player : swissPlayers) { + map.put(player.id, player.tournamentPlayer); + } + + if (n > playersCount) { + // last vertex -- bye + playerByes.add(map.get(result[n - 1])); + result[result[n - 1]] = -1; + result[n - 1] = -1; + } + + for (int i = 0; i < playersCount; i++) { + if (result[i] >= 0) { + pairings.add(new TournamentPairing(map.get(i), map.get(result[i]))); + result[result[i]] = -1; + result[i] = -1; + } + } + + return new RoundPairings(pairings, playerByes); + } + + boolean[] used; + + // current pairs + int[] pairs; + // current weight + int weight; + + int[] result; + int minCost; + + // backtrack all possible pairings and choose one with minimal weight + private void makePairings(int t) { + if (t >= n) { + if (minCost < 0 || minCost > weight) { + minCost = weight; + System.arraycopy(pairs, 0, result, 0, n); + } + return; + } + + if (!used[t]) { + for (int i = t + 1; i < n; i++) { + if (!used[i]) { + pairs[t] = i; + pairs[i] = t; + used[t] = true; + used[i] = true; + weight += w[t][i]; + + makePairings(t + 1); + + pairs[t] = -1; + pairs[i] = -1; + used[t] = false; + used[i] = false; + weight -= w[t][i]; + } + } + } else { + makePairings(t + 1); + } + } + + class PlayerInfo { + public int id; + + public TournamentPlayer tournamentPlayer; + + public int points; + + public int sosPoints; + } +} + diff --git a/Mage/src/mage/game/tournament/pairing/SwissPairingSimple.java b/Mage/src/mage/game/tournament/pairing/SwissPairingSimple.java new file mode 100644 index 0000000000..0af702e22c --- /dev/null +++ b/Mage/src/mage/game/tournament/pairing/SwissPairingSimple.java @@ -0,0 +1,124 @@ +/* + * Copyright 2011 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.game.tournament.pairing; + +import mage.game.tournament.Round; +import mage.game.tournament.TournamentPairing; +import mage.game.tournament.TournamentPlayer; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * + * @author BetaSteward_at_googlemail.com + * @author Quercitron + */ +public class SwissPairingSimple { + + private final RoundPairings roundPairings; + + public SwissPairingSimple(List players, List rounds) { + roundPairings = getPairingsSimple(players, rounds); + } + + public RoundPairings getRoundPairings() { + return roundPairings; + } + + private RoundPairings getPairingsSimple(List players, List rounds) { + List pairings = new ArrayList<>(); + List playerByes = new ArrayList<>(); + + // sort players by tournament points + Collections.sort(players, new Comparator() { + @Override + public int compare(TournamentPlayer p1, TournamentPlayer p2) { + return p2.getPoints() - p1.getPoints(); + } + + }); + // create pairings + while (players.size() > 0) { + TournamentPlayer player1 = players.get(0); + players.remove(0); + TournamentPlayer playerForPossibleSecondPairing = null; + for (TournamentPlayer player2 : players) { + if (alreadyPaired(rounds, player1, player2)) { + // if already paired but equal points -> remember if second pairing is needed + if (playerForPossibleSecondPairing == null) { + playerForPossibleSecondPairing = player2; + } + } else { + if (player2.getPoints() < player1.getPoints() && playerForPossibleSecondPairing != null) { + // pair again with a player + pairings.add(new TournamentPairing(player1, playerForPossibleSecondPairing)); + players.remove(playerForPossibleSecondPairing); + player1 = null; + break; + } else { + // pair agains the next not paired before + pairings.add(new TournamentPairing(player1, player2)); + players.remove(player2); + player1 = null; + break; + } + } + } + if (player1 != null) { + // no pairing done yet + if (playerForPossibleSecondPairing != null) { + // pair again with a player + pairings.add(new TournamentPairing(player1, playerForPossibleSecondPairing)); + players.remove(playerForPossibleSecondPairing); + } else { + // player free round - add to bye players of this round + playerByes.add(player1); + } + } + } + + return new RoundPairings(pairings, playerByes); + } + + private boolean alreadyPaired(List rounds, TournamentPlayer player1, TournamentPlayer player2) { + for (Round round : rounds) { + for (TournamentPairing pairing : round.getPairs()) { + if (pairing.getPlayer1().equals(player1) || pairing.getPlayer2().equals(player1)) { + if (pairing.getPlayer1().equals(player2) || pairing.getPlayer2().equals(player2)) { + return true; + } + } + } + } + return false; + } +} diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 7cfa444437..dce42de2d6 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -44,6 +44,8 @@ import mage.abilities.Modes; import mage.abilities.SpellAbility; import mage.abilities.TriggeredAbility; import mage.abilities.costs.AlternativeSourceCosts; +import mage.abilities.costs.Cost; +import mage.abilities.costs.Costs; import mage.abilities.costs.VariableCost; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; @@ -756,19 +758,23 @@ public interface Player extends MageItem, Copyable { void cleanUpOnMatchEnd(); /** - * If the next cast spell has the set sourceId, the spell will be cast - * without mana. + * If the next spell cast has the set sourceId, the spell will be cast + * without mana (null) or the mana set to manaCosts instead of its normal + * mana costs. * * @param sourceId the source that can be cast without mana * @param manaCosts alternate ManaCost, null if it can be cast without mana * cost + * @param costs alternate other costs you need to pay */ - void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts); + void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts, mage.abilities.costs.Costs costs); UUID getCastSourceIdWithAlternateMana(); ManaCosts getCastSourceIdManaCosts(); + Costs getCastSourceIdCosts(); + // permission handling to show hand cards void addPermissionToShowHandCards(UUID watcherUserId); @@ -787,4 +793,13 @@ public interface Player extends MageItem, Copyable { MatchPlayer getMatchPlayer(); boolean scry(int value, Ability source, Game game); + + /** + * Only used for test player for pre-setting targets + * + * @param ability + * @param game + * @return + */ + boolean addTargets(Ability ability, Game game); } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 80d529136d..55ce77993b 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -61,6 +61,7 @@ import mage.abilities.costs.AlternativeCost; import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.AlternativeSourceCosts; import mage.abilities.costs.Cost; +import mage.abilities.costs.Costs; import mage.abilities.costs.OptionalAdditionalSourceCosts; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; @@ -222,7 +223,8 @@ public abstract class PlayerImpl implements Player, Serializable { // indicates that the spell with the set sourceId can be cast with an alternate mana costs (can also be no mana costs) protected UUID castSourceIdWithAlternateMana; - protected ManaCosts castSourceIdManaCosts; + protected ManaCosts castSourceIdManaCosts; + protected Costs castSourceIdCosts; // indicates that the player is in mana payment phase protected boolean payManaMode = false; @@ -326,6 +328,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.castSourceIdWithAlternateMana = player.castSourceIdWithAlternateMana; this.castSourceIdManaCosts = player.castSourceIdManaCosts; + this.castSourceIdCosts = player.castSourceIdCosts; this.payManaMode = player.payManaMode; } @@ -388,6 +391,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.reachedNextTurnAfterLeaving = player.hasReachedNextTurnAfterLeaving(); this.castSourceIdWithAlternateMana = player.getCastSourceIdWithAlternateMana(); this.castSourceIdManaCosts = player.getCastSourceIdManaCosts(); + this.castSourceIdCosts = player.getCastSourceIdCosts(); // Don't restore! // this.storedBookmark @@ -453,6 +457,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.castSourceIdWithAlternateMana = null; this.castSourceIdManaCosts = null; + this.castSourceIdCosts = null; } /** @@ -476,6 +481,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.alternativeSourceCosts.clear(); this.castSourceIdWithAlternateMana = null; this.castSourceIdManaCosts = null; + this.castSourceIdCosts = null; this.getManaPool().clearEmptyManaPoolRules(); } @@ -684,6 +690,12 @@ public abstract class PlayerImpl implements Player, Serializable { return true; } + /** + * + * @param amount + * @param source + * @param game + */ @Override public void discard(int amount, Ability source, Game game) { discard(amount, false, source, game); @@ -917,9 +929,10 @@ public abstract class PlayerImpl implements Player, Serializable { } @Override - public void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts) { + public void setCastSourceIdWithAlternateMana(UUID sourceId, ManaCosts manaCosts, mage.abilities.costs.Costs costs) { castSourceIdWithAlternateMana = sourceId; castSourceIdManaCosts = manaCosts; + castSourceIdCosts = costs; } @Override @@ -927,6 +940,11 @@ public abstract class PlayerImpl implements Player, Serializable { return castSourceIdWithAlternateMana; } + @Override + public Costs getCastSourceIdCosts() { + return castSourceIdCosts; + } + @Override public ManaCosts getCastSourceIdManaCosts() { return castSourceIdManaCosts; @@ -945,25 +963,30 @@ public abstract class PlayerImpl implements Player, Serializable { //20091005 - 601.2a Card card = game.getCard(ability.getSourceId()); if (card != null) { - if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.CAST_SPELL, ability.getId(), ability.getSourceId(), playerId))) { + if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.CAST_SPELL, ability.getId(), ability.getSourceId(), playerId), ability)) { int bookmark = game.bookmarkState(); Zone fromZone = game.getState().getZone(card.getMainCard().getId()); card.cast(game, fromZone, ability, playerId); Spell spell = game.getStack().getSpell(ability.getId()); - // some effects set sourceId to cast without paying mana costs + // some effects set sourceId to cast without paying mana costs or other costs if (ability.getSourceId().equals(getCastSourceIdWithAlternateMana())) { - ManaCosts alternateCosts = getCastSourceIdManaCosts(); Ability spellAbility = spell.getSpellAbility(); + ManaCosts alternateCosts = getCastSourceIdManaCosts(); + Costs costs = getCastSourceIdCosts(); if (alternateCosts == null) { noMana = true; } else { spellAbility.getManaCosts().clear(); - spellAbility.getManaCosts().add(alternateCosts.copy()); spellAbility.getManaCostsToPay().clear(); + spellAbility.getManaCosts().add(alternateCosts.copy()); spellAbility.getManaCostsToPay().add(alternateCosts.copy()); } + spellAbility.getCosts().clear(); + if (costs != null) { + spellAbility.getCosts().addAll(costs); + } } - setCastSourceIdWithAlternateMana(null, null); + setCastSourceIdWithAlternateMana(null, null, null); GameEvent event = GameEvent.getEvent(GameEvent.EventType.CAST_SPELL, spell.getSpellAbility().getId(), spell.getSpellAbility().getSourceId(), playerId); game.fireEvent(event); if (spell.activate(game, noMana)) { @@ -984,12 +1007,14 @@ public abstract class PlayerImpl implements Player, Serializable { } @Override - public SpellAbility chooseSpellAbilityForCast(SpellAbility ability, Game game, boolean noMana) { + public SpellAbility chooseSpellAbilityForCast(SpellAbility ability, Game game, boolean noMana + ) { return ability; } @Override - public boolean playLand(Card card, Game game) { + public boolean playLand(Card card, Game game + ) { // Check for alternate casting possibilities: e.g. land with Morph ActivatedAbility playLandAbility = null; boolean found = false; @@ -2706,7 +2731,8 @@ public abstract class PlayerImpl implements Player, Serializable { for (Mode mode : option.getModes().values()) { Ability newOption = option.copy(); newOption.getModes().getSelectedModes().clear(); - newOption.getModes().setMode(mode); + newOption.getModes().getSelectedModes().add(mode); + newOption.getModes().setActiveMode(mode); if (newOption.getTargets().getUnchosen().size() > 0) { if (newOption.getManaCosts().getVariableCosts().size() > 0) { addVariableXOptions(options, newOption, 0, game); @@ -3049,7 +3075,7 @@ public abstract class PlayerImpl implements Player, Serializable { case GRAVEYARD: fromZone = game.getState().getZone(cards.iterator().next().getId()); successfulMovedCards = moveCardsToGraveyardWithInfo(cards, source, game, fromZone); - break; + return successfulMovedCards.size() > 0; case BATTLEFIELD: // new logic that does not yet add the permanents to battlefield while replacement effects are handled List permanents = new ArrayList<>(); List permanentsEntered = new ArrayList<>(); @@ -3094,7 +3120,6 @@ public abstract class PlayerImpl implements Player, Serializable { game.addPermanent(permanent); permanent.setZone(Zone.BATTLEFIELD, game); game.getPermanentsEntering().remove(permanent.getId()); - game.setScopeRelevant(true); successfulMovedCards.add(permanent); game.addSimultaneousEvent(new ZoneChangeEvent(permanent, permanent.getControllerId(), fromZone, Zone.BATTLEFIELD)); if (!game.isSimulation()) { @@ -3260,6 +3285,7 @@ public abstract class PlayerImpl implements Player, Serializable { } } } + game.fireEvent(new ZoneChangeGroupEvent(movedCards, source == null ? null : source.getSourceId(), this.getId(), fromZone, Zone.GRAVEYARD)); return movedCards; } @@ -3449,4 +3475,10 @@ public abstract class PlayerImpl implements Player, Serializable { return true; } + @Override + public boolean addTargets(Ability ability, Game game) { + // only used for TestPlayer to preSet Targets + return true; + } + } diff --git a/Mage/src/mage/util/TargetAddress.java b/Mage/src/mage/util/TargetAddress.java index 4774fe21e1..e4e89d1832 100644 --- a/Mage/src/mage/util/TargetAddress.java +++ b/Mage/src/mage/util/TargetAddress.java @@ -36,11 +36,11 @@ import mage.cards.Card; import mage.game.stack.Spell; import mage.target.Target; - /** * @author duncant */ public class TargetAddress { + protected int spellAbilityIndex; protected UUID mode; protected int targetIndex; @@ -52,8 +52,9 @@ public class TargetAddress { } protected static class TargetAddressIterable implements Iterable { + protected final Card card; - + public TargetAddressIterable(Card card) { this.card = card; } @@ -64,9 +65,10 @@ public class TargetAddress { } protected static class TargetAddressIterator implements Iterator { + protected Iterator spellAbilityIterator; protected Integer lastSpellAbilityIndex = null; - protected Iterator modeIterator = null; + protected Iterator modeIterator = null; protected Modes modes = null; protected UUID lastMode = null; protected Iterator targetIterator = null; @@ -88,14 +90,14 @@ public class TargetAddress { public boolean hasNext() { return lastTargetIndex != null; } - + public TargetAddress next() { TargetAddress ret = new TargetAddress(lastSpellAbilityIndex, - lastMode, - lastTargetIndex); + lastMode, + lastTargetIndex); calcNext(); return ret; - + } public void remove() { @@ -118,9 +120,9 @@ public class TargetAddress { return; } } - + if (modeIterator != null && modeIterator.hasNext()) { - lastMode = modeIterator.next(); + lastMode = modeIterator.next().getId(); targetIterator = modes.get(lastMode).getTargets().iterator(); } else { lastMode = null; @@ -145,7 +147,6 @@ public class TargetAddress { } } - public static Iterable walk(Card card) { return new TargetAddressIterable(card); } @@ -179,8 +180,8 @@ public class TargetAddress { public boolean equals(TargetAddress other) { return spellAbilityIndex == other.spellAbilityIndex - && mode.equals(other.mode) - && targetIndex == other.targetIndex; + && mode.equals(other.mode) + && targetIndex == other.targetIndex; } @Override diff --git a/Utils/keywords.txt b/Utils/keywords.txt index dd3fd7f594..72f5381677 100644 --- a/Utils/keywords.txt +++ b/Utils/keywords.txt @@ -44,6 +44,7 @@ Miracle|cost| Mountaincycling|cost| Mountainwalk|new| Morph|card, cost| +Myriad|new| Outlast|cost| Persist|new| Phasing|instance| diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 8da64343d2..4173875c04 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -1,4 +1,4 @@ -Ardent Plea|Alara Reborn|1|U|{1}{W}{U}|Enchantment|||Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.)$Cascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)| +Ardent Plea|Alara Reborn|1|U|{1}{W}{U}|Enchantment|||Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.)$Cascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)| Aven Mimeomancer|Alara Reborn|2|R|{1}{W}{U}|Creature - Bird Wizard|3|1|Flying$At the beginning of your upkeep, you may put a feather counter on target creature. If you do, that creature is 3/1 and has flying for as long as it has a feather counter on it.| Ethercaste Knight|Alara Reborn|3|C|{W}{U}|Artifact Creature - Human Knight|1|3|Exalted (Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.)| Ethersworn Shieldmage|Alara Reborn|4|C|{1}{W}{U}|Artifact Creature - Vedalken Wizard|2|2|Flash$When Ethersworn Shieldmage enters the battlefield, prevent all damage that would be dealt to artifact creatures this turn.| @@ -23284,7 +23284,7 @@ Fated Return|Born of the Gods|69|R|{4}{B}{B}{B}|Instant|||Put target creature ca Felhide Brawler|Born of the Gods|70|C|{1}{B}|Creature Minotaur|2|2|Felhide Brawler can't block unless you control another Minotaur.| Forlorn Pseudamma|Born of the Gods|71|U|{3}{B}|Creature Zombie|2|1|Intimidate$Inspired - Whenever Forlorn Pseudamma becomes untapped, you may pay {2}{B}. If you do, put a 2/2 black Zombie enchantment creature token onto the battlefield.| Forsaken Drifters|Born of the Gods|72|C|{3}{B}|Creature - Zombie|4|2|When Forsaken Drifters dies, put the top four cards of your library into your graveyard.| -Gild|Born of the Gods|73|R|{3}{B}|Sorcery|||Exile target creature. Put a colorless artifact token named Gold onto the battlefield. It has "Sacrifice this artifact: Add one mana of any color to your mana pool."| +Gild|Born of the Gods|73|R|{3}{B}|Enchantment Creature Hag|3|4|Whenever an opponent draws a card, Fate Unraveler deals 1 damage to that player.| Grisly Transformation|Born of the Gods|74|C|{2}{B}|Enchantment - Aura|||Enchant creature$When Grisly Transformation enters the battlefield, draw a card.$Enchanted creature has intimidate.| Herald of Torment|Born of the Gods|75|R|{1}{B}{B}|Enchantment Creature Demon|3|3|Bestow {3}{B}{B}$Flying$At the beginning of your upkeep, you lose 1 life.$Enchanted creature gets +3/+3 and has flying.| Marshmist Titan|Born of the Gods|76|C|{6}{B}|Creature Giant|4|5|Marshmist Titan costs {X} less to cast, where X is your devotion to black.| @@ -24041,7 +24041,7 @@ Ludevic's Abomination|Launch Party|16b|R||Creature - Lizard Horror|13|13|Trample Mondronen Shaman|Launch Party|17a|R|{3}{R}|Creature - Human Werewolf Shaman|3|2|At the beginning of each upkeep, if no spells were cast last turn, transform Mondronen Shaman.| Tovolar's Magehunter|Launch Party|17b|R||Creature - Werewolf|5|5|Whenever an opponent casts a spell, Tovolar's Magehunter deals 2 damage to that player.$At the beginning of each upkeep, if a player cast two or more spells last turn, transform Tovolar's Magehunter.| Restoration Angel|Launch Party|18|R|{3}{W}|Creature - Angel|3|4|Flash$Flying$When Restoration Angel enters the battlefield, you may exile target non-Angel creature you control, then return that card to the battlefield under your control.| -Staff of Nin|Launch Party|19|R|{6}|{6}|Artifact|||At the beginning of your upkeep, draw a card.${T}: Staff of Nin deals 1 damage to target creature or player.| +Staff of Nin|Launch Party|19|R|{6}|Artifact|||At the beginning of your upkeep, draw a card.${T}: Staff of Nin deals 1 damage to target creature or player.| Deadbridge Goliath|Launch Party|20|R|{2}{G}{G}|Creature - Insect|5|5|Scavenge {4}{G}{G} ({4}{G}{G}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery.)| Skarrg Goliath|Launch Party|21|R|{6}{G}{G}|Creature - Beast|9|9|Trample$Bloodrush {5}{G}{G}, Discard Skarrg Goliath: Target attacking creature gets +9/+9 and gains trample until end of turn.| Breaking|Launch Party|22a|R|{U}{B}|Sorcery|||Target player puts the top eight cards of his or her library into his or her graveyard.$Fuse (You may cast one or both halves of this card from your hand.)| @@ -26681,7 +26681,7 @@ Standing Troops|Duel Decks: Elspeth vs. Kiora|25|C|{2}{W}|Creature - Human Soldi Sunlance|Duel Decks: Elspeth vs. Kiora|26|C|{W}|Sorcery|||Sunlance deals 3 damage to target nonwhite creature.| Veteran Armorsmith|Duel Decks: Elspeth vs. Kiora|27|C|{W}{W}|Creature - Human Soldier|2|3|Other Soldier creatures you control get +0/+1.| Veteran Swordsmith|Duel Decks: Elspeth vs. Kiora|28|C|{2}{W}|Creature - Human Soldier|3|2|Other Soldier creatures you control get +1/+0.| -Secluded Steppe|Duel Decks: Elspeth vs. Kiora|29|C|Land|||Secluded Steppe enters the battlefield tapped.${T}: Add {W} to your mana pool.$Cycling {W} ({W}, Discard this card: Draw a card.)| +Secluded Steppe|Duel Decks: Elspeth vs. Kiora|29|C||Land|||Secluded Steppe enters the battlefield tapped.${T}: Add {W} to your mana pool.$Cycling {W} ({W}, Discard this card: Draw a card.)| Plains|Duel Decks: Elspeth vs. Kiora|30|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| Plains|Duel Decks: Elspeth vs. Kiora|31|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| Plains|Duel Decks: Elspeth vs. Kiora|32|L||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| @@ -27631,63 +27631,345 @@ Swamp|Battle for Zendikar|262|L||Basic Land - Swamp|||({t}: Add {B} to your m Swamp|Battle for Zendikar|264|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| Swamp|Battle for Zendikar|260|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| Swamp|Battle for Zendikar|261|L||Basic Land - Swamp|||({t}: Add {B} to your mana pool.)| -Bastion Protector|Commander 2015|1|R|{2}{W}|Creature - Human Soldier|3|3|Commander creatures you control gets +2/+2 and have indestructible.| -Dawnbreak Reclaimer|Commander 2015|2|R|{4}{W}{W}|Creature - Angel|5|5|Flying$At the beginning of your end step, choose a creature card in an opponent's graveyard, then that player chooses a creature card in your graveyard. You may return those cards to the battlefield under their owners' control.| -Grasp of Fate|Commander 2015|3|R|{1}{W}{W}|Enchantment|||When Grasp of Fate enters the battlefield, for each opponent, exile up to one target nonland permanent that player controls until Grasp of Fate leaves the battlefield. (Those permanents return under their owners' control.)| -Herald of the Host|Commander 2015|4|U|{3}{W}{W}|Creature - Angel|4|4|Flying, vigilance$Myriad (Whenever this creature attacks, for each opponent other than defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)| -Kalemne's Captain|Commander 2015|5|R|{3}{W}{W}|Creature - Giant Soldier|5|5|Vigilance${5}{W}{W}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.)$When Kalemne's Captain becomes monstrous, exile all artifacts and enchantments.| -Righteous Confluence|Commander 2015|7|R|{3}{W}{W}|Sorcery|||Choose three. You may choose the same mode more than once. - Put a 2/2 white Knight creature token with vigilance onto the battlefield; Exile target enchantment; You gain 5 life.| -AEthersnatch|Commander 2015|9|R|{4}{U}{U}|Instant|||Gain control of target spell. You may choose new targets for that spell. If that spell is a permanent, that permanent enters the battlefield under your control.| +Bastion Protector|Commander 2015|1|R|{2}{W}|Creature - Human Soldier|3|3|Commander creatures you control get +2/+2 and have indestructible.| Broodbirth Viper|Commander 2015|10|U|{4}{U}|Creature - Snake|3|3|Myriad (Whenever this creature attacks, for each opponent other than defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)$Whenever Broodbirth Viper deals combat damage to a player, you may draw a card.| +Plaxmanta|Commander 2015|100|U|{1}{U}|Creature - Beast|2|2|Flash$When Plaxmanta enters the battlefield, creatures you control gain shroud until end of turn. (They can't be the targets of spells or abilities.)$When Plaxmanta enters the battlefield, sacrifice it unless {G} was spent to cast it.| +Preordain|Commander 2015|101|C|{U}|Sorcery|||Scry 2, then draw a card. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)| +Rapid Hybridization|Commander 2015|102|U|{U}|Instant|||Destroy target creature. It can't be regenerated. That creature's controller puts a 3/3 green Frog Lizard creature token onto the battlefield.| +Reins of Power|Commander 2015|103|R|{2}{U}{U}|Instant|||Untap all creatures you control and all creatures target opponent controls. You and that opponent each gain control of all creatures the other controls until end of turn. Those creatures gain haste until end of turn.| +Repeal|Commander 2015|104|C|{X}{U}|Instant|||Return target nonland permanent with converted mana cost X to its owner's hand.$Draw a card.| +Rite of Replication|Commander 2015|105|R|{2}{U}{U}|Sorcery|||Kicker {5} (You may pay an additional {5} as you cast this spell.)$Put a token onto the battlefield that's a copy of target creature. If Rite of Replication was kicked, put five of those tokens onto the battlefield instead.| +Sleep|Commander 2015|106|U|{2}{U}{U}|Sorcery|||Tap all creatures target player controls. Those creatures don't untap during that player's next untap step.| +Stolen Goods|Commander 2015|107|R|{3}{U}|Sorcery|||Target opponent exiles cards from the top of his or her library until he or she exiles a nonland card. Until end of turn, you may cast that card without paying its mana cost.| +Stroke of Genius|Commander 2015|108|R|{X}{2}{U}|Instant|||Target player draws X cards.| +Talrand, Sky Summoner|Commander 2015|109|R|{2}{U}{U}|Legendary Creature - Merfolk Wizard|2|2|Whenever you cast an instant or sorcery spell, put a 2/2 blue Drake creature token with flying onto the battlefield.| Gigantoplasm|Commander 2015|11|R|{3}{U}|Creature - Shapeshifter|0|0|You may have Gigantoplasm enter the battlefield as a copy of any creature on the battlefield except it gains "{X}: This creature has base power and toughness X/X."| +Thought Reflection|Commander 2015|110|R|{4}{U}{U}{U}|Enchantment|||If you would draw a card, draw two cards instead.| +Windfall|Commander 2015|111|U|{2}{U}|Sorcery|||Each player discards his or her hand, then draws cards equal to the greatest number of cards a player discarded this way.| +Altar's Reap|Commander 2015|112|C|{1}{B}|Instant|||As an additional cost to cast Altar's Reap, sacrifice a creature.$Draw two cards.| +Ambition's Cost|Commander 2015|113|U|{3}{B}|Sorcery|||You draw three cards and you lose 3 life.| +Ancient Craving|Commander 2015|114|R|{3}{B}|Sorcery|||You draw three cards and you lose 3 life.| +Barter in Blood|Commander 2015|115|U|{2}{B}{B}|Sorcery|||Each player sacrifices two creatures.| +Black Market|Commander 2015|116|R|{3}{B}{B}|Enchantment|||Whenever a creature dies, put a charge counter on Black Market.$At the beginning of your precombat main phase, add {B} to your mana pool for each charge counter on Black Market.| +Blood Bairn|Commander 2015|117|C|{2}{B}|Creature - Vampire|2|2|Sacrifice another creature: Blood Bairn gets +2/+2 until end of turn.| +Butcher of Malakir|Commander 2015|118|R|{5}{B}{B}|Creature - Vampire Warrior|5|4|Flying$Whenever Butcher of Malakir or another creature you control dies, each opponent sacrifices a creature.| +Champion of Stray Souls|Commander 2015|119|M|{4}{B}{B}|Creature - Skeleton Warrior|4|4|{3}{B}{B}, {tap}, Sacrifice X other creatures: Return X target creature cards from your graveyard to the battlefield.${5}{B}{B}: Put Champion of Stray Souls on top of your library from your graveyard.| Illusory Ambusher|Commander 2015|12|U|{4}{U}|Creature - Cat Illusion|4|1|Flash (You may cast this spell any time you could cast an instant.)$Whenever Illusory Ambusher is dealt damage, draw that many cards.| +Diabolic Servitude|Commander 2015|120|U|{3}{B}|Enchantment|||When Diabolic Servitude enters the battlefield, return target creature card from your graveyard to the battlefield.$When the creature put onto the battlefield with Diabolic Servitude dies, exile it and return Diabolic Servitude to its owner's hand.$When Diabolic Servitude leaves the battlefield, exile the creature put onto the battlefield with Diabolic Servitude.| +Doomwake Giant|Commander 2015|121|R|{4}{B}|Enchantment Creature - Giant|4|6|Constellation - Whenever Doomwake Giant or another enchantment enters the battlefield under your control, creatures your opponents control get -1/-1 until end of turn.| +Dreadbringer Lampads|Commander 2015|122|C|{4}{B}|Enchantment Creature - Nymph|4|2|Constellation - Whenever Dreadbringer Lampads or another enchantment enters the battlefield under your control, target creature gains intimidate until end of turn. (It can't be blocked except by artifact creatures and/or creatures that share a color with it.)| +Eater of Hope|Commander 2015|123|R|{5}{B}{B}|Creature - Demon|6|4|Flying${B}, Sacrifice another creature: Regenerate Eater of Hope.${2}{B}, Sacrifice two other creatures: Destroy target creature.| +Extractor Demon|Commander 2015|124|R|{4}{B}{B}|Creature - Demon|5|5|Flying$Whenever another creature leaves the battlefield, you may have target player put the top two cards of his or her library into his or her graveyard.$Unearth {2}{B} ({2}{B}: Return this card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)| +Fallen Ideal|Commander 2015|125|U|{2}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature has flying and "Sacrifice a creature: This creature gets +2/+1 until end of turn."$When Fallen Ideal is put into a graveyard from the battlefield, return Fallen Ideal to its owner's hand.| +Fate Unraveler|Commander 2015|126|R|{3}{B}|Enchantment Creature - Hag|3|4|Whenever an opponent draws a card, Fate Unraveler deals 1 damage to that player.| +Gild|Commander 2015|127|R|{3}{B}|Sorcery|||Exile target creature. Put a colorless artifact token named Gold onto the battlefield. It has "Sacrifice this artifact: Add one mana of any color to your mana pool."| +Grave Peril|Commander 2015|128|C|{1}{B}|Enchantment|||When a nonblack creature enters the battlefield, sacrifice Grave Peril. If you do, destroy that creature.| +Nighthowler|Commander 2015|129|R|{1}{B}{B}|Enchantment Creature - Horror|0|0|Bestow {2}{B}{B} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)$Nighthowler and enchanted creature each get +X/+X, where X is the number of creature cards in all graveyards.| Mirror Match|Commander 2015|13|U|{4}{U}{U}|Instant|||Cast Mirror Match only during the declare blockers step.$For each creature attacking you or a planeswalker you control, put a token that's a copy of that creature onto the battlefield blocking that creature. Exile those tokens at end of combat.| -Mystic Confluence|Commander 2015|14|R|{3}{U}{U}|Instant|||Choose three. You may choose the same mode more than once. - Counter target spell unless its controller pays {3}; Return target creature to its owner's hand; Draw a card.| -Synthetic Destiny|COmmander 2015|15|R|{4}{U}{U}|Instant|||Exile all creatures you control. At the beginning of the next end step, reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library.| +Phyrexian Arena|Commander 2015|130|R|{1}{B}{B}|Enchantment|||At the beginning of your upkeep, you draw a card and you lose 1 life.| +Phyrexian Plaguelord|Commander 2015|131|R|{3}{B}{B}|Creature - Carrier|4|4|{tap}, Sacrifice Phyrexian Plaguelord: Target creature gets -4/-4 until end of turn.$Sacrifice a creature: Target creature gets -1/-1 until end of turn.| +Phyrexian Rager|Commander 2015|132|C|{2}{B}|Creature - Horror|2|2|When Phyrexian Rager enters the battlefield, you draw a card and you lose 1 life.| +Phyrexian Reclamation|Commander 2015|133|U|{B}|Enchantment|||{1}{B}, Pay 2 life: Return target creature card from your graveyard to your hand.| +Rise from the Grave|Commander 2015|134|U|{4}{B}|Sorcery|||Put target creature card from a graveyard onto the battlefield under your control. That creature is a black Zombie in addition to its other colors and types.| +Seal of Doom|Commander 2015|135|C|{2}{B}|Enchantment|||Sacrifice Seal of Doom: Destroy target nonblack creature. It can't be regenerated.| +Sever the Bloodline|Commander 2015|136|R|{3}{B}|Sorcery|||Exile target creature and all other creatures with the same name as that creature.$Flashback {5}{B}{B} (You may cast this card from your graveyard for its flashback cost. Then exile it.)| +Shriekmaw|Commander 2015|137|U|{4}{B}|Creature - Elemental|3|2|Fear (This creature can't be blocked except by artifact creatures and/or black creatures.)$When Shriekmaw enters the battlefield, destroy target nonartifact, nonblack creature.$Evoke {1}{B} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.)| +Underworld Connections|Commander 2015|138|R|{1}{B}{B}|Enchantment - Aura|||Enchant land$Enchanted land has "{tap}, Pay 1 life: Draw a card."| +Victimize|Commander 2015|139|U|{2}{B}|Sorcery|||Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped.| +Mystic Confluence|Commander 2015|14|R|{3}{U}{U}|Instant|||Choose three. You may choose the same mode more than once.$• Counter target spell unless its controller pays {3}.$• Return target creature to its owner's hand.$• Draw a card.| +Vow of Malice|Commander 2015|140|U|{2}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+2, has intimidate, and can't attack you or a planeswalker you control. (A creature with intimidate can't be blocked except by artifact creatures and/or creatures that share a color with it.)| +Act of Aggression|Commander 2015|141|U|{3}{RP}{RP}|Instant|||({RP} can be paid with either {R} or 2 life.)$Gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn.| +Borderland Behemoth|Commander 2015|142|R|{5}{R}{R}|Creature - Giant Warrior|4|4|Trample$Borderland Behemoth gets +4/+4 for each other Giant you control.| +Breath of Darigaaz|Commander 2015|143|U|{1}{R}|Sorcery|||Kicker {2} (You may pay an additional {2} as you cast this spell.)$Breath of Darigaaz deals 1 damage to each creature without flying and each player. If Breath of Darigaaz was kicked, it deals 4 damage to each creature without flying and each player instead.| +Chain Reaction|Commander 2015|144|R|{2}{R}{R}|Sorcery|||Chain Reaction deals X damage to each creature, where X is the number of creatures on the battlefield.| +Charmbreaker Devils|Commander 2015|145|R|{5}{R}|Creature - Devil|4|4|At the beginning of your upkeep, return an instant or sorcery card at random from your graveyard to your hand.$Whenever you cast an instant or sorcery spell, Charmbreaker Devils gets +4/+0 until end of turn.| +Comet Storm|Commander 2015|146|M|{X}{R}{R}|Instant|||Multikicker {1} (You may pay an additional {1} any number of times as you cast this spell.)$Choose target creature or player, then choose another target creature or player for each time Comet Storm was kicked. Comet Storm deals X damage to each of them.| +Curse of the Nightly Hunt|Commander 2015|147|U|{2}{R}|Enchantment - Aura Curse|||Enchant player$Creatures enchanted player controls attack each turn if able.| +Desolation Giant|Commander 2015|148|R|{2}{R}{R}|Creature - Giant|3|3|Kicker {W}{W} (You may pay an additional {W}{W} as you cast this spell.)$When Desolation Giant enters the battlefield, destroy all other creatures you control. If it was kicked, destroy all other creatures instead.| +Desperate Ravings|Commander 2015|149|U|{1}{R}|Instant|||Draw two cards, then discard a card at random.$Flashback {2}{U} (You may cast this card from your graveyard for its flashback cost. Then exile it.)| +Synthetic Destiny|Commander 2015|15|R|{4}{U}{U}|Instant|||Exile all creatures you control. At the beginning of the next end step, reveal cards from the top of your library until you reveal that many creature cards, put all creature cards revealed this way onto the battlefield, then shuffle the rest of the revealed cards into your library.| +Disaster Radius|Commander 2015|150|R|{5}{R}{R}|Sorcery|||As an additional cost to cast Disaster Radius, reveal a creature card from your hand.$Disaster Radius deals X damage to each creature your opponents control, where X is the revealed card's converted mana cost.| +Dragon Mage|Commander 2015|151|R|{5}{R}{R}|Creature - Dragon Wizard|5|5|Flying$Whenever Dragon Mage deals combat damage to a player, each player discards his or her hand, then draws seven cards.| +Earthquake|Commander 2015|152|R|{X}{R}|Sorcery|||Earthquake deals X damage to each creature without flying and each player.| +Faithless Looting|Commander 2015|153|C|{R}|Sorcery|||Draw two cards, then discard two cards.$Flashback {2}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.)| +Fall of the Hammer|Commander 2015|154|C|{1}{R}|Instant|||Target creature you control deals damage equal to its power to another target creature.| +Fumiko the Lowblood|Commander 2015|155|R|{2}{R}{R}|Legendary Creature - Human Samurai|3|2|Fumiko the Lowblood has bushido X, where X is the number of attacking creatures. (Whenever this creature blocks or becomes blocked, it gets +X/+X until end of turn.)$Creatures your opponents control attack each turn if able.| +Hamletback Goliath|Commander 2015|156|R|{6}{R}|Creature - Giant Warrior|6|6|Whenever another creature enters the battlefield, you may put X +1/+1 counters on Hamletback Goliath, where X is that creature's power.| +Hammerfist Giant|Commander 2015|157|R|{4}{R}{R}|Creature - Giant Warrior|5|4|{tap}: Hammerfist Giant deals 4 damage to each creature without flying and each player.| +Hostility|Commander 2015|158|R|{3}{R}{R}{R}|Creature - Elemental Incarnation|6|6|Haste$If a spell you control would deal damage to an opponent, prevent that damage. Put a 3/1 red Elemental Shaman creature token with haste onto the battlefield for each 1 damage prevented this way.$When Hostility is put into a graveyard from anywhere, shuffle it into its owner's library.| +Hunted Dragon|Commander 2015|159|R|{3}{R}{R}|Creature - Dragon|6|6|Flying, haste$When Hunted Dragon enters the battlefield, target opponent puts three 2/2 white Knight creature tokens with first strike onto the battlefield.| Banshee of the Dread Choir|Commander 2015|16|U|{3}{B}{B}|Creature - Spirit|4|4|Myriad (Whenever this creature attacks, for each opponent other than defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)$Whenever Banshee of the Dread Choir deals combat damage to a player, that player discards a card.| -Daxos's Torment|Commander 2015|18|R|{3}{B}|Enchantment|||Constellation - Whenever Daxos's Torment or another enchantment enters the battlefield under your control, Daxos's Torment becomes a 5/5 Demon creature with flying and haste until end of turn in addition to its other types.| +Inferno Titan|Commander 2015|160|M|{4}{R}{R}|Creature - Giant|6|6|{R}: Inferno Titan gets +1/+0 until end of turn.$Whenever Inferno Titan enters the battlefield or attacks, it deals 3 damage divided as you choose among one, two, or three target creatures and/or players.| +Magma Giant|Commander 2015|161|R|{5}{R}{R}|Creature - Giant|5|5|When Magma Giant enters the battlefield, it deals 2 damage to each creature and each player.| +Magmaquake|Commander 2015|162|R|{X}{R}{R}|Instant|||Magmaquake deals X damage to each creature without flying and each planeswalker.| +Mizzium Mortars|Commander 2015|163|R|{1}{R}|Sorcery|||Mizzium Mortars deals 4 damage to target creature you don't control.$Overload {3}{R}{R}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")| +Stinkdrinker Daredevil|Commander 2015|164|C|{2}{R}|Creature - Goblin Rogue|1|3|Giant spells you cast cost {2} less to cast.| +Stoneshock Giant|Commander 2015|165|U|{3}{R}{R}|Creature - Giant|5|4|{6}{R}{R}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.)$When Stoneshock Giant becomes monstrous, creatures without flying your opponents control can't block this turn.| +Sunrise Sovereign|Commander 2015|166|R|{5}{R}|Creature - Giant Warrior|5|5|Other Giant creatures you control get +2/+2 and have trample.| +Taurean Mauler|Commander 2015|167|R|{2}{R}|Creature - Shapeshifter|2|2|Changeling (This card is every creature type at all times.)$Whenever an opponent casts a spell, you may put a +1/+1 counter on Taurean Mauler.| +Thundercloud Shaman|Commander 2015|168|U|{3}{R}{R}|Creature - Giant Shaman|4|4|When Thundercloud Shaman enters the battlefield, it deals damage equal to the number of Giants you control to each non-Giant creature.| +Urza's Rage|Commander 2015|169|R|{2}{R}|Instant|||Kicker {8}{R} (You may pay an additional {8}{R} as you cast this spell.)$Urza's Rage can't be countered by spells or abilities.$Urza's Rage deals 3 damage to target creature or player. If Urza's Rage was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented.| +Corpse Augur|Commander 2015|17|U|{3}{B}|Creature - Zombie Wizard|4|2|When Corpse Augur dies, you draw X cards and you lose X life, where X is the number of creature cards in target player's graveyard.| +Vandalblast|Commander 2015|170|U|{R}|Sorcery|||Destroy target artifact you don't control.$Overload {4}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")| +Warstorm Surge|Commander 2015|171|R|{5}{R}|Enchantment|||Whenever a creature enters the battlefield under your control, it deals damage equal to its power to target creature or player.| +Word of Seizing|Commander 2015|172|R|{3}{R}{R}|Instant|||Split second (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.)$Untap target permanent and gain control of it until end of turn. It gains haste until end of turn.| +Acidic Slime|Commander 2015|173|U|{3}{G}{G}|Creature - Ooze|2|2|Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)$When Acidic Slime enters the battlefield, destroy target artifact, enchantment, or land.| +Arbor Colossus|Commander 2015|174|R|{2}{G}{G}{G}|Creature - Giant|6|6|Reach${3}{G}{G}{G}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.)$When Arbor Colossus becomes monstrous, destroy target creature with flying an opponent controls.| +Bane of Progress|Commander 2015|175|R|{4}{G}{G}|Creature - Elemental|2|2|When Bane of Progress enters the battlefield, destroy all artifacts and enchantments. Put a +1/+1 counter on Bane of Progress for each permanent destroyed this way.| +Beastmaster Ascension|Commander 2015|176|R|{2}{G}|Enchantment|||Whenever a creature you control attacks, you may put a quest counter on Beastmaster Ascension.$As long as Beastmaster Ascension has seven or more quest counters on it, creatures you control get +5/+5.| +Caller of the Claw|Commander 2015|177|R|{2}{G}|Creature - Elf|2|2|Flash$When Caller of the Claw enters the battlefield, put a 2/2 green Bear creature token onto the battlefield for each nontoken creature put into your graveyard from the battlefield this turn.| +Chameleon Colossus|Commander 2015|178|R|{2}{G}{G}|Creature - Shapeshifter|4|4|Changeling (This card is every creature type at all times.)$Protection from black${2}{G}{G}: Chameleon Colossus gets +X/+X until end of turn, where X is its power.| +Cloudthresher|Commander 2015|179|R|{2}{G}{G}{G}{G}|Creature - Elemental|7|7|Flash$Reach$When Cloudthresher enters the battlefield, it deals 2 damage to each creature with flying and each player.$Evoke {2}{G}{G} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.)| +Daxos's Torment|Commander 2015|18|R|{3}{B}|Enchantment|||Constellation - Whenever Daxos's Torment or another enchantment enters the battlefield under your control, Daxos's Torment becomes a 5/5 Demon creature with flying and haste in addition to its other types until end of turn.| +Cobra Trap|Commander 2015|180|U|{4}{G}{G}|Instant - Trap|||If a noncreature permanent under your control was destroyed this turn by a spell or ability an opponent controlled, you may pay {G} rather than pay Cobra Trap's mana cost.$Put four 1/1 green Snake creature tokens onto the battlefield.| +Desert Twister|Commander 2015|181|U|{4}{G}{G}|Sorcery|||Destroy target permanent.| +Elvish Visionary|Commander 2015|182|C|{1}{G}|Creature - Elf Shaman|1|1|When Elvish Visionary enters the battlefield, draw a card.| +Eternal Witness|Commander 2015|183|U|{1}{G}{G}|Creature - Human Shaman|2|1|When Eternal Witness enters the battlefield, you may return target card from your graveyard to your hand.| +Experiment One|Commander 2015|184|U|{G}|Creature - Human Ooze|1|1|Evolve (Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature.)$Remove two +1/+1 counters from Experiment One: Regenerate Experiment One.| +Forgotten Ancient|Commander 2015|185|R|{3}{G}|Creature - Elemental|0|3|Whenever a player casts a spell, you may put a +1/+1 counter on Forgotten Ancient.$At the beginning of your upkeep, you may move any number of +1/+1 counters from Forgotten Ancient onto other creatures.| +Indrik Stomphowler|Commander 2015|186|U|{4}{G}|Creature - Beast|4|4|When Indrik Stomphowler enters the battlefield, destroy target artifact or enchantment.| +Kessig Cagebreakers|Commander 2015|187|R|{4}{G}|Creature - Human Rogue|3|4|Whenever Kessig Cagebreakers attacks, put a 2/2 green Wolf creature token onto the battlefield tapped and attacking for each creature card in your graveyard.| +Kodama's Reach|Commander 2015|188|C|{2}{G}|Sorcery - Arcane|||Search your library for up to two basic land cards, reveal those cards, and put one onto the battlefield tapped and the other into your hand. Then shuffle your library.| +Krosan Grip|Commander 2015|189|U|{2}{G}|Instant|||Split second (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.)$Destroy target artifact or enchantment.| Deadly Tempest|Commander 2015|19|R|{4}{B}{B}|Sorcery|||Destroy all creatures. Each player loses life equal to the number of creatures he or she controlled that were destroyed this way.| +Loaming Shaman|Commander 2015|190|R|{2}{G}|Creature - Centaur Shaman|3|2|When Loaming Shaman enters the battlefield, target player shuffles any number of target cards from his or her graveyard into his or her library.| +Mulch|Commander 2015|191|C|{1}{G}|Sorcery|||Reveal the top four cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.| +Mycoloth|Commander 2015|192|R|{3}{G}{G}|Creature - Fungus|4|4|Devour 2 (As this enters the battlefield, you may sacrifice any number of creatures. This creature enters the battlefield with twice that many +1/+1 counters on it.)$At the beginning of your upkeep, put a 1/1 green Saproling creature token onto the battlefield for each +1/+1 counter on Mycoloth.| +Noble Quarry|Commander 2015|193|U|{2}{G}|Enchantment Creature - Unicorn|1|1|Bestow {5}{G} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)$All creatures able to block Noble Quarry or enchanted creature do so.$Enchanted creature gets +1/+1.| +Ohran Viper|Commander 2015|194|R|{1}{G}{G}|Snow Creature - Snake|1|3|Whenever Ohran Viper deals combat damage to a creature, destroy that creature at end of combat.$Whenever Ohran Viper deals combat damage to a player, you may draw a card.| +Overrun|Commander 2015|195|U|{2}{G}{G}{G}|Sorcery|||Creatures you control get +3/+3 and gain trample until end of turn.| +Overwhelming Stampede|Commander 2015|196|R|{3}{G}{G}|Sorcery|||Until end of turn, creatures you control gain trample and get +X/+X, where X is the greatest power among creatures you control.| +Patagia Viper|Commander 2015|197|U|{3}{G}|Creature - Snake|2|1|Flying$When Patagia Viper enters the battlefield, put two 1/1 green and blue Snake creature tokens onto the battlefield.$When Patagia Viper enters the battlefield, sacrifice it unless {U} was spent to cast it.| +Primal Growth|Commander 2015|198|C|{2}{G}|Sorcery|||Kicker-Sacrifice a creature. (You may sacrifice a creature in addition to any other costs as you cast this spell.)$Search your library for a basic land card, put that card onto the battlefield, then shuffle your library. If Primal Growth was kicked, instead search your library for up to two basic land cards, put them onto the battlefield, then shuffle your library.| +Rampant Growth|Commander 2015|199|C|{1}{G}|Sorcery|||Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.| +Dawnbreak Reclaimer|Commander 2015|2|R|{4}{W}{W}|Creature - Angel|5|5|Flying$At the beginning of your end step, choose a creature card in an opponent's graveyard, then that player chooses a creature card in your graveyard. You may return those cards to the battlefield under their owners' control.| Dread Summons|Commander 2015|20|R|{X}{B}{B}|Sorcery|||Each player puts the top X cards of his or her library into his or her graveyard. For each creature card put into a graveyard this way, you put a 2/2 black Zombie creature token onto the battlefield tapped.| +Sakura-Tribe Elder|Commander 2015|200|C|{1}{G}|Creature - Snake Shaman|1|1|Sacrifice Sakura-Tribe Elder: Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library.| +Satyr Wayfinder|Commander 2015|201|C|{1}{G}|Creature - Satyr|1|1|When Satyr Wayfinder enters the battlefield, reveal the top four cards of your library. You may put a land card from among them into your hand. Put the rest into your graveyard.| +Spider Spawning|Commander 2015|202|U|{4}{G}|Sorcery|||Put a 1/2 green Spider creature token with reach onto the battlefield for each creature card in your graveyard.$Flashback {6}{B} (You may cast this card from your graveyard for its flashback cost. Then exile it.)| +Stingerfling Spider|Commander 2015|203|U|{4}{G}|Creature - Spider|2|5|Reach$When Stingerfling Spider enters the battlefield, you may destroy target creature with flying.| +Terastodon|Commander 2015|204|R|{6}{G}{G}|Creature - Elephant|9|9|When Terastodon enters the battlefield, you may destroy up to three target noncreature permanents. For each permanent put into a graveyard this way, its controller puts a 3/3 green Elephant creature token onto the battlefield.| +Thelonite Hermit|Commander 2015|205|R|{3}{G}|Creature - Elf Shaman|1|1|Saproling creatures get +1/+1.$Morph {3}{G}{G} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)$When Thelonite Hermit is turned face up, put four 1/1 green Saproling creature tokens onto the battlefield.| +Tribute to the Wild|Commander 2015|206|U|{1}{G}|Instant|||Each opponent sacrifices an artifact or enchantment.| +Verdant Force|Commander 2015|207|R|{5}{G}{G}{G}|Creature - Elemental|7|7|At the beginning of each upkeep, put a 1/1 green Saproling creature token onto the battlefield.| +Viridian Emissary|Commander 2015|208|C|{1}{G}|Creature - Elf Scout|2|1|When Viridian Emissary dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.| +Viridian Shaman|Commander 2015|209|U|{2}{G}|Creature - Elf Shaman|2|2|When Viridian Shaman enters the battlefield, destroy target artifact.| Scourge of Nel Toth|Commander 2015|21|R|{5}{B}{B}|Creature - Zombie Dragon|6|6|Flying$You may cast Scourge of Nel Toth from your graveyard by paying {B}{B} and sacrificing two creatures rather than paying its mana cost.| -Awaken the Sky Tyrant|Commander 2015|24|R|{3}{R}|Enchantment|||When a source an oppponent controls deals damage to you, sacrifice Awaken the Sky Tyrant. If you do, put a 5/5 red Dragon creature token with flying onto the battlefield.| +Viridian Zealot|Commander 2015|210|R|{G}{G}|Creature - Elf Warrior|2|1|{1}{G}, Sacrifice Viridian Zealot: Destroy target artifact or enchantment.| +Wall of Blossoms|Commander 2015|211|U|{1}{G}|Creature - Plant Wall|0|4|Defender$When Wall of Blossoms enters the battlefield, draw a card.| +Wood Elves|Commander 2015|212|C|{2}{G}|Creature - Elf Scout|1|1|When Wood Elves enters the battlefield, search your library for a Forest card and put that card onto the battlefield. Then shuffle your library.| +Coiling Oracle|Commander 2015|213|C|{G}{U}|Creature - Snake Elf Druid|1|1|When Coiling Oracle enters the battlefield, reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put that card into your hand.| +Counterflux|Commander 2015|214|R|{U}{U}{R}|Instant|||Counterflux can't be countered by spells or abilities.$Counter target spell you don't control.$Overload {1}{U}{U}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")| +Death Grasp|Commander 2015|215|R|{X}{W}{B}|Sorcery|||Death Grasp deals X damage to target creature or player. You gain X life.| +Epic Experiment|Commander 2015|216|M|{X}{U}{R}|Sorcery|||Exile the top X cards of your library. For each instant and sorcery card with converted mana cost X or less among them, you may cast that card without paying its mana cost. Then put all cards exiled this way that weren't cast into your graveyard.| +Etherium-Horn Sorcerer|Commander 2015|217|R|{4}{U}{R}|Artifact Creature - Minotaur Wizard|3|6|{1}{U}{R}: Return Etherium-Horn Sorcerer to its owner's hand.$Cascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order.)| +Firemind's Foresight|Commander 2015|218|R|{5}{U}{R}|Instant|||Search your library for an instant card with converted mana cost 3, reveal it, and put it into your hand. Then repeat this process for instant cards with converted mana costs 2 and 1. Then shuffle your library.| +Gisela, Blade of Goldnight|Commander 2015|219|M|{4}{R}{W}{W}|Legendary Creature - Angel|5|5|Flying, first strike$If a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead.$If a source would deal damage to you or a permanent you control, prevent half that damage, rounded up.| +Thief of Blood|Commander 2015|22|U|{4}{B}{B}|Creature - Vampire|1|1|Flying$As Thief of Blood enters the battlefield, remove all counters from all permanents. Thief of Blood enters the battlefield with a +1/+1 counter on it for each counter removed this way.| +Goblin Electromancer|Commander 2015|220|C|{U}{R}|Creature - Goblin Wizard|2|2|Instant and sorcery spells you cast cost {1} less to cast.| +Golgari Charm|Commander 2015|221|U|{B}{G}|Instant|||Choose one -$• All creatures get -1/-1 until end of turn.$• Destroy target enchantment.$• Regenerate each creature you control.| +Grisly Salvage|Commander 2015|222|C|{B}{G}|Instant|||Reveal the top five cards of your library. You may put a creature or land card from among them into your hand. Put the rest into your graveyard.| +Jarad, Golgari Lich Lord|Commander 2015|223|M|{B}{B}{G}{G}|Legendary Creature - Zombie Elf|2|2|Jarad, Golgari Lich Lord gets +1/+1 for each creature card in your graveyard.${1}{B}{G}, Sacrifice another creature: Each opponent loses life equal to the sacrificed creature's power.$Sacrifice a Swamp and a Forest: Return Jarad from your graveyard to your hand.| +Korozda Guildmage|Commander 2015|224|U|{B}{G}|Creature - Elf Shaman|2|2|{1}{B}{G}: Target creature gets +1/+1 and gains intimidate until end of turn. (It can't be blocked except by artifact creatures and/or creatures that share a color with it.)${2}{B}{G}, Sacrifice a nontoken creature: Put X 1/1 green Saproling creature tokens onto the battlefield, where X is the sacrificed creature's toughness.| +Lorescale Coatl|Commander 2015|225|U|{1}{G}{U}|Creature - Snake|2|2|Whenever you draw a card, you may put a +1/+1 counter on Lorescale Coatl.| +Lotleth Troll|Commander 2015|226|R|{B}{G}|Creature - Zombie Troll|2|1|Trample$Discard a creature card: Put a +1/+1 counter on Lotleth Troll.${B}: Regenerate Lotleth Troll.| +Melek, Izzet Paragon|Commander 2015|227|R|{4}{U}{R}|Legendary Creature - Weird Wizard|2|4|Play with the top card of your library revealed.$You may cast the top card of your library if it's an instant or sorcery card.$Whenever you cast an instant or sorcery spell from your library, copy it. You may choose new targets for the copy.| +Mystic Snake|Commander 2015|228|R|{1}{G}{U}{U}|Creature - Snake|2|2|Flash$When Mystic Snake enters the battlefield, counter target spell.| +Necromancer's Covenant|Commander 2015|229|R|{3}{W}{B}{B}|Enchantment|||When Necromancer's Covenant enters the battlefield, exile all creature cards from target player's graveyard, then put a 2/2 black Zombie creature token onto the battlefield for each card exiled this way.$Zombies you control have lifelink.| +Wretched Confluence|Commander 2015|23|R|{3}{B}{B}|Instant|||Choose three. You may choose the same mode more than once.$• Target player draws a card and loses 1 life.$• Target creature gets -2/-2 until end of turn.$• Return target creature card from your graveyard to your hand.| +Prime Speaker Zegana|Commander 2015|230|M|{2}{G}{G}{U}{U}|Legendary Creature - Merfolk Wizard|1|1|Prime Speaker Zegana enters the battlefield with X +1/+1 counters on it, where X is the greatest power among other creatures you control.$When Prime Speaker Zegana enters the battlefield, draw cards equal to its power.| +Prophetic Bolt|Commander 2015|231|R|{3}{U}{R}|Instant|||Prophetic Bolt deals 4 damage to target creature or player. Look at the top four cards of your library. Put one of those cards into your hand and the rest on the bottom of your library in any order.| +Putrefy|Commander 2015|232|U|{1}{B}{G}|Instant|||Destroy target artifact or creature. It can't be regenerated.| +Steam Augury|Commander 2015|233|R|{2}{U}{R}|Instant|||Reveal the top five cards of your library and separate them into two piles. An opponent chooses one of those piles. Put that pile into your hand and the other into your graveyard.| +Teysa, Envoy of Ghosts|Commander 2015|234|R|{5}{W}{B}|Legendary Creature - Human Advisor|4|4|Vigilance, protection from creatures$Whenever a creature deals combat damage to you, destroy that creature. Put a 1/1 white and black Spirit creature token with flying onto the battlefield.| +Treasury Thrull|Commander 2015|235|R|{4}{W}{B}|Creature - Thrull|4|4|Extort (Whenever you cast a spell, you may pay {WB}. If you do, each opponent loses 1 life and you gain that much life.)$Whenever Treasury Thrull attacks, you may return target artifact, creature, or enchantment card from your graveyard to your hand.| +Trygon Predator|Commander 2015|236|U|{1}{G}{U}|Creature - Beast|2|3|Flying$Whenever Trygon Predator deals combat damage to a player, you may destroy target artifact or enchantment that player controls.| +Underworld Coinsmith|Commander 2015|237|U|{W}{B}|Enchantment Creature - Human Cleric|2|2|Constellation - Whenever Underworld Coinsmith or another enchantment enters the battlefield under your control, you gain 1 life.${W}{B}, Pay 1 life: Each opponent loses 1 life.| +Vulturous Zombie|Commander 2015|238|R|{3}{B}{G}|Creature - Plant Zombie|3|3|Flying$Whenever a card is put into an opponent's graveyard from anywhere, put a +1/+1 counter on Vulturous Zombie.| +Biomantic Mastery|Commander 2015|239|R|{4}{GU}{GU}{GU}|Sorcery|||Draw a card for each creature target player controls, then draw a card for each creature another target player controls.| +Awaken the Sky Tyrant|Commander 2015|24|R|{3}{R}|Enchantment|||When a source an opponent controls deals damage to you, sacrifice Awaken the Sky Tyrant. If you do, put a 5/5 red Dragon creature token with flying onto the battlefield.| +Call the Skybreaker|Commander 2015|240|R|{5}{UR}{UR}|Sorcery|||Put a 5/5 blue and red Elemental creature token with flying onto the battlefield.$Retrace (You may cast this card from your graveyard by discarding a land card in addition to paying its other costs.)| +Cold-Eyed Selkie|Commander 2015|241|R|{1}{GU}{GU}|Creature - Merfolk Rogue|1|1|Islandwalk (This creature can't be blocked as long as defending player controls an Island.)$Whenever Cold-Eyed Selkie deals combat damage to a player, you may draw that many cards.| +Snakeform|Commander 2015|242|C|{2}{GU}|Instant|||Until end of turn, target creature loses all abilities and becomes a green Snake with base power and toughness 1/1.$Draw a card.| +Wistful Selkie|Commander 2015|243|U|{GU}{GU}{GU}|Creature - Merfolk Wizard|2|2|When Wistful Selkie enters the battlefield, draw a card.| +Basalt Monolith|Commander 2015|244|U|{3}|Artifact|||Basalt Monolith doesn't untap during your untap step.${tap}: Add {3} to your mana pool.${3}: Untap Basalt Monolith.| +Bonehoard|Commander 2015|245|R|{4}|Artifact - Equipment|||Living weapon (When this Equipment enters the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it.)$Equipped creature gets +X/+X, where X is the number of creature cards in all graveyards.$Equip {2}| +Boros Cluestone|Commander 2015|246|C|{3}|Artifact|||{tap}: Add {R} or {W} to your mana pool.${R}{W}, {tap}, Sacrifice Boros Cluestone: Draw a card.| +Boros Signet|Commander 2015|247|C|{2}|Artifact|||{1}, {tap}: Add {R}{W} to your mana pool.| +Burnished Hart|Commander 2015|248|U|{3}|Artifact Creature - Elk|2|2|{3}, Sacrifice Burnished Hart: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library.| +Coldsteel Heart|Commander 2015|249|U|{2}|Snow Artifact|||Coldsteel Heart enters the battlefield tapped.$As Coldsteel Heart enters the battlefield, choose a color.${tap}: Add one mana of the chosen color to your mana pool.| Dream Pillager|Commander 2015|25|R|{5}{R}{R}|Creature - Dragon|4|4|Flying$Whenever Dream Pillager deals combat damage to a player, exile that many cards from the top of your library. Until end of turn, you may cast nonland cards exiled this way.| -Fiery Confluence|Commander 2015|26|R|{2}{R}{R}|Sorcery|||Choose three. You may choose the same mode more than once. - Fiery Confluence deals 1 damage to each creature; Fiery Confluence deals 2 damage to each opponent; Destroy target artifact.| -Magus of the Wheel|Commander 2015|27|R|{2}{R}|Creature - Human Wizard|3|3|{1}{R}, {T}, Sacrifice Magus of the Wheel: Each player discards his or her hand, then draws seven cards.| -Meteor Volley|Commander 2015|28|U|{X}{R}{R}{R}|Sorcery|||Meteor Volley deals 4 damage to each of X target creatures and/or players.| +Crystal Chimes|Commander 2015|250|U|{3}|Artifact|||{3}, {tap}, Sacrifice Crystal Chimes: Return all enchantment cards from your graveyard to your hand.| +Darksteel Ingot|Commander 2015|251|U|{3}|Artifact|||Indestructible${tap}: Add one mana of any color to your mana pool.| +Dreamstone Hedron|Commander 2015|252|U|{6}|Artifact|||{tap}: Add {3} to your mana pool.${3}, {tap}, Sacrifice Dreamstone Hedron: Draw three cards.| +Eldrazi Monument|Commander 2015|253|M|{5}|Artifact|||Creatures you control get +1/+1 and have flying and indestructible.$At the beginning of your upkeep, sacrifice a creature. If you can't, sacrifice Eldrazi Monument.| +Fellwar Stone|Commander 2015|254|U|{2}|Artifact|||{tap}: Add to your mana pool one mana of any color that a land an opponent controls could produce.| +Golgari Signet|Commander 2015|255|C|{2}|Artifact|||{1}, {tap}: Add {B}{G} to your mana pool.| +Izzet Signet|Commander 2015|256|C|{2}|Artifact|||{1}, {tap}: Add {U}{R} to your mana pool.| +Lightning Greaves|Commander 2015|257|U|{2}|Artifact - Equipment|||Equipped creature has haste and shroud. (It can't be the target of spells or abilities.)$Equip {0}| +Loxodon Warhammer|Commander 2015|258|R|{3}|Artifact - Equipment|||Equipped creature gets +3/+0 and has trample and lifelink.$Equip {3}| +Mind Stone|Commander 2015|259|U|{2}|Artifact|||{tap}: Add {1} to your mana pool.${1}, {tap}, Sacrifice Mind Stone: Draw a card.| +Fiery Confluence|Commander 2015|26|R|{2}{R}{R}|Sorcery|||Choose three. You may choose the same mode more than once.$• Fiery Confluence deals 1 damage to each creature.$• Fiery Confluence deals 2 damage to each opponent.$• Destroy target artifact.| +Orochi Hatchery|Commander 2015|260|R|{X}{X}|Artifact|||Orochi Hatchery enters the battlefield with X charge counters on it.${5}, {tap}: Put a 1/1 green Snake creature token onto the battlefield for each charge counter on Orochi Hatchery.| +Orzhov Cluestone|Commander 2015|261|C|{3}|Artifact|||{tap}: Add {W} or {B} to your mana pool.${W}{B}, {tap}, Sacrifice Orzhov Cluestone: Draw a card.| +Orzhov Signet|Commander 2015|262|C|{2}|Artifact|||{1}, {tap}: Add {W}{B} to your mana pool.| +Psychosis Crawler|Commander 2015|263|R|{5}|Artifact Creature - Horror|*|*|Psychosis Crawler's power and toughness are each equal to the number of cards in your hand.$Whenever you draw a card, each opponent loses 1 life.| +Seer's Sundial|Commander 2015|264|R|{4}|Artifact|||Landfall - Whenever a land enters the battlefield under your control, you may pay {2}. If you do, draw a card.| +Simic Keyrune|Commander 2015|265|U|{3}|Artifact|||{tap}: Add {G} or {U} to your mana pool.${G}{U}: Simic Keyrune becomes a 2/3 green and blue Crab artifact creature with hexproof until end of turn. (It can't be the target of spells or abilities your opponents control.)| +Simic Signet|Commander 2015|266|C|{2}|Artifact|||{1}, {tap}: Add {G}{U} to your mana pool.| +Skullclamp|Commander 2015|267|U|{1}|Artifact - Equipment|||Equipped creature gets +1/-1.$Whenever equipped creature dies, draw two cards.$Equip {1}| +Sol Ring|Commander 2015|268|U|{1}|Artifact|||{tap}: Add {2} to your mana pool.| +Solemn Simulacrum|Commander 2015|269|R|{4}|Artifact Creature - Golem|2|2|When Solemn Simulacrum enters the battlefield, you may search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library.$When Solemn Simulacrum dies, you may draw a card.| +Magus of the Wheel|Commander 2015|27|R|{2}{R}|Creature - Human Wizard|3|3|{1}{R}, {tap}, Sacrifice Magus of the Wheel: Each player discards his or her hand, then draws seven cards.| +Staff of Nin|Commander 2015|270|R|{6}|Artifact|||At the beginning of your upkeep, draw a card.${tap}: Staff of Nin deals 1 damage to target creature or player.| +Swiftfoot Boots|Commander 2015|271|U|{2}|Artifact - Equipment|||Equipped creature has hexproof and haste.$Equip {1}| +Sword of Vengeance|Commander 2015|272|R|{3}|Artifact - Equipment|||Equipped creature gets +2/+0 and has first strike, vigilance, trample, and haste.$Equip {3}| +Urza's Incubator|Commander 2015|273|R|{3}|Artifact|||As Urza's Incubator enters the battlefield, choose a creature type.$Creature spells of the chosen type cost {2} less to cast.| +Wayfarer's Bauble|Commander 2015|274|C|{1}|Artifact|||{2}, {tap}, Sacrifice Wayfarer's Bauble: Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.| +Worn Powerstone|Commander 2015|275|U|{3}|Artifact|||Worn Powerstone enters the battlefield tapped.${tap}: Add {2} to your mana pool.| +Ancient Amphitheater|Commander 2015|276|R||Land|||As Ancient Amphitheater enters the battlefield, you may reveal a Giant card from your hand. If you don't, Ancient Amphitheater enters the battlefield tapped.${tap}: Add {R} or {W} to your mana pool.| +Barren Moor|Commander 2015|277|C||Land|||Barren Moor enters the battlefield tapped.${tap}: Add {B} to your mana pool.$Cycling {B} ({B}, Discard this card: Draw a card.)| +Blasted Landscape|Commander 2015|278|U||Land|||{tap}: Add {1} to your mana pool.$Cycling {2} ({2}, Discard this card: Draw a card.)| +Boros Garrison|Commander 2015|279|C||Land|||Boros Garrison enters the battlefield tapped.$When Boros Garrison enters the battlefield, return a land you control to its owner's hand.${tap}: Add {R}{W} to your mana pool.| +Meteor Blast|Commander 2015|28|U|{X}{R}{R}{R}|Sorcery|||Meteor Blast deals 4 damage to each of X target creatures and/or players.| +Boros Guildgate|Commander 2015|280|C||Land - Gate|||Boros Guildgate enters the battlefield tapped.${tap}: Add {R} or {W} to your mana pool.| +Command Tower|Commander 2015|281|C||Land|||{tap}: Add to your mana pool one mana of any color in your commander's color identity.| +Drifting Meadow|Commander 2015|282|C||Land|||Drifting Meadow enters the battlefield tapped.${tap}: Add {W} to your mana pool.$Cycling {2} ({2}, Discard this card: Draw a card.)| +Evolving Wilds|Commander 2015|283|C||Land|||{tap}, Sacrifice Evolving Wilds: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.| +Forgotten Cave|Commander 2015|284|C||Land|||Forgotten Cave enters the battlefield tapped.${tap}: Add {R} to your mana pool.$Cycling {R} ({R}, Discard this card: Draw a card.)| +Ghost Quarter|Commander 2015|285|U||Land|||{tap}: Add {1} to your mana pool.${tap}, Sacrifice Ghost Quarter: Destroy target land. Its controller may search his or her library for a basic land card, put it onto the battlefield, then shuffle his or her library.| +Golgari Guildgate|Commander 2015|286|C||Land - Gate|||Golgari Guildgate enters the battlefield tapped.${tap}: Add {B} or {G} to your mana pool.| +Golgari Rot Farm|Commander 2015|287|C||Land|||Golgari Rot Farm enters the battlefield tapped.$When Golgari Rot Farm enters the battlefield, return a land you control to its owner's hand.${tap}: Add {B}{G} to your mana pool.| +Grim Backwoods|Commander 2015|288|R||Land|||{tap}: Add {1} to your mana pool.${2}{B}{G}, {tap}, Sacrifice a creature: Draw a card.| +High Market|Commander 2015|289|R||Land|||{tap}: Add {1} to your mana pool.${tap}, Sacrifice a creature: You gain 1 life.| Mizzix's Mastery|Commander 2015|29|R|{3}{R}|Sorcery|||Exile target card that's an instant or sorcery from your graveyard. For each card exiled this way, copy it, and you may cast the copy without paying its mana cost. Exile Mizzix's Mastery.$Overload {5}{R}{R}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")| +Izzet Boilerworks|Commander 2015|290|C||Land|||Izzet Boilerworks enters the battlefield tapped.$When Izzet Boilerworks enters the battlefield, return a land you control to its owner's hand.${tap}: Add {U}{R} to your mana pool.| +Izzet Guildgate|Commander 2015|291|C||Land - Gate|||Izzet Guildgate enters the battlefield tapped.${tap}: Add {U} or {R} to your mana pool.| +Jungle Hollow|Commander 2015|292|C||Land|||Jungle Hollow enters the battlefield tapped.$When Jungle Hollow enters the battlefield, you gain 1 life.${tap}: Add {B} or {G} to your mana pool.| +Llanowar Reborn|Commander 2015|293|U||Land|||Llanowar Reborn enters the battlefield tapped.${tap}: Add {G} to your mana pool.$Graft 1 (This land enters the battlefield with a +1/+1 counter on it. Whenever a creature enters the battlefield, you may move a +1/+1 counter from this land onto it.)| +Mosswort Bridge|Commander 2015|294|R||Land|||Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.)${tap}: Add {G} to your mana pool.${G}, {tap}: You may play the exiled card without paying its mana cost if creatures you control have total power 10 or greater.| +New Benalia|Commander 2015|295|U||Land|||New Benalia enters the battlefield tapped.$When New Benalia enters the battlefield, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)${tap}: Add {W} to your mana pool.| +Novijen, Heart of Progress|Commander 2015|296|U||Land|||{tap}: Add {1} to your mana pool.${G}{U}, {tap}: Put a +1/+1 counter on each creature that entered the battlefield this turn.| +Oran-Rief, the Vastwood|Commander 2015|297|R||Land|||Oran-Rief, the Vastwood enters the battlefield tapped.${tap}: Add {G} to your mana pool.${tap}: Put a +1/+1 counter on each green creature that entered the battlefield this turn.| +Orzhov Basilica|Commander 2015|298|C||Land|||Orzhov Basilica enters the battlefield tapped.$When Orzhov Basilica enters the battlefield, return a land you control to its owner's hand.${tap}: Add {W}{B} to your mana pool.| +Orzhov Guildgate|Commander 2015|299|C||Land - Gate|||Orzhov Guildgate enters the battlefield tapped.${tap}: Add {W} or {B} to your mana pool.| +Grasp of Fate|Commander 2015|3|R|{1}{W}{W}|Enchantment|||When Grasp of Fate enters the battlefield, for each opponent, exile up to one target nonland permanent that player controls until Grasp of Fate leaves the battlefield. (Those permanents return under their owners' control.)| Rite of the Raging Storm|Commander 2015|30|U|{3}{R}{R}|Enchantment|||Creatures named Lightning Rager can't attack you or planeswalkers you control.$At the beginning of each player's upkeep, that player puts a 5/1 red Elemental creature token named Lightning Rager onto the battlefield. It has trample, haste, and "At the beginning of the end step, sacrifice this creature."| +Polluted Mire|Commander 2015|300|C||Land|||Polluted Mire enters the battlefield tapped.${tap}: Add {B} to your mana pool.$Cycling {2} ({2}, Discard this card: Draw a card.)| +Reliquary Tower|Commander 2015|301|U||Land|||You have no maximum hand size.${tap}: Add {1} to your mana pool.| +Rogue's Passage|Commander 2015|302|U||Land|||{tap}: Add {1} to your mana pool.${4}, {tap}: Target creature can't be blocked this turn.| +Scoured Barrens|Commander 2015|303|C||Land|||Scoured Barrens enters the battlefield tapped.$When Scoured Barrens enters the battlefield, you gain 1 life.${tap}: Add {W} or {B} to your mana pool.| +Secluded Steppe|Commander 2015|304|C||Land|||Secluded Steppe enters the battlefield tapped.${tap}: Add {W} to your mana pool.$Cycling {W} ({W}, Discard this card: Draw a card.)| +Simic Growth Chamber|Commander 2015|305|C||Land|||Simic Growth Chamber enters the battlefield tapped.$When Simic Growth Chamber enters the battlefield, return a land you control to its owner's hand.${tap}: Add {G}{U} to your mana pool.| +Simic Guildgate|Commander 2015|306|C||Land - Gate|||Simic Guildgate enters the battlefield tapped.${tap}: Add {G} or {U} to your mana pool.| +Slippery Karst|Commander 2015|307|C||Land|||Slippery Karst enters the battlefield tapped.${tap}: Add {G} to your mana pool.$Cycling {2} ({2}, Discard this card: Draw a card.)| +Smoldering Crater|Commander 2015|308|C||Land|||Smoldering Crater enters the battlefield tapped.${tap}: Add {R} to your mana pool.$Cycling {2} ({2}, Discard this card: Draw a card.)| +Spinerock Knoll|Commander 2015|309|R||Land|||Hideaway (This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.)${tap}: Add {R} to your mana pool.${R}, {tap}: You may play the exiled card without paying its mana cost if an opponent was dealt 7 or more damage this turn.| Warchief Giant|Commander 2015|31|U|{3}{R}{R}|Creature - Giant Warrior|5|3|Haste$Myriad (Whenever this creature attacks, for each opponent other than defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)| +Swiftwater Cliffs|Commander 2015|310|C||Land|||Swiftwater Cliffs enters the battlefield tapped.$When Swiftwater Cliffs enters the battlefield, you gain 1 life.${tap}: Add {U} or {R} to your mana pool.| +Tainted Field|Commander 2015|311|U||Land|||{tap}: Add {1} to your mana pool.${tap}: Add {W} or {B} to your mana pool. Activate this ability only if you control a Swamp.| +Tainted Wood|Commander 2015|312|U||Land|||{tap}: Add {1} to your mana pool.${tap}: Add {B} or {G} to your mana pool. Activate this ability only if you control a Swamp.| +Temple of the False God|Commander 2015|313|U||Land|||{tap}: Add {2} to your mana pool. Activate this ability only if you control five or more lands.| +Terramorphic Expanse|Commander 2015|314|C||Land|||{tap}, Sacrifice Terramorphic Expanse: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.| +Thornwood Falls|Commander 2015|315|C||Land|||Thornwood Falls enters the battlefield tapped.$When Thornwood Falls enters the battlefield, you gain 1 life.${tap}: Add {G} or {U} to your mana pool.| +Vivid Crag|Commander 2015|316|U||Land|||Vivid Crag enters the battlefield tapped with two charge counters on it.${tap}: Add {R} to your mana pool.${tap}, Remove a charge counter from Vivid Crag: Add one mana of any color to your mana pool.| +Vivid Creek|Commander 2015|317|U||Land|||Vivid Creek enters the battlefield tapped with two charge counters on it.${tap}: Add {U} to your mana pool.${tap}, Remove a charge counter from Vivid Creek: Add one mana of any color to your mana pool.| +Vivid Grove|Commander 2015|318|U||Land|||Vivid Grove enters the battlefield tapped with two charge counters on it.${tap}: Add {G} to your mana pool.${tap}, Remove a charge counter from Vivid Grove: Add one mana of any color to your mana pool.| +Vivid Marsh|Commander 2015|319|U||Land|||Vivid Marsh enters the battlefield tapped with two charge counters on it.${tap}: Add {B} to your mana pool.${tap}, Remove a charge counter from Vivid Marsh: Add one mana of any color to your mana pool.| Arachnogenesis|Commander 2015|32|R|{2}{G}|Instant|||Put X 1/2 green Spider creature tokens with reach onto the battlefield, where X is the number of creatures attacking you. Prevent all combat damage that would be dealt this turn by non-Spider creatures.| -Bloodspore Thrinax|Commander 2015|33|R|{2}{G}{G}|Creature - Lizard|2|2|Devour 1 (As this enters the battlefield, you mya sacrifice any number of creatures. This creature enters the battlefield with that many +1/+1 counters on it.)$Each other creature you control enters the battlefield with an additional X +1/+1 counters on it, where X is the number of +1/+1 counters on Bloodspire Thrinax.| -Centaur Vinecrash|Commander 2015|35|R|{3}{G}|Creature - Centaur Plant|1|1|Trample$Vine Centaur enters the battlefield with a +1/+1 counter on it for each land in all graveyards.$Whenever a land is put into a graveyard from anywhere, you may pay {G}{G}. If you do, return Vine Centaur from your graveyard to the battlefield.| +Vivid Meadow|Commander 2015|320|U||Land|||Vivid Meadow enters the battlefield tapped with two charge counters on it.${tap}: Add {W} to your mana pool.${tap}, Remove a charge counter from Vivid Meadow: Add one mana of any color to your mana pool.| +Wind-Scarred Crag|Commander 2015|321|C||Land|||Wind-Scarred Crag enters the battlefield tapped.$When Wind-Scarred Crag enters the battlefield, you gain 1 life.${tap}: Add {R} or {W} to your mana pool.| +Zoetic Cavern|Commander 2015|322|U||Land|||{tap}: Add {1} to your mana pool.$Morph {2} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)| +Plains|Commander 2015|323|L||Basic Land - Plains|||W| +Plains|Commander 2015|324|L||Basic Land - Plains|||W| +Plains|Commander 2015|325|L||Basic Land - Plains|||W| +Plains|Commander 2015|326|L||Basic Land - Plains|||W| +Island|Commander 2015|327|L||Basic Land - Island|||U| +Island|Commander 2015|328|L||Basic Land - Island|||U| +Island|Commander 2015|329|L||Basic Land - Island|||U| +Bloodspore Thrinax|Commander 2015|33|R|{2}{G}{G}|Creature - Lizard|2|2|Devour 1 (As this enters the battlefield, you may sacrifice any number of creatures. This creature enters the battlefield with that many +1/+1 counters on it.)$Each other creature you control enters the battlefield with an additional X +1/+1 counters on it, where X is the number of +1/+1 counters on Bloodspore Thrinax.| +Island|Commander 2015|330|L||Basic Land - Island|||U| +Swamp|Commander 2015|331|L||Basic Land - Swamp|||B| +Swamp|Commander 2015|332|L||Basic Land - Swamp|||B| +Swamp|Commander 2015|333|L||Basic Land - Swamp|||B| +Swamp|Commander 2015|334|L||Basic Land - Swamp|||B| +Mountain|Commander 2015|335|L||Basic Land - Mountain|||R| +Mountain|Commander 2015|336|L||Basic Land - Mountain|||R| +Mountain|Commander 2015|337|L||Basic Land - Mountain|||R| +Mountain|Commander 2015|338|L||Basic Land - Mountain|||R| +Forest|Commander 2015|339|L||Basic Land - Forest|||G| +Caller of the Pack|Commander 2015|34|U|{5}{G}{G}|Creature - Beast|8|6|Trample$Myriad (Whenever this creature attacks, for each opponent other than defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)| +Forest|Commander 2015|340|L||Basic Land - Forest|||G| +Forest|Commander 2015|341|L||Basic Land - Forest|||G| +Forest|Commander 2015|342|L||Basic Land - Forest|||G| +Centaur Vinecrasher|Commander 2015|35|R|{3}{G}|Creature - Plant Centaur|1|1|Trample$Centaur Vinecrasher enters the battlefield with a number of +1/+1 counters on it equal to the number of land cards in all graveyards.$Whenever a land card is put into a graveyard from anywhere, you may pay {G}{G}. If you do, return Centaur Vinecrasher from your graveyard to your hand.| Ezuri's Predation|Commander 2015|36|R|{5}{G}{G}{G}|Sorcery|||For each creature your opponents control, put a 4/4 green Beast creature token onto the battlefield. Each of those Beasts fights a different one of those creatures.| Great Oak Guardian|Commander 2015|37|U|{5}{G}|Creature - Treefolk|4|5|Flash (You may cast this spell any time you could cast an instant.)$Reach$When Great Oak Guardian enters the battlefield, creatures target player controls get +2/+2 until end of turn. Untap them.| Pathbreaker Ibex|Commander 2015|38|R|{4}{G}{G}|Creature - Goat|3|3|Whenever Pathbreaker Ibex attacks, creatures you control gain trample and get +X/+X until end of turn, where X is the greatest power among creatures you control.| -Skullwinder|Commander 2015|39|U|{2}{G}|Creature - Snake|1|3|Deathtouch (Any amount of damage this creature deals to a creature is enough to destroy it.)$When Skullwinder enters the battlefield, return target card from your graveyard to your hand, then choose an opponent. That player returns a card from his or her graveyard to his or her hand.| -Verdant Confluence|Commander 2015|40|R|{4}{G}{G}|Sorcery|||Choose three. You may choose the same mode more than once. - Put two +1/+1 counters on target creature; Return target permanent card from your graveyard to your hand; Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.| +Skullwinder|Commander 2015|39|U|{2}{G}|Creature - Snake|1|3|Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)$When Skullwinder enters the battlefield, return target card from your graveyard to your hand, then choose an opponent. That player returns a card from his or her graveyard to his or her hand.| +Herald of the Host|Commander 2015|4|U|{3}{W}{W}|Creature - Angel|4|4|Flying, vigilance$Myriad (Whenever this creature attacks, for each opponent other than defending player, you may put a token that's a copy of this creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)| +Verdant Confluence|Commander 2015|40|R|{4}{G}{G}|Sorcery|||Choose three. You may choose the same mode more than once.$• Put two +1/+1 counters on target creature.$• Return target permanent card from your graveyard to your hand.$• Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.| Anya, Merciless Angel|Commander 2015|41|M|{3}{R}{W}|Legendary Creature - Angel|4|4|Flying$Anya, Merciless Angel gets +3/+3 for each opponent whose life total is less than half his or her starting life total.$As long as an opponent's life total is less than half his or her starting life total, Anya has indestructible.| Arjun, the Shifting Flame|Commander 2015|42|M|{4}{U}{R}|Legendary Creature - Sphinx Wizard|5|5|Flying$Whenever you cast a spell, put the cards in your hand on the bottom of your library in any order, then draw that many cards.| Daxos the Returned|Commander 2015|43|M|{1}{W}{B}|Legendary Creature - Zombie Soldier|2|2|Whenever you cast an enchantment spell, you get an experience counter.${1}{W}{B}: Put a white and black Spirit enchantment creature token onto the battlefield. It has "This creature's power and toughness are each equal to the number of experience counters you have."| Ezuri, Claw of Progress|Commander 2015|44|M|{2}{G}{U}|Legendary Creature - Elf Warrior|3|3|Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.$At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have.| Kalemne, Disciple of Iroas|Commander 2015|45|M|{2}{R}{W}|Legendary Creature - Giant Soldier|3|3|Double strike, vigilance$Whenever you cast a creature spell with converted mana cost 5 or greater, you get an experience counter.$Kalemne, Disciple of Iroas gets +1/+1 for each experience counter you have.| -Karlov of the Ghost Council|Commander 2015|46|M|{W}{B}|Legendary Creature - Spirit Advisor|2|2|Whenever you gain life, put two +1/+1 counter on Karlov of the Ghost Council.${W}{B}, Remove six +1/+1 counters from Karlov of the Ghost Council: Exile target creature.| +Karlov of the Ghost Council|Commander 2015|46|M|{W}{B}|Legendary Creature - Spirit Advisor|2|2|Whenever you gain life, put two +1/+1 counters on Karlov of the Ghost Council.${W}{B}, Remove six +1/+1 counters from Karlov of the Ghost Council: Exile target creature.| Kaseto, Orochi Archmage|Commander 2015|47|M|{1}{G}{U}|Legendary Creature - Snake Wizard|2|2|{G}{U}: Target creature can't be blocked this turn. If that creature is a Snake, it gets +2/+2 until end of turn.| Mazirek, Kraul Death Priest|Commander 2015|48|M|{3}{B}{G}|Legendary Creature - Insect Shaman|2|2|Flying$Whenever a player sacrifices another permanent, put a +1/+1 counter on each creature you control.| Meren of Clan Nel Toth|Commander 2015|49|M|{2}{B}{G}|Legendary Creature - Human Shaman|3|4|Whenever another creature you control dies, you get an experience counter.$At the beginning of your end step, choose target creature card in your graveyard. If that card's converted mana cost is less than or equal to the number of experience counters you have, return it to the battlefield. Otherwise, put it into your hand.| +Kalemne's Captain|Commander 2015|5|R|{3}{W}{W}|Creature - Giant Soldier|5|5|Vigilance${5}{W}{W}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.)$When Kalemne's Captain becomes monstrous, exile all artifacts and enchantments.| Mizzix of the Izmagnus|Commander 2015|50|M|{2}{U}{R}|Legendary Creature - Goblin Wizard|2|2|Whenever you cast an instant or sorcery spell with converted mana cost greater than the number of experience counters you have, you get an experience counter.$Instant and sorcery spells you cast cost {1} less to cast for each experience counter you have.| Blade of Selves|Commander 2015|51|R|{2}|Artifact - Equipment|||Equipped creature has myriad. (Whenever it attacks, for each opponent other than defending player, you may put a token that's a copy of that creature onto the battlefield tapped and attacking that player or a planeswalker he or she controls. Exile the tokens at end of combat.)$Equip {4}| -Sandstone Oracle|Commander 2015|52|U|{7}|Artifact Creature - Sphinx|4|4|Flying$When Sandstone Oracle enters the battlefield, choose an opponent. If that player has more cards in hand that you, draw cards equal to the difference.| -Scytheclaw|Commander 2015|53|R|{5}|Artifact - Equipment|||Living weapon (When this Equipment enter the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it.)$Equipped creature gets +1/+1.$Whenever equipped creature deals combat damage to a player, that player loses half of his or her life, round up.$Equip {3}| +Sandstone Oracle|Commander 2015|52|U|{7}|Artifact Creature - Sphinx|4|4|Flying$When Sandstone Oracle enters the battlefield, choose an opponent. If that player has more cards in hand than you, draw cards equal to the difference.| +Scytheclaw|Commander 2015|53|R|{5}|Artifact - Equipment|||Living weapon (When this Equipment enters the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it.)$Equipped creature gets +1/+1.$Whenever equipped creature deals combat damage to a player, that player loses half his or her life, rounded up.$Equip {3}| Seal of the Guildpact|Commander 2015|54|R|{5}|Artifact|||As Seal of the Guildpact enters the battlefield, choose two colors.$Each spell you cast costs {1} less to cast for each of the chosen colors it is.| -Thought Vessel|Commander 2015|55|C|{2}|Artifact|||You have no maximum hand size.${T}: Add {1} to your mana pool.| -Command Beacon|Commander 2015|56|R||Land|||{T}: Add {1} to your mana pool.${T}, Sacrifice Command Beacon: Put your commander into your hand from the command zone.| +Thought Vessel|Commander 2015|55|C|{2}|Artifact|||You have no maximum hand size.${tap}: Add {1} to your mana pool.| +Command Beacon|Commander 2015|56|R||Land|||{tap}: Add {1} to your mana pool.${tap}, Sacrifice Command Beacon: Put your commander into your hand from the command zone.| +Ajani's Chosen|Commander 2015|57|R|{2}{W}{W}|Creature - Cat Soldier|3|3|Whenever an enchantment enters the battlefield under your control, put a 2/2 white Cat creature token onto the battlefield. If that enchantment is an Aura, you may attach it to the token.| Angel of Serenity|Commander 2015|58|M|{4}{W}{W}{W}|Creature - Angel|5|6|Flying$When Angel of Serenity enters the battlefield, you may exile up to three other target creatures from the battlefield and/or creature cards from graveyards.$When Angel of Serenity leaves the battlefield, return the exiled cards to their owners' hands.| -Karmic Justic|Commander 2015|72|R|{2}{W}|Enchantment|||Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls.| -Black Market|Commander 2015|116|R|{3}{B}{B}|Enchantment|||Whenever a creature dies, put a charge counter on Black Market.$At the beginning of your precombat main phase, add {B} to your mana pool for each charge counter on Black Market.| -Eternal Witness|Commander 2015|183|U|{1}{G}{G}|Creature - Human Shaman|2|1|When Eternal Witness enters the battlefield, you may return target card from your graveyard to your hand.| -Spider Spawning|Commander 2015|202|U|{4}{G}|Sorcery|||Put a 1/2 green Spider creature token with reach onto the battlefield for each creature card in your graveyard.$Flashback {6}{B} (You may cast this card from your graveyard for its flashback cost. Then exile it.)| -Coiling Oracle|Commander 2015|213|C|{U}{G}|Creature - Snake Elf Druid|1|1|When Coiling Oracle enters the battlefield, reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put that card into your hand.| -Counterflux|Commander 2015|214|R|{U}{U}{R}|Instant|||Counterflux can't be countered by spells or abilities.$Counter target spell you don't control.$Overload {1}{U}{U}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")| -Death Grasp|Commander 2015|215|R|{X}{W}{B}|Sorcery|||Death Grasp deals X damage to target creature or player. You gain X life.| -Gisela, Blade of Goldnight|Commander 2015|219|M|{4}{R}{W}{W}|Legendary Creature - Angel|5|5|Flying, first strike$If a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead.$If a source would deal damage to you or a permanent you control, prevent half that damage, rounded up.| -Urza's Incubator|Commander 2015|273|R|{3}|Artifact|||As Urza's Incubator enters the battlefield, choose a creature type.$Creature spells of the chosen type cost {2} less to cast.| \ No newline at end of file +Arbiter of Knollridge|Commander 2015|59|R|{6}{W}|Creature - Giant Wizard|5|5|Vigilance$When Arbiter of Knollridge enters the battlefield, each player's life total becomes the highest life total among all players.| +Oreskos Explorer|Commander 2015|6|U|{1}{W}|Creature - Cat Scout|2|2|When Oreskos Explorer enters the battlefield, search your library for up to X Plains cards, where X is the number of players who control more lands than you. Reveal those cards, put them into your hand, then shuffle your library.| +Aura of Silence|Commander 2015|60|U|{1}{W}{W}|Enchantment|||Artifact and enchantment spells your opponents cast cost {2} more to cast.$Sacrifice Aura of Silence: Destroy target artifact or enchantment.| +Banishing Light|Commander 2015|61|U|{2}{W}|Enchantment|||When Banishing Light enters the battlefield, exile target nonland permanent an opponent controls until Banishing Light leaves the battlefield. (That permanent returns under its owner's control.)| +Cage of Hands|Commander 2015|62|C|{2}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature can't attack or block.${1}{W}: Return Cage of Hands to its owner's hand.| +Celestial Ancient|Commander 2015|63|R|{3}{W}{W}|Creature - Elemental|3|3|Flying$Whenever you cast an enchantment spell, put a +1/+1 counter on each creature you control.| +Celestial Archon|Commander 2015|64|R|{3}{W}{W}|Enchantment Creature - Archon|4|4|Bestow {5}{W}{W} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)$Flying, first strike$Enchanted creature gets +4/+4 and has flying and first strike.| +Crib Swap|Commander 2015|65|U|{2}{W}|Tribal Instant - Shapeshifter|||Changeling (This card is every creature type at all times.)$Exile target creature. Its controller puts a 1/1 colorless Shapeshifter creature token with changeling onto the battlefield.| +Dawn to Dusk|Commander 2015|66|U|{2}{W}{W}|Sorcery|||Choose one or both -$• Return target enchantment card from your graveyard to your hand.$• Destroy target enchantment.| +Dawnglare Invoker|Commander 2015|67|C|{2}{W}|Creature - Kor Wizard|2|1|Flying${8}: Tap all creatures target player controls.| +Dictate of Heliod|Commander 2015|68|R|{3}{W}{W}|Enchantment|||Flash$Creatures you control get +2/+2.| +Faith's Fetters|Commander 2015|69|C|{3}{W}|Enchantment - Aura|||Enchant permanent$When Faith's Fetters enters the battlefield, you gain 4 life.$Enchanted permanent's activated abilities can't be activated unless they're mana abilities. If enchanted permanent is a creature, it can't attack or block.| +Righteous Confluence|Commander 2015|7|R|{3}{W}{W}|Sorcery|||Choose three. You may choose the same mode more than once.$• Put a 2/2 white Knight creature token with vigilance onto the battlefield.$• Exile target enchantment.$• You gain 5 life.| +Ghostblade Eidolon|Commander 2015|70|U|{2}{W}|Enchantment Creature - Spirit|1|1|Bestow {5}{W} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)$Double strike (This creature deals both first-strike and regular combat damage.)$Enchanted creature gets +1/+1 and has double strike.| +Jareth, Leonine Titan|Commander 2015|71|R|{3}{W}{W}{W}|Legendary Creature - Cat Giant|4|7|Whenever Jareth, Leonine Titan blocks, it gets +7/+7 until end of turn.${W}: Jareth gains protection from the color of your choice until end of turn.| +Karmic Justice|Commander 2015|72|R|{2}{W}|Enchantment|||Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls.| +Kor Sanctifiers|Commander 2015|73|C|{2}{W}|Creature - Kor Cleric|2|3|Kicker {W} (You may pay an additional {W} as you cast this spell.)$When Kor Sanctifiers enters the battlefield, if it was kicked, destroy target artifact or enchantment.| +Marshal's Anthem|Commander 2015|74|R|{2}{W}{W}|Enchantment|||Multikicker {1}{W} (You may pay an additional {1}{W} any number of times as you cast this spell.)$Creatures you control get +1/+1.$When Marshal's Anthem enters the battlefield, return up to X target creature cards from your graveyard to the battlefield, where X is the number of times Marshal's Anthem was kicked.| +Mesa Enchantress|Commander 2015|75|R|{1}{W}{W}|Creature - Human Druid|0|2|Whenever you cast an enchantment spell, you may draw a card.| +Monk Idealist|Commander 2015|76|U|{2}{W}|Creature - Human Monk Cleric|2|2|When Monk Idealist enters the battlefield, return target enchantment card from your graveyard to your hand.| +Open the Vaults|Commander 2015|77|R|{4}{W}{W}|Sorcery|||Return all artifact and enchantment cards from all graveyards to the battlefield under their owners' control. (Auras with nothing to enchant remain in graveyards.)| +Orim's Thunder|Commander 2015|78|C|{2}{W}|Instant|||Kicker {R} (You may pay an additional {R} as you cast this spell.)$Destroy target artifact or enchantment. If Orim's Thunder was kicked, it deals damage equal to that permanent's converted mana cost to target creature.| +Seal of Cleansing|Commander 2015|79|C|{1}{W}|Enchantment|||Sacrifice Seal of Cleansing: Destroy target artifact or enchantment.| +Shielded by Faith|Commander 2015|8|R|{1}{W}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature has indestructible.$Whenever a creature enters the battlefield, you may attach Shielded by Faith to that creature.| +Sigil of the Empty Throne|Commander 2015|80|R|{3}{W}{W}|Enchantment|||Whenever you cast an enchantment spell, put a 4/4 white Angel creature token with flying onto the battlefield.| +Silent Sentinel|Commander 2015|81|R|{5}{W}{W}|Creature - Archon|4|6|Flying$Whenever Silent Sentinel attacks, you may return target enchantment card from your graveyard to the battlefield.| +Sun Titan|Commander 2015|82|M|{4}{W}{W}|Creature - Giant|6|6|Vigilance$Whenever Sun Titan enters the battlefield or attacks, you may return target permanent card with converted mana cost 3 or less from your graveyard to the battlefield.| +Victory's Herald|Commander 2015|83|R|{3}{W}{W}{W}|Creature - Angel|4|4|Flying$Whenever Victory's Herald attacks, attacking creatures gain flying and lifelink until end of turn.| +Vow of Duty|Commander 2015|84|U|{2}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +2/+2, has vigilance, and can't attack you or a planeswalker you control.| +AEtherize|Commander 2015|85|U|{3}{U}|Instant|||Return all attacking creatures to their owner's hand.| +Bident of Thassa|Commander 2015|86|R|{2}{U}{U}|Legendary Enchantment Artifact|||Whenever a creature you control deals combat damage to a player, you may draw a card.${1}{U}, {tap}: Creatures your opponents control attack this turn if able.| +Blatant Thievery|Commander 2015|87|R|{4}{U}{U}{U}|Sorcery|||For each opponent, gain control of target permanent that player controls.| +Blue Sun's Zenith|Commander 2015|88|R|{X}{U}{U}{U}|Instant|||Target player draws X cards. Shuffle Blue Sun's Zenith into its owner's library.| +Blustersquall|Commander 2015|89|U|{U}|Instant|||Tap target creature you don't control.$Overload {3}{U} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.")| +AEthersnatch|Commander 2015|9|R|{4}{U}{U}|Instant|||Gain control of target spell. You may choose new targets for it. (If that spell becomes a permanent, it enters the battlefield under your control.)| +Brainstorm|Commander 2015|90|C|{U}|Instant|||Draw three cards, then put two cards from your hand on top of your library in any order.| +Day of the Dragons|Commander 2015|91|R|{4}{U}{U}{U}|Enchantment|||When Day of the Dragons enters the battlefield, exile all creatures you control. Then put that many 5/5 red Dragon creature tokens with flying onto the battlefield.$When Day of the Dragons leaves the battlefield, sacrifice all Dragons you control. Then return the exiled cards to the battlefield under your control.| +Dominate|Commander 2015|92|U|{X}{1}{U}{U}|Instant|||Gain control of target creature with converted mana cost X or less.| +Echoing Truth|Commander 2015|93|C|{1}{U}|Instant|||Return target nonland permanent and all other permanents with the same name as that permanent to their owners' hands.| +Fact or Fiction|Commander 2015|94|U|{3}{U}|Instant|||Reveal the top five cards of your library. An opponent separates those cards into two piles. Put one pile into your hand and the other into your graveyard.| +Jace's Archivist|Commander 2015|95|R|{1}{U}{U}|Creature - Vedalken Wizard|2|2|{U}, {tap}: Each player discards his or her hand, then draws cards equal to the greatest number of cards a player discarded this way.| +Lone Revenant|Commander 2015|96|R|{3}{U}{U}|Creature - Spirit|4|4|Hexproof (This creature can't be the target of spells or abilities your opponents control.)$Whenever Lone Revenant deals combat damage to a player, if you control no other creatures, look at the top four cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.| +Mulldrifter|Commander 2015|97|U|{4}{U}|Creature - Elemental|2|2|Flying$When Mulldrifter enters the battlefield, draw two cards.$Evoke {2}{U} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.)| +Mystic Retrieval|Commander 2015|98|U|{3}{U}|Sorcery|||Return target instant or sorcery card from your graveyard to your hand.$Flashback {2}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.)| +Ninja of the Deep Hours|Commander 2015|99|C|{3}{U}|Creature - Human Ninja|2|2|Ninjutsu {1}{U} ({1}{U}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)$Whenever Ninja of the Deep Hours deals combat damage to a player, you may draw a card.| diff --git a/clean_dbs.sh b/clean_dbs.sh old mode 100644 new mode 100755 index 9ccf51fd6d..48141fedae --- a/clean_dbs.sh +++ b/clean_dbs.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash # Cleans the DB from Server, Client and Test modules -find . -type f | grep -i cards.h2*.db | xargs rm -v \ No newline at end of file +find . -type f -iname 'cards.h2*.db' -print -delete