Merge pull request #656 from kevlahnota/master

Manacost Changes, Anyzone for CDA, PayZero Cost
This commit is contained in:
Anthony Calosa
2015-11-07 14:41:25 +08:00
14 changed files with 647 additions and 188 deletions

View File

@@ -2,7 +2,7 @@
#Please keep these card alphabetized, and try to have the "name=" line at the top of each card #Please keep these card alphabetized, and try to have the "name=" line at the top of each card
[card] [card]
name=Aeon Chronicler name=Aeon Chronicler
auto=phandcount/phandcount cdaactive anyzone=phandcount/phandcount cdaactive
autoexile=@counterremoved(0/0,1,Time) from(sourcecard) suspended:draw:1 autoexile=@counterremoved(0/0,1,Time) from(sourcecard) suspended:draw:1
suspend(0)={X}{3}{U} suspend(0)={X}{3}{U}
text=Aeon Chronicler's power and toughness are each equal to the number of cards in your hand. -- Suspend X - {X}{3}{U}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{3}{U} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Aeon Chronicler while it's exiled, draw a card. text=Aeon Chronicler's power and toughness are each equal to the number of cards in your hand. -- Suspend X - {X}{3}{U}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{3}{U} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Aeon Chronicler while it's exiled, draw a card.
@@ -878,7 +878,7 @@ type=Instant
[/card] [/card]
[card] [card]
name=Adamaro, First to Desire name=Adamaro, First to Desire
auto=type:*:opponenthand/type:*:opponenthand cdaactive anyzone=type:*:opponenthand/type:*:opponenthand cdaactive
text=Adamaro, First to Desire's power and toughness are each equal to the number of cards in the hand of the opponent with the most cards in hand. text=Adamaro, First to Desire's power and toughness are each equal to the number of cards in the hand of the opponent with the most cards in hand.
mana={1}{R}{R} mana={1}{R}{R}
type=Legendary Creature type=Legendary Creature
@@ -1493,7 +1493,7 @@ subtype=Ajani
[/card] [/card]
[card] [card]
name=Avatar Token name=Avatar Token
auto=lifetotal/lifetotal cdaactive anyzone=lifetotal/lifetotal cdaactive
type=Creature type=Creature
subtype=Avatar subtype=Avatar
power=* power=*
@@ -2351,7 +2351,7 @@ toughness=1
[card] [card]
name=Altar Golem name=Altar Golem
abilities=trample,doesnotuntap abilities=trample,doesnotuntap
auto=type:creature:battlefield/type:creature:battlefield cdaactive anyzone=type:creature:battlefield/type:creature:battlefield cdaactive
auto={T(creature|myBattlefield)}{T(creature|myBattlefield)}{T(creature|myBattlefield)}{T(creature|myBattlefield)}{T(creature|myBattlefield)}:untap auto={T(creature|myBattlefield)}{T(creature|myBattlefield)}{T(creature|myBattlefield)}{T(creature|myBattlefield)}{T(creature|myBattlefield)}:untap
text=Trample -- Altar Golem's power and toughness are each equal to the number of creatures on the battlefield. -- Altar Golem doesn't untap during your untap step. -- Tap five untapped creatures you control: Untap Altar Golem. text=Trample -- Altar Golem's power and toughness are each equal to the number of creatures on the battlefield. -- Altar Golem doesn't untap during your untap step. -- Tap five untapped creatures you control: Untap Altar Golem.
mana={7} mana={7}
@@ -2937,7 +2937,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Ancient Ooze name=Ancient Ooze
auto=pancientooze/pancientooze cdaactive anyzone=pancientooze/pancientooze cdaactive
text=Ancient Ooze's power and toughness are each equal to the total converted mana cost of other creatures you control. text=Ancient Ooze's power and toughness are each equal to the total converted mana cost of other creatures you control.
mana={5}{G}{G} mana={5}{G}{G}
type=Creature type=Creature
@@ -8068,7 +8068,7 @@ toughness=2
[card] [card]
name=Battle Squadron name=Battle Squadron
abilities=flying abilities=flying
auto=type:creature:myBattlefield/type:creature:myBattlefield cdaactive anyzone=type:creature:myBattlefield/type:creature:myBattlefield cdaactive
text=Flying -- Battle Squadron's power and toughness are each equal to the number of creatures you control. text=Flying -- Battle Squadron's power and toughness are each equal to the number of creatures you control.
mana={3}{R}{R} mana={3}{R}{R}
type=Creature type=Creature
@@ -8381,7 +8381,7 @@ type=Enchantment
[/card] [/card]
[card] [card]
name=Beast of Burden name=Beast of Burden
auto=type:creature:Battlefield/type:creature:Battlefield cdaactive anyzone=type:creature:Battlefield/type:creature:Battlefield cdaactive
text=Beast of Burden's power and toughness are each equal to the number of creatures on the battlefield. text=Beast of Burden's power and toughness are each equal to the number of creatures on the battlefield.
mana={6} mana={6}
type=Artifact Creature type=Artifact Creature
@@ -8671,7 +8671,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Benalish Commander name=Benalish Commander
auto=type:soldier:mybattlefield/type:soldier:mybattlefield cdaactive anyzone=type:soldier:mybattlefield/type:soldier:mybattlefield cdaactive
autoexile=@counterremoved(0/0,1,Time) from(sourcecard) suspended:token(Soldier,Creature Soldier,1/1,white) autoexile=@counterremoved(0/0,1,Time) from(sourcecard) suspended:token(Soldier,Creature Soldier,1/1,white)
suspend(0)={X}{W}{W} suspend(0)={X}{W}{W}
text=Benalish Commander's power and toughness are each equal to the number of Soldiers you control. -- Suspend X - {X}{W}{W}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{W}{W} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Benalish Commander while it's exiled, put a 1/1 white Soldier creature token onto the battlefield. text=Benalish Commander's power and toughness are each equal to the number of Soldiers you control. -- Suspend X - {X}{W}{W}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{W}{W} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Benalish Commander while it's exiled, put a 1/1 white Soldier creature token onto the battlefield.
@@ -11580,7 +11580,8 @@ toughness=2
[/card] [/card]
[card] [card]
name=Boneyard Wurm name=Boneyard Wurm
auto=type:creature:mygraveyard/type:creature:mygraveyard cdaactive alias=001100
anyzone=type:creature:mygraveyard/type:creature:mygraveyard cdaactive
text=Boneyard Wurm's power and toughness are each equal to the number of creature cards in your graveyard. text=Boneyard Wurm's power and toughness are each equal to the number of creature cards in your graveyard.
mana={1}{G} mana={1}{G}
type=Creature type=Creature
@@ -12926,7 +12927,7 @@ toughness=4
[card] [card]
name=Broodstar name=Broodstar
abilities=affinityartifacts,flying abilities=affinityartifacts,flying
auto=type:artifact:mybattlefield/type:artifact:mybattlefield cdaactive anyzone=type:artifact:mybattlefield/type:artifact:mybattlefield cdaactive
text=Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.) -- Flying -- Broodstar's power and toughness are each equal to the number of artifacts you control. text=Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.) -- Flying -- Broodstar's power and toughness are each equal to the number of artifacts you control.
mana={8}{U}{U} mana={8}{U}{U}
type=Creature type=Creature
@@ -14097,8 +14098,9 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Cantivore name=Cantivore
alias=001100
abilities=vigilance abilities=vigilance
auto=type:enchantment:graveyard/type:enchantment:graveyard cdaactive anyzone=type:enchantment:graveyard/type:enchantment:graveyard cdaactive
text=Vigilance -- Cantivore's power and toughness are each equal to the number of enchantment cards in all graveyards. text=Vigilance -- Cantivore's power and toughness are each equal to the number of enchantment cards in all graveyards.
mana={1}{W}{W} mana={1}{W}{W}
type=Creature type=Creature
@@ -18065,8 +18067,9 @@ type=Instant
[/card] [/card]
[card] [card]
name=Cognivore name=Cognivore
alias=001100
abilities=flying abilities=flying
auto=type:instant:graveyard/type:instant:graveyard cdaactive anyzone=type:instant:graveyard/type:instant:graveyard cdaactive
text=Flying -- Cognivore's power and toughness are each equal to the number of instant cards in all graveyards. text=Flying -- Cognivore's power and toughness are each equal to the number of instant cards in all graveyards.
mana={6}{U}{U} mana={6}{U}{U}
type=Creature type=Creature
@@ -18086,7 +18089,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Coiling Woodworm name=Coiling Woodworm
auto=type:forest:battlefield/1 cdaactive anyzone=type:forest:battlefield/1 cdaactive
text=Coiling Woodworm's power is equal to the number of Forests on the battlefield. text=Coiling Woodworm's power is equal to the number of Forests on the battlefield.
mana={2}{G} mana={2}{G}
type=Creature type=Creature
@@ -20220,7 +20223,7 @@ toughness=4
[card] [card]
name=Crowd of Cinders name=Crowd of Cinders
abilities=fear abilities=fear
auto=type:*[black]:myBattlefield/type:*[black]:myBattlefield cdaactive anyzone=type:*[black]:myBattlefield/type:*[black]:myBattlefield cdaactive
text=Fear (This creature can't be blocked except by artifact creatures and/or black creatures.) -- Crowd of Cinders's power and toughness are each equal to the number of black permanents you control. text=Fear (This creature can't be blocked except by artifact creatures and/or black creatures.) -- Crowd of Cinders's power and toughness are each equal to the number of black permanents you control.
mana={3}{B} mana={3}{B}
type=Creature type=Creature
@@ -20455,7 +20458,7 @@ type=Enchantment
[/card] [/card]
[card] [card]
name=Crusader of Odric name=Crusader of Odric
auto=type:creature:mybattlefield/type:creature:mybattlefield cdaactive anyzone=type:creature:mybattlefield/type:creature:mybattlefield cdaactive
text=Crusader of Odric's power and toughness are each equal to the number of creatures you control. text=Crusader of Odric's power and toughness are each equal to the number of creatures you control.
mana={2}{W} mana={2}{W}
type=Creature type=Creature
@@ -21338,7 +21341,7 @@ subtype=Aura
[/card] [/card]
[card] [card]
name=Dakkon Blackblade name=Dakkon Blackblade
auto=type:land:myBattlefield/type:land:myBattlefield cdaactive anyzone=type:land:myBattlefield/type:land:myBattlefield cdaactive
text=Dakkon Blackblade's power and toughness are each equal to the number of lands you control. text=Dakkon Blackblade's power and toughness are each equal to the number of lands you control.
mana={2}{W}{U}{U}{B} mana={2}{W}{U}{U}{B}
type=Legendary Creature type=Legendary Creature
@@ -21401,7 +21404,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Dakmor Sorceress name=Dakmor Sorceress
auto=type:swamp:myBattlefield/4 cdaactive anyzone=type:swamp:myBattlefield/4 cdaactive
text=Dakmor Sorceress's power is equal to the number of Swamps you control. text=Dakmor Sorceress's power is equal to the number of Swamps you control.
mana={5}{B} mana={5}{B}
type=Creature type=Creature
@@ -21917,7 +21920,7 @@ type=Artifact
[card] [card]
name=Darksteel Juggernaut name=Darksteel Juggernaut
abilities=mustattack,indestructible abilities=mustattack,indestructible
auto=type:artifact:mybattlefield/type:artifact:mybattlefield cdaactive anyzone=type:artifact:mybattlefield/type:artifact:mybattlefield cdaactive
text=Darksteel Juggernaut's power and toughness are equal to the number of artifacts you control. -- Darksteel Juggernaut is indestructible and attacks each turn if able. text=Darksteel Juggernaut's power and toughness are equal to the number of artifacts you control. -- Darksteel Juggernaut is indestructible and attacks each turn if able.
mana={5} mana={5}
type=Artifact Creature type=Artifact Creature
@@ -22113,7 +22116,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Dauntless Dourbark name=Dauntless Dourbark
auto=pdauntless/pdauntless cdaactive anyzone=pdauntless/pdauntless cdaactive
auto=aslongas(other treefolk|myBattlefield) trample auto=aslongas(other treefolk|myBattlefield) trample
text=Dauntless Dourbark's power and toughness are each equal to the number of Forests you control plus the number of Treefolk you control. -- Dauntless Dourbark has trample as long as you control another Treefolk. text=Dauntless Dourbark's power and toughness are each equal to the number of Forests you control plus the number of Treefolk you control. -- Dauntless Dourbark has trample as long as you control another Treefolk.
mana={3}{G} mana={3}{G}
@@ -22257,7 +22260,7 @@ toughness=1
[card] [card]
name=Dauthi Warlord name=Dauthi Warlord
abilities=shadow abilities=shadow
auto=type:creature[shadow]:battlefield/1 cdaactive anyzone=type:creature[shadow]:battlefield/1 cdaactive
text=Shadow (This creature can block or be blocked by only creatures with shadow.) -- Dauthi Warlord's power is equal to the number of creatures with shadow on the battlefield. text=Shadow (This creature can block or be blocked by only creatures with shadow.) -- Dauthi Warlord's power is equal to the number of creatures with shadow on the battlefield.
mana={1}{B} mana={1}{B}
type=Creature type=Creature
@@ -24371,7 +24374,8 @@ text=Destroy target artifact with converted mana cost X. It can't be regenerated
[/card] [/card]
[card] [card]
name=Detritivore name=Detritivore
auto=type:land[-basic]:opponentgraveyard/type:land[-basic]:opponentgraveyard cdaactive alias=001100
anyzone=type:land[-basic]:opponentgraveyard/type:land[-basic]:opponentgraveyard cdaactive
autoexile=@counterremoved(0/0,1,Time) from(sourcecard) suspended:destroy target(land[-basic]) autoexile=@counterremoved(0/0,1,Time) from(sourcecard) suspended:destroy target(land[-basic])
suspend(0)={X}{3}{R} suspend(0)={X}{3}{R}
text=Detritivore's power and toughness are each equal to the number of nonbasic land cards in your opponents' graveyards. -- Suspend X - {X}{3}{R}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{3}{R} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Detritivore while it's exiled, destroy target nonbasic land. text=Detritivore's power and toughness are each equal to the number of nonbasic land cards in your opponents' graveyards. -- Suspend X - {X}{3}{R}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{3}{R} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Detritivore while it's exiled, destroy target nonbasic land.
@@ -25844,7 +25848,7 @@ type=Artifact
[card] [card]
name=Doubtless One name=Doubtless One
auto=spiritlink auto=spiritlink
auto=type:cleric:battlefield/type:cleric:battlefield cdaactive anyzone=type:cleric:battlefield/type:cleric:battlefield cdaactive
text=Doubtless One's power and toughness are each equal to the number of Clerics on the battlefield. -- Whenever Doubtless One deals damage, you gain that much life. text=Doubtless One's power and toughness are each equal to the number of Clerics on the battlefield. -- Whenever Doubtless One deals damage, you gain that much life.
mana={3}{W} mana={3}{W}
type=Creature type=Creature
@@ -26976,7 +26980,7 @@ toughness=5
[card] [card]
name=Drift of the Dead name=Drift of the Dead
abilities=defender abilities=defender
auto=type:land[snow]:myBattlefield/type:land[snow]:myBattlefield cdaactive anyzone=type:land[snow]:myBattlefield/type:land[snow]:myBattlefield cdaactive
text=Defender (This creature can't attack.) -- Drift of the Dead's power and toughness are each equal to the number of snow lands you control. text=Defender (This creature can't attack.) -- Drift of the Dead's power and toughness are each equal to the number of snow lands you control.
mana={3}{B} mana={3}{B}
type=Creature type=Creature
@@ -27335,7 +27339,7 @@ toughness=1
[card] [card]
name=Drove of Elves name=Drove of Elves
abilities=opponentshroud abilities=opponentshroud
auto=type:*[green]:myBattlefield/type:*[green]:myBattlefield cdaactive anyzone=type:*[green]:myBattlefield/type:*[green]:myBattlefield cdaactive
text=Drove of Elves's power and toughness are each equal to the number of green permanents you control. -- Drove of Elves can't be the target of spells or abilities your opponents control. text=Drove of Elves's power and toughness are each equal to the number of green permanents you control. -- Drove of Elves can't be the target of spells or abilities your opponents control.
mana={3}{G} mana={3}{G}
type=Creature type=Creature
@@ -27686,7 +27690,7 @@ toughness=1
[card] [card]
name=Dungrove Elder name=Dungrove Elder
abilities=opponentshroud abilities=opponentshroud
auto=type:forest:mybattlefield/type:forest:mybattlefield cdaactive anyzone=type:forest:mybattlefield/type:forest:mybattlefield cdaactive
text=Hexproof (This creature can't be the target of spells or abilities your opponents control.) -- Dungrove Elder's power and toughness are each equal to the number of Forests you control. text=Hexproof (This creature can't be the target of spells or abilities your opponents control.) -- Dungrove Elder's power and toughness are each equal to the number of Forests you control.
mana={2}{G} mana={2}{G}
type=Creature type=Creature
@@ -29051,7 +29055,7 @@ type=Sorcery
name=Elephant T1 name=Elephant T1
type=Creature type=Creature
subtype=Elephant subtype=Elephant
auto=type:creature:mygraveyard/type:creature:mygraveyard cdaactive anyzone=type:creature:mygraveyard/type:creature:mygraveyard cdaactive
text=This creature's power and toughness are each equal to the number of creature cards in its controller's graveyard. text=This creature's power and toughness are each equal to the number of creature cards in its controller's graveyard.
power=* power=*
toughness=* toughness=*
@@ -30620,7 +30624,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Entropic Specter name=Entropic Specter
auto=type:*:opponenthand/type:*:opponenthand cdaactive anyzone=type:*:opponenthand/type:*:opponenthand cdaactive
auto=@damageof(player) from(this):ability$!name(discard) target(*|myhand) reject!$ controller auto=@damageof(player) from(this):ability$!name(discard) target(*|myhand) reject!$ controller
auto=@damagefoeof(player) from(this):ability$!name(discard) target(*|myhand) reject!$ opponent auto=@damagefoeof(player) from(this):ability$!name(discard) target(*|myhand) reject!$ opponent
text=Flying -- As Entropic Specter enters the battlefield, choose an opponent. -- Entropic Specter's power and toughness are each equal to the number of cards in the chosen player's hand. -- Whenever Entropic Specter deals damage to a player, that player discards a card. text=Flying -- As Entropic Specter enters the battlefield, choose an opponent. -- Entropic Specter's power and toughness are each equal to the number of cards in the chosen player's hand. -- Whenever Entropic Specter deals damage to a player, that player discards a card.
@@ -32256,7 +32260,7 @@ toughness=1
[card] [card]
name=Faerie Swarm name=Faerie Swarm
abilities=flying abilities=flying
auto=type:*[blue]:myBattlefield/type:*[blue]:myBattlefield cdaactive anyzone=type:*[blue]:myBattlefield/type:*[blue]:myBattlefield cdaactive
text=Flying -- Faerie Swarm's power and toughness are each equal to the number of blue permanents you control. text=Flying -- Faerie Swarm's power and toughness are each equal to the number of blue permanents you control.
mana={3}{U} mana={3}{U}
type=Creature type=Creature
@@ -37804,7 +37808,7 @@ type=Instant
name=Geist-Honored Monk name=Geist-Honored Monk
abilities=vigilance abilities=vigilance
auto=token(Spirit,Creature Spirit,1/1,white,flying)*2 auto=token(Spirit,Creature Spirit,1/1,white,flying)*2
auto=type:creature:mybattlefield/type:creature:mybattlefield cdaactive anyzone=type:creature:mybattlefield/type:creature:mybattlefield cdaactive
text=Vigilance -- Geist-Honored Monk's power and toughness are each equal to the number of creatures you control. -- When Geist-Honored Monk enters the battlefield, put two 1/1 white Spirit creature tokens with flying onto the battlefield. text=Vigilance -- Geist-Honored Monk's power and toughness are each equal to the number of creatures you control. -- When Geist-Honored Monk enters the battlefield, put two 1/1 white Spirit creature tokens with flying onto the battlefield.
mana={3}{W}{W} mana={3}{W}{W}
type=Creature type=Creature
@@ -41603,7 +41607,7 @@ toughness=3
[card] [card]
name=Gravecrawler name=Gravecrawler
abilities=cantblock abilities=cantblock
autograveyard=aslongas(zombie|myBattlefield) transforms((,newability[CanPlayFromGraveyard])) autograveyard=aslongas(zombie|myBattlefield) CanPlayFromGraveyard
text=Gravecrawler can't block. -- You may cast Gravecrawler from your graveyard as long as you control a Zombie. text=Gravecrawler can't block. -- You may cast Gravecrawler from your graveyard as long as you control a Zombie.
mana={B} mana={B}
type=Creature type=Creature
@@ -44933,7 +44937,7 @@ subtype=Arcane
[card] [card]
name=Heedless One name=Heedless One
abilities=trample abilities=trample
auto=type:elf:battlefield/type:elf:battlefield cdaactive anyzone=type:elf:battlefield/type:elf:battlefield cdaactive
text=Trample -- Heedless One's power and toughness are each equal to the number of Elves on the battlefield. text=Trample -- Heedless One's power and toughness are each equal to the number of Elves on the battlefield.
mana={3}{G} mana={3}{G}
type=Creature type=Creature
@@ -50066,7 +50070,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Jagged-Scar Archers name=Jagged-Scar Archers
auto=type:elf:myBattlefield/type:elf:myBattlefield cdaactive anyzone=type:elf:myBattlefield/type:elf:myBattlefield cdaactive
auto={T}:target(creature[flying]) dynamicability<!powerstrike!> auto={T}:target(creature[flying]) dynamicability<!powerstrike!>
text=Jagged-Scar Archers's power and toughness are each equal to the number of Elves you control. -- {T}: Jagged-Scar Archers deals damage equal to its power to target creature with flying. text=Jagged-Scar Archers's power and toughness are each equal to the number of Elves you control. -- {T}: Jagged-Scar Archers deals damage equal to its power to target creature with flying.
mana={1}{G}{G} mana={1}{G}{G}
@@ -51346,7 +51350,7 @@ abilities=defender
[/card] [/card]
[card] [card]
name=Kagemaro, First to Suffer name=Kagemaro, First to Suffer
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
auto={B}{S}:-type:*:myhand/-type:*:myhand all(creature) auto={B}{S}:-type:*:myhand/-type:*:myhand all(creature)
text=Kagemaro, First to Suffer's power and toughness are each equal to the number of cards in your hand. -- {B}, Sacrifice Kagemaro: All creatures get -X/-X until end of turn, where X is the number of cards in your hand. text=Kagemaro, First to Suffer's power and toughness are each equal to the number of cards in your hand. -- {B}, Sacrifice Kagemaro: All creatures get -X/-X until end of turn, where X is the number of cards in your hand.
mana={3}{B}{B} mana={3}{B}{B}
@@ -51417,7 +51421,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Kalonian Twingrove name=Kalonian Twingrove
auto=type:forest:mybattlefield/type:forest:mybattlefield cdaactive anyzone=type:forest:mybattlefield/type:forest:mybattlefield cdaactive
auto=token(-383290) auto=token(-383290)
text=Kalonian Twingrove's power and toughness are each equal to the number of Forests you control. -- When Kalonian Twingrove enters the battlefield, put a green Treefolk Warrior creature token onto the battlefield with "this creature's power and toughness are each equal to the number of forests you control." text=Kalonian Twingrove's power and toughness are each equal to the number of Forests you control. -- When Kalonian Twingrove enters the battlefield, put a green Treefolk Warrior creature token onto the battlefield with "this creature's power and toughness are each equal to the number of forests you control."
mana={5}{G} mana={5}{G}
@@ -51428,7 +51432,7 @@ toughness=*
[/card] [/card]
[card] [card]
name=Treefolk Warrior name=Treefolk Warrior
auto=type:forest:mybattlefield/type:forest:mybattlefield cdaactive anyzone=type:forest:mybattlefield/type:forest:mybattlefield cdaactive
text=This creature's power and toughness are each equal to the number of forests you control. text=This creature's power and toughness are each equal to the number of forests you control.
color=green color=green
type=Creature type=Creature
@@ -52469,7 +52473,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Keldon Warlord name=Keldon Warlord
auto=type:creature[-wall]:myBattlefield/type:creature[-wall]:myBattlefield cdaactive anyzone=type:creature[-wall]:myBattlefield/type:creature[-wall]:myBattlefield cdaactive
text=Keldon Warlord's power and toughness are each equal to the number of non-Wall creatures you control. text=Keldon Warlord's power and toughness are each equal to the number of non-Wall creatures you control.
mana={2}{R}{R} mana={2}{R}{R}
type=Creature type=Creature
@@ -53129,7 +53133,7 @@ toughness=2
[card] [card]
name=Kithkin Rabble name=Kithkin Rabble
abilities=vigilance abilities=vigilance
auto=type:*[white]:myBattlefield/type:*[white]:myBattlefield cdaactive anyzone=type:*[white]:myBattlefield/type:*[white]:myBattlefield cdaactive
text=Vigilance -- Kithkin Rabble's power and toughness are each equal to the number of white permanents you control. text=Vigilance -- Kithkin Rabble's power and toughness are each equal to the number of white permanents you control.
mana={3}{W} mana={3}{W}
type=Creature type=Creature
@@ -53253,7 +53257,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Kiyomaro, First to Stand name=Kiyomaro, First to Stand
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
auto=aslongas(*|myhand) vigilance >3 auto=aslongas(*|myhand) vigilance >3
auto=@damaged(creature,player) from(this) restriction{type(*|myhand)~morethan~6}:if type(*|myhand)~morethan~6 then life:7 controller auto=@damaged(creature,player) from(this) restriction{type(*|myhand)~morethan~6}:if type(*|myhand)~morethan~6 then life:7 controller
text=Kiyomaro, First to Stand's power and toughness are each equal to the number of cards in your hand. -- As long as you have four or more cards in hand, Kiyomaro has vigilance. -- Whenever Kiyomaro deals damage, if you have seven or more cards in hand, you gain 7 life. text=Kiyomaro, First to Stand's power and toughness are each equal to the number of cards in your hand. -- As long as you have four or more cards in hand, Kiyomaro has vigilance. -- Whenever Kiyomaro deals damage, if you have seven or more cards in hand, you gain 7 life.
@@ -53756,7 +53760,7 @@ toughness=1
[card] [card]
name=Kolaghan Forerunners name=Kolaghan Forerunners
abilities=trample abilities=trample
auto=type:creature:mybattlefield/3 cdaactive anyzone=type:creature:mybattlefield/3 cdaactive
other={R}{2} name(Dash) other={R}{2} name(Dash)
auto=if paid(alternative) then transforms((,newability[haste],newability[phaseaction[endofturn sourceinplay] moveto(ownerhand) all(this)])) forever auto=if paid(alternative) then transforms((,newability[haste],newability[phaseaction[endofturn sourceinplay] moveto(ownerhand) all(this)])) forever
text=Trample -- Kolaghan Forerunners's power is equal to the number of creatures you control. -- Dash {2}{R} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.) text=Trample -- Kolaghan Forerunners's power is equal to the number of creatures you control. -- Dash {2}{R} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.)
@@ -53990,7 +53994,7 @@ toughness=1
[card] [card]
name=Korlash Heir to Blackblade name=Korlash Heir to Blackblade
auto={discard(korlash heir to blackblade|myhand)}:moveto(mybattlefield) and!(tap)! target(<upto:2>swamp|mylibrary) auto={discard(korlash heir to blackblade|myhand)}:moveto(mybattlefield) and!(tap)! target(<upto:2>swamp|mylibrary)
auto=type:swamp:mybattlefield/type:swamp:mybattlefield cdaactive anyzone=type:swamp:mybattlefield/type:swamp:mybattlefield cdaactive
auto={1}{B}:regenerate auto={1}{B}:regenerate
text=Korlash, Heir to Blackblade's power and toughness are each equal to the number of Swamps you control. -- {1}{B}: Regenerate Korlash. -- Grandeur - Discard another card named Korlash, Heir to Blackblade: Search your library for up to two Swamp cards, put them onto the battlefield tapped, then shuffle your library. text=Korlash, Heir to Blackblade's power and toughness are each equal to the number of Swamps you control. -- {1}{B}: Regenerate Korlash. -- Grandeur - Discard another card named Korlash, Heir to Blackblade: Search your library for up to two Swamp cards, put them onto the battlefield tapped, then shuffle your library.
mana={2}{B}{B} mana={2}{B}{B}
@@ -54444,7 +54448,7 @@ subtype=Aura
[card] [card]
name=Krovikan Mist name=Krovikan Mist
abilities=flying abilities=flying
auto=type:illusion:battlefield/type:illusion:battlefield cdaactive anyzone=type:illusion:battlefield/type:illusion:battlefield cdaactive
text=Flying -- Krovikan Mist's power and toughness are each equal to the number of Illusions on the battlefield. text=Flying -- Krovikan Mist's power and toughness are each equal to the number of Illusions on the battlefield.
mana={1}{U} mana={1}{U}
type=Creature type=Creature
@@ -56072,7 +56076,8 @@ toughness=5
[/card] [/card]
[card] [card]
name=Lhurgoyf name=Lhurgoyf
auto=type:creature:graveyard/plusonetype:creature:graveyard cdaactive alias=001100
anyzone=type:creature:graveyard/plusonetype:creature:graveyard cdaactive
text=Lhurgoyf's power is equal to the number of creature cards in all graveyards and its toughness is equal to that number plus 1. text=Lhurgoyf's power is equal to the number of creature cards in all graveyards and its toughness is equal to that number plus 1.
mana={2}{G}{G} mana={2}{G}{G}
type=Creature type=Creature
@@ -57452,7 +57457,8 @@ toughness=2
[/card] [/card]
[card] [card]
name=Lord of Extinction name=Lord of Extinction
auto=type:*:graveyard/type:*:graveyard cdaactive alias=001100
anyzone=type:*:graveyard/type:*:graveyard cdaactive
text=Lord of Extinction's power and toughness are each equal to the number of cards in all graveyards. text=Lord of Extinction's power and toughness are each equal to the number of cards in all graveyards.
mana={3}{B}{G} mana={3}{B}{G}
type=Creature type=Creature
@@ -58816,8 +58822,9 @@ toughness=6
[/card] [/card]
[card] [card]
name=Magnivore name=Magnivore
alias=001100
abilities=haste abilities=haste
auto=type:sorcery:graveyard/type:sorcery:graveyard cdaactive anyzone=type:sorcery:graveyard/type:sorcery:graveyard cdaactive
text=Haste (This creature can attack the turn it comes under your control.) -- Magnivore's power and toughness are each equal to the number of sorcery cards in all graveyards. text=Haste (This creature can attack the turn it comes under your control.) -- Magnivore's power and toughness are each equal to the number of sorcery cards in all graveyards.
mana={2}{R}{R} mana={2}{R}{R}
type=Creature type=Creature
@@ -59639,7 +59646,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Maraxus of Keld name=Maraxus of Keld
auto=type:*[-tapped&-enchantment;-tapped&-planeswalker]/type:*[-tapped&-enchantment;-tapped&-planeswalker] cdaactive anyzone=type:*[-tapped&-enchantment;-tapped&-planeswalker]/type:*[-tapped&-enchantment;-tapped&-planeswalker] cdaactive
text=Maraxus of Keld's power and toughness are each equal to the number of untapped artifacts, creatures, and lands you control. text=Maraxus of Keld's power and toughness are each equal to the number of untapped artifacts, creatures, and lands you control.
mana={4}{R}{R} mana={4}{R}{R}
type=Legendary Creature type=Legendary Creature
@@ -60025,7 +60032,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Maro name=Maro
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
text=Maro's power and toughness are each equal to the number of cards in your hand. text=Maro's power and toughness are each equal to the number of cards in your hand.
mana={2}{G}{G} mana={2}{G}{G}
type=Creature type=Creature
@@ -60558,7 +60565,7 @@ toughness=2
[card] [card]
name=Master of Etherium name=Master of Etherium
auto=lord(other creature[artifact]|mybattlefield) 1/1 auto=lord(other creature[artifact]|mybattlefield) 1/1
auto=type:artifact:mybattlefield/type:artifact:mybattlefield cdaactive anyzone=type:artifact:mybattlefield/type:artifact:mybattlefield cdaactive
text=Master of Etherium's power and toughness are each equal to the number of artifacts you control. -- Other artifact creatures you control get +1/+1. text=Master of Etherium's power and toughness are each equal to the number of artifacts you control. -- Other artifact creatures you control get +1/+1.
mana={2}{U} mana={2}{U}
type=Artifact Creature type=Artifact Creature
@@ -60663,7 +60670,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Masumaro, First to Live name=Masumaro, First to Live
auto=twicetype:*:myhand/twicetype:*:myhand cdaactive anyzone=twicetype:*:myhand/twicetype:*:myhand cdaactive
text=Masumaro, First to Live's power and toughness are each equal to twice the number of cards in your hand. text=Masumaro, First to Live's power and toughness are each equal to twice the number of cards in your hand.
mana={3}{G}{G}{G} mana={3}{G}{G}{G}
type=Legendary Creature type=Legendary Creature
@@ -60673,7 +60680,7 @@ toughness=*
[/card] [/card]
[card] [card]
name=Matca Rioters name=Matca Rioters
auto=pbasiclandtypes/pbasiclandtypes cdaactive anyzone=pbasiclandtypes/pbasiclandtypes cdaactive
text=Domain - Matca Rioters's power and toughness are each equal to the number of basic land types among lands you control. text=Domain - Matca Rioters's power and toughness are each equal to the number of basic land types among lands you control.
mana={2}{G} mana={2}{G}
type=Creature type=Creature
@@ -63699,7 +63706,7 @@ toughness=8
[card] [card]
name=Molimo, Maro-Sorcerer name=Molimo, Maro-Sorcerer
abilities=trample abilities=trample
auto=type:land:myBattlefield/type:land:myBattlefield cdaactive anyzone=type:land:myBattlefield/type:land:myBattlefield cdaactive
text=Trample (If this creature would deal enough damage to its blockers to destroy them, you may have it deal the rest of its damage to defending player or planeswalker.) -- Molimo, Maro-Sorcerer's power and toughness are each equal to the number of lands you control. text=Trample (If this creature would deal enough damage to its blockers to destroy them, you may have it deal the rest of its damage to defending player or planeswalker.) -- Molimo, Maro-Sorcerer's power and toughness are each equal to the number of lands you control.
mana={4}{G}{G}{G} mana={4}{G}{G}{G}
type=Legendary Creature type=Legendary Creature
@@ -64584,8 +64591,9 @@ toughness=2
[/card] [/card]
[card] [card]
name=Mortivore name=Mortivore
alias=001100
auto={B}:regenerate auto={B}:regenerate
auto=type:creature:graveyard/type:creature:graveyard cdaactive anyzone=type:creature:graveyard/type:creature:graveyard cdaactive
text=Mortivore's power and toughness are each equal to the number of creature cards in all graveyards. -- {B}: Regenerate Mortivore. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.) text=Mortivore's power and toughness are each equal to the number of creature cards in all graveyards. -- {B}: Regenerate Mortivore. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)
mana={2}{B}{B} mana={2}{B}{B}
type=Creature type=Creature
@@ -64980,7 +64988,7 @@ toughness=2
[card] [card]
name=Multani, Maro-Sorcerer name=Multani, Maro-Sorcerer
abilities=shroud abilities=shroud
auto=type:*:hand/type:*:hand cdaactive anyzone=type:*:hand/type:*:hand cdaactive
text=Shroud (This permanent can't be the target of spells or abilities.) -- Multani's power and toughness are each equal to the total number of cards in all players' hands. text=Shroud (This permanent can't be the target of spells or abilities.) -- Multani's power and toughness are each equal to the total number of cards in all players' hands.
mana={4}{G}{G} mana={4}{G}{G}
type=Legendary Creature type=Legendary Creature
@@ -65793,7 +65801,7 @@ subtype=Shapeshifter
name=Nameless One name=Nameless One
facedown={3} facedown={3}
autofacedown={2}{U}:morph autofacedown={2}{U}:morph
auto=type:wizard:battlefield/type:wizard:battlefield cdaactive anyzone=type:wizard:battlefield/type:wizard:battlefield cdaactive
text=Nameless One's power and toughness are each equal to the number of Wizards on the battlefield. -- Morph {2}{U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) text=Nameless One's power and toughness are each equal to the number of Wizards on the battlefield. -- Morph {2}{U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)
mana={3}{U} mana={3}{U}
type=Creature type=Creature
@@ -67248,7 +67256,7 @@ type=Sorcery
[card] [card]
name=Nightmare name=Nightmare
abilities=flying abilities=flying
auto=type:swamp:mybattlefield/type:swamp:mybattlefield cdaactive anyzone=type:swamp:mybattlefield/type:swamp:mybattlefield cdaactive
text=Flying -- Nightmare's power and toughness are each equal to the number of Swamps you control. text=Flying -- Nightmare's power and toughness are each equal to the number of Swamps you control.
mana={5}{B} mana={5}{B}
type=Creature type=Creature
@@ -67366,7 +67374,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Nightstalker Engine name=Nightstalker Engine
auto=type:creature:myGraveyard/3 cdaactive anyzone=type:creature:myGraveyard/3 cdaactive
text=Nightstalker Engine's power is equal to the number of creature cards in your graveyard. text=Nightstalker Engine's power is equal to the number of creature cards in your graveyard.
mana={4}{B} mana={4}{B}
type=Creature type=Creature
@@ -70197,7 +70205,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Overbeing of Myth name=Overbeing of Myth
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
auto=@each my draw:draw:1 auto=@each my draw:draw:1
text=Overbeing of Myth's power and toughness are each equal to the number of cards in your hand. -- At the beginning of your draw step, draw an additional card. text=Overbeing of Myth's power and toughness are each equal to the number of cards in your hand. -- At the beginning of your draw step, draw an additional card.
mana={GU}{GU}{GU}{GU}{GU} mana={GU}{GU}{GU}{GU}{GU}
@@ -70450,7 +70458,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Pack Rat name=Pack Rat
auto=type:rat:mybattlefield/type:rat:mybattlefield cdaactive anyzone=type:rat:mybattlefield/type:rat:mybattlefield cdaactive
auto={2}{B}{discard(*|myhand)}:token(253624) auto={2}{B}{discard(*|myhand)}:token(253624)
text=Pack Rat's power and toughness are each equal to the number of Rats you control. -- {2}{B}, Discard a card: Put a token onto the battlefield that's a copy of Pack Rat. text=Pack Rat's power and toughness are each equal to the number of Rats you control. -- {2}{B}, Discard a card: Put a token onto the battlefield that's a copy of Pack Rat.
mana={1}{B} mana={1}{B}
@@ -70694,7 +70702,7 @@ toughness=4
[/card] [/card]
[card] [card]
name=Pallimud name=Pallimud
auto=type:land[tapped]:opponentbattlefield/3 cdaactive anyzone=type:land[tapped]:opponentbattlefield/3 cdaactive
text=As Pallimud enters the battlefield, choose an opponent. -- Pallimud's power is equal to the number of tapped lands the chosen player controls. text=As Pallimud enters the battlefield, choose an opponent. -- Pallimud's power is equal to the number of tapped lands the chosen player controls.
mana={2}{R} mana={2}{R}
type=Creature type=Creature
@@ -71900,7 +71908,7 @@ toughness=6
[/card] [/card]
[card] [card]
name=Pestilence Rats name=Pestilence Rats
auto=othertype:rat:battlefield/3 cdaactive anyzone=othertype:rat:battlefield/3 cdaactive
text=Pestilence Rats's power is equal to the number of other Rats on the battlefield. (For example, as long as there are two other Rats on the battlefield, Pestilence Rats's power and toughness are 2/3.) text=Pestilence Rats's power is equal to the number of other Rats on the battlefield. (For example, as long as there are two other Rats on the battlefield, Pestilence Rats's power and toughness are 2/3.)
mana={2}{B} mana={2}{B}
type=Creature type=Creature
@@ -73404,7 +73412,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Plague Rats name=Plague Rats
auto=allmyname/allmyname cdaactive anyzone=allmyname/allmyname cdaactive
text=Plague Rats's power and toughness are each equal to the number of creatures named Plague Rats on the battlefield. text=Plague Rats's power and toughness are each equal to the number of creatures named Plague Rats on the battlefield.
mana={2}{B} mana={2}{B}
type=Creature type=Creature
@@ -74639,7 +74647,7 @@ subtype=Aura
[card] [card]
name=Primalcrux name=Primalcrux
abilities=trample abilities=trample
auto=type:manag:mybattlefield/type:manag:mybattlefield cdaactive anyzone=type:manag:mybattlefield/type:manag:mybattlefield cdaactive
text=Trample -- Chroma - Primalcrux's power and toughness are each equal to the number of green mana symbols in the mana costs of permanents you control. text=Trample -- Chroma - Primalcrux's power and toughness are each equal to the number of green mana symbols in the mana costs of permanents you control.
mana={G}{G}{G}{G}{G}{G} mana={G}{G}{G}{G}{G}{G}
type=Creature type=Creature
@@ -75329,7 +75337,7 @@ type=Enchantment
[/card] [/card]
[card] [card]
name=Psychosis Crawler name=Psychosis Crawler
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
auto=@drawof(player):life:-1 opponent auto=@drawof(player):life:-1 opponent
text=Psychosis Crawler's power and toughness are each equal to the number of cards in your hand. - Whenever you draw a card, each opponent loses 1 life. text=Psychosis Crawler's power and toughness are each equal to the number of cards in your hand. - Whenever you draw a card, each opponent loses 1 life.
mana={5} mana={5}
@@ -78392,7 +78400,7 @@ toughness=2
[card] [card]
name=Reckless One name=Reckless One
abilities=haste abilities=haste
auto=type:goblin:battlefield/type:goblin:battlefield cdaactive anyzone=type:goblin:battlefield/type:goblin:battlefield cdaactive
text=Haste -- Reckless One's power and toughness are each equal to the number of Goblins on the battlefield. text=Haste -- Reckless One's power and toughness are each equal to the number of Goblins on the battlefield.
mana={3}{R} mana={3}{R}
type=Creature type=Creature
@@ -79780,8 +79788,9 @@ type=Artifact
[/card] [/card]
[card] [card]
name=Revenant name=Revenant
alias=001100
abilities=flying abilities=flying
auto=type:creature:mygraveyard/type:creature:mygraveyard cdaactive anyzone=type:creature:mygraveyard/type:creature:mygraveyard cdaactive
text=Flying -- Revenant's power and toughness are each equal to the number of creature cards in your graveyard. text=Flying -- Revenant's power and toughness are each equal to the number of creature cards in your graveyard.
mana={4}{B} mana={4}{B}
type=Creature type=Creature
@@ -81838,7 +81847,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Rubblehulk name=Rubblehulk
auto=type:land:mybattlefield/type:land:mybattlefield cdaactive anyzone=type:land:mybattlefield/type:land:mybattlefield cdaactive
autohand={1}{R}{G}{discard}:name(bloodrush) target(creature[attacking]) type:land:mybattlefield/type:land:mybattlefield ueot autohand={1}{R}{G}{discard}:name(bloodrush) target(creature[attacking]) type:land:mybattlefield/type:land:mybattlefield ueot
text=Rubblehulk's power and toughness are each equal to the number of lands you control. -- Bloodrush — {1}{R}{G}, Discard Rubblehulk: Target attacking creature gets +X/+X until end of turn, where X is the number of lands you control. text=Rubblehulk's power and toughness are each equal to the number of lands you control. -- Bloodrush — {1}{R}{G}, Discard Rubblehulk: Target attacking creature gets +X/+X until end of turn, where X is the number of lands you control.
mana={4}{R}{G} mana={4}{R}{G}
@@ -82362,7 +82371,7 @@ type=Artifact
[card] [card]
name=Rusting Golem name=Rusting Golem
auto=fading:5 auto=fading:5
auto=counter{0%0.1.Fade}/counter{0%0.1.Fade} cdaactive anyzone=counter{0%0.1.Fade}/counter{0%0.1.Fade} cdaactive
text=Fading 5 (This creature enters the battlefield with five fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.) -- Rusting Golem's power and toughness are each equal to the number of fade counters on it. text=Fading 5 (This creature enters the battlefield with five fade counters on it. At the beginning of your upkeep, remove a fade counter from it. If you can't, sacrifice it.) -- Rusting Golem's power and toughness are each equal to the number of fade counters on it.
mana={4} mana={4}
type=Artifact Creature type=Artifact Creature
@@ -84429,7 +84438,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Scion of the Wild name=Scion of the Wild
auto=type:creature:myBattlefield/type:creature:myBattlefield cdaactive anyzone=type:creature:myBattlefield/type:creature:myBattlefield cdaactive
text=Scion of the Wild's power and toughness are each equal to the number of creatures you control. text=Scion of the Wild's power and toughness are each equal to the number of creatures you control.
mana={1}{G}{G} mana={1}{G}{G}
type=Creature type=Creature
@@ -86546,7 +86555,7 @@ toughness=3
name=Serpent of the Endless Sea name=Serpent of the Endless Sea
abilities=cantattack abilities=cantattack
auto=aslongas(island|opponentBattlefield) -cantattack auto=aslongas(island|opponentBattlefield) -cantattack
auto=type:island:myBattlefield/type:island:myBattlefield cdaactive anyzone=type:island:myBattlefield/type:island:myBattlefield cdaactive
text=Serpent of the Endless Sea's power and toughness are each equal to the number of Islands you control. -- Serpent of the Endless Sea can't attack unless defending player controls an Island. text=Serpent of the Endless Sea's power and toughness are each equal to the number of Islands you control. -- Serpent of the Endless Sea can't attack unless defending player controls an Island.
mana={4}{U} mana={4}{U}
type=Creature type=Creature
@@ -86619,7 +86628,7 @@ toughness=1
[/card] [/card]
[card] [card]
name=Serra Avatar name=Serra Avatar
auto=lifetotal/lifetotal cdaactive anyzone=lifetotal/lifetotal cdaactive
autograveyard=moveTo(ownerlibrary) && shuffle autograveyard=moveTo(ownerlibrary) && shuffle
text=Serra Avatar's power and toughness are each equal to your life total. -- When Serra Avatar is put into a graveyard from anywhere, shuffle it into its owner's library. text=Serra Avatar's power and toughness are each equal to your life total. -- When Serra Avatar is put into a graveyard from anywhere, shuffle it into its owner's library.
mana={4}{W}{W}{W} mana={4}{W}{W}{W}
@@ -89377,7 +89386,7 @@ toughness=5
[/card] [/card]
[card] [card]
name=Sima Yi, Wei Field Marshal name=Sima Yi, Wei Field Marshal
auto=type:swamp:myBattlefield/4 cdaactive anyzone=type:swamp:myBattlefield/4 cdaactive
text=Sima Yi, Wei Field Marshal's power is equal to the number of Swamps you control. text=Sima Yi, Wei Field Marshal's power is equal to the number of Swamps you control.
mana={5}{B} mana={5}{B}
type=Legendary Creature type=Legendary Creature
@@ -90842,7 +90851,7 @@ toughness=3
[card] [card]
name=Skyshroud War Beast name=Skyshroud War Beast
abilities=trample abilities=trample
auto=type:land[-basic]:opponentBattlefield/type:land[-basic]:opponentBattlefield cdaactive anyzone=type:land[-basic]:opponentBattlefield/type:land[-basic]:opponentBattlefield cdaactive
text=Trample -- As Skyshroud War Beast enters the battlefield, choose an opponent. -- Skyshroud War Beast's power and toughness are each equal to the number of nonbasic lands the chosen player controls. text=Trample -- As Skyshroud War Beast enters the battlefield, choose an opponent. -- Skyshroud War Beast's power and toughness are each equal to the number of nonbasic lands the chosen player controls.
mana={1}{G} mana={1}{G}
type=Creature type=Creature
@@ -90926,7 +90935,8 @@ toughness=3
[/card] [/card]
[card] [card]
name=Slag Fiend name=Slag Fiend
auto=type:artifact:graveyard/type:artifact:graveyard cdaactive alias=001100
anyzone=type:artifact:graveyard/type:artifact:graveyard cdaactive
text=Slag Fiend's power and toughness are each equal to the number of artifact cards in all graveyards. text=Slag Fiend's power and toughness are each equal to the number of artifact cards in all graveyards.
mana={R} mana={R}
type=Creature type=Creature
@@ -92448,7 +92458,7 @@ toughness=1
[card] [card]
name=Soramaro, First to Dream name=Soramaro, First to Dream
abilities=flying abilities=flying
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
auto={4}{H(land|myBattlefield)}:draw:1 auto={4}{H(land|myBattlefield)}:draw:1
text=Flying -- Soramaro, First to Dream's power and toughness are each equal to the number of cards in your hand. -- {4}, Return a land you control to its owner's hand: Draw a card. text=Flying -- Soramaro, First to Dream's power and toughness are each equal to the number of cards in your hand. -- {4}, Return a land you control to its owner's hand: Draw a card.
mana={4}{U}{U} mana={4}{U}{U}
@@ -93035,7 +93045,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Soulless One name=Soulless One
auto=pgbzombie/pgbzombie cdaactive anyzone=pgbzombie/pgbzombie cdaactive
text=Soulless One's power and toughness are each equal to the number of Zombies on the battlefield plus the number of Zombie cards in all graveyards. text=Soulless One's power and toughness are each equal to the number of Zombies on the battlefield plus the number of Zombie cards in all graveyards.
mana={3}{B} mana={3}{B}
type=Creature type=Creature
@@ -93092,7 +93102,7 @@ type=Instant
[card] [card]
name=Soulsurge Elemental name=Soulsurge Elemental
abilities=first strike abilities=first strike
auto=type:creature:myBattlefield/1 cdaactive anyzone=type:creature:myBattlefield/1 cdaactive
text=First strike -- Soulsurge Elemental's power is equal to the number of creatures you control. text=First strike -- Soulsurge Elemental's power is equal to the number of creatures you control.
mana={3}{R} mana={3}{R}
type=Creature type=Creature
@@ -93637,7 +93647,7 @@ toughness=1
[card] [card]
name=Spellheart Chimera name=Spellheart Chimera
abilities=flying,trample abilities=flying,trample
auto=pginstantsorcery/3 cdaactive anyzone=pginstantsorcery/3 cdaactive
text=Flying. -- Trample. -- Spellheart Chimera's power is equal to the number of instant and sorcery cards in your graveyard. text=Flying. -- Trample. -- Spellheart Chimera's power is equal to the number of instant and sorcery cards in your graveyard.
mana={1}{U}{R} mana={1}{U}{R}
type=Creature type=Creature
@@ -94631,8 +94641,9 @@ color=green
[/card] [/card]
[card] [card]
name=Splinterfright name=Splinterfright
alias=001100
abilities=trample abilities=trample
auto=type:creature:mygraveyard/type:creature:mygraveyard cdaactive anyzone=type:creature:mygraveyard/type:creature:mygraveyard cdaactive
auto=@each my upkeep:deplete:2 controller auto=@each my upkeep:deplete:2 controller
text=Trample -- Splinterfright's power and toughness are each equal to the number of creature cards in your graveyard -- At the beginning of your upkeep, put the top two cards of your library into your graveyard. text=Trample -- Splinterfright's power and toughness are each equal to the number of creature cards in your graveyard -- At the beginning of your upkeep, put the top two cards of your library into your graveyard.
mana={2}{G} mana={2}{G}
@@ -95035,7 +95046,7 @@ type=Enchantment
[/card] [/card]
[card] [card]
name=Squelching Leeches name=Squelching Leeches
auto=type:swamp:myBattlefield/type:swamp:myBattlefield cdaactive anyzone=type:swamp:myBattlefield/type:swamp:myBattlefield cdaactive
text=Squelching Leeches's power and toughness are each equal to the number of Swamps you control. text=Squelching Leeches's power and toughness are each equal to the number of Swamps you control.
mana={2}{B}{B} mana={2}{B}{B}
type=Creature type=Creature
@@ -97237,7 +97248,7 @@ toughness=6
[card] [card]
name=Sturmgeist name=Sturmgeist
abilities=flying abilities=flying
auto=type:*:myhand/type:*:myhand cdaactive anyzone=type:*:myhand/type:*:myhand cdaactive
auto=@combatdamaged(player) from(this):draw:1 controller auto=@combatdamaged(player) from(this):draw:1 controller
text=Flying -- Sturmgeist's power and toughness are each equal to the number of cards in your hand. -- Whenever Sturmgeist deals combat damage to a player, draw a card. text=Flying -- Sturmgeist's power and toughness are each equal to the number of cards in your hand. -- Whenever Sturmgeist deals combat damage to a player, draw a card.
mana={3}{U}{U} mana={3}{U}{U}
@@ -98406,7 +98417,7 @@ toughness=0
[/card] [/card]
[card] [card]
name=Swarm of Rats name=Swarm of Rats
auto=type:rat:mybattlefield/1 cdaactive anyzone=type:rat:mybattlefield/1 cdaactive
text=Swarm of Rats's power is equal to the number of Rats you control. text=Swarm of Rats's power is equal to the number of Rats you control.
mana={1}{B} mana={1}{B}
type=Creature type=Creature
@@ -98894,7 +98905,7 @@ type=Sorcery
[/card] [/card]
[card] [card]
name=Sylvan Yeti name=Sylvan Yeti
auto=type:*:myhand/4 cdaactive anyzone=type:*:myhand/4 cdaactive
text=Sylvan Yeti's power is equal to the number of cards in your hand. text=Sylvan Yeti's power is equal to the number of cards in your hand.
mana={2}{G}{G} mana={2}{G}{G}
type=Creature type=Creature
@@ -99087,11 +99098,10 @@ text=Syphon Soul deals 2 damage to each other player. You gain life equal to the
mana={2}{B} mana={2}{B}
type=Sorcery type=Sorcery
[/card] [/card]
#workaround szadek.
[card] [card]
name=Szadek, Lord of Secrets name=Szadek, Lord of Secrets
alias=89092
abilities=flying abilities=flying
auto=@combatdamaged(player) from(this):deplete:thatmuch opponent && life:thatmuch opponent && counter(1/1,thatmuch)
text=Flying -- If Szadek, Lord of Secrets would deal combat damage to a player, instead put that many +1/+1 counters on Szadek and that player puts that many cards from the top of his or her library into his or her graveyard. text=Flying -- If Szadek, Lord of Secrets would deal combat damage to a player, instead put that many +1/+1 counters on Szadek and that player puts that many cards from the top of his or her library into his or her graveyard.
mana={3}{U}{U}{B}{B} mana={3}{U}{U}{B}{B}
type=Legendary Creature type=Legendary Creature
@@ -99741,7 +99751,7 @@ toughness=7
[/card] [/card]
[card] [card]
name=Tarmogoyf name=Tarmogoyf
auto=gravecardtypes/plusonegravecardtypes cdaactive anyzone=gravecardtypes/plusonegravecardtypes cdaactive
text=Tarmogoyf's power is equal to the number of card types among cards in all graveyards and its toughness is equal to that number plus 1. (The card types are artifact, creature, enchantment, instant, land, planeswalker, sorcery, and tribal.) text=Tarmogoyf's power is equal to the number of card types among cards in all graveyards and its toughness is equal to that number plus 1. (The card types are artifact, creature, enchantment, instant, land, planeswalker, sorcery, and tribal.)
mana={1}{G} mana={1}{G}
type=Creature type=Creature
@@ -100774,8 +100784,9 @@ type=Artifact
[/card] [/card]
[card] [card]
name=Terravore name=Terravore
alias=001100
abilities=trample abilities=trample
auto=type:land:graveyard/type:land:graveyard cdaactive anyzone=type:land:graveyard/type:land:graveyard cdaactive
text=Trample -- Terravore's power and toughness are each equal to the number of land cards in all graveyards. text=Trample -- Terravore's power and toughness are each equal to the number of land cards in all graveyards.
mana={1}{G}{G} mana={1}{G}{G}
type=Creature type=Creature
@@ -100972,6 +100983,18 @@ mana={3}{p(U)}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Thada Adel, Acquisitor
abilities=islandwalk
auto=@combatdamagefoeof(player) from(this):name(exile artifact) notatarget(artifact|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[phaseactionmulti[endofturn once] moveto(ownerexile) all(this|exile)])) ueot)!
auto=@combatdamageof(player) from(this):name(exile artifact) notatarget(artifact|mylibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[phaseactionmulti[endofturn once] moveto(ownerexile) all(this|exile)])) ueot)!
text=Islandwalk -- Whenever Thada Adel, Acquisitor deals combat damage to a player, search that player's library for an artifact card and exile it. Then that player shuffles his or her library. Until end of turn, you may play that card.
mana={1}{U}{U}
type=Legendary Creature
subtype=Merfolk Rogue
power=2
toughness=2
[/card]
[card]
name=Thalakos Deceiver name=Thalakos Deceiver
abilities=shadow abilities=shadow
auto=@combat(notblocked) source(this):may moveTo(myBattlefield) target(creature|opponentBattlefield) && sacrifice all(this) auto=@combat(notblocked) source(this):may moveTo(myBattlefield) target(creature|opponentBattlefield) && sacrifice all(this)
@@ -102682,7 +102705,7 @@ toughness=5
[card] [card]
name=Tidewalker name=Tidewalker
auto=foreach(island|myBattlefield) counter(0/0,1,Time) oneshot auto=foreach(island|myBattlefield) counter(0/0,1,Time) oneshot
auto=counter{0%0.1.Time}/counter{0%0.1.Time} cdaactive anyzone=counter{0%0.1.Time}/counter{0%0.1.Time} cdaactive
auto=vanishing:0 auto=vanishing:0
text=Tidewalker enters the battlefield with a time counter on it for each Island you control. -- Vanishing (At the beginning of your upkeep, remove a time counter from this permanent. When the last is removed, sacrifice it.) -- Tidewalker's power and toughness are each equal to the number of time counters on it. text=Tidewalker enters the battlefield with a time counter on it for each Island you control. -- Vanishing (At the beginning of your upkeep, remove a time counter from this permanent. When the last is removed, sacrifice it.) -- Tidewalker's power and toughness are each equal to the number of time counters on it.
mana={2}{U} mana={2}{U}
@@ -105849,7 +105872,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Uktabi Wildcats name=Uktabi Wildcats
auto=type:forest:mybattlefield/type:forest:mybattlefield cdaactive anyzone=type:forest:mybattlefield/type:forest:mybattlefield cdaactive
auto={G}{S(forest|myBattlefield)}:regenerate auto={G}{S(forest|myBattlefield)}:regenerate
text=Uktabi Wildcats's power and toughness are each equal to the number of Forests you control. -- {G}, Sacrifice a Forest: Regenerate Uktabi Wildcats. text=Uktabi Wildcats's power and toughness are each equal to the number of Forests you control. -- {G}, Sacrifice a Forest: Regenerate Uktabi Wildcats.
mana={4}{G} mana={4}{G}
@@ -105987,7 +106010,8 @@ type=Artifact
[/card] [/card]
[card] [card]
name=Umbra Stalker name=Umbra Stalker
auto=type:manab:mygraveyard/type:manab:mygraveyard cdaactive alias=001100
anyzone=type:manab:mygraveyard/type:manab:mygraveyard cdaactive
text=Chroma - Umbra Stalker's power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard. text=Chroma - Umbra Stalker's power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard.
mana={4}{B}{B}{B} mana={4}{B}{B}{B}
type=Creature type=Creature
@@ -106105,6 +106129,17 @@ type=Enchantment
subtype=Aura subtype=Aura
[/card] [/card]
[card] [card]
name=Undead Alchemist
auto=lord(zombie|mybattlefield) libraryeater
auto=@movedTo(creature|opponentgraveyard) from(opponentlibrary):all(trigger[to]) moveto(exile) and!(token(Zombie,Creature Zombie,2/2,black) controller)!
text=If a Zombie you control would deal combat damage to a player, instead that player puts that many cards from the top of his or her library into his or her graveyard. -- Whenever a creature card is put into an opponent's graveyard from his or her library, exile that card and put a 2/2 black Zombie creature token onto the battlefield.
mana={3}{U}
type=Creature
subtype=Zombie
power=4
toughness=2
[/card]
[card]
name=Undead Executioner name=Undead Executioner
auto=@movedto(this|graveyard) from(battlefield):may target(creature) -2/-2 ueot auto=@movedto(this|graveyard) from(battlefield):may target(creature) -2/-2 ueot
text=When Undead Executioner dies, you may have target creature get -2/-2 until end of turn. text=When Undead Executioner dies, you may have target creature get -2/-2 until end of turn.
@@ -109886,7 +109921,7 @@ toughness=2
name=Elemental name=Elemental
type=Creature type=Creature
subtype=Elemental subtype=Elemental
auto=type:creature:mybattlefield/type:creature:mybattlefield cdaactive anyzone=type:creature:mybattlefield/type:creature:mybattlefield cdaactive
text=This creature's power and toughness are each equal to the number of creature cards in its controller's battlefield. text=This creature's power and toughness are each equal to the number of creature cards in its controller's battlefield.
power=* power=*
toughness=* toughness=*
@@ -112163,7 +112198,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Wayfaring Temple name=Wayfaring Temple
auto=type:creature:mybattlefield/type:creature:mybattlefield cdaactive anyzone=type:creature:mybattlefield/type:creature:mybattlefield cdaactive
auto=@combatdamaged(player) from(this) restriction{type(creature[token]|mybattlefield)~morethan~0}:name(populate) clone notatarget(creature[token]|mybattlefield) auto=@combatdamaged(player) from(this) restriction{type(creature[token]|mybattlefield)~morethan~0}:name(populate) clone notatarget(creature[token]|mybattlefield)
text=Wayfaring Temple's power and toughness are each equal to the number of creatures you control. -- Whenever Wayfaring Temple deals combat damage to a player, populate. (Put a token onto the battlefield that's a copy of a creature token you control.) text=Wayfaring Temple's power and toughness are each equal to the number of creatures you control. -- Whenever Wayfaring Temple deals combat damage to a player, populate. (Put a token onto the battlefield that's a copy of a creature token you control.)
mana={1}{G}{W} mana={1}{G}{W}
@@ -113235,7 +113270,7 @@ toughness=4
[card] [card]
name=Wilderness Elemental name=Wilderness Elemental
abilities=trample abilities=trample
auto=type:land[-basic]:opponentbattlefield/3 cdaactive anyzone=type:land[-basic]:opponentbattlefield/3 cdaactive
text=Trample -- Wilderness Elemental's power is equal to the number of nonbasic lands your opponents control. text=Trample -- Wilderness Elemental's power is equal to the number of nonbasic lands your opponents control.
mana={1}{R}{G} mana={1}{R}{G}
type=Creature type=Creature
@@ -115332,7 +115367,7 @@ type=Legendary Land
[/card] [/card]
[card] [card]
name=Yavimaya Kavu name=Yavimaya Kavu
auto=type:creature[red]:battlefield/type:creature[green]:battlefield cdaactive anyzone=type:creature[red]:battlefield/type:creature[green]:battlefield cdaactive
text=Yavimaya Kavu's power is equal to the number of red creatures on the battlefield. -- Yavimaya Kavu's toughness is equal to the number of green creatures on the battlefield. text=Yavimaya Kavu's power is equal to the number of red creatures on the battlefield. -- Yavimaya Kavu's toughness is equal to the number of green creatures on the battlefield.
mana={2}{R}{G} mana={2}{R}{G}
type=Creature type=Creature
@@ -115754,7 +115789,7 @@ toughness=3
[/card] [/card]
[card] [card]
name=Zendikar Incarnate name=Zendikar Incarnate
auto=type:land:mybattlefield/4 cdaactive anyzone=type:land:mybattlefield/4 cdaactive
text=Zendikar Incarnate's power is equal to the number of lands you control. text=Zendikar Incarnate's power is equal to the number of lands you control.
mana={2}{R}{G} mana={2}{R}{G}
type=Creature type=Creature

