diff --git a/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond — Clothes in a Bag.dck b/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck similarity index 92% rename from Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond — Clothes in a Bag.dck rename to Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck index 89855a54e6..5e5d8f8e1e 100644 --- a/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond — Clothes in a Bag.dck +++ b/Mage.Client/release/sample-decks/2013/Modern/DailyMTG/Krond - Clothes in a Bag.dck @@ -1,4 +1,4 @@ -NAME:Krond — Clothes in a Bag +NAME:Krond — Clothes in a Bag 1 [CHK:10] Ghostly Prison 2 [PC2:9] Kor Spiritdancer 4 [M13:185] Rancor diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Affinity – Alex Ledo.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Affinity - Alex Ledo.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Affinity – Alex Ledo.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Affinity - Alex Ledo.dck index 0210458ec5..e883b2e0ad 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Affinity – Alex Ledo.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Affinity - Alex Ledo.dck @@ -1,4 +1,4 @@ -NAME:Affinity – Alex Ledo +NAME:Affinity – Alex Ledo 2 [DDF:71] Thoughtcast 4 [HOP:110] Cranial Plating 4 [MMA:220] Blinkmoth Nexus diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control – Jeremiah Duggan.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control - Jeremiah Duggan.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control – Jeremiah Duggan.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control - Jeremiah Duggan.dck index 3cb4a046ff..b5a94611f3 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control – Jeremiah Duggan.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control - Jeremiah Duggan.dck @@ -1,4 +1,4 @@ -NAME:Cruel Control – Jeremiah Duggan +NAME:Cruel Control – Jeremiah Duggan 1 [WWK:134] Creeping Tar Pit 1 [PLC:85] Damnation 1 [RTR:238] Blood Crypt diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control – Scott Lewis.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control - Scott Lewis.dck similarity index 93% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control – Scott Lewis.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control - Scott Lewis.dck index 2e9c975da1..74aee52fc6 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control – Scott Lewis.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Cruel Control - Scott Lewis.dck @@ -1,4 +1,4 @@ -NAME:Cruel Control – Scott Lewis +NAME:Cruel Control – Scott Lewis 1 [WWK:134] Creeping Tar Pit 1 [PLC:85] Damnation 2 [RTR:238] Blood Crypt diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Mono-Red Burn – Eric Rath.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Mono-Red Burn - Eric Rath.dck similarity index 90% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Mono-Red Burn – Eric Rath.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Mono-Red Burn - Eric Rath.dck index 835316b641..5f97696ebd 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Mono-Red Burn – Eric Rath.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Mono-Red Burn - Eric Rath.dck @@ -1,4 +1,4 @@ -NAME:Mono-Red Burn – Eric Rath +NAME:Mono-Red Burn – Eric Rath 4 [10E:237] Spark Elemental 4 [M11:149] Lightning Bolt 4 [ZEN:211] Arid Mesa diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/RG Tron – Jacob Wilson.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/RG Tron - Jacob Wilson.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/RG Tron – Jacob Wilson.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/RG Tron - Jacob Wilson.dck index 71d2f24dbc..2d8fd90f67 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/RG Tron – Jacob Wilson.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/RG Tron - Jacob Wilson.dck @@ -1,4 +1,4 @@ -NAME:RG Tron – Jacob Wilson +NAME:RG Tron – Jacob Wilson 4 [10E:302] Sylvan Scrying 4 [ROE:174] Ancient Stirrings 4 [CMD:254] Oblivion Stone diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Soul Sisters – Chris Folk.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Soul Sisters - Chris Folk.dck similarity index 91% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Soul Sisters – Chris Folk.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Soul Sisters - Chris Folk.dck index 25da037b93..c00393a222 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Soul Sisters – Chris Folk.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Soul Sisters - Chris Folk.dck @@ -1,4 +1,4 @@ -NAME:Soul Sisters – Chris Folk +NAME:Soul Sisters – Chris Folk 4 [LRW:281] Windbrisk Heights 4 [M11:28] Serra Ascendant 4 [SHM:23] Spectral Procession diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Tribal Zoo – Billy Hahn.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Tribal Zoo - Billy Hahn.dck similarity index 93% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Tribal Zoo – Billy Hahn.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Tribal Zoo - Billy Hahn.dck index 6aa9e7fa31..2f8992d780 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Tribal Zoo – Billy Hahn.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/Tribal Zoo - Billy Hahn.dck @@ -1,4 +1,4 @@ -NAME:Tribal Zoo – Billy Hahn +NAME:Tribal Zoo – Billy Hahn 1 [GTC:167] Ghor-Clan Rampager 4 [MMA:166] Tarmogoyf 4 [ZEN:220] Misty Rainforest diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black Tokens – Jason Wrisley.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black Tokens - Jason Wrisley.dck similarity index 91% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black Tokens – Jason Wrisley.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black Tokens - Jason Wrisley.dck index 4b154af517..2a855b8787 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black Tokens – Jason Wrisley.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black Tokens - Jason Wrisley.dck @@ -1,4 +1,4 @@ -NAME:White-Black Tokens – Jason Wrisley +NAME:White-Black Tokens – Jason Wrisley 2 [ROE:115] Inquisition of Kozilek 3 [WWK:145] Tectonic Edge 4 [SHM:23] Spectral Procession diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black-Red Burn – Phillip Gorz.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black-Red Burn - Phillip Gorz.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black-Red Burn – Phillip Gorz.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black-Red Burn - Phillip Gorz.dck index ebaf46ca22..e9e8798099 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black-Red Burn – Phillip Gorz.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Black-Red Burn - Phillip Gorz.dck @@ -1,4 +1,4 @@ -NAME:Grixis Control – Thomas Mendenhall +NAME:Grixis Control – Thomas Mendenhall 4 [ROE:115] Inquisition of Kozilek 3 [WWK:134] Creeping Tar Pit 3 [ISD:105] Liliana of the Veil diff --git a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Blue Tron – Kirby Kaufman.dck b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Blue Tron - Kirby Kaufman.dck similarity index 93% rename from Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Blue Tron – Kirby Kaufman.dck rename to Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Blue Tron - Kirby Kaufman.dck index 969d90e902..b585f42d6b 100644 --- a/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Blue Tron – Kirby Kaufman.dck +++ b/Mage.Client/release/sample-decks/2014/Modern/GP Minneapolis/Trial Winning Decklists/White-Blue Tron - Kirby Kaufman.dck @@ -1,4 +1,4 @@ -NAME:White-Blue Tron – Kirby Kaufman +NAME:White-Blue Tron – Kirby Kaufman 2 [WWK:133] Celestial Colonnade 1 [RTR:35] Cyclonic Rift 4 [9ED:329] Urza's Tower diff --git a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Jak Gem’s Constellation Recursion.dck b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Jak Gem's Constellation Recursion.dck similarity index 90% rename from Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Jak Gem’s Constellation Recursion.dck rename to Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Jak Gem's Constellation Recursion.dck index f3a86c02f2..394bbd3ef3 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Jak Gem’s Constellation Recursion.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/DailyMTG ReConstructed Enchantress to Meet You/Jak Gem's Constellation Recursion.dck @@ -1,4 +1,4 @@ -NAME:Jak Gem’s Constellation Recursion +NAME:Jak Gem's Constellation Recursion 4 [RTR:243] Overgrown Tomb 4 [BNG:75] Herald of Torment 4 [RTR:248] Temple Garden diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Alexander Pasgaard – Jeskai.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Alexander Pasgaard - Jeskai.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Alexander Pasgaard – Jeskai.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Alexander Pasgaard - Jeskai.dck index 3f68a3cbfd..f87ff7cc2d 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Alexander Pasgaard – Jeskai.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Alexander Pasgaard - Jeskai.dck @@ -1,4 +1,4 @@ -NAME:Alexander Pasgaard – Jeskai +NAME:Alexander Pasgaard – Jeskai 4 [KTK:184] Mantis Rider 1 [M15:240] Battlefield Forge 4 [KTK:181] Jeskai Charm diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Christian Seibold – Sidisi.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Christian Seibold - Sidisi.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Christian Seibold – Sidisi.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Christian Seibold - Sidisi.dck index 88e519c159..c6153d0b5a 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Christian Seibold – Sidisi.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Christian Seibold - Sidisi.dck @@ -1,4 +1,4 @@ -NAME:Christian Seibold – Sidisi +NAME:Christian Seibold – Sidisi 3 [KTK:239] Polluted Delta 1 [KTK:249] Wooded Foothills 2 [KTK:196] Sagu Mauler diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Einar Baldvinsson – Temur Aggro.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Einar Baldvinsson - Temur Aggro.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Einar Baldvinsson – Temur Aggro.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Einar Baldvinsson - Temur Aggro.dck index 81a814b54b..dd94786b27 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Einar Baldvinsson – Temur Aggro.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Einar Baldvinsson - Temur Aggro.dck @@ -1,4 +1,4 @@ -NAME:Einar Baldvinsson – Temur Aggro +NAME:Einar Baldvinsson – Temur Aggro 4 [KTK:197] Savage Knuckleblade 4 [KTK:249] Wooded Foothills 3 [M15:155] Lightning Strike diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Giovanni Rosi – Mono-red.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Giovanni Rosi - Mono-red.dck similarity index 91% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Giovanni Rosi – Mono-red.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Giovanni Rosi - Mono-red.dck index 24d7e766c8..2385fcbbdb 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Giovanni Rosi – Mono-red.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Giovanni Rosi - Mono-red.dck @@ -1,4 +1,4 @@ -NAME:Giovanni Rosi – Mono-red +NAME:Giovanni Rosi – Mono-red 3 [M15:155] Lightning Strike 4 [THS:119] Dragon Mantle 4 [M15:145] Goblin Rabblemaster diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Lukas Blohon – G_B Enchantress.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Lukas Blohon - G_B Enchantress.dck similarity index 93% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Lukas Blohon – G_B Enchantress.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Lukas Blohon - G_B Enchantress.dck index 7dc0d50712..d4890c1bba 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Lukas Blohon – G_B Enchantress.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Lukas Blohon - G_B Enchantress.dck @@ -1,4 +1,4 @@ -NAME:Matej Zatlkaj – Jeskai +NAME:Matej Zatlkaj – Jeskai 4 [KTK:184] Mantis Rider 3 [M15:240] Battlefield Forge 2 [KTK:250] Plains diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Matteo Cirigliano – G_B Enchantress.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Matteo Cirigliano - G_B Enchantress.dck similarity index 91% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Matteo Cirigliano – G_B Enchantress.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Matteo Cirigliano - G_B Enchantress.dck index 61304c2cfe..fbd2f69ced 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Matteo Cirigliano – G_B Enchantress.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Matteo Cirigliano - G_B Enchantress.dck @@ -1,4 +1,4 @@ -NAME:Matteo Cirigliano – G_B Enchantress +NAME:Matteo Cirigliano – G_B Enchantress 2 [KTK:235] Jungle Hollow 3 [M15:198] Satyr Wayfinder 4 [JOU:165] Temple of Malady diff --git a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Thiago Rodrigues – Abzan Midrange.dck b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Thiago Rodrigues - Abzan Midrange.dck similarity index 92% rename from Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Thiago Rodrigues – Abzan Midrange.dck rename to Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Thiago Rodrigues - Abzan Midrange.dck index 5cb964770c..3c92fac208 100644 --- a/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Thiago Rodrigues – Abzan Midrange.dck +++ b/Mage.Client/release/sample-decks/2014/Standard/GP Stockholm 2014-11/Thiago Rodrigues - Abzan Midrange.dck @@ -1,4 +1,4 @@ -NAME:Thiago Rodrigues – Abzan Midrange +NAME:Thiago Rodrigues – Abzan Midrange 4 [KTK:248] Windswept Heath 2 [KTK:250] Plains 1 [JOU:163] Mana Confluence diff --git a/Mage.Client/release/sample-decks/Duel Decks/Knights vs. Dragons/Dragons.dck b/Mage.Client/release/sample-decks/Duel Decks/Knights vs. Dragons/Dragons.dck new file mode 100644 index 0000000000..0e524b390e --- /dev/null +++ b/Mage.Client/release/sample-decks/Duel Decks/Knights vs. Dragons/Dragons.dck @@ -0,0 +1,35 @@ +1 [DDG:64] Breath of Darigaaz +1 [DDG:63] Dragon's Claw +1 [DDG:66] Punishing Fire +2 [DDG:65] Dragon Fodder +1 [DDG:60] Shivan Hellkite +2 [DDG:62] Armillary Sphere +1 [DDG:61] Thunder Dragon +1 [DDG:48] Cinder Wall +1 [DDG:47] Bogardan Hellkite +1 [DDG:68] Captive Flame +1 [DDG:49] Skirk Prospector +1 [DDG:67] Spitting Earth +1 [DDG:69] Ghostfire +6 [DDG:81] Mountain +1 [DDG:51] Fire-Belly Changeling +1 [DDG:77] Jaws of Stone +1 [DDG:50] Bloodmark Mentor +2 [DDG:76] Fiery Fall +1 [DDG:75] Cone of Flame +1 [DDG:74] Shiv's Embrace +1 [DDG:73] Temporary Insanity +1 [DDG:55] Henge Guardian +1 [DDG:72] Claws of Valakut +2 [DDG:54] Dragon Whelp +1 [DDG:71] Seismic Strike +1 [DDG:53] Dragonspeaker Shaman +2 [DDG:52] Mudbutton Torchrunner +1 [DDG:70] Seething Song +1 [DDG:59] Kilnmouth Dragon +1 [DDG:58] Mordant Dragon +1 [DDG:57] Bogardan Rager +1 [DDG:56] Voracious Dragon +6 [DDG:79] Mountain +6 [DDG:78] Mountain +6 [DDG:80] Mountain diff --git a/Mage.Client/release/sample-decks/Duel Decks/Knights vs. Dragons/Knights.dck b/Mage.Client/release/sample-decks/Duel Decks/Knights vs. Dragons/Knights.dck new file mode 100644 index 0000000000..4f296a35c1 --- /dev/null +++ b/Mage.Client/release/sample-decks/Duel Decks/Knights vs. Dragons/Knights.dck @@ -0,0 +1,46 @@ +1 [DDG:27] Reprisal +1 [DDG:28] Test of Faith +3 [DDG:40] Plains +1 [DDG:29] Heroes' Reunion +3 [DDG:42] Plains +1 [DDG:8] Silver Knight +1 [DDG:23] Harm's Way +3 [DDG:41] Plains +1 [DDG:24] Reciprocate +1 [DDG:7] Leonin Skyhunter +2 [DDG:44] Forest +1 [DDG:25] Edge of Autumn +2 [DDG:43] Forest +1 [DDG:26] Mighty Leap +1 [DDG:9] White Knight +1 [DDG:46] Forest +1 [DDG:45] Forest +1 [DDG:20] Plover Knights +1 [DDG:21] Juniper Order Ranger +2 [DDG:3] Lionheart Maverick +2 [DDG:4] Knight of Cliffhaven +1 [DDG:5] Knight of Meadowgrain +1 [DDG:6] Knight of the White Orchid +1 [DDG:1] Knight of the Reliquary +1 [DDG:2] Caravan Escort +1 [DDG:14] Knight Exemplar +1 [DDG:15] Wilt-Leaf Cavaliers +1 [DDG:38] Treetop Village +1 [DDG:12] Benalish Lancer +3 [DDG:39] Plains +1 [DDG:13] Zhalfirin Commander +1 [DDG:36] Sejiri Steppe +1 [DDG:55] Henge Guardian +1 [DDG:18] Alaborn Cavalier +2 [DDG:37] Selesnya Sanctuary +1 [DDG:19] Skyhunter Patrol +1 [DDG:34] Oblivion Ring +1 [DDG:16] Kabira Vindicator +2 [DDG:35] Grasslands +1 [DDG:17] Kinsbaile Cavalier +1 [DDG:32] Spidersilk Armor +1 [DDG:33] Griffin Guide +1 [DDG:30] Sigil Blessing +1 [DDG:31] Loxodon Warhammer +1 [DDG:10] Knotvine Paladin +1 [DDG:11] Steward of Valeron diff --git a/Mage.Client/release/sample-decks/Duel Decks/Phyrexia vs. Coalition/Coalition.dck b/Mage.Client/release/sample-decks/Duel Decks/Phyrexia vs. Coalition/Coalition.dck new file mode 100644 index 0000000000..a3b079250b --- /dev/null +++ b/Mage.Client/release/sample-decks/Duel Decks/Phyrexia vs. Coalition/Coalition.dck @@ -0,0 +1,37 @@ +5 [DDE:70] Forest +5 [DDE:71] Forest +1 [DDE:49] Treva, the Renewer +4 [DDE:69] Mountain +1 [DDE:47] Darigaaz, the Igniter +1 [DDE:48] Rith, the Awakener +4 [DDE:67] Plains +1 [DDE:45] Charging Troll +1 [DDE:68] Island +1 [DDE:46] Gerrard Capashen +1 [DDE:65] Shivan Oasis +1 [DDE:43] Verduran Emissary +3 [DDE:66] Terramorphic Expanse +2 [DDE:44] Yavimaya Elder +1 [DDE:41] Thunderscape Battlemage +1 [DDE:63] Allied Strategies +1 [DDE:64] Elfhame Palace +2 [DDE:42] Thornscape Battlemage +1 [DDE:61] Treva's Charm +1 [DDE:40] Sunscape Battlemage +1 [DDE:62] Power Armor +1 [DDE:60] Rith's Charm +2 [DDE:38] Nomadic Elf +1 [DDE:39] Quirion Elves +2 [DDE:58] Armadillo Cloak +1 [DDE:36] Urza's Rage +2 [DDE:37] Thornscape Apprentice +1 [DDE:59] Darigaaz's Charm +1 [DDE:56] Exotic Curse +2 [DDE:57] Harrow +1 [DDE:32] Swamp +1 [DDE:54] Coalition Relic +1 [DDE:55] Narrow Escape +2 [DDE:52] Fertile Ground +1 [DDE:53] Gerrard's Command +1 [DDE:50] Evasive Action +1 [DDE:51] Tribal Flames diff --git a/Mage.Client/serverlist.txt b/Mage.Client/serverlist.txt index cefd1b3f3d..59d6968638 100644 --- a/Mage.Client/serverlist.txt +++ b/Mage.Client/serverlist.txt @@ -1,6 +1,6 @@ woogerworks (North America/USA) :xmage.woogerworks.com:17171 -XMage.info 1 (Europe/France) :176.31.186.181:17171 -XMage.info 2 (Europe/France) :176.31.186.181:17000 +XMage.de 1 (Europe/Germany) fast :xmage.de:17171 +XMage.info 2 (Europe/France) slow :176.31.186.181:17000 IceMage (Europe/Netherlands) :ring0.cc:17171 Seedds Server (Asia) :115.29.203.80:17171 localhost -> connect to your local server (must be started):localhost:17171 diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 1e39f3b992..a35554549c 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -712,6 +712,8 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { String proxyPassword = prefs.get("proxyPassword", ""); int avatarId = PreferencesDialog.getSelectedAvatar(); boolean showAbilityPickerForced = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_ABILITY_PICKER_FORCED, "true").equals("true"); + + try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); Connection connection = new Connection(); @@ -725,6 +727,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { connection.setProxyPassword(proxyPassword); connection.setAvatarId(avatarId); connection.setShowAbilityPickerForced(showAbilityPickerForced); + connection.setAllowRequestShowHandCards(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true").equals("true")); connection.setUserSkipPrioritySteps(PreferencesDialog.getUserSkipPrioritySteps()); logger.debug("connecting (auto): " + proxyType + " " + proxyServer + " " + proxyPort + " " + proxyUsername); if (MageFrame.connect(connection)) { diff --git a/Mage.Client/src/main/java/mage/client/cards/Card.java b/Mage.Client/src/main/java/mage/client/cards/Card.java index 2e7b1271a4..ca322655e8 100644 --- a/Mage.Client/src/main/java/mage/client/cards/Card.java +++ b/Mage.Client/src/main/java/mage/client/cards/Card.java @@ -534,4 +534,11 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis @Override public void setChoosable(boolean isChoosable) { } + + @Override + public void setTextOffset(int yOffset) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + } diff --git a/Mage.Client/src/main/java/mage/client/cards/CardArea.java b/Mage.Client/src/main/java/mage/client/cards/CardArea.java index 3ef731a0cc..1d40d21f80 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardArea.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardArea.java @@ -50,6 +50,7 @@ public class CardArea extends JPanel { private boolean reloaded = false; private final javax.swing.JLayeredPane cardArea; private final javax.swing.JScrollPane scrollPane; + private int yTextOffset; /** * Create the panel. @@ -62,6 +63,7 @@ public class CardArea extends JPanel { cardArea = new JLayeredPane(); scrollPane.setViewportView(cardArea); + yTextOffset = 10; } @@ -82,9 +84,11 @@ public class CardArea extends JPanel { this.reloaded = true; cardArea.removeAll(); if (showCards != null && showCards.size() < 10) { + yTextOffset = 10; loadCardsFew(showCards, bigCard, gameId, listener); } else { + yTextOffset = 0; loadCardsMany(showCards, bigCard, gameId, listener, dimension); } cardArea.revalidate(); @@ -96,6 +100,7 @@ public class CardArea extends JPanel { public void loadCardsNarrow(CardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId, MouseListener listener) { this.reloaded = true; cardArea.removeAll(); + yTextOffset = 0; loadCardsMany(showCards, bigCard, gameId, listener, dimension); cardArea.revalidate(); @@ -132,6 +137,7 @@ public class CardArea extends JPanel { cardArea.moveToFront(cardImg); cardImg.update(card); cardImg.setCardBounds(rectangle.x, rectangle.y, cardDimensions.frameWidth, cardDimensions.frameHeight); + cardImg.setTextOffset(yTextOffset); cardImg.showCardTitle(); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index d8246a8a9d..4c72ed3535 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -54,6 +54,7 @@ import java.io.InputStreamReader; import java.io.Writer; import java.net.InetSocketAddress; import java.net.Proxy; +import java.net.SocketTimeoutException; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; @@ -331,6 +332,7 @@ public class ConnectDialog extends MageDialog { int avatarId = PreferencesDialog.getSelectedAvatar(); connection.setAvatarId(avatarId); boolean showAbilityPickerForced = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_ABILITY_PICKER_FORCED, "true").equals("true"); + connection.setAllowRequestShowHandCards(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true").equals("true")); connection.setShowAbilityPickerForced(showAbilityPickerForced); connection.setUserSkipPrioritySteps(PreferencesDialog.getUserSkipPrioritySteps()); logger.debug("connecting: " + connection.getProxyType() + " " + connection.getProxyHost() + " " + connection.getProxyPort()); @@ -442,7 +444,7 @@ public class ConnectDialog extends MageDialog { boolean URLNotFound = false; try { in = new BufferedReader(new InputStreamReader(serverListURL.openConnection(p).getInputStream())); - } catch (FileNotFoundException| UnknownHostException ex ) { + } catch (SocketTimeoutException |FileNotFoundException | UnknownHostException ex ) { logger.warn("Could not read serverlist from: " + serverListURL.toString()); File f = new File("serverlist.txt"); if (f.exists() && !f.isDirectory()) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index 32276f683b..097658922e 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -1681,9 +1681,9 @@ public class PreferencesDialog extends javax.swing.JDialog { try { MageFrame.getSession().updatePreferencesForServer( - getSelectedAvatar(), - dialog.cbAllowRequestToShowHandCards.isSelected(), + getSelectedAvatar(), dialog.showAbilityPickerForced.isSelected(), + dialog.cbAllowRequestToShowHandCards.isSelected(), getUserSkipPrioritySteps()); prefs.flush(); @@ -2235,6 +2235,14 @@ public class PreferencesDialog extends javax.swing.JDialog { save(prefs, checkBox, propName, PHASE_ON, PHASE_OFF, false); } + public static void setPrefValue(String key, boolean value) { + switch(key) { + case KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS: + dialog.cbAllowRequestToShowHandCards.setSelected(value); + save(MageFrame.getPreferences(), dialog.cbAllowRequestToShowHandCards, KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true", "false", UPDATE_CACHE_POLICY); + break; + } + } private static void save(Preferences prefs, JCheckBox checkBox, String propName, String yesValue, String noValue, boolean updateCache) { prefs.put(propName, checkBox.isSelected() ? yesValue : noValue); if (updateCache) { diff --git a/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java b/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java index 03f6c96dff..fdd97d9b35 100644 --- a/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java @@ -64,7 +64,6 @@ public class FeedbackPanel extends javax.swing.JPanel { INFORM, QUESTION, CONFIRM, CANCEL, SELECT, END } - private boolean selected = false; private UUID gameId; private Session session; private FeedbackMode mode; @@ -96,7 +95,6 @@ public class FeedbackPanel extends javax.swing.JPanel { this.lblMessage.setText(message); this.helper.setMessage(message); - this.selected = false; this.mode = mode; switch (this.mode) { case INFORM: @@ -270,7 +268,6 @@ public class FeedbackPanel extends javax.swing.JPanel { } private void btnRightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRightActionPerformed - this.selected = true; if (connectedDialog != null) { connectedDialog.removeDialog(); connectedDialog = null; @@ -289,7 +286,6 @@ public class FeedbackPanel extends javax.swing.JPanel { }//GEN-LAST:event_btnRightActionPerformed private void btnLeftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLeftActionPerformed - this.selected = true; session.sendPlayerBoolean(gameId, true); AudioManager.playButtonCancel(); }//GEN-LAST:event_btnLeftActionPerformed diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 2799b50f36..a1ba349b4e 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -602,8 +602,8 @@ public final class GamePanel extends javax.swing.JPanel { if (game.getStep() != null) { updatePhases(game.getStep()); this.txtStep.setText(game.getStep().toString()); - } - else { + } else { + logger.debug("Step is empty"); this.txtStep.setText(""); } if (game.getSpellsCastCurrentTurn() > 0 && PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_SHOW_STORM_COUNTER, "true").equals("true")) { @@ -749,18 +749,40 @@ public final class GamePanel extends javax.swing.JPanel { currentStep.setLocation(prevPoint); } switch (step) { - case UNTAP: updateButton("Untap"); break; - case UPKEEP: updateButton("Upkeep"); break; - case DRAW: updateButton("Draw"); break; - case PRECOMBAT_MAIN: updateButton("Main1"); break; - case BEGIN_COMBAT: updateButton("Combat_Start"); break; - case DECLARE_ATTACKERS: updateButton("Combat_Attack"); break; - case DECLARE_BLOCKERS: updateButton("Combat_Block"); break; + case UNTAP: + updateButton("Untap"); + break; + case UPKEEP: + updateButton("Upkeep"); + break; + case DRAW: + updateButton("Draw"); + break; + case PRECOMBAT_MAIN: + updateButton("Main1"); + break; + case BEGIN_COMBAT: + updateButton("Combat_Start"); + break; + case DECLARE_ATTACKERS: + updateButton("Combat_Attack"); + break; + case DECLARE_BLOCKERS: + updateButton("Combat_Block"); + break; case FIRST_COMBAT_DAMAGE: - case COMBAT_DAMAGE: updateButton("Combat_Damage"); break; - case END_COMBAT: updateButton("Combat_End"); break; - case POSTCOMBAT_MAIN: updateButton("Main2"); break; - case END_TURN: updateButton("Cleanup"); break; + case COMBAT_DAMAGE: + updateButton("Combat_Damage"); + break; + case END_COMBAT: + updateButton("Combat_End"); + break; + case POSTCOMBAT_MAIN: + updateButton("Main2"); + break; + case END_TURN: + updateButton("Cleanup"); + break; } } diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 775ef57302..cc92819b86 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -37,6 +37,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.lang.reflect.Field; import java.util.UUID; + import javax.swing.BorderFactory; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; @@ -50,6 +51,8 @@ import javax.swing.event.ChangeListener; import mage.cards.decks.importer.DeckImporterUtil; import mage.client.MageFrame; import mage.client.cards.BigCard; +import mage.client.dialog.PreferencesDialog; +import static mage.client.dialog.PreferencesDialog.KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS; import mage.constants.PlayerAction; import mage.view.PlayerView; @@ -68,6 +71,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { private final boolean playerItself; private JCheckBoxMenuItem manaPoolMenuItem; + private JCheckBoxMenuItem allowViewHandCardsMenuItem; public static final int PANEL_HEIGHT = 242; public static final int PANEL_HEIGHT_SMALL = 190; @@ -248,16 +252,17 @@ public class PlayAreaPanel extends javax.swing.JPanel { } }); } else { - menuItem = new JCheckBoxMenuItem("Allow requests to show your hand cards", allowRequestToShowHandCards); - menuItem.setMnemonic(KeyEvent.VK_A); - menuItem.setToolTipText("If activated watchers or other players can request to see your hand cards. If you grant this to a user, it's valid for the complete match."); - popupMenu.add(menuItem); + allowViewHandCardsMenuItem = new JCheckBoxMenuItem("Allow requests to show your hand cards", allowRequestToShowHandCards); + allowViewHandCardsMenuItem.setMnemonic(KeyEvent.VK_A); + allowViewHandCardsMenuItem.setToolTipText("If activated watchers or other players can request to see your hand cards. If you grant this to a user, it's valid for the complete match."); + popupMenu.add(allowViewHandCardsMenuItem); // Requests allowed - menuItem.addActionListener(new ActionListener() { + allowViewHandCardsMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { boolean requestsAllowed = ((JCheckBoxMenuItem)e.getSource()).getState(); + PreferencesDialog.setPrefValue(KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, requestsAllowed); gamePanel.getSession().sendPlayerAction(requestsAllowed ? PlayerAction.PERMISSION_REQUESTS_ALLOWED_ON: PlayerAction.PERMISSION_REQUESTS_ALLOWED_OFF, gameId, null); } }); @@ -391,6 +396,9 @@ public class PlayAreaPanel extends javax.swing.JPanel { public final void update(PlayerView player) { this.playerPanel.update(player); this.battlefieldPanel.update(player.getBattlefield()); + if (this.allowViewHandCardsMenuItem != null) { + this.allowViewHandCardsMenuItem.setSelected(player.getUserData().allowRequestShowHandCards()); + } } public mage.client.game.BattlefieldPanel getBattlefieldPanel() { diff --git a/Mage.Client/src/main/java/mage/client/util/layout/CardLayoutStrategy.java b/Mage.Client/src/main/java/mage/client/util/layout/CardLayoutStrategy.java index 42fbd09e2b..9e3615f6f6 100644 --- a/Mage.Client/src/main/java/mage/client/util/layout/CardLayoutStrategy.java +++ b/Mage.Client/src/main/java/mage/client/util/layout/CardLayoutStrategy.java @@ -1,6 +1,6 @@ package mage.client.util.layout; -import javax.swing.*; +import javax.swing.JLayeredPane; /** * Interface for operations that modify cards' layout diff --git a/Mage.Client/src/main/java/mage/client/util/layout/impl/OldCardLayoutStrategy.java b/Mage.Client/src/main/java/mage/client/util/layout/impl/OldCardLayoutStrategy.java index bcfef896a4..47cd0d30e8 100644 --- a/Mage.Client/src/main/java/mage/client/util/layout/impl/OldCardLayoutStrategy.java +++ b/Mage.Client/src/main/java/mage/client/util/layout/impl/OldCardLayoutStrategy.java @@ -1,16 +1,16 @@ package mage.client.util.layout.impl; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.util.Map; +import java.util.UUID; +import javax.swing.JLayeredPane; import mage.cards.MagePermanent; import mage.client.game.BattlefieldPanel; import mage.client.plugins.impl.Plugins; import mage.client.util.layout.CardLayoutStrategy; import mage.view.PermanentView; -import javax.swing.*; -import java.awt.*; -import java.util.Map; -import java.util.UUID; - /** * Card layout for client version 1.3.0 and earlier. * @@ -54,14 +54,14 @@ public class OldCardLayoutStrategy implements CardLayoutStrategy { } int position = jLayeredPane.getPosition(perm); perm.getLinks().clear(); - Rectangle r = perm.getBounds(); + Rectangle rectangleBaseCard = perm.getBounds(); if (!Plugins.getInstance().isCardPluginLoaded()) { for (UUID attachmentId: permanent.getAttachments()) { MagePermanent link = permanents.get(attachmentId); if (link != null) { perm.getLinks().add(link); - r.translate(20, 20); - link.setBounds(r); + rectangleBaseCard.translate(20, 20); + link.setBounds(rectangleBaseCard); jLayeredPane.setPosition(link, ++position); } } @@ -70,14 +70,14 @@ public class OldCardLayoutStrategy implements CardLayoutStrategy { for (UUID attachmentId: permanent.getAttachments()) { MagePermanent link = permanents.get(attachmentId); if (link != null) { - link.setBounds(r); + link.setBounds(rectangleBaseCard); perm.getLinks().add(link); if (index == 1) { - r.translate(ATTACHMENTS_DX_OFFSET, ATTACHMENT_DY_OFFSET); // do it once + rectangleBaseCard.translate(ATTACHMENTS_DX_OFFSET, ATTACHMENT_DY_OFFSET); // do it once } else { - r.translate(ATTACHMENT_DX_OFFSET, ATTACHMENT_DY_OFFSET); + rectangleBaseCard.translate(ATTACHMENT_DX_OFFSET, ATTACHMENT_DY_OFFSET); } - perm.setBounds(r); + perm.setBounds(rectangleBaseCard); jLayeredPane.moveToFront(link); jLayeredPane.moveToFront(perm); jPanel.setComponentZOrder(link, index); diff --git a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java index ce66d43b80..88bb5c93bf 100644 --- a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java +++ b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java @@ -64,6 +64,7 @@ public class ConstructedFormats { "Fifth Edition", "Fourth Edition", "Revised Edition", "Unlimited Edition", "Limited Edition Beta", "Limited Edition Alpha", + "Tempest Remastered", "Vintage Masters", "Conspiracy", "Modern Masters 2015", @@ -460,6 +461,9 @@ public class ConstructedFormats { if (format.equals("Planechase 2012")) { return Arrays.asList("PC2"); } + if (format.equals("Tempest Remastered")) { + return Arrays.asList("TPR"); + } if (format.equals("Modern Masters")) { return Arrays.asList("MMA"); } @@ -523,17 +527,17 @@ public class ConstructedFormats { if (format.equals("Starter 2000")) { return Arrays.asList("S00"); } - if (format.equals("Duel Decks: Anthology, Elves vs. Goblins")) { - return Arrays.asList("DD3"); - } - if (format.equals("Duel Decks: Anthology, Jace vs. Chandra")) { - return Arrays.asList("DD3"); - } if (format.equals("Duel Decks: Anthology, Divine vs. Demonic")) { - return Arrays.asList("DD3"); + return Arrays.asList("DD3A"); + } + if (format.equals("Duel Decks: Anthology, Elves vs. Goblins")) { + return Arrays.asList("DD3B"); } if (format.equals("Duel Decks: Anthology, Garruk vs. Liliana")) { - return Arrays.asList("DD3"); + return Arrays.asList("DD3C"); + } + if (format.equals("Duel Decks: Anthology, Jace vs. Chandra")) { + return Arrays.asList("DD3D"); } if (format.equals("Duel Decks: Elves vs. Goblins")) { return Arrays.asList("EVG"); diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java index f6a60065d1..fb14b5569d 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java @@ -150,6 +150,8 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti private JPanel cardArea; + private int yTextOffset = 10; + public CardPanel(CardView newGameCard, UUID gameId, final boolean loadImage, ActionCallback callback, final boolean foil, Dimension dimension) { this.gameCard = newGameCard; this.callback = callback; @@ -194,30 +196,30 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti } }); } + if (!newGameCard.isAbility()) { + // panel to show counters on the card + counterPanel = new JPanel(); + counterPanel.setLayout(null); + counterPanel.setOpaque(false); + add(counterPanel); - // panel to show counters on the card - counterPanel = new JPanel(); - counterPanel.setLayout(null); - counterPanel.setOpaque(false); - add(counterPanel); + plusCounterLabel = new JLabel(""); + plusCounterLabel.setToolTipText("+1/+1"); + counterPanel.add(plusCounterLabel); - plusCounterLabel = new JLabel(""); - plusCounterLabel.setToolTipText("+1/+1"); - counterPanel.add(plusCounterLabel); + minusCounterLabel = new JLabel(""); + minusCounterLabel.setToolTipText("-1/-1"); + counterPanel.add(minusCounterLabel); - minusCounterLabel = new JLabel(""); - minusCounterLabel.setToolTipText("-1/-1"); - counterPanel.add(minusCounterLabel); + loyaltyCounterLabel = new JLabel(""); + loyaltyCounterLabel.setToolTipText("loyalty"); + counterPanel.add(loyaltyCounterLabel); - loyaltyCounterLabel = new JLabel(""); - loyaltyCounterLabel.setToolTipText("loyalty"); - counterPanel.add(loyaltyCounterLabel); - - otherCounterLabel = new JLabel(""); - counterPanel.add(otherCounterLabel); - - counterPanel.setVisible(false); + otherCounterLabel = new JLabel(""); + counterPanel.add(otherCounterLabel); + counterPanel.setVisible(false); + } if (newGameCard.isAbility()) { if (AbilityType.TRIGGERED.equals(newGameCard.getAbilityType())) { setTypeIcon(ImageManagerImpl.getInstance().getTriggeredAbilityImage(),"Triggered Ability"); @@ -381,7 +383,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti imagePanel.setImage(srcImage); repaint(); } - layout(); + doLayout(); } public void setImage(final CardPanel panel) { @@ -583,7 +585,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti ptText.setVisible(showText); int titleX = Math.round(cardWidth * (20f / 480)); - int titleY = Math.round(cardHeight * (9f / 680)) + 10; // TODO: Set to 0 if it's a card selection with small card offset (ike library search) + int titleY = Math.round(cardHeight * (9f / 680)) + yTextOffset; titleText.setBounds(cardXOffset + titleX, cardYOffset + titleY, cardWidth - titleX, cardHeight - titleY); Dimension ptSize = ptText.getPreferredSize(); @@ -841,7 +843,14 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti } } - + if (counterPanel != null) { + updateCounters(card); + } + + repaint(); + } + + private void updateCounters(CardView card) { if (card.getCounters() != null && !card.getCounters().isEmpty()) { String name = ""; if (lastCardWidth != cardWidth) { @@ -890,8 +899,8 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti otherCounterLabel.setVisible(true); } } - } - + } + counterPanel.setVisible(true); } else { plusCounterLabel.setVisible(false); @@ -899,8 +908,8 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti loyaltyCounterLabel.setVisible(false); otherCounterLabel.setVisible(false); counterPanel.setVisible(false); - } - repaint(); + } + } private static ImageIcon getCounterImageWithAmount(int amount, BufferedImage image, int cardWidth) { @@ -1064,7 +1073,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti } } - return sbType.toString(); + return sbType.toString().trim(); } protected final String getText(String cardType, CardView card) { @@ -1196,5 +1205,10 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti public void componentHidden(ComponentEvent ce) { } + @Override + public void setTextOffset(int yOffset) { + yTextOffset = yOffset; + } + } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index c402cf1a40..b5f76bc7da 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -34,7 +34,8 @@ public class GathererSets implements Iterable { "POR", "PO2", "PTK"}; private static final String[] withMythics = {"M10", "M11", "M12", "M13", "M14", "M15", "ORI", - "DDF", "DDG", "DDH", "DDI", "DDJ", "DDK", "DDL", "DDM", "DDN", "DD3", "DDO", + "DDF", "DDG", "DDH", "DDI", "DDJ", "DDK", "DDL", "DDM", "DDN", + "DD3", "DD3B", "DDO", "ALA", "CON", "ARB", "ZEN", "WWK", "ROE", "SOM", "MBS", "NPH", @@ -43,7 +44,7 @@ public class GathererSets implements Iterable { "RTR", "GTC", "DGM", "MMA", "THS", "BNG", "JOU", - "CNS", "VMA", + "CNS", "VMA", "TPR", "KTK", "FRF", "DTK"}; private static final HashMap symbolsReplacements = new HashMap<>(); @@ -80,6 +81,10 @@ public class GathererSets implements Iterable { symbolsReplacements.put("2ED", "2U"); symbolsReplacements.put("LEB", "2E"); symbolsReplacements.put("LEA", "1E"); + symbolsReplacements.put("DD3A", "DD3"); + symbolsReplacements.put("DD3B", "DD3"); + symbolsReplacements.put("DD3C", "DD3"); + symbolsReplacements.put("DD3D", "DD3"); } public GathererSets(String path) { 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 069a71940c..c836acec78 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 @@ -16,6 +16,7 @@ public class MagicCardsImageSource implements CardImageSource { private static final Map setNameTokenReplacement = new HashMap() { { + put("TPR", "tempest-remastered"); put("ORI", "magic-origins"); put("MMB", "modern-masters-2015"); put("PTC", "prerelease-events"); @@ -75,10 +76,10 @@ public class MagicCardsImageSource implements CardImageSource { put("M10", "magic-2010"); put("EVG", "duel-decks-elves-vs-goblins"); put("DD2", "duel-decks-jace-vs-chandra"); - put("DD3", "duel-decks-anthology-elves-vs-goblins"); - put("DD3", "duel-decks-anthology-divine-vs-demonic"); - put("DD3", "duel-decks-anthology-garruk-vs-liliana"); - put("DD3", "duel-decks-anthology-jace-vs-chandra"); + put("DD3A", "duel-decks-anthology-divine-vs-demonic"); + put("DD3B", "duel-decks-anthology-elves-vs-goblins"); + put("DD3C", "duel-decks-anthology-garruk-vs-liliana"); + put("DD3D", "duel-decks-anthology-jace-vs-chandra"); put("DDC", "duel-decks-divine-vs-demonic"); put("DDD", "duel-decks-garruk-vs-liliana"); put("DDE", "duel-decks-phyrexia-vs-the-coalition"); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index c1d4573685..b5a515c133 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -1,11 +1,22 @@ package org.mage.plugins.card.dl.sources; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; +import java.util.prefs.Preferences; +import mage.client.MageFrame; +import mage.remote.Connection; +import mage.remote.Connection.ProxyType; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.mage.plugins.card.images.CardDownloadData; @@ -66,7 +77,10 @@ public class WizardCardsImageSource implements CardImageSource { setsAliases.put("CON", "Conflux"); setsAliases.put("CSP", "Coldsnap"); setsAliases.put("DD2", "Duel Decks: Jace vs. Chandra"); - setsAliases.put("DD3", "Duel Decks Anthology, Divine vs. Demonic^Duel Decks Anthology, Elves vs. Goblins^Duel Decks Anthology, Garruk vs. Liliana^Duel Decks Anthology, Jace vs. Chandra"); + setsAliases.put("DD3A", "Duel Decks Anthology, Divine vs. Demonic"); + setsAliases.put("DD3B", "Duel Decks Anthology, Elves vs. Goblins"); + setsAliases.put("DD3C", "Duel Decks Anthology, Garruk vs. Liliana"); + setsAliases.put("DD3D", "Duel Decks Anthology, Jace vs. Chandra"); setsAliases.put("DDC", "Duel Decks: Divine vs. Demonic"); setsAliases.put("DDD", "Duel Decks: Garruk vs. Liliana"); setsAliases.put("DDE", "Duel Decks: Phyrexia vs. the Coalition"); @@ -164,6 +178,7 @@ public class WizardCardsImageSource implements CardImageSource { setsAliases.put("THS", "Theros"); setsAliases.put("TMP", "Tempest"); setsAliases.put("TOR", "Torment"); + setsAliases.put("TPR", "Tempest Remastered"); setsAliases.put("TSB", "Time Spiral 'Timeshifted'"); setsAliases.put("TSP", "Time Spiral"); setsAliases.put("UDS", "Urza's Destiny"); @@ -188,24 +203,70 @@ public class WizardCardsImageSource implements CardImageSource { Map setLinks = new HashMap<>(); try { String setNames = setsAliases.get(cardSet); + Preferences prefs = MageFrame.getPreferences(); + Connection.ProxyType proxyType = Connection.ProxyType.valueByText(prefs.get("proxyType", "None")); for (String setName : setNames.split("\\^")) { String URLSetName = URLEncoder.encode(setName, "UTF-8"); String urlDocument; - urlDocument = "http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler&method=visual&action=advanced&set=+[%22" + URLSetName + "%22]"; - Document doc = Jsoup.connect(urlDocument).get(); - Elements cardsImages = doc.select("img[src^=../../Handlers/]"); - for (int i = 0; i < cardsImages.size(); i++) { - String cardName = normalizeName(cardsImages.get(i).attr("alt")); - if (cardName != null && !cardName.isEmpty()) { - if (cardName.equals("Forest") || cardName.equals("Swamp") || cardName.equals("Mountain") || cardName.equals("Island") || cardName.equals("Plains")) { - int landNumber = 1; - while (setLinks.get((cardName + landNumber).toLowerCase()) != null) { - landNumber++; - } - cardName += landNumber; + int page = 0; + int firstMultiverseIdLastPage = 0; + Pages: + while (page < 999) { + Document doc; + if (proxyType.equals(ProxyType.NONE)) { + urlDocument = "http://gatherer.wizards.com/Pages/Search/Default.aspx?page=" + page +"&output=spoiler&method=visual&action=advanced&set=+[%22" + URLSetName + "%22]"; + doc = Jsoup.connect(urlDocument).get(); + } else { + String proxyServer = prefs.get("proxyAddress", ""); + int proxyPort = Integer.parseInt(prefs.get("proxyPort", "0")); + URL url = new URL("http://gatherer.wizards.com/Pages/Search/Default.aspx?page=" + page +"&output=spoiler&method=visual&action=advanced&set=+[%22" + URLSetName + "%22]"); + Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyServer, proxyPort)); + HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy); + + uc.connect(); + + String line; + StringBuffer tmp = new StringBuffer(); + BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); + while ((line = in.readLine()) != null) { + tmp.append(line); } - setLinks.put(cardName.toLowerCase(), cardsImages.get(i).attr("src").substring(5)); + doc = Jsoup.parse(String.valueOf(tmp)); } + + Elements cardsImages = doc.select("img[src^=../../Handlers/]"); + if (cardsImages.isEmpty()) { + break; + } + + for (int i = 0; i < cardsImages.size(); i++) { + if (i == 0) { + Integer multiverseId = Integer.parseInt(cardsImages.get(i).attr("src").replaceAll("[^\\d]", "")); + if (multiverseId == firstMultiverseIdLastPage) { + break Pages; + } + firstMultiverseIdLastPage = multiverseId; + } + String cardName = normalizeName(cardsImages.get(i).attr("alt")); + if (cardName != null && !cardName.isEmpty()) { + if (cardName.equals("Forest") || cardName.equals("Swamp") || cardName.equals("Mountain") || cardName.equals("Island") || cardName.equals("Plains")) { + Integer multiverseId = Integer.parseInt(cardsImages.get(i).attr("src").replaceAll("[^\\d]", "")); + String urlLandDocument = "http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=" + multiverseId; + Document landDoc = Jsoup.connect(urlLandDocument).get(); + Elements variations = landDoc.select("a.variationlink"); + int landNumber = 1; + for (Element variation : variations) { + Integer landMultiverseId = Integer.parseInt(variation.attr("onclick").replaceAll("[^\\d]", "")); + // "" + setLinks.put((cardName + landNumber).toLowerCase(), "/Handlers/Image.ashx?multiverseid=" +landMultiverseId + "&type=card"); + landNumber++; + } + } else { + setLinks.put(cardName.toLowerCase(), cardsImages.get(i).attr("src").substring(5)); + } + } + } + page++; } } } catch (IOException ex) { diff --git a/Mage.Client/src/main/resources/card-pictures-tok.txt b/Mage.Client/src/main/resources/card-pictures-tok.txt index c5af812823..93fdf9a8e0 100644 --- a/Mage.Client/src/main/resources/card-pictures-tok.txt +++ b/Mage.Client/src/main/resources/card-pictures-tok.txt @@ -1,3 +1,14 @@ +#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|Zombie| #|Generate|TOK:PTC|Angel| diff --git a/Mage.Client/src/main/resources/image.url.properties b/Mage.Client/src/main/resources/image.url.properties index 91752a2ede..7ba6f59ee2 100644 --- a/Mage.Client/src/main/resources/image.url.properties +++ b/Mage.Client/src/main/resources/image.url.properties @@ -66,4 +66,4 @@ dde=pvc # Remove setname as soon as the images can be downloaded ignore.urls=TOK,MMB,ORI # sets ordered by release time (newest goes first) -token.lookup.order=MPRP,DD3,DDO,ORI,MMB,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file +token.lookup.order=TPR,MPRP,DD3,DDO,ORI,MMB,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file diff --git a/Mage.Common/src/mage/cards/MageCard.java b/Mage.Common/src/mage/cards/MageCard.java index 5d15dcda33..320e9d1139 100644 --- a/Mage.Common/src/mage/cards/MageCard.java +++ b/Mage.Common/src/mage/cards/MageCard.java @@ -17,6 +17,8 @@ public abstract class MageCard extends JPanel { public abstract void setAlpha(float transparency); public abstract float getAlpha(); public abstract CardView getOriginal(); + // sets the vertical text offset for the card name on the image + public abstract void setTextOffset(int yOffset); public abstract void setCardBounds(int x, int y, int width, int height); public abstract void update(CardView card); public abstract void updateImage(); diff --git a/Mage.Common/src/mage/utils/CardUtil.java b/Mage.Common/src/mage/utils/CardUtil.java index 28a075b1d8..fb3331ed4b 100644 --- a/Mage.Common/src/mage/utils/CardUtil.java +++ b/Mage.Common/src/mage/utils/CardUtil.java @@ -1,8 +1,8 @@ package mage.utils; -import mage.constants.CardType; import mage.cards.Card; import mage.cards.MagePermanent; +import mage.constants.CardType; import mage.view.CardView; /** diff --git a/Mage.Common/src/mage/utils/DeckBuilder.java b/Mage.Common/src/mage/utils/DeckBuilder.java index 7ae206b953..1cdde5cd6a 100644 --- a/Mage.Common/src/mage/utils/DeckBuilder.java +++ b/Mage.Common/src/mage/utils/DeckBuilder.java @@ -44,8 +44,8 @@ public class DeckBuilder { deckSize = deckCardSize; deck = new Deck(); - final Collection remainingCards = new ArrayList(); - Set names = new HashSet(); + final Collection remainingCards = new ArrayList<>(); + Set names = new HashSet<>(); for (final Card card : spellCardPool) { if (names.contains(card.getName())) { continue; @@ -155,7 +155,7 @@ public class DeckBuilder { private static void addLandsToDeck(List allowedColors, List setsToUse, List landCardPool, RateCallback callback) { // Calculate statistics per color. - final Map colorCount = new HashMap(); + final Map colorCount = new HashMap<>(); for (final Card card : deck.getCards()) { for (String symbol : card.getManaCost().getSymbols()) { @@ -170,7 +170,7 @@ public class DeckBuilder { if (count > 0) { Integer typeCount = colorCount.get(symbol); if (typeCount == null) { - typeCount = new Integer(0); + typeCount = 0; } typeCount += 1; colorCount.put(symbol, typeCount); @@ -180,7 +180,7 @@ public class DeckBuilder { } // Add suitable non basic lands to deck in order of pack. - final Map colorSource = new HashMap(); + final Map colorSource = new HashMap<>(); for (final ColoredManaSymbol color : ColoredManaSymbol.values()) { colorSource.put(color.toString(), 0); } @@ -236,7 +236,7 @@ public class DeckBuilder { private static class MageScoredCard { private Card card; - private int score; + private final int score; private static final int SINGLE_PENALTY[] = {0, 1, 1, 3, 6, 9}; //private static final int DOUBLE_PENALTY[] = { 0, 0, 1, 2, 4, 6 }; @@ -266,10 +266,10 @@ public class DeckBuilder { private int getManaCostScore(Card card, List allowedColors) { int converted = card.getManaCost().convertedManaCost(); - final Map singleCount = new HashMap(); + final Map singleCount = new HashMap<>(); int maxSingleCount = 0; int multicolor = 0; - Set colors = new HashSet(); + Set colors = new HashSet<>(); for (String symbol : card.getManaCost().getSymbols()) { int count = 0; symbol = symbol.replace("{", "").replace("}", ""); @@ -289,7 +289,7 @@ public class DeckBuilder { } Integer typeCount = singleCount.get(symbol); if (typeCount == null) { - typeCount = new Integer(0); + typeCount = 0; } typeCount += 1; singleCount.put(symbol, typeCount); diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index d155931867..12a189a2ac 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -280,7 +280,7 @@ public class CardView extends SimpleCardView { Spell spell = (Spell) card; for (SpellAbility spellAbility: spell.getSpellAbilities()) { for(UUID modeId : spellAbility.getModes().getSelectedModes()) { - spellAbility.getModes().setMode(spellAbility.getModes().get(modeId)); + spellAbility.getModes().setActiveMode(modeId); if (spellAbility.getTargets().size() > 0) { setTargets(spellAbility.getTargets()); } @@ -290,7 +290,7 @@ public class CardView extends SimpleCardView { if (spell.getSpellAbility().isModal()) { Modes modes = spell.getSpellAbility().getModes(); for(UUID modeId : modes.getSelectedModes()) { - modes.setMode(modes.get(modeId)); + modes.setActiveMode(modeId); this.rules.add("Chosen mode: " + spell.getSpellAbility().getEffects().getText(modes.get(modeId))+""); } } diff --git a/Mage.Common/src/mage/view/CardsView.java b/Mage.Common/src/mage/view/CardsView.java index 7285357e28..6f61d93769 100644 --- a/Mage.Common/src/mage/view/CardsView.java +++ b/Mage.Common/src/mage/view/CardsView.java @@ -68,27 +68,34 @@ public class CardsView extends LinkedHashMap { for ( Ability ability : abilities ) { MageObject sourceObject = null; AbilityView abilityView = null; + boolean isCard = false; + boolean isPermanent = false; switch ( ability.getZone() ) { case ALL: case EXILED: case GRAVEYARD: sourceObject = game.getCard(ability.getSourceId()); + isCard = true; break; case BATTLEFIELD: sourceObject = game.getPermanent(ability.getSourceId()); if (sourceObject == null) { sourceObject = (Permanent)game.getLastKnownInformation(ability.getSourceId(), Zone.BATTLEFIELD); } + isPermanent = true; break; case STACK: sourceObject = game.getObject(ability.getSourceId()); + if (sourceObject instanceof Card) { + isCard = true; + } break; case COMMAND: sourceObject = game.getObject(ability.getSourceId()); - if (sourceObject instanceof Emblem) { + if (sourceObject instanceof Emblem) { Card planeswalkerCard = game.getCard(((Emblem)sourceObject).getSourceId()); if (planeswalkerCard != null) { - abilityView = new AbilityView(ability, "Emblem " + planeswalkerCard.getName(), new CardView(sourceObject)); + abilityView = new AbilityView(ability, "Emblem " + planeswalkerCard.getName(), new CardView(new EmblemView((Emblem)sourceObject, planeswalkerCard))); abilityView.setName("Emblem " + planeswalkerCard.getName()); abilityView.setExpansionSetCode(planeswalkerCard.getExpansionSetCode()); } else { @@ -99,7 +106,15 @@ public class CardsView extends LinkedHashMap { } if (sourceObject != null) { if (abilityView == null) { - abilityView = new AbilityView(ability, sourceObject.getLogName(), new CardView(sourceObject)); + CardView sourceCardView; + if (isPermanent) { + sourceCardView = new CardView((Permanent)sourceObject); + } else if (isCard) { + sourceCardView = new CardView((Card)sourceObject); + } else { + sourceCardView = new CardView(sourceObject); + } + abilityView = new AbilityView(ability, sourceObject.getLogName(), sourceCardView); } if (ability.getTargets().size() > 0) { abilityView.setTargets(ability.getTargets()); diff --git a/Mage.Common/src/mage/view/GameView.java b/Mage.Common/src/mage/view/GameView.java index 02adfe140d..467780abf1 100644 --- a/Mage.Common/src/mage/view/GameView.java +++ b/Mage.Common/src/mage/view/GameView.java @@ -95,7 +95,7 @@ public class GameView implements Serializable { } for (StackObject stackObject: state.getStack()) { if (stackObject instanceof StackAbility) { - // Stack Ability + // Stack Ability MageObject object = game.getObject(stackObject.getSourceId()); Card card = game.getCard(stackObject.getSourceId()); if (card != null) { diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index 8a5dae7d00..4388c3df78 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -98,7 +98,7 @@ public class StackAbilityView extends CardView { private void updateTargets(Game game, StackAbility ability) { List names = new ArrayList<>(); for(UUID modeId : ability.getModes().getSelectedModes()) { - ability.getModes().setMode(ability.getModes().get(modeId)); + ability.getModes().setActiveMode(modeId); if (ability.getTargets().size() > 0) { setTargets(ability.getTargets()); } else { @@ -129,7 +129,7 @@ public class StackAbilityView extends CardView { if (ability.isModal()) { Modes modes = ability.getModes(); for(UUID modeId : modes.getSelectedModes()) { - modes.setMode(modes.get(modeId)); + modes.setActiveMode(modeId); this.rules.add("Chosen mode: " + ability.getEffects().getText(modes.get(modeId))+""); } } diff --git a/Mage.Common/src/mage/view/UserDataView.java b/Mage.Common/src/mage/view/UserDataView.java index b9ebc4f5b0..48aed4d25c 100644 --- a/Mage.Common/src/mage/view/UserDataView.java +++ b/Mage.Common/src/mage/view/UserDataView.java @@ -27,6 +27,9 @@ public class UserDataView implements Serializable { public UserDataView(UserData userData) { this.avatarId = userData.getAvatarId(); this.userGroup = userData.getGroupId(); + this.allowRequestShowHandCards = userData.isAllowRequestShowHandCards(); + this.showAbilityPickerForced = userData.isShowAbilityPickerForced(); + this.userSkipPrioritySteps = userData.getUserSkipPrioritySteps(); } public int getAvatarId() { diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java index bc197b421a..d58a47dbaa 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java @@ -347,7 +347,10 @@ public class SimulatedPlayer2 extends ComputerPlayer { } for (int j = 0; j < attackersList.size(); j++) { if (binary.charAt(j) == '1') { - sim.getCombat().declareAttacker(attackersList.get(j).getId(), defenderId, sim); + setStoredBookmark(sim.bookmarkState()); // makes it possible to UNDO a declared attacker with costs from e.g. Propaganda + if(!sim.getCombat().declareAttacker(attackersList.get(j).getId(), defenderId, playerId, sim)) { + sim.undo(playerId); + } } } if (engagements.put(sim.getCombat().getValue().hashCode(), sim.getCombat()) != null) { 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 0dc0a7656e..ea73a9d567 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 @@ -28,25 +28,84 @@ package mage.player.ai; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; +import java.util.TreeMap; +import java.util.UUID; import mage.MageObject; import mage.Mana; -import mage.abilities.*; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbility; +import mage.abilities.Mode; +import mage.abilities.Modes; +import mage.abilities.SpellAbility; +import mage.abilities.TriggeredAbility; import mage.abilities.costs.VariableCost; -import mage.abilities.costs.mana.*; +import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.HybridManaCost; +import mage.abilities.costs.mana.ManaCost; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.costs.mana.MonoHybridManaCost; +import mage.abilities.costs.mana.PhyrexianManaCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.abilities.keyword.*; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.EquipAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.TrampleAbility; import mage.abilities.mana.ManaAbility; import mage.abilities.mana.ManaOptions; import mage.cards.Card; import mage.cards.Cards; import mage.cards.decks.Deck; -import mage.cards.repository.*; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; +import mage.cards.repository.ExpansionInfo; +import mage.cards.repository.ExpansionRepository; import mage.choices.Choice; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Outcome; +import static mage.constants.PhaseStep.DECLARE_ATTACKERS; +import static mage.constants.PhaseStep.DECLARE_BLOCKERS; +import static mage.constants.PhaseStep.DRAW; +import static mage.constants.PhaseStep.END_COMBAT; +import static mage.constants.PhaseStep.POSTCOMBAT_MAIN; +import static mage.constants.PhaseStep.PRECOMBAT_MAIN; +import static mage.constants.PhaseStep.UPKEEP; +import mage.constants.RangeOfInfluence; +import mage.constants.Rarity; +import static mage.constants.SpellAbilityType.SPLIT; +import static mage.constants.SpellAbilityType.SPLIT_FUSED; +import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.common.*; +import mage.filter.common.FilterCreatureForCombatBlock; +import mage.filter.common.FilterCreatureOrPlayer; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterLandCard; +import mage.filter.common.FilterNonlandCard; +import mage.filter.common.FilterPermanentOrPlayer; +import mage.filter.common.FilterPlaneswalkerPermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.game.Game; import mage.game.combat.CombatGroup; import mage.game.draft.Draft; @@ -65,20 +124,31 @@ import mage.players.Player; import mage.players.PlayerImpl; import mage.players.net.UserData; import mage.players.net.UserGroup; -import mage.target.*; -import mage.target.common.*; +import mage.target.Target; +import mage.target.TargetAmount; +import mage.target.TargetCard; +import mage.target.TargetPermanent; +import mage.target.TargetPlayer; +import mage.target.TargetSource; +import mage.target.TargetSpell; +import mage.target.common.TargetCardInASingleGraveyard; +import mage.target.common.TargetCardInExile; +import mage.target.common.TargetCardInGraveyard; +import mage.target.common.TargetCardInHand; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetCardInOpponentsGraveyard; +import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreatureOrPlayer; +import mage.target.common.TargetCreatureOrPlayerAmount; +import mage.target.common.TargetDefender; +import mage.target.common.TargetDiscard; +import mage.target.common.TargetPermanentOrPlayer; +import mage.target.common.TargetSpellOrPermanent; import mage.util.Copier; import mage.util.TreeNode; import org.apache.log4j.Logger; -import java.io.IOException; -import java.io.Serializable; -import java.util.*; -import java.util.Map.Entry; -import mage.filter.Filter; -import mage.filter.predicate.other.PlayerIdPredicate; -import mage.filter.predicate.permanent.ControllerIdPredicate; - /** * @@ -119,10 +189,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { return false; } Set lands = hand.getCards(new FilterLandCard(), game); - if (lands.size() < 2 || lands.size() > hand.size() - 2) { - return true; - } - return false; + return lands.size() < 2 || lands.size() > hand.size() - 2; } @Override @@ -1975,7 +2042,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { protected void logState(Game game) { if (log.isTraceEnabled()) { - logList("Computer player " + name + " hand: ", new ArrayList(hand.getCards(game))); + logList("Computer player " + name + " hand: ", new ArrayList(hand.getCards(game))); } } diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java index 139710ad9d..c64f365fd4 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java @@ -187,7 +187,10 @@ public class SimulatedPlayerMCTS extends MCTSPlayer { } for (int i = 0; i < attackersList.size(); i++) { if (binary.charAt(i) == '1') { - game.getCombat().declareAttacker(attackersList.get(i).getId(), defenderId, game); + setStoredBookmark(game.bookmarkState()); // makes it possible to UNDO a declared attacker with costs from e.g. Propaganda + if (!game.getCombat().declareAttacker(attackersList.get(i).getId(), defenderId, playerId, game)) { + game.undo(playerId); + } } } actionCount++; diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java index b114403fa5..a43eddaa76 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java @@ -177,8 +177,12 @@ public class SimulatedPlayer extends ComputerPlayer { binary.insert(0, "0"); } for (int j = 0; j < attackersList.size(); j++) { - if (binary.charAt(j) == '1') - sim.getCombat().declareAttacker(attackersList.get(j).getId(), defenderId, sim); + if (binary.charAt(j) == '1') { + setStoredBookmark(sim.bookmarkState()); // makes it possible to UNDO a declared attacker with costs from e.g. Propaganda + if (!sim.getCombat().declareAttacker(attackersList.get(j).getId(), defenderId, playerId, sim)) { + sim.undo(playerId); + } + } } if (engagements.put(sim.getCombat().getValue().hashCode(), sim.getCombat()) != null) { logger.debug("simulating -- found redundant attack combination"); 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 ecc476e085..0a500b4440 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 @@ -315,29 +315,18 @@ public class HumanPlayer extends PlayerImpl { game.fireSelectTargetEvent(playerId, target.getMessage(), possibleTargets, required, getOptions(target, null)); waitForResponse(game); if (response.getUUID() != null) { + if (target.getTargets().contains(response.getUUID())) { + target.remove(response.getUUID()); + continue; + } if (possibleTargets.contains(response.getUUID())) { - if (target instanceof TargetPermanent) { - if (((TargetPermanent)target).canTarget(playerId, response.getUUID(), source, game)) { - if (target.getTargets().contains(response.getUUID())) { // if already included remove it with - target.remove(response.getUUID()); - } else { - target.addTarget(response.getUUID(), source, game); - if(target.doneChosing()){ - return true; - } - } - } - } else if (target.canTarget(playerId, response.getUUID(), source, game)) { - if (target.getTargets().contains(response.getUUID())) { // if already included remove it with - target.remove(response.getUUID()); - } else { - target.addTarget(response.getUUID(), source, game); - } + if (target.canTarget(playerId, response.getUUID(), source, game)) { + target.addTarget(response.getUUID(), source, game); if(target.doneChosing()){ return true; } } - } // else do nothing - allow to pick another target + } } else { if (target.getTargets().size() >= target.getNumberOfTargets()) { return true; diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index f26ac452da..d9231e36a1 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -212,6 +212,7 @@ public class TableController { logger.debug("Player " + player.getName() + " id: "+ player.getId() + " joined tableId: " + table.getId()); //only inform human players and add them to sessionPlayerMap if (seat.getPlayer().isHuman()) { + seat.getPlayer().setUserData(user.getUserData()); user.addTable(player.getId(), table); user.ccJoinedTable(table.getRoomId(), table.getId(), true); userPlayerMap.put(userId, player.getId()); @@ -300,6 +301,7 @@ public class TableController { logger.trace(player.getName() + " joined tableId: " + table.getId()); //only inform human players and add them to sessionPlayerMap if (seat.getPlayer().isHuman()) { + seat.getPlayer().setUserData(user.getUserData()); if (!table.isTournamentSubTable()) { user.addTable(player.getId(), table); } @@ -552,14 +554,10 @@ public class TableController { GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId); String creator = null; StringBuilder opponent = new StringBuilder(); -// int activePlayers = 0; for (Entry entry: userPlayerMap.entrySet()) { // no AI players if (!match.getPlayer(entry.getValue()).hasQuit()) { User user = UserManager.getInstance().getUser(entry.getKey()); if (user != null) { -// activePlayers++; - Player player = match.getPlayer(entry.getValue()).getPlayer(); - player.setRequestToShowHandCardsAllowed(user.getUserData().allowRequestShowHandCards()); user.ccGameStarted(match.getGame().getId(), entry.getValue()); if (creator == null) { @@ -582,16 +580,12 @@ public class TableController { // Append AI opponents to the log file for (MatchPlayer mPlayer :match.getPlayers()) { if (!mPlayer.getPlayer().isHuman()) { -// activePlayers++; if (opponent.length() > 0) { opponent.append(" - "); } opponent.append(mPlayer.getName()); } } -// if (activePlayers < 2) { -// throw new MageException("Can't start game - Less than two players active - " +activePlayers); -// } ServerMessagesUtil.getInstance().incGamesStarted(); diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 525a8c4380..03323883f0 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -331,7 +331,6 @@ public class GameController implements GameCallback { if (gameSession == null) { gameSession = new GameSessionPlayer(game, userId, playerId); gameSessions.put(playerId, gameSession); - gameSession.setUserData(user.getUserData()); joinType = "joined"; } else { joinType = "rejoined"; diff --git a/Mage.Server/src/main/java/mage/server/game/GameFactory.java b/Mage.Server/src/main/java/mage/server/game/GameFactory.java index b303366809..fe13cb3dd9 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameFactory.java +++ b/Mage.Server/src/main/java/mage/server/game/GameFactory.java @@ -48,9 +48,9 @@ public class GameFactory { private static final GameFactory INSTANCE = new GameFactory(); private static final Logger logger = Logger.getLogger(GameFactory.class); - private Map> games = new HashMap>(); - private Map gameTypes = new HashMap(); - private List gameTypeViews = new ArrayList(); + private final Map> games = new HashMap<>(); + private final Map gameTypes = new HashMap<>(); + private final List gameTypeViews = new ArrayList<>(); public static GameFactory getInstance() { diff --git a/Mage.Server/src/main/java/mage/server/game/GameManager.java b/Mage.Server/src/main/java/mage/server/game/GameManager.java index b1fde3adfc..7075ea8e07 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameManager.java +++ b/Mage.Server/src/main/java/mage/server/game/GameManager.java @@ -135,19 +135,6 @@ public class GameManager { } } -// public void removeSession(UUID userId) { -// for (GameController controller: gameControllers.values()) { -// controller.kill(userId); -// } -// } - -// public void kill(UUID gameId, UUID userId) { -// GameController gameController = gameControllers.get(gameId); -// if (gameController != null) { -// gameController.kill(userId); -// } -// } - public void cheat(UUID gameId, UUID userId, UUID playerId, DeckCardLists deckList) { GameController gameController = gameControllers.get(gameId); if (gameController != null) { diff --git a/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java b/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java index 3f3e4f2467..ef3df60402 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java +++ b/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java @@ -70,8 +70,6 @@ public class GameSessionPlayer extends GameSessionWatcher { private static final ExecutorService callExecutor = ThreadExecutor.getInstance().getCallExecutor(); - private UserData userData; - public GameSessionPlayer(Game game, UUID userId, UUID playerId) { super(userId, game, true); this.playerId = playerId; @@ -214,7 +212,6 @@ public class GameSessionPlayer extends GameSessionWatcher { @Override public GameView getGameView() { Player player = game.getPlayer(playerId); - player.setUserData(this.userData); GameView gameView = new GameView(game.getState(), game, playerId, null); gameView.setHand(new CardsView(player.getHand().getCards(game))); if (gameView.getPriorityPlayerName().equals(player.getName())) { @@ -298,7 +295,4 @@ public class GameSessionPlayer extends GameSessionWatcher { } } - public void setUserData(UserData userData) { - this.userData = userData; - } } diff --git a/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java b/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java index 7bf674e849..49d8981170 100644 --- a/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java +++ b/Mage.Sets/src/mage/sets/AnthologyDivineVsDemonic.java @@ -43,7 +43,7 @@ public class AnthologyDivineVsDemonic extends ExpansionSet { } private AnthologyDivineVsDemonic() { - super("Duel Decks: Anthology, Divine vs. Demonic", "DD3", "mage.sets.anthologydivinevsdemonic", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); + super("Duel Decks: Anthology, Divine vs. Demonic", "DD3A", "mage.sets.anthologydivinevsdemonic", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); this.hasBasicLands = false; } } diff --git a/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java b/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java index 71525212c9..cafe6bba64 100644 --- a/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java +++ b/Mage.Sets/src/mage/sets/AnthologyElvesVsGoblins.java @@ -43,7 +43,7 @@ public class AnthologyElvesVsGoblins extends ExpansionSet { } private AnthologyElvesVsGoblins() { - super("Duel Decks: Anthology, Elves vs. Goblins", "DD3", "mage.sets.anthologyelvesvsgoblins", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); + super("Duel Decks: Anthology, Elves vs. Goblins", "DD3B", "mage.sets.anthologyelvesvsgoblins", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); this.hasBasicLands = false; } } diff --git a/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java b/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java index 46ea8abcb3..72c66622df 100644 --- a/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java +++ b/Mage.Sets/src/mage/sets/AnthologyGarrukVsLiliana.java @@ -43,7 +43,7 @@ public class AnthologyGarrukVsLiliana extends ExpansionSet { } private AnthologyGarrukVsLiliana() { - super("Duel Decks: Anthology, Garruk vs. Liliana", "DD3", "mage.sets.anthologygarrukvsliliana", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); + super("Duel Decks: Anthology, Garruk vs. Liliana", "DD3C", "mage.sets.anthologygarrukvsliliana", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); this.hasBasicLands = false; } } diff --git a/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java b/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java index f623c5eb05..c21ca185a3 100644 --- a/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java +++ b/Mage.Sets/src/mage/sets/AnthologyJaceVsChandra.java @@ -43,7 +43,7 @@ public class AnthologyJaceVsChandra extends ExpansionSet { } private AnthologyJaceVsChandra() { - super("Duel Decks: Anthology, Jace vs. Chandra", "DD3", "mage.sets.anthologyjacevschandra", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); + super("Duel Decks: Anthology, Jace vs. Chandra", "DD3D", "mage.sets.anthologyjacevschandra", new GregorianCalendar(2014, 12, 5).getTime(), SetType.DUEL_DECK); this.hasBasicLands = false; } } diff --git a/Mage.Sets/src/mage/sets/TempestRemastered.java b/Mage.Sets/src/mage/sets/TempestRemastered.java new file mode 100644 index 0000000000..cf18da587a --- /dev/null +++ b/Mage.Sets/src/mage/sets/TempestRemastered.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.sets; + +import java.util.GregorianCalendar; +import mage.cards.ExpansionSet; +import mage.constants.SetType; + +/** + * + * @author fireshoes + */ +public class TempestRemastered extends ExpansionSet { + + private static final TempestRemastered fINSTANCE = new TempestRemastered(); + + public static TempestRemastered getInstance() { + return fINSTANCE; + } + + private TempestRemastered() { + super("Tempest Remastered", "TPR", "mage.sets.tempestremastered", new GregorianCalendar(2015, 5, 6).getTime(), SetType.REPRINT); + this.hasBasicLands = true; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + } +} diff --git a/Mage.Sets/src/mage/sets/VintageMasters.java b/Mage.Sets/src/mage/sets/VintageMasters.java index 5d612fe9fc..06a50aec06 100644 --- a/Mage.Sets/src/mage/sets/VintageMasters.java +++ b/Mage.Sets/src/mage/sets/VintageMasters.java @@ -1,103 +1,101 @@ -/* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - -package mage.sets; - -import java.util.ArrayList; -import java.util.GregorianCalendar; -import java.util.List; -import mage.cards.ExpansionSet; -import mage.cards.repository.CardCriteria; -import mage.cards.repository.CardInfo; -import mage.cards.repository.CardRepository; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.SetType; - - - -/** - * - * @author LevelX2 - */ -public class VintageMasters extends ExpansionSet { - - private static final VintageMasters fINSTANCE = new VintageMasters(); - - public static VintageMasters getInstance() { - return fINSTANCE; - } - - private VintageMasters() { - super("Vintage Masters", "VMA", "mage.sets.vintagemasters", new GregorianCalendar(2014, 6, 16).getTime(), SetType.REPRINT); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterSpecial = 1; - this.numBoosterLands = 0; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 8; - } - - @Override - public List getSpecialCommon() { - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.COMMON).setCodes(this.code); - return CardRepository.instance.findCards(criteria); - } - - @Override - public List getSpecialUncommon() { - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.UNCOMMON).setCodes(this.code); - return CardRepository.instance.findCards(criteria); - } - - @Override - public List getSpecialRare() { - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.RARE).setCodes(this.code); - return CardRepository.instance.findCards(criteria); - } - - @Override - public List getSpecialMythic() { - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.MYTHIC).setCodes(this.code); - return CardRepository.instance.findCards(criteria); - } - - @Override - public List getSpecialBonus() { - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.BONUS).setCodes(this.code); - return CardRepository.instance.findCards(criteria); - } - -} +/* +* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.sets; + +import java.util.GregorianCalendar; +import java.util.List; +import mage.cards.ExpansionSet; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; +import mage.constants.Rarity; +import mage.constants.SetType; + + + +/** + * + * @author LevelX2 + */ +public class VintageMasters extends ExpansionSet { + + private static final VintageMasters fINSTANCE = new VintageMasters(); + + public static VintageMasters getInstance() { + return fINSTANCE; + } + + private VintageMasters() { + super("Vintage Masters", "VMA", "mage.sets.vintagemasters", new GregorianCalendar(2014, 6, 16).getTime(), SetType.REPRINT); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterSpecial = 1; + this.numBoosterLands = 0; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + } + + @Override + public List getSpecialCommon() { + CardCriteria criteria = new CardCriteria(); + criteria.rarities(Rarity.COMMON).setCodes(this.code); + return CardRepository.instance.findCards(criteria); + } + + @Override + public List getSpecialUncommon() { + CardCriteria criteria = new CardCriteria(); + criteria.rarities(Rarity.UNCOMMON).setCodes(this.code); + return CardRepository.instance.findCards(criteria); + } + + @Override + public List getSpecialRare() { + CardCriteria criteria = new CardCriteria(); + criteria.rarities(Rarity.RARE).setCodes(this.code); + return CardRepository.instance.findCards(criteria); + } + + @Override + public List getSpecialMythic() { + CardCriteria criteria = new CardCriteria(); + criteria.rarities(Rarity.MYTHIC).setCodes(this.code); + return CardRepository.instance.findCards(criteria); + } + + @Override + public List getSpecialBonus() { + CardCriteria criteria = new CardCriteria(); + criteria.rarities(Rarity.BONUS).setCodes(this.code); + return CardRepository.instance.findCards(criteria); + } + +} diff --git a/Mage.Sets/src/mage/sets/alarareborn/ArchitectsOfWill.java b/Mage.Sets/src/mage/sets/alarareborn/ArchitectsOfWill.java index 51ab815791..fcb12f8349 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/ArchitectsOfWill.java +++ b/Mage.Sets/src/mage/sets/alarareborn/ArchitectsOfWill.java @@ -42,10 +42,8 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; -import mage.filter.FilterCard; import mage.game.Game; import mage.players.Player; -import mage.target.TargetCard; import mage.target.TargetPlayer; /** @@ -60,8 +58,6 @@ public class ArchitectsOfWill extends CardImpl { this.subtype.add("Human"); this.subtype.add("Wizard"); - - this.power = new MageInt(3); this.toughness = new MageInt(3); @@ -102,37 +98,22 @@ class ArchitectsOfWillEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player you = game.getPlayer(source.getControllerId()); - Player player = game.getPlayer(source.getFirstTarget()); - if (player == null || you == null) { + Player controller = game.getPlayer(source.getControllerId()); + Player targetPlayer = game.getPlayer(source.getFirstTarget()); + if (targetPlayer == null + || controller == null) { return false; } - Cards cards = new CardsImpl(Zone.PICK); - int count = Math.min(player.getLibrary().size(), 3); + Cards cards = new CardsImpl(Zone.LIBRARY); + int count = Math.min(targetPlayer.getLibrary().size(), 3); for (int i = 0; i < count; i++) { - Card card = player.getLibrary().removeFromTop(game); + Card card = targetPlayer.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); - game.setZone(card.getId(), Zone.PICK); } } - - you.lookAtCards("Architects of Will", cards, game); - - TargetCard target = new TargetCard(Zone.PICK, new FilterCard("card to put on the top of target player's library")); - while (you.isInGame() && cards.size() > 1) { - you.choose(Outcome.Neutral, cards, target, game); - Card card = cards.get(target.getFirstTarget(), game); - if (card != null) { - cards.remove(card); - card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); - } - target.clearChosen(); - } - if (cards.size() == 1) { - Card card = cards.get(cards.iterator().next(), game); - card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); - } + controller.lookAtCards("Architects of Will", cards, game); + controller.putCardsOnTopOfLibrary(cards, game, source, true); return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java b/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java index f4bbe5b34e..414e9e9cee 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java +++ b/Mage.Sets/src/mage/sets/alarareborn/SlaveOfBolas.java @@ -101,7 +101,7 @@ class SlaveOfBolasEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java b/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java index 08d281f7c6..12eef6fe43 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java +++ b/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java @@ -116,7 +116,7 @@ class ThoughtHemorrhageEffect extends OneShotEffect { // search cards in graveyard for (Card checkCard : targetPlayer.getGraveyard().getCards(game)) { if (checkCard.getName().equals(cardName)) { - controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } @@ -126,7 +126,7 @@ class ThoughtHemorrhageEffect extends OneShotEffect { for(UUID cardId: targetCardsHand.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } } @@ -137,7 +137,7 @@ class ThoughtHemorrhageEffect extends OneShotEffect { for(UUID cardId: targetCardsLibrary.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/alarareborn/UnscytheKillerOfKings.java b/Mage.Sets/src/mage/sets/alarareborn/UnscytheKillerOfKings.java index 0fbf55ffaa..b4bf3105dd 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/UnscytheKillerOfKings.java +++ b/Mage.Sets/src/mage/sets/alarareborn/UnscytheKillerOfKings.java @@ -156,7 +156,7 @@ class UnscytheEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Card card = game.getCard(targetPointer.getFirst(game, source)); - if (card != null && game.getState().getZone(card.getId()).equals(Zone.GRAVEYARD) && controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD)) { + if (card != null && game.getState().getZone(card.getId()).equals(Zone.GRAVEYARD) && controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true)) { ZombieToken zombie = new ZombieToken("ALA"); return zombie.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); } diff --git a/Mage.Sets/src/mage/sets/alliances/AesthirGlider.java b/Mage.Sets/src/mage/sets/alliances/AesthirGlider.java new file mode 100644 index 0000000000..151644e67f --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/AesthirGlider.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.alliances; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CantBlockAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author Sir-Speshkitty + */ +public class AesthirGlider extends CardImpl { + + public AesthirGlider(UUID ownerId) { + super(ownerId, 156, "Aesthir Glider", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}"); + this.expansionSetCode = "ALL"; + this.subtype.add("Bird"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Aesthir Glider can't block. + this.addAbility(new CantBlockAbility()); + } + + public AesthirGlider(final AesthirGlider card) { + super(card); + } + + @Override + public AesthirGlider copy() { + return new AesthirGlider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/alliances/PhyrexianDevourer.java b/Mage.Sets/src/mage/sets/alliances/PhyrexianDevourer.java index 8c1990ff7b..a7ba4876f7 100644 --- a/Mage.Sets/src/mage/sets/alliances/PhyrexianDevourer.java +++ b/Mage.Sets/src/mage/sets/alliances/PhyrexianDevourer.java @@ -170,7 +170,7 @@ class ExileTopCardLibraryCost extends CostImpl { if (controller != null) { card = controller.getLibrary().getFromTop(game); if (card != null) { - paid = controller.moveCardToExileWithInfo(card, null, "", sourceId, game, Zone.LIBRARY); + paid = controller.moveCardToExileWithInfo(card, null, "", sourceId, game, Zone.LIBRARY, true); } } return paid; diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalGatekeeper.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalGatekeeper.java index ef38a88898..cc2284ebff 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalGatekeeper.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalGatekeeper.java @@ -38,7 +38,7 @@ public class AbyssalGatekeeper extends mage.sets.divinevsdemonic.AbyssalGatekeep public AbyssalGatekeeper(UUID ownerId) { super(ownerId); this.cardNumber = 31; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AbyssalGatekeeper(final AbyssalGatekeeper card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalSpecter.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalSpecter.java index 25b542389e..533b50fe6e 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalSpecter.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AbyssalSpecter.java @@ -38,7 +38,7 @@ public class AbyssalSpecter extends mage.sets.fifthedition.AbyssalSpecter { public AbyssalSpecter(UUID ownerId) { super(ownerId); this.cardNumber = 40; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AbyssalSpecter(final AbyssalSpecter card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AkromaAngelOfWrath.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AkromaAngelOfWrath.java index 36e8066659..3a5b991598 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AkromaAngelOfWrath.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AkromaAngelOfWrath.java @@ -39,7 +39,7 @@ public class AkromaAngelOfWrath extends mage.sets.timeshifted.AkromaAngelOfWrath public AkromaAngelOfWrath(UUID ownerId) { super(ownerId); this.cardNumber = 1; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; this.rarity = Rarity.MYTHIC; } diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelOfMercy.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelOfMercy.java index 76b5116df8..569e061020 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelOfMercy.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelOfMercy.java @@ -38,7 +38,7 @@ public class AngelOfMercy extends mage.sets.tenth.AngelOfMercy { public AngelOfMercy(UUID ownerId) { super(ownerId); this.cardNumber = 9; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AngelOfMercy(final AngelOfMercy card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicBenediction.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicBenediction.java index 45782ea5f2..16d989f6d2 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicBenediction.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicBenediction.java @@ -38,7 +38,7 @@ public class AngelicBenediction extends mage.sets.shardsofalara.AngelicBenedicti public AngelicBenediction(UUID ownerId) { super(ownerId); this.cardNumber = 19; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AngelicBenediction(final AngelicBenediction card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicPage.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicPage.java index 39cb91c412..7faf05a282 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicPage.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicPage.java @@ -38,7 +38,7 @@ public class AngelicPage extends mage.sets.urzassaga.AngelicPage { public AngelicPage(UUID ownerId) { super(ownerId); this.cardNumber = 3; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AngelicPage(final AngelicPage card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicProtector.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicProtector.java index 3afbee32cb..b0c731355d 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicProtector.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelicProtector.java @@ -38,7 +38,7 @@ public class AngelicProtector extends mage.sets.tempest.AngelicProtector { public AngelicProtector(UUID ownerId) { super(ownerId); this.cardNumber = 6; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AngelicProtector(final AngelicProtector card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelsFeather.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelsFeather.java index e948ed0a0f..5dc32de636 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelsFeather.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/AngelsFeather.java @@ -38,7 +38,7 @@ public class AngelsFeather extends mage.sets.tenth.AngelsFeather { public AngelsFeather(UUID ownerId) { super(ownerId); this.cardNumber = 23; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public AngelsFeather(final AngelsFeather card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Angelsong.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Angelsong.java index efa249178f..98afe92e81 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Angelsong.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Angelsong.java @@ -38,7 +38,7 @@ public class Angelsong extends mage.sets.shardsofalara.Angelsong { public Angelsong(UUID ownerId) { super(ownerId); this.cardNumber = 15; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Angelsong(final Angelsong card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarrenMoor.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarrenMoor.java index f7c54fdef1..7b2db3ddc7 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarrenMoor.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarrenMoor.java @@ -38,7 +38,7 @@ public class BarrenMoor extends mage.sets.onslaught.BarrenMoor { public BarrenMoor(UUID ownerId) { super(ownerId); this.cardNumber = 58; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public BarrenMoor(final BarrenMoor card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarterInBlood.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarterInBlood.java index e0355a27f1..f506b38ca7 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarterInBlood.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BarterInBlood.java @@ -38,7 +38,7 @@ public class BarterInBlood extends mage.sets.avacynrestored.BarterInBlood { public BarterInBlood(UUID ownerId) { super(ownerId); this.cardNumber = 52; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public BarterInBlood(final BarterInBlood card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BreedingPit.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BreedingPit.java index 1c1a475c0d..98b910c7d3 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BreedingPit.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/BreedingPit.java @@ -38,7 +38,7 @@ public class BreedingPit extends mage.sets.fifthedition.BreedingPit { public BreedingPit(UUID ownerId) { super(ownerId); this.cardNumber = 53; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public BreedingPit(final BreedingPit card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CacklingImp.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CacklingImp.java index b197e3eca2..ae637ec01d 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CacklingImp.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CacklingImp.java @@ -38,7 +38,7 @@ public class CacklingImp extends mage.sets.divinevsdemonic.CacklingImp { public CacklingImp(UUID ownerId) { super(ownerId); this.cardNumber = 41; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public CacklingImp(final CacklingImp card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ChargingPaladin.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ChargingPaladin.java index 840e65c4c6..dae9c45c2c 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ChargingPaladin.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ChargingPaladin.java @@ -38,7 +38,7 @@ public class ChargingPaladin extends mage.sets.divinevsdemonic.ChargingPaladin { public ChargingPaladin(UUID ownerId) { super(ownerId); this.cardNumber = 4; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public ChargingPaladin(final ChargingPaladin card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ConsumeSpirit.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ConsumeSpirit.java index e105297be1..7e2b04a834 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ConsumeSpirit.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ConsumeSpirit.java @@ -38,7 +38,7 @@ public class ConsumeSpirit extends mage.sets.magic2010.ConsumeSpirit { public ConsumeSpirit(UUID ownerId) { super(ownerId); this.cardNumber = 56; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public ConsumeSpirit(final ConsumeSpirit card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Corrupt.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Corrupt.java index 48994790d6..a72b12a489 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Corrupt.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Corrupt.java @@ -38,7 +38,7 @@ public class Corrupt extends mage.sets.magic2011.Corrupt { public Corrupt(UUID ownerId) { super(ownerId); this.cardNumber = 55; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Corrupt(final Corrupt card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CruelEdict.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CruelEdict.java index 0b0ab61f5b..e4ea4d6092 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CruelEdict.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/CruelEdict.java @@ -38,7 +38,7 @@ public class CruelEdict extends mage.sets.tenth.CruelEdict { public CruelEdict(UUID ownerId) { super(ownerId); this.cardNumber = 48; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public CruelEdict(final CruelEdict card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DaggerclawImp.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DaggerclawImp.java index 0e2c60ff78..a63a35cee0 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DaggerclawImp.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DaggerclawImp.java @@ -38,7 +38,7 @@ public class DaggerclawImp extends mage.sets.guildpact.DaggerclawImp { public DaggerclawImp(UUID ownerId) { super(ownerId); this.cardNumber = 33; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DaggerclawImp(final DaggerclawImp card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkBanishing.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkBanishing.java index 851033de4d..a9963db347 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkBanishing.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkBanishing.java @@ -38,7 +38,7 @@ public class DarkBanishing extends mage.sets.tempest.DarkBanishing { public DarkBanishing(UUID ownerId) { super(ownerId); this.cardNumber = 50; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DarkBanishing(final DarkBanishing card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkRitual.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkRitual.java index 5b5469dfc4..5f132c596c 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkRitual.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DarkRitual.java @@ -38,7 +38,7 @@ public class DarkRitual extends mage.sets.planechase.DarkRitual { public DarkRitual(UUID ownerId) { super(ownerId); this.cardNumber = 45; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DarkRitual(final DarkRitual card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonicTutor.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonicTutor.java index bd7f21ecf0..4d395d2a87 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonicTutor.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonicTutor.java @@ -38,7 +38,7 @@ public class DemonicTutor extends mage.sets.limitedalpha.DemonicTutor { public DemonicTutor(UUID ownerId) { super(ownerId); this.cardNumber = 49; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DemonicTutor(final DemonicTutor card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsHorn.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsHorn.java index 6814c5e058..07c4dd6ef6 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsHorn.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsHorn.java @@ -38,7 +38,7 @@ public class DemonsHorn extends mage.sets.tenth.DemonsHorn { public DemonsHorn(UUID ownerId) { super(ownerId); this.cardNumber = 57; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DemonsHorn(final DemonsHorn card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsJester.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsJester.java index c70c1182c1..c751369a0d 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsJester.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DemonsJester.java @@ -38,7 +38,7 @@ public class DemonsJester extends mage.sets.dissension.DemonsJester { public DemonsJester(UUID ownerId) { super(ownerId); this.cardNumber = 38; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DemonsJester(final DemonsJester card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Duress.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Duress.java index e294f750fc..405ae0c844 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Duress.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Duress.java @@ -38,7 +38,7 @@ public class Duress extends mage.sets.magic2010.Duress { public Duress(UUID ownerId) { super(ownerId); this.cardNumber = 46; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Duress(final Duress card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DuskImp.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DuskImp.java index 92e1db9f4b..23aad8ec4d 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DuskImp.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/DuskImp.java @@ -38,7 +38,7 @@ public class DuskImp extends mage.sets.tenth.DuskImp { public DuskImp(UUID ownerId) { super(ownerId); this.cardNumber = 34; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public DuskImp(final DuskImp card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FaithsFetters.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FaithsFetters.java index 7157afca08..80463b39e3 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FaithsFetters.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FaithsFetters.java @@ -38,7 +38,7 @@ public class FaithsFetters extends mage.sets.divinevsdemonic.FaithsFetters { public FaithsFetters(UUID ownerId) { super(ownerId); this.cardNumber = 20; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public FaithsFetters(final FaithsFetters card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FallenAngel.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FallenAngel.java index ee2a07c821..8928bcaa97 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FallenAngel.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FallenAngel.java @@ -38,7 +38,7 @@ public class FallenAngel extends mage.sets.seventhedition.FallenAngel { public FallenAngel(UUID ownerId) { super(ownerId); this.cardNumber = 42; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public FallenAngel(final FallenAngel card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FoulImp.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FoulImp.java index 03f6c51587..f327bc9e47 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FoulImp.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/FoulImp.java @@ -38,7 +38,7 @@ public class FoulImp extends mage.sets.stronghold.FoulImp { public FoulImp(UUID ownerId) { super(ownerId); this.cardNumber = 32; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public FoulImp(final FoulImp card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/HealingSalve.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/HealingSalve.java index a3b026817d..012ebadb2a 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/HealingSalve.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/HealingSalve.java @@ -38,7 +38,7 @@ public class HealingSalve extends mage.sets.seventhedition.HealingSalve { public HealingSalve(UUID ownerId) { super(ownerId); this.cardNumber = 14; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public HealingSalve(final HealingSalve card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/IcatianPriest.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/IcatianPriest.java index a4ab53123f..fb4f0fed0c 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/IcatianPriest.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/IcatianPriest.java @@ -38,7 +38,7 @@ public class IcatianPriest extends mage.sets.tenth.IcatianPriest { public IcatianPriest(UUID ownerId) { super(ownerId); this.cardNumber = 2; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public IcatianPriest(final IcatianPriest card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/KuroPitlord.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/KuroPitlord.java index d6539366a0..b7f34f7ab3 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/KuroPitlord.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/KuroPitlord.java @@ -38,7 +38,7 @@ public class KuroPitlord extends mage.sets.championsofkamigawa.KuroPitlord { public KuroPitlord(UUID ownerId) { super(ownerId); this.cardNumber = 44; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public KuroPitlord(final KuroPitlord card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LordOfThePit.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LordOfThePit.java index 2dffb99c4c..a1ac14a7b3 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LordOfThePit.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LordOfThePit.java @@ -38,7 +38,7 @@ public class LordOfThePit extends mage.sets.divinevsdemonic.LordOfThePit { public LordOfThePit(UUID ownerId) { super(ownerId); this.cardNumber = 30; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public LordOfThePit(final LordOfThePit card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LuminousAngel.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LuminousAngel.java index c2793a5b87..a8fd7d642e 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LuminousAngel.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/LuminousAngel.java @@ -38,7 +38,7 @@ public class LuminousAngel extends mage.sets.mirrodin.LuminousAngel { public LuminousAngel(UUID ownerId) { super(ownerId); this.cardNumber = 12; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public LuminousAngel(final LuminousAngel card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/MarbleDiamond.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/MarbleDiamond.java index d5afd1ba49..c79bd6c1e1 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/MarbleDiamond.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/MarbleDiamond.java @@ -38,7 +38,7 @@ public class MarbleDiamond extends mage.sets.seventhedition.MarbleDiamond { public MarbleDiamond(UUID ownerId) { super(ownerId); this.cardNumber = 24; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public MarbleDiamond(final MarbleDiamond card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OniPossession.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OniPossession.java index 80be6d0cac..3fec290fab 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OniPossession.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OniPossession.java @@ -38,7 +38,7 @@ public class OniPossession extends mage.sets.championsofkamigawa.OniPossession { public OniPossession(UUID ownerId) { super(ownerId); this.cardNumber = 51; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public OniPossession(final OniPossession card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OtherworldlyJourney.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OtherworldlyJourney.java index 5cb30cbe48..a862d19ad4 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OtherworldlyJourney.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OtherworldlyJourney.java @@ -38,7 +38,7 @@ public class OtherworldlyJourney extends mage.sets.championsofkamigawa.Otherworl public OtherworldlyJourney(UUID ownerId) { super(ownerId); this.cardNumber = 16; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public OtherworldlyJourney(final OtherworldlyJourney card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OvereagerApprentice.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OvereagerApprentice.java index 2f7dbe7719..4b7a6c6902 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OvereagerApprentice.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/OvereagerApprentice.java @@ -38,7 +38,7 @@ public class OvereagerApprentice extends mage.sets.odyssey.OvereagerApprentice { public OvereagerApprentice(UUID ownerId) { super(ownerId); this.cardNumber = 35; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public OvereagerApprentice(final OvereagerApprentice card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Pacifism.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Pacifism.java index 4ed317c230..c520788709 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Pacifism.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Pacifism.java @@ -38,7 +38,7 @@ public class Pacifism extends mage.sets.tenth.Pacifism { public Pacifism(UUID ownerId) { super(ownerId); this.cardNumber = 17; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Pacifism(final Pacifism card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains1.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains1.java index 5809c175cd..2cb3621ee0 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains1.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains1.java @@ -37,7 +37,7 @@ public class Plains1 extends mage.cards.basiclands.Plains { public Plains1(UUID ownerId) { super(ownerId, 26); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Plains1(final Plains1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains2.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains2.java index fc2c108509..28ba70e238 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains2.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains2.java @@ -37,7 +37,7 @@ public class Plains2 extends mage.cards.basiclands.Plains { public Plains2(UUID ownerId) { super(ownerId, 27); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Plains2(final Plains2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains3.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains3.java index 36a263bcce..4f124b23a7 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains3.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains3.java @@ -37,7 +37,7 @@ public class Plains3 extends mage.cards.basiclands.Plains { public Plains3(UUID ownerId) { super(ownerId, 28); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Plains3(final Plains3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains4.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains4.java index c354dfdb00..b907af4b37 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains4.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Plains4.java @@ -37,7 +37,7 @@ public class Plains4 extends mage.cards.basiclands.Plains { public Plains4(UUID ownerId) { super(ownerId, 29); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Plains4(final Plains4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/PromiseOfPower.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/PromiseOfPower.java index 7acae8697d..5d888bc033 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/PromiseOfPower.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/PromiseOfPower.java @@ -38,7 +38,7 @@ public class PromiseOfPower extends mage.sets.commander2014.PromiseOfPower { public PromiseOfPower(UUID ownerId) { super(ownerId); this.cardNumber = 54; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public PromiseOfPower(final PromiseOfPower card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReiverDemon.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReiverDemon.java index d84689e19e..1c7243f0d1 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReiverDemon.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReiverDemon.java @@ -38,7 +38,7 @@ public class ReiverDemon extends mage.sets.divinevsdemonic.ReiverDemon { public ReiverDemon(UUID ownerId) { super(ownerId); this.cardNumber = 43; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public ReiverDemon(final ReiverDemon card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReyaDawnbringer.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReyaDawnbringer.java index 52e593c6b1..51082c52bb 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReyaDawnbringer.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/ReyaDawnbringer.java @@ -38,7 +38,7 @@ public class ReyaDawnbringer extends mage.sets.tenth.ReyaDawnbringer { public ReyaDawnbringer(UUID ownerId) { super(ownerId); this.cardNumber = 13; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public ReyaDawnbringer(final ReyaDawnbringer card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/RighteousCause.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/RighteousCause.java index 3464c33ac2..ef5e9664d1 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/RighteousCause.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/RighteousCause.java @@ -38,7 +38,7 @@ public class RighteousCause extends mage.sets.commander.RighteousCause { public RighteousCause(UUID ownerId) { super(ownerId); this.cardNumber = 22; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public RighteousCause(final RighteousCause card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SecludedSteppe.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SecludedSteppe.java index 910b990b0a..c259a20416 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SecludedSteppe.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SecludedSteppe.java @@ -38,7 +38,7 @@ public class SecludedSteppe extends mage.sets.onslaught.SecludedSteppe { public SecludedSteppe(UUID ownerId) { super(ownerId); this.cardNumber = 25; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SecludedSteppe(final SecludedSteppe card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAdvocate.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAdvocate.java index 335fe1c6fb..6751deb042 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAdvocate.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAdvocate.java @@ -38,7 +38,7 @@ public class SerraAdvocate extends mage.sets.urzasdestiny.SerraAdvocate { public SerraAdvocate(UUID ownerId) { super(ownerId); this.cardNumber = 7; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SerraAdvocate(final SerraAdvocate card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAngel.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAngel.java index 34c18cd5bf..4ab4aec763 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAngel.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerraAngel.java @@ -38,7 +38,7 @@ public class SerraAngel extends mage.sets.tenth.SerraAngel { public SerraAngel(UUID ownerId) { super(ownerId); this.cardNumber = 10; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SerraAngel(final SerraAngel card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasBoon.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasBoon.java index 2d6a94c85e..a941c499bf 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasBoon.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasBoon.java @@ -38,7 +38,7 @@ public class SerrasBoon extends mage.sets.divinevsdemonic.SerrasBoon { public SerrasBoon(UUID ownerId) { super(ownerId); this.cardNumber = 18; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SerrasBoon(final SerrasBoon card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasEmbrace.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasEmbrace.java index 3e93f02bc9..1342437f4a 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasEmbrace.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SerrasEmbrace.java @@ -38,7 +38,7 @@ public class SerrasEmbrace extends mage.sets.tenth.SerrasEmbrace { public SerrasEmbrace(UUID ownerId) { super(ownerId); this.cardNumber = 21; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SerrasEmbrace(final SerrasEmbrace card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SootImp.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SootImp.java index 2e57684307..66f203b9d9 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SootImp.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SootImp.java @@ -38,7 +38,7 @@ public class SootImp extends mage.sets.eventide.SootImp { public SootImp(UUID ownerId) { super(ownerId); this.cardNumber = 37; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SootImp(final SootImp card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Souldrinker.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Souldrinker.java index a98bb0478c..b25445dcb7 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Souldrinker.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Souldrinker.java @@ -38,7 +38,7 @@ public class Souldrinker extends mage.sets.tempest.Souldrinker { public Souldrinker(UUID ownerId) { super(ownerId); this.cardNumber = 39; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Souldrinker(final Souldrinker card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/StinkweedImp.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/StinkweedImp.java index 16f7bf31e7..e79dd35372 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/StinkweedImp.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/StinkweedImp.java @@ -38,7 +38,7 @@ public class StinkweedImp extends mage.sets.ravnica.StinkweedImp { public StinkweedImp(UUID ownerId) { super(ownerId); this.cardNumber = 36; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public StinkweedImp(final StinkweedImp card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SustainerOfTheRealm.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SustainerOfTheRealm.java index 576fd1551e..ac968b7164 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SustainerOfTheRealm.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/SustainerOfTheRealm.java @@ -38,7 +38,7 @@ public class SustainerOfTheRealm extends mage.sets.urzaslegacy.SustainerOfTheRea public SustainerOfTheRealm(UUID ownerId) { super(ownerId); this.cardNumber = 8; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public SustainerOfTheRealm(final SustainerOfTheRealm card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp1.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp1.java index 8cfa8f9017..c155f2923e 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp1.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp1.java @@ -37,7 +37,7 @@ public class Swamp1 extends mage.cards.basiclands.Swamp { public Swamp1(UUID ownerId) { super(ownerId, 59); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Swamp1(final Swamp1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp2.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp2.java index 6193fa32b2..4e785efcda 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp2.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp2.java @@ -37,7 +37,7 @@ public class Swamp2 extends mage.cards.basiclands.Swamp { public Swamp2(UUID ownerId) { super(ownerId, 60); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Swamp2(final Swamp2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp3.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp3.java index 39bd819965..5d1dfb083d 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp3.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp3.java @@ -37,7 +37,7 @@ public class Swamp3 extends mage.cards.basiclands.Swamp { public Swamp3(UUID ownerId) { super(ownerId, 61); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Swamp3(final Swamp3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp4.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp4.java index 23e1bee6c6..f29438da26 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp4.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/Swamp4.java @@ -37,7 +37,7 @@ public class Swamp4 extends mage.cards.basiclands.Swamp { public Swamp4(UUID ownerId) { super(ownerId, 62); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public Swamp4(final Swamp4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/TwilightShepherd.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/TwilightShepherd.java index cb7fe79876..eea6d292eb 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/TwilightShepherd.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/TwilightShepherd.java @@ -38,7 +38,7 @@ public class TwilightShepherd extends mage.sets.shadowmoor.TwilightShepherd { public TwilightShepherd(UUID ownerId) { super(ownerId); this.cardNumber = 11; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public TwilightShepherd(final TwilightShepherd card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/UnholyStrength.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/UnholyStrength.java index 0c3b989d7c..d5031b3cf1 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/UnholyStrength.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/UnholyStrength.java @@ -38,7 +38,7 @@ public class UnholyStrength extends mage.sets.tenth.UnholyStrength { public UnholyStrength(UUID ownerId) { super(ownerId); this.cardNumber = 47; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public UnholyStrength(final UnholyStrength card) { diff --git a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/VenerableMonk.java b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/VenerableMonk.java index fffbc20898..dab2a7011f 100644 --- a/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/VenerableMonk.java +++ b/Mage.Sets/src/mage/sets/anthologydivinevsdemonic/VenerableMonk.java @@ -38,7 +38,7 @@ public class VenerableMonk extends mage.sets.tenth.VenerableMonk { public VenerableMonk(UUID ownerId) { super(ownerId); this.cardNumber = 5; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3A"; } public VenerableMonk(final VenerableMonk card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AkkiCoalflinger.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AkkiCoalflinger.java index a370a8eea2..145eac5ca6 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AkkiCoalflinger.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AkkiCoalflinger.java @@ -38,7 +38,7 @@ public class AkkiCoalflinger extends mage.sets.championsofkamigawa.AkkiCoalfling public AkkiCoalflinger(UUID ownerId) { super(ownerId); this.cardNumber = 33; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public AkkiCoalflinger(final AkkiCoalflinger card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AllosaurusRider.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AllosaurusRider.java index d965bbfe62..bab21afd2d 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AllosaurusRider.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AllosaurusRider.java @@ -38,7 +38,7 @@ public class AllosaurusRider extends mage.sets.elvesvsgoblins.AllosaurusRider { public AllosaurusRider(UUID ownerId) { super(ownerId); this.cardNumber = 2; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public AllosaurusRider(final AllosaurusRider card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AmbushCommander.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AmbushCommander.java index 2f690ea5e4..ad6194d3c1 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AmbushCommander.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/AmbushCommander.java @@ -38,7 +38,7 @@ public class AmbushCommander extends mage.sets.elvesvsgoblins.AmbushCommander { public AmbushCommander(UUID ownerId) { super(ownerId); this.cardNumber = 1; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public AmbushCommander(final AmbushCommander card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/BoggartShenanigans.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/BoggartShenanigans.java index 364f0992df..11a42c7e51 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/BoggartShenanigans.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/BoggartShenanigans.java @@ -38,7 +38,7 @@ public class BoggartShenanigans extends mage.sets.elvesvsgoblins.BoggartShenanig public BoggartShenanigans(UUID ownerId) { super(ownerId); this.cardNumber = 54; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public BoggartShenanigans(final BoggartShenanigans card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Clickslither.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Clickslither.java index ad1970cec5..e06954c612 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Clickslither.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Clickslither.java @@ -38,7 +38,7 @@ public class Clickslither extends mage.sets.elvesvsgoblins.Clickslither { public Clickslither(UUID ownerId) { super(ownerId); this.cardNumber = 34; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Clickslither(final Clickslither card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishEulogist.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishEulogist.java index 859d201335..ce4fbf6890 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishEulogist.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishEulogist.java @@ -38,7 +38,7 @@ public class ElvishEulogist extends mage.sets.lorwyn.ElvishEulogist { public ElvishEulogist(UUID ownerId) { super(ownerId); this.cardNumber = 3; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public ElvishEulogist(final ElvishEulogist card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishHarbinger.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishHarbinger.java index 6a35198893..bc380d94a4 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishHarbinger.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishHarbinger.java @@ -38,7 +38,7 @@ public class ElvishHarbinger extends mage.sets.lorwyn.ElvishHarbinger { public ElvishHarbinger(UUID ownerId) { super(ownerId); this.cardNumber = 4; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public ElvishHarbinger(final ElvishHarbinger card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishPromenade.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishPromenade.java index d1dd461660..b0c66272a0 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishPromenade.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishPromenade.java @@ -38,7 +38,7 @@ public class ElvishPromenade extends mage.sets.lorwyn.ElvishPromenade { public ElvishPromenade(UUID ownerId) { super(ownerId); this.cardNumber = 20; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public ElvishPromenade(final ElvishPromenade card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishWarrior.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishWarrior.java index f50314b0b5..bae01690c0 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishWarrior.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ElvishWarrior.java @@ -38,7 +38,7 @@ public class ElvishWarrior extends mage.sets.morningtide.ElvishWarrior { public ElvishWarrior(UUID ownerId) { super(ownerId); this.cardNumber = 5; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public ElvishWarrior(final ElvishWarrior card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/EmberwildeAugur.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/EmberwildeAugur.java index b1f28162ae..a9dcb320d2 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/EmberwildeAugur.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/EmberwildeAugur.java @@ -38,7 +38,7 @@ public class EmberwildeAugur extends mage.sets.elvesvsgoblins.EmberwildeAugur { public EmberwildeAugur(UUID ownerId) { super(ownerId); this.cardNumber = 35; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public EmberwildeAugur(final EmberwildeAugur card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/FlamewaveInvoker.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/FlamewaveInvoker.java index 5e4b6831e4..09deb80203 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/FlamewaveInvoker.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/FlamewaveInvoker.java @@ -38,7 +38,7 @@ public class FlamewaveInvoker extends mage.sets.tenth.FlamewaveInvoker { public FlamewaveInvoker(UUID ownerId) { super(ownerId); this.cardNumber = 36; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public FlamewaveInvoker(final FlamewaveInvoker card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest1.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest1.java index 342dceec7a..f77e5dd2ed 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest1.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest1.java @@ -37,7 +37,7 @@ public class Forest1 extends mage.cards.basiclands.Forest { public Forest1(UUID ownerId) { super(ownerId, 28); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Forest1(final Forest1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest2.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest2.java index e75040e308..5e975734d6 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest2.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest2.java @@ -37,7 +37,7 @@ public class Forest2 extends mage.cards.basiclands.Forest { public Forest2(UUID ownerId) { super(ownerId, 29); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Forest2(final Forest2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest3.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest3.java index ea54706d19..01b3eb6e56 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest3.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest3.java @@ -37,7 +37,7 @@ public class Forest3 extends mage.cards.basiclands.Forest { public Forest3(UUID ownerId) { super(ownerId, 30); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Forest3(final Forest3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest4.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest4.java index 60f1e900b0..b52d3e2436 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest4.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Forest4.java @@ -37,7 +37,7 @@ public class Forest4 extends mage.cards.basiclands.Forest { public Forest4(UUID ownerId) { super(ownerId, 31); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Forest4(final Forest4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ForgottenCave.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ForgottenCave.java index 2b4409eed3..87ea431fac 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ForgottenCave.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ForgottenCave.java @@ -38,7 +38,7 @@ public class ForgottenCave extends mage.sets.onslaught.ForgottenCave { public ForgottenCave(UUID ownerId) { super(ownerId); this.cardNumber = 57; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public ForgottenCave(final ForgottenCave card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmIncinerator.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmIncinerator.java index c401c7adf2..14bcd158c0 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmIncinerator.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmIncinerator.java @@ -38,7 +38,7 @@ public class GempalmIncinerator extends mage.sets.legions.GempalmIncinerator { public GempalmIncinerator(UUID ownerId) { super(ownerId); this.cardNumber = 37; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GempalmIncinerator(final GempalmIncinerator card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmStrider.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmStrider.java index 83118eed61..12dd528d04 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmStrider.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GempalmStrider.java @@ -38,7 +38,7 @@ public class GempalmStrider extends mage.sets.elvesvsgoblins.GempalmStrider { public GempalmStrider(UUID ownerId) { super(ownerId); this.cardNumber = 6; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GempalmStrider(final GempalmStrider card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GiantGrowth.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GiantGrowth.java index fd7ddc27bd..485d4272a1 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GiantGrowth.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GiantGrowth.java @@ -38,7 +38,7 @@ public class GiantGrowth extends mage.sets.tenth.GiantGrowth { public GiantGrowth(UUID ownerId) { super(ownerId); this.cardNumber = 21; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GiantGrowth(final GiantGrowth card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinBurrows.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinBurrows.java index 6fe985202f..51247381d4 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinBurrows.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinBurrows.java @@ -38,7 +38,7 @@ public class GoblinBurrows extends mage.sets.onslaught.GoblinBurrows { public GoblinBurrows(UUID ownerId) { super(ownerId); this.cardNumber = 58; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GoblinBurrows(final GoblinBurrows card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinCohort.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinCohort.java index 7dc05c5aa7..fe1416a5d0 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinCohort.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinCohort.java @@ -38,7 +38,7 @@ public class GoblinCohort extends mage.sets.betrayersofkamigawa.GoblinCohort { public GoblinCohort(UUID ownerId) { super(ownerId); this.cardNumber = 38; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GoblinCohort(final GoblinCohort card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinMatron.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinMatron.java index 7540ae2660..19c0f55a0a 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinMatron.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinMatron.java @@ -39,7 +39,7 @@ public class GoblinMatron extends mage.sets.urzassaga.GoblinMatron { public GoblinMatron(UUID ownerId) { super(ownerId); this.cardNumber = 39; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; this.rarity = Rarity.UNCOMMON; } diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinRingleader.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinRingleader.java index 66feebf586..85f70d9a60 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinRingleader.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinRingleader.java @@ -38,7 +38,7 @@ public class GoblinRingleader extends mage.sets.apocalypse.GoblinRingleader { public GoblinRingleader(UUID ownerId) { super(ownerId); this.cardNumber = 40; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GoblinRingleader(final GoblinRingleader card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinSledder.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinSledder.java index 236297ce2a..5db7b8c773 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinSledder.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinSledder.java @@ -38,7 +38,7 @@ public class GoblinSledder extends mage.sets.onslaught.GoblinSledder { public GoblinSledder(UUID ownerId) { super(ownerId); this.cardNumber = 41; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GoblinSledder(final GoblinSledder card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinWarchief.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinWarchief.java index 02f96e1447..d47e42dd9c 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinWarchief.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/GoblinWarchief.java @@ -38,7 +38,7 @@ public class GoblinWarchief extends mage.sets.scourge.GoblinWarchief { public GoblinWarchief(UUID ownerId) { super(ownerId); this.cardNumber = 42; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public GoblinWarchief(final GoblinWarchief card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Harmonize.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Harmonize.java index 3d0c3f1a7c..45bded7dd1 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Harmonize.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Harmonize.java @@ -38,7 +38,7 @@ public class Harmonize extends mage.sets.planarchaos.Harmonize { public Harmonize(UUID ownerId) { super(ownerId); this.cardNumber = 22; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Harmonize(final Harmonize card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/HeedlessOne.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/HeedlessOne.java index d51acb0f28..a134ec81c4 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/HeedlessOne.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/HeedlessOne.java @@ -38,7 +38,7 @@ public class HeedlessOne extends mage.sets.onslaught.HeedlessOne { public HeedlessOne(UUID ownerId) { super(ownerId); this.cardNumber = 7; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public HeedlessOne(final HeedlessOne card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/IbHalfheartGoblinTactician.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/IbHalfheartGoblinTactician.java index 2942b0f94e..3500566bd8 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/IbHalfheartGoblinTactician.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/IbHalfheartGoblinTactician.java @@ -38,7 +38,7 @@ public class IbHalfheartGoblinTactician extends mage.sets.elvesvsgoblins.IbHalfh public IbHalfheartGoblinTactician(UUID ownerId) { super(ownerId); this.cardNumber = 43; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public IbHalfheartGoblinTactician(final IbHalfheartGoblinTactician card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ImperiousPerfect.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ImperiousPerfect.java index d814343f61..afa325a05d 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ImperiousPerfect.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/ImperiousPerfect.java @@ -38,7 +38,7 @@ public class ImperiousPerfect extends mage.sets.lorwyn.ImperiousPerfect { public ImperiousPerfect(UUID ownerId) { super(ownerId); this.cardNumber = 8; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public ImperiousPerfect(final ImperiousPerfect card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LlanowarElves.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LlanowarElves.java index ec7474b902..5b37680cb6 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LlanowarElves.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LlanowarElves.java @@ -38,7 +38,7 @@ public class LlanowarElves extends mage.sets.tenth.LlanowarElves { public LlanowarElves(UUID ownerId) { super(ownerId); this.cardNumber = 9; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public LlanowarElves(final LlanowarElves card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LysAlanaHuntmaster.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LysAlanaHuntmaster.java index 6672a16d79..d490592857 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LysAlanaHuntmaster.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/LysAlanaHuntmaster.java @@ -38,7 +38,7 @@ public class LysAlanaHuntmaster extends mage.sets.lorwyn.LysAlanaHuntmaster { public LysAlanaHuntmaster(UUID ownerId) { super(ownerId); this.cardNumber = 10; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public LysAlanaHuntmaster(final LysAlanaHuntmaster card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggFanatic.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggFanatic.java index 20a040ff61..4229629600 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggFanatic.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggFanatic.java @@ -39,7 +39,7 @@ public class MoggFanatic extends mage.sets.tempest.MoggFanatic { public MoggFanatic(UUID ownerId) { super(ownerId); this.cardNumber = 44; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; this.rarity = Rarity.UNCOMMON; } diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggWarMarshal.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggWarMarshal.java index 3cc732d5bd..7a50914d58 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggWarMarshal.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoggWarMarshal.java @@ -38,7 +38,7 @@ public class MoggWarMarshal extends mage.sets.timespiral.MoggWarMarshal { public MoggWarMarshal(UUID ownerId) { super(ownerId); this.cardNumber = 45; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public MoggWarMarshal(final MoggWarMarshal card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoongloveExtract.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoongloveExtract.java index b84b08f984..0b74aa204d 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoongloveExtract.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MoongloveExtract.java @@ -38,7 +38,7 @@ public class MoongloveExtract extends mage.sets.elspethvstezzeret.MoongloveExtra public MoongloveExtract(UUID ownerId) { super(ownerId); this.cardNumber = 24; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public MoongloveExtract(final MoongloveExtract card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain1.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain1.java index b7e77284b7..7297752b01 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain1.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain1.java @@ -37,7 +37,7 @@ public class Mountain1 extends mage.cards.basiclands.Mountain { public Mountain1(UUID ownerId) { super(ownerId, 59); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Mountain1(final Mountain1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain2.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain2.java index 5431657904..0ac759462a 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain2.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain2.java @@ -37,7 +37,7 @@ public class Mountain2 extends mage.cards.basiclands.Mountain { public Mountain2(UUID ownerId) { super(ownerId, 60); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Mountain2(final Mountain2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain3.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain3.java index 7691d4dac1..56b22a683f 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain3.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain3.java @@ -37,7 +37,7 @@ public class Mountain3 extends mage.cards.basiclands.Mountain { public Mountain3(UUID ownerId) { super(ownerId, 61); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Mountain3(final Mountain3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain4.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain4.java index 7cc4d9c254..853b77176d 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain4.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Mountain4.java @@ -37,7 +37,7 @@ public class Mountain4 extends mage.cards.basiclands.Mountain { public Mountain4(UUID ownerId) { super(ownerId, 62); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Mountain4(final Mountain4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MudbuttonTorchrunner.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MudbuttonTorchrunner.java index 035b4759b4..0d71c36290 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MudbuttonTorchrunner.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/MudbuttonTorchrunner.java @@ -38,7 +38,7 @@ public class MudbuttonTorchrunner extends mage.sets.lorwyn.MudbuttonTorchrunner public MudbuttonTorchrunner(UUID ownerId) { super(ownerId); this.cardNumber = 46; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public MudbuttonTorchrunner(final MudbuttonTorchrunner card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RagingGoblin.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RagingGoblin.java index b78318f10e..59f0626326 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RagingGoblin.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RagingGoblin.java @@ -38,7 +38,7 @@ public class RagingGoblin extends mage.sets.tenth.RagingGoblin { public RagingGoblin(UUID ownerId) { super(ownerId); this.cardNumber = 47; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public RagingGoblin(final RagingGoblin card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RecklessOne.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RecklessOne.java index 4148699575..565f393f02 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RecklessOne.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/RecklessOne.java @@ -38,7 +38,7 @@ public class RecklessOne extends mage.sets.onslaught.RecklessOne { public RecklessOne(UUID ownerId) { super(ownerId); this.cardNumber = 48; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public RecklessOne(final RecklessOne card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SiegeGangCommander.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SiegeGangCommander.java index 2d11ae0d31..6f5d9a0c31 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SiegeGangCommander.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SiegeGangCommander.java @@ -38,7 +38,7 @@ public class SiegeGangCommander extends mage.sets.magic2010.SiegeGangCommander { public SiegeGangCommander(UUID ownerId) { super(ownerId); this.cardNumber = 32; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SiegeGangCommander(final SiegeGangCommander card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkDrillSergeant.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkDrillSergeant.java index 9d6adb2a33..e594367e75 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkDrillSergeant.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkDrillSergeant.java @@ -38,7 +38,7 @@ public class SkirkDrillSergeant extends mage.sets.elvesvsgoblins.SkirkDrillSerge public SkirkDrillSergeant(UUID ownerId) { super(ownerId); this.cardNumber = 49; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SkirkDrillSergeant(final SkirkDrillSergeant card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkFireMarshal.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkFireMarshal.java index fecb708b6b..55e90d2f0b 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkFireMarshal.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkFireMarshal.java @@ -38,7 +38,7 @@ public class SkirkFireMarshal extends mage.sets.onslaught.SkirkFireMarshal { public SkirkFireMarshal(UUID ownerId) { super(ownerId); this.cardNumber = 50; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SkirkFireMarshal(final SkirkFireMarshal card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkProspector.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkProspector.java index 0862139a1c..0c1a24cf7a 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkProspector.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkProspector.java @@ -38,7 +38,7 @@ public class SkirkProspector extends mage.sets.onslaught.SkirkProspector { public SkirkProspector(UUID ownerId) { super(ownerId); this.cardNumber = 51; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SkirkProspector(final SkirkProspector card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkShaman.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkShaman.java index 5e4376da69..c91020215a 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkShaman.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SkirkShaman.java @@ -38,7 +38,7 @@ public class SkirkShaman extends mage.sets.elvesvsgoblins.SkirkShaman { public SkirkShaman(UUID ownerId) { super(ownerId); this.cardNumber = 52; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SkirkShaman(final SkirkShaman card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SlateOfAncestry.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SlateOfAncestry.java index 6508979224..1b33862777 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SlateOfAncestry.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SlateOfAncestry.java @@ -38,7 +38,7 @@ public class SlateOfAncestry extends mage.sets.onslaught.SlateOfAncestry { public SlateOfAncestry(UUID ownerId) { super(ownerId); this.cardNumber = 25; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SlateOfAncestry(final SlateOfAncestry card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SpittingEarth.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SpittingEarth.java index 3354435f3d..6ee7d27e83 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SpittingEarth.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SpittingEarth.java @@ -38,7 +38,7 @@ public class SpittingEarth extends mage.sets.tenth.SpittingEarth { public SpittingEarth(UUID ownerId) { super(ownerId); this.cardNumber = 55; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SpittingEarth(final SpittingEarth card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/StonewoodInvoker.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/StonewoodInvoker.java index 1761b77ebe..7d04169855 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/StonewoodInvoker.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/StonewoodInvoker.java @@ -38,7 +38,7 @@ public class StonewoodInvoker extends mage.sets.elvesvsgoblins.StonewoodInvoker public StonewoodInvoker(UUID ownerId) { super(ownerId); this.cardNumber = 11; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public StonewoodInvoker(final StonewoodInvoker card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SylvanMessenger.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SylvanMessenger.java index 15cfb4e64c..cfc1c5c665 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SylvanMessenger.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/SylvanMessenger.java @@ -38,7 +38,7 @@ public class SylvanMessenger extends mage.sets.apocalypse.SylvanMessenger { public SylvanMessenger(UUID ownerId) { super(ownerId); this.cardNumber = 12; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public SylvanMessenger(final SylvanMessenger card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TarPitcher.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TarPitcher.java index 3e31049fa2..b1d2340a7d 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TarPitcher.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TarPitcher.java @@ -38,7 +38,7 @@ public class TarPitcher extends mage.sets.lorwyn.TarPitcher { public TarPitcher(UUID ownerId) { super(ownerId); this.cardNumber = 53; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public TarPitcher(final TarPitcher card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Tarfire.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Tarfire.java index 215ea9ae51..389beda794 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Tarfire.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Tarfire.java @@ -38,7 +38,7 @@ public class Tarfire extends mage.sets.lorwyn.Tarfire { public Tarfire(UUID ownerId) { super(ownerId); this.cardNumber = 56; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Tarfire(final Tarfire card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TimberwatchElf.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TimberwatchElf.java index 021c32ddf8..5d01040192 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TimberwatchElf.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TimberwatchElf.java @@ -38,7 +38,7 @@ public class TimberwatchElf extends mage.sets.elvesvsgoblins.TimberwatchElf { public TimberwatchElf(UUID ownerId) { super(ownerId); this.cardNumber = 13; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public TimberwatchElf(final TimberwatchElf card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TranquilThicket.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TranquilThicket.java index 34a6b8308d..e6f26c2270 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TranquilThicket.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/TranquilThicket.java @@ -38,7 +38,7 @@ public class TranquilThicket extends mage.sets.onslaught.TranquilThicket { public TranquilThicket(UUID ownerId) { super(ownerId); this.cardNumber = 27; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public TranquilThicket(final TranquilThicket card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/VoiceOfTheWoods.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/VoiceOfTheWoods.java index 790c71df56..e3e6e5dae1 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/VoiceOfTheWoods.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/VoiceOfTheWoods.java @@ -38,7 +38,7 @@ public class VoiceOfTheWoods extends mage.sets.onslaught.VoiceOfTheWoods { public VoiceOfTheWoods(UUID ownerId) { super(ownerId); this.cardNumber = 14; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public VoiceOfTheWoods(final VoiceOfTheWoods card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wellwisher.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wellwisher.java index 9fd20d277b..ac1131c66b 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wellwisher.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wellwisher.java @@ -38,7 +38,7 @@ public class Wellwisher extends mage.sets.onslaught.Wellwisher { public Wellwisher(UUID ownerId) { super(ownerId); this.cardNumber = 15; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Wellwisher(final Wellwisher card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wildsize.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wildsize.java index 34b7e715f6..e3b27e4853 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wildsize.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/Wildsize.java @@ -38,7 +38,7 @@ public class Wildsize extends mage.sets.guildpact.Wildsize { public Wildsize(UUID ownerId) { super(ownerId); this.cardNumber = 23; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public Wildsize(final Wildsize card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodHerald.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodHerald.java index 6d905adf12..cc757868cb 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodHerald.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodHerald.java @@ -38,7 +38,7 @@ public class WirewoodHerald extends mage.sets.onslaught.WirewoodHerald { public WirewoodHerald(UUID ownerId) { super(ownerId); this.cardNumber = 16; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public WirewoodHerald(final WirewoodHerald card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodLodge.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodLodge.java index 0a15bb1ee5..3f23d3a895 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodLodge.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodLodge.java @@ -38,7 +38,7 @@ public class WirewoodLodge extends mage.sets.onslaught.WirewoodLodge { public WirewoodLodge(UUID ownerId) { super(ownerId); this.cardNumber = 26; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public WirewoodLodge(final WirewoodLodge card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodSymbiote.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodSymbiote.java index 9896c3fd20..657edc777e 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodSymbiote.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WirewoodSymbiote.java @@ -38,7 +38,7 @@ public class WirewoodSymbiote extends mage.sets.scourge.WirewoodSymbiote { public WirewoodSymbiote(UUID ownerId) { super(ownerId); this.cardNumber = 17; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public WirewoodSymbiote(final WirewoodSymbiote card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WoodElves.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WoodElves.java index 4af6c300f1..917509decc 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WoodElves.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WoodElves.java @@ -38,7 +38,7 @@ public class WoodElves extends mage.sets.ninthedition.WoodElves { public WoodElves(UUID ownerId) { super(ownerId); this.cardNumber = 18; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public WoodElves(final WoodElves card) { diff --git a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WrensRunVanquisher.java b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WrensRunVanquisher.java index 577e0bcdf1..e31e4f3897 100644 --- a/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WrensRunVanquisher.java +++ b/Mage.Sets/src/mage/sets/anthologyelvesvsgoblins/WrensRunVanquisher.java @@ -38,7 +38,7 @@ public class WrensRunVanquisher extends mage.sets.lorwyn.WrensRunVanquisher { public WrensRunVanquisher(UUID ownerId) { super(ownerId); this.cardNumber = 19; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3B"; } public WrensRunVanquisher(final WrensRunVanquisher card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/AlbinoTroll.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/AlbinoTroll.java index dd78477665..fef9577627 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/AlbinoTroll.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/AlbinoTroll.java @@ -38,7 +38,7 @@ public class AlbinoTroll extends mage.sets.urzassaga.AlbinoTroll { public AlbinoTroll(UUID ownerId) { super(ownerId); this.cardNumber = 3; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public AlbinoTroll(final AlbinoTroll card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BadMoon.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BadMoon.java index 2d700eac07..7e470369a1 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BadMoon.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BadMoon.java @@ -38,7 +38,7 @@ public class BadMoon extends mage.sets.fifthedition.BadMoon { public BadMoon(UUID ownerId) { super(ownerId); this.cardNumber = 48; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public BadMoon(final BadMoon card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BaskingRootwalla.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BaskingRootwalla.java index 4b3f24b08b..d9007b64d6 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BaskingRootwalla.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BaskingRootwalla.java @@ -38,7 +38,7 @@ public class BaskingRootwalla extends mage.sets.torment.BaskingRootwalla { public BaskingRootwalla(UUID ownerId) { super(ownerId); this.cardNumber = 2; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public BaskingRootwalla(final BaskingRootwalla card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BeastAttack.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BeastAttack.java index a68514de59..57abc6c91d 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BeastAttack.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/BeastAttack.java @@ -38,7 +38,7 @@ public class BeastAttack extends mage.sets.odyssey.BeastAttack { public BeastAttack(UUID ownerId) { super(ownerId); this.cardNumber = 23; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public BeastAttack(final BeastAttack card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Blastoderm.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Blastoderm.java index d9a83e68c8..5f93670d0d 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Blastoderm.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Blastoderm.java @@ -38,7 +38,7 @@ public class Blastoderm extends mage.sets.nemesis.Blastoderm { public Blastoderm(UUID ownerId) { super(ownerId); this.cardNumber = 7; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Blastoderm(final Blastoderm card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Corrupt.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Corrupt.java index 633380586e..8cb87b9871 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Corrupt.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Corrupt.java @@ -38,7 +38,7 @@ public class Corrupt extends mage.sets.magic2011.Corrupt { public Corrupt(UUID ownerId) { super(ownerId); this.cardNumber = 57; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Corrupt(final Corrupt card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Deathgreeter.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Deathgreeter.java index 07f05965cf..0c9207c371 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Deathgreeter.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Deathgreeter.java @@ -38,7 +38,7 @@ public class Deathgreeter extends mage.sets.shardsofalara.Deathgreeter { public Deathgreeter(UUID ownerId) { super(ownerId); this.cardNumber = 33; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Deathgreeter(final Deathgreeter card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/DrudgeSkeletons.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/DrudgeSkeletons.java index d949f5c11d..26c091a0ab 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/DrudgeSkeletons.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/DrudgeSkeletons.java @@ -38,7 +38,7 @@ public class DrudgeSkeletons extends mage.sets.magic2010.DrudgeSkeletons { public DrudgeSkeletons(UUID ownerId) { super(ownerId); this.cardNumber = 36; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public DrudgeSkeletons(final DrudgeSkeletons card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ElephantGuide.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ElephantGuide.java index f038ab1b67..4cc2add80c 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ElephantGuide.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ElephantGuide.java @@ -38,7 +38,7 @@ public class ElephantGuide extends mage.sets.judgment.ElephantGuide { public ElephantGuide(UUID ownerId) { super(ownerId); this.cardNumber = 18; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public ElephantGuide(final ElephantGuide card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Enslave.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Enslave.java index 800d16b4ca..aec3f5a9fa 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Enslave.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Enslave.java @@ -38,7 +38,7 @@ public class Enslave extends mage.sets.newphyrexia.Enslave { public Enslave(UUID ownerId) { super(ownerId); this.cardNumber = 58; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Enslave(final Enslave card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FaerieMacabre.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FaerieMacabre.java index b60132f652..3e273d2eb7 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FaerieMacabre.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FaerieMacabre.java @@ -38,7 +38,7 @@ public class FaerieMacabre extends mage.sets.shadowmoor.FaerieMacabre { public FaerieMacabre(UUID ownerId) { super(ownerId); this.cardNumber = 42; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public FaerieMacabre(final FaerieMacabre card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FleshbagMarauder.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FleshbagMarauder.java index 77ddc14447..fea8415e45 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FleshbagMarauder.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/FleshbagMarauder.java @@ -38,7 +38,7 @@ public class FleshbagMarauder extends mage.sets.shardsofalara.FleshbagMarauder { public FleshbagMarauder(UUID ownerId) { super(ownerId); this.cardNumber = 38; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public FleshbagMarauder(final FleshbagMarauder card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest1.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest1.java index 0e19b5b4a4..5caa2e4afe 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest1.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest1.java @@ -37,7 +37,7 @@ public class Forest1 extends mage.cards.basiclands.Forest { public Forest1(UUID ownerId) { super(ownerId, 28); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Forest1(final Forest1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest2.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest2.java index 925b8e9936..6ae088a836 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest2.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest2.java @@ -37,7 +37,7 @@ public class Forest2 extends mage.cards.basiclands.Forest { public Forest2(UUID ownerId) { super(ownerId, 29); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Forest2(final Forest2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest3.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest3.java index 78901cc3ac..7270810e0a 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest3.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest3.java @@ -37,7 +37,7 @@ public class Forest3 extends mage.cards.basiclands.Forest { public Forest3(UUID ownerId) { super(ownerId, 30); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Forest3(final Forest3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest4.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest4.java index 4ae9c74edf..81f9de5fce 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest4.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Forest4.java @@ -37,7 +37,7 @@ public class Forest4 extends mage.cards.basiclands.Forest { public Forest4(UUID ownerId) { super(ownerId, 31); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Forest4(final Forest4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GarrukWildspeaker.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GarrukWildspeaker.java index 9ded17e4b7..237f002afa 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GarrukWildspeaker.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GarrukWildspeaker.java @@ -38,7 +38,7 @@ public class GarrukWildspeaker extends mage.sets.magic2010.GarrukWildspeaker { public GarrukWildspeaker(UUID ownerId) { super(ownerId); this.cardNumber = 1; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public GarrukWildspeaker(final GarrukWildspeaker card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheCedars.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheCedars.java index cbbf68693e..cb919b1b51 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheCedars.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheCedars.java @@ -38,7 +38,7 @@ public class GenjuOfTheCedars extends mage.sets.betrayersofkamigawa.GenjuOfTheCe public GenjuOfTheCedars(UUID ownerId) { super(ownerId); this.cardNumber = 13; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public GenjuOfTheCedars(final GenjuOfTheCedars card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheFens.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheFens.java index 2f1b2e53e1..49b4e951e4 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheFens.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GenjuOfTheFens.java @@ -38,7 +38,7 @@ public class GenjuOfTheFens extends mage.sets.betrayersofkamigawa.GenjuOfTheFens public GenjuOfTheFens(UUID ownerId) { super(ownerId); this.cardNumber = 47; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public GenjuOfTheFens(final GenjuOfTheFens card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GhostLitStalker.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GhostLitStalker.java index e1ad45b846..e5c652c6f2 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GhostLitStalker.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GhostLitStalker.java @@ -38,7 +38,7 @@ public class GhostLitStalker extends mage.sets.saviorsofkamigawa.GhostLitStalker public GhostLitStalker(UUID ownerId) { super(ownerId); this.cardNumber = 34; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public GhostLitStalker(final GhostLitStalker card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GiantGrowth.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GiantGrowth.java index 5419d8cdae..eb214c5bee 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GiantGrowth.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/GiantGrowth.java @@ -38,7 +38,7 @@ public class GiantGrowth extends mage.sets.tenth.GiantGrowth { public GiantGrowth(UUID ownerId) { super(ownerId); this.cardNumber = 14; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public GiantGrowth(final GiantGrowth card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Harmonize.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Harmonize.java index e05f47ffcb..0b1d131a3d 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Harmonize.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Harmonize.java @@ -38,7 +38,7 @@ public class Harmonize extends mage.sets.planarchaos.Harmonize { public Harmonize(UUID ownerId) { super(ownerId); this.cardNumber = 21; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Harmonize(final Harmonize card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HideousEnd.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HideousEnd.java index 1d637195ec..36c76239df 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HideousEnd.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HideousEnd.java @@ -38,7 +38,7 @@ public class HideousEnd extends mage.sets.zendikar.HideousEnd { public HideousEnd(UUID ownerId) { super(ownerId); this.cardNumber = 52; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public HideousEnd(final HideousEnd card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HowlingBanshee.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HowlingBanshee.java index 60202cc511..3057b46f37 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HowlingBanshee.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/HowlingBanshee.java @@ -38,7 +38,7 @@ public class HowlingBanshee extends mage.sets.magic2010.HowlingBanshee { public HowlingBanshee(UUID ownerId) { super(ownerId); this.cardNumber = 43; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public HowlingBanshee(final HowlingBanshee card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IchorSlick.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IchorSlick.java index 47efafb65d..eb49ef6046 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IchorSlick.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IchorSlick.java @@ -38,7 +38,7 @@ public class IchorSlick extends mage.sets.futuresight.IchorSlick { public IchorSlick(UUID ownerId) { super(ownerId); this.cardNumber = 51; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public IchorSlick(final IchorSlick card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IndrikStomphowler.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IndrikStomphowler.java index feaea3b534..69ba65989a 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IndrikStomphowler.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/IndrikStomphowler.java @@ -38,7 +38,7 @@ public class IndrikStomphowler extends mage.sets.dissension.IndrikStomphowler { public IndrikStomphowler(UUID ownerId) { super(ownerId); this.cardNumber = 10; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public IndrikStomphowler(final IndrikStomphowler card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Invigorate.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Invigorate.java index 13eefcb99b..1f871d7a2b 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Invigorate.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Invigorate.java @@ -38,7 +38,7 @@ public class Invigorate extends mage.sets.commander.Invigorate { public Invigorate(UUID ownerId) { super(ownerId); this.cardNumber = 19; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Invigorate(final Invigorate card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KeeningBanshee.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KeeningBanshee.java index 7624819740..138135cc90 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KeeningBanshee.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KeeningBanshee.java @@ -38,7 +38,7 @@ public class KeeningBanshee extends mage.sets.ravnica.KeeningBanshee { public KeeningBanshee(UUID ownerId) { super(ownerId); this.cardNumber = 44; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public KeeningBanshee(final KeeningBanshee card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KrosanTusker.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KrosanTusker.java index a5b4d5b97b..32a0a01150 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KrosanTusker.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/KrosanTusker.java @@ -38,7 +38,7 @@ public class KrosanTusker extends mage.sets.heroesvsmonsters.KrosanTusker { public KrosanTusker(UUID ownerId) { super(ownerId); this.cardNumber = 11; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public KrosanTusker(final KrosanTusker card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Lignify.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Lignify.java index c911759133..d08a02a47c 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Lignify.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Lignify.java @@ -38,7 +38,7 @@ public class Lignify extends mage.sets.lorwyn.Lignify { public Lignify(UUID ownerId) { super(ownerId); this.cardNumber = 16; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Lignify(final Lignify card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/LilianaVess.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/LilianaVess.java index b2244d4cf8..d8b1cd2804 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/LilianaVess.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/LilianaVess.java @@ -38,7 +38,7 @@ public class LilianaVess extends mage.sets.magic2010.LilianaVess { public LilianaVess(UUID ownerId) { super(ownerId); this.cardNumber = 32; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public LilianaVess(final LilianaVess card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Mutilate.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Mutilate.java index a00904b37d..5c6cd4ebae 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Mutilate.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Mutilate.java @@ -38,7 +38,7 @@ public class Mutilate extends mage.sets.magic2013.Mutilate { public Mutilate(UUID ownerId) { super(ownerId); this.cardNumber = 55; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Mutilate(final Mutilate card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/NaturesLore.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/NaturesLore.java index 46b6581608..a166603295 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/NaturesLore.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/NaturesLore.java @@ -39,7 +39,7 @@ public class NaturesLore extends mage.sets.iceage.NaturesLore { public NaturesLore(UUID ownerId) { super(ownerId); this.cardNumber = 17; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; this.rarity = Rarity.COMMON; } diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Overrun.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Overrun.java index b49a1ea82e..5110e0b5c7 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Overrun.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Overrun.java @@ -38,7 +38,7 @@ public class Overrun extends mage.sets.magic2010.Overrun { public Overrun(UUID ownerId) { super(ownerId); this.cardNumber = 24; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Overrun(final Overrun card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PhyrexianRager.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PhyrexianRager.java index 9e9c15a284..644552fb85 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PhyrexianRager.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PhyrexianRager.java @@ -38,7 +38,7 @@ public class PhyrexianRager extends mage.sets.tenth.PhyrexianRager { public PhyrexianRager(UUID ownerId) { super(ownerId); this.cardNumber = 39; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public PhyrexianRager(final PhyrexianRager card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PlatedSlagwurm.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PlatedSlagwurm.java index f298be0ea7..2b2c70484a 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PlatedSlagwurm.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PlatedSlagwurm.java @@ -38,7 +38,7 @@ public class PlatedSlagwurm extends mage.sets.mirrodin.PlatedSlagwurm { public PlatedSlagwurm(UUID ownerId) { super(ownerId); this.cardNumber = 12; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public PlatedSlagwurm(final PlatedSlagwurm card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PollutedMire.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PollutedMire.java index b08df821bf..de44d71cee 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PollutedMire.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/PollutedMire.java @@ -38,7 +38,7 @@ public class PollutedMire extends mage.sets.urzassaga.PollutedMire { public PollutedMire(UUID ownerId) { super(ownerId); this.cardNumber = 59; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public PollutedMire(final PollutedMire card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Rancor.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Rancor.java index 5be345bccc..8c261eecd2 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Rancor.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Rancor.java @@ -38,7 +38,7 @@ public class Rancor extends mage.sets.urzaslegacy.Rancor { public Rancor(UUID ownerId) { super(ownerId); this.cardNumber = 15; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Rancor(final Rancor card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousBaloth.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousBaloth.java index 53a5aad99c..bb3e521ead 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousBaloth.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousBaloth.java @@ -38,7 +38,7 @@ public class RavenousBaloth extends mage.sets.onslaught.RavenousBaloth { public RavenousBaloth(UUID ownerId) { super(ownerId); this.cardNumber = 8; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public RavenousBaloth(final RavenousBaloth card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousRats.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousRats.java index 36164bf830..a2a4276c2f 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousRats.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RavenousRats.java @@ -38,7 +38,7 @@ public class RavenousRats extends mage.sets.tenth.RavenousRats { public RavenousRats(UUID ownerId) { super(ownerId); this.cardNumber = 37; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public RavenousRats(final RavenousRats card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RiseFromTheGrave.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RiseFromTheGrave.java index 8948cb1070..078a71ea4b 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RiseFromTheGrave.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RiseFromTheGrave.java @@ -38,7 +38,7 @@ public class RiseFromTheGrave extends mage.sets.magic2010.RiseFromTheGrave { public RiseFromTheGrave(UUID ownerId) { super(ownerId); this.cardNumber = 56; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public RiseFromTheGrave(final RiseFromTheGrave card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RudeAwakening.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RudeAwakening.java index d9843bea18..f7c26f16a4 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RudeAwakening.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/RudeAwakening.java @@ -38,7 +38,7 @@ public class RudeAwakening extends mage.sets.modernmasters.RudeAwakening { public RudeAwakening(UUID ownerId) { super(ownerId); this.cardNumber = 22; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public RudeAwakening(final RudeAwakening card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SerratedArrows.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SerratedArrows.java index ff40a65425..f78398b7f1 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SerratedArrows.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SerratedArrows.java @@ -38,7 +38,7 @@ public class SerratedArrows extends mage.sets.homelands.SerratedArrows { public SerratedArrows(UUID ownerId) { super(ownerId); this.cardNumber = 20; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public SerratedArrows(final SerratedArrows card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SignInBlood.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SignInBlood.java index 1112dd093e..fca62bb485 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SignInBlood.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SignInBlood.java @@ -38,7 +38,7 @@ public class SignInBlood extends mage.sets.magic2010.SignInBlood { public SignInBlood(UUID ownerId) { super(ownerId); this.cardNumber = 49; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public SignInBlood(final SignInBlood card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SkeletalVampire.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SkeletalVampire.java index 7035a8161d..ef56097dd6 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SkeletalVampire.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SkeletalVampire.java @@ -38,7 +38,7 @@ public class SkeletalVampire extends mage.sets.guildpact.SkeletalVampire { public SkeletalVampire(UUID ownerId) { super(ownerId); this.cardNumber = 46; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public SkeletalVampire(final SkeletalVampire card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SlipperyKarst.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SlipperyKarst.java index e1e1460b35..784a5b19a3 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SlipperyKarst.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SlipperyKarst.java @@ -38,7 +38,7 @@ public class SlipperyKarst extends mage.sets.urzassaga.SlipperyKarst { public SlipperyKarst(UUID ownerId) { super(ownerId); this.cardNumber = 26; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public SlipperyKarst(final SlipperyKarst card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SnuffOut.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SnuffOut.java index 853b20ab51..f5e18cfc06 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SnuffOut.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/SnuffOut.java @@ -38,7 +38,7 @@ public class SnuffOut extends mage.sets.mercadianmasques.SnuffOut { public SnuffOut(UUID ownerId) { super(ownerId); this.cardNumber = 53; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public SnuffOut(final SnuffOut card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/StampedingWildebeests.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/StampedingWildebeests.java index f07143cdc2..b0f09d9071 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/StampedingWildebeests.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/StampedingWildebeests.java @@ -38,7 +38,7 @@ public class StampedingWildebeests extends mage.sets.tenth.StampedingWildebeests public StampedingWildebeests(UUID ownerId) { super(ownerId); this.cardNumber = 9; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public StampedingWildebeests(final StampedingWildebeests card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp1.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp1.java index adb96516f3..4ef2733582 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp1.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp1.java @@ -37,7 +37,7 @@ public class Swamp1 extends mage.cards.basiclands.Swamp { public Swamp1(UUID ownerId) { super(ownerId, 60); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Swamp1(final Swamp1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp2.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp2.java index 06ff5a97e1..4d22ef81aa 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp2.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp2.java @@ -37,7 +37,7 @@ public class Swamp2 extends mage.cards.basiclands.Swamp { public Swamp2(UUID ownerId) { super(ownerId, 61); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Swamp2(final Swamp2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp3.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp3.java index 4e77ebefe7..85e90d924b 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp3.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp3.java @@ -37,7 +37,7 @@ public class Swamp3 extends mage.cards.basiclands.Swamp { public Swamp3(UUID ownerId) { super(ownerId, 62); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Swamp3(final Swamp3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp4.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp4.java index 6084968965..3aac0f4e3c 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp4.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Swamp4.java @@ -37,7 +37,7 @@ public class Swamp4 extends mage.cards.basiclands.Swamp { public Swamp4(UUID ownerId) { super(ownerId, 63); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Swamp4(final Swamp4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TendrilsOfCorruption.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TendrilsOfCorruption.java index 36854d5698..f2d0b9b78f 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TendrilsOfCorruption.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TendrilsOfCorruption.java @@ -38,7 +38,7 @@ public class TendrilsOfCorruption extends mage.sets.magic2010.TendrilsOfCorrupti public TendrilsOfCorruption(UUID ownerId) { super(ownerId); this.cardNumber = 54; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public TendrilsOfCorruption(final TendrilsOfCorruption card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TreetopVillage.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TreetopVillage.java index e495923781..fb1da72825 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TreetopVillage.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TreetopVillage.java @@ -38,7 +38,7 @@ public class TreetopVillage extends mage.sets.tenth.TreetopVillage { public TreetopVillage(UUID ownerId) { super(ownerId); this.cardNumber = 27; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public TreetopVillage(final TreetopVillage card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TwistedAbomination.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TwistedAbomination.java index 00f51c8aed..1acf62712d 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TwistedAbomination.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/TwistedAbomination.java @@ -39,7 +39,7 @@ public class TwistedAbomination extends mage.sets.timeshifted.TwistedAbomination public TwistedAbomination(UUID ownerId) { super(ownerId); this.cardNumber = 45; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; this.rarity = Rarity.COMMON; } diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/UrborgSyphonMage.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/UrborgSyphonMage.java index 5c3703284d..7a6afd1b80 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/UrborgSyphonMage.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/UrborgSyphonMage.java @@ -38,7 +38,7 @@ public class UrborgSyphonMage extends mage.sets.timespiral.UrborgSyphonMage { public UrborgSyphonMage(UUID ownerId) { super(ownerId); this.cardNumber = 40; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public UrborgSyphonMage(final UrborgSyphonMage card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VampireBats.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VampireBats.java index 64f1b1b899..21ca983d8b 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VampireBats.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VampireBats.java @@ -38,7 +38,7 @@ public class VampireBats extends mage.sets.fifthedition.VampireBats { public VampireBats(UUID ownerId) { super(ownerId); this.cardNumber = 35; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public VampireBats(final VampireBats card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ViciousHunger.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ViciousHunger.java index 85ce5e7aef..a74d054caa 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ViciousHunger.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/ViciousHunger.java @@ -38,7 +38,7 @@ public class ViciousHunger extends mage.sets.nemesis.ViciousHunger { public ViciousHunger(UUID ownerId) { super(ownerId); this.cardNumber = 50; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public ViciousHunger(final ViciousHunger card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VineTrellis.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VineTrellis.java index 90d438e1f6..fdbb3ffd2b 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VineTrellis.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/VineTrellis.java @@ -38,7 +38,7 @@ public class VineTrellis extends mage.sets.mercadianmasques.VineTrellis { public VineTrellis(UUID ownerId) { super(ownerId); this.cardNumber = 4; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public VineTrellis(final VineTrellis card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WallOfBone.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WallOfBone.java index 532a8f879a..ba4edca13e 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WallOfBone.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WallOfBone.java @@ -38,7 +38,7 @@ public class WallOfBone extends mage.sets.magic2010.WallOfBone { public WallOfBone(UUID ownerId) { super(ownerId); this.cardNumber = 41; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public WallOfBone(final WallOfBone card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WildMongrel.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WildMongrel.java index 58247be5b9..57164243a4 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WildMongrel.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WildMongrel.java @@ -38,7 +38,7 @@ public class WildMongrel extends mage.sets.odyssey.WildMongrel { public WildMongrel(UUID ownerId) { super(ownerId); this.cardNumber = 5; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public WildMongrel(final WildMongrel card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Windstorm.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Windstorm.java index c4603628c0..bd10a4b91e 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Windstorm.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/Windstorm.java @@ -38,7 +38,7 @@ public class Windstorm extends mage.sets.magic2010.Windstorm { public Windstorm(UUID ownerId) { super(ownerId); this.cardNumber = 25; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public Windstorm(final Windstorm card) { diff --git a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WirewoodSavage.java b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WirewoodSavage.java index 7bb0958589..f1ed3d6ae0 100644 --- a/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WirewoodSavage.java +++ b/Mage.Sets/src/mage/sets/anthologygarrukvsliliana/WirewoodSavage.java @@ -38,7 +38,7 @@ public class WirewoodSavage extends mage.sets.onslaught.WirewoodSavage { public WirewoodSavage(UUID ownerId) { super(ownerId); this.cardNumber = 6; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3C"; } public WirewoodSavage(final WirewoodSavage card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/AEthersnipe.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/AEthersnipe.java index 48eedc93d9..69bc9aab08 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/AEthersnipe.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/AEthersnipe.java @@ -38,7 +38,7 @@ public class AEthersnipe extends mage.sets.commander.AEthersnipe { public AEthersnipe(UUID ownerId) { super(ownerId); this.cardNumber = 17; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public AEthersnipe(final AEthersnipe card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/AirElemental.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/AirElemental.java index b14e9b592c..d4d254b3e1 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/AirElemental.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/AirElemental.java @@ -38,7 +38,7 @@ public class AirElemental extends mage.sets.magic2010.AirElemental { public AirElemental(UUID ownerId) { super(ownerId); this.cardNumber = 13; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public AirElemental(final AirElemental card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/AncestralVision.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/AncestralVision.java index 0b28f9c918..3540a279a2 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/AncestralVision.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/AncestralVision.java @@ -38,7 +38,7 @@ public class AncestralVision extends mage.sets.timespiral.AncestralVision { public AncestralVision(UUID ownerId) { super(ownerId); this.cardNumber = 21; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public AncestralVision(final AncestralVision card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/BottleGnomes.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/BottleGnomes.java index f1a7467cb0..ea291aab80 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/BottleGnomes.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/BottleGnomes.java @@ -38,7 +38,7 @@ public class BottleGnomes extends mage.sets.tempest.BottleGnomes { public BottleGnomes(UUID ownerId) { super(ownerId); this.cardNumber = 7; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public BottleGnomes(final BottleGnomes card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/BrineElemental.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/BrineElemental.java index 9328dd8b6b..4df002b1f3 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/BrineElemental.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/BrineElemental.java @@ -38,7 +38,7 @@ public class BrineElemental extends mage.sets.commander2014.BrineElemental { public BrineElemental(UUID ownerId) { super(ownerId); this.cardNumber = 18; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public BrineElemental(final BrineElemental card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChandraNalaar.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChandraNalaar.java index 4f4b038b87..941dc7437e 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChandraNalaar.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChandraNalaar.java @@ -38,7 +38,7 @@ public class ChandraNalaar extends mage.sets.magic2010.ChandraNalaar { public ChandraNalaar(UUID ownerId) { super(ownerId); this.cardNumber = 34; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public ChandraNalaar(final ChandraNalaar card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChartoothCougar.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChartoothCougar.java index dfa72d14d2..a7dcbfe7ff 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChartoothCougar.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ChartoothCougar.java @@ -38,7 +38,7 @@ public class ChartoothCougar extends mage.sets.scourge.ChartoothCougar { public ChartoothCougar(UUID ownerId) { super(ownerId); this.cardNumber = 47; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public ChartoothCougar(final ChartoothCougar card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Condescend.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Condescend.java index 923251044c..47357973bf 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Condescend.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Condescend.java @@ -38,7 +38,7 @@ public class Condescend extends mage.sets.fifthdawn.Condescend { public Condescend(UUID ownerId) { super(ownerId); this.cardNumber = 28; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Condescend(final Condescend card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ConeOfFlame.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ConeOfFlame.java index b9429c0851..10a68a6c61 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ConeOfFlame.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ConeOfFlame.java @@ -38,7 +38,7 @@ public class ConeOfFlame extends mage.sets.knightsvsdragons.ConeOfFlame { public ConeOfFlame(UUID ownerId) { super(ownerId); this.cardNumber = 54; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public ConeOfFlame(final ConeOfFlame card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Counterspell.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Counterspell.java index d99267f496..1489462e7c 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Counterspell.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Counterspell.java @@ -38,7 +38,7 @@ public class Counterspell extends mage.sets.tempest.Counterspell { public Counterspell(UUID ownerId) { super(ownerId); this.cardNumber = 24; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Counterspell(final Counterspell card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Daze.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Daze.java index 77da2a24a0..4f55eaede2 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Daze.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Daze.java @@ -38,7 +38,7 @@ public class Daze extends mage.sets.nemesis.Daze { public Daze(UUID ownerId) { super(ownerId); this.cardNumber = 23; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Daze(final Daze card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Demonfire.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Demonfire.java index a9ae777f4c..e7dd2de9e2 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Demonfire.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Demonfire.java @@ -38,7 +38,7 @@ public class Demonfire extends mage.sets.dissension.Demonfire { public Demonfire(UUID ownerId) { super(ownerId); this.cardNumber = 57; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Demonfire(final Demonfire card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ErrantEphemeron.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ErrantEphemeron.java index 568af37293..e4ccfe3d7a 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ErrantEphemeron.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ErrantEphemeron.java @@ -38,7 +38,7 @@ public class ErrantEphemeron extends mage.sets.timespiral.ErrantEphemeron { public ErrantEphemeron(UUID ownerId) { super(ownerId); this.cardNumber = 20; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public ErrantEphemeron(final ErrantEphemeron card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FactOrFiction.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FactOrFiction.java index 6d9a6767a1..283aa92f43 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FactOrFiction.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FactOrFiction.java @@ -38,7 +38,7 @@ public class FactOrFiction extends mage.sets.invasion.FactOrFiction { public FactOrFiction(UUID ownerId) { super(ownerId); this.cardNumber = 26; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FactOrFiction(final FactOrFiction card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FathomSeer.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FathomSeer.java index 6a0634c23a..c49a585ccf 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FathomSeer.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FathomSeer.java @@ -38,7 +38,7 @@ public class FathomSeer extends mage.sets.jacevschandra.FathomSeer { public FathomSeer(UUID ownerId) { super(ownerId); this.cardNumber = 3; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FathomSeer(final FathomSeer card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireball.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireball.java index ae687855ba..281e7c81c0 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireball.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireball.java @@ -38,7 +38,7 @@ public class Fireball extends mage.sets.magic2010.Fireball { public Fireball(UUID ownerId) { super(ownerId); this.cardNumber = 56; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Fireball(final Fireball card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireblast.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireblast.java index f50f8a1f19..98c582655a 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireblast.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireblast.java @@ -38,7 +38,7 @@ public class Fireblast extends mage.sets.visions.Fireblast { public Fireblast(UUID ownerId) { super(ownerId); this.cardNumber = 55; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Fireblast(final Fireblast card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Firebolt.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Firebolt.java index 62a8410395..6006ff7cb5 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Firebolt.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Firebolt.java @@ -38,7 +38,7 @@ public class Firebolt extends mage.sets.odyssey.Firebolt { public Firebolt(UUID ownerId) { super(ownerId); this.cardNumber = 49; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Firebolt(final Firebolt card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireslinger.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireslinger.java index 3e2a0890ce..7d162e685b 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireslinger.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Fireslinger.java @@ -38,7 +38,7 @@ public class Fireslinger extends mage.sets.tempest.Fireslinger { public Fireslinger(UUID ownerId) { super(ownerId); this.cardNumber = 36; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Fireslinger(final Fireslinger card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlameJavelin.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlameJavelin.java index 300254da8b..e13dcdd7da 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlameJavelin.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlameJavelin.java @@ -38,7 +38,7 @@ public class FlameJavelin extends mage.sets.shadowmoor.FlameJavelin { public FlameJavelin(UUID ownerId) { super(ownerId); this.cardNumber = 53; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FlameJavelin(final FlameJavelin card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamekinBrawler.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamekinBrawler.java index be909285cd..6c36651f16 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamekinBrawler.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamekinBrawler.java @@ -38,7 +38,7 @@ public class FlamekinBrawler extends mage.sets.lorwyn.FlamekinBrawler { public FlamekinBrawler(UUID ownerId) { super(ownerId); this.cardNumber = 35; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FlamekinBrawler(final FlamekinBrawler card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlametongueKavu.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlametongueKavu.java index 4ec0dab8b3..aa0ef5c3e9 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlametongueKavu.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlametongueKavu.java @@ -38,7 +38,7 @@ public class FlametongueKavu extends mage.sets.planechase.FlametongueKavu { public FlametongueKavu(UUID ownerId) { super(ownerId); this.cardNumber = 42; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FlametongueKavu(final FlametongueKavu card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamewaveInvoker.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamewaveInvoker.java index da100a2579..57268c1f9a 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamewaveInvoker.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FlamewaveInvoker.java @@ -38,7 +38,7 @@ public class FlamewaveInvoker extends mage.sets.tenth.FlamewaveInvoker { public FlamewaveInvoker(UUID ownerId) { super(ownerId); this.cardNumber = 40; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FlamewaveInvoker(final FlamewaveInvoker card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FledglingMawcor.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FledglingMawcor.java index 13bab85dc6..6abfe6878b 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FledglingMawcor.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FledglingMawcor.java @@ -38,7 +38,7 @@ public class FledglingMawcor extends mage.sets.jacevschandra.FledglingMawcor { public FledglingMawcor(UUID ownerId) { super(ownerId); this.cardNumber = 10; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FledglingMawcor(final FledglingMawcor card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FurnaceWhelp.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FurnaceWhelp.java index 0d0e2b4c3c..7c27eaa366 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/FurnaceWhelp.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/FurnaceWhelp.java @@ -38,7 +38,7 @@ public class FurnaceWhelp extends mage.sets.tenth.FurnaceWhelp { public FurnaceWhelp(UUID ownerId) { super(ownerId); this.cardNumber = 43; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public FurnaceWhelp(final FurnaceWhelp card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Gush.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Gush.java index 53931615f7..2724a20320 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Gush.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Gush.java @@ -38,7 +38,7 @@ public class Gush extends mage.sets.jacevschandra.Gush { public Gush(UUID ownerId) { super(ownerId); this.cardNumber = 27; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Gush(final Gush card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Incinerate.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Incinerate.java index 25b82ca58f..3b9fb2b0d9 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Incinerate.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Incinerate.java @@ -38,7 +38,7 @@ public class Incinerate extends mage.sets.tenth.Incinerate { public Incinerate(UUID ownerId) { super(ownerId); this.cardNumber = 51; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Incinerate(final Incinerate card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/IngotChewer.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/IngotChewer.java index 6a0cb3b11b..b15736d371 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/IngotChewer.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/IngotChewer.java @@ -38,7 +38,7 @@ public class IngotChewer extends mage.sets.lorwyn.IngotChewer { public IngotChewer(UUID ownerId) { super(ownerId); this.cardNumber = 45; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public IngotChewer(final IngotChewer card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/InnerFlameAcolyte.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/InnerFlameAcolyte.java index 5a79007b69..7448f7fdf8 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/InnerFlameAcolyte.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/InnerFlameAcolyte.java @@ -38,7 +38,7 @@ public class InnerFlameAcolyte extends mage.sets.lorwyn.InnerFlameAcolyte { public InnerFlameAcolyte(UUID ownerId) { super(ownerId); this.cardNumber = 41; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public InnerFlameAcolyte(final InnerFlameAcolyte card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island1.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island1.java index 325d616dec..44df648853 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island1.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island1.java @@ -37,7 +37,7 @@ public class Island1 extends mage.cards.basiclands.Island { public Island1(UUID ownerId) { super(ownerId, 30); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Island1(final Island1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island2.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island2.java index 52c3fe87dc..55568159bb 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island2.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island2.java @@ -37,7 +37,7 @@ public class Island2 extends mage.cards.basiclands.Island { public Island2(UUID ownerId) { super(ownerId, 31); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Island2(final Island2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island3.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island3.java index c9cb7c128e..fcc29e36f6 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island3.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island3.java @@ -37,7 +37,7 @@ public class Island3 extends mage.cards.basiclands.Island { public Island3(UUID ownerId) { super(ownerId, 32); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Island3(final Island3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island4.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island4.java index 372e296a9d..805011499b 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island4.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Island4.java @@ -37,7 +37,7 @@ public class Island4 extends mage.cards.basiclands.Island { public Island4(UUID ownerId) { super(ownerId, 33); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Island4(final Island4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/JaceBeleren.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/JaceBeleren.java index 53f7fda1b1..b11216b374 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/JaceBeleren.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/JaceBeleren.java @@ -38,7 +38,7 @@ public class JaceBeleren extends mage.sets.magic2010.JaceBeleren { public JaceBeleren(UUID ownerId) { super(ownerId); this.cardNumber = 1; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public JaceBeleren(final JaceBeleren card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/MagmaJet.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/MagmaJet.java index 2d0f84c6a9..f6df866040 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/MagmaJet.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/MagmaJet.java @@ -38,7 +38,7 @@ public class MagmaJet extends mage.sets.fifthdawn.MagmaJet { public MagmaJet(UUID ownerId) { super(ownerId); this.cardNumber = 52; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public MagmaJet(final MagmaJet card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ManOWar.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ManOWar.java index b9a07bfccf..394a08a239 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/ManOWar.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/ManOWar.java @@ -38,7 +38,7 @@ public class ManOWar extends mage.sets.visions.ManOWar { public ManOWar(UUID ownerId) { super(ownerId); this.cardNumber = 8; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public ManOWar(final ManOWar card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/MartyrOfFrost.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/MartyrOfFrost.java index 84ad3517b4..561490edc6 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/MartyrOfFrost.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/MartyrOfFrost.java @@ -38,7 +38,7 @@ public class MartyrOfFrost extends mage.sets.coldsnap.MartyrOfFrost { public MartyrOfFrost(UUID ownerId) { super(ownerId); this.cardNumber = 2; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public MartyrOfFrost(final MartyrOfFrost card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/MindStone.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/MindStone.java index 2e1d02b40d..e29e0e6ec7 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/MindStone.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/MindStone.java @@ -38,7 +38,7 @@ public class MindStone extends mage.sets.tenth.MindStone { public MindStone(UUID ownerId) { super(ownerId); this.cardNumber = 22; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public MindStone(final MindStone card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain1.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain1.java index 2b223c5e5a..838d7e8ef6 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain1.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain1.java @@ -37,7 +37,7 @@ public class Mountain1 extends mage.cards.basiclands.Mountain { public Mountain1(UUID ownerId) { super(ownerId, 59); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Mountain1(final Mountain1 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain2.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain2.java index 2b9a1b7391..4b9b0d102e 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain2.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain2.java @@ -37,7 +37,7 @@ public class Mountain2 extends mage.cards.basiclands.Mountain { public Mountain2(UUID ownerId) { super(ownerId, 60); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Mountain2(final Mountain2 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain3.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain3.java index 026b05a9d9..6eb5d43d71 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain3.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain3.java @@ -37,7 +37,7 @@ public class Mountain3 extends mage.cards.basiclands.Mountain { public Mountain3(UUID ownerId) { super(ownerId, 61); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Mountain3(final Mountain3 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain4.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain4.java index 085b381439..6f13fc225f 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain4.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mountain4.java @@ -37,7 +37,7 @@ public class Mountain4 extends mage.cards.basiclands.Mountain { public Mountain4(UUID ownerId) { super(ownerId, 62); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Mountain4(final Mountain4 card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mulldrifter.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mulldrifter.java index ae1cfa5ae6..0abf28f037 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mulldrifter.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Mulldrifter.java @@ -38,7 +38,7 @@ public class Mulldrifter extends mage.sets.commander.Mulldrifter { public Mulldrifter(UUID ownerId) { super(ownerId); this.cardNumber = 12; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Mulldrifter(final Mulldrifter card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/OxiddaGolem.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/OxiddaGolem.java index 71daf871d7..190b959a66 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/OxiddaGolem.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/OxiddaGolem.java @@ -38,7 +38,7 @@ public class OxiddaGolem extends mage.sets.jacevschandra.OxiddaGolem { public OxiddaGolem(UUID ownerId) { super(ownerId); this.cardNumber = 46; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public OxiddaGolem(final OxiddaGolem card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/PyreCharger.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/PyreCharger.java index 744cce4805..0ed6ea955b 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/PyreCharger.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/PyreCharger.java @@ -38,7 +38,7 @@ public class PyreCharger extends mage.sets.shadowmoor.PyreCharger { public PyreCharger(UUID ownerId) { super(ownerId); this.cardNumber = 38; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public PyreCharger(final PyreCharger card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/QuicksilverDragon.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/QuicksilverDragon.java index e932f26e83..6f27956e3d 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/QuicksilverDragon.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/QuicksilverDragon.java @@ -38,7 +38,7 @@ public class QuicksilverDragon extends mage.sets.jacevschandra.QuicksilverDragon public QuicksilverDragon(UUID ownerId) { super(ownerId); this.cardNumber = 19; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public QuicksilverDragon(final QuicksilverDragon card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/RakdosPitDragon.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/RakdosPitDragon.java index 2d1d952091..e208c86e7b 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/RakdosPitDragon.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/RakdosPitDragon.java @@ -38,7 +38,7 @@ public class RakdosPitDragon extends mage.sets.dissension.RakdosPitDragon { public RakdosPitDragon(UUID ownerId) { super(ownerId); this.cardNumber = 44; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public RakdosPitDragon(final RakdosPitDragon card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Repulse.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Repulse.java index b40bba0910..e37445e9cd 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Repulse.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Repulse.java @@ -38,7 +38,7 @@ public class Repulse extends mage.sets.invasion.Repulse { public Repulse(UUID ownerId) { super(ownerId); this.cardNumber = 25; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Repulse(final Repulse card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/RiftwingCloudskate.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/RiftwingCloudskate.java index 04f6526d95..742cf5b008 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/RiftwingCloudskate.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/RiftwingCloudskate.java @@ -38,7 +38,7 @@ public class RiftwingCloudskate extends mage.sets.timespiral.RiftwingCloudskate public RiftwingCloudskate(UUID ownerId) { super(ownerId); this.cardNumber = 15; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public RiftwingCloudskate(final RiftwingCloudskate card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/SealOfFire.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/SealOfFire.java index 16f5d2b1ee..529397fee9 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/SealOfFire.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/SealOfFire.java @@ -38,7 +38,7 @@ public class SealOfFire extends mage.sets.nemesis.SealOfFire { public SealOfFire(UUID ownerId) { super(ownerId); this.cardNumber = 50; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public SealOfFire(final SealOfFire card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/SlithFirewalker.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/SlithFirewalker.java index 28a71c2905..23915d91ef 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/SlithFirewalker.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/SlithFirewalker.java @@ -38,7 +38,7 @@ public class SlithFirewalker extends mage.sets.mirrodin.SlithFirewalker { public SlithFirewalker(UUID ownerId) { super(ownerId); this.cardNumber = 39; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public SlithFirewalker(final SlithFirewalker card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/SpireGolem.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/SpireGolem.java index badab8f5c4..96e5008e83 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/SpireGolem.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/SpireGolem.java @@ -38,7 +38,7 @@ public class SpireGolem extends mage.sets.jacevschandra.SpireGolem { public SpireGolem(UUID ownerId) { super(ownerId); this.cardNumber = 16; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public SpireGolem(final SpireGolem card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/TerrainGenerator.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/TerrainGenerator.java index b24c442221..3a67a29363 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/TerrainGenerator.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/TerrainGenerator.java @@ -58,7 +58,7 @@ public class TerrainGenerator extends CardImpl { public TerrainGenerator(UUID ownerId) { super(ownerId, 29, "Terrain Generator", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; // {tap}: Add {1} to your mana pool. this.addAbility(new ColorlessManaAbility()); diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/VoidmageApprentice.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/VoidmageApprentice.java index cdb469a02f..91470f2cb4 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/VoidmageApprentice.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/VoidmageApprentice.java @@ -47,7 +47,7 @@ public class VoidmageApprentice extends CardImpl { public VoidmageApprentice(UUID ownerId) { super(ownerId, 4, "Voidmage Apprentice", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; this.subtype.add("Human"); this.subtype.add("Wizard"); this.power = new MageInt(1); diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java index 1f8292d351..229b49ebf3 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/WallOfDeceit.java @@ -49,7 +49,7 @@ public class WallOfDeceit extends CardImpl { public WallOfDeceit(UUID ownerId) { super(ownerId, 5, "Wall of Deceit", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; this.subtype.add("Wall"); this.power = new MageInt(0); this.toughness = new MageInt(5); diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/WaterspoutDjinn.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/WaterspoutDjinn.java index 63945d45ed..f115e5732e 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/WaterspoutDjinn.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/WaterspoutDjinn.java @@ -38,7 +38,7 @@ public class WaterspoutDjinn extends mage.sets.jacevschandra.WaterspoutDjinn { public WaterspoutDjinn(UUID ownerId) { super(ownerId); this.cardNumber = 11; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public WaterspoutDjinn(final WaterspoutDjinn card) { diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Willbender.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Willbender.java index 7d253cffc6..a22683f9b2 100644 --- a/Mage.Sets/src/mage/sets/anthologyjacevschandra/Willbender.java +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/Willbender.java @@ -38,7 +38,7 @@ public class Willbender extends mage.sets.commander2014.Willbender { public Willbender(UUID ownerId) { super(ownerId); this.cardNumber = 6; - this.expansionSetCode = "DD3"; + this.expansionSetCode = "DD3D"; } public Willbender(final Willbender card) { diff --git a/Mage.Sets/src/mage/sets/archenemy/BreathOfDarigaaz.java b/Mage.Sets/src/mage/sets/archenemy/BreathOfDarigaaz.java new file mode 100644 index 0000000000..19857c0f07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/archenemy/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.archenemy; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class BreathOfDarigaaz extends mage.sets.commander.BreathOfDarigaaz { + + public BreathOfDarigaaz(UUID ownerId) { + super(ownerId); + this.cardNumber = 31; + this.expansionSetCode = "ARC"; + } + + public BreathOfDarigaaz(final BreathOfDarigaaz card) { + super(card); + } + + @Override + public BreathOfDarigaaz copy() { + return new BreathOfDarigaaz(this); + } +} diff --git a/Mage.Sets/src/mage/sets/archenemy/KilnmouthDragon.java b/Mage.Sets/src/mage/sets/archenemy/KilnmouthDragon.java new file mode 100644 index 0000000000..2ca7765b9d --- /dev/null +++ b/Mage.Sets/src/mage/sets/archenemy/KilnmouthDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.archenemy; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class KilnmouthDragon extends mage.sets.knightsvsdragons.KilnmouthDragon { + + public KilnmouthDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 44; + this.expansionSetCode = "ARC"; + } + + public KilnmouthDragon(final KilnmouthDragon card) { + super(card); + } + + @Override + public KilnmouthDragon copy() { + return new KilnmouthDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java b/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java index cac210a838..71640c0deb 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java @@ -34,6 +34,7 @@ import mage.ConditionalMana; import mage.MageObject; import mage.Mana; import mage.abilities.Ability; +import mage.abilities.SpellAbility; import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; @@ -80,8 +81,9 @@ public class CavernOfSouls extends CardImpl { this.addAbility(new ColorlessManaAbility()); // {T}: Add one mana of any color to your mana pool. Spend this mana only to cast a creature spell of the chosen type, and that spell can't be countered. - this.addAbility(new ConditionalAnyColorManaAbility(new TapSourceCost(), 1, new CavernOfSoulsManaBuilder(), true), new CavernOfSoulsWatcher()); - this.addAbility(new SimpleStaticAbility(Zone.ALL, new CavernOfSoulsCantCounterEffect())); + Ability ability = new ConditionalAnyColorManaAbility(new TapSourceCost(), 1, new CavernOfSoulsManaBuilder(), true); + this.addAbility(ability, new CavernOfSoulsWatcher(ability.getOriginalId())); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new CavernOfSoulsCantCounterEffect())); } public CavernOfSouls(final CavernOfSouls card) { @@ -146,14 +148,12 @@ class CavernOfSoulsManaBuilder extends ConditionalManaBuilder { if (controller != null && sourceObject != null) { game.informPlayers(controller.getName() + " produces " + mana.toString() + " with " + sourceObject.getLogName() + " (can only be spend to cast for creatures of type " + creatureType + " and that spell can't be countered)"); - } - + } return super.setMana(mana, source, game); } @Override public ConditionalMana build(Object... options) { - this.mana.setFlag(true); // indicates that the mana is from second ability return new CavernOfSoulsConditionalMana(this.mana, creatureType); } @@ -196,15 +196,18 @@ class CavernOfSoulsManaCondition extends CreatureCastManaCondition { class CavernOfSoulsWatcher extends Watcher { - public List spells = new ArrayList<>(); - - public CavernOfSoulsWatcher() { - super("ManaPaidFromCavernOfSoulsWatcher", WatcherScope.GAME); + private List spells = new ArrayList<>(); + private final String originalId; + + public CavernOfSoulsWatcher(UUID originalId) { + super("ManaPaidFromCavernOfSoulsWatcher", WatcherScope.CARD); + this.originalId = originalId.toString(); } public CavernOfSoulsWatcher(final CavernOfSoulsWatcher watcher) { super(watcher); this.spells.addAll(watcher.spells); + this.originalId = watcher.originalId; } @Override @@ -215,13 +218,15 @@ class CavernOfSoulsWatcher extends Watcher { @Override public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.MANA_PAYED) { - MageObject object = game.getObject(event.getSourceId()); - // TODO: Replace identification by name by better method that also works if ability is copied from other land with other name - if (object != null && object.getName().equals("Cavern of Souls") && event.getFlag()) { + if (event.getData() != null && event.getData().equals(originalId)) { spells.add(event.getTargetId()); } } } + + public boolean spellCantBeCountered(UUID spellId) { + return spells.contains(spellId); + } @Override public void reset() { @@ -267,8 +272,8 @@ class CavernOfSoulsCantCounterEffect extends ContinuousRuleModifyingEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - CavernOfSoulsWatcher watcher = (CavernOfSoulsWatcher) game.getState().getWatchers().get("ManaPaidFromCavernOfSoulsWatcher"); + CavernOfSoulsWatcher watcher = (CavernOfSoulsWatcher) game.getState().getWatchers().get("ManaPaidFromCavernOfSoulsWatcher", source.getSourceId()); Spell spell = game.getStack().getSpell(event.getTargetId()); - return spell != null && watcher.spells.contains(spell.getId()); + return spell != null && watcher != null && watcher.spellCantBeCountered(spell.getId()); } } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/DeadeyeNavigator.java b/Mage.Sets/src/mage/sets/avacynrestored/DeadeyeNavigator.java index 61722234ec..4a5660fb5d 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/DeadeyeNavigator.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/DeadeyeNavigator.java @@ -63,8 +63,8 @@ public class DeadeyeNavigator extends CardImpl { this.addAbility(SoulbondAbility.getInstance()); // As long as Deadeye Navigator is paired with another creature, each of those creatures has "{1}{U}: Exile this creature, then return it to the battlefield under your control." - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(Zone.BATTLEFIELD), new ManaCostsImpl("{1}{U}")); - ability.addEffect(new ReturnToBattlefieldUnderYourControlSourceEffect(Zone.EXILED)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(true), new ManaCostsImpl("{1}{U}")); + ability.addEffect(new ReturnToBattlefieldUnderYourControlSourceEffect()); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityPairedEffect(ability, ruleText))); } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/DescentIntoMadness.java b/Mage.Sets/src/mage/sets/avacynrestored/DescentIntoMadness.java index 4418e51d3e..2ecdf10794 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/DescentIntoMadness.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/DescentIntoMadness.java @@ -136,7 +136,7 @@ class DescentIntoMadnessEffect extends OneShotEffect { if (permanent != null) { Player player = game.getPlayer(permanent.getControllerId()); if (player != null) { - player.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + player.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); } } } else if (game.getState().getZone(objectId).equals(Zone.HAND)) { @@ -144,7 +144,7 @@ class DescentIntoMadnessEffect extends OneShotEffect { if (card != null) { Player player = game.getPlayer(card.getOwnerId()); if (player != null) { - player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND); + player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } } } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java b/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java index 1bcf434d13..6cd15817fa 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/GloomSurgeon.java @@ -93,7 +93,7 @@ class GloomSurgeonEffect extends ReplacementEffectImpl { for (int i = 0; i < cardsCount; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { - player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } else { break; } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/HarvesterOfSouls.java b/Mage.Sets/src/mage/sets/avacynrestored/HarvesterOfSouls.java index 9400f612a6..a31048b767 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/HarvesterOfSouls.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/HarvesterOfSouls.java @@ -58,7 +58,6 @@ public class HarvesterOfSouls extends CardImpl { this.expansionSetCode = "AVR"; this.subtype.add("Demon"); - this.color.setBlack(true); this.power = new MageInt(5); this.toughness = new MageInt(5); diff --git a/Mage.Sets/src/mage/sets/avacynrestored/RestorationAngel.java b/Mage.Sets/src/mage/sets/avacynrestored/RestorationAngel.java index 89a667da26..033b9af66b 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/RestorationAngel.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/RestorationAngel.java @@ -112,7 +112,7 @@ class RestorationAngelEffect extends OneShotEffect { Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); if (permanent != null && sourcePermanent != null) { - controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); Card card = game.getCard(targetPointer.getFirst(game, source)); if (card != null) { Zone currentZone = game.getState().getZone(card.getId()); diff --git a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java index 20821d385d..494d65c852 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java @@ -95,7 +95,7 @@ class StolenGoodsEffect extends OneShotEffect { do { card = library.removeFromTop(game); if (card != null) { - opponent.moveCardToExileWithInfo(card, source.getSourceId(), "Stolen Goods", source.getSourceId(), game, Zone.LIBRARY); + opponent.moveCardToExileWithInfo(card, source.getSourceId(), "Stolen Goods", source.getSourceId(), game, Zone.LIBRARY, true); } } while (library.size() > 0 && card != null && card.getCardType().contains(CardType.LAND)); diff --git a/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java b/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java index f7159d030f..2a5dfa521b 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/ThatcherRevolt.java @@ -97,7 +97,7 @@ class ThatcherRevoltEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/avacynrestored/TreacherousPitDweller.java b/Mage.Sets/src/mage/sets/avacynrestored/TreacherousPitDweller.java index 8d7b923b57..337d893d1a 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/TreacherousPitDweller.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/TreacherousPitDweller.java @@ -109,9 +109,11 @@ class TreacherousPitDwellerEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); if (permanent != null) { return permanent.changeControllerId(source.getFirstTarget(), game); + } else { + discard(); } return false; } diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoblinCohort.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoblinCohort.java index 0020b71fe7..2d1a094184 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoblinCohort.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoblinCohort.java @@ -27,8 +27,6 @@ */ package mage.sets.betrayersofkamigawa; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; @@ -38,13 +36,10 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; -import mage.constants.WatcherScope; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; import mage.game.permanent.Permanent; -import mage.game.stack.Spell; -import mage.watchers.Watcher; +import mage.watchers.common.PlayerCastCreatureWatcher; /** * @@ -110,41 +105,3 @@ class GoblinCohortEffect extends RestrictionEffect { } } -class PlayerCastCreatureWatcher extends Watcher { - - Set playerIds = new HashSet<>(); - - public PlayerCastCreatureWatcher() { - super("PlayerCastCreature", WatcherScope.GAME); - } - - public PlayerCastCreatureWatcher(final PlayerCastCreatureWatcher watcher) { - super(watcher); - this.playerIds.addAll(watcher.playerIds); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.SPELL_CAST) { - Spell spell = (Spell) game.getObject(event.getTargetId()); - if (spell.getCardType().contains(CardType.CREATURE)) { - playerIds.add(spell.getControllerId()); - } - } - } - - @Override - public PlayerCastCreatureWatcher copy() { - return new PlayerCastCreatureWatcher(this); - } - - @Override - public void reset() { - super.reset(); - playerIds.clear(); - } - - public boolean playerDidCastCreatureThisTurn(UUID playerId) { - return playerIds.contains(playerId); - } -} diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoryosVengeance.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoryosVengeance.java index 7c1c1f7b2e..4818b70039 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoryosVengeance.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/GoryosVengeance.java @@ -125,7 +125,7 @@ class GoryosVengeanceEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/KaijinOfTheVanishingTouch.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/KaijinOfTheVanishingTouch.java index 0733b89f4a..f52364f0fa 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/KaijinOfTheVanishingTouch.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/KaijinOfTheVanishingTouch.java @@ -94,7 +94,7 @@ class KaijinOfTheVanishingTouchEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new ReturnToHandTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/KumanosBlessing.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/KumanosBlessing.java index 2a97b59370..b0827bc7d8 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/KumanosBlessing.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/KumanosBlessing.java @@ -117,7 +117,7 @@ class KumanosBlessingEffect extends ReplacementEffectImpl { Permanent permanent = ((ZoneChangeEvent)event).getTarget(); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + return controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); } return false; } diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java index 94b9de2efd..bc86c84277 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/OrnateKanzashi.java @@ -104,7 +104,7 @@ class OrnateKanzashiEffect extends OneShotEffect { Library library = opponent.getLibrary(); Card card = library.getFromTop(game); if (card != null) { - opponent.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + opponent.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new OrnateKanzashiCastFromExileEffect(card.getId()); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/ShireiShizosCaretaker.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/ShireiShizosCaretaker.java index 2ef86d875e..3f3d007453 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/ShireiShizosCaretaker.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/ShireiShizosCaretaker.java @@ -151,7 +151,7 @@ class ShireiShizosCaretakerEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(card.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/Shuriken.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/Shuriken.java index 5f8314ef1b..3ba3e2f811 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/Shuriken.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/Shuriken.java @@ -199,7 +199,7 @@ class ShurikenControlEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent equipment = null; + Permanent equipment = null; // TODO: Meanwhile blinked object would be found regardless for(Cost cost : source.getCosts()) { if (cost instanceof ShurikenUnattachCost) { equipment = ((ShurikenUnattachCost) cost).getEquipment(); diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java index 291b1fcb3f..6364f7c7ca 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java @@ -28,9 +28,6 @@ package mage.sets.betrayersofkamigawa; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -39,6 +36,8 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; 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.FilterControlledLandPermanent; import mage.filter.common.FilterControlledPermanent; @@ -56,7 +55,7 @@ public class SoratamiMindsweeper extends CardImpl { public SoratamiMindsweeper(UUID ownerId) { super(ownerId, 52, "Soratami Mindsweeper", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); this.expansionSetCode = "BOK"; - this.subtype.add("Moofolk"); + this.subtype.add("Moonfolk"); this.subtype.add("Wizard"); this.color.setBlue(true); this.power = new MageInt(1); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/FallOfTheHammer.java b/Mage.Sets/src/mage/sets/bornofthegods/FallOfTheHammer.java index af5f659bf8..f8abd69264 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/FallOfTheHammer.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/FallOfTheHammer.java @@ -1,140 +1,136 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.sets.bornofthegods; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.common.TargetPermanentPowerCount; -import mage.abilities.effects.Effect; -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.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.SecondTargetPointer; - -/** - * - * - * As Fall of the Hammer tries to resolve, if only one of the targets is legal, - * Fall of the Hammer will still resolve but will have no effect: If the first - * target creature is illegal, it can't deal damage to anything. If the second - * target creature is illegal, it can't be dealt damage. - * - * The amount of damage dealt is based on the first target creature's power as Fall of the Hammer resolves. - - - * @author LevelX2 - */ -public class FallOfTheHammer extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature"); - - public FallOfTheHammer(UUID ownerId) { - super(ownerId, 93, "Fall of the Hammer", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); - this.expansionSetCode = "BNG"; - - this.color.setRed(true); - - // Target creature you control deals damage equal to its power to another target creature. - this.getSpellAbility().addEffect(new FallOfTheHammerDamageEffect()); - this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); - this.getSpellAbility().addTarget(new FallOfTheHammerTargetCreaturePermanent(filter)); - } - - public FallOfTheHammer(final FallOfTheHammer card) { - super(card); - } - - @Override - public FallOfTheHammer copy() { - return new FallOfTheHammer(this); - } -} - -class FallOfTheHammerDamageEffect extends OneShotEffect { - - public FallOfTheHammerDamageEffect() { - super(Outcome.Damage); - this.staticText = "Target creature you control deals damage equal to its power to another target creature"; - } - - public FallOfTheHammerDamageEffect(final FallOfTheHammerDamageEffect effect) { - super(effect); - } - - @Override - public FallOfTheHammerDamageEffect copy() { - return new FallOfTheHammerDamageEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent ownCreature = game.getPermanent(source.getFirstTarget()); - if (ownCreature != null) { - int damage = ownCreature.getPower().getValue(); - Permanent targetCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget()); - if (targetCreature != null) { - targetCreature.damage(damage, ownCreature.getId(), game, false, true); - return true; - } - } - return false; - } -} - - -class FallOfTheHammerTargetCreaturePermanent extends TargetCreaturePermanent { - - public FallOfTheHammerTargetCreaturePermanent(FilterCreaturePermanent filter) { - super(filter); - } - - @Override - public boolean canTarget(UUID id, Ability source, Game game) { - if (source.getTargets().getFirstTarget().equals(id)) { - return false; - } - return super.canTarget(id, source, game); - } - - @Override - public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { - if (source.getTargets().getFirstTarget().equals(id)) { - return false; - } - return super.canTarget(controllerId, id, source, game); - } - -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.bornofthegods; + +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.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * + * As Fall of the Hammer tries to resolve, if only one of the targets is legal, + * Fall of the Hammer will still resolve but will have no effect: If the first + * target creature is illegal, it can't deal damage to anything. If the second + * target creature is illegal, it can't be dealt damage. + * + * The amount of damage dealt is based on the first target creature's power as Fall of the Hammer resolves. + + + * @author LevelX2 + */ +public class FallOfTheHammer extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature"); + + public FallOfTheHammer(UUID ownerId) { + super(ownerId, 93, "Fall of the Hammer", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "BNG"; + + this.color.setRed(true); + + // Target creature you control deals damage equal to its power to another target creature. + this.getSpellAbility().addEffect(new FallOfTheHammerDamageEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new FallOfTheHammerTargetCreaturePermanent(filter)); + } + + public FallOfTheHammer(final FallOfTheHammer card) { + super(card); + } + + @Override + public FallOfTheHammer copy() { + return new FallOfTheHammer(this); + } +} + +class FallOfTheHammerDamageEffect extends OneShotEffect { + + public FallOfTheHammerDamageEffect() { + super(Outcome.Damage); + this.staticText = "Target creature you control deals damage equal to its power to another target creature"; + } + + public FallOfTheHammerDamageEffect(final FallOfTheHammerDamageEffect effect) { + super(effect); + } + + @Override + public FallOfTheHammerDamageEffect copy() { + return new FallOfTheHammerDamageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent ownCreature = game.getPermanent(source.getFirstTarget()); + if (ownCreature != null) { + int damage = ownCreature.getPower().getValue(); + Permanent targetCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget()); + if (targetCreature != null) { + targetCreature.damage(damage, ownCreature.getId(), game, false, true); + return true; + } + } + return false; + } +} + + +class FallOfTheHammerTargetCreaturePermanent extends TargetCreaturePermanent { + + public FallOfTheHammerTargetCreaturePermanent(FilterCreaturePermanent filter) { + super(filter); + } + + @Override + public boolean canTarget(UUID id, Ability source, Game game) { + if (source.getTargets().getFirstTarget().equals(id)) { + return false; + } + return super.canTarget(id, source, game); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (source.getTargets().getFirstTarget().equals(id)) { + return false; + } + return super.canTarget(controllerId, id, source, game); + } + +} diff --git a/Mage.Sets/src/mage/sets/bornofthegods/FelhideSpiritbinder.java b/Mage.Sets/src/mage/sets/bornofthegods/FelhideSpiritbinder.java index 69efc81110..39d174386f 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/FelhideSpiritbinder.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/FelhideSpiritbinder.java @@ -115,7 +115,7 @@ class FelhideSpiritbinderEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java b/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java index 3fbea0866e..efcdd29219 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java @@ -58,7 +58,6 @@ public class FloodtideSerpent extends CardImpl { this.expansionSetCode = "BNG"; this.subtype.add("Serpent"); - this.color.setBlue(true); this.power = new MageInt(4); this.toughness = new MageInt(4); @@ -95,11 +94,6 @@ class FloodtideSerpentReplacementEffect extends ReplacementEffectImpl { super(effect); } - @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); - } - @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player player = game.getPlayer(event.getPlayerId()); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/SearingBlood.java b/Mage.Sets/src/mage/sets/bornofthegods/SearingBlood.java index 8f6456f006..046b4a22a7 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/SearingBlood.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/SearingBlood.java @@ -95,7 +95,7 @@ class SearingBloodEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new SearingBloodDelayedTriggeredAbility(source.getFirstTarget()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return new DamageTargetEffect(2).apply(game, source); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java b/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java index 67a0add64f..be1995a639 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java @@ -64,7 +64,7 @@ public class VortexElemental extends CardImpl { this.toughness = new MageInt(1); // {U}: Put Vortex Elemental and each creature blocking or blocked by it on top of their owners' libraries, then those players shuffle their libraries. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new VortexElementaöEffect(), new ManaCostsImpl("{U}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new VortexElementalEffect(), new ManaCostsImpl("{U}"))); // {3}{U}{U}: Target creature blocks Vortex Elemental this turn if able. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBeBlockedByTargetSourceEffect(), new ManaCostsImpl("{3}{U}{U}")); @@ -82,20 +82,20 @@ public class VortexElemental extends CardImpl { } } -class VortexElementaöEffect extends OneShotEffect { +class VortexElementalEffect extends OneShotEffect { - public VortexElementaöEffect() { + public VortexElementalEffect() { super(Outcome.Benefit); this.staticText = "Put {this} and each creature blocking or blocked by it on top of their owners' libraries, then those players shuffle their libraries"; } - public VortexElementaöEffect(final VortexElementaöEffect effect) { + public VortexElementalEffect(final VortexElementalEffect effect) { super(effect); } @Override - public VortexElementaöEffect copy() { - return new VortexElementaöEffect(this); + public VortexElementalEffect copy() { + return new VortexElementalEffect(this); } @Override @@ -103,8 +103,8 @@ class VortexElementaöEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Combat combat = game.getState().getCombat(); - Set creaturesToReturn = new HashSet(); - Set playersToShuffle = new HashSet(); + Set creaturesToReturn = new HashSet<>(); + Set playersToShuffle = new HashSet<>(); creaturesToReturn.add(source.getSourceId()); if (combat != null) { for(CombatGroup combatGroup: combat.getGroups()) { diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java b/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java index c961344942..add2214866 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java @@ -154,16 +154,19 @@ class BoseijuWhoSheltersAllCantCounterEffect extends ContinuousRuleModifyingEffe } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.COUNTER) { - BoseijuWhoSheltersAllWatcher watcher = (BoseijuWhoSheltersAllWatcher) game.getState().getWatchers().get("ManaPaidFromBoseijuWhoSheltersAllWatcher"); - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && watcher.spells.contains(spell.getId())) { - if (filter.match(spell.getCard(), game)) { - return true; - } + BoseijuWhoSheltersAllWatcher watcher = (BoseijuWhoSheltersAllWatcher) game.getState().getWatchers().get("ManaPaidFromBoseijuWhoSheltersAllWatcher"); + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && watcher.spells.contains(spell.getId())) { + if (filter.match(spell.getCard(), game)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java b/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java index a40ae690cf..0824c85c6f 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java @@ -105,17 +105,17 @@ class CranialExtractionEffect extends OneShotEffect { game.informPlayers(sourceObject.getLogName() + ", named card: [" + cardName + "]"); for (Card card: player.getGraveyard().getCards(game)) { if (card.getName().equals(cardName)) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } for (Card card: player.getHand().getCards(game)) { if (card.getName().equals(cardName)) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } } for (Card card: player.getLibrary().getCards(game)) { if (card.getName().equals(cardName)) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } controller.lookAtCards(sourceObject.getLogName() + " Hand", player.getHand(), game); diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/GhostlyPrison.java b/Mage.Sets/src/mage/sets/championsofkamigawa/GhostlyPrison.java index 394917e45c..33e3749890 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/GhostlyPrison.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/GhostlyPrison.java @@ -80,36 +80,35 @@ class GhostlyPrisonReplacementEffect extends ReplacementEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; } @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER) { - Player player = game.getPlayer(event.getPlayerId()); - if ( player != null && event.getTargetId().equals(source.getControllerId())) { - ManaCostsImpl attackTax = new ManaCostsImpl("{2}"); - if ( attackTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) && - player.chooseUse(Outcome.Benefit, "Pay {2} to attack player?", game) ) { - if (attackTax.payOrRollback(source, game, this.getId(), event.getPlayerId())) { - return false; - } - } + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getTargetId().equals(source.getControllerId()) ) { + Player attackedPlayer = game.getPlayer(event.getTargetId()); + if (attackedPlayer != null) { + // only if a player is attacked. Attacking a planeswalker is free return true; } } return false; } + @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER && event.getTargetId().equals(source.getControllerId()) ) { - Player attackedPlayer = game.getPlayer(event.getTargetId()); - if (attackedPlayer != null) { - // only if a player is attacked. Attacking a planeswalker is free - return true; + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if ( player != null && event.getTargetId().equals(source.getControllerId())) { + ManaCostsImpl attackTax = new ManaCostsImpl("{2}"); + if (attackTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) && + player.chooseUse(Outcome.Benefit, "Pay {2} to attack player?", game) ) { + if (attackTax.payOrRollback(source, game, this.getId(), event.getPlayerId())) { + return false; + } } + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HikariTwilightGuardian.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HikariTwilightGuardian.java index 0a7b55abd5..b4015f0476 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/HikariTwilightGuardian.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HikariTwilightGuardian.java @@ -103,7 +103,7 @@ class HikariTwilightGuardianEffect extends OneShotEffect { new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java b/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java index d7c6652c72..036318169b 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/InameLifeAspect.java @@ -107,7 +107,7 @@ class InameLifeAspectEffect extends OneShotEffect { MageObject sourceObject = game.getObject(source.getSourceId()); if (controller != null && sourceObject != null) { if (controller.chooseUse(outcome, "Exile " + sourceObject.getLogName() + " to return Spirit cards?", game)) { - new ExileSourceEffect(Zone.GRAVEYARD).apply(game, source); + new ExileSourceEffect().apply(game, source); return new ReturnToHandTargetEffect().apply(game, source); } return true; diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/JunkyoBell.java b/Mage.Sets/src/mage/sets/championsofkamigawa/JunkyoBell.java index 46ab66c555..7e1c9efce0 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/JunkyoBell.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/JunkyoBell.java @@ -103,7 +103,7 @@ private class JunkyoBellSacrificeEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/KikiJikiMirrorBreaker.java b/Mage.Sets/src/mage/sets/championsofkamigawa/KikiJikiMirrorBreaker.java index aff7952cd4..476155135d 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/KikiJikiMirrorBreaker.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/KikiJikiMirrorBreaker.java @@ -131,7 +131,7 @@ class KikiJikiMirrorBreakerEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/OtherworldlyJourney.java b/Mage.Sets/src/mage/sets/championsofkamigawa/OtherworldlyJourney.java index 1170a61257..d8a0daeb56 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/OtherworldlyJourney.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/OtherworldlyJourney.java @@ -99,7 +99,7 @@ class OtherworldlyJourneyEffect extends OneShotEffect { new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, "return that card to the battlefield under its owner's control with a +1/+1 counter on it")); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); AddCountersTargetEffect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance()); effect.setTargetPointer(new FixedTarget(source.getFirstTarget())); delayedAbility.addEffect(effect); diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/ShimatsuTheBloodcloaked.java b/Mage.Sets/src/mage/sets/championsofkamigawa/ShimatsuTheBloodcloaked.java index 00e064850e..2c01f7d33c 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/ShimatsuTheBloodcloaked.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/ShimatsuTheBloodcloaked.java @@ -57,7 +57,6 @@ public class ShimatsuTheBloodcloaked extends CardImpl { this.subtype.add("Demon"); this.subtype.add("Spirit"); - this.color.setRed(true); this.power = new MageInt(0); this.toughness = new MageInt(0); @@ -90,15 +89,15 @@ class ShimatsuTheBloodcloakedEffect extends ReplacementEffectImpl { public ShimatsuTheBloodcloakedEffect copy() { return new ShimatsuTheBloodcloakedEffect(this); } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD - && event.getTargetId().equals(source.getSourceId())) { - return true; - } - return false; - + return event.getTargetId().equals(source.getSourceId()); } @Override @@ -125,9 +124,5 @@ class ShimatsuTheBloodcloakedEffect extends ReplacementEffectImpl { } return false; } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } + } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SiftThroughSands.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SiftThroughSands.java index f6050c8ffd..520cb44c28 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/SiftThroughSands.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SiftThroughSands.java @@ -1,145 +1,146 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.sets.championsofkamigawa; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.discard.DiscardControllerEffect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.WatcherScope; -import mage.filter.common.FilterCreatureCard; -import mage.filter.predicate.mageobject.NamePredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.stack.Spell; -import mage.target.common.TargetCardInLibrary; -import mage.watchers.Watcher; - -/** - * - * @author LevelX2 - */ -public class SiftThroughSands extends CardImpl { - - private static final String rule = "If you've cast a spell named Peer Through Depths and a spell named Reach Through Mists this turn, you may search your library for a card named The Unspeakable, put it onto the battlefield, then shuffle your library"; - private static final FilterCreatureCard filter = new FilterCreatureCard("a card named The Unspeakable"); - static { - filter.add(new NamePredicate("The Unspeakable")); - } - - public SiftThroughSands(UUID ownerId) { - super(ownerId, 84, "Sift Through Sands", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{U}{U}"); - this.expansionSetCode = "CHK"; - this.subtype.add("Arcane"); - - this.color.setBlue(true); - - // Draw two cards, then discard a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); - Effect effect = new DiscardControllerEffect(1); - effect.setText(", then discard a card"); - this.getSpellAbility().addEffect(effect); - // If you've cast a spell named Peer Through Depths and a spell named Reach Through Mists this turn, you may search your library for a card named The Unspeakable, put it onto the battlefield, then shuffle your library. - this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), false, true), new SiftThroughSandsCondition(), rule)); - this.getSpellAbility().addWatcher(new SiftThroughSandsWatcher()); - } - - public SiftThroughSands(final SiftThroughSands card) { - super(card); - } - - @Override - public SiftThroughSands copy() { - return new SiftThroughSands(this); - } -} - -class SiftThroughSandsCondition implements Condition { - - @Override - public boolean apply(Game game, Ability source) { - SiftThroughSandsWatcher watcher = (SiftThroughSandsWatcher) game.getState().getWatchers().get("SiftThroughSandsWatcher", source.getControllerId()); - if (watcher != null) { - return watcher.conditionMet(); - } - return false; - } -} - -class SiftThroughSandsWatcher extends Watcher { - - boolean castPeerThroughDepths = false; - boolean castReachThroughMists = false; - - public SiftThroughSandsWatcher() { - super("SiftThroughSandsWatcher", WatcherScope.PLAYER); - } - - public SiftThroughSandsWatcher(final SiftThroughSandsWatcher watcher) { - super(watcher); - this.castPeerThroughDepths = watcher.castPeerThroughDepths; - this.castReachThroughMists = watcher.castReachThroughMists; - } - - @Override - public SiftThroughSandsWatcher copy() { - return new SiftThroughSandsWatcher(this); - } - - @Override - public void watch(GameEvent event, Game game) { - if (condition == true) { //no need to check - condition has already occured - return; - } - if (event.getType() == EventType.SPELL_CAST - && controllerId == event.getPlayerId()) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell.getCard().getName().equals("Peer Through Depths")) { - castPeerThroughDepths = true; - } else if (spell.getCard().getName().equals("Reach Through Mists")) { - castReachThroughMists = true; - } - condition = castPeerThroughDepths && castReachThroughMists; - } - } - - @Override - public void reset() { - super.reset(); - this.castPeerThroughDepths = false; - this.castReachThroughMists = false; - } -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.championsofkamigawa; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.discard.DiscardControllerEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.WatcherScope; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.stack.Spell; +import mage.target.common.TargetCardInLibrary; +import mage.watchers.Watcher; + +/** + * + * @author LevelX2 + */ +public class SiftThroughSands extends CardImpl { + + private static final String rule = "If you've cast a spell named Peer Through Depths and a spell named Reach Through Mists this turn, you may search your library for a card named The Unspeakable, put it onto the battlefield, then shuffle your library"; + private static final FilterCreatureCard filter = new FilterCreatureCard("a card named The Unspeakable"); + static { + filter.add(new NamePredicate("The Unspeakable")); + } + + public SiftThroughSands(UUID ownerId) { + super(ownerId, 84, "Sift Through Sands", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{U}{U}"); + this.expansionSetCode = "CHK"; + this.subtype.add("Arcane"); + + this.color.setBlue(true); + + // Draw two cards, then discard a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); + Effect effect = new DiscardControllerEffect(1); + effect.setText(", then discard a card"); + this.getSpellAbility().addEffect(effect); + + // If you've cast a spell named Peer Through Depths and a spell named Reach Through Mists this turn, you may search your library for a card named The Unspeakable, put it onto the battlefield, then shuffle your library. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), false, true), new SiftThroughSandsCondition(), rule)); + this.getSpellAbility().addWatcher(new SiftThroughSandsWatcher()); + } + + public SiftThroughSands(final SiftThroughSands card) { + super(card); + } + + @Override + public SiftThroughSands copy() { + return new SiftThroughSands(this); + } +} + +class SiftThroughSandsCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + SiftThroughSandsWatcher watcher = (SiftThroughSandsWatcher) game.getState().getWatchers().get("SiftThroughSandsWatcher", source.getControllerId()); + if (watcher != null) { + return watcher.conditionMet(); + } + return false; + } +} + +class SiftThroughSandsWatcher extends Watcher { + + boolean castPeerThroughDepths = false; + boolean castReachThroughMists = false; + + public SiftThroughSandsWatcher() { + super("SiftThroughSandsWatcher", WatcherScope.PLAYER); + } + + public SiftThroughSandsWatcher(final SiftThroughSandsWatcher watcher) { + super(watcher); + this.castPeerThroughDepths = watcher.castPeerThroughDepths; + this.castReachThroughMists = watcher.castReachThroughMists; + } + + @Override + public SiftThroughSandsWatcher copy() { + return new SiftThroughSandsWatcher(this); + } + + @Override + public void watch(GameEvent event, Game game) { + if (condition == true) { //no need to check - condition has already occured + return; + } + if (event.getType() == EventType.SPELL_CAST + && controllerId == event.getPlayerId()) { + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell.getCard().getName().equals("Peer Through Depths")) { + castPeerThroughDepths = true; + } else if (spell.getCard().getName().equals("Reach Through Mists")) { + castReachThroughMists = true; + } + condition = castPeerThroughDepths && castReachThroughMists; + } + } + + @Override + public void reset() { + super.reset(); + this.castPeerThroughDepths = false; + this.castReachThroughMists = false; + } +} diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java index b411a75bee..730d983722 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java @@ -141,7 +141,7 @@ class SosukeSonOfSeshiroEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/TatsumasaTheDragonsFang.java b/Mage.Sets/src/mage/sets/championsofkamigawa/TatsumasaTheDragonsFang.java index 5dcf3b6c15..419f09538d 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/TatsumasaTheDragonsFang.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/TatsumasaTheDragonsFang.java @@ -70,7 +70,7 @@ public class TatsumasaTheDragonsFang extends CardImpl { // {6}, Exile Tatsumasa, the Dragon's Fang: Put a 5/5 blue Dragon Spirit creature token with flying onto the battlefield. Return Tatsumasa to the battlefield under its owner's control when that token dies. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TatsumaTheDragonsFangEffect(), new GenericManaCost(6)); - ability.addCost(new ExileSourceCost()); + ability.addCost(new ExileSourceCost(true)); this.addAbility(ability); // Equip {3} @@ -111,7 +111,7 @@ class TatsumaTheDragonsFangEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new TatsumaTheDragonsFangTriggeredAbility(fixedTarget); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; @@ -123,7 +123,7 @@ class TatsumaTheDragonsFangTriggeredAbility extends DelayedTriggeredAbility { protected FixedTarget fixedTarget; public TatsumaTheDragonsFangTriggeredAbility(FixedTarget fixedTarget) { - super(new ReturnToBattlefieldUnderYourControlSourceEffect(Zone.EXILED), Duration.OneUse); + super(new ReturnToBattlefieldUnderYourControlSourceEffect(), Duration.OneUse); this.fixedTarget = fixedTarget; } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/ThroughTheBreach.java b/Mage.Sets/src/mage/sets/championsofkamigawa/ThroughTheBreach.java index e018dc5d95..b634a884d2 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/ThroughTheBreach.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/ThroughTheBreach.java @@ -119,7 +119,7 @@ class ThroughTheBreachEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/coldsnap/AdarkarValkyrie.java b/Mage.Sets/src/mage/sets/coldsnap/AdarkarValkyrie.java index 086fdaf9e0..49699d1ad6 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/AdarkarValkyrie.java +++ b/Mage.Sets/src/mage/sets/coldsnap/AdarkarValkyrie.java @@ -115,7 +115,7 @@ class AdarkarValkyrieEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AdarkarValkyrieDelayedTriggeredAbility(new FixedTarget(this.getTargetPointer().getFirst(game, source))); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return false; } diff --git a/Mage.Sets/src/mage/sets/coldsnap/Commandeer.java b/Mage.Sets/src/mage/sets/coldsnap/Commandeer.java index a6e719e370..4d1b1c471e 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/Commandeer.java +++ b/Mage.Sets/src/mage/sets/coldsnap/Commandeer.java @@ -107,7 +107,7 @@ class CommandeerEffect extends OneShotEffect { Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source)); if (controller != null && spell != null) { spell.setControllerId(controller.getId()); - spell.chooseNewTargets(game, controller.getId(), false, false); + spell.chooseNewTargets(game, controller.getId(), false, false, null); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java b/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java index 35f9be1beb..620507e2b0 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java +++ b/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java @@ -142,16 +142,19 @@ class HaakonStromgaldScourgePlayEffect2 extends ContinuousRuleModifyingEffectImp public boolean apply(Game game, Ability source) { return true; } - + + @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.getType() == GameEvent.EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && card.getId().equals(source.getSourceId())) { - Zone zone = game.getState().getZone(card.getId()); - if (zone != null && (zone != Zone.GRAVEYARD)) { - return true; - } + Card card = game.getCard(event.getSourceId()); + if (card != null && card.getId().equals(source.getSourceId())) { + Zone zone = game.getState().getZone(card.getId()); + if (zone != null && (zone != Zone.GRAVEYARD)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/coldsnap/LightningStorm.java b/Mage.Sets/src/mage/sets/coldsnap/LightningStorm.java index 601693ea44..a7ad11f4e5 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/LightningStorm.java +++ b/Mage.Sets/src/mage/sets/coldsnap/LightningStorm.java @@ -142,7 +142,7 @@ class LightningStormAddCounterEffect extends OneShotEffect { Spell spell = game.getStack().getSpell(source.getSourceId()); if (spell != null) { spell.addCounters(CounterType.CHARGE.createInstance(2), game); - return spell.chooseNewTargets(game, source.getControllerId(), false, false); + return spell.chooseNewTargets(game, source.getControllerId(), false, false, null); } return false; } diff --git a/Mage.Sets/src/mage/sets/commander/BreathOfDarigaaz.java b/Mage.Sets/src/mage/sets/commander/BreathOfDarigaaz.java new file mode 100644 index 0000000000..ec5f86d074 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/BreathOfDarigaaz.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.commander; + +import java.util.UUID; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DamageEverythingEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.KickerAbility; +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.AbilityPredicate; + +/** + * + * @author FenrisulfrX + */ +public class BreathOfDarigaaz extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature without flying"); + + static { + filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); + } + + public BreathOfDarigaaz(UUID ownerId) { + super(ownerId, 112, "Breath of Darigaaz", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{R}"); + this.expansionSetCode = "CMD"; + + // Kicker {2} + this.addAbility(new KickerAbility("{2}")); + + // 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. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageEverythingEffect(4, filter), + new DamageEverythingEffect(1, filter), KickedCondition.getInstance(), + "{this} deals 1 damage to each creature without flying and each player. If {this} was kicked, it deals 4 damage to each creature without flying and each player instead.")); + } + + public BreathOfDarigaaz(final BreathOfDarigaaz card) { + super(card); + } + + @Override + public BreathOfDarigaaz copy() { + return new BreathOfDarigaaz(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander/KaaliaOfTheVast.java b/Mage.Sets/src/mage/sets/commander/KaaliaOfTheVast.java index 4602fabd45..1fda32b5b5 100644 --- a/Mage.Sets/src/mage/sets/commander/KaaliaOfTheVast.java +++ b/Mage.Sets/src/mage/sets/commander/KaaliaOfTheVast.java @@ -159,7 +159,7 @@ class KaaliaOfTheVastEffect extends OneShotEffect { player.putOntoBattlefieldWithInfo(card, game, Zone.HAND, source.getSourceId(), true); Permanent creature = game.getPermanent(cardId); if (creature != null) { - game.getCombat().declareAttacker(card.getId(), defenderId, game); + game.getCombat().addAttackerToCombat(card.getId(), defenderId, game); return true; } diff --git a/Mage.Sets/src/mage/sets/commander/ScatteringStroke.java b/Mage.Sets/src/mage/sets/commander/ScatteringStroke.java index 8fcc62768e..c49d63c7d9 100644 --- a/Mage.Sets/src/mage/sets/commander/ScatteringStroke.java +++ b/Mage.Sets/src/mage/sets/commander/ScatteringStroke.java @@ -103,7 +103,7 @@ class ScatteringStrokeEffect extends OneShotEffect { new AtTheBeginOMainPhaseDelayedTriggeredAbility(effect, true, TargetController.YOU, AtTheBeginOMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/commander/ScavengingOoze.java b/Mage.Sets/src/mage/sets/commander/ScavengingOoze.java index 1ef1fa2c41..5d523e57c9 100644 --- a/Mage.Sets/src/mage/sets/commander/ScavengingOoze.java +++ b/Mage.Sets/src/mage/sets/commander/ScavengingOoze.java @@ -97,7 +97,7 @@ class ScavengingOozeEffect extends OneShotEffect { Card card = game.getCard(getTargetPointer().getFirst(game, source)); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); if (card.getCardType().contains(CardType.CREATURE)) { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (sourcePermanent != null) { diff --git a/Mage.Sets/src/mage/sets/commander/Stranglehold.java b/Mage.Sets/src/mage/sets/commander/Stranglehold.java index 5745f1d25f..90c8b91ead 100644 --- a/Mage.Sets/src/mage/sets/commander/Stranglehold.java +++ b/Mage.Sets/src/mage/sets/commander/Stranglehold.java @@ -100,14 +100,15 @@ class OpponentsCantSearchLibarariesEffect extends ContinuousRuleModifyingEffectI return null; } - + @Override + public boolean checksEventType(GameEvent event, Game game) { + return EventType.SEARCH_LIBRARY.equals(event.getType()); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (EventType.SEARCH_LIBRARY.equals(event.getType())) { - Player controller = game.getPlayer(source.getControllerId()); - return controller != null && controller.hasOpponent(event.getPlayerId(), game); - } - return false; + Player controller = game.getPlayer(source.getControllerId()); + return controller != null && controller.hasOpponent(event.getPlayerId(), game); } } diff --git a/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java b/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java index c3d6352966..5c02f11e7c 100644 --- a/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java +++ b/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java @@ -107,11 +107,11 @@ class TheMimeoplasmEffect extends OneShotEffect { if (player.choose(Outcome.Copy, targetCopy, source.getSourceId(), game)) { Card cardToCopy = game.getCard(targetCopy.getFirstTarget()); if (cardToCopy != null) { - player.moveCardToExileWithInfo(cardToCopy, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + player.moveCardToExileWithInfo(cardToCopy, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); if (player.choose(Outcome.Copy, targetCounters, source.getSourceId(), game)) { Card cardForCounters = game.getCard(targetCounters.getFirstTarget()); if (cardForCounters != null) { - player.moveCardToExileWithInfo(cardForCounters, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + player.moveCardToExileWithInfo(cardForCounters, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); CopyEffect copyEffect = new CopyEffect(Duration.Custom, cardToCopy, source.getSourceId()); game.addEffect(copyEffect, source); permanent.addCounters(CounterType.P1P1.createInstance(cardForCounters.getPower().getValue()), game); @@ -125,4 +125,4 @@ class TheMimeoplasmEffect extends OneShotEffect { } return false; } -} +} diff --git a/Mage.Sets/src/mage/sets/commander/TrenchGorger.java b/Mage.Sets/src/mage/sets/commander/TrenchGorger.java index 63fed5176f..c5647b49f6 100644 --- a/Mage.Sets/src/mage/sets/commander/TrenchGorger.java +++ b/Mage.Sets/src/mage/sets/commander/TrenchGorger.java @@ -103,7 +103,7 @@ class TrenchGorgerEffect extends OneShotEffect { int count = 0; for (UUID cardId: target.getTargets()) { Card card = game.getCard(cardId); - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); count++; } controller.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/commander2013/CurseOfInertia.java b/Mage.Sets/src/mage/sets/commander2013/CurseOfInertia.java index da6f61eaf5..69d24545cf 100644 --- a/Mage.Sets/src/mage/sets/commander2013/CurseOfInertia.java +++ b/Mage.Sets/src/mage/sets/commander2013/CurseOfInertia.java @@ -89,27 +89,26 @@ class CurseOfInertiaTriggeredAbility extends TriggeredAbilityImpl { public CurseOfInertiaTriggeredAbility() { super(Zone.BATTLEFIELD, new CurseOfInertiaTapOrUntapTargetEffect(), false); } - - public CurseOfInertiaTriggeredAbility(Effect effect, boolean optional, String text) { - super(Zone.BATTLEFIELD, effect, optional); - } - + public CurseOfInertiaTriggeredAbility(final CurseOfInertiaTriggeredAbility ability) { super(ability); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType().equals(EventType.DECLARED_ATTACKERS); + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType().equals(EventType.DECLARED_ATTACKERS)) { - Permanent enchantment = game.getPermanent(this.getSourceId()); - if (enchantment != null - && enchantment.getAttachedTo() != null - && game.getCombat().getPlayerDefenders(game).contains(enchantment.getAttachedTo())) { - for (Effect effect: this.getEffects()) { - effect.setTargetPointer(new FixedTarget(game.getCombat().getAttackerId())); - } - return true; - } + Permanent enchantment = game.getPermanent(this.getSourceId()); + if (enchantment != null + && enchantment.getAttachedTo() != null + && game.getCombat().getPlayerDefenders(game).contains(enchantment.getAttachedTo())) { + TargetPermanent target = new TargetPermanent(); + target.setTargetController(game.getCombat().getAttackerId()); + addTarget(target); + return true; } return false; } @@ -138,24 +137,20 @@ class CurseOfInertiaTapOrUntapTargetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source)); + Player player = game.getPlayer(source.getTargets().get(0).getTargetController()); if (player != null) { - Target target = new TargetPermanent(); - if (target.canChoose(source.getSourceId(), player.getId(), game) - && player.choose(outcome, target, source.getSourceId(), game)) { - Permanent targetPermanent = game.getPermanent(target.getFirstTarget()); - if (targetPermanent != null) { - if (targetPermanent.isTapped()) { - if (player.chooseUse(Outcome.Untap, "Untap that permanent?", game)) { - targetPermanent.untap(game); - } - } else { - if (player.chooseUse(Outcome.Tap, "Tap that permanent?", game)) { - targetPermanent.tap(game); - } + Permanent targetPermanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (targetPermanent != null) { + if (targetPermanent.isTapped()) { + if (player.chooseUse(Outcome.Untap, "Untap that permanent?", game)) { + targetPermanent.untap(game); + } + } else { + if (player.chooseUse(Outcome.Tap, "Tap that permanent?", game)) { + targetPermanent.tap(game); } - return true; } + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/commander2013/Flickerform.java b/Mage.Sets/src/mage/sets/commander2013/Flickerform.java index 24fbf2b8c1..fa30c49048 100644 --- a/Mage.Sets/src/mage/sets/commander2013/Flickerform.java +++ b/Mage.Sets/src/mage/sets/commander2013/Flickerform.java @@ -136,7 +136,7 @@ class FlickerformEffect extends OneShotEffect { new FlickerformReturnEffect(enchantedCreature.getId(), exileZoneId)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/commander2013/MysticBarrier.java b/Mage.Sets/src/mage/sets/commander2013/MysticBarrier.java index 2ede8ab6a7..d09ebee60d 100644 --- a/Mage.Sets/src/mage/sets/commander2013/MysticBarrier.java +++ b/Mage.Sets/src/mage/sets/commander2013/MysticBarrier.java @@ -65,8 +65,6 @@ public class MysticBarrier extends CardImpl { super(ownerId, 18, "Mystic Barrier", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}"); this.expansionSetCode = "C13"; - this.color.setWhite(true); - // When Mystic Barrier enters the battlefield or at the beginning of your upkeep, choose left or right. this.addAbility(new MysticBarrierTriggeredAbility()); @@ -98,16 +96,19 @@ class MysticBarrierTriggeredAbility extends TriggeredAbilityImpl { public MysticBarrierTriggeredAbility copy() { return new MysticBarrierTriggeredAbility(this); } - + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType().equals(EventType.ENTERS_THE_BATTLEFIELD) || event.getType().equals(EventType.UPKEEP_STEP_PRE); + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType().equals(EventType.ENTERS_THE_BATTLEFIELD) && event.getTargetId().equals(this.getSourceId())) { - return true; + if (event.getType().equals(EventType.ENTERS_THE_BATTLEFIELD)) { + return event.getTargetId().equals(this.getSourceId()); + } else { + return event.getPlayerId().equals(this.getControllerId()); } - if (event.getType().equals(EventType.UPKEEP_STEP_PRE) && event.getPlayerId().equals(this.getControllerId())) { - return true; - } - return false; } @Override @@ -170,19 +171,19 @@ class MysticBarrierReplacementEffect extends ReplacementEffectImpl { super(effect); } - @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); - } - @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { return true; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER && game.getPlayers().size() > 2) { + if (game.getPlayers().size() > 2) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { if (controller.getInRange().contains(event.getPlayerId())) { diff --git a/Mage.Sets/src/mage/sets/commander2013/Reincarnation.java b/Mage.Sets/src/mage/sets/commander2013/Reincarnation.java index 3be9ee8d14..45dde8d09e 100644 --- a/Mage.Sets/src/mage/sets/commander2013/Reincarnation.java +++ b/Mage.Sets/src/mage/sets/commander2013/Reincarnation.java @@ -98,7 +98,7 @@ class ReincarnationEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new ReincarnationDelayedTriggeredAbility(targetPointer.getFirst(game, source)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/commander2013/RoonOfTheHiddenRealm.java b/Mage.Sets/src/mage/sets/commander2013/RoonOfTheHiddenRealm.java index eeb543c56c..ded29dbb6a 100644 --- a/Mage.Sets/src/mage/sets/commander2013/RoonOfTheHiddenRealm.java +++ b/Mage.Sets/src/mage/sets/commander2013/RoonOfTheHiddenRealm.java @@ -124,12 +124,12 @@ class RoonOfTheHiddenRealmEffect extends OneShotEffect { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (permanent != null) { UUID exileId = UUID.randomUUID(); - if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { if (card != null) { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(exileId, Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(card.getOwnerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/commander2014/AEtherSnap.java b/Mage.Sets/src/mage/sets/commander2014/AEtherSnap.java index c1f9d5c582..534dcf1c42 100644 --- a/Mage.Sets/src/mage/sets/commander2014/AEtherSnap.java +++ b/Mage.Sets/src/mage/sets/commander2014/AEtherSnap.java @@ -91,7 +91,7 @@ class AEtherSnapEffect extends OneShotEffect { if (controller != null) { for (Permanent permanent :game.getBattlefield().getActivePermanents(new FilterPermanent(), controller.getId(), source.getSourceId(), game)) { if (permanent instanceof PermanentToken) { - controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); } else if (!permanent.getCounters().isEmpty()){ Counters counters = permanent.getCounters().copy(); for (Counter counter: counters.values()) { diff --git a/Mage.Sets/src/mage/sets/commander2014/ContainmentPriest.java b/Mage.Sets/src/mage/sets/commander2014/ContainmentPriest.java index 4066ad9af4..2e9090fdae 100644 --- a/Mage.Sets/src/mage/sets/commander2014/ContainmentPriest.java +++ b/Mage.Sets/src/mage/sets/commander2014/ContainmentPriest.java @@ -119,7 +119,7 @@ class ContainmentPriestReplacementEffect extends ReplacementEffectImpl { if (controller != null) { Card card = game.getCard(event.getTargetId()); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, zEvent.getFromZone()); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, zEvent.getFromZone(), true); } return true; diff --git a/Mage.Sets/src/mage/sets/commander2014/DarettiScrapSavant.java b/Mage.Sets/src/mage/sets/commander2014/DarettiScrapSavant.java index 79fcd51022..b236165e2e 100644 --- a/Mage.Sets/src/mage/sets/commander2014/DarettiScrapSavant.java +++ b/Mage.Sets/src/mage/sets/commander2014/DarettiScrapSavant.java @@ -250,7 +250,7 @@ class DarettiScrapSavantEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(Zone.COMMAND, effect, TargetController.ANY); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/commander2014/FeldonOfTheThirdPath.java b/Mage.Sets/src/mage/sets/commander2014/FeldonOfTheThirdPath.java index 7bdf557c6a..0ab3b15dff 100644 --- a/Mage.Sets/src/mage/sets/commander2014/FeldonOfTheThirdPath.java +++ b/Mage.Sets/src/mage/sets/commander2014/FeldonOfTheThirdPath.java @@ -121,7 +121,7 @@ class FeldonOfTheThirdPathEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/commander2014/JazalGoldmane.java b/Mage.Sets/src/mage/sets/commander2014/JazalGoldmane.java index 3f80a37b97..25dcfc1211 100644 --- a/Mage.Sets/src/mage/sets/commander2014/JazalGoldmane.java +++ b/Mage.Sets/src/mage/sets/commander2014/JazalGoldmane.java @@ -55,7 +55,6 @@ public class JazalGoldmane extends CardImpl { this.subtype.add("Cat"); this.subtype.add("Warrior"); - this.color.setWhite(true); this.power = new MageInt(4); this.toughness = new MageInt(4); @@ -65,7 +64,7 @@ public class JazalGoldmane extends CardImpl { DynamicValue xValue = new AttackingCreatureCount("the number of attacking creatures"); this.addAbility(new SimpleActivatedAbility( Zone.BATTLEFIELD, - new BoostControlledEffect(xValue, xValue , Duration.WhileOnBattlefield, new FilterAttackingCreature("Attacking creatures"), false), + new BoostControlledEffect(xValue, xValue , Duration.EndOfTurn, new FilterAttackingCreature("Attacking creatures"), false), new ManaCostsImpl("{3}{W}{W}"))); } diff --git a/Mage.Sets/src/mage/sets/commander2014/ScrapMastery.java b/Mage.Sets/src/mage/sets/commander2014/ScrapMastery.java index 66a0ddbbe2..cd1d769732 100644 --- a/Mage.Sets/src/mage/sets/commander2014/ScrapMastery.java +++ b/Mage.Sets/src/mage/sets/commander2014/ScrapMastery.java @@ -100,7 +100,7 @@ class ScrapMasteryEffect extends OneShotEffect { Set cards = new HashSet<>(); for (Card card: player.getGraveyard().getCards(new FilterArtifactCard(), game)) { cards.add(card.getId()); - player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } exiledCards.put(player.getId(), cards); } diff --git a/Mage.Sets/src/mage/sets/commander2014/StitcherGeralf.java b/Mage.Sets/src/mage/sets/commander2014/StitcherGeralf.java index 8182ab71fd..ae29a3132c 100644 --- a/Mage.Sets/src/mage/sets/commander2014/StitcherGeralf.java +++ b/Mage.Sets/src/mage/sets/commander2014/StitcherGeralf.java @@ -122,7 +122,7 @@ class StitcherGeralfEffect extends OneShotEffect { Card card = game.getCard(cardId); if (card != null) { power += card.getPower().getValue(); - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } return new CreateTokenEffect(new StitcherGeralfZombieToken(power)).apply(game, source); diff --git a/Mage.Sets/src/mage/sets/commander2014/WakeTheDead.java b/Mage.Sets/src/mage/sets/commander2014/WakeTheDead.java index 46f3a3a6df..fc82a68cec 100644 --- a/Mage.Sets/src/mage/sets/commander2014/WakeTheDead.java +++ b/Mage.Sets/src/mage/sets/commander2014/WakeTheDead.java @@ -165,7 +165,7 @@ class WakeTheDeadReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEff DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } diff --git a/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java b/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java index e392be4957..9f602c8dd5 100644 --- a/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java +++ b/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java @@ -112,11 +112,11 @@ class WaveOfVitriolEffect extends OneShotEffect { if (player != null) { int count = 0; for(Permanent permanent: game.getBattlefield().getAllActivePermanents(filter, playerId, game)) { - if (permanent.getCardType().contains(CardType.LAND)) { + if (permanent.sacrifice(source.getSourceId(), game) && permanent.getCardType().contains(CardType.LAND)) { count++; } - permanent.sacrifice(source.getSourceId(), game); } + game.getState().handleSimultaneousEvent(game); if (count > 0 && player.chooseUse(Outcome.PutLandInPlay, "Search your library for up to " + count + " basic lands?", game)) { Target target = new TargetCardInLibrary(0,count, new FilterBasicLandCard()); player.chooseTarget(outcome, target, source, game); @@ -127,6 +127,7 @@ class WaveOfVitriolEffect extends OneShotEffect { } } player.shuffleLibrary(game); + game.getState().handleSimultaneousEvent(game); } } } diff --git a/Mage.Sets/src/mage/sets/conflux/BrackwaterElemental.java b/Mage.Sets/src/mage/sets/conflux/BrackwaterElemental.java index b27632f502..8ee1ac6523 100644 --- a/Mage.Sets/src/mage/sets/conflux/BrackwaterElemental.java +++ b/Mage.Sets/src/mage/sets/conflux/BrackwaterElemental.java @@ -101,7 +101,7 @@ class BrackwaterElementalSacrificeEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return false; diff --git a/Mage.Sets/src/mage/sets/conflux/PathToExile.java b/Mage.Sets/src/mage/sets/conflux/PathToExile.java index e88259797e..66e23cbdc7 100644 --- a/Mage.Sets/src/mage/sets/conflux/PathToExile.java +++ b/Mage.Sets/src/mage/sets/conflux/PathToExile.java @@ -93,7 +93,7 @@ class PathToExileEffect extends OneShotEffect { if (controller != null && permanent != null) { Player player = game.getPlayer(permanent.getControllerId()); // if the zone change to exile gets replaced does not prevent the target controller to be able to search - controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); if (player.chooseUse(Outcome.PutCardInPlay, "Search your library for a basic land card?", game)) { TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard()); if (player.searchLibrary(target, game)) { diff --git a/Mage.Sets/src/mage/sets/conflux/Progenitus.java b/Mage.Sets/src/mage/sets/conflux/Progenitus.java index 8649a5c896..0226a7e718 100644 --- a/Mage.Sets/src/mage/sets/conflux/Progenitus.java +++ b/Mage.Sets/src/mage/sets/conflux/Progenitus.java @@ -52,11 +52,6 @@ public class Progenitus extends CardImpl { this.subtype.add("Hydra"); this.subtype.add("Avatar"); - this.color.setRed(true); - this.color.setBlue(true); - this.color.setGreen(true); - this.color.setBlack(true); - this.color.setWhite(true); this.power = new MageInt(10); this.toughness = new MageInt(10); diff --git a/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java b/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java index 381ff57eae..9b7f9cdaf3 100644 --- a/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java +++ b/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java @@ -96,7 +96,7 @@ class QuenchableFireEffect extends OneShotEffect { QuenchableFireDelayedTriggeredAbility delayedAbility = new QuenchableFireDelayedTriggeredAbility(); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getTargets().addAll(source.getTargets()); game.addDelayedTriggeredAbility(delayedAbility); diff --git a/Mage.Sets/src/mage/sets/conspiracy/FlowstoneBlade.java b/Mage.Sets/src/mage/sets/conspiracy/FlowstoneBlade.java new file mode 100644 index 0000000000..1b2ac9b84e --- /dev/null +++ b/Mage.Sets/src/mage/sets/conspiracy/FlowstoneBlade.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.conspiracy; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.AttachEffect; +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.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class FlowstoneBlade extends CardImpl { + + public FlowstoneBlade(UUID ownerId) { + super(ownerId, 143, "Flowstone Blade", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{R}"); + this.expansionSetCode = "CNS"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Copy)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // {R}: Enchanted creature gets +1/-1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, -1, Duration.EndOfTurn), new ManaCostsImpl("R"))); + } + + public FlowstoneBlade(final FlowstoneBlade card) { + super(card); + } + + @Override + public FlowstoneBlade copy() { + return new FlowstoneBlade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/conspiracy/KorChant.java b/Mage.Sets/src/mage/sets/conspiracy/KorChant.java new file mode 100644 index 0000000000..2e0ab4df9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/conspiracy/KorChant.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.conspiracy; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class KorChant extends mage.sets.exodus.KorChant { + + public KorChant(UUID ownerId) { + super(ownerId); + this.cardNumber = 73; + this.expansionSetCode = "CNS"; + } + + public KorChant(final KorChant card) { + super(card); + } + + @Override + public KorChant copy() { + return new KorChant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/conspiracy/WoodSage.java b/Mage.Sets/src/mage/sets/conspiracy/WoodSage.java new file mode 100644 index 0000000000..6e24af1fea --- /dev/null +++ b/Mage.Sets/src/mage/sets/conspiracy/WoodSage.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.conspiracy; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class WoodSage extends mage.sets.tempest.WoodSage { + + public WoodSage(UUID ownerId) { + super(ownerId); + this.cardNumber = 195; + this.expansionSetCode = "CNS"; + this.rarity = Rarity.UNCOMMON; + } + + public WoodSage(final WoodSage card) { + super(card); + } + + @Override + public WoodSage copy() { + return new WoodSage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/darkascension/BeguilerOfWills.java b/Mage.Sets/src/mage/sets/darkascension/BeguilerOfWills.java index 07bed451c6..93f3b07383 100644 --- a/Mage.Sets/src/mage/sets/darkascension/BeguilerOfWills.java +++ b/Mage.Sets/src/mage/sets/darkascension/BeguilerOfWills.java @@ -56,7 +56,6 @@ public class BeguilerOfWills extends CardImpl { this.subtype.add("Human"); this.subtype.add("Wizard"); - this.color.setBlue(true); this.power = new MageInt(1); this.toughness = new MageInt(1); diff --git a/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java b/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java index 730543b46f..e7578f9772 100644 --- a/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java +++ b/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java @@ -70,7 +70,6 @@ public class DungeonGeists extends CardImpl { this.expansionSetCode = "DKA"; this.subtype.add("Spirit"); - this.color.setBlue(true); this.power = new MageInt(3); this.toughness = new MageInt(3); @@ -112,40 +111,52 @@ class DungeonGeistsEffect extends ContinuousRuleModifyingEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - return false; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.UNTAP || event.getType() == GameEvent.EventType.ZONE_CHANGE || event.getType() == GameEvent.EventType.LOST_CONTROL; } + @Override public boolean applies(GameEvent event, Ability source, Game game) { // Source must be on the battlefield (it's neccessary to check here because if as response to the enter // the battlefield triggered ability the source dies (or will be exiled), then the ZONE_CHANGE or LOST_CONTROL // event will happen before this effect is applied ever) - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + Permanent sourcePermanent = (Permanent) source.getSourceObjectIfItStillExists(game); if (sourcePermanent == null || !sourcePermanent.getControllerId().equals(source.getControllerId())) { - this.used = true; + discard(); return false; } - if (event.getType() == GameEvent.EventType.LOST_CONTROL) { - if (event.getTargetId().equals(source.getSourceId())) { - discard(); - return false; - } + switch(event.getType()) { + case ZONE_CHANGE: + // end effect if source does a zone move + if (event.getTargetId().equals(source.getSourceId())) { + ZoneChangeEvent zEvent = (ZoneChangeEvent)event; + if (zEvent.getFromZone() == Zone.BATTLEFIELD) { + discard(); + return false; + } + } + break; + case UNTAP: + // prevent to untap the target creature + if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getTargetId().equals(targetPointer.getFirst(game, source))) { + Permanent targetCreature = game.getPermanent(targetPointer.getFirst(game, source)); + if (targetCreature != null) { + return targetCreature.getControllerId().equals(game.getActivePlayerId()); + } else { + discard(); + return false; + } + } + break; + case LOST_CONTROL: + // end effect if source control is changed + if (event.getTargetId().equals(source.getSourceId())) { + discard(); + return false; + } + break; } - if (event.getType() == GameEvent.EventType.ZONE_CHANGE && event.getTargetId().equals(source.getSourceId())) { - ZoneChangeEvent zEvent = (ZoneChangeEvent)event; - if (zEvent.getFromZone() == Zone.BATTLEFIELD) { - discard(); - return false; - } - } - - if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getType() == GameEvent.EventType.UNTAP) { - if (event.getTargetId().equals(targetPointer.getFirst(game, source))) { - return true; - } - } - return false; } } diff --git a/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java b/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java index 028bf8c5a6..b0fed7e560 100644 --- a/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java +++ b/Mage.Sets/src/mage/sets/darkascension/HuntmasterOfTheFells.java @@ -115,7 +115,25 @@ class HuntmasterOfTheFellsAbility extends TriggeredAbilityImpl { public HuntmasterOfTheFellsAbility copy() { return new HuntmasterOfTheFellsAbility(this); } + + + @Override + public boolean isInUseableZone(Game game, MageObject source, GameEvent event) { + if (event.getType() == GameEvent.EventType.TRANSFORMED) { + Permanent currentSourceObject = (Permanent) getSourceObjectIfItStillExists(game); + if (currentSourceObject != null && !currentSourceObject.isNightCard()) { + return true; + } + } + return super.isInUseableZone(game, source, event); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TRANSFORMED || event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.TRANSFORMED && event.getTargetId().equals(this.getSourceId())) { @@ -157,9 +175,24 @@ class RavagerOfTheFellsAbility extends TriggeredAbilityImpl { return new RavagerOfTheFellsAbility(this); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TRANSFORMED; + } + + @Override + public boolean isInUseableZone(Game game, MageObject source, GameEvent event) { + Permanent currentSourceObject = (Permanent) getSourceObjectIfItStillExists(game); + if (currentSourceObject != null && currentSourceObject.isNightCard()) { + return true; + } + return super.isInUseableZone(game, source, event); + } + + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.TRANSFORMED && event.getTargetId().equals(sourceId)) { + if (event.getTargetId().equals(sourceId)) { Permanent permanent = game.getPermanent(sourceId); if (permanent != null && permanent.isTransformed()) { return true; diff --git a/Mage.Sets/src/mage/sets/darkascension/LoyalCathar.java b/Mage.Sets/src/mage/sets/darkascension/LoyalCathar.java index c47d7ce736..3b647b6fbc 100644 --- a/Mage.Sets/src/mage/sets/darkascension/LoyalCathar.java +++ b/Mage.Sets/src/mage/sets/darkascension/LoyalCathar.java @@ -28,9 +28,6 @@ package mage.sets.darkascension; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesTriggeredAbility; @@ -40,7 +37,9 @@ import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.VigilanceAbility; 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.Permanent; @@ -100,7 +99,7 @@ class LoyalCatharEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnLoyalCatharEffect(source.getSourceId())); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/darkascension/Seance.java b/Mage.Sets/src/mage/sets/darkascension/Seance.java index fc9387fb38..76f0064d3b 100644 --- a/Mage.Sets/src/mage/sets/darkascension/Seance.java +++ b/Mage.Sets/src/mage/sets/darkascension/Seance.java @@ -98,7 +98,7 @@ class SeanceEffect extends OneShotEffect { Card card = game.getCard(source.getFirstTarget()); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && card != null) { - if (controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD)) { + if (controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true)) { EmptyToken token = new EmptyToken(); CardUtil.copyTo(token).from(card); @@ -112,7 +112,7 @@ class SeanceEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } diff --git a/Mage.Sets/src/mage/sets/darkascension/SuddenDisappearance.java b/Mage.Sets/src/mage/sets/darkascension/SuddenDisappearance.java index 15b62eaac1..e16eee286c 100644 --- a/Mage.Sets/src/mage/sets/darkascension/SuddenDisappearance.java +++ b/Mage.Sets/src/mage/sets/darkascension/SuddenDisappearance.java @@ -92,12 +92,12 @@ class SuddenDisappearanceEffect extends OneShotEffect { List perms = game.getBattlefield().getAllActivePermanents(filter, source.getFirstTarget(), game); if (perms.size() > 0) { for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getFirstTarget(), game)) { - controller.moveCardToExileWithInfo(permanent, source.getSourceId(), "Sudden Disappearance", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, source.getSourceId(), "Sudden Disappearance", source.getSourceId(), game, Zone.BATTLEFIELD, true); } AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } diff --git a/Mage.Sets/src/mage/sets/dissension/BondOfAgony.java b/Mage.Sets/src/mage/sets/dissension/BondOfAgony.java index 552101ffd8..c648ee6a11 100644 --- a/Mage.Sets/src/mage/sets/dissension/BondOfAgony.java +++ b/Mage.Sets/src/mage/sets/dissension/BondOfAgony.java @@ -46,8 +46,6 @@ public class BondOfAgony extends CardImpl { super(ownerId, 38, "Bond of Agony", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{X}{B}"); this.expansionSetCode = "DIS"; - this.color.setBlack(true); - DynamicValue xValue = new ManacostVariableValue(); // As an additional cost to cast Bond of Agony, pay X life. diff --git a/Mage.Sets/src/mage/sets/dissension/HideSeek.java b/Mage.Sets/src/mage/sets/dissension/HideSeek.java index f19474e5ca..6d407fea20 100644 --- a/Mage.Sets/src/mage/sets/dissension/HideSeek.java +++ b/Mage.Sets/src/mage/sets/dissension/HideSeek.java @@ -122,7 +122,7 @@ class SeekEffect extends OneShotEffect { UUID targetId = target.getFirstTarget(); Card card = opponent.getLibrary().remove(targetId, game); if (card != null) { - player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); int cmc = card.getManaCost().convertedManaCost(); if (cmc > 0) { player.gainLife(cmc, game); diff --git a/Mage.Sets/src/mage/sets/dissension/Overrule.java b/Mage.Sets/src/mage/sets/dissension/Overrule.java new file mode 100644 index 0000000000..eca7ae0b9a --- /dev/null +++ b/Mage.Sets/src/mage/sets/dissension/Overrule.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dissension; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class Overrule extends mage.sets.venservskoth.Overrule { + + public Overrule(UUID ownerId) { + super(ownerId); + this.cardNumber = 120; + this.expansionSetCode = "DIS"; + } + + public Overrule(final Overrule card) { + super(card); + } + + @Override + public Overrule copy() { + return new Overrule(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dissension/PaladinOfPrahv.java b/Mage.Sets/src/mage/sets/dissension/PaladinOfPrahv.java new file mode 100644 index 0000000000..eeb45a44fa --- /dev/null +++ b/Mage.Sets/src/mage/sets/dissension/PaladinOfPrahv.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dissension; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class PaladinOfPrahv extends mage.sets.knightsvsdragons.PaladinOfPrahv { + + public PaladinOfPrahv(UUID ownerId) { + super(ownerId); + this.cardNumber = 14; + this.expansionSetCode = "DIS"; + } + + public PaladinOfPrahv(final PaladinOfPrahv card) { + super(card); + } + + @Override + public PaladinOfPrahv copy() { + return new PaladinOfPrahv(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java b/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java index 635baf4fb8..b4a6247fbe 100644 --- a/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java +++ b/Mage.Sets/src/mage/sets/dissension/RakdosGuildmage.java @@ -112,7 +112,7 @@ class RakdosGuildmageEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/dissension/RiseFall.java b/Mage.Sets/src/mage/sets/dissension/RiseFall.java index f226477df9..e362408806 100644 --- a/Mage.Sets/src/mage/sets/dissension/RiseFall.java +++ b/Mage.Sets/src/mage/sets/dissension/RiseFall.java @@ -57,24 +57,16 @@ public class RiseFall extends SplitCard { super(ownerId, 156, "Rise", "Fall", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{U}{B}","{B}{R}", false ); this.expansionSetCode = "DIS"; - this.color.setBlue(true); - this.color.setBlack(true); - this.color.setRed(true); - // Rise // Return target creature card from a graveyard and target creature on the battlefield to their owners' hands. getLeftHalfCard().getSpellAbility().addEffect(new RiseEffect()); getLeftHalfCard().getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard"))); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); - getLeftHalfCard().getColor().setBlue(true); - getLeftHalfCard().getColor().setBlack(true); // Fall // Target player reveals two cards at random from his or her hand, then discards each nonland card revealed this way. getRightHalfCard().getSpellAbility().addEffect(new FallEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer()); - getLeftHalfCard().getColor().setBlack(true); - getLeftHalfCard().getColor().setRed(true); } public RiseFall(final RiseFall card) { @@ -156,7 +148,7 @@ class FallEffect extends OneShotEffect { } targetPlayer.revealCards(sourceObject.getLogName(), cards, game); for (Card cardToDiscard: cards.getCards(game)) { - if (!card.getCardType().contains(CardType.LAND)) { + if (!cardToDiscard.getCardType().contains(CardType.LAND)) { targetPlayer.discard(cardToDiscard, source, game); } } diff --git a/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java b/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java index 74e6f039d1..05e45c02b2 100644 --- a/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java +++ b/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java @@ -109,17 +109,20 @@ class FaithsFettersEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo().equals(event.getSourceId())) { - Ability ability = game.getAbility(event.getTargetId(), event.getSourceId()); - if (ability != null) { - if (ability.getAbilityType() != AbilityType.MANA) { - return true; - } + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null && enchantment.getAttachedTo().equals(event.getSourceId())) { + Ability ability = game.getAbility(event.getTargetId(), event.getSourceId()); + if (ability != null) { + if (ability.getAbilityType() != AbilityType.MANA) { + return true; } } } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/AEtherling.java b/Mage.Sets/src/mage/sets/dragonsmaze/AEtherling.java index 542e122c00..9fa3b9f5a3 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/AEtherling.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/AEtherling.java @@ -107,7 +107,7 @@ class AEherlingRemovingEffect extends OneShotEffect { new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/LegionsInitiative.java b/Mage.Sets/src/mage/sets/dragonsmaze/LegionsInitiative.java index f7727cb7e4..b1152ff508 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/LegionsInitiative.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/LegionsInitiative.java @@ -133,7 +133,7 @@ class LegionsInitiativeExileEffect extends OneShotEffect { AtTheBeginOfCombatDelayedTriggeredAbility delayedAbility = new AtTheBeginOfCombatDelayedTriggeredAbility(new LegionsInitiativeReturnFromExileEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java b/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java index bbe41eb33c..3708609e3e 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java @@ -101,7 +101,7 @@ class PlasmCaptureCounterEffect extends OneShotEffect { new AtTheBeginOMainPhaseDelayedTriggeredAbility(new PlasmCaptureManaEffect(mana), false, TargetController.YOU, PhaseSelection.NEXT_PRECOMBAT_MAIN); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/PossibilityStorm.java b/Mage.Sets/src/mage/sets/dragonsmaze/PossibilityStorm.java index c587eab6fb..7e1becddfb 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/PossibilityStorm.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/PossibilityStorm.java @@ -137,14 +137,14 @@ class PossibilityStormEffect extends OneShotEffect { if (sourceObject != null && spell != null) { Player spellController = game.getPlayer(spell.getControllerId()); if (spellController != null && - spellController.moveCardToExileWithInfo(spell, source.getSourceId(), sourceObject.getName(), source.getSourceId(), game, Zone.STACK)) { + spellController.moveCardToExileWithInfo(spell, source.getSourceId(), sourceObject.getName(), source.getSourceId(), game, Zone.STACK, true)) { if (spellController.getLibrary().size() > 0) { Library library = spellController.getLibrary(); Card card; do { card = library.removeFromTop(game); if (card != null) { - spellController.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getName(), source.getSourceId(), game, Zone.LIBRARY); + spellController.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getName(), source.getSourceId(), game, Zone.LIBRARY, true); } } while (library.size() > 0 && card != null && !sharesType(card, spell.getCardType())); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java b/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java index a290fd8f7e..2395bbb2f6 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java @@ -116,7 +116,7 @@ class ReapIntellectEffect extends OneShotEffect { for (UUID cardId : target.getTargets()) { Card chosenCard = game.getCard(cardId); if (chosenCard != null) { - controller.moveCardToExileWithInfo(chosenCard, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(chosenCard, null, "", source.getSourceId(), game, Zone.HAND, true); exiledCards.add(chosenCard); } } @@ -144,7 +144,7 @@ class ReapIntellectEffect extends OneShotEffect { for(UUID cardId: targetCardsGraveyard.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } @@ -154,7 +154,7 @@ class ReapIntellectEffect extends OneShotEffect { for(UUID cardId: targetCardsHand.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } } @@ -164,7 +164,7 @@ class ReapIntellectEffect extends OneShotEffect { for(UUID cardId: targetCardsLibrary.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java index 3440aa88f7..ea0a865f0c 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/AinokArtillerist.java @@ -50,7 +50,7 @@ public class AinokArtillerist extends CardImpl { super(ownerId, 171, "Ainok Artillerist", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.expansionSetCode = "DTK"; this.subtype.add("Hound"); - this.subtype.add("Arch"); + this.subtype.add("Archer"); this.power = new MageInt(4); this.toughness = new MageInt(1); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ArashinSovereign.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ArashinSovereign.java index bf6814cea5..a34bc3eac6 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/ArashinSovereign.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ArashinSovereign.java @@ -59,7 +59,7 @@ public class ArashinSovereign extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Arashin Sovereign dies, you may put it on the top or bottom of its owner's library. - this.addAbility(new DiesTriggeredAbility(new ArashinSovereignEffect())); + this.addAbility(new DiesTriggeredAbility(new ArashinSovereignEffect(), true)); } public ArashinSovereign(final ArashinSovereign card) { diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/CloneLegion.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/CloneLegion.java index 1ab5b09da0..6225c113df 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/CloneLegion.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/CloneLegion.java @@ -86,13 +86,14 @@ class CloneLegionEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source)); - if (targetPlayer != null) { + if (controller != null && targetPlayer != null) { for (Permanent permanent : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), targetPlayer.getId(), game)) { if (permanent != null) { EmptyToken token = new EmptyToken(); CardUtil.copyTo(token).from(permanent); - token.putOntoBattlefield(1, game, source.getSourceId(), targetPlayer.getId()); + token.putOntoBattlefield(1, game, source.getSourceId(), controller.getId()); } } return true; diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java index 244a7c9a2f..a12f5d6312 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/CommuneWithLava.java @@ -97,7 +97,7 @@ class CommuneWithLavaEffect extends OneShotEffect { List cards = controller.getLibrary().getTopCards(game, amount); for (Card card : cards) { if (card != null) { - controller.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceCard.getName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceCard.getName(), source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new CommuneWithLavaMayPlayEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); @@ -112,6 +112,8 @@ class CommuneWithLavaEffect extends OneShotEffect { class CommuneWithLavaMayPlayEffect extends AsThoughEffectImpl { + int castOnTurn = 0; + public CommuneWithLavaMayPlayEffect() { super(AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, Duration.Custom, Outcome.Benefit); this.staticText = "Until the end of your next turn, you may play that card."; @@ -119,6 +121,7 @@ class CommuneWithLavaMayPlayEffect extends AsThoughEffectImpl { public CommuneWithLavaMayPlayEffect(final CommuneWithLavaMayPlayEffect effect) { super(effect); + castOnTurn = effect.castOnTurn; } @Override @@ -126,9 +129,15 @@ class CommuneWithLavaMayPlayEffect extends AsThoughEffectImpl { return new CommuneWithLavaMayPlayEffect(this); } + @Override + public void init(Ability source, Game game) { + super.init(source, game); + castOnTurn = game.getTurnNum(); + } + @Override public boolean isInactive(Ability source, Game game) { - if (game.getPhase().getStep().getType() == PhaseStep.END_TURN) { + if (castOnTurn != game.getTurnNum() && game.getPhase().getStep().getType() == PhaseStep.END_TURN) { if (game.getActivePlayerId().equals(source.getControllerId())) { return true; } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DraconicRoar.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DraconicRoar.java index d37e9c3da5..4a17a76b32 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/DraconicRoar.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DraconicRoar.java @@ -29,7 +29,6 @@ package mage.sets.dragonsoftarkir; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.costs.Cost; import mage.abilities.costs.common.RevealTargetFromHandCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonlordsPrerogative.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonlordsPrerogative.java index 1713823c73..ffb2080d0b 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonlordsPrerogative.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DragonlordsPrerogative.java @@ -31,6 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; +import mage.abilities.costs.Cost; import mage.abilities.costs.common.RevealTargetFromHandCost; import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; import mage.abilities.effects.ContinuousRuleModifyingEffect; @@ -114,9 +115,11 @@ class DragonlordsPrerogativeCondition implements Condition { boolean applies = false; Spell spell = game.getStack().getSpell(source.getSourceId()); if (spell != null) { - RevealTargetFromHandCost cost = (RevealTargetFromHandCost) spell.getSpellAbility().getCosts().get(0); - if (cost != null) { - applies = !cost.getTargets().isEmpty(); + for(Cost cost: spell.getSpellAbility().getCosts()) { + if (cost instanceof RevealTargetFromHandCost) { + applies = !((RevealTargetFromHandCost)cost).getTargets().isEmpty(); + break; + } } } if (!applies) { diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasCommand.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasCommand.java index 48d1b628a6..70f308bde3 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasCommand.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DromokasCommand.java @@ -93,7 +93,7 @@ public class DromokasCommand extends CardImpl { mode = new Mode(); effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance()); effect.setText("Put a +1/+1 counter on target creature"); - effect.applyEffectsAfter(); // so the counter is taken into account if the target is also used in mode 4 + effect.setApplyEffectsAfter(); // so the counter is taken into account if the target is also used in mode 4 mode.getEffects().add(effect); mode.getTargets().add(new TargetCreaturePermanent(filterCreature)); this.getSpellAbility().getModes().addMode(mode); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/GleamOfAuthority.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/GleamOfAuthority.java index 3c876f9243..31c9d04fd1 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/GleamOfAuthority.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/GleamOfAuthority.java @@ -108,8 +108,9 @@ class CountersOnControlledCount implements DynamicValue { @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { int count = 0; + Permanent enchantment = game.getPermanent(sourceAbility.getSourceId()); for (Permanent permanent : game.getState().getBattlefield().getAllActivePermanents(filter, sourceAbility.getControllerId(), game)) { - if (!permanent.getId().equals(sourceAbility.getSourceId())) { + if (!permanent.getId().equals(enchantment.getAttachedTo())) { count += permanent.getCounters().getCount(CounterType.P1P1); } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java index b79f31b402..2516d6a480 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/HedonistsTrove.java @@ -101,12 +101,12 @@ class HedonistsTroveExileEffect extends OneShotEffect { Player targetPlayer = game.getPlayer(this.getTargetPointer().getFirst(game, source)); MageObject sourceObject = source.getSourceObject(game); if (controller != null && targetPlayer != null && sourceObject != null) { - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); ArrayList graveyard = new ArrayList<>(targetPlayer.getGraveyard()); for (UUID cardId : graveyard) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.GRAVEYARD, true); } } return true; @@ -141,7 +141,7 @@ class HedonistsTrovePlayLandEffect extends AsThoughEffectImpl { Card card = game.getCard(objectId); MageObject sourceObject = source.getSourceObject(game); if (card != null && card.getCardType().contains(CardType.LAND) && sourceObject != null) { - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (exileId != null) { ExileZone exileZone = game.getState().getExile().getExileZone(exileId); return exileZone != null && exileZone.contains(objectId); @@ -182,7 +182,7 @@ class HedonistsTroveCastNonlandCardsEffect extends AsThoughEffectImpl { Card card = game.getCard(objectId); MageObject sourceObject = source.getSourceObject(game); if (card != null && !card.getCardType().contains(CardType.LAND) && sourceObject != null) { - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (exileId != null) { ExileZone exileZone = game.getState().getExile().getExileZone(exileId); if (exileZone != null && exileZone.contains(objectId)) { diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java index 3da5dcad70..050adf87c4 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java @@ -48,7 +48,6 @@ import mage.constants.TargetController; import mage.constants.WatcherScope; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; -import static mage.filter.predicate.permanent.ControllerControlsIslandPredicate.filter; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.events.GameEvent; @@ -123,7 +122,14 @@ class IcefallRegentEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return false; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.LOST_CONTROL || + event.getType() == GameEvent.EventType.ZONE_CHANGE || + event.getType() == GameEvent.EventType.UNTAP; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { // Source must be on the battlefield (it's neccessary to check here because if as response to the enter @@ -150,7 +156,8 @@ class IcefallRegentEffect extends ContinuousRuleModifyingEffectImpl { if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getType() == GameEvent.EventType.UNTAP) { if (event.getTargetId().equals(targetPointer.getFirst(game, source))) { - return true; + Permanent targetCreature = game.getPermanent(targetPointer.getFirst(game, source)); + return targetCreature != null && game.getActivePlayerId().equals(targetCreature.getControllerId()); } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java index 14cfeeed6d..05f6cb5bfb 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/IreShaman.java @@ -111,7 +111,7 @@ class IreShamanExileEffect extends OneShotEffect { Card card = library.removeFromTop(game); if (card != null) { String exileName = new StringBuilder(sourcePermanent.getName()).append(" ").toString(); - controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new IreShamanCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/LivingLore.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/LivingLore.java index 28972e6eaa..9180814c0d 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/LivingLore.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/LivingLore.java @@ -110,10 +110,10 @@ class LivingLoreExileEffect extends OneShotEffect { if (sourceObject != null && controller != null){ TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(new FilterInstantOrSorceryCard("instant or sorcery card from your graveyard")); if (controller.chooseTarget(outcome, target, source, game)) { - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); Card card = controller.getGraveyard().get(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.GRAVEYARD, true); } } return true; @@ -147,7 +147,7 @@ class LivingLoreSetPowerToughnessSourceEffect extends ContinuousEffectImpl { discard(); return false; } - UUID exileId = CardUtil.getObjectExileZoneId(game, mageObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (exileId != null) { ExileZone exileZone = game.getExile().getExileZone(exileId); if (exileZone == null) { @@ -192,13 +192,15 @@ class LivingLoreSacrificeEffect extends OneShotEffect { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null && mageObject != null && new MageObjectReference(permanent, game).refersTo(mageObject, game)) { if (permanent.sacrifice(source.getSourceId(), game)) { - UUID exileId = CardUtil.getObjectExileZoneId(game, mageObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (exileId != null) { ExileZone exileZone = game.getExile().getExileZone(exileId); Card exiledCard = null; - for (Card card :exileZone.getCards(game)) { - exiledCard = card; - break; + if (exileZone != null) { + for (Card card :exileZone.getCards(game)) { + exiledCard = card; + break; + } } if (exiledCard != null) { if (exiledCard.getSpellAbility().canChooseTarget(game)) { diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java index 02ec94552f..76ba422027 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/LurkingArynx.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; /** * @@ -62,6 +63,7 @@ public class LurkingArynx extends CardImpl { new ManaCostsImpl("{2}{G}"), FormidableCondition.getInstance()); ability.setAbilityWord(AbilityWord.FORMIDABLE); + ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/MirrorMockery.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/MirrorMockery.java index 424eb9d464..84029470b9 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/MirrorMockery.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/MirrorMockery.java @@ -31,14 +31,11 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.AttacksAttachedTriggeredAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.EnchantAbility; -import mage.abilities.keyword.HasteAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.AttachmentType; import mage.constants.CardType; @@ -108,22 +105,19 @@ class MirrorMockeryEffect extends OneShotEffect { } Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); if (enchanted != null) { - Card card = game.getCard(enchanted.getId()); - if (card != null) { - EmptyToken token = new EmptyToken(); - CardUtil.copyTo(token).from(card); + EmptyToken token = new EmptyToken(); + CardUtil.copyTo(token).from(enchanted); - token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); + token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); - DelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); - game.addDelayedTriggeredAbility(delayedAbility); - return true; - } + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken())); + 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.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java index 820a7af85f..f2d058e48f 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SandsteppeScavenger.java @@ -45,7 +45,7 @@ public class SandsteppeScavenger extends CardImpl { super(ownerId, 200, "Sandsteppe Scavenger", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.expansionSetCode = "DTK"; this.subtype.add("Hound"); - this.subtype.add("Scount"); + this.subtype.add("Scout"); this.power = new MageInt(2); this.toughness = new MageInt(2); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SelfInflictedWound.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SelfInflictedWound.java index 8854fb26c7..49fb75f952 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/SelfInflictedWound.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SelfInflictedWound.java @@ -100,14 +100,14 @@ class SelfInflictedWoundEffect extends OneShotEffect { filter.add(new CardTypePredicate(CardType.CREATURE)); filter.add(new ControllerPredicate(TargetController.YOU)); filter.add(Predicates.or(new ColorPredicate(ObjectColor.GREEN), new ColorPredicate(ObjectColor.WHITE))); - TargetControlledPermanent target = new TargetControlledPermanent(1, 1, filter, false); + TargetControlledPermanent target = new TargetControlledPermanent(1, 1, filter, true); - if (target.canChoose(targetOpponent.getId(), game)) { + if (target.canChoose(source.getSourceId(), targetOpponent.getId(), game)) { targetOpponent.chooseTarget(Outcome.Sacrifice, target, source, game); Permanent permanent = game.getPermanent(target.getFirstTarget()); if (permanent != null) { if (permanent.sacrifice(source.getSourceId(), game)) { - controller.loseLife(2, game); + targetOpponent.loseLife(2, game); } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java index 0aeef1a3d8..c7b04ec900 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/ServantOfTheScale.java @@ -41,6 +41,7 @@ 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; @@ -100,9 +101,11 @@ class ServantOfTheScaleEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = source.getSourceObject(game); - if (sourceObject != null && controller != null && sourceObject instanceof Permanent) { - int amount = ((Permanent)sourceObject).getCounters().getCount(CounterType.P1P1); + Permanent sourcePermanent = (Permanent) game.getLastKnownInformation(source.getSourceId(), Zone.BATTLEFIELD); + if (sourcePermanent != null && controller != null && + (sourcePermanent.getZoneChangeCounter(game) == source.getSourceObjectZoneChangeCounter() // Token + || sourcePermanent.getZoneChangeCounter(game) + 1 == source.getSourceObjectZoneChangeCounter())) { // PermanentCard + int amount = sourcePermanent.getCounters().getCount(CounterType.P1P1); if (amount > 0) { Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(amount)); effect.setTargetPointer(targetPointer); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/SwiftWarkite.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/SwiftWarkite.java index c462496c45..26ba71120c 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/SwiftWarkite.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/SwiftWarkite.java @@ -133,7 +133,7 @@ class SwiftWarkiteEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect2); delayedAbility.setControllerId(source.getControllerId()); delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } @@ -154,7 +154,7 @@ class SwiftWarkiteEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect2); delayedAbility.setControllerId(source.getControllerId()); delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/TapestryOfTheAges.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/TapestryOfTheAges.java index cd737b9530..55f60ed46c 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/TapestryOfTheAges.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/TapestryOfTheAges.java @@ -88,12 +88,12 @@ class PlayerCastNonCreatureSpellCondition implements Condition { @Override public boolean apply(Game game, Ability source) { PlayerCastNonCreatureSpellWatcher watcher = (PlayerCastNonCreatureSpellWatcher) game.getState().getWatchers().get("PlayerCastNonCreatureSpell"); - return watcher != null && !watcher.playerDidCastNonCreatureSpellThisTurn(source.getControllerId()); + return watcher != null && watcher.playerDidCastNonCreatureSpellThisTurn(source.getControllerId()); } @Override public String toString() { - return "you've cast a noncreature spell this turn"; + return "you've cast a noncreature spell this turn"; } } diff --git a/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java b/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java index 0d12e44bad..9b02a60013 100644 --- a/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java +++ b/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java @@ -153,10 +153,15 @@ class BlindingBeamEffect2 extends ContinuousRuleModifyingEffectImpl { return false; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(EventType.UNTAP); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { // prevent untap event of creatures of target player - if (game.getTurn().getStepType().equals(PhaseStep.UNTAP) && event.getType().equals(EventType.UNTAP)) { + if (game.getTurn().getStepType().equals(PhaseStep.UNTAP)) { Permanent permanent = game.getPermanent(event.getTargetId()); if (permanent != null && permanent.getControllerId().equals(targetPlayerId) && filter.match(permanent, game)) { return true; diff --git a/Mage.Sets/src/mage/sets/elspethvstezzeret/Pentavus.java b/Mage.Sets/src/mage/sets/elspethvstezzeret/Pentavus.java index 21f732d6c1..23a5a881a6 100644 --- a/Mage.Sets/src/mage/sets/elspethvstezzeret/Pentavus.java +++ b/Mage.Sets/src/mage/sets/elspethvstezzeret/Pentavus.java @@ -72,9 +72,12 @@ public class Pentavus extends CardImpl { this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(5)), "with five +1/+1 counters on it")); + // {1}, Remove a +1/+1 counter from Pentavus: Put a 1/1 colorless Pentavite artifact creature token with flying onto the battlefield. Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new PentaviteToken(), 1), new GenericManaCost(1)); firstAbility.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1))); this.addAbility(firstAbility); + + // {1}, Sacrifice a Pentavite: Put a +1/+1 counter on Pentavus. Ability secondAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), new GenericManaCost(1)); secondAbility.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); this.addAbility(secondAbility); diff --git a/Mage.Sets/src/mage/sets/eventide/CloutOfTheDominus.java b/Mage.Sets/src/mage/sets/eventide/CloutOfTheDominus.java index c43483d9f1..b80d0b2cb9 100644 --- a/Mage.Sets/src/mage/sets/eventide/CloutOfTheDominus.java +++ b/Mage.Sets/src/mage/sets/eventide/CloutOfTheDominus.java @@ -36,7 +36,6 @@ import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.ShroudAbility; @@ -70,12 +69,17 @@ public class CloutOfTheDominus extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // As long as enchanted creature is blue, it gets +1/+1 and has shroud. - SimpleStaticAbility blueAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.BLUE), "As long as enchanted creature is black, it gets +1/+1")); - blueAbility.addEffect(new ConditionalContinuousEffect(new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.BLUE), "and has deathtouch")); + SimpleStaticAbility blueAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.BLUE), "As long as enchanted creature is blue, it gets +1/+1")); + blueAbility.addEffect(new ConditionalContinuousEffect(new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA), + new EnchantedCreatureColorCondition(ObjectColor.BLUE), "and has shroud")); this.addAbility(blueAbility); + // As long as enchanted creature is red, it gets +1/+1 and has haste. - SimpleStaticAbility redAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.RED), "As long as enchanted creature is red, it gets +1/+1")); - redAbility.addEffect(new ConditionalContinuousEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA), new EnchantedCreatureColorCondition(ObjectColor.RED), "and has haste")); + SimpleStaticAbility redAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new BoostEnchantedEffect(1, 1), new EnchantedCreatureColorCondition(ObjectColor.RED), "As long as enchanted creature is red, it gets +1/+1")); + redAbility.addEffect(new ConditionalContinuousEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA), + new EnchantedCreatureColorCondition(ObjectColor.RED), "and has haste")); this.addAbility(redAbility); } diff --git a/Mage.Sets/src/mage/sets/eventide/Evershrike.java b/Mage.Sets/src/mage/sets/eventide/Evershrike.java index bca7f7c77d..d93cc1ab19 100644 --- a/Mage.Sets/src/mage/sets/eventide/Evershrike.java +++ b/Mage.Sets/src/mage/sets/eventide/Evershrike.java @@ -110,7 +110,7 @@ class EvershrikeEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { boolean exiled = true; Card evershrikeCard = game.getCard(source.getSourceId()); - Player you = game.getPlayer(source.getControllerId()); + Player controller = game.getPlayer(source.getControllerId()); int xAmount = source.getManaCostsToPay().getX() + 1; if (evershrikeCard != null) { if (evershrikeCard.moveToZone(Zone.BATTLEFIELD, source.getSourceId(), game, false)) { @@ -123,21 +123,19 @@ class EvershrikeEffect extends OneShotEffect { filterAuraCard.add(new SubtypePredicate("Aura")); filterAuraCard.add(new AuraCardCanAttachToPermanentId(evershrikePermanent.getId())); filterAuraCard.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, xAmount)); - int count = you.getHand().count(filterAuraCard, game); - while (you.isInGame() && count > 0 && you.chooseUse(Outcome.Benefit, "Do you wish to put an Aura card from your hand onto Evershrike", game)) { + int count = controller.getHand().count(filterAuraCard, game); + while (controller.isInGame() && count > 0 && controller.chooseUse(Outcome.Benefit, "Do you wish to put an Aura card from your hand onto Evershrike", game)) { TargetCard targetAura = new TargetCard(Zone.PICK, filterAuraCard); - if (you.choose(Outcome.Benefit, you.getHand(), targetAura, game)) { + if (controller.choose(Outcome.Benefit, controller.getHand(), targetAura, game)) { Card aura = game.getCard(targetAura.getFirstTarget()); if (aura != null) { game.getState().setValue("attachTo:" + aura.getId(), evershrikePermanent); - aura.putOntoBattlefield(game, Zone.HAND, source.getSourceId(), you.getId()); + aura.putOntoBattlefield(game, Zone.HAND, source.getSourceId(), controller.getId()); evershrikePermanent.addAttachment(aura.getId(), game); exiled = false; - count = you.getHand().count(filterAuraCard, game); + count = controller.getHand().count(filterAuraCard, game); } } - - } if (exiled) { return evershrikePermanent.moveToExile(source.getSourceId(), "Evershrike Exile", source.getSourceId(), game); @@ -152,4 +150,4 @@ class EvershrikeEffect extends OneShotEffect { public EvershrikeEffect copy() { return new EvershrikeEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/eventide/Flickerwisp.java b/Mage.Sets/src/mage/sets/eventide/Flickerwisp.java index 024ac1d53d..0c49b7ba81 100644 --- a/Mage.Sets/src/mage/sets/eventide/Flickerwisp.java +++ b/Mage.Sets/src/mage/sets/eventide/Flickerwisp.java @@ -102,12 +102,12 @@ class FlickerwispEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (controller != null && permanent != null && sourcePermanent != null) { - if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, false)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java b/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java index 1770702c8a..d31d2fee11 100644 --- a/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java +++ b/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java @@ -116,7 +116,7 @@ class NightmareIncursionEffect extends OneShotEffect { for (UUID targetCard : targetId) { Card card = targetPlayer.getLibrary().remove(targetCard, game); if (card != null) { - controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); result = true; } } diff --git a/Mage.Sets/src/mage/sets/eventide/WardOfBones.java b/Mage.Sets/src/mage/sets/eventide/WardOfBones.java index 7315222ae2..6b73ae1dbf 100644 --- a/Mage.Sets/src/mage/sets/eventide/WardOfBones.java +++ b/Mage.Sets/src/mage/sets/eventide/WardOfBones.java @@ -102,12 +102,16 @@ class WardOfBonesEffect extends ContinuousRuleModifyingEffectImpl { } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.PLAY_LAND || event.getType() == GameEvent.EventType.CAST_SPELL; + + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.PLAY_LAND - || event.getType() == GameEvent.EventType.CAST_SPELL - && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { + if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { final Card card = game.getCard(event.getSourceId()); final Player opponent = game.getPlayer(event.getPlayerId()); if (card == null || opponent == null) { @@ -136,4 +140,4 @@ class WardOfBonesEffect extends ContinuousRuleModifyingEffectImpl { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/exodus/CrashingBoars.java b/Mage.Sets/src/mage/sets/exodus/CrashingBoars.java new file mode 100644 index 0000000000..9def81a189 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/CrashingBoars.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author emerald000 + */ +public class CrashingBoars extends mage.sets.tempestremastered.CrashingBoars { + + public CrashingBoars(UUID ownerId) { + super(ownerId); + this.cardNumber = 108; + this.expansionSetCode = "EXO"; + } + + public CrashingBoars(final CrashingBoars card) { + super(card); + } + + @Override + public CrashingBoars copy() { + return new CrashingBoars(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/DauthiJackal.java b/Mage.Sets/src/mage/sets/exodus/DauthiJackal.java new file mode 100644 index 0000000000..de2c55fd16 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/DauthiJackal.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class DauthiJackal extends mage.sets.tempestremastered.DauthiJackal { + + public DauthiJackal(UUID ownerId) { + super(ownerId); + this.cardNumber = 58; + this.expansionSetCode = "EXO"; + } + + public DauthiJackal(final DauthiJackal card) { + super(card); + } + + @Override + public DauthiJackal copy() { + return new DauthiJackal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/DauthiWarlord.java b/Mage.Sets/src/mage/sets/exodus/DauthiWarlord.java new file mode 100644 index 0000000000..e255fdd55a --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/DauthiWarlord.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class DauthiWarlord extends mage.sets.tempestremastered.DauthiWarlord { + + public DauthiWarlord(UUID ownerId) { + super(ownerId); + this.cardNumber = 59; + this.expansionSetCode = "EXO"; + } + + public DauthiWarlord(final DauthiWarlord card) { + super(card); + } + + @Override + public DauthiWarlord copy() { + return new DauthiWarlord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/DeathsDuet.java b/Mage.Sets/src/mage/sets/exodus/DeathsDuet.java new file mode 100644 index 0000000000..a99c35963a --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/DeathsDuet.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class DeathsDuet extends mage.sets.tempestremastered.DeathsDuet { + + public DeathsDuet(UUID ownerId) { + super(ownerId); + this.cardNumber = 60; + this.expansionSetCode = "EXO"; + } + + public DeathsDuet(final DeathsDuet card) { + super(card); + } + + @Override + public DeathsDuet copy() { + return new DeathsDuet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java b/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java new file mode 100644 index 0000000000..e0931a73e7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java @@ -0,0 +1,133 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.ReturnToHandTargetCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.keyword.FlyingAbility; +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.FilterControlledLandPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author fireshoes + */ +public class ExaltedDragon extends CardImpl { + + public ExaltedDragon(UUID ownerId) { + super(ownerId, 6, "Exalted Dragon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); + this.expansionSetCode = "EXO"; + this.subtype.add("Dragon"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Exalted Dragon can't attack unless you sacrifice a land. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ExaltedDragonReplacementEffect())); + } + + public ExaltedDragon(final ExaltedDragon card) { + super(card); + } + + @Override + public ExaltedDragon copy() { + return new ExaltedDragon(this); + } +} + +class ExaltedDragonReplacementEffect extends ReplacementEffectImpl { + + private static final FilterControlledPermanent filter = new FilterControlledLandPermanent(); + + ExaltedDragonReplacementEffect ( ) { + super(Duration.WhileOnBattlefield, Outcome.Neutral); + staticText = "{this} can't attack unless you sacrifice a land (This cost is paid as attackers are declared.)"; + } + + ExaltedDragonReplacementEffect ( ExaltedDragonReplacementEffect effect ) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if ( player != null ) { + SacrificeTargetCost attackCost = new SacrificeTargetCost(new TargetControlledPermanent(filter)); + if ( attackCost.canPay(source, source.getSourceId(), event.getPlayerId(), game) && + player.chooseUse(Outcome.Neutral, "Sacrifice a land?", game) ) + { + if (attackCost.pay(source, game, source.getSourceId(), event.getPlayerId(), true) ) { + return false; + } + } + return true; + } + return false; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; + } + + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getSourceId().equals(source.getSourceId()); + } + + @Override + public ExaltedDragonReplacementEffect copy() { + return new ExaltedDragonReplacementEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/exodus/Fugue.java b/Mage.Sets/src/mage/sets/exodus/Fugue.java new file mode 100644 index 0000000000..f5b7b580aa --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/Fugue.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class Fugue extends mage.sets.seventhedition.Fugue { + + public Fugue(UUID ownerId) { + super(ownerId); + this.cardNumber = 62; + this.expansionSetCode = "EXO"; + } + + public Fugue(final Fugue card) { + super(card); + } + + @Override + public Fugue copy() { + return new Fugue(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/FurnaceBrood.java b/Mage.Sets/src/mage/sets/exodus/FurnaceBrood.java new file mode 100644 index 0000000000..0109d003cd --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/FurnaceBrood.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author LevelX2 + */ +public class FurnaceBrood extends mage.sets.tempestremastered.FurnaceBrood { + + public FurnaceBrood(UUID ownerId) { + super(ownerId); + this.cardNumber = 84; + this.expansionSetCode = "EXO"; + } + + public FurnaceBrood(final FurnaceBrood card) { + super(card); + } + + @Override + public FurnaceBrood copy() { + return new FurnaceBrood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/KillerWhale.java b/Mage.Sets/src/mage/sets/exodus/KillerWhale.java new file mode 100644 index 0000000000..d680c1c17a --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/KillerWhale.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class KillerWhale extends mage.sets.tempestremastered.KillerWhale { + + public KillerWhale(UUID ownerId) { + super(ownerId); + this.cardNumber = 37; + this.expansionSetCode = "EXO"; + } + + public KillerWhale(final KillerWhale card) { + super(card); + } + + @Override + public KillerWhale copy() { + return new KillerWhale(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/KorChant.java b/Mage.Sets/src/mage/sets/exodus/KorChant.java new file mode 100644 index 0000000000..33d0c0d38c --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/KorChant.java @@ -0,0 +1,130 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.abilities.Ability; +import mage.abilities.effects.RedirectionEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.TargetSource; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class KorChant extends CardImpl { + + public KorChant(UUID ownerId) { + super(ownerId, 9, "Kor Chant", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{2}{W}"); + this.expansionSetCode = "EXO"; + + // All damage that would be dealt this turn to target creature you control by a source of your choice is dealt to another target creature instead. + this.getSpellAbility().addEffect(new KorChantEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + this.getSpellAbility().addTarget(new KorChantSecondTarget()); + } + + public KorChant(final KorChant card) { + super(card); + } + + @Override + public KorChant copy() { + return new KorChant(this); + } +} + +class KorChantSecondTarget extends TargetCreaturePermanent { + + KorChantSecondTarget() { + super(); + this.targetName = "another creature"; + } + + KorChantSecondTarget(final KorChantSecondTarget target) { + super(target); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (source.getTargets().get(0).getTargets().contains(id)) { + return false; + } + return super.canTarget(controllerId, id, source, game); + } + + @Override + public KorChantSecondTarget copy() { + return new KorChantSecondTarget(this); + } +} + +class KorChantEffect extends RedirectionEffect { + + protected TargetSource target = new TargetSource(); + + KorChantEffect() { + super(Duration.EndOfTurn); + staticText = "All damage that would be dealt this turn to target creature you control by a source of your choice is dealt to another target creature instead"; + } + + KorChantEffect(final KorChantEffect effect) { + super(effect); + this.target = effect.target; + } + + @Override + public KorChantEffect copy() { + return new KorChantEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + this.target.choose(Outcome.PreventDamage, source.getControllerId(), source.getSourceId(), game); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getType() == GameEvent.EventType.DAMAGE_CREATURE + && event.getTargetId().equals(this.getTargetPointer().getFirst(game, source)) + && event.getSourceId().equals(this.target.getFirstTarget())) { + this.redirectTarget = source.getTargets().get(1); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/MageIlVec.java b/Mage.Sets/src/mage/sets/exodus/MageIlVec.java new file mode 100644 index 0000000000..742bb2dcca --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/MageIlVec.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.exodus; + +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.common.TapSourceCost; +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; + +/** + * + * @author fireshoes + */ +public class MageIlVec extends CardImpl { + + public MageIlVec(UUID ownerId) { + super(ownerId, 86, "Mage il-Vec", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "EXO"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {tap}, Discard a card at random: Mage il-Vec deals 1 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); + ability.addCost(new DiscardCardCost(true)); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public MageIlVec(final MageIlVec card) { + super(card); + } + + @Override + public MageIlVec copy() { + return new MageIlVec(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/Necrologia.java b/Mage.Sets/src/mage/sets/exodus/Necrologia.java new file mode 100644 index 0000000000..e3a10a38c8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/Necrologia.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.exodus; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class Necrologia extends mage.sets.tempestremastered.Necrologia { + + public Necrologia(UUID ownerId) { + super(ownerId); + this.cardNumber = 68; + this.expansionSetCode = "EXO"; + this.rarity = Rarity.UNCOMMON; + } + + public Necrologia(final Necrologia card) { + super(card); + } + + @Override + public Necrologia copy() { + return new Necrologia(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/OgreShaman.java b/Mage.Sets/src/mage/sets/exodus/OgreShaman.java new file mode 100644 index 0000000000..076d37e3ce --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/OgreShaman.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.exodus; + +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.GenericManaCost; +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; + +/** + * + * @author fireshoes + */ +public class OgreShaman extends CardImpl { + + public OgreShaman(UUID ownerId) { + super(ownerId, 91, "Ogre Shaman", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "EXO"; + this.subtype.add("Ogre"); + this.subtype.add("Shaman"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {2}, Discard a card at random: Ogre Shaman deals 2 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new GenericManaCost(2)); + ability.addCost(new DiscardCardCost(true)); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public OgreShaman(final OgreShaman card) { + super(card); + } + + @Override + public OgreShaman copy() { + return new OgreShaman(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/Pandemonium.java b/Mage.Sets/src/mage/sets/exodus/Pandemonium.java new file mode 100644 index 0000000000..199f1c97fc --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/Pandemonium.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.exodus; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class Pandemonium extends mage.sets.timeshifted.Pandemonium { + + public Pandemonium(UUID ownerId) { + super(ownerId); + this.cardNumber = 93; + this.expansionSetCode = "EXO"; + this.rarity = Rarity.RARE; + } + + public Pandemonium(final Pandemonium card) { + super(card); + } + + @Override + public Pandemonium copy() { + return new Pandemonium(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/PegasusStampede.java b/Mage.Sets/src/mage/sets/exodus/PegasusStampede.java new file mode 100644 index 0000000000..908aee2eb2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/PegasusStampede.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.exodus; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.BuybackAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledLandPermanent; +import mage.game.permanent.token.Token; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author fireshoes + */ +public class PegasusStampede extends CardImpl { + + public PegasusStampede(UUID ownerId) { + super(ownerId, 14, "Pegasus Stampede", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{W}"); + this.expansionSetCode = "EXO"; + + // Buyback-Sacrifice a land. + this.addAbility(new BuybackAbility(new SacrificeTargetCost(new TargetControlledPermanent(1,1, new FilterControlledLandPermanent(), true)))); + + // Put a 1/1 white Pegasus creature token with flying onto the battlefield. + this.getSpellAbility().addEffect(new CreateTokenEffect(new PegasusToken())); + } + + public PegasusStampede(final PegasusStampede card) { + super(card); + } + + @Override + public PegasusStampede copy() { + return new PegasusStampede(this); + } +} + +class PegasusToken extends Token { + + PegasusToken() { + super("Pegasus", "1/1 white Pegasus creature token with flying"); + cardType.add(CardType.CREATURE); + color.setWhite(true); + subtype.add("Pegasus"); + power = new MageInt(1); + toughness = new MageInt(1); + addAbility(FlyingAbility.getInstance()); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/exodus/Skyshaper.java b/Mage.Sets/src/mage/sets/exodus/Skyshaper.java new file mode 100644 index 0000000000..6448c4f298 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/Skyshaper.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.exodus; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Skyshaper extends mage.sets.tempestremastered.Skyshaper { + + public Skyshaper(UUID ownerId) { + super(ownerId); + this.cardNumber = 137; + this.expansionSetCode = "EXO"; + this.rarity = Rarity.UNCOMMON; + } + + public Skyshaper(final Skyshaper card) { + super(card); + } + + @Override + public Skyshaper copy() { + return new Skyshaper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/Spellshock.java b/Mage.Sets/src/mage/sets/exodus/Spellshock.java new file mode 100644 index 0000000000..ac4fce3f79 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/Spellshock.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class Spellshock extends mage.sets.tempestremastered.Spellshock { + + public Spellshock(UUID ownerId) { + super(ownerId); + this.cardNumber = 104; + this.expansionSetCode = "EXO"; + } + + public Spellshock(final Spellshock card) { + super(card); + } + + @Override + public Spellshock copy() { + return new Spellshock(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/SpikeHatcher.java b/Mage.Sets/src/mage/sets/exodus/SpikeHatcher.java new file mode 100644 index 0000000000..59878d9a47 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/SpikeHatcher.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class SpikeHatcher extends mage.sets.tempestremastered.SpikeHatcher { + + public SpikeHatcher(UUID ownerId) { + super(ownerId); + this.cardNumber = 126; + this.expansionSetCode = "EXO"; + } + + public SpikeHatcher(final SpikeHatcher card) { + super(card); + } + + @Override + public SpikeHatcher copy() { + return new SpikeHatcher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/ThalakosDrifters.java b/Mage.Sets/src/mage/sets/exodus/ThalakosDrifters.java new file mode 100644 index 0000000000..7af7154f67 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/ThalakosDrifters.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.exodus; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ThalakosDrifters extends mage.sets.tempestremastered.ThalakosDrifters { + + public ThalakosDrifters(UUID ownerId) { + super(ownerId); + this.cardNumber = 47; + this.expansionSetCode = "EXO"; + this.rarity = Rarity.RARE; + } + + public ThalakosDrifters(final ThalakosDrifters card) { + super(card); + } + + @Override + public ThalakosDrifters copy() { + return new ThalakosDrifters(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/ThalakosScout.java b/Mage.Sets/src/mage/sets/exodus/ThalakosScout.java new file mode 100644 index 0000000000..00dde053ca --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/ThalakosScout.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class ThalakosScout extends mage.sets.tempestremastered.ThalakosScout { + + public ThalakosScout(UUID ownerId) { + super(ownerId); + this.cardNumber = 48; + this.expansionSetCode = "EXO"; + } + + public ThalakosScout(final ThalakosScout card) { + super(card); + } + + @Override + public ThalakosScout copy() { + return new ThalakosScout(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/ThopterSquadron.java b/Mage.Sets/src/mage/sets/exodus/ThopterSquadron.java new file mode 100644 index 0000000000..ed3e9cac70 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/ThopterSquadron.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.exodus; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ThopterSquadron extends mage.sets.vintagemasters.ThopterSquadron { + + public ThopterSquadron(UUID ownerId) { + super(ownerId); + this.cardNumber = 140; + this.expansionSetCode = "EXO"; + this.rarity = Rarity.RARE; + } + + public ThopterSquadron(final ThopterSquadron card) { + super(card); + } + + @Override + public ThopterSquadron copy() { + return new ThopterSquadron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/VampireHounds.java b/Mage.Sets/src/mage/sets/exodus/VampireHounds.java new file mode 100644 index 0000000000..6df8d67031 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/VampireHounds.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.exodus; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardTargetCost; +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.common.FilterCreatureCard; +import mage.target.common.TargetCardInHand; + +/** + * + * @author fireshoes + */ +public class VampireHounds extends CardImpl { + + public VampireHounds(UUID ownerId) { + super(ownerId, 77, "Vampire Hounds", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "EXO"; + this.subtype.add("Vampire"); + this.subtype.add("Hound"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Discard a creature card: Vampire Hounds gets +2/+2 until end of turn. + this.addAbility(new SimpleActivatedAbility( + Zone.BATTLEFIELD, + new BoostSourceEffect(2, 2, Duration.EndOfTurn), + new DiscardTargetCost(new TargetCardInHand(new FilterCreatureCard())))); + } + + public VampireHounds(final VampireHounds card) { + super(card); + } + + @Override + public VampireHounds copy() { + return new VampireHounds(this); + } +} diff --git a/Mage.Sets/src/mage/sets/exodus/WaywardSoul.java b/Mage.Sets/src/mage/sets/exodus/WaywardSoul.java new file mode 100644 index 0000000000..16a1f42569 --- /dev/null +++ b/Mage.Sets/src/mage/sets/exodus/WaywardSoul.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class WaywardSoul extends mage.sets.tempestremastered.WaywardSoul { + + public WaywardSoul(UUID ownerId) { + super(ownerId); + this.cardNumber = 51; + this.expansionSetCode = "EXO"; + } + + public WaywardSoul(final WaywardSoul card) { + super(card); + } + + @Override + public WaywardSoul copy() { + return new WaywardSoul(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/FrontierSiege.java b/Mage.Sets/src/mage/sets/fatereforged/FrontierSiege.java index 5a51ca2367..af1e120216 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/FrontierSiege.java +++ b/Mage.Sets/src/mage/sets/fatereforged/FrontierSiege.java @@ -157,8 +157,7 @@ class FrontierSiegeFightEffect extends OneShotEffect { && target != null && triggeredCreature.getCardType().contains(CardType.CREATURE) && target.getCardType().contains(CardType.CREATURE)) { - triggeredCreature.damage(target.getPower().getValue(), target.getId(), game, false, true); - target.damage(triggeredCreature.getPower().getValue(), triggeredCreature.getId(), game, false, true); + triggeredCreature.fight(target, source, game); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/fatereforged/GhastlyConscription.java b/Mage.Sets/src/mage/sets/fatereforged/GhastlyConscription.java index 52cf1244f1..1dbab9b2dc 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/GhastlyConscription.java +++ b/Mage.Sets/src/mage/sets/fatereforged/GhastlyConscription.java @@ -98,7 +98,7 @@ class GhastlyConscriptionEffect extends OneShotEffect { ArrayList cardsToManifest = new ArrayList<>(); for(Card card: targetPlayer.getGraveyard().getCards(new FilterCreatureCard(), game)) { cardsToManifest.add(card); - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } Collections.shuffle(cardsToManifest); game.informPlayers(controller.getName() + " shuffles the face-down pile"); diff --git a/Mage.Sets/src/mage/sets/fatereforged/HumbleDefector.java b/Mage.Sets/src/mage/sets/fatereforged/HumbleDefector.java index cbf8545c59..d0837e25da 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/HumbleDefector.java +++ b/Mage.Sets/src/mage/sets/fatereforged/HumbleDefector.java @@ -98,11 +98,11 @@ class HumbleDefectorEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent humbleDefector = game.getPermanent(source.getSourceId()); + Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { controller.drawCards(2, game); } + Permanent humbleDefector = (Permanent) source.getSourceObjectIfItStillExists(game); Player targetOpponent = game.getPlayer(getTargetPointer().getFirst(game, source)); if (targetOpponent != null && humbleDefector != null) { ContinuousEffect effect = new HumbleDefectorControlSourceEffect(); diff --git a/Mage.Sets/src/mage/sets/fatereforged/JeskaiInfiltrator.java b/Mage.Sets/src/mage/sets/fatereforged/JeskaiInfiltrator.java index 579f5f4985..c29ed4bc44 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/JeskaiInfiltrator.java +++ b/Mage.Sets/src/mage/sets/fatereforged/JeskaiInfiltrator.java @@ -113,12 +113,12 @@ class JeskaiInfiltratorEffect extends OneShotEffect { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); Card sourceCard = game.getCard(source.getSourceId()); if (sourcePermanent != null && sourceCard != null) { - player.moveCardToExileWithInfo(sourcePermanent, sourcePermanent.getId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD); + player.moveCardToExileWithInfo(sourcePermanent, sourcePermanent.getId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); cardsToManifest.add(sourceCard); } if (sourcePermanent!= null && player.getLibrary().size() > 0) { Card cardFromLibrary = player.getLibrary().removeFromTop(game); - player.moveCardToExileWithInfo(cardFromLibrary, sourcePermanent.getId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(cardFromLibrary, sourcePermanent.getId(), sourcePermanent.getName(), source.getSourceId(), game, Zone.LIBRARY, true); cardsToManifest.add(cardFromLibrary); } Collections.shuffle(cardsToManifest); diff --git a/Mage.Sets/src/mage/sets/fatereforged/MarduWoeReaper.java b/Mage.Sets/src/mage/sets/fatereforged/MarduWoeReaper.java index dffa07c159..15a433d0ea 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/MarduWoeReaper.java +++ b/Mage.Sets/src/mage/sets/fatereforged/MarduWoeReaper.java @@ -133,7 +133,7 @@ class MarduWoeReaperEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); Card card = game.getCard(this.getTargetPointer().getFirst(game, source)); if (player != null && card != null) { - if (player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD)) { + if (player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true)) { player.gainLife(1, game); } return true; diff --git a/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java b/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java index 0e116cd538..418d99d1e1 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java +++ b/Mage.Sets/src/mage/sets/fatereforged/OutpostSiege.java @@ -120,7 +120,7 @@ class OutpostSiegeExileEffect extends OneShotEffect { if (controller != null) { Card card = controller.getLibrary().getFromTop(game); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); if (game.getState().getZone(card.getId()) == Zone.EXILED) { ContinuousEffect effect = new CastFromNonHandZoneTargetEffect(Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(card.getId())); diff --git a/Mage.Sets/src/mage/sets/fatereforged/RallyTheAncestors.java b/Mage.Sets/src/mage/sets/fatereforged/RallyTheAncestors.java index 485566f562..bd820c79eb 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/RallyTheAncestors.java +++ b/Mage.Sets/src/mage/sets/fatereforged/RallyTheAncestors.java @@ -107,7 +107,7 @@ class RallyTheAncestorsEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/fatereforged/ShiftingLoyalties.java b/Mage.Sets/src/mage/sets/fatereforged/ShiftingLoyalties.java index 591c89c465..30049ba806 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/ShiftingLoyalties.java +++ b/Mage.Sets/src/mage/sets/fatereforged/ShiftingLoyalties.java @@ -1,120 +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.fatereforged; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.effects.common.continuous.ExchangeControlTargetEffect; -import mage.cards.CardImpl; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Rarity; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.TargetPermanent; -import mage.util.CardUtil; - -/** - * - * @author LevelX2 - */ -public class ShiftingLoyalties extends CardImpl { - - public ShiftingLoyalties(UUID ownerId) { - super(ownerId, 51, "Shifting Loyalties", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{5}{U}"); - this.expansionSetCode = "FRF"; - - // Exchange control of two target permanents that share a card type. (Artifact, creature, enchantment, land, and planeswalker are card types.) - this.getSpellAbility().addEffect(new ExchangeControlTargetEffect(Duration.EndOfGame, "Exchange control of two target permanents that share a card type. (Artifact, creature, enchantment, land, and planeswalker are card types.)")); - this.getSpellAbility().addTarget(new TargetpermanentsThatShareCardType()); - - } - - public ShiftingLoyalties(final ShiftingLoyalties card) { - super(card); - } - - @Override - public ShiftingLoyalties copy() { - return new ShiftingLoyalties(this); - } -} - -class TargetpermanentsThatShareCardType extends TargetPermanent { - - public TargetpermanentsThatShareCardType() { - super(2, 2, new FilterPermanent(), false); - targetName = "permanents that share a card type"; - } - - public TargetpermanentsThatShareCardType(final TargetpermanentsThatShareCardType target) { - super(target); - } - - @Override - public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { - if (super.canTarget(controllerId, id, source, game)) { - if (!getTargets().isEmpty()) { - Permanent targetOne = game.getPermanent(getTargets().get(0)); - Permanent targetTwo = game.getPermanent(id); - if (targetOne == null || targetTwo == null) { - return false; - } - return CardUtil.shareTypes(targetOne, targetTwo); - } - return true; - } - return false; - } - - @Override - public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { - Set cardTypes = new HashSet<>(); - MageObject targetSource = game.getObject(sourceId); - for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, sourceId, game)) { - if (permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) { - for (CardType cardType :permanent.getCardType()) { - if (cardTypes.contains(cardType)) { - return true; - } - } - cardTypes.addAll(permanent.getCardType()); - } - } - return false; - } - - @Override - public TargetpermanentsThatShareCardType copy() { - return new TargetpermanentsThatShareCardType(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.fatereforged; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.common.continuous.ExchangeControlTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; +import mage.util.CardUtil; + +/** + * + * @author LevelX2 + */ +public class ShiftingLoyalties extends CardImpl { + + public ShiftingLoyalties(UUID ownerId) { + super(ownerId, 51, "Shifting Loyalties", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{5}{U}"); + this.expansionSetCode = "FRF"; + + // Exchange control of two target permanents that share a card type. (Artifact, creature, enchantment, land, and planeswalker are card types.) + this.getSpellAbility().addEffect(new ExchangeControlTargetEffect(Duration.EndOfGame, "Exchange control of two target permanents that share a card type. (Artifact, creature, enchantment, land, and planeswalker are card types.)")); + this.getSpellAbility().addTarget(new TargetPermanentsThatShareCardType()); + + } + + public ShiftingLoyalties(final ShiftingLoyalties card) { + super(card); + } + + @Override + public ShiftingLoyalties copy() { + return new ShiftingLoyalties(this); + } +} + +class TargetPermanentsThatShareCardType extends TargetPermanent { + + public TargetPermanentsThatShareCardType() { + super(2, 2, new FilterPermanent(), false); + targetName = "permanents that share a card type"; + } + + public TargetPermanentsThatShareCardType(final TargetPermanentsThatShareCardType target) { + super(target); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (super.canTarget(controllerId, id, source, game)) { + if (!getTargets().isEmpty()) { + Permanent targetOne = game.getPermanent(getTargets().get(0)); + Permanent targetTwo = game.getPermanent(id); + if (targetOne == null || targetTwo == null) { + return false; + } + return CardUtil.shareTypes(targetOne, targetTwo); + } + return true; + } + return false; + } + + @Override + public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { + Set cardTypes = new HashSet<>(); + MageObject targetSource = game.getObject(sourceId); + for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, sourceId, game)) { + if (permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) { + for (CardType cardType :permanent.getCardType()) { + if (cardTypes.contains(cardType)) { + return true; + } + } + cardTypes.addAll(permanent.getCardType()); + } + } + return false; + } + + @Override + public TargetPermanentsThatShareCardType copy() { + return new TargetPermanentsThatShareCardType(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/SoulfireGrandMaster.java b/Mage.Sets/src/mage/sets/fatereforged/SoulfireGrandMaster.java index 03c29db4df..7ae39c928d 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/SoulfireGrandMaster.java +++ b/Mage.Sets/src/mage/sets/fatereforged/SoulfireGrandMaster.java @@ -48,14 +48,12 @@ import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.SubLayer; -import mage.constants.TargetController; import mage.constants.WatcherScope; import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.FilterObject; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; -import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; @@ -230,7 +228,10 @@ class SoulfireGrandMasterCastFromHandReplacementEffect extends ReplacementEffect if (zEvent.getFromZone() == Zone.STACK && zEvent.getToZone() == Zone.GRAVEYARD && event.getTargetId().equals(spellId)) { - return true; + Spell spell = game.getStack().getSpell(spellId); + if (spell != null && !spell.isCountered()) { + return true; + } } } return false; diff --git a/Mage.Sets/src/mage/sets/fatereforged/UginTheSpiritDragon.java b/Mage.Sets/src/mage/sets/fatereforged/UginTheSpiritDragon.java index 2ce88c44c9..90ffdb0ca4 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/UginTheSpiritDragon.java +++ b/Mage.Sets/src/mage/sets/fatereforged/UginTheSpiritDragon.java @@ -127,7 +127,7 @@ class UginTheSpiritDragonEffect2 extends OneShotEffect { filter.add(new ConvertedManaCostPredicate(ComparisonType.LessThan, cmc + 1)); filter.add(Predicates.not(new ColorlessPredicate())); for(Permanent permanent: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { - controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); } return true; } diff --git a/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java b/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java index 95fd687238..054006c589 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java +++ b/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java @@ -94,11 +94,6 @@ class DamageCantBePreventedEffect extends ContinuousRuleModifyingEffectImpl { return new DamageCantBePreventedEffect(this); } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public boolean checksEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.PREVENT_DAMAGE; diff --git a/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java b/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java index 6b8ca7b495..c8cc0436d5 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java @@ -56,10 +56,15 @@ class SkipUpkeepStepEffect extends ContinuousRuleModifyingEffectImpl { public SkipUpkeepStepEffect copy() { return new SkipUpkeepStepEffect(this); } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.UPKEEP_STEP; + } @Override public boolean applies(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); - return event.getType() == EventType.UPKEEP_STEP && controller != null && controller.getInRange().contains(event.getPlayerId()); + return controller != null && controller.getInRange().contains(event.getPlayerId()); } } diff --git a/Mage.Sets/src/mage/sets/fifthdawn/SummonersEgg.java b/Mage.Sets/src/mage/sets/fifthdawn/SummonersEgg.java index 80d44e2422..1b6facb521 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/SummonersEgg.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/SummonersEgg.java @@ -97,7 +97,7 @@ class SummonersEggImprintEffect extends OneShotEffect { && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getLogName() +" (Imprint)", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getLogName() +" (Imprint)", source.getSourceId(), game, Zone.HAND, true); card.setFaceDown(true, game); Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { diff --git a/Mage.Sets/src/mage/sets/fifthedition/AbbeyGargoyles.java b/Mage.Sets/src/mage/sets/fifthedition/AbbeyGargoyles.java new file mode 100644 index 0000000000..53e6493a3c --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/AbbeyGargoyles.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.fifthedition; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterObject; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author Sir-Speshkitty + */ +public class AbbeyGargoyles extends CardImpl { + + private static final FilterObject filter = new FilterObject("red"); + static { + filter.add(new ColorPredicate(ObjectColor.RED)); + } + + public AbbeyGargoyles(UUID ownerId) { + super(ownerId, 277, "Abbey Gargoyles", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}{W}{W}"); + this.expansionSetCode = "5ED"; + this.subtype.add("Gargoyle"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // protection from red + this.addAbility(new ProtectionAbility(filter)); + } + + public AbbeyGargoyles(final AbbeyGargoyles card) { + super(card); + } + + @Override + public AbbeyGargoyles copy() { + return new AbbeyGargoyles(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/AkronLegionnaire.java b/Mage.Sets/src/mage/sets/fifthedition/AkronLegionnaire.java new file mode 100644 index 0000000000..486ac802b4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/AkronLegionnaire.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class AkronLegionnaire extends mage.sets.legends.AkronLegionnaire { + + public AkronLegionnaire(UUID ownerId) { + super(ownerId); + this.cardNumber = 278; + this.expansionSetCode = "5ED"; + } + + public AkronLegionnaire(final AkronLegionnaire card) { + super(card); + } + + @Override + public AkronLegionnaire copy() { + return new AkronLegionnaire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/BloodLust.java b/Mage.Sets/src/mage/sets/fifthedition/BloodLust.java new file mode 100644 index 0000000000..381b0983f1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/BloodLust.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class BloodLust extends mage.sets.fourthedition.BloodLust { + + public BloodLust(UUID ownerId) { + super(ownerId); + this.cardNumber = 212; + this.expansionSetCode = "5ED"; + } + + public BloodLust(final BloodLust card) { + super(card); + } + + @Override + public BloodLust copy() { + return new BloodLust(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/CarrionAnts.java b/Mage.Sets/src/mage/sets/fifthedition/CarrionAnts.java new file mode 100644 index 0000000000..288f886c61 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/CarrionAnts.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.fifthedition; + +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 jeffwadsworth + */ +public class CarrionAnts extends CardImpl { + + public CarrionAnts(UUID ownerId) { + super(ownerId, 12, "Carrion Ants", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + this.expansionSetCode = "5ED"; + this.subtype.add("Insect"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // {1}: Carrion Ants gets +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{1}"))); + + } + + public CarrionAnts(final CarrionAnts card) { + super(card); + } + + @Override + public CarrionAnts copy() { + return new CarrionAnts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/CircleOfProtectionArtifacts.java b/Mage.Sets/src/mage/sets/fifthedition/CircleOfProtectionArtifacts.java index 7ae404629f..b2addb8b6b 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/CircleOfProtectionArtifacts.java +++ b/Mage.Sets/src/mage/sets/fifthedition/CircleOfProtectionArtifacts.java @@ -25,7 +25,7 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ -package mage.sets.fifhedition; +package mage.sets.fifthedition; import java.util.UUID; diff --git a/Mage.Sets/src/mage/sets/fifthedition/CrimsonManticore.java b/Mage.Sets/src/mage/sets/fifthedition/CrimsonManticore.java new file mode 100644 index 0000000000..dd83db2e10 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/CrimsonManticore.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class CrimsonManticore extends mage.sets.legends.CrimsonManticore { + + public CrimsonManticore(UUID ownerId) { + super(ownerId); + this.cardNumber = 217; + this.expansionSetCode = "5ED"; + } + + public CrimsonManticore(final CrimsonManticore card) { + super(card); + } + + @Override + public CrimsonManticore copy() { + return new CrimsonManticore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/DanceOfMany.java b/Mage.Sets/src/mage/sets/fifthedition/DanceOfMany.java new file mode 100644 index 0000000000..e765eaadda --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/DanceOfMany.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class DanceOfMany extends mage.sets.thedark.DanceOfMany { + + public DanceOfMany(UUID ownerId) { + super(ownerId); + this.cardNumber = 78; + this.expansionSetCode = "5ED"; + } + + public DanceOfMany(final DanceOfMany card) { + super(card); + } + + @Override + public DanceOfMany copy() { + return new DanceOfMany(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/EvilEyeOfOrmsByGore.java b/Mage.Sets/src/mage/sets/fifthedition/EvilEyeOfOrmsByGore.java index ee9c9df8b7..1330a2c5b9 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/EvilEyeOfOrmsByGore.java +++ b/Mage.Sets/src/mage/sets/fifthedition/EvilEyeOfOrmsByGore.java @@ -64,7 +64,6 @@ public class EvilEyeOfOrmsByGore extends CardImpl { this.expansionSetCode = "5ED"; this.subtype.add("Eye"); - this.color.setBlack(true); this.power = new MageInt(3); this.toughness = new MageInt(6); @@ -96,33 +95,31 @@ class EvilEyeOfOrmsByGoreEffect extends ReplacementEffectImpl { super(effect); } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public EvilEyeOfOrmsByGoreEffect copy() { return new EvilEyeOfOrmsByGoreEffect(this); } @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; + } @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.DECLARE_ATTACKER) { - Permanent permanent = game.getPermanent(event.getSourceId()); - if (permanent != null) { - if (permanent.getControllerId().equals(source.getControllerId())) { - if (!permanent.hasSubtype("Eye")) { - return true; - } + Permanent permanent = game.getPermanent(event.getSourceId()); + if (permanent != null) { + if (permanent.getControllerId().equals(source.getControllerId())) { + if (!permanent.hasSubtype("Eye")) { + return true; } } } return false; } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } } diff --git a/Mage.Sets/src/mage/sets/fifthedition/FireDrake.java b/Mage.Sets/src/mage/sets/fifthedition/FireDrake.java new file mode 100644 index 0000000000..4bef1a28f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/FireDrake.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.fifthedition; + +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 jeffwadsworth + */ +public class FireDrake extends CardImpl { + + public FireDrake(UUID ownerId) { + super(ownerId, 226, "Fire Drake", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); + this.expansionSetCode = "5ED"; + this.subtype.add("Drake"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {R}: Fire Drake gets +1/+0 until end of turn. Activate this ability only once each turn. + this.addAbility(new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + + } + + public FireDrake(final FireDrake card) { + super(card); + } + + @Override + public FireDrake copy() { + return new FireDrake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/Heal.java b/Mage.Sets/src/mage/sets/fifthedition/Heal.java new file mode 100644 index 0000000000..fd8451be21 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/Heal.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class Heal extends mage.sets.iceage.Heal { + + public Heal(UUID ownerId) { + super(ownerId); + this.cardNumber = 309; + this.expansionSetCode = "5ED"; + } + + public Heal(final Heal card) { + super(card); + } + + @Override + public Heal copy() { + return new Heal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/IvoryGuardians.java b/Mage.Sets/src/mage/sets/fifthedition/IvoryGuardians.java new file mode 100644 index 0000000000..2d565b5599 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/IvoryGuardians.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class IvoryGuardians extends mage.sets.legends.IvoryGuardians { + + public IvoryGuardians(UUID ownerId) { + super(ownerId); + this.cardNumber = 316; + this.expansionSetCode = "5ED"; + } + + public IvoryGuardians(final IvoryGuardians card) { + super(card); + } + + @Override + public IvoryGuardians copy() { + return new IvoryGuardians(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java b/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java index 28876e28dc..c6b4c69acd 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java +++ b/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java @@ -101,7 +101,7 @@ class JestersCapEffect extends OneShotEffect { for (UUID cardId : target.getTargets()) { final Card targetCard = game.getCard(cardId); if (targetCard != null) { - applied |= player.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY); + applied |= player.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/fifthedition/KillerBees.java b/Mage.Sets/src/mage/sets/fifthedition/KillerBees.java new file mode 100644 index 0000000000..761341c224 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/KillerBees.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.fifthedition; + +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.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author jeffwadsworth + */ +public class KillerBees extends CardImpl { + + public KillerBees(UUID ownerId) { + super(ownerId, 169, "Killer Bees", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); + this.expansionSetCode = "5ED"; + this.subtype.add("Insect"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {G}: Killer Bees gets +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{G}"))); + + } + + public KillerBees(final KillerBees card) { + super(card); + } + + @Override + public KillerBees copy() { + return new KillerBees(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/TheWretched.java b/Mage.Sets/src/mage/sets/fifthedition/TheWretched.java index 23a5fdaead..9554817d94 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/TheWretched.java +++ b/Mage.Sets/src/mage/sets/fifthedition/TheWretched.java @@ -42,8 +42,8 @@ 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.combat.CombatGroup; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; @@ -53,19 +53,24 @@ import mage.watchers.common.BlockedAttackerWatcher; * * @author jeffwadsworth * -5/1/2009 The ability grants you control of all creatures that are blocking it as the ability resolves. This will include any creatures that were put onto the battlefield blocking it. -5/1/2009 Any blocking creatures that regenerated during combat will have been removed from combat. Since such creatures are no longer in combat, they cannot be blocking The Wretched, which means you won't be able to gain control of them. -5/1/2009 If The Wretched itself regenerated during combat, then it will have been removed from combat. Since it is no longer in combat, there cannot be any creatures blocking it, which means you won't be able to gain control of any creatures. -10/1/2009 The Wretched's ability triggers only if it's still on the battlefield when the end of combat step begins (after the combat damage step). For example, if it's blocked by a 7/7 creature and is destroyed, its ability won't trigger at all. +5/1/2009 The ability grants you control of all creatures that are blocking it as the ability resolves. This will include +* any creatures that were put onto the battlefield blocking it. +5/1/2009 Any blocking creatures that regenerated during combat will have been removed from combat. Since such creatures +* are no longer in combat, they cannot be blocking The Wretched, which means you won't be able to gain control of them. +5/1/2009 If The Wretched itself regenerated during combat, then it will have been removed from combat. Since it is no longer +* in combat, there cannot be any creatures blocking it, which means you won't be able to gain control of any creatures. +10/1/2009 The Wretched's ability triggers only if it's still on the battlefield when the end of combat step begins (after the +* combat damage step). For example, if it's blocked by a 7/7 creature and is destroyed, its ability won't trigger at all. 10/1/2009 If The Wretched leaves the battlefield, you no longer control it, so the duration of its control-change effect ends. 10/1/2009 If you lose control of The Wretched before its ability resolves, you won't gain control of the creatures blocking it at all. -10/1/2009 Once the ability resolves, it doesn't care whether the permanents you gained control of remain creatures, only that they remain on the battlefield. +10/1/2009 Once the ability resolves, it doesn't care whether the permanents you gained control of remain creatures, only that +* they remain on the battlefield. */ public class TheWretched extends CardImpl { public TheWretched(UUID ownerId) { - super(ownerId, 239, "The Wretched", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + super(ownerId, 59, "The Wretched", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.expansionSetCode = "5ED"; this.subtype.add("Demon"); this.power = new MageInt(2); @@ -100,10 +105,15 @@ class EndOfAnyCombatTriggeredAbility extends TriggeredAbilityImpl { public EndOfAnyCombatTriggeredAbility copy() { return new EndOfAnyCombatTriggeredAbility(this); } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.END_COMBAT_STEP_PRE; + } @Override public boolean checkTrigger(GameEvent event, Game game) { - return (event.getType() == GameEvent.EventType.END_COMBAT_STEP_PRE); + return true; } @Override @@ -124,29 +134,31 @@ class TheWretchedEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent theWretched = game.getPermanent(source.getSourceId()); + Permanent theWretched = (Permanent) source.getSourceObjectIfItStillExists(game); if (theWretched == null) { return false; } - if (theWretched.isRemovedFromCombat()) { + if (theWretched.isRemovedFromCombat() || !theWretched.isAttacking()) { return false; } if (!new SourceOnBattlefieldControlUnchangedCondition().apply(game, source)) { return false; } - BlockedAttackerWatcher watcher = (BlockedAttackerWatcher) game.getState().getWatchers().get("BlockedAttackerWatcher"); - if (watcher != null) { - for (Permanent creature : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), game)) { - if (watcher.creatureHasBlockedAttacker(theWretched, creature, game) - && !creature.isRemovedFromCombat()) { - ContinuousEffect effect = new ConditionalContinuousEffect(new GainControlTargetEffect(Duration.Custom, source.getControllerId()), new SourceOnBattlefieldControlUnchangedCondition(), "test"); - effect.setTargetPointer(new FixedTarget(creature.getId())); - game.addEffect(effect, source); + + for (CombatGroup combatGroup :game.getCombat().getGroups()) { + if (combatGroup.getAttackers().contains(source.getSourceId())) { + for(UUID creatureId: combatGroup.getBlockers()) { + Permanent blocker = game.getPermanent(creatureId); + if (blocker != null && blocker.getBlocking() > 0) { + ContinuousEffect effect = new ConditionalContinuousEffect(new GainControlTargetEffect(Duration.Custom, source.getControllerId()), new SourceOnBattlefieldControlUnchangedCondition(), ""); + effect.setTargetPointer(new FixedTarget(blocker.getId())); + game.addEffect(effect, source); + + } } } - return true; } - return false; + return true; } @Override diff --git a/Mage.Sets/src/mage/sets/fourthedition/BloodLust.java b/Mage.Sets/src/mage/sets/fourthedition/BloodLust.java new file mode 100644 index 0000000000..d783d0bbfc --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/BloodLust.java @@ -0,0 +1,138 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.SignInversionDynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; +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.Filter; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public class BloodLust extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(new ToughnessPredicate(Filter.ComparisonType.GreaterThan, 4)); + } + + public BloodLust(UUID ownerId) { + super(ownerId, 196, "Blood Lust", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); + this.expansionSetCode = "4ED"; + + // If target creature has toughness 5 or greater, it gets +4/-4 until end of turn. Otherwise, it gets +4/-X until end of turn, where X is its toughness minus 1. + this.getSpellAbility().addEffect(new ConditionalContinuousEffect( + new BoostTargetEffect(4, -4, Duration.EndOfTurn), + new BoostTargetEffect(new StaticValue(4), new SignInversionDynamicValue(new TargetPermanentToughnessMinus1Value()), Duration.WhileOnBattlefield), + new TargetMatchesFilterCondition(filter), + "If target creature has toughness 5 or greater, it gets +4/-4 until end of turn. Otherwise, it gets +4/-X until end of turn, where X is its toughness minus 1")); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + } + + public BloodLust(final BloodLust card) { + super(card); + } + + @Override + public BloodLust copy() { + return new BloodLust(this); + } +} + +class TargetMatchesFilterCondition implements Condition { + + private final FilterPermanent filter; + + public TargetMatchesFilterCondition(FilterPermanent filter) { + this.filter = filter; + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent target = game.getBattlefield().getPermanent(source.getFirstTarget()); + if (target != null) { + if (filter.match(target, source.getSourceId(), source.getControllerId(), game)) { + return true; + } + } + return false; + } +} + +class TargetPermanentToughnessMinus1Value implements DynamicValue { + + private static final TargetPermanentToughnessMinus1Value fINSTANCE = new TargetPermanentToughnessMinus1Value(); + + public static TargetPermanentToughnessMinus1Value getInstance() { + return fINSTANCE; + } + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + Permanent target = game.getPermanent(sourceAbility.getFirstTarget()); + if (target != null) { + return target.getToughness().getValue() - 1; + } + return 0; + } + + @Override + public TargetPermanentToughnessMinus1Value copy() { + return new TargetPermanentToughnessMinus1Value(); + } + + @Override + public String toString() { + return "X"; + } + + @Override + public String getMessage() { + return "target creature's toughness minus 1"; + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/CarrionAnts.java b/Mage.Sets/src/mage/sets/fourthedition/CarrionAnts.java new file mode 100644 index 0000000000..29c012d04f --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/CarrionAnts.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class CarrionAnts extends mage.sets.fifthedition.CarrionAnts { + + public CarrionAnts(UUID ownerId) { + super(ownerId); + this.cardNumber = 9; + this.expansionSetCode = "4ED"; + } + + public CarrionAnts(final CarrionAnts card) { + super(card); + } + + @Override + public CarrionAnts copy() { + return new CarrionAnts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/CrimsonManticore.java b/Mage.Sets/src/mage/sets/fourthedition/CrimsonManticore.java new file mode 100644 index 0000000000..82c4f3861f --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/CrimsonManticore.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class CrimsonManticore extends mage.sets.legends.CrimsonManticore { + + public CrimsonManticore(UUID ownerId) { + super(ownerId); + this.cardNumber = 201; + this.expansionSetCode = "4ED"; + } + + public CrimsonManticore(final CrimsonManticore card) { + super(card); + } + + @Override + public CrimsonManticore copy() { + return new CrimsonManticore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/KillerBees.java b/Mage.Sets/src/mage/sets/fourthedition/KillerBees.java new file mode 100644 index 0000000000..b1e6d62381 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/KillerBees.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class KillerBees extends mage.sets.fifthedition.KillerBees { + + public KillerBees(UUID ownerId) { + super(ownerId); + this.cardNumber = 138; + this.expansionSetCode = "4ED"; + } + + public KillerBees(final KillerBees card) { + super(card); + } + + @Override + public KillerBees copy() { + return new KillerBees(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fridaynightmagic/AbzanBeastmaster.java b/Mage.Sets/src/mage/sets/fridaynightmagic/AbzanBeastmaster.java new file mode 100644 index 0000000000..e94bec8845 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fridaynightmagic/AbzanBeastmaster.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fridaynightmagic; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AbzanBeastmaster extends mage.sets.fatereforged.AbzanBeastmaster { + + public AbzanBeastmaster(UUID ownerId) { + super(ownerId); + this.cardNumber = 180; + this.expansionSetCode = "FNMP"; + } + + public AbzanBeastmaster(final AbzanBeastmaster card) { + super(card); + } + + @Override + public AbzanBeastmaster copy() { + return new AbzanBeastmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fridaynightmagic/FrostWalker.java b/Mage.Sets/src/mage/sets/fridaynightmagic/FrostWalker.java new file mode 100644 index 0000000000..9546267fe1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fridaynightmagic/FrostWalker.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fridaynightmagic; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FrostWalker extends mage.sets.fatereforged.FrostWalker { + + public FrostWalker(UUID ownerId) { + super(ownerId); + this.cardNumber = 181; + this.expansionSetCode = "FNMP"; + } + + public FrostWalker(final FrostWalker card) { + super(card); + } + + @Override + public FrostWalker copy() { + return new FrostWalker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fridaynightmagic/HordelingOutburst.java b/Mage.Sets/src/mage/sets/fridaynightmagic/HordelingOutburst.java new file mode 100644 index 0000000000..c8346860d2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fridaynightmagic/HordelingOutburst.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fridaynightmagic; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HordelingOutburst extends mage.sets.khansoftarkir.HordelingOutburst { + + public HordelingOutburst(UUID ownerId) { + super(ownerId); + this.cardNumber = 178; + this.expansionSetCode = "FNMP"; + } + + public HordelingOutburst(final HordelingOutburst card) { + super(card); + } + + @Override + public HordelingOutburst copy() { + return new HordelingOutburst(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fridaynightmagic/SuspensionField.java b/Mage.Sets/src/mage/sets/fridaynightmagic/SuspensionField.java new file mode 100644 index 0000000000..a758f38654 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fridaynightmagic/SuspensionField.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fridaynightmagic; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SuspensionField extends mage.sets.khansoftarkir.SuspensionField { + + public SuspensionField(UUID ownerId) { + super(ownerId); + this.cardNumber = 179; + this.expansionSetCode = "FNMP"; + } + + public SuspensionField(final SuspensionField card) { + super(card); + } + + @Override + public SuspensionField copy() { + return new SuspensionField(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/BridgeFromBelow.java b/Mage.Sets/src/mage/sets/futuresight/BridgeFromBelow.java index 35daa721e3..0e8b36bb95 100644 --- a/Mage.Sets/src/mage/sets/futuresight/BridgeFromBelow.java +++ b/Mage.Sets/src/mage/sets/futuresight/BridgeFromBelow.java @@ -69,8 +69,6 @@ public class BridgeFromBelow extends CardImpl { super(ownerId, 81, "Bridge from Below", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}"); this.expansionSetCode = "FUT"; - this.color.setBlack(true); - // Whenever a nontoken creature is put into your graveyard from the battlefield, if Bridge from Below is in your graveyard, put a 2/2 black Zombie creature token onto the battlefield. this.addAbility(new BridgeFromBelowAbility(new CreateTokenEffect(new ZombieToken()), filter1)); // When a creature is put into an opponent's graveyard from the battlefield, if Bridge from Below is in your graveyard, exile Bridge from Below. @@ -106,15 +104,18 @@ class BridgeFromBelowAbility extends TriggeredAbilityImpl { return new BridgeFromBelowAbility(this); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD) { - Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent != null && filter.match(permanent, sourceId, controllerId, game)) { - return true; - } + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD) { + Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); + if (permanent != null && filter.match(permanent, sourceId, controllerId, game)) { + return true; } } return false; @@ -123,16 +124,11 @@ class BridgeFromBelowAbility extends TriggeredAbilityImpl { @Override public boolean checkInterveningIfClause(Game game) { Player controller = game.getPlayer(this.getControllerId()); - if(controller != null && controller.getGraveyard().contains(this.getSourceId())) { - return true; - } - return false; + return controller != null && controller.getGraveyard().contains(this.getSourceId()); } - - - + @Override public String getRule() { - return filter.getMessage() +", if Bridge from Below is in your graveyard, " + super.getRule(); + return filter.getMessage() +", if {this} is in your graveyard, " + super.getRule(); } } diff --git a/Mage.Sets/src/mage/sets/futuresight/Delay.java b/Mage.Sets/src/mage/sets/futuresight/Delay.java index a5956fe8d9..fdb9d364f1 100644 --- a/Mage.Sets/src/mage/sets/futuresight/Delay.java +++ b/Mage.Sets/src/mage/sets/futuresight/Delay.java @@ -28,11 +28,12 @@ package mage.sets.futuresight; import java.util.UUID; -import mage.abilities.Abilities; +import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CounterTargetWithReplacementEffect; +import mage.abilities.effects.common.continuous.GainSuspendEffect; import mage.abilities.keyword.SuspendAbility; import mage.cards.Card; import mage.cards.CardImpl; @@ -98,32 +99,15 @@ class DelayEffect extends OneShotEffect { effect.setTargetPointer(targetPointer); Card card = game.getCard(spell.getSourceId()); if (card != null && effect.apply(game, source) && Zone.EXILED.equals(game.getState().getZone(card.getId()))) { - boolean hasSuspend = false; - for (Ability ability :card.getAbilities()) { - if (ability instanceof SuspendAbility) { - hasSuspend = true; - break; + boolean hasSuspend = card.getAbilities().containsClass(SuspendAbility.class); + UUID exileId = SuspendAbility.getSuspendExileId(controller.getId(), game); + if (controller.moveCardToExileWithInfo(card, exileId, "Suspended cards of " + controller.getName(), source.getSourceId(), game, Zone.HAND, true)) { + card.addCounters(CounterType.TIME.createInstance(3), game); + if (!hasSuspend) { + game.addEffect(new GainSuspendEffect(new MageObjectReference(card, game)), source); } - } - card.addCounters(CounterType.TIME.createInstance(3), game); - if (!hasSuspend) { - // add suspend ability - // TODO: Find a better solution for giving suspend to a card. - // If the exiled card leaves exile by another way, the abilites won't be removed from the card - Abilities oldAbilities = card.getAbilities().copy(); - SuspendAbility suspendAbility = new SuspendAbility(3, null, card); - game.getState().addOtherAbility(card, suspendAbility); - - for (Ability ability :card.getAbilities()) { - if (!oldAbilities.contains(ability)) { - ability.setControllerId(source.getControllerId()); - game.getState().addAbility(ability, card.getId(), card); - } - } - - } - game.informPlayers(new StringBuilder(controller.getName()).append(" suspends (").append(3).append(") ").append(card.getName()).toString()); - + game.informPlayers(controller.getName() + " suspends 3 - " + card.getName()); + } } return true; } diff --git a/Mage.Sets/src/mage/sets/futuresight/EdgeOfAutumn.java b/Mage.Sets/src/mage/sets/futuresight/EdgeOfAutumn.java new file mode 100644 index 0000000000..aed3268253 --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/EdgeOfAutumn.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author FenrisulfrX + */ +public class EdgeOfAutumn extends mage.sets.knightsvsdragons.EdgeOfAutumn { + + public EdgeOfAutumn(UUID ownerId) { + super(ownerId); + this.cardNumber = 144; + this.expansionSetCode = "FUT"; + } + + public EdgeOfAutumn(final EdgeOfAutumn card) { + super(card); + } + + @Override + public EdgeOfAutumn copy() { + return new EdgeOfAutumn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java b/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java index 6e860dd4b4..ed39156879 100644 --- a/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java +++ b/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java @@ -107,12 +107,12 @@ class GibberingDescentSkipUpkeepEffect extends ContinuousRuleModifyingEffectImpl } @Override - public boolean apply(Game game, Ability source) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.UPKEEP_STEP; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return event.getType() == EventType.UPKEEP_STEP && (event.getPlayerId().equals(source.getControllerId())); + return event.getPlayerId().equals(source.getControllerId()); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/futuresight/OrissSamiteGuardian.java b/Mage.Sets/src/mage/sets/futuresight/OrissSamiteGuardian.java index 55f7eb8304..b9c7b6a04c 100644 --- a/Mage.Sets/src/mage/sets/futuresight/OrissSamiteGuardian.java +++ b/Mage.Sets/src/mage/sets/futuresight/OrissSamiteGuardian.java @@ -61,7 +61,6 @@ public class OrissSamiteGuardian extends CardImpl { this.subtype.add("Human"); this.subtype.add("Cleric"); - this.color.setWhite(true); this.power = new MageInt(1); this.toughness = new MageInt(3); @@ -104,19 +103,14 @@ class OrissSamiteGuardianCantCastEffect extends ContinuousRuleModifyingEffectImp } @Override - public boolean apply(Game game, Ability source) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.CAST_SPELL; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.CAST_SPELL) { - Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); - if (player != null && player.getId().equals(event.getPlayerId())) { - return true; - } - } - return false; + Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); + return player != null && player.getId().equals(event.getPlayerId()); } } @@ -135,20 +129,15 @@ class OrissSamiteGuardianCantAttackEffect extends ContinuousRuleModifyingEffectI public OrissSamiteGuardianCantAttackEffect copy() { return new OrissSamiteGuardianCantAttackEffect(this); } - + @Override - public boolean apply(Game game, Ability source) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.DECLARE_ATTACKER) { - Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); - if (player != null && player.getId().equals(event.getPlayerId())) { - return true; - } - } - return false; + Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); + return player != null && player.getId().equals(event.getPlayerId()); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/futuresight/ScoutsWarning.java b/Mage.Sets/src/mage/sets/futuresight/ScoutsWarning.java index f6802ed282..624abe4f6e 100644 --- a/Mage.Sets/src/mage/sets/futuresight/ScoutsWarning.java +++ b/Mage.Sets/src/mage/sets/futuresight/ScoutsWarning.java @@ -56,8 +56,6 @@ public class ScoutsWarning extends CardImpl { super(ownerId, 16, "Scout's Warning", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{W}"); this.expansionSetCode = "FUT"; - this.color.setWhite(true); - // The next creature card you play this turn can be played as though it had flash. this.getSpellAbility().addEffect(new ScoutsWarningAsThoughEffect()); this.getSpellAbility().addWatcher(new ScoutsWarningWatcher()); @@ -117,7 +115,7 @@ class ScoutsWarningAsThoughEffect extends AsThoughEffectImpl { if (watcher.isScoutsWarningSpellActive(source.getSourceId(), zoneChangeCounter)) { Card card = game.getCard(sourceId); if (card != null && card.getCardType().contains(CardType.CREATURE) && source.getControllerId().equals(affectedControllerId)) { - return card.getSpellAbility().isInUseableZone(game, card, false); + return card.getSpellAbility().isInUseableZone(game, card, null); } } return false; diff --git a/Mage.Sets/src/mage/sets/gatecrash/ConsumingAberration.java b/Mage.Sets/src/mage/sets/gatecrash/ConsumingAberration.java index 02ab9dc978..213ef0dbd6 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/ConsumingAberration.java +++ b/Mage.Sets/src/mage/sets/gatecrash/ConsumingAberration.java @@ -27,6 +27,7 @@ */ package mage.sets.gatecrash; +import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; @@ -39,12 +40,14 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; -import mage.constants.*; +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 java.util.UUID; - /** * * @author Plopman @@ -55,7 +58,7 @@ public class ConsumingAberration extends CardImpl { super(ownerId, 152, "Consuming Aberration", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{U}{B}"); this.expansionSetCode = "GTC"; - this.subtype.add("horror"); + this.subtype.add("Horror"); this.color.setBlack(true); this.color.setBlue(true); diff --git a/Mage.Sets/src/mage/sets/gatecrash/DiluvianPrimordial.java b/Mage.Sets/src/mage/sets/gatecrash/DiluvianPrimordial.java index 7c5b36beee..8a251fee2f 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/DiluvianPrimordial.java +++ b/Mage.Sets/src/mage/sets/gatecrash/DiluvianPrimordial.java @@ -167,7 +167,7 @@ class DiluvianPrimordialReplacementEffect extends ReplacementEffectImpl { if (controller != null) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.STACK); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.STACK, true); return true; } } diff --git a/Mage.Sets/src/mage/sets/gatecrash/MimingSlime.java b/Mage.Sets/src/mage/sets/gatecrash/MimingSlime.java index 1b209d6186..a6c1216c76 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/MimingSlime.java +++ b/Mage.Sets/src/mage/sets/gatecrash/MimingSlime.java @@ -1,119 +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.gatecrash; - -import java.util.List; -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.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.permanent.token.Token; -import mage.players.Player; - -/** - * - * @author LevelX2 - */ -public class MimingSlime extends CardImpl { - - public MimingSlime(UUID ownerId) { - super(ownerId, 126, "Miming Slime", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{G}"); - this.expansionSetCode = "GTC"; - - this.color.setGreen(true); - - // Put an X/X green Ooze creature token onto the battlefield, where X is the greatest power among creatures you control. - this.getSpellAbility().addEffect(new MimingSlimeEffect()); - } - - public MimingSlime(final MimingSlime card) { - super(card); - } - - @Override - public MimingSlime copy() { - return new MimingSlime(this); - } -} - -class MimingSlimeEffect extends OneShotEffect { - - public MimingSlimeEffect() { - super(Outcome.PutCreatureInPlay); - staticText = "Put an X/X green Ooze creature token onto the battlefield, where X is the greatest power among creatures you control"; - } - - public MimingSlimeEffect(final MimingSlimeEffect effect) { - super(effect); - } - - @Override - public MimingSlimeEffect copy() { - return new MimingSlimeEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - List creatures = game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), player.getId(), game); - int amount = 0; - for (Permanent creature : creatures) { - int power = creature.getPower().getValue(); - if (amount < power) { - amount = power; - } - } - OozeToken oozeToken = new OozeToken(); - oozeToken.getPower().initValue(amount); - oozeToken.getToughness().initValue(amount); - oozeToken.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - return true; - } - return false; - } -} - -class OozeToken extends Token { - public OozeToken() { - super("Ooze", "X/X green Ooze creature token"); - cardType.add(CardType.CREATURE); - subtype.add("Ooze"); - color.setGreen(true); - power = new MageInt(0); - toughness = new MageInt(0); - setOriginalExpansionSetCode("RTR"); - } -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.gatecrash; + +import java.util.List; +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.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.Token; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class MimingSlime extends CardImpl { + + public MimingSlime(UUID ownerId) { + super(ownerId, 126, "Miming Slime", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{G}"); + this.expansionSetCode = "GTC"; + + // Put an X/X green Ooze creature token onto the battlefield, where X is the greatest power among creatures you control. + this.getSpellAbility().addEffect(new MimingSlimeEffect()); + } + + public MimingSlime(final MimingSlime card) { + super(card); + } + + @Override + public MimingSlime copy() { + return new MimingSlime(this); + } +} + +class MimingSlimeEffect extends OneShotEffect { + + public MimingSlimeEffect() { + super(Outcome.PutCreatureInPlay); + staticText = "Put an X/X green Ooze creature token onto the battlefield, where X is the greatest power among creatures you control"; + } + + public MimingSlimeEffect(final MimingSlimeEffect effect) { + super(effect); + } + + @Override + public MimingSlimeEffect copy() { + return new MimingSlimeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + List creatures = game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), player.getId(), game); + int amount = 0; + for (Permanent creature : creatures) { + int power = creature.getPower().getValue(); + if (amount < power) { + amount = power; + } + } + OozeToken oozeToken = new OozeToken(); + oozeToken.getPower().initValue(amount); + oozeToken.getToughness().initValue(amount); + oozeToken.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); + return true; + } + return false; + } +} + +class OozeToken extends Token { + public OozeToken() { + super("Ooze", "X/X green Ooze creature token"); + cardType.add(CardType.CREATURE); + subtype.add("Ooze"); + color.setGreen(true); + power = new MageInt(0); + toughness = new MageInt(0); + setOriginalExpansionSetCode("RTR"); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/MurderInvestigation.java b/Mage.Sets/src/mage/sets/gatecrash/MurderInvestigation.java index a089d6e859..a0b08e8061 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/MurderInvestigation.java +++ b/Mage.Sets/src/mage/sets/gatecrash/MurderInvestigation.java @@ -27,6 +27,7 @@ */ package mage.sets.gatecrash; +import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.dynamicvalue.DynamicValue; @@ -41,11 +42,10 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.token.SoldierToken; import mage.target.TargetPermanent; import mage.target.common.TargetControlledCreaturePermanent; -import java.util.UUID; - /** * * @author LevelX2 @@ -86,7 +86,7 @@ class AttachedPermanentPowerCount implements DynamicValue { public int calculate(Game game, Ability sourceAbility, Effect effect) { Permanent attachmentPermanent = game.getPermanent(sourceAbility.getSourceId()); if (attachmentPermanent == null) { - attachmentPermanent = (Permanent) game.getLastKnownInformation(sourceAbility.getSourceId(), Zone.BATTLEFIELD); + attachmentPermanent = (Permanent) game.getLastKnownInformation(sourceAbility.getSourceId(), Zone.BATTLEFIELD, sourceAbility.getSourceObjectZoneChangeCounter()); } if (attachmentPermanent != null && attachmentPermanent.getAttachedTo() != null) { if (effect.getValue("attachedTo") != null) { diff --git a/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java b/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java index 2485b4a7a8..8f9ba1725b 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java +++ b/Mage.Sets/src/mage/sets/gatecrash/NightveilSpecter.java @@ -113,7 +113,7 @@ class NightveilSpecterExileEffect extends OneShotEffect { Card card = player.getLibrary().removeFromTop(game); MageObject sourceObject = game.getObject(source.getSourceId()); if (card != null && sourceObject != null) { - player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); return true; } } diff --git a/Mage.Sets/src/mage/sets/gatecrash/OozeFlux.java b/Mage.Sets/src/mage/sets/gatecrash/OozeFlux.java index 99deed4389..8fdb455bce 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/OozeFlux.java +++ b/Mage.Sets/src/mage/sets/gatecrash/OozeFlux.java @@ -1,111 +1,109 @@ -/* - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.sets.gatecrash; - -import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.Cost; -import mage.abilities.costs.common.RemoveVariableCountersTargetCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.token.Token; - -/** - * - * @author LevelX2 - */ -public class OozeFlux extends CardImpl { - - public OozeFlux(UUID ownerId) { - super(ownerId, 128, "Ooze Flux", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}"); - this.expansionSetCode = "GTC"; - - this.color.setGreen(true); - - // {1}{G}, Remove one or more +1/+1 counters from among creatures you control: Put an X/X green Ooze creature token onto the battlefield, where X is the number of +1/+1 counters removed this way. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new OozeFluxCreateTokenEffect(new OozeToken()),new ManaCostsImpl("{1}{G}")); - ability.addCost(new RemoveVariableCountersTargetCost(new FilterControlledCreaturePermanent("creatures you control"), CounterType.P1P1, "one or more", 1)); - this.addAbility(ability); - } - - public OozeFlux(final OozeFlux card) { - super(card); - } - - @Override - public OozeFlux copy() { - return new OozeFlux(this); - } -} - -class OozeFluxCreateTokenEffect extends OneShotEffect { - - private Token token; - - public OozeFluxCreateTokenEffect(Token token) { - super(Outcome.PutCreatureInPlay); - this.token = token; - staticText = "Put an X/X green Ooze creature token onto the battlefield, where X is the number of +1/+1 counters removed this way"; - } - - public OozeFluxCreateTokenEffect(final OozeFluxCreateTokenEffect effect) { - super(effect); - this.token = effect.token.copy(); - } - - @Override - public OozeFluxCreateTokenEffect copy() { - return new OozeFluxCreateTokenEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - int xValue = 0; - for (Cost cost : source.getCosts()) { - if (cost instanceof RemoveVariableCountersTargetCost) { - xValue = ((RemoveVariableCountersTargetCost) cost).getAmount(); - break; - } - } - Token tokenCopy = token.copy(); - tokenCopy.getAbilities().newId(); - tokenCopy.getPower().initValue(xValue); - tokenCopy.getToughness().initValue(xValue); - tokenCopy.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); - return true; - } -} +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.gatecrash; + +import java.util.UUID; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveVariableCountersTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.token.Token; + +/** + * + * @author LevelX2 + */ +public class OozeFlux extends CardImpl { + + public OozeFlux(UUID ownerId) { + super(ownerId, 128, "Ooze Flux", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}"); + this.expansionSetCode = "GTC"; + + // {1}{G}, Remove one or more +1/+1 counters from among creatures you control: Put an X/X green Ooze creature token onto the battlefield, where X is the number of +1/+1 counters removed this way. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new OozeFluxCreateTokenEffect(new OozeToken()),new ManaCostsImpl("{1}{G}")); + ability.addCost(new RemoveVariableCountersTargetCost(new FilterControlledCreaturePermanent("creatures you control"), CounterType.P1P1, "one or more", 1)); + this.addAbility(ability); + } + + public OozeFlux(final OozeFlux card) { + super(card); + } + + @Override + public OozeFlux copy() { + return new OozeFlux(this); + } +} + +class OozeFluxCreateTokenEffect extends OneShotEffect { + + private final Token token; + + public OozeFluxCreateTokenEffect(Token token) { + super(Outcome.PutCreatureInPlay); + this.token = token; + staticText = "Put an X/X green Ooze creature token onto the battlefield, where X is the number of +1/+1 counters removed this way"; + } + + public OozeFluxCreateTokenEffect(final OozeFluxCreateTokenEffect effect) { + super(effect); + this.token = effect.token.copy(); + } + + @Override + public OozeFluxCreateTokenEffect copy() { + return new OozeFluxCreateTokenEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int xValue = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof RemoveVariableCountersTargetCost) { + xValue = ((RemoveVariableCountersTargetCost) cost).getAmount(); + break; + } + } + Token tokenCopy = token.copy(); + tokenCopy.getAbilities().newId(); + tokenCopy.getPower().initValue(xValue); + tokenCopy.getToughness().initValue(xValue); + tokenCopy.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/VizkopaConfessor.java b/Mage.Sets/src/mage/sets/gatecrash/VizkopaConfessor.java index 9805d7064c..12762cb790 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/VizkopaConfessor.java +++ b/Mage.Sets/src/mage/sets/gatecrash/VizkopaConfessor.java @@ -135,7 +135,7 @@ class VizkopaConfessorEffect extends OneShotEffect { controller.chooseTarget(Outcome.Exile, revealedCards, targetInHand, source, game); Card card = revealedCards.get(targetInHand.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.HAND, true); } } return true; diff --git a/Mage.Sets/src/mage/sets/gatecrash/Voidwalk.java b/Mage.Sets/src/mage/sets/gatecrash/Voidwalk.java index ffa817321a..4fb09d4594 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/Voidwalk.java +++ b/Mage.Sets/src/mage/sets/gatecrash/Voidwalk.java @@ -98,7 +98,7 @@ class VoidwalkEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(card.getOwnerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/guildpact/GhostCouncilOfOrzhova.java b/Mage.Sets/src/mage/sets/guildpact/GhostCouncilOfOrzhova.java index e6953319c8..2873bcd385 100644 --- a/Mage.Sets/src/mage/sets/guildpact/GhostCouncilOfOrzhova.java +++ b/Mage.Sets/src/mage/sets/guildpact/GhostCouncilOfOrzhova.java @@ -134,13 +134,13 @@ class GhostCouncilOfOrzhovaRemovingEffect extends OneShotEffect { if (controller != null) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { - if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), permanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), permanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility( new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/guildpact/Ghostway.java b/Mage.Sets/src/mage/sets/guildpact/Ghostway.java index ed6267976c..7615dbfb09 100644 --- a/Mage.Sets/src/mage/sets/guildpact/Ghostway.java +++ b/Mage.Sets/src/mage/sets/guildpact/Ghostway.java @@ -95,10 +95,10 @@ class GhostwayEffect extends OneShotEffect { MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null && controller != null) { int numberCreatures = 0; - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); for (Permanent creature : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { if (creature != null) { - controller.moveCardToExileWithInfo(creature, exileId,sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(creature, exileId,sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); numberCreatures++; } } @@ -107,7 +107,7 @@ class GhostwayEffect extends OneShotEffect { new ReturnFromExileEffect(exileId, Zone.BATTLEFIELD, false)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java b/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java index 083ae5a33f..c3179a7749 100644 --- a/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java +++ b/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java @@ -92,14 +92,17 @@ class LeylineOfLifeforceEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.COUNTER) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { - return true; - } + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/guildpact/Quicken.java b/Mage.Sets/src/mage/sets/guildpact/Quicken.java index b2f3f466f9..be65ccea16 100644 --- a/Mage.Sets/src/mage/sets/guildpact/Quicken.java +++ b/Mage.Sets/src/mage/sets/guildpact/Quicken.java @@ -118,7 +118,7 @@ class QuickenAsThoughEffect extends AsThoughEffectImpl { if (quickenWatcher.isQuickenSpellActive(source.getSourceId(), zoneChangeCounter)) { Card card = game.getCard(sourceId); if (card != null && card.getCardType().contains(CardType.SORCERY) && source.getControllerId().equals(affectedControllerId)) { - return card.getSpellAbility().isInUseableZone(game, card, false); + return card.getSpellAbility().isInUseableZone(game, card, null); } } return false; diff --git a/Mage.Sets/src/mage/sets/homelands/AbbeyGargoyles.java b/Mage.Sets/src/mage/sets/homelands/AbbeyGargoyles.java new file mode 100644 index 0000000000..6ec9431864 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AbbeyGargoyles.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 Sir-Speshkitty + */ +public class AbbeyGargoyles extends mage.sets.fifthedition.AbbeyGargoyles { + + public AbbeyGargoyles(UUID ownerId) { + super(ownerId); + this.cardNumber = 101; + this.expansionSetCode = "HML"; + } + + public AbbeyGargoyles(final AbbeyGargoyles card) { + super(card); + } + + @Override + public AbbeyGargoyles copy() { + return new AbbeyGargoyles(this); + } +} diff --git a/Mage.Sets/src/mage/sets/homelands/AbbeyMatron.java b/Mage.Sets/src/mage/sets/homelands/AbbeyMatron.java new file mode 100644 index 0000000000..6145b1d0c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AbbeyMatron.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.homelands; + +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.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 Sir-Speshkitty + */ +public class AbbeyMatron extends CardImpl { + + public AbbeyMatron(UUID ownerId) { + super(ownerId, 103, "Abbey Matron", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "HML"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {W}, {tap}: Abbey Matron gets +0/+3 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(0,3,Duration.EndOfTurn), new ManaCostsImpl("{W}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public AbbeyMatron(final AbbeyMatron card) { + super(card); + } + + @Override + public AbbeyMatron copy() { + return new AbbeyMatron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/AdarkarSentinel.java b/Mage.Sets/src/mage/sets/iceage/AdarkarSentinel.java new file mode 100644 index 0000000000..e9319f3a2a --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/AdarkarSentinel.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.Ability; +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 Sir-Speshkitty + */ +public class AdarkarSentinel extends CardImpl { + + public AdarkarSentinel(UUID ownerId) { + super(ownerId, 281, "Adarkar Sentinel", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Soldier"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {1}: Adarkar Sentinel gets +0/+1 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(0,1,Duration.EndOfTurn), new ManaCostsImpl("{1}")); + this.addAbility(ability); + } + + public AdarkarSentinel(final AdarkarSentinel card) { + super(card); + } + + @Override + public AdarkarSentinel copy() { + return new AdarkarSentinel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/DemonicConsultation.java b/Mage.Sets/src/mage/sets/iceage/DemonicConsultation.java index 96c3a76dd2..be4c1185fb 100644 --- a/Mage.Sets/src/mage/sets/iceage/DemonicConsultation.java +++ b/Mage.Sets/src/mage/sets/iceage/DemonicConsultation.java @@ -106,7 +106,7 @@ class DemonicConsultationEffect extends OneShotEffect { for (int i = 0; i < num; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { - player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } @@ -123,7 +123,7 @@ class DemonicConsultationEffect extends OneShotEffect { } // and exile all other cards revealed this way. else { - player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/iceage/Heal.java b/Mage.Sets/src/mage/sets/iceage/Heal.java new file mode 100644 index 0000000000..fbc5a47b56 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/Heal.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.iceage; + +import java.util.UUID; +import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author jeffwadsworth + */ +public class Heal extends CardImpl { + + public Heal(UUID ownerId) { + super(ownerId, 254, "Heal", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}"); + this.expansionSetCode = "ICE"; + + // Prevent the next 1 damage that would be dealt to target creature or player this turn. + // Draw a card at the beginning of the next turn's upkeep. + this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, 1)); + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + + } + + public Heal(final Heal card) { + super(card); + } + + @Override + public Heal copy() { + return new Heal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/IcyPrison.java b/Mage.Sets/src/mage/sets/iceage/IcyPrison.java index 7f948ad3f0..a93871eba4 100644 --- a/Mage.Sets/src/mage/sets/iceage/IcyPrison.java +++ b/Mage.Sets/src/mage/sets/iceage/IcyPrison.java @@ -66,7 +66,7 @@ public class IcyPrison extends CardImpl { new DoUnlessAnyPlayerPaysEffect(new SacrificeSourceEffect(), new GenericManaCost(3)), TargetController.YOU, false)); // When Icy Prison leaves the battlefield, return the exiled card to the battlefield under its owner's control. - this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false)); + this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD, false, true), false)); } diff --git a/Mage.Sets/src/mage/sets/iceage/Necropotence.java b/Mage.Sets/src/mage/sets/iceage/Necropotence.java index febd9fb860..0d5516191b 100644 --- a/Mage.Sets/src/mage/sets/iceage/Necropotence.java +++ b/Mage.Sets/src/mage/sets/iceage/Necropotence.java @@ -62,8 +62,6 @@ public class Necropotence extends CardImpl { super(ownerId, 42, "Necropotence", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}"); this.expansionSetCode = "ICE"; - this.color.setBlack(true); - // Skip your draw step. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipDrawStepEffect())); // Whenever you discard a card, exile that card from your graveyard. @@ -136,7 +134,7 @@ class NecropotenceEffect extends OneShotEffect { if (controller != null) { if (controller.getLibrary().size() > 0) { Card card = controller.getLibrary().removeFromTop(game); - if (controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY)) { + if (controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, false)) { card.setFaceDown(true, game); Effect returnToHandeffect = new ReturnToHandTargetEffect(false); returnToHandeffect.setText("put that face down card into your hand"); @@ -144,7 +142,7 @@ class NecropotenceEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(returnToHandeffect, TargetController.YOU); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/iceage/OrcishLibrarian.java b/Mage.Sets/src/mage/sets/iceage/OrcishLibrarian.java index 03dcfa2e8a..5ea8f38aa4 100644 --- a/Mage.Sets/src/mage/sets/iceage/OrcishLibrarian.java +++ b/Mage.Sets/src/mage/sets/iceage/OrcishLibrarian.java @@ -116,7 +116,7 @@ class OrcishLibrarianEffect extends OneShotEffect { if (cards.size() > 0) { Card card = cards.getRandom(game); - player.moveCardToExileWithInfo(card, null, null, source.getId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, null, source.getId(), game, Zone.LIBRARY, true); cards.remove(card); } } diff --git a/Mage.Sets/src/mage/sets/iceage/PitTrap.java b/Mage.Sets/src/mage/sets/iceage/PitTrap.java new file mode 100644 index 0000000000..dcf177c50a --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/PitTrap.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class PitTrap extends mage.sets.urzassaga.PitTrap { + + public PitTrap(UUID ownerId) { + super(ownerId); + this.cardNumber = 308; + this.expansionSetCode = "ICE"; + } + + public PitTrap(final PitTrap card) { + super(card); + } + + @Override + public PitTrap copy() { + return new PitTrap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java b/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java index dfb03845e3..c4f86f7f61 100644 --- a/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java +++ b/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java @@ -103,7 +103,7 @@ class SeverTheBloodlineEffect extends OneShotEffect { filter.add(new NamePredicate(targetPermanent.getName())); } for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { - controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); } return true; } diff --git a/Mage.Sets/src/mage/sets/invasion/BenalishLancer.java b/Mage.Sets/src/mage/sets/invasion/BenalishLancer.java new file mode 100644 index 0000000000..7fc7d46ab0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/invasion/BenalishLancer.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.invasion; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author FenrisulfrX + */ +public class BenalishLancer extends CardImpl { + + public BenalishLancer(UUID ownerId) { + super(ownerId, 7, "Benalish Lancer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "INV"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Kicker {2}{W} + this.addAbility(new KickerAbility("{2}{W}")); + + // If Benalish Lancer was kicked, it enters the battlefield with two +1/+1 counters on it and with first strike. + Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), + KickedCondition.getInstance(), true, + "If {this} was kicked, it enters the battlefield with two +1/+1 counters on it and with first strike.", ""); + ability.addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability); + } + + public BenalishLancer(final BenalishLancer card) { + super(card); + } + + @Override + public BenalishLancer copy() { + return new BenalishLancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/invasion/BreathOfDarigaaz.java b/Mage.Sets/src/mage/sets/invasion/BreathOfDarigaaz.java new file mode 100644 index 0000000000..8b76b34493 --- /dev/null +++ b/Mage.Sets/src/mage/sets/invasion/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.invasion; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class BreathOfDarigaaz extends mage.sets.commander.BreathOfDarigaaz { + + public BreathOfDarigaaz(UUID ownerId) { + super(ownerId); + this.cardNumber = 138; + this.expansionSetCode = "INV"; + } + + public BreathOfDarigaaz(final BreathOfDarigaaz card) { + super(card); + } + + @Override + public BreathOfDarigaaz copy() { + return new BreathOfDarigaaz(this); + } +} diff --git a/Mage.Sets/src/mage/sets/invasion/Duskwalker.java b/Mage.Sets/src/mage/sets/invasion/Duskwalker.java index 99e6110669..fecf398f9b 100644 --- a/Mage.Sets/src/mage/sets/invasion/Duskwalker.java +++ b/Mage.Sets/src/mage/sets/invasion/Duskwalker.java @@ -30,10 +30,8 @@ package mage.sets.invasion; 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.decorator.ConditionalTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.KickedCondition; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.FearAbility; @@ -62,11 +60,11 @@ public class Duskwalker extends CardImpl { this.addAbility(new KickerAbility("{3}{B}")); // If Duskwalker was kicked, it enters the battlefield with two +1/+1 counters on it and with fear. - Ability ability = new ConditionalTriggeredAbility( - new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2))), - KickedCondition.getInstance(),"If {this} was kicked, it enters the battlefield with two +1/+1 counters on it and with fear."); - ability.addEffect(new GainAbilitySourceEffect(FearAbility.getInstance(), Duration.WhileOnBattlefield)); - this.addAbility(ability); + Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), + KickedCondition.getInstance(), true, + "If {this} was kicked, it enters the battlefield with two +1/+1 counters on it and with fear.", ""); + ability.addEffect(new GainAbilitySourceEffect(FearAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability); } public Duskwalker(final Duskwalker card) { diff --git a/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java b/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java index 6f2dd3c889..82ad3e52e5 100644 --- a/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java +++ b/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java @@ -27,9 +27,11 @@ */ package mage.sets.invasion; +import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; +import mage.MageObject; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; @@ -57,8 +59,7 @@ public class FactOrFiction extends CardImpl { super(ownerId, 57, "Fact or Fiction", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{U}"); this.expansionSetCode = "INV"; - this.color.setBlue(true); - + // 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. this.getSpellAbility().addEffect(new FactOrFictionEffect()); } @@ -90,28 +91,21 @@ class FactOrFictionEffect 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 = source.getSourceObject(game); + if (controller == null || sourceObject == null) { return false; } - Cards cards = new CardsImpl(Zone.PICK); - int count = Math.min(player.getLibrary().size(), 5); - for (int i = 0; i < count; i++) { - Card card = player.getLibrary().removeFromTop(game); - if (card != null) { - cards.add(card); - game.setZone(card.getId(), Zone.PICK); - } - } - player.revealCards("Fact or Fiction", cards, game); + Cards cards = new CardsImpl(); + cards.addAll(controller.getLibrary().getTopCards(game, 5)); + controller.revealCards(sourceObject.getLogName(), cards, game); Set opponents = game.getOpponents(source.getControllerId()); if (!opponents.isEmpty()) { Player opponent = game.getPlayer(opponents.iterator().next()); - TargetCard target = new TargetCard(0, cards.size(), Zone.PICK, new FilterCard("cards to put in the first pile")); - target.setRequired(false); - Cards pile1 = new CardsImpl(); + TargetCard target = new TargetCard(0, cards.size(), Zone.LIBRARY, new FilterCard("cards to put in the first pile")); + List pile1 = new ArrayList<>(); if (opponent.choose(Outcome.Neutral, cards, target, game)) { List targets = target.getTargets(); for (UUID targetId : targets) { @@ -122,54 +116,41 @@ class FactOrFictionEffect extends OneShotEffect { } } } - - player.revealCards("Pile 1 (Fact or Fiction)", pile1, game); - player.revealCards("Pile 2 (Fact or Fiction)", cards, game); - - Choice choice = new ChoiceImpl(true); - choice.setMessage("Select a pile of cards to put into your hand:"); - - StringBuilder sb = new StringBuilder("Pile 1: "); - for (UUID cardId : pile1) { - Card card = pile1.get(cardId, game); - if (card != null) { - sb.append(card.getName()).append("; "); - } - } - sb.delete(sb.length() - 2, sb.length()); - choice.getChoices().add(sb.toString()); - - sb = new StringBuilder("Pile 2: "); - for (UUID cardId : cards) { - Card card = cards.get(cardId, game); - if (card != null) { - sb.append(card.getName()).append("; "); - } - } - sb.delete(sb.length() - 2, sb.length()); - choice.getChoices().add(sb.toString()); - + List pile2 = new ArrayList<>(); + pile2.addAll(cards.getCards(game)); + + boolean choice = controller.choosePile(outcome, "Choose a pile to put into your hand.", pile1, pile2, game); + Zone pile1Zone = Zone.GRAVEYARD; Zone pile2Zone = Zone.HAND; - if (player.choose(Outcome.Neutral, choice, game)) { - if (choice.getChoice().startsWith("Pile 1")) { - pile1Zone = Zone.HAND; - pile2Zone = Zone.GRAVEYARD; - } + if (choice) { + pile1Zone = Zone.HAND; + pile2Zone = Zone.GRAVEYARD; } - for (UUID cardUuid : pile1) { - Card card = pile1.get(cardUuid, game); - if (card != null) { - card.moveToZone(pile1Zone, source.getSourceId(), game, false); + StringBuilder sb = new StringBuilder("Pile 1, going to ").append(pile1Zone.equals(Zone.HAND)?"Hand":"Graveyard").append (": "); + int i = 0; + for (Card card : pile1) { + i++; + sb.append(card.getName()); + if (i < pile1.size()) { + sb.append(", "); } + card.moveToZone(pile1Zone, source.getSourceId(), game, false); } - for (UUID cardUuid : cards) { - Card card = cards.get(cardUuid, game); - if (card != null) { - card.moveToZone(pile2Zone, source.getSourceId(), game, false); + game.informPlayers(sb.toString()); + + sb = new StringBuilder("Pile 2, going to ").append(pile2Zone.equals(Zone.HAND)?"Hand":"Graveyard").append (":"); + i = 0; + for (Card card: pile2) { + i++; + sb.append(" ").append(card.getName()); + if (i < pile2.size()) { + sb.append(", "); } + card.moveToZone(pile2Zone, source.getSourceId(), game, false); } + game.informPlayers(sb.toString()); } return true; diff --git a/Mage.Sets/src/mage/sets/invasion/KavuTitan.java b/Mage.Sets/src/mage/sets/invasion/KavuTitan.java index c648af4ab1..fc79256dae 100644 --- a/Mage.Sets/src/mage/sets/invasion/KavuTitan.java +++ b/Mage.Sets/src/mage/sets/invasion/KavuTitan.java @@ -32,9 +32,8 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.common.KickedCondition; -import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.KickerAbility; @@ -61,11 +60,11 @@ public class KavuTitan extends CardImpl { // Kicker {2}{G} this.addAbility(new KickerAbility("{2}{G}")); // If Kavu Titan was kicked, it enters the battlefield with three +1/+1 counters on it and with trample. - Ability ability = new ConditionalTriggeredAbility( - new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3))), - KickedCondition.getInstance(),"If Kavu Titan was kicked, it enters the battlefield with three +1/+1 counters on it and with trample."); - ability.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield)); - this.addAbility(ability); + Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), + KickedCondition.getInstance(), true, + "If Kavu Titan was kicked, it enters the battlefield with three +1/+1 counters on it and with trample.", ""); + ability.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield)); + this.addAbility(ability); } public KavuTitan(final KavuTitan card) { diff --git a/Mage.Sets/src/mage/sets/invasion/RevivingVapors.java b/Mage.Sets/src/mage/sets/invasion/RevivingVapors.java index 4e8e8bfe3a..39f116021e 100644 --- a/Mage.Sets/src/mage/sets/invasion/RevivingVapors.java +++ b/Mage.Sets/src/mage/sets/invasion/RevivingVapors.java @@ -54,9 +54,6 @@ public class RevivingVapors extends CardImpl { super(ownerId, 265, "Reviving Vapors", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{W}{U}"); this.expansionSetCode = "INV"; - this.color.setBlue(true); - this.color.setWhite(true); - // Reveal the top three cards of your library and put one of them into your hand. You gain life equal to that card's converted mana cost. Put all other cards revealed this way into your graveyard. this.getSpellAbility().addEffect(new RevivingVaporsEffect()); } diff --git a/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java b/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java index 666508a757..c4b2eef51c 100644 --- a/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java +++ b/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java @@ -106,10 +106,15 @@ class SpinalEmbraceEffect extends ContinuousRuleModifyingEffectImpl { SpinalEmbraceEffect(final SpinalEmbraceEffect effect) { super(effect); } - + + @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.getType().equals(GameEvent.EventType.CAST_SPELL) && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { return !TurnPhase.COMBAT.equals(game.getTurn().getPhaseType()); } return false; @@ -149,7 +154,7 @@ class SpinalEmbraceAddDelayedEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/invasion/UrzasRage.java b/Mage.Sets/src/mage/sets/invasion/UrzasRage.java new file mode 100644 index 0000000000..1db837504c --- /dev/null +++ b/Mage.Sets/src/mage/sets/invasion/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.invasion; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author FenrisulfrX + */ +public class UrzasRage extends mage.sets.phyrexiavsthecoalition.UrzasRage { + + public UrzasRage(UUID ownerId) { + super(ownerId); + this.cardNumber = 178; + this.expansionSetCode = "INV"; + 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/invasion/YawgmothsAgenda.java b/Mage.Sets/src/mage/sets/invasion/YawgmothsAgenda.java index 859d54b58e..c76df717f6 100644 --- a/Mage.Sets/src/mage/sets/invasion/YawgmothsAgenda.java +++ b/Mage.Sets/src/mage/sets/invasion/YawgmothsAgenda.java @@ -147,12 +147,12 @@ class YawgmothsAgendaReplacementEffect extends ReplacementEffectImpl { if (((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = ((ZoneChangeEvent) event).getTarget(); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone()); + return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone(), true); } } else { Card card = game.getCard(event.getTargetId()); if (card != null) { - return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone()); + return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone(), true); } } return false; diff --git a/Mage.Sets/src/mage/sets/jacevschandra/QuicksilverDragon.java b/Mage.Sets/src/mage/sets/jacevschandra/QuicksilverDragon.java index 61ed7b2cd7..2ff987f20d 100644 --- a/Mage.Sets/src/mage/sets/jacevschandra/QuicksilverDragon.java +++ b/Mage.Sets/src/mage/sets/jacevschandra/QuicksilverDragon.java @@ -107,7 +107,7 @@ class QuicksilverDragonEffect extends OneShotEffect { numTargets += target.getTargets().size(); } if (numTargets == 1 && spell.getSpellAbility().getTargets().getFirstTarget().equals(source.getSourceId())) { - spell.chooseNewTargets(game, source.getControllerId(), true, false); + spell.chooseNewTargets(game, source.getControllerId(), true, false, null); } return true; } diff --git a/Mage.Sets/src/mage/sets/jacevsvraska/OhranViper.java b/Mage.Sets/src/mage/sets/jacevsvraska/OhranViper.java index 54ecd4de0f..3d0a4275d4 100644 --- a/Mage.Sets/src/mage/sets/jacevsvraska/OhranViper.java +++ b/Mage.Sets/src/mage/sets/jacevsvraska/OhranViper.java @@ -29,21 +29,15 @@ package mage.sets.jacevsvraska; import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToACreatureTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; 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.target.targetpointer.FixedTarget; /** * diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java b/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java index 61880236b1..b4f45c4e24 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/BrainMaggot.java @@ -30,6 +30,7 @@ package mage.sets.journeyintonyx; import java.util.LinkedList; import java.util.UUID; import mage.MageInt; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -49,6 +50,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentToken; import mage.players.Player; import mage.target.TargetCard; import mage.target.common.TargetOpponent; @@ -117,7 +119,7 @@ class BrainMaggotExileEffect extends OneShotEffect { Card card = opponent.getHand().get(target.getFirstTarget(), game); // If source permanent leaves the battlefield before its triggered ability resolves, the target card won't be exiled. if (card != null && game.getState().getZone(source.getSourceId()) == Zone.BATTLEFIELD) { - controller.moveCardToExileWithInfo(card, CardUtil.getObjectExileZoneId(game, sourcePermanent), sourcePermanent.getName(), source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()), sourcePermanent.getName(), source.getSourceId(), game, Zone.HAND, true); } } } @@ -151,9 +153,14 @@ class BrainMaggotReturnExiledCreatureAbility extends DelayedTriggeredAbility { return new BrainMaggotReturnExiledCreatureAbility(this); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ZONE_CHANGE && event.getTargetId().equals(this.getSourceId())) { + if (event.getTargetId().equals(this.getSourceId())) { ZoneChangeEvent zEvent = (ZoneChangeEvent) event; if (zEvent.getFromZone() == Zone.BATTLEFIELD) { return true; @@ -182,8 +189,10 @@ class BrainMaggotReturnExiledCreatureEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - ExileZone exile = game.getExile().getExileZone(CardUtil.getObjectExileZoneId(game, source.getSourceObject(game))); + MageObject sourceObject = source.getSourceObject(game); + if (sourceObject != null && controller != null) { + int zoneChangeCounter = (sourceObject instanceof PermanentToken) ? source.getSourceObjectZoneChangeCounter() : source.getSourceObjectZoneChangeCounter() -1; + ExileZone exile = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter)); Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (exile != null && sourcePermanent != null) { LinkedList cards = new LinkedList<>(exile); diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/Deicide.java b/Mage.Sets/src/mage/sets/journeyintonyx/Deicide.java index 0b4a478ff2..37b300288d 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/Deicide.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/Deicide.java @@ -87,7 +87,7 @@ class DeicideExileEffect extends SearchTargetGraveyardHandLibraryForCardNameAndE if (controller != null && sourceCard != null) { Permanent targetEnchantment = game.getPermanent(getTargetPointer().getFirst(game, source)); if (targetEnchantment != null) { - controller.moveCardToExileWithInfo(targetEnchantment, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(targetEnchantment, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); // 4/26/2014 // Deicide looks at the card in exile, not the permanent that was exiled, to determine // if it is a God. For each of the Gods in the Theros block, it won’t matter what your diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/Godsend.java b/Mage.Sets/src/mage/sets/journeyintonyx/Godsend.java index 03bdf0dab3..850681044f 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/Godsend.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/Godsend.java @@ -192,7 +192,7 @@ class GodsendExileEffect extends OneShotEffect { UUID exileId = CardUtil.getCardExileZoneId(game, source); controller.moveCardToExileWithInfo(creature, exileId, new StringBuilder(sourcePermanent.getName()).append(" (").append(sourcePermanent.getZoneChangeCounter(game)).append(")").toString() - , source.getSourceId(), game, Zone.BATTLEFIELD); + , source.getSourceId(), game, Zone.BATTLEFIELD, true); } return false; diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/HourOfNeed.java b/Mage.Sets/src/mage/sets/journeyintonyx/HourOfNeed.java index ce775443bf..4effa4214b 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/HourOfNeed.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/HourOfNeed.java @@ -97,7 +97,7 @@ class HourOfNeedExileEffect extends OneShotEffect { for(UUID creatureId: getTargetPointer().getTargets(game, source)) { Permanent creature = game.getPermanent(creatureId); if (creature != null) { - controller.moveCardToExileWithInfo(creature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(creature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); Token token = new HourOfNeedSphinxToken(); token.putOntoBattlefield(1, game, source.getSourceId(), creature.getControllerId()); } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/PharikaGodOfAffliction.java b/Mage.Sets/src/mage/sets/journeyintonyx/PharikaGodOfAffliction.java index 649646dbda..e53b205367 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/PharikaGodOfAffliction.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/PharikaGodOfAffliction.java @@ -113,7 +113,7 @@ class PharikaExileEffect extends OneShotEffect { Card targetCard = game.getCard(source.getFirstTarget()); if (targetCard != null) { if (game.getState().getZone(source.getFirstTarget()).equals(Zone.GRAVEYARD)) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } Player tokenController = game.getPlayer(targetCard.getOwnerId()); if (tokenController != null) { diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/PolymorphousRush.java b/Mage.Sets/src/mage/sets/journeyintonyx/PolymorphousRush.java index 2d02f9f4ac..fe4506ed66 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/PolymorphousRush.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/PolymorphousRush.java @@ -31,13 +31,14 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.abilityword.StriveAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.CopyPermanentEffect; 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.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -51,16 +52,21 @@ import mage.util.functions.EmptyApplyToPermanent; */ public class PolymorphousRush extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + } + public PolymorphousRush(UUID ownerId) { super(ownerId, 46, "Polymorphous Rush", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{U}"); this.expansionSetCode = "JOU"; - this.color.setBlue(true); - // Strive - Polymorphous Rush costs {1}{U} more to cast for each target beyond the first. this.addAbility(new StriveAbility("{1}{U}")); + // Choose a creature on the battlefield. Any number of target creatures you control each become a copy of that creature until end of turn. - this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, Integer.MAX_VALUE)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, Integer.MAX_VALUE, filter, false)); this.getSpellAbility().addEffect(new PolymorphousRushCopyEffect()); } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java b/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java index bf5bb506dc..811de9e798 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/PropheticFlamespeaker.java @@ -109,7 +109,7 @@ class PropheticFlamespeakerExileEffect extends OneShotEffect { Card card = library.removeFromTop(game); if (card != null) { String exileName = new StringBuilder(sourcePermanent.getName()).append(" ").toString(); - controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, source.getSourceId(), exileName, source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new PropheticFlamespeakerCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/RitualOfTheReturned.java b/Mage.Sets/src/mage/sets/journeyintonyx/RitualOfTheReturned.java index 0eae7fc236..e106671e43 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/RitualOfTheReturned.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/RitualOfTheReturned.java @@ -94,7 +94,7 @@ class RitualOfTheReturnedExileEffect extends OneShotEffect { if (controller != null) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null && game.getState().getZone(card.getId()).equals(Zone.GRAVEYARD)) { - controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.GRAVEYARD, true); return new CreateTokenEffect( new RitualOfTheReturnedZombieToken(card.getPower().getValue(), card.getToughness().getValue())).apply(game, source); } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/SilenceTheBelievers.java b/Mage.Sets/src/mage/sets/journeyintonyx/SilenceTheBelievers.java index f3bfe2e2c0..78d29ca350 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/SilenceTheBelievers.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/SilenceTheBelievers.java @@ -101,10 +101,10 @@ class SilenceTheBelieversExileEffect extends OneShotEffect { for (UUID attachmentId: attachments) { Permanent attachment = game.getPermanent(attachmentId); if (attachment != null && attachment.getSubtype().contains("Aura")) { - controller.moveCardToExileWithInfo(attachment, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(attachment, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); } } - controller.moveCardToExileWithInfo(creature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(creature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); } } return true; diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/Skybind.java b/Mage.Sets/src/mage/sets/journeyintonyx/Skybind.java index cb260afb96..93ba4ddb91 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/Skybind.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/Skybind.java @@ -100,7 +100,7 @@ class SkybindEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/Twinflame.java b/Mage.Sets/src/mage/sets/journeyintonyx/Twinflame.java index 9878bca7aa..1b1556ddb8 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/Twinflame.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/Twinflame.java @@ -112,7 +112,7 @@ class TwinflameCopyEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/judgment/PhantomCentaur.java b/Mage.Sets/src/mage/sets/judgment/PhantomCentaur.java index ed0d4b7915..446342299a 100644 --- a/Mage.Sets/src/mage/sets/judgment/PhantomCentaur.java +++ b/Mage.Sets/src/mage/sets/judgment/PhantomCentaur.java @@ -68,7 +68,6 @@ public class PhantomCentaur extends CardImpl { this.subtype.add("Centaur"); this.subtype.add("Spirit"); - this.color.setGreen(true); this.power = new MageInt(2); this.toughness = new MageInt(0); diff --git a/Mage.Sets/src/mage/sets/judgment/PhantomFlock.java b/Mage.Sets/src/mage/sets/judgment/PhantomFlock.java index e52cd707ad..16cbf93aec 100644 --- a/Mage.Sets/src/mage/sets/judgment/PhantomFlock.java +++ b/Mage.Sets/src/mage/sets/judgment/PhantomFlock.java @@ -66,7 +66,7 @@ public class PhantomFlock extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Phantom Flock enters the battlefield with three +1/+1 counters on it. - this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)))); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), "with three +1/+1 counters on it")); // If damage would be dealt to Phantom Flock, prevent that damage. Remove a +1/+1 counter from Phantom Flock. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PhantomFlockPreventionEffect())); diff --git a/Mage.Sets/src/mage/sets/judgment/WorldgorgerDragon.java b/Mage.Sets/src/mage/sets/judgment/WorldgorgerDragon.java index b640adc502..7944d12674 100644 --- a/Mage.Sets/src/mage/sets/judgment/WorldgorgerDragon.java +++ b/Mage.Sets/src/mage/sets/judgment/WorldgorgerDragon.java @@ -44,11 +44,11 @@ import mage.constants.Rarity; import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.predicate.permanent.AnotherPredicate; 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.players.Player; import mage.util.CardUtil; @@ -109,13 +109,13 @@ class WorldgorgerDragonEntersEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = game.getObject(source.getSourceId()); + MageObject sourceObject = source.getSourceObject(game); if (controller != null) { - UUID exileId = CardUtil.getCardExileZoneId(game, source); + UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); if (exileId != null) { for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { if (!permanent.getId().equals(source.getSourceId())) { // Another - controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); } } return true; @@ -144,9 +144,10 @@ class WorldgorgerDragonLeavesEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - UUID exileId = source.getSourceId(); - ExileZone exile = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + int zoneChangeCounter = (sourceObject instanceof PermanentToken) ? source.getSourceObjectZoneChangeCounter() : source.getSourceObjectZoneChangeCounter() -1; + ExileZone exile = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter)); if (exile != null) { exile = exile.copy(); for (UUID cardId : exile) { diff --git a/Mage.Sets/src/mage/sets/judgment/WormfangDrake.java b/Mage.Sets/src/mage/sets/judgment/WormfangDrake.java index 6b95f6d498..e8c5687970 100644 --- a/Mage.Sets/src/mage/sets/judgment/WormfangDrake.java +++ b/Mage.Sets/src/mage/sets/judgment/WormfangDrake.java @@ -128,13 +128,13 @@ class WormfangDrakeExileCost extends CostImpl { MageObject sourceObject = ability.getSourceObject(game); if (controller != null && sourceObject != null) { if (targets.choose(Outcome.Exile, controllerId, sourceId, game)) { - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, ability.getSourceId(), ability.getSourceObjectZoneChangeCounter()); for (UUID targetId: targets.get(0).getTargets()) { Permanent permanent = game.getPermanent(targetId); if (permanent == null) { return false; } - paid |= controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName() + " exiled permanents", sourceId, game, Zone.BATTLEFIELD); + paid |= controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName() + " exiled permanents", sourceId, game, Zone.BATTLEFIELD, true); } } } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/AnafenzaTheForemost.java b/Mage.Sets/src/mage/sets/khansoftarkir/AnafenzaTheForemost.java index a46a4e33e4..f43b44cac7 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/AnafenzaTheForemost.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/AnafenzaTheForemost.java @@ -72,9 +72,6 @@ public class AnafenzaTheForemost extends CardImpl { this.subtype.add("Human"); this.subtype.add("Soldier"); - this.color.setGreen(true); - this.color.setBlack(true); - this.color.setWhite(true); this.power = new MageInt(4); this.toughness = new MageInt(4); @@ -125,13 +122,13 @@ class AnafenzaTheForemostEffect extends ReplacementEffectImpl { if (((ZoneChangeEvent)event).getFromZone().equals(Zone.BATTLEFIELD)) { Permanent permanent = ((ZoneChangeEvent)event).getTarget(); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + return controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); } } else { Card card = game.getCard(event.getTargetId()); if (card != null) { - return controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, ((ZoneChangeEvent)event).getFromZone()); + return controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, ((ZoneChangeEvent)event).getFromZone(), true); } } } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/KheruLichLord.java b/Mage.Sets/src/mage/sets/khansoftarkir/KheruLichLord.java index f1c932fd2d..78a2ca07b8 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/KheruLichLord.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/KheruLichLord.java @@ -141,7 +141,7 @@ class KheruLichLordEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); KheruLichLordReplacementEffect replacementEffect = new KheruLichLordReplacementEffect(); @@ -180,7 +180,7 @@ class KheruLichLordReplacementEffect extends ReplacementEffectImpl { if (controller != null) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, game.getState().getZone(card.getId())); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, game.getState().getZone(card.getId()), true); } } return true; diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/MeanderingTowershell.java b/Mage.Sets/src/mage/sets/khansoftarkir/MeanderingTowershell.java index 7b131ddf07..87bcfe8546 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/MeanderingTowershell.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/MeanderingTowershell.java @@ -42,7 +42,6 @@ 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; @@ -70,12 +69,12 @@ public class MeanderingTowershell extends CardImpl { this.expansionSetCode = "KTK"; this.subtype.add("Turtle"); - this.color.setGreen(true); this.power = new MageInt(5); this.toughness = new MageInt(9); // Islandwalk this.addAbility(new IslandwalkAbility()); + // Whenever Meandering Towershell attacks, exile it. // Return it to the battlefield under your control tapped and attacking // at the beginning of the next declare attackers step on your next turn. @@ -114,11 +113,11 @@ class MeanderingTowershellEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (controller != null && sourcePermanent != null) { - controller.moveCardToExileWithInfo(sourcePermanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(sourcePermanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); DelayedTriggeredAbility delayedAbility = new AtBeginningNextDeclareAttackersStepNextTurnDelayedTriggeredAbility(); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java b/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java index dec8f732c0..95e02a2ec9 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/NarsetEnlightenedMaster.java @@ -108,7 +108,7 @@ class NarsetEnlightenedMasterExileEffect extends OneShotEffect { if (player.getLibrary().size() > 0) { Card card = player.getLibrary().getFromTop(game); if (card != null) { - player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); if (!card.getCardType().contains(CardType.CREATURE) && !card.getCardType().contains(CardType.LAND)) { ContinuousEffect effect = new NarsetEnlightenedMasterCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java b/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java index 0e55e8c14c..767d90370a 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SidisiBroodTyrant.java @@ -58,9 +58,6 @@ public class SidisiBroodTyrant extends CardImpl { this.subtype.add("Naga"); this.subtype.add("Shaman"); - this.color.setBlue(true); - this.color.setGreen(true); - this.color.setBlack(true); this.power = new MageInt(3); this.toughness = new MageInt(3); @@ -123,8 +120,7 @@ class SidisiBroodTyrantTriggeredAbility extends ZoneChangeTriggeredAbility { UUID lastStackObjectId = null; public SidisiBroodTyrantTriggeredAbility() { - super(Zone.LIBRARY, Zone.GRAVEYARD, new CreateTokenEffect(new ZombieToken("KTK")), "", false); - this.zone = Zone.BATTLEFIELD; + super(Zone.BATTLEFIELD, Zone.LIBRARY, Zone.GRAVEYARD, new CreateTokenEffect(new ZombieToken("KTK")), "", false); } public SidisiBroodTyrantTriggeredAbility(final SidisiBroodTyrantTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/TrailOfMystery.java b/Mage.Sets/src/mage/sets/khansoftarkir/TrailOfMystery.java index 99bd2ef8b3..33303293d4 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/TrailOfMystery.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/TrailOfMystery.java @@ -59,10 +59,8 @@ public class TrailOfMystery extends CardImpl { super(ownerId, 154, "Trail of Mystery", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); this.expansionSetCode = "KTK"; - this.color.setGreen(true); - // Whenever a face-down creature enters the battlefield under your control, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library. - Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(new FilterBasicLandCard()), true, true); + Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0,1, new FilterBasicLandCard()), true, true); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter, true)); // Whenever a permanent you control is turned face up, if it's a creature, it gets +2/+2 until end of turn. diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/VillainousWealth.java b/Mage.Sets/src/mage/sets/khansoftarkir/VillainousWealth.java index f522d0f1a1..c52e1e89b3 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/VillainousWealth.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/VillainousWealth.java @@ -110,7 +110,7 @@ class VillainousWealthEffect extends OneShotEffect { for (int i = 0; i < cardsCount; i++) { Card card = player.getLibrary().getFromTop(game); if (card != null) { - controller.moveCardToExileWithInfo(card, exileId, "Cards exiled by " + mageObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, exileId, "Cards exiled by " + mageObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/AlabornCavalier.java b/Mage.Sets/src/mage/sets/knightsvsdragons/AlabornCavalier.java new file mode 100644 index 0000000000..ac34ffcf46 --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/AlabornCavalier.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.knightsvsdragons; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class AlabornCavalier extends mage.sets.portalsecondage.AlabornCavalier { + + public AlabornCavalier(UUID ownerId) { + super(ownerId); + this.cardNumber = 18; + this.expansionSetCode = "DDG"; + } + + public AlabornCavalier(final AlabornCavalier card) { + super(card); + } + + @Override + public AlabornCavalier copy() { + return new AlabornCavalier(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/BenalishLancer.java b/Mage.Sets/src/mage/sets/knightsvsdragons/BenalishLancer.java new file mode 100644 index 0000000000..d9b88abbb4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/BenalishLancer.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.knightsvsdragons; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class BenalishLancer extends mage.sets.invasion.BenalishLancer { + + public BenalishLancer(UUID ownerId) { + super(ownerId); + this.cardNumber = 12; + this.expansionSetCode = "DDG"; + } + + public BenalishLancer(final BenalishLancer card) { + super(card); + } + + @Override + public BenalishLancer copy() { + return new BenalishLancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/BreathOfDarigaaz.java b/Mage.Sets/src/mage/sets/knightsvsdragons/BreathOfDarigaaz.java new file mode 100644 index 0000000000..234763f560 --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/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.knightsvsdragons; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class BreathOfDarigaaz extends mage.sets.commander.BreathOfDarigaaz { + + public BreathOfDarigaaz(UUID ownerId) { + super(ownerId); + this.cardNumber = 64; + this.expansionSetCode = "DDG"; + } + + public BreathOfDarigaaz(final BreathOfDarigaaz card) { + super(card); + } + + @Override + public BreathOfDarigaaz copy() { + return new BreathOfDarigaaz(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/EdgeOfAutumn.java b/Mage.Sets/src/mage/sets/knightsvsdragons/EdgeOfAutumn.java new file mode 100644 index 0000000000..dbc28ba389 --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/EdgeOfAutumn.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.knightsvsdragons; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterBasicLandCard; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author FenrisulfrX + */ +public class EdgeOfAutumn extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledLandPermanent("a land"); + private static final FilterBasicLandCard basiclandfilter = new FilterBasicLandCard(); + + public EdgeOfAutumn(UUID ownerId) { + super(ownerId, 25, "Edge of Autumn", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{G}"); + this.expansionSetCode = "DDG"; + + // If you control four or fewer lands, search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(basiclandfilter), true), + new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.FEWER_THAN, 5), + "If you control four or fewer lands, search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.")); + + // Cycling-Sacrifice a land. + Ability cycling = new CyclingAbility(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + this.addAbility(cycling); + } + + public EdgeOfAutumn(final EdgeOfAutumn card) { + super(card); + } + + @Override + public EdgeOfAutumn copy() { + return new EdgeOfAutumn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/FireBellyChangeling.java b/Mage.Sets/src/mage/sets/knightsvsdragons/FireBellyChangeling.java new file mode 100644 index 0000000000..d3edd1ac0d --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/FireBellyChangeling.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.knightsvsdragons; + +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.ChangelingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author FenrisulfrX + */ +public class FireBellyChangeling extends CardImpl { + + public FireBellyChangeling(UUID ownerId) { + super(ownerId, 51, "Fire-Belly Changeling", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "DDG"; + this.subtype.add("Shapeshifter"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Changeling + this.addAbility(ChangelingAbility.getInstance()); + + // {R}: Fire-Belly Changeling 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("{R}"), 2)); + } + + public FireBellyChangeling(final FireBellyChangeling card) { + super(card); + } + + @Override + public FireBellyChangeling copy() { + return new FireBellyChangeling(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/KilnmouthDragon.java b/Mage.Sets/src/mage/sets/knightsvsdragons/KilnmouthDragon.java new file mode 100644 index 0000000000..e5f54a40dd --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/KilnmouthDragon.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.knightsvsdragons; + +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.dynamicvalue.common.CountersCount; +import mage.abilities.effects.common.AmplifyEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.AmplifyAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author FenrisulfrX + */ +public class KilnmouthDragon extends CardImpl { + + public KilnmouthDragon(UUID ownerId) { + super(ownerId, 59, "Kilnmouth Dragon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{R}{R}"); + this.expansionSetCode = "DDG"; + this.subtype.add("Dragon"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Amplify 3 + this.addAbility(new AmplifyAbility(AmplifyEffect.AmplifyFactor.Amplify3)); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {tap}: Kilnmouth Dragon deals damage equal to the number of +1/+1 counters on it to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new DamageTargetEffect(new CountersCount(CounterType.P1P1)), new TapSourceCost()); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public KilnmouthDragon(final KilnmouthDragon card) { + super(card); + } + + @Override + public KilnmouthDragon copy() { + return new KilnmouthDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/PaladinOfPrahv.java b/Mage.Sets/src/mage/sets/knightsvsdragons/PaladinOfPrahv.java new file mode 100644 index 0000000000..ec1d60c52d --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/PaladinOfPrahv.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.sets.knightsvsdragons; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.DealsDamageGainLifeSourceTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.keyword.ForecastAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author FenrisulfrX + */ +public class PaladinOfPrahv extends CardImpl { + + public PaladinOfPrahv(UUID ownerId) { + super(ownerId, 22, "Paladin of Prahv", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); + this.expansionSetCode = "DDG"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Whenever Paladin of Prahv deals damage, you gain that much life. + this.addAbility(new DealsDamageGainLifeSourceTriggeredAbility()); + + // Forecast - {1}{W}, Reveal Paladin of Prahv from your hand: Whenever target creature deals damage this turn, you gain that much life. + Ability ability = new ForecastAbility(new CreateDelayedTriggeredAbilityEffect( + new PaladinOfPrahvTriggeredAbility()), new ManaCostsImpl("{1}{W}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public PaladinOfPrahv(final PaladinOfPrahv card) { + super(card); + } + + @Override + public PaladinOfPrahv copy() { + return new PaladinOfPrahv(this); + } +} + +class PaladinOfPrahvTriggeredAbility extends DelayedTriggeredAbility { + + public PaladinOfPrahvTriggeredAbility() { + super(new PaladinOfPrahvEffect(), Duration.EndOfTurn, false); + } + + public PaladinOfPrahvTriggeredAbility(final PaladinOfPrahvTriggeredAbility ability) { + super(ability); + } + + + @Override + public PaladinOfPrahvTriggeredAbility copy() { + return new PaladinOfPrahvTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + switch(event.getType()) { + case DAMAGED_CREATURE: + case DAMAGED_PLAYER: + case DAMAGED_PLANESWALKER: + return true; + } + return false; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent target = game.getPermanent(this.getFirstTarget()); + if (target != null && event.getSourceId().equals(target.getId())) { + for (Effect effect : this.getEffects()) { + effect.setValue("damage", event.getAmount()); + } + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever target creature deals damage this turn, " + super.getRule(); + } +} + +class PaladinOfPrahvEffect extends OneShotEffect { + + public PaladinOfPrahvEffect() { + super(Outcome.GainLife); + this.staticText = "you gain that much life"; + } + + public PaladinOfPrahvEffect(final PaladinOfPrahvEffect effect) { + super(effect); + } + + @Override + public PaladinOfPrahvEffect copy() { + return new PaladinOfPrahvEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int amount = (Integer) getValue("damage"); + if (amount > 0) { + controller.gainLife(amount, game); + return true; + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/SpidersilkArmor.java b/Mage.Sets/src/mage/sets/knightsvsdragons/SpidersilkArmor.java new file mode 100644 index 0000000000..2f3a4d9357 --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/SpidersilkArmor.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.knightsvsdragons; + +import java.util.UUID; +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.ReachAbility; +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 FenrisulfrX + */ +public class SpidersilkArmor extends CardImpl { + + public SpidersilkArmor(UUID ownerId) { + super(ownerId, 32, "Spidersilk Armor", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); + this.expansionSetCode = "DDG"; + + // Creatures you control get +0/+1 and have reach. + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield)); + Effect effect = new GainAbilityControlledEffect(ReachAbility.getInstance(), + Duration.WhileOnBattlefield, new FilterCreaturePermanent()); + effect.setText("and have reach."); + ability.addEffect(effect); + this.addAbility(ability); + } + + public SpidersilkArmor(final SpidersilkArmor card) { + super(card); + } + + @Override + public SpidersilkArmor copy() { + return new SpidersilkArmor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/TemporaryInsanity.java b/Mage.Sets/src/mage/sets/knightsvsdragons/TemporaryInsanity.java new file mode 100644 index 0000000000..f8b8b2f14f --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/TemporaryInsanity.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.knightsvsdragons; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class TemporaryInsanity extends mage.sets.torment.TemporaryInsanity { + + public TemporaryInsanity(UUID ownerId) { + super(ownerId); + this.cardNumber = 73; + this.expansionSetCode = "DDG"; + } + + public TemporaryInsanity(final TemporaryInsanity card) { + super(card); + } + + @Override + public TemporaryInsanity copy() { + return new TemporaryInsanity(this); + } +} diff --git a/Mage.Sets/src/mage/sets/knightsvsdragons/ThunderDragon.java b/Mage.Sets/src/mage/sets/knightsvsdragons/ThunderDragon.java new file mode 100644 index 0000000000..c13f81d0f9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/knightsvsdragons/ThunderDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.knightsvsdragons; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class ThunderDragon extends mage.sets.starter1999.ThunderDragon { + + public ThunderDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 61; + this.expansionSetCode = "DDG"; + } + + public ThunderDragon(final ThunderDragon card) { + super(card); + } + + @Override + public ThunderDragon copy() { + return new ThunderDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/launchparty/DeathbringerRegent.java b/Mage.Sets/src/mage/sets/launchparty/DeathbringerRegent.java new file mode 100644 index 0000000000..84d35f8dc6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/launchparty/DeathbringerRegent.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.launchparty; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DeathbringerRegent extends mage.sets.dragonsoftarkir.DeathbringerRegent { + + public DeathbringerRegent(UUID ownerId) { + super(ownerId); + this.cardNumber = 30; + this.expansionSetCode = "MLP"; + } + + public DeathbringerRegent(final DeathbringerRegent card) { + super(card); + } + + @Override + public DeathbringerRegent copy() { + return new DeathbringerRegent(this); + } +} diff --git a/Mage.Sets/src/mage/sets/launchparty/SandsteppeMastodon.java b/Mage.Sets/src/mage/sets/launchparty/SandsteppeMastodon.java new file mode 100644 index 0000000000..20b14b6af4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/launchparty/SandsteppeMastodon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.launchparty; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SandsteppeMastodon extends mage.sets.fatereforged.SandsteppeMastodon { + + public SandsteppeMastodon(UUID ownerId) { + super(ownerId); + this.cardNumber = 29; + this.expansionSetCode = "MLP"; + } + + public SandsteppeMastodon(final SandsteppeMastodon card) { + super(card); + } + + @Override + public SandsteppeMastodon copy() { + return new SandsteppeMastodon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/Abomination.java b/Mage.Sets/src/mage/sets/legends/Abomination.java index 746db1da82..cc5af6221d 100644 --- a/Mage.Sets/src/mage/sets/legends/Abomination.java +++ b/Mage.Sets/src/mage/sets/legends/Abomination.java @@ -154,7 +154,7 @@ class AbominationEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(permanent.getId()); delayedAbility.setControllerId(event.getControllerId()); - delayedAbility.setSourceObject(event.getSourceObject(game)); + delayedAbility.setSourceObject(event.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(permanent.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/legends/AkronLegionnaire.java b/Mage.Sets/src/mage/sets/legends/AkronLegionnaire.java new file mode 100644 index 0000000000..2a9d35dc5c --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/AkronLegionnaire.java @@ -0,0 +1,97 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.SimpleStaticAbility; +import mage.abilities.effects.common.combat.CantAttackAllAnyPlayerEffect; +import mage.cards.Card; +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.Predicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; + +/** + * + * @author jeffwadsworth + */ +public class AkronLegionnaire extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + filter.add(new AkronLegionairePredicate()); + } + + public AkronLegionnaire(UUID ownerId) { + super(ownerId, 170, "Akron Legionnaire", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}{W}{W}"); + this.expansionSetCode = "LEG"; + this.subtype.add("Giant"); + this.subtype.add("Soldier"); + this.power = new MageInt(8); + this.toughness = new MageInt(4); + + // Except for creatures named Akron Legionnaire and artifact creatures, creatures you control can't attack. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackAllAnyPlayerEffect(Duration.WhileOnBattlefield, filter))); + + } + + public AkronLegionnaire(final AkronLegionnaire card) { + super(card); + } + + @Override + public AkronLegionnaire copy() { + return new AkronLegionnaire(this); + } +} + +class AkronLegionairePredicate implements Predicate { + + public AkronLegionairePredicate() { + } + + @Override + public boolean apply(Card input, Game game) { + return !input.getCardType().contains(CardType.ARTIFACT) + || !input.getName().contains("Akron Legionaire"); + } + + @Override + public String toString() { + return ""; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/legends/BloodLust.java b/Mage.Sets/src/mage/sets/legends/BloodLust.java new file mode 100644 index 0000000000..8106683c3c --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/BloodLust.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 jeffwadsworth + */ +public class BloodLust extends mage.sets.fourthedition.BloodLust { + + public BloodLust(UUID ownerId) { + super(ownerId); + this.cardNumber = 135; + this.expansionSetCode = "LEG"; + this.rarity = Rarity.UNCOMMON; + } + + public BloodLust(final BloodLust card) { + super(card); + } + + @Override + public BloodLust copy() { + return new BloodLust(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/CarrionAnts.java b/Mage.Sets/src/mage/sets/legends/CarrionAnts.java new file mode 100644 index 0000000000..733a28a8a4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/CarrionAnts.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 jeffwadsworth + */ +public class CarrionAnts extends mage.sets.fifthedition.CarrionAnts { + + public CarrionAnts(UUID ownerId) { + super(ownerId); + this.cardNumber = 4; + this.expansionSetCode = "LEG"; + this.rarity = Rarity.RARE; + } + + public CarrionAnts(final CarrionAnts card) { + super(card); + } + + @Override + public CarrionAnts copy() { + return new CarrionAnts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/CrimsonManticore.java b/Mage.Sets/src/mage/sets/legends/CrimsonManticore.java new file mode 100644 index 0000000000..b6e26cd75d --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/CrimsonManticore.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.legends; + +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.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +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.TargetAttackingOrBlockingCreature; + +/** + * + * @author jeffwadsworth + */ +public class CrimsonManticore extends CardImpl { + + public CrimsonManticore(UUID ownerId) { + super(ownerId, 139, "Crimson Manticore", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.expansionSetCode = "LEG"; + this.subtype.add("Manticore"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {R}, {tap}: Crimson Manticore deals 1 damage to target attacking or blocking creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{R}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetAttackingOrBlockingCreature()); + this.addAbility(ability); + + } + + public CrimsonManticore(final CrimsonManticore card) { + super(card); + } + + @Override + public CrimsonManticore copy() { + return new CrimsonManticore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/HazezonTamar.java b/Mage.Sets/src/mage/sets/legends/HazezonTamar.java index a45ff2e38f..11a0a7b423 100644 --- a/Mage.Sets/src/mage/sets/legends/HazezonTamar.java +++ b/Mage.Sets/src/mage/sets/legends/HazezonTamar.java @@ -117,7 +117,7 @@ class HazezonTamarEntersEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/legends/IvoryGuardians.java b/Mage.Sets/src/mage/sets/legends/IvoryGuardians.java new file mode 100644 index 0000000000..2e3b6a2615 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/IvoryGuardians.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.legends; + +import java.util.Set; +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.keyword.ProtectionAbility; +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.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.Game; + +/** + * + * @author jeffwadsworth + */ +public class IvoryGuardians extends CardImpl { + + private static final FilterCard filter = new FilterCard(); + + static { + filter.add(new ColorPredicate(ObjectColor.RED)); + } + + private static final String rule = "Creatures named {this} get +1/+1 as long as an opponent controls a nontoken red permanent"; + + public IvoryGuardians(UUID ownerId) { + super(ownerId, 192, "Ivory Guardians", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); + this.expansionSetCode = "LEG"; + this.subtype.add("Giant"); + this.subtype.add("Cleric"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Protection from red + this.addAbility(new ProtectionAbility(filter)); + + // Creatures named Ivory Guardians get +1/+1 as long as an opponent controls a nontoken red permanent. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new BoostAllEffect(1, 1, Duration.WhileOnBattlefield), new IvoryGuardiansCondition(), rule))); + + } + + public IvoryGuardians(final IvoryGuardians card) { + super(card); + } + + @Override + public IvoryGuardians copy() { + return new IvoryGuardians(this); + } +} + +class IvoryGuardiansCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + boolean conditionApplies = false; + FilterPermanent filter = new FilterPermanent(); + filter.add(Predicates.not(new TokenPredicate())); + filter.add(new ColorPredicate(ObjectColor.RED)); + Set opponents = game.getOpponents(source.getControllerId()); + for (UUID opponentId : opponents) { + conditionApplies |= game.getBattlefield().countAll(filter, opponentId, game) > 0; + } + return conditionApplies; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/legends/KillerBees.java b/Mage.Sets/src/mage/sets/legends/KillerBees.java new file mode 100644 index 0000000000..e6bb6128b8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/KillerBees.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 jeffwadsworth + */ +public class KillerBees extends mage.sets.fifthedition.KillerBees { + + public KillerBees(UUID ownerId) { + super(ownerId); + this.cardNumber = 106; + this.expansionSetCode = "LEG"; + this.rarity = Rarity.RARE; + } + + public KillerBees(final KillerBees card) { + super(card); + } + + @Override + public KillerBees copy() { + return new KillerBees(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/KoboldTaskmaster.java b/Mage.Sets/src/mage/sets/legends/KoboldTaskmaster.java new file mode 100644 index 0000000000..cd97b0b0c3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/KoboldTaskmaster.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 jeffwadsworth + */ +public class KoboldTaskmaster extends mage.sets.timeshifted.KoboldTaskmaster { + + public KoboldTaskmaster(UUID ownerId) { + super(ownerId); + this.cardNumber = 154; + this.expansionSetCode = "LEG"; + this.rarity = Rarity.UNCOMMON; + } + + public KoboldTaskmaster(final KoboldTaskmaster card) { + super(card); + } + + @Override + public KoboldTaskmaster copy() { + return new KoboldTaskmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/TheAbyss.java b/Mage.Sets/src/mage/sets/legends/TheAbyss.java index 8957b130f4..3664e65ad0 100644 --- a/Mage.Sets/src/mage/sets/legends/TheAbyss.java +++ b/Mage.Sets/src/mage/sets/legends/TheAbyss.java @@ -86,24 +86,27 @@ class TheAbyssTriggeredAbility extends TriggeredAbilityImpl { public TheAbyssTriggeredAbility copy() { return new TheAbyssTriggeredAbility(this); } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.UPKEEP_STEP_PRE; + } @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.UPKEEP_STEP_PRE) { - Player player = game.getPlayer(event.getPlayerId()); - if (player != null) { - FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature you control"); - filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); - filter.add(new ControllerIdPredicate(player.getId())); - Target target = new TargetCreaturePermanent(filter); - if (target.canChoose(this.getSourceId(), this.getControllerId(), game) && player.chooseTarget(Outcome.DestroyPermanent, target, this, game)) { - for (Effect effect: this.getEffects()) { - if (effect instanceof DestroyTargetEffect) { - effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); - } + Player player = game.getPlayer(event.getPlayerId()); + if (player != null) { + FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature you control"); + filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); + filter.add(new ControllerIdPredicate(player.getId())); + Target target = new TargetCreaturePermanent(filter); + if (target.canChoose(this.getSourceId(), this.getControllerId(), game) && player.chooseTarget(Outcome.DestroyPermanent, target, this, game)) { + for (Effect effect: this.getEffects()) { + if (effect instanceof DestroyTargetEffect) { + effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); } - return true; } + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/legions/KilnmouthDragon.java b/Mage.Sets/src/mage/sets/legions/KilnmouthDragon.java new file mode 100644 index 0000000000..ba4f9bdf5c --- /dev/null +++ b/Mage.Sets/src/mage/sets/legions/KilnmouthDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author FenrisulfrX + */ +public class KilnmouthDragon extends mage.sets.knightsvsdragons.KilnmouthDragon { + + public KilnmouthDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 104; + this.expansionSetCode = "LGN"; + } + + public KilnmouthDragon(final KilnmouthDragon card) { + super(card); + } + + @Override + public KilnmouthDragon copy() { + return new KilnmouthDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legions/WirewoodChanneler.java b/Mage.Sets/src/mage/sets/legions/WirewoodChanneler.java index b3af010a32..f2028e62ad 100644 --- a/Mage.Sets/src/mage/sets/legions/WirewoodChanneler.java +++ b/Mage.Sets/src/mage/sets/legions/WirewoodChanneler.java @@ -30,6 +30,7 @@ package mage.sets.legions; import java.util.UUID; import mage.MageInt; import mage.Mana; +import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.mana.DynamicManaAbility; import mage.cards.CardImpl; @@ -61,8 +62,8 @@ public class WirewoodChanneler extends CardImpl { this.toughness = new MageInt(2); // {T}: Add X mana of any one color to your mana pool, where X is the number of Elves on the battlefield. - DynamicManaAbility ability = new DynamicManaAbility(new Mana(0,0,0,0,0,0,1), new PermanentsOnBattlefieldCount(filter), - "Add X mana of any one color to your mana pool, where X is the number of Elves on the battlefield"); + DynamicManaAbility ability = new DynamicManaAbility(new Mana(0,0,0,0,0,0,1), new PermanentsOnBattlefieldCount(filter), new TapSourceCost(), + "Add X mana of any one color to your mana pool, where X is the number of Elves on the battlefield", true); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/Berserk.java b/Mage.Sets/src/mage/sets/limitedalpha/Berserk.java index 14606f15d4..904cd5be44 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/Berserk.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/Berserk.java @@ -174,7 +174,7 @@ class BerserkDestroyEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java b/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java index 0d3facd1af..066dc7eaa2 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/Cockatrice.java @@ -136,7 +136,7 @@ class CockatriceEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java b/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java index 630133e654..aaab3b720d 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/ThicketBasilisk.java @@ -133,7 +133,7 @@ class ThicketBasiliskEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java b/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java index 2496e3e987..015dc2f6c2 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java @@ -30,10 +30,12 @@ package mage.sets.limitedalpha; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -81,14 +83,23 @@ class TimetwisterEffect extends OneShotEffect { for (UUID playerId: sourcePlayer.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getHand().getCards(game), game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getHand().clear(); - player.getGraveyard().clear(); - player.drawCards(7, game); + } } + game.getState().handleSimultaneousEvent(game); // needed here so state based triggered effects + for (UUID playerId: sourcePlayer.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null) { + player.drawCards(7, game); + } + } return true; } diff --git a/Mage.Sets/src/mage/sets/lorwyn/FireBellyChangeling.java b/Mage.Sets/src/mage/sets/lorwyn/FireBellyChangeling.java new file mode 100644 index 0000000000..9100a377e5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/FireBellyChangeling.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author FenrisulfrX + */ +public class FireBellyChangeling extends mage.sets.knightsvsdragons.FireBellyChangeling { + + public FireBellyChangeling(UUID ownerId) { + super(ownerId); + this.cardNumber = 164; + this.expansionSetCode = "LRW"; + } + + public FireBellyChangeling(final FireBellyChangeling card) { + super(card); + } + + @Override + public FireBellyChangeling copy() { + return new FireBellyChangeling(this); + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java b/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java index 10f685c3ed..688a91c559 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java +++ b/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java @@ -96,14 +96,17 @@ class GaddockTeegReplacementEffect4 extends ContinuousRuleModifyingEffectImpl { public GaddockTeegReplacementEffect4 copy() { return new GaddockTeegReplacementEffect4(this); } - + + @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.getType() == GameEvent.EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().convertedManaCost() >= 4) { - return true; - } + Card card = game.getCard(event.getSourceId()); + if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().convertedManaCost() >= 4) { + return true; } return false; } @@ -130,14 +133,17 @@ class GaddockTeegReplacementEffectX extends ContinuousRuleModifyingEffectImpl { public GaddockTeegReplacementEffectX copy() { return new GaddockTeegReplacementEffectX(this); } - + + @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.getType() == GameEvent.EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().getText().contains("X")) { - return true; - } + Card card = game.getCard(event.getSourceId()); + if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().getText().contains("X")) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.java b/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.java new file mode 100644 index 0000000000..09bd019a92 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/JudgeOfCurrents.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.lorwyn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BecomesTappedCreatureControlledTriggeredAbility; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class JudgeOfCurrents extends CardImpl { + + public JudgeOfCurrents(UUID ownerId) { + super(ownerId, 22, "Judge of Currents", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Merfolk"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + 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"))); + } + + public JudgeOfCurrents(final JudgeOfCurrents card) { + super(card); + } + + @Override + public JudgeOfCurrents copy() { + return new JudgeOfCurrents(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magic2010/DragonWhelp.java b/Mage.Sets/src/mage/sets/magic2010/DragonWhelp.java index 883eb2b13c..b637bdd578 100644 --- a/Mage.Sets/src/mage/sets/magic2010/DragonWhelp.java +++ b/Mage.Sets/src/mage/sets/magic2010/DragonWhelp.java @@ -103,7 +103,7 @@ class DragonWhelpEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DragonWhelpDelayedEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } amount++; diff --git a/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java b/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java index 889d19d223..62d8025e73 100644 --- a/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java +++ b/Mage.Sets/src/mage/sets/magic2010/StoneGiant.java @@ -134,7 +134,7 @@ class StoneGiantEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java index dd00c4ac96..1f1221c589 100644 --- a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java +++ b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java @@ -107,7 +107,7 @@ class HoardingDragonEffect extends OneShotEffect { if (target.getTargets().size() > 0) { Card card = controller.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, exileId, "Hoarding Dragon", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, exileId, "Hoarding Dragon", source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/magic2011/JinxedIdol.java b/Mage.Sets/src/mage/sets/magic2011/JinxedIdol.java index 9ca81ab7c4..5f38adf25a 100644 --- a/Mage.Sets/src/mage/sets/magic2011/JinxedIdol.java +++ b/Mage.Sets/src/mage/sets/magic2011/JinxedIdol.java @@ -53,7 +53,11 @@ public class JinxedIdol extends CardImpl { public JinxedIdol(UUID ownerId) { super(ownerId, 208, "Jinxed Idol", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{2}"); this.expansionSetCode = "M11"; + + // At the beginning of your upkeep, Jinxed Idol deals 2 damage to you. this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new DamageControllerEffect(2))); + + // Sacrifice a creature: Target opponent gains control of Jinxed Idol. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new JinxedIdolEffect(), new SacrificeTargetCost(new TargetControlledCreaturePermanent())); ability.addTarget(new TargetOpponent()); this.addAbility(ability); @@ -88,9 +92,11 @@ class JinxedIdolEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); if (permanent != null) { return permanent.changeControllerId(source.getFirstTarget(), game); + } else { + discard(); } return false; } diff --git a/Mage.Sets/src/mage/sets/magic2011/LeylineOfTheVoid.java b/Mage.Sets/src/mage/sets/magic2011/LeylineOfTheVoid.java index de0fc92bcc..80092b9e74 100644 --- a/Mage.Sets/src/mage/sets/magic2011/LeylineOfTheVoid.java +++ b/Mage.Sets/src/mage/sets/magic2011/LeylineOfTheVoid.java @@ -102,13 +102,13 @@ class LeylineOfTheVoidEffect extends ReplacementEffectImpl { if (((ZoneChangeEvent)event).getFromZone().equals(Zone.BATTLEFIELD)) { Permanent permanent = ((ZoneChangeEvent)event).getTarget(); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + return controller.moveCardToExileWithInfo(permanent, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); } } else { Card card = game.getCard(event.getTargetId()); if (card != null) { - return controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, ((ZoneChangeEvent)event).getFromZone()); + return controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, ((ZoneChangeEvent)event).getFromZone(), true); } } } diff --git a/Mage.Sets/src/mage/sets/magic2011/MystifyingMaze.java b/Mage.Sets/src/mage/sets/magic2011/MystifyingMaze.java index fb994eb692..cf47f9b2bb 100644 --- a/Mage.Sets/src/mage/sets/magic2011/MystifyingMaze.java +++ b/Mage.Sets/src/mage/sets/magic2011/MystifyingMaze.java @@ -101,7 +101,7 @@ class MystifyingMazeEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD, true)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/magic2011/PrimevalTitan.java b/Mage.Sets/src/mage/sets/magic2011/PrimevalTitan.java index 3f7bd8a1f7..60e79d7a2f 100644 --- a/Mage.Sets/src/mage/sets/magic2011/PrimevalTitan.java +++ b/Mage.Sets/src/mage/sets/magic2011/PrimevalTitan.java @@ -54,7 +54,7 @@ public class PrimevalTitan extends CardImpl { super(ownerId, 192, "Primeval Titan", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); this.expansionSetCode = "M11"; this.subtype.add("Giant"); - this.color.setGreen(true); + this.power = new MageInt(6); this.toughness = new MageInt(6); @@ -90,15 +90,17 @@ class PrimevalTitanAbility extends TriggeredAbilityImpl { return new PrimevalTitanAbility(this); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.ATTACKER_DECLARED || event.getType() == EventType.ENTERS_THE_BATTLEFIELD; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == EventType.ATTACKER_DECLARED && event.getSourceId().equals(this.getSourceId())) { return true; } - if (event.getType() == EventType.ENTERS_THE_BATTLEFIELD && event.getTargetId().equals(this.getSourceId()) ) { - return true; - } - return false; + return event.getType() == EventType.ENTERS_THE_BATTLEFIELD && event.getTargetId().equals(this.getSourceId()); } @Override diff --git a/Mage.Sets/src/mage/sets/magic2012/AngelicDestiny.java b/Mage.Sets/src/mage/sets/magic2012/AngelicDestiny.java index dd6e5e7e4a..f9604ea6f2 100644 --- a/Mage.Sets/src/mage/sets/magic2012/AngelicDestiny.java +++ b/Mage.Sets/src/mage/sets/magic2012/AngelicDestiny.java @@ -28,11 +28,10 @@ package mage.sets.magic2012; import java.util.UUID; - -import mage.constants.*; import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.continuous.AddCardSubtypeAttachedEffect; @@ -42,6 +41,12 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.FlyingAbility; 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; @@ -56,19 +61,27 @@ public class AngelicDestiny extends CardImpl { this.expansionSetCode = "M12"; this.subtype.add("Aura"); - this.color.setWhite(true); - + // 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(4, 4, Duration.WhileOnBattlefield))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AddCardSubtypeAttachedEffect("Angel", Duration.WhileOnBattlefield, AttachmentType.AURA))); + // Enchanted creature gets +4/+4, has flying and first strike, and is an Angel in addition to its other types. + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(4, 4, Duration.WhileOnBattlefield)); + Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); + effect.setText(", has flying"); + ability.addEffect(effect); + effect = new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA); + effect.setText("and first strike"); + ability.addEffect(effect); + effect = new AddCardSubtypeAttachedEffect("Angel", Duration.WhileOnBattlefield, AttachmentType.AURA); + effect.setText(", and is an Angel in addition to its other types"); + ability.addEffect(effect); + this.addAbility(ability); + // When enchanted creature dies, return Angelic Destiny to its owner's hand. this.addAbility(new DiesAttachedTriggeredAbility(new ReturnToHandSourceEffect(), "enchanted creature")); } diff --git a/Mage.Sets/src/mage/sets/magic2012/GrandAbolisher.java b/Mage.Sets/src/mage/sets/magic2012/GrandAbolisher.java index 714eac76ea..e08b5280a8 100644 --- a/Mage.Sets/src/mage/sets/magic2012/GrandAbolisher.java +++ b/Mage.Sets/src/mage/sets/magic2012/GrandAbolisher.java @@ -106,30 +106,24 @@ class GrandAbolisherEffect extends ContinuousRuleModifyingEffectImpl { } @Override - public boolean applies(GameEvent event, Ability source, Game game) { - boolean spell = event.getType() == GameEvent.EventType.CAST_SPELL; - boolean activated = event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; - if ((spell || activated) && game.getActivePlayerId().equals(source.getControllerId()) && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { - - if (spell) { - return true; - } - - // check source of activated ability - Permanent permanent = game.getPermanent(event.getSourceId()); - if (permanent != null) { - return permanent.getCardType().contains(CardType.ARTIFACT) || permanent.getCardType().contains(CardType.CREATURE) - || permanent.getCardType().contains(CardType.ENCHANTMENT); - } else { - MageObject object = game.getObject(event.getSourceId()); - if (object != null) { - return object.getCardType().contains(CardType.ARTIFACT) || object.getCardType().contains(CardType.CREATURE) - || object.getCardType().contains(CardType.ENCHANTMENT); - } - } - } - - return false; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; } + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (game.getActivePlayerId().equals(source.getControllerId()) && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { + switch(event.getType()) { + case CAST_SPELL: + return true; + case ACTIVATE_ABILITY: + Permanent permanent = game.getPermanent(event.getSourceId()); + if (permanent != null) { + return permanent.getCardType().contains(CardType.ARTIFACT) || permanent.getCardType().contains(CardType.CREATURE) + || permanent.getCardType().contains(CardType.ENCHANTMENT); + } + } + } + return false; + } } diff --git a/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java b/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java index d86941d470..1835e37f31 100644 --- a/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java +++ b/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java @@ -36,6 +36,7 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.MageInt; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -60,7 +61,6 @@ public class SphinxOfUthuun extends CardImpl { this.expansionSetCode = "M12"; this.subtype.add("Sphinx"); - this.color.setBlue(true); this.power = new MageInt(5); this.toughness = new MageInt(6); @@ -97,7 +97,8 @@ class SphinxOfUthuunEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - if (player == null) { + MageObject sourceObject = source.getSourceObject(game); + if (player == null || sourceObject == null) { return false; } @@ -110,7 +111,7 @@ class SphinxOfUthuunEffect extends OneShotEffect { game.setZone(card.getId(), Zone.PICK); } } - player.revealCards("Sphinx of Uthuun", cards, game); + player.revealCards(sourceObject.getLogName(), cards, game); Set opponents = game.getOpponents(source.getControllerId()); if (!opponents.isEmpty()) { @@ -148,7 +149,7 @@ class SphinxOfUthuunEffect extends OneShotEffect { pile2Zone = Zone.GRAVEYARD; } - StringBuilder sb = new StringBuilder("Sphinx of Uthuun: Pile 1, going to ").append(pile1Zone.equals(Zone.HAND)?"Hand":"Graveyard").append (": "); + StringBuilder sb = new StringBuilder(sourceObject.getLogName()).append(": Pile 1, going to ").append(pile1Zone.equals(Zone.HAND)?"Hand":"Graveyard").append (": "); int i = 0; for (UUID cardUuid : pile1CardsIds) { i++; @@ -163,7 +164,7 @@ class SphinxOfUthuunEffect extends OneShotEffect { } game.informPlayers(sb.toString()); - sb = new StringBuilder("Sphinx of Uthuun: Pile 2, going to ").append(pile2Zone.equals(Zone.HAND)?"Hand":"Graveyard").append (":"); + sb = new StringBuilder(sourceObject.getLogName()).append(": Pile 2, going to ").append(pile2Zone.equals(Zone.HAND)?"Hand":"Graveyard").append (":"); i = 0; for (UUID cardUuid : pile2CardsIds) { Card card = game.getCard(cardUuid); diff --git a/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java b/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java index f75decaaa2..24482d0267 100644 --- a/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java +++ b/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java @@ -131,7 +131,7 @@ class ShimianSpecterEffect extends OneShotEffect { if (chosenCard != null) { for (Card checkCard : targetPlayer.getGraveyard().getCards(game)) { if (checkCard.getName().equals(chosenCard.getName())) { - controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } @@ -141,7 +141,7 @@ class ShimianSpecterEffect extends OneShotEffect { for(UUID cardId: targetHandCards.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } } } @@ -154,7 +154,7 @@ class ShimianSpecterEffect extends OneShotEffect { for(UUID cardId: targetCardsLibrary.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/magic2013/Spelltwine.java b/Mage.Sets/src/mage/sets/magic2013/Spelltwine.java index de2855426e..4500412d84 100644 --- a/Mage.Sets/src/mage/sets/magic2013/Spelltwine.java +++ b/Mage.Sets/src/mage/sets/magic2013/Spelltwine.java @@ -106,10 +106,10 @@ class SpelltwineEffect extends OneShotEffect { Card cardTwo = game.getCard(source.getTargets().get(1).getFirstTarget()); if (controller != null) { if (cardOne != null) { - controller.moveCardToExileWithInfo(cardOne, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(cardOne, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } if (cardTwo != null) { - controller.moveCardToExileWithInfo(cardTwo, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(cardTwo, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } boolean castCardOne = true; if (cardOne != null && controller.chooseUse(Outcome.Neutral, "Cast the copy of " + cardOne.getName() + " first?", game)) { diff --git a/Mage.Sets/src/mage/sets/magic2013/Thragtusk.java b/Mage.Sets/src/mage/sets/magic2013/Thragtusk.java index 126c8496a0..a0b703e5e7 100644 --- a/Mage.Sets/src/mage/sets/magic2013/Thragtusk.java +++ b/Mage.Sets/src/mage/sets/magic2013/Thragtusk.java @@ -50,7 +50,7 @@ public class Thragtusk extends CardImpl { this.expansionSetCode = "M13"; this.subtype.add("Beast"); - this.color.setGreen(true); + this.power = new MageInt(5); this.toughness = new MageInt(3); diff --git a/Mage.Sets/src/mage/sets/magic2014/BanisherPriest.java b/Mage.Sets/src/mage/sets/magic2014/BanisherPriest.java index 17b5cbcdbb..527bac746a 100644 --- a/Mage.Sets/src/mage/sets/magic2014/BanisherPriest.java +++ b/Mage.Sets/src/mage/sets/magic2014/BanisherPriest.java @@ -103,11 +103,11 @@ class BanisherPriestExileEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); // If Banisher Priest leaves the battlefield before its triggered ability resolves, // the target creature won't be exiled. if (permanent != null) { - return new ExileTargetEffect(CardUtil.getObjectExileZoneId(game, permanent), permanent.getLogName()).apply(game, source); + return new ExileTargetEffect(CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()), permanent.getLogName()).apply(game, source); } return false; } diff --git a/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java b/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java index e6d2f6bc1f..d563262834 100644 --- a/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java +++ b/Mage.Sets/src/mage/sets/magic2014/ChandraPyromaster.java @@ -215,7 +215,7 @@ class ChandraPyromasterEffect2 extends OneShotEffect { Library library = controller.getLibrary(); Card card = library.removeFromTop(game); if (card != null) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), "Chandra Pyromaster ", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, source.getSourceId(), "Chandra Pyromaster ", source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new ChandraPyromasterCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java b/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java index 37f8166f32..4123b44e3e 100644 --- a/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java +++ b/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java @@ -113,20 +113,23 @@ class FiendslayerPaladinEffect extends ContinuousRuleModifyingEffectImpl { } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TARGET; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.TARGET) { - Card targetCard = game.getCard(event.getTargetId()); - StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId()); - if (targetCard != null && stackObject != null && targetCard.getId().equals(source.getSourceId())) { - if (stackObject.getColor().contains(ObjectColor.BLACK) - || stackObject.getColor().contains(ObjectColor.RED)) { - if (!stackObject.getControllerId().equals(source.getControllerId()) - && stackObject.getCardType().contains(CardType.INSTANT) - || stackObject.getCardType().contains(CardType.SORCERY)) { - return true; - } + Card targetCard = game.getCard(event.getTargetId()); + StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId()); + if (targetCard != null && stackObject != null && targetCard.getId().equals(source.getSourceId())) { + if (stackObject.getColor().contains(ObjectColor.BLACK) + || stackObject.getColor().contains(ObjectColor.RED)) { + if (!stackObject.getControllerId().equals(source.getControllerId()) + && stackObject.getCardType().contains(CardType.INSTANT) + || stackObject.getCardType().contains(CardType.SORCERY)) { + return true; } } } diff --git a/Mage.Sets/src/mage/sets/magic2014/SavageSummoning.java b/Mage.Sets/src/mage/sets/magic2014/SavageSummoning.java index db2399fb71..63694af386 100644 --- a/Mage.Sets/src/mage/sets/magic2014/SavageSummoning.java +++ b/Mage.Sets/src/mage/sets/magic2014/SavageSummoning.java @@ -132,7 +132,7 @@ class SavageSummoningAsThoughEffect extends AsThoughEffectImpl { if (watcher.isSavageSummoningSpellActive()) { Card card = game.getCard(sourceId); if (card != null && card.getCardType().contains(CardType.CREATURE) && card.getOwnerId().equals(source.getControllerId())) { - return card.getSpellAbility().isInUseableZone(game, card, false); + return card.getSpellAbility().isInUseableZone(game, card, null); } } return false; diff --git a/Mage.Sets/src/mage/sets/magic2015/PerilousVault.java b/Mage.Sets/src/mage/sets/magic2015/PerilousVault.java index c62fbd66d9..c2a8ed2356 100644 --- a/Mage.Sets/src/mage/sets/magic2015/PerilousVault.java +++ b/Mage.Sets/src/mage/sets/magic2015/PerilousVault.java @@ -95,7 +95,7 @@ class PerilousVaultEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { - controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.HAND, true); } return true; } diff --git a/Mage.Sets/src/mage/sets/magic2015/Phytotitan.java b/Mage.Sets/src/mage/sets/magic2015/Phytotitan.java index e8aef60a63..54098ff347 100644 --- a/Mage.Sets/src/mage/sets/magic2015/Phytotitan.java +++ b/Mage.Sets/src/mage/sets/magic2015/Phytotitan.java @@ -94,7 +94,7 @@ class PhytotitanEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/magic2015/RotfeasterMaggot.java b/Mage.Sets/src/mage/sets/magic2015/RotfeasterMaggot.java index 4cc03f5006..81c652c69f 100644 --- a/Mage.Sets/src/mage/sets/magic2015/RotfeasterMaggot.java +++ b/Mage.Sets/src/mage/sets/magic2015/RotfeasterMaggot.java @@ -97,7 +97,7 @@ class RotfeasterMaggotExileEffect extends OneShotEffect { Card targetCard = game.getCard(getTargetPointer().getFirst(game, source)); if (targetCard != null) { if (game.getState().getZone(targetCard.getId()).equals(Zone.GRAVEYARD)) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } controller.gainLife(targetCard.getToughness().getValue(), game); return true; diff --git a/Mage.Sets/src/mage/sets/mediainserts/OjutaisCommand.java b/Mage.Sets/src/mage/sets/mediainserts/OjutaisCommand.java new file mode 100644 index 0000000000..7179988e6e --- /dev/null +++ b/Mage.Sets/src/mage/sets/mediainserts/OjutaisCommand.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.mediainserts; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class OjutaisCommand extends mage.sets.dragonsoftarkir.OjutaisCommand { + + public OjutaisCommand(UUID ownerId) { + super(ownerId); + this.cardNumber = 106; + this.expansionSetCode = "MBP"; + this.rarity = Rarity.SPECIAL; + } + + public OjutaisCommand(final OjutaisCommand card) { + super(card); + } + + @Override + public OjutaisCommand copy() { + return new OjutaisCommand(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mediainserts/ShamanicRevelation.java b/Mage.Sets/src/mage/sets/mediainserts/ShamanicRevelation.java new file mode 100644 index 0000000000..7cc4a651b9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mediainserts/ShamanicRevelation.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.mediainserts; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ShamanicRevelation extends mage.sets.fatereforged.ShamanicRevelation { + + public ShamanicRevelation(UUID ownerId) { + super(ownerId); + this.cardNumber = 105; + this.expansionSetCode = "MBP"; + this.rarity = Rarity.SPECIAL; + } + + public ShamanicRevelation(final ShamanicRevelation card) { + super(card); + } + + @Override + public ShamanicRevelation copy() { + return new ShamanicRevelation(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/SpidersilkArmor.java b/Mage.Sets/src/mage/sets/mercadianmasques/SpidersilkArmor.java new file mode 100644 index 0000000000..4a3cb1541e --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/SpidersilkArmor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mercadianmasques; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class SpidersilkArmor extends mage.sets.knightsvsdragons.SpidersilkArmor { + + public SpidersilkArmor(UUID ownerId) { + super(ownerId); + this.cardNumber = 273; + this.expansionSetCode = "MMQ"; + } + + public SpidersilkArmor(final SpidersilkArmor card) { + super(card); + } + + @Override + public SpidersilkArmor copy() { + return new SpidersilkArmor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mirage/ForbiddenCrypt.java b/Mage.Sets/src/mage/sets/mirage/ForbiddenCrypt.java index d9f33e7270..2bfde6b0e9 100644 --- a/Mage.Sets/src/mage/sets/mirage/ForbiddenCrypt.java +++ b/Mage.Sets/src/mage/sets/mirage/ForbiddenCrypt.java @@ -155,12 +155,12 @@ class ForbiddenCryptPutIntoYourGraveyardReplacementEffect extends ReplacementEff if (((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = ((ZoneChangeEvent) event).getTarget(); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone()); + return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone(), true); } } else { Card card = game.getCard(event.getTargetId()); if (card != null) { - return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone()); + return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone(), true); } } return false; diff --git a/Mage.Sets/src/mage/sets/mirage/RockBasilisk.java b/Mage.Sets/src/mage/sets/mirage/RockBasilisk.java index 2da903f01e..fcf917cd3d 100644 --- a/Mage.Sets/src/mage/sets/mirage/RockBasilisk.java +++ b/Mage.Sets/src/mage/sets/mirage/RockBasilisk.java @@ -135,7 +135,7 @@ class RockBasiliskEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/mirage/SacredMesa.java b/Mage.Sets/src/mage/sets/mirage/SacredMesa.java index 9ff98ab904..e04406c23b 100644 --- a/Mage.Sets/src/mage/sets/mirage/SacredMesa.java +++ b/Mage.Sets/src/mage/sets/mirage/SacredMesa.java @@ -52,9 +52,9 @@ import mage.target.common.TargetControlledPermanent; */ public class SacredMesa extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("Pegasus"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Pegasus"); static { - filter.add(new SubtypePredicate("a Pegasus")); + filter.add(new SubtypePredicate("Pegasus")); } public SacredMesa(UUID ownerId) { diff --git a/Mage.Sets/src/mage/sets/mirage/ShallowGrave.java b/Mage.Sets/src/mage/sets/mirage/ShallowGrave.java index f48674a193..0818913401 100644 --- a/Mage.Sets/src/mage/sets/mirage/ShallowGrave.java +++ b/Mage.Sets/src/mage/sets/mirage/ShallowGrave.java @@ -113,7 +113,7 @@ class ShallowGraveEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/mirrodin/AuriokSteelshaper.java b/Mage.Sets/src/mage/sets/mirrodin/AuriokSteelshaper.java new file mode 100644 index 0000000000..bc0d94da41 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mirrodin/AuriokSteelshaper.java @@ -0,0 +1,118 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mirrodin; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.EquippedCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.keyword.EquipAbility; +import mage.cards.CardImpl; +import mage.constants.*; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.util.CardUtil; + +/** + * + * @author Jason E. Wall + + */ +public class AuriokSteelshaper extends CardImpl { + private static final FilterCreaturePermanent soldiersOrKnights = new FilterCreaturePermanent(); + + static { + soldiersOrKnights.add(Predicates.or( + new SubtypePredicate("Soldier"), + new SubtypePredicate("Knight") + )); + } + + public AuriokSteelshaper(UUID ownerId) { + super(ownerId, 4, "Auriok Steelshaper", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "MRD"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Equip costs you pay cost {1} less. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new AuriokSteelshaperCostReductionEffect())); + + // As long as Auriok Steelshaper is equipped, each creature you control that's a Soldier or a Knight gets +1/+1. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, soldiersOrKnights, false), + EquippedCondition.getInstance(), + "As long as {this} is equipped, each creature you control that's a Soldier or a Knight gets +1/+1" + ))); + } + + public AuriokSteelshaper(final AuriokSteelshaper card) { + super(card); + } + + @Override + public AuriokSteelshaper copy() { + return new AuriokSteelshaper(this); + } +} + +class AuriokSteelshaperCostReductionEffect extends CostModificationEffectImpl { + + public AuriokSteelshaperCostReductionEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); + staticText = "Equip costs you pay cost {1} less"; + } + + public AuriokSteelshaperCostReductionEffect(AuriokSteelshaperCostReductionEffect effect) { + super(effect); + } + + @Override + public AuriokSteelshaperCostReductionEffect copy() { + return new AuriokSteelshaperCostReductionEffect(this); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + CardUtil.reduceCost(abilityToModify, 1); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + return abilityToModify.getControllerId().equals(source.getControllerId()) && + (abilityToModify instanceof EquipAbility); + } +} diff --git a/Mage.Sets/src/mage/sets/mirrodin/IsochronScepter.java b/Mage.Sets/src/mage/sets/mirrodin/IsochronScepter.java index f8a1af2045..9ba91ef89f 100644 --- a/Mage.Sets/src/mage/sets/mirrodin/IsochronScepter.java +++ b/Mage.Sets/src/mage/sets/mirrodin/IsochronScepter.java @@ -62,7 +62,7 @@ public class IsochronScepter extends CardImpl { this.expansionSetCode = "MRD"; // Imprint - When Isochron Scepter enters the battlefield, you may exile an instant card with converted mana cost 2 or less from your hand. - this.addAbility(new EntersBattlefieldTriggeredAbility(new IsochronScepterImprintEffect(), true, "Imprint - ")); + this.addAbility(new EntersBattlefieldTriggeredAbility(new IsochronScepterImprintEffect(), true, "Imprint — ")); // {2}, {tap}: You may copy the exiled card. If you do, you may cast the copy without paying its mana cost. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new IsochronScepterCopyEffect(), new GenericManaCost(2)); @@ -109,7 +109,7 @@ class IsochronScepterImprintEffect extends OneShotEffect { && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getLogName() +" (Imprint)", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getLogName() +" (Imprint)", source.getSourceId(), game, Zone.HAND, true); Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { permanent.imprint(card.getId(), game); diff --git a/Mage.Sets/src/mage/sets/mirrodin/ScrabblingClaws.java b/Mage.Sets/src/mage/sets/mirrodin/ScrabblingClaws.java index 06f9416b23..22f3b27323 100644 --- a/Mage.Sets/src/mage/sets/mirrodin/ScrabblingClaws.java +++ b/Mage.Sets/src/mage/sets/mirrodin/ScrabblingClaws.java @@ -106,7 +106,7 @@ class ScrabblingClawsEffect extends OneShotEffect { if (targetPlayer.chooseTarget(Outcome.Exile, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { - targetPlayer.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + targetPlayer.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } return true; } diff --git a/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java b/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java index f0ff3462b7..ace0be33b2 100644 --- a/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java +++ b/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java @@ -130,7 +130,7 @@ class SoulFoundryImprintEffect extends OneShotEffect { && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getLogName() + " (Imprint)", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getLogName() + " (Imprint)", source.getSourceId(), game, Zone.HAND, true); Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { permanent.imprint(card.getId(), game); diff --git a/Mage.Sets/src/mage/sets/mirrodin/SpoilsOfTheVault.java b/Mage.Sets/src/mage/sets/mirrodin/SpoilsOfTheVault.java index 508c5ee8e6..a7b79feb94 100644 --- a/Mage.Sets/src/mage/sets/mirrodin/SpoilsOfTheVault.java +++ b/Mage.Sets/src/mage/sets/mirrodin/SpoilsOfTheVault.java @@ -106,7 +106,7 @@ class SpoilsOfTheVaultEffect extends OneShotEffect { break; } else{ - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } else{ diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/ContestedWarZone.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/ContestedWarZone.java index f538f300c1..18aa0237fd 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/ContestedWarZone.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/ContestedWarZone.java @@ -132,7 +132,7 @@ class ContestedWarZoneAbility extends TriggeredAbilityImpl { class ContestedWarZoneEffect extends ContinuousEffectImpl { public ContestedWarZoneEffect() { - super(Duration.EndOfGame, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); + super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); } public ContestedWarZoneEffect(final ContestedWarZoneEffect effect) { @@ -146,10 +146,12 @@ class ContestedWarZoneEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); UUID controllerId = (UUID) game.getState().getValue(source.getSourceId().toString()); if (permanent != null && controllerId != null) { return permanent.changeControllerId(controllerId, game); + } else { + discard(); } return false; } diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java index d7f56e4088..7ce2921115 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java @@ -106,7 +106,7 @@ class GruesomeEncoreEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/VirulentWound.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/VirulentWound.java index a05353ec26..b5382f5910 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/VirulentWound.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/VirulentWound.java @@ -97,7 +97,7 @@ class VirulentWoundEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new VirulentWoundDelayedTriggeredAbility(source.getFirstTarget()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java b/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java index 99af9949f9..f86939e014 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java +++ b/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java @@ -111,7 +111,7 @@ class EarwigSquadEffect extends OneShotEffect { for (UUID targetId : targets) { Card card = opponent.getLibrary().remove(targetId, game); if (card != null) { - player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/modernmasters/Epochrasite.java b/Mage.Sets/src/mage/sets/modernmasters/Epochrasite.java index 3bd59ded48..61a7cc1e97 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/Epochrasite.java +++ b/Mage.Sets/src/mage/sets/modernmasters/Epochrasite.java @@ -29,24 +29,21 @@ package mage.sets.modernmasters; import java.util.UUID; import mage.MageInt; +import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.common.DiesTriggeredAbility; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.condition.InvertCondition; import mage.abilities.condition.common.CastFromHandCondition; -import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.continuous.SourceEffect; +import mage.abilities.effects.common.continuous.GainSuspendEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.SuspendAbility; import mage.cards.Card; 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.constants.Zone; import mage.counters.CounterType; import mage.game.Game; @@ -111,40 +108,12 @@ class EpochrasiteEffect extends OneShotEffect { if (controller != null && card != null) { if (game.getState().getZone(card.getId()).equals(Zone.GRAVEYARD)) { UUID exileId = SuspendAbility.getSuspendExileId(controller.getId(), game); - controller.moveCardToExileWithInfo(card, exileId, "Suspended cards of " + controller.getName(), source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, exileId, "Suspended cards of " + controller.getName(), source.getSourceId(), game, Zone.GRAVEYARD, true); card.addCounters(CounterType.TIME.createInstance(3), game); - game.addEffect(new GainSuspendEffect(), source); + game.addEffect(new GainSuspendEffect(new MageObjectReference(card, game)), source); } return true; } return false; } } - -class GainSuspendEffect extends ContinuousEffectImpl implements SourceEffect { - - public GainSuspendEffect() { - super(Duration.Custom, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - staticText = "{this} gains suspend"; - } - - public GainSuspendEffect(final GainSuspendEffect effect) { - super(effect); - } - - @Override - public GainSuspendEffect copy() { - return new GainSuspendEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Card card = game.getCard(source.getSourceId()); - if (card != null && game.getState().getZone(card.getId()).equals(Zone.EXILED)) { - SuspendAbility.addSuspendTemporaryToCard(card, source, game); - } else { - discard(); - } - return true; - } -} diff --git a/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java b/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java index 64be138393..efaa8d7b16 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java +++ b/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java @@ -37,18 +37,14 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.ExileFromHandCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.continuous.SourceEffect; +import mage.abilities.effects.common.continuous.GainSuspendEffect; import mage.abilities.keyword.SuspendAbility; import mage.cards.Card; 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.constants.Zone; import mage.counters.CounterType; import mage.filter.common.FilterNonlandCard; @@ -124,10 +120,10 @@ class JhoiraOfTheGhituSuspendEffect extends OneShotEffect { boolean hasSuspend = card.getAbilities().containsClass(SuspendAbility.class); UUID exileId = SuspendAbility.getSuspendExileId(controller.getId(), game); - if (controller.moveCardToExileWithInfo(card, exileId, "Suspended cards of " + controller.getName(), source.getSourceId(), game, Zone.HAND)) { + if (controller.moveCardToExileWithInfo(card, exileId, "Suspended cards of " + controller.getName(), source.getSourceId(), game, Zone.HAND, true)) { card.addCounters(CounterType.TIME.createInstance(4), game); if (!hasSuspend) { - game.addEffect(new JhoiraGainSuspendEffect(new MageObjectReference(card, game)), source); + game.addEffect(new GainSuspendEffect(new MageObjectReference(card, game)), source); } game.informPlayers(controller.getName() + " suspends 4 - " + card.getName()); return true; @@ -137,34 +133,3 @@ class JhoiraOfTheGhituSuspendEffect extends OneShotEffect { } } -class JhoiraGainSuspendEffect extends ContinuousEffectImpl implements SourceEffect { - - MageObjectReference mor; - - public JhoiraGainSuspendEffect(MageObjectReference mor) { - super(Duration.Custom, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - this.mor = mor; - staticText = "{this} gains suspend"; - } - - public JhoiraGainSuspendEffect(final JhoiraGainSuspendEffect effect) { - super(effect); - this.mor = effect.mor; - } - - @Override - public JhoiraGainSuspendEffect copy() { - return new JhoiraGainSuspendEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Card card = game.getCard(mor.getSourceId()); - if (card != null && mor.refersTo(card, game) && game.getState().getZone(card.getId()).equals(Zone.EXILED)) { - SuspendAbility.addSuspendTemporaryToCard(card, source, game); - } else { - discard(); - } - return true; - } -} diff --git a/Mage.Sets/src/mage/sets/modernmasters/LatchkeyFaerie.java b/Mage.Sets/src/mage/sets/modernmasters/LatchkeyFaerie.java index 16f6b680af..c3a61d5b0a 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/LatchkeyFaerie.java +++ b/Mage.Sets/src/mage/sets/modernmasters/LatchkeyFaerie.java @@ -51,14 +51,15 @@ public class LatchkeyFaerie extends CardImpl { this.subtype.add("Faerie"); this.subtype.add("Rogue"); - this.color.setBlue(true); this.power = new MageInt(3); this.toughness = new MageInt(1); // Flying this.addAbility(FlyingAbility.getInstance()); + // Prowl {2}{U} this.addAbility(new ProwlAbility(this, "{2}{U}")); + // When Latchkey Faerie enters the battlefield, if its prowl cost was paid, draw a card. EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false); this.addAbility(new ConditionalTriggeredAbility(ability, ProwlCondition.getInstance(), diff --git a/Mage.Sets/src/mage/sets/modernmasters/MarshFlitter.java b/Mage.Sets/src/mage/sets/modernmasters/MarshFlitter.java index b8a54e1a3c..56a97459bb 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/MarshFlitter.java +++ b/Mage.Sets/src/mage/sets/modernmasters/MarshFlitter.java @@ -64,7 +64,6 @@ public class MarshFlitter extends CardImpl { this.subtype.add("Faerie"); this.subtype.add("Rogue"); - this.color.setBlack(true); this.power = new MageInt(1); this.toughness = new MageInt(1); diff --git a/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java b/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java index 99fd63946d..bd58c90546 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java +++ b/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java @@ -97,7 +97,12 @@ class MoltenDisasterSplitSecondEffect extends ContinuousRuleModifyingEffectImpl public String getInfoMessage(Ability source, GameEvent event, Game game) { return "You can't cast spells or activate abilities that aren't mana abilities (Split second)."; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.CAST_SPELL) { diff --git a/Mage.Sets/src/mage/sets/modernmasters/ToothAndNail.java b/Mage.Sets/src/mage/sets/modernmasters/ToothAndNail.java index 48720ba022..3902ef10ad 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/ToothAndNail.java +++ b/Mage.Sets/src/mage/sets/modernmasters/ToothAndNail.java @@ -55,11 +55,9 @@ public class ToothAndNail extends CardImpl { super(ownerId, 170, "Tooth and Nail", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{5}{G}{G}"); this.expansionSetCode = "MMA"; - this.color.setGreen(true); - // Choose one - // Search your library for up to two creature cards, reveal them, put them into your hand, then shuffle your library; - this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, new FilterCreatureCard()))); + this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, new FilterCreatureCard()), true)); // or put up to two creature cards from your hand onto the battlefield. Mode mode = new Mode(); mode.getEffects().add(new ToothAndNailPutCreatureOnBattlefieldEffect()); diff --git a/Mage.Sets/src/mage/sets/morningtide/SharedAnimosity.java b/Mage.Sets/src/mage/sets/morningtide/SharedAnimosity.java index b19d1690d3..11e417763c 100644 --- a/Mage.Sets/src/mage/sets/morningtide/SharedAnimosity.java +++ b/Mage.Sets/src/mage/sets/morningtide/SharedAnimosity.java @@ -62,8 +62,6 @@ public class SharedAnimosity extends CardImpl { super(ownerId, 104, "Shared Animosity", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); this.expansionSetCode = "MOR"; - this.color.setRed(true); - // Whenever a creature you control attacks, it gets +1/+0 until end of turn for each other attacking creature that shares a creature type with it. this.addAbility(new AttacksCreatureYouControlTriggeredAbility(new SharedAnimosityEffect(), false, true)); } @@ -102,17 +100,21 @@ class SharedAnimosityEffect extends ContinuousEffectImpl { super.init(source, game); Permanent permanent = game.getPermanent(this.targetPointer.getFirst(game, source)); if (permanent != null) { - + FilterCreaturePermanent filter = new FilterCreaturePermanent(); filter.add(Predicates.not(new PermanentIdPredicate(this.targetPointer.getFirst(game, source)))); filter.add(new AttackingPredicate()); - boolean isChangeling = false; - for(Ability ability : permanent.getAbilities()){ - if(ability instanceof ChangelingAbility){ - isChangeling = true; - } - } - if(!isChangeling){ + boolean allCreatureTypes = false; + if (permanent.getSubtype().contains(ChangelingAbility.ALL_CREATURE_TYPE)) { + allCreatureTypes = true; + } else { + for(Ability ability : permanent.getAbilities()){ + if(ability instanceof ChangelingAbility){ + allCreatureTypes = true; + } + } + } + if(!allCreatureTypes){ ArrayList> predicateList = new ArrayList<>(); for(String subtype : permanent.getSubtype()){ predicateList.add(new SubtypePredicate(subtype)); diff --git a/Mage.Sets/src/mage/sets/nemesis/ParallaxWave.java b/Mage.Sets/src/mage/sets/nemesis/ParallaxWave.java index 2bf3c7107d..3e902629d8 100644 --- a/Mage.Sets/src/mage/sets/nemesis/ParallaxWave.java +++ b/Mage.Sets/src/mage/sets/nemesis/ParallaxWave.java @@ -45,6 +45,7 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.game.ExileZone; import mage.game.Game; +import mage.game.permanent.PermanentToken; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.util.CardUtil; @@ -104,7 +105,8 @@ class ParallaxWaveEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null) { - UUID exileZoneId = CardUtil.getObjectExileZoneId(game, sourceObject); + int zoneChangeCounter = (sourceObject instanceof PermanentToken) ? source.getSourceObjectZoneChangeCounter() : source.getSourceObjectZoneChangeCounter() -1; + UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter); if (exileZoneId != null) { ExileZone exileZone = game.getExile().getExileZone(exileZoneId); if (exileZone != null) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/ChainedThroatseeker.java b/Mage.Sets/src/mage/sets/newphyrexia/ChainedThroatseeker.java index d74d06e479..20e397dfdc 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/ChainedThroatseeker.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/ChainedThroatseeker.java @@ -28,18 +28,19 @@ package mage.sets.newphyrexia; import java.util.UUID; - -import mage.constants.*; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.RestrictionEffect; import mage.abilities.keyword.InfectAbility; 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.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; import mage.players.Player; /** @@ -53,12 +54,14 @@ public class ChainedThroatseeker extends CardImpl { this.expansionSetCode = "NPH"; this.subtype.add("Horror"); - this.color.setBlue(true); this.power = new MageInt(5); this.toughness = new MageInt(5); + // Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) this.addAbility(InfectAbility.getInstance()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ChainedThroatseekerEffect())); + + // Chained Throatseeker can't attack unless defending player is poisoned. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ChainedThroatseekerCantAttackEffect())); } public ChainedThroatseeker(final ChainedThroatseeker card) { @@ -71,43 +74,36 @@ public class ChainedThroatseeker extends CardImpl { } } -class ChainedThroatseekerEffect extends ReplacementEffectImpl { +class ChainedThroatseekerCantAttackEffect extends RestrictionEffect { - public ChainedThroatseekerEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment); + public ChainedThroatseekerCantAttackEffect() { + super(Duration.WhileOnBattlefield); staticText = "{this} can't attack unless defending player is poisoned"; } - public ChainedThroatseekerEffect(final ChainedThroatseekerEffect effect) { + public ChainedThroatseekerCantAttackEffect(final ChainedThroatseekerCantAttackEffect effect) { super(effect); } @Override - public ChainedThroatseekerEffect copy() { - return new ChainedThroatseekerEffect(this); + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getId().equals(source.getSourceId()); } @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.DECLARE_ATTACKER && source.getSourceId().equals(event.getSourceId())) { - Player targetPlayer = game.getPlayer(event.getTargetId()); - if (targetPlayer != null) { - if (targetPlayer.getCounters().containsKey(CounterType.POISON)) { - return true; - } + public boolean canAttack(UUID defenderId, Ability source, Game game) { + Player targetPlayer = game.getPlayer(defenderId); + if (targetPlayer != null) { + if (targetPlayer.getCounters().containsKey(CounterType.POISON)) { + return true; } } return false; } -} + @Override + public ChainedThroatseekerCantAttackEffect copy() { + return new ChainedThroatseekerCantAttackEffect(this); + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java b/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java index 13e7d3e523..8a890c5eb2 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java @@ -96,7 +96,7 @@ class ExclusionRitualImprintEffect extends OneShotEffect { Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(game, source)); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && sourcePermanent != null && targetPermanent != null) { - controller.moveCardToExileWithInfo(targetPermanent, getId(), sourcePermanent.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(targetPermanent, getId(), sourcePermanent.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); sourcePermanent.imprint(targetPermanent.getId(), game); } return true; @@ -117,18 +117,21 @@ class ExclusionRitualReplacementEffect extends ContinuousRuleModifyingEffectImpl ExclusionRitualReplacementEffect(final ExclusionRitualReplacementEffect 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.getType() == GameEvent.EventType.CAST_SPELL) { - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - Card card = game.getCard(event.getSourceId()); - if (sourcePermanent != null && card != null) { - if (sourcePermanent.getImprinted().size() > 0) { - Card imprintedCard = game.getCard(sourcePermanent.getImprinted().get(0)); - if (imprintedCard != null) { - return card.getName().equals(imprintedCard.getName()); - } + Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + Card card = game.getCard(event.getSourceId()); + if (sourcePermanent != null && card != null) { + if (sourcePermanent.getImprinted().size() > 0) { + Card imprintedCard = game.getCard(sourcePermanent.getImprinted().get(0)); + if (imprintedCard != null) { + return card.getName().equals(imprintedCard.getName()); } } } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/KarnLiberated.java b/Mage.Sets/src/mage/sets/newphyrexia/KarnLiberated.java index 261fd6cf29..65334e8147 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/KarnLiberated.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/KarnLiberated.java @@ -149,7 +149,7 @@ class KarnLiberatedEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new KarnLiberatedDelayedTriggeredAbility(exileId); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); game.start(null); return true; diff --git a/Mage.Sets/src/mage/sets/newphyrexia/MyrSuperion.java b/Mage.Sets/src/mage/sets/newphyrexia/MyrSuperion.java index 364e0f6238..e7f2738eac 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/MyrSuperion.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/MyrSuperion.java @@ -30,6 +30,8 @@ package mage.sets.newphyrexia; import java.util.UUID; import mage.MageInt; import mage.abilities.StaticAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.InfoEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -53,7 +55,7 @@ public class MyrSuperion extends CardImpl { this.toughness = new MageInt(6); // Spend only mana produced by creatures to cast Myr Superion. - this.addAbility(new MyrSuperionStaticAbility()); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("Spend only mana produced by creatures to cast {this}"))); this.getSpellAbility().getManaCostsToPay().setSourceFilter(filter); this.getSpellAbility().getManaCosts().setSourceFilter(filter); } @@ -67,25 +69,3 @@ public class MyrSuperion extends CardImpl { return new MyrSuperion(this); } } - -class MyrSuperionStaticAbility extends StaticAbility { - - public MyrSuperionStaticAbility() { - super(Zone.STACK, null); - } - - public MyrSuperionStaticAbility(MyrSuperionStaticAbility ability) { - super(ability); - } - - @Override - public MyrSuperionStaticAbility copy() { - return new MyrSuperionStaticAbility(this); - } - - @Override - public String getRule() { - return "Spend only mana produced by creatures to cast {this}."; - } - -} diff --git a/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java b/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java index bec57fffa5..f3c673928c 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java @@ -79,30 +79,12 @@ class NornsAnnexReplacementEffect extends ReplacementEffectImpl { NornsAnnexReplacementEffect(NornsAnnexReplacementEffect effect) { super(effect); } - + @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.DECLARE_ATTACKER) { - Player player = game.getPlayer(event.getPlayerId()); - if (player != null && event.getTargetId().equals(source.getControllerId())) { - ManaCostsImpl propagandaTax = new ManaCostsImpl("{WP}"); - if (propagandaTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) && - player.chooseUse(Outcome.Benefit, "Pay {WP} to declare attacker?", game)) { - if (propagandaTax.payOrRollback(source, game, this.getId(), event.getPlayerId())) { - return false; - } - } - } - return true; - } - return false; - } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.DECLARE_ATTACKER) { @@ -119,6 +101,24 @@ class NornsAnnexReplacementEffect extends ReplacementEffectImpl { return false; } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if (player != null && event.getTargetId().equals(source.getControllerId())) { + ManaCostsImpl propagandaTax = new ManaCostsImpl("{WP}"); + if (propagandaTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) && + player.chooseUse(Outcome.Benefit, "Pay {WP} to declare attacker?", game)) { + if (propagandaTax.payOrRollback(source, game, this.getId(), event.getPlayerId())) { + return false; + } + } + return true; + } + return false; + } + + @Override public NornsAnnexReplacementEffect copy() { return new NornsAnnexReplacementEffect(this); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java b/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java index ee03ddf6d0..5f88e32d91 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java @@ -123,7 +123,7 @@ class OmenMachineEffect2 extends OneShotEffect { if (player != null) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { - player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); if (card.getCardType().contains(CardType.LAND)) { player.putOntoBattlefieldWithInfo(card, game, Zone.EXILED, source.getSourceId()); } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianIngester.java b/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianIngester.java index 38e7a51ed3..a9f80f6c4b 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianIngester.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianIngester.java @@ -113,7 +113,7 @@ class PhyrexianIngesterImprintEffect extends OneShotEffect { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); Permanent targetPermanent = game.getPermanent(source.getFirstTarget()); if (targetPermanent != null) { - controller.moveCardToExileWithInfo(targetPermanent, getId(), "Phyrexian Ingester (Imprint)", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(targetPermanent, getId(), "Phyrexian Ingester (Imprint)", source.getSourceId(), game, Zone.BATTLEFIELD, true); sourcePermanent.imprint(targetPermanent.getId(), game); return true; } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java b/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java index b739153282..c4ca04c7f5 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java @@ -59,7 +59,7 @@ public class PhyrexianMetamorph extends CardImpl { super(ownerId, 42, "Phyrexian Metamorph", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{UP}"); this.expansionSetCode = "NPH"; this.subtype.add("Shapeshifter"); - this.color.setBlue(true); + this.power = new MageInt(0); this.toughness = new MageInt(0); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java b/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java index c7274afd37..d7dc520a4a 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java @@ -118,7 +118,7 @@ class PostmortemLungeEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java b/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java index ca58c5fd1c..a9015ce170 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java @@ -103,7 +103,7 @@ class PraetorsGraspEffect extends OneShotEffect { if (controller.searchLibrary(target, game, opponent.getId())) { UUID targetId = target.getFirstTarget(); Card card = opponent.getLibrary().getCard(targetId, game); - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (card != null && exileId != null) { game.informPlayers(controller.getName() + " moves the searched card face down to exile"); card.moveToExile(exileId, sourceObject.getName(), source.getSourceId(), game); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java b/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java index 129cfe2a86..7917f1c3eb 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java @@ -126,7 +126,7 @@ class SurgicalExtractionEffect extends OneShotEffect { for (UUID targetId : targets) { Card targetCard = owner.getGraveyard().get(targetId, game); if (targetCard != null) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } } @@ -140,7 +140,7 @@ class SurgicalExtractionEffect extends OneShotEffect { for (UUID targetId : targets) { Card targetCard = owner.getHand().get(targetId, game); if (targetCard != null) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.HAND, true); } } } @@ -153,7 +153,7 @@ class SurgicalExtractionEffect extends OneShotEffect { for (UUID targetId : targets) { Card targetCard = owner.getLibrary().getCard(targetId, game); if (targetCard != null) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java b/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java index 7d4f0717aa..22e0e3103f 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java @@ -77,16 +77,19 @@ class TorporOrbEffect extends ContinuousRuleModifyingEffectImpl { TorporOrbEffect(final TorporOrbEffect effect) { super(effect); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) { - Ability ability = (Ability) getValue("targetAbility"); - if (ability != null && AbilityType.TRIGGERED.equals(ability.getAbilityType())) { - Permanent p = game.getPermanent(event.getTargetId()); - if (p != null && p.getCardType().contains(CardType.CREATURE)) { - return true; - } + Ability ability = (Ability) getValue("targetAbility"); + if (ability != null && AbilityType.TRIGGERED.equals(ability.getAbilityType())) { + Permanent p = game.getPermanent(event.getTargetId()); + if (p != null && p.getCardType().contains(CardType.CREATURE)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/ninthedition/DreamProwler.java b/Mage.Sets/src/mage/sets/ninthedition/DreamProwler.java new file mode 100644 index 0000000000..99d20b5baf --- /dev/null +++ b/Mage.Sets/src/mage/sets/ninthedition/DreamProwler.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author emerald000 + */ +public class DreamProwler extends mage.sets.tempestremastered.DreamProwler { + + public DreamProwler(UUID ownerId) { + super(ownerId); + this.cardNumber = 74; + this.expansionSetCode = "9ED"; + } + + public DreamProwler(final DreamProwler card) { + super(card); + } + + @Override + public DreamProwler copy() { + return new DreamProwler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ninthedition/FlameWave.java b/Mage.Sets/src/mage/sets/ninthedition/FlameWave.java new file mode 100644 index 0000000000..40f353cd55 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ninthedition/FlameWave.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.ninthedition; + +import java.util.UUID; +import mage.abilities.effects.common.DamageAllControlledTargetEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.target.TargetPlayer; + +/** + * + * @author fireshoes + */ +public class FlameWave extends CardImpl { + + public FlameWave(UUID ownerId) { + super(ownerId, 182, "Flame Wave", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{R}{R}{R}{R}"); + this.expansionSetCode = "9ED"; + + // Flame Wave deals 4 damage to target player and each creature he or she controls. + this.getSpellAbility().addEffect(new DamageTargetEffect(4)); + this.getSpellAbility().addTarget(new TargetPlayer()); + this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(4, new FilterCreaturePermanent())); + } + + public FlameWave(final FlameWave card) { + super(card); + } + + @Override + public FlameWave copy() { + return new FlameWave(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/ninthedition/RathiDragon.java b/Mage.Sets/src/mage/sets/ninthedition/RathiDragon.java new file mode 100644 index 0000000000..d646726e4b --- /dev/null +++ b/Mage.Sets/src/mage/sets/ninthedition/RathiDragon.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.ninthedition; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author fireshoes + */ +public class RathiDragon extends CardImpl { + + private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("two Mountains"); + + static{ + filter.add(new SubtypePredicate("Mountain")); + } + + public RathiDragon(UUID ownerId) { + super(ownerId, 210, "Rathi Dragon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + this.expansionSetCode = "9ED"; + this.subtype.add("Dragon"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Rathi Dragon enters the battlefield, sacrifice it unless you sacrifice two Mountains. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(2, 2, filter, true))))); + } + + public RathiDragon(final RathiDragon card) { + super(card); + } + + @Override + public RathiDragon copy() { + return new RathiDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ninthedition/ShardPhoenix.java b/Mage.Sets/src/mage/sets/ninthedition/ShardPhoenix.java new file mode 100644 index 0000000000..bade537e79 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ninthedition/ShardPhoenix.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.ninthedition; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ShardPhoenix extends mage.sets.tempestremastered.ShardPhoenix { + + public ShardPhoenix(UUID ownerId) { + super(ownerId); + this.cardNumber = 217; + this.expansionSetCode = "9ED"; + this.rarity = Rarity.RARE; + } + + public ShardPhoenix(final ShardPhoenix card) { + super(card); + } + + @Override + public ShardPhoenix copy() { + return new ShardPhoenix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/Divert.java b/Mage.Sets/src/mage/sets/odyssey/Divert.java index 91af687c71..f0755b8e18 100644 --- a/Mage.Sets/src/mage/sets/odyssey/Divert.java +++ b/Mage.Sets/src/mage/sets/odyssey/Divert.java @@ -94,7 +94,7 @@ class DivertEffect extends OneShotEffect { cost.clearPaid(); if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) { - return spell.chooseNewTargets(game, source.getControllerId(), true, true); + return spell.chooseNewTargets(game, source.getControllerId(), true, true, null); } } } diff --git a/Mage.Sets/src/mage/sets/odyssey/Extract.java b/Mage.Sets/src/mage/sets/odyssey/Extract.java index de89b62a74..b3609e4f02 100644 --- a/Mage.Sets/src/mage/sets/odyssey/Extract.java +++ b/Mage.Sets/src/mage/sets/odyssey/Extract.java @@ -97,7 +97,7 @@ class ExtractEffect extends OneShotEffect { if (player.searchLibrary(target, game, targetPlayer.getId())) { Card card = targetPlayer.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { - player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/onslaught/AccursedCentaur.java b/Mage.Sets/src/mage/sets/onslaught/AccursedCentaur.java new file mode 100644 index 0000000000..cc8edfeb96 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/AccursedCentaur.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.onslaught; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.SacrificeControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Sir-Speshkitty + */ +public class AccursedCentaur extends CardImpl { + + public AccursedCentaur(UUID ownerId) { + super(ownerId, 123, "Accursed Centaur", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "ONS"; + this.subtype.add("Zombie"); + this.subtype.add("Centaur"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Accursed Centaur enters the battlefield, sacrifice a creature. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeControllerEffect(new FilterCreaturePermanent(), 1, null))); + } + + public AccursedCentaur(final AccursedCentaur card) { + super(card); + } + + @Override + public AccursedCentaur copy() { + return new AccursedCentaur(this); + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/AstralSlide.java b/Mage.Sets/src/mage/sets/onslaught/AstralSlide.java index 35423169e2..8cc47028c7 100644 --- a/Mage.Sets/src/mage/sets/onslaught/AstralSlide.java +++ b/Mage.Sets/src/mage/sets/onslaught/AstralSlide.java @@ -92,12 +92,12 @@ class AstralSlideEffect extends OneShotEffect { Permanent permanent = game.getPermanent(source.getFirstTarget()); if (permanent != null) { UUID exileId = UUID.randomUUID(); - if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(exileId, Zone.BATTLEFIELD, false)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/onslaught/Gigapede.java b/Mage.Sets/src/mage/sets/onslaught/Gigapede.java index 8edb4894ff..77c462f013 100644 --- a/Mage.Sets/src/mage/sets/onslaught/Gigapede.java +++ b/Mage.Sets/src/mage/sets/onslaught/Gigapede.java @@ -31,6 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.abilities.keyword.ShroudAbility; import mage.cards.CardImpl; @@ -52,7 +53,6 @@ public class Gigapede extends CardImpl { this.expansionSetCode = "ONS"; this.subtype.add("Insect"); - this.color.setGreen(true); this.power = new MageInt(6); this.toughness = new MageInt(1); @@ -76,8 +76,7 @@ public class Gigapede extends CardImpl { class GigapedeTriggerdAbility extends BeginningOfUpkeepTriggeredAbility{ public GigapedeTriggerdAbility(){ - super(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), TargetController.YOU, true); - this.addCost(new DiscardCardCost()); + super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new DiscardCardCost()), TargetController.YOU, false); } public GigapedeTriggerdAbility(GigapedeTriggerdAbility ability) { @@ -104,6 +103,4 @@ class GigapedeTriggerdAbility extends BeginningOfUpkeepTriggeredAbility{ return "At the beginning of your upkeep, if {source} is in your graveyard, you may discard a card. If you do, return {source} to your hand"; } - - -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java b/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java index 994cd3dba2..46b7379d5f 100644 --- a/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java +++ b/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java @@ -122,7 +122,7 @@ class SupremeInquisitorEffect extends OneShotEffect { for (UUID targetCard : targetId) { Card card = targetPlayer.getLibrary().remove(targetCard, game); if (card != null) { - player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java index 58d7ae7178..921db990ae 100644 --- a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java +++ b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/HornetCannon.java @@ -98,7 +98,7 @@ class HornetCannonEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(destroyEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/RithsCharm.java b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/RithsCharm.java new file mode 100644 index 0000000000..58cd5a3c54 --- /dev/null +++ b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/RithsCharm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.phyrexiavsthecoalition; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class RithsCharm extends mage.sets.planeshift.RithsCharm { + + public RithsCharm(UUID ownerId) { + super(ownerId); + this.cardNumber = 60; + this.expansionSetCode = "DDE"; + } + + public RithsCharm(final RithsCharm card) { + super(card); + } + + @Override + public RithsCharm copy() { + return new RithsCharm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/TrevasCharm.java b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/TrevasCharm.java new file mode 100644 index 0000000000..0061ac6d9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/TrevasCharm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.phyrexiavsthecoalition; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class TrevasCharm extends mage.sets.planeshift.TrevasCharm { + + public TrevasCharm(UUID ownerId) { + super(ownerId); + this.cardNumber = 61; + this.expansionSetCode = "DDE"; + } + + public TrevasCharm(final TrevasCharm card) { + super(card); + } + + @Override + public TrevasCharm copy() { + return new TrevasCharm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/UrzasRage.java b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/UrzasRage.java new file mode 100644 index 0000000000..27ac12b0b8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/phyrexiavsthecoalition/UrzasRage.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.phyrexiavsthecoalition; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CantBeCounteredSourceEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author FenrisulfrX + */ +public class UrzasRage extends CardImpl { + + public UrzasRage(UUID ownerId) { + super(ownerId, 36, "Urza's Rage", Rarity.MYTHIC, new CardType[]{CardType.INSTANT}, "{2}{R}"); + this.expansionSetCode = "DDE"; + + // Kicker {8}{R} + this.addAbility(new KickerAbility("{8}{R}")); + + // Urza's Rage can't be countered by spells or abilities. + Effect effect = new CantBeCounteredSourceEffect(); + effect.setText("{this} can't be countered by spells or abilities"); + Ability ability = new SimpleStaticAbility(Zone.STACK, effect); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + + // 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. + this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetEffect(10, false), + new DamageTargetEffect(3), KickedCondition.getInstance(), + "{this} deals 3 damage to target creature or player. If {this} was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented.")); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + } + + public UrzasRage(final UrzasRage card) { + super(card); + } + + @Override + public UrzasRage copy() { + return new UrzasRage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java b/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java index b77b11d406..02837c1e70 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java +++ b/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java @@ -120,7 +120,7 @@ class ExtirpateEffect extends OneShotEffect { // search cards in graveyard for (Card checkCard : owner.getGraveyard().getCards(game)) { if (checkCard.getName().equals(chosenCard.getName())) { - controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } @@ -132,7 +132,7 @@ class ExtirpateEffect extends OneShotEffect { for (UUID targetId : targets) { Card targetCard = owner.getHand().get(targetId, game); if (targetCard != null) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.HAND, true); } } } @@ -145,7 +145,7 @@ class ExtirpateEffect extends OneShotEffect { for (UUID targetId : targets) { Card targetCard = owner.getLibrary().getCard(targetId, game); if (targetCard != null) { - controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/planarchaos/FatalFrenzy.java b/Mage.Sets/src/mage/sets/planarchaos/FatalFrenzy.java index d2ff2f038c..0e50c4eb3c 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/FatalFrenzy.java +++ b/Mage.Sets/src/mage/sets/planarchaos/FatalFrenzy.java @@ -100,7 +100,7 @@ class FatalFrenzyEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java b/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java index 9965b14470..4320ea2504 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java +++ b/Mage.Sets/src/mage/sets/planarchaos/IntetTheDreamer.java @@ -101,7 +101,7 @@ class IntetTheDreamerExileEffect extends OneShotEffect { Card card = player.getLibrary().removeFromTop(game); MageObject sourceObject = game.getObject(source.getSourceId()); if (card != null && sourceObject != null) { - player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); return true; } } diff --git a/Mage.Sets/src/mage/sets/planarchaos/NullProfusion.java b/Mage.Sets/src/mage/sets/planarchaos/NullProfusion.java new file mode 100644 index 0000000000..ad5666eb38 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planarchaos/NullProfusion.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.planarchaos; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.SkipDrawStepEffect; +import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect; +import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect.HandSizeModification; +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.GameEvent; +import mage.game.events.GameEvent.EventType; + +/** + * + * @author emerald000 + */ +public class NullProfusion extends CardImpl { + + public NullProfusion(UUID ownerId) { + super(ownerId, 89, "Null Profusion", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}{B}"); + this.expansionSetCode = "PLC"; + + // Skip your draw step. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipDrawStepEffect())); + + // Whenever you play a card, draw a card. + this.addAbility(new NullProfusionTriggeredAbility()); + + // Your maximum hand size is two. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MaximumHandSizeControllerEffect(2, Duration.WhileOnBattlefield, HandSizeModification.SET))); + } + + public NullProfusion(final NullProfusion card) { + super(card); + } + + @Override + public NullProfusion copy() { + return new NullProfusion(this); + } +} + +class NullProfusionTriggeredAbility extends TriggeredAbilityImpl { + + NullProfusionTriggeredAbility() { + super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), false); + } + + NullProfusionTriggeredAbility(final NullProfusionTriggeredAbility ability) { + super(ability); + } + + @Override + public NullProfusionTriggeredAbility copy() { + return new NullProfusionTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.SPELL_CAST || event.getType() == EventType.LAND_PLAYED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getPlayerId().equals(this.getControllerId()); + } + + @Override + public String getRule() { + return "Whenever you play a card, draw a card."; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/planechase/RollingThunder.java b/Mage.Sets/src/mage/sets/planechase/RollingThunder.java new file mode 100644 index 0000000000..bba6520a18 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planechase/RollingThunder.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.planechase; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RollingThunder extends mage.sets.tempestremastered.RollingThunder { + + public RollingThunder(UUID ownerId) { + super(ownerId); + this.cardNumber = 64; + this.expansionSetCode = "HOP"; + this.rarity = Rarity.COMMON; + } + + public RollingThunder(final RollingThunder card) { + super(card); + } + + @Override + public RollingThunder copy() { + return new RollingThunder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java b/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java index 615701536e..5fe936c09e 100644 --- a/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java +++ b/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java @@ -87,9 +87,14 @@ class IllusoryAngelEffect extends ContinuousRuleModifyingEffectImpl { 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.getType() == GameEvent.EventType.CAST_SPELL && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { CastSpellLastTurnWatcher watcher = (CastSpellLastTurnWatcher) game.getState().getWatchers().get("CastSpellLastTurnWatcher"); if (watcher != null && watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(source.getControllerId()) == 0) { return true; @@ -99,11 +104,6 @@ class IllusoryAngelEffect extends ContinuousRuleModifyingEffectImpl { } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public IllusoryAngelEffect copy() { return new IllusoryAngelEffect(this); diff --git a/Mage.Sets/src/mage/sets/planeshift/RithsCharm.java b/Mage.Sets/src/mage/sets/planeshift/RithsCharm.java new file mode 100644 index 0000000000..06a9185ac8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/RithsCharm.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.planeshift; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.PreventDamageBySourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.permanent.token.SaprolingToken; +import mage.target.common.TargetNonBasicLandPermanent; + +/** + * + * @author FenrisulfrX + */ +public class RithsCharm extends CardImpl { + + public RithsCharm(UUID ownerId) { + super(ownerId, 122, "Rith's Charm", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{R}{G}{W}"); + this.expansionSetCode = "PLS"; + + // Choose one - Destroy target nonbasic land; + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetNonBasicLandPermanent()); + + // or put three 1/1 green Saproling creature tokens onto the battlefield; + Mode mode = new Mode(); + mode.getEffects().add(new CreateTokenEffect(new SaprolingToken(), 3)); + this.getSpellAbility().addMode(mode); + + // or prevent all damage a source of your choice would deal this turn. + mode = new Mode(); + mode.getEffects().add(new PreventDamageBySourceEffect()); + this.getSpellAbility().addMode(mode); + } + + public RithsCharm(final RithsCharm card) { + super(card); + } + + @Override + public RithsCharm copy() { + return new RithsCharm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planeshift/SawtoothLoon.java b/Mage.Sets/src/mage/sets/planeshift/SawtoothLoon.java new file mode 100644 index 0000000000..b2f836bc9f --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/SawtoothLoon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.planeshift; + +import java.util.UUID; + +/** + * + * @author FenrisulfrX + */ +public class SawtoothLoon extends mage.sets.venservskoth.SawtoothLoon { + + public SawtoothLoon(UUID ownerId) { + super(ownerId); + this.cardNumber = 123; + this.expansionSetCode = "PLS"; + } + + public SawtoothLoon(final SawtoothLoon card) { + super(card); + } + + @Override + public SawtoothLoon copy() { + return new SawtoothLoon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java b/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java index ac5662ad6b..c07f29f080 100644 --- a/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java +++ b/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java @@ -98,7 +98,7 @@ class SkyshipWeatherlightEffect extends SearchEffect { for (UUID cardID : target.getTargets()) { Card card = controller.getLibrary().getCard(cardID, game); if (card != null) { - controller.moveCardToExileWithInfo(card, exileZone, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, exileZone, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); } } } @@ -132,7 +132,7 @@ class SkyshipWeatherlightEffect2 extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null && controller != null) { - ExileZone exZone = game.getExile().getExileZone(CardUtil.getObjectExileZoneId(game, sourceObject)); + ExileZone exZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter())); if (exZone != null) { Card card = exZone.getRandom(game); controller.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.EXILED); diff --git a/Mage.Sets/src/mage/sets/planeshift/TrevasCharm.java b/Mage.Sets/src/mage/sets/planeshift/TrevasCharm.java new file mode 100644 index 0000000000..8339ebcbd2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/TrevasCharm.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.planeshift; + +import java.util.UUID; +import mage.abilities.Mode; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetAttackingCreature; +import mage.target.common.TargetEnchantmentPermanent; + +/** + * + * @author FenrisulfrX + */ +public class TrevasCharm extends CardImpl { + + public TrevasCharm(UUID ownerId) { + super(ownerId, 129, "Treva's Charm", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{G}{W}{U}"); + this.expansionSetCode = "PLS"; + + // Choose one - Destroy target enchantment; + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetEnchantmentPermanent()); + + // or exile target attacking creature; + Mode mode = new Mode(); + mode.getEffects().add(new ExileTargetEffect()); + mode.getTargets().add(new TargetAttackingCreature()); + this.getSpellAbility().addMode(mode); + + // or draw a card, then discard a card. + mode = new Mode(); + mode.getEffects().add(new DrawDiscardControllerEffect()); + this.getSpellAbility().addMode(mode); + } + + public TrevasCharm(final TrevasCharm card) { + super(card); + } + + @Override + public TrevasCharm copy() { + return new TrevasCharm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portal/CravenGiant.java b/Mage.Sets/src/mage/sets/portal/CravenGiant.java new file mode 100644 index 0000000000..fa3138d0c3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portal/CravenGiant.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; + +/** + * + * @author fireshoes + */ +public class CravenGiant extends mage.sets.stronghold.CravenGiant { + + public CravenGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 126; + this.expansionSetCode = "POR"; + } + + public CravenGiant(final CravenGiant card) { + super(card); + } + + @Override + public CravenGiant copy() { + return new CravenGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portalsecondage/AlabornCavalier.java b/Mage.Sets/src/mage/sets/portalsecondage/AlabornCavalier.java new file mode 100644 index 0000000000..5124474523 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portalsecondage/AlabornCavalier.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.portalsecondage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksAllTriggeredAbility; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.common.TapTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author FenrisulfrX + */ +public class AlabornCavalier extends CardImpl { + + public AlabornCavalier(UUID ownerId) { + super(ownerId, 121, "Alaborn Cavalier", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); + this.expansionSetCode = "PO2"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Whenever Alaborn Cavalier attacks, you may tap target creature. + Ability ability = new AttacksTriggeredAbility(new TapTargetEffect(), true); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public AlabornCavalier(final AlabornCavalier card) { + super(card); + } + + @Override + public AlabornCavalier copy() { + return new AlabornCavalier(this); + } +} diff --git a/Mage.Sets/src/mage/sets/prereleaseevents/Revenant.java b/Mage.Sets/src/mage/sets/prereleaseevents/Revenant.java new file mode 100644 index 0000000000..9e961fb766 --- /dev/null +++ b/Mage.Sets/src/mage/sets/prereleaseevents/Revenant.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.prereleaseevents; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Revenant extends mage.sets.tempestremastered.Revenant { + + public Revenant(UUID ownerId) { + super(ownerId); + this.cardNumber = 2; + this.expansionSetCode = "PTC"; + this.rarity = Rarity.SPECIAL; + } + + public Revenant(final Revenant card) { + super(card); + } + + @Override + public Revenant copy() { + return new Revenant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java b/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java index b62a631b9d..c475447bed 100644 --- a/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java +++ b/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java @@ -98,7 +98,7 @@ class ChordofCallingSearchEffect extends OneShotEffect { filter.add(new CardTypePredicate(CardType.CREATURE)); //Set the mana cost one higher to 'emulate' a less than or equal to comparison. filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, xCost + 1)); - TargetCardInLibrary target = new TargetCardInLibrary(filter); + TargetCardInLibrary target = new TargetCardInLibrary(0,1,filter); if (player.searchLibrary(target, game)) { if (target.getTargets().size() > 0) { Card card = player.getLibrary().getCard(target.getFirstTarget(), game); diff --git a/Mage.Sets/src/mage/sets/ravnica/DimirMachinations.java b/Mage.Sets/src/mage/sets/ravnica/DimirMachinations.java index bd2294d9ce..b1967e43a5 100644 --- a/Mage.Sets/src/mage/sets/ravnica/DimirMachinations.java +++ b/Mage.Sets/src/mage/sets/ravnica/DimirMachinations.java @@ -105,7 +105,7 @@ class DimirMachinationsEffect extends OneShotEffect { for (UUID cardId : targetExile.getTargets()) { Card card = cards.get(cardId, game); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); cards.remove(card); } } diff --git a/Mage.Sets/src/mage/sets/ravnica/ThoughtpickerWitch.java b/Mage.Sets/src/mage/sets/ravnica/ThoughtpickerWitch.java index 45226c2ae5..833302be41 100644 --- a/Mage.Sets/src/mage/sets/ravnica/ThoughtpickerWitch.java +++ b/Mage.Sets/src/mage/sets/ravnica/ThoughtpickerWitch.java @@ -115,7 +115,7 @@ class ThoughtpickerWitchEffect extends OneShotEffect { controller.choose(Outcome.Exile, cards, target, game); Card card = cards.get(target.getFirstTarget(), game); cards.remove(card); - opponent.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + opponent.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); if (cards.size() == 1) { card = cards.get(cards.iterator().next(), game); opponent.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.LIBRARY, true, false); diff --git a/Mage.Sets/src/mage/sets/returntoravnica/DetentionSphere.java b/Mage.Sets/src/mage/sets/returntoravnica/DetentionSphere.java index 811d8f4292..f8d49279e9 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/DetentionSphere.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/DetentionSphere.java @@ -114,12 +114,12 @@ class DetentionSphereEntersEffect extends OneShotEffect { if (sourceObject != null && exileId != null && targetPermanent != null && controller != null) { if (targetPermanent.getName().isEmpty()) { // face down creature - controller.moveCardToExileWithInfo(targetPermanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(targetPermanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); } else { String name = targetPermanent.getLogName(); for (Permanent permanent : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) { if (permanent != null && permanent.getLogName().equals(name)) { - controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true); } } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/DryadMilitant.java b/Mage.Sets/src/mage/sets/returntoravnica/DryadMilitant.java index 0649915a4a..00ac8d5e31 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/DryadMilitant.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/DryadMilitant.java @@ -56,8 +56,6 @@ public class DryadMilitant extends CardImpl { this.subtype.add("Dryad"); this.subtype.add("Soldier"); - this.color.setGreen(true); - this.color.setWhite(true); this.power = new MageInt(2); this.toughness = new MageInt(1); @@ -102,15 +100,20 @@ class DryadMilitantReplacementEffect extends ReplacementEffectImpl { if (controller != null) { Card card = game.getCard(event.getTargetId()); if (card != null) { - return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, game.getState().getZone(card.getId())); + return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, game.getState().getZone(card.getId()), true); } } return false; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.ZONE_CHANGE && ((ZoneChangeEvent)event).getToZone() == Zone.GRAVEYARD) { + if (((ZoneChangeEvent)event).getToZone() == Zone.GRAVEYARD) { Card card = game.getCard(event.getTargetId()); if (card != null && (card.getCardType().contains(CardType.SORCERY) || card.getCardType().contains(CardType.INSTANT))) { return true; diff --git a/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java b/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java index 111b5347dc..fdbebd5e36 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java @@ -101,7 +101,7 @@ class EpicExperimentEffect extends OneShotEffect { 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(), "Cards exiled by Epic Experiment", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(topCard, source.getSourceId(), "Cards exiled by Epic Experiment", source.getSourceId(), game, Zone.LIBRARY, true); } } // cast the possible cards without paying the mana diff --git a/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java b/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java index c8f82a8e59..cd1acf681d 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java @@ -114,7 +114,7 @@ class GraveBetrayalTriggeredAbility extends TriggeredAbilityImpl { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(this.getSourceId()); delayedAbility.setControllerId(this.getControllerId()); - delayedAbility.setSourceObject(this.getSourceObject(game)); + delayedAbility.setSourceObject(this.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java b/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java index 58c1bacbe4..f1eeaf6e9a 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java @@ -309,7 +309,7 @@ class JaceArchitectOfThoughtEffect3 extends OneShotEffect { UUID targetId = target.getFirstTarget(); Card card = player.getLibrary().remove(targetId, game); if (card != null) { - controller.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourcePermanent.getName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourcePermanent.getName(), source.getSourceId(), game, Zone.LIBRARY, true); } } player.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java b/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java index f96e18249c..fdf73f6d5e 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java @@ -109,10 +109,15 @@ class RakdosLordOfRiotsCantCastEffect extends ContinuousRuleModifyingEffectImpl public RakdosLordOfRiotsCantCastEffect copy() { return new RakdosLordOfRiotsCantCastEffect(this); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.CAST_SPELL && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { if (new OpponentsLostLifeCount().calculate(game, source, this) == 0) { return true; } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/RestInPeace.java b/Mage.Sets/src/mage/sets/returntoravnica/RestInPeace.java index 90608a9946..33b9f23b91 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/RestInPeace.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/RestInPeace.java @@ -116,7 +116,7 @@ class RestInPeaceExileAllEffect extends OneShotEffect { for (UUID cid : player.getGraveyard().copy()) { Card card = game.getCard(cid); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } } @@ -155,14 +155,14 @@ class RestInPeaceReplacementEffect extends ReplacementEffectImpl { if (((ZoneChangeEvent)event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = ((ZoneChangeEvent)event).getTarget(); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); } } else { Card card = game.getCard(event.getTargetId()); if (card != null) { ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, zEvent.getFromZone()); + return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, zEvent.getFromZone(), true); } } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/SoulTithe.java b/Mage.Sets/src/mage/sets/returntoravnica/SoulTithe.java index aaefaae0b3..3c42999000 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/SoulTithe.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/SoulTithe.java @@ -29,6 +29,7 @@ package mage.sets.returntoravnica; import java.util.UUID; +import mage.MageObject; import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.Duration; @@ -64,7 +65,6 @@ public class SoulTithe extends CardImpl { super(ownerId, 23, "Soul Tithe", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); this.expansionSetCode = "RTR"; this.subtype.add("Aura"); - this.color.setWhite(true); // Enchant nonland permanent TargetPermanent auraTarget = new TargetNonlandPermanent(); @@ -106,12 +106,12 @@ class SoulTitheSacrificeSourceUnlessPaysEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); - if (player != null && permanent != null) { + MageObject sourceObject = source.getSourceObject(game); + if (player != null && permanent != null && sourceObject != null) { int cmc = permanent.getManaCost().convertedManaCost(); - if (player.chooseUse(Outcome.Benefit, "Pay {" + cmc + "} for " + permanent.getName() + "?", game)) { + if (player.chooseUse(Outcome.Benefit, "Pay {" + cmc + "} for " + permanent.getName() + "? (otherwise you sacrifice it)", game)) { Cost cost = new GenericManaCost(cmc); - if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) - { + if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false)) { return true; } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/SphereOfSafety.java b/Mage.Sets/src/mage/sets/returntoravnica/SphereOfSafety.java index 3afcbdedd4..203b13ab4f 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/SphereOfSafety.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/SphereOfSafety.java @@ -54,8 +54,6 @@ public class SphereOfSafety extends CardImpl { super(ownerId, 24, "Sphere of Safety", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}"); this.expansionSetCode = "RTR"; - this.color.setWhite(true); - // Creatures can't attack you or a planeswalker you control unless their controller pays {X} for each of those creatures, where X is the number of enchantments you control. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SphereOfSafetyReplacementEffect())); @@ -79,7 +77,7 @@ class SphereOfSafetyReplacementEffect extends ReplacementEffectImpl { static { filter.add(new ControllerPredicate(TargetController.YOU)); } - private PermanentsOnBattlefieldCount countEnchantments = new PermanentsOnBattlefieldCount(filter); + private final PermanentsOnBattlefieldCount countEnchantments = new PermanentsOnBattlefieldCount(filter); SphereOfSafetyReplacementEffect ( ) { @@ -90,51 +88,46 @@ class SphereOfSafetyReplacementEffect extends ReplacementEffectImpl { SphereOfSafetyReplacementEffect ( SphereOfSafetyReplacementEffect effect ) { super(effect); } - + @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; } @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER) { - Player player = game.getPlayer(event.getPlayerId()); - if ( player != null ) { - int ce = countEnchantments.calculate(game, source, this); - ManaCostsImpl safetyCosts = new ManaCostsImpl("{"+ ce +"}"); - if ( safetyCosts.canPay(source, source.getSourceId(), event.getPlayerId(), game) && - player.chooseUse(Outcome.Benefit, "Pay {"+ ce +"} to declare attacker?", game) ) - { - if (safetyCosts.payOrRollback(source, game, this.getId(), event.getPlayerId())) { - return false; - } - } - } + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getTargetId().equals(source.getControllerId()) ) { + return true; + } + // planeswalker + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null && permanent.getControllerId().equals(source.getControllerId()) + && permanent.getCardType().contains(CardType.PLANESWALKER)) { return true; } return false; } @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER) { - if (event.getTargetId().equals(source.getControllerId()) ) { - return true; - } - // planeswalker - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null && permanent.getControllerId().equals(source.getControllerId()) - && permanent.getCardType().contains(CardType.PLANESWALKER)) { - return true; + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if ( player != null ) { + int ce = countEnchantments.calculate(game, source, this); + ManaCostsImpl safetyCosts = new ManaCostsImpl("{"+ ce +"}"); + if ( safetyCosts.canPay(source, source.getSourceId(), event.getPlayerId(), game) && + player.chooseUse(Outcome.Benefit, "Pay {"+ ce +"} to declare attacker?", game) ) { + if (safetyCosts.payOrRollback(source, game, this.getId(), event.getPlayerId())) { + return false; + } } + return true; } return false; } - + @Override public SphereOfSafetyReplacementEffect copy() { return new SphereOfSafetyReplacementEffect(this); } -} +} diff --git a/Mage.Sets/src/mage/sets/returntoravnica/TrostaniSelesnyasVoice.java b/Mage.Sets/src/mage/sets/returntoravnica/TrostaniSelesnyasVoice.java index a30212e429..4a89055ee6 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/TrostaniSelesnyasVoice.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/TrostaniSelesnyasVoice.java @@ -28,6 +28,8 @@ package mage.sets.returntoravnica; +import java.util.UUID; +import static javax.xml.bind.JAXBIntrospector.getValue; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; @@ -47,8 +49,6 @@ import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; -import java.util.UUID; - /** * * @author LevelX2 @@ -60,8 +60,7 @@ public class TrostaniSelesnyasVoice extends CardImpl { this.expansionSetCode = "RTR"; this.supertype.add("Legendary"); this.subtype.add("Dryad"); - this.color.setGreen(true); - this.color.setWhite(true); + this.power = new MageInt(2); this.toughness = new MageInt(5); @@ -102,6 +101,7 @@ class TrostaniSelesnyasVoiceTriggeredAbility extends TriggeredAbilityImpl { && permanent.getControllerId().equals(this.controllerId) && event.getTargetId() != this.getSourceId()) { Effect effect = this.getEffects().get(0); + // life is determined during resolution so it has to be retrieved there (e.g. Giant Growth before resolution) effect.setValue("lifeSource", event.getTargetId()); effect.setValue("zoneChangeCounter", permanent.getZoneChangeCounter(game)); return true; @@ -112,7 +112,7 @@ class TrostaniSelesnyasVoiceTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever another creature enters the battlefield under your control, you gain life equal to that creature's toughness."; + return "Whenever another creature enters the battlefield under your control, " + super.getRule(); } @Override @@ -125,7 +125,7 @@ class TrostaniSelesnyasVoiceEffect extends OneShotEffect { public TrostaniSelesnyasVoiceEffect() { super(Outcome.GainLife); - staticText = "you gain life equal to its toughness"; + staticText = "you gain life equal to that creature's toughness"; } public TrostaniSelesnyasVoiceEffect(final TrostaniSelesnyasVoiceEffect effect) { @@ -155,4 +155,4 @@ class TrostaniSelesnyasVoiceEffect extends OneShotEffect { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/ArrogantBloodlord.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/ArrogantBloodlord.java index 8cc722bb30..568f7bba13 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/ArrogantBloodlord.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/ArrogantBloodlord.java @@ -89,22 +89,24 @@ class ArrogantBloodlordTriggeredAbility extends TriggeredAbilityImpl { return new ArrogantBloodlordTriggeredAbility(this); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.BLOCKER_DECLARED; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.BLOCKER_DECLARED) { - Permanent blocker = game.getPermanent(event.getSourceId()); - Permanent blocked = game.getPermanent(event.getTargetId()); - Permanent arrogantBloodlord = game.getPermanent(sourceId); - if (blocker != null && blocker != arrogantBloodlord - && blocker.getPower().getValue() < 2 - && blocked == arrogantBloodlord) { - return true; - } - if (blocker != null && blocker == arrogantBloodlord - && game.getPermanent(event.getTargetId()).getPower().getValue() < 2) { - return true; - } - return false; + Permanent blocker = game.getPermanent(event.getSourceId()); + Permanent blocked = game.getPermanent(event.getTargetId()); + Permanent arrogantBloodlord = game.getPermanent(sourceId); + if (blocker != null && blocker != arrogantBloodlord + && blocker.getPower().getValue() < 2 + && blocked == arrogantBloodlord) { + return true; + } + if (blocker != null && blocker == arrogantBloodlord + && game.getPermanent(event.getTargetId()).getPower().getValue() < 2) { + return true; } return false; } @@ -133,7 +135,7 @@ class ArrogantBloodlordEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(source.getSourceId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SplinterTwin.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SplinterTwin.java index dd96511130..935ebb8b7b 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SplinterTwin.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SplinterTwin.java @@ -119,7 +119,7 @@ class SplinterTwinEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/CowedByWisdom.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/CowedByWisdom.java index cb8acbbbf0..42d10820b9 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/CowedByWisdom.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/CowedByWisdom.java @@ -97,6 +97,17 @@ class CowedByWisdomEffect extends ReplacementEffectImpl { throw new UnsupportedOperationException("Not supported."); } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER || event.getType().equals(GameEvent.EventType.DECLARE_BLOCKER); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent enchantment = game.getPermanent(event.getSourceId()); + return enchantment != null && enchantment.getAttachments().contains(source.getSourceId()); + } + @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player player = game.getPlayer(event.getPlayerId()); @@ -123,20 +134,7 @@ class CowedByWisdomEffect extends ReplacementEffectImpl { } return false; } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType().equals(GameEvent.EventType.DECLARE_ATTACKER)) { - Permanent attacker = game.getPermanent(event.getSourceId()); - return attacker != null && attacker.getAttachments().contains(source.getSourceId()); - } - if (event.getType().equals(GameEvent.EventType.DECLARE_BLOCKER)) { - Permanent blocker = game.getPermanent(event.getSourceId()); - return blocker != null && blocker.getAttachments().contains(source.getSourceId()); - } - return false; - } - + @Override public CowedByWisdomEffect copy() { return new CowedByWisdomEffect(this); diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java index b8ef9015f7..538519c8ef 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java @@ -103,9 +103,14 @@ class CurtainOfLightRuleModifyingEffect extends ContinuousRuleModifyingEffectImp super(effect); } + @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.getType().equals(GameEvent.EventType.CAST_SPELL) && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { return !game.getPhase().getType().equals(TurnPhase.COMBAT) || game.getStep().getType().equals(PhaseStep.BEGIN_COMBAT) || game.getStep().getType().equals(PhaseStep.DECLARE_ATTACKERS); diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/FeralLightning.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/FeralLightning.java index 0ba4d846ea..9b97fb0cf5 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/FeralLightning.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/FeralLightning.java @@ -101,7 +101,7 @@ class FeralLightningEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/FootstepsOfTheGoryo.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/FootstepsOfTheGoryo.java index 75e00fea63..7b95bd8050 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/FootstepsOfTheGoryo.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/FootstepsOfTheGoryo.java @@ -110,7 +110,7 @@ class FootstepsOfTheGoryoEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/InameAsOne.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/InameAsOne.java index 79a257de5d..e7246a9566 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/InameAsOne.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/InameAsOne.java @@ -121,7 +121,7 @@ class InameAsOneEffect extends OneShotEffect { // exile it, not that it actually gets to the exile zone. This is similar to how destroying a creature // (with, for example, Rest in Peace) doesn't necessarily ensure that creature will end up in the graveyard; // it just so happens that the action of exiling something and the exile zone both use the same word: "exile". - new ExileSourceEffect(Zone.GRAVEYARD).apply(game, source); + new ExileSourceEffect().apply(game, source); return new ReturnFromGraveyardToBattlefieldTargetEffect().apply(game, source); } return true; diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java index 41b39c26f9..9e6c96a56d 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java @@ -122,7 +122,7 @@ class KahoMinamoHistorianEffect extends SearchEffect { for (UUID cardId : target.getTargets()) { Card card = controller.getLibrary().getCard(cardId, game); if (card != null) { - controller.moveCardToExileWithInfo(card, exileZone, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, exileZone, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/MeasureOfWickedness.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/MeasureOfWickedness.java index 5a6262208d..695767fa0c 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/MeasureOfWickedness.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/MeasureOfWickedness.java @@ -113,7 +113,7 @@ class MeasureOfWickednessControlSourceEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { Player targetOpponent = game.getPlayer(source.getFirstTarget()); - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); if (permanent != null && targetOpponent != null) { permanent.changeControllerId(targetOpponent.getId(), game); } else { diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java index b3b9958e23..a9a418bb4d 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java @@ -99,7 +99,7 @@ class NeverendingTormentEffect extends OneShotEffect { for (UUID cardId : target.getTargets()) { final Card targetCard = game.getCard(cardId); if (targetCard != null) { - applied |= you.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY); + applied |= you.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/RallyTheHorde.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/RallyTheHorde.java index f36aee1aee..4066c7dee3 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/RallyTheHorde.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/RallyTheHorde.java @@ -111,7 +111,7 @@ class RallyTheHordeEffect extends OneShotEffect { private int checkIfNextLibCardIsNonLandAndExile(Player controller, Ability source, Game game) { Card card = controller.getLibrary().getFromTop(game); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); return card.getCardType().contains(CardType.LAND) ? 0:1; } return 0; diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/UndyingFlames.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/UndyingFlames.java index c8a6029f20..a05d337c04 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/UndyingFlames.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/UndyingFlames.java @@ -95,7 +95,7 @@ class UndyingFlamesEffect extends OneShotEffect { && you.getLibrary().size() > 0 && you.isInGame()) { Card card = you.getLibrary().removeFromTop(game); if (card != null) { - you.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY); + you.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); if (!card.getCardType().contains(CardType.LAND)) { int damage = card.getManaCost().convertedManaCost(); if (damage > 0) { diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/WineOfBloodAndIron.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/WineOfBloodAndIron.java index 97f21d2197..2a831a03a0 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/WineOfBloodAndIron.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/WineOfBloodAndIron.java @@ -100,7 +100,7 @@ class WineOfBloodAndIronEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentSphinx.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentSphinx.java index c92a61e319..dd93aadc94 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentSphinx.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ArgentSphinx.java @@ -99,7 +99,7 @@ class ArgentSphinxEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ContagionEngine.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ContagionEngine.java index b93cef49cb..f21304caff 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ContagionEngine.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ContagionEngine.java @@ -58,9 +58,13 @@ public class ContagionEngine extends CardImpl { public ContagionEngine (UUID ownerId) { super(ownerId, 145, "Contagion Engine", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{6}"); this.expansionSetCode = "SOM"; + + // When Contagion Engine enters the battlefield, put a -1/-1 counter on each creature target player controls. Ability ability = new EntersBattlefieldTriggeredAbility(new ContagionEngineEffect()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); + + // {4}, {T}: Proliferate, then proliferate again. (You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there. Then do it again.) ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ProliferateEffect(), new GenericManaCost(4)); ability.addCost(new TapSourceCost()); ability.addEffect(new ProliferateEffect()); @@ -90,10 +94,10 @@ class ContagionEngineEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player target = game.getPlayer(source.getFirstTarget()); - if (target != null) { - for (Permanent p : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), target.getId(), game)) { - p.addCounters(CounterType.M1M1.createInstance(), game); + Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (targetPlayer != null) { + for (Permanent creature : game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), targetPlayer.getId(), game)) { + creature.addCounters(CounterType.M1M1.createInstance(), game); } return true; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/GlimmerpointStag.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/GlimmerpointStag.java index a04acf096c..d50ba2057c 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/GlimmerpointStag.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/GlimmerpointStag.java @@ -100,7 +100,7 @@ class GlimmerpointStagEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/KuldothaForgemaster.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/KuldothaForgemaster.java index 052bc47d1a..4058384606 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/KuldothaForgemaster.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/KuldothaForgemaster.java @@ -49,7 +49,7 @@ import mage.target.common.TargetControlledPermanent; public class KuldothaForgemaster extends CardImpl { private static final FilterArtifactCard filterArtifactCard = new FilterArtifactCard(); - private static final FilterControlledArtifactPermanent filterArtifactPermanent = new FilterControlledArtifactPermanent(); + private static final FilterControlledArtifactPermanent filterArtifactPermanent = new FilterControlledArtifactPermanent("three artifacts you control"); public KuldothaForgemaster(UUID ownerId) { super(ownerId, 169, "Kuldotha Forgemaster", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/LeoninArbiter.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/LeoninArbiter.java index cb11813f50..04367722cb 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/LeoninArbiter.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/LeoninArbiter.java @@ -161,12 +161,16 @@ class LeoninArbiterCantSearchEffect extends ContinuousRuleModifyingEffectImpl { this.keyString = effect.keyString; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return EventType.SEARCH_LIBRARY.equals(event.getType()); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - boolean applies = false; - if (EventType.SEARCH_LIBRARY.equals(event.getType())) { - applies = true; - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + boolean applies = true; String key = permanent.getId() + keyString; Map.Entry> turnIgnoringPlayersPair = (Map.Entry>) game.getState().getValue(key); if (turnIgnoringPlayersPair != null) { @@ -177,8 +181,9 @@ class LeoninArbiterCantSearchEffect extends ContinuousRuleModifyingEffectImpl { applies = !turnIgnoringPlayersPair.getValue().contains(event.getPlayerId()); } } + return applies; } - return applies; + return false; } @Override diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java index 8ef9e3b129..47c8fb0af1 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java @@ -212,7 +212,7 @@ class MimicVatCreateTokenEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/OgreGeargrabber.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/OgreGeargrabber.java index 247252a0f6..14f91f126d 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/OgreGeargrabber.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/OgreGeargrabber.java @@ -111,7 +111,7 @@ class OgreGeargrabberEffect1 extends OneShotEffect { OgreGeargrabberDelayedTriggeredAbility delayedAbility = new OgreGeargrabberDelayedTriggeredAbility(equipmentId); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); Permanent equipment = game.getPermanent(equipmentId); if (equipment != null) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java index 5444eecf2a..7fb923d038 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java @@ -37,6 +37,9 @@ 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.FilterSpell; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInHand; @@ -52,7 +55,7 @@ public class PainfulQuandary extends CardImpl { this.expansionSetCode = "SOM"; // Whenever an opponent casts a spell, that player loses 5 life unless he or she discards a card. - this.addAbility(new SpellCastOpponentTriggeredAbility(new PainfulQuandryEffect(), false)); + this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new PainfulQuandryEffect(), new FilterSpell(), false, SetTargetPointer.PLAYER)); } public PainfulQuandary(final PainfulQuandary card) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java index b432a0c9ca..985e07ae6f 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java @@ -131,12 +131,12 @@ class VenserTheSojournerEffect extends OneShotEffect { if (getTargetPointer().getFirst(game, source) != null) { Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (permanent != null) { - if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/seventhedition/Fugue.java b/Mage.Sets/src/mage/sets/seventhedition/Fugue.java new file mode 100644 index 0000000000..428454617a --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/Fugue.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.seventhedition; + +import java.util.UUID; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author fireshoes + */ +public class Fugue extends CardImpl { + + public Fugue(UUID ownerId) { + super(ownerId, 137, "Fugue", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{B}{B}"); + this.expansionSetCode = "7ED"; + + // Target player discards three cards. + this.getSpellAbility().addEffect(new DiscardTargetEffect(3)); + this.getSpellAbility().addTarget(new TargetPlayer()); + } + + public Fugue(final Fugue card) { + super(card); + } + + @Override + public Fugue copy() { + return new Fugue(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/Necrologia.java b/Mage.Sets/src/mage/sets/seventhedition/Necrologia.java new file mode 100644 index 0000000000..4913f6a49b --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/Necrologia.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.seventhedition; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class Necrologia extends mage.sets.tempestremastered.Necrologia { + + public Necrologia(UUID ownerId) { + super(ownerId); + this.cardNumber = 149; + this.expansionSetCode = "7ED"; + this.rarity = Rarity.UNCOMMON; + } + + public Necrologia(final Necrologia card) { + super(card); + } + + @Override + public Necrologia copy() { + return new Necrologia(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/PitTrap.java b/Mage.Sets/src/mage/sets/seventhedition/PitTrap.java new file mode 100644 index 0000000000..6af0148519 --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/PitTrap.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.seventhedition; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PitTrap extends mage.sets.urzassaga.PitTrap { + + public PitTrap(UUID ownerId) { + super(ownerId); + this.cardNumber = 313; + this.expansionSetCode = "7ED"; + } + + public PitTrap(final PitTrap card) { + super(card); + } + + @Override + public PitTrap copy() { + return new PitTrap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/Revenant.java b/Mage.Sets/src/mage/sets/seventhedition/Revenant.java new file mode 100644 index 0000000000..8fa4998502 --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/Revenant.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.seventhedition; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Revenant extends mage.sets.tempestremastered.Revenant { + + public Revenant(UUID ownerId) { + super(ownerId); + this.cardNumber = 160; + this.expansionSetCode = "7ED"; + this.rarity = Rarity.RARE; + } + + public Revenant(final Revenant card) { + super(card); + } + + @Override + public Revenant copy() { + return new Revenant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java b/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java index 5840b30eac..f09c9b30ed 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/ElementalMastery.java @@ -119,7 +119,7 @@ class ElementalMasteryEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java b/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java index c7a16ac6d8..1d468452cf 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java @@ -97,10 +97,15 @@ class DamageCantBePreventedEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.PREVENT_DAMAGE); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return event.getType().equals(GameEvent.EventType.PREVENT_DAMAGE); + return true; } } @@ -138,8 +143,14 @@ class DamageDealtAsIfSourceHadWitherEffect extends ReplacementEffectImpl { return true; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.DAMAGE_CREATURE; + } + + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return (event.getType() == EventType.DAMAGE_CREATURE); + return true; } } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java b/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java index 163d95b290..ec0b9809e6 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java @@ -113,7 +113,7 @@ class GhastlordOfFugueEffect extends OneShotEffect { chosenCard = game.getCard(target.getFirstTarget()); } if (chosenCard != null) { - controller.moveCardToExileWithInfo(chosenCard, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(chosenCard, null, "", source.getSourceId(), game, Zone.HAND, true); } return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java b/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java index 8a291f6b3e..43ca95f1ff 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/Giantbaiting.java @@ -97,7 +97,7 @@ class GiantbaitingEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ImpromptuRaid.java b/Mage.Sets/src/mage/sets/shadowmoor/ImpromptuRaid.java index a2d7cde7e7..583e2c8601 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/ImpromptuRaid.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/ImpromptuRaid.java @@ -125,7 +125,7 @@ class ImpromptuRaidEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/MistmeadowWitch.java b/Mage.Sets/src/mage/sets/shadowmoor/MistmeadowWitch.java index cd282e9c85..a471b42244 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/MistmeadowWitch.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/MistmeadowWitch.java @@ -99,7 +99,7 @@ class MistmeadowWitchEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/PuppeteerClique.java b/Mage.Sets/src/mage/sets/shadowmoor/PuppeteerClique.java index 1f1452805e..c9853a17c9 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/PuppeteerClique.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/PuppeteerClique.java @@ -130,7 +130,7 @@ class PuppeteerCliqueEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect, TargetController.YOU); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); result = true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/PuresightMerrow.java b/Mage.Sets/src/mage/sets/shadowmoor/PuresightMerrow.java index 85d669262e..a6423e24b9 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/PuresightMerrow.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/PuresightMerrow.java @@ -105,7 +105,7 @@ class PuresightMerrowEffect extends OneShotEffect { cards.add(card); controller.lookAtCards("Puresight Merrow", cards, game); if (controller.chooseUse(Outcome.Removal, "Do you wish to exile the card from the top of your library?", game)) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), "Puresight Merrow", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, source.getSourceId(), "Puresight Merrow", source.getSourceId(), game, Zone.LIBRARY, true); } else { game.informPlayers(controller.getName() + " puts the card back on top of their library."); } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java b/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java index ccb2fc01d9..4ea92e7207 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java @@ -89,7 +89,7 @@ class WickerWarcrawlerEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance())); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(source.getSourceId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java b/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java index b2f4276e70..f2506f1766 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java @@ -133,11 +133,6 @@ class EtherswornCanonistReplacementEffect extends ContinuousRuleModifyingEffectI super(effect); } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public EtherswornCanonistReplacementEffect copy() { return new EtherswornCanonistReplacementEffect(this); diff --git a/Mage.Sets/src/mage/sets/shardsofalara/GatherSpecimens.java b/Mage.Sets/src/mage/sets/shardsofalara/GatherSpecimens.java index 8ceda7ed95..34e541b260 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/GatherSpecimens.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/GatherSpecimens.java @@ -90,15 +90,6 @@ class GatherSpecimensReplacementEffect extends ReplacementEffectImpl { return true; } - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - event.setPlayerId(controller.getId()); - } - return false; - } - @Override public boolean checksEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.ZONE_CHANGE || event.getType() == GameEvent.EventType.CREATE_TOKEN; @@ -107,7 +98,7 @@ class GatherSpecimensReplacementEffect extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.ZONE_CHANGE - && ((ZoneChangeEvent) event).getToZone() == Zone.BATTLEFIELD) { + && ((ZoneChangeEvent) event).getToZone().match(Zone.BATTLEFIELD)) { Card card = game.getCard(event.getTargetId()); if (card.getCardType().contains(CardType.CREATURE)) { // TODO: Bestow Card cast as Enchantment probably not handled correctly Player controller = game.getPlayer(source.getControllerId()); @@ -124,4 +115,13 @@ class GatherSpecimensReplacementEffect extends ReplacementEffectImpl { } return false; } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + event.setPlayerId(controller.getId()); + } + return false; + } } diff --git a/Mage.Sets/src/mage/sets/shardsofalara/RelicOfProgenitus.java b/Mage.Sets/src/mage/sets/shardsofalara/RelicOfProgenitus.java index 3a516fea2b..49e54fd61b 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/RelicOfProgenitus.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/RelicOfProgenitus.java @@ -106,7 +106,7 @@ class RelicOfProgenitusEffect extends OneShotEffect { if (targetPlayer.chooseTarget(Outcome.Exile, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { - targetPlayer.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + targetPlayer.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } return true; } @@ -144,7 +144,7 @@ class RelicOfProgenitusEffect2 extends OneShotEffect { for (UUID cid : player.getGraveyard().copy()) { Card card = game.getCard(cid); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } } diff --git a/Mage.Sets/src/mage/sets/shardsofalara/Skeletonize.java b/Mage.Sets/src/mage/sets/shardsofalara/Skeletonize.java index 3dfa27e93e..5ff6e3656f 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/Skeletonize.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/Skeletonize.java @@ -103,7 +103,7 @@ class SkeletonizeEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new SkeletonizeDelayedTriggeredAbility(); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/shardsofalara/TidehollowSculler.java b/Mage.Sets/src/mage/sets/shardsofalara/TidehollowSculler.java index c290aba044..8afa6eedfd 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/TidehollowSculler.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/TidehollowSculler.java @@ -44,6 +44,7 @@ import mage.filter.common.FilterNonlandCard; import mage.game.ExileZone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentToken; import mage.players.Player; import mage.target.TargetCard; import mage.target.common.TargetOpponent; @@ -116,7 +117,7 @@ class TidehollowScullerExileEffect extends OneShotEffect { if (controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, CardUtil.getObjectExileZoneId(game, sourcePermanent), sourcePermanent.getName(), source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, CardUtil.getObjectExileZoneId(game, sourcePermanent), sourcePermanent.getName(), source.getSourceId(), game, Zone.HAND, true); } } @@ -149,7 +150,8 @@ class TidehollowScullerLeaveEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = source.getSourceObject(game); if (controller != null && sourceObject != null) { - ExileZone exZone = game.getExile().getExileZone(CardUtil.getObjectExileZoneId(game, sourceObject)); + int zoneChangeCounter = (sourceObject instanceof PermanentToken) ? source.getSourceObjectZoneChangeCounter() : source.getSourceObjectZoneChangeCounter() -1; + ExileZone exZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter)); if (exZone != null) { for (Card card : exZone.getCards(game)) { if (card != null) { diff --git a/Mage.Sets/src/mage/sets/sorinvstibalt/FieldOfSouls.java b/Mage.Sets/src/mage/sets/sorinvstibalt/FieldOfSouls.java new file mode 100644 index 0000000000..fd0d52ce71 --- /dev/null +++ b/Mage.Sets/src/mage/sets/sorinvstibalt/FieldOfSouls.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.sorinvstibalt; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FieldOfSouls extends mage.sets.tempestremastered.FieldOfSouls { + + public FieldOfSouls(UUID ownerId) { + super(ownerId); + this.cardNumber = 30; + this.expansionSetCode = "DDK"; + } + + public FieldOfSouls(final FieldOfSouls card) { + super(card); + } + + @Override + public FieldOfSouls copy() { + return new FieldOfSouls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/starter1999/ThunderDragon.java b/Mage.Sets/src/mage/sets/starter1999/ThunderDragon.java new file mode 100644 index 0000000000..96565db7db --- /dev/null +++ b/Mage.Sets/src/mage/sets/starter1999/ThunderDragon.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.starter1999; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.keyword.FlyingAbility; +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.AbilityPredicate; + +/** + * + * @author FenrisulfrX + */ +public class ThunderDragon extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature without flying"); + + static { + filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); + } + + public ThunderDragon(UUID ownerId) { + super(ownerId, 119, "Thunder Dragon", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{R}{R}"); + this.expansionSetCode = "S99"; + this.subtype.add("Dragon"); + this.power = new MageInt(5); + this.toughness = new MageInt(5); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Thunder Dragon enters the battlefield, it deals 3 damage to each creature without flying. + TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DamageAllEffect(3, filter)); + this.addAbility(ability); + } + + public ThunderDragon(final ThunderDragon card) { + super(card); + } + + @Override + public ThunderDragon copy() { + return new ThunderDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/Cannibalize.java b/Mage.Sets/src/mage/sets/stronghold/Cannibalize.java new file mode 100644 index 0000000000..8a4516af6c --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/Cannibalize.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class Cannibalize extends mage.sets.tempestremastered.Cannibalize { + + public Cannibalize(UUID ownerId) { + super(ownerId); + this.cardNumber = 3; + this.expansionSetCode = "STH"; + this.rarity = Rarity.COMMON; + } + + public Cannibalize(final Cannibalize card) { + super(card); + } + + @Override + public Cannibalize copy() { + return new Cannibalize(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/Conviction.java b/Mage.Sets/src/mage/sets/stronghold/Conviction.java new file mode 100644 index 0000000000..4cb431c480 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/Conviction.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.stronghold; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +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.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class Conviction extends CardImpl { + + public Conviction(UUID ownerId) { + super(ownerId, 105, "Conviction", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); + this.expansionSetCode = "STH"; + 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); + + // Enchanted creature gets +1/+3. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 3, Duration.WhileOnBattlefield))); + + // {W}: Return Conviction to its owner's hand. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("U"))); + } + + public Conviction(final Conviction card) { + super(card); + } + + @Override + public Conviction copy() { + return new Conviction(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/CravenGiant.java b/Mage.Sets/src/mage/sets/stronghold/CravenGiant.java new file mode 100644 index 0000000000..ac50ed79f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/CravenGiant.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.stronghold; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CantBlockAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class CravenGiant extends CardImpl { + + public CravenGiant(UUID ownerId) { + super(ownerId, 78, "Craven Giant", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "STH"; + this.subtype.add("Giant"); + this.power = new MageInt(4); + this.toughness = new MageInt(1); + + // Craven Giant can't block. + this.addAbility(new CantBlockAbility()); + } + + public CravenGiant(final CravenGiant card) { + super(card); + } + + @Override + public CravenGiant copy() { + return new CravenGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/CrovaxTheCursed.java b/Mage.Sets/src/mage/sets/stronghold/CrovaxTheCursed.java new file mode 100644 index 0000000000..9028a043d2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/CrovaxTheCursed.java @@ -0,0 +1,131 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +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.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class CrovaxTheCursed extends CardImpl { + + public CrovaxTheCursed(UUID ownerId) { + super(ownerId, 5, "Crovax the Cursed", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + this.expansionSetCode = "STH"; + this.supertype.add("Legendary"); + this.subtype.add("Vampire"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Crovax the Cursed enters the battlefield with four +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)), "with four +1/+1 counters on it")); + + // At the beginning of your upkeep, you may sacrifice a creature. If you do, put a +1/+1 counter on Crovax. If you don't, remove a +1/+1 counter from Crovax. + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new CrovaxTheCursedEffect(), TargetController.YOU, false); + this.addAbility(ability); + + + // {B}: Crovax gains flying until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{B}"))); + + } + + public CrovaxTheCursed(final CrovaxTheCursed card) { + super(card); + } + + @Override + public CrovaxTheCursed copy() { + return new CrovaxTheCursed(this); + } +} + +class CrovaxTheCursedEffect extends OneShotEffect { + + public CrovaxTheCursedEffect() { + super(Outcome.Detriment); + this.staticText = "you may sacrifice a creature. If you do, put a +1/+1 counter on {this}. If you don't, remove a +1/+1 counter from {this}"; + } + + public CrovaxTheCursedEffect(final CrovaxTheCursedEffect effect) { + super(effect); + } + + @Override + public CrovaxTheCursedEffect copy() { + return new CrovaxTheCursedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent sourceObject = (Permanent) source.getSourceObjectIfItStillExists(game); + int creatures = game.getBattlefield().countAll(new FilterCreaturePermanent(), source.getControllerId(), game); + if (creatures > 0 && controller.chooseUse(outcome, "Sacrifice a creature?", game)) { + if (new SacrificeControllerEffect(new FilterCreaturePermanent(), 1, "").apply(game, source)) { + if (sourceObject != null) { + sourceObject.getCounters().addCounter(CounterType.P1P1.createInstance()); + game.informPlayers(controller.getName() + " puts a +1/+1 counter on " + sourceObject.getName()); + } + } + } else { + if (sourceObject != null && sourceObject.getCounters().containsKey(CounterType.P1P1)) { + sourceObject.getCounters().removeCounter(CounterType.P1P1, 1); + game.informPlayers(controller.getName() + " removes a +1/+1 counter from " + sourceObject.getName()); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/DeathStroke.java b/Mage.Sets/src/mage/sets/stronghold/DeathStroke.java new file mode 100644 index 0000000000..ed3c237d16 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/DeathStroke.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.stronghold; + +import java.util.UUID; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class DeathStroke extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped creature"); + + static { + filter.add(new TappedPredicate()); + } + + public DeathStroke(UUID ownerId) { + super(ownerId, 7, "Death Stroke", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}{B}"); + this.expansionSetCode = "STH"; + + // Destroy target tapped creature. + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + } + + public DeathStroke(final DeathStroke card) { + super(card); + } + + @Override + public DeathStroke copy() { + return new DeathStroke(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/DreamProwler.java b/Mage.Sets/src/mage/sets/stronghold/DreamProwler.java new file mode 100644 index 0000000000..f128661e0a --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/DreamProwler.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author emerald000 + */ +public class DreamProwler extends mage.sets.tempestremastered.DreamProwler { + + public DreamProwler(UUID ownerId) { + super(ownerId); + this.cardNumber = 29; + this.expansionSetCode = "STH"; + this.rarity = Rarity.COMMON; + } + + public DreamProwler(final DreamProwler card) { + super(card); + } + + @Override + public DreamProwler copy() { + return new DreamProwler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/DungeonShade.java b/Mage.Sets/src/mage/sets/stronghold/DungeonShade.java new file mode 100644 index 0000000000..d49671c3b7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/DungeonShade.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.stronghold; + +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.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class DungeonShade extends CardImpl { + + public DungeonShade(UUID ownerId) { + super(ownerId, 8, "Dungeon Shade", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "STH"; + this.subtype.add("Shade"); + this.subtype.add("Spirit"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {B}: Dungeon Shade gets +1/+1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("B"))); + } + + public DungeonShade(final DungeonShade card) { + super(card); + } + + @Override + public DungeonShade copy() { + return new DungeonShade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/ElvenRite.java b/Mage.Sets/src/mage/sets/stronghold/ElvenRite.java new file mode 100644 index 0000000000..02f5e41008 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/ElvenRite.java @@ -0,0 +1,97 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +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.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.Target; +import mage.target.common.TargetCreaturePermanentAmount; + +/** + * + * @author fireshoes + */ +public class ElvenRite extends CardImpl { + + public ElvenRite(UUID ownerId) { + super(ownerId, 56, "Elven Rite", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{G}"); + this.expansionSetCode = "STH"; + + // Distribute two +1/+1 counters among one or two target creatures. + this.getSpellAbility().addEffect(new ElvenRiteDistributeEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(2)); + } + + public ElvenRite(final ElvenRite card) { + super(card); + } + + @Override + public ElvenRite copy() { + return new ElvenRite(this); + } +} + +class ElvenRiteDistributeEffect extends OneShotEffect { + + public ElvenRiteDistributeEffect() { + super(Outcome.BoostCreature); + this.staticText = "Distribute two +1/+1 counters among one or two target creatures"; + } + + public ElvenRiteDistributeEffect(final ElvenRiteDistributeEffect effect) { + super(effect); + } + + @Override + public ElvenRiteDistributeEffect copy() { + return new ElvenRiteDistributeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (source.getTargets().size() > 0) { + Target multiTarget = source.getTargets().get(0); + for (UUID target : multiTarget.getTargets()) { + Permanent permanent = game.getPermanent(target); + if (permanent != null) { + permanent.addCounters(CounterType.P1P1.createInstance(multiTarget.getTargetAmount(target)), game); + } + } + } + return true; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/stronghold/EndangeredArmodon.java b/Mage.Sets/src/mage/sets/stronghold/EndangeredArmodon.java new file mode 100644 index 0000000000..60c9eec0fa --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/EndangeredArmodon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class EndangeredArmodon extends mage.sets.tempestremastered.EndangeredArmodon { + + public EndangeredArmodon(UUID ownerId) { + super(ownerId); + this.cardNumber = 57; + this.expansionSetCode = "STH"; + } + + public EndangeredArmodon(final EndangeredArmodon card) { + super(card); + } + + @Override + public EndangeredArmodon copy() { + return new EndangeredArmodon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/FanningTheFlames.java b/Mage.Sets/src/mage/sets/stronghold/FanningTheFlames.java new file mode 100644 index 0000000000..83de39973b --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/FanningTheFlames.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.stronghold; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.BuybackAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author fireshoes + */ +public class FanningTheFlames extends CardImpl { + + public FanningTheFlames(UUID ownerId) { + super(ownerId, 80, "Fanning the Flames", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{X}{R}{R}"); + this.expansionSetCode = "STH"; + + // Buyback {3} + this.addAbility(new BuybackAbility("{3}")); + + // Fanning the Flames deals X damage to target creature or player. + this.getSpellAbility().addEffect(new DamageTargetEffect(new ManacostVariableValue())); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + } + + public FanningTheFlames(final FanningTheFlames card) { + super(card); + } + + @Override + public FanningTheFlames copy() { + return new FanningTheFlames(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/FlameWave.java b/Mage.Sets/src/mage/sets/stronghold/FlameWave.java new file mode 100644 index 0000000000..9d19ae47d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/FlameWave.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FlameWave extends mage.sets.ninthedition.FlameWave { + + public FlameWave(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + this.expansionSetCode = "STH"; + } + + public FlameWave(final FlameWave card) { + super(card); + } + + @Override + public FlameWave copy() { + return new FlameWave(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/FlowstoneBlade.java b/Mage.Sets/src/mage/sets/stronghold/FlowstoneBlade.java new file mode 100644 index 0000000000..e46608d693 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/FlowstoneBlade.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FlowstoneBlade extends mage.sets.conspiracy.FlowstoneBlade { + + public FlowstoneBlade(UUID ownerId) { + super(ownerId); + this.cardNumber = 83; + this.expansionSetCode = "STH"; + } + + public FlowstoneBlade(final FlowstoneBlade card) { + super(card); + } + + @Override + public FlowstoneBlade copy() { + return new FlowstoneBlade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/FlowstoneMauler.java b/Mage.Sets/src/mage/sets/stronghold/FlowstoneMauler.java new file mode 100644 index 0000000000..4be82ab83c --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/FlowstoneMauler.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.stronghold; + +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.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class FlowstoneMauler extends CardImpl { + + public FlowstoneMauler(UUID ownerId) { + super(ownerId, 85, "Flowstone Mauler", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); + this.expansionSetCode = "STH"; + this.subtype.add("Beast"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + + // {R}: Flowstone Mauler gets +1/-1 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(1, -1, Duration.EndOfTurn), + new ManaCostsImpl("{R}"))); + } + + public FlowstoneMauler(final FlowstoneMauler card) { + super(card); + } + + @Override + public FlowstoneMauler copy() { + return new FlowstoneMauler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/HammerheadShark.java b/Mage.Sets/src/mage/sets/stronghold/HammerheadShark.java new file mode 100644 index 0000000000..e65c0d412d --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/HammerheadShark.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HammerheadShark extends mage.sets.tempestremastered.HammerheadShark { + + public HammerheadShark(UUID ownerId) { + super(ownerId); + this.cardNumber = 32; + this.expansionSetCode = "STH"; + } + + public HammerheadShark(final HammerheadShark card) { + super(card); + } + + @Override + public HammerheadShark copy() { + return new HammerheadShark(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/LowlandBasilisk.java b/Mage.Sets/src/mage/sets/stronghold/LowlandBasilisk.java new file mode 100644 index 0000000000..9bf8b4dcad --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/LowlandBasilisk.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class LowlandBasilisk extends mage.sets.tempestremastered.LowlandBasilisk { + + public LowlandBasilisk(UUID ownerId) { + super(ownerId); + this.cardNumber = 59; + this.expansionSetCode = "STH"; + this.rarity = Rarity.COMMON; + } + + public LowlandBasilisk(final LowlandBasilisk card) { + super(card); + } + + @Override + public LowlandBasilisk copy() { + return new LowlandBasilisk(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/MoggInfestation.java b/Mage.Sets/src/mage/sets/stronghold/MoggInfestation.java new file mode 100644 index 0000000000..b408d3a3d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/MoggInfestation.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.stronghold; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.CreateTokenTargetEffect; +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.game.permanent.token.GoblinToken; +import mage.players.Player; +import mage.target.TargetPlayer; + +/** + * + * @author LevelX2 + */ +public class MoggInfestation extends CardImpl { + + public MoggInfestation(UUID ownerId) { + super(ownerId, 93, "Mogg Infestation", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{R}{R}"); + this.expansionSetCode = "STH"; + + // Destroy all creatures target player controls. For each creature that died this way, put two 1/1 red Goblin creature tokens onto the battlefield under that player's control. + getSpellAbility().addTarget(new TargetPlayer()); + getSpellAbility().addEffect(new MoggInfestationEffect()); + + } + + public MoggInfestation(final MoggInfestation card) { + super(card); + } + + @Override + public MoggInfestation copy() { + return new MoggInfestation(this); + } +} + +class MoggInfestationEffect extends OneShotEffect { + + public MoggInfestationEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Destroy all creatures target player controls. For each creature that died this way, put two 1/1 red Goblin creature tokens onto the battlefield under that player's control"; + } + + public MoggInfestationEffect(final MoggInfestationEffect effect) { + super(effect); + } + + @Override + public MoggInfestationEffect copy() { + return new MoggInfestationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && getTargetPointer().getFirst(game, source) != null) { + for (Permanent permanent: game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), getTargetPointer().getFirst(game, source), game)) { + if (permanent.destroy(source.getSourceId(), game, false)) { + Effect effect = new CreateTokenTargetEffect(new GoblinToken(), 2); + effect.setTargetPointer(getTargetPointer()); + effect.apply(game, source); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/MoggManiac.java b/Mage.Sets/src/mage/sets/stronghold/MoggManiac.java new file mode 100644 index 0000000000..291968e4ca --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/MoggManiac.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MoggManiac extends mage.sets.tempestremastered.MoggManiac { + + public MoggManiac(UUID ownerId) { + super(ownerId); + this.cardNumber = 94; + this.expansionSetCode = "STH"; + } + + public MoggManiac(final MoggManiac card) { + super(card); + } + + @Override + public MoggManiac copy() { + return new MoggManiac(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/Revenant.java b/Mage.Sets/src/mage/sets/stronghold/Revenant.java new file mode 100644 index 0000000000..1f4e20d494 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/Revenant.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Revenant extends mage.sets.tempestremastered.Revenant { + + public Revenant(UUID ownerId) { + super(ownerId); + this.cardNumber = 18; + this.expansionSetCode = "STH"; + this.rarity = Rarity.RARE; + } + + public Revenant(final Revenant card) { + super(card); + } + + @Override + public Revenant copy() { + return new Revenant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/SacredGround.java b/Mage.Sets/src/mage/sets/stronghold/SacredGround.java index f7ab63d010..08846966fe 100644 --- a/Mage.Sets/src/mage/sets/stronghold/SacredGround.java +++ b/Mage.Sets/src/mage/sets/stronghold/SacredGround.java @@ -92,11 +92,8 @@ class SacredGroundTriggeredAbility extends TriggeredAbilityImpl { if (Zone.BATTLEFIELD.equals(zce.getFromZone()) && Zone.GRAVEYARD.equals(zce.getToZone())) { Permanent targetPermanent = zce.getTarget(); if (targetPermanent.getCardType().contains(CardType.LAND) && targetPermanent.getControllerId().equals(getControllerId())) { - MageObject mageObject = game.getShortLivingLKI(event.getSourceId(), Zone.STACK); - if (mageObject instanceof StackObject) { - getEffects().get(0).setTargetPointer(new FixedTarget(targetPermanent.getId())); - return true; - } + getEffects().get(0).setTargetPointer(new FixedTarget(targetPermanent.getId())); + return true; } } } diff --git a/Mage.Sets/src/mage/sets/stronghold/SeethingAnger.java b/Mage.Sets/src/mage/sets/stronghold/SeethingAnger.java new file mode 100644 index 0000000000..72cb17bdd5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/SeethingAnger.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SeethingAnger extends mage.sets.tempestremastered.SeethingAnger { + + public SeethingAnger(UUID ownerId) { + super(ownerId); + this.cardNumber = 96; + this.expansionSetCode = "STH"; + } + + public SeethingAnger(final SeethingAnger card) { + super(card); + } + + @Override + public SeethingAnger copy() { + return new SeethingAnger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/ShamanEnKor.java b/Mage.Sets/src/mage/sets/stronghold/ShamanEnKor.java index 541cf6892e..45329b2df9 100644 --- a/Mage.Sets/src/mage/sets/stronghold/ShamanEnKor.java +++ b/Mage.Sets/src/mage/sets/stronghold/ShamanEnKor.java @@ -137,7 +137,7 @@ class ShamanEnKorReplacementEffect extends ReplacementEffectImpl { ShamanEnKorReplacementEffect() { super(Duration.EndOfTurn, Outcome.RedirectDamage); - staticText = "The next time a source of your choice would deal damage to target creature this turn, that damage is dealt to {this} instead."; + staticText = "The next time a source of your choice would deal damage to target creature this turn, that damage is dealt to {this} instead"; } ShamanEnKorReplacementEffect(final ShamanEnKorReplacementEffect effect) { diff --git a/Mage.Sets/src/mage/sets/stronghold/ShardPhoenix.java b/Mage.Sets/src/mage/sets/stronghold/ShardPhoenix.java new file mode 100644 index 0000000000..2b4860f31e --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/ShardPhoenix.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ShardPhoenix extends mage.sets.tempestremastered.ShardPhoenix { + + public ShardPhoenix(UUID ownerId) { + super(ownerId); + this.cardNumber = 97; + this.expansionSetCode = "STH"; + this.rarity = Rarity.RARE; + } + + public ShardPhoenix(final ShardPhoenix card) { + super(card); + } + + @Override + public ShardPhoenix copy() { + return new ShardPhoenix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/SilverWyvern.java b/Mage.Sets/src/mage/sets/stronghold/SilverWyvern.java new file mode 100644 index 0000000000..28096c464f --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/SilverWyvern.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class SilverWyvern extends mage.sets.tempestremastered.SilverWyvern { + + public SilverWyvern(UUID ownerId) { + super(ownerId); + this.cardNumber = 43; + this.expansionSetCode = "STH"; + } + + public SilverWyvern(final SilverWyvern card) { + super(card); + } + + @Override + public SilverWyvern copy() { + return new SilverWyvern(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/SpikeBreeder.java b/Mage.Sets/src/mage/sets/stronghold/SpikeBreeder.java new file mode 100644 index 0000000000..4039154002 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/SpikeBreeder.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SpikeBreeder extends mage.sets.tempestremastered.SpikeBreeder { + + public SpikeBreeder(UUID ownerId) { + super(ownerId); + this.cardNumber = 66; + this.expansionSetCode = "STH"; + this.rarity = Rarity.RARE; + } + + public SpikeBreeder(final SpikeBreeder card) { + super(card); + } + + @Override + public SpikeBreeder copy() { + return new SpikeBreeder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/SpikeColony.java b/Mage.Sets/src/mage/sets/stronghold/SpikeColony.java new file mode 100644 index 0000000000..11607e9d45 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/SpikeColony.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.stronghold; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SpikeColony extends CardImpl { + + public SpikeColony(UUID ownerId) { + super(ownerId, 67, "Spike Colony", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + this.expansionSetCode = "STH"; + this.subtype.add("Spike"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Spike Colony enters the battlefield with four +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)), "with four +1/+1 counters on it")); + + // {2}, Remove a +1/+1 counter from Spike Colony: Put a +1/+1 counter on target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new GenericManaCost(2)); + ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public SpikeColony(final SpikeColony card) { + super(card); + } + + @Override + public SpikeColony copy() { + return new SpikeColony(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/SpiritEnKor.java b/Mage.Sets/src/mage/sets/stronghold/SpiritEnKor.java new file mode 100644 index 0000000000..cde2cd64b8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/SpiritEnKor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpiritEnKor extends mage.sets.tempestremastered.SpiritEnKor { + + public SpiritEnKor(UUID ownerId) { + super(ownerId); + this.cardNumber = 119; + this.expansionSetCode = "STH"; + } + + public SpiritEnKor(final SpiritEnKor card) { + super(card); + } + + @Override + public SpiritEnKor copy() { + return new SpiritEnKor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/SpittingHydra.java b/Mage.Sets/src/mage/sets/stronghold/SpittingHydra.java new file mode 100644 index 0000000000..39640da008 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/SpittingHydra.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpittingHydra extends mage.sets.tempestremastered.SpittingHydra { + + public SpittingHydra(UUID ownerId) { + super(ownerId); + this.cardNumber = 99; + this.expansionSetCode = "STH"; + } + + public SpittingHydra(final SpittingHydra card) { + super(card); + } + + @Override + public SpittingHydra copy() { + return new SpittingHydra(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/VerdantTouch.java b/Mage.Sets/src/mage/sets/stronghold/VerdantTouch.java new file mode 100644 index 0000000000..9f14e4751f --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/VerdantTouch.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.stronghold; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class VerdantTouch extends mage.sets.tempestremastered.VerdantTouch { + + public VerdantTouch(UUID ownerId) { + super(ownerId); + this.cardNumber = 73; + this.expansionSetCode = "STH"; + this.rarity = Rarity.RARE; + } + + public VerdantTouch(final VerdantTouch card) { + super(card); + } + + @Override + public VerdantTouch copy() { + return new VerdantTouch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/VolrathsLaboratory.java b/Mage.Sets/src/mage/sets/stronghold/VolrathsLaboratory.java new file mode 100644 index 0000000000..db28abd0a8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/VolrathsLaboratory.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class VolrathsLaboratory extends mage.sets.tempestremastered.VolrathsLaboratory { + + public VolrathsLaboratory(UUID ownerId) { + super(ownerId); + this.cardNumber = 136; + this.expansionSetCode = "STH"; + } + + public VolrathsLaboratory(final VolrathsLaboratory card) { + super(card); + } + + @Override + public VolrathsLaboratory copy() { + return new VolrathsLaboratory(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/WallOfSouls.java b/Mage.Sets/src/mage/sets/stronghold/WallOfSouls.java new file mode 100644 index 0000000000..7289f19b75 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/WallOfSouls.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WallOfSouls extends mage.sets.tempestremastered.WallOfSouls { + + public WallOfSouls(UUID ownerId) { + super(ownerId); + this.cardNumber = 25; + this.expansionSetCode = "STH"; + } + + public WallOfSouls(final WallOfSouls card) { + super(card); + } + + @Override + public WallOfSouls copy() { + return new WallOfSouls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/WarriorEnKor.java b/Mage.Sets/src/mage/sets/stronghold/WarriorEnKor.java new file mode 100644 index 0000000000..a6eaf993d4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/WarriorEnKor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WarriorEnKor extends mage.sets.tempestremastered.WarriorEnKor { + + public WarriorEnKor(UUID ownerId) { + super(ownerId); + this.cardNumber = 124; + this.expansionSetCode = "STH"; + } + + public WarriorEnKor(final WarriorEnKor card) { + super(card); + } + + @Override + public WarriorEnKor copy() { + return new WarriorEnKor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Anoint.java b/Mage.Sets/src/mage/sets/tempest/Anoint.java new file mode 100644 index 0000000000..1cd7500a01 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Anoint.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.tempest; + +import java.util.UUID; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +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 fireshoes + */ +public class Anoint extends CardImpl { + + public Anoint(UUID ownerId) { + super(ownerId, 215, "Anoint", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{W}"); + this.expansionSetCode = "TMP"; + + // Buyback {3} + this.addAbility(new BuybackAbility("{3}")); + + // Prevent the next 3 damage that would be dealt to target creature this turn. + this.getSpellAbility().addEffect(new PreventDamageToTargetEffect(Duration.EndOfTurn, 3)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public Anoint(final Anoint card) { + super(card); + } + + @Override + public Anoint copy() { + return new Anoint(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/AvengingAngel.java b/Mage.Sets/src/mage/sets/tempest/AvengingAngel.java new file mode 100644 index 0000000000..62022df453 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/AvengingAngel.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.tempest; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class AvengingAngel extends mage.sets.tempestremastered.AvengingAngel { + + public AvengingAngel(UUID ownerId) { + super(ownerId); + this.cardNumber = 219; + this.expansionSetCode = "TMP"; + this.rarity = Rarity.RARE; + } + + public AvengingAngel(final AvengingAngel card) { + super(card); + } + + @Override + public AvengingAngel copy() { + return new AvengingAngel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/CoffinQueen.java b/Mage.Sets/src/mage/sets/tempest/CoffinQueen.java new file mode 100644 index 0000000000..b030b93e2a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/CoffinQueen.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 anonymous + */ +public class CoffinQueen extends mage.sets.tempestremastered.CoffinQueen { + + public CoffinQueen(UUID ownerId) { + super(ownerId); + this.cardNumber = 8; + this.expansionSetCode = "TMP"; + } + + public CoffinQueen(final CoffinQueen card) { + super(card); + } + + @Override + public CoffinQueen copy() { + return new CoffinQueen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/CorpseDance.java b/Mage.Sets/src/mage/sets/tempest/CorpseDance.java index e9c9bf61c5..3476d2477c 100644 --- a/Mage.Sets/src/mage/sets/tempest/CorpseDance.java +++ b/Mage.Sets/src/mage/sets/tempest/CorpseDance.java @@ -116,7 +116,7 @@ class CorpseDanceEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/tempest/DauthiMarauder.java b/Mage.Sets/src/mage/sets/tempest/DauthiMarauder.java new file mode 100644 index 0000000000..ca1b9f45c3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/DauthiMarauder.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.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class DauthiMarauder extends CardImpl { + + public DauthiMarauder(UUID ownerId) { + super(ownerId, 17, "Dauthi Marauder", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Dauthi"); + this.subtype.add("Minion"); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + } + + public DauthiMarauder(final DauthiMarauder card) { + super(card); + } + + @Override + public DauthiMarauder copy() { + return new DauthiMarauder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Deadshot.java b/Mage.Sets/src/mage/sets/tempest/Deadshot.java new file mode 100644 index 0000000000..dabf0b2679 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Deadshot.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.tempest; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Deadshot extends mage.sets.tempestremastered.Deadshot { + + public Deadshot(UUID ownerId) { + super(ownerId); + this.cardNumber = 170; + this.expansionSetCode = "TMP"; + this.rarity = Rarity.RARE; + } + + public Deadshot(final Deadshot card) { + super(card); + } + + @Override + public Deadshot copy() { + return new Deadshot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Dracoplasm.java b/Mage.Sets/src/mage/sets/tempest/Dracoplasm.java new file mode 100644 index 0000000000..a53c41a32c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Dracoplasm.java @@ -0,0 +1,150 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author LevelX2 + */ +public class Dracoplasm extends CardImpl { + + public Dracoplasm(UUID ownerId) { + super(ownerId, 341, "Dracoplasm", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{U}{R}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Shapeshifter"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // As Dracoplasm enters the battlefield, sacrifice any number of creatures. Dracoplasm's power becomes the total power of those creatures and its toughness becomes their total toughness. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DracoplasmEffect())); + + // {R}: Dracoplasm gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.R))); + } + + public Dracoplasm(final Dracoplasm card) { + super(card); + } + + @Override + public Dracoplasm copy() { + return new Dracoplasm(this); + } +} + +class DracoplasmEffect extends ReplacementEffectImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); + + static { + filter.add(new AnotherPredicate()); + } + + public DracoplasmEffect() { + super(Duration.WhileOnBattlefield, Outcome.BoostCreature); + this.staticText = "As {this} enters the battlefield, sacrifice any number of creatures. {this}'s power becomes the total power of those creatures and its toughness becomes their total toughness"; + } + + public DracoplasmEffect(final DracoplasmEffect effect) { + super(effect); + } + + @Override + public DracoplasmEffect copy() { + return new DracoplasmEffect(this); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getTargetId().equals(source.getSourceId()); + + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Permanent creature = game.getPermanent(event.getTargetId()); + Player controller = game.getPlayer(source.getControllerId()); + if (creature != null && controller != null) { + Target target = new TargetControlledPermanent(0, Integer.MAX_VALUE, filter, true); + if (!target.canChoose(source.getSourceId(), source.getControllerId(), game)) { + return false; + } + controller.chooseTarget(Outcome.Detriment, target, source, game); + if (target.getTargets().size() > 0) { + int power = 0; + int toughness = 0; + for (UUID targetId: target.getTargets()) { + Permanent targetCreature = game.getPermanent(targetId); + if (targetCreature != null && targetCreature.sacrifice(source.getSourceId(), game)) { + power += targetCreature.getPower().getValue(); + toughness += targetCreature.getToughness().getValue(); + } + } + ContinuousEffect effect = new SetPowerToughnessSourceEffect(power, toughness, Duration.Custom); + game.addEffect(effect, source); + } + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/tempest/FieldOfSouls.java b/Mage.Sets/src/mage/sets/tempest/FieldOfSouls.java new file mode 100644 index 0000000000..2bf3ac43a5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/FieldOfSouls.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class FieldOfSouls extends mage.sets.tempestremastered.FieldOfSouls { + + public FieldOfSouls(UUID ownerId) { + super(ownerId); + this.cardNumber = 230; + this.expansionSetCode = "TMP"; + } + + public FieldOfSouls(final FieldOfSouls card) { + super(card); + } + + @Override + public FieldOfSouls copy() { + return new FieldOfSouls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Grindstone.java b/Mage.Sets/src/mage/sets/tempest/Grindstone.java index a96272b8a2..c27434aef0 100644 --- a/Mage.Sets/src/mage/sets/tempest/Grindstone.java +++ b/Mage.Sets/src/mage/sets/tempest/Grindstone.java @@ -106,17 +106,23 @@ class GrindstoneEffect extends OneShotEffect { return true; } colorShared = false; - Card card1 = targetPlayer.getLibrary().removeFromTop(game); - if (card1 != null) { - targetPlayer.moveCardToGraveyardWithInfo(card1, source.getSourceId(), game, Zone.LIBRARY); - Card card2 = targetPlayer.getLibrary().removeFromTop(game); - if (card2 != null) { - targetPlayer.moveCardToGraveyardWithInfo(card2, source.getSourceId(), game, Zone.LIBRARY); + Card card1 = null; + Card card2 = null; + if (targetPlayer.getLibrary().size() > 0) { + card1 = targetPlayer.getLibrary().removeFromTop(game); + if (targetPlayer.getLibrary().size() > 0) { + card2 = targetPlayer.getLibrary().removeFromTop(game); if (card1.getColor().hasColor() && card2.getColor().hasColor()) { colorShared = card1.getColor().shares(card2.getColor()); - } - } - } + } + } + } + if (card1 != null) { + targetPlayer.moveCardToGraveyardWithInfo(card1, source.getSourceId(), game, Zone.LIBRARY); + } + if (card2 != null) { + targetPlayer.moveCardToGraveyardWithInfo(card2, source.getSourceId(), game, Zone.LIBRARY); + } } while (colorShared && targetPlayer.isInGame()); return true; } diff --git a/Mage.Sets/src/mage/sets/tempest/HeartwoodDryad.java b/Mage.Sets/src/mage/sets/tempest/HeartwoodDryad.java new file mode 100644 index 0000000000..5d56921c33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/HeartwoodDryad.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class HeartwoodDryad extends mage.sets.tempestremastered.HeartwoodDryad { + + public HeartwoodDryad(UUID ownerId) { + super(ownerId); + this.cardNumber = 125; + this.expansionSetCode = "TMP"; + } + + public HeartwoodDryad(final HeartwoodDryad card) { + super(card); + } + + @Override + public HeartwoodDryad copy() { + return new HeartwoodDryad(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Krakilin.java b/Mage.Sets/src/mage/sets/tempest/Krakilin.java new file mode 100644 index 0000000000..08f6c05747 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Krakilin.java @@ -0,0 +1,110 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.SpellAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.RegenerateSourceEffect; +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; + +/** + * + * @author fireshoes + */ +public class Krakilin extends CardImpl { + + public Krakilin(UUID ownerId) { + super(ownerId, 129, "Krakilin", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{X}{G}{G}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Beast"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Krakilin enters the battlefield with X +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new KrakilinEffect())); + + // {1}{G}: Regenerate Krakilin. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{1}{G}"))); + } + + public Krakilin(final Krakilin card) { + super(card); + } + + @Override + public Krakilin copy() { + return new Krakilin(this); + } +} + +class KrakilinEffect extends OneShotEffect { + + public KrakilinEffect() { + super(Outcome.BoostCreature); + staticText = "{this} enters the battlefield with X +1/+1 counters on it"; + } + + public KrakilinEffect(final KrakilinEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + Object obj = getValue(mage.abilities.effects.EntersBattlefieldEffect.SOURCE_CAST_SPELL_ABILITY); + if (obj != null && obj instanceof SpellAbility) { + // delete to prevent using it again if put into battlefield from other effect + setValue(mage.abilities.effects.EntersBattlefieldEffect.SOURCE_CAST_SPELL_ABILITY, null); + int amount = ((SpellAbility)obj).getManaCostsToPay().getX(); + if (amount > 0) { + permanent.addCounters(CounterType.P1P1.createInstance(amount), game); + } + } + } + return true; + } + + @Override + public KrakilinEffect copy() { + return new KrakilinEffect(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempest/Legerdemain.java b/Mage.Sets/src/mage/sets/tempest/Legerdemain.java new file mode 100644 index 0000000000..b9a529f2e8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Legerdemain.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.effects.common.continuous.ExchangeControlTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; + +/** + * + * @author emerald000 + */ +public class Legerdemain extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or creature"); + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), new CardTypePredicate(CardType.CREATURE))); + } + + public Legerdemain(UUID ownerId) { + super(ownerId, 72, "Legerdemain", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{U}{U}"); + this.expansionSetCode = "TMP"; + + // Exchange control of target artifact or creature and another target permanent that shares one of those types with it. + this.getSpellAbility().addEffect(new ExchangeControlTargetEffect(Duration.EndOfGame, "Exchange control of target artifact or creature and another target permanent that shares one of those types with it", false, true)); + this.getSpellAbility().addTarget(new TargetPermanent(filter)); + this.getSpellAbility().addTarget(new LegerdemainSecondTarget()); + } + + public Legerdemain(final Legerdemain card) { + super(card); + } + + @Override + public Legerdemain copy() { + return new Legerdemain(this); + } +} + +class LegerdemainSecondTarget extends TargetPermanent { + + LegerdemainSecondTarget() { + super(); + this.targetName = "another permanent that shares one of those types"; + } + + LegerdemainSecondTarget(final LegerdemainSecondTarget target) { + super(target); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + Permanent firstPermanent = game.getPermanent(source.getTargets().getFirstTarget()); + Permanent secondPermanent = game.getPermanent(id); + if (firstPermanent != null && secondPermanent != null) { + if (firstPermanent.getCardType().contains(CardType.CREATURE) && secondPermanent.getCardType().contains(CardType.CREATURE)) { + return true; + } + if (firstPermanent.getCardType().contains(CardType.ARTIFACT) && secondPermanent.getCardType().contains(CardType.ARTIFACT)) { + return true; + } + } + return false; + } + + @Override + public LegerdemainSecondTarget copy() { + return new LegerdemainSecondTarget(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/LightOfDay.java b/Mage.Sets/src/mage/sets/tempest/LightOfDay.java index 54b75d7f44..a934aa4ae1 100644 --- a/Mage.Sets/src/mage/sets/tempest/LightOfDay.java +++ b/Mage.Sets/src/mage/sets/tempest/LightOfDay.java @@ -81,33 +81,32 @@ class LightOfDayEffect extends ReplacementEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - return true; + public LightOfDayEffect copy() { + return new LightOfDayEffect(this); } @Override - public LightOfDayEffect copy() { - return new LightOfDayEffect(this); + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.DECLARE_ATTACKER || event.getType() == EventType.DECLARE_BLOCKER; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent permanent = game.getPermanent(event.getSourceId()); + if (permanent != null) { + Player player = game.getPlayer(source.getControllerId()); + if (player.getInRange().contains(permanent.getControllerId())) { + if (permanent.getColor().isBlack()) { + return true; + } + } + } + return false; } @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { return true; } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.DECLARE_ATTACKER || event.getType() == EventType.DECLARE_BLOCKER) { - Permanent permanent = game.getPermanent(event.getSourceId()); - if (permanent != null) { - Player player = game.getPlayer(source.getControllerId()); - if (player.getInRange().contains(permanent.getControllerId())) { - if (permanent.getColor().isBlack()) { - return true; - } - } - } - } - return false; - } + } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempest/LivingDeath.java b/Mage.Sets/src/mage/sets/tempest/LivingDeath.java index 1ee4a534c7..9bf26ec389 100644 --- a/Mage.Sets/src/mage/sets/tempest/LivingDeath.java +++ b/Mage.Sets/src/mage/sets/tempest/LivingDeath.java @@ -94,7 +94,7 @@ class LivingDeathEffect extends OneShotEffect { Player player = game.getPlayer(playerId); if (player != null) { for (Card card :player.getGraveyard().getCards(new FilterCreatureCard(), game)) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.GRAVEYARD, true); } } } diff --git a/Mage.Sets/src/mage/sets/tempest/Lobotomy.java b/Mage.Sets/src/mage/sets/tempest/Lobotomy.java index 4f27348f55..145fa76581 100644 --- a/Mage.Sets/src/mage/sets/tempest/Lobotomy.java +++ b/Mage.Sets/src/mage/sets/tempest/Lobotomy.java @@ -124,7 +124,7 @@ class LobotomyEffect extends OneShotEffect { if (chosenCard != null) { for (Card checkCard : targetPlayer.getGraveyard().getCards(game)) { if (checkCard.getName().equals(chosenCard.getName())) { - controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(checkCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); } } @@ -134,7 +134,7 @@ class LobotomyEffect extends OneShotEffect { for(UUID cardId: targetCardsHand.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } } } @@ -147,7 +147,7 @@ class LobotomyEffect extends OneShotEffect { for(UUID cardId: targetCardsLibrary.getTargets()) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/tempest/Magmasaur.java b/Mage.Sets/src/mage/sets/tempest/Magmasaur.java new file mode 100644 index 0000000000..74139e6e26 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Magmasaur.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 mage.sets.tempest; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageEverythingEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +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.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class Magmasaur extends CardImpl { + + public Magmasaur(UUID ownerId) { + super(ownerId, 188, "Magmasaur", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Elemental"); + this.subtype.add("Lizard"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Magmasaur enters the battlefield with five +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(5)), + "with five +1/+1 counters on it")); + + // At the beginning of your upkeep, you may remove a +1/+1 counter from Magmasaur. If you don't, sacrifice Magmasaur and it deals damage equal to the number of +1/+1 counters on it to each creature without flying and each player. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new MagmasaurEffect(), TargetController.YOU, false, false)); + } + + public Magmasaur(final Magmasaur card) { + super(card); + } + + @Override + public Magmasaur copy() { + return new Magmasaur(this); + } +} + +class MagmasaurEffect extends OneShotEffect { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature without flying"); + + static { + filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); + } + + public MagmasaurEffect() { + super(Outcome.Damage); + this.staticText = "you may remove a +1/+1 counter from {this}. If you don't, sacrifice {this} and it deals damage equal to the number of +1/+1 counters on it to each creature without flying and each player"; + } + + public MagmasaurEffect(final MagmasaurEffect effect) { + super(effect); + } + + @Override + public MagmasaurEffect copy() { + return new MagmasaurEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourceObject = (Permanent)source.getSourceObjectIfItStillExists(game); + if (sourceObject != null && controller != null) { + if (controller.chooseUse(outcome, "Remove a +1/+1 counter from " + sourceObject.getLogName() + "?", game)) { + sourceObject.getCounters().removeCounter(CounterType.P1P1, 1); + } else { + int counters = sourceObject.getCounters().getCount(CounterType.P1P1); + sourceObject.sacrifice(source.getSourceId(), game); + new DamageEverythingEffect(counters, filter).apply(game, source); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java b/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java index 8b48c5bf77..6bb3a3c78c 100644 --- a/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java +++ b/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java @@ -70,7 +70,7 @@ class ManaSeveranceEffect extends SearchEffect { for (UUID cardId : target.getTargets()) { Card card = controller.getLibrary().getCard(cardId, game); if (card != null) { - controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } } } diff --git a/Mage.Sets/src/mage/sets/tempest/MazeOfShadows.java b/Mage.Sets/src/mage/sets/tempest/MazeOfShadows.java new file mode 100644 index 0000000000..9c68c49520 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/MazeOfShadows.java @@ -0,0 +1,87 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.PreventDamageByTargetEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterAttackingCreature; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetAttackingCreature; + +/** + * + * @author emerald000 + */ +public class MazeOfShadows extends CardImpl { + + private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creature with shadow"); + static { + filter.add(new AbilityPredicate(ShadowAbility.class)); + } + + public MazeOfShadows(UUID ownerId) { + super(ownerId, 317, "Maze of Shadows", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "TMP"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {tap}: Untap target attacking creature with shadow. Prevent all combat damage that would be dealt to and dealt by that creature this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new TapSourceCost()); + Effect effect = new PreventDamageByTargetEffect(Duration.EndOfTurn, true); + effect.setText("Prevent all combat damage that would be dealt to"); + ability.addEffect(effect); + effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, Integer.MAX_VALUE, true); + effect.setText("and dealt by that creature this turn"); + ability.addEffect(effect); + ability.addTarget(new TargetAttackingCreature(1, 1, filter, false)); + this.addAbility(ability); + } + + public MazeOfShadows(final MazeOfShadows card) { + super(card); + } + + @Override + public MazeOfShadows copy() { + return new MazeOfShadows(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/MoggConscripts.java b/Mage.Sets/src/mage/sets/tempest/MoggConscripts.java index 4163603608..1160572117 100644 --- a/Mage.Sets/src/mage/sets/tempest/MoggConscripts.java +++ b/Mage.Sets/src/mage/sets/tempest/MoggConscripts.java @@ -27,8 +27,6 @@ */ package mage.sets.tempest; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; @@ -38,13 +36,10 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; -import mage.constants.WatcherScope; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; import mage.game.permanent.Permanent; -import mage.game.stack.Spell; -import mage.watchers.Watcher; +import mage.watchers.common.PlayerCastCreatureWatcher; /** * @@ -107,42 +102,3 @@ class MoggConscriptsEffect extends RestrictionEffect { return false; } } - -class PlayerCastCreatureWatcher extends Watcher { - - Set playerIds = new HashSet<>(); - - public PlayerCastCreatureWatcher() { - super("PlayerCastCreature", WatcherScope.GAME); - } - - public PlayerCastCreatureWatcher(final PlayerCastCreatureWatcher watcher) { - super(watcher); - this.playerIds.addAll(watcher.playerIds); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.SPELL_CAST) { - Spell spell = (Spell) game.getObject(event.getTargetId()); - if (spell.getCardType().contains(CardType.CREATURE)) { - playerIds.add(spell.getControllerId()); - } - } - } - - @Override - public PlayerCastCreatureWatcher copy() { - return new PlayerCastCreatureWatcher(this); - } - - @Override - public void reset() { - super.reset(); - playerIds.clear(); - } - - public boolean playerDidCastCreatureThisTurn(UUID playerId) { - return playerIds.contains(playerId); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempest/MountedArchers.java b/Mage.Sets/src/mage/sets/tempest/MountedArchers.java new file mode 100644 index 0000000000..5c1348f4d4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/MountedArchers.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class MountedArchers extends mage.sets.tempestremastered.MountedArchers { + + public MountedArchers(UUID ownerId) { + super(ownerId); + this.cardNumber = 242; + this.expansionSetCode = "TMP"; + } + + public MountedArchers(final MountedArchers card) { + super(card); + } + + @Override + public MountedArchers copy() { + return new MountedArchers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/OracleEnVec.java b/Mage.Sets/src/mage/sets/tempest/OracleEnVec.java new file mode 100644 index 0000000000..f7c0de990e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/OracleEnVec.java @@ -0,0 +1,289 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.List; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.Mode; +import mage.abilities.common.ActivateIfConditionActivatedAbility; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.RequirementEffect; +import mage.abilities.effects.RestrictionEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TurnPhase; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.common.AttackedThisTurnWatcher; + +/** + * + * @author emerald000 + */ +public class OracleEnVec extends CardImpl { + + public OracleEnVec(UUID ownerId) { + super(ownerId, 243, "Oracle en-Vec", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Human"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Target opponent chooses any number of creatures he or she controls. During that player's next turn, the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, destroy each of the chosen creatures that didn't attack. Activate this ability only during your turn. + Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new OracleEnVecEffect(), new TapSourceCost(), MyTurnCondition.getInstance()); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability, new AttackedThisTurnWatcher()); + } + + public OracleEnVec(final OracleEnVec card) { + super(card); + } + + @Override + public OracleEnVec copy() { + return new OracleEnVec(this); + } +} + +class OracleEnVecEffect extends OneShotEffect { + + OracleEnVecEffect() { + super(Outcome.Benefit); + this.staticText = "Target opponent chooses any number of creatures he or she controls. During that player's next turn, the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, destroy each of the chosen creatures that didn't attack"; + } + + OracleEnVecEffect(final OracleEnVecEffect effect) { + super(effect); + } + + @Override + public OracleEnVecEffect copy() { + return new OracleEnVecEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player opponent = game.getPlayer(this.getTargetPointer().getFirst(game, source)); + if (opponent != null) { + Target target = new TargetControlledCreaturePermanent(0, Integer.MAX_VALUE, new FilterControlledCreaturePermanent(), true); + if (target.choose(Outcome.Neutral, opponent.getId(), source.getSourceId(), game)) { + for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterControlledCreaturePermanent(), opponent.getId(), source.getSourceId(), game)) { + if (target.getTargets().contains(permanent.getId())) { + RequirementEffect effect = new OracleEnVecMustAttackRequirementEffect(); + effect.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect, source); + } + else { + RestrictionEffect effect = new OracleEnVecCantAttackRestrictionEffect(); + effect.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect, source); + } + } + DelayedTriggeredAbility delayedAbility = new OracleEnVecDelayedTriggeredAbility(game.getTurnNum(), target.getTargets()); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + game.addDelayedTriggeredAbility(delayedAbility); + return true; + } + } + return false; + } +} + +class OracleEnVecMustAttackRequirementEffect extends RequirementEffect { + + OracleEnVecMustAttackRequirementEffect() { + super(Duration.Custom); + } + + OracleEnVecMustAttackRequirementEffect(final OracleEnVecMustAttackRequirementEffect effect) { + super(effect); + } + + @Override + public OracleEnVecMustAttackRequirementEffect copy() { + return new OracleEnVecMustAttackRequirementEffect(this); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return this.getTargetPointer().getFirst(game, source).equals(permanent.getId()); + } + + @Override + public boolean mustAttack(Game game) { + return true; + } + + @Override + public boolean mustBlock(Game game) { + return false; + } + + @Override + public boolean isInactive(Ability source, Game game) { + return startingTurn != game.getTurnNum() + && (game.getPhase().getType() == TurnPhase.END + && game.getActivePlayerId().equals(this.getTargetPointer().getFirst(game, source))); + } + + @Override + public String getText(Mode mode) { + return "{this} attack if able."; + } +} + +class OracleEnVecCantAttackRestrictionEffect extends RestrictionEffect { + + OracleEnVecCantAttackRestrictionEffect() { + super(Duration.Custom); + } + + OracleEnVecCantAttackRestrictionEffect(final OracleEnVecCantAttackRestrictionEffect effect) { + super(effect); + } + + @Override + public OracleEnVecCantAttackRestrictionEffect copy() { + return new OracleEnVecCantAttackRestrictionEffect(this); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return this.getTargetPointer().getFirst(game, source).equals(permanent.getId()); + } + + @Override + public boolean canAttack(Game game) { + return false; + } + + @Override + public boolean isInactive(Ability source, Game game) { + return startingTurn != game.getTurnNum() + && (game.getPhase().getType() == TurnPhase.END + && game.getActivePlayerId().equals(this.getTargetPointer().getFirst(game, source))); + } + + @Override + public String getText(Mode mode) { + return "{this} can't attack."; + } +} + +class OracleEnVecDelayedTriggeredAbility extends DelayedTriggeredAbility { + + private final int startingTurn; + + OracleEnVecDelayedTriggeredAbility(int startingTurn, List chosenCreatures) { + super(new OracleEnVecDestroyEffect(chosenCreatures), Duration.EndOfGame, true); + this.startingTurn = startingTurn; + } + + OracleEnVecDelayedTriggeredAbility(final OracleEnVecDelayedTriggeredAbility ability) { + super(ability); + this.startingTurn = ability.startingTurn; + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.END_TURN_STEP_PRE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return startingTurn != game.getTurnNum() && game.getActivePlayerId().equals(event.getPlayerId()); + } + + @Override + public OracleEnVecDelayedTriggeredAbility copy() { + return new OracleEnVecDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "At the beginning of that turn's end step, destroy each of the chosen creatures that didn't attack."; + } +} + +class OracleEnVecDestroyEffect extends OneShotEffect { + + private final List chosenCreatures; + + OracleEnVecDestroyEffect(List chosenCreatures) { + super(Outcome.DestroyPermanent); + this.chosenCreatures = chosenCreatures; + this.staticText = "destroy each of the chosen creatures that didn't attack"; + } + + OracleEnVecDestroyEffect(final OracleEnVecDestroyEffect effect) { + super(effect); + this.chosenCreatures = effect.chosenCreatures; + } + + @Override + public OracleEnVecDestroyEffect copy() { + return new OracleEnVecDestroyEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + AttackedThisTurnWatcher watcher = (AttackedThisTurnWatcher) game.getState().getWatchers().get("AttackedThisTurn"); + if (watcher != null) { + for (UUID targetId : chosenCreatures) { + if (!watcher.getAttackedThisTurnCreatures().contains(targetId)) { + Effect effect = new DestroyTargetEffect(); + effect.setTargetPointer(new FixedTarget(targetId)); + effect.apply(game, source); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Propaganda.java b/Mage.Sets/src/mage/sets/tempest/Propaganda.java index ab30cc4533..ad4fabbee3 100644 --- a/Mage.Sets/src/mage/sets/tempest/Propaganda.java +++ b/Mage.Sets/src/mage/sets/tempest/Propaganda.java @@ -81,8 +81,20 @@ class PropagandaReplacementEffect extends ReplacementEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getTargetId().equals(source.getControllerId())) { + Player attackedPlayer = game.getPlayer(event.getTargetId()); + if (attackedPlayer != null) { + // only if a player is attacked. Attacking a planeswalker is free + return true; + } + } + return false; } @Override @@ -101,19 +113,7 @@ class PropagandaReplacementEffect extends ReplacementEffectImpl { } return false; } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER && event.getTargetId().equals(source.getControllerId())) { - Player attackedPlayer = game.getPlayer(event.getTargetId()); - if (attackedPlayer != null) { - // only if a player is attacked. Attacking a planeswalker is free - return true; - } - } - return false; - } - + @Override public PropagandaReplacementEffect copy() { return new PropagandaReplacementEffect(this); diff --git a/Mage.Sets/src/mage/sets/tempest/RathiDragon.java b/Mage.Sets/src/mage/sets/tempest/RathiDragon.java new file mode 100644 index 0000000000..3bad6d6d51 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/RathiDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class RathiDragon extends mage.sets.ninthedition.RathiDragon { + + public RathiDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 196; + this.expansionSetCode = "TMP"; + } + + public RathiDragon(final RathiDragon card) { + super(card); + } + + @Override + public RathiDragon copy() { + return new RathiDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/RealityAnchor.java b/Mage.Sets/src/mage/sets/tempest/RealityAnchor.java new file mode 100644 index 0000000000..ff23534beb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/RealityAnchor.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.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class RealityAnchor extends CardImpl { + + public RealityAnchor(UUID ownerId) { + super(ownerId, 140, "Reality Anchor", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "TMP"; + + // Target creature loses shadow until end of turn. + this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(ShadowAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public RealityAnchor(final RealityAnchor card) { + super(card); + } + + @Override + public RealityAnchor copy() { + return new RealityAnchor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Recycle.java b/Mage.Sets/src/mage/sets/tempest/Recycle.java new file mode 100644 index 0000000000..c34d0edf4d --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Recycle.java @@ -0,0 +1,105 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.SkipDrawStepEffect; +import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect; +import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect.HandSizeModification; +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.GameEvent; +import mage.game.events.GameEvent.EventType; + +/** + * + * @author emerald000 + */ +public class Recycle extends CardImpl { + + public Recycle(UUID ownerId) { + super(ownerId, 142, "Recycle", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{4}{G}{G}"); + this.expansionSetCode = "TMP"; + + // Skip your draw step. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipDrawStepEffect())); + + // Whenever you play a card, draw a card. + this.addAbility(new RecycleTriggeredAbility()); + + // Your maximum hand size is two. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MaximumHandSizeControllerEffect(2, Duration.WhileOnBattlefield, HandSizeModification.SET))); + } + + public Recycle(final Recycle card) { + super(card); + } + + @Override + public Recycle copy() { + return new Recycle(this); + } +} + +class RecycleTriggeredAbility extends TriggeredAbilityImpl { + + RecycleTriggeredAbility() { + super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), false); + } + + RecycleTriggeredAbility(final RecycleTriggeredAbility ability) { + super(ability); + } + + @Override + public RecycleTriggeredAbility copy() { + return new RecycleTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.SPELL_CAST || event.getType() == EventType.LAND_PLAYED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getPlayerId().equals(this.getControllerId()); + } + + @Override + public String getRule() { + return "Whenever you play a card, draw a card."; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/Repentance.java b/Mage.Sets/src/mage/sets/tempest/Repentance.java new file mode 100644 index 0000000000..1597a79963 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Repentance.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class Repentance extends mage.sets.tempestremastered.Repentance { + + public Repentance(UUID ownerId) { + super(ownerId); + this.cardNumber = 249; + this.expansionSetCode = "TMP"; + } + + public Repentance(final Repentance card) { + super(card); + } + + @Override + public Repentance copy() { + return new Repentance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/RollingThunder.java b/Mage.Sets/src/mage/sets/tempest/RollingThunder.java new file mode 100644 index 0000000000..f84c6bc1a1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/RollingThunder.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.tempest; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RollingThunder extends mage.sets.tempestremastered.RollingThunder { + + public RollingThunder(UUID ownerId) { + super(ownerId); + this.cardNumber = 198; + this.expansionSetCode = "TMP"; + this.rarity = Rarity.COMMON; + } + + public RollingThunder(final RollingThunder card) { + super(card); + } + + @Override + public RollingThunder copy() { + return new RollingThunder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SandstoneWarrior.java b/Mage.Sets/src/mage/sets/tempest/SandstoneWarrior.java index 072b157ef9..c2f16dcdce 100644 --- a/Mage.Sets/src/mage/sets/tempest/SandstoneWarrior.java +++ b/Mage.Sets/src/mage/sets/tempest/SandstoneWarrior.java @@ -49,10 +49,13 @@ public class SandstoneWarrior extends CardImpl { this.subtype.add("Human"); this.subtype.add("Soldier"); this.subtype.add("Warrior"); - this.color.setRed(true); this.power = new MageInt(1); this.toughness = new MageInt(3); + + // First strike (This creature deals combat damage before creatures without first strike.) this.addAbility(FirstStrikeAbility.getInstance()); + + // {R}: Sandstone Warrior gets +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.R))); } diff --git a/Mage.Sets/src/mage/sets/tempest/Shadowstorm.java b/Mage.Sets/src/mage/sets/tempest/Shadowstorm.java new file mode 100644 index 0000000000..1b0470af01 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/Shadowstorm.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.effects.common.DamageAllEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; + +/** + * + * @author fireshoes + */ +public class Shadowstorm extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with shadow"); + + static { + filter.add(new AbilityPredicate(ShadowAbility.class)); + } + + public Shadowstorm(UUID ownerId) { + super(ownerId, 202, "Shadowstorm", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{R}"); + this.expansionSetCode = "TMP"; + + // Shadowstorm deals 2 damage to each creature with shadow. + this.getSpellAbility().addEffect(new DamageAllEffect(2, filter)); + } + + public Shadowstorm(final Shadowstorm card) { + super(card); + } + + @Override + public Shadowstorm copy() { + return new Shadowstorm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SkyshroudVampire.java b/Mage.Sets/src/mage/sets/tempest/SkyshroudVampire.java new file mode 100644 index 0000000000..aa602e378b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SkyshroudVampire.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class SkyshroudVampire extends mage.sets.tempestremastered.SkyshroudVampire { + + public SkyshroudVampire(UUID ownerId) { + super(ownerId); + this.cardNumber = 51; + this.expansionSetCode = "TMP"; + } + + public SkyshroudVampire(final SkyshroudVampire card) { + super(card); + } + + @Override + public SkyshroudVampire copy() { + return new SkyshroudVampire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SoltariGuerrillas.java b/Mage.Sets/src/mage/sets/tempest/SoltariGuerrillas.java new file mode 100644 index 0000000000..5fc6ce28b6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SoltariGuerrillas.java @@ -0,0 +1,132 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.GenericManaCost; +import mage.abilities.effects.PreventionEffectData; +import mage.abilities.effects.PreventionEffectImpl; +import mage.abilities.keyword.ShadowAbility; +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.DamageEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class SoltariGuerrillas extends CardImpl { + + public SoltariGuerrillas(UUID ownerId) { + super(ownerId, 347, "Soltari Guerrillas", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{R}{W}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Soltari"); + this.subtype.add("Soldier"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + + // {0}: The next time Soltari Guerrillas would deal combat damage to an opponent this turn, it deals that damage to target creature instead. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SoltariGuerrillasReplacementEffect(), new GenericManaCost(0)); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public SoltariGuerrillas(final SoltariGuerrillas card) { + super(card); + } + + @Override + public SoltariGuerrillas copy() { + return new SoltariGuerrillas(this); + } +} + +class SoltariGuerrillasReplacementEffect extends PreventionEffectImpl { + + SoltariGuerrillasReplacementEffect() { + super(Duration.EndOfTurn, Integer.MAX_VALUE, true, false); + staticText = "The next time {this} would deal combat damage to an opponent this turn, it deals that damage to target creature instead"; + } + + SoltariGuerrillasReplacementEffect(final SoltariGuerrillasReplacementEffect effect) { + super(effect); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGE_PLAYER; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getSourceId().equals(source.getSourceId())) { + Player controller = game.getPlayer(source.getControllerId()); + return controller.hasOpponent(event.getTargetId(), game); + } + return false; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + PreventionEffectData preventionResult = preventDamageAction(event, source, game); + if (preventionResult.getPreventedDamage() > 0) { + Permanent redirectTo = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (redirectTo != null) { + game.informPlayers("Dealing " + preventionResult.getPreventedDamage() + " to " + redirectTo.getLogName() + " instead."); + DamageEvent damageEvent = (DamageEvent) event; + redirectTo.damage(preventionResult.getPreventedDamage(), event.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable(), event.getAppliedEffects()); + } + discard(); // (only once) + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public SoltariGuerrillasReplacementEffect copy() { + return new SoltariGuerrillasReplacementEffect(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempest/SoltariLancer.java b/Mage.Sets/src/mage/sets/tempest/SoltariLancer.java new file mode 100644 index 0000000000..cddc2574bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SoltariLancer.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class SoltariLancer extends mage.sets.tempestremastered.SoltariLancer { + + public SoltariLancer(UUID ownerId) { + super(ownerId); + this.cardNumber = 256; + this.expansionSetCode = "TMP"; + } + + public SoltariLancer(final SoltariLancer card) { + super(card); + } + + @Override + public SoltariLancer copy() { + return new SoltariLancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/SpinalGraft.java b/Mage.Sets/src/mage/sets/tempest/SpinalGraft.java new file mode 100644 index 0000000000..40df20602c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/SpinalGraft.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class SpinalGraft extends mage.sets.vintagemasters.SpinalGraft { + + public SpinalGraft(UUID ownerId) { + super(ownerId); + this.cardNumber = 53; + this.expansionSetCode = "TMP"; + } + + public SpinalGraft(final SpinalGraft card) { + super(card); + } + + @Override + public SpinalGraft copy() { + return new SpinalGraft(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/StarkeOfRath.java b/Mage.Sets/src/mage/sets/tempest/StarkeOfRath.java new file mode 100644 index 0000000000..1fe77b3235 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/StarkeOfRath.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.tempest; + +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.ContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +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.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class StarkeOfRath extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or creature"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.ARTIFACT), + new CardTypePredicate(CardType.CREATURE))); + } + + public StarkeOfRath(UUID ownerId) { + super(ownerId, 205, "Starke of Rath", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); + this.expansionSetCode = "TMP"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Rogue"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {tap}: Destroy target artifact or creature. That permanent's controller gains control of Starke of Rath. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new StarkeOfRathEffect(), new TapSourceCost()); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + + } + + public StarkeOfRath(final StarkeOfRath card) { + super(card); + } + + @Override + public StarkeOfRath copy() { + return new StarkeOfRath(this); + } +} + +class StarkeOfRathEffect extends OneShotEffect { + + public StarkeOfRathEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Destroy target artifact or creature. That permanent's controller gains control of {this}"; + } + + public StarkeOfRathEffect(final StarkeOfRathEffect effect) { + super(effect); + } + + @Override + public StarkeOfRathEffect copy() { + return new StarkeOfRathEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent targetPermanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (targetPermanent != null) { + targetPermanent.destroy(source.getSourceId(), game, false); + } + Permanent sourcePermanent = (Permanent) source.getSourceObjectIfItStillExists(game); + if (sourcePermanent != null && targetPermanent != null) { + ContinuousEffect effect = new StarkeOfRathControlEffect(); + effect.setTargetPointer(new FixedTarget(targetPermanent.getControllerId())); + game.addEffect(effect, source); + } + } + return false; + } +} + +class StarkeOfRathControlEffect extends ContinuousEffectImpl { + + public StarkeOfRathControlEffect() { + super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); + staticText = "That permanent's controller gains control of {this}"; + } + + public StarkeOfRathControlEffect(final StarkeOfRathControlEffect effect) { + super(effect); + } + + @Override + public StarkeOfRathControlEffect copy() { + return new StarkeOfRathControlEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); + Player controller = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (permanent != null && controller != null) { + return permanent.changeControllerId(getTargetPointer().getFirst(game, source), game); + } else { + discard(); + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/tempest/ThalakosSeer.java b/Mage.Sets/src/mage/sets/tempest/ThalakosSeer.java new file mode 100644 index 0000000000..b8577d2491 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/ThalakosSeer.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 fireshoes + */ +public class ThalakosSeer extends mage.sets.tempestremastered.ThalakosSeer { + + public ThalakosSeer(UUID ownerId) { + super(ownerId); + this.cardNumber = 94; + this.expansionSetCode = "TMP"; + } + + public ThalakosSeer(final ThalakosSeer card) { + super(card); + } + + @Override + public ThalakosSeer copy() { + return new ThalakosSeer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/TrumpetingArmodon.java b/Mage.Sets/src/mage/sets/tempest/TrumpetingArmodon.java new file mode 100644 index 0000000000..e329e297ce --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/TrumpetingArmodon.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.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.combat.MustBeBlockedByTargetSourceEffect; +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 Sir-Speshkitty + */ +public class TrumpetingArmodon extends CardImpl { + + public TrumpetingArmodon(UUID ownerId) { + super(ownerId, 156, "Trumpeting Armodon", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Elephant"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {1}{G}: Target creature blocks Trumpeting Armodon this turn if able. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MustBeBlockedByTargetSourceEffect(), new ManaCostsImpl("{1}{G}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public TrumpetingArmodon(final TrumpetingArmodon card) { + super(card); + } + + @Override + public TrumpetingArmodon copy() { + return new TrumpetingArmodon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/VhatiIlDal.java b/Mage.Sets/src/mage/sets/tempest/VhatiIlDal.java new file mode 100644 index 0000000000..9e5aa3941e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/VhatiIlDal.java @@ -0,0 +1,114 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.TapSourceCost; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.SetPowerToughnessTargetEffect; +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.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class VhatiIlDal extends CardImpl { + + public VhatiIlDal(UUID ownerId) { + super(ownerId, 349, "Vhati il-Dal", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}{G}"); + this.expansionSetCode = "TMP"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Warrior"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {tap}: Until end of turn, target creature has base power 1 or base toughness 1. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new VhatiIlDalEffect(), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public VhatiIlDal(final VhatiIlDal card) { + super(card); + } + + @Override + public VhatiIlDal copy() { + return new VhatiIlDal(this); + } +} + +class VhatiIlDalEffect extends OneShotEffect { + + public VhatiIlDalEffect() { + super(Outcome.BoostCreature); + this.staticText = "Until end of turn, target creature has base power 1 or base toughness 1"; + } + + public VhatiIlDalEffect(final VhatiIlDalEffect effect) { + super(effect); + } + + @Override + public VhatiIlDalEffect copy() { + return new VhatiIlDalEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + DynamicValue power = null; + DynamicValue toughness = null; + if (controller.chooseUse(outcome, "Set power? (otherwise toughness is set)", game)) { + power = new StaticValue(1); + } else { + toughness = new StaticValue(1); + } + ContinuousEffect effect = new SetPowerToughnessTargetEffect(power, toughness, Duration.EndOfTurn); + game.addEffect(effect, source); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/VolrathsCurse.java b/Mage.Sets/src/mage/sets/tempest/VolrathsCurse.java new file mode 100644 index 0000000000..3d7c51a24c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/VolrathsCurse.java @@ -0,0 +1,221 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.ActivatedAbilityImpl; +import mage.abilities.SpecialAction; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.RestrictionEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +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.TargetController; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import static mage.sets.tempest.VolrathsCurse.keyString; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class VolrathsCurse extends CardImpl { + + public static final String keyString = "_ignoreEffectForTurn"; + + public VolrathsCurse(UUID ownerId) { + super(ownerId, 101, "Volrath's Curse", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + 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); + + // Enchanted creature can't attack or block, and its activated abilities can't be activated. That creature's controller may sacrifice a permanent for that player to ignore this effect until end of turn. + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new VolrathsCurseRestrictionEffect()); + ability.addEffect(new VolrathsCurseCantActivateAbilitiesEffect()); + this.addAbility(ability); + this.addAbility(new VolrathsCurseSpecialAction()); + + // {1}{U}: Return Volrath's Curse to its owner's hand. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), new ManaCostsImpl("{1}{U}"))); + + } + + public VolrathsCurse(final VolrathsCurse card) { + super(card); + } + + @Override + public VolrathsCurse copy() { + return new VolrathsCurse(this); + } +} + +class VolrathsCurseRestrictionEffect extends RestrictionEffect { + + public VolrathsCurseRestrictionEffect() { + super(Duration.WhileOnBattlefield); + this.staticText = "Enchanted creature can't attack or block"; + } + + public VolrathsCurseRestrictionEffect(final VolrathsCurseRestrictionEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + Permanent attachment = game.getPermanent(source.getSourceId()); + if (attachment != null && attachment.getAttachedTo() != null + && permanent.getId().equals(attachment.getAttachedTo())) { + String key = source.getSourceId().toString() + attachment.getZoneChangeCounter(game) + keyString + game.getTurnNum() + permanent.getControllerId(); + return game.getState().getValue(key) == null; + } + return false; + } + + @Override + public boolean canAttack(Game game) { + return false; + } + + @Override + public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) { + return false; + } + + @Override + public VolrathsCurseRestrictionEffect copy() { + return new VolrathsCurseRestrictionEffect(this); + } +} + +class VolrathsCurseCantActivateAbilitiesEffect extends ContinuousRuleModifyingEffectImpl { + + public VolrathsCurseCantActivateAbilitiesEffect() { + super(Duration.WhileOnBattlefield, Outcome.UnboostCreature); + staticText = ", and its activated abilities can't be activated"; + } + + public VolrathsCurseCantActivateAbilitiesEffect(final VolrathsCurseCantActivateAbilitiesEffect effect) { + super(effect); + } + + @Override + public VolrathsCurseCantActivateAbilitiesEffect copy() { + return new VolrathsCurseCantActivateAbilitiesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null && enchantment.getAttachedTo() != null) { + if (event.getSourceId().equals(enchantment.getAttachedTo())) { + Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); + if (enchanted != null) { + String key = source.getSourceId().toString() + enchantment.getZoneChangeCounter(game) + keyString + game.getTurnNum() + enchanted.getControllerId(); + return game.getState().getValue(key) == null; + } + } + } + return false; + } +} + +class VolrathsCurseSpecialAction extends SpecialAction { + + public VolrathsCurseSpecialAction() { + super(Zone.BATTLEFIELD); + this.addCost(new SacrificeTargetCost(new TargetControlledPermanent(), true)); + this.addEffect(new VolrathsCurseIgnoreEffect(keyString)); + this.setMayActivate(TargetController.CONTROLLER_ATTACHED_TO); + } + + public VolrathsCurseSpecialAction(final VolrathsCurseSpecialAction ability) { + super(ability); + } + + @Override + public VolrathsCurseSpecialAction copy() { + return new VolrathsCurseSpecialAction(this); + } +} + +class VolrathsCurseIgnoreEffect extends OneShotEffect { + + public VolrathsCurseIgnoreEffect(final String keyString) { + super(Outcome.Benefit); + this.staticText = "That creature's controller may sacrifice a permanent for that player to ignore this effect until end of turn"; + } + + public VolrathsCurseIgnoreEffect(final VolrathsCurseIgnoreEffect effect) { + super(effect); + } + + @Override + public VolrathsCurseIgnoreEffect copy() { + return new VolrathsCurseIgnoreEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + String key = source.getSourceId().toString() + source.getSourceObjectZoneChangeCounter() + keyString + game.getTurnNum() + ((ActivatedAbilityImpl)source).getActivatorId(); + game.getState().setValue(key,true); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/WoodSage.java b/Mage.Sets/src/mage/sets/tempest/WoodSage.java new file mode 100644 index 0000000000..3634914039 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/WoodSage.java @@ -0,0 +1,133 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.cards.repository.CardRepository; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +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 LevelX2 + */ +public class WoodSage extends CardImpl { + + public WoodSage(UUID ownerId) { + super(ownerId, 350, "Wood Sage", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{G}{U}"); + this.expansionSetCode = "TMP"; + this.subtype.add("Human"); + this.subtype.add("Druid"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new WoodSageEffect(), new TapSourceCost())); + + } + + public WoodSage(final WoodSage card) { + super(card); + } + + @Override + public WoodSage copy() { + return new WoodSage(this); + } +} + + +class WoodSageEffect extends OneShotEffect { + + public WoodSageEffect() { + super(Outcome.DrawCard); + this.staticText = "Name a creature card. Reveal the top four cards of your library and put all of them with that name into your hand. Put the rest into your graveyard"; + } + + public WoodSageEffect(final WoodSageEffect effect) { + super(effect); + } + + @Override + public WoodSageEffect copy() { + return new WoodSageEffect(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) { + Choice cardChoice = new ChoiceImpl(); + cardChoice.setChoices(CardRepository.instance.getCreatureNames()); + cardChoice.setMessage("Name a creature card"); + while (!controller.choose(Outcome.Detriment, cardChoice, game)) { + if (!controller.isInGame()) { + return false; + } + } + String cardName = cardChoice.getChoice(); + if (!game.isSimulation()) { + game.informPlayers(sourceObject.getLogName() + ", named card: [" + cardName + "]"); + } + + Cards cards = new CardsImpl(); + cards.addAll(controller.getLibrary().getTopCards(game, 4)); + + if (!cards.isEmpty()) { + controller.revealCards(sourceObject.getLogName(), cards, game); + for (Card card: cards.getCards(game)) { + if (card.getName().equals(cardName)) { + controller.moveCardToHandWithInfo(card, source.getSourceId(), game, Zone.LIBRARY, true); + cards.remove(card); + } + } + controller.moveCardsToGraveyardWithInfo(cards, source, game, Zone.LIBRARY); + } + return true; + } + + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/AcidicSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/AcidicSliver.java new file mode 100644 index 0000000000..315bd00353 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/AcidicSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AcidicSliver extends mage.sets.stronghold.AcidicSliver { + + public AcidicSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 206; + this.expansionSetCode = "TPR"; + } + + public AcidicSliver(final AcidicSliver card) { + super(card); + } + + @Override + public AcidicSliver copy() { + return new AcidicSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Aftershock.java b/Mage.Sets/src/mage/sets/tempestremastered/Aftershock.java new file mode 100644 index 0000000000..bdecf0e5ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Aftershock.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Aftershock extends mage.sets.tempest.Aftershock { + + public Aftershock(UUID ownerId) { + super(ownerId); + this.cardNumber = 124; + this.expansionSetCode = "TPR"; + } + + public Aftershock(final Aftershock card) { + super(card); + } + + @Override + public Aftershock copy() { + return new Aftershock(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Aluren.java b/Mage.Sets/src/mage/sets/tempestremastered/Aluren.java new file mode 100644 index 0000000000..2a9f8e0b69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Aluren.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Aluren extends mage.sets.tempest.Aluren { + + public Aluren(UUID ownerId) { + super(ownerId); + this.cardNumber = 165; + this.expansionSetCode = "TPR"; + } + + public Aluren(final Aluren card) { + super(card); + } + + @Override + public Aluren copy() { + return new Aluren(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Anarchist.java b/Mage.Sets/src/mage/sets/tempestremastered/Anarchist.java new file mode 100644 index 0000000000..615878a605 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Anarchist.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Anarchist extends mage.sets.ninthedition.Anarchist { + + public Anarchist(UUID ownerId) { + super(ownerId); + this.cardNumber = 125; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public Anarchist(final Anarchist card) { + super(card); + } + + @Override + public Anarchist copy() { + return new Anarchist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/AngelicBlessing.java b/Mage.Sets/src/mage/sets/tempestremastered/AngelicBlessing.java new file mode 100644 index 0000000000..204c19315d --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/AngelicBlessing.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AngelicBlessing extends mage.sets.tenth.AngelicBlessing { + + public AngelicBlessing(UUID ownerId) { + super(ownerId); + this.cardNumber = 1; + this.expansionSetCode = "TPR"; + } + + public AngelicBlessing(final AngelicBlessing card) { + super(card); + } + + @Override + public AngelicBlessing copy() { + return new AngelicBlessing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/AngelicProtector.java b/Mage.Sets/src/mage/sets/tempestremastered/AngelicProtector.java new file mode 100644 index 0000000000..ce2c7ac5fb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/AngelicProtector.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class AngelicProtector extends mage.sets.tempest.AngelicProtector { + + public AngelicProtector(UUID ownerId) { + super(ownerId); + this.cardNumber = 2; + this.expansionSetCode = "TPR"; + } + + public AngelicProtector(final AngelicProtector card) { + super(card); + } + + @Override + public AngelicProtector copy() { + return new AngelicProtector(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Anoint.java b/Mage.Sets/src/mage/sets/tempestremastered/Anoint.java new file mode 100644 index 0000000000..6c7dd5c5ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Anoint.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Anoint extends mage.sets.tempest.Anoint { + + public Anoint(UUID ownerId) { + super(ownerId); + this.cardNumber = 3; + this.expansionSetCode = "TPR"; + } + + public Anoint(final Anoint card) { + super(card); + } + + @Override + public Anoint copy() { + return new Anoint(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ArmorSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/ArmorSliver.java new file mode 100644 index 0000000000..55158b8b19 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ArmorSliver.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ArmorSliver extends mage.sets.tempest.ArmorSliver { + + public ArmorSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 4; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public ArmorSliver(final ArmorSliver card) { + super(card); + } + + @Override + public ArmorSliver copy() { + return new ArmorSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ArmoredPegasus.java b/Mage.Sets/src/mage/sets/tempestremastered/ArmoredPegasus.java new file mode 100644 index 0000000000..045e73aeac --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ArmoredPegasus.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ArmoredPegasus extends mage.sets.tempest.ArmoredPegasus { + + public ArmoredPegasus(UUID ownerId) { + super(ownerId); + this.cardNumber = 5; + this.expansionSetCode = "TPR"; + } + + public ArmoredPegasus(final ArmoredPegasus card) { + super(card); + } + + @Override + public ArmoredPegasus copy() { + return new ArmoredPegasus(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/AvengingAngel.java b/Mage.Sets/src/mage/sets/tempestremastered/AvengingAngel.java new file mode 100644 index 0000000000..5672ba6961 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/AvengingAngel.java @@ -0,0 +1,103 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesTriggeredAbility; +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.Zone; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author fireshoes + */ +public class AvengingAngel extends CardImpl { + + public AvengingAngel(UUID ownerId) { + super(ownerId, 6, "Avenging Angel", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Angel"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Avenging Angel dies, you may put it on top of its owner's library. + this.addAbility(new DiesTriggeredAbility(new AvengingAngelEffect(), true)); + } + + public AvengingAngel(final AvengingAngel card) { + super(card); + } + + @Override + public AvengingAngel copy() { + return new AvengingAngel(this); + } +} + +class AvengingAngelEffect extends OneShotEffect { + + public AvengingAngelEffect() { + super(Outcome.Benefit); + this.staticText = "you may put it on the top of its owner's library"; + } + + public AvengingAngelEffect(final AvengingAngelEffect effect) { + super(effect); + } + + @Override + public AvengingAngelEffect copy() { + return new AvengingAngelEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Card sourceCard = game.getCard(source.getSourceId()); + if (controller != null && sourceCard != null) { + if (game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD) { + controller.moveCardToLibraryWithInfo(sourceCard, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } + return true; + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Bandage.java b/Mage.Sets/src/mage/sets/tempestremastered/Bandage.java new file mode 100644 index 0000000000..f71b4752dd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Bandage.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Bandage extends mage.sets.tenth.Bandage { + + public Bandage(UUID ownerId) { + super(ownerId); + this.cardNumber = 7; + this.expansionSetCode = "TPR"; + } + + public Bandage(final Bandage card) { + super(card); + } + + @Override + public Bandage copy() { + return new Bandage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/BarbedSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/BarbedSliver.java new file mode 100644 index 0000000000..a282a9f438 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/BarbedSliver.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class BarbedSliver extends mage.sets.tempest.BarbedSliver { + + public BarbedSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 126; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public BarbedSliver(final BarbedSliver card) { + super(card); + } + + @Override + public BarbedSliver copy() { + return new BarbedSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/BottleGnomes.java b/Mage.Sets/src/mage/sets/tempestremastered/BottleGnomes.java new file mode 100644 index 0000000000..6c8f9ef0ac --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/BottleGnomes.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class BottleGnomes extends mage.sets.tempest.BottleGnomes { + + public BottleGnomes(UUID ownerId) { + super(ownerId); + this.cardNumber = 217; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public BottleGnomes(final BottleGnomes card) { + super(card); + } + + @Override + public BottleGnomes copy() { + return new BottleGnomes(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CalderaLake.java b/Mage.Sets/src/mage/sets/tempestremastered/CalderaLake.java new file mode 100644 index 0000000000..cdeaa22b01 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CalderaLake.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class CalderaLake extends mage.sets.tempest.CalderaLake { + + public CalderaLake(UUID ownerId) { + super(ownerId); + this.cardNumber = 235; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public CalderaLake(final CalderaLake card) { + super(card); + } + + @Override + public CalderaLake copy() { + return new CalderaLake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Cannibalize.java b/Mage.Sets/src/mage/sets/tempestremastered/Cannibalize.java new file mode 100644 index 0000000000..6a4df481c1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Cannibalize.java @@ -0,0 +1,152 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import mage.MageObject; +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.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.filter.predicate.permanent.PermanentIdPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class Cannibalize extends CardImpl { + + public Cannibalize(UUID ownerId) { + super(ownerId, 83, "Cannibalize", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{B}"); + this.expansionSetCode = "TPR"; + + // Choose two target creatures controlled by the same player. Exile one of the creatures and put two +1/+1 counters on the other. + this.getSpellAbility().addEffect(new CannibalizeEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanentSameController(2,2,new FilterCreaturePermanent(),false)); + } + + public Cannibalize(final Cannibalize card) { + super(card); + } + + @Override + public Cannibalize copy() { + return new Cannibalize(this); + } +} + + + +class CannibalizeEffect extends OneShotEffect { + + public CannibalizeEffect() { + super(Outcome.Benefit); + this.staticText = "Choose two target creatures controlled by the same player. Exile one of the creatures and put two +1/+1 counters on the other"; + } + + public CannibalizeEffect(final CannibalizeEffect effect) { + super(effect); + } + + @Override + public CannibalizeEffect copy() { + return new CannibalizeEffect(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) { + boolean exileDone = false; + int count = 0; + for(UUID targetId: getTargetPointer().getTargets(game, source)) { + Permanent creature = game.getPermanent(targetId); + if (creature != null) { + if ((count == 0 && controller.chooseUse(Outcome.Exile, "Exile " + creature.getLogName() +"?", game)) + || (count == 1 && !exileDone)) { + controller.moveCardToExileWithInfo(creature, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); + exileDone = true; + } else { + creature.addCounters(CounterType.P1P1.createInstance(2), game); + game.informPlayers("Added two +1/+1 counters on " + creature.getLogName()); + } + count++; + } + } + return true; + } + return false; + } +} + +class TargetCreaturePermanentSameController extends TargetCreaturePermanent { + + public TargetCreaturePermanentSameController(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { + super(minNumTargets, maxNumTargets, filter, notTarget); + this.targetName = filter.getMessage(); + } + + public TargetCreaturePermanentSameController(final TargetCreaturePermanentSameController target) { + super(target); + } + + @Override + public boolean canTarget(UUID id, Ability source, Game game) { + UUID firstTarget = this.getFirstTarget(); + if (firstTarget != null) { + Permanent permanent = game.getPermanent(firstTarget); + Permanent targetPermanent = game.getPermanent(id); + if (permanent == null || targetPermanent == null + || !permanent.getControllerId().equals(targetPermanent.getOwnerId())) { + return false; + } + } + return super.canTarget(id, source, game); + } + + @Override + public TargetCreaturePermanentSameController copy() { + return new TargetCreaturePermanentSameController(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CanopySpider.java b/Mage.Sets/src/mage/sets/tempestremastered/CanopySpider.java new file mode 100644 index 0000000000..889ea99482 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CanopySpider.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CanopySpider extends mage.sets.tempest.CanopySpider { + + public CanopySpider(UUID ownerId) { + super(ownerId); + this.cardNumber = 166; + this.expansionSetCode = "TPR"; + } + + public CanopySpider(final CanopySpider card) { + super(card); + } + + @Override + public CanopySpider copy() { + return new CanopySpider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CanyonWildcat.java b/Mage.Sets/src/mage/sets/tempestremastered/CanyonWildcat.java new file mode 100644 index 0000000000..33e93aee73 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CanyonWildcat.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CanyonWildcat extends mage.sets.tempest.CanyonWildcat { + + public CanyonWildcat(UUID ownerId) { + super(ownerId); + this.cardNumber = 127; + this.expansionSetCode = "TPR"; + } + + public CanyonWildcat(final CanyonWildcat card) { + super(card); + } + + @Override + public CanyonWildcat copy() { + return new CanyonWildcat(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Capsize.java b/Mage.Sets/src/mage/sets/tempestremastered/Capsize.java new file mode 100644 index 0000000000..613b1acdf8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Capsize.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Capsize extends mage.sets.tempest.Capsize { + + public Capsize(UUID ownerId) { + super(ownerId); + this.cardNumber = 42; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Capsize(final Capsize card) { + super(card); + } + + @Override + public Capsize copy() { + return new Capsize(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Carnassid.java b/Mage.Sets/src/mage/sets/tempestremastered/Carnassid.java new file mode 100644 index 0000000000..eff691f8a2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Carnassid.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Carnassid extends mage.sets.stronghold.Carnassid { + + public Carnassid(UUID ownerId) { + super(ownerId); + this.cardNumber = 167; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Carnassid(final Carnassid card) { + super(card); + } + + @Override + public Carnassid copy() { + return new Carnassid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Carnophage.java b/Mage.Sets/src/mage/sets/tempestremastered/Carnophage.java new file mode 100644 index 0000000000..0c2e302a63 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Carnophage.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Carnophage extends mage.sets.exodus.Carnophage { + + public Carnophage(UUID ownerId) { + super(ownerId); + this.cardNumber = 84; + this.expansionSetCode = "TPR"; + } + + public Carnophage(final Carnophage card) { + super(card); + } + + @Override + public Carnophage copy() { + return new Carnophage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Cataclysm.java b/Mage.Sets/src/mage/sets/tempestremastered/Cataclysm.java new file mode 100644 index 0000000000..edbd09d879 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Cataclysm.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Cataclysm extends mage.sets.exodus.Cataclysm { + + public Cataclysm(UUID ownerId) { + super(ownerId); + this.cardNumber = 8; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public Cataclysm(final Cataclysm card) { + super(card); + } + + @Override + public Cataclysm copy() { + return new Cataclysm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ChargingPaladin.java b/Mage.Sets/src/mage/sets/tempestremastered/ChargingPaladin.java new file mode 100644 index 0000000000..dee3c8bdaa --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ChargingPaladin.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ChargingPaladin extends mage.sets.divinevsdemonic.ChargingPaladin { + + public ChargingPaladin(UUID ownerId) { + super(ownerId); + this.cardNumber = 9; + this.expansionSetCode = "TPR"; + } + + public ChargingPaladin(final ChargingPaladin card) { + super(card); + } + + @Override + public ChargingPaladin copy() { + return new ChargingPaladin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CinderMarsh.java b/Mage.Sets/src/mage/sets/tempestremastered/CinderMarsh.java new file mode 100644 index 0000000000..f9caecf3ee --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CinderMarsh.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CinderMarsh extends mage.sets.tempest.CinderMarsh { + + public CinderMarsh(UUID ownerId) { + super(ownerId); + this.cardNumber = 236; + this.expansionSetCode = "TPR"; + } + + public CinderMarsh(final CinderMarsh card) { + super(card); + } + + @Override + public CinderMarsh copy() { + return new CinderMarsh(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CityOfTraitors.java b/Mage.Sets/src/mage/sets/tempestremastered/CityOfTraitors.java new file mode 100644 index 0000000000..211232c204 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CityOfTraitors.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CityOfTraitors extends mage.sets.exodus.CityOfTraitors { + + public CityOfTraitors(UUID ownerId) { + super(ownerId); + this.cardNumber = 237; + this.expansionSetCode = "TPR"; + } + + public CityOfTraitors(final CityOfTraitors card) { + super(card); + } + + @Override + public CityOfTraitors copy() { + return new CityOfTraitors(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ClotSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/ClotSliver.java new file mode 100644 index 0000000000..00d4527dd9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ClotSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ClotSliver extends mage.sets.tempest.ClotSliver { + + public ClotSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 85; + this.expansionSetCode = "TPR"; + } + + public ClotSliver(final ClotSliver card) { + super(card); + } + + @Override + public ClotSliver copy() { + return new ClotSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CoatOfArms.java b/Mage.Sets/src/mage/sets/tempestremastered/CoatOfArms.java new file mode 100644 index 0000000000..c9941f4dd1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CoatOfArms.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CoatOfArms extends mage.sets.magic2010.CoatOfArms { + + public CoatOfArms(UUID ownerId) { + super(ownerId); + this.cardNumber = 218; + this.expansionSetCode = "TPR"; + } + + public CoatOfArms(final CoatOfArms card) { + super(card); + } + + @Override + public CoatOfArms copy() { + return new CoatOfArms(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Coercion.java b/Mage.Sets/src/mage/sets/tempestremastered/Coercion.java new file mode 100644 index 0000000000..b4664ccd84 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Coercion.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Coercion extends mage.sets.visions.Coercion { + + public Coercion(UUID ownerId) { + super(ownerId); + this.cardNumber = 86; + this.expansionSetCode = "TPR"; + } + + public Coercion(final Coercion card) { + super(card); + } + + @Override + public Coercion copy() { + return new Coercion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CoffinQueen.java b/Mage.Sets/src/mage/sets/tempestremastered/CoffinQueen.java new file mode 100644 index 0000000000..eedb00ce94 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CoffinQueen.java @@ -0,0 +1,153 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SkipUntapOptionalAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +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.FilterCreatureCard; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCardInGraveyard; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author anonymous + */ +public class CoffinQueen extends CardImpl { + + public CoffinQueen(UUID ownerId) { + super(ownerId, 87, "Coffin Queen", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Zombie"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // You may choose not to untap Coffin Queen during your untap step. + this.addAbility(new SkipUntapOptionalAbility()); + + // {2}{B}, {tap}: Put target creature card from a graveyard onto the battlefield under your control. When Coffin Queen becomes untapped or you lose control of Coffin Queen, exile that creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{2}{B}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard"))); + ability.addEffect(new CoffinQueenCreateDelayedTriggerEffect()); + this.addAbility(ability); + + } + + public CoffinQueen(final CoffinQueen card) { + super(card); + } + + @Override + public CoffinQueen copy() { + return new CoffinQueen(this); + } +} +class CoffinQueenCreateDelayedTriggerEffect extends OneShotEffect { + + public CoffinQueenCreateDelayedTriggerEffect() { + super(Outcome.Detriment); + this.staticText = "When Coffin Queen becomes untapped or you lose control of Coffin Queen, exile that creature"; + } + + public CoffinQueenCreateDelayedTriggerEffect(final CoffinQueenCreateDelayedTriggerEffect effect) { + super(effect); + } + + @Override + public CoffinQueenCreateDelayedTriggerEffect copy() { + return new CoffinQueenCreateDelayedTriggerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent controlledCreature = game.getPermanent(source.getFirstTarget()); + if (controlledCreature != null) { + DelayedTriggeredAbility delayedAbility = new CoffinQueenDelayedTriggeredAbility(); + delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(controlledCreature.getId())); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(source.getSourceObject(game), game); + delayedAbility.init(game); + game.addDelayedTriggeredAbility(delayedAbility); + return true; + } + return false; + } +} + +class CoffinQueenDelayedTriggeredAbility extends DelayedTriggeredAbility { + + CoffinQueenDelayedTriggeredAbility() { + super(new ExileTargetEffect(), Duration.EndOfGame, true); + } + + CoffinQueenDelayedTriggeredAbility(CoffinQueenDelayedTriggeredAbility ability) { + super(ability); + } + + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (GameEvent.EventType.LOST_CONTROL.equals(event.getType()) + && event.getSourceId().equals(getSourceId())) { + return true; + } + return GameEvent.EventType.UNTAPPED.equals(event.getType()) + && event.getTargetId() != null && event.getTargetId().equals(getSourceId()); + } + + @Override + public CoffinQueenDelayedTriggeredAbility copy() { + return new CoffinQueenDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "When {this} becomes untapped or you lose control of {this}, exile that creature"; + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CoiledTinviper.java b/Mage.Sets/src/mage/sets/tempestremastered/CoiledTinviper.java new file mode 100644 index 0000000000..75c73c7510 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CoiledTinviper.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CoiledTinviper extends mage.sets.tempest.CoiledTinviper { + + public CoiledTinviper(UUID ownerId) { + super(ownerId); + this.cardNumber = 219; + this.expansionSetCode = "TPR"; + } + + public CoiledTinviper(final CoiledTinviper card) { + super(card); + } + + @Override + public CoiledTinviper copy() { + return new CoiledTinviper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CommanderGrevenIlVec.java b/Mage.Sets/src/mage/sets/tempestremastered/CommanderGrevenIlVec.java new file mode 100644 index 0000000000..08a348def4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CommanderGrevenIlVec.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CommanderGrevenIlVec extends mage.sets.tempest.CommanderGrevenIlVec { + + public CommanderGrevenIlVec(UUID ownerId) { + super(ownerId); + this.cardNumber = 88; + this.expansionSetCode = "TPR"; + } + + public CommanderGrevenIlVec(final CommanderGrevenIlVec card) { + super(card); + } + + @Override + public CommanderGrevenIlVec copy() { + return new CommanderGrevenIlVec(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Conviction.java b/Mage.Sets/src/mage/sets/tempestremastered/Conviction.java new file mode 100644 index 0000000000..f859f92afb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Conviction.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Conviction extends mage.sets.stronghold.Conviction { + + public Conviction(UUID ownerId) { + super(ownerId); + this.cardNumber = 10; + this.expansionSetCode = "TPR"; + } + + public Conviction(final Conviction card) { + super(card); + } + + @Override + public Conviction copy() { + return new Conviction(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CorpseDance.java b/Mage.Sets/src/mage/sets/tempestremastered/CorpseDance.java new file mode 100644 index 0000000000..a613f5d459 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CorpseDance.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CorpseDance extends mage.sets.tempest.CorpseDance { + + public CorpseDance(UUID ownerId) { + super(ownerId); + this.cardNumber = 89; + this.expansionSetCode = "TPR"; + } + + public CorpseDance(final CorpseDance card) { + super(card); + } + + @Override + public CorpseDance copy() { + return new CorpseDance(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Counterspell.java b/Mage.Sets/src/mage/sets/tempestremastered/Counterspell.java new file mode 100644 index 0000000000..37bb1544ae --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Counterspell.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Counterspell extends mage.sets.tempest.Counterspell { + + public Counterspell(UUID ownerId) { + super(ownerId); + this.cardNumber = 43; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Counterspell(final Counterspell card) { + super(card); + } + + @Override + public Counterspell copy() { + return new Counterspell(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CrashingBoars.java b/Mage.Sets/src/mage/sets/tempestremastered/CrashingBoars.java new file mode 100644 index 0000000000..6efb5a48c2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CrashingBoars.java @@ -0,0 +1,113 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.RequirementEffect; +import mage.abilities.effects.common.combat.MustBeBlockedByTargetSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.SetTargetPointer; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author emerald000 + */ +public class CrashingBoars extends CardImpl { + + public CrashingBoars(UUID ownerId) { + super(ownerId, 168, "Crashing Boars", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Boar"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Whenever Crashing Boars attacks, defending player chooses an untapped creature he or she controls. That creature block Crashing Boars this turn if able. + this.addAbility(new AttacksTriggeredAbility(new CrashingBoarsEffect(), false, "", SetTargetPointer.PLAYER)); + } + + public CrashingBoars(final CrashingBoars card) { + super(card); + } + + @Override + public CrashingBoars copy() { + return new CrashingBoars(this); + } +} + +class CrashingBoarsEffect extends OneShotEffect { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped creature you control"); + static { + filter.add(Predicates.not(new TappedPredicate())); + } + + CrashingBoarsEffect() { + super(Outcome.Benefit); + this.staticText = "defending player chooses an untapped creature he or she controls. That creature blocks {this} this turn if able"; + } + + CrashingBoarsEffect(final CrashingBoarsEffect effect) { + super(effect); + } + + @Override + public CrashingBoarsEffect copy() { + return new CrashingBoarsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player defendingPlayer = game.getPlayer(this.getTargetPointer().getFirst(game, source)); + if (defendingPlayer != null) { + Target target = new TargetControlledCreaturePermanent(1, 1, filter, true); + if (target.choose(Outcome.Neutral, defendingPlayer.getId(), source.getSourceId(), game)) { + RequirementEffect effect = new MustBeBlockedByTargetSourceEffect(); + effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); + game.addEffect(effect, source); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CravenGiant.java b/Mage.Sets/src/mage/sets/tempestremastered/CravenGiant.java new file mode 100644 index 0000000000..4bdba66fbd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CravenGiant.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CravenGiant extends mage.sets.stronghold.CravenGiant { + + public CravenGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 128; + this.expansionSetCode = "TPR"; + } + + public CravenGiant(final CravenGiant card) { + super(card); + } + + @Override + public CravenGiant copy() { + return new CravenGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CrovaxTheCursed.java b/Mage.Sets/src/mage/sets/tempestremastered/CrovaxTheCursed.java new file mode 100644 index 0000000000..af3c1f9b44 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CrovaxTheCursed.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class CrovaxTheCursed extends mage.sets.stronghold.CrovaxTheCursed { + + public CrovaxTheCursed(UUID ownerId) { + super(ownerId); + this.cardNumber = 90; + this.expansionSetCode = "TPR"; + } + + public CrovaxTheCursed(final CrovaxTheCursed card) { + super(card); + } + + @Override + public CrovaxTheCursed copy() { + return new CrovaxTheCursed(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CrystallineSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/CrystallineSliver.java new file mode 100644 index 0000000000..a5b7283bb0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CrystallineSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CrystallineSliver extends mage.sets.stronghold.CrystallineSliver { + + public CrystallineSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 207; + this.expansionSetCode = "TPR"; + } + + public CrystallineSliver(final CrystallineSliver card) { + super(card); + } + + @Override + public CrystallineSliver copy() { + return new CrystallineSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Curiosity.java b/Mage.Sets/src/mage/sets/tempestremastered/Curiosity.java new file mode 100644 index 0000000000..4d587ce793 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Curiosity.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Curiosity extends mage.sets.innistrad.Curiosity { + + public Curiosity(UUID ownerId) { + super(ownerId); + this.cardNumber = 44; + this.expansionSetCode = "TPR"; + } + + public Curiosity(final Curiosity card) { + super(card); + } + + @Override + public Curiosity copy() { + return new Curiosity(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CursedFlesh.java b/Mage.Sets/src/mage/sets/tempestremastered/CursedFlesh.java new file mode 100644 index 0000000000..2ce7e1208a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CursedFlesh.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class CursedFlesh extends mage.sets.invasion.CursedFlesh { + + public CursedFlesh(UUID ownerId) { + super(ownerId); + this.cardNumber = 91; + this.expansionSetCode = "TPR"; + } + + public CursedFlesh(final CursedFlesh card) { + super(card); + } + + @Override + public CursedFlesh copy() { + return new CursedFlesh(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/CursedScroll.java b/Mage.Sets/src/mage/sets/tempestremastered/CursedScroll.java new file mode 100644 index 0000000000..0713065898 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/CursedScroll.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class CursedScroll extends mage.sets.tempest.CursedScroll { + + public CursedScroll(UUID ownerId) { + super(ownerId); + this.cardNumber = 220; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public CursedScroll(final CursedScroll card) { + super(card); + } + + @Override + public CursedScroll copy() { + return new CursedScroll(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DarkBanishing.java b/Mage.Sets/src/mage/sets/tempestremastered/DarkBanishing.java new file mode 100644 index 0000000000..996bfcfb41 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DarkBanishing.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DarkBanishing extends mage.sets.tempest.DarkBanishing { + + public DarkBanishing(UUID ownerId) { + super(ownerId); + this.cardNumber = 92; + this.expansionSetCode = "TPR"; + } + + public DarkBanishing(final DarkBanishing card) { + super(card); + } + + @Override + public DarkBanishing copy() { + return new DarkBanishing(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DarkRitual.java b/Mage.Sets/src/mage/sets/tempestremastered/DarkRitual.java new file mode 100644 index 0000000000..cde523508e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DarkRitual.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DarkRitual extends mage.sets.planechase.DarkRitual { + + public DarkRitual(UUID ownerId) { + super(ownerId); + this.cardNumber = 93; + this.expansionSetCode = "TPR"; + } + + public DarkRitual(final DarkRitual card) { + super(card); + } + + @Override + public DarkRitual copy() { + return new DarkRitual(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DauthiHorror.java b/Mage.Sets/src/mage/sets/tempestremastered/DauthiHorror.java new file mode 100644 index 0000000000..d174815b7f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DauthiHorror.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DauthiHorror extends mage.sets.tempest.DauthiHorror { + + public DauthiHorror(UUID ownerId) { + super(ownerId); + this.cardNumber = 94; + this.expansionSetCode = "TPR"; + } + + public DauthiHorror(final DauthiHorror card) { + super(card); + } + + @Override + public DauthiHorror copy() { + return new DauthiHorror(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DauthiJackal.java b/Mage.Sets/src/mage/sets/tempestremastered/DauthiJackal.java new file mode 100644 index 0000000000..65d35d84c4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DauthiJackal.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterBlockingCreature; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class DauthiJackal extends CardImpl { + + public DauthiJackal(UUID ownerId) { + super(ownerId, 95, "Dauthi Jackal", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Dauthi"); + this.subtype.add("Hound"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + + // {B}{B}, Sacrifice Dauthi Jackal: Destroy target blocking creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{B}{B}")); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetCreaturePermanent(new FilterBlockingCreature())); + this.addAbility(ability); + } + + public DauthiJackal(final DauthiJackal card) { + super(card); + } + + @Override + public DauthiJackal copy() { + return new DauthiJackal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DauthiMarauder.java b/Mage.Sets/src/mage/sets/tempestremastered/DauthiMarauder.java new file mode 100644 index 0000000000..99eb29ee32 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DauthiMarauder.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class DauthiMarauder extends mage.sets.tempest.DauthiMarauder { + + public DauthiMarauder(UUID ownerId) { + super(ownerId); + this.cardNumber = 96; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public DauthiMarauder(final DauthiMarauder card) { + super(card); + } + + @Override + public DauthiMarauder copy() { + return new DauthiMarauder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DauthiSlayer.java b/Mage.Sets/src/mage/sets/tempestremastered/DauthiSlayer.java new file mode 100644 index 0000000000..e5ec0f5f2b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DauthiSlayer.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class DauthiSlayer extends mage.sets.tempest.DauthiSlayer { + + public DauthiSlayer(UUID ownerId) { + super(ownerId); + this.cardNumber = 97; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public DauthiSlayer(final DauthiSlayer card) { + super(card); + } + + @Override + public DauthiSlayer copy() { + return new DauthiSlayer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DauthiWarlord.java b/Mage.Sets/src/mage/sets/tempestremastered/DauthiWarlord.java new file mode 100644 index 0000000000..f1d34672c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DauthiWarlord.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.SetPowerSourceEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; + +/** + * + * @author fireshoes + */ +public class DauthiWarlord extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow"); + + static{ + filter.add(new AbilityPredicate(ShadowAbility.class)); + } + + public DauthiWarlord(UUID ownerId) { + super(ownerId, 98, "Dauthi Warlord", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Dauthi"); + this.subtype.add("Soldier"); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + + // Dauthi Warlord's power is equal to the number of creatures with shadow on the battlefield. + Effect effect = new SetPowerSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame); + this.addAbility(new SimpleStaticAbility(Zone.ALL, effect)); + } + + public DauthiWarlord(final DauthiWarlord card) { + super(card); + } + + @Override + public DauthiWarlord copy() { + return new DauthiWarlord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Deadshot.java b/Mage.Sets/src/mage/sets/tempestremastered/Deadshot.java new file mode 100644 index 0000000000..e2fd17d882 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Deadshot.java @@ -0,0 +1,127 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.TapTargetEffect; +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.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class Deadshot extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature"); + + public Deadshot(UUID ownerId) { + super(ownerId, 129, "Deadshot", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{R}"); + this.expansionSetCode = "TPR"; + + // Tap target creature. + this.getSpellAbility().addEffect(new TapTargetEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // It deals damage equal to its power to another target creature. + this.getSpellAbility().addEffect(new DeadshotDamageEffect()); + this.getSpellAbility().addTarget(new DeadshotTargetCreaturePermanent(filter)); + } + + public Deadshot(final Deadshot card) { + super(card); + } + + @Override + public Deadshot copy() { + return new Deadshot(this); + } +} + +class DeadshotDamageEffect extends OneShotEffect { + + public DeadshotDamageEffect() { + super(Outcome.Damage); + this.staticText = "Target creature deals damage equal to its power to another target creature"; + } + + public DeadshotDamageEffect(final DeadshotDamageEffect effect) { + super(effect); + } + + @Override + public DeadshotDamageEffect copy() { + return new DeadshotDamageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent ownCreature = game.getPermanent(source.getFirstTarget()); + if (ownCreature != null) { + int damage = ownCreature.getPower().getValue(); + Permanent targetCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget()); + if (targetCreature != null) { + targetCreature.damage(damage, ownCreature.getId(), game, false, true); + return true; + } + } + return false; + } +} + +class DeadshotTargetCreaturePermanent extends TargetCreaturePermanent { + + public DeadshotTargetCreaturePermanent(FilterCreaturePermanent filter) { + super(filter); + } + + @Override + public boolean canTarget(UUID id, Ability source, Game game) { + if (source.getTargets().getFirstTarget().equals(id)) { + return false; + } + return super.canTarget(id, source, game); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (source.getTargets().getFirstTarget().equals(id)) { + return false; + } + return super.canTarget(controllerId, id, source, game); + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DeathPitsOfRath.java b/Mage.Sets/src/mage/sets/tempestremastered/DeathPitsOfRath.java new file mode 100644 index 0000000000..11d283648f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DeathPitsOfRath.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DeathPitsOfRath extends mage.sets.tempest.DeathPitsOfRath { + + public DeathPitsOfRath(UUID ownerId) { + super(ownerId); + this.cardNumber = 99; + this.expansionSetCode = "TPR"; + } + + public DeathPitsOfRath(final DeathPitsOfRath card) { + super(card); + } + + @Override + public DeathPitsOfRath copy() { + return new DeathPitsOfRath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DeathStroke.java b/Mage.Sets/src/mage/sets/tempestremastered/DeathStroke.java new file mode 100644 index 0000000000..765c68cd33 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DeathStroke.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DeathStroke extends mage.sets.stronghold.DeathStroke { + + public DeathStroke(UUID ownerId) { + super(ownerId); + this.cardNumber = 100; + this.expansionSetCode = "TPR"; + } + + public DeathStroke(final DeathStroke card) { + super(card); + } + + @Override + public DeathStroke copy() { + return new DeathStroke(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DeathsDuet.java b/Mage.Sets/src/mage/sets/tempestremastered/DeathsDuet.java new file mode 100644 index 0000000000..26643d678c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DeathsDuet.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.tempestremastered; + +import java.util.UUID; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreatureCard; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author fireshoes + */ +public class DeathsDuet extends CardImpl { + + public DeathsDuet(UUID ownerId) { + super(ownerId, 101, "Death's Duet", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{2}{B}"); + this.expansionSetCode = "TPR"; + + // Return two target creature cards from your graveyard to your hand. + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(2, new FilterCreatureCard("creature cards from your graveyard"))); + } + + public DeathsDuet(final DeathsDuet card) { + super(card); + } + + @Override + public DeathsDuet copy() { + return new DeathsDuet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DiabolicEdict.java b/Mage.Sets/src/mage/sets/tempestremastered/DiabolicEdict.java new file mode 100644 index 0000000000..c933259250 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DiabolicEdict.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DiabolicEdict extends mage.sets.tempest.DiabolicEdict { + + public DiabolicEdict(UUID ownerId) { + super(ownerId); + this.cardNumber = 102; + this.expansionSetCode = "TPR"; + } + + public DiabolicEdict(final DiabolicEdict card) { + super(card); + } + + @Override + public DiabolicEdict copy() { + return new DiabolicEdict(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Disenchant.java b/Mage.Sets/src/mage/sets/tempestremastered/Disenchant.java new file mode 100644 index 0000000000..1feca7f484 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Disenchant.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Disenchant extends mage.sets.tempest.Disenchant { + + public Disenchant(UUID ownerId) { + super(ownerId); + this.cardNumber = 11; + this.expansionSetCode = "TPR"; + } + + public Disenchant(final Disenchant card) { + super(card); + } + + @Override + public Disenchant copy() { + return new Disenchant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Dismiss.java b/Mage.Sets/src/mage/sets/tempestremastered/Dismiss.java new file mode 100644 index 0000000000..7c8581331a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Dismiss.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Dismiss extends mage.sets.tempest.Dismiss { + + public Dismiss(UUID ownerId) { + super(ownerId); + this.cardNumber = 45; + this.expansionSetCode = "TPR"; + } + + public Dismiss(final Dismiss card) { + super(card); + } + + @Override + public Dismiss copy() { + return new Dismiss(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Dracoplasm.java b/Mage.Sets/src/mage/sets/tempestremastered/Dracoplasm.java new file mode 100644 index 0000000000..b666347312 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Dracoplasm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Dracoplasm extends mage.sets.tempest.Dracoplasm { + + public Dracoplasm(UUID ownerId) { + super(ownerId); + this.cardNumber = 208; + this.expansionSetCode = "TPR"; + } + + public Dracoplasm(final Dracoplasm card) { + super(card); + } + + @Override + public Dracoplasm copy() { + return new Dracoplasm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DreamHalls.java b/Mage.Sets/src/mage/sets/tempestremastered/DreamHalls.java new file mode 100644 index 0000000000..646f0654ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DreamHalls.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class DreamHalls extends mage.sets.stronghold.DreamHalls { + + public DreamHalls(UUID ownerId) { + super(ownerId); + this.cardNumber = 46; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public DreamHalls(final DreamHalls card) { + super(card); + } + + @Override + public DreamHalls copy() { + return new DreamHalls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DreamProwler.java b/Mage.Sets/src/mage/sets/tempestremastered/DreamProwler.java new file mode 100644 index 0000000000..023a934fb4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DreamProwler.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition.CountType; +import mage.abilities.decorator.ConditionalRestrictionEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterAttackingCreature; + +/** + * + * @author emerald000 + */ +public class DreamProwler extends CardImpl { + + public DreamProwler(UUID ownerId) { + super(ownerId, 47, "Dream Prowler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Illusion"); + this.power = new MageInt(1); + this.toughness = new MageInt(5); + + // Dream Prowler can't be blocked as long as it's attacking alone. + Effect effect = new ConditionalRestrictionEffect(new CantBeBlockedSourceEffect(), new PermanentsOnTheBattlefieldCondition(new FilterAttackingCreature(), CountType.FEWER_THAN, 2)); + effect.setText("{this} can't be blocked as long as it's attacking alone"); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + } + + public DreamProwler(final DreamProwler card) { + super(card); + } + + @Override + public DreamProwler copy() { + return new DreamProwler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/DungeonShade.java b/Mage.Sets/src/mage/sets/tempestremastered/DungeonShade.java new file mode 100644 index 0000000000..3cbb2616f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/DungeonShade.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class DungeonShade extends mage.sets.stronghold.DungeonShade { + + public DungeonShade(UUID ownerId) { + super(ownerId); + this.cardNumber = 103; + this.expansionSetCode = "TPR"; + } + + public DungeonShade(final DungeonShade card) { + super(card); + } + + @Override + public DungeonShade copy() { + return new DungeonShade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ElvenRite.java b/Mage.Sets/src/mage/sets/tempestremastered/ElvenRite.java new file mode 100644 index 0000000000..6b428adf44 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ElvenRite.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ElvenRite extends mage.sets.stronghold.ElvenRite { + + public ElvenRite(UUID ownerId) { + super(ownerId); + this.cardNumber = 169; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public ElvenRite(final ElvenRite card) { + super(card); + } + + @Override + public ElvenRite copy() { + return new ElvenRite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ElvishFury.java b/Mage.Sets/src/mage/sets/tempestremastered/ElvishFury.java new file mode 100644 index 0000000000..a234e3f9ab --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ElvishFury.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ElvishFury extends mage.sets.tempest.ElvishFury { + + public ElvishFury(UUID ownerId) { + super(ownerId); + this.cardNumber = 170; + this.expansionSetCode = "TPR"; + } + + public ElvishFury(final ElvishFury card) { + super(card); + } + + @Override + public ElvishFury copy() { + return new ElvishFury(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/EmmessiTome.java b/Mage.Sets/src/mage/sets/tempestremastered/EmmessiTome.java new file mode 100644 index 0000000000..cae6db04dd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/EmmessiTome.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class EmmessiTome extends mage.sets.tempest.EmmessiTome { + + public EmmessiTome(UUID ownerId) { + super(ownerId); + this.cardNumber = 221; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public EmmessiTome(final EmmessiTome card) { + super(card); + } + + @Override + public EmmessiTome copy() { + return new EmmessiTome(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/EndangeredArmodon.java b/Mage.Sets/src/mage/sets/tempestremastered/EndangeredArmodon.java new file mode 100644 index 0000000000..3aac6873f3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/EndangeredArmodon.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 mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.StateTriggeredAbility; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.Filter.ComparisonType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author emerald000 + */ +public class EndangeredArmodon extends CardImpl { + + public EndangeredArmodon(UUID ownerId) { + super(ownerId, 171, "Endangered Armodon", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Elephant"); + this.power = new MageInt(4); + this.toughness = new MageInt(5); + + // When you control a creature with toughness 2 or less, sacrifice Endangered Armodon. + this.addAbility(new EndangeredArmodonStateTriggeredAbility()); + } + + public EndangeredArmodon(final EndangeredArmodon card) { + super(card); + } + + @Override + public EndangeredArmodon copy() { + return new EndangeredArmodon(this); + } +} + +class EndangeredArmodonStateTriggeredAbility extends StateTriggeredAbility { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature with toughness 2 or less"); + static { + filter.add(new ToughnessPredicate(ComparisonType.LessThan, 3)); + } + + EndangeredArmodonStateTriggeredAbility() { + super(Zone.BATTLEFIELD, new SacrificeSourceEffect()); + } + + EndangeredArmodonStateTriggeredAbility(final EndangeredArmodonStateTriggeredAbility ability) { + super(ability); + } + + @Override + public EndangeredArmodonStateTriggeredAbility copy() { + return new EndangeredArmodonStateTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return game.getBattlefield().contains(filter, this.getControllerId(), game, 1); + } + + @Override + public String getRule() { + return "When you control a creature with toughness 2 or less, sacrifice {this}."; + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Ephemeron.java b/Mage.Sets/src/mage/sets/tempestremastered/Ephemeron.java new file mode 100644 index 0000000000..0bb7bda2d7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Ephemeron.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Ephemeron extends mage.sets.exodus.Ephemeron { + + public Ephemeron(UUID ownerId) { + super(ownerId); + this.cardNumber = 48; + this.expansionSetCode = "TPR"; + } + + public Ephemeron(final Ephemeron card) { + super(card); + } + + @Override + public Ephemeron copy() { + return new Ephemeron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ErraticPortal.java b/Mage.Sets/src/mage/sets/tempestremastered/ErraticPortal.java new file mode 100644 index 0000000000..072ed84e8a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ErraticPortal.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ErraticPortal extends mage.sets.exodus.ErraticPortal { + + public ErraticPortal(UUID ownerId) { + super(ownerId); + this.cardNumber = 222; + this.expansionSetCode = "TPR"; + } + + public ErraticPortal(final ErraticPortal card) { + super(card); + } + + @Override + public ErraticPortal copy() { + return new ErraticPortal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/EvincarsJustice.java b/Mage.Sets/src/mage/sets/tempestremastered/EvincarsJustice.java new file mode 100644 index 0000000000..c06679f533 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/EvincarsJustice.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class EvincarsJustice extends mage.sets.tempest.EvincarsJustice { + + public EvincarsJustice(UUID ownerId) { + super(ownerId); + this.cardNumber = 104; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public EvincarsJustice(final EvincarsJustice card) { + super(card); + } + + @Override + public EvincarsJustice copy() { + return new EvincarsJustice(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ExaltedDragon.java b/Mage.Sets/src/mage/sets/tempestremastered/ExaltedDragon.java new file mode 100644 index 0000000000..cb56fb0cc8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ExaltedDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ExaltedDragon extends mage.sets.exodus.ExaltedDragon { + + public ExaltedDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 12; + this.expansionSetCode = "TPR"; + } + + public ExaltedDragon(final ExaltedDragon card) { + super(card); + } + + @Override + public ExaltedDragon copy() { + return new ExaltedDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FanningTheFlames.java b/Mage.Sets/src/mage/sets/tempestremastered/FanningTheFlames.java new file mode 100644 index 0000000000..50c4a767c7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FanningTheFlames.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FanningTheFlames extends mage.sets.stronghold.FanningTheFlames { + + public FanningTheFlames(UUID ownerId) { + super(ownerId); + this.cardNumber = 130; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public FanningTheFlames(final FanningTheFlames card) { + super(card); + } + + @Override + public FanningTheFlames copy() { + return new FanningTheFlames(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.java b/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.java new file mode 100644 index 0000000000..b74ed27145 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FieldOfSouls.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.tempestremastered; + +import java.util.UUID; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.other.OwnerPredicate; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.permanent.token.SpiritWhiteToken; + +/** + * + * @author fireshoes + */ +public class FieldOfSouls extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nontoken creature"); + static{ + filter.add(new OwnerPredicate(TargetController.YOU)); + filter.add(Predicates.not(new TokenPredicate())); + } + + public FieldOfSouls(UUID ownerId) { + super(ownerId, 13, "Field of Souls", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}"); + 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)); + } + + public FieldOfSouls(final FieldOfSouls card) { + super(card); + } + + @Override + public FieldOfSouls copy() { + return new FieldOfSouls(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FightingDrake.java b/Mage.Sets/src/mage/sets/tempestremastered/FightingDrake.java new file mode 100644 index 0000000000..a93431f765 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FightingDrake.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FightingDrake extends mage.sets.tempest.FightingDrake { + + public FightingDrake(UUID ownerId) { + super(ownerId); + this.cardNumber = 49; + this.expansionSetCode = "TPR"; + } + + public FightingDrake(final FightingDrake card) { + super(card); + } + + @Override + public FightingDrake copy() { + return new FightingDrake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FlameWave.java b/Mage.Sets/src/mage/sets/tempestremastered/FlameWave.java new file mode 100644 index 0000000000..1db2894a9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FlameWave.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FlameWave extends mage.sets.ninthedition.FlameWave { + + public FlameWave(UUID ownerId) { + super(ownerId); + this.cardNumber = 131; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public FlameWave(final FlameWave card) { + super(card); + } + + @Override + public FlameWave copy() { + return new FlameWave(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneBlade.java b/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneBlade.java new file mode 100644 index 0000000000..230fb68753 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneBlade.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class FlowstoneBlade extends mage.sets.conspiracy.FlowstoneBlade { + + public FlowstoneBlade(UUID ownerId) { + super(ownerId); + this.cardNumber = 132; + this.expansionSetCode = "TPR"; + } + + public FlowstoneBlade(final FlowstoneBlade card) { + super(card); + } + + @Override + public FlowstoneBlade copy() { + return new FlowstoneBlade(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneMauler.java b/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneMauler.java new file mode 100644 index 0000000000..8a1fd3240b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneMauler.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FlowstoneMauler extends mage.sets.stronghold.FlowstoneMauler { + + public FlowstoneMauler(UUID ownerId) { + super(ownerId); + this.cardNumber = 133; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public FlowstoneMauler(final FlowstoneMauler card) { + super(card); + } + + @Override + public FlowstoneMauler copy() { + return new FlowstoneMauler(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneWyvern.java b/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneWyvern.java new file mode 100644 index 0000000000..e54974e329 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FlowstoneWyvern.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class FlowstoneWyvern extends mage.sets.tempest.FlowstoneWyvern { + + public FlowstoneWyvern(UUID ownerId) { + super(ownerId); + this.cardNumber = 134; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public FlowstoneWyvern(final FlowstoneWyvern card) { + super(card); + } + + @Override + public FlowstoneWyvern copy() { + return new FlowstoneWyvern(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Forbid.java b/Mage.Sets/src/mage/sets/tempestremastered/Forbid.java new file mode 100644 index 0000000000..3deb80158e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Forbid.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Forbid extends mage.sets.exodus.Forbid { + + public Forbid(UUID ownerId) { + super(ownerId); + this.cardNumber = 50; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public Forbid(final Forbid card) { + super(card); + } + + @Override + public Forbid copy() { + return new Forbid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Forest1.java b/Mage.Sets/src/mage/sets/tempestremastered/Forest1.java new file mode 100644 index 0000000000..42815ae232 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest1 extends mage.cards.basiclands.Forest { + + public Forest1(UUID ownerId) { + super(ownerId, 266); + this.expansionSetCode = "TPR"; + } + + public Forest1(final Forest1 card) { + super(card); + } + + @Override + public Forest1 copy() { + return new Forest1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Forest2.java b/Mage.Sets/src/mage/sets/tempestremastered/Forest2.java new file mode 100644 index 0000000000..bafb02a829 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest2 extends mage.cards.basiclands.Forest { + + public Forest2(UUID ownerId) { + super(ownerId, 267); + this.expansionSetCode = "TPR"; + } + + public Forest2(final Forest2 card) { + super(card); + } + + @Override + public Forest2 copy() { + return new Forest2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Forest3.java b/Mage.Sets/src/mage/sets/tempestremastered/Forest3.java new file mode 100644 index 0000000000..e07d818ebe --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest3 extends mage.cards.basiclands.Forest { + + public Forest3(UUID ownerId) { + super(ownerId, 268); + this.expansionSetCode = "TPR"; + } + + public Forest3(final Forest3 card) { + super(card); + } + + @Override + public Forest3 copy() { + return new Forest3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Forest4.java b/Mage.Sets/src/mage/sets/tempestremastered/Forest4.java new file mode 100644 index 0000000000..e8d463f44a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Forest4 extends mage.cards.basiclands.Forest { + + public Forest4(UUID ownerId) { + super(ownerId, 269); + this.expansionSetCode = "TPR"; + } + + public Forest4(final Forest4 card) { + super(card); + } + + @Override + public Forest4 copy() { + return new Forest4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Fugue.java b/Mage.Sets/src/mage/sets/tempestremastered/Fugue.java new file mode 100644 index 0000000000..3a9ad82a7a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Fugue.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Fugue extends mage.sets.seventhedition.Fugue { + + public Fugue(UUID ownerId) { + super(ownerId); + this.cardNumber = 105; + this.expansionSetCode = "TPR"; + } + + public Fugue(final Fugue card) { + super(card); + } + + @Override + public Fugue copy() { + return new Fugue(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/FurnaceBrood.java b/Mage.Sets/src/mage/sets/tempestremastered/FurnaceBrood.java new file mode 100644 index 0000000000..e3ff5482f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/FurnaceBrood.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.tempestremastered; + +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.CantBeRegeneratedTargetEffect; +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 LevelX2 + */ +public class FurnaceBrood extends CardImpl { + + public FurnaceBrood(UUID ownerId) { + super(ownerId, 135, "Furnace Brood", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Elemental"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {R}: Target creature can't be regenerated this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeRegeneratedTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{R}")); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public FurnaceBrood(final FurnaceBrood card) { + super(card); + } + + @Override + public FurnaceBrood copy() { + return new FurnaceBrood(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Gallantry.java b/Mage.Sets/src/mage/sets/tempestremastered/Gallantry.java new file mode 100644 index 0000000000..491fac41a9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Gallantry.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Gallantry extends mage.sets.tempest.Gallantry { + + public Gallantry(UUID ownerId) { + super(ownerId); + this.cardNumber = 14; + this.expansionSetCode = "TPR"; + } + + public Gallantry(final Gallantry card) { + super(card); + } + + @Override + public Gallantry copy() { + return new Gallantry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/GaseousForm.java b/Mage.Sets/src/mage/sets/tempestremastered/GaseousForm.java new file mode 100644 index 0000000000..ed37e0377a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/GaseousForm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GaseousForm extends mage.sets.tempest.GaseousForm { + + public GaseousForm(UUID ownerId) { + super(ownerId); + this.cardNumber = 51; + this.expansionSetCode = "TPR"; + } + + public GaseousForm(final GaseousForm card) { + super(card); + } + + @Override + public GaseousForm copy() { + return new GaseousForm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/GerrardsBattleCry.java b/Mage.Sets/src/mage/sets/tempestremastered/GerrardsBattleCry.java new file mode 100644 index 0000000000..a8ffeeabcd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/GerrardsBattleCry.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GerrardsBattleCry extends mage.sets.tempest.GerrardsBattleCry { + + public GerrardsBattleCry(UUID ownerId) { + super(ownerId); + this.cardNumber = 15; + this.expansionSetCode = "TPR"; + } + + public GerrardsBattleCry(final GerrardsBattleCry card) { + super(card); + } + + @Override + public GerrardsBattleCry copy() { + return new GerrardsBattleCry(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/GoblinBombardment.java b/Mage.Sets/src/mage/sets/tempestremastered/GoblinBombardment.java new file mode 100644 index 0000000000..7777364c85 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/GoblinBombardment.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class GoblinBombardment extends mage.sets.tempest.GoblinBombardment { + + public GoblinBombardment(UUID ownerId) { + super(ownerId); + this.cardNumber = 136; + this.expansionSetCode = "TPR"; + } + + public GoblinBombardment(final GoblinBombardment card) { + super(card); + } + + @Override + public GoblinBombardment copy() { + return new GoblinBombardment(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Gravedigger.java b/Mage.Sets/src/mage/sets/tempestremastered/Gravedigger.java new file mode 100644 index 0000000000..8c53e2d5c5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Gravedigger.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Gravedigger extends mage.sets.tenth.Gravedigger { + + public Gravedigger(UUID ownerId) { + super(ownerId); + this.cardNumber = 106; + this.expansionSetCode = "TPR"; + } + + public Gravedigger(final Gravedigger card) { + super(card); + } + + @Override + public Gravedigger copy() { + return new Gravedigger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Grindstone.java b/Mage.Sets/src/mage/sets/tempestremastered/Grindstone.java new file mode 100644 index 0000000000..a494ef2a41 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Grindstone.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Grindstone extends mage.sets.tempest.Grindstone { + + public Grindstone(UUID ownerId) { + super(ownerId); + this.cardNumber = 223; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public Grindstone(final Grindstone card) { + super(card); + } + + @Override + public Grindstone copy() { + return new Grindstone(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HammerheadShark.java b/Mage.Sets/src/mage/sets/tempestremastered/HammerheadShark.java new file mode 100644 index 0000000000..de5e7e1db2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HammerheadShark.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.combat.CantAttackUnlessDefenderControllsPermanent; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterLandPermanent; + +/** + * + * @author fireshoes + */ +public class HammerheadShark extends CardImpl { + + public HammerheadShark(UUID ownerId) { + super(ownerId, 52, "Hammerhead Shark", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Fish"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Hammerhead Shark can't attack unless defending player controls an Island. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackUnlessDefenderControllsPermanent(new FilterLandPermanent("Island","an Island")))); + } + + public HammerheadShark(final HammerheadShark card) { + super(card); + } + + @Override + public HammerheadShark copy() { + return new HammerheadShark(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Harrow.java b/Mage.Sets/src/mage/sets/tempestremastered/Harrow.java new file mode 100644 index 0000000000..f490e3ecd9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Harrow.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Harrow extends mage.sets.zendikar.Harrow { + + public Harrow(UUID ownerId) { + super(ownerId); + this.cardNumber = 172; + this.expansionSetCode = "TPR"; + } + + public Harrow(final Harrow card) { + super(card); + } + + @Override + public Harrow copy() { + return new Harrow(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HeartwoodDryad.java b/Mage.Sets/src/mage/sets/tempestremastered/HeartwoodDryad.java new file mode 100644 index 0000000000..640b326dfd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HeartwoodDryad.java @@ -0,0 +1,97 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.AsThoughEffectImpl; +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; + +/** + * + * @author fireshoes + */ +public class HeartwoodDryad extends CardImpl { + + public HeartwoodDryad(UUID ownerId) { + super(ownerId, 173, "Heartwood Dryad", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{G}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Dryad"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Heartwood Dryad can block creatures with shadow as though Heartwood Dryad had shadow. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAsThoughtIthadShadowEffect(Duration.WhileOnBattlefield))); + } + + public HeartwoodDryad(final HeartwoodDryad card) { + super(card); + } + + @Override + public HeartwoodDryad copy() { + return new HeartwoodDryad(this); + } +} + +class CanBlockAsThoughtIthadShadowEffect extends AsThoughEffectImpl { + + public CanBlockAsThoughtIthadShadowEffect(Duration duration) { + super(AsThoughEffectType.BLOCK_SHADOW, duration, Outcome.Benefit); + staticText = "{this} can block creatures with shadow as though {this} had shadow"; + } + + public CanBlockAsThoughtIthadShadowEffect(final CanBlockAsThoughtIthadShadowEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public CanBlockAsThoughtIthadShadowEffect copy() { + return new CanBlockAsThoughtIthadShadowEffect(this); + } + + @Override + public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { + return sourceId.equals(source.getSourceId()); + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HeartwoodGiant.java b/Mage.Sets/src/mage/sets/tempestremastered/HeartwoodGiant.java new file mode 100644 index 0000000000..9a19bc0a52 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HeartwoodGiant.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HeartwoodGiant extends mage.sets.tempest.HeartwoodGiant { + + public HeartwoodGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 174; + this.expansionSetCode = "TPR"; + } + + public HeartwoodGiant(final HeartwoodGiant card) { + super(card); + } + + @Override + public HeartwoodGiant copy() { + return new HeartwoodGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HermitDruid.java b/Mage.Sets/src/mage/sets/tempestremastered/HermitDruid.java new file mode 100644 index 0000000000..071ddf9771 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HermitDruid.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class HermitDruid extends mage.sets.stronghold.HermitDruid { + + public HermitDruid(UUID ownerId) { + super(ownerId); + this.cardNumber = 175; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public HermitDruid(final HermitDruid card) { + super(card); + } + + @Override + public HermitDruid copy() { + return new HermitDruid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HibernationSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/HibernationSliver.java new file mode 100644 index 0000000000..00a72e4fc9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HibernationSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HibernationSliver extends mage.sets.stronghold.HibernationSliver { + + public HibernationSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 209; + this.expansionSetCode = "TPR"; + } + + public HibernationSliver(final HibernationSliver card) { + super(card); + } + + @Override + public HibernationSliver copy() { + return new HibernationSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HornedSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/HornedSliver.java new file mode 100644 index 0000000000..bf720f3cf2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HornedSliver.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class HornedSliver extends mage.sets.tempest.HornedSliver { + + public HornedSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 176; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public HornedSliver(final HornedSliver card) { + super(card); + } + + @Override + public HornedSliver copy() { + return new HornedSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/HornedTurtle.java b/Mage.Sets/src/mage/sets/tempestremastered/HornedTurtle.java new file mode 100644 index 0000000000..b6ce591bab --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/HornedTurtle.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class HornedTurtle extends mage.sets.magic2010.HornedTurtle { + + public HornedTurtle(UUID ownerId) { + super(ownerId); + this.cardNumber = 53; + this.expansionSetCode = "TPR"; + } + + public HornedTurtle(final HornedTurtle card) { + super(card); + } + + @Override + public HornedTurtle copy() { + return new HornedTurtle(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Humility.java b/Mage.Sets/src/mage/sets/tempestremastered/Humility.java new file mode 100644 index 0000000000..1935712f06 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Humility.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Humility extends mage.sets.tempest.Humility { + + public Humility(UUID ownerId) { + super(ownerId); + this.cardNumber = 16; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public Humility(final Humility card) { + super(card); + } + + @Override + public Humility copy() { + return new Humility(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Intuition.java b/Mage.Sets/src/mage/sets/tempestremastered/Intuition.java new file mode 100644 index 0000000000..3e0e25ee22 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Intuition.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Intuition extends mage.sets.tempest.Intuition { + + public Intuition(UUID ownerId) { + super(ownerId); + this.cardNumber = 54; + this.expansionSetCode = "TPR"; + } + + public Intuition(final Intuition card) { + super(card); + } + + @Override + public Intuition copy() { + return new Intuition(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Island1.java b/Mage.Sets/src/mage/sets/tempestremastered/Island1.java new file mode 100644 index 0000000000..1785d1efc7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island1 extends mage.cards.basiclands.Island { + + public Island1(UUID ownerId) { + super(ownerId, 254); + this.expansionSetCode = "TPR"; + } + + public Island1(final Island1 card) { + super(card); + } + + @Override + public Island1 copy() { + return new Island1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Island2.java b/Mage.Sets/src/mage/sets/tempestremastered/Island2.java new file mode 100644 index 0000000000..5f9bada053 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island2 extends mage.cards.basiclands.Island { + + public Island2(UUID ownerId) { + super(ownerId, 255); + this.expansionSetCode = "TPR"; + } + + public Island2(final Island2 card) { + super(card); + } + + @Override + public Island2 copy() { + return new Island2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Island3.java b/Mage.Sets/src/mage/sets/tempestremastered/Island3.java new file mode 100644 index 0000000000..645031c4af --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island3 extends mage.cards.basiclands.Island { + + public Island3(UUID ownerId) { + super(ownerId, 256); + this.expansionSetCode = "TPR"; + } + + public Island3(final Island3 card) { + super(card); + } + + @Override + public Island3 copy() { + return new Island3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Island4.java b/Mage.Sets/src/mage/sets/tempestremastered/Island4.java new file mode 100644 index 0000000000..90ac613b58 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Island4 extends mage.cards.basiclands.Island { + + public Island4(UUID ownerId) { + super(ownerId, 257); + this.expansionSetCode = "TPR"; + } + + public Island4(final Island4 card) { + super(card); + } + + @Override + public Island4 copy() { + return new Island4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/JinxedIdol.java b/Mage.Sets/src/mage/sets/tempestremastered/JinxedIdol.java new file mode 100644 index 0000000000..4bb4c0a166 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/JinxedIdol.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class JinxedIdol extends mage.sets.magic2011.JinxedIdol { + + public JinxedIdol(UUID ownerId) { + super(ownerId); + this.cardNumber = 224; + this.expansionSetCode = "TPR"; + } + + public JinxedIdol(final JinxedIdol card) { + super(card); + } + + @Override + public JinxedIdol copy() { + return new JinxedIdol(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Kezzerdrix.java b/Mage.Sets/src/mage/sets/tempestremastered/Kezzerdrix.java new file mode 100644 index 0000000000..bbf0446c47 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Kezzerdrix.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Kezzerdrix extends mage.sets.tempest.Kezzerdrix { + + public Kezzerdrix(UUID ownerId) { + super(ownerId); + this.cardNumber = 107; + this.expansionSetCode = "TPR"; + } + + public Kezzerdrix(final Kezzerdrix card) { + super(card); + } + + @Override + public Kezzerdrix copy() { + return new Kezzerdrix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/KillerWhale.java b/Mage.Sets/src/mage/sets/tempestremastered/KillerWhale.java new file mode 100644 index 0000000000..2c69711058 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/KillerWhale.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +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 fireshoes + */ +public class KillerWhale extends CardImpl { + + public KillerWhale(UUID ownerId) { + super(ownerId, 55, "Killer Whale", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Whale"); + this.power = new MageInt(3); + this.toughness = new MageInt(5); + + // {U}: Killer Whale gains flying until end of turn. + this.addAbility(new SimpleActivatedAbility( + Zone.BATTLEFIELD, + new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), + new ManaCostsImpl("U"))); + } + + public KillerWhale(final KillerWhale card) { + super(card); + } + + @Override + public KillerWhale copy() { + return new KillerWhale(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Kindle.java b/Mage.Sets/src/mage/sets/tempestremastered/Kindle.java new file mode 100644 index 0000000000..b8d66195f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Kindle.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Kindle extends mage.sets.tempest.Kindle { + + public Kindle(UUID ownerId) { + super(ownerId); + this.cardNumber = 137; + this.expansionSetCode = "TPR"; + } + + public Kindle(final Kindle card) { + super(card); + } + + @Override + public Kindle copy() { + return new Kindle(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/KorChant.java b/Mage.Sets/src/mage/sets/tempestremastered/KorChant.java new file mode 100644 index 0000000000..dccc93e46f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/KorChant.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author emerald000 + */ +public class KorChant extends mage.sets.exodus.KorChant { + + public KorChant(UUID ownerId) { + super(ownerId); + this.cardNumber = 17; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public KorChant(final KorChant card) { + super(card); + } + + @Override + public KorChant copy() { + return new KorChant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Krakilin.java b/Mage.Sets/src/mage/sets/tempestremastered/Krakilin.java new file mode 100644 index 0000000000..f19a2c3c07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Krakilin.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Krakilin extends mage.sets.tempest.Krakilin { + + public Krakilin(UUID ownerId) { + super(ownerId); + this.cardNumber = 177; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public Krakilin(final Krakilin card) { + super(card); + } + + @Override + public Krakilin copy() { + return new Krakilin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LabRats.java b/Mage.Sets/src/mage/sets/tempestremastered/LabRats.java new file mode 100644 index 0000000000..a529989b66 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LabRats.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LabRats extends mage.sets.stronghold.LabRats { + + public LabRats(UUID ownerId) { + super(ownerId); + this.cardNumber = 108; + this.expansionSetCode = "TPR"; + } + + public LabRats(final LabRats card) { + super(card); + } + + @Override + public LabRats copy() { + return new LabRats(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LegacysAllure.java b/Mage.Sets/src/mage/sets/tempestremastered/LegacysAllure.java new file mode 100644 index 0000000000..9f88acee8c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LegacysAllure.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class LegacysAllure extends mage.sets.tempest.LegacysAllure { + + public LegacysAllure(UUID ownerId) { + super(ownerId); + this.cardNumber = 57; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public LegacysAllure(final LegacysAllure card) { + super(card); + } + + @Override + public LegacysAllure copy() { + return new LegacysAllure(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Legerdemain.java b/Mage.Sets/src/mage/sets/tempestremastered/Legerdemain.java new file mode 100644 index 0000000000..26baf30a05 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Legerdemain.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class Legerdemain extends mage.sets.tempest.Legerdemain { + + public Legerdemain(UUID ownerId) { + super(ownerId); + this.cardNumber = 57; + this.expansionSetCode = "TPR"; + } + + public Legerdemain(final Legerdemain card) { + super(card); + } + + @Override + public Legerdemain copy() { + return new Legerdemain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LightningBlast.java b/Mage.Sets/src/mage/sets/tempestremastered/LightningBlast.java new file mode 100644 index 0000000000..69069d1cb7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LightningBlast.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LightningBlast extends mage.sets.tempest.LightningBlast { + + public LightningBlast(UUID ownerId) { + super(ownerId); + this.cardNumber = 138; + this.expansionSetCode = "TPR"; + } + + public LightningBlast(final LightningBlast card) { + super(card); + } + + @Override + public LightningBlast copy() { + return new LightningBlast(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LivingDeath.java b/Mage.Sets/src/mage/sets/tempestremastered/LivingDeath.java new file mode 100644 index 0000000000..97e1833830 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LivingDeath.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class LivingDeath extends mage.sets.tempest.LivingDeath { + + public LivingDeath(UUID ownerId) { + super(ownerId); + this.cardNumber = 109; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public LivingDeath(final LivingDeath card) { + super(card); + } + + @Override + public LivingDeath copy() { + return new LivingDeath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LotusPetal.java b/Mage.Sets/src/mage/sets/tempestremastered/LotusPetal.java new file mode 100644 index 0000000000..634303d1dd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LotusPetal.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class LotusPetal extends mage.sets.tempest.LotusPetal { + + public LotusPetal(UUID ownerId) { + super(ownerId); + this.cardNumber = 225; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public LotusPetal(final LotusPetal card) { + super(card); + } + + @Override + public LotusPetal copy() { + return new LotusPetal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LowlandBasilisk.java b/Mage.Sets/src/mage/sets/tempestremastered/LowlandBasilisk.java new file mode 100644 index 0000000000..b38830262b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LowlandBasilisk.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsDamageToACreatureTriggeredAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class LowlandBasilisk extends CardImpl { + + public LowlandBasilisk(UUID ownerId) { + super(ownerId, 178, "Lowland Basilisk", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Basilisk"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Whenever Lowland Basilisk deals damage to a creature, destroy that creature at end of combat. + this.addAbility(new DealsDamageToACreatureTriggeredAbility( + new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect("destroy that creature at end of combat")), true), + false, + false, + true)); + } + + public LowlandBasilisk(final LowlandBasilisk card) { + super(card); + } + + @Override + public LowlandBasilisk copy() { + return new LowlandBasilisk(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/LowlandGiant.java b/Mage.Sets/src/mage/sets/tempestremastered/LowlandGiant.java new file mode 100644 index 0000000000..605895ea9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/LowlandGiant.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class LowlandGiant extends mage.sets.tempest.LowlandGiant { + + public LowlandGiant(UUID ownerId) { + super(ownerId); + this.cardNumber = 139; + this.expansionSetCode = "TPR"; + } + + public LowlandGiant(final LowlandGiant card) { + super(card); + } + + @Override + public LowlandGiant copy() { + return new LowlandGiant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MageIlVec.java b/Mage.Sets/src/mage/sets/tempestremastered/MageIlVec.java new file mode 100644 index 0000000000..807e3ea2ac --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MageIlVec.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class MageIlVec extends mage.sets.exodus.MageIlVec { + + public MageIlVec(UUID ownerId) { + super(ownerId); + this.cardNumber = 140; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public MageIlVec(final MageIlVec card) { + super(card); + } + + @Override + public MageIlVec copy() { + return new MageIlVec(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Magmasaur.java b/Mage.Sets/src/mage/sets/tempestremastered/Magmasaur.java new file mode 100644 index 0000000000..8217228d3e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Magmasaur.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Magmasaur extends mage.sets.tempest.Magmasaur { + + public Magmasaur(UUID ownerId) { + super(ownerId); + this.cardNumber = 141; + this.expansionSetCode = "TPR"; + } + + public Magmasaur(final Magmasaur card) { + super(card); + } + + @Override + public Magmasaur copy() { + return new Magmasaur(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ManaLeak.java b/Mage.Sets/src/mage/sets/tempestremastered/ManaLeak.java new file mode 100644 index 0000000000..39b071f57c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ManaLeak.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ManaLeak extends mage.sets.magic2011.ManaLeak { + + public ManaLeak(UUID ownerId) { + super(ownerId); + this.cardNumber = 58; + this.expansionSetCode = "TPR"; + } + + public ManaLeak(final ManaLeak card) { + super(card); + } + + @Override + public ManaLeak copy() { + return new ManaLeak(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Manabond.java b/Mage.Sets/src/mage/sets/tempestremastered/Manabond.java new file mode 100644 index 0000000000..ea845fa6c9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Manabond.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Manabond extends mage.sets.exodus.Manabond { + + public Manabond(UUID ownerId) { + super(ownerId); + this.cardNumber = 179; + this.expansionSetCode = "TPR"; + } + + public Manabond(final Manabond card) { + super(card); + } + + @Override + public Manabond copy() { + return new Manabond(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ManiacalRage.java b/Mage.Sets/src/mage/sets/tempestremastered/ManiacalRage.java new file mode 100644 index 0000000000..36330594ae --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ManiacalRage.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ManiacalRage extends mage.sets.conflux.ManiacalRage { + + public ManiacalRage(UUID ownerId) { + super(ownerId); + this.cardNumber = 142; + this.expansionSetCode = "TPR"; + } + + public ManiacalRage(final ManiacalRage card) { + super(card); + } + + @Override + public ManiacalRage copy() { + return new ManiacalRage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MasterDecoy.java b/Mage.Sets/src/mage/sets/tempestremastered/MasterDecoy.java new file mode 100644 index 0000000000..ee4e5b29eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MasterDecoy.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MasterDecoy extends mage.sets.tempest.MasterDecoy { + + public MasterDecoy(UUID ownerId) { + super(ownerId); + this.cardNumber = 18; + this.expansionSetCode = "TPR"; + } + + public MasterDecoy(final MasterDecoy card) { + super(card); + } + + @Override + public MasterDecoy copy() { + return new MasterDecoy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Mawcor.java b/Mage.Sets/src/mage/sets/tempestremastered/Mawcor.java new file mode 100644 index 0000000000..5acc9c3890 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Mawcor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mawcor extends mage.sets.tempest.Mawcor { + + public Mawcor(UUID ownerId) { + super(ownerId); + this.cardNumber = 59; + this.expansionSetCode = "TPR"; + } + + public Mawcor(final Mawcor card) { + super(card); + } + + @Override + public Mawcor copy() { + return new Mawcor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MazeOfShadows.java b/Mage.Sets/src/mage/sets/tempestremastered/MazeOfShadows.java new file mode 100644 index 0000000000..3bf6011a5c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MazeOfShadows.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class MazeOfShadows extends mage.sets.tempest.MazeOfShadows { + + public MazeOfShadows(UUID ownerId) { + super(ownerId); + this.cardNumber = 238; + this.expansionSetCode = "TPR"; + } + + public MazeOfShadows(final MazeOfShadows card) { + super(card); + } + + @Override + public MazeOfShadows copy() { + return new MazeOfShadows(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Meditate.java b/Mage.Sets/src/mage/sets/tempestremastered/Meditate.java new file mode 100644 index 0000000000..511b921662 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Meditate.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Meditate extends mage.sets.tempest.Meditate { + + public Meditate(UUID ownerId) { + super(ownerId); + this.cardNumber = 60; + this.expansionSetCode = "TPR"; + } + + public Meditate(final Meditate card) { + super(card); + } + + @Override + public Meditate copy() { + return new Meditate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MerfolkLooter.java b/Mage.Sets/src/mage/sets/tempestremastered/MerfolkLooter.java new file mode 100644 index 0000000000..bf84662bb6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MerfolkLooter.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MerfolkLooter extends mage.sets.magic2012.MerfolkLooter { + + public MerfolkLooter(UUID ownerId) { + super(ownerId); + this.cardNumber = 61; + this.expansionSetCode = "TPR"; + } + + public MerfolkLooter(final MerfolkLooter card) { + super(card); + } + + @Override + public MerfolkLooter copy() { + return new MerfolkLooter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MetallicSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/MetallicSliver.java new file mode 100644 index 0000000000..fb828cc073 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MetallicSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MetallicSliver extends mage.sets.tempest.MetallicSliver { + + public MetallicSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 226; + this.expansionSetCode = "TPR"; + } + + public MetallicSliver(final MetallicSliver card) { + super(card); + } + + @Override + public MetallicSliver copy() { + return new MetallicSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MindlessAutomaton.java b/Mage.Sets/src/mage/sets/tempestremastered/MindlessAutomaton.java new file mode 100644 index 0000000000..9a0a8f094e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MindlessAutomaton.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MindlessAutomaton extends mage.sets.exodus.MindlessAutomaton { + + public MindlessAutomaton(UUID ownerId) { + super(ownerId); + this.cardNumber = 227; + this.expansionSetCode = "TPR"; + } + + public MindlessAutomaton(final MindlessAutomaton card) { + super(card); + } + + @Override + public MindlessAutomaton copy() { + return new MindlessAutomaton(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MirriCatWarrior.java b/Mage.Sets/src/mage/sets/tempestremastered/MirriCatWarrior.java new file mode 100644 index 0000000000..79d31a30b8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MirriCatWarrior.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MirriCatWarrior extends mage.sets.tenth.MirriCatWarrior { + + public MirriCatWarrior(UUID ownerId) { + super(ownerId); + this.cardNumber = 180; + this.expansionSetCode = "TPR"; + } + + public MirriCatWarrior(final MirriCatWarrior card) { + super(card); + } + + @Override + public MirriCatWarrior copy() { + return new MirriCatWarrior(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MnemonicSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/MnemonicSliver.java new file mode 100644 index 0000000000..cec43f5499 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MnemonicSliver.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class MnemonicSliver extends mage.sets.tempest.MnemonicSliver { + + public MnemonicSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 62; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public MnemonicSliver(final MnemonicSliver card) { + super(card); + } + + @Override + public MnemonicSliver copy() { + return new MnemonicSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoggConscripts.java b/Mage.Sets/src/mage/sets/tempestremastered/MoggConscripts.java new file mode 100644 index 0000000000..6c3073644b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoggConscripts.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MoggConscripts extends mage.sets.tempest.MoggConscripts { + + public MoggConscripts(UUID ownerId) { + super(ownerId); + this.cardNumber = 143; + this.expansionSetCode = "TPR"; + } + + public MoggConscripts(final MoggConscripts card) { + super(card); + } + + @Override + public MoggConscripts copy() { + return new MoggConscripts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoggFanatic.java b/Mage.Sets/src/mage/sets/tempestremastered/MoggFanatic.java new file mode 100644 index 0000000000..7e709a2f48 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoggFanatic.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MoggFanatic extends mage.sets.tempest.MoggFanatic { + + public MoggFanatic(UUID ownerId) { + super(ownerId); + this.cardNumber = 144; + this.expansionSetCode = "TPR"; + } + + public MoggFanatic(final MoggFanatic card) { + super(card); + } + + @Override + public MoggFanatic copy() { + return new MoggFanatic(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoggFlunkies.java b/Mage.Sets/src/mage/sets/tempestremastered/MoggFlunkies.java new file mode 100644 index 0000000000..d8855a1be8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoggFlunkies.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MoggFlunkies extends mage.sets.magic2013.MoggFlunkies { + + public MoggFlunkies(UUID ownerId) { + super(ownerId); + this.cardNumber = 145; + this.expansionSetCode = "TPR"; + } + + public MoggFlunkies(final MoggFlunkies card) { + super(card); + } + + @Override + public MoggFlunkies copy() { + return new MoggFlunkies(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoggHollows.java b/Mage.Sets/src/mage/sets/tempestremastered/MoggHollows.java new file mode 100644 index 0000000000..d4d75bd411 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoggHollows.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MoggHollows extends mage.sets.tempest.MoggHollows { + + public MoggHollows(UUID ownerId) { + super(ownerId); + this.cardNumber = 239; + this.expansionSetCode = "TPR"; + } + + public MoggHollows(final MoggHollows card) { + super(card); + } + + @Override + public MoggHollows copy() { + return new MoggHollows(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoggInfestation.java b/Mage.Sets/src/mage/sets/tempestremastered/MoggInfestation.java new file mode 100644 index 0000000000..1680b2c471 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoggInfestation.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class MoggInfestation extends mage.sets.stronghold.MoggInfestation { + + public MoggInfestation(UUID ownerId) { + super(ownerId); + this.cardNumber = 146; + this.expansionSetCode = "TPR"; + } + + public MoggInfestation(final MoggInfestation card) { + super(card); + } + + @Override + public MoggInfestation copy() { + return new MoggInfestation(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoggManiac.java b/Mage.Sets/src/mage/sets/tempestremastered/MoggManiac.java new file mode 100644 index 0000000000..d0fda938a7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoggManiac.java @@ -0,0 +1,101 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealtDamageToSourceTriggeredAbility; +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.game.Game; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author fireshoes + */ +public class MoggManiac extends CardImpl { + + public MoggManiac(UUID ownerId) { + super(ownerId, 147, "Mogg Maniac", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Goblin"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever Mogg Maniac is dealt damage, it deals that much damage to target opponent. + Ability ability = new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, new MoggManiacDealDamageEffect(), false); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public MoggManiac(final MoggManiac card) { + super(card); + } + + @Override + public MoggManiac copy() { + return new MoggManiac(this); + } +} + +class MoggManiacDealDamageEffect extends OneShotEffect { + + public MoggManiacDealDamageEffect() { + super(Outcome.Damage); + this.staticText = "it deals that much damage to target opponent"; + } + + public MoggManiacDealDamageEffect(final MoggManiacDealDamageEffect effect) { + super(effect); + } + + @Override + public MoggManiacDealDamageEffect copy() { + return new MoggManiacDealDamageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int amount = (Integer) getValue("damage"); + if (amount > 0) { + Player opponent = game.getPlayer(targetPointer.getFirst(game, source)); + if (opponent != null) { + opponent.damage(amount, source.getSourceId(), game, false, true); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Mountain1.java b/Mage.Sets/src/mage/sets/tempestremastered/Mountain1.java new file mode 100644 index 0000000000..059d4bed47 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain1 extends mage.cards.basiclands.Mountain { + + public Mountain1(UUID ownerId) { + super(ownerId, 262); + this.expansionSetCode = "TPR"; + } + + public Mountain1(final Mountain1 card) { + super(card); + } + + @Override + public Mountain1 copy() { + return new Mountain1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Mountain2.java b/Mage.Sets/src/mage/sets/tempestremastered/Mountain2.java new file mode 100644 index 0000000000..a91ff0d8fe --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain2 extends mage.cards.basiclands.Mountain { + + public Mountain2(UUID ownerId) { + super(ownerId, 263); + this.expansionSetCode = "TPR"; + } + + public Mountain2(final Mountain2 card) { + super(card); + } + + @Override + public Mountain2 copy() { + return new Mountain2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Mountain3.java b/Mage.Sets/src/mage/sets/tempestremastered/Mountain3.java new file mode 100644 index 0000000000..9fb98c1987 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain3 extends mage.cards.basiclands.Mountain { + + public Mountain3(UUID ownerId) { + super(ownerId, 264); + this.expansionSetCode = "TPR"; + } + + public Mountain3(final Mountain3 card) { + super(card); + } + + @Override + public Mountain3 copy() { + return new Mountain3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Mountain4.java b/Mage.Sets/src/mage/sets/tempestremastered/Mountain4.java new file mode 100644 index 0000000000..a6c5bb7d72 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mountain4 extends mage.cards.basiclands.Mountain { + + public Mountain4(UUID ownerId) { + super(ownerId, 265); + this.expansionSetCode = "TPR"; + } + + public Mountain4(final Mountain4 card) { + super(card); + } + + @Override + public Mountain4 copy() { + return new Mountain4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MountedArchers.java b/Mage.Sets/src/mage/sets/tempestremastered/MountedArchers.java new file mode 100644 index 0000000000..29c7169aa2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MountedArchers.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class MountedArchers extends CardImpl { + + public MountedArchers(UUID ownerId) { + super(ownerId, 19, "Mounted Archers", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.subtype.add("Archer"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Reach + this.addAbility(ReachAbility.getInstance()); + + // {W}: Mounted Archers can block an additional creature this turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CanBlockAdditionalCreatureEffect(Duration.EndOfTurn, 1), new ManaCostsImpl("{W}"))); + } + + public MountedArchers(final MountedArchers card) { + super(card); + } + + @Override + public MountedArchers copy() { + return new MountedArchers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MoxDiamond.java b/Mage.Sets/src/mage/sets/tempestremastered/MoxDiamond.java new file mode 100644 index 0000000000..d22e3b038e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MoxDiamond.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class MoxDiamond extends mage.sets.stronghold.MoxDiamond { + + public MoxDiamond(UUID ownerId) { + super(ownerId); + this.cardNumber = 228; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public MoxDiamond(final MoxDiamond card) { + super(card); + } + + @Override + public MoxDiamond copy() { + return new MoxDiamond(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Mulch.java b/Mage.Sets/src/mage/sets/tempestremastered/Mulch.java new file mode 100644 index 0000000000..281fcc50ba --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Mulch extends mage.sets.innistrad.Mulch { + + public Mulch(UUID ownerId) { + super(ownerId); + this.cardNumber = 181; + this.expansionSetCode = "TPR"; + } + + public Mulch(final Mulch card) { + super(card); + } + + @Override + public Mulch copy() { + return new Mulch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/MuscleSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/MuscleSliver.java new file mode 100644 index 0000000000..fe9fbdc1fe --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/MuscleSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class MuscleSliver extends mage.sets.tempest.MuscleSliver { + + public MuscleSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 182; + this.expansionSetCode = "TPR"; + } + + public MuscleSliver(final MuscleSliver card) { + super(card); + } + + @Override + public MuscleSliver copy() { + return new MuscleSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java b/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java new file mode 100644 index 0000000000..dd32de85bc --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java @@ -0,0 +1,114 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.common.PayVariableLifeCost; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.GetXValue; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; +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.events.GameEvent; + +/** + * + * @author LevelX2 + */ +public class Necrologia extends CardImpl { + + public Necrologia(UUID ownerId) { + super(ownerId, 110, "Necrologia", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{3}{B}{B}"); + this.expansionSetCode = "TPR"; + + // Cast Necrologia only during your end step. + Ability ability = new SimpleStaticAbility(Zone.ALL, new NecrologiaTimingEffect()); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + + // As an additional cost to cast to Necrologia, pay X life. + this.getSpellAbility().addCost(new PayVariableLifeCost(true)); + + // Draw X cards. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(new GetXValue())); + } + + public Necrologia(final Necrologia card) { + super(card); + } + + @Override + public Necrologia copy() { + return new Necrologia(this); + } +} + +class NecrologiaTimingEffect extends ContinuousRuleModifyingEffectImpl { + NecrologiaTimingEffect() { + super(Duration.EndOfGame, Outcome.Detriment); + staticText = "Cast {this} only during your end step"; + } + + NecrologiaTimingEffect(final NecrologiaTimingEffect effect) { + super(effect); + } + + @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.getActivePlayerId().equals(source.getControllerId()) || !PhaseStep.END_TURN.equals(game.getTurn().getStepType())) { + return true; + } + } + return false; + } + + @Override + public NecrologiaTimingEffect copy() { + return new NecrologiaTimingEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/NeedleStorm.java b/Mage.Sets/src/mage/sets/tempestremastered/NeedleStorm.java new file mode 100644 index 0000000000..fac51386d8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/NeedleStorm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NeedleStorm extends mage.sets.tempest.NeedleStorm { + + public NeedleStorm(UUID ownerId) { + super(ownerId); + this.cardNumber = 183; + this.expansionSetCode = "TPR"; + } + + public NeedleStorm(final NeedleStorm card) { + super(card); + } + + @Override + public NeedleStorm copy() { + return new NeedleStorm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/NomadsEnKor.java b/Mage.Sets/src/mage/sets/tempestremastered/NomadsEnKor.java new file mode 100644 index 0000000000..982563363e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/NomadsEnKor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class NomadsEnKor extends mage.sets.stronghold.NomadsEnKor { + + public NomadsEnKor(UUID ownerId) { + super(ownerId); + this.cardNumber = 20; + this.expansionSetCode = "TPR"; + } + + public NomadsEnKor(final NomadsEnKor card) { + super(card); + } + + @Override + public NomadsEnKor copy() { + return new NomadsEnKor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/OathOfDruids.java b/Mage.Sets/src/mage/sets/tempestremastered/OathOfDruids.java new file mode 100644 index 0000000000..c8b742198f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/OathOfDruids.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class OathOfDruids extends mage.sets.exodus.OathOfDruids { + + public OathOfDruids(UUID ownerId) { + super(ownerId); + this.cardNumber = 184; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public OathOfDruids(final OathOfDruids card) { + super(card); + } + + @Override + public OathOfDruids copy() { + return new OathOfDruids(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/OgreShaman.java b/Mage.Sets/src/mage/sets/tempestremastered/OgreShaman.java new file mode 100644 index 0000000000..81b8562d8f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/OgreShaman.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OgreShaman extends mage.sets.exodus.OgreShaman { + + public OgreShaman(UUID ownerId) { + super(ownerId); + this.cardNumber = 148; + this.expansionSetCode = "TPR"; + } + + public OgreShaman(final OgreShaman card) { + super(card); + } + + @Override + public OgreShaman copy() { + return new OgreShaman(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/OrimSamiteHealer.java b/Mage.Sets/src/mage/sets/tempestremastered/OrimSamiteHealer.java new file mode 100644 index 0000000000..b739f9985f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/OrimSamiteHealer.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class OrimSamiteHealer extends mage.sets.tempest.OrimSamiteHealer { + + public OrimSamiteHealer(UUID ownerId) { + super(ownerId); + this.cardNumber = 21; + this.expansionSetCode = "TPR"; + } + + public OrimSamiteHealer(final OrimSamiteHealer card) { + super(card); + } + + @Override + public OrimSamiteHealer copy() { + return new OrimSamiteHealer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Overrun.java b/Mage.Sets/src/mage/sets/tempestremastered/Overrun.java new file mode 100644 index 0000000000..6164eb1ffd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Overrun extends mage.sets.magic2010.Overrun { + + public Overrun(UUID ownerId) { + super(ownerId); + this.cardNumber = 185; + this.expansionSetCode = "TPR"; + } + + public Overrun(final Overrun card) { + super(card); + } + + @Override + public Overrun copy() { + return new Overrun(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Pacifism.java b/Mage.Sets/src/mage/sets/tempestremastered/Pacifism.java new file mode 100644 index 0000000000..5e853240fe --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Pacifism.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Pacifism extends mage.sets.tenth.Pacifism { + + public Pacifism(UUID ownerId) { + super(ownerId); + this.cardNumber = 22; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Pacifism(final Pacifism card) { + super(card); + } + + @Override + public Pacifism copy() { + return new Pacifism(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/PaladinEnVec.java b/Mage.Sets/src/mage/sets/tempestremastered/PaladinEnVec.java new file mode 100644 index 0000000000..9dff8b4279 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/PaladinEnVec.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PaladinEnVec extends mage.sets.ninthedition.PaladinEnVec { + + public PaladinEnVec(UUID ownerId) { + super(ownerId); + this.cardNumber = 23; + this.expansionSetCode = "TPR"; + } + + public PaladinEnVec(final PaladinEnVec card) { + super(card); + } + + @Override + public PaladinEnVec copy() { + return new PaladinEnVec(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Pandemonium.java b/Mage.Sets/src/mage/sets/tempestremastered/Pandemonium.java new file mode 100644 index 0000000000..f458fbe40f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Pandemonium.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class Pandemonium extends mage.sets.timeshifted.Pandemonium { + + public Pandemonium(UUID ownerId) { + super(ownerId); + this.cardNumber = 149; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public Pandemonium(final Pandemonium card) { + super(card); + } + + @Override + public Pandemonium copy() { + return new Pandemonium(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/PatchworkGnomes.java b/Mage.Sets/src/mage/sets/tempestremastered/PatchworkGnomes.java new file mode 100644 index 0000000000..9d338e4b69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/PatchworkGnomes.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class PatchworkGnomes extends mage.sets.tempest.PatchworkGnomes { + + public PatchworkGnomes(UUID ownerId) { + super(ownerId); + this.cardNumber = 229; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public PatchworkGnomes(final PatchworkGnomes card) { + super(card); + } + + @Override + public PatchworkGnomes copy() { + return new PatchworkGnomes(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/PegasusStampede.java b/Mage.Sets/src/mage/sets/tempestremastered/PegasusStampede.java new file mode 100644 index 0000000000..65df872800 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/PegasusStampede.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class PegasusStampede extends mage.sets.exodus.PegasusStampede { + + public PegasusStampede(UUID ownerId) { + super(ownerId); + this.cardNumber = 24; + this.expansionSetCode = "TPR"; + } + + public PegasusStampede(final PegasusStampede card) { + super(card); + } + + @Override + public PegasusStampede copy() { + return new PegasusStampede(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/PhyrexianHulk.java b/Mage.Sets/src/mage/sets/tempestremastered/PhyrexianHulk.java new file mode 100644 index 0000000000..b038197913 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/PhyrexianHulk.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class PhyrexianHulk extends mage.sets.newphyrexia.PhyrexianHulk { + + public PhyrexianHulk(UUID ownerId) { + super(ownerId); + this.cardNumber = 230; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public PhyrexianHulk(final PhyrexianHulk card) { + super(card); + } + + @Override + public PhyrexianHulk copy() { + return new PhyrexianHulk(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/PineBarrens.java b/Mage.Sets/src/mage/sets/tempestremastered/PineBarrens.java new file mode 100644 index 0000000000..98acc6fce7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/PineBarrens.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class PineBarrens extends mage.sets.tempest.PineBarrens { + + public PineBarrens(UUID ownerId) { + super(ownerId); + this.cardNumber = 240; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public PineBarrens(final PineBarrens card) { + super(card); + } + + @Override + public PineBarrens copy() { + return new PineBarrens(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Plains1.java b/Mage.Sets/src/mage/sets/tempestremastered/Plains1.java new file mode 100644 index 0000000000..8580c15c8f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains1 extends mage.cards.basiclands.Plains { + + public Plains1(UUID ownerId) { + super(ownerId, 250); + this.expansionSetCode = "TPR"; + } + + public Plains1(final Plains1 card) { + super(card); + } + + @Override + public Plains1 copy() { + return new Plains1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Plains2.java b/Mage.Sets/src/mage/sets/tempestremastered/Plains2.java new file mode 100644 index 0000000000..817bba2c85 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains2 extends mage.cards.basiclands.Plains { + + public Plains2(UUID ownerId) { + super(ownerId, 251); + this.expansionSetCode = "TPR"; + } + + public Plains2(final Plains2 card) { + super(card); + } + + @Override + public Plains2 copy() { + return new Plains2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Plains3.java b/Mage.Sets/src/mage/sets/tempestremastered/Plains3.java new file mode 100644 index 0000000000..ca9e502082 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains3 extends mage.cards.basiclands.Plains { + + public Plains3(UUID ownerId) { + super(ownerId, 252); + this.expansionSetCode = "TPR"; + } + + public Plains3(final Plains3 card) { + super(card); + } + + @Override + public Plains3 copy() { + return new Plains3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Plains4.java b/Mage.Sets/src/mage/sets/tempestremastered/Plains4.java new file mode 100644 index 0000000000..5dcbfe9d24 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Plains4 extends mage.cards.basiclands.Plains { + + public Plains4(UUID ownerId) { + super(ownerId, 253); + this.expansionSetCode = "TPR"; + } + + public Plains4(final Plains4 card) { + super(card); + } + + @Override + public Plains4 copy() { + return new Plains4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Provoke.java b/Mage.Sets/src/mage/sets/tempestremastered/Provoke.java new file mode 100644 index 0000000000..910bb9d166 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Provoke.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Provoke extends mage.sets.stronghold.Provoke { + + public Provoke(UUID ownerId) { + super(ownerId); + this.cardNumber = 186; + this.expansionSetCode = "TPR"; + } + + public Provoke(final Provoke card) { + super(card); + } + + @Override + public Provoke copy() { + return new Provoke(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RampantGrowth.java b/Mage.Sets/src/mage/sets/tempestremastered/RampantGrowth.java new file mode 100644 index 0000000000..cc318bd2a9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RampantGrowth extends mage.sets.magic2010.RampantGrowth { + + public RampantGrowth(UUID ownerId) { + super(ownerId); + this.cardNumber = 187; + this.expansionSetCode = "TPR"; + } + + public RampantGrowth(final RampantGrowth card) { + super(card); + } + + @Override + public RampantGrowth copy() { + return new RampantGrowth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RathiDragon.java b/Mage.Sets/src/mage/sets/tempestremastered/RathiDragon.java new file mode 100644 index 0000000000..4dcbeee310 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RathiDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RathiDragon extends mage.sets.ninthedition.RathiDragon { + + public RathiDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 150; + this.expansionSetCode = "TPR"; + } + + public RathiDragon(final RathiDragon card) { + super(card); + } + + @Override + public RathiDragon copy() { + return new RathiDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RatsOfRath.java b/Mage.Sets/src/mage/sets/tempestremastered/RatsOfRath.java new file mode 100644 index 0000000000..f4f86ebddb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RatsOfRath.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RatsOfRath extends mage.sets.tempest.RatsOfRath { + + public RatsOfRath(UUID ownerId) { + super(ownerId); + this.cardNumber = 111; + this.expansionSetCode = "TPR"; + } + + public RatsOfRath(final RatsOfRath card) { + super(card); + } + + @Override + public RatsOfRath copy() { + return new RatsOfRath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RealityAnchor.java b/Mage.Sets/src/mage/sets/tempestremastered/RealityAnchor.java new file mode 100644 index 0000000000..5d95e0b6e2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RealityAnchor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RealityAnchor extends mage.sets.tempest.RealityAnchor { + + public RealityAnchor(UUID ownerId) { + super(ownerId); + this.cardNumber = 188; + this.expansionSetCode = "TPR"; + } + + public RealityAnchor(final RealityAnchor card) { + super(card); + } + + @Override + public RealityAnchor copy() { + return new RealityAnchor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Reanimate.java b/Mage.Sets/src/mage/sets/tempestremastered/Reanimate.java new file mode 100644 index 0000000000..292d1115b6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Reanimate.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Reanimate extends mage.sets.tempest.Reanimate { + + public Reanimate(UUID ownerId) { + super(ownerId); + this.cardNumber = 112; + this.expansionSetCode = "TPR"; + } + + public Reanimate(final Reanimate card) { + super(card); + } + + @Override + public Reanimate copy() { + return new Reanimate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RecurringNightmare.java b/Mage.Sets/src/mage/sets/tempestremastered/RecurringNightmare.java new file mode 100644 index 0000000000..d0fe940546 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RecurringNightmare.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RecurringNightmare extends mage.sets.exodus.RecurringNightmare { + + public RecurringNightmare(UUID ownerId) { + super(ownerId); + this.cardNumber = 113; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public RecurringNightmare(final RecurringNightmare card) { + super(card); + } + + @Override + public RecurringNightmare copy() { + return new RecurringNightmare(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Recycle.java b/Mage.Sets/src/mage/sets/tempestremastered/Recycle.java new file mode 100644 index 0000000000..1c2a5d26f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Recycle.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class Recycle extends mage.sets.tempest.Recycle { + + public Recycle(UUID ownerId) { + super(ownerId); + this.cardNumber = 189; + this.expansionSetCode = "TPR"; + } + + public Recycle(final Recycle card) { + super(card); + } + + @Override + public Recycle copy() { + return new Recycle(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RenegadeWarlord.java b/Mage.Sets/src/mage/sets/tempestremastered/RenegadeWarlord.java new file mode 100644 index 0000000000..82fd4a419f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RenegadeWarlord.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RenegadeWarlord extends mage.sets.tempest.RenegadeWarlord { + + public RenegadeWarlord(UUID ownerId) { + super(ownerId); + this.cardNumber = 151; + this.expansionSetCode = "TPR"; + } + + public RenegadeWarlord(final RenegadeWarlord card) { + super(card); + } + + @Override + public RenegadeWarlord copy() { + return new RenegadeWarlord(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Repentance.java b/Mage.Sets/src/mage/sets/tempestremastered/Repentance.java new file mode 100644 index 0000000000..2b29dce4d7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Repentance.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class Repentance extends CardImpl { + + public Repentance(UUID ownerId) { + super(ownerId, 25, "Repentance", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{W}"); + this.expansionSetCode = "TPR"; + + // Target creature deals damage to itself equal to its power. + this.getSpellAbility().addEffect(new RepentanceEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public Repentance(final Repentance card) { + super(card); + } + + @Override + public Repentance copy() { + return new Repentance(this); + } +} + +class RepentanceEffect extends OneShotEffect { + + public RepentanceEffect() { + super(Outcome.Damage); + this.staticText = "Target creature deals damage to itself equal to its power"; + } + + public RepentanceEffect(final RepentanceEffect effect) { + super(effect); + } + + @Override + public RepentanceEffect copy() { + return new RepentanceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (targetCreature != null) { + targetCreature.damage(targetCreature.getPower().getValue(), source.getSourceId(), game, false, true); + } + return true; + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Revenant.java b/Mage.Sets/src/mage/sets/tempestremastered/Revenant.java new file mode 100644 index 0000000000..e72b44e542 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Revenant.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect; +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.FilterCreatureCard; + +/** + * + * @author fireshoes + */ +public class Revenant extends CardImpl { + + public Revenant(UUID ownerId) { + super(ownerId, 114, "Revenant", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{B}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Spirit"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Revenant's power and toughness are each equal to the number of creature cards in your graveyard. + CardsInControllerGraveyardCount count = new CardsInControllerGraveyardCount(new FilterCreatureCard("creature cards")); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(count, Duration.EndOfGame))); + } + + public Revenant(final Revenant card) { + super(card); + } + + @Override + public Revenant copy() { + return new Revenant(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RollingThunder.java b/Mage.Sets/src/mage/sets/tempestremastered/RollingThunder.java new file mode 100644 index 0000000000..faeeafe46f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RollingThunder.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.tempestremastered; + +import java.util.UUID; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.common.DamageMultiEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayerAmount; + +/** + * + * @author fireshoes + */ +public class RollingThunder extends CardImpl { + + public RollingThunder(UUID ownerId) { + super(ownerId, 152, "Rolling Thunder", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{X}{R}{R}"); + this.expansionSetCode = "TPR"; + + // Rolling Thunder deals X damage divided as you choose among any number of target creatures and/or players. + DynamicValue xValue = new ManacostVariableValue(); + this.getSpellAbility().addEffect(new DamageMultiEffect(xValue)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayerAmount(xValue)); + } + + public RollingThunder(final RollingThunder card) { + super(card); + } + + @Override + public RollingThunder copy() { + return new RollingThunder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RootbreakerWurm.java b/Mage.Sets/src/mage/sets/tempestremastered/RootbreakerWurm.java new file mode 100644 index 0000000000..c55c169dd3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RootbreakerWurm.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RootbreakerWurm extends mage.sets.tempest.RootbreakerWurm { + + public RootbreakerWurm(UUID ownerId) { + super(ownerId); + this.cardNumber = 190; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public RootbreakerWurm(final RootbreakerWurm card) { + super(card); + } + + @Override + public RootbreakerWurm copy() { + return new RootbreakerWurm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Rootwalla.java b/Mage.Sets/src/mage/sets/tempestremastered/Rootwalla.java new file mode 100644 index 0000000000..e4cad9c555 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Rootwalla.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Rootwalla extends mage.sets.tempest.Rootwalla { + + public Rootwalla(UUID ownerId) { + super(ownerId); + this.cardNumber = 191; + this.expansionSetCode = "TPR"; + } + + public Rootwalla(final Rootwalla card) { + super(card); + } + + @Override + public Rootwalla copy() { + return new Rootwalla(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RootwaterDepths.java b/Mage.Sets/src/mage/sets/tempestremastered/RootwaterDepths.java new file mode 100644 index 0000000000..f6258519aa --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RootwaterDepths.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class RootwaterDepths extends mage.sets.tempest.RootwaterDepths { + + public RootwaterDepths(UUID ownerId) { + super(ownerId); + this.cardNumber = 241; + this.expansionSetCode = "TPR"; + } + + public RootwaterDepths(final RootwaterDepths card) { + super(card); + } + + @Override + public RootwaterDepths copy() { + return new RootwaterDepths(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/RootwaterHunter.java b/Mage.Sets/src/mage/sets/tempestremastered/RootwaterHunter.java new file mode 100644 index 0000000000..a2df32b384 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/RootwaterHunter.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class RootwaterHunter extends mage.sets.tempest.RootwaterHunter { + + public RootwaterHunter(UUID ownerId) { + super(ownerId); + this.cardNumber = 63; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public RootwaterHunter(final RootwaterHunter card) { + super(card); + } + + @Override + public RootwaterHunter copy() { + return new RootwaterHunter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SabertoothWyvern.java b/Mage.Sets/src/mage/sets/tempestremastered/SabertoothWyvern.java new file mode 100644 index 0000000000..169338dd3f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SabertoothWyvern.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SabertoothWyvern extends mage.sets.exodus.SabertoothWyvern { + + public SabertoothWyvern(UUID ownerId) { + super(ownerId); + this.cardNumber = 153; + this.expansionSetCode = "TPR"; + } + + public SabertoothWyvern(final SabertoothWyvern card) { + super(card); + } + + @Override + public SabertoothWyvern copy() { + return new SabertoothWyvern(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SaltFlats.java b/Mage.Sets/src/mage/sets/tempestremastered/SaltFlats.java new file mode 100644 index 0000000000..0491810332 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SaltFlats.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SaltFlats extends mage.sets.tempest.SaltFlats { + + public SaltFlats(UUID ownerId) { + super(ownerId); + this.cardNumber = 242; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public SaltFlats(final SaltFlats card) { + super(card); + } + + @Override + public SaltFlats copy() { + return new SaltFlats(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SandstoneWarrior.java b/Mage.Sets/src/mage/sets/tempestremastered/SandstoneWarrior.java new file mode 100644 index 0000000000..9ae4f54bd7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SandstoneWarrior.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SandstoneWarrior extends mage.sets.tempest.SandstoneWarrior { + + public SandstoneWarrior(UUID ownerId) { + super(ownerId); + this.cardNumber = 154; + this.expansionSetCode = "TPR"; + } + + public SandstoneWarrior(final SandstoneWarrior card) { + super(card); + } + + @Override + public SandstoneWarrior copy() { + return new SandstoneWarrior(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Sarcomancy.java b/Mage.Sets/src/mage/sets/tempestremastered/Sarcomancy.java new file mode 100644 index 0000000000..651fb1d0c8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Sarcomancy.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Sarcomancy extends mage.sets.tempest.Sarcomancy { + + public Sarcomancy(UUID ownerId) { + super(ownerId); + this.cardNumber = 115; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Sarcomancy(final Sarcomancy card) { + super(card); + } + + @Override + public Sarcomancy copy() { + return new Sarcomancy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Scabland.java b/Mage.Sets/src/mage/sets/tempestremastered/Scabland.java new file mode 100644 index 0000000000..f224e01751 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Scabland.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Scabland extends mage.sets.tempest.Scabland { + + public Scabland(UUID ownerId) { + super(ownerId); + this.cardNumber = 243; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Scabland(final Scabland card) { + super(card); + } + + @Override + public Scabland copy() { + return new Scabland(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ScreechingHarpy.java b/Mage.Sets/src/mage/sets/tempestremastered/ScreechingHarpy.java new file mode 100644 index 0000000000..fac1e52cea --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ScreechingHarpy.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ScreechingHarpy extends mage.sets.tempest.ScreechingHarpy { + + public ScreechingHarpy(UUID ownerId) { + super(ownerId); + this.cardNumber = 116; + this.expansionSetCode = "TPR"; + } + + public ScreechingHarpy(final ScreechingHarpy card) { + super(card); + } + + @Override + public ScreechingHarpy copy() { + return new ScreechingHarpy(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Scrivener.java b/Mage.Sets/src/mage/sets/tempestremastered/Scrivener.java new file mode 100644 index 0000000000..9435574415 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Scrivener.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Scrivener extends mage.sets.exodus.Scrivener { + + public Scrivener(UUID ownerId) { + super(ownerId); + this.cardNumber = 64; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public Scrivener(final Scrivener card) { + super(card); + } + + @Override + public Scrivener copy() { + return new Scrivener(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SeaMonster.java b/Mage.Sets/src/mage/sets/tempestremastered/SeaMonster.java new file mode 100644 index 0000000000..91a65703a3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SeaMonster.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SeaMonster extends mage.sets.tempest.SeaMonster { + + public SeaMonster(UUID ownerId) { + super(ownerId); + this.cardNumber = 65; + this.expansionSetCode = "TPR"; + } + + public SeaMonster(final SeaMonster card) { + super(card); + } + + @Override + public SeaMonster copy() { + return new SeaMonster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SearingTouch.java b/Mage.Sets/src/mage/sets/tempestremastered/SearingTouch.java new file mode 100644 index 0000000000..4b377dfb81 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SearingTouch.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SearingTouch extends mage.sets.tempest.SearingTouch { + + public SearingTouch(UUID ownerId) { + super(ownerId); + this.cardNumber = 155; + this.expansionSetCode = "TPR"; + } + + public SearingTouch(final SearingTouch card) { + super(card); + } + + @Override + public SearingTouch copy() { + return new SearingTouch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SeethingAnger.java b/Mage.Sets/src/mage/sets/tempestremastered/SeethingAnger.java new file mode 100644 index 0000000000..98f27bdd2a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SeethingAnger.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.tempestremastered; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +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 fireshoes + */ +public class SeethingAnger extends CardImpl { + + public SeethingAnger(UUID ownerId) { + super(ownerId, 156, "Seething Anger", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{R}"); + this.expansionSetCode = "TPR"; + + // Buyback {3}(You may pay an additional {3} as you cast this spell. If you do, put this card into your hand as it resolves.) + this.addAbility(new BuybackAbility("{3}")); + + // Target creature gets +3/+0 until end of turn. + this.getSpellAbility().addEffect(new BoostTargetEffect(3, 0, Duration.EndOfTurn)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + } + + public SeethingAnger(final SeethingAnger card) { + super(card); + } + + @Override + public SeethingAnger copy() { + return new SeethingAnger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SeleniaDarkAngel.java b/Mage.Sets/src/mage/sets/tempestremastered/SeleniaDarkAngel.java new file mode 100644 index 0000000000..eba0cdd802 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SeleniaDarkAngel.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SeleniaDarkAngel extends mage.sets.tempest.SeleniaDarkAngel { + + public SeleniaDarkAngel(UUID ownerId) { + super(ownerId); + this.cardNumber = 210; + this.expansionSetCode = "TPR"; + } + + public SeleniaDarkAngel(final SeleniaDarkAngel card) { + super(card); + } + + @Override + public SeleniaDarkAngel copy() { + return new SeleniaDarkAngel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SerpentWarrior.java b/Mage.Sets/src/mage/sets/tempestremastered/SerpentWarrior.java new file mode 100644 index 0000000000..e58058512f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SerpentWarrior.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SerpentWarrior extends mage.sets.stronghold.SerpentWarrior { + + public SerpentWarrior(UUID ownerId) { + super(ownerId); + this.cardNumber = 117; + this.expansionSetCode = "TPR"; + } + + public SerpentWarrior(final SerpentWarrior card) { + super(card); + } + + @Override + public SerpentWarrior copy() { + return new SerpentWarrior(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Shackles.java b/Mage.Sets/src/mage/sets/tempestremastered/Shackles.java new file mode 100644 index 0000000000..a6ff38c8f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Shackles.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Shackles extends mage.sets.invasion.Shackles { + + public Shackles(UUID ownerId) { + super(ownerId); + this.cardNumber = 26; + this.expansionSetCode = "TPR"; + } + + public Shackles(final Shackles card) { + super(card); + } + + @Override + public Shackles copy() { + return new Shackles(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ShadowRift.java b/Mage.Sets/src/mage/sets/tempestremastered/ShadowRift.java new file mode 100644 index 0000000000..28b143c5c4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ShadowRift.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ShadowRift extends mage.sets.tempest.ShadowRift { + + public ShadowRift(UUID ownerId) { + super(ownerId); + this.cardNumber = 66; + this.expansionSetCode = "TPR"; + } + + public ShadowRift(final ShadowRift card) { + super(card); + } + + @Override + public ShadowRift copy() { + return new ShadowRift(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Shadowstorm.java b/Mage.Sets/src/mage/sets/tempestremastered/Shadowstorm.java new file mode 100644 index 0000000000..336f886773 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Shadowstorm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Shadowstorm extends mage.sets.tempest.Shadowstorm { + + public Shadowstorm(UUID ownerId) { + super(ownerId); + this.cardNumber = 157; + this.expansionSetCode = "TPR"; + } + + public Shadowstorm(final Shadowstorm card) { + super(card); + } + + @Override + public Shadowstorm copy() { + return new Shadowstorm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ShamanEnKor.java b/Mage.Sets/src/mage/sets/tempestremastered/ShamanEnKor.java new file mode 100644 index 0000000000..12ff4d5b3f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ShamanEnKor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ShamanEnKor extends mage.sets.stronghold.ShamanEnKor { + + public ShamanEnKor(UUID ownerId) { + super(ownerId); + this.cardNumber = 27; + this.expansionSetCode = "TPR"; + } + + public ShamanEnKor(final ShamanEnKor card) { + super(card); + } + + @Override + public ShamanEnKor copy() { + return new ShamanEnKor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ShardPhoenix.java b/Mage.Sets/src/mage/sets/tempestremastered/ShardPhoenix.java new file mode 100644 index 0000000000..739457578e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ShardPhoenix.java @@ -0,0 +1,87 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.common.IsStepCondition; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.PhaseStep; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; + +/** + * + * @author fireshoes + */ +public class ShardPhoenix extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature without flying"); + + static { + filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); + } + + public ShardPhoenix(UUID ownerId) { + super(ownerId, 158, "Shard Phoenix", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{4}{R}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Phoenix"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Sacrifice Shard Phoenix: Shard Phoenix deals 2 damage to each creature without flying. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageAllEffect(2, filter), new SacrificeSourceCost())); + + // {R}{R}{R}: Return Shard Phoenix from your graveyard to your hand. Activate this ability only during your upkeep. + this.addAbility(new ConditionalActivatedAbility(Zone.GRAVEYARD, + new ReturnSourceFromGraveyardToHandEffect(), new ManaCostsImpl("{R}{R}{R}"), new IsStepCondition(PhaseStep.UPKEEP), null)); + } + + public ShardPhoenix(final ShardPhoenix card) { + super(card); + } + + @Override + public ShardPhoenix copy() { + return new ShardPhoenix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Shatter.java b/Mage.Sets/src/mage/sets/tempestremastered/Shatter.java new file mode 100644 index 0000000000..19ec6d752d --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Shatter.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Shatter extends mage.sets.mirrodin.Shatter { + + public Shatter(UUID ownerId) { + super(ownerId); + this.cardNumber = 159; + this.expansionSetCode = "TPR"; + } + + public Shatter(final Shatter card) { + super(card); + } + + @Override + public Shatter copy() { + return new Shatter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Sift.java b/Mage.Sets/src/mage/sets/tempestremastered/Sift.java new file mode 100644 index 0000000000..4b57d4b80a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Sift.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Sift extends mage.sets.tenth.Sift { + + public Sift(UUID ownerId) { + super(ownerId); + this.cardNumber = 67; + this.expansionSetCode = "TPR"; + } + + public Sift(final Sift card) { + super(card); + } + + @Override + public Sift copy() { + return new Sift(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SilverWyvern.java b/Mage.Sets/src/mage/sets/tempestremastered/SilverWyvern.java new file mode 100644 index 0000000000..204897befb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SilverWyvern.java @@ -0,0 +1,118 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +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.ChooseNewTargetsTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterStackObject; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.stack.StackObject; +import mage.target.Target; +import mage.target.TargetStackObject; +import mage.target.Targets; + +/** + * + * @author LevelX2 + */ +public class SilverWyvern extends CardImpl { + + public SilverWyvern(UUID ownerId) { + super(ownerId, 68, "Silver Wyvern", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Drake"); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // {U}: Change the target of target spell or ability that targets only Silver Wyvern. The new target must be a creature. + Effect effect = new ChooseNewTargetsTargetEffect(true, true); + effect.setText("Change the target of target spell or ability that targets only {this}. The new target must be a creature"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{U}")); + FilterStackObject filter = new FilterStackObject(); + filter.add(new TargetsOnlySourcePredicate(getId())); + ability.addTarget(new TargetStackObject(filter)); + this.addAbility(ability); + + } + + public SilverWyvern(final SilverWyvern card) { + super(card); + } + + @Override + public SilverWyvern copy() { + return new SilverWyvern(this); + } +} + +class TargetsOnlySourcePredicate implements Predicate { + + private final UUID sourceId; + + public TargetsOnlySourcePredicate(UUID sourceId) { + this.sourceId = sourceId; + } + + @Override + public boolean apply(MageObject input, Game game) { + StackObject stackObject = game.getStack().getStackObject(input.getId()); + if (stackObject != null) { + Targets spellTargets = stackObject.getStackAbility().getTargets(); + int numberOfTargets = 0; + for (Target target : spellTargets) { + if (target.getFirstTarget() == null || !target.getFirstTarget().toString().equals(sourceId.toString())) { // UUID != UUID does not work - it's always false + return false; + } + numberOfTargets += target.getTargets().size(); + } + if (numberOfTargets == 1) { + return true; + } + } + return false; + } + + @Override + public String toString() { + return "target spell or ability that targets only source"; + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Skyshaper.java b/Mage.Sets/src/mage/sets/tempestremastered/Skyshaper.java new file mode 100644 index 0000000000..cd39cfa827 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Skyshaper.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.tempestremastered; + +import java.util.UUID; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +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; + +/** + * + * @author fireshoes + */ +public class Skyshaper extends CardImpl { + + public Skyshaper(UUID ownerId) { + super(ownerId, 231, "Skyshaper", Rarity.COMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "TPR"; + + // Sacrifice Skyshaper: Creatures you control gain flying until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, + new GainAbilityControlledEffect( + FlyingAbility.getInstance(), + Duration.EndOfTurn, + new FilterControlledCreaturePermanent("Creatures")), + new SacrificeSourceCost())); + } + + public Skyshaper(final Skyshaper card) { + super(card); + } + + @Override + public Skyshaper copy() { + return new Skyshaper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudElf.java b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudElf.java new file mode 100644 index 0000000000..86e8c2eefb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudElf.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SkyshroudElf extends mage.sets.tempest.SkyshroudElf { + + public SkyshroudElf(UUID ownerId) { + super(ownerId); + this.cardNumber = 192; + this.expansionSetCode = "TPR"; + } + + public SkyshroudElf(final SkyshroudElf card) { + super(card); + } + + @Override + public SkyshroudElf copy() { + return new SkyshroudElf(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudForest.java b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudForest.java new file mode 100644 index 0000000000..3abdc42db9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudForest.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SkyshroudForest extends mage.sets.tempest.SkyshroudForest { + + public SkyshroudForest(UUID ownerId) { + super(ownerId); + this.cardNumber = 244; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public SkyshroudForest(final SkyshroudForest card) { + super(card); + } + + @Override + public SkyshroudForest copy() { + return new SkyshroudForest(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudTroll.java b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudTroll.java new file mode 100644 index 0000000000..8576a3c4de --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudTroll.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SkyshroudTroll extends mage.sets.tempest.SkyshroudTroll { + + public SkyshroudTroll(UUID ownerId) { + super(ownerId); + this.cardNumber = 193; + this.expansionSetCode = "TPR"; + } + + public SkyshroudTroll(final SkyshroudTroll card) { + super(card); + } + + @Override + public SkyshroudTroll copy() { + return new SkyshroudTroll(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudVampire.java b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudVampire.java new file mode 100644 index 0000000000..83f3747601 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SkyshroudVampire.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardTargetCost; +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; +import mage.filter.common.FilterCreatureCard; +import mage.target.common.TargetCardInHand; + +/** + * + * @author fireshoes + */ +public class SkyshroudVampire extends CardImpl { + + public SkyshroudVampire(UUID ownerId) { + super(ownerId, 118, "Skyshroud Vampire", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Vampire"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Discard a creature card: Skyshroud Vampire gets +2/+2 until end of turn. + this.addAbility(new SimpleActivatedAbility( + Zone.BATTLEFIELD, + new BoostSourceEffect(2,2, Duration.EndOfTurn), + new DiscardTargetCost(new TargetCardInHand(new FilterCreatureCard())))); + } + + public SkyshroudVampire(final SkyshroudVampire card) { + super(card); + } + + @Override + public SkyshroudVampire copy() { + return new SkyshroudVampire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SliverQueen.java b/Mage.Sets/src/mage/sets/tempestremastered/SliverQueen.java new file mode 100644 index 0000000000..b393ae07d7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SliverQueen.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SliverQueen extends mage.sets.stronghold.SliverQueen { + + public SliverQueen(UUID ownerId) { + super(ownerId); + this.cardNumber = 211; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public SliverQueen(final SliverQueen card) { + super(card); + } + + @Override + public SliverQueen copy() { + return new SliverQueen(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Smite.java b/Mage.Sets/src/mage/sets/tempestremastered/Smite.java new file mode 100644 index 0000000000..b15b66421a --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Smite.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Smite extends mage.sets.riseoftheeldrazi.Smite { + + public Smite(UUID ownerId) { + super(ownerId); + this.cardNumber = 28; + this.expansionSetCode = "TPR"; + } + + public Smite(final Smite card) { + super(card); + } + + @Override + public Smite copy() { + return new Smite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariChampion.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariChampion.java new file mode 100644 index 0000000000..1eafd106e1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariChampion.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SoltariChampion extends mage.sets.stronghold.SoltariChampion { + + public SoltariChampion(UUID ownerId) { + super(ownerId); + this.cardNumber = 29; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public SoltariChampion(final SoltariChampion card) { + super(card); + } + + @Override + public SoltariChampion copy() { + return new SoltariChampion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariGuerrillas.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariGuerrillas.java new file mode 100644 index 0000000000..8a45e29ddd --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariGuerrillas.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class SoltariGuerrillas extends mage.sets.tempest.SoltariGuerrillas { + + public SoltariGuerrillas(UUID ownerId) { + super(ownerId); + this.cardNumber = 212; + this.expansionSetCode = "TPR"; + } + + public SoltariGuerrillas(final SoltariGuerrillas card) { + super(card); + } + + @Override + public SoltariGuerrillas copy() { + return new SoltariGuerrillas(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.java new file mode 100644 index 0000000000..45b9b6bde0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariLancer.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterAttackingCreature; + +/** + * + * @author fireshoes + */ +public class SoltariLancer extends CardImpl { + + private static final String rule = "Spirit of the Night has first strike as long as it's attacking"; + + public SoltariLancer(UUID ownerId) { + super(ownerId, 30, "Soltari Lancer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Soltari"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + + // Soltari Lancer has first strike as long as it's attacking. + ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()), new SourceMatchesFilterCondition(new FilterAttackingCreature()), rule); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + } + + public SoltariLancer(final SoltariLancer card) { + super(card); + } + + @Override + public SoltariLancer copy() { + return new SoltariLancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariMonk.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariMonk.java new file mode 100644 index 0000000000..654c7b0e3e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariMonk.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SoltariMonk extends mage.sets.tempest.SoltariMonk { + + public SoltariMonk(UUID ownerId) { + super(ownerId); + this.cardNumber = 31; + this.expansionSetCode = "TPR"; + } + + public SoltariMonk(final SoltariMonk card) { + super(card); + } + + @Override + public SoltariMonk copy() { + return new SoltariMonk(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariPriest.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariPriest.java new file mode 100644 index 0000000000..a8b5778b7b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariPriest.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SoltariPriest extends mage.sets.tempest.SoltariPriest { + + public SoltariPriest(UUID ownerId) { + super(ownerId); + this.cardNumber = 32; + this.expansionSetCode = "TPR"; + } + + public SoltariPriest(final SoltariPriest card) { + super(card); + } + + @Override + public SoltariPriest copy() { + return new SoltariPriest(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SoltariTrooper.java b/Mage.Sets/src/mage/sets/tempestremastered/SoltariTrooper.java new file mode 100644 index 0000000000..f2d3118e90 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SoltariTrooper.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SoltariTrooper extends mage.sets.tempest.SoltariTrooper { + + public SoltariTrooper(UUID ownerId) { + super(ownerId); + this.cardNumber = 33; + this.expansionSetCode = "TPR"; + } + + public SoltariTrooper(final SoltariTrooper card) { + super(card); + } + + @Override + public SoltariTrooper copy() { + return new SoltariTrooper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpellBlast.java b/Mage.Sets/src/mage/sets/tempestremastered/SpellBlast.java new file mode 100644 index 0000000000..42bedcfd66 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpellBlast.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpellBlast extends mage.sets.limitedalpha.SpellBlast { + + public SpellBlast(UUID ownerId) { + super(ownerId); + this.cardNumber = 69; + this.expansionSetCode = "TPR"; + } + + public SpellBlast(final SpellBlast card) { + super(card); + } + + @Override + public SpellBlast copy() { + return new SpellBlast(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Spellshock.java b/Mage.Sets/src/mage/sets/tempestremastered/Spellshock.java new file mode 100644 index 0000000000..1cbf2dcdd8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Spellshock.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.tempestremastered; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +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.stack.Spell; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author fireshoes + */ +public class Spellshock extends CardImpl { + + public Spellshock(UUID ownerId) { + super(ownerId, 160, "Spellshock", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); + this.expansionSetCode = "TPR"; + + // Whenever a player casts a spell, Spellshock deals 2 damage to that player. + this.addAbility(new SpellshockTriggeredAbility()); + } + + public Spellshock(final Spellshock card) { + super(card); + } + + @Override + public Spellshock copy() { + return new Spellshock(this); + } +} + +class SpellshockTriggeredAbility extends TriggeredAbilityImpl { + + + public SpellshockTriggeredAbility() { + super(Zone.BATTLEFIELD, new DamageTargetEffect(2, true, "that player")); + } + + + public SpellshockTriggeredAbility(final SpellshockTriggeredAbility abiltity) { + super(abiltity); + } + + @Override + public SpellshockTriggeredAbility copy() { + return new SpellshockTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if(event.getType() == GameEvent.EventType.SPELL_CAST){ + Spell spell = game.getStack().getSpell(event.getTargetId()); + if(spell != null){ + for (Effect effect : this.getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getPlayerId())); + } + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a player casts a spell, {this} deals 2 damage to that player."; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpikeBreeder.java b/Mage.Sets/src/mage/sets/tempestremastered/SpikeBreeder.java new file mode 100644 index 0000000000..8b50181026 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpikeBreeder.java @@ -0,0 +1,97 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.permanent.token.Token; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SpikeBreeder extends CardImpl { + + public SpikeBreeder(UUID ownerId) { + super(ownerId, 194, "Spike Breeder", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Spike"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Spike Breeder enters the battlefield with three +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), "with three +1/+1 counters on it")); + + // {2}, Remove a +1/+1 counter from Spike Breeder: Put a +1/+1 counter on target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new GenericManaCost(2)); + ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // {2}, Remove a +1/+1 counter from Spike Breeder: Put a 1/1 green Spike creature token onto the battlefield. + Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SpikeToken()), new GenericManaCost(2)); + ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); + this.addAbility(ability2); + + } + + public SpikeBreeder(final SpikeBreeder card) { + super(card); + } + + @Override + public SpikeBreeder copy() { + return new SpikeBreeder(this); + } +} + +class SpikeToken extends Token { + + SpikeToken() { + super("Spike", "1/1 green Spike creature token"); + cardType.add(CardType.CREATURE); + color.setGreen(true); + subtype.add("Spike"); + power = new MageInt(1); + toughness = new MageInt(1); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpikeColony.java b/Mage.Sets/src/mage/sets/tempestremastered/SpikeColony.java new file mode 100644 index 0000000000..fcd882c369 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpikeColony.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpikeColony extends mage.sets.stronghold.SpikeColony { + + public SpikeColony(UUID ownerId) { + super(ownerId); + this.cardNumber = 195; + this.expansionSetCode = "TPR"; + } + + public SpikeColony(final SpikeColony card) { + super(card); + } + + @Override + public SpikeColony copy() { + return new SpikeColony(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpikeFeeder.java b/Mage.Sets/src/mage/sets/tempestremastered/SpikeFeeder.java new file mode 100644 index 0000000000..30be0cafe1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpikeFeeder.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SpikeFeeder extends mage.sets.timeshifted.SpikeFeeder { + + public SpikeFeeder(UUID ownerId) { + super(ownerId); + this.cardNumber = 196; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public SpikeFeeder(final SpikeFeeder card) { + super(card); + } + + @Override + public SpikeFeeder copy() { + return new SpikeFeeder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpikeHatcher.java b/Mage.Sets/src/mage/sets/tempestremastered/SpikeHatcher.java new file mode 100644 index 0000000000..77de8e0cb9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpikeHatcher.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SpikeHatcher extends CardImpl { + + public SpikeHatcher(UUID ownerId) { + super(ownerId, 197, "Spike Hatcher", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}{G}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Spike"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Spike Hatcher enters the battlefield with six +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)), "with six +1/+1 counters on it")); + + // {2}, Remove a +1/+1 counter from Spike Hatcher: Put a +1/+1 counter on target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new GenericManaCost(2)); + ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // {1}, Remove a +1/+1 counter from Spike Hatcher: Regenerate Spike Hatcher. + Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new GenericManaCost(1)); + ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); + this.addAbility(ability2); + + } + + public SpikeHatcher(final SpikeHatcher card) { + super(card); + } + + @Override + public SpikeHatcher copy() { + return new SpikeHatcher(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpinalGraft.java b/Mage.Sets/src/mage/sets/tempestremastered/SpinalGraft.java new file mode 100644 index 0000000000..0a01251fab --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpinalGraft.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpinalGraft extends mage.sets.vintagemasters.SpinalGraft { + + public SpinalGraft(UUID ownerId) { + super(ownerId); + this.cardNumber = 119; + this.expansionSetCode = "TPR"; + } + + public SpinalGraft(final SpinalGraft card) { + super(card); + } + + @Override + public SpinalGraft copy() { + return new SpinalGraft(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpinedSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/SpinedSliver.java new file mode 100644 index 0000000000..81fe62f496 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpinedSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpinedSliver extends mage.sets.stronghold.SpinedSliver { + + public SpinedSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 213; + this.expansionSetCode = "TPR"; + } + + public SpinedSliver(final SpinedSliver card) { + super(card); + } + + @Override + public SpinedSliver copy() { + return new SpinedSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpinedWurm.java b/Mage.Sets/src/mage/sets/tempestremastered/SpinedWurm.java new file mode 100644 index 0000000000..f204bb71a1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpinedWurm.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpinedWurm extends mage.sets.tenth.SpinedWurm { + + public SpinedWurm(UUID ownerId) { + super(ownerId); + this.cardNumber = 198; + this.expansionSetCode = "TPR"; + } + + public SpinedWurm(final SpinedWurm card) { + super(card); + } + + @Override + public SpinedWurm copy() { + return new SpinedWurm(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpiritEnKor.java b/Mage.Sets/src/mage/sets/tempestremastered/SpiritEnKor.java new file mode 100644 index 0000000000..e07c177ea7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpiritEnKor.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.tempestremastered; + +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.PreventionEffectData; +import mage.abilities.effects.PreventionEffectImpl; +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.events.DamageEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SpiritEnKor extends CardImpl { + + public SpiritEnKor(UUID ownerId) { + super(ownerId, 34, "Spirit en-Kor", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Kor"); + this.subtype.add("Spirit"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {0}: The next 1 damage that would be dealt to Spirit en-Kor this turn is dealt to target creature you control instead. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SpiritEnKorPreventionEffect(), new GenericManaCost(0)); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public SpiritEnKor(final SpiritEnKor card) { + super(card); + } + + @Override + public SpiritEnKor copy() { + return new SpiritEnKor(this); + } +} + +class SpiritEnKorPreventionEffect extends PreventionEffectImpl { + + SpiritEnKorPreventionEffect() { + super(Duration.EndOfTurn, 1, false); + staticText = "The next 1 damage that would be dealt to {this} this turn is dealt to target creature you control instead."; + } + + SpiritEnKorPreventionEffect(final SpiritEnKorPreventionEffect effect) { + super(effect); + } + + @Override + public SpiritEnKorPreventionEffect copy() { + return new SpiritEnKorPreventionEffect(this); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + PreventionEffectData preventionResult = preventDamageAction(event, source, game); + if (preventionResult.getPreventedDamage() > 0) { + Permanent redirectTo = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (redirectTo != null) { + game.informPlayers("Dealing " + preventionResult.getPreventedDamage() + " to " + redirectTo.getName() + " instead."); + DamageEvent damageEvent = (DamageEvent) event; + redirectTo.damage(preventionResult.getPreventedDamage(), event.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable(), event.getAppliedEffects()); + } + } + return false; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (!this.used && super.applies(event, source, game)) { + if (event.getTargetId().equals(source.getSourceId())) { + return game.getPermanent(getTargetPointer().getFirst(game, source)) != null; + } + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpiritMirror.java b/Mage.Sets/src/mage/sets/tempestremastered/SpiritMirror.java new file mode 100644 index 0000000000..63bda5043f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpiritMirror.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class SpiritMirror extends mage.sets.tempest.SpiritMirror { + + public SpiritMirror(UUID ownerId) { + super(ownerId); + this.cardNumber = 35; + this.expansionSetCode = "TPR"; + } + + public SpiritMirror(final SpiritMirror card) { + super(card); + } + + @Override + public SpiritMirror copy() { + return new SpiritMirror(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SpittingHydra.java b/Mage.Sets/src/mage/sets/tempestremastered/SpittingHydra.java new file mode 100644 index 0000000000..5920740960 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SpittingHydra.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +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 mage.target.common.TargetCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class SpittingHydra extends CardImpl { + + public SpittingHydra(UUID ownerId) { + super(ownerId, 161, "Spitting Hydra", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Hydra"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Spitting Hydra enters the battlefield with four +1/+1 counters on it. + Effect effect = new AddCountersSourceEffect(CounterType.P1P1.createInstance(4)); + effect.setText("with four +1/+1 counters on it"); + this.addAbility(new EntersBattlefieldAbility(effect)); + + // {1}{R}, Remove a +1/+1 counter from Spitting Hydra: Spitting Hydra deals 1 damage to target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{1}{R}")); + ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1))); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public SpittingHydra(final SpittingHydra card) { + super(card); + } + + @Override + public SpittingHydra copy() { + return new SpittingHydra(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/StalkingStones.java b/Mage.Sets/src/mage/sets/tempestremastered/StalkingStones.java new file mode 100644 index 0000000000..7beef6d8a0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/StalkingStones.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StalkingStones extends mage.sets.tempest.StalkingStones { + + public StalkingStones(UUID ownerId) { + super(ownerId); + this.cardNumber = 245; + this.expansionSetCode = "TPR"; + } + + public StalkingStones(final StalkingStones card) { + super(card); + } + + @Override + public StalkingStones copy() { + return new StalkingStones(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/StandingTroops.java b/Mage.Sets/src/mage/sets/tempestremastered/StandingTroops.java new file mode 100644 index 0000000000..8be4953834 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/StandingTroops.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StandingTroops extends mage.sets.eighthedition.StandingTroops { + + public StandingTroops(UUID ownerId) { + super(ownerId); + this.cardNumber = 36; + this.expansionSetCode = "TPR"; + } + + public StandingTroops(final StandingTroops card) { + super(card); + } + + @Override + public StandingTroops copy() { + return new StandingTroops(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/StarkeOfRath.java b/Mage.Sets/src/mage/sets/tempestremastered/StarkeOfRath.java new file mode 100644 index 0000000000..c2f5f47946 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/StarkeOfRath.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class StarkeOfRath extends mage.sets.tempest.StarkeOfRath { + + public StarkeOfRath(UUID ownerId) { + super(ownerId); + this.cardNumber = 162; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public StarkeOfRath(final StarkeOfRath card) { + super(card); + } + + @Override + public StarkeOfRath copy() { + return new StarkeOfRath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/StaunchDefenders.java b/Mage.Sets/src/mage/sets/tempestremastered/StaunchDefenders.java new file mode 100644 index 0000000000..3ca6f557e6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/StaunchDefenders.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class StaunchDefenders extends mage.sets.tempest.StaunchDefenders { + + public StaunchDefenders(UUID ownerId) { + super(ownerId); + this.cardNumber = 37; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public StaunchDefenders(final StaunchDefenders card) { + super(card); + } + + @Override + public StaunchDefenders copy() { + return new StaunchDefenders(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/StrongholdAssassin.java b/Mage.Sets/src/mage/sets/tempestremastered/StrongholdAssassin.java new file mode 100644 index 0000000000..0d5b858f5f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/StrongholdAssassin.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class StrongholdAssassin extends mage.sets.stronghold.StrongholdAssassin { + + public StrongholdAssassin(UUID ownerId) { + super(ownerId); + this.cardNumber = 120; + this.expansionSetCode = "TPR"; + } + + public StrongholdAssassin(final StrongholdAssassin card) { + super(card); + } + + @Override + public StrongholdAssassin copy() { + return new StrongholdAssassin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Stun.java b/Mage.Sets/src/mage/sets/tempestremastered/Stun.java new file mode 100644 index 0000000000..ed2001f493 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Stun.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Stun extends mage.sets.tempest.Stun { + + public Stun(UUID ownerId) { + super(ownerId); + this.cardNumber = 163; + this.expansionSetCode = "TPR"; + } + + public Stun(final Stun card) { + super(card); + } + + @Override + public Stun copy() { + return new Stun(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/SurvivalOfTheFittest.java b/Mage.Sets/src/mage/sets/tempestremastered/SurvivalOfTheFittest.java new file mode 100644 index 0000000000..f50bfe8a80 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/SurvivalOfTheFittest.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class SurvivalOfTheFittest extends mage.sets.exodus.SurvivalOfTheFittest { + + public SurvivalOfTheFittest(UUID ownerId) { + super(ownerId); + this.cardNumber = 199; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public SurvivalOfTheFittest(final SurvivalOfTheFittest card) { + super(card); + } + + @Override + public SurvivalOfTheFittest copy() { + return new SurvivalOfTheFittest(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Swamp1.java b/Mage.Sets/src/mage/sets/tempestremastered/Swamp1.java new file mode 100644 index 0000000000..d44e45678b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp1 extends mage.cards.basiclands.Swamp { + + public Swamp1(UUID ownerId) { + super(ownerId, 258); + this.expansionSetCode = "TPR"; + } + + public Swamp1(final Swamp1 card) { + super(card); + } + + @Override + public Swamp1 copy() { + return new Swamp1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Swamp2.java b/Mage.Sets/src/mage/sets/tempestremastered/Swamp2.java new file mode 100644 index 0000000000..a59a2940bb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp2 extends mage.cards.basiclands.Swamp { + + public Swamp2(UUID ownerId) { + super(ownerId, 259); + this.expansionSetCode = "TPR"; + } + + public Swamp2(final Swamp2 card) { + super(card); + } + + @Override + public Swamp2 copy() { + return new Swamp2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Swamp3.java b/Mage.Sets/src/mage/sets/tempestremastered/Swamp3.java new file mode 100644 index 0000000000..320af4871b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp3 extends mage.cards.basiclands.Swamp { + + public Swamp3(UUID ownerId) { + super(ownerId, 260); + this.expansionSetCode = "TPR"; + } + + public Swamp3(final Swamp3 card) { + super(card); + } + + @Override + public Swamp3 copy() { + return new Swamp3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Swamp4.java b/Mage.Sets/src/mage/sets/tempestremastered/Swamp4.java new file mode 100644 index 0000000000..ec9b6273f0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Swamp4 extends mage.cards.basiclands.Swamp { + + public Swamp4(UUID ownerId) { + super(ownerId, 261); + this.expansionSetCode = "TPR"; + } + + public Swamp4(final Swamp4 card) { + super(card); + } + + @Override + public Swamp4 copy() { + return new Swamp4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Telethopter.java b/Mage.Sets/src/mage/sets/tempestremastered/Telethopter.java new file mode 100644 index 0000000000..210465c8fc --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Telethopter.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Telethopter extends mage.sets.tempest.Telethopter { + + public Telethopter(UUID ownerId) { + super(ownerId); + this.cardNumber = 232; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public Telethopter(final Telethopter card) { + super(card); + } + + @Override + public Telethopter copy() { + return new Telethopter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ThalakosDrifters.java b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosDrifters.java new file mode 100644 index 0000000000..2bbe7a016b --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosDrifters.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class ThalakosDrifters extends CardImpl { + + public ThalakosDrifters(UUID ownerId) { + super(ownerId, 70, "Thalakos Drifters", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Thalakos"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Discard a card: Thalakos Drifters gains shadow until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(ShadowAbility.getInstance(), Duration.EndOfTurn), new DiscardCardCost())); + } + + public ThalakosDrifters(final ThalakosDrifters card) { + super(card); + } + + @Override + public ThalakosDrifters copy() { + return new ThalakosDrifters(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ThalakosLowlands.java b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosLowlands.java new file mode 100644 index 0000000000..74fd6fa7b7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosLowlands.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ThalakosLowlands extends mage.sets.tempest.ThalakosLowlands { + + public ThalakosLowlands(UUID ownerId) { + super(ownerId); + this.cardNumber = 246; + this.expansionSetCode = "TPR"; + } + + public ThalakosLowlands(final ThalakosLowlands card) { + super(card); + } + + @Override + public ThalakosLowlands copy() { + return new ThalakosLowlands(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ThalakosScout.java b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosScout.java new file mode 100644 index 0000000000..77d05f30e5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosScout.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DiscardCardCost; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class ThalakosScout extends CardImpl { + + public ThalakosScout(UUID ownerId) { + super(ownerId, 71, "Thalakos Scout", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Thalakos"); + this.subtype.add("Soldier"); + this.subtype.add("Scout"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + + // Discard a card: Return Thalakos Scout to its owner's hand. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(), new DiscardCardCost())); + } + + public ThalakosScout(final ThalakosScout card) { + super(card); + } + + @Override + public ThalakosScout copy() { + return new ThalakosScout(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ThalakosSeer.java b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosSeer.java new file mode 100644 index 0000000000..27874975b1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ThalakosSeer.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.keyword.ShadowAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ThalakosSeer extends CardImpl { + + public ThalakosSeer(UUID ownerId) { + super(ownerId, 72, "Thalakos Seer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Thalakos"); + this.subtype.add("Wizard"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Shadow + this.addAbility(ShadowAbility.getInstance()); + + // When Thalakos Seer leaves the battlefield, draw a card. + this.addAbility(new LeavesBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false)); + } + + public ThalakosSeer(final ThalakosSeer card) { + super(card); + } + + @Override + public ThalakosSeer copy() { + return new ThalakosSeer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ThopterSquadron.java b/Mage.Sets/src/mage/sets/tempestremastered/ThopterSquadron.java new file mode 100644 index 0000000000..5950114afb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ThopterSquadron.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ThopterSquadron extends mage.sets.vintagemasters.ThopterSquadron { + + public ThopterSquadron(UUID ownerId) { + super(ownerId); + this.cardNumber = 233; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public ThopterSquadron(final ThopterSquadron card) { + super(card); + } + + @Override + public ThopterSquadron copy() { + return new ThopterSquadron(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/ThrullSurgeon.java b/Mage.Sets/src/mage/sets/tempestremastered/ThrullSurgeon.java new file mode 100644 index 0000000000..45cad17511 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/ThrullSurgeon.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class ThrullSurgeon extends mage.sets.tenth.ThrullSurgeon { + + public ThrullSurgeon(UUID ownerId) { + super(ownerId); + this.cardNumber = 121; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public ThrullSurgeon(final ThrullSurgeon card) { + super(card); + } + + @Override + public ThrullSurgeon copy() { + return new ThrullSurgeon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/TimeEbb.java b/Mage.Sets/src/mage/sets/tempestremastered/TimeEbb.java new file mode 100644 index 0000000000..aca26e256e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/TimeEbb.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TimeEbb extends mage.sets.tempest.TimeEbb { + + public TimeEbb(UUID ownerId) { + super(ownerId); + this.cardNumber = 73; + this.expansionSetCode = "TPR"; + } + + public TimeEbb(final TimeEbb card) { + super(card); + } + + @Override + public TimeEbb copy() { + return new TimeEbb(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/TimeWarp.java b/Mage.Sets/src/mage/sets/tempestremastered/TimeWarp.java new file mode 100644 index 0000000000..8f4267ab51 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/TimeWarp.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TimeWarp extends mage.sets.magic2010.TimeWarp { + + public TimeWarp(UUID ownerId) { + super(ownerId); + this.cardNumber = 74; + this.expansionSetCode = "TPR"; + } + + public TimeWarp(final TimeWarp card) { + super(card); + } + + @Override + public TimeWarp copy() { + return new TimeWarp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/TradewindRider.java b/Mage.Sets/src/mage/sets/tempestremastered/TradewindRider.java new file mode 100644 index 0000000000..9f415a4ba4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/TradewindRider.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TradewindRider extends mage.sets.tempest.TradewindRider { + + public TradewindRider(UUID ownerId) { + super(ownerId); + this.cardNumber = 75; + this.expansionSetCode = "TPR"; + } + + public TradewindRider(final TradewindRider card) { + super(card); + } + + @Override + public TradewindRider copy() { + return new TradewindRider(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/TrainedArmodon.java b/Mage.Sets/src/mage/sets/tempestremastered/TrainedArmodon.java new file mode 100644 index 0000000000..eb2df01684 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/TrainedArmodon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class TrainedArmodon extends mage.sets.tempest.TrainedArmodon { + + public TrainedArmodon(UUID ownerId) { + super(ownerId); + this.cardNumber = 200; + this.expansionSetCode = "TPR"; + } + + public TrainedArmodon(final TrainedArmodon card) { + super(card); + } + + @Override + public TrainedArmodon copy() { + return new TrainedArmodon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Tranquility.java b/Mage.Sets/src/mage/sets/tempestremastered/Tranquility.java new file mode 100644 index 0000000000..be0636766e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Tranquility.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Tranquility extends mage.sets.tempest.Tranquility { + + public Tranquility(UUID ownerId) { + super(ownerId); + this.cardNumber = 201; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public Tranquility(final Tranquility card) { + super(card); + } + + @Override + public Tranquility copy() { + return new Tranquility(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Twitch.java b/Mage.Sets/src/mage/sets/tempestremastered/Twitch.java new file mode 100644 index 0000000000..3481ada592 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Twitch.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class Twitch extends mage.sets.worldwake.Twitch { + + public Twitch(UUID ownerId) { + super(ownerId); + this.cardNumber = 76; + this.expansionSetCode = "TPR"; + } + + public Twitch(final Twitch card) { + super(card); + } + + @Override + public Twitch copy() { + return new Twitch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VampireHounds.java b/Mage.Sets/src/mage/sets/tempestremastered/VampireHounds.java new file mode 100644 index 0000000000..3fa4bf94fb --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VampireHounds.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VampireHounds extends mage.sets.exodus.VampireHounds { + + public VampireHounds(UUID ownerId) { + super(ownerId); + this.cardNumber = 122; + this.expansionSetCode = "TPR"; + } + + public VampireHounds(final VampireHounds card) { + super(card); + } + + @Override + public VampireHounds copy() { + return new VampireHounds(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VecTownships.java b/Mage.Sets/src/mage/sets/tempestremastered/VecTownships.java new file mode 100644 index 0000000000..fe5d000582 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VecTownships.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VecTownships extends mage.sets.tempest.VecTownships { + + public VecTownships(UUID ownerId) { + super(ownerId); + this.cardNumber = 247; + this.expansionSetCode = "TPR"; + } + + public VecTownships(final VecTownships card) { + super(card); + } + + @Override + public VecTownships copy() { + return new VecTownships(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VerdantForce.java b/Mage.Sets/src/mage/sets/tempestremastered/VerdantForce.java new file mode 100644 index 0000000000..3c03986a89 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VerdantForce extends mage.sets.tempest.VerdantForce { + + public VerdantForce(UUID ownerId) { + super(ownerId); + this.cardNumber = 202; + this.expansionSetCode = "TPR"; + } + + public VerdantForce(final VerdantForce card) { + super(card); + } + + @Override + public VerdantForce copy() { + return new VerdantForce(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VerdantTouch.java b/Mage.Sets/src/mage/sets/tempestremastered/VerdantTouch.java new file mode 100644 index 0000000000..1dbe15947f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VerdantTouch.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; +import mage.abilities.keyword.BuybackAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.game.permanent.token.Token; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author fireshoes + */ +public class VerdantTouch extends CardImpl { + + public VerdantTouch(UUID ownerId) { + super(ownerId, 203, "Verdant Touch", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{G}"); + this.expansionSetCode = "TPR"; + + // Buyback {3} + this.addAbility(new BuybackAbility("{3}")); + + // Target land becomes a 2/2 creature that's still a land. + this.getSpellAbility().addEffect(new BecomesCreatureTargetEffect(new VerdantTouchLandToken(), false, true, Duration.Custom)); + this.getSpellAbility().addTarget(new TargetLandPermanent()); + } + + public VerdantTouch(final VerdantTouch card) { + super(card); + } + + @Override + public VerdantTouch copy() { + return new VerdantTouch(this); + } +} + +class VerdantTouchLandToken extends Token { + + public VerdantTouchLandToken() { + super("", "2/2 creature"); + this.cardType.add(CardType.CREATURE); + + this.power = new MageInt(2); + this.toughness = new MageInt(2); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Verdigris.java b/Mage.Sets/src/mage/sets/tempestremastered/Verdigris.java new file mode 100644 index 0000000000..3be4194c51 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Verdigris.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Verdigris extends mage.sets.tempest.Verdigris { + + public Verdigris(UUID ownerId) { + super(ownerId); + this.cardNumber = 204; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public Verdigris(final Verdigris card) { + super(card); + } + + @Override + public Verdigris copy() { + return new Verdigris(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VhatiIlDal.java b/Mage.Sets/src/mage/sets/tempestremastered/VhatiIlDal.java new file mode 100644 index 0000000000..59f3a8121f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VhatiIlDal.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class VhatiIlDal extends mage.sets.tempest.VhatiIlDal { + + public VhatiIlDal(UUID ownerId) { + super(ownerId); + this.cardNumber = 214; + this.expansionSetCode = "TPR"; + } + + public VhatiIlDal(final VhatiIlDal card) { + super(card); + } + + @Override + public VhatiIlDal copy() { + return new VhatiIlDal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VictualSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/VictualSliver.java new file mode 100644 index 0000000000..e2cceb1bc3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VictualSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class VictualSliver extends mage.sets.stronghold.VictualSliver { + + public VictualSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 215; + this.expansionSetCode = "TPR"; + } + + public VictualSliver(final VictualSliver card) { + super(card); + } + + @Override + public VictualSliver copy() { + return new VictualSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VolrathsCurse.java b/Mage.Sets/src/mage/sets/tempestremastered/VolrathsCurse.java new file mode 100644 index 0000000000..2bec332c46 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VolrathsCurse.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class VolrathsCurse extends mage.sets.tempest.VolrathsCurse { + + public VolrathsCurse(UUID ownerId) { + super(ownerId); + this.cardNumber = 77; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.UNCOMMON; + } + + public VolrathsCurse(final VolrathsCurse card) { + super(card); + } + + @Override + public VolrathsCurse copy() { + return new VolrathsCurse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VolrathsLaboratory.java b/Mage.Sets/src/mage/sets/tempestremastered/VolrathsLaboratory.java new file mode 100644 index 0000000000..10b1208bbe --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VolrathsLaboratory.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ChooseColorEffect; +import mage.abilities.effects.common.ChooseCreatureTypeEffect; +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.Token; + +/** + * + * @author emerald000 + */ +public class VolrathsLaboratory extends CardImpl { + + public VolrathsLaboratory(UUID ownerId) { + super(ownerId, 234, "Volrath's Laboratory", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{5}"); + this.expansionSetCode = "TPR"; + + // As Volrath's Laboratory enters the battlefield, choose a color and a creature type. + Ability ability = new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral), null, true, "As Volrath's Laboratory enters the battlefield, choose a color and a creature type.", ""); + ability.addEffect(new ChooseCreatureTypeEffect(Outcome.Neutral)); + this.addAbility(ability); + + // {5}, {T}: Put a 2/2 creature token of the chosen color and type onto the battlefield. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new VolrathsLaboratoryEffect(), new GenericManaCost(5)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public VolrathsLaboratory(final VolrathsLaboratory card) { + super(card); + } + + @Override + public VolrathsLaboratory copy() { + return new VolrathsLaboratory(this); + } +} + +class VolrathsLaboratoryEffect extends OneShotEffect { + + VolrathsLaboratoryEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "Put a 2/2 creature token of the chosen color and type onto the battlefield"; + } + + VolrathsLaboratoryEffect(final VolrathsLaboratoryEffect effect) { + super(effect); + } + + @Override + public VolrathsLaboratoryEffect copy() { + return new VolrathsLaboratoryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + ObjectColor color = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); + String type = (String) game.getState().getValue(source.getSourceId() + "_type"); + Token token = new VolrathsLaboratoryToken(color, type); + return token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); + } +} + +class VolrathsLaboratoryToken extends Token { + + VolrathsLaboratoryToken(ObjectColor color, String type) { + super(type, "2/2 creature token of the chosen color and type"); + cardType.add(CardType.CREATURE); + if (color != null) { + this.color.setColor(color); + } + if (type != null) { + subtype.add(type); + } + power = new MageInt(2); + toughness = new MageInt(2); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/VolrathsStronghold.java b/Mage.Sets/src/mage/sets/tempestremastered/VolrathsStronghold.java new file mode 100644 index 0000000000..02f2ba8336 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/VolrathsStronghold.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class VolrathsStronghold extends mage.sets.stronghold.VolrathsStronghold { + + public VolrathsStronghold(UUID ownerId) { + super(ownerId); + this.cardNumber = 248; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.MYTHIC; + } + + public VolrathsStronghold(final VolrathsStronghold card) { + super(card); + } + + @Override + public VolrathsStronghold copy() { + return new VolrathsStronghold(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WallOfBlossoms.java b/Mage.Sets/src/mage/sets/tempestremastered/WallOfBlossoms.java new file mode 100644 index 0000000000..68ba56f2ec --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/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.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WallOfBlossoms extends mage.sets.stronghold.WallOfBlossoms { + + public WallOfBlossoms(UUID ownerId) { + super(ownerId); + this.cardNumber = 205; + this.expansionSetCode = "TPR"; + } + + public WallOfBlossoms(final WallOfBlossoms card) { + super(card); + } + + @Override + public WallOfBlossoms copy() { + return new WallOfBlossoms(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WallOfDiffusion.java b/Mage.Sets/src/mage/sets/tempestremastered/WallOfDiffusion.java new file mode 100644 index 0000000000..da90a2ac8e --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WallOfDiffusion.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WallOfDiffusion extends mage.sets.tempest.WallOfDiffusion { + + public WallOfDiffusion(UUID ownerId) { + super(ownerId); + this.cardNumber = 164; + this.expansionSetCode = "TPR"; + } + + public WallOfDiffusion(final WallOfDiffusion card) { + super(card); + } + + @Override + public WallOfDiffusion copy() { + return new WallOfDiffusion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WallOfEssence.java b/Mage.Sets/src/mage/sets/tempestremastered/WallOfEssence.java new file mode 100644 index 0000000000..89e85d9845 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WallOfEssence.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WallOfEssence extends mage.sets.stronghold.WallOfEssence { + + public WallOfEssence(UUID ownerId) { + super(ownerId); + this.cardNumber = 38; + this.expansionSetCode = "TPR"; + } + + public WallOfEssence(final WallOfEssence card) { + super(card); + } + + @Override + public WallOfEssence copy() { + return new WallOfEssence(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WallOfSouls.java b/Mage.Sets/src/mage/sets/tempestremastered/WallOfSouls.java new file mode 100644 index 0000000000..903774db9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WallOfSouls.java @@ -0,0 +1,138 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.DefenderAbility; +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.DamagedCreatureEvent; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author fireshoes + */ +public class WallOfSouls extends CardImpl { + + public WallOfSouls(UUID ownerId) { + super(ownerId, 123, "Wall of Souls", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Wall"); + this.power = new MageInt(0); + this.toughness = new MageInt(4); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // Whenever Wall of Souls is dealt combat damage, it deals that much damage to target opponent. + Ability ability = new WallOfSoulsTriggeredAbility(); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + public WallOfSouls(final WallOfSouls card) { + super(card); + } + + @Override + public WallOfSouls copy() { + return new WallOfSouls(this); + } +} + +class WallOfSoulsTriggeredAbility extends TriggeredAbilityImpl { + + public WallOfSoulsTriggeredAbility() { + super(Zone.BATTLEFIELD, new WallOfSoulsDealDamageEffect()); + } + + public WallOfSoulsTriggeredAbility(final WallOfSoulsTriggeredAbility effect) { + super(effect); + } + + @Override + public WallOfSoulsTriggeredAbility copy() { + return new WallOfSoulsTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.DAMAGED_CREATURE && event.getTargetId().equals(this.sourceId) + && ((DamagedCreatureEvent)event).isCombatDamage() ) { + this.getEffects().get(0).setValue("damage", event.getAmount()); + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} is dealt combat damage, " + super.getRule(); + } +} + +class WallOfSoulsDealDamageEffect extends OneShotEffect { + + public WallOfSoulsDealDamageEffect() { + super(Outcome.Damage); + this.staticText = "it deals that much damage to target opponent"; + } + + public WallOfSoulsDealDamageEffect(final WallOfSoulsDealDamageEffect effect) { + super(effect); + } + + @Override + public WallOfSoulsDealDamageEffect copy() { + return new WallOfSoulsDealDamageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int amount = (Integer) getValue("damage"); + if (amount > 0) { + Player targetOpponent = game.getPlayer(source.getTargets().getFirstTarget()); + if (targetOpponent != null) { + targetOpponent.damage(amount, source.getSourceId(), game, false, true); + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WarriorEnKor.java b/Mage.Sets/src/mage/sets/tempestremastered/WarriorEnKor.java new file mode 100644 index 0000000000..4d991b1b1f --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WarriorEnKor.java @@ -0,0 +1,118 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +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.PreventionEffectData; +import mage.abilities.effects.PreventionEffectImpl; +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.DamageEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author fireshoes + */ +public class WarriorEnKor extends CardImpl { + + public WarriorEnKor(UUID ownerId) { + super(ownerId, 39, "Warrior en-Kor", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}{W}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Kor"); + this.subtype.add("Warrior"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // {0}: The next 1 damage that would be dealt to Warrior en-Kor this turn is dealt to target creature you control instead. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new WarriorEnKorPreventionEffect(), new GenericManaCost(0)); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + public WarriorEnKor(final WarriorEnKor card) { + super(card); + } + + @Override + public WarriorEnKor copy() { + return new WarriorEnKor(this); + } +} + +class WarriorEnKorPreventionEffect extends PreventionEffectImpl { + + WarriorEnKorPreventionEffect() { + super(Duration.EndOfTurn, 1, false); + staticText = "The next 1 damage that would be dealt to {this} this turn is dealt to target creature you control instead."; + } + + WarriorEnKorPreventionEffect(final WarriorEnKorPreventionEffect effect) { + super(effect); + } + + @Override + public WarriorEnKorPreventionEffect copy() { + return new WarriorEnKorPreventionEffect(this); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + PreventionEffectData preventionResult = preventDamageAction(event, source, game); + if (preventionResult.getPreventedDamage() > 0) { + Permanent redirectTo = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (redirectTo != null) { + game.informPlayers("Dealing " + preventionResult.getPreventedDamage() + " to " + redirectTo.getName() + " instead."); + DamageEvent damageEvent = (DamageEvent) event; + redirectTo.damage(preventionResult.getPreventedDamage(), event.getSourceId(), game, damageEvent.isCombatDamage(), damageEvent.isPreventable(), event.getAppliedEffects()); + } + } + return false; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (!this.used && super.applies(event, source, game)) { + if (event.getTargetId().equals(source.getSourceId())) { + return game.getPermanent(getTargetPointer().getFirst(game, source)) != null; + } + } + return false; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Wasteland.java b/Mage.Sets/src/mage/sets/tempestremastered/Wasteland.java new file mode 100644 index 0000000000..c64ba71458 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/Wasteland.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class Wasteland extends mage.sets.tempest.Wasteland { + + public Wasteland(UUID ownerId) { + super(ownerId); + this.cardNumber = 249; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.RARE; + } + + public Wasteland(final Wasteland card) { + super(card); + } + + @Override + public Wasteland copy() { + return new Wasteland(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WaywardSoul.java b/Mage.Sets/src/mage/sets/tempestremastered/WaywardSoul.java new file mode 100644 index 0000000000..f67ce4f563 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WaywardSoul.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.tempestremastered; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.PutOnLibrarySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author fireshoes + */ +public class WaywardSoul extends CardImpl { + + public WaywardSoul(UUID ownerId) { + super(ownerId, 78, "Wayward Soul", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); + this.expansionSetCode = "TPR"; + this.subtype.add("Spirit"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {U}: Put Wayward Soul on top of its owner's library. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutOnLibrarySourceEffect(true), new ManaCostsImpl("{U}"))); + } + + public WaywardSoul(final WaywardSoul card) { + super(card); + } + + @Override + public WaywardSoul copy() { + return new WaywardSoul(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WhispersOfTheMuse.java b/Mage.Sets/src/mage/sets/tempestremastered/WhispersOfTheMuse.java new file mode 100644 index 0000000000..d315cc5fde --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WhispersOfTheMuse.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.tempestremastered; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class WhispersOfTheMuse extends mage.sets.tempest.WhispersOfTheMuse { + + public WhispersOfTheMuse(UUID ownerId) { + super(ownerId); + this.cardNumber = 79; + this.expansionSetCode = "TPR"; + this.rarity = Rarity.COMMON; + } + + public WhispersOfTheMuse(final WhispersOfTheMuse card) { + super(card); + } + + @Override + public WhispersOfTheMuse copy() { + return new WhispersOfTheMuse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WindDancer.java b/Mage.Sets/src/mage/sets/tempestremastered/WindDancer.java new file mode 100644 index 0000000000..4ec67a43d8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WindDancer.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WindDancer extends mage.sets.tempest.WindDancer { + + public WindDancer(UUID ownerId) { + super(ownerId); + this.cardNumber = 80; + this.expansionSetCode = "TPR"; + } + + public WindDancer(final WindDancer card) { + super(card); + } + + @Override + public WindDancer copy() { + return new WindDancer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WindDrake.java b/Mage.Sets/src/mage/sets/tempestremastered/WindDrake.java new file mode 100644 index 0000000000..2b59ad6dd7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WindDrake.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WindDrake extends mage.sets.magic2010.WindDrake { + + public WindDrake(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + this.expansionSetCode = "TPR"; + } + + public WindDrake(final WindDrake card) { + super(card); + } + + @Override + public WindDrake copy() { + return new WindDrake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WindsOfRath.java b/Mage.Sets/src/mage/sets/tempestremastered/WindsOfRath.java new file mode 100644 index 0000000000..62dee5a6ac --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WindsOfRath.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WindsOfRath extends mage.sets.heroesvsmonsters.WindsOfRath { + + public WindsOfRath(UUID ownerId) { + super(ownerId); + this.cardNumber = 40; + this.expansionSetCode = "TPR"; + } + + public WindsOfRath(final WindsOfRath card) { + super(card); + } + + @Override + public WindsOfRath copy() { + return new WindsOfRath(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WingedSliver.java b/Mage.Sets/src/mage/sets/tempestremastered/WingedSliver.java new file mode 100644 index 0000000000..5d39e4ce55 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WingedSliver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class WingedSliver extends mage.sets.tempest.WingedSliver { + + public WingedSliver(UUID ownerId) { + super(ownerId); + this.cardNumber = 82; + this.expansionSetCode = "TPR"; + } + + public WingedSliver(final WingedSliver card) { + super(card); + } + + @Override + public WingedSliver copy() { + return new WingedSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/WoodSage.java b/Mage.Sets/src/mage/sets/tempestremastered/WoodSage.java new file mode 100644 index 0000000000..b2493f5bff --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/WoodSage.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class WoodSage extends mage.sets.tempest.WoodSage { + + public WoodSage(UUID ownerId) { + super(ownerId); + this.cardNumber = 216; + this.expansionSetCode = "TPR"; + } + + public WoodSage(final WoodSage card) { + super(card); + } + + @Override + public WoodSage copy() { + return new WoodSage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempestremastered/YouthfulKnight.java b/Mage.Sets/src/mage/sets/tempestremastered/YouthfulKnight.java new file mode 100644 index 0000000000..bd469de9da --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempestremastered/YouthfulKnight.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.tempestremastered; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class YouthfulKnight extends mage.sets.tenth.YouthfulKnight { + + public YouthfulKnight(UUID ownerId) { + super(ownerId); + this.cardNumber = 41; + this.expansionSetCode = "TPR"; + } + + public YouthfulKnight(final YouthfulKnight card) { + super(card); + } + + @Override + public YouthfulKnight copy() { + return new YouthfulKnight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java b/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java index ba2cf19c67..3954abf1fa 100644 --- a/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java +++ b/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java @@ -93,14 +93,17 @@ class CantCounterEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.COUNTER) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { - return true; - } + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/tenth/WindbornMuse.java b/Mage.Sets/src/mage/sets/tenth/WindbornMuse.java index 97a9264059..2b96f6d07c 100644 --- a/Mage.Sets/src/mage/sets/tenth/WindbornMuse.java +++ b/Mage.Sets/src/mage/sets/tenth/WindbornMuse.java @@ -51,7 +51,6 @@ public class WindbornMuse extends CardImpl { super(ownerId, 60, "Windborn Muse", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.expansionSetCode = "10E"; this.subtype.add("Spirit"); - this.color.setWhite(true); this.power = new MageInt(2); this.toughness = new MageInt(3); @@ -86,32 +85,13 @@ class WindbornMuseReplacementEffect extends ReplacementEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - throw new UnsupportedOperationException("Not supported."); + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER) { - Player player = game.getPlayer(event.getPlayerId()); - if ( player != null && event.getTargetId().equals(source.getControllerId())) { - ManaCostsImpl attackTax = new ManaCostsImpl("{2}"); - if ( attackTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) && - player.chooseUse(Outcome.Benefit, "Pay {2} to attack player?", game) ) - { - if (attackTax.payOrRollback(source, game, this.getId(), event.getPlayerId())) { - return false; - } - } - } - return true; - } - return false; - } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER && event.getTargetId().equals(source.getControllerId()) ) { + if (event.getTargetId().equals(source.getControllerId()) ) { Player attackedPlayer = game.getPlayer(event.getTargetId()); if (attackedPlayer != null) { // only if a player is attacked. Attacking a planeswalker is free @@ -120,6 +100,23 @@ class WindbornMuseReplacementEffect extends ReplacementEffectImpl { } return false; } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + if ( player != null && event.getTargetId().equals(source.getControllerId())) { + ManaCostsImpl attackTax = new ManaCostsImpl("{2}"); + if ( attackTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) && + player.chooseUse(Outcome.Benefit, "Pay {2} to attack player?", game) ) + { + if (attackTax.payOrRollback(source, game, this.getId(), event.getPlayerId())) { + return false; + } + } + return true; + } + return false; + } @Override public WindbornMuseReplacementEffect copy() { diff --git a/Mage.Sets/src/mage/sets/thedark/FireDrake.java b/Mage.Sets/src/mage/sets/thedark/FireDrake.java new file mode 100644 index 0000000000..ace3c06b5b --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/FireDrake.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 jeffwadsworth + */ +public class FireDrake extends mage.sets.fifthedition.FireDrake { + + public FireDrake(UUID ownerId) { + super(ownerId); + this.cardNumber = 61; + this.expansionSetCode = "DRK"; + } + + public FireDrake(final FireDrake card) { + super(card); + } + + @Override + public FireDrake copy() { + return new FireDrake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/thedark/Venom.java b/Mage.Sets/src/mage/sets/thedark/Venom.java index 316dceafcd..eb2c763a83 100644 --- a/Mage.Sets/src/mage/sets/thedark/Venom.java +++ b/Mage.Sets/src/mage/sets/thedark/Venom.java @@ -144,7 +144,7 @@ class VenomEffect extends OneShotEffect { AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/theros/AshiokNightmareWeaver.java b/Mage.Sets/src/mage/sets/theros/AshiokNightmareWeaver.java index cf8ebdd665..8fb027f894 100644 --- a/Mage.Sets/src/mage/sets/theros/AshiokNightmareWeaver.java +++ b/Mage.Sets/src/mage/sets/theros/AshiokNightmareWeaver.java @@ -128,7 +128,7 @@ class AshiokNightmareWeaverExileEffect extends OneShotEffect { for (int i = 0; i < 3; i++) { Card card = opponent.getLibrary().getFromTop(game); if (card != null) { - controller.moveCardToExileWithInfo(card, exileZone, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, exileZone, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); } } return true; @@ -265,7 +265,7 @@ class AshiokNightmareWeaverExileAllEffect extends OneShotEffect { if (sourceObject == null || controller == null) { return false; } - UUID exileId = CardUtil.getObjectExileZoneId(game, sourceObject); + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); if (exileId == null) { return false; } @@ -277,7 +277,7 @@ class AshiokNightmareWeaverExileAllEffect extends OneShotEffect { for (UUID cardId : cards) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.HAND, true); } } cards.clear(); @@ -285,7 +285,7 @@ class AshiokNightmareWeaverExileAllEffect extends OneShotEffect { for (UUID cardId :cards) { Card card = game.getCard(cardId); if (card != null) { - controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.GRAVEYARD, true); } } } diff --git a/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java b/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java index d52ae4a502..ee392a9f08 100644 --- a/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java +++ b/Mage.Sets/src/mage/sets/theros/DaxosOfMeletis.java @@ -121,7 +121,7 @@ class DaxosOfMeletisEffect extends OneShotEffect { Card card = damagedPlayer.getLibrary().getFromTop(game); if (card != null) { // move card to exile - controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); // player gains life int cmc = card.getManaCost().convertedManaCost(); if (cmc > 0) { diff --git a/Mage.Sets/src/mage/sets/theros/GiftOfImmortality.java b/Mage.Sets/src/mage/sets/theros/GiftOfImmortality.java index 7e99744ca4..29fab265fd 100644 --- a/Mage.Sets/src/mage/sets/theros/GiftOfImmortality.java +++ b/Mage.Sets/src/mage/sets/theros/GiftOfImmortality.java @@ -113,7 +113,7 @@ class GiftOfImmortalityEffect extends OneShotEffect { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; diff --git a/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java b/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java index d8b1e53392..c3e4c49f73 100644 --- a/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java +++ b/Mage.Sets/src/mage/sets/theros/PsychicIntrusion.java @@ -137,7 +137,7 @@ class PsychicIntrusionExileEffect extends OneShotEffect { if (card != null) { // move card to exile UUID exileId = CardUtil.getCardExileZoneId(game, source); - controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, fromHand ? Zone.HAND:Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, exileId, sourceObject.getLogName(), source.getSourceId(), game, fromHand ? Zone.HAND:Zone.GRAVEYARD, true); // allow to cast the card ContinuousEffect effect = new PsychicIntrusionCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); diff --git a/Mage.Sets/src/mage/sets/theros/PyxisOfPandemonium.java b/Mage.Sets/src/mage/sets/theros/PyxisOfPandemonium.java index 1daa693699..df79ac0ef3 100644 --- a/Mage.Sets/src/mage/sets/theros/PyxisOfPandemonium.java +++ b/Mage.Sets/src/mage/sets/theros/PyxisOfPandemonium.java @@ -115,7 +115,7 @@ class PyxisOfPandemoniumExileEffect extends OneShotEffect { if (player != null) { if (player.getLibrary().size() > 0) { Card card = player.getLibrary().getFromTop(game); - String exileKey = playerId.toString() + CardUtil.getObjectExileZoneId(game, sourceObject).toString(); + String exileKey = playerId.toString() + CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()).toString(); UUID exileId = exileIds.get(exileKey); if (exileId == null) { exileId = UUID.randomUUID(); @@ -123,7 +123,7 @@ class PyxisOfPandemoniumExileEffect extends OneShotEffect { } player.moveCardToExileWithInfo(card, exileId, new StringBuilder(sourceObject.getLogName() +" (").append(player.getName()).append(")").toString(), - source.getSourceId(), game, Zone.LIBRARY); + source.getSourceId(), game, Zone.LIBRARY, true); card.setFaceDown(true, game); } } @@ -167,7 +167,7 @@ class PyxisOfPandemoniumPutOntoBattlefieldEffect extends OneShotEffect { for (UUID playerId : controller.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - String exileKey = playerId.toString() + CardUtil.getObjectExileZoneId(game, sourceObject).toString(); + String exileKey = playerId.toString() + CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()).toString(); UUID exileId = exileIds.get(exileKey); if (exileId != null) { ExileZone exileZone = game.getState().getExile().getExileZone(exileId); diff --git a/Mage.Sets/src/mage/sets/theros/RescueFromTheUnderworld.java b/Mage.Sets/src/mage/sets/theros/RescueFromTheUnderworld.java index 1e50ea9d0c..3640058e17 100644 --- a/Mage.Sets/src/mage/sets/theros/RescueFromTheUnderworld.java +++ b/Mage.Sets/src/mage/sets/theros/RescueFromTheUnderworld.java @@ -146,7 +146,7 @@ class RescueFromTheUnderworldCreateDelayedTriggeredAbilityEffect extends OneShot DelayedTriggeredAbility delayedAbility = (DelayedTriggeredAbility) ability.copy(); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getTargets().addAll(source.getTargets()); for(Effect effect : delayedAbility.getEffects()) { effect.getTargetPointer().init(game, source); diff --git a/Mage.Sets/src/mage/sets/theros/TritonTactics.java b/Mage.Sets/src/mage/sets/theros/TritonTactics.java index 1c8f775f7b..4abfcddef9 100644 --- a/Mage.Sets/src/mage/sets/theros/TritonTactics.java +++ b/Mage.Sets/src/mage/sets/theros/TritonTactics.java @@ -65,8 +65,6 @@ public class TritonTactics extends CardImpl { super(ownerId, 71, "Triton Tactics", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}"); this.expansionSetCode = "THS"; - this.color.setBlue(true); - // Up to two target creatures each get +0/+3 until end of turn. Untap those creatures. // At this turn's next end of combat, tap each creature that was blocked by one of those // creatures this turn and it doesn't untap during its controller's next untap step. @@ -127,7 +125,7 @@ class TritonTacticsUntapTargetEffect extends OneShotEffect { } else { targetMap = new HashMap<>(); } - targetMap.put(new Integer(game.getCard(source.getSourceId()).getZoneChangeCounter(game)), targets); + targetMap.put(game.getCard(source.getSourceId()).getZoneChangeCounter(game), targets); if (object == null) { game.getState().setValue("targets" + source.getSourceId().toString(), targetMap); } diff --git a/Mage.Sets/src/mage/sets/theros/UnderworldCerberus.java b/Mage.Sets/src/mage/sets/theros/UnderworldCerberus.java index 9e50047530..4d43827ea8 100644 --- a/Mage.Sets/src/mage/sets/theros/UnderworldCerberus.java +++ b/Mage.Sets/src/mage/sets/theros/UnderworldCerberus.java @@ -59,15 +59,15 @@ public class UnderworldCerberus extends CardImpl { this.expansionSetCode = "THS"; this.subtype.add("Hound"); - this.color.setRed(true); - this.color.setBlack(true); this.power = new MageInt(6); this.toughness = new MageInt(6); // Underworld Cerberus can't be blocked except by three or more creatures. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(3))); + // Cards in graveyards can't be the targets of spells or abilities. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnderworldCerberusEffect())); + // When Underworld Cerberus dies, exile it and each player returns all creature cards from his or her graveyard to his or her hand. Ability ability = new DiesTriggeredAbility(new ExileSourceEffect()); ability.addEffect(new ReturnToHandFromGraveyardAllEffect(new FilterCreatureCard("creature cards"))); @@ -113,10 +113,10 @@ class UnderworldCerberusEffect extends ContinuousRuleModifyingEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { Card targetCard = game.getCard(event.getTargetId()); - StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId()); + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); if (targetCard != null && stackObject != null) { Zone zone = game.getState().getZone(targetCard.getId()); - if (zone != null && (zone == Zone.GRAVEYARD)) { + if (zone != null && zone == Zone.GRAVEYARD) { return true; } } diff --git a/Mage.Sets/src/mage/sets/theros/WhipOfErebos.java b/Mage.Sets/src/mage/sets/theros/WhipOfErebos.java index 97b1633f23..86126a1e40 100644 --- a/Mage.Sets/src/mage/sets/theros/WhipOfErebos.java +++ b/Mage.Sets/src/mage/sets/theros/WhipOfErebos.java @@ -127,7 +127,7 @@ class WhipOfErebosEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } return true; @@ -157,7 +157,7 @@ class WhipOfErebosReplacementEffect extends ReplacementEffectImpl { Card card = game.getCard(source.getFirstTarget()); Player controller = game.getPlayer(source.getControllerId()); if (card != null && controller != null) { - controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); } return true; } diff --git a/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java b/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java index db88c28554..a709607a8a 100644 --- a/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java +++ b/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java @@ -117,7 +117,7 @@ class GrinningTotemSearchAndExileEffect extends OneShotEffect { if (you.searchLibrary(targetCard, game, targetOpponent.getId())) { Card card = targetOpponent.getLibrary().remove(targetCard.getFirstTarget(), game); if (card != null) { - you.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourcObject != null ? sourcObject.getName() : "", source.getSourceId(), game, Zone.LIBRARY); + you.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourcObject != null ? sourcObject.getName() : "", source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new GrinningTotemMayPlayEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/timeshifted/KoboldTaskmaster.java b/Mage.Sets/src/mage/sets/timeshifted/KoboldTaskmaster.java new file mode 100644 index 0000000000..b17faac9d4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timeshifted/KoboldTaskmaster.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.timeshifted; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +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.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; + +/** + * + * @author jeffwadsworth + */ +public class KoboldTaskmaster extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Other Kobold creatures you control"); + + static { + filter.add(new ControllerPredicate(TargetController.YOU)); + filter.add(new SubtypePredicate("Kobold")); + } + + public KoboldTaskmaster(UUID ownerId) { + super(ownerId, 65, "Kobold Taskmaster", Rarity.SPECIAL, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "TSB"; + this.subtype.add("Kobold"); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // Other Kobold creatures you control get +1/+0. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 0, Duration.WhileOnBattlefield, filter, true))); + + } + + public KoboldTaskmaster(final KoboldTaskmaster card) { + super(card); + } + + @Override + public KoboldTaskmaster copy() { + return new KoboldTaskmaster(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timeshifted/Pandemonium.java b/Mage.Sets/src/mage/sets/timeshifted/Pandemonium.java new file mode 100644 index 0000000000..588ee3e077 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timeshifted/Pandemonium.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.timeshifted; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +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.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author LevelX2 + */ +public class Pandemonium extends CardImpl { + + public Pandemonium(UUID ownerId) { + super(ownerId, 68, "Pandemonium", Rarity.SPECIAL, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); + this.expansionSetCode = "TSB"; + + // Whenever a creature enters the battlefield, that creature's controller may have it deal damage equal to its power to target creature or player of his or her choice. + Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PandemoniumEffect(), new FilterCreaturePermanent(), false, SetTargetPointer.PERMANENT, ""); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public Pandemonium(final Pandemonium card) { + super(card); + } + + @Override + public void adjustTargets(Ability ability, Game game) { + if (ability instanceof EntersBattlefieldAllTriggeredAbility) { + UUID creatureId = ability.getEffects().get(0).getTargetPointer().getFirst(game, ability); + Permanent creature = game.getPermanent(creatureId); + if (creature != null) { + ability.getTargets().get(0).setTargetController(creature.getControllerId()); + } + } + } + + @Override + public Pandemonium copy() { + return new Pandemonium(this); + } +} + +class PandemoniumEffect extends OneShotEffect { + + public PandemoniumEffect() { + super(Outcome.Benefit); + this.staticText = "that creature's controller may have it deal damage equal to its power to target creature or player of his or her choice"; + } + + public PandemoniumEffect(final PandemoniumEffect effect) { + super(effect); + } + + @Override + public PandemoniumEffect copy() { + return new PandemoniumEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent enteringCreature = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source)); + if (enteringCreature != null) { + Permanent targetPermanent = game.getPermanent(source.getTargets().getFirstTarget()); + if (targetPermanent != null) { + targetPermanent.damage(enteringCreature.getPower().getValue(), source.getSourceId(), game, false, true); + } else { + Player targetPlayer = game.getPlayer(source.getTargets().getFirstTarget()); + if (targetPlayer != null) { + targetPlayer.damage(enteringCreature.getPower().getValue(), source.getSourceId(), game, false, true); + } + } + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/timeshifted/VhatiIlDal.java b/Mage.Sets/src/mage/sets/timeshifted/VhatiIlDal.java new file mode 100644 index 0000000000..637fc61c0f --- /dev/null +++ b/Mage.Sets/src/mage/sets/timeshifted/VhatiIlDal.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 LevelX2 + */ +public class VhatiIlDal extends mage.sets.tempest.VhatiIlDal { + + public VhatiIlDal(UUID ownerId) { + super(ownerId); + this.cardNumber = 104; + this.expansionSetCode = "TSB"; + this.rarity = Rarity.SPECIAL; + } + + public VhatiIlDal(final VhatiIlDal card) { + super(card); + } + + @Override + public VhatiIlDal copy() { + return new VhatiIlDal(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java b/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java index 93ef30220d..7add0e83ce 100644 --- a/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java +++ b/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java @@ -89,17 +89,14 @@ class AngelsGraceEffect extends ContinuousRuleModifyingEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.WINS || event.getType() == EventType.LOSES; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if ((event.getType() == EventType.WINS && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) || - (event.getType() == EventType.LOSES && event.getPlayerId().equals(source.getControllerId()))) { - return true; - } - return false; + return (event.getType() == EventType.WINS && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) || + (event.getType() == EventType.LOSES && event.getPlayerId().equals(source.getControllerId())); } } @@ -138,11 +135,6 @@ class AngelsGraceReplacementEffect extends ReplacementEffectImpl { return false; } - @Override - public boolean apply(Game game, Ability source) { - return false; - } - @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { return false; diff --git a/Mage.Sets/src/mage/sets/timespiral/BonesplitterSliver.java b/Mage.Sets/src/mage/sets/timespiral/BonesplitterSliver.java new file mode 100644 index 0000000000..6c745369dd --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/BonesplitterSliver.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.SimpleStaticAbility; +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.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author Sir-Speshkitty + */ +public class BonesplitterSliver extends CardImpl { + + public BonesplitterSliver(UUID ownerId) { + super(ownerId, 149, "Bonesplitter Sliver", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Sliver"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // All Sliver creatures get +2/+0. + this.addAbility( + new SimpleStaticAbility( + Zone.BATTLEFIELD, + new BoostAllEffect(2, 0, Duration.WhileOnBattlefield, new FilterCreaturePermanent("Sliver","Sliver creatures"), false) + ) + ); + } + + public BonesplitterSliver(final BonesplitterSliver card) { + super(card); + } + + @Override + public BonesplitterSliver copy() { + return new BonesplitterSliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/FlickeringSpirit.java b/Mage.Sets/src/mage/sets/timespiral/FlickeringSpirit.java new file mode 100644 index 0000000000..240355f9bd --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/FlickeringSpirit.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.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class FlickeringSpirit extends CardImpl { + + public FlickeringSpirit(UUID ownerId) { + super(ownerId, 17, "Flickering Spirit", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{W}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Spirit"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // {3}{W}: Exile Flickering Spirit, then return it to the battlefield under its owner's control. + } + + public FlickeringSpirit(final FlickeringSpirit card) { + super(card); + } + + @Override + public FlickeringSpirit copy() { + return new FlickeringSpirit(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/FurySliver.java b/Mage.Sets/src/mage/sets/timespiral/FurySliver.java new file mode 100644 index 0000000000..c4dfdf0b69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/FurySliver.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.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.keyword.DoubleStrikeAbility; +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 Sir-Speshkitty + */ +public class FurySliver extends CardImpl { + + public FurySliver(UUID ownerId) { + super(ownerId, 157, "Fury Sliver", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{5}{R}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Sliver"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // All Sliver creatures have double strike. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new GainAbilityAllEffect(DoubleStrikeAbility.getInstance(), + Duration.WhileOnBattlefield, + new FilterCreaturePermanent("Sliver","Sliver creatures") + ) + )); + } + + public FurySliver(final FurySliver card) { + super(card); + } + + @Override + public FurySliver copy() { + return new FurySliver(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/LivingEnd.java b/Mage.Sets/src/mage/sets/timespiral/LivingEnd.java index 48c029e7e5..1420cf0dd8 100644 --- a/Mage.Sets/src/mage/sets/timespiral/LivingEnd.java +++ b/Mage.Sets/src/mage/sets/timespiral/LivingEnd.java @@ -102,7 +102,7 @@ class LivingEndEffect extends OneShotEffect { Player player = game.getPlayer(playerId); if (player != null) { for (Card card :player.getGraveyard().getCards(new FilterCreatureCard(), game)) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.GRAVEYARD); + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.GRAVEYARD, true); } } } diff --git a/Mage.Sets/src/mage/sets/timespiral/MangaraOfCorondor.java b/Mage.Sets/src/mage/sets/timespiral/MangaraOfCorondor.java index 1f531d8f73..a6bdfb8da5 100644 --- a/Mage.Sets/src/mage/sets/timespiral/MangaraOfCorondor.java +++ b/Mage.Sets/src/mage/sets/timespiral/MangaraOfCorondor.java @@ -58,7 +58,7 @@ public class MangaraOfCorondor extends CardImpl { this.toughness = new MageInt(1); // {tap}: Exile Mangara of Corondor and target permanent. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(Zone.BATTLEFIELD), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(), new TapSourceCost()); ability.addEffect(new ExileTargetEffect()); ability.addTarget(new TargetPermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/timespiral/NetherTraitor.java b/Mage.Sets/src/mage/sets/timespiral/NetherTraitor.java index a9e3683bbf..4e9d353e61 100644 --- a/Mage.Sets/src/mage/sets/timespiral/NetherTraitor.java +++ b/Mage.Sets/src/mage/sets/timespiral/NetherTraitor.java @@ -35,7 +35,6 @@ import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.ShadowAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.ColoredManaSymbol; @@ -92,19 +91,21 @@ class NetherTraitorTriggeredAbility extends TriggeredAbilityImpl { public NetherTraitorTriggeredAbility copy(){ return new NetherTraitorTriggeredAbility(this); } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD) { - Card card = game.getCard(event.getTargetId()); - if (card != null && - card.getOwnerId().equals(this.getControllerId()) && - card.getCardType().contains(CardType.CREATURE)&& - !card.getId().equals(this.getSourceId())) { - return true; - } + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD) { + if (zEvent.getTarget() != null && + zEvent.getTarget().getOwnerId().equals(this.getControllerId()) && + zEvent.getTarget().getCardType().contains(CardType.CREATURE)&& + !zEvent.getTarget().getId().equals(this.getSourceId())) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/timespiral/NorinTheWary.java b/Mage.Sets/src/mage/sets/timespiral/NorinTheWary.java index d1b899ae04..1bcd41cb76 100644 --- a/Mage.Sets/src/mage/sets/timespiral/NorinTheWary.java +++ b/Mage.Sets/src/mage/sets/timespiral/NorinTheWary.java @@ -126,13 +126,13 @@ class NorinTheWaryRemovingEffect extends OneShotEffect { if (controller != null) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { - if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), permanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, source.getSourceId(), permanent.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { //create delayed triggered ability AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility( new ReturnFromExileEffect(source.getSourceId(), Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/timespiral/SaffiEriksdotter.java b/Mage.Sets/src/mage/sets/timespiral/SaffiEriksdotter.java index 00640ca0eb..472967811e 100644 --- a/Mage.Sets/src/mage/sets/timespiral/SaffiEriksdotter.java +++ b/Mage.Sets/src/mage/sets/timespiral/SaffiEriksdotter.java @@ -105,7 +105,7 @@ class SaffiEriksdotterEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new SaffiEriksdotterDelayedTriggeredAbility(new FixedTarget(this.getTargetPointer().getFirst(game, source))); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return false; } diff --git a/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java b/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java index 9bc424d3ac..d120e532d3 100644 --- a/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java +++ b/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java @@ -132,15 +132,18 @@ class LlawanCephalidRuleModifyingEffect extends ContinuousRuleModifyingEffectImp return null; } + @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.getType() == GameEvent.EventType.CAST_SPELL) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && game.isOpponent(controller, event.getPlayerId())) { - Card card = game.getCard(event.getSourceId()); - if (card != null && filter.match(card, source.getControllerId(), game)) { - return true; - } + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && game.isOpponent(controller, event.getPlayerId())) { + Card card = game.getCard(event.getSourceId()); + if (card != null && filter.match(card, source.getControllerId(), game)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/torment/MesmericFiend.java b/Mage.Sets/src/mage/sets/torment/MesmericFiend.java index 646116480a..b41743dfdc 100644 --- a/Mage.Sets/src/mage/sets/torment/MesmericFiend.java +++ b/Mage.Sets/src/mage/sets/torment/MesmericFiend.java @@ -29,6 +29,7 @@ package mage.sets.torment; import java.util.UUID; import mage.MageInt; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; @@ -43,6 +44,7 @@ import mage.filter.common.FilterNonlandCard; import mage.game.ExileZone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentToken; import mage.players.Player; import mage.target.TargetCard; import mage.target.common.TargetOpponent; @@ -110,7 +112,7 @@ class MesmericFiendExileEffect extends OneShotEffect { if (controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, CardUtil.getObjectExileZoneId(game, sourcePermanent), sourcePermanent.getName(), source.getSourceId(), game, Zone.HAND); + controller.moveCardToExileWithInfo(card, CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()), sourcePermanent.getName(), source.getSourceId(), game, Zone.HAND, true); } } @@ -141,8 +143,10 @@ class MesmericFiendLeaveEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - ExileZone exZone = game.getExile().getExileZone(CardUtil.getObjectExileZoneId(game, source.getSourceObject(game))); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject !=null) { + int zoneChangeCounter = (sourceObject instanceof PermanentToken) ? source.getSourceObjectZoneChangeCounter() : source.getSourceObjectZoneChangeCounter() -1; + ExileZone exZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source.getSourceId(), zoneChangeCounter)); if (exZone != null) { for (Card card : exZone.getCards(game)) { if (card != null) { diff --git a/Mage.Sets/src/mage/sets/torment/Overmaster.java b/Mage.Sets/src/mage/sets/torment/Overmaster.java index e0ec810d21..c2057a3f8a 100644 --- a/Mage.Sets/src/mage/sets/torment/Overmaster.java +++ b/Mage.Sets/src/mage/sets/torment/Overmaster.java @@ -114,17 +114,17 @@ class OvermasterEffect extends ContinuousRuleModifyingEffectImpl { } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.COUNTER) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - OvermasterWatcher watcher = (OvermasterWatcher) game.getState().getWatchers().get("overmasterWatcher", source.getControllerId()); - if (spell != null && watcher != null && watcher.isUncounterable(spell.getId())) { - return true; - } - } - return false; + Spell spell = game.getStack().getSpell(event.getTargetId()); + OvermasterWatcher watcher = (OvermasterWatcher) game.getState().getWatchers().get("overmasterWatcher", source.getControllerId()); + return spell != null && watcher != null && watcher.isUncounterable(spell.getId()); } } diff --git a/Mage.Sets/src/mage/sets/torment/PutridImp.java b/Mage.Sets/src/mage/sets/torment/PutridImp.java index 4ccbaa526a..1f560a0d8e 100644 --- a/Mage.Sets/src/mage/sets/torment/PutridImp.java +++ b/Mage.Sets/src/mage/sets/torment/PutridImp.java @@ -35,6 +35,8 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInControllerGraveCondition; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalRestrictionEffect; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBlockSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -57,7 +59,6 @@ public class PutridImp extends CardImpl { this.subtype.add("Zombie"); this.subtype.add("Imp"); - this.color.setBlack(true); this.power = new MageInt(1); this.toughness = new MageInt(1); @@ -68,8 +69,9 @@ public class PutridImp extends CardImpl { new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveCondition(7), "Threshold - As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - ability.addEffect(new ConditionalContinuousEffect(new CantBlockSourceEffect(Duration.WhileOnBattlefield), new CardsInControllerGraveCondition(7), - "and can't block")); + Effect effect = new ConditionalRestrictionEffect(new CantBlockSourceEffect(Duration.WhileOnBattlefield), new CardsInControllerGraveCondition(7)); + effect.setText("and can't block"); + ability.addEffect(effect); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/torment/TemporaryInsanity.java b/Mage.Sets/src/mage/sets/torment/TemporaryInsanity.java new file mode 100644 index 0000000000..86ee015044 --- /dev/null +++ b/Mage.Sets/src/mage/sets/torment/TemporaryInsanity.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.torment; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.UntapTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.continuous.GainControlTargetEffect; +import mage.abilities.keyword.HasteAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author FenrisulfrX + */ +public class TemporaryInsanity extends CardImpl { + + public TemporaryInsanity(UUID ownerId) { + super(ownerId, 116, "Temporary Insanity", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{R}"); + this.expansionSetCode = "TOR"; + + // Untap target creature with power less than the number of cards in your graveyard + this.getSpellAbility().addTarget(new TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard()); + this.getSpellAbility().addEffect(new UntapTargetEffect()); + + // and gain control of it until end of turn. + Effect effect = new GainControlTargetEffect(Duration.EndOfTurn); + effect.setText("and gain control of it until end of the turn. "); + this.getSpellAbility().addEffect(effect); + + // That creature gains haste until end of turn. + effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); + effect.setText("That creature gains haste until end of the turn."); + this.getSpellAbility().addEffect(effect); + } + + public TemporaryInsanity(final TemporaryInsanity card) { + super(card); + } + + @Override + public TemporaryInsanity copy() { + return new TemporaryInsanity(this); + } +} + +class TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard extends TargetCreaturePermanent { + + public TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard() { + super(); + targetName = "creature with power less than the number of cards in your graveyard"; + } + + public TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard(final TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard target) { + super(target); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (super.canTarget(controllerId, id, source, game)) { + Permanent target = game.getPermanent(id); + if (target != null) { + return target.getPower().getValue() < game.getPlayer(source.getControllerId()).getGraveyard().size(); + } + return false; + } + return false; + } + + @Override + public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { + MageObject targetSource = game.getObject(sourceId); + for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, sourceId, game)) { + if (permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) { + if(permanent.getPower().getValue() < game.getPlayer(sourceControllerId).getGraveyard().size()) { + return true; + } + } + } + return false; + } + + @Override + public TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard copy() { + return new TargetCreatureWithPowerLessThanNumberOfCardsInYourGraveyard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java b/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java index 232f7be4a9..393033b9be 100644 --- a/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java +++ b/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java @@ -60,7 +60,6 @@ public class AcademyRector extends CardImpl { this.subtype.add("Human"); this.subtype.add("Cleric"); - this.color.setWhite(true); this.power = new MageInt(1); this.toughness = new MageInt(2); @@ -101,17 +100,15 @@ class AcademyRectorEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); if (controller != null && sourceObject != null) { - if (controller.chooseUse(outcome, "Exile " + sourceObject.getLogName() + " to return Spirit card?", game)) { - new ExileSourceEffect(Zone.GRAVEYARD).apply(game, source); - TargetCardInLibrary target = new TargetCardInLibrary(filter); - target.setNotTarget(true); - controller.searchLibrary(target, game); - Card targetCard = game.getCard(target.getFirstTarget()); - if (targetCard != null) { - controller.putOntoBattlefieldWithInfo(targetCard, game, Zone.LIBRARY, source.getSourceId()); - } - controller.shuffleLibrary(game); + new ExileSourceEffect().apply(game, source); + TargetCardInLibrary target = new TargetCardInLibrary(filter); + target.setNotTarget(true); + controller.searchLibrary(target, game); + Card targetCard = game.getCard(target.getFirstTarget()); + if (targetCard != null) { + controller.putOntoBattlefieldWithInfo(targetCard, game, Zone.LIBRARY, source.getSourceId()); } + controller.shuffleLibrary(game); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/Flicker.java b/Mage.Sets/src/mage/sets/urzasdestiny/Flicker.java new file mode 100644 index 0000000000..b690ecf5f9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzasdestiny/Flicker.java @@ -0,0 +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.sets.urzasdestiny; + +import java.util.UUID; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class Flicker extends CardImpl { + + public Flicker(UUID ownerId) { + super(ownerId, 9, "Flicker", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{W}"); + this.expansionSetCode = "UDS"; + + // Exile target nontoken permanent, then return it to the battlefield under its owner's control. + } + + public Flicker(final Flicker card) { + super(card); + } + + @Override + public Flicker copy() { + return new Flicker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/MemoryJar.java b/Mage.Sets/src/mage/sets/urzaslegacy/MemoryJar.java index 1387ec5084..d91b6ad163 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/MemoryJar.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/MemoryJar.java @@ -129,7 +129,7 @@ class MemoryJarEffect extends OneShotEffect { delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/AngelicChorus.java b/Mage.Sets/src/mage/sets/urzassaga/AngelicChorus.java index 9c02be33dc..aa90ac91ee 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/AngelicChorus.java +++ b/Mage.Sets/src/mage/sets/urzassaga/AngelicChorus.java @@ -53,10 +53,8 @@ public class AngelicChorus extends CardImpl { super(ownerId, 3, "Angelic Chorus", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}{W}"); this.expansionSetCode = "USG"; - this.color.setWhite(true); - - Ability ability = new AngelicChorusTriggeredAbility(); - this.addAbility(ability); + // Whenever a creature enters the battlefield under your control, you gain life equal to its toughness. + this.addAbility(new AngelicChorusTriggeredAbility()); } public AngelicChorus(final AngelicChorus card) { @@ -79,16 +77,18 @@ class AngelicChorusTriggeredAbility extends TriggeredAbilityImpl { super(ability); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.ENTERS_THE_BATTLEFIELD; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == EventType.ENTERS_THE_BATTLEFIELD) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent.getCardType().contains(CardType.CREATURE) - && permanent.getControllerId().equals(this.controllerId)) { - Effect effect = this.getEffects().get(0); - effect.setValue("lifeSource", event.getTargetId()); - return true; - } + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent.getCardType().contains(CardType.CREATURE) + && permanent.getControllerId().equals(this.controllerId)) { + this.getEffects().get(0).setValue("lifeSource", event.getTargetId()); + return true; } return false; } @@ -123,15 +123,12 @@ class AngelicChorusEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { UUID creatureId = (UUID) getValue("lifeSource"); - Permanent creature = game.getPermanent(creatureId); - if (creature == null) { - creature = (Permanent) game.getLastKnownInformation(creatureId, Zone.BATTLEFIELD); - } + Permanent creature = game.getPermanentOrLKIBattlefield(creatureId); if (creature != null) { int amount = creature.getToughness().getValue(); Player player = game.getPlayer(source.getControllerId()); if (player != null) { - player.gainLife(amount, game); + player.gainLife(amount, game); } return true; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/GoblinCadets.java b/Mage.Sets/src/mage/sets/urzassaga/GoblinCadets.java index b8b5d85b82..a45be6b518 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/GoblinCadets.java +++ b/Mage.Sets/src/mage/sets/urzassaga/GoblinCadets.java @@ -93,9 +93,11 @@ class GoblinCadetsChangeControlEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); if (permanent != null) { return permanent.changeControllerId(source.getFirstTarget(), game); + } else { + discard(); } return false; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/PhyrexianColossus.java b/Mage.Sets/src/mage/sets/urzassaga/PhyrexianColossus.java index 90f42eab4a..bde02cc31d 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/PhyrexianColossus.java +++ b/Mage.Sets/src/mage/sets/urzassaga/PhyrexianColossus.java @@ -37,7 +37,7 @@ public class PhyrexianColossus extends mage.sets.eighthedition.PhyrexianColossus public PhyrexianColossus(UUID ownerId) { super(ownerId); - this.cardNumber = 306; + this.cardNumber = 305; this.expansionSetCode = "USG"; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/PitTrap.java b/Mage.Sets/src/mage/sets/urzassaga/PitTrap.java new file mode 100644 index 0000000000..74821b5785 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/PitTrap.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.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.DestroyTargetEffect; +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.FilterAttackingCreature; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetAttackingCreature; + +/** + * + * @author fireshoes + */ +public class PitTrap extends CardImpl { + + private static final FilterAttackingCreature filter = new FilterAttackingCreature("creature without flying"); + + static { + filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); + } + + public PitTrap(UUID ownerId) { + super(ownerId, 307, "Pit Trap", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT}, "{2}"); + this.expansionSetCode = "USG"; + + // {2}, {tap}, Sacrifice Pit Trap: Destroy target attacking creature without flying. It can't be regenerated. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(true), new GenericManaCost(2)); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetAttackingCreature(1, 1, filter, false)); + this.addAbility(ability); + } + + public PitTrap(final PitTrap card) { + super(card); + } + + @Override + public PitTrap copy() { + return new PitTrap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/SneakAttack.java b/Mage.Sets/src/mage/sets/urzassaga/SneakAttack.java index e55fc37dd5..7c92c48974 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/SneakAttack.java +++ b/Mage.Sets/src/mage/sets/urzassaga/SneakAttack.java @@ -116,7 +116,7 @@ class SneakAttackEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/urzassaga/SpinedFluke.java b/Mage.Sets/src/mage/sets/urzassaga/SpinedFluke.java index 90816ead69..8e141aa20d 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/SpinedFluke.java +++ b/Mage.Sets/src/mage/sets/urzassaga/SpinedFluke.java @@ -36,6 +36,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ColoredManaCost; import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.abilities.effects.common.SacrificeControllerEffect; import mage.abilities.effects.common.SacrificeEffect; import mage.cards.CardImpl; import mage.constants.ColoredManaSymbol; @@ -54,7 +55,6 @@ public class SpinedFluke extends CardImpl { this.subtype.add("Worm"); this.subtype.add("Horror"); - this.color.setBlack(true); this.power = new MageInt(5); this.toughness = new MageInt(1); } @@ -62,7 +62,7 @@ public class SpinedFluke extends CardImpl { @Override public void build() { // When Spined Fluke enters the battlefield, sacrifice a creature. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeEffect(new FilterCreaturePermanent("a creature"), 1, ""))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeControllerEffect(new FilterCreaturePermanent("a creature"), 1, ""))); // {B}: Regenerate Spined Fluke. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ColoredManaCost(ColoredManaSymbol.B))); } diff --git a/Mage.Sets/src/mage/sets/urzassaga/YawgmothsWill.java b/Mage.Sets/src/mage/sets/urzassaga/YawgmothsWill.java index 4e965d4488..48c3b88706 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/YawgmothsWill.java +++ b/Mage.Sets/src/mage/sets/urzassaga/YawgmothsWill.java @@ -143,12 +143,12 @@ class YawgmothsWillReplacementEffect extends ReplacementEffectImpl { if (((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = ((ZoneChangeEvent) event).getTarget(); if (permanent != null) { - return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone()); + return controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone(), true); } } else { Card card = game.getCard(event.getTargetId()); if (card != null) { - return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone()); + return controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, ((ZoneChangeEvent) event).getFromZone(), true); } } return false; diff --git a/Mage.Sets/src/mage/sets/venservskoth/GalepowderMage.java b/Mage.Sets/src/mage/sets/venservskoth/GalepowderMage.java index ef46c29641..5e425bf4f2 100644 --- a/Mage.Sets/src/mage/sets/venservskoth/GalepowderMage.java +++ b/Mage.Sets/src/mage/sets/venservskoth/GalepowderMage.java @@ -115,12 +115,12 @@ class GalepowderMageEffect extends OneShotEffect { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (permanent != null) { UUID exileId = UUID.randomUUID(); - if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.BATTLEFIELD)) { + if (controller.moveCardToExileWithInfo(permanent, exileId, sourceObject.getName(), source.getSourceId(), game, Zone.BATTLEFIELD, true)) { if (card != null) { AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromExileEffect(exileId, Zone.BATTLEFIELD)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(card.getOwnerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); } } diff --git a/Mage.Sets/src/mage/sets/venservskoth/Overrule.java b/Mage.Sets/src/mage/sets/venservskoth/Overrule.java new file mode 100644 index 0000000000..1a62dbe8ab --- /dev/null +++ b/Mage.Sets/src/mage/sets/venservskoth/Overrule.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.venservskoth; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetSpell; + +/** + * + * @author FenrisulfrX + */ +public class Overrule extends CardImpl { + + public Overrule(UUID ownerId) { + super(ownerId, 32, "Overrule", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{X}{W}{U}"); + this.expansionSetCode = "DDI"; + + // Counter target spell unless its controller pays {X}. + this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new ManacostVariableValue())); + this.getSpellAbility().addTarget(new TargetSpell()); + + // You gain X life. + this.getSpellAbility().addEffect(new GainLifeEffect(new ManacostVariableValue())); + } + + public Overrule(final Overrule card) { + super(card); + } + + @Override + public Overrule copy() { + return new Overrule(this); + } +} diff --git a/Mage.Sets/src/mage/sets/venservskoth/SawtoothLoon.java b/Mage.Sets/src/mage/sets/venservskoth/SawtoothLoon.java new file mode 100644 index 0000000000..ccef7acff4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/venservskoth/SawtoothLoon.java @@ -0,0 +1,130 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.venservskoth; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect; +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.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInHand; + +/** + * + * @author FenrisulfrX + */ +public class SawtoothLoon extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("white or blue creature you control"); + + static { + Predicates.or( + new ColorPredicate(ObjectColor.WHITE), + new ColorPredicate(ObjectColor.BLUE)); + } + + public SawtoothLoon(UUID ownerId) { + super(ownerId, 17, "Sawtooth Loon", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{W}{U}"); + this.expansionSetCode = "DDI"; + this.subtype.add("Bird"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Sawtooth Loon enters the battlefield, return a white or blue creature you control to its owner's hand. + this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), false)); + + // When Sawtooth Loon enters the battlefield, draw two cards, then put two cards from your hand on the bottom of your library. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SawtoothLoonEffect())); + } + + public SawtoothLoon(final SawtoothLoon card) { + super(card); + } + + @Override + public SawtoothLoon copy() { + return new SawtoothLoon(this); + } +} + +class SawtoothLoonEffect extends OneShotEffect { + + public SawtoothLoonEffect() { + super(Outcome.DrawCard); + this.staticText = "Draw two cards, then put two cards from your hand on the bottom of your library"; + } + + public SawtoothLoonEffect(final SawtoothLoonEffect effect) { + super(effect); + } + + @Override + public SawtoothLoonEffect copy() { + return new SawtoothLoonEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + controller.drawCards(2, game); + putOnLibrary(controller, source, game); + putOnLibrary(controller, source, game); + return true; + } + return false; + } + + private boolean putOnLibrary(Player player, Ability source, Game game) { + TargetCardInHand target = new TargetCardInHand(); + player.chooseTarget(Outcome.ReturnToHand, target, source, game); + Card card = player.getHand().get(target.getFirstTarget(), game); + if (card != null) { + player.getHand().remove(card); + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.HAND, false, false); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java b/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java index 09d6c92a3a..e1439fae1f 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java @@ -401,15 +401,15 @@ class CityInABottleCantPlayEffect extends ContinuousRuleModifyingEffectImpl { public String getInfoMessage(Ability source, GameEvent event, Game game) { return "You can't play cards originally printed in the Arabian Nights expansion"; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.PLAY_LAND || event.getType() == EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.PLAY_LAND || event.getType() == EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && filter.match(card, source.getSourceId(), source.getControllerId(), game)) { - return true; - } - } - return false; + Card card = game.getCard(event.getSourceId()); + return card != null && filter.match(card, source.getSourceId(), source.getControllerId(), game); } } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/CouncilsJudgment.java b/Mage.Sets/src/mage/sets/vintagemasters/CouncilsJudgment.java index 7377e55e64..5db5ef855b 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/CouncilsJudgment.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/CouncilsJudgment.java @@ -133,7 +133,7 @@ class CouncilsJudgmentEffect extends OneShotEffect { for (Entry entry : chosenCards.entrySet()) { if (entry.getValue() == maxCount) { Permanent permanent = entry.getKey(); - controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(permanent, null, "", source.getSourceId(), game, Zone.BATTLEFIELD, true); } } return true; diff --git a/Mage.Sets/src/mage/sets/vintagemasters/CrovaxTheCursed.java b/Mage.Sets/src/mage/sets/vintagemasters/CrovaxTheCursed.java new file mode 100644 index 0000000000..d73ff01872 --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/CrovaxTheCursed.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 LevelX2 + */ +public class CrovaxTheCursed extends mage.sets.stronghold.CrovaxTheCursed { + + public CrovaxTheCursed(UUID ownerId) { + super(ownerId); + this.cardNumber = 110; + this.expansionSetCode = "VMA"; + } + + public CrovaxTheCursed(final CrovaxTheCursed card) { + super(card); + } + + @Override + public CrovaxTheCursed copy() { + return new CrovaxTheCursed(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/KillerWhale.java b/Mage.Sets/src/mage/sets/vintagemasters/KillerWhale.java new file mode 100644 index 0000000000..de5c3264b6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/KillerWhale.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.vintagemasters; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class KillerWhale extends mage.sets.tempestremastered.KillerWhale { + + public KillerWhale(UUID ownerId) { + super(ownerId); + this.cardNumber = 76; + this.expansionSetCode = "VMA"; + this.rarity = Rarity.COMMON; + } + + public KillerWhale(final KillerWhale card) { + super(card); + } + + @Override + public KillerWhale copy() { + return new KillerWhale(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/ManaDrain.java b/Mage.Sets/src/mage/sets/vintagemasters/ManaDrain.java index 7afd9d22e0..1561ea5d21 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/ManaDrain.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/ManaDrain.java @@ -101,7 +101,7 @@ class ManaDrainCounterEffect extends OneShotEffect { new AtTheBeginOMainPhaseDelayedTriggeredAbility(effect, false, TargetController.YOU, PhaseSelection.NEXT_MAIN); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/MarchesaTheBlackRose.java b/Mage.Sets/src/mage/sets/vintagemasters/MarchesaTheBlackRose.java index 5974ac0652..8dcff4bfb9 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/MarchesaTheBlackRose.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/MarchesaTheBlackRose.java @@ -160,7 +160,7 @@ class MarchesaTheBlackRoseEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(card.getId())); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java index fc3c506198..e95e0bdab0 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java @@ -98,7 +98,7 @@ class MindsDesireEffect extends OneShotEffect { if (player.getLibrary().size() > 0) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { - player.moveCardToExileWithInfo(card, source.getSourceId(), "Mind's Desire", source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, source.getSourceId(), "Mind's Desire", source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new MindsDesireCastFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/vintagemasters/SpinalGraft.java b/Mage.Sets/src/mage/sets/vintagemasters/SpinalGraft.java new file mode 100644 index 0000000000..5ef23730e2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/SpinalGraft.java @@ -0,0 +1,118 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +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.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author fireshoes + */ +public class SpinalGraft extends CardImpl { + + public SpinalGraft(UUID ownerId) { + super(ownerId, 141, "Spinal Graft", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + this.expansionSetCode = "VMA"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); + + // Enchanted creature gets +3/+3. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3, Duration.WhileOnBattlefield))); + + // When enchanted creature becomes the target of a spell or ability, destroy that creature. It can't be regenerated. + this.addAbility(new SpinalGraftTriggeredAbility()); + } + + public SpinalGraft(final SpinalGraft card) { + super(card); + } + + @Override + public SpinalGraft copy() { + return new SpinalGraft(this); + } +} + +class SpinalGraftTriggeredAbility extends TriggeredAbilityImpl { + + public SpinalGraftTriggeredAbility() { + super(Zone.BATTLEFIELD, new DestroyTargetEffect(true)); + } + + public SpinalGraftTriggeredAbility(final SpinalGraftTriggeredAbility ability) { + super(ability); + } + + @Override + public SpinalGraftTriggeredAbility copy() { + return new SpinalGraftTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.TARGETED) { + Permanent enchantment = game.getPermanent(sourceId); + if (enchantment != null && enchantment.getAttachedTo() != null) { + UUID enchanted = enchantment.getAttachedTo(); + if (event.getTargetId().equals(enchanted)) { + getEffects().get(0).setTargetPointer(new FixedTarget(enchanted)); + return true; + } + } + } + return false; + } + + @Override + public String getRule() { + return "When enchanted creature becomes the target of a spell or ability, destroy that creature. It can't be regenerated."; + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/ThalakosDrifters.java b/Mage.Sets/src/mage/sets/vintagemasters/ThalakosDrifters.java new file mode 100644 index 0000000000..5e6ff29627 --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/ThalakosDrifters.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those 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 ThalakosDrifters extends mage.sets.tempestremastered.ThalakosDrifters { + + public ThalakosDrifters(UUID ownerId) { + super(ownerId); + this.cardNumber = 97; + this.expansionSetCode = "VMA"; + } + + public ThalakosDrifters(final ThalakosDrifters card) { + super(card); + } + + @Override + public ThalakosDrifters copy() { + return new ThalakosDrifters(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/ThopterSquadron.java b/Mage.Sets/src/mage/sets/vintagemasters/ThopterSquadron.java new file mode 100644 index 0000000000..c5748f4dcc --- /dev/null +++ b/Mage.Sets/src/mage/sets/vintagemasters/ThopterSquadron.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.vintagemasters; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.permanent.token.Token; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author LevelX2 + */ +public class ThopterSquadron extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another Thopter"); + + static { + filter.add(new AnotherPredicate()); + filter.add(new SubtypePredicate("Thopter")); + } + + public ThopterSquadron(UUID ownerId) { + super(ownerId, 286, "Thopter Squadron", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); + this.expansionSetCode = "VMA"; + this.subtype.add("Thopter"); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Thopter Squadron enters the battlefield with three +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), "with three +1/+1 counters on it")); + + // {1}, Remove a +1/+1 counter from Thopter Squadron: Put a 1/1 colorless Thopter artifact creature token with flying onto the battlefield. Activate this ability only any time you could cast a sorcery. + Ability firstAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ThopterSquadronThopterToken(), 1), new GenericManaCost(1)); + firstAbility.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1))); + this.addAbility(firstAbility); + + // {1}, Sacrifice another Thopter: Put a +1/+1 counter on Thopter Squadron. Activate this ability only any time you could cast a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance(), true), new ManaCostsImpl("{1}")); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + + } + + public ThopterSquadron(final ThopterSquadron card) { + super(card); + } + + @Override + public ThopterSquadron copy() { + return new ThopterSquadron(this); + } +} + +class ThopterSquadronThopterToken extends Token { + public ThopterSquadronThopterToken() { + super("Thopter", "1/1 colorless Thopter artifact creature token with flying"); + cardType.add(CardType.ARTIFACT); + cardType.add(CardType.CREATURE); + subtype.add("Thopter"); + power = new MageInt(1); + toughness = new MageInt(1); + this.addAbility(FlyingAbility.getInstance()); + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java b/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java index b2783ca49d..16836860f9 100644 --- a/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java +++ b/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java @@ -77,10 +77,15 @@ class CityOfSolitudeEffect extends ContinuousRuleModifyingEffectImpl { CityOfSolitudeEffect(final CityOfSolitudeEffect effect) { super(effect); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.CAST_SPELL || event.getType() == EventType.ACTIVATE_ABILITY; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return (event.getType() == EventType.CAST_SPELL || event.getType() == EventType.ACTIVATE_ABILITY) && !game.getActivePlayerId().equals(event.getPlayerId()); + return !game.getActivePlayerId().equals(event.getPlayerId()); } @Override diff --git a/Mage.Sets/src/mage/sets/visions/ElephantGrass.java b/Mage.Sets/src/mage/sets/visions/ElephantGrass.java index 27947e56c6..c54819decd 100644 --- a/Mage.Sets/src/mage/sets/visions/ElephantGrass.java +++ b/Mage.Sets/src/mage/sets/visions/ElephantGrass.java @@ -51,8 +51,6 @@ public class ElephantGrass extends CardImpl { super(ownerId, 54, "Elephant Grass", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{G}"); this.expansionSetCode = "VIS"; - this.color.setGreen(true); - // Cumulative upkeep {1} this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{1}"))); // Black creatures can't attack you. @@ -85,18 +83,13 @@ class ElephantGrassReplacementEffect extends ReplacementEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_ATTACKER; } @Override public boolean applies(GameEvent event, Ability source, Game game) { - if ( event.getType() == GameEvent.EventType.DECLARE_ATTACKER && event.getTargetId().equals(source.getControllerId()) ) { + if (event.getTargetId().equals(source.getControllerId()) ) { Permanent creature = game.getPermanent(event.getSourceId()); if(creature != null && creature.getColor().isBlack()){ return true; @@ -105,6 +98,12 @@ class ElephantGrassReplacementEffect extends ReplacementEffectImpl { return false; } + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override public ElephantGrassReplacementEffect copy() { return new ElephantGrassReplacementEffect(this); diff --git a/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.java b/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.java index edfc0a3ec6..f82c2cbeac 100644 --- a/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.java +++ b/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.java @@ -86,7 +86,7 @@ class UndiscoveredParadiseEffect extends OneShotEffect { AtBeginningOfUntapDelayedTriggeredAbility delayedAbility = new AtBeginningOfUntapDelayedTriggeredAbility(new ReturnToHandSourceEffect(true)); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; } diff --git a/Mage.Sets/src/mage/sets/weatherlight/AncestralKnowledge.java b/Mage.Sets/src/mage/sets/weatherlight/AncestralKnowledge.java index 0ac56df31b..0e716cb7d8 100644 --- a/Mage.Sets/src/mage/sets/weatherlight/AncestralKnowledge.java +++ b/Mage.Sets/src/mage/sets/weatherlight/AncestralKnowledge.java @@ -111,7 +111,7 @@ class AncestralKnowledgeEffect extends OneShotEffect { for (UUID cardId : target.getTargets()) { Card card = cards.get(cardId, game); if (card != null) { - player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY); + player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); cards.remove(card); } } diff --git a/Mage.Sets/src/mage/sets/worldmagiccupqualifier/ThaliaGuardianOfThraben.java b/Mage.Sets/src/mage/sets/worldmagiccupqualifier/ThaliaGuardianOfThraben.java new file mode 100644 index 0000000000..b9ab3c534d --- /dev/null +++ b/Mage.Sets/src/mage/sets/worldmagiccupqualifier/ThaliaGuardianOfThraben.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.worldmagiccupqualifier; + +import java.util.UUID; + +/** + * + * @author fireshoes + */ +public class ThaliaGuardianOfThraben extends mage.sets.darkascension.ThaliaGuardianOfThraben { + + public ThaliaGuardianOfThraben(UUID ownerId) { + super(ownerId); + this.cardNumber = 3; + this.expansionSetCode = "WMCQ"; + } + + public ThaliaGuardianOfThraben(final ThaliaGuardianOfThraben card) { + super(card); + } + + @Override + public ThaliaGuardianOfThraben copy() { + return new ThaliaGuardianOfThraben(this); + } +} diff --git a/Mage.Sets/src/mage/sets/worldwake/HarabazDruid.java b/Mage.Sets/src/mage/sets/worldwake/HarabazDruid.java index 0905f4d815..6150dcd02b 100644 --- a/Mage.Sets/src/mage/sets/worldwake/HarabazDruid.java +++ b/Mage.Sets/src/mage/sets/worldwake/HarabazDruid.java @@ -30,6 +30,7 @@ package mage.sets.worldwake; import java.util.UUID; import mage.MageInt; import mage.Mana; +import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.mana.DynamicManaAbility; import mage.cards.CardImpl; @@ -61,8 +62,8 @@ public class HarabazDruid extends CardImpl { this.toughness = new MageInt(1); // {T}: Add X mana of any one color to your mana pool, where X is the number of Allies you control. - this.addAbility(new DynamicManaAbility(new Mana(0,0,0,0,0,0,1), new PermanentsOnBattlefieldCount(filter), - "Add X mana of any one color to your mana pool, where X is the number of Allies you control")); + this.addAbility(new DynamicManaAbility(new Mana(0,0,0,0,0,0,1), new PermanentsOnBattlefieldCount(filter), new TapSourceCost(), + "Add X mana of any one color to your mana pool, where X is the number of Allies you control", true)); } public HarabazDruid(final HarabazDruid card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java b/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java index 14ebd8ef1f..8e2c598072 100644 --- a/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java +++ b/Mage.Sets/src/mage/sets/worldwake/LightkeeperOfEmeria.java @@ -32,7 +32,9 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.MultipliedValue; import mage.abilities.dynamicvalue.common.MultikickerCount; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.MultikickerAbility; @@ -49,7 +51,6 @@ public class LightkeeperOfEmeria extends CardImpl { this.expansionSetCode = "WWK"; this.subtype.add("Angel"); - this.color.setWhite(true); this.power = new MageInt(2); this.toughness = new MageInt(4); @@ -60,7 +61,9 @@ public class LightkeeperOfEmeria extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Lightkeeper of Emeria enters the battlefield, you gain 2 life for each time it was kicked. - this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(new MultikickerCount()))); + Effect effect = new GainLifeEffect(new MultipliedValue(new MultikickerCount(), 2)); + effect.setText("you gain 2 life for each time it was kicked"); + this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false)); } public LightkeeperOfEmeria(final LightkeeperOfEmeria card) { diff --git a/Mage.Sets/src/mage/sets/worldwake/NemesisTrap.java b/Mage.Sets/src/mage/sets/worldwake/NemesisTrap.java index d7cf93bb71..c1dd580d1c 100644 --- a/Mage.Sets/src/mage/sets/worldwake/NemesisTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/NemesisTrap.java @@ -112,7 +112,7 @@ class NemesisTrapEffect extends OneShotEffect { Permanent targetedCreature = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && targetedCreature != null) { - controller.moveCardToExileWithInfo(targetedCreature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD); + controller.moveCardToExileWithInfo(targetedCreature, null, null, source.getSourceId(), game, Zone.BATTLEFIELD, true); EmptyToken token = new EmptyToken(); CardUtil.copyTo(token).from(targetedCreature); token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); diff --git a/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java b/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java index c597a5d485..bc6f9e8691 100644 --- a/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java @@ -143,7 +143,7 @@ class StoneIdolTrapEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect, TargetController.YOU); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java b/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java index a801fe22cc..8d98e4ec56 100644 --- a/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java +++ b/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java @@ -108,7 +108,7 @@ class ThadaAdelAcquisitorEffect extends OneShotEffect { if (target.getTargets().size() > 0) { Card card = damagedPlayer.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { - controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY); + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getLogName(), source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new ThadaAdelPlayFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); diff --git a/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java b/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java index e907ebb2ba..fb98e221fa 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java +++ b/Mage.Sets/src/mage/sets/zendikar/ElementalAppeal.java @@ -109,7 +109,7 @@ class ElementalAppealEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java b/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java index 90cc803704..e566f1f124 100644 --- a/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java +++ b/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java @@ -141,25 +141,23 @@ class IonaShieldOfEmeriaReplacementEffect extends ContinuousRuleModifyingEffectI return null; } + @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.getType() == GameEvent.EventType.CAST_SPELL) { - if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId()) ) { - ObjectColor chosenColor = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); - Card card = game.getCard(event.getSourceId()); - if (chosenColor != null && card != null && card.getColor().contains(chosenColor)) { - return true; - } + if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId()) ) { + ObjectColor chosenColor = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); + Card card = game.getCard(event.getSourceId()); + if (chosenColor != null && card != null && card.getColor().contains(chosenColor)) { + return true; } } return false; } - @Override - public boolean apply(Game game, Ability source) { - return false; - } - @Override public IonaShieldOfEmeriaReplacementEffect copy() { return new IonaShieldOfEmeriaReplacementEffect(this); diff --git a/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java b/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java index 9942326adf..a6d5c9c05a 100644 --- a/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java +++ b/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java @@ -181,7 +181,7 @@ class MindbreakEffect extends OneShotEffect{ for (UUID spellId : targetPointer.getTargets(game, source)) { Spell spell = game.getStack().getSpell(spellId); if (spell != null) { - controller.moveCardToExileWithInfo(spell, null, "", source.getSourceId(), game, Zone.STACK); + controller.moveCardToExileWithInfo(spell, null, "", source.getSourceId(), game, Zone.STACK, true); affectedTargets++; } } diff --git a/Mage.Sets/src/mage/sets/zendikar/RuinousMinotaur.java b/Mage.Sets/src/mage/sets/zendikar/RuinousMinotaur.java index 9379457677..84d78b7cc1 100644 --- a/Mage.Sets/src/mage/sets/zendikar/RuinousMinotaur.java +++ b/Mage.Sets/src/mage/sets/zendikar/RuinousMinotaur.java @@ -53,7 +53,6 @@ public class RuinousMinotaur extends CardImpl { this.subtype.add("Minotaur"); this.subtype.add("Warrior"); - this.color.setRed(true); this.power = new MageInt(5); this.toughness = new MageInt(2); @@ -76,7 +75,7 @@ class RuinousMinotaurTriggeredAbility extends TriggeredAbilityImpl { private static final FilterControlledPermanent filter = new FilterControlledLandPermanent(); public RuinousMinotaurTriggeredAbility() { - super(Zone.BATTLEFIELD, new SacrificeTargetEffect(), true); + super(Zone.BATTLEFIELD, new SacrificeTargetEffect(), false); this.addTarget(new TargetControlledPermanent(filter)); } @@ -89,13 +88,15 @@ class RuinousMinotaurTriggeredAbility extends TriggeredAbilityImpl { return new RuinousMinotaurTriggeredAbility(this); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.DAMAGED_PLAYER && event.getSourceId().equals(this.sourceId) - && game.getOpponents(this.getControllerId()).contains(event.getTargetId())) { - return true; - } - return false; + return event.getSourceId().equals(this.sourceId) + && game.getOpponents(this.getControllerId()).contains(event.getTargetId()); } @Override diff --git a/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java b/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java index 0dee86bb13..d67de8aa3f 100644 --- a/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java +++ b/Mage.Sets/src/mage/sets/zendikar/VinesOfVastwood.java @@ -60,7 +60,6 @@ public class VinesOfVastwood extends CardImpl { public VinesOfVastwood(UUID ownerId) { super(ownerId, 193, "Vines of Vastwood", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G}"); this.expansionSetCode = "ZEN"; - this.color.setGreen(true); // Kicker {G} (You may pay an additional {G} as you cast this spell.) this.addAbility(new KickerAbility("{G}")); diff --git a/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java b/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java index 2da29ce3a0..c26d30ab29 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java +++ b/Mage.Sets/src/mage/sets/zendikar/ZektarShrineExpedition.java @@ -108,7 +108,7 @@ class ZektarShrineExpeditionEffect extends OneShotEffect { DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game)); + delayedAbility.setSourceObject(source.getSourceObject(game), game); game.addDelayedTriggeredAbility(delayedAbility); return true; diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/PutOntoBattlefieldTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/PutOntoBattlefieldTest.java new file mode 100644 index 0000000000..1ab753078b --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/activated/PutOntoBattlefieldTest.java @@ -0,0 +1,51 @@ +/* + * 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 org.mage.test.cards.abilities.activated; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class PutOntoBattlefieldTest extends CardTestPlayerBase { + + /** + * Tests to put a token onto the battlefield + */ + @Test + public void testOozeFlux() { + // Enchantment + // {1}{G}, Remove one or more +1/+1 counters from among creatures you control: Put an X/X green Ooze creature token onto the battlefield, where X is the number of +1/+1 counters removed this way. + addCard(Zone.BATTLEFIELD, playerA, "Ooze Flux"); + // Trample + // Kalonian Hydra enters the battlefield with four +1/+1 counters on it. + // Whenever Kalonian Hydra attacks, double the number of +1/+1 counters on each creature you control. + addCard(Zone.BATTLEFIELD, playerA, "Kalonian Hydra"); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}{G},"); + setChoice(playerA, "X=2"); // Remove how many + setChoice(playerA,"Kalonian Hydra"); + setChoice(playerA, "X=2"); // Remove from Hydra + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPowerToughness(playerA, "Kalonian Hydra", 2, 2); + assertPermanentCount(playerA, "Ooze", 1); + assertPowerToughness(playerA, "Ooze", 2, 2); + + } + + +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BanisherPriestTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BanisherPriestTest.java index 6f8421fa7b..133d1724b4 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BanisherPriestTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/BanisherPriestTest.java @@ -63,7 +63,7 @@ public class BanisherPriestTest extends CardTestPlayerBase { /** - * Check if the returning target did not trigger the die Event of + * Check that the returning target did not trigger the dies Event of * the dying Banisher Priest */ @Test diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/GatherSpecimensTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/GatherSpecimensTest.java index 4c3dcf71a8..5ce39d021f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/GatherSpecimensTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/enters/GatherSpecimensTest.java @@ -101,6 +101,7 @@ public class GatherSpecimensTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerB, "Memnite", 1); addCard(Zone.LIBRARY, playerB, "Plains", 10); + // If a creature would enter the battlefield under an opponent's control this turn, it enters the battlefield under your control instead. castSpell(1, PhaseStep.UPKEEP, playerA, "Gather Specimens"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oblivion Ring"); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java index 7afac0cc4b..66f91668a8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/flicker/CloudshiftTest.java @@ -19,6 +19,9 @@ public class CloudshiftTest extends CardTestPlayerBase { /** * Tests that casting Cloudshift makes targeting spell fizzling + * + * Cloudshift + * Exile target creature you control, then return that card to the battlefield under your control. */ @Test public void testSpellFizzle() { @@ -229,4 +232,101 @@ public class CloudshiftTest extends CardTestPlayerBase { assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); } + /** + * Test that if I cast cloudshift and it goes to the stack and another instant spell exiles the + * target creature as response, cloudshift does not bring back that creature from exile because it's + * a complete other object (400.7). + * 400.7g allows Cloudshift to bring it back only if it was exiled by cloudshift itself. + * + */ + @Test + public void testReturnIfExiledByAnotherSpell() { + addCard(Zone.BATTLEFIELD, playerA, "Plains"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + addCard(Zone.HAND, playerA, "Cloudshift"); + + + addCard(Zone.BATTLEFIELD, playerB, "Plains"); + // Exile target creature. Its controller gains life equal to its power. + addCard(Zone.HAND, playerB, "Swords to Plowshares"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cloudshift", "Silvercoat Lion"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Swords to Plowshares", "Silvercoat Lion", "Cloudshift"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Cloudshift", 1); + assertGraveyardCount(playerB, "Swords to Plowshares", 1); + + assertLife(playerA, 22); + assertLife(playerB, 20); + + assertPermanentCount(playerA,"Silvercoat Lion", 0); + assertExileCount("Silvercoat Lion", 1); + + } + + /** + * Test that if a creature returns from cloudshift it returns + * under the control of the controller of Cloudshift. + */ + @Test + public void testReturnOfOwnerIsAnotherPlayer() { + addCard(Zone.BATTLEFIELD, playerA, "Plains",3); + addCard(Zone.BATTLEFIELD, playerA, "Mountain",3); + // Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. + addCard(Zone.HAND, playerA, "Act of Treason"); + + addCard(Zone.HAND, playerA, "Cloudshift"); + + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Act of Treason", "Silvercoat Lion"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Cloudshift", "Silvercoat Lion"); + + setStopAt(2, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Cloudshift", 1); + assertGraveyardCount(playerA, "Act of Treason", 1); + + assertPermanentCount(playerA,"Silvercoat Lion", 1); + assertPermanentCount(playerB,"Silvercoat Lion", 0); + + } + + /** + * Test that if a creature returns from Conjurer's Closet it returns + * under the control of the controller of Conjurer's Closet. + */ + @Test + public void testReturnOfOwnerIsAnotherPlayerConjurersCloset() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain",3); + // Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. + addCard(Zone.HAND, playerA, "Act of Treason"); + + // At the beginning of your end step, you may exile target creature you control, then return that card to the battlefield under your control + addCard(Zone.BATTLEFIELD, playerA, "Conjurer's Closet"); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Act of Treason", "Silvercoat Lion"); + + addTarget(playerA, "Silvercoat Lion"); + + setStopAt(2, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA,"Conjurer's Closet", 1); + assertGraveyardCount(playerA, "Act of Treason", 1); + + assertPermanentCount(playerA,"Silvercoat Lion", 1); + assertPermanentCount(playerB,"Silvercoat Lion", 0); + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AmplifyTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AmplifyTest.java new file mode 100644 index 0000000000..b65c521b24 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AmplifyTest.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 org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class AmplifyTest extends CardTestPlayerBase { + + /** + * Tests if +1/+1 counters are added + */ + @Test + public void testAmplifyOneCard() { + // Creature — Dragon - Dragon 5/5 {5}{R}{R} + // Amplify 3 (As this creature enters the battlefield, put three +1/+1 counters on it for each Dragon card you reveal in your hand.) + // {T}: Kilnmouth Dragon deals damage equal to the number of +1/+1 counters on it to target creature or player + addCard(Zone.HAND, playerA, "Kilnmouth Dragon", 2); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Kilnmouth Dragon"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Kilnmouth Dragon"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Kilnmouth Dragon", 1); + assertPowerToughness(playerA, "Kilnmouth Dragon", 8,8); // 5 + 3 from Amplify + } + /** + * Tests if +1/+1 counters are added + */ + @Test + public void testAmplifyTwoCards() { + // Creature — Dragon - Dragon 5/5 {5}{R}{R} + // Amplify 3 (As this creature enters the battlefield, put three +1/+1 counters on it for each Dragon card you reveal in your hand.) + // {T}: Kilnmouth Dragon deals damage equal to the number of +1/+1 counters on it to target creature or player + addCard(Zone.HAND, playerA, "Kilnmouth Dragon", 2); + addCard(Zone.HAND, playerA, "Phantasmal Dragon", 1); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Kilnmouth Dragon"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Kilnmouth Dragon^Phantasmal Dragon"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Kilnmouth Dragon", 1); + assertPowerToughness(playerA, "Kilnmouth Dragon", 11,11); // 5 + 6 from Amplify + } + /** + * Tests that it works for Clone + */ + @Test + public void testAmplifyWithClone() { + // Creature — Dragon - Dragon 5/5 {5}{R}{R} + // Amplify 3 (As this creature enters the battlefield, put three +1/+1 counters on it for each Dragon card you reveal in your hand.) + // {T}: Kilnmouth Dragon deals damage equal to the number of +1/+1 counters on it to target creature or player + addCard(Zone.HAND, playerA, "Kilnmouth Dragon", 2); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + + addCard(Zone.HAND, playerB, "Clone", 1); + addCard(Zone.HAND, playerB, "Phantasmal Dragon", 1); + addCard(Zone.BATTLEFIELD, playerB, "Island", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Kilnmouth Dragon"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Kilnmouth Dragon"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Clone"); + setChoice(playerB, "Kilnmouth Dragon"); + setChoice(playerB, "Yes"); + addTarget(playerB, "Phantasmal Dragon"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Kilnmouth Dragon", 1); + assertPowerToughness(playerA, "Kilnmouth Dragon", 8,8); // 5 + 3 from Amplify + + assertPermanentCount(playerB, "Kilnmouth Dragon", 1); + assertPowerToughness(playerB, "Kilnmouth Dragon", 8,8); // 5 + 3 from Amplify + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java index ff8db21aeb..62bc9f0808 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java @@ -278,4 +278,34 @@ public class BestowTest extends CardTestPlayerBase { assertPowerToughness(playerA, "Silvercoat Lion", 3,3); } + + /** + * + * + * + */ + @Test + public void bestowMogissWarhound() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + // Enchantment Creature — Hound + // 2/2 + // Bestow 2R (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.) + // Mogis's Warhound attacks each turn if able. + // Enchanted creature gets +2/+2 and attacks each turn if able. + addCard(Zone.HAND, playerA, "Mogis's Warhound"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mogis's Warhound using bestow", "Silvercoat Lion"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + // + assertHandCount(playerA, "Mogis's Warhound", 0); + + // because cast with bestow, Boon Satyr may not be tapped + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 4,4); + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExploitTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExploitTest.java new file mode 100644 index 0000000000..97cf0d0798 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ExploitTest.java @@ -0,0 +1,140 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation 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.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class ExploitTest extends CardTestPlayerBase { + + /** + * 702.109. Exploit + * + * 702.109a Exploit is a triggered ability. “Exploit†means “When this creature enters the battlefield, you may sacrifice a creature.†+ * + * 702.109b A creature with exploit “exploits a creature†when the controller of the exploit ability sacrifices a creature as that ability resolves. + * + * You choose whether to sacrifice a creature and which creature to sacrifice as the exploit ability resolves. + * You can sacrifice the creature with exploit if it’s still on the battlefield. This will cause its other ability to trigger. + * You can’t sacrifice more than one creature to any one exploit ability. + * + */ + + @Test + public void testNormalUse() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // Exploit (When this creature enters the battlefield, you may sacrifice a creature.) + // When Silumgar Butcher exploits a creature, target creature gets -3/-3 until end of turn. + addCard(Zone.HAND, playerA, "Silumgar Butcher"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + + addCard(Zone.BATTLEFIELD, playerB, "Thundering Giant"); // 4/3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silumgar Butcher"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Silvercoat Lion"); // sacrifice to Exploit + addTarget(playerA, "Thundering Giant"); // Target for the -3/-3 + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Silumgar Butcher", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertGraveyardCount(playerB, "Thundering Giant", 1); + + } + /** + * Test that the Exploit ability won't trigger if the creature with + * exploit left the battlefiled before the Enters the battlefield + * triggered ability resolves. + * + */ + @Test + public void testExploitTriggerWontGo() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // Exploit (When this creature enters the battlefield, you may sacrifice a creature.) + // When Silumgar Butcher exploits a creature, target creature gets -3/-3 until end of turn. + addCard(Zone.HAND, playerA, "Silumgar Butcher"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + addCard(Zone.HAND, playerB, "Lightning Bolt", 1); + addCard(Zone.BATTLEFIELD, playerB, "Thundering Giant"); // 4/3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silumgar Butcher"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Silumgar Butcher"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Silvercoat Lion"); // sacrifice to Exploit + addTarget(playerA, "Thundering Giant"); // Target for the -3/-3 + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + assertGraveyardCount(playerA, "Silumgar Butcher", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerB, "Thundering Giant", 1); + + } + + /** + * Test that the Exploit ability won't trigger if the creature with + * exploit left the battlefiled before the Enters the battlefield + * triggered ability resolves. + * + */ + @Test + public void testSacrificeCreatureWithExploit() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + // Exploit (When this creature enters the battlefield, you may sacrifice a creature.) + // When Qarsi Sadist exploits a creature, target opponent loses 2 life and you gain 2 life. + addCard(Zone.HAND, playerA, "Qarsi Sadist"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Qarsi Sadist"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Qarsi Sadist"); // sacrifice to Exploit + addTarget(playerA, playerB); // Target for lose life + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Qarsi Sadist", 1); + + assertLife(playerA, 22); + assertLife(playerB, 18); + + } + +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ForecastTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ForecastTest.java new file mode 100644 index 0000000000..6f5bdc45c8 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ForecastTest.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 org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class ForecastTest extends CardTestPlayerBase { + + /** + * 702.56. Forecast 702.56a A forecast ability is a special kind of activated + * ability that can be activated only from a player's hand. It's written + * "Forecast - [Activated ability]." + * + * 702.56b A forecast ability may be activated only during the upkeep step of + * the card's owner and only once each turn. The controller of the forecast + * ability reveals the card with that ability from his or her hand as the + * ability is activated. That player plays with that card revealed in his or her + * hand until it leaves the player's hand or until a step or phase that isn't an + * upkeep step begins, whichever comes first. + * + */ + + @Test + public void testPaladinOfPrahv() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.HAND, playerA, "Silvercoat Lion"); + addCard(Zone.HAND, playerA, "Paladin of Prahv"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); + + activateAbility(3, PhaseStep.UPKEEP, playerA, "Forecast"); + addTarget(playerA, "Silvercoat Lion"); + + attack(3, playerA, "Silvercoat Lion"); + + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertHandCount(playerA, "Paladin of Prahv", 1); + + assertLife(playerA, 22); + assertLife(playerB, 18); + + } + + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ManifestTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ManifestTest.java index 75b3caa948..06974adbde 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ManifestTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ManifestTest.java @@ -287,4 +287,42 @@ public class ManifestTest extends CardTestPlayerBase { assertPermanentCount(playerB, "face down creature", 1); } + + // Check if a Megamorph card is manifested and truned by their megamorph ability + // it gets the +1/+1 counter. + + @Test + public void testManifestMegamorph() { + + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 5); + // {1}{B}, {T}, Sacrifice another creature: Manifest the top card of your library. + addCard(Zone.BATTLEFIELD, playerB, "Qarsi High Priest", 1); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + addCard(Zone.LIBRARY, playerB, "Sandstorm Charger", 1); + addCard(Zone.LIBRARY, playerB, "Mountain", 1); + + skipInitShuffling(); + + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}{B},{T}, Sacrifice another creature"); + addTarget(playerB, "Silvercoat Lion"); + + activateAbility(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "{4}{W}: Turn"); + + setStopAt(2, PhaseStep.END_TURN); + execute(); + + // no life gain + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + + assertPermanentCount(playerB, "face down creature", 0); + assertPermanentCount(playerB, "Sandstorm Charger", 1); + assertPowerToughness(playerB, "Sandstorm Charger", 4, 5); // 3/4 and the +1/+1 counter from Megamorph + + } + } 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 a741e5c6d2..d3dfc96350 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 @@ -99,7 +99,7 @@ public class MorphTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pine Walker"); setChoice(playerA, "Yes"); // cast it face down as 2/2 creature - attack(3, playerA, ""); + attack(3, playerA, "face down creature"); activateAbility(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "{4}{G}: Turn this face-down permanent face up."); setStopAt(3, PhaseStep.END_TURN); @@ -133,8 +133,8 @@ public class MorphTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Icefeather Aven"); setChoice(playerA, "Yes"); // cast it face down as 2/2 creature - attack(3, playerA, ""); - attack(3, playerA, ""); + attack(3, playerA, "face down creature"); + attack(3, playerA, "face down creature"); activateAbility(3, PhaseStep.DECLARE_BLOCKERS, playerA, "{1}{G}{U}: Turn this face-down permanent face up."); setChoice(playerA, "No"); // Don't use return permanent to hand effect @@ -476,6 +476,10 @@ public class MorphTest extends CardTestPlayerBase { @Test public void testDiesTriggeredDoesNotTriggerIfFaceDown() { + // Flying + // When Ashcloud Phoenix dies, return it to the battlefield face down. + // Morph (You may cast this card face down as a 2/2 creature for . Turn it face up any time for its morph cost.) + // When Ashcloud Phoenix is turned face up, it deals 2 damage to each player. addCard(Zone.HAND, playerA, "Ashcloud Phoenix", 1); addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); @@ -505,5 +509,47 @@ public class MorphTest extends CardTestPlayerBase { } } + } + /** + * Check that a DiesTriggeredAbility of a creature does not trigger + * if the creature dies face down in combat + */ + + @Test + public void testDiesTriggeredDoesNotTriggerInCombatIfFaceDown() { + // Flying + // When Ashcloud Phoenix dies, return it to the battlefield face down. + // Morph (You may cast this card face down as a 2/2 creature for . Turn it face up any time for its morph cost.) + // When Ashcloud Phoenix is turned face up, it deals 2 damage to each player. + addCard(Zone.HAND, playerA, "Ashcloud Phoenix", 1); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + + // First strike, forestwalk, vigilance + // (This creature deals combat damage before creatures without first strike, it can't be blocked as long as defending player controls a Forest, and attacking doesn't cause this creature to tap.) + addCard(Zone.BATTLEFIELD, playerB, "Mirri, Cat Warrior"); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ashcloud Phoenix"); + setChoice(playerA, "Yes"); // cast it face down as 2/2 creature + + attack(2, playerB, "Mirri, Cat Warrior"); + block(2, playerA, "face down creature", "Mirri, Cat Warrior"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Ashcloud Phoenix", 1); + + + for (Card card: playerA.getGraveyard().getCards(currentGame)) { + if (card.getName().equals("Ashcloud Phoenix")) { + Assert.assertEquals("Ashcloud Phoenix has to be face up in graveyard", false, card.isFaceDown(currentGame)); + break; + } + } + + assertLife(playerA, 20); + assertLife(playerB, 20); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProvokeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProvokeTest.java new file mode 100644 index 0000000000..b39949adc9 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ProvokeTest.java @@ -0,0 +1,93 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation 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.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class ProvokeTest extends CardTestPlayerBase{ + + @Test + public void testProvokeTappedCreature() { + // Creature - Beast 5/3 + // Trample + // Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.) + addCard(Zone.BATTLEFIELD, playerA, "Brontotherium"); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + attack(2, playerB, "Silvercoat Lion"); // So it's tapped + + attack(3, playerA, "Brontotherium"); + addTarget(playerA, "Silvercoat Lion"); + + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 18); // one attack from Lion + assertLife(playerB, 17); // Because of Trample + + assertPermanentCount(playerA, "Brontotherium", 1); + assertGraveyardCount(playerB,"Silvercoat Lion", 1); + } + + @Test + public void testProvokeCreatureThatCantBlock() { + // Creature - Beast 5/3 + // Trample + // Provoke (When this attacks, you may have target creature defending player controls untap and block it if able.) + addCard(Zone.BATTLEFIELD, playerA, "Brontotherium"); + + // Creature - Zombie Imp 1/1 + // Discard a card: Putrid Imp gains flying until end of turn. + // Threshold - As long as seven or more cards are in your graveyard, Putrid Imp gets +1/+1 and can't block. + addCard(Zone.BATTLEFIELD, playerB, "Putrid Imp", 1); + addCard(Zone.GRAVEYARD, playerB, "Swamp", 7); + + attack(2, playerB, "Putrid Imp"); // So it's tapped + + attack(3, playerA, "Brontotherium"); + addTarget(playerA, "Putrid Imp"); + + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Brontotherium", 1); + assertPermanentCount(playerB, "Putrid Imp", 1); // Can't Block so still alive + + assertLife(playerA, 18); // one attack from Imp + assertLife(playerB, 15); // Not blocked + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SuspendTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SuspendTest.java index 7c9abed435..36824165d1 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SuspendTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/SuspendTest.java @@ -86,4 +86,32 @@ public class SuspendTest extends CardTestPlayerBase { assertPermanentCount(playerA, "Silvercoat Lion", 1); } + /** + * Tests that a spell countered with delay goes to exile with 3 time counters + * and can be cast after the 3 counters are removed + * + */ + @Test + public void testDelay() { + + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + + addCard(Zone.HAND, playerA, "Silvercoat Lion",1); + + // Instant {1}{U} + // Counter target spell. If the spell is countered this way, exile it with three time counters on it instead of putting it into its owner's graveyard. If it doesn't have suspend, it gains suspend. (At the beginning of its owner's upkeep, remove a counter from that card. When the last is removed, the player plays it without paying its mana cost. If it's a creature, it has haste.) + addCard(Zone.HAND, playerB, "Delay",1); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Delay", "Silvercoat Lion"); + setChoice(playerA, "Silvercoat Lion"); + + setStopAt(7, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Delay", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 1); + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java index 1ab3383cd8..eca34b84cd 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/UndyingTest.java @@ -164,6 +164,7 @@ public class UndyingTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerB, "Plains", 4); // Destroy all creatures. They can't be regenerated. addCard(Zone.HAND, playerB, "Wrath of God"); + // Anafenza, the Foremost // Whenever Anafenza, the Foremost attacks, put a +1/+1 counter on another target tapped creature you control. // If a creature card would be put into an opponent's graveyard from anywhere, exile it instead. diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/PastInFlamesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/PastInFlamesTest.java index a0325e2681..6d4b9fb5f4 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/PastInFlamesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/PastInFlamesTest.java @@ -61,11 +61,12 @@ public class PastInFlamesTest extends CardTestPlayerBase { setStopAt(1, PhaseStep.END_TURN); execute(); - assertExileCount("Lightning Bolt", 1); - assertGraveyardCount(playerA, "Lightning Bolt", 0); assertLife(playerB, 17); assertLife(playerA, 20); + assertExileCount("Lightning Bolt", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 0); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/SoulfireGrandMasterTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/SoulfireGrandMasterTest.java index fd8bed2ff1..5d7dff07e3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/SoulfireGrandMasterTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/SoulfireGrandMasterTest.java @@ -30,7 +30,6 @@ package org.mage.test.cards.abilities.other; import mage.constants.PhaseStep; import mage.constants.Zone; -import org.junit.Ignore; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -42,7 +41,7 @@ public class SoulfireGrandMasterTest extends CardTestPlayerBase { /** * Soulfire Grand Master - * Creature  Human Monk 2/2, 1W (2) + * Creature - Human Monk 2/2, 1W (2) * Lifelink * Instant and sorcery spells you control have lifelink. * {2}{U/R}{U/R}: The next time you cast an instant or sorcery spell from @@ -233,5 +232,67 @@ public class SoulfireGrandMasterTest extends CardTestPlayerBase { assertLife(playerA, 20); } + /** + * I activated the ability of Soulfire grand master, it resolved, then i cast Stoke the Flames + * on Whisperwood Elemental, my opponenet sacrificed the elemental, so stoke didnt resolve, + * but i still got the life from lifelink. + */ + @Test + public void testSoulfireStokeTheFlames() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 8); + + addCard(Zone.HAND, playerA, "Stoke the Flames"); + addCard(Zone.BATTLEFIELD, playerA, "Soulfire Grand Master", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Whisperwood Elemental", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{U/R}{U/R}:"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Stoke the Flames", "Whisperwood Elemental"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Sacrifice {this}", null ,"{this} deals 4 damage"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Stoke the Flames", 1); // no legal target left so the spell is countered and goes to graveyard + assertGraveyardCount(playerB, "Whisperwood Elemental", 1); + + assertLife(playerB, 20); + assertLife(playerA, 20); + + } + + /** + * Check if second ability resolved, the next spell that is counterer + * won't go to hand back because it did not resolve + * + */ + + @Test + public void testSoulfireCounteredSpellDontGoesBack() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 8); + + addCard(Zone.HAND, playerA, "Stoke the Flames"); + addCard(Zone.BATTLEFIELD, playerA, "Soulfire Grand Master", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.HAND, playerB, "Counterspell", 1); + addCard(Zone.BATTLEFIELD, playerB, "Whisperwood Elemental", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{U/R}{U/R}:"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Stoke the Flames", "Whisperwood Elemental"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Counterspell", "Stoke the Flames"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Counterspell", 1); + assertGraveyardCount(playerA, "Stoke the Flames", 1); // no legal target left so the spell is countered and goes to graveyard + + assertLife(playerB, 20); + assertLife(playerA, 20); + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/conditional/TheWretchedTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/conditional/TheWretchedTest.java index ec920551d0..7f8c446225 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/conditional/TheWretchedTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/conditional/TheWretchedTest.java @@ -18,14 +18,15 @@ public class TheWretchedTest extends CardTestPlayerBase { @Test public void testGainControl_One_NoRegenThusNothingIsRemovedFromCombat() { + // At end of combat, gain control of all creatures blocking The Wretched for as long as you control The Wretched. addCard(Zone.BATTLEFIELD, playerA, "The Wretched"); addCard(Zone.BATTLEFIELD, playerB, "Wall of Pine Needles"); // a 3/3 with regeneration addCard(Zone.BATTLEFIELD, playerB, "Living Wall"); // 0/6 Wall with regeneration - attack(2, playerA, "The Wretched"); - block(2, playerB, "Wall of Pine Needles", "The Wretched"); - block(2, playerB, "Living Wall", "The Wretched"); - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + attack(3, playerA, "The Wretched"); + block(3, playerB, "Wall of Pine Needles", "The Wretched"); + block(3, playerB, "Living Wall", "The Wretched"); + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); execute(); assertPermanentCount(playerA, "The Wretched", 1); @@ -37,21 +38,28 @@ public class TheWretchedTest extends CardTestPlayerBase { public void testGainControl_One_RegenWhichRemovesBlockerFromCombat() { addCard(Zone.BATTLEFIELD, playerA, "The Wretched"); + addCard(Zone.BATTLEFIELD, playerA, "Bad Moon"); // +1/+1 for black creatures + + addCard(Zone.BATTLEFIELD, playerB, "Forest"); // a 3/3 with regeneration addCard(Zone.BATTLEFIELD, playerB, "Wall of Pine Needles"); // a 3/3 with regeneration addCard(Zone.BATTLEFIELD, playerB, "Living Wall"); // 0/6 Wall with regeneration - attack(2, playerA, "The Wretched"); - block(2, playerB, "Wall of Pine Needles", "The Wretched"); - block(2, playerB, "Living Wall", "The Wretched"); + // The Wretched + // Creature — Demon - Demon 2/5 + attack(3, playerA, "The Wretched"); + block(3, playerB, "Wall of Pine Needles", "The Wretched"); + block(3, playerB, "Living Wall", "The Wretched"); - activateAbility(2, PhaseStep.DECLARE_BLOCKERS, playerB, "{G}: Regenerate {this}."); + activateAbility(3, PhaseStep.DECLARE_BLOCKERS, playerB, "{G}: Regenerate {this}."); // Wall of Pine Needles - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); execute(); assertPermanentCount(playerA, "The Wretched", 1); assertPermanentCount(playerA, "Living Wall", 1); + assertPermanentCount(playerB, "Wall of Pine Needles", 1); + } @@ -59,16 +67,19 @@ public class TheWretchedTest extends CardTestPlayerBase { public void testLoseControlOfTheWretched() { addCard(Zone.BATTLEFIELD, playerA, "The Wretched"); + addCard(Zone.BATTLEFIELD, playerB, "Wall of Pine Needles"); // a 3/3 with regeneration addCard(Zone.BATTLEFIELD, playerB, "Living Wall"); // 0/6 Wall with regeneration + addCard(Zone.BATTLEFIELD, playerB, "Island", 4); + addCard(Zone.HAND, playerB, "Control Magic"); - attack(2, playerA, "The Wretched"); - block(2, playerB, "Wall of Pine Needles", "The Wretched"); - block(2, playerB, "Living Wall", "The Wretched"); + attack(3, playerA, "The Wretched"); + block(3, playerB, "Wall of Pine Needles", "The Wretched"); + block(3, playerB, "Living Wall", "The Wretched"); - castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Control Magic", "The Wretched"); + castSpell(4, PhaseStep.POSTCOMBAT_MAIN, playerB, "Control Magic", "The Wretched"); - setStopAt(2, PhaseStep.END_TURN); + setStopAt(4, PhaseStep.END_TURN); execute(); assertPermanentCount(playerB, "The Wretched", 1); @@ -80,20 +91,24 @@ public class TheWretchedTest extends CardTestPlayerBase { public void testRegenTheWretchedThusRemovingFromCombat() { addCard(Zone.BATTLEFIELD, playerA, "The Wretched"); + addCard(Zone.HAND, playerA, "Regenerate"); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + addCard(Zone.BATTLEFIELD, playerB, "Wall of Pine Needles"); // a 3/3 with regeneration - addCard(Zone.BATTLEFIELD, playerB, "Living Wall"); // 0/6 Wall with regeneration + addCard(Zone.BATTLEFIELD, playerB, "Wall of Spears"); // 3/2 - attack(2, playerA, "The Wretched"); - block(2, playerB, "Wall of Pine Needles", "The Wretched"); - block(2, playerB, "Living Wall", "The Wretched"); - castSpell(2, PhaseStep.DECLARE_BLOCKERS, playerA, "Regenerate", "The Wretched"); + attack(3, playerA, "The Wretched"); + block(3, playerB, "Wall of Pine Needles", "The Wretched"); + block(3, playerB, "Wall of Spears", "The Wretched"); - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + castSpell(3, PhaseStep.DECLARE_BLOCKERS, playerA, "Regenerate", "The Wretched"); + + setStopAt(3, PhaseStep.POSTCOMBAT_MAIN); execute(); assertPermanentCount(playerA, "The Wretched", 1); assertPermanentCount(playerB, "Wall of Pine Needles", 1); - assertPermanentCount(playerB, "Living Wall", 1); + assertPermanentCount(playerB, "Wall of Spears", 1); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/conditional/twofaced/TwoFacedCardEffectsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/conditional/twofaced/TwoFacedCardEffectsTest.java index 722e6b8e82..4628fd55c1 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/conditional/twofaced/TwoFacedCardEffectsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/conditional/twofaced/TwoFacedCardEffectsTest.java @@ -112,4 +112,25 @@ public class TwoFacedCardEffectsTest extends CardTestPlayerBase { assertPermanentCount(playerB, "Howlpack Alpha", 1); } + /** + * Tests that triggered abilities of the frontside do not trigger if the card is transformed + * + */ + @Test + public void testTransformedDOesNotTriggerFrontsideAbilities() { + addCard(Zone.BATTLEFIELD, playerA, "Loyal Cathar"); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + addCard(Zone.HAND, playerB, "Lightning Bolt",2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Loyal Cathar"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Unhallowed Cathar"); + + setStopAt(3, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerB, "Lightning Bolt", 2); + assertPermanentCount(playerA, "Unhallowed Cathar", 0); + assertGraveyardCount(playerA, "Loyal Cathar", 1); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ElvishArchdruidTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ElvishArchdruidTest.java index daddf04663..0372d6acc5 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ElvishArchdruidTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ElvishArchdruidTest.java @@ -49,11 +49,12 @@ public class ElvishArchdruidTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); addCard(Zone.BATTLEFIELD, playerA, "Elvish Archdruid", 1); addCard(Zone.BATTLEFIELD, playerA, "Nettle Sentinel", 1); + // Pyroclasm deals 2 damage to each creature. addCard(Zone.HAND, playerA, "Pyroclasm"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Pyroclasm"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Pyroclasm"); - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); // has to be the same phase as the cast spell to see if Nettle Sentinel dies in this phase execute(); assertGraveyardCount(playerA, "Pyroclasm", 1); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/BattlefieldTriggeredAbilitiesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/BattlefieldTriggeredAbilitiesTest.java index 6a6359941b..d9340ed375 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/control/BattlefieldTriggeredAbilitiesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/BattlefieldTriggeredAbilitiesTest.java @@ -15,10 +15,16 @@ public class BattlefieldTriggeredAbilitiesTest extends CardTestPlayerBase { @Test public void testBeguilerofWillsAndPrimevalTitan() { + + // Whenever Primeval Titan enters the battlefield or attacks, you may search your library for up to two land cards, + // put them onto the battlefield tapped, then shuffle your library. addCard(Zone.BATTLEFIELD, playerA, "Primeval Titan"); addCard(Zone.LIBRARY, playerA, "Mountain", 10); + // {T}: Gain control of target creature with power less than or equal to the number of creatures you control. addCard(Zone.BATTLEFIELD, playerB, "Beguiler of Wills"); + + // Whenever Arrogant Bloodlord blocks or becomes blocked by a creature with power 1 or less, destroy Arrogant Bloodlord at end of combat. addCard(Zone.BATTLEFIELD, playerB, "Arrogant Bloodlord", 5); addCard(Zone.LIBRARY, playerB, "Mountain", 10); @@ -34,7 +40,7 @@ public class BattlefieldTriggeredAbilitiesTest extends CardTestPlayerBase { assertPermanentCount(playerB, "Beguiler of Wills", 1); assertPermanentCount(playerB, "Arrogant Bloodlord", 5); assertPermanentCount(playerB, "Primeval Titan", 1); - + // lands weren't added to playerA assertPermanentCount(playerA, "Mountain", 0); // but to playerB instead diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/IsochronScepterTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/IsochronScepterTest.java new file mode 100644 index 0000000000..a5b1a67587 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/IsochronScepterTest.java @@ -0,0 +1,145 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation 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.copy; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author BetaSteward + */ +public class IsochronScepterTest extends CardTestPlayerBase { + + + /** + * Isochron Scepter + * Artifact, 2 (2) + * Imprint — When Isochron Scepter enters the battlefield, you may exile an + * instant card with converted mana cost 2 or less from your hand. + * {2}, {T}: You may copy the exiled card. If you do, you may cast the copy + * without paying its mana cost. + * + */ + @Test + public void testImprint() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + addCard(Zone.HAND, playerA, "Isochron Scepter"); + addCard(Zone.HAND, playerA, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Isochron Scepter"); + addTarget(playerA, "Lightning Bolt"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Isochron Scepter", 1); + assertExileCount("Lightning Bolt", 1); + assertLife(playerB, 20); + + } + + @Test + public void testCopyCard() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + addCard(Zone.HAND, playerA, "Isochron Scepter"); + addCard(Zone.HAND, playerA, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Isochron Scepter"); + addTarget(playerA, "Lightning Bolt"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{2},{T}:"); + setChoice(playerA, "Yes"); + setChoice(playerA, "Yes"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Isochron Scepter", 1); + assertExileCount("Lightning Bolt", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 0); + assertLife(playerB, 17); + + } + + @Test + public void testCopyCardButDontCast() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + addCard(Zone.HAND, playerA, "Isochron Scepter"); + addCard(Zone.HAND, playerA, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Isochron Scepter"); + addTarget(playerA, "Lightning Bolt"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{2},{T}:"); + setChoice(playerA, "Yes"); + setChoice(playerA, "No"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Isochron Scepter", 1); + assertExileCount("Lightning Bolt", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 0); + assertLife(playerB, 20); + + } + + @Test + public void testAngelsGrace() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + addCard(Zone.HAND, playerA, "Isochron Scepter"); + addCard(Zone.HAND, playerA, "Angel's Grace"); + + addCard(Zone.BATTLEFIELD, playerB, "Dross Crocodile", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Isochron Scepter"); + addTarget(playerA, "Angel's Grace"); + + attack(2, playerB, "Dross Crocodile"); + attack(2, playerB, "Dross Crocodile"); + attack(2, playerB, "Dross Crocodile"); + attack(2, playerB, "Dross Crocodile"); + + activateAbility(2, PhaseStep.DECLARE_BLOCKERS, playerA, "{2},{T}:"); + setChoice(playerA, "Yes"); + setChoice(playerA, "Yes"); + + setStopAt(2, PhaseStep.END_COMBAT); + execute(); + + assertPermanentCount(playerA, "Isochron Scepter", 1); + assertExileCount("Angel's Grace", 1); + assertGraveyardCount(playerA, "Angel's Grace", 0); + + assertLife(playerA, 1); + assertLife(playerB, 20); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/ReversalOfFortuneTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/ReversalOfFortuneTest.java new file mode 100644 index 0000000000..31d1197c01 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/ReversalOfFortuneTest.java @@ -0,0 +1,90 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package org.mage.test.cards.copy; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author BetaSteward + */ +public class ReversalOfFortuneTest extends CardTestPlayerBase { + + + /** + * Reversal of Fortune + * Sorcery, 4RR (6) + * Target opponent reveals his or her hand. You may copy an instant or sorcery + * card in it. If you do, you may cast the copy without paying its mana cost. + * + */ + @Test + public void testCopyCard() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6); + addCard(Zone.HAND, playerA, "Reversal of Fortune"); + addCard(Zone.HAND, playerB, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reversal of Fortune", playerB); + addTarget(playerA, "Lightning Bolt"); + setChoice(playerA, "Yes"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Reversal of Fortune", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 0); + assertGraveyardCount(playerB, "Lightning Bolt", 0); + assertLife(playerB, 17); + + } + + @Test + public void testCopyCardButDontCast() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6); + addCard(Zone.HAND, playerA, "Reversal of Fortune"); + addCard(Zone.HAND, playerB, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Reversal of Fortune", playerB); + addTarget(playerA, "Lightning Bolt"); + setChoice(playerA, "No"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Reversal of Fortune", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 0); + assertGraveyardCount(playerB, "Lightning Bolt", 0); + assertLife(playerB, 20); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/SpelltwineTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/SpelltwineTest.java new file mode 100644 index 0000000000..dc1ed92799 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/SpelltwineTest.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 org.mage.test.cards.copy; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author BetaSteward + */ +public class SpelltwineTest extends CardTestPlayerBase { + + + /** + * Spelltwine + * Sorcery, 5U (6) + * Exile target instant or sorcery card from your graveyard and target instant + * or sorcery card from an opponent's graveyard. Copy those cards. Cast the + * copies if able without paying their mana costs. Exile Spelltwine. + * + */ + @Test + public void testCopyCards() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + addCard(Zone.HAND, playerA, "Spelltwine"); + addCard(Zone.GRAVEYARD, playerA, "Lightning Bolt"); + addCard(Zone.GRAVEYARD, playerB, "Shock"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spelltwine"); + addTarget(playerA, "Lightning Bolt"); + addTarget(playerA, "Shock"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertExileCount("Spelltwine", 1); + assertExileCount("Lightning Bolt", 1); + assertExileCount("Shock", 1); + assertLife(playerB, 15); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/CostModificationTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/CostModificationTest.java index 0e5db1f8e0..c0022e2195 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/CostModificationTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/CostModificationTest.java @@ -58,12 +58,15 @@ public class CostModificationTest extends CardTestPlayerBase { @Test public void testCostReductionWithManaSourceRestrictionWorking() { + // Artifact spells you cast cost {1} less to cast addCard(Zone.BATTLEFIELD, playerA, "Etherium Sculptor"); addCard(Zone.BATTLEFIELD, playerA, "Llanowar Elves"); + // Myr Superion {2} + // Spend only mana produced by creatures to cast Myr Superion. addCard(Zone.HAND, playerA, "Myr Superion"); - activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Add {G} to your mana pool."); + activateManaAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Add {G} to your mana pool."); castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Myr Superion"); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DryadMilitantTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DryadMilitantTest.java index 1b2ce7f42e..7e696f8d92 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DryadMilitantTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DryadMilitantTest.java @@ -79,13 +79,13 @@ public class DryadMilitantTest extends CardTestPlayerBase { } /** - * Tests if Dryad Militant dies by damage spell, the - * spell don't gets exiled + * Tests if Dryad Militant dies by destroy spell, the + * spell don't get exiled */ @Test public void testDiesByDestroy() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); addCard(Zone.HAND, playerA, "Terminate"); addCard(Zone.BATTLEFIELD, playerB, "Dryad Militant"); @@ -95,8 +95,9 @@ public class DryadMilitantTest extends CardTestPlayerBase { execute(); assertLife(playerB, 20); - - assertGraveyardCount(playerB, "Terminate", 1); + + assertHandCount(playerA, "Terminate", 0); + assertGraveyardCount(playerA, "Terminate", 1); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/GrindstoneTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/GrindstoneTest.java index 1e80057545..444b255529 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/GrindstoneTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/GrindstoneTest.java @@ -29,6 +29,7 @@ package org.mage.test.cards.replacement; import mage.constants.PhaseStep; import mage.constants.Zone; +import org.junit.Assert; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -40,11 +41,11 @@ import org.mage.test.serverside.base.CardTestPlayerBase; public class GrindstoneTest extends CardTestPlayerBase { /** - * Tests that instead of one spore counter there were two spore counters added to Pallid Mycoderm - * if Doubling Season is on the battlefield. + * Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play + * Leaving one Progenius in play */ @Test - public void testGrindstoneTest() { + public void testGrindstoneProgenius() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); // As Painter's Servant enters the battlefield, choose a color. // All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. @@ -52,18 +53,88 @@ public class GrindstoneTest extends CardTestPlayerBase { // {3}, {T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process. addCard(Zone.BATTLEFIELD, playerA, "Grindstone"); - addCard(Zone.LIBRARY, playerA, "Progenitus", 2); + // Protection from everything + // If Progenitus would be put into a graveyard from anywhere, reveal Progenitus and shuffle it into its owner's library instead. + addCard(Zone.LIBRARY, playerB, "Progenitus", 1); skipInitShuffling(); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant"); setChoice(playerA, "Blue"); activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3},{T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process."); + addTarget(playerA, playerB); setStopAt(1, PhaseStep.END_TURN); execute(); + Assert.assertEquals("Progenitus has to be in the libarary", 1, playerB.getLibrary().size()); assertPermanentCount(playerA, "Painter's Servant", 1); } + + /** + * Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play + * Iterating with two Progenius for a draw + */ + @Test + public void testGrindstoneProgeniusDraw() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); + // As Painter's Servant enters the battlefield, choose a color. + // All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. + addCard(Zone.HAND, playerA, "Painter's Servant"); + // {3}, {T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process. + addCard(Zone.BATTLEFIELD, playerA, "Grindstone"); + // Protection from everything + // If Progenitus would be put into a graveyard from anywhere, reveal Progenitus and shuffle it into its owner's library instead. + addCard(Zone.LIBRARY, playerB, "Progenitus", 2); + skipInitShuffling(); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant"); + setChoice(playerA, "Blue"); + + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3},{T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process."); + addTarget(playerA, playerB); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + Assert.assertTrue("Has to be a draw because of endless iteration", currentGame.isADraw()); + assertPermanentCount(playerA, "Painter's Servant", 1); + } + +/** + * Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play + * Iterating with two Progenius for a draw + */ + @Test + public void testGrindstoneUlamog() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); + // As Painter's Servant enters the battlefield, choose a color. + // All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. + addCard(Zone.HAND, playerA, "Painter's Servant"); + // {3}, {T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process. + addCard(Zone.BATTLEFIELD, playerA, "Grindstone"); + + // When you cast Ulamog, the Infinite Gyre, destroy target permanent. + // Annihilator 4 (Whenever this creature attacks, defending player sacrifices four permanents.) + // Ulamog is indestructible. + // When Ulamog is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library. + addCard(Zone.LIBRARY, playerB, "Ulamog, the Infinite Gyre", 2); + skipInitShuffling(); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant"); + setChoice(playerA, "Blue"); + + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3},{T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process."); + addTarget(playerA, playerB); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + // No cards in graveyard because Ulamog shuffle all cards back to Lib + assertGraveyardCount(playerB, 0); + assertPermanentCount(playerA, "Painter's Servant", 1); + } } + + diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/prevent/DeflectingPalmTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/prevent/DeflectingPalmTest.java index ecafce3fa8..4f50777cfd 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/prevent/DeflectingPalmTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/prevent/DeflectingPalmTest.java @@ -43,7 +43,7 @@ import org.mage.test.serverside.base.CardTestPlayerBase; public class DeflectingPalmTest extends CardTestPlayerBase { /** - * Tests if a damage spell is selected as source the damge is prevented and is dealt to the controller of the damage spell + * Tests if a damage spell is selected as source the damage is prevented and is dealt to the controller of the damage spell */ @Test public void testPreventDamageFromSpell() { diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/rules/DontUntapTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/rules/DontUntapTest.java new file mode 100644 index 0000000000..78fe376597 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/rules/DontUntapTest.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 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 DontUntapTest extends CardTestPlayerBase { + + /** + * Test that the attackers blocked by creatures boosted with + * Triton Tactics do not untap in their controllers next untap step + */ + @Test + public void testTritonTactics() { + // Up to two target creatures each get +0/+3 until end of turn. Untap those creatures. + // At this turn's next end of combat, tap each creature that was blocked by one of those + // creatures this turn and it doesn't untap during its controller's next untap step. + addCard(Zone.HAND, playerA, "Triton Tactics"); + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + // {T}: You gain 1 life. + addCard(Zone.BATTLEFIELD, playerA, "Soulmender", 1); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + activateAbility(4, PhaseStep.POSTCOMBAT_MAIN, playerA, "{T}: You gain 1 life"); + + attack(4, playerB, "Silvercoat Lion"); + castSpell(4, PhaseStep.DECLARE_ATTACKERS, playerA, "Triton Tactics", "Soulmender"); + block(4, playerA, "Soulmender", "Silvercoat Lion"); + + setStopAt(6, PhaseStep.DRAW); + execute(); + + assertGraveyardCount(playerA, "Triton Tactics", 1); + + assertPowerToughness(playerA, "Soulmender", 1, 1); + + assertPowerToughness(playerB, "Silvercoat Lion", 2, 2); + assertTapped("Silvercoat Lion", true); // Should be stilled tapped in turn 6 because it was blocked in turn 4 with Triton Tactics + + assertLife(playerA, 21); + assertLife(playerB, 20); + + } +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/ContagionEngineTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/ContagionEngineTest.java new file mode 100644 index 0000000000..c82415ee09 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/ContagionEngineTest.java @@ -0,0 +1,108 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation 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.single; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class ContagionEngineTest extends CardTestPlayerBase { + + // When Contagion Engine enters the battlefield, put a -1/-1 counter on each creature target player controls. + // {4}, {T}: Proliferate, then proliferate again. (You choose any number of permanents and/or players with + // counters on them, then give each another counter of a kind already there. Then do it again.) + @Test + public void testCountersArePut() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain",6); + addCard(Zone.HAND, playerA, "Contagion Engine"); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Pincher Beetles"); // 3/1 + Shroud + addCard(Zone.BATTLEFIELD, playerB, "Sacred Wolf"); // 3/1 + Hexproof + addCard(Zone.BATTLEFIELD, playerB, "Beloved Chaplain"); // 3/1 + Protection from creatures + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Contagion Engine"); + addTarget(playerA, playerB); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertPowerToughness(playerB, "Silvercoat Lion", 1, 1); + + assertGraveyardCount(playerB, "Sacred Wolf",1); + assertGraveyardCount(playerB, "Beloved Chaplain",1); + assertGraveyardCount(playerB, "Pincher Beetles",1); + + } + + @Test + public void testCountersDoubledByProliferate() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain",6); + addCard(Zone.HAND, playerA, "Contagion Engine"); + + addCard(Zone.BATTLEFIELD, playerA, "Ajani Goldmane"); + + addCard(Zone.BATTLEFIELD, playerB, "Wall of Frost"); // 0/7 + addCard(Zone.BATTLEFIELD, playerB, "Kalonian Behemoth"); // 9/9 + Shroud + addCard(Zone.BATTLEFIELD, playerB, "Plated Slagwurm"); // 8/8 + Hexproof + addCard(Zone.BATTLEFIELD, playerB, "Teysa, Envoy of Ghosts"); // 4/4 + Protection from creatures + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Contagion Engine"); + addTarget(playerA, playerB); + + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{4},{T}: Proliferate"); + setChoice(playerA, "Wall of Frost^Kalonian Behemoth^Plated Slagwurm^Teysa, Envoy of Ghosts^Ajani Goldmane"); + setChoice(playerA, "Wall of Frost^Kalonian Behemoth^Plated Slagwurm^Teysa, Envoy of Ghosts^Ajani Goldmane"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertCounterCount("Ajani Goldmane", CounterType.LOYALTY, 6); + + assertPowerToughness(playerB, "Kalonian Behemoth", 6, 6); + assertPowerToughness(playerB, "Plated Slagwurm", 5, 5); + assertPowerToughness(playerB, "Teysa, Envoy of Ghosts", 1, 1); + assertPowerToughness(playerB, "Wall of Frost", -3, 4); + + + } + +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/DungeonGeistsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/DungeonGeistsTest.java index 6e53c7e1d1..07b27ebbda 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/DungeonGeistsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/DungeonGeistsTest.java @@ -74,16 +74,20 @@ public class DungeonGeistsTest extends CardTestPlayerBase { public void testWithBlink() { addCard(Zone.BATTLEFIELD, playerA, "Island", 4); addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + // When Dungeon Geists enters the battlefield, tap target creature an opponent controls. + // That creature doesn't untap during its controller's untap step for as long as you control Dungeon Geists. addCard(Zone.HAND, playerA, "Dungeon Geists"); addCard(Zone.HAND, playerA, "Cloudshift"); addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm"); addCard(Zone.BATTLEFIELD, playerB, "Elite Vanguard"); - addTarget(playerA, "Craw Wurm"); // first target Craw Wurm - addTarget(playerA, "Elite Vanguard"); // after Cloudshift effect (return back to battlefield) target Elite Vanguard castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dungeon Geists"); + addTarget(playerA, "Craw Wurm"); // first target Craw Wurm + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Cloudshift", "Dungeon Geists"); + addTarget(playerA, "Elite Vanguard"); // after Cloudshift effect (return back to battlefield) target Elite Vanguard + setStopAt(2, PhaseStep.DRAW); execute(); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/FracturingGustTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/FracturingGustTest.java index a3e7c4bbd7..3c91554cf7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/FracturingGustTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/FracturingGustTest.java @@ -44,8 +44,12 @@ public class FracturingGustTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Forest", 5); addCard(Zone.HAND, playerA, "Fracturing Gust", 1); + // Players can't gain life. + // At the beginning of your upkeep, Witch Hunt deals 4 damage to you. + // At the beginning of your end step, target opponent chosen at random gains control of Witch Hunt. addCard(Zone.BATTLEFIELD, playerB, "Witch Hunt", 1); + // Destroy all artifacts and enchantments. You gain 2 life for each permanent destroyed this way. castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Fracturing Gust"); setStopAt(1, PhaseStep.BEGIN_COMBAT); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/GutterGrimeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/GutterGrimeTest.java index 0dcf98fcc5..d869f5ed17 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/GutterGrimeTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/GutterGrimeTest.java @@ -36,7 +36,10 @@ public class GutterGrimeTest extends CardTestPlayerBase { @Test public void testScenario2() { + // Creature tokens you control get +1/+1 and have vigilance. addCard(Zone.BATTLEFIELD, playerA, "Intangible Virtue"); + // Whenever a nontoken creature you control dies, put a slime counter on Gutter Grime, then put a green Ooze creature token onto + // the battlefield with "This creature's power and toughness are each equal to the number of slime counters on Gutter Grime." addCard(Zone.BATTLEFIELD, playerA, "Gutter Grime"); addCard(Zone.BATTLEFIELD, playerA, "Runeclaw Bear", 1); addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); @@ -44,8 +47,15 @@ public class GutterGrimeTest extends CardTestPlayerBase { castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", "Runeclaw Bear"); - setStopAt(3, PhaseStep.END_TURN); + setStopAt(1, PhaseStep.END_TURN); execute(); + + assertGraveyardCount(playerA, "Runeclaw Bear", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 1); + assertPermanentCount(playerA, "Gutter Grime", 1); + assertPermanentCount(playerA, "Intangible Virtue", 1); + + assertPermanentCount(playerA, "Ooze", 1); assertPowerToughness(playerA, "Ooze", 2, 2, Filter.ComparisonScope.Any); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/HuntmasterOfTheFellsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/HuntmasterOfTheFellsTest.java index a2f7fc241f..21e80c1428 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/HuntmasterOfTheFellsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/HuntmasterOfTheFellsTest.java @@ -38,7 +38,6 @@ public class HuntmasterOfTheFellsTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); addCard(Zone.BATTLEFIELD, playerA, "Mountain"); addCard(Zone.HAND, playerA, "Huntmaster of the Fells"); - addCard(Zone.BATTLEFIELD, playerB, "Ornithopter"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Huntmaster of the Fells"); setStopAt(3, PhaseStep.DRAW); @@ -49,7 +48,6 @@ public class HuntmasterOfTheFellsTest extends CardTestPlayerBase { assertPermanentCount(playerA, "Wolf", 1); assertPermanentCount(playerA, "Huntmaster of the Fells", 0); assertPermanentCount(playerA, "Ravager of the Fells", 1); - assertPermanentCount(playerB, "Ornithopter", 0); } /** @@ -60,7 +58,6 @@ public class HuntmasterOfTheFellsTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); addCard(Zone.BATTLEFIELD, playerA, "Mountain"); addCard(Zone.HAND, playerA, "Huntmaster of the Fells"); - addCard(Zone.BATTLEFIELD, playerB, "Ornithopter"); addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2); addCard(Zone.HAND, playerB, "Lightning Bolt", 2); @@ -76,6 +73,5 @@ public class HuntmasterOfTheFellsTest extends CardTestPlayerBase { assertPermanentCount(playerA, "Wolf", 2); assertPermanentCount(playerA, "Ravager of the Fells", 0); // transformed back assertPermanentCount(playerA, "Huntmaster of the Fells", 1); - assertPermanentCount(playerB, "Ornithopter", 0); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/ParallaxWaveTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/ParallaxWaveTest.java index 9e0cf70631..e9afcbd6d7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/ParallaxWaveTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/ParallaxWaveTest.java @@ -60,8 +60,12 @@ public class ParallaxWaveTest extends CardTestPlayerBase { */ @Test public void testFirstExileHandlingOfItself() { + // Each other non-Aura enchantment is a creature with power and toughness each equal to its converted mana cost. It's still an enchantment. addCard(Zone.BATTLEFIELD, playerA, "Opalescence"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + // Fading 5 (This enchantment enters the battlefield with five fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.) + // Remove a fade counter from Parallax Wave: Exile target creature. + // When Parallax Wave leaves the battlefield, each player returns to the battlefield all cards he or she owns exiled with Parallax Wave. addCard(Zone.HAND, playerA, "Parallax Wave"); addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/TurnToFrogTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/TurnToFrogTest.java index 5da3f1b6fb..ce021a47f0 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/TurnToFrogTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/TurnToFrogTest.java @@ -19,8 +19,10 @@ public class TurnToFrogTest extends CardTestPlayerBase { public void testCard() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + // {2}{R}{G}: Until end of turn, Raging Ravine becomes a 3/3 red and green Elemental creature with "Whenever this creature attacks, put a +1/+1 counter on it." It's still a land. addCard(Zone.BATTLEFIELD, playerA, "Raging Ravine"); addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + // Until end of turn, target creature loses all abilities and becomes a blue Frog with base power and toughness 1/1. addCard(Zone.HAND, playerB, "Turn to Frog"); activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{R}{G}: Until end of turn, {this} becomes a 3/3 red and green Elemental creature with \"Whenever this creature attacks, put a +1/+1 counter on it.\" It's still a land."); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JournexToNowhereTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JournexToNowhereTest.java index ddb20debb0..9199ba892e 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JournexToNowhereTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/JournexToNowhereTest.java @@ -114,9 +114,9 @@ public class JournexToNowhereTest extends CardTestPlayerBase { /* Journey is played and targets the creature as it enters the battlefield. - The Journey will be returned to hand before the ability reolves. + The Journey will be returned to hand before the ability resolves. The Journey will be played again targeting another creature. - The journey will be disencahnted later, so only the second creatufre has to return to battlefield. + The Journey will be disenchanted later, so only the second creature has to return to battlefield. */ @Test diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SoulWardenTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SoulWardenTest.java index 8efda10359..df49fb232f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SoulWardenTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SoulWardenTest.java @@ -21,10 +21,11 @@ public class SoulWardenTest extends CardTestPlayerBase { public void testDisabledEffectOnChangeZone() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); addCard(Zone.HAND, playerA, "Lightning Bolt"); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); addCard(Zone.HAND, playerA, "Elite Vanguard", 2); addCard(Zone.BATTLEFIELD, playerA, "Soul Warden", 1); + // Creature 2/1 castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Elite Vanguard"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", "Soul Warden"); castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Elite Vanguard"); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/WorlgorgerDragonTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/WorlgorgerDragonTest.java new file mode 100644 index 0000000000..37603d2c2b --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/WorlgorgerDragonTest.java @@ -0,0 +1,54 @@ +/* + * 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 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 WorlgorgerDragonTest extends CardTestPlayerBase { + + /** + * Tests that exiled permanents return to battlefield + */ + @Test + public void testDisabledEffectOnChangeZone() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6); + addCard(Zone.HAND, playerA, "Worldgorger Dragon"); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + addCard(Zone.BATTLEFIELD, playerA, "Gerrard's Battle Cry", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); + // Destroy target nonartifact, nonblack creature. It can't be regenerated. + addCard(Zone.HAND, playerB, "Terror", 1); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Worldgorger Dragon"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Terror", "Worldgorger Dragon"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertGraveyardCount(playerA, "Worldgorger Dragon", 1); + assertGraveyardCount(playerB, "Terror", 1); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerA, "Gerrard's Battle Cry", 1); + + } + +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BrainMaggotTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BrainMaggotTest.java index 3c7a4a40ea..e8056826a7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BrainMaggotTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BrainMaggotTest.java @@ -88,7 +88,7 @@ public class BrainMaggotTest extends CardTestPlayerBase { public void testCardFromHandWillBeExiledAndReturnMesmericFiend() { addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); addCard(Zone.HAND, playerA, "Mesmeric Fiend", 2); - + // Sacrifice a creature: Put a +1/+1 counter on Bloodflow Connoisseur. addCard(Zone.HAND, playerB, "Bloodflow Connoisseur", 1); addCard(Zone.HAND, playerB, "Lightning Bolt", 1); addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/HarvesterOfSoulsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/HarvesterOfSoulsTest.java index 750a0b7c82..7f1e00812f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/HarvesterOfSoulsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/HarvesterOfSoulsTest.java @@ -21,14 +21,19 @@ public class HarvesterOfSoulsTest extends CardTestPlayerBase { public void testDisabledEffectOnChangeZone() { addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); - addCard(Zone.HAND, playerA, "Day of Judgment", 1); + addCard(Zone.HAND, playerA, "Day of Judgment", 1); addCard(Zone.HAND, playerA, "Thatcher Revolt", 1); + // Whenever another nontoken creature dies, you may draw a card. addCard(Zone.BATTLEFIELD, playerA, "Harvester of Souls", 1); + addCard(Zone.BATTLEFIELD, playerA, "Craw Wurm", 1); + // Whenever Arrogant Bloodlord blocks or becomes blocked by a creature with power 1 or less, destroy Arrogant Bloodlord at end of combat. addCard(Zone.BATTLEFIELD, playerB, "Arrogant Bloodlord", 1); - + + // Put three 1/1 red Human creature tokens with haste onto the battlefield. Sacrifice those tokens at the beginning of the next end step. castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thatcher Revolt"); + // Destroy all creatures. castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Day of Judgment"); setStopAt(1, PhaseStep.BEGIN_COMBAT); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/ServantOfTheScaleTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/ServantOfTheScaleTest.java new file mode 100644 index 0000000000..a4804b84ad --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/ServantOfTheScaleTest.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 org.mage.test.cards.triggers.dies; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class ServantOfTheScaleTest extends CardTestPlayerBase { + + /** + * Tests that the dies triggered ability distributes + * the +1/+1 counters on Servant of the Scale + * + */ + @Test + public void testDiesTriggeredAbility() { + // Servant of the Scale enters the battlefield with a +1/+1 counter on it. + // When Servant of the Scale dies, put X +1/+1 counters on target creature you control, where X is the number of +1/+1 counter on Servant of the Scale. + addCard(Zone.HAND, playerA, "Servant of the Scale"); + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain"); + addCard(Zone.HAND, playerB, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Servant of the Scale"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Servant of the Scale"); + addTarget(playerA, "Silvercoat Lion"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + assertGraveyardCount(playerA, "Servant of the Scale", 1); + + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 3,3); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SidisiBroodTyrantTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SidisiBroodTyrantTest.java new file mode 100644 index 0000000000..2971d74545 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SidisiBroodTyrantTest.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 org.mage.test.cards.triggers.dies; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class SidisiBroodTyrantTest extends CardTestPlayerBase { + + /** + * Tests that if Sidisi, Brood Tyrant leaves the battlefield + * before it's first ability resolves, there will be no Zombie token added to the battlefield + * + */ + @Test + public void testDiesTriggeredAbility() { + // {1}{B}{G}{U} + // Whenever Sidisi, Brood Tyrant enters the battlefield or attacks, put the top three cards of your library into your graveyard + // Whenever one or more creature cards are put into your graveyard from your library, put a 2/2 black Zombie creature token onto the battlefield. + addCard(Zone.HAND, playerA, "Sidisi, Brood Tyrant"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 2); + skipInitShuffling(); + + addCard(Zone.BATTLEFIELD, playerB, "Mountain"); + addCard(Zone.HAND, playerB, "Lightning Bolt"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sidisi, Brood Tyrant"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", "Sidisi, Brood Tyrant", "Whenever {this} enters the battlefield"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + assertGraveyardCount(playerA, "Sidisi, Brood Tyrant", 1); + + assertGraveyardCount(playerA, 4); + assertPermanentCount(playerA, "Zombie", 0); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/ThragtuskTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/ThragtuskTest.java new file mode 100644 index 0000000000..29ffd2b587 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/ThragtuskTest.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 org.mage.test.cards.triggers.dies; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * Thragtusk - Beast {4}{G} + * When Thragtusk enters the battlefield, you gain 5 life. + * When Thragtusk leaves the battlefield, put a 3/3 green Beast creature token onto the battlefield. + * + * @author LevelX2 + */ +public class ThragtuskTest extends CardTestPlayerBase { + + /** + * Test if a Thragtusk is copied by a PhyrexianMetamorph + * that both triggers cotrrect work + */ + @Test + public void testPhyrexianMetamorph() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 4); + // You may have Phyrexian Metamorph enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types + addCard(Zone.HAND, playerA, "Phyrexian Metamorph", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 6); + addCard(Zone.HAND, playerB, "Public Execution", 1); + addCard(Zone.BATTLEFIELD, playerB, "Thragtusk", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phyrexian Metamorph"); + setChoice(playerA, "Yes"); + setChoice(playerA, "Thragtusk"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Public Execution", "Thragtusk"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerB, "Thragtusk", 1); + + assertGraveyardCount(playerA,"Phyrexian Metamorph", 1); + assertGraveyardCount(playerB,"Public Execution", 1); + + assertLife(playerA, 25); + assertLife(playerB, 20); // Thragtusk ETB ability does not trigger if set to battlefield on test game start + + assertPermanentCount(playerA, "Beast", 1); + + } + /** + * Test if a Thragtusk is copied by a Phyrexian Metamorph + * that leave battlefield ability does not work, if + * the copy left all abilities by Turn to Frog + */ + + @Test + @Ignore // test fails because of bug + public void testPhyrexianMetamorphTurnToFrog() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 4); + // You may have Phyrexian Metamorph enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types + addCard(Zone.HAND, playerA, "Phyrexian Metamorph", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 6); + addCard(Zone.HAND, playerB, "Public Execution", 1); + addCard(Zone.BATTLEFIELD, playerB, "Thragtusk", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phyrexian Metamorph"); + setChoice(playerA, "Yes"); + setChoice(playerA, "Thragtusk"); + + castSpell(1, PhaseStep.BEGIN_COMBAT, playerB, "Turn to Frog", "Thragtusk"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Public Execution", "Thragtusk"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerB, "Thragtusk", 1); + + assertGraveyardCount(playerA,"Phyrexian Metamorph", 1); + assertGraveyardCount(playerB,"Public Execution", 1); + + assertLife(playerA, 25); + assertLife(playerB, 20); // Thragtusk ETB ability does not trigger if set to battlefield on test game start + + assertPermanentCount(playerA, "Beast", 0); + + } + +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/state/SynodCenturionTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/state/SynodCenturionTest.java new file mode 100644 index 0000000000..fee51299c4 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/state/SynodCenturionTest.java @@ -0,0 +1,66 @@ +/* + * 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 org.mage.test.cards.triggers.state; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class SynodCenturionTest extends CardTestPlayerBase { + + + /** + * Check that Synod Centurion gets sacrificed if no other artifacts are on the battlefield + * + */ + @Test + public void testAlone() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6); + addCard(Zone.BATTLEFIELD, playerA, "Demon's Horn"); + addCard(Zone.HAND, playerA, "Shatter"); + addCard(Zone.HAND, playerA, "Synod Centurion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Synod Centurion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Shatter", "Demon's Horn"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Demon's Horn", 1); + assertGraveyardCount(playerA, "Shatter", 1); + assertGraveyardCount(playerA, "Synod Centurion", 1); + } + + /** + * Check that Synod Centurion gets sacrificed if the only other + * artifact left the battlefiled for a short time + * + */ + @Test + public void testWithFlicker() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + addCard(Zone.BATTLEFIELD, playerA, "Bottle Gnomes"); + addCard(Zone.HAND, playerA, "Cloudshift"); + addCard(Zone.HAND, playerA, "Synod Centurion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Synod Centurion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Cloudshift", "Bottle Gnomes"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Bottle Gnomes", 1); + assertGraveyardCount(playerA, "Cloudshift", 1); + assertGraveyardCount(playerA, "Synod Centurion", 1); + } +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/watchers/SiftThroughSandsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/watchers/SiftThroughSandsTest.java index 13b4b6c999..b199e6e659 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/watchers/SiftThroughSandsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/watchers/SiftThroughSandsTest.java @@ -58,6 +58,9 @@ public class SiftThroughSandsTest extends CardTestPlayerBase { } + // TODO: This test fails sometimes if building the complete test project + // cause is still unknown + // test that The Unspeakable is not put onto the battlefield @Test public void testNotTheUnspeakable() { 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 bef9fb7f94..7e97f411d0 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 @@ -22,7 +22,7 @@ public class LastKnownInformationTest extends CardTestPlayerBase { * 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 puts 2 tokens onto battlefield because enchanted Safehold Elite + * Murder Investigation has to put 2 tokens onto battlefield because enchanted Safehold Elite * was 2/2 * * @author LevelX @@ -33,10 +33,12 @@ public class LastKnownInformationTest extends CardTestPlayerBase { // Creature - Elf Scout // 2/2 // Persist - addCard(Zone.BATTLEFIELD, playerA, "Safehold Elite"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - addCard(Zone.HAND, playerA, "Murder Investigation",2); + // {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, playerB, "Lightning Bolt",2); addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2); @@ -45,16 +47,18 @@ public class LastKnownInformationTest extends CardTestPlayerBase { castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite"); // choose triggered ability order - playerA.addChoice("When enchanted creature dies, put X 1/1 red and white Soldier creature token with haste onto the battlefield, where X is its power."); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite", "When enchanted creature dies, put X 1/1 red and white Soldier creature token with haste onto the battlefield, where X is its power"); + playerA.addChoice("When enchanted creature dies"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Safehold Elite", "When enchanted creature dies"); setStopAt(1, PhaseStep.END_TURN); execute(); - assertActionCount(playerB, 0); + assertGraveyardCount(playerB, "Lightning Bolt", 2); assertPermanentCount(playerA, "Safehold Elite", 0); // because enchanted Safehold Elite's P/T was 2/2, Murder Investigation has to put 2 Soldier onto the battlefield assertPermanentCount(playerA, "Soldier", 2); + + assertActionCount(playerB, 0); } diff --git a/Mage.Tests/src/test/java/org/mage/test/player/RandomPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/RandomPlayer.java index 29b8faed42..435c57719d 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/RandomPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/RandomPlayer.java @@ -190,9 +190,13 @@ public class RandomPlayer extends ComputerPlayer { binary.insert(0, "0"); //pad with zeros } for (int i = 0; i < attackersList.size(); i++) { - if (binary.charAt(i) == '1') - game.getCombat().declareAttacker(attackersList.get(i).getId(), defenderId, game); - } + if (binary.charAt(i) == '1') { + setStoredBookmark(game.bookmarkState()); // makes it possible to UNDO a declared attacker with costs from e.g. Propaganda + if (!game.getCombat().declareAttacker(attackersList.get(i).getId(), defenderId, playerId, game)) { + game.undo(playerId); + } + } + } actionCount++; } 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 7d447091f6..a3811e1bfd 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 @@ -69,6 +69,7 @@ import mage.cards.Card; import mage.constants.Zone; import mage.target.TargetSource; import mage.target.common.TargetCardInHand; +import mage.target.common.TargetPermanentOrPlayer; /** * @@ -301,23 +302,40 @@ public class TestPlayer extends ComputerPlayer { @Override public boolean choose(Outcome outcome, Target target, UUID sourceId, Game game, Map options) { if (!choices.isEmpty()) { - if (target instanceof TargetPermanent) { - for (Permanent permanent : game.getBattlefield().getAllActivePermanents((FilterPermanent)target.getFilter(), game)) { - for (String choose2: choices) { - if (permanent.getName().equals(choose2)) { - if (((TargetPermanent)target).canTarget(playerId, permanent.getId(), null, game) && !target.getTargets().contains(permanent.getId())) { - target.add(permanent.getId(), game); - choices.remove(choose2); - return true; + if ((target instanceof TargetPermanent) || (target instanceof TargetPermanentOrPlayer)) { // player target not implemted yet + FilterPermanent filterPermanent; + if (target instanceof TargetPermanentOrPlayer) { + filterPermanent = ((TargetPermanentOrPlayer) target).getFilterPermanent(); + } else { + filterPermanent = ((TargetPermanent) target).getFilter(); + } + for (String choose2: choices) { + String[] targetList = choose2.split("\\^"); + boolean targetFound = false; + for (String targetName: targetList) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filterPermanent, game)) { + if (target.getTargets().contains(permanent.getId())) { + continue; } - } else if ((permanent.getName()+"-"+permanent.getExpansionSetCode()).equals(choose2)) { - if (((TargetPermanent)target).canTarget(playerId, permanent.getId(), null, game) && !target.getTargets().contains(permanent.getId())) { - target.add(permanent.getId(), game); - choices.remove(choose2); - return true; + if (permanent.getName().equals(targetName)) { + if (target.isNotTarget() || ((TargetPermanent)target).canTarget(playerId, permanent.getId(), null, game)) { + target.add(permanent.getId(), game); + targetFound = true; + break; + } + } else if ((permanent.getName()+"-"+permanent.getExpansionSetCode()).equals(targetName)) { + if (target.isNotTarget() || ((TargetPermanent)target).canTarget(playerId, permanent.getId(), null, game)) { + target.add(permanent.getId(), game); + targetFound = true; + break; + } } } } + if (targetFound) { + choices.remove(choose2); + return true; + } } } if (target instanceof TargetPlayer) { @@ -362,7 +380,7 @@ public class TestPlayer extends ComputerPlayer { @Override public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) { if (!targets.isEmpty()) { - if (target instanceof TargetPermanent) { + if ((target instanceof TargetPermanent) || (target instanceof TargetPermanentOrPlayer)) { for (String targetDefinition: targets) { String[] targetList = targetDefinition.split("\\^"); boolean targetFound = false; @@ -436,7 +454,7 @@ public class TestPlayer extends ComputerPlayer { public TriggeredAbility chooseTriggeredAbility(List abilities, Game game) { if (!choices.isEmpty()) { for(TriggeredAbility ability :abilities) { - if (choices.get(0).equals(ability.toString())) { + if (ability.toString().startsWith(choices.get(0))) { choices.remove(0); return ability; } @@ -484,6 +502,18 @@ public class TestPlayer extends ComputerPlayer { return super.announceXCost(min, max, message, game, ability, null); } + @Override + public int getAmount(int min, int max, String message, Game game) { + if (!choices.isEmpty()) { + if (choices.get(0).startsWith("X=")) { + int xValue = Integer.parseInt(choices.get(0).substring(2)); + choices.remove(0); + return xValue; + } + } + return super.getAmount(min, max, message, game); + } + protected Permanent findPermanent(FilterPermanent filter, UUID controllerId, Game game) { List permanents = game.getBattlefield().getAllActivePermanents(filter, controllerId, game); if (permanents.size() > 0) { diff --git a/Mage/src/mage/ConditionalMana.java b/Mage/src/mage/ConditionalMana.java index 697c8a4914..4f0d17293b 100644 --- a/Mage/src/mage/ConditionalMana.java +++ b/Mage/src/mage/ConditionalMana.java @@ -66,16 +66,22 @@ public class ConditionalMana extends Mana implements Serializable { */ private UUID manaProducerId; + /** + * UUID originalId of source ability for mana. + */ + private UUID manaProducerOriginalId; + public ConditionalMana(Mana mana) { super(mana); } - public ConditionalMana(ConditionalMana conditionalMana) { + public ConditionalMana(final ConditionalMana conditionalMana) { super(conditionalMana); conditions = conditionalMana.conditions; scope = conditionalMana.scope; staticText = conditionalMana.staticText; manaProducerId = conditionalMana.manaProducerId; + manaProducerOriginalId = conditionalMana.manaProducerOriginalId; } public void addCondition(Condition condition) { @@ -154,6 +160,14 @@ public class ConditionalMana extends Mana implements Serializable { public void setManaProducerId(UUID manaProducerId) { this.manaProducerId = manaProducerId; } + + public UUID getManaProducerOriginalId() { + return manaProducerOriginalId; + } + + public void setManaProducerOriginalId(UUID manaProducerOriginalId) { + this.manaProducerOriginalId = manaProducerOriginalId; + } public void clear(ManaType manaType) { switch(manaType) { diff --git a/Mage/src/mage/MageObjectReference.java b/Mage/src/mage/MageObjectReference.java index 8d5237807b..7edac3720b 100644 --- a/Mage/src/mage/MageObjectReference.java +++ b/Mage/src/mage/MageObjectReference.java @@ -32,7 +32,6 @@ import java.util.UUID; import mage.cards.Card; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.game.stack.Spell; /** * A object reference that takes zone changes into account. @@ -65,10 +64,11 @@ public class MageObjectReference implements Comparable { public MageObjectReference(UUID sourceId, Game game) { this.sourceId = sourceId; MageObject mageObject = game.getObject(sourceId); - if (mageObject != null) + if (mageObject != null) { this.zoneChangeCounter = mageObject.getZoneChangeCounter(game); - else - this.zoneChangeCounter = 0; + } else { + throw new IllegalArgumentException("The provided sourceId is not connected to an object in the game"); + } } public UUID getSourceId() { @@ -109,7 +109,10 @@ public class MageObjectReference implements Comparable { } public boolean refersTo(MageObject mageObject, Game game) { - return mageObject.getId().equals(sourceId) && this.zoneChangeCounter == mageObject.getZoneChangeCounter(game); + if (mageObject != null) { + return mageObject.getId().equals(sourceId) && this.zoneChangeCounter == mageObject.getZoneChangeCounter(game); + } + return false; } public Permanent getPermanent(Game game) { diff --git a/Mage/src/mage/abilities/AbilitiesImpl.java b/Mage/src/mage/abilities/AbilitiesImpl.java index daca919b29..199a795464 100644 --- a/Mage/src/mage/abilities/AbilitiesImpl.java +++ b/Mage/src/mage/abilities/AbilitiesImpl.java @@ -31,6 +31,7 @@ package mage.abilities; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.UUID; import mage.abilities.common.ZoneChangeTriggeredAbility; @@ -249,7 +250,8 @@ public class AbilitiesImpl extends ArrayList implements Ab @Override public boolean contains(T ability) { - for (T test: this) { + for (Iterator iterator = this.iterator(); iterator.hasNext();) { // simple loop can cause java.util.ConcurrentModificationException + T test = iterator.next(); // Checking also by getRule() without other restrictions is a problem when a triggered ability will be copied to a permanent that had the same ability // already before the copy. Because then it keeps the triggered ability twice and it triggers twice. // e.g. 2 Biovisonary and one enchanted with Infinite Reflection diff --git a/Mage/src/mage/abilities/Ability.java b/Mage/src/mage/abilities/Ability.java index 44a9fc1336..7d39b32193 100644 --- a/Mage/src/mage/abilities/Ability.java +++ b/Mage/src/mage/abilities/Ability.java @@ -47,6 +47,7 @@ import mage.constants.EffectType; import mage.constants.Zone; import mage.game.Controllable; import mage.game.Game; +import mage.game.events.GameEvent; import mage.players.Player; import mage.target.Target; import mage.target.Targets; @@ -382,10 +383,10 @@ public interface Ability extends Controllable, Serializable { * * @param game * @param source - * @param checkLKI + * @param event * @return */ - boolean isInUseableZone(Game game, MageObject source, boolean checkLKI); + boolean isInUseableZone(Game game, MageObject source, GameEvent event); /** * Returns true if this ability has to be shown as topmost of all the rules of the object @@ -499,8 +500,9 @@ public interface Ability extends Controllable, Serializable { * an ability was activated. * * @param mageObject + * @param game */ - void setSourceObject(MageObject mageObject); + void setSourceObject(MageObject mageObject, Game game); /** * Returns the object that actually existed while a ability triggerd or @@ -511,4 +513,17 @@ public interface Ability extends Controllable, Serializable { * @return */ MageObject getSourceObject(Game game); + + int getSourceObjectZoneChangeCounter(); + + /** + * Returns the object that actually existed while a ability triggerd or + * an ability was activated only if it has not changed zone meanwhile. + * If not set yet, the current object will be retrieved from the game. + * + * @param game + * @return + */ + + MageObject getSourceObjectIfItStillExists(Game game); } diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index 02c4c47192..3ad6958cd7 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; import mage.MageObject; +import mage.MageObjectReference; import mage.Mana; import mage.abilities.costs.AdjustingSourceCosts; import mage.abilities.costs.AlternativeCost; @@ -68,7 +69,6 @@ import mage.game.command.Emblem; import mage.game.events.GameEvent; import mage.game.events.ManaEvent; import mage.game.permanent.Permanent; -import mage.game.permanent.PermanentCard; import mage.game.stack.Spell; import mage.game.stack.StackAbility; import mage.players.Player; @@ -109,6 +109,7 @@ public abstract class AbilityImpl implements Ability { protected boolean activated = false; protected boolean worksFaceDown = false; protected MageObject sourceObject; + protected int sourceObjectZoneChangeCounter; protected List watchers = null; protected List subAbilities = null; @@ -160,6 +161,7 @@ public abstract class AbilityImpl implements Ability { this.worksFaceDown = ability.worksFaceDown; this.abilityWord = ability.abilityWord; this.sourceObject = ability.sourceObject; + this.sourceObjectZoneChangeCounter = ability.sourceObjectZoneChangeCounter; } @Override @@ -213,7 +215,20 @@ public abstract class AbilityImpl implements Ability { else { game.addEffect((ContinuousEffect) effect, this); } - // some effects must be applied before next effect is resolved, because effect is dependend. + /** + * All restrained trigger events are fired now. + * To restrain the events is mainly neccessary because of the movement of multiple object at once. + * If the event is fired directly as one object moved, other objects are not already in the correct zone + * to check for their effects. (e.g. Valakut, the Molten Pinnacle) + */ + game.getState().handleSimultaneousEvent(game); + game.resetShortLivingLKI(); + /** + * game.applyEffects() has to be done at least for every effect that moves cards/permanent between zones, + * so Static effects work as intened if dependant from the moved objects zone it is in + * Otherwise for example were static abilities with replacement effects deactivated to late + * Example: {@link org.mage.test.cards.replacement.DryadMilitantTest#testDiesByDestroy testDiesByDestroy} + */ if (effect.applyEffectsAfter()) { game.applyEffects(); } @@ -236,6 +251,8 @@ public abstract class AbilityImpl implements Ability { return false; } + getSourceObject(game); + /* 20130201 - 601.2b * If the player wishes to splice any cards onto the spell (see rule 702.45), he * or she reveals those cards in his or her hand. @@ -243,15 +260,15 @@ public abstract class AbilityImpl implements Ability { if (this.abilityType.equals(AbilityType.SPELL)) { game.getContinuousEffects().applySpliceEffects(this, game); } - - // TODO: Because all (non targeted) choices have to be done during resolution - // this has to be removed, if all using effects are changed - sourceObject = this.getSourceObject(game); + + if (sourceObject != null) { sourceObject.adjustChoices(this, game); } + // 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().setMode(this.getModes().get(modeId)); + this.getModes().setActiveMode(modeId); if (getChoices().size() > 0 && getChoices().choose(game, this) == false) { logger.debug("activate failed - choice"); return false; @@ -290,7 +307,7 @@ public abstract class AbilityImpl implements Ability { String announceString = handleOtherXCosts(game, controller); for (UUID modeId :this.getModes().getSelectedModes()) { - this.getModes().setMode(this.getModes().get(modeId)); + this.getModes().setActiveMode(modeId); //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 @@ -312,9 +329,9 @@ public abstract class AbilityImpl implements Ability { sourceObject.adjustTargets(this, game); } if (getTargets().size() > 0 && getTargets().chooseTargets(getEffects().get(0).getOutcome(), this.controllerId, this, game) == false) { - if (variableManaCost != null || announceString != null) { + if ((variableManaCost != null || announceString != null) && !game.isSimulation()) { game.informPlayer(controller, new StringBuilder(sourceObject != null ? sourceObject.getLogName(): "").append(": no valid targets with this value of X").toString()); - } + } return false; // when activation of ability is canceled during target selection } } // end modes @@ -370,13 +387,15 @@ public abstract class AbilityImpl implements Ability { logger.debug("activate failed - non mana costs"); return false; } - // inform about x costs now, so canceled announcements are not shown in the log - if (announceString != null) { - game.informPlayers(announceString); - } - if (variableManaCost != null) { - int xValue = getManaCostsToPay().getX(); - game.informPlayers(new StringBuilder(controller.getName()).append(" announces a value of ").append(xValue).append(" for ").append(variableManaCost.getText()).toString()); + if (!game.isSimulation()) { + // inform about x costs now, so canceled announcements are not shown in the log + if (announceString != null) { + game.informPlayers(announceString); + } + if (variableManaCost != null) { + int xValue = getManaCostsToPay().getX(); + game.informPlayers(new StringBuilder(controller.getName()).append(" announces a value of ").append(xValue).append(" for ").append(variableManaCost.getText()).toString()); + } } activated = true; // fire if tapped for mana (may only fire now because else costs of ability itself can be payed with mana of abilities that trigger for that event @@ -660,16 +679,18 @@ public abstract class AbilityImpl implements Ability { @Override public List getWatchers() { - if (watchers != null) + if (watchers != null) { return watchers; - else + } else { return emptyWatchers; + } } @Override public void addWatcher(Watcher watcher) { - if (watchers == null) + if (watchers == null) { watchers = new ArrayList<>(); + } watcher.setSourceId(this.sourceId); watcher.setControllerId(this.controllerId); watchers.add(watcher); @@ -677,16 +698,18 @@ public abstract class AbilityImpl implements Ability { @Override public List getSubAbilities() { - if (subAbilities != null) + if (subAbilities != null) { return subAbilities; - else + } else { return emptyAbilities; + } } @Override public void addSubAbility(Ability ability) { - if (subAbilities == null) + if (subAbilities == null) { subAbilities = new ArrayList<>(); + } ability.setSourceId(this.sourceId); ability.setControllerId(this.controllerId); subAbilities.add(ability); @@ -842,8 +865,14 @@ public abstract class AbilityImpl implements Ability { return false; } + /** + * + * @param game + * @param source + * @return + */ @Override - public boolean isInUseableZone(Game game, MageObject source, boolean checkLKI) { + public boolean isInUseableZone(Game game, MageObject source, GameEvent event) { if (zone.equals(Zone.COMMAND)) { if (this.getSourceId() == null) { // commander effects return true; @@ -855,14 +884,6 @@ public abstract class AbilityImpl implements Ability { } } - // try LKI first - if (checkLKI) { - MageObject lkiTest = game.getShortLivingLKI(getSourceId(), zone); - if (lkiTest != null) { - return true; - } - } - MageObject object; UUID parameterSourceId; // for singleton abilities like Flying we can't rely on abilities' source because it's only once in continuous effects @@ -876,22 +897,20 @@ public abstract class AbilityImpl implements Ability { } if (object != null && !object.getAbilities().contains(this)) { - boolean found = false; - // unfortunately we need to handle double faced cards separately and only this way - if (object instanceof PermanentCard) { - if (((PermanentCard)object).canTransform()) { - PermanentCard permanent = (PermanentCard)object; - found = permanent.getSecondCardFace().getAbilities().contains(this) || permanent.getCard().getAbilities().contains(this); - } + if (object instanceof Permanent) { + return false; } else { // check if it's an ability that is temporary gained to a card Abilities otherAbilities = game.getState().getAllOtherAbilities(this.getSourceId()); - found = otherAbilities != null && otherAbilities.contains(this); - } - if (!found) { - return false; + if (otherAbilities == null || !otherAbilities.contains(this)) { + return false; + } } } + // check agains shortLKI for effects that move multiple object at the same time (e.g. destroy all) + if (game.getShortLivingLKI(getSourceId(), getZone())) { + return true; + } // check against current state Zone test = game.getState().getZone(parameterSourceId); return test != null && zone.match(test); @@ -1027,7 +1046,7 @@ public abstract class AbilityImpl implements Ability { for (Mode mode : spellModes.values()) { item++; if (spellModes.getSelectedModes().contains(mode.getId())) { - spellModes.setMode(mode); + spellModes.setActiveMode(mode.getId()); sb.append(" (mode ").append(item).append(")"); sb.append(getTargetDescriptionForLog(getTargets(), game)); } @@ -1097,16 +1116,38 @@ public abstract class AbilityImpl implements Ability { @Override public MageObject getSourceObject(Game game) { - if (sourceObject != null) { - return sourceObject; - } else { - return game.getObject(sourceId); + if (sourceObject == null) { + setSourceObject(null, game); } + return sourceObject; } @Override - public void setSourceObject(MageObject sourceObject) { - this.sourceObject = sourceObject; + public MageObject getSourceObjectIfItStillExists(Game game) { + MageObject currentObject = game.getObject(getSourceId()); + if (currentObject != null) { + MageObjectReference mor = new MageObjectReference(currentObject, game); + if (mor.getZoneChangeCounter() == getSourceObjectZoneChangeCounter()) { + // source object has meanwhile not changed zone + return sourceObject; + } + } + return null; + } + + @Override + public int getSourceObjectZoneChangeCounter() { + return sourceObjectZoneChangeCounter; + } + + @Override + public void setSourceObject(MageObject sourceObject, Game game) { + if (sourceObject == null) { + this.sourceObject = game.getObject(sourceId); + } else { + this.sourceObject = sourceObject; + } + this.sourceObjectZoneChangeCounter = game.getState().getZoneChangeCounter(sourceId); } diff --git a/Mage/src/mage/abilities/ActivatedAbilityImpl.java b/Mage/src/mage/abilities/ActivatedAbilityImpl.java index 7637d5e930..e5e1b819a5 100644 --- a/Mage/src/mage/abilities/ActivatedAbilityImpl.java +++ b/Mage/src/mage/abilities/ActivatedAbilityImpl.java @@ -43,6 +43,7 @@ import mage.cards.Card; import mage.constants.AsThoughEffectType; import mage.constants.TargetController; import mage.game.Game; +import mage.game.permanent.Permanent; /** @@ -174,13 +175,21 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa if (! game.getPlayer(controllerId).hasOpponent(playerId, game)){ return false; } - break; - + break; case YOU: if(!controlsAbility(playerId, game)){ return false; } break; + case CONTROLLER_ATTACHED_TO: + Permanent enchantment = game.getPermanent(getSourceId()); + if (enchantment != null && enchantment.getAttachedTo() != null) { + Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); + if (enchanted != null && enchanted.getControllerId().equals(playerId)) { + break; + } + } + return false; } //20091005 - 602.5d/602.5e if (timing == TimingRule.INSTANT || game.canPlaySorcery(playerId) || diff --git a/Mage/src/mage/abilities/Modes.java b/Mage/src/mage/abilities/Modes.java index 0d50987f57..1ea0c5241a 100644 --- a/Mage/src/mage/abilities/Modes.java +++ b/Mage/src/mage/abilities/Modes.java @@ -109,10 +109,24 @@ 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); + } + } } } @@ -167,7 +181,6 @@ public class Modes extends LinkedHashMap { return this.selectedModes.size() >= this.getMinModes(); } setMode(choice); - this.selectedModes.add(choice.getId()); } return true; } diff --git a/Mage/src/mage/abilities/StaticAbility.java b/Mage/src/mage/abilities/StaticAbility.java index a0d8dd8e6e..d868f70438 100644 --- a/Mage/src/mage/abilities/StaticAbility.java +++ b/Mage/src/mage/abilities/StaticAbility.java @@ -28,9 +28,13 @@ package mage.abilities; +import mage.MageObject; +import mage.abilities.effects.Effect; import mage.constants.AbilityType; import mage.constants.Zone; -import mage.abilities.effects.Effect; +import mage.game.Game; +import mage.game.events.GameEvent; + /** * @@ -49,6 +53,14 @@ public abstract class StaticAbility extends AbilityImpl { } } + @Override + public boolean isInUseableZone(Game game, MageObject source, GameEvent event) { + if (game.getShortLivingLKI(getSourceId(), zone)) { + return true; + } + return super.isInUseableZone(game, source, event); + } + public StaticAbility(StaticAbility ability) { super(ability); } diff --git a/Mage/src/mage/abilities/TriggeredAbilities.java b/Mage/src/mage/abilities/TriggeredAbilities.java index 705efd3737..59f6482970 100644 --- a/Mage/src/mage/abilities/TriggeredAbilities.java +++ b/Mage/src/mage/abilities/TriggeredAbilities.java @@ -1,32 +1,31 @@ /* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and 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; import java.util.ArrayList; @@ -38,6 +37,7 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import mage.MageObject; +import mage.cards.Card; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; @@ -45,17 +45,18 @@ import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; /** -* -* @author BetaSteward_at_googlemail.com -*/ + * + * @author BetaSteward_at_googlemail.com + */ public class TriggeredAbilities extends ConcurrentHashMap { private final Map> sources = new HashMap<>(); - public TriggeredAbilities() {} + public TriggeredAbilities() { + } public TriggeredAbilities(final TriggeredAbilities abilities) { - for (Map.Entry entry: abilities.entrySet()) { + for (Map.Entry entry : abilities.entrySet()) { this.put(entry.getKey(), entry.getValue().copy()); } for (Map.Entry> entry : abilities.sources.entrySet()) { @@ -70,45 +71,51 @@ public class TriggeredAbilities extends ConcurrentHashMap uuidList = new LinkedList<>(); uuidList.add(sourceId); @@ -145,18 +151,18 @@ public class TriggeredAbilities extends ConcurrentHashMap keysToRemove = new ArrayList<>(); - for (String key: this.keySet()) { - if(key.endsWith(sourceId.toString())) { + for (String key : this.keySet()) { + if (key.endsWith(sourceId.toString())) { keysToRemove.add(key); } } - for(String key: keysToRemove) { + for (String key : keysToRemove) { remove(key); } } public void removeAllGainedAbilities() { - for(String key: sources.keySet()) { + for (String key : sources.keySet()) { this.remove(key); } sources.clear(); @@ -166,4 +172,4 @@ public class TriggeredAbilities extends ConcurrentHashMap