Minor fixes and 2012 starter and event decks

- War Priest of Thune made destroy effect optional
- ExileFromGraveCost modified tooltip generation
This commit is contained in:
LevelX2 2012-09-11 13:56:12 +02:00
parent 964bf0ed13
commit db58ef2daf
19 changed files with 658 additions and 162 deletions

View file

@ -0,0 +1,27 @@
NAME:[AVR] Death's Encroach
4 [ISD:97] Diregraf Ghoul
1 [AVR:104] Gloom Surgeon
2 [NPH:143] Lashwrithe
8 [ISD:257] Swamp
8 [ISD:256] Swamp
4 [SOM:78] Skinrender
8 [ISD:258] Swamp
3 [NPH:56] Despise
2 [M12:95] Doom Blade
3 [ISD:86] Altar's Reap
3 [MBS:43] Go for the Throat
1 [DKA:64] Gravecrawler
4 [DKA:68] Highborn Ghoul
2 [NPH:57] Dismember
2 [AVR:91] Crypt Creeper
1 [DKA:63] Geralf's Messenger
3 [ISD:102] Ghoulraiser
1 [M12:86] Cemetery Reaper
SB: 3 [AVR:122] Triumph of Cruelty
SB: 2 [AVR:84] Appetite for Brains
SB: 2 [AVR:91] Crypt Creeper
SB: 1 [NPH:56] Despise
SB: 1 [ISD:102] Ghoulraiser
SB: 2 [M12:94] Distress
SB: 3 [M12:90] Deathmark
SB: 1 [NPH:74] Surgical Extraction

View file

@ -0,0 +1,30 @@
NAME:[AVR] Humanity's Vengeance
3 [AVR:80] Tandem Lookout
2 [M13:225] Glacial Fortress
1 [MBS:14] Mirran Crusader
1 [AVR:18] Divine Deflection
2 [AVR:69] Nephalia Smuggler
4 [ISD:15] Fiend Hunter
4 [M12:18] Gideon's Lawkeeper
1 [NPH:42] Phyrexian Metamorph
1 [ISD:244] Moorland Haunt
2 [AVR:83] Wingcrafter
2 [NPH:57] Dismember
3 [ISD:253] Island
2 [NPH:38] Mental Misstep
3 [ISD:254] Island
3 [AVR:34] Righteous Blow
3 [ISD:255] Island
1 [NPH:4] Blade Splicer
4 [ISD:251] Plains
3 [M13:22] Oblivion Ring
4 [ISD:252] Plains
3 [AVR:31] Nearheath Pilgrim
4 [NPH:19] Porcelain Legionnaire
4 [ISD:250] Plains
SB: 2 [NPH:12] Inquisitor Exarch
SB: 2 [AVR:12] Cloudshift
SB: 4 [M12:63] Mana Leak
SB: 3 [M13:62] Negate
SB: 3 [AVR:11] Cathedral Sanctifier
SB: 1 [M13:24] Pacifism

View file

@ -0,0 +1,25 @@
NAME:[DKA] Gleeful Flames
1 [DKA:93] Hellrider
3 [SOM:167] Infiltration Lens
4 [M13:134] Goblin Arsonist
3 [DKA:157] Haunted Fengraf
4 [DKA:91] Forge Devil
4 [M12:140] Goblin Grenade
2 [MBS:145] Inkmoth Nexus
4 [M13:243] Mountain
3 [M13:151] Torch Fiend
5 [M13:242] Mountain
4 [M13:245] Mountain
4 [M13:244] Mountain
4 [NPH:79] Artillerize
2 [DKA:87] Faithless Looting
1 [ISD:136] Curse of Stalked Prey
4 [SOM:92] Goblin Gaveleer
4 [M12:139] Goblin Fireslinger
4 [ISD:132] Brimstone Volley
SB: 4 [SOM:81] Arc Trail
SB: 3 [MBS:67] Into the Core
SB: 3 [NPH:162] Torpor Orb
SB: 1 [NPH:57] Dismember
SB: 2 [NPH:86] Gut Shot
SB: 2 [M12:121] Act of Treason

View file