View File

@@ -12498,6 +12498,7 @@ text=Pyrotechnics deals 4 damage divided as you choose among any number of targe
mana={4}{R} mana={4}{R}
type=Sorcery type=Sorcery
[/card] [/card]
#anyzone is basic for now and used for cdaactive
[card] [card]
name=Qasali Ambusher name=Qasali Ambusher
text=Reach -- If a creature is attacking you and you control a Forest and a Plains, you may cast Qasali Ambusher without paying its mana cost and as though it had flash. text=Reach -- If a creature is attacking you and you control a Forest and a Plains, you may cast Qasali Ambusher without paying its mana cost and as though it had flash.
@@ -12812,6 +12813,7 @@ mana={2}{U}
type=Enchantment type=Enchantment
subtype=Aura subtype=Aura
[/card] [/card]
#needs suspend ability not suspend activated ability
[card] [card]
name=Reality Strobe name=Reality Strobe
text=Return target permanent to its owner's hand. Exile Reality Strobe with three time counters on it. -- Suspend 3 - {2}{U} (Rather than cast this card from your hand, you may pay {2}{U} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.) text=Return target permanent to its owner's hand. Exile Reality Strobe with three time counters on it. -- Suspend 3 - {2}{U} (Rather than cast this card from your hand, you may pay {2}{U} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)
@@ -13490,6 +13492,7 @@ subtype=Elemental
power=3 power=3
toughness=2 toughness=2
[/card] [/card]
#seems possible
[card] [card]
name=Roiling Horror name=Roiling Horror
text=Roiling Horror's power and toughness are each equal to your life total minus the life total of an opponent with the most life. -- Suspend X - {X}{B}{B}{B}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{B}{B}{B} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Roiling Horror while it's exiled, target player loses 1 life and you gain 1 life. text=Roiling Horror's power and toughness are each equal to your life total minus the life total of an opponent with the most life. -- Suspend X - {X}{B}{B}{B}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{B}{B}{B} and exile it with X time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) -- Whenever a time counter is removed from Roiling Horror while it's exiled, target player loses 1 life and you gain 1 life.
@@ -13939,6 +13942,7 @@ subtype=Giant Warrior
power=4 power=4
toughness=5 toughness=5
[/card] [/card]
#modded ingest
[card] [card]
name=Scalpelexis name=Scalpelexis
text=Flying (This creature can't be blocked except by creatures with flying or reach.) -- Whenever Scalpelexis deals combat damage to a player, that player exiles the top four cards of his or her library. If two or more of those cards have the same name, repeat this process. text=Flying (This creature can't be blocked except by creatures with flying or reach.) -- Whenever Scalpelexis deals combat damage to a player, that player exiles the top four cards of his or her library. If two or more of those cards have the same name, repeat this process.
@@ -14093,6 +14097,7 @@ text=Look at the top X cards of target opponent's library. Exile one of those ca
mana={X}{U}{B} mana={X}{U}{B}
type=Sorcery type=Sorcery
[/card] [/card]
#moverandom?
[card] [card]
name=Search for Survivors name=Search for Survivors
text=Reorder your graveyard at random. An opponent chooses a card at random in your graveyard. If it's a creature card, put it onto the battlefield. Otherwise, exile it. text=Reorder your graveyard at random. An opponent chooses a card at random in your graveyard. If it's a creature card, put it onto the battlefield. Otherwise, exile it.
@@ -14480,6 +14485,7 @@ mana={3}{U}
type=Instant type=Instant
subtype=Arcane subtype=Arcane
[/card] [/card]
#phaseactionmulti?
[card] [card]
name=Shifty Doppelganger name=Shifty Doppelganger
text={3}{U}, Exile Shifty Doppelganger: You may put a creature card from your hand onto the battlefield. If you do, that creature gains haste until end of turn. At the beginning of the next end step, sacrifice that creature. If you do, return Shifty Doppelganger to the battlefield. text={3}{U}, Exile Shifty Doppelganger: You may put a creature card from your hand onto the battlefield. If you do, that creature gains haste until end of turn. At the beginning of the next end step, sacrifice that creature. If you do, return Shifty Doppelganger to the battlefield.
@@ -14944,6 +14950,7 @@ type=Enchantment
subtype=Aura subtype=Aura
text=Enchant creature Enchanted creature gets +1/+1 and has "Whenever this creature deals damage to an opponent, you may draw a card." Totem armor (If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.) text=Enchant creature Enchanted creature gets +1/+1 and has "Whenever this creature deals damage to an opponent, you may draw a card." Totem armor (If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.)
[/card] [/card]
#manaflashback rule
[card] [card]
name=Snapcaster Mage name=Snapcaster Mage
abilities=flash abilities=flash
@@ -16224,12 +16231,6 @@ type=Sorcery
text=Put a 1/1 colorless Expansion-Symbol creature token into play for each different expansion symbol among permanents you control. text=Put a 1/1 colorless Expansion-Symbol creature token into play for each different expansion symbol among permanents you control.
[/card] [/card]
[card] [card]
name=Syncopate
text=Counter target spell unless its controller pays {X}. If that spell is countered this way, exile it instead of putting it into its owner's graveyard.
mana={X}{U}
type=Instant
[/card]
[card]
name=Synod Artificer name=Synod Artificer
text={X}, {T}: Tap X target noncreature artifacts. -- {X}, {T}: Untap X target noncreature artifacts. text={X}, {T}: Tap X target noncreature artifacts. -- {X}, {T}: Untap X target noncreature artifacts.
mana={2}{U} mana={2}{U}
@@ -16490,15 +16491,6 @@ type=Planeswalker
subtype=Tezzeret subtype=Tezzeret
[/card] [/card]
[card] [card]
name=Thada Adel, Acquisitor
text=Islandwalk -- Whenever Thada Adel, Acquisitor deals combat damage to a player, search that player's library for an artifact card and exile it. Then that player shuffles his or her library. Until end of turn, you may play that card.
mana={1}{U}{U}
type=Legendary Creature
subtype=Merfolk Rogue
power=2
toughness=2
[/card]
[card]
name=Thalakos Dreamsower name=Thalakos Dreamsower
text=Shadow (This creature can block or be blocked by only creatures with shadow.) -- You may choose not to untap Thalakos Dreamsower during your untap step. -- Whenever Thalakos Dreamsower deals damage to an opponent, tap target creature. That creature doesn't untap during its controller's untap step for as long as Thalakos Dreamsower remains tapped. text=Shadow (This creature can block or be blocked by only creatures with shadow.) -- You may choose not to untap Thalakos Dreamsower during your untap step. -- Whenever Thalakos Dreamsower deals damage to an opponent, tap target creature. That creature doesn't untap during its controller's untap step for as long as Thalakos Dreamsower remains tapped.
mana={2}{U} mana={2}{U}
@@ -17284,17 +17276,6 @@ mana={2}{U}
type=Sorcery type=Sorcery
[/card] [/card]
[card] [card]
name=Undead Alchemist
auto=@combatdamaged(player) from(zombie|mybattlefield):deplete:thatmuch opponent && life:thatmuch opponent
auto=@movedTo(creature|opponentgraveyard) from(opponentlibrary):token(Zombie,Creature Zombie,2/2,black)
text=If a Zombie you control would deal combat damage to a player, instead that player puts that many cards from the top of his or her library into his or her graveyard. -- Whenever a creature card is put into an opponent's graveyard from his or her library, exile that card and put a 2/2 black Zombie creature token onto the battlefield.
mana={3}{U}
type=Creature
subtype=Zombie
power=4
toughness=2
[/card]
[card]
name=Undercity Informer name=Undercity Informer
text={1}, Sacrifice a creature: Target player reveals cards from the top of his or her library until he or she reveals a land card, then puts those cards into his or her graveyard. text={1}, Sacrifice a creature: Target player reveals cards from the top of his or her library until he or she reveals a land card, then puts those cards into his or her graveyard.
mana={2}{B} mana={2}{B}

