Merge pull request #635 from kevlahnota/master

Fix Recover Cards, Cloner, Copier, and Preliminary support for Madness, added converge keyword
This commit is contained in:
Anthony Calosa
2015-09-29 21:29:38 +08:00
16 changed files with 275 additions and 138 deletions

View File

@@ -1,5 +1,16 @@
grade=borderline grade=borderline
[card] [card]
name=Arrogant Wurm
abilities=trample,madness
autoexile=restriction{discarded} pay({2}{G}) name(pay 2G to cast) activate name(pay 2G to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
text=Trample -- Madness {2}{G} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={3}{G}{G}
type=Creature
subtype=Wurm
power=4
toughness=4
[/card]
[card]
name=Autumn Willow name=Autumn Willow
abilities=opponentshroud,shroud abilities=opponentshroud,shroud
auto={G}:-shroud auto={G}:-shroud
@@ -24,6 +35,40 @@ power=2
toughness=2 toughness=2
[/card] [/card]
[card] [card]
name=Basking Rootwalla
abilities=madness
autoexile=restriction{discarded} pay({0}) name(pay 0 to cast) activate name(pay 0 to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto={1}{G}:2/2 limit:1
text={1}{G}: Basking Rootwalla gets +2/+2 until end of turn. Activate this ability only once each turn. -- Madness {0} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={G}
type=Creature
subtype=Lizard
power=1
toughness=1
[/card]
[card]
name=Big Game Hunter
abilities=madness
autoexile=restriction{discarded} pay({B}) name(pay B to cast) activate name(pay B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto=bury target(creature[power>=4])
text=When Big Game Hunter enters the battlefield, destroy target creature with power 4 or greater. It can't be regenerated. -- Madness {B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{B}{B}
type=Creature
subtype=Human Rebel Assassin
power=1
toughness=1
[/card]
[card]
name=Call to the Netherworld
abilities=madness
autoexile=restriction{discarded} pay({0}) name(pay 0 to cast) activate name(pay 0 to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=creature[black]|myGraveyard
auto=moveTo(myHand)
text=Return target black creature card from your graveyard to your hand. -- Madness {0} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={B}
type=Sorcery
[/card]
[card]
name=Cinder Seer name=Cinder Seer
auto={2}{r}{t}:target(creature,Player) damage:type:*[red]:myhand auto={2}{r}{t}:target(creature,Player) damage:type:*[red]:myhand
text={2}{R}, {T}: Reveal any number of red cards in your hand. Cinder Seer deals X damage to target creature or player, where X is the number of cards revealed this way. text={2}{R}, {T}: Reveal any number of red cards in your hand. Cinder Seer deals X damage to target creature or player, where X is the number of cards revealed this way.
@@ -44,6 +89,16 @@ mana={1}{B}{G}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Dark Withering
abilities=madness
autoexile=restriction{discarded} pay({B}) name(pay B to cast) activate name(pay B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=creature[-black]
auto=destroy
text=Destroy target nonblack creature. -- Madness {B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={4}{B}{B}
type=Instant
[/card]
[card]
name=Feral Hydra name=Feral Hydra
type=Creature type=Creature
subtype=Hydra Beast subtype=Hydra Beast
@@ -56,6 +111,26 @@ auto={3}:counter(1/1)
#Not all player can use ability #Not all player can use ability
[/card] [/card]
[card] [card]
name=Fiery Temper
abilities=madness
autoexile=restriction{discarded} pay({R}) name(pay R to cast) activate name(pay R to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=creature,player
auto=damage:3
text=Fiery Temper deals 3 damage to target creature or player. -- Madness {R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{R}{R}
type=Instant
[/card]
[card]
name=Frantic Purification
abilities=madness
autoexile=restriction{discarded} pay({W}) name(pay W to cast) activate name(pay W to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=enchantment
auto=destroy
text=Destroy target enchantment. -- Madness {W} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={2}{W}
type=Instant
[/card]
[card]
name=Ghastly Remains name=Ghastly Remains
auto=foreach(zombie|myhand) counter(1/1,1) auto=foreach(zombie|myhand) counter(1/1,1)
autograveyard={B}{B}{B}:moveTo(myhand) myUpkeepOnly autograveyard={B}{B}{B}:moveTo(myhand) myUpkeepOnly
@@ -77,6 +152,18 @@ power=4
toughness=4 toughness=4
[/card] [/card]
[card] [card]
name=Gorgon Recluse
abilities=madness
autoexile=restriction{discarded} pay({B}{B}) name(pay BB to cast) activate name(pay BB to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto=@combat(blocked,blocking) source(this) from(creature):all(trigger[from]) phaseaction[combatends once] destroy
text=Whenever Gorgon Recluse blocks or becomes blocked by a nonblack creature, destroy that creature at end of combat. -- Madness {B}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={3}{B}{B}
type=Creature
subtype=Gorgon
power=2
toughness=4
[/card]
[card]
name=Govern the Guildless name=Govern the Guildless
target=creature[-multicolor] target=creature[-multicolor]
auto=moveto(mybattlefield) auto=moveto(mybattlefield)
@@ -86,6 +173,17 @@ mana={5}{U}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Ichor Slick
abilities=madness
autoexile=restriction{discarded} pay({3}{B}) name(pay 3B to cast) activate name(pay 3B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=creature
auto=-3/-3
autohand=__CYCLING__({2})
text=Target creature gets -3/-3 until end of turn. -- Cycling {2} ({2}, Discard this card: Draw a card.) -- Madness {3}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={2}{B}
type=Sorcery
[/card]
[card]
name=Ivy Seer name=Ivy Seer
auto={2}{G}{T}:foreach(*[green]|myhand) 1/1 target(creature) auto={2}{G}{T}:foreach(*[green]|myhand) 1/1 target(creature)
text={2}{G}, {T}: Reveal any number of green cards in your hand. Target creature gets +X/+X until end of turn, where X is the number of cards revealed this way. text={2}{G}, {T}: Reveal any number of green cards in your hand. Target creature gets +X/+X until end of turn, where X is the number of cards revealed this way.
@@ -149,6 +247,15 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Obsessive Search
abilities=madness
autoexile=restriction{discarded} pay({U}) name(pay U to cast) activate name(pay U to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto=draw:1 controller
text=Draw a card. -- Madness {U} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={U}
type=Instant
[/card]
[card]
name=Ogre Marauder name=Ogre Marauder
text=Whenever Ogre Marauder attacks, it gains "Ogre Marauder can't be blocked" until end of turn unless defending player sacrifices a creature. text=Whenever Ogre Marauder attacks, it gains "Ogre Marauder can't be blocked" until end of turn unless defending player sacrifices a creature.
auto=@combat(attacking) source(this):ability$!name(choose one) if type(creature|mybattlefield)~morethan~0 then choice sacrifice notatarget(creature|mybattlefield) _ choice all(mystored) unblockable ueot!$ opponent auto=@combat(attacking) source(this):ability$!name(choose one) if type(creature|mybattlefield)~morethan~0 then choice sacrifice notatarget(creature|mybattlefield) _ choice all(mystored) unblockable ueot!$ opponent
@@ -159,6 +266,15 @@ power=3
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Psychotic Haze
abilities=madness
autoexile=restriction{discarded} pay({1}{B}) name(pay 1B to cast) activate name(pay 1B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto=damage:1 all(creature,player)
text=Psychotic Haze deals 1 damage to each creature and each player. -- Madness {1}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={2}{B}{B}
type=Instant
[/card]
[card]
name=Rakdos Augermage name=Rakdos Augermage
abilities=first strike abilities=first strike
auto={T}:name(target opponent) target(opponent) donothing && all(this) transforms((,newability[ability$!name(discard) reject notatarget(*|opponenthand)!$ targetedplayer && ability$!name(discard) reject notatarget(*|opponenthand)!$ controller])) assorcery auto={T}:name(target opponent) target(opponent) donothing && all(this) transforms((,newability[ability$!name(discard) reject notatarget(*|opponenthand)!$ targetedplayer && ability$!name(discard) reject notatarget(*|opponenthand)!$ controller])) assorcery
@@ -178,6 +294,17 @@ mana={X}{X}{U}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Reckless Wurm
abilities=trample,madness
autoexile=restriction{discarded} pay({2}{R}) name(pay 2R to cast) activate name(pay 2R to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
text=Trample -- Madness {2}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={3}{R}{R}
type=Creature
subtype=Wurm
power=4
toughness=4
[/card]
[card]
name=Sacellum Godspeaker name=Sacellum Godspeaker
auto={T}:foreach(creaure[power>4]|myhand) add{G} auto={T}:foreach(creaure[power>4]|myhand) add{G}
text={T}: Reveal any number of creature cards with power 5 or greater from your hand. Add {G} to your mana pool for each card revealed this way. text={T}: Reveal any number of creature cards with power 5 or greater from your hand. Add {G} to your mana pool for each card revealed this way.
@@ -236,6 +363,30 @@ mana={G}{W}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Strength of Isolation
abilities=madness
autoexile=restriction{discarded} pay({W}) name(pay W to cast) activate name(pay W to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=creature
auto=1/2
auto=protection from black
text=Enchant creature -- Enchanted creature gets +1/+2 and has protection from black. -- Madness {W} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{W}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Strength of Lunacy
abilities=madness
autoexile=restriction{discarded} pay({B}) name(pay B to cast) activate name(pay B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
target=creature
auto=2/1
auto=protection from white
text=Enchant creature -- Enchanted creature gets +2/+1 and has protection from white. -- Madness {B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{B}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Zombie Brute name=Zombie Brute
abilities=trample abilities=trample
auto=foreach(zombie|myhand) counter(1/1,1) auto=foreach(zombie|myhand) counter(1/1,1)

View File

@@ -22294,6 +22294,7 @@ text=At the beginning of your upkeep, you lose 1 life. -- At the beginning of yo
mana={2}{B}{B}{B} mana={2}{B}{B}{B}
type=Enchantment type=Enchantment
[/card] [/card]
#tappedformana stack...
[card] [card]
name=Dawn's Reflection name=Dawn's Reflection
target=land target=land
@@ -33438,6 +33439,7 @@ subtype=Beast
power=2 power=2
toughness=2 toughness=2
[/card] [/card]
#tappedformana stack...
[card] [card]
name=Fertile Ground name=Fertile Ground
target=land target=land
@@ -37927,13 +37929,16 @@ type=Artifact
[card] [card]
name=Gemstone Mine name=Gemstone Mine
auto=counter(0/0,3,Mining) auto=counter(0/0,3,Mining)
auto={T}{C(0/0,-1,Mining)}:Add{W} auto=this(counter{0/0,1,Mining}>1) {T}{C(0/0,-1,Mining)}:Add{G}
auto={T}{C(0/0,-1,Mining)}:Add{U} auto=this(counter{0/0,1,Mining}>1) {T}{C(0/0,-1,Mining)}:Add{R}
auto={T}{C(0/0,-1,Mining)}:Add{B} auto=this(counter{0/0,1,Mining}>1) {T}{C(0/0,-1,Mining)}:Add{U}
auto={T}{C(0/0,-1,Mining)}:Add{R} auto=this(counter{0/0,1,Mining}>1) {T}{C(0/0,-1,Mining)}:Add{B}
auto={T}{C(0/0,-1,Mining)}:Add{G} auto=this(counter{0/0,1,Mining}>1) {T}{C(0/0,-1,Mining)}:Add{W}
auto=@tapped(this):bury all(gemstone mine[-counter{0/0.1.Mining}]) auto=this(counter{0/0,1,Mining}=1) {T}{C(0/0,-1,Mining)}:Add{G} && sacrifice
auto=this(counter{0/0.1.Mining}<1) {0}:sacrifice all(this) auto=this(counter{0/0,1,Mining}=1) {T}{C(0/0,-1,Mining)}:Add{R} && sacrifice
auto=this(counter{0/0,1,Mining}=1) {T}{C(0/0,-1,Mining)}:Add{U} && sacrifice
auto=this(counter{0/0,1,Mining}=1) {T}{C(0/0,-1,Mining)}:Add{B} && sacrifice
auto=this(counter{0/0,1,Mining}=1) {T}{C(0/0,-1,Mining)}:Add{W} && sacrifice
text=Gemstone Mine enters the battlefield with three mining counters on it. -- {T}, Remove a mining counter from Gemstone Mine: Add one mana of any color to your mana pool. If there are no mining counters on Gemstone Mine, sacrifice it. text=Gemstone Mine enters the battlefield with three mining counters on it. -- {T}, Remove a mining counter from Gemstone Mine: Add one mana of any color to your mana pool. If there are no mining counters on Gemstone Mine, sacrifice it.
type=Land type=Land
[/card] [/card]
@@ -45571,9 +45576,8 @@ toughness=2
name=Hickory Woodlot name=Hickory Woodlot
auto=tap auto=tap
auto=counter(0/0,2,Depletion) auto=counter(0/0,2,Depletion)
auto={T}{C(0/0,-1,Depletion)}:Add{G}{G} auto=this(counter{0/0,1,Depletion}>1) {T}{C(0/0,-1,Depletion)}:Add{G}{G}
auto=@tapped(this):bury all(hickory woodlot[-counter{0/0.1.Depletion}]) auto=this(counter{0/0,1,Depletion}=1) {T}{C(0/0,-1,Depletion)}:Add{G}{G} && sacrifice
auto=this(counter{0/0.1.Depletion}<1) {0}:sacrifice all(this)
text=Hickory Woodlot enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Hickory Woodlot: Add {G}{G} to your mana pool. If there are no depletion counters on Hickory Woodlot, sacrifice it. text=Hickory Woodlot enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Hickory Woodlot: Add {G}{G} to your mana pool. If there are no depletion counters on Hickory Woodlot, sacrifice it.
type=Land type=Land
[/card] [/card]
@@ -59969,6 +59973,7 @@ subtype=Insect
power=2 power=2
toughness=3 toughness=3
[/card] [/card]
#tappedformana stack...
[card] [card]
name=Market Festival name=Market Festival
target=land target=land
@@ -71418,9 +71423,8 @@ toughness=2
name=Peat Bog name=Peat Bog
auto=tap auto=tap
auto=counter(0/0,2,Depletion) auto=counter(0/0,2,Depletion)
auto={T}{C(0/0,-1,Depletion)}:Add{B}{B} auto=this(counter{0/0,1,Depletion}>1) {T}{C(0/0,-1,Depletion)}:Add{B}{B}
auto=@tapped(this):bury all(peat bog[-counter{0/0.1.Depletion}]|myBattlefield) auto=this(counter{0/0,1,Depletion}=1) {T}{C(0/0,-1,Depletion)}:Add{B}{B} && sacrifice
auto=this(counter{0/0.1.Depletion}<1) {0}:sacrifice all(this)
text=Peat Bog enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Peat Bog: Add {B}{B} to your mana pool. If there are no depletion counters on Peat Bog, sacrifice it. text=Peat Bog enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Peat Bog: Add {B}{B} to your mana pool. If there are no depletion counters on Peat Bog, sacrifice it.
type=Land type=Land
[/card] [/card]
@@ -78998,9 +79002,8 @@ type=Sorcery
name=Remote Farm name=Remote Farm
auto=tap auto=tap
auto=counter(0/0,2,Depletion) auto=counter(0/0,2,Depletion)
auto={T}{C(0/0,-1,Depletion)}:Add{W}{W} auto=this(counter{0/0,1,Depletion}>1) {T}{C(0/0,-1,Depletion)}:Add{W}{W}
auto=@tapped(this):bury all(remote farm[-counter{0/0.1.Depletion}]|myBattlefield) auto=this(counter{0/0,1,Depletion}=1) {T}{C(0/0,-1,Depletion)}:Add{W}{W} && sacrifice
auto=this(counter{0/0.1.Depletion}<1) {0}:sacrifice all(this)
text=Remote Farm enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Remote Farm: Add {W}{W} to your mana pool. If there are no depletion counters on Remote Farm, sacrifice it. text=Remote Farm enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Remote Farm: Add {W}{W} to your mana pool. If there are no depletion counters on Remote Farm, sacrifice it.
type=Land type=Land
[/card] [/card]
@@ -83233,9 +83236,8 @@ type=Artifact
name=Sandstone Needle name=Sandstone Needle
auto=tap auto=tap
auto=counter(0/0,2,Depletion) auto=counter(0/0,2,Depletion)
auto={T}{C(0/0,-1,Depletion)}:Add{R}{R} auto=this(counter{0/0,1,Depletion}>1) {T}{C(0/0,-1,Depletion)}:Add{R}{R}
auto=@tapped(this):bury all(sandstone needle[-counter{0/0.1.Depletion}]|myBattlefield) auto=this(counter{0/0,1,Depletion}=1) {T}{C(0/0,-1,Depletion)}:Add{R}{R} && sacrifice
auto=this(counter{0/0.1.Depletion}<1) {0}:sacrifice all(this)
text=Sandstone Needle enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Sandstone Needle: Add {R}{R} to your mana pool. If there are no depletion counters on Sandstone Needle, sacrifice it. text=Sandstone Needle enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Sandstone Needle: Add {R}{R} to your mana pool. If there are no depletion counters on Sandstone Needle, sacrifice it.
type=Land type=Land
[/card] [/card]
@@ -83471,9 +83473,8 @@ toughness=2
name=Saprazzan Skerry name=Saprazzan Skerry
auto=tap auto=tap
auto=counter(0/0,2,Depletion) auto=counter(0/0,2,Depletion)
auto={T}{C(0/0,-1,Depletion)}:Add{U}{U} auto=this(counter{0/0,1,Depletion}>1) {T}{C(0/0,-1,Depletion)}:Add{U}{U}
auto=@tapped(this):bury all(saprazzan skerry[-counter{0/0.1.Depletion}]|myBattlefield) auto=this(counter{0/0,1,Depletion}=1) {T}{C(0/0,-1,Depletion)}:Add{U}{U} && sacrifice
auto=this(counter{0/0.1.Depletion}<1) {0}:sacrifice all(this)
text=Saprazzan Skerry enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Saprazzan Skerry: Add {U}{U} to your mana pool. If there are no depletion counters on Saprazzan Skerry, sacrifice it. text=Saprazzan Skerry enters the battlefield tapped with two depletion counters on it. -- {T}, Remove a depletion counter from Saprazzan Skerry: Add {U}{U} to your mana pool. If there are no depletion counters on Saprazzan Skerry, sacrifice it.
type=Land type=Land
[/card] [/card]
@@ -103853,6 +103854,7 @@ subtype=Spellshaper
power=1 power=1
toughness=1 toughness=1
[/card] [/card]
#tappedformana stack...
[card] [card]
name=Trace of Abundance name=Trace of Abundance
target=land target=land
@@ -108211,6 +108213,7 @@ subtype=Elemental
power=7 power=7
toughness=7 toughness=7
[/card] [/card]
#tappedformana stack...
[card] [card]
name=Verdant Haven name=Verdant Haven
target=land target=land

View File

@@ -470,15 +470,6 @@ type=Enchantment
subtype=Aura subtype=Aura
[/card] [/card]
[card] [card]
name=Arrogant Wurm
text=Trample -- Madness {2}{G} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={3}{G}{G}
type=Creature
subtype=Wurm
power=4
toughness=4
[/card]
[card]
name=Arrow Volley Trap name=Arrow Volley Trap
text=If four or more creatures are attacking, you may pay {1}{W} rather than pay Arrow Volley Trap's mana cost. -- Arrow Volley Trap deals 5 damage divided as you choose among any number of target attacking creatures. text=If four or more creatures are attacking, you may pay {1}{W} rather than pay Arrow Volley Trap's mana cost. -- Arrow Volley Trap deals 5 damage divided as you choose among any number of target attacking creatures.
mana={3}{W}{W} mana={3}{W}{W}
@@ -993,15 +984,6 @@ toughness=4
text=Flying -- Players can't cast spells during combat. {R}: Target creature attacks this turn if able. text=Flying -- Players can't cast spells during combat. {R}: Target creature attacks this turn if able.
[/card] [/card]
[card] [card]
name=Basking Rootwalla
text={1}{G}: Basking Rootwalla gets +2/+2 until end of turn. Activate this ability only once each turn. -- Madness {0} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={G}
type=Creature
subtype=Lizard
power=1
toughness=1
[/card]
[card]
name=Baton of Morale name=Baton of Morale
text={2}: Target creature gains banding until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding a player controls are blocking or being blocked by a creature, that player divides that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) text={2}: Target creature gains banding until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding a player controls are blocking or being blocked by a creature, that player divides that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)
mana={2} mana={2}
@@ -1162,15 +1144,6 @@ mana={5}{B}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Big Game Hunter
text=When Big Game Hunter enters the battlefield, destroy target creature with power 4 or greater. It can't be regenerated. -- Madness {B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{B}{B}
type=Creature
subtype=Human Rebel Assassin
power=1
toughness=1
[/card]
[card]
name=Bind name=Bind
text=Counter target activated ability. (Mana abilities can't be targeted.) -- Draw a card. text=Counter target activated ability. (Mana abilities can't be targeted.) -- Draw a card.
mana={1}{G} mana={1}{G}
@@ -1875,12 +1848,6 @@ mana={1}{W}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Call to the Netherworld
text=Return target black creature card from your graveyard to your hand. -- Madness {0} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={B}
type=Sorcery
[/card]
[card]
name=Callous Deceiver name=Callous Deceiver
text={1}: Look at the top card of your library. -- {2}: Reveal the top card of your library. If it's a land card, Callous Deceiver gets +1/+0 and gains flying until end of turn. Activate this ability only once each turn. text={1}: Look at the top card of your library. -- {2}: Reveal the top card of your library. If it's a land card, Callous Deceiver gets +1/+0 and gains flying until end of turn. Activate this ability only once each turn.
mana={2}{U} mana={2}{U}
@@ -3422,12 +3389,6 @@ mana={2}{B}
type=Enchantment type=Enchantment
[/card] [/card]
[card] [card]
name=Dark Withering
text=Destroy target nonblack creature. -- Madness {B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={4}{B}{B}
type=Instant
[/card]
[card]
name=Darkpact name=Darkpact
text=Remove Darkpact from your deck before playing if you're not playing for ante. -- You own target card in the ante. Exchange that card with the top card of your library. text=Remove Darkpact from your deck before playing if you're not playing for ante. -- You own target card in the ante. Exchange that card with the top card of your library.
mana={B}{B}{B} mana={B}{B}{B}
@@ -5116,12 +5077,6 @@ mana={R}{G}{W}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Fiery Temper
text=Fiery Temper deals 3 damage to target creature or player. -- Madness {R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{R}{R}
type=Instant
[/card]
[card]
name=Fight or Flight name=Fight or Flight
text=At the beginning of each opponent's combat phase, separate all creatures that player controls into two piles. Only creatures in the pile of his or her choice can attack this turn. text=At the beginning of each opponent's combat phase, separate all creatures that player controls into two piles. Only creatures in the pile of his or her choice can attack this turn.
mana={3}{W} mana={3}{W}
@@ -5555,12 +5510,6 @@ toughness=3
text=At the beginning of your upkeep, you may ask target player a yes-or-no question. If you do, that player answers the question truthfully and abides by that answer if able until end of turn. text=At the beginning of your upkeep, you may ask target player a yes-or-no question. If you do, that player answers the question truthfully and abides by that answer if able until end of turn.
[/card] [/card]
[card] [card]
name=Frantic Purification
text=Destroy target enchantment. -- Madness {W} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={2}{W}
type=Instant
[/card]
[card]
name=Frazzled Editor name=Frazzled Editor
mana={1}{R} mana={1}{R}
type=Creature — Human Bureaucrat type=Creature — Human Bureaucrat
@@ -5928,8 +5877,14 @@ subtype=Turtle
power=2 power=2
toughness=4 toughness=4
[/card] [/card]
#bug phasealter not turning off
[card] [card]
name=Gibbering Descent name=Gibbering Descent
abilities=madness
autoexile=restriction{discarded} pay({2}{B}{B}) name(pay 2BB to cast) activate name(pay 2BB to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto=@each my upkeep:life:-1 controller && reject target(*|myhand)
auto=@each opponentupkeep:life:-1 opponent && ability$!name(discard) target(*|myhand) reject!$ opponent
auto=this(variable{phandcount} <1) phasealter(remove,upkeep,controller)
text=At the beginning of each player's upkeep, that player loses 1 life and discards a card. -- Hellbent - Skip your upkeep step if you have no cards in hand. -- Madness {2}{B}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.) text=At the beginning of each player's upkeep, that player loses 1 life and discards a card. -- Hellbent - Skip your upkeep step if you have no cards in hand. -- Madness {2}{B}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={4}{B}{B} mana={4}{B}{B}
type=Enchantment type=Enchantment
@@ -6429,15 +6384,6 @@ power=0
toughness=3 toughness=3
[/card] [/card]
[card] [card]
name=Gorgon Recluse
text=Whenever Gorgon Recluse blocks or becomes blocked by a nonblack creature, destroy that creature at end of combat. -- Madness {B}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={3}{B}{B}
type=Creature
subtype=Gorgon
power=2
toughness=4
[/card]
[card]
name=Gorilla Berserkers name=Gorilla Berserkers
text=Trample; rampage 2 (Whenever this creature becomes blocked, it gets +2/+2 until end of turn for each creature blocking it beyond the first.) -- Gorilla Berserkers can't be blocked except by three or more creatures. text=Trample; rampage 2 (Whenever this creature becomes blocked, it gets +2/+2 until end of turn for each creature blocking it beyond the first.) -- Gorilla Berserkers can't be blocked except by three or more creatures.
mana={3}{G}{G} mana={3}{G}{G}
@@ -7441,12 +7387,6 @@ power=1
toughness=1 toughness=1
[/card] [/card]
[card] [card]
name=Ichor Slick
text=Target creature gets -3/-3 until end of turn. -- Cycling {2} ({2}, Discard this card: Draw a card.) -- Madness {3}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={2}{B}
type=Sorcery
[/card]
[card]
name=Icy Prison name=Icy Prison
text=When Icy Prison enters the battlefield, exile target creature. -- At the beginning of your upkeep, sacrifice Icy Prison unless any player pays {3}. -- When Icy Prison leaves the battlefield, return the exiled creature to the battlefield under its owner's control. text=When Icy Prison enters the battlefield, exile target creature. -- At the beginning of your upkeep, sacrifice Icy Prison unless any player pays {3}. -- When Icy Prison leaves the battlefield, return the exiled creature to the battlefield under its owner's control.
mana={U}{U} mana={U}{U}
@@ -11068,12 +11008,6 @@ type=Legendary Artifact
subtype=Equipment subtype=Equipment
[/card] [/card]
[card] [card]
name=Obsessive Search
text=Draw a card. -- Madness {U} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={U}
type=Instant
[/card]
[card]
name=Obstinate Baloth name=Obstinate Baloth
auto=life:4 auto=life:4
text=When Obstinate Baloth enters the battlefield, you gain 4 life. -- If a spell or ability an opponent controls causes you to discard Hardheaded Baloth, put it onto the battlefield instead of putting it into your graveyard. text=When Obstinate Baloth enters the battlefield, you gain 4 life. -- If a spell or ability an opponent controls causes you to discard Hardheaded Baloth, put it onto the battlefield instead of putting it into your graveyard.
@@ -12425,12 +12359,6 @@ mana={1}{B}{B}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Psychotic Haze
text=Psychotic Haze deals 1 damage to each creature and each player. -- Madness {1}{B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={2}{B}{B}
type=Instant
[/card]
[card]
name=Puca's Mischief name=Puca's Mischief
text=At the beginning of your upkeep, you may exchange control of target nonland permanent you control and target nonland permanent an opponent controls with an equal or lesser converted mana cost. text=At the beginning of your upkeep, you may exchange control of target nonland permanent you control and target nonland permanent an opponent controls with an equal or lesser converted mana cost.
mana={3}{U} mana={3}{U}
@@ -12983,15 +12911,6 @@ mana={W}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Reckless Wurm
text=Trample -- Madness {2}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={3}{R}{R}
type=Creature
subtype=Wurm
power=4
toughness=4
[/card]
[card]
name=Reclamation name=Reclamation
auto=lord(creature[black]) cantattack auto=lord(creature[black]) cantattack
auto=lord(creature[black]) {S(land|myinplay)}:-cantattack auto=lord(creature[black]) {S(land|myinplay)}:-cantattack
@@ -16054,20 +15973,6 @@ mana={X}{R}
type=Instant type=Instant
[/card] [/card]
[card] [card]
name=Strength of Isolation
text=Enchant creature -- Enchanted creature gets +1/+2 and has protection from black. -- Madness {W} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{W}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Strength of Lunacy
text=Enchant creature -- Enchanted creature gets +2/+1 and has protection from white. -- Madness {B} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)
mana={1}{B}
type=Enchantment
subtype=Aura
[/card]
[card]
name=Strength of the Tajuru name=Strength of the Tajuru
text=Multikicker {1} (You may pay an additional {1} any number of times as you cast this spell.) -- Choose target creature, then choose another target creature for each time Strength of the Tajuru was kicked. Put X +1/+1 counters on each of them. text=Multikicker {1} (You may pay an additional {1} any number of times as you cast this spell.) -- Choose target creature, then choose another target creature for each time Strength of the Tajuru was kicked. Put X +1/+1 counters on each of them.
mana={X}{G}{G} mana={X}{G}{G}

View File

@@ -556,6 +556,15 @@ private:
intValue = card->previous->previous->sunburst; intValue = card->previous->previous->sunburst;
} }
} }
else if (s == "converge")
{
intValue = 0;
for (int i = Constants::MTG_COLOR_GREEN; i <= Constants::MTG_COLOR_WHITE; ++i)
{
if(card->getManaCost()->getManaUsedToCast()->hasColor(i))
intValue +=1;
}
}
else if (s == "targetedcurses") else if (s == "targetedcurses")
{ {
if(card->playerTarget) if(card->playerTarget)
@@ -2068,6 +2077,7 @@ public:
assert(value < 2); assert(value < 2);
_target->basicAbilities.set(ability, value > 0); _target->basicAbilities.set(ability, value > 0);
_target->modifiedbAbi += 1;
return InstantAbility::addToGame(); return InstantAbility::addToGame();
} }
@@ -2080,7 +2090,10 @@ public:
{ {
MTGCardInstance * _target = (MTGCardInstance *) target; MTGCardInstance * _target = (MTGCardInstance *) target;
if (_target) if (_target)
{
_target->basicAbilities.set(ability, stateBeforeActivation); _target->basicAbilities.set(ability, stateBeforeActivation);
_target->modifiedbAbi -= 1;
}
return 1; return 1;
} }

View File

@@ -58,6 +58,7 @@ public:
uint8_t colors; uint8_t colors;
typedef std::bitset<Constants::NB_BASIC_ABILITIES> BasicAbilitiesSet; typedef std::bitset<Constants::NB_BASIC_ABILITIES> BasicAbilitiesSet;
BasicAbilitiesSet basicAbilities; BasicAbilitiesSet basicAbilities;
BasicAbilitiesSet origbasicAbilities;
map<string,string> magicTexts; map<string,string> magicTexts;
string magicText; string magicText;

View File

@@ -241,6 +241,9 @@ public:
bool isSwitchedPT; bool isSwitchedPT;
bool isACopier; bool isACopier;
bool bypassTC; bool bypassTC;
bool discarded;
int copiedID;
int modifiedbAbi;
void eventattacked(); void eventattacked();
void eventattackedAlone(); void eventattackedAlone();

View File

@@ -230,7 +230,8 @@ class Constants
NOLIFEGAIN = 112, NOLIFEGAIN = 112,
NOLIFEGAINOPPONENT = 113, NOLIFEGAINOPPONENT = 113,
AURAWARD = 114, AURAWARD = 114,
NB_BASIC_ABILITIES = 115, MADNESS = 115,
NB_BASIC_ABILITIES = 116,
RARITY_S = 'S', //Special Rarity RARITY_S = 'S', //Special Rarity

View File

@@ -76,7 +76,7 @@ public:
MTGPutInPlayRule(GameObserver* observer, int _id); MTGPutInPlayRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "cast card normally"; return "Cast Card Normally";
} }
virtual MTGPutInPlayRule * clone() const; virtual MTGPutInPlayRule * clone() const;
}; };
@@ -90,7 +90,7 @@ public:
MTGKickerRule(GameObserver* observer, int _id); MTGKickerRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "pay kicker"; return "Pay Kicker";
} }
virtual MTGKickerRule * clone() const; virtual MTGKickerRule * clone() const;
}; };
@@ -110,7 +110,7 @@ public:
{ {
if(alternativeName.size()) if(alternativeName.size())
return alternativeName.c_str(); return alternativeName.c_str();
return "pay alternative cost"; return "Pay Alternative Cost";
} }
virtual MTGAlternativeCostRule * clone() const; virtual MTGAlternativeCostRule * clone() const;
}; };
@@ -124,7 +124,7 @@ public:
MTGBuyBackRule(GameObserver* observer, int _id); MTGBuyBackRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "cast and buy back"; return "Cast and Buyback";
} }
virtual MTGBuyBackRule * clone() const; virtual MTGBuyBackRule * clone() const;
}; };
@@ -139,7 +139,7 @@ public:
MTGFlashBackRule(GameObserver* observer, int _id); MTGFlashBackRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "flash back"; return "Flashback";
} }
virtual MTGFlashBackRule * clone() const; virtual MTGFlashBackRule * clone() const;
}; };
@@ -153,7 +153,7 @@ public:
MTGRetraceRule(GameObserver* observer, int _id); MTGRetraceRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "retrace"; return "Retrace";
} }
virtual MTGRetraceRule * clone() const; virtual MTGRetraceRule * clone() const;
}; };
@@ -168,7 +168,7 @@ public:
MTGMorphCostRule(GameObserver* observer, int _id); MTGMorphCostRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "play morphed"; return "Play Morphed";
} }
virtual MTGMorphCostRule * clone() const; virtual MTGMorphCostRule * clone() const;
}; };
@@ -182,7 +182,7 @@ public:
MTGPlayFromGraveyardRule(GameObserver* observer, int _id); MTGPlayFromGraveyardRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "cast card from graveyard"; return "Cast Card From Graveyard";
} }
virtual MTGPlayFromGraveyardRule * clone() const; virtual MTGPlayFromGraveyardRule * clone() const;
}; };