@ -0,0 +1,41 @@
NAME:[DKA] Spiraling Doom
1 [SOM:180] Myr Battlesphere
1 [M12:217] Solemn Simulacrum
1 [ISD:89] Bloodgift Demon
1 [MBS:115] Mortarpod
1 [MBS:94] Viridian Corrupter
1 [M12:197] Stingerfling Spider
2 [M12:92] Diabolic Tutor
1 [SOM:192] Perilous Myr
1 [ISD:110] Morkrut Banshee
4 [DKA:127] Strangleroot Geist
2 [M13:239] Swamp
2 [M13:240] Swamp
2 [M13:241] Swamp
1 [MBS:51] Phyrexian Rager
2 [NPH:104] Birthing Pod
2 [M13:238] Swamp
1 [M13:159] Acidic Slime
3 [SOM:78] Skinrender
1 [DKA:156] Grim Backwoods
1 [NPH:137] Hex Parasite
2 [M13:224] Evolving Wilds
3 [M12:95] Doom Blade
1 [NPH:105] Brutalizer Exarch
4 [M13:246] Forest
4 [M13:247] Forest
3 [M13:248] Forest
3 [M13:249] Forest
4 [DKA:134] Young Wolf
4 [MBS:95] Viridian Emissary
1 [DKA:79] Wakedancer
SB: 1 [SOM:108] Acid Web Spider
SB: 1 [NPH:59] Entomber Exarch
SB: 1 [MBS:116] Myr Sire
SB: 1 [NPH:57] Dismember
SB: 1 [NPH:103] Beast Within
SB: 1 [NPH:56] Despise
SB: 1 [DKA:79] Wakedancer
SB: 4 [M12:94] Distress
SB: 1 [M12:99] Gravedigger
SB: 3 [M12:164] Autumn's Veil

View file

@ -0,0 +1,35 @@
NAME:[M13] Repeat Performance
4 [ISD:170] Avacyn's Pilgrim
1 [M13:177] Mwonvuli Beast Tracker
2 [SOM:228] Razorverge Thicket
1 [M12:197] Stingerfling Spider
2 [M13:169] Elvish Visionary
1 [SOM:22] Sunblast Angel
1 [M13:193] Thragtusk
1 [NPH:4] Blade Splicer
3 [M13:5] Attended Knight
1 [M12:37] Stonehorn Dignitary
1 [ISD:17] Geist-Honored Monk
1 [M13:159] Acidic Slime
1 [ISD:15] Fiend Hunter
4 [M13:188] Roaring Primadox
4 [MBS:82] Lead the Stampede
1 [SOM:9] Glimmerpoint Stag
1 [NPH:105] Brutalizer Exarch
2 [M13:230] Plains
3 [M10:169] Borderland Ranger
3 [M13:246] Forest
2 [M13:231] Plains
3 [M13:247] Forest
3 [M13:248] Forest
3 [M13:249] Forest
4 [M12:182] Llanowar Elves
2 [M13:160] Arbor Elf
2 [M13:232] Plains
2 [M13:233] Plains
1 [MBS:81] Green Sun's Zenith
SB: 3 [AVR:12] Cloudshift
SB: 2 [NPH:57] Dismember
SB: 3 [DDF:13] Kemba's Skyguard
SB: 3 [M13:39] War Priest of Thune
SB: 4 [M13:22] Oblivion Ring

View file

@ -0,0 +1,33 @@
NAME:[M13] Sweet Revenge
1 [M13:131] Firewing Phoenix
1 [ISD:248] Sulfur Falls
4 [ISD:83] Think Twice
2 [M13:243] Mountain
3 [M13:242] Mountain
2 [M13:245] Mountain
2 [M13:244] Mountain
3 [ISD:55] Forbidden Alchemy
1 [AVR:227] Desolate Lighthouse
1 [ISD:75] Silent Departure
1 [M13:238] Swamp
2 [ISD:43] Armored Skaab
4 [AVR:52] Fettergeist
4 [ISD:133] Burning Vengeance
2 [ISD:144] Geistflame
4 [M13:224] Evolving Wilds
3 [AVR:149] Pillar of Flame
2 [M13:235] Island
2 [M13:234] Island
4 [DKA:87] Faithless Looting
4 [ISD:139] Desperate Ravings
1 [MBS:74] Red Sun's Zenith
2 [MBS:75] Slagstorm
1 [SOM:226] Darkslick Shores
1 [M13:237] Island
2 [M13:236] Island
1 [ISD:161] Rolling Temblor
SB: 2 [SOM:81] Arc Trail
SB: 4 [DKA:47] Screeching Skaab
SB: 2 [NPH:57] Dismember
SB: 4 [ISD:131] Bloodcrazed Neonate
SB: 3 [DKA:48] Secrets of the Dead