View File

@@ -213,7 +213,7 @@ public:
COUNTERS = 30, COUNTERS = 30,
PUT_INTO_PLAY_WITH_KICKER = 31, PUT_INTO_PLAY_WITH_KICKER = 31,
STANDARD_FIZZLER = 32, STANDARD_FIZZLER = 32,
CASTINGRAVEYARD_COST = 33, PAYZERO_COST = 33,
}; };
}; };

View File

@@ -254,24 +254,7 @@ public:
bool isTargetter(); bool isTargetter();
int cardistargetter; int cardistargetter;
int myconvertedcost; int myconvertedcost;
ManaCost * computeNewCost(MTGCardInstance * card,ManaCost * oldCost) ManaCost * computeNewCost(MTGCardInstance * card,ManaCost * oldCost);
{
if(card->isLand())
return oldCost;
if(!card)
return NULL;
//i don't know why this method doesn't affect cards in hand, but is working on other zones....//
//pay zero costs//
//kicker???...//
//morph cost todo//
//trinisphere must be here below//
if(card->has(Constants::TRINISPHERE))
for(int jj = oldCost->getConvertedCost(); jj < 3; jj++)
oldCost->add(Constants::MTG_COLOR_ARTIFACT, 1);
return oldCost;
};
void eventattacked(); void eventattacked();
void eventattackedAlone(); void eventattackedAlone();

