Fixed some primitives from issue #1085, improved some cards for AI combo (from Discord channel), added "isattacker" keyword to check if creature is attacking, added "couldattack" keyword to check if creature can attack, improved some triggers to add turnlimit option.

This commit is contained in:
Vittorio Alfieri
2023-07-21 21:12:38 +02:00
parent 7c697eb376
commit 6625907180
6 changed files with 96 additions and 61 deletions

View File

@@ -1,7 +1,7 @@
grade=borderline grade=borderline
#Bordeline Primitives Pack for Wagic the Homebrew. #Bordeline Primitives Pack for Wagic the Homebrew.
#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
#I sorted this programmatically - Thanks to Vitty85 20-07-2023 #I sorted this programmatically - Thanks to Vitty85 21-07-2023
[card] [card]
name=+2 Mace name=+2 Mace
auto={3}:equip auto={3}:equip
@@ -18979,7 +18979,7 @@ type=Land
[card] [card]
name=Corruption of Towashi name=Corruption of Towashi
auto=name(Incubate 4) name(Incubate 4) token(Incubator) and!( counter(1/1.4) )! auto=name(Incubate 4) name(Incubate 4) token(Incubator) and!( counter(1/1.4) )!
auto=@transformed(*[-instant;-sorcery]|myzones) turnlimited:may name(Draw a card) draw:1 controller auto=@transformed(*|mybattlefield) turnlimited:may name(Draw a card) draw:1 controller
text=When Corruption of Towashi enters the battlefield, incubate 4. (Create an Incubator token with four +1/+1 counters on it and "{2}: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature.) -- Whenever a permanent you control transforms or a permanent enters the battlefield under your control transformed, you may draw a card. Do this only once each turn. text=When Corruption of Towashi enters the battlefield, incubate 4. (Create an Incubator token with four +1/+1 counters on it and "{2}: Transform this artifact." It transforms into a 0/0 Phyrexian artifact creature.) -- Whenever a permanent you control transforms or a permanent enters the battlefield under your control transformed, you may draw a card. Do this only once each turn.
mana={4}{U} mana={4}{U}
type=Enchantment type=Enchantment
@@ -20336,7 +20336,7 @@ toughness=2
[/card] [/card]
[card] [card]
name=Cult of the Waxing Moon name=Cult of the Waxing Moon
auto=@transformed(creature[-human]|myBattlefield):name(Create wolf) _WOLFTOKEN_ auto=@transformed(creature[-human]|myBattlefield):may name(Create wolf) _WOLFTOKEN_
text=Whenever a permanent you control transforms into a non-Human creature, put a 2/2 green Wolf creature token onto the battlefield. text=Whenever a permanent you control transforms into a non-Human creature, put a 2/2 green Wolf creature token onto the battlefield.
mana={4}{G} mana={4}{G}
type=Creature type=Creature
@@ -36853,12 +36853,12 @@ toughness=4
[/card] [/card]
[card] [card]
name=Garth One-Eye name=Garth One-Eye
auto=this(cantargetcard(*[-disenchant]) {1}{W}{T}:name(Choose disenchant) becomes(disenchant) forever && activate castcard(copied noevent named!:disenchant:!) auto=this(cantargetcard(*[-disenchant]) {1}{W}{T}:name(Choose disenchant) becomes(disenchant) forever && activate castcard(copied named!:disenchant:!)
auto=this(cantargetcard(*[-braingeyser]) {X}{U}{U}{T}:name(Choose braingeyser) name(Choose braingeyser) transforms((,newability[becomes(braingeyser)],newability[activate castcard(copied noevent named!:braingeyser:! costx!:x:!)])) forever auto=this(cantargetcard(*[-braingeyser]) {X}{U}{U}{T}:name(Choose braingeyser) name(Choose braingeyser) transforms((,newability[becomes(braingeyser)],newability[activate castcard(copied named!:braingeyser:! costx!:x:!)])) forever
auto=this(cantargetcard(*[-terror]) {1}{B}{T}:name(Choose terror) becomes(terror) forever && activate castcard(copied noevent named!:terror:!) auto=this(cantargetcard(*[-terror]) {1}{B}{T}:name(Choose terror) becomes(terror) forever && activate castcard(copied named!:terror:!)
auto=this(cantargetcard(*[-shivan]) {4}{R}{R}{T}:name(Choose shivan dragon) becomes(shivan) forever && activate castcard(copied noevent named!:shivan dragon:!) auto=this(cantargetcard(*[-shivan]) {4}{R}{R}{T}:name(Choose shivan dragon) becomes(shivan) forever && activate castcard(copied named!:shivan dragon:!)
auto=this(cantargetcard(*[-regrowth]) {1}{G}{T}:name(Choose regrowth) becomes(regrowth) forever && activate castcard(copied noevent named!:regrowth:!) auto=this(cantargetcard(*[-regrowth]) {1}{G}{T}:name(Choose regrowth) becomes(regrowth) forever && activate castcard(copied named!:regrowth:!)
auto=this(cantargetcard(*[-lotus]) {0}{T}:name(Choose black lotus) becomes(lotus) forever && activate castcard(copied noevent named!:black lotus:!) auto=this(cantargetcard(*[-lotus]) {T}:name(Choose black lotus) becomes(lotus) forever && activate castcard(copied putinplay named!:black lotus:!)
text={T}: Choose a card name that hasn't been chosen from among Disenchant, Braingeyser, Terror, Shivan Dragon, Regrowth, and Black Lotus. Create a copy of the card with the chosen name. You may cast the copy. (You still pay its costs.) text={T}: Choose a card name that hasn't been chosen from among Disenchant, Braingeyser, Terror, Shivan Dragon, Regrowth, and Black Lotus. Create a copy of the card with the chosen name. You may cast the copy. (You still pay its costs.)
mana={W}{U}{B}{R}{G} mana={W}{U}{B}{R}{G}
type=Legendary Creature type=Legendary Creature
@@ -36974,7 +36974,7 @@ name=Gavony Dawnguard
aicode=activate transforms((,newability[if type(creature[zpos<=4;manacost<=3]|myLibrary)~morethan~0 then target(creature[zpos<=4;manacost<=3]|myLibrary) moveTo(myHand) and!( all(other *[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )! else all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! ])) oneshot aicode=activate transforms((,newability[if type(creature[zpos<=4;manacost<=3]|myLibrary)~morethan~0 then target(creature[zpos<=4;manacost<=3]|myLibrary) moveTo(myHand) and!( all(other *[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )! else all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! ])) oneshot
auto=if type(*[day;night]|battlefield)~equalto~0 then name(It becomes day) activate castcard(noevent named!:Day:!) auto=if type(*[day;night]|battlefield)~equalto~0 then name(It becomes day) activate castcard(noevent named!:Day:!)
auto=@transformed(*[day;night]|battlefield):name(Look top 4 cards) reveal:4 optionone name(Get a creature) target(<upto:1>creature[manacost<=3]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<4>*|reveal) bottomoflibrary optiontwoend revealend auto=@transformed(*[day;night]|battlefield):name(Look top 4 cards) reveal:4 optionone name(Get a creature) target(<upto:1>creature[manacost<=3]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<4>*|reveal) bottomoflibrary optiontwoend revealend
auto=_WARD_(1) auto=@targeted(this) from(*|opponentzones):choice name(This spell costs 1 more) name(This spell costs 1 more) target(*|opponentzones) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) oneshot
text=Ward {1} -- If it's neither day nor night, it becomes day as Gavony Dawnguard enters the battlefield. -- Whenever day becomes night or night becomes day, look at the top four cards of your library. You may reveal a creature card with mana value 3 or less from among them and put it into your hand. Put the rest on the bottom of your library in any order. text=Ward {1} -- If it's neither day nor night, it becomes day as Gavony Dawnguard enters the battlefield. -- Whenever day becomes night or night becomes day, look at the top four cards of your library. You may reveal a creature card with mana value 3 or less from among them and put it into your hand. Put the rest on the bottom of your library in any order.
type=Creature type=Creature
subtype=Human Soldier subtype=Human Soldier
@@ -37297,8 +37297,7 @@ type=Sorcery
[card] [card]
name=Geode Golem name=Geode Golem
abilities=trample abilities=trample
auto=@combatdamagefoeof(player) from(this):may activate castcard(normal) target(*[iscommander]|mycommandzone) auto=@combatdamaged(player) from(this):may name(Cast the commander) target(*[iscommander]|mycommandzone) activate castcard(normal)
auto=@combatdamageof(player) from(this):may activate castcard(normal) target(*[iscommander]|mycommandzone)
text=Trample -- Whenever Geode Golem deals combat damage to a player, you may cast your commander from the command zone without paying its mana cost. (You still pay any additional costs.) text=Trample -- Whenever Geode Golem deals combat damage to a player, you may cast your commander from the command zone without paying its mana cost. (You still pay any additional costs.)
mana={5} mana={5}
type=Artifact Creature type=Artifact Creature
@@ -40442,10 +40441,11 @@ toughness=2
[/card] [/card]
[card] [card]
name=Gor Muldrak, Amphinologist name=Gor Muldrak, Amphinologist
auto=lord(*|mybattlefield) protection from(salamander) auto=lord(*|mybattlefield) transforms((,newability[protection from(*[salamander])]))
auto=preventalldamage to(controller) from(creature[salamander]) auto=preventalldamage to(controller) from(*[salamander])
auto=@each my endofturn restriction{type(creature|opponentbattlefield)~morethan~type(creature|mybattlefield)}:token(Salamander Warrior,Creature Warrior Salamander,4/3,blue) auto=@each my endofturn restriction{type(creature|opponentbattlefield)~morethan~type(creature|mybattlefield)}:name(Create salamander) name(Create salamander) token(Salamander Warrior,Creature Warrior Salamander,4/3,blue)
auto=@each my endofturn restriction{type(creature|opponentbattlefield)~lessthan~type(creature|mybattlefield)}:token(Salamander Warrior,Creature Warrior Salamander,4/3,blue) opponent auto=@each my endofturn restriction{type(creature|opponentbattlefield)~lessthan~type(creature|mybattlefield)}:name(Create salamander) name(Create salamander) token(Salamander Warrior,Creature Warrior Salamander,4/3,blue) opponent
auto=@each my endofturn restriction{type(creature|opponentbattlefield)~equalto~type(creature|mybattlefield)}:name(Create salamander) name(Create salamander) token(Salamander Warrior,Creature Warrior Salamander,4/3,blue) && token(Salamander Warrior,Creature Warrior Salamander,4/3,blue) opponent
text=You and permanents you control have protection from Salamanders. -- At the beginning of your end step, each player who controls the fewest creatures creates a 4/3 blue Salamander Warrior creature token. text=You and permanents you control have protection from Salamanders. -- At the beginning of your end step, each player who controls the fewest creatures creates a 4/3 blue Salamander Warrior creature token.
mana={1}{G}{U} mana={1}{G}{U}
type=Legendary Creature type=Legendary Creature
@@ -40466,8 +40466,7 @@ toughness=2
[card] [card]
name=Goreclaw, Terror of Qal Sisma name=Goreclaw, Terror of Qal Sisma
auto=lord(creature[power>=4]|mycastingzone) altercost(colorless,-2) auto=lord(creature[power>=4]|mycastingzone) altercost(colorless,-2)
auto=_ATTACKING_all(creature[power>=4]|myBattlefield) 1/1 ueot auto=_ATTACKING_name(All creatures gain 1/1 and trample) all(creature[power>=4]|myBattlefield) transforms((,newability[1/1],newability[trample])) ueot
auto=_ATTACKING_all(creature[power>=4]|myBattlefield) trample ueot
text=Creature spells you cast with power 4 or greater cost {2} less to cast. -- Whenever Goreclaw, Terror of Qal Sisma attacks, each creature you control with power 4 or greater gets +1/+1 and gains trample until end of turn. text=Creature spells you cast with power 4 or greater cost {2} less to cast. -- Whenever Goreclaw, Terror of Qal Sisma attacks, each creature you control with power 4 or greater gets +1/+1 and gains trample until end of turn.
mana={3}{G} mana={3}{G}
type=Legendary Creature type=Legendary Creature
@@ -41151,7 +41150,7 @@ toughness=1
[card] [card]
name=Grazilaxx, Illithid Scholar name=Grazilaxx, Illithid Scholar
auto=@combat(blocked) source(creature|myBattlefield):may name(Return to hand) all(trigger[to]) moveto(ownerhand) auto=@combat(blocked) source(creature|myBattlefield):may name(Return to hand) all(trigger[to]) moveto(ownerhand)
auto=@each combatdamage restriction{opponentdamagedbycombat}:name(Draw card) draw:1 controller auto=@combatdamagefoeof(player) from(creature|mybattlefield):name(Draw card) draw:1 controller
text=Whenever a creature you control becomes blocked, you may return it to its owner's hand. -- Whenever one or more creatures you control deal combat damage to a player, draw a card. text=Whenever a creature you control becomes blocked, you may return it to its owner's hand. -- Whenever one or more creatures you control deal combat damage to a player, draw a card.
mana={1}{U}{U} mana={1}{U}{U}
type=Legendary Creature type=Legendary Creature
@@ -80357,8 +80356,10 @@ toughness=4
[/card] [/card]
[card] [card]
name=Rosie Cotton of South Lane name=Rosie Cotton of South Lane
auto=token(Food) auto=token(Food) and!( name(Put 1/1 counter) target(other creature|myBattlefield) counter(1/1) )!
auto=@tokencreated(*|myBattlefield):name(Put 1/1 counter) target(other creature|myBattlefield) counter(1/1) auto=@tokencreated(*|myBattlefield) restriction{compare(ishuman)~morethan~0}:name(Put 1/1 counter) name(Put 1/1 counter) target(other creature|myBattlefield) counter(1/1)
auto=@tokencreated(*|myBattlefield) restriction{compare(ishuman)~equalto~0,type(Scurry Oak|mybattlefield)~equalto~0}:name(Put 1/1 counter) name(Put 1/1 counter) target(other creature|myBattlefield) counter(1/1)
auto=@tokencreated(*|myBattlefield) restriction{compare(ishuman)~equalto~0,type(Scurry Oak|mybattlefield)~morethan~0}:name(Put 1/1 counter) name(Put 1/1 counter) name(Put 1/1 counter) target(Scurry Oak|mybattlefield) counter(1/1)
text=When Rosie Cotton of South Lane enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") -- Whenever you create a token, put a +1/+1 counter on target creature you control other than Rosie. text=When Rosie Cotton of South Lane enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") -- Whenever you create a token, put a +1/+1 counter on target creature you control other than Rosie.
mana={2}{W} mana={2}{W}
type=Legendary Creature type=Legendary Creature
@@ -85516,7 +85517,7 @@ type=Instant
[card] [card]
name=Shalai and Hallar name=Shalai and Hallar
abilities=flying,vigilance abilities=flying,vigilance
auto=@counteradded(1/1) source(creature|myBattlefield):damage:1 target(opponent) auto=@counteradded(1/1) from(creature|myBattlefield):name(Deal damage) damage:1 target(opponent)
text=Flying, vigilance -- Whenever one or more +1/+1 counters are put on a creature you control, Shalai and Hallar deals that much damage to target opponent. text=Flying, vigilance -- Whenever one or more +1/+1 counters are put on a creature you control, Shalai and Hallar deals that much damage to target opponent.
mana={1}{R}{G}{W} mana={1}{R}{G}{W}
type=Legendary Creature type=Legendary Creature

View File

@@ -1,6 +1,6 @@
#Primitives Pack for Wagic the Homebrew. #Primitives Pack for Wagic the Homebrew.
#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
#I sorted this programmatically so the other comments are removed except for AUTO_DEFINE - Vitty85 20-07-2023 #I sorted this programmatically so the other comments are removed except for AUTO_DEFINE - Vitty85 21-07-2023
[card] [card]
name=Abandon Reason name=Abandon Reason
target=<upto:2>creature target=<upto:2>creature
@@ -45418,8 +45418,8 @@ toughness=5
[/card] [/card]
[card] [card]
name=Gerrard Capashen name=Gerrard Capashen
auto=@each my upkeep:name(target opponent) target(opponent) life:type:*:targetedpersonshand controller auto=@each my upkeep:name(Gain life) name(Gain life) life:type:*:opponenthand controller
auto=this(attacking) {3}{W}:tap target(creature) auto=this(variable{isattacker}>0) transforms((,newability[{3}{W} restriction{compare(currentphase)~lessthan~9}:name(Tap a creature) name(Tap a creature) transforms((,newability[mustattack],newability[name(Tap a creature) name(Tap a creature) target(creature|battlefield) tap])) ueot]))
text=At the beginning of your upkeep, you gain 1 life for each card in target opponent's hand. -- {3}{W}: Tap target creature. Activate this ability only if Gerrard Capashen is attacking. text=At the beginning of your upkeep, you gain 1 life for each card in target opponent's hand. -- {3}{W}: Tap target creature. Activate this ability only if Gerrard Capashen is attacking.
mana={3}{W}{W} mana={3}{W}{W}
type=Legendary Creature type=Legendary Creature
@@ -46426,8 +46426,8 @@ subtype=Aura
[/card] [/card]
[card] [card]
name=Gift of the Gargantuan name=Gift of the Gargantuan
aicode=activate target(<upto:2>*[creature;land;zpos<=4]|mylibrary) moveto(myhand) aicode=activate transforms((,newability[if type(creature[zpos<=4]|mylibrary)~morethan~0 then if type(land[zpos<=4]|mylibrary)~morethan~0 then target(creature[zpos<=4]|mylibrary) moveto(myhand) and!( target(land[zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )! )!],newability[if type(creature[zpos<=4]|mylibrary)~morethan~0 then if type(land[zpos<=4]|mylibrary)~equalto~0 then target(creature[zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )!],newability[if type(creature[zpos<=4]|mylibrary)~equalto~0 then if type(land[zpos<=4]|mylibrary)~morethan~0 then target(land[zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )!],newability[if type(creature[zpos<=4]|mylibrary)~morethan~0 then if type(land[zpos<=4]|mylibrary)~equalto~0 then target(creature[zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )! )!],newability[if type(creature[zpos<=4]|mylibrary)~equalto~0 then if type(land[zpos<=4]|mylibrary)~equalto~0 then all(*[zpos<=4]|mylibrary) moveto(myreveal) and!( bottomoflibrary )!])) oneshot
auto=name(look) reveal:4 optionone name(Get a card) target(<upto:2>creature,land|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<4>*|reveal) bottomoflibrary optiontwoend revealend auto=name(Look top 4 cards) reveal:4 optionone name(Get a creature or land) target(<upto:1>*[creature;land]|reveal) moveto(myhand) and!( transforms((,newability[if cantargetcard(*[land]|*) then if type(creature|reveal)~morethan~0 then choice name(Get a creature) name(Get a creature) name(Get a creature) target(creature|reveal) moveto(myhand)],newability[if cantargetcard(*[creature]|*) then if type(land|reveal)~morethan~0 then choice name(Get a land) name(Get a land) name(Get a land) target(land|reveal) moveto(myhand)],newability[choice name(Don't choose another card) donothing])) oneshot )! optiononeend optiontwo name(Put on bottom) target(<4>*|reveal) bottomoflibrary optiontwoend revealend
text=Look at the top four cards of your library. You may reveal a creature card and/or a land card from among them and put the revealed cards into your hand. Put the rest on the bottom of your library in any order. text=Look at the top four cards of your library. You may reveal a creature card and/or a land card from among them and put the revealed cards into your hand. Put the rest on the bottom of your library in any order.
mana={2}{G} mana={2}{G}
type=Sorcery type=Sorcery
@@ -50575,7 +50575,7 @@ type=Instant
[card] [card]
name=Grip of Phyresis name=Grip of Phyresis
target=equipment target=equipment
auto=moveto(mybattlefield) and!( transforms((,newability[create(Phyrexian Germ:Creature Phyrexian Germ:0/0:black) livingweapon])) oneshot )! auto=moveto(mybattlefield) and!( transforms((Stolen,newability[token(Phyrexian Germ^Creature Phyrexian Germ^0/0^black) and!( name(Choose stolen equipment) target(equipment[stolen&-attached]|mybattlefield) transforms((,newability[name(Attach to phyrexian) rehook target(phyrexian[token&fresh&-geared]|mybattlefield)])) ueot )!])) oneshot )!
text=Gain control of target Equipment, then create a 0/0 black Phyrexian Germ creature token and attach that Equipment to it. text=Gain control of target Equipment, then create a 0/0 black Phyrexian Germ creature token and attach that Equipment to it.
mana={2}{U} mana={2}{U}
type=Instant type=Instant
@@ -51642,8 +51642,8 @@ toughness=2
[/card] [/card]
[card] [card]
name=Gutter Grime name=Gutter Grime
auto=@movedTo(creature[-token]|graveyard) from(myBattlefield):counter(0/0,1,Slime) auto=@movedTo(creature[-token]|graveyard) from(myBattlefield):name(Add slime counter) counter(0/0,1,Slime) && token(Ooze,Creature Ooze Slimed,0/0,green)
auto=@counteradded(0/0,1,Slime) from(this):token(Ooze,Creature Ooze,type:enchantment{counter(0/0,1,Slime)}:mybattlefield/type:enchantment{counter(0/0,1,Slime)}:mybattlefield cdaactive,green) auto=thisforeach(variable{hascntslime}>0) lord(ooze[token&slimed]|mybattlefield) 1/1
text=Whenever a notoken creature you control dies, put a slime counter on Gutter Grime, then create a green Ooze creature token with "This creature's power and toughness are each equal to the number of slime counters on Gutter Grime." text=Whenever a notoken creature you control dies, put a slime counter on Gutter Grime, then create a green Ooze creature token with "This creature's power and toughness are each equal to the number of slime counters on Gutter Grime."
mana={4}{G} mana={4}{G}
type=Enchantment type=Enchantment

View File

@@ -1,6 +1,6 @@
#Planeswalkers Primitives Pack for Wagic the Homebrew. #Planeswalkers Primitives Pack for Wagic the Homebrew.
#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
#We sorted this in alphabetical order - Luruz & Vitty85 12-07-2023 #We sorted this in alphabetical order - Luruz & Vitty85 21-07-2023
[card] [card]
name=Abian, Luvion Usurper name=Abian, Luvion Usurper
auto=counter(0/0,5,loyalty) auto=counter(0/0,5,loyalty)
@@ -1042,11 +1042,11 @@ color=black,green
[/card] [/card]
[card] [card]
name=Garruk, Savage Herald name=Garruk, Savage Herald
aicode=activate transforms((,newability[if type(creature[zpos=1]|mylibrary)~morethan~0 then target(creature[zpos=1]|mylibrary) moveto(ownerHand) else target(*[zpos=1]|mylibrary) moveto(bottomoflibrary)])) ueot aicode=activate transforms((,newability[if type(creature[zpos=1]|mylibrary)~morethan~0 then target(creature[zpos=1]|mylibrary) moveto(myhand) else target(*[zpos=1]|mylibrary) moveto(myreveal) and!( bottomoflibrary )!])) ueot
auto=counter(0/0,5,loyalty) auto=counter(0/0,5,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Reveal the top card) reveal:1 optionone target(creature|reveal) moveto(myhand) optiononeend optiontwo name(Put in bottom of library) target(<1>*|reveal) moveto(bottomoflibrary) optiontwoend revealend auto={C(0/0,1,Loyalty)}:name(+1: Reveal the top card) reveal:1 optionone name(Put in hand) target(creature|reveal) moveto(myhand) optiononeend optiontwo name(Put on bottom) target(<1>*|reveal) bottomoflibrary optiontwoend revealend
auto={C(0/0,-2,Loyalty)}:name(-2: Deals damage to target creature) target(creature|mybattlefield) transforms((,newability[target(other creature) dynamicability<!powerstrike!>])) oneshot auto={C(0/0,-2,Loyalty)}:name(-2: Deals damage to target creature) target(creature|mybattlefield) transforms((,newability[name(Damage other creature) target(other creature|battlefield) dynamicability<!powerstrike!>])) oneshot
auto={C(0/0,-7,Loyalty)}:name(-7: Creatures you control assign damage) all(creature|myBattlefield) transforms((,newability[@combat(blocked,turnlimited) source(this):may name(assign combat damage to defending player) thisforeach(power>=1) damage:1 opponent && fog from(this)])) auto={C(0/0,-7,Loyalty)}:name(-7: Creatures you control assign damage) all(creature|myBattlefield) transforms((,newability[@combat(blocked) source(this) turnlimited:may name(assign combat damage to defending player) thisforeach(power>=1) damage:1 opponent && fog from(this)])) ueot
text=+1: Reveal the top card of your library. If it's a creature card, put it into your hand. Otherwise, put it on the bottom of your library. -- 2: Target creature you control deals damage equal to its power to another target creature. -- 7: Until end of turn, creatures you control gain "You may have this creature assign its combat damage as though it weren't blocked." text=+1: Reveal the top card of your library. If it's a creature card, put it into your hand. Otherwise, put it on the bottom of your library. -- 2: Target creature you control deals damage equal to its power to another target creature. -- 7: Until end of turn, creatures you control gain "You may have this creature assign its combat damage as though it weren't blocked."
mana={4}{G}{G} mana={4}{G}{G}
type=Legendary Planeswalker type=Legendary Planeswalker

View File

@@ -230,9 +230,12 @@ class TrCardTapped: public Trigger
{ {
public: public:
bool tap; bool tap;
TrCardTapped(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool tap = true, bool once = false) : bool limitOnceATurn;
Trigger(observer, id, source, once, tc), tap(tap) int triggeredTurn;
TrCardTapped(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool tap = true, bool once = false, bool limitOnceATurn = false) :
Trigger(observer, id, source, once, tc), tap(tap), limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int triggerOnEventImpl(WEvent * event) int triggerOnEventImpl(WEvent * event)
@@ -241,9 +244,12 @@ public:
if (!e) return 0; if (!e) return 0;
if (e->noTrigger) if (e->noTrigger)
return 0; return 0;
if (limitOnceATurn && triggeredTurn == game->turn)
return 0;
if (e->before == e->after) return 0; if (e->before == e->after) return 0;
if (e->after != tap) return 0; if (e->after != tap) return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
triggeredTurn = game->turn;
return 1; return 1;
} }
@@ -257,18 +263,24 @@ class TrCardTappedformana: public Trigger
{ {
public: public:
bool tap; bool tap;
TrCardTappedformana(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool tap = true, bool once = false) : bool limitOnceATurn;
Trigger(observer, id, source, once, tc), tap(tap) int triggeredTurn;
TrCardTappedformana(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool tap = true, bool once = false, bool limitOnceATurn = false) :
Trigger(observer, id, source, once, tc), tap(tap), limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int triggerOnEventImpl(WEvent * event) int triggerOnEventImpl(WEvent * event)
{ {
WEventCardTappedForMana * e = dynamic_cast<WEventCardTappedForMana *> (event); WEventCardTappedForMana * e = dynamic_cast<WEventCardTappedForMana *> (event);
if (!e) return 0; if (!e) return 0;
if (limitOnceATurn && triggeredTurn == game->turn)
return 0;
if (e->before == e->after) return 0; if (e->before == e->after) return 0;
if (e->after != tap) return 0; if (e->after != tap) return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
triggeredTurn = game->turn;
return 1; return 1;
} }
@@ -309,16 +321,22 @@ public:
class TrCardPhasesIn: public Trigger class TrCardPhasesIn: public Trigger
{ {
public: public:
TrCardPhasesIn(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) : bool limitOnceATurn;
Trigger(observer, id, source, once, tc) int triggeredTurn;
TrCardPhasesIn(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) :
Trigger(observer, id, source, once, tc), limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int triggerOnEventImpl(WEvent * event) int triggerOnEventImpl(WEvent * event)
{ {
WEventCardPhasesIn * e = dynamic_cast<WEventCardPhasesIn *> (event); WEventCardPhasesIn * e = dynamic_cast<WEventCardPhasesIn *> (event);
if (!e) return 0; if (!e) return 0;
if (limitOnceATurn && triggeredTurn == game->turn)
return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
triggeredTurn = game->turn;
return 1; return 1;
} }
@@ -331,16 +349,22 @@ public:
class TrCardFaceUp: public Trigger class TrCardFaceUp: public Trigger
{ {
public: public:
TrCardFaceUp(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) : bool limitOnceATurn;
Trigger(observer, id, source, once, tc) int triggeredTurn;
TrCardFaceUp(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) :
Trigger(observer, id, source, once, tc), limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int triggerOnEventImpl(WEvent * event) int triggerOnEventImpl(WEvent * event)
{ {
WEventCardFaceUp * e = dynamic_cast<WEventCardFaceUp *> (event); WEventCardFaceUp * e = dynamic_cast<WEventCardFaceUp *> (event);
if (!e) return 0; if (!e) return 0;
if (limitOnceATurn && triggeredTurn == game->turn)
return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
triggeredTurn = game->turn;
return 1; return 1;
} }
@@ -353,16 +377,22 @@ public:
class TrCardTransformed: public Trigger class TrCardTransformed: public Trigger
{ {
public: public:
TrCardTransformed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) : bool limitOnceATurn;
Trigger(observer, id, source, once, tc) int triggeredTurn;
TrCardTransformed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) :
Trigger(observer, id, source, once, tc), limitOnceATurn(limitOnceATurn)
{ {
triggeredTurn = -1;
} }
int triggerOnEventImpl(WEvent * event) int triggerOnEventImpl(WEvent * event)
{ {
WEventCardTransforms * e = dynamic_cast<WEventCardTransforms *> (event); WEventCardTransforms * e = dynamic_cast<WEventCardTransforms *> (event);
if (!e) return 0; if (!e) return 0;
if (limitOnceATurn && triggeredTurn == game->turn)
return 0;
if (!tc->canTarget(e->card)) return 0; if (!tc->canTarget(e->card)) return 0;
triggeredTurn = game->turn;
return 1; return 1;
} }

View File

@@ -1315,15 +1315,15 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
//Card unTapped //Card unTapped
if (TargetChooser *tc = parseSimpleTC(s,"untapped", card)) if (TargetChooser *tc = parseSimpleTC(s,"untapped", card))
return NEW TrCardTapped(observer, id, card, tc, false, once); return NEW TrCardTapped(observer, id, card, tc, false, once, limitOnceATurn);
//Card Tapped //Card Tapped
if (TargetChooser *tc = parseSimpleTC(s,"tapped", card)) if (TargetChooser *tc = parseSimpleTC(s,"tapped", card))
return NEW TrCardTapped(observer, id, card, tc, true, once); return NEW TrCardTapped(observer, id, card, tc, true, once, limitOnceATurn);
//Card Tapped for mana //Card Tapped for mana
if (TargetChooser *tc = parseSimpleTC(s,"tappedformana", card)) if (TargetChooser *tc = parseSimpleTC(s,"tappedformana", card))
return NEW TrCardTappedformana(observer, id, card, tc, true, once); return NEW TrCardTappedformana(observer, id, card, tc, true, once, limitOnceATurn);
//Card Produced some mana //Card Produced some mana
if (TargetChooser *tc = parseSimpleTC(s,"producedmana", card)) if (TargetChooser *tc = parseSimpleTC(s,"producedmana", card))
@@ -1331,15 +1331,15 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
//Card Transforms //Card Transforms
if (TargetChooser *tc = parseSimpleTC(s,"transformed", card)) if (TargetChooser *tc = parseSimpleTC(s,"transformed", card))
return NEW TrCardTransformed(observer, id, card, tc, once); return NEW TrCardTransformed(observer, id, card, tc, once, limitOnceATurn);
//Card Faces Up //Card Faces Up
if (TargetChooser *tc = parseSimpleTC(s,"facedup", card)) if (TargetChooser *tc = parseSimpleTC(s,"facedup", card))
return NEW TrCardFaceUp(observer, id, card, tc, once); return NEW TrCardFaceUp(observer, id, card, tc, once, limitOnceATurn);
//Card Phases In //Card Phases In
if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card)) if (TargetChooser *tc = parseSimpleTC(s,"phasedin", card))
return NEW TrCardPhasesIn(observer, id, card, tc, once); return NEW TrCardPhasesIn(observer, id, card, tc, once, limitOnceATurn);
//Card Exerted //Card Exerted
if (TargetChooser *tc = parseSimpleTC(s,"exerted", card)) if (TargetChooser *tc = parseSimpleTC(s,"exerted", card))

View File

@@ -1527,16 +1527,16 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
} }
} }
} }
else if(s.find("startingplayer") != string::npos){ //Return who was the starting player (0 is controller, 1 is opponent). else if(s.find("startingplayer") != string::npos){ // Return who was the starting player (0 is controller, 1 is opponent).
intValue = card->controller()->getObserver()->turn%2; intValue = card->controller()->getObserver()->turn%2;
if(card->controller()->getObserver()->currentlyActing() != card->controller()) if(card->controller()->getObserver()->currentlyActing() != card->controller())
intValue = 1 - intValue; intValue = 1 - intValue;
} }
else if (s == "pinstsorcount" || s == "oinstsorcount") // Return the number of instant or sorceries that were casted this turn by controller or opponent. else if (s == "pinstsorcount" || s == "oinstsorcount") //Return the number of instant or sorceries that were casted this turn by controller or opponent.
{ {
intValue = (s == "pinstsorcount")?card->controller()->game->stack->seenThisTurn("*[instant;sorcery]", Constants::CAST_ALL):card->controller()->opponent()->game->stack->seenThisTurn("*[instant;sorcery]", Constants::CAST_ALL); intValue = (s == "pinstsorcount")?card->controller()->game->stack->seenThisTurn("*[instant;sorcery]", Constants::CAST_ALL):card->controller()->opponent()->game->stack->seenThisTurn("*[instant;sorcery]", Constants::CAST_ALL);
} }
else if ((s.find("palldead") != string::npos) || (s.find("oalldead") != string::npos)) // Return the number of cards of a specific type that died this turn for controller or opponent. else if ((s.find("palldead") != string::npos) || (s.find("oalldead") != string::npos)) //Return the number of cards of a specific type that died this turn for controller or opponent.
{ {
int hasdeadtype = 0; int hasdeadtype = 0;
MTGGameZone * grave = (s.find("oalldead") != string::npos)?card->controller()->opponent()->game->graveyard:card->controller()->game->graveyard; MTGGameZone * grave = (s.find("oalldead") != string::npos)?card->controller()->opponent()->game->graveyard:card->controller()->game->graveyard;
@@ -1547,7 +1547,7 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy]; MTGCardInstance * checkCard = grave->cardsSeenThisTurn[gy];
if(checkCard->hasType(checktype) && if(checkCard->hasType(checktype) &&
((checkCard->previousZone == checkCurrent->game->battlefield)|| ((checkCard->previousZone == checkCurrent->game->battlefield)||
(checkCard->previousZone == checkCurrent->opponent()->game->battlefield))//died from battlefield (checkCard->previousZone == checkCurrent->opponent()->game->battlefield)) //died from battlefield
) )
{ {
hasdeadtype++; hasdeadtype++;
@@ -1555,7 +1555,7 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
} }
intValue = hasdeadtype; intValue = hasdeadtype;
} }
else if (s.find("bothalldead") != string::npos) // Return the number of cards of a specific type that died this turn. else if (s.find("bothalldead") != string::npos) //Return the number of cards of a specific type that died this turn.
{ {
int hasdeadtype = 0; int hasdeadtype = 0;
string checktype = s.substr(11); string checktype = s.substr(11);
@@ -1654,26 +1654,30 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
} }
} }
} }
else if (s == "pringtemptations" || s == "oringtemptations") // How many times the player has been tempted by the Ring. else if (s == "pringtemptations" || s == "oringtemptations") //How many times the player has been tempted by the Ring.
{ {
intValue = (s == "pringtemptations")?card->controller()->ringTemptations:card->controller()->opponent()->ringTemptations; intValue = (s == "pringtemptations")?card->controller()->ringTemptations:card->controller()->opponent()->ringTemptations;
} }
else if (s == "iscommander" || s == "ringbearer") // Return 1 if card is the commander -- Return 1 if card is the Ring bearer else if (s == "iscommander" || s == "ringbearer") //Return 1 if card is the commander -- Return 1 if card is the Ring bearer
{ {
intValue = (s == "iscommander")?card->isCommander:card->isRingBearer; intValue = (s == "iscommander")?card->isCommander:card->isRingBearer;
} }
else if (s == "oppotgt" || s == "ctrltgt") // Return 1 if card targeted the opponent -- Return 1 if card targeted its controller else if (s == "oppotgt" || s == "ctrltgt") //Return 1 if card targeted the opponent -- Return 1 if card targeted its controller
{ {
intValue = 0; intValue = 0;
Player* p = (s == "oppotgt")?card->controller()->opponent():card->controller(); Player* p = (s == "oppotgt")?card->controller()->opponent():card->controller();
if(card->playerTarget == p) if(card->playerTarget == p)
intValue = 1; intValue = 1;
} }
else if (s == "kicked") else if (s == "isattacker" || s == "couldattack") //Return 1 if creature is attacking. -- Return 1 if creature can attack.
{
intValue = (s == "isattacker")?card->isAttacker():card->canAttack();
}
else if (s == "kicked") //Return the number of times kicker has been paid
{ {
intValue = card->kicked; intValue = card->kicked;
} }
else if(!intValue)//found nothing, try parsing a atoi else if(!intValue) //Found nothing, try parsing a atoi
{ {
intValue = atoi(s.c_str()); intValue = atoi(s.c_str());
} }