View File

@@ -390,8 +390,20 @@ int AACopier::resolve()
MTGCardInstance * _target = (MTGCardInstance *) target; MTGCardInstance * _target = (MTGCardInstance *) target;
if (_target) if (_target)
{ {
source->copy(_target); if(_target->isACopier)
source->isACopier = true; {
MTGCard* clone = MTGCollection()->getCardById(_target->copiedID);
MTGCardInstance * myClone = NEW MTGCardInstance(clone, source->controller()->game);
source->copy(myClone);
source->isACopier = true;
source->copiedID = _target->copiedID;
}
else
{
source->copy(_target);
source->isACopier = true;
source->copiedID = _target->getId();
}
return 1; return 1;
} }
return 0; return 0;
@@ -1160,14 +1172,14 @@ int GenericPaidAbility::resolve()
baseAbility->target = target; baseAbility->target = target;
optionalCost = ManaCost::parseManaCost(baseCost, NULL, source); optionalCost = ManaCost::parseManaCost(baseCost, NULL, source);
// hacky way to produce better MenuText /*// hacky way to produce better MenuText
AAFakeAbility* isFake = dynamic_cast< AAFakeAbility* >( baseAbility ); AAFakeAbility* isFake = dynamic_cast< AAFakeAbility* >( baseAbility );
size_t findPayN = isFake->named.find(" {value} mana"); size_t findPayN = isFake->named.find(" {value} mana");
if (isFake && findPayN != string::npos) { if (isFake && findPayN != string::npos) {
stringstream parseN; stringstream parseN;
parseN << optionalCost->getCost(Constants::MTG_COLOR_ARTIFACT); parseN << optionalCost->getCost(Constants::MTG_COLOR_ARTIFACT);
isFake->named.replace(findPayN + 1, 7, parseN.str()); isFake->named.replace(findPayN + 1, 7, parseN.str());
} }//commented out, it crashes cards with recover ability*/
MTGAbility * set = baseAbility->clone(); MTGAbility * set = baseAbility->clone();
set->oneShot = true; set->oneShot = true;
@@ -2520,6 +2532,10 @@ int AACloner::resolve()
// Use id of the card to have the same image as the original // Use id of the card to have the same image as the original
MTGCard* clone = (_target->isToken ? _target: MTGCollection()->getCardById(_target->getId())); MTGCard* clone = (_target->isToken ? _target: MTGCollection()->getCardById(_target->getId()));
// If its a copier then copy what it is
if(_target->isACopier)
clone = _target;
Player * targetPlayer = who == 1 ? source->controller()->opponent() : source->controller(); Player * targetPlayer = who == 1 ? source->controller()->opponent() : source->controller();
int tokenize = 1;//tokenizer support for cloning int tokenize = 1;//tokenizer support for cloning
@@ -2575,6 +2591,8 @@ int AACloner::resolve()
{ {
spell->source->addType(*it); spell->source->addType(*it);
} }
spell->source->modifiedbAbi = _target->modifiedbAbi;
spell->source->origbasicAbilities = _target->origbasicAbilities;
delete spell; delete spell;
} }
return 1; return 1;
@@ -4157,6 +4175,7 @@ for (it = types.begin(); it != types.end(); it++)
for (it = abilities.begin(); it != abilities.end(); it++) for (it = abilities.begin(); it != abilities.end(); it++)
{ {
_target->basicAbilities.set(*it); _target->basicAbilities.set(*it);
_target->modifiedbAbi += 1;
} }
if(newAbilityFound) if(newAbilityFound)
@@ -4305,6 +4324,7 @@ int ATransformer::destroy()
for (it = abilities.begin(); it != abilities.end(); it++) for (it = abilities.begin(); it != abilities.end(); it++)
{ {
_target->basicAbilities.reset(*it); _target->basicAbilities.reset(*it);
_target->modifiedbAbi -= 1;
} }
for (it = oldcolors.begin(); it != oldcolors.end(); it++) for (it = oldcolors.begin(); it != oldcolors.end(); it++)
@@ -5724,7 +5744,7 @@ const string AACastCard::getMenuText()
return nameThis.c_str(); return nameThis.c_str();
if(putinplay) if(putinplay)
return "Put Into Play"; return "Put Into Play";
return "Cast For Free"; return "Cast Card";
} }
AACastCard * AACastCard::clone() const AACastCard * AACastCard::clone() const