View File

@@ -237,7 +237,8 @@ class Constants
PAYZERO = 119, PAYZERO = 119,
TRINISPHERE = 120, TRINISPHERE = 120,
CANPLAYFROMEXILE = 121, CANPLAYFROMEXILE = 121,
NB_BASIC_ABILITIES = 122, LIBRARYEATER = 122,
NB_BASIC_ABILITIES = 123,
RARITY_S = 'S', //Special Rarity RARITY_S = 'S', //Special Rarity

View File

@@ -175,18 +175,21 @@ public:
virtual MTGMorphCostRule * clone() const; virtual MTGMorphCostRule * clone() const;
}; };
class MTGPlayFromGraveyardRule: public MTGAlternativeCostRule class MTGPayZeroRule: public MTGAlternativeCostRule
{ {
public: public:
int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL); int isReactingToClick(MTGCardInstance * card, ManaCost * mana = NULL);
int reactToClick(MTGCardInstance * card); int reactToClick(MTGCardInstance * card);
string CustomName;
virtual ostream& toString(ostream& out) const; virtual ostream& toString(ostream& out) const;
MTGPlayFromGraveyardRule(GameObserver* observer, int _id); MTGPayZeroRule(GameObserver* observer, int _id);
const string getMenuText() const string getMenuText()
{ {
return "Cast Card From Graveyard"; if(CustomName.size())
return CustomName.c_str();
return "Pay Zero To Cast";
} }
virtual MTGPlayFromGraveyardRule * clone() const; virtual MTGPayZeroRule * clone() const;
}; };