View file

@ -0,0 +1,31 @@
NAME:[AVR] Angelic Might
4 [ISD:263] Forest
3 [ISD:264] Forest
4 [ISD:262] Forest
2 [AVR:35] Seraph of Dawn
2 [AVR:15] Defang
2 [M12:18] Gideon's Lawkeeper
2 [M13:31] Serra Angel
1 [AVR:24] Herald of War
1 [AVR:5] Archangel
1 [AVR:16] Defy Death
4 [ISD:251] Plains
1 [M13:22] Oblivion Ring
4 [ISD:252] Plains
5 [ISD:250] Plains
1 [AVR:228] Seraph Sanctuary
1 [AVR:213] Bladed Bracers
2 [AVR:19] Emancipation Angel
1 [AVR:220] Scroll of Avacyn
1 [AVR:23] Goldnight Redeemer
1 [AVR:1] Angel of Glory's Rise
1 [AVR:8] Builder's Blessing
2 [AVR:211] Angel's Tomb
2 [AVR:4] Angelic Wall
3 [AVR:169] Borderland Ranger
2 [AVR:11] Cathedral Sanctifier
2 [M12:190] Rampant Growth
1 [AVR:197] Timberland Guide
2 [AVR:34] Righteous Blow
1 [AVR:198] Triumph of Ferocity
1 [AVR:40] Voice of the Provinces

View file

@ -0,0 +1,29 @@
NAME:[AVR] Bound by Strength
1 [M12:193] Runeclaw Bear
4 [ISD:263] Forest
4 [ISD:264] Forest
5 [ISD:262] Forest
1 [AVR:69] Nephalia Smuggler
1 [AVR:206] Wolfir Silverheart
1 [AVR:188] Pathbreaker Wurm
2 [AVR:175] Druid's Familiar
2 [AVR:83] Wingcrafter
1 [M12:57] Ice Cage
3 [AVR:199] Trusted Forcemage
2 [AVR:80] Tandem Lookout
2 [AVR:63] Latch Seeker
1 [M13:159] Acidic Slime
1 [AVR:179] Geist Trappers
1 [AVR:47] Deadeye Navigator
2 [AVR:50] Elgaud Shieldmate
1 [M12:186] Overrun
2 [AVR:187] Nightshade Peddler
2 [M12:182] Llanowar Elves
2 [AVR:178] Flowering Lumberknot
2 [AVR:183] Joint Assault
4 [ISD:253] Island
1 [AVR:205] Wolfir Avenger
4 [ISD:254] Island
4 [ISD:255] Island
2 [AVR:184] Lair Delve
2 [AVR:201] Vorstclaw

View file

@ -0,0 +1,30 @@
NAME:[AVR] Fiery Dawn
1 [AVR:156] Somberwald Vigilante
1 [AVR:17] Devout Chaplain
1 [AVR:41] Zealous Strike
1 [AVR:212] Angelic Armaments
3 [AVR:158] Thatcher Revolt
1 [AVR:10] Cathars' Crusade
1 [M12:131] Fireball
2 [AVR:143] Kruin Striker
2 [AVR:22] Goldnight Commander
2 [AVR:142] Kessig Malcontents
4 [ISD:259] Mountain
3 [AVR:152] Riot Ringleader
2 [AVR:39] Thraben Valiant
2 [AVR:30] Moorland Inquisitor
4 [ISD:261] Mountain
4 [ISD:260] Mountain
4 [ISD:251] Plains
4 [ISD:252] Plains
1 [AVR:127] Banners Raised
4 [ISD:250] Plains
2 [M12:10] Benalish Veteran
2 [M12:146] Incinerate
1 [M13:24] Pacifism
1 [M12:151] Manic Vandal
1 [AVR:13] Commander's Authority
1 [AVR:149] Pillar of Flame
2 [AVR:165] Vigilante Justice
2 [M12:15] Elite Vanguard
1 [AVR:166] Zealous Conscripts

