diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 6b7ba8c30..7160ade91 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -1685,7 +1685,7 @@ subtype=Ajani [card] name=Ajani Steadfast auto=counter(0/0,4,loyalty) -auto={C(0/0,1,Loyalty)}:name(+1: add 1 loyalty) donothing restriction{compare(cantargetcre)~lessthan~1} +auto={C(0/0,1,Loyalty)}:name(+1: loyalty) donothing restriction{compare(cantargetcre)~lessthan~1} auto={C(0/0,1,Loyalty)}:name(+1: multi transform) target(creature) transforms((,newability[1/1],newability[vigilance],newability[first strike],newability[lifelink])) ueot restriction{compare(cantargetcre)~morethan~0} auto={C(0/0,-2,Loyalty)}:name(-2: 1/1 counters) all(creature|mybattlefield) counter(1/1,1) && all(other planeswalker|mybattlefield) counter(0/0,1,Loyalty) auto={C(0/0,-7,Loyalty)}:name(-7: emblem) emblem transforms((,newability[forcefield controller])) forever dontremove @@ -1708,7 +1708,7 @@ subtype=Ajani [card] name=Ajani, Caller of the Pride auto=counter(0/0,4,loyalty) -auto={C(0/0,1,Loyalty)}:name(+1: add 1 loyalty) donothing restriction{compare(cantargetcre)~lessthan~1} +auto={C(0/0,1,Loyalty)}:name(+1: loyalty) donothing restriction{compare(cantargetcre)~lessthan~1} auto={C(0/0,1,Loyalty)}:name(+1: +1/+1 counter) target(creature|battlefield) counter(1/1,1) restriction{compare(cantargetcre)~morethan~0} auto={C(0/0,-3,Loyalty)}:name(-3: double strike and flying) flying && double strike target(creature|battlefield) ueot auto={C(0/0,-8,Loyalty)}:name(-8: ultimate) token(Cat,Creature Cat,2/2,white)*lifetotal @@ -5334,7 +5334,7 @@ type=Artifact [card] name=Arlinn Kord auto=counter(0/0,3,loyalty) -auto={C(0/0,1,Loyalty)}:name(+1: add 1 loyalty) donothing restriction{compare(cantargetcre)~lessthan~1} +auto={C(0/0,1,Loyalty)}:name(+1: loyalty) donothing restriction{compare(cantargetcre)~lessthan~1} auto={C(0/0,1,Loyalty)}:name(+1: 2/2 creature) target(creature) 2/2 ueot auto={C(0/0,0,Loyalty)}:name(0: wolf token) token(Wolf,creature Wolf,2/2,green) && flip(Arlinn, Embraced by the Moon) text=+1: Until end of turn, up to one target creature gets +2/+2 and gains vigilance and haste. -- 0: Put a 2/2 green Wolf creature token onto the battlefield. Transform Arlinn Kord. @@ -7640,8 +7640,8 @@ type=Instant [/card] [card] name=Azorius Cluestone -auto={T}: Add {W} -auto={T}: Add {U} +auto={T}:Add{W} +auto={T}:Add{U} auto={W}{U}{T}{S}:draw:1 controller text={T}: Add {W} or {U} to your mana pool. -- {W}{U}, {T}, Sacrifice Azorius Cluestone: Draw a card. mana={3} @@ -13275,8 +13275,8 @@ type=Instant [/card] [card] name=Boros Cluestone -auto={T}: Add {R} -auto={T}: Add {W} +auto={T}:Add{R} +auto={T}:Add{W} auto={R}{W}{T}{S}:draw:1 controller text={T}: Add {R} or {W} to your mana pool. -- {R}{W}, {T}, Sacrifice Boros Cluestone: Draw a card. mana={3} @@ -14793,6 +14793,17 @@ power=3 toughness=2 [/card] [card] +name=Brutalizer Exarch +auto=choice name(put on top) moveTo(exile) and!(transforms((,newability[moveto(ownerlibrary)])) oneshot)! notatarget(creature|mylibrary) +auto=choice name(put on bottom) bottomoflibrary target(*[-creature]) +text=When Brutalizer Exarch enters the battlefield, choose one — Search your library for a creature card, reveal it, then shuffle your library and put that card on top of it; or put target noncreature permanent on the bottom of its owner's library. +mana={5}{G} +type=Creature +subtype=Cleric +power=3 +toughness=3 +[/card] +[card] name=Brute Force target=creature auto=3/3 @@ -19353,6 +19364,16 @@ power=2 toughness=2 [/card] [card] +name=Civilized Scholar +auto={T}:draw:1 && ability$! reject notatarget(*|myhand) and!( if cantargetcard(creature|*) then all(mystored) flip(Homicidal Brute) && all(mystored) untap )! !$ controller +text={T}: Draw a card, then discard a card. If a creature card is discarded this way, untap Civilized Scholar, then transform it. +mana={2}{U} +type=Creature +subtype=Human Advisor +power=0 +toughness=1 +[/card] +[card] name=Claim of Erebos target=creature auto=teach(creature) {1}{B}{T}:target(player) life:-2 @@ -21860,7 +21881,7 @@ toughness=3 [card] name=Corrupted Resolve target=*|stack -auto=transforms((,newability[this(variable{playerpoisoncount}) fizzle])) ueot +auto=transforms((,newability[this(variable{mypoisoncount}) fizzle])) ueot mana={1}{U} type=Instant text=Counter target spell if its controller is poisoned. @@ -28071,8 +28092,8 @@ type=Land [/card] [card] name=Dimir Cluestone -auto={T}: Add {U} -auto={T}: Add {B} +auto={T}:Add{U} +auto={T}:Add{B} auto={U}{B}{T}{S}:draw:1 controller text={T}: Add {U} or {B} to your mana pool. -- {U}{B}, {T}, Sacrifice Dimir Cluestone: Draw a card. mana={3} @@ -35820,6 +35841,16 @@ type=Enchantment subtype=Aura [/card] [card] +name=Evil Twin +auto=may copy NotATarget(creature) and!( transforms((,newability[{U}{B}{T}:destroy target(creature[share!name!])])) forever )! +text=You may have Evil Twin enter the battlefield as a copy of any creature on the battlefield except it gains "{U}{B}, {T}: Destroy target creature with the same name as this creature." +mana={2}{U}{B} +type=Creature +subtype=Shapeshifter +power=0 +toughness=0 +[/card] +[card] name=Evincar's Justice auto=damage:2 all(creature,player) buyback={2}{B}{B}{3} @@ -43353,7 +43384,7 @@ toughness=2 [card] name=Gerrard's Verdict target=player -auto=ability$! reject notatarget(<2>*|myhand) and!( if cantargetcard(land|*) then life:3 all(abilitycontroller) )! !$ targetedplayer +auto=ability$! reject notatarget(<2>*|myhand) and!( if cantargetcard(land|*) then life:3 all(abilitycontroller) oneshot )! !$ targetedplayer text=Target player discards two cards. You gain 3 life for each land card discarded this way. mana={W}{B} type=Sorcery @@ -46577,8 +46608,8 @@ type=Instant [/card] [card] name=Golgari Cluestone -auto={T}: Add {B} -auto={T}: Add {G} +auto={T}:Add{B} +auto={T}:Add{G} auto={B}{G}{T}{S}:draw:1 controller text={T}: Add {B} or {G} to your mana pool. -- {B}{G}, {T}, Sacrifice Golgari Cluestone: Draw a card. mana={3} @@ -47429,6 +47460,13 @@ power=4 toughness=4 [/card] [card] +name=Graveyard Shovel +auto={2}{T}:name(exiles a card) target(player) ability$! notatarget(*|mygraveyard) moveto(exile) and!( if cantargetcard(creature|*) then all(abilitycontroller) life:2 oneshot )! !$ targetedplayer +text={2}, {T}: Target player exiles a card from his or her graveyard. If it's a creature card, you gain 2 life. +mana={2} +type=Artifact +[/card] +[card] name=Gravitational Shift auto=lord(creature[flying]) 2/0 auto=lord(creature[-flying]) -2/0 @@ -48098,6 +48136,14 @@ power=5 toughness=5 [/card] [card] +name=Grimoire of the Dead +auto={1}{T}{D(*|myhand)}:counter(0/0,1,Study) +auto={T}{C(0/0,-3,Study)}{S}:all(creature|graveyard) moveto(mybattlefield) and!( transforms((Zombie,newcolors[black])) forever )! +text={1}, {T}, Discard a card: Put a study counter on Grimoire of the Dead. -- {T}, Remove three study counters from Grimoire of the Dead and sacrifice it: Put all creature cards from all graveyards onto the battlefield under your control. They're black Zombies in addition to their other colors and types. +mana={4} +type=Legendary Artifact +[/card] +[card] name=Grindclock auto={T}:counter(0/0,1,Charge) auto={T}:target(player) dynamicability @@ -48619,8 +48665,8 @@ type=Instant [/card] [card] name=Gruul Cluestone -auto={T}: Add {R} -auto={T}: Add {G} +auto={T}:Add{R} +auto={T}:Add{G} auto={R}{G}{T}{S}:draw:1 controller text={T}: Add {R} or {G} to your mana pool. -- {R}{G}, {T}, Sacrifice Gruul Cluestone: Draw a card. mana={3} @@ -52512,6 +52558,15 @@ type=Land text={T}: Add {1} to your mana pool. {T}: Each player gains control of all creatures he or she owns. [/card] [card] +name=Homicidal Brute +auto=@each my endofturn restriction{didntattack}:tap && flip(Civilized Scholar) +text=At the beginning of your end step, if Homicidal Brute didn't attack this turn, tap Homicidal Brute, then transform it. +type=Creature +subtype=Human Mutant +power=5 +toughness=1 +[/card] +[card] name=Homicidal Seclusion auto=aslongas(creature|mybattlefield) lord(creature|mybattlefield) 3/1 <2 auto=aslongas(creature|mybattlefield) lord(creature|mybattlefield) lifelink <2 @@ -54533,6 +54588,18 @@ power=2 toughness=2 [/card] [card] +name=Immerwolf +abilities=intimidate +auto=lord(other *[wolf;werewolf]|mybattlefield) 1/1 +auto=lord(*[-human;werewolf]|mybattlefield) canttransform +text=Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.) -- Other Wolf and Werewolf creatures you control get +1/+1. -- Non-Human Werewolves you control can't transform. +mana={1}{R}{G} +type=Creature +subtype=Wolf +power=2 +toughness=2 +[/card] +[card] name=Immobilizing Ink target=creature auto=doesnotuntap @@ -56688,8 +56755,8 @@ toughness=2 [/card] [card] name=Izzet Cluestone -auto={T}: Add {U} -auto={T}: Add {R} +auto={T}:Add{U} +auto={T}:Add{R} auto={U}{R}{T}{S}:draw:1 controller text={T}: Add {U} or {R} to your mana pool. -- {U}{R}, {T}, Sacrifice Izzet Cluestone: Draw a card. mana={3} @@ -61231,7 +61298,7 @@ type=Land name=Koth of the Hammer auto=counter(0/0,3,loyalty) auto={C(0/0,1,Loyalty)}:name(+1: untap) untap target(mountain) && transforms((Elemental Creature,setpower=4,settoughness=4,red)) ueot -auto={C(0/0,-2,Loyalty)}:name(-2: add mana) foreach(mountain|myBattlefield) add{R} +auto={C(0/0,-2,Loyalty)}:name(-2: Red mana) foreach(mountain|myBattlefield) add{R} auto={C(0/0,-5,Loyalty)}:name(-5: emblem) emblem transforms((,newability[lord(mountain|mybattlefield) {t}:damage:1 target(creature)],newability[lord(mountain|mybattlefield) {t}:damage:1 target(player)])) forever dontremove text=+1: Untap target Mountain. It becomes a 4/4 red Elemental creature until end of turn. It's still a land. -- -2: Add {R} to your mana pool for each Mountain you control. -- -5: You get an emblem with "Mountains you control have '{T}: This land deals 1 damage to target creature or player.'" mana={2}{R}{R} @@ -65259,11 +65326,11 @@ suspend(3)={0} [card] name=Lotus Blossom auto=@each my upkeep:may counter(0/0,1,Petal) -auto={T}{S}:name(Sacrifice And Add White Mana) thisforeach(counter{0/0.1.Petal}) add{W} controller -auto={T}{S}:name(Sacrifice And Add Blue Mana) thisforeach(counter{0/0.1.Petal}) add{U} controller -auto={T}{S}:name(Sacrifice And Add Black Mana) thisforeach(counter{0/0.1.Petal}) add{B} controller -auto={T}{S}:name(Sacrifice And Add Red Mana) thisforeach(counter{0/0.1.Petal}) add{R} controller -auto={T}{S}:name(Sacrifice And Add Green Mana) thisforeach(counter{0/0.1.Petal}) add{G} controller +auto={T}{S}:name(White Mana) thisforeach(counter{0/0.1.Petal}) add{W} controller +auto={T}{S}:name(Blue Mana) thisforeach(counter{0/0.1.Petal}) add{U} controller +auto={T}{S}:name(Black Mana) thisforeach(counter{0/0.1.Petal}) add{B} controller +auto={T}{S}:name(Red Mana) thisforeach(counter{0/0.1.Petal}) add{R} controller +auto={T}{S}:name(Green Mana) thisforeach(counter{0/0.1.Petal}) add{G} controller text=At the beginning of your upkeep, you may put a petal counter on Lotus Blossom. -- {T}, Sacrifice Lotus Blossom: Add X mana of any one color to your mana pool, where X is the number of petal counters on Lotus Blossom. mana={2} type=Artifact @@ -67358,6 +67425,18 @@ power=1 toughness=2 [/card] [card] +name=Manor Gargoyle +abilities=defender +auto=while(restriction{hasdefender}) indestructible +auto={1}:name(loses defender) transforms((,newability[-defender],newability[flying])) ueot +text=Defender -- Manor Gargoyle is indestructible as long as it has defender. -- {1}: Until end of turn, Manor Gargoyle loses defender and gains flying. +mana={5} +type=Artifact Creature +subtype=Gargoyle +power=4 +toughness=4 +[/card] +[card] name=Manor Skeleton abilities=haste auto={1}{B}:regenerate @@ -70558,6 +70637,17 @@ power=4 toughness=4 [/card] [card] +name=Mindshrieker +abilities=flying +auto={2}:name(deplete) target(player) Reveal:1 revealzone(targetedpersonslibrary) optionone all(*|reveal) moveto(ownerlibrary) and!( transforms((,newability[deplete:1])) oneshot )! optiononeend afterrevealed all(this) revealedmana/revealedmana afterrevealedend revealend +text=Flying -- {2}: Target player puts the top card of his or her library into his or her graveyard. Mindshrieker gets +X/+X until end of turn, where X is that card's converted mana cost. +mana={1}{U} +type=Creature +subtype=Spirit Bird +power=1 +toughness=1 +[/card] +[card] name=Mindslicer auto=@movedto(this|graveyard) from(battlefield):reject all(*|hand) text=When Mindslicer dies, each player discards his or her hand. @@ -71053,6 +71143,17 @@ text=Mirrorpool enters the battlefield tapped. -- {T}: Add {C} to your mana pool type=Land [/card] [card] +name=Mirror-Mad Phantasm +abilities=flying +auto={1}{U}:name(shuffle reveal) moveto(ownerlibrary) and!( transforms((,newability[shuffle],newability[Reveal:1 revealzone(mylibrary) revealuntil(Mirror-Mad Phantasm|mylibrary) optionone notatarget(Mirror-Mad Phantasm|reveal) bottomoflibrary optiononeend optiontwo all(*|reveal) moveto(ownergraveyard) optiontwoend revealend])) oneshot )! +text=Flying -- {1}{U}: Mirror-Mad Phantasm's owner shuffles it into his or her library. If that player does, he or she reveals cards from the top of that library until a card named Mirror-Mad Phantasm is revealed. The player puts that card onto the battlefield and all other cards revealed this way into his or her graveyard. +mana={3}{U}{U} +type=Creature +subtype=Spirit +power=5 +toughness=1 +[/card] +[card] name=Mirror-Sigil Sergeant abilities=trample auto=@each my upkeep restriction{type(*[blue]|myBattlefield)~morethan~0}:may token(Mirror-Sigil Sergeant) @@ -71476,6 +71577,16 @@ power=1 toughness=3 [/card] [card] +name=Misthollow Griffin +abilities=flying,canplayfromexile +text=Flying -- You may cast Misthollow Griffin from exile. +mana={2}{U}{U} +type=Creature +subtype=Griffin +power=3 +toughness=3 +[/card] +[card] name=Misthoof Kirin abilities=flying,vigilance facedown={3} @@ -79327,8 +79438,8 @@ type=Land [/card] [card] name=Orzhov Cluestone -auto={T}: Add {B} -auto={T}: Add {W} +auto={T}:Add{B} +auto={T}:Add{W} auto={B}{W}{T}{S}:draw:1 controller text={T}: Add {B} or {W} to your mana pool. -- {B}{W}, {T}, Sacrifice Orzhov Cluestone: Draw a card. mana={3} @@ -91703,6 +91814,13 @@ power=2 toughness=1 [/card] [card] +name=Rooftop Storm +auto=lord(creature[zombie]|mycastingzone) zerocast +text=You may pay {0} rather than pay the mana cost for Zombie creature spells you cast. +mana={5}{U} +type=Enchantment +[/card] +[card] name=Root Cage auto=lord(mercenary) doesnotuntap text=Mercenaries don't untap during their controllers' untap steps. @@ -94235,7 +94353,7 @@ subtype=Sarkhan [card] name=Sarkhan Unbroken auto=counter(0/0,9,Loyalty) -auto={C(0/0,1,Loyalty)}:name(+1: Draw card add mana) draw:1 controller && transforms((,newability[activatechooseacolor add{chosencolor} activatechooseend])) forever asSorcery +auto={C(0/0,1,Loyalty)}:name(+1: Draw card) draw:1 controller && transforms((,newability[activatechooseacolor add{chosencolor} activatechooseend])) forever asSorcery auto={C(0/0,-2,Loyalty)}:name(-2: 4/4 dragon token) token(Dragon,creature dragon,4/4,flying,red) controller asSorcery auto={C(0/0,-8,Loyalty)}:name(-8: Search for any number of dragons) moveto(mybattlefield) notatarget(creature[dragon]|mylibrary) asSorcery text=+1: Draw a card, then add one mana of any color to your mana pool. -- -2: Put a 4/4 red Dragon creature token with flying onto the battlefield. -- -8: Search your library for any number of Dragon creature cards and put them onto the battlefield. Then shuffle your library. -- Starting Loyalty (4) @@ -97657,6 +97775,17 @@ mana={3} type=Artifact [/card] [card] +name=Serum Raker +abilities=flying +auto=@movedto(this|graveyard) from(battlefield):ability$!reject notatarget(*|myhand)!$ controller && ability$!reject notatarget(*|myhand)!$ opponent +text=Flying -- When Serum Raker dies, each player discards a card. +mana={2}{U}{U} +type=Creature +subtype=Drake +power=3 +toughness=2 +[/card] +[card] name=Serum Tank auto=counter(0/0,1,Charge) auto=@movedTo(other artifact|Battlefield):counter(0/0,1,Charge) @@ -116926,6 +117055,17 @@ power=4 toughness=4 [/card] [card] +name=Tower Geist +abilities=flying +auto=reveal:2 optionone name(Get a card) target(<1>*|reveal) moveto(myhand) optiononeend optiontwo all(*|reveal) moveto(mygraveyard) optiontwoend revealend +text=Flying -- When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard. +mana={3}{U} +type=Creature +subtype=Spirit +power=2 +toughness=2 +[/card] +[card] name=Tower of Calamities auto={8}{T}:damage:12 target(creature) text={8}, {T}:Tower of Calamities deals 12 damage to target creature. @@ -127052,6 +127192,17 @@ power=1 toughness=1 [/card] [card] +name=Whispering Specter +abilities=flying,infect +auto=@combatdamaged(player) from(this):may sacrifice and!( ability$! reject notatarget(*|myhand) !$ opponent )! +text=Flying -- Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) -- Whenever Whispering Specter deals combat damage to a player, you may sacrifice it. If you do, that player discards a card for each poison counter he or she has. +mana={1}{B}{B} +type=Creature +subtype=Specter +power=1 +toughness=1 +[/card] +[card] name=Whispers of Emrakul target=opponent auto=discard:1 @@ -130494,7 +130645,7 @@ toughness=5 name=Zhur-Taa Druid auto={T}:Add{G} auto=@tappedformana(this):damage:1 opponent -auto={T}: Add {G} to your mana pool. Whenever you tap Zhur-Taa Druid for mana, it deals 1 damage to each opponent. +text={T}: Add {G} to your mana pool. Whenever you tap Zhur-Taa Druid for mana, it deals 1 damage to each opponent. mana={R}{G} type=Creature subtype=Human Druid diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 7213a693d..42a4f1f59 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -706,7 +706,7 @@ private: { intValue = target->controller()->opponent()->nonCombatDamage; } - else if (s == "playerpoisoncount") + else if (s == "mypoisoncount") { intValue = target->controller()->poisonCount; } diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 4e770ac4d..fe63f5c12 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -873,6 +873,12 @@ void GameObserver::gameStateBasedEffects() { card->graveEffects = false; card->exileEffects = false; + + if(card->isCreature()) + { + if(card->life < 1 && !card->has(Constants::INDESTRUCTIBLE)) + card->destroy();//manor gargoyle... recheck + } } if(card->childrenCards.size()) diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index ab90b0ac5..677dc98f4 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -510,6 +510,27 @@ int AbilityFactory::parseCastRestrictions(MTGCardInstance * card, Player * playe return 0; } + check = restriction[i].find("hasdefender"); + if(check != string::npos) + { + if(!card->has(Constants::DEFENDER)) + return 0; + } + + check = restriction[i].find("didattack"); + if(check != string::npos) + { + if(!card->didattacked) + return 0; + } + + check = restriction[i].find("didntattack"); + if(check != string::npos) + { + if(card->didattacked) + return 0; + } + check = restriction[i].find("ownerscontrol"); if(check != string::npos) {