View File

@@ -627,6 +627,10 @@ int OrderedAIAction::getEfficiency()
{ {
efficiency += 65; efficiency += 65;
} }
else if (dynamic_cast<MTGAlternativeCostRule *>(a))
{
efficiency += 55;
}
SAFE_DELETE(transAbility); SAFE_DELETE(transAbility);
return efficiency; return efficiency;
} }
@@ -1726,6 +1730,310 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
cd.setType(type); cd.setType(type);
card = NULL; card = NULL;
gotPayments = vector<MTGAbility*>(); gotPayments = vector<MTGAbility*>();
//canplayfromgraveyard
while ((card = cd.nextmatch(game->graveyard, card))&& card->has(Constants::CANPLAYFROMGRAVEYARD))
{
if (!CanHandleCost(card->getManaCost(),card))
continue;
if (card->hasType(Subtypes::TYPE_LAND))
{
if (game->playRestrictions->canPutIntoZone(card, game->inPlay) == PlayRestriction::CANT_PLAY)
continue;
}
else
{
if (game->playRestrictions->canPutIntoZone(card, game->stack) == PlayRestriction::CANT_PLAY)
continue;
}
if (card->hasType(Subtypes::TYPE_LEGENDARY) && game->inPlay->findByName(card->name))
continue;
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
continue;
if(hints && hints->HintSaysItsForCombo(observer,card))
{
if(hints->canWeCombo(observer,card,this))
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
nextCardToPlay = card;
gotPayments.clear();
if((!pMana->canAfford(nextCardToPlay->getManaCost()) || nextCardToPlay->getManaCost()->getKicker()))
gotPayments = canPayMana(nextCardToPlay,nextCardToPlay->getManaCost());
return activateCombo();
}
else
{
nextCardToPlay = NULL;
continue;
}
}
int currentCost = card->getManaCost()->getConvertedCost();
int hasX = card->getManaCost()->hasX();
gotPayments.clear();
if((!pMana->canAfford(card->getManaCost()) || card->getManaCost()->getKicker()))
gotPayments = canPayMana(card,card->getManaCost());
//for preformence reason we only look for specific mana if the payment couldn't be made with pmana.
if ((currentCost > maxCost || hasX) && (gotPayments.size() || pMana->canAfford(card->getManaCost())))
{
TargetChooserFactory tcf(observer);
TargetChooser * tc = tcf.createTargetChooser(card);
int shouldPlayPercentage = 0;
if (tc)
{
int hasTarget = chooseTarget(tc,NULL,NULL,true);
if(
(tc->maxtargets > hasTarget && tc->maxtargets > 1 && !tc->targetMin && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS) ||//target=<3>creature
(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS && hasTarget < 1)//target=creatures
)
hasTarget = 0;
if (!hasTarget)//single target covered here.
{
SAFE_DELETE(tc);
continue;
}
shouldPlayPercentage = 90;
if(tc->targetMin && hasTarget < tc->maxtargets)
shouldPlayPercentage = 0;
if(tc->maxtargets > 1 && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS && hasTarget <= tc->maxtargets)
{
int maxA = hasTarget-tc->maxtargets;
shouldPlayPercentage += (10*maxA);//reduce the chances of playing multitarget if we are not above max targets.
}
if(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS)
{
shouldPlayPercentage = 40 + (10*hasTarget);
int totalCost = pMana->getConvertedCost()-currentCost;
int totalTargets = hasTarget+hasTarget;
if(hasX && totalCost <= totalTargets)// {x} spell with unlimited targeting tend to divide damage, we want atleast 1 damage per target before casting.
{
shouldPlayPercentage = 0;
}
}
SAFE_DELETE(tc);
}
else
{
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD)
{
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay)
{
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else if (card->isLand())
{
shouldPlayPercentage = 90;
}
else if (!card->isLand() && card->has(Constants::PAYZERO))
{
shouldPlayPercentage = 70;
}
else
{
// shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance.
shouldPlayPercentage = 1;
}
}
//Reduce the chances of playing a spell with X cost if available mana is low
if (hasX)
{
int xDiff = pMana->getConvertedCost() - currentCost;
if (xDiff < 0)
xDiff = 0;
shouldPlayPercentage = shouldPlayPercentage - static_cast<int> ((shouldPlayPercentage * 1.9f) / (1 + xDiff));
}
if(card->getManaCost() && card->getManaCost()->getKicker() && card->getManaCost()->getKicker()->isMulti)
{
shouldPlayPercentage = 10* size_t(gotPayments.size())/int(1+(card->getManaCost()->getConvertedCost()+card->getManaCost()->getKicker()->getConvertedCost()));
if(shouldPlayPercentage <= 10)
shouldPlayPercentage = shouldPlayPercentage/3;
}
DebugTrace("Should I play " << (card ? card->name : "Nothing" ) << "?" << endl
<<"shouldPlayPercentage = "<< shouldPlayPercentage);
if(card->getRestrictions().size())
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
}
int randomChance = randomGenerator.random();
int chance = randomChance % 100;
if (chance > shouldPlayPercentage)
continue;
if(shouldPlayPercentage <= 10)
{
DebugTrace("shouldPlayPercentage was less than 10 this was a lottery roll on RNG");
}
nextCardToPlay = card;
maxCost = currentCost;
if (hasX)
maxCost = pMana->getConvertedCost();
}
}
//canplayfromexile
while ((card = cd.nextmatch(game->exile, card))&& card->has(Constants::CANPLAYFROMEXILE))
{
if (!CanHandleCost(card->getManaCost(),card))
continue;
if (card->hasType(Subtypes::TYPE_LAND))
{
if (game->playRestrictions->canPutIntoZone(card, game->inPlay) == PlayRestriction::CANT_PLAY)
continue;
}
else
{
if (game->playRestrictions->canPutIntoZone(card, game->stack) == PlayRestriction::CANT_PLAY)
continue;
}
if (card->hasType(Subtypes::TYPE_LEGENDARY) && game->inPlay->findByName(card->name))
continue;
if (card->hasType(Subtypes::TYPE_PLANESWALKER) && card->types.size() > 0 && game->inPlay->hasTypeSpecificInt(Subtypes::TYPE_PLANESWALKER,card->types[1]))
continue;
if(hints && hints->HintSaysItsForCombo(observer,card))
{
if(hints->canWeCombo(observer,card,this))
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
nextCardToPlay = card;
gotPayments.clear();
if((!pMana->canAfford(nextCardToPlay->getManaCost()) || nextCardToPlay->getManaCost()->getKicker()))
gotPayments = canPayMana(nextCardToPlay,nextCardToPlay->getManaCost());
return activateCombo();
}
else
{
nextCardToPlay = NULL;
continue;
}
}
int currentCost = card->getManaCost()->getConvertedCost();
int hasX = card->getManaCost()->hasX();
gotPayments.clear();
if((!pMana->canAfford(card->getManaCost()) || card->getManaCost()->getKicker()))
gotPayments = canPayMana(card,card->getManaCost());
//for preformence reason we only look for specific mana if the payment couldn't be made with pmana.
if ((currentCost > maxCost || hasX) && (gotPayments.size() || pMana->canAfford(card->getManaCost())))
{
TargetChooserFactory tcf(observer);
TargetChooser * tc = tcf.createTargetChooser(card);
int shouldPlayPercentage = 0;
if (tc)
{
int hasTarget = chooseTarget(tc,NULL,NULL,true);
if(
(tc->maxtargets > hasTarget && tc->maxtargets > 1 && !tc->targetMin && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS) ||//target=<3>creature
(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS && hasTarget < 1)//target=creatures
)
hasTarget = 0;
if (!hasTarget)//single target covered here.
{
SAFE_DELETE(tc);
continue;
}
shouldPlayPercentage = 90;
if(tc->targetMin && hasTarget < tc->maxtargets)
shouldPlayPercentage = 0;
if(tc->maxtargets > 1 && tc->maxtargets != TargetChooser::UNLITMITED_TARGETS && hasTarget <= tc->maxtargets)
{
int maxA = hasTarget-tc->maxtargets;
shouldPlayPercentage += (10*maxA);//reduce the chances of playing multitarget if we are not above max targets.
}
if(tc->maxtargets == TargetChooser::UNLITMITED_TARGETS)
{
shouldPlayPercentage = 40 + (10*hasTarget);
int totalCost = pMana->getConvertedCost()-currentCost;
int totalTargets = hasTarget+hasTarget;
if(hasX && totalCost <= totalTargets)// {x} spell with unlimited targeting tend to divide damage, we want atleast 1 damage per target before casting.
{
shouldPlayPercentage = 0;
}
}
SAFE_DELETE(tc);
}
else
{
int shouldPlay = effectBadOrGood(card);
if (shouldPlay == BAKA_EFFECT_GOOD)
{
shouldPlayPercentage = 90;
}
else if (BAKA_EFFECT_DONTKNOW == shouldPlay)
{
//previously shouldPlayPercentage = 80;, I found this a little to high
//for cards which AI had no idea how to use.
shouldPlayPercentage = 60;
}
else if (card->isLand())
{
shouldPlayPercentage = 90;
}
else if (!card->isLand() && card->has(Constants::PAYZERO))
{
shouldPlayPercentage = 70;
}
else
{
// shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance.
shouldPlayPercentage = 1;
}
}
//Reduce the chances of playing a spell with X cost if available mana is low
if (hasX)
{
int xDiff = pMana->getConvertedCost() - currentCost;
if (xDiff < 0)
xDiff = 0;
shouldPlayPercentage = shouldPlayPercentage - static_cast<int> ((shouldPlayPercentage * 1.9f) / (1 + xDiff));
}
if(card->getManaCost() && card->getManaCost()->getKicker() && card->getManaCost()->getKicker()->isMulti)
{
shouldPlayPercentage = 10* size_t(gotPayments.size())/int(1+(card->getManaCost()->getConvertedCost()+card->getManaCost()->getKicker()->getConvertedCost()));
if(shouldPlayPercentage <= 10)
shouldPlayPercentage = shouldPlayPercentage/3;
}
DebugTrace("Should I play " << (card ? card->name : "Nothing" ) << "?" << endl
<<"shouldPlayPercentage = "<< shouldPlayPercentage);
if(card->getRestrictions().size())
{
AbilityFactory af(observer);
int canPlay = af.parseCastRestrictions(card,card->controller(),card->getRestrictions());
if(!canPlay)
continue;
}
int randomChance = randomGenerator.random();
int chance = randomChance % 100;
if (chance > shouldPlayPercentage)
continue;
if(shouldPlayPercentage <= 10)
{
DebugTrace("shouldPlayPercentage was less than 10 this was a lottery roll on RNG");
}
nextCardToPlay = card;
maxCost = currentCost;
if (hasX)
maxCost = pMana->getConvertedCost();
}
}
while ((card = cd.nextmatch(game->hand, card))) while ((card = cd.nextmatch(game->hand, card)))
{ {
if (!CanHandleCost(card->getManaCost(),card)) if (!CanHandleCost(card->getManaCost(),card))
@@ -1829,6 +2137,10 @@ MTGCardInstance * AIPlayerBaka::FindCardToPlay(ManaCost * pMana, const char * ty
{ {
shouldPlayPercentage = 90; shouldPlayPercentage = 90;
} }
else if (!card->isLand() && card->has(Constants::PAYZERO))
{
shouldPlayPercentage = 70;
}
else else
{ {
// shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance. // shouldPlay == baka_effect_bad giving it a 1 for odd ball lottery chance.
@@ -2109,6 +2421,56 @@ int AIPlayerBaka::computeActions()
nextCardToPlay = NULL; nextCardToPlay = NULL;
count++; count++;
} }
if(nextCardToPlay == NULL)//check if there is a free card to play, play it....
{//TODO: add potential mana if we can pay if there is a cost increaser in play
CardDescriptor cd;
if (game->hand->hasAbility(Constants::PAYZERO))
{
//Attempt to put free cards into play
cd.init();
cd.SetExclusionColor(Constants::MTG_COLOR_LAND);
MTGCardInstance *freecard = cd.match(game->hand);
int canCastCard = game->playRestrictions->canPutIntoZone(freecard, game->inPlay);
if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1))
{
MTGAbility * castFreeCard = observer->mLayers->actionLayer()->getAbility(MTGAbility::PAYZERO_COST);
AIAction * aa = NEW AIAction(this, castFreeCard, freecard); //TODO putinplay action
clickstream.push(aa);
break;
}
}
if (game->graveyard->hasAbility(Constants::PAYZERO) && game->graveyard->hasAbility(Constants::CANPLAYFROMGRAVEYARD))
{
//Attempt to put free cards into play
cd.init();
cd.SetExclusionColor(Constants::MTG_COLOR_LAND);
MTGCardInstance *freecard = cd.match(game->graveyard);
int canCastCard = game->playRestrictions->canPutIntoZone(freecard, game->inPlay);
if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && freecard->has(Constants::CANPLAYFROMGRAVEYARD) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1) && (freecard->alias != 001100))
{
MTGAbility * castFreeCard = observer->mLayers->actionLayer()->getAbility(MTGAbility::PAYZERO_COST);
AIAction * aa = NEW AIAction(this, castFreeCard, freecard); //TODO putinplay action
clickstream.push(aa);
break;
}
}
if (game->exile->hasAbility(Constants::PAYZERO) && game->exile->hasAbility(Constants::CANPLAYFROMEXILE))
{
//Attempt to put free cards into play
cd.init();
cd.SetExclusionColor(Constants::MTG_COLOR_LAND);
MTGCardInstance *freecard = cd.match(game->exile);
int canCastCard = game->playRestrictions->canPutIntoZone(freecard, game->inPlay);
if (freecard && (canCastCard == PlayRestriction::CAN_PLAY) && freecard->has(Constants::PAYZERO) && freecard->has(Constants::CANPLAYFROMEXILE) && (freecard->getIncreasedManaCost()->getConvertedCost() < 1) && (freecard->alias != 001100))
{
MTGAbility * castFreeCard = observer->mLayers->actionLayer()->getAbility(MTGAbility::PAYZERO_COST);
AIAction * aa = NEW AIAction(this, castFreeCard, freecard); //TODO putinplay action
clickstream.push(aa);
break;
}
}
}//end
} }
SAFE_DELETE(currentMana); SAFE_DELETE(currentMana);