View file

@ -0,0 +1,29 @@
NAME:[AVR] Slaughterhouse
2 [AVR:150] Raging Poltergeist
1 [AVR:221] Scroll of Griselbrand
1 [AVR:99] Driver of the Dead
1 [AVR:136] Gang of Devils
2 [AVR:105] Grave Exchange
1 [AVR:86] Blood Artist
4 [ISD:259] Mountain
1 [AVR:112] Maalfeld Twins
1 [AVR:124] Unhallowed Pact
4 [ISD:261] Mountain
4 [ISD:260] Mountain
5 [ISD:257] Swamp
2 [M13:134] Goblin Arsonist
4 [ISD:256] Swamp
2 [AVR:85] Barter in Blood
1 [AVR:139] Havengul Vampire
4 [ISD:258] Swamp
1 [AVR:110] Hunted Ghoul
1 [AVR:96] Demonlord of Ashmouth
1 [AVR:107] Harvester of Souls
2 [AVR:101] Evernight Shade
2 [M12:104] Reassembling Skeleton
3 [AVR:89] Butcher Ghoul
2 [AVR:88] Bone Splinters
2 [M12:134] Fling
3 [AVR:120] Soulcage Fiend
2 [AVR:95] Demonic Taskmaster
1 [AVR:87] Bloodflow Connoisseur

View file

@ -0,0 +1,29 @@
NAME:[AVR] Solitary Fiends
1 [AVR:122] Triumph of Cruelty
2 [M12:54] Frost Breath
2 [AVR:123] Undead Executioner
2 [AVR:113] Marrow Bats
1 [AVR:117] Predator's Gambit
4 [AVR:236] Swamp
2 [AVR:222] Tormentor's Trident
4 [AVR:237] Swamp
5 [AVR:238] Swamp
1 [AVR:108] Homicidal Seclusion
2 [AVR:100] Essence Harvest
2 [AVR:62] Into the Void
4 [AVR:234] Island
1 [AVR:64] Lone Revenant
1 [AVR:60] Havengul Skaab
3 [AVR:235] Island
4 [AVR:233] Island
1 [AVR:90] Corpse Traders
2 [AVR:52] Fettergeist
1 [M12:219] Swiftfoot Boots
2 [AVR:118] Renegade Demon
2 [M12:95] Doom Blade
3 [AVR:42] Alchemist's Apprentice
1 [AVR:94] Demonic Rising
2 [AVR:46] Crippling Chill
1 [AVR:91] Crypt Creeper
2 [AVR:67] Mist Raven
2 [AVR:71] Peel from Reality

View file

@ -0,0 +1,31 @@
NAME:[DKA] Dark Sacrifice
2 [ISD:12] Elder Cathar
3 [DKA:60] Falkenrath Torturer
2 [ISD:11] Doomed Traveler
1 [DKA:157] Haunted Fengraf
1 [DKA:145] Avacyn's Collar
1 [ISD:6] Champion of the Parish
2 [DKA:6] Elgaud Inquisitor
2 [ISD:86] Altar's Reap
3 [DKA:8] Gather the Townsfolk
1 [DKA:74] Skirsdag Flayer
1 [DKA:12] Lingering Souls
1 [ISD:30] Selfless Cathar
2 [ISD:222] Galvanic Juggernaut
1 [DKA:65] Gravepurge
1 [ISD:221] Demonmail Hauberk
4 [ISD:251] Plains
2 [ISD:125] Village Cannibals
4 [ISD:252] Plains
2 [ISD:39] Unruly Mob
4 [ISD:250] Plains
1 [ISD:122] Unburial Rites
4 [ISD:257] Swamp
4 [ISD:256] Swamp
1 [ISD:98] Disciple of Griselbrand
2 [ISD:111] Night Terrors
3 [ISD:258] Swamp
1 [ISD:20] Mausoleum Guard
1 [DKA:62] Fiend of the Shadows
2 [DKA:59] Death's Caress
1 [DKA:79] Wakedancer