View File

@@ -41,6 +41,7 @@ CardPrimitive::CardPrimitive(CardPrimitive * source)
if(!source) if(!source)
return; return;
basicAbilities = source->basicAbilities; basicAbilities = source->basicAbilities;
origbasicAbilities = source->basicAbilities;
for (size_t i = 0; i < source->types.size(); ++i) for (size_t i = 0; i < source->types.size(); ++i)
types.push_back(source->types[i]); types.push_back(source->types[i]);
@@ -76,6 +77,7 @@ CardPrimitive::~CardPrimitive()
int CardPrimitive::init() int CardPrimitive::init()
{ {
basicAbilities.reset(); basicAbilities.reset();
origbasicAbilities.reset();
types.clear(); types.clear();

View File

@@ -824,6 +824,11 @@ void GameObserver::gameStateBasedEffects()
} }
} }
if(c->modifiedbAbi > 0)
{
c->modifiedbAbi = 0;
c->basicAbilities = c->origbasicAbilities;
}
if(nbcards > z->nb_cards) if(nbcards > z->nb_cards)
{ {
t = 0; t = 0;

View File

@@ -411,6 +411,13 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe
} }
} }
check = restriction[i].find("discarded");
if(check != string::npos)
{
if(!card->discarded)
return 0;
}
check = restriction[i].find("ownerscontrol"); check = restriction[i].find("ownerscontrol");
if(check != string::npos) if(check != string::npos)
{ {
@@ -3542,6 +3549,9 @@ int AbilityFactory::abilityEfficiency(MTGAbility * a, Player * p, int mode, Targ
badAbilities[(int)Constants::WEAK] = true; badAbilities[(int)Constants::WEAK] = true;
badAbilities[(int)Constants::NOLIFEGAIN] = true; badAbilities[(int)Constants::NOLIFEGAIN] = true;
badAbilities[(int)Constants::NOLIFEGAINOPPONENT] = true; badAbilities[(int)Constants::NOLIFEGAINOPPONENT] = true;
badAbilities[(int)Constants::CANTLOSE] = false;
badAbilities[(int)Constants::CANTLIFELOSE] = false;
badAbilities[(int)Constants::CANTMILLLOSE] = false;
if (AInstantBasicAbilityModifierUntilEOT * abi = dynamic_cast<AInstantBasicAbilityModifierUntilEOT *>(a)) if (AInstantBasicAbilityModifierUntilEOT * abi = dynamic_cast<AInstantBasicAbilityModifierUntilEOT *>(a))
{ {

View File

@@ -58,6 +58,9 @@ MTGCardInstance::MTGCardInstance(MTGCard * card, MTGPlayerCards * arg_belongs_to
isSwitchedPT = false; isSwitchedPT = false;
isACopier = false; isACopier = false;
bypassTC = false; bypassTC = false;
discarded = false;
copiedID = getId();
modifiedbAbi = 0;
} }
MTGCardInstance * MTGCardInstance::createSnapShot() MTGCardInstance * MTGCardInstance::createSnapShot()
@@ -75,6 +78,8 @@ void MTGCardInstance::copy(MTGCardInstance * card)
CardPrimitive * data = source->data; CardPrimitive * data = source->data;
basicAbilities = card->basicAbilities; basicAbilities = card->basicAbilities;
origbasicAbilities = card->origbasicAbilities;
modifiedbAbi = card->modifiedbAbi;
for (size_t i = 0; i < data->types.size(); i++) for (size_t i = 0; i < data->types.size(); i++)
{ {
types.push_back(data->types[i]); types.push_back(data->types[i]);

View File

@@ -143,7 +143,8 @@ const char* Constants::MTGBasicAbilities[] = {
"spellmastery", "spellmastery",
"nolifegain", "nolifegain",
"nolifegainopponent", "nolifegainopponent",
"auraward" "auraward",
"madness"
}; };
map<string,int> Constants::MTGBasicAbilitiesMap; map<string,int> Constants::MTGBasicAbilitiesMap;

View File

@@ -325,6 +325,15 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
bool ripToken = false; bool ripToken = false;
if (g->players[0]->game->battlefield->hasName("Rest in Peace")||g->players[1]->game->battlefield->hasName("Rest in Peace")) if (g->players[0]->game->battlefield->hasName("Rest in Peace")||g->players[1]->game->battlefield->hasName("Rest in Peace"))
ripToken = true; ripToken = true;
//Madness or Put in Play...
for(int i = 0; i < 2; ++i)
{
if (card->discarded && (to == g->players[i]->game->graveyard) && (from == g->players[i]->game->hand))
{
if(card->basicAbilities[(int)Constants::MADNESS])
to = g->players[i]->game->exile;
}
}
//Darksteel Colossus, Legacy Weapon ... top priority since we replace destination directly automatically... //Darksteel Colossus, Legacy Weapon ... top priority since we replace destination directly automatically...
for(int i = 0; i < 2; ++i) for(int i = 0; i < 2; ++i)
{ {
@@ -361,6 +370,13 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
{ {
copy->miracle = true; copy->miracle = true;
} }
if (card->discarded)
{//set discarded for madness...
if(from == g->players[0]->game->hand || from == g->players[1]->game->hand)
copy->discarded = true;
else//turn off discarded if its previous zone is not in hand...
copy->discarded = false;
}
if (options[Options::SFXVOLUME].number > 0) if (options[Options::SFXVOLUME].number > 0)
{ {
if (to == g->players[0]->game->graveyard || to == g->players[1]->game->graveyard) if (to == g->players[0]->game->graveyard || to == g->players[1]->game->graveyard)

View File

@@ -106,6 +106,7 @@ WEventCardSacrifice::WEventCardSacrifice(MTGCardInstance * card, MTGCardInstance
WEventCardDiscard::WEventCardDiscard(MTGCardInstance * card) : WEventCardDiscard::WEventCardDiscard(MTGCardInstance * card) :
WEventCardUpdate(card) WEventCardUpdate(card)
{ {
card->discarded = true;
} }
WEventCardCycle::WEventCardCycle(MTGCardInstance * card) : WEventCardCycle::WEventCardCycle(MTGCardInstance * card) :