View File

@@ -126,7 +126,35 @@ int Damage::resolve()
} }
_target->doDamageTest = 1; _target->doDamageTest = 1;
} }
if (target->type_as_damageable == Damageable::DAMAGEABLE_PLAYER)
{
if(source->has(Constants::LIBRARYEATER) && typeOfDamage == 1)
{
for (int j = damage; j > 0; j--)
{
if(((Player*)target)->game->library->nb_cards)
((Player*)target)->game->putInZone(((Player*)target)->game->library->cards[((Player*)target)->game->library->nb_cards - 1], ((Player*)target)->game->library, ((Player*)target)->game->graveyard);
}
damage = 0;
}
if(source->alias == 89092 && typeOfDamage == 1)//Szadek Lord of Secrets
{
for (int j = damage; j > 0; j--)
{
if(((Player*)target)->game->library->nb_cards)
((Player*)target)->game->putInZone(((Player*)target)->game->library->cards[((Player*)target)->game->library->nb_cards - 1], ((Player*)target)->game->library, ((Player*)target)->game->graveyard);
source->counters->addCounter(1, 1);
}
damage = 0;
}
if (!damage)
{
state = RESOLVED_NOK;
delete (e);
return 0;
}
}
int a = damage; int a = damage;
if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && (source->has(Constants::WITHER) || source->has( if (target->type_as_damageable == Damageable::DAMAGEABLE_MTGCARDINSTANCE && (source->has(Constants::WITHER) || source->has(

View File

@@ -1156,7 +1156,7 @@ void GameObserver::Affinity()
card->getManaCost()->remove(color,1); card->getManaCost()->remove(color,1);
} }
} }
//SAFE_DELETE(original); SAFE_DELETE(original);
}//end }//end
} }
} }