View file

@ -0,0 +1,28 @@
NAME:[DKA] Grave Power
1 [ISD:183] Gnaw to the Bone
2 [ISD:169] Ambush Viper
5 [ISD:263] Forest
4 [ISD:264] Forest
5 [ISD:262] Forest
2 [ISD:171] Boneyard Wurm
2 [ISD:69] Moon Heron
1 [M12:167] Brindle Boar
3 [ISD:43] Armored Skaab
2 [STH:60] Mulch
1 [M13:159] Acidic Slime
2 [M12:48] Chasm Drake
1 [ISD:205] Splinterfright
1 [DKA:115] Ghoultree
2 [DKA:128] Tracker's Instincts
2 [ISD:52] Deranged Assistant
2 [ISD:211] Wreath of Geists
1 [M12:42] Alluring Siren
2 [DKA:53] Tower Geist
1 [M12:41] AEther Adept
2 [DKA:117] Grim Flowering
4 [ISD:253] Island
2 [DKA:118] Hollowhenge Beast
3 [ISD:254] Island
1 [DKA:148] Executioner's Hood
3 [ISD:255] Island
3 [DKA:111] Dawntreader Elk

View file

@ -0,0 +1,28 @@
NAME:[DKA] Monstrous Surprise
1 [ISD:156] Pitchburn Devils
4 [ISD:263] Forest
4 [ISD:264] Forest
5 [ISD:262] Forest
1 [ISD:157] Rage Thrower
1 [M13:178] Naturalize
2 [DKA:132] Wild Hunger
2 [DKA:127] Strangleroot Geist
1 [ISD:186] Gutter Grime
2 [M13:181] Prey Upon
4 [ISD:259] Mountain
3 [DKA:100] Nearheath Stalker
3 [ISD:261] Mountain
4 [ISD:260] Mountain
1 [ISD:191] Lumberknot
2 [DKA:102] Russet Wolves
1 [M12:209] Greatsword
2 [ISD:163] Skirsdag Cultist
2 [M13:134] Goblin Arsonist
2 [ISD:198] Orchard Spirit
2 [DKA:101] Pyreheart Wolf
1 [M12:186] Overrun
2 [M12:190] Rampant Growth
3 [DKA:134] Young Wolf
2 [M12:134] Fling
2 [ISD:161] Rolling Temblor
1 [DKA:89] Flayer of the Hatebound

View file

@ -0,0 +1,32 @@
NAME:[DKA] Relentless Dead
2 [M13:119] Zombie Goliath
2 [M13:116] Walking Corpse
2 [ISD:55] Forbidden Alchemy
2 [ISD:85] Abattoir Ghoul
3 [DKA:47] Screeching Skaab
2 [DKA:54] Black Cat
2 [DKA:135] Diregraf Captain
1 [M13:62] Negate
1 [ISD:102] Ghoulraiser
1 [ISD:76] Skaab Goliath
1 [ISD:218] Cellar Door
2 [ISD:97] Diregraf Ghoul
4 [ISD:257] Swamp
4 [ISD:256] Swamp
1 [ISD:80] Stitched Drake
4 [ISD:258] Swamp
1 [ISD:109] Moan of the Unhallowed
1 [ISD:99] Endless Ranks of the Dead
2 [M13:224] Evolving Wilds
2 [ISD:96] Dead Weight
2 [DKA:61] Farbog Boneflinger
1 [DKA:39] Havengul Runebinder
2 [DKA:72] Reap the Seagraf
1 [M12:120] Zombie Infestation
4 [ISD:253] Island
1 [ISD:65] Makeshift Mauler
3 [ISD:254] Island
1 [DKA:40] Headless Skaab
1 [ISD:93] Corpse Lunge
3 [ISD:255] Island
1 [ISD:113] Rotting Fensnake

View file

