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:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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) :
|
||||||
|
|||||||
Reference in New Issue
Block a user