View File

@@ -1156,10 +1156,10 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
observer->addObserver(NEW MTGMorphCostRule(observer, -1)); observer->addObserver(NEW MTGMorphCostRule(observer, -1));
return NULL; return NULL;
} }
found = s.find("playfromgraveyardrule"); found = s.find("payzerorule");
if(found != string::npos) if(found != string::npos)
{ {
observer->addObserver(NEW MTGPlayFromGraveyardRule(observer, -1)); observer->addObserver(NEW MTGPayZeroRule(observer, -1));
return NULL; return NULL;
} }
//this rule handles attacking ability during attacker phase //this rule handles attacking ability during attacker phase
@@ -3080,7 +3080,11 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
} }
else if(s.find("cdaactive") != string::npos) else if(s.find("cdaactive") != string::npos)
{ {
return NEW APowerToughnessModifier(observer, id, card, target, wppt,s,true); MTGAbility * a = NEW APowerToughnessModifier(observer, id, card, target, wppt,s,true);
a->forcedAlive = 1;
a->forceDestroy = -1;
return a;
//return NEW APowerToughnessModifier(observer, id, card, target, wppt,s,true);
} }
else else
return NEW APowerToughnessModifier(observer, id, card, target, wppt,s,nonstatic); return NEW APowerToughnessModifier(observer, id, card, target, wppt,s,nonstatic);
@@ -3689,9 +3693,6 @@ 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))
{ {
@@ -3754,7 +3755,7 @@ int AbilityFactory::getAbilities(vector<MTGAbility *> * v, Spell * spell, MTGCar
if (dest == zones->exile) if (dest == zones->exile)
{ {
magicText = card->magicTexts["exile"]; magicText = card->magicTexts["exile"];
card->exileEffects = true; card->exileEffects = true;
break; break;
} }
if (dest == zones->library) if (dest == zones->library)

View File

@@ -918,6 +918,25 @@ JQuadPtr MTGCardInstance::getIcon()
return WResourceManager::Instance()->RetrieveCard(this, CACHE_THUMB); return WResourceManager::Instance()->RetrieveCard(this, CACHE_THUMB);
} }
ManaCost * MTGCardInstance::computeNewCost(MTGCardInstance * card,ManaCost * oldCost)
{
if(card->isLand())
return oldCost;
if(!card)
return oldCost;
//use forcedalive//
//pay zero costs//
//kicker???...//
//morph cost todo//
//trinisphere must be here below//
if(card->has(Constants::TRINISPHERE))
for(int jj = oldCost->getConvertedCost(); jj < 3; jj++)
oldCost->add(Constants::MTG_COLOR_ARTIFACT, 1);
return oldCost;
}
MTGCardInstance * MTGCardInstance::getNextPartner() MTGCardInstance * MTGCardInstance::getNextPartner()
{ {
MTGInPlay * inplay = controller()->game->inPlay; MTGInPlay * inplay = controller()->game->inPlay;

View File

@@ -93,6 +93,16 @@ int MTGAllCards::processConfLine(string &s, MTGCard *card, CardPrimitive * primi
} }
} }
} }
if (key == "anyzone")
{
if (!primitive) primitive = NEW CardPrimitive();
primitive->addMagicText(val,"hand");
primitive->addMagicText(val,"library");
primitive->addMagicText(val,"graveyard");
primitive->addMagicText(val,"stack");
primitive->addMagicText(val,"exile");
primitive->addMagicText(val);
}
break; break;
case 'b': //buyback case 'b': //buyback

View File

@@ -148,9 +148,10 @@ const char* Constants::MTGBasicAbilities[] = {
"protectionfromcoloredspells", "protectionfromcoloredspells",
"mygcreatureexiler", "mygcreatureexiler",
"oppgcreatureexiler", "oppgcreatureexiler",
"payzero", "zerocast",
"trinisphere", "trinisphere",
"canplayfromexile" "canplayfromexile",
"libraryeater"
}; };
map<string,int> Constants::MTGBasicAbilitiesMap; map<string,int> Constants::MTGBasicAbilitiesMap;

View File