@ -0,0 +1,31 @@
NAME:[DKA] Swift Justice
2 [M12:149] Lightning Elemental
1 [DKA:86] Erdwal Ripper
1 [DKA:91] Forge Devil
2 [DKA:97] Markov Warlord
1 [M13:31] Serra Angel
2 [ISD:28] Rally the Peasants
1 [ISD:164] Stromkirk Noble
4 [ISD:259] Mountain
2 [DKA:107] Wrack with Madness
4 [ISD:261] Mountain
4 [ISD:260] Mountain
4 [ISD:251] Plains
4 [ISD:252] Plains
4 [ISD:250] Plains
2 [DKA:84] Burning Oil
2 [DKA:16] Niblis of the Urn
2 [DKA:14] Midnight Guard
2 [ISD:128] Ashmouth Hound
2 [ISD:234] Traveler's Amulet
1 [ISD:131] Bloodcrazed Neonate
1 [ISD:15] Fiend Hunter
1 [M13:151] Torch Fiend
1 [ISD:154] Nightbird's Clutches
2 [M12:8] Assault Griffin
1 [DKA:18] Requiem Angel
1 [ISD:31] Silverchase Fox
1 [DKA:22] Skillful Lunge
2 [M12:15] Elite Vanguard
1 [ISD:153] Night Revelers
2 [DKA:15] Niblis of the Mist

View file

@ -1,158 +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.innistrad;
import mage.Constants;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.WolfToken;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author nantuko
*/
public class GarrukRelentless extends CardImpl<GarrukRelentless> {
public GarrukRelentless(UUID ownerId) {
super(ownerId, 181, "Garruk Relentless", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{3}{G}");
this.expansionSetCode = "ISD";
this.subtype.add("Garruk");
this.color.setGreen(true);
this.canTransform = true;
this.secondSideCard = new GarrukTheVeilCursed(ownerId);
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), ""));
// When Garruk Relentless has two or fewer loyalty counters on him, transform him.
this.addAbility(new TransformAbility());
this.addAbility(new GarrukRelentlessTriggeredAbility());
// 0: Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him
LoyaltyAbility ability1 = new LoyaltyAbility(new GarrukRelentlessDamageEffect(), 0);
ability1.addTarget(new TargetCreaturePermanent());
this.addAbility(ability1);
// 0: Put a 2/2 green Wolf creature token onto the battlefield.
LoyaltyAbility ability2 = new LoyaltyAbility(new CreateTokenEffect(new WolfToken()), 0);
this.addAbility(ability2);
}
public GarrukRelentless(final GarrukRelentless card) {
super(card);
}
@Override
public GarrukRelentless copy() {
return new GarrukRelentless(this);
}
}
class GarrukRelentlessTriggeredAbility extends TriggeredAbilityImpl<GarrukRelentlessTriggeredAbility> {
public GarrukRelentlessTriggeredAbility() {
super(Constants.Zone.BATTLEFIELD, new TransformSourceEffect(true), false);
}
public GarrukRelentlessTriggeredAbility(GarrukRelentlessTriggeredAbility ability) {
super(ability);
}
@Override
public GarrukRelentlessTriggeredAbility copy() {
return new GarrukRelentlessTriggeredAbility(this);
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.DAMAGED_PLANESWALKER && event.getTargetId().equals(sourceId)) {
Permanent permanent = game.getPermanent(sourceId);
if (permanent != null && !permanent.isTransformed() && permanent.getCounters().getCount(CounterType.LOYALTY) <= 2) {
return true;
}
}
return false;
}
@Override
public String getRule() {
return "When Garruk Relentless has two or fewer loyalty counters on him, transform him";
}
}
class GarrukRelentlessDamageEffect extends OneShotEffect<GarrukRelentlessDamageEffect> {
public GarrukRelentlessDamageEffect() {
super(Constants.Outcome.Damage);
staticText = "Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him";
}
public GarrukRelentlessDamageEffect(GarrukRelentlessDamageEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
if (permanent != null) {
int damage = permanent.getPower().getValue();
permanent.damage(3, source.getSourceId(), game, true, false);
if (damage > 0) {
Permanent garruk = game.getPermanent(source.getSourceId());
if (garruk != null) {
garruk.damage(damage, permanent.getId(), game, true, false);
}
}
return true;
}
return false;
}
@Override
public GarrukRelentlessDamageEffect copy() {
return new GarrukRelentlessDamageEffect(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.innistrad;
import mage.Constants;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.WolfToken;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
* @author nantuko
*/
public class GarrukRelentless extends CardImpl<GarrukRelentless> {
public GarrukRelentless(UUID ownerId) {
super(ownerId, 181, "Garruk Relentless", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{3}{G}");
this.expansionSetCode = "ISD";
this.subtype.add("Garruk");
this.color.setGreen(true);
this.canTransform = true;
this.secondSideCard = new GarrukTheVeilCursed(ownerId);
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), ""));
// When Garruk Relentless has two or fewer loyalty counters on him, transform him.
this.addAbility(new TransformAbility());
this.addAbility(new GarrukRelentlessTriggeredAbility());
// 0: Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him
LoyaltyAbility ability1 = new LoyaltyAbility(new GarrukRelentlessDamageEffect(), 0);
ability1.addTarget(new TargetCreaturePermanent());
this.addAbility(ability1);
// 0: Put a 2/2 green Wolf creature token onto the battlefield.
LoyaltyAbility ability2 = new LoyaltyAbility(new CreateTokenEffect(new WolfToken()), 0);
this.addAbility(ability2);
}
public GarrukRelentless(final GarrukRelentless card) {
super(card);
}
@Override
public GarrukRelentless copy() {
return new GarrukRelentless(this);
}
}
class GarrukRelentlessTriggeredAbility extends TriggeredAbilityImpl<GarrukRelentlessTriggeredAbility> {
public GarrukRelentlessTriggeredAbility() {
super(Constants.Zone.BATTLEFIELD, new TransformSourceEffect(true), false);
}
public GarrukRelentlessTriggeredAbility(GarrukRelentlessTriggeredAbility ability) {
super(ability);
}
@Override
public GarrukRelentlessTriggeredAbility copy() {
return new GarrukRelentlessTriggeredAbility(this);
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.DAMAGED_PLANESWALKER && event.getTargetId().equals(sourceId)) {
Permanent permanent = game.getPermanent(sourceId);
if (permanent != null && !permanent.isTransformed() && permanent.getCounters().getCount(CounterType.LOYALTY) <= 2) {
return true;
}
}
return false;
}
@Override
public String getRule() {
return "When Garruk Relentless has two or fewer loyalty counters on him, transform him.";
}
}
class GarrukRelentlessDamageEffect extends OneShotEffect<GarrukRelentlessDamageEffect> {
public GarrukRelentlessDamageEffect() {
super(Constants.Outcome.Damage);
staticText = "Garruk Relentless deals 3 damage to target creature. That creature deals damage equal to its power to him";
}
public GarrukRelentlessDamageEffect(GarrukRelentlessDamageEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
if (permanent != null) {
int damage = permanent.getPower().getValue();
permanent.damage(3, source.getSourceId(), game, true, false);
if (damage > 0) {
Permanent garruk = game.getPermanent(source.getSourceId());
if (garruk != null) {
garruk.damage(damage, permanent.getId(), game, true, false);
}
}
return true;
}
return false;
}
@Override
public GarrukRelentlessDamageEffect copy() {
return new GarrukRelentlessDamageEffect(this);
}
}

View file

@ -62,7 +62,8 @@ public class WarPriestOfThune extends CardImpl<WarPriestOfThune> {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false);
// When War Priest of Thune enters the battlefield, you may destroy target enchantment.
Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), true);
Target target = new TargetPermanent(filter);
target.setRequired(true);
ability.addTarget(target);

View file

@ -47,10 +47,16 @@ public class ExileFromGraveCost extends CostImpl<ExileFromGraveCost> {
public ExileFromGraveCost(TargetCardInYourGraveyard target) {
this.addTarget(target);
if (target.getMaxNumberOfTargets() > 1)
this.text = "Exile " + target.getMaxNumberOfTargets() + " " + target.getTargetName() + " from your graveyard";
else
this.text = "Exile " + target.getTargetName() + " from your graveyard";
if (target.getMaxNumberOfTargets() > 1) {
this.text = "Exile " + target.getMaxNumberOfTargets() + " " + target.getTargetName();
}
else {
this.text = "Exile " + target.getTargetName();
}
if (!this.text.endsWith(" from your graveyard")) {
this.text = this.text + " from your graveyard";
}
}
public ExileFromGraveCost(TargetCardInYourGraveyard target, String text) {