@@ -284,8 +284,10 @@ int MTGPutInPlayRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
{ {
int cardsinhand = game->players[0]->game->hand->nb_cards; int cardsinhand = game->players[0]->game->hand->nb_cards;
Player * player = game->currentlyActing(); Player * player = game->currentlyActing();
if (!player->game->hand->hasCard(card)) if (!player->game->hand->hasCard(card) && !player->game->graveyard->hasCard(card) && !player->game->exile->hasCard(card))
return 0; return 0;
if ((player->game->graveyard->hasCard(card) && !card->has(Constants::CANPLAYFROMGRAVEYARD)) || (player->game->exile->hasCard(card) && !card->has(Constants::CANPLAYFROMEXILE)))
return 0;
if ((game->turn < 1) && (cardsinhand != 0) && (card->basicAbilities[(int)Constants::LEYLINE]) if ((game->turn < 1) && (cardsinhand != 0) && (card->basicAbilities[(int)Constants::LEYLINE])
&& game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN && game->getCurrentGamePhase() == MTG_PHASE_FIRSTMAIN
&& game->players[0]->game->graveyard->nb_cards == 0 && game->players[0]->game->graveyard->nb_cards == 0
@@ -295,7 +297,7 @@ int MTGPutInPlayRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
if (card->basicAbilities[(int)Constants::LEYLINE]) if (card->basicAbilities[(int)Constants::LEYLINE])
{ {
MTGCardInstance * copy = player->game->putInZone(card, player->game->hand, player->game->temp); MTGCardInstance * copy = player->game->putInZone(card, card->currentZone, player->game->temp);
Spell * spell = NEW Spell(game, copy); Spell * spell = NEW Spell(game, copy);
spell->resolve(); spell->resolve();
delete spell; delete spell;
@@ -412,7 +414,7 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card)
delete previousManaPool; delete previousManaPool;
if (card->isLand()) if (card->isLand())
{ {
MTGCardInstance * copy = player->game->putInZone(card, player->game->hand, player->game->temp); MTGCardInstance * copy = player->game->putInZone(card, card->currentZone, player->game->temp);
Spell * spell = NEW Spell(game, 0,copy,NULL,NULL, payResult); Spell * spell = NEW Spell(game, 0,copy,NULL,NULL, payResult);
spell->resolve(); spell->resolve();
delete spellCost; delete spellCost;
@@ -421,7 +423,7 @@ int MTGPutInPlayRule::reactToClick(MTGCardInstance * card)
else else
{ {
Spell * spell = NULL; Spell * spell = NULL;
MTGCardInstance * copy = player->game->putInZone(card, player->game->hand, player->game->stack); MTGCardInstance * copy = player->game->putInZone(card, card->currentZone, player->game->stack);
if (game->targetChooser) if (game->targetChooser)
{ {
spell = game->mLayers->stackLayer()->addSpell(copy, game->targetChooser, spellCost, payResult, 0); spell = game->mLayers->stackLayer()->addSpell(copy, game->targetChooser, spellCost, payResult, 0);
@@ -475,8 +477,10 @@ int MTGKickerRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
if(OptionKicker::KICKER_ALWAYS == options[Options::KICKERPAYMENT].number) if(OptionKicker::KICKER_ALWAYS == options[Options::KICKERPAYMENT].number)
return 0; return 0;
Player * player = game->currentlyActing(); Player * player = game->currentlyActing();
if(!player->game->hand->hasCard(card)) if (!player->game->hand->hasCard(card) && !player->game->graveyard->hasCard(card) && !player->game->exile->hasCard(card))
return 0; return 0;
if ((player->game->graveyard->hasCard(card) && !card->has(Constants::CANPLAYFROMGRAVEYARD)) || (player->game->exile->hasCard(card) && !card->has(Constants::CANPLAYFROMEXILE)))
return 0;
ManaCost * kicker = card->getManaCost()->getKicker(); ManaCost * kicker = card->getManaCost()->getKicker();
if(!kicker) if(!kicker)
{ {
@@ -484,8 +488,12 @@ int MTGKickerRule::isReactingToClick(MTGCardInstance * card, ManaCost *)
return 0; return 0;
} }
ManaCost * playerMana = player->getManaPool(); ManaCost * playerMana = player->getManaPool();
ManaCost * withKickerCost= NEW ManaCost(card->getManaCost()); ManaCost * withKickerCost= NEW ManaCost(card->model->data->getManaCost());
withKickerCost->add(withKickerCost->getKicker()); if(card->getIncreasedManaCost()->getConvertedCost())
withKickerCost->add(card->getIncreasedManaCost());
if(card->getReducedManaCost()->getConvertedCost())
withKickerCost->remove(card->getReducedManaCost());
withKickerCost->add(card->model->data->getManaCost()->getKicker());
if(!playerMana->canAfford(withKickerCost)) if(!playerMana->canAfford(withKickerCost))
{ {
delete withKickerCost; delete withKickerCost;
@@ -503,12 +511,16 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
return 0; return 0;
Player * player = game->currentlyActing(); Player * player = game->currentlyActing();
ManaCost * withKickerCost= NEW ManaCost(card->getManaCost());//using pointers here alters the real cost of the card. ManaCost * withKickerCost= NEW ManaCost(card->model->data->getManaCost());//using pointers here alters the real cost of the card.
if (card->getManaCost()->getKicker()->isMulti) if(card->getIncreasedManaCost()->getConvertedCost())
withKickerCost->add(card->getIncreasedManaCost());
if(card->getReducedManaCost()->getConvertedCost())
withKickerCost->remove(card->getReducedManaCost());
if (card->model->data->getManaCost()->getKicker()->isMulti)
{ {
while(player->getManaPool()->canAfford(withKickerCost)) while(player->getManaPool()->canAfford(withKickerCost))
{ {
withKickerCost->add(withKickerCost->getKicker()); withKickerCost->add(card->model->data->getManaCost()->getKicker());
card->kicked += 1; card->kicked += 1;
} }
card->kicked -= 1; card->kicked -= 1;
@@ -518,7 +530,7 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
} }
else else
{ {
withKickerCost->add(withKickerCost->getKicker()); withKickerCost->add(card->model->data->getManaCost()->getKicker());
card->paymenttype = MTGAbility::PUT_INTO_PLAY_WITH_KICKER; card->paymenttype = MTGAbility::PUT_INTO_PLAY_WITH_KICKER;
} }
if (withKickerCost->isExtraPaymentSet()) if (withKickerCost->isExtraPaymentSet())
@@ -545,7 +557,7 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
delete previousManaPool; delete previousManaPool;
if (card->isLand()) if (card->isLand())
{ {
MTGCardInstance * copy = player->game->putInZone(card, player->game->hand, player->game->temp); MTGCardInstance * copy = player->game->putInZone(card, card->currentZone, player->game->temp);
Spell * spell = NEW Spell(game, 0,copy,NULL,NULL, ManaCost::MANA_PAID_WITH_KICKER); Spell * spell = NEW Spell(game, 0,copy,NULL,NULL, ManaCost::MANA_PAID_WITH_KICKER);
spell->resolve(); spell->resolve();
delete spellCost; delete spellCost;
@@ -554,7 +566,7 @@ int MTGKickerRule::reactToClick(MTGCardInstance * card)
else else
{ {
Spell * spell = NULL; Spell * spell = NULL;
MTGCardInstance * copy = player->game->putInZone(card, player->game->hand, player->game->stack); MTGCardInstance * copy = player->game->putInZone(card, card->currentZone, player->game->stack);
if (game->targetChooser) if (game->targetChooser)
{ {
spell = game->mLayers->stackLayer()->addSpell(copy, game->targetChooser, spellCost, ManaCost::MANA_PAID_WITH_KICKER, 0); spell = game->mLayers->stackLayer()->addSpell(copy, game->targetChooser, spellCost, ManaCost::MANA_PAID_WITH_KICKER, 0);
@@ -616,7 +628,9 @@ PermanentAbility(observer, _id)
int MTGAlternativeCostRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) int MTGAlternativeCostRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana)
{ {
ManaCost * alternateCost = card->getManaCost()->getAlternative(); ManaCost * alternateCost = card->getManaCost()->getAlternative();
if (!game->currentlyActing()->game->hand->hasCard(card)) if (!game->currentlyActing()->game->hand->hasCard(card) && !game->currentlyActing()->game->graveyard->hasCard(card) && !game->currentlyActing()->game->exile->hasCard(card))
return 0;
if ((game->currentlyActing()->game->graveyard->hasCard(card) && !card->has(Constants::CANPLAYFROMGRAVEYARD)) || (game->currentlyActing()->game->exile->hasCard(card) && !card->has(Constants::CANPLAYFROMEXILE)))
return 0; return 0;
return isReactingToClick( card, mana, alternateCost ); return isReactingToClick( card, mana, alternateCost );
} }
@@ -630,7 +644,12 @@ int MTGAlternativeCostRule::isReactingToClick(MTGCardInstance * card, ManaCost *
if(!allowedToAltCast(card,player)) if(!allowedToAltCast(card,player))
return 0; return 0;
if(card->model->data->getManaCost()->getAlternative() && card->model->data->getManaCost()->getAlternative()->alternativeName.size())
if(card->has(Constants::CANPLAYFROMGRAVEYARD))
alternativeName = "Alternate Cast From Graveyard";
else if(card->has(Constants::CANPLAYFROMEXILE))
alternativeName = "Alternate Cast From Exile";
else if(card->model->data->getManaCost()->getAlternative() && card->model->data->getManaCost()->getAlternative()->alternativeName.size())
alternativeName = card->model->data->getManaCost()->getAlternative()->alternativeName; alternativeName = card->model->data->getManaCost()->getAlternative()->alternativeName;
if (card->isLand()) if (card->isLand())
@@ -763,8 +782,10 @@ MTGAlternativeCostRule(observer, _id)
int MTGBuyBackRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) int MTGBuyBackRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana)
{ {
Player * player = game->currentlyActing(); Player * player = game->currentlyActing();
if (!player->game->hand->hasCard(card)) if (!player->game->hand->hasCard(card) && !player->game->graveyard->hasCard(card) && !player->game->exile->hasCard(card))
return 0; return 0;
if ((player->game->graveyard->hasCard(card) && !card->has(Constants::CANPLAYFROMGRAVEYARD)) || (player->game->exile->hasCard(card) && !card->has(Constants::CANPLAYFROMEXILE)))
return 0;
if(!allowedToCast(card,player)) if(!allowedToCast(card,player))
return 0; return 0;
return MTGAlternativeCostRule::isReactingToClick( card, mana, card->getManaCost()->getBuyback() ); return MTGAlternativeCostRule::isReactingToClick( card, mana, card->getManaCost()->getBuyback() );
@@ -1129,46 +1150,60 @@ MTGMorphCostRule * MTGMorphCostRule::clone() const
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
MTGPlayFromGraveyardRule::MTGPlayFromGraveyardRule(GameObserver* observer, int _id) : MTGPayZeroRule::MTGPayZeroRule(GameObserver* observer, int _id) :
MTGAlternativeCostRule(observer, _id) MTGAlternativeCostRule(observer, _id)
{ {
aType = MTGAbility::CASTINGRAVEYARD_COST; aType = MTGAbility::PAYZERO_COST;
} }
int MTGPlayFromGraveyardRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana) int MTGPayZeroRule::isReactingToClick(MTGCardInstance * card, ManaCost * mana)
{ {
Player * player = game->currentlyActing(); Player * player = game->currentlyActing();
ManaCost * cost = card->getManaCost(); ManaCost * cost = NEW ManaCost(ManaCost::parseManaCost("{0}",NULL,NULL));
if(card->getIncreasedManaCost()->getConvertedCost())
cost->add(card->getIncreasedManaCost());
if(card->getReducedManaCost()->getConvertedCost())
cost->remove(card->getReducedManaCost());
if (!player->game->graveyard->hasCard(card)) if(card->isLand())
return 0; return 0;
if (!card->has(Constants::CANPLAYFROMGRAVEYARD)) if(!card->has(Constants::PAYZERO))
return 0; return 0;
if (!player->game->graveyard->hasCard(card) && !player->game->exile->hasCard(card) && !player->game->hand->hasCard(card))
return 0;
if ((!card->has(Constants::CANPLAYFROMGRAVEYARD) && player->game->graveyard->hasCard(card))||(!card->has(Constants::CANPLAYFROMEXILE) && player->game->exile->hasCard(card)))
return 0;
if(card->has(Constants::CANPLAYFROMGRAVEYARD))
CustomName = "Zero Cast From Graveyard";
else if(card->has(Constants::CANPLAYFROMEXILE))
CustomName = "Zero Cast From Exile";
else
CustomName = "Zero Cast From Anywhere";
return MTGAlternativeCostRule::isReactingToClick(card, mana, cost); return MTGAlternativeCostRule::isReactingToClick(card, mana, cost);
} }
int MTGPlayFromGraveyardRule::reactToClick(MTGCardInstance * card) int MTGPayZeroRule::reactToClick(MTGCardInstance * card)
{ {
if (!isReactingToClick(card)) if (!isReactingToClick(card))
return 0; return 0;
ManaCost * cost = card->getManaCost(); ManaCost * cost = NEW ManaCost(ManaCost::parseManaCost("{0}",NULL,NULL));
card->paymenttype = MTGAbility::CASTINGRAVEYARD_COST; card->paymenttype = MTGAbility::PAYZERO_COST;
return MTGAlternativeCostRule::reactToClick(card, cost, ManaCost::MANA_PAID_WITH_OTHERCOST); return MTGAlternativeCostRule::reactToClick(card, cost, ManaCost::MANA_PAID);
} }
ostream& MTGPlayFromGraveyardRule::toString(ostream& out) const ostream& MTGPayZeroRule::toString(ostream& out) const
{ {
out << "MTGPlayFromGraveyardRule ::: ("; out << "MTGPayZeroRule ::: (";
return MTGAbility::toString(out) << ")"; return MTGAbility::toString(out) << ")";
} }
MTGPlayFromGraveyardRule * MTGPlayFromGraveyardRule::clone() const MTGPayZeroRule * MTGPayZeroRule::clone() const
{ {
return NEW MTGPlayFromGraveyardRule(*this); return NEW MTGPayZeroRule(*this);
} }
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1718,7 +1753,7 @@ int MTGMomirRule::reactToClick(MTGCardInstance * card_to_discard, int cardId)
ManaCost * cost = player->getManaPool(); ManaCost * cost = player->getManaPool();
player->getManaPool()->pay(cost); player->getManaPool()->pay(cost);
MTGCardInstance * card = genCreature(cardId); MTGCardInstance * card = genCreature(cardId);
player->game->putInZone(card_to_discard, player->game->hand, player->game->graveyard); player->game->putInZone(card_to_discard, card_to_discard->currentZone, player->game->graveyard);
player->game->stack->addCard(card); player->game->stack->addCard(card);
Spell * spell = NEW Spell(game, card); Spell * spell = NEW Spell(game, card);