Fixed primitives, added new ability "exploits" to sacrifice a creature, added new trigger "exploited" and improved all primitives with Exploit ability, improved "tokencreated" and "sacrificed" triggers to allow "turnlimited" option, improved "flip" ability in order to keep track of current zone before flip.
This commit is contained in:
+4
-1
@@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
## [master] (https://github.com/WagicProject/wagic/tree/master)
|
## [master] (https://github.com/WagicProject/wagic/tree/master)
|
||||||
|
|
||||||
|
### 03/11/21
|
||||||
|
- *Committed:* Fixed primitives, added new ability "exploits" to sacrifice a creature, added new trigger "exploited" and improved all primitives with Exploit ability, improved "tokencreated" and "sacrificed" triggers to allow "turnlimited" option, improved "flip" ability in order to keep track of current zone before flip. ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
### 31/10/21
|
### 31/10/21
|
||||||
- *Committed:* Fixed primitives, added new macro "_TRAINING_" for new ability "Training", added new trigger "trained", added "trainer" restriction to check if player controls an attacking creature with greater power than the current one, improved "ninjutsu" ability when the targeted card is already in play (e.g. "Olivia, Crimson Bride"), improved "flip" ability in order to add the "andability" option and in ordeer to prevent flipped auras go to graveyard, improved "andability" option for "imprint", "haunt" and "conjure" ability, improved "retarget" and "newtarget" keywords with "fromplay" option (to use with flipped auras e.g. "Vengeful Strangler"), replaced old "praidcount" and "oraidcount" with new keywords "pattackedcount" and "oattackedcount". ([Vitty85](https://github.com/Vitty85))
|
- *Committed:* Fixed primitives, added new macro "_TRAINING_" for new ability "Training", added new trigger "trained", added "trainer" restriction to check if player controls an attacking creature with greater power than the current one, improved "ninjutsu" ability when the targeted card is already in play (e.g. "Olivia, Crimson Bride"), improved "flip" ability in order to add the "andability" option and in ordeer to prevent flipped auras go to graveyard, improved "andability" option for "imprint", "haunt" and "conjure" ability, improved "retarget" and "newtarget" keywords with "fromplay" option (to use with flipped auras e.g. "Vengeful Strangler"), replaced old "praidcount" and "oraidcount" with new keywords "pattackedcount" and "oattackedcount". https://github.com/WagicProject/wagic/commit/3baa6acaaf8a994b0fea3c142d14d99d20246da5 ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|
||||||
### 27/10/21
|
### 27/10/21
|
||||||
- *Committed:* Fixed "Mindbreak Trap", "Summary Dismissa" and "Obeka, Brute Chronologis" primitives. https://github.com/WagicProject/wagic/commit/051f498e54b186bf71c44d7b6595754fbf0d6ab1 ([Vitty85](https://github.com/Vitty85))
|
- *Committed:* Fixed "Mindbreak Trap", "Summary Dismissa" and "Obeka, Brute Chronologis" primitives. https://github.com/WagicProject/wagic/commit/051f498e54b186bf71c44d7b6595754fbf0d6ab1 ([Vitty85](https://github.com/Vitty85))
|
||||||
|
|||||||
@@ -110,8 +110,8 @@ toughness=*
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Abrade
|
name=Abrade
|
||||||
auto=choice damage:3 target(creature)
|
auto=if type(creature|battlefield)~morethan~0 then choice name(Deals 3 damage) name(Deals 3 damage) damage:3 target(creature)
|
||||||
auto=choice destroy target(artifact)
|
auto=if type(artifact|battlefield)~morethan~0 then choice name(Destroy artifact) name(Destroy artifact) destroy target(artifact)
|
||||||
text=Choose one -- Abrade deals 3 damage to target creature. -- Destroy target artifact.
|
text=Choose one -- Abrade deals 3 damage to target creature. -- Destroy target artifact.
|
||||||
mana={1}{R}
|
mana={1}{R}
|
||||||
type=Instant
|
type=Instant
|
||||||
@@ -13139,8 +13139,9 @@ type=Sorcery
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Conspicuous Snoop
|
name=Conspicuous Snoop
|
||||||
|
#MISSING: has all activated abilities
|
||||||
abilities=showfromtoplibrary
|
abilities=showfromtoplibrary
|
||||||
auto=if type(goblin[zpos=1]|mylibrary)~morethan~0 then may activate castcard(normal) all(*[zpos=1]|mylibrary)
|
auto=aslongas(goblin[zpos=1]|mylibrary) canplayfromlibrarytop >0
|
||||||
text=Play with the top card of your library revealed. -- You may cast Goblin spells from the top of your library. -- As long as the top card of your library is a Goblin card, Conspicuous Snoop has all activated abilities of that card.
|
text=Play with the top card of your library revealed. -- You may cast Goblin spells from the top of your library. -- As long as the top card of your library is a Goblin card, Conspicuous Snoop has all activated abilities of that card.
|
||||||
mana={R}{R}
|
mana={R}{R}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -30200,7 +30201,7 @@ toughness=6
|
|||||||
[card]
|
[card]
|
||||||
name=Gurmag Drowner
|
name=Gurmag Drowner
|
||||||
aicode=activate transforms((,newability[target(*[zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(mygraveyard) )!])) ueot
|
aicode=activate transforms((,newability[target(*[zpos<=4]|mylibrary) moveto(myhand) and!( all(*[zpos<=4]|mylibrary) moveto(mygraveyard) )!])) ueot
|
||||||
auto=may name(Exploit) sacrifice target(creature|mybattlefield) && name(look) reveal:4 optionone name(Get a card) target(*|reveal) moveto(myhand) optiononeend optiontwo name(put in graveyard) all(*|reveal) moveto(graveyard) optiontwoend revealend
|
auto=may name(Exploit) exploits target(creature|mybattlefield) && name(look) reveal:4 optionone name(Get a card) target(*|reveal) moveto(myhand) optiononeend optiontwo name(put in graveyard) all(*|reveal) moveto(graveyard) optiontwoend revealend
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Gurmag Drowner exploits a creature, look at the top four cards of your library. Put one of them into your hand and the rest into your graveyard.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Gurmag Drowner exploits a creature, look at the top four cards of your library. Put one of them into your hand and the rest into your graveyard.
|
||||||
mana={3}{U}
|
mana={3}{U}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -40378,7 +40379,7 @@ toughness=1
|
|||||||
[card]
|
[card]
|
||||||
name=Loathsome Curator
|
name=Loathsome Curator
|
||||||
abilities=menace
|
abilities=menace
|
||||||
auto=may name(Exploit) target(creature|mybattlefield) transforms((,newability[sacrifice],newability[name(Destroy creature) target(creature[manacost<=3]|opponentbattlefield) destroy])) oneshot
|
auto=may name(Exploit) target(creature|mybattlefield) exploits and!( transforms((,newability[name(Destroy creature) target(creature[manacost<=3]|opponentbattlefield) destroy])) oneshot )!
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- Menace -- When Loathsome Curator exploits a creature, destroy target creature you don't control with mana value 3 or less.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- Menace -- When Loathsome Curator exploits a creature, destroy target creature you don't control with mana value 3 or less.
|
||||||
mana={4}{B}
|
mana={4}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -51613,7 +51614,7 @@ color=black
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Profaner of the Dead
|
name=Profaner of the Dead
|
||||||
auto=may name(Exploit) target(creature|mybattlefield) sacrifice and!( transforms((,newability[name(Return creatures) all(creature[toughness<=tminus1minusend]|opponentbattlefield) moveto(ownerhand)])) oneshot )!
|
auto=may name(Exploit) target(creature|mybattlefield) exploits and!( transforms((,newability[name(Return creatures) all(creature[toughness<=tminus1minusend]|opponentbattlefield) moveto(ownerhand)])) oneshot )!
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Profaner of the Dead exploits a creature, return to their owners' hands all creatures your opponents control with toughness less than the exploited creature's toughness.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Profaner of the Dead exploits a creature, return to their owners' hands all creatures your opponents control with toughness less than the exploited creature's toughness.
|
||||||
mana={3}{U}
|
mana={3}{U}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -61541,7 +61542,7 @@ toughness=1
|
|||||||
[card]
|
[card]
|
||||||
name=Silumgar Scavenger
|
name=Silumgar Scavenger
|
||||||
abilities=flying
|
abilities=flying
|
||||||
auto=may name(Exploit) sacrifice target(creature|mybattlefield) && all(this) transforms((,newability[haste])) ueot
|
auto=may name(Exploit) exploits target(creature|mybattlefield) && all(this) transforms((,newability[haste])) ueot
|
||||||
auto=@movedto(other creature|graveyard) from(mybattlefield):counter(1/1)
|
auto=@movedto(other creature|graveyard) from(mybattlefield):counter(1/1)
|
||||||
text=Flying -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- Whenever another creature you control dies, put a +1/+1 counter on Silumgar Scavenger. It gains haste until end of turn if it exploited that creature.
|
text=Flying -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- Whenever another creature you control dies, put a +1/+1 counter on Silumgar Scavenger. It gains haste until end of turn if it exploited that creature.
|
||||||
mana={4}{B}
|
mana={4}{B}
|
||||||
|
|||||||
@@ -6709,9 +6709,10 @@ type=Artifact
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Asylum Visitor
|
name=Asylum Visitor
|
||||||
|
abilities=madness
|
||||||
auto=@each myupkeep restriction{type(*|myhand)~lessthan~1}:draw:1 && life:-1
|
auto=@each myupkeep restriction{type(*|myhand)~lessthan~1}:draw:1 && life:-1
|
||||||
auto=@each opponent upkeep restriction{type(*|opponenthand)~lessthan~1}:draw:1 && life:-1
|
auto=@each opponent upkeep restriction{type(*|opponenthand)~lessthan~1}:draw:1 && life:-1
|
||||||
autohand=@discarded(this):may pay[[{1}{B}]] moveto(mystack) && exiledeath ueot
|
autoexile=restriction{discarded} pay({1}{B}) name(pay 1B to cast) activate name(pay 1B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
|
||||||
text=At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life. -- Madness {1}{B} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.)
|
text=At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life. -- Madness {1}{B} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.)
|
||||||
mana={1}{B}
|
mana={1}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -46235,7 +46236,7 @@ toughness=1
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Giant Trap Door Spider
|
name=Giant Trap Door Spider
|
||||||
auto={1}{R}{G}{T}:moveTo(exile) all(this) && moveTo(exile) target(creature[attacking;-flying|opponentBattlefield)
|
auto={1}{R}{G}{T}:moveTo(exile) all(this) && moveTo(exile) target(creature[attacking;-flying]|opponentBattlefield)
|
||||||
text={1}{R}{G}, {T}: Exile Giant Trap Door Spider and target creature without flying that's attacking you.
|
text={1}{R}{G}, {T}: Exile Giant Trap Door Spider and target creature without flying that's attacking you.
|
||||||
mana={1}{R}{G}
|
mana={1}{R}{G}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -56409,7 +56410,7 @@ type=Enchantment
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Hunting Kavu
|
name=Hunting Kavu
|
||||||
auto={1}{R}{G}{T}:moveTo(exile) all(this) && moveTo(exile) target(creature[attacking;-flying|opponentBattlefield)
|
auto={1}{R}{G}{T}:moveTo(exile) all(this) && moveTo(exile) target(creature[attacking;-flying]|opponentBattlefield)
|
||||||
text={1}{R}{G}, {T}: Exile Hunting Kavu and target creature without flying that's attacking you.
|
text={1}{R}{G}, {T}: Exile Hunting Kavu and target creature without flying that's attacking you.
|
||||||
mana={1}{R}{G}
|
mana={1}{R}{G}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -74416,7 +74417,7 @@ toughness=2
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Minister of Pain
|
name=Minister of Pain
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && all(creature|opponentbattlefield) -1/-1 ueot
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && all(creature|opponentbattlefield) -1/-1 ueot
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Minister of Pain exploits a creature, creatures your opponents control get -1/-1 until end of turn.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Minister of Pain exploits a creature, creatures your opponents control get -1/-1 until end of turn.
|
||||||
mana={2}{B}
|
mana={2}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -90291,7 +90292,7 @@ toughness=2
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Qarsi Sadist
|
name=Qarsi Sadist
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && transforms((,newability[target(opponent) life:-2],newability[life:2 controller])) forever
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && transforms((,newability[target(opponent) life:-2],newability[life:2 controller])) forever
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Qarsi Sadist exploits a creature, target opponent loses 2 life and you gain 2 life.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Qarsi Sadist exploits a creature, target opponent loses 2 life and you gain 2 life.
|
||||||
mana={1}{B}
|
mana={1}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -91598,7 +91599,7 @@ toughness=2
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Rakshasa Gravecaller
|
name=Rakshasa Gravecaller
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && token(Zombie,Creature Zombie,2/2,black)*2
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && token(Zombie,Creature Zombie,2/2,black)*2
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Rakshasa Gravecaller exploits a creature, put two 2/2 black Zombie creature tokens onto the battlefield.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Rakshasa Gravecaller exploits a creature, put two 2/2 black Zombie creature tokens onto the battlefield.
|
||||||
mana={4}{B}
|
mana={4}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -105019,7 +105020,7 @@ toughness=1
|
|||||||
name=Sidisi, Undead Vizier
|
name=Sidisi, Undead Vizier
|
||||||
abilities=deathtouch,hiddenface
|
abilities=deathtouch,hiddenface
|
||||||
aicode=activate moveto(myhand) notatarget(*|mylibrary)
|
aicode=activate moveto(myhand) notatarget(*|mylibrary)
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) and!( reveal:plibrarycount optionone name(choose card) target(*|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myhand))! afterrevealedend revealend )!
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) and!( reveal:plibrarycount optionone name(choose card) target(*|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myhand))! afterrevealedend revealend )!
|
||||||
text=Deathtouch -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Sidisi, Undead Vizier exploits a creature, you may search your library for a card, put it into your hand, then shuffle your library.
|
text=Deathtouch -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Sidisi, Undead Vizier exploits a creature, you may search your library for a card, put it into your hand, then shuffle your library.
|
||||||
mana={3}{B}{B}
|
mana={3}{B}{B}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
@@ -105029,7 +105030,7 @@ toughness=6
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Sidisi's Faithful
|
name=Sidisi's Faithful
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && transforms((,newability[moveto(myhand) target(creature|battlefield)])) forever
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && transforms((,newability[moveto(myhand) target(creature|battlefield)])) forever
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Sidisi's Faithful exploits a creature, return target creature to its owner's hand.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Sidisi's Faithful exploits a creature, return target creature to its owner's hand.
|
||||||
mana={U}
|
mana={U}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -105637,7 +105638,7 @@ toughness=1
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Silumgar Butcher
|
name=Silumgar Butcher
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && transforms((,newability[target(creature|battlefield) -3/-3 ueot])) forever
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && transforms((,newability[target(creature|battlefield) -3/-3 ueot])) forever
|
||||||
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Silumgar Butcher exploits a creature, target creature gets -3/-3 until end of turn.
|
text=Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Silumgar Butcher exploits a creature, target creature gets -3/-3 until end of turn.
|
||||||
mana={4}{B}
|
mana={4}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -105657,7 +105658,7 @@ type=Artifact
|
|||||||
[card]
|
[card]
|
||||||
name=Silumgar Sorcerer
|
name=Silumgar Sorcerer
|
||||||
abilities=flash,flying
|
abilities=flash,flying
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && transforms((,newability[target(creature|stack) fizzle])) forever
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && transforms((,newability[target(creature|stack) fizzle])) forever
|
||||||
text=Flash (You may cast this spell any time you could cast an instant.) -- Flying -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Silumgar Sorcerer exploits a creature, counter target creature spell.
|
text=Flash (You may cast this spell any time you could cast an instant.) -- Flying -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Silumgar Sorcerer exploits a creature, counter target creature spell.
|
||||||
mana={1}{U}{U}
|
mana={1}{U}{U}
|
||||||
type=Creature
|
type=Creature
|
||||||
@@ -112830,27 +112831,8 @@ type=Instant
|
|||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
name=Starfield of Nyx
|
name=Starfield of Nyx
|
||||||
auto=@each my upkeep:may target(enchantment|mygraveyard) castcard(putinplay)
|
auto=@each my upkeep:may name(Return enchantment) target(enchantment|mygraveyard) moveto(mybattlefield)
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=1]) transforms((,newability[becomes(Creature)],setpower=1,settoughness=1)) >4
|
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura]) transforms((Creature,setpower=manacost,settoughness=manacost)) >4
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=2]) transforms((,newability[becomes(Creature)],setpower=2,settoughness=2)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=3]) transforms((,newability[becomes(Creature)],setpower=3,settoughness=3)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=4]) transforms((,newability[becomes(Creature)],setpower=4,settoughness=4)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=5]) transforms((,newability[becomes(Creature)],setpower=5,settoughness=5)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=6]) transforms((,newability[becomes(Creature)],setpower=6,settoughness=6)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=7]) transforms((,newability[becomes(Creature)],setpower=7,settoughness=7)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=8]) transforms((,newability[becomes(Creature)],setpower=8,settoughness=8)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=9]) transforms((,newability[becomes(Creature)],setpower=9,settoughness=9)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=10]) transforms((,newability[becomes(Creature)],setpower=10,settoughness=10)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=11]) transforms((,newability[becomes(Creature)],setpower=11,settoughness=11)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=12]) transforms((,newability[becomes(Creature)],setpower=12,settoughness=12)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=13]) transforms((,newability[becomes(Creature)],setpower=13,settoughness=13)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=14]) transforms((,newability[becomes(Creature)],setpower=14,settoughness=14)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=15]) transforms((,newability[becomes(Creature)],setpower=15,settoughness=15)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=16]) transforms((,newability[becomes(Creature)],setpower=16,settoughness=16)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=17]) transforms((,newability[becomes(Creature)],setpower=17,settoughness=17)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=18]) transforms((,newability[becomes(Creature)],setpower=18,settoughness=18)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=19]) transforms((,newability[becomes(Creature)],setpower=19,settoughness=19)) >4
|
|
||||||
auto=aslongas(enchantment|mybattlefield) lord(other enchantment[-aura;manacost=20]) transforms((,newability[becomes(Creature)],setpower=20,settoughness=20)) >4
|
|
||||||
text=At the beginning of your upkeep, you may return target enchantment card from your graveyard to the battlefield. As long as you control five or more enchantments, each other non-Aura enchantment you control is a creature in addition to its other types and has base power and base toughness each equal to its converted mana cost.
|
text=At the beginning of your upkeep, you may return target enchantment card from your graveyard to the battlefield. As long as you control five or more enchantments, each other non-Aura enchantment you control is a creature in addition to its other types and has base power and base toughness each equal to its converted mana cost.
|
||||||
mana={4}{W}
|
mana={4}{W}
|
||||||
type=Enchantment
|
type=Enchantment
|
||||||
@@ -130843,7 +130825,7 @@ toughness=5
|
|||||||
[card]
|
[card]
|
||||||
name=Vulturous Aven
|
name=Vulturous Aven
|
||||||
abilities=flying
|
abilities=flying
|
||||||
auto=may name(Exploit) sacrifice notatarget(creature|mybattlefield) && draw:2 controller && life:-2 controller
|
auto=may name(Exploit) exploits notatarget(creature|mybattlefield) && draw:2 controller && life:-2 controller
|
||||||
text=Flying -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Vulturous Aven exploits a creature, you draw two cards and you lose 2 life.
|
text=Flying -- Exploit (When this creature enters the battlefield, you may sacrifice a creature.) -- When Vulturous Aven exploits a creature, you draw two cards and you lose 2 life.
|
||||||
mana={3}{B}
|
mana={3}{B}
|
||||||
type=Creature
|
type=Creature
|
||||||
|
|||||||
@@ -937,7 +937,9 @@ class TrTokenCreated: public Trigger
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool thiscontroller, thisopponent;
|
bool thiscontroller, thisopponent;
|
||||||
TrTokenCreated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) :
|
bool limitOnceATurn;
|
||||||
|
int triggeredTurn;
|
||||||
|
TrTokenCreated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) :
|
||||||
Trigger(observer, id, source,once, tc)
|
Trigger(observer, id, source,once, tc)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -946,7 +948,10 @@ public:
|
|||||||
{
|
{
|
||||||
WEventTokenCreated * e = dynamic_cast<WEventTokenCreated *> (event);
|
WEventTokenCreated * e = dynamic_cast<WEventTokenCreated *> (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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -959,7 +964,9 @@ public:
|
|||||||
class TrCardSacrificed: public Trigger
|
class TrCardSacrificed: public Trigger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TrCardSacrificed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false) :
|
bool limitOnceATurn;
|
||||||
|
int triggeredTurn;
|
||||||
|
TrCardSacrificed(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) :
|
||||||
Trigger(observer, id, source, once, tc)
|
Trigger(observer, id, source, once, tc)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -968,6 +975,8 @@ public:
|
|||||||
{
|
{
|
||||||
WEventCardSacrifice * e = dynamic_cast<WEventCardSacrifice *> (event);
|
WEventCardSacrifice * e = dynamic_cast<WEventCardSacrifice *> (event);
|
||||||
if (!e) return 0;
|
if (!e) return 0;
|
||||||
|
if (limitOnceATurn && triggeredTurn == game->turn)
|
||||||
|
return 0;
|
||||||
MTGCardInstance * check = e->cardAfter;
|
MTGCardInstance * check = e->cardAfter;
|
||||||
MTGGameZone * oldZone = e->cardAfter->currentZone;
|
MTGGameZone * oldZone = e->cardAfter->currentZone;
|
||||||
check->currentZone = check->previousZone;
|
check->currentZone = check->previousZone;
|
||||||
@@ -983,6 +992,7 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
check->currentZone = oldZone;
|
check->currentZone = oldZone;
|
||||||
|
triggeredTurn = game->turn;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -992,6 +1002,47 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TrCardExploited: public Trigger
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool limitOnceATurn;
|
||||||
|
int triggeredTurn;
|
||||||
|
TrCardExploited(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc, bool once = false, bool limitOnceATurn = false) :
|
||||||
|
Trigger(observer, id, source, once, tc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int triggerOnEventImpl(WEvent * event)
|
||||||
|
{
|
||||||
|
WEventCardExploited * e = dynamic_cast<WEventCardExploited *> (event);
|
||||||
|
if (!e) return 0;
|
||||||
|
if (limitOnceATurn && triggeredTurn == game->turn)
|
||||||
|
return 0;
|
||||||
|
MTGCardInstance * check = e->cardAfter;
|
||||||
|
MTGGameZone * oldZone = e->cardAfter->currentZone;
|
||||||
|
check->currentZone = check->previousZone;
|
||||||
|
if (check->next && (check->next->currentZone|| check->isToken))
|
||||||
|
{
|
||||||
|
check = e->cardAfter->next;
|
||||||
|
oldZone = e->cardAfter->next->currentZone;
|
||||||
|
check->currentZone = e->cardAfter->next->previousZone;
|
||||||
|
}
|
||||||
|
if (!tc->canTarget(check,true))
|
||||||
|
{
|
||||||
|
check->currentZone = oldZone;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
check->currentZone = oldZone;
|
||||||
|
triggeredTurn = game->turn;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
TrCardExploited * clone() const
|
||||||
|
{
|
||||||
|
return NEW TrCardExploited(*this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class TrCardDiscarded: public Trigger
|
class TrCardDiscarded: public Trigger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -1732,6 +1783,7 @@ class AASacrificeCard: public ActivatedAbility
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MTGAbility * andAbility;
|
MTGAbility * andAbility;
|
||||||
|
bool isExploited;
|
||||||
AASacrificeCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
AASacrificeCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target);
|
||||||
int resolve();
|
int resolve();
|
||||||
const string getMenuText();
|
const string getMenuText();
|
||||||
|
|||||||
@@ -195,6 +195,13 @@ struct WEventCardSacrifice : public WEventCardUpdate {
|
|||||||
virtual Targetable * getTarget(int target);
|
virtual Targetable * getTarget(int target);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//event when card is exploited.
|
||||||
|
struct WEventCardExploited : public WEventCardUpdate {
|
||||||
|
MTGCardInstance * cardAfter;
|
||||||
|
WEventCardExploited(MTGCardInstance * card,MTGCardInstance * afterCard);
|
||||||
|
virtual Targetable * getTarget(int target);
|
||||||
|
};
|
||||||
|
|
||||||
//event when card is discarded.
|
//event when card is discarded.
|
||||||
struct WEventCardDiscard : public WEventCardUpdate {
|
struct WEventCardDiscard : public WEventCardUpdate {
|
||||||
WEventCardDiscard(MTGCardInstance * card);
|
WEventCardDiscard(MTGCardInstance * card);
|
||||||
|
|||||||
@@ -4133,6 +4133,7 @@ AASacrificeCard::AASacrificeCard(GameObserver* observer, int _id, MTGCardInstanc
|
|||||||
{
|
{
|
||||||
target = _target;
|
target = _target;
|
||||||
andAbility = NULL;
|
andAbility = NULL;
|
||||||
|
isExploited = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AASacrificeCard::resolve()
|
int AASacrificeCard::resolve()
|
||||||
@@ -4140,14 +4141,18 @@ int AASacrificeCard::resolve()
|
|||||||
MTGCardInstance * _target = (MTGCardInstance *) target;
|
MTGCardInstance * _target = (MTGCardInstance *) target;
|
||||||
if (_target)
|
if (_target)
|
||||||
{
|
{
|
||||||
if(_target->mutation && _target->parentCards.size() > 0) return 0; // Mutated down cards cannot be sacrificed, they will follow the fate of top-card
|
if(_target->mutation && _target->parentCards.size() > 0) return 0; // Mutated down cards cannot be sacrificed or exploited, they will follow the fate of top-card
|
||||||
Player * p = _target->controller();
|
Player * p = _target->controller();
|
||||||
MTGCardInstance * beforeCard = _target;
|
MTGCardInstance * beforeCard = _target;
|
||||||
p->game->putInGraveyard(_target);
|
p->game->putInGraveyard(_target);
|
||||||
while(_target->next)
|
while(_target->next)
|
||||||
_target = _target->next;
|
_target = _target->next;
|
||||||
WEvent * e = NEW WEventCardSacrifice(beforeCard,_target);
|
WEvent * e = NEW WEventCardSacrifice(beforeCard, _target);
|
||||||
game->receiveEvent(e);
|
game->receiveEvent(e);
|
||||||
|
if(isExploited){
|
||||||
|
WEvent * e = NEW WEventCardExploited(beforeCard, _target);
|
||||||
|
game->receiveEvent(e);
|
||||||
|
}
|
||||||
if(andAbility)
|
if(andAbility)
|
||||||
{
|
{
|
||||||
MTGAbility * andAbilityClone = andAbility->clone();
|
MTGAbility * andAbilityClone = andAbility->clone();
|
||||||
@@ -4169,7 +4174,10 @@ int AASacrificeCard::resolve()
|
|||||||
|
|
||||||
const string AASacrificeCard::getMenuText()
|
const string AASacrificeCard::getMenuText()
|
||||||
{
|
{
|
||||||
return "Sacrifice";
|
if(isExploited)
|
||||||
|
return "Exploit";
|
||||||
|
else
|
||||||
|
return "Sacrifice";
|
||||||
}
|
}
|
||||||
|
|
||||||
AASacrificeCard * AASacrificeCard::clone() const
|
AASacrificeCard * AASacrificeCard::clone() const
|
||||||
@@ -4804,8 +4812,10 @@ int AAFlip::resolve()
|
|||||||
while (_target->next)
|
while (_target->next)
|
||||||
_target = _target->next;
|
_target = _target->next;
|
||||||
|
|
||||||
|
MTGGameZone * currentZone = NULL;
|
||||||
if(forcetype != "" && _target) // Added to flip Modal Double Faced cards (e.g. Zendikar Rising).
|
if(forcetype != "" && _target) // Added to flip Modal Double Faced cards (e.g. Zendikar Rising).
|
||||||
{
|
{
|
||||||
|
currentZone = _target->currentZone; // Added to keep track of current zone before flip.
|
||||||
for (int i = ((int)_target->types.size())-1; i >= 0; --i)
|
for (int i = ((int)_target->types.size())-1; i >= 0; --i)
|
||||||
_target->removeType(_target->types[i]);
|
_target->removeType(_target->types[i]);
|
||||||
list<int> typesToAdd;
|
list<int> typesToAdd;
|
||||||
@@ -4994,9 +5004,10 @@ int AAFlip::resolve()
|
|||||||
|
|
||||||
if(forcetype != "" && _target && _target->isPermanent()) // Added to flip Modal Double Faced cards (e.g. Zendikar Rising).
|
if(forcetype != "" && _target && _target->isPermanent()) // Added to flip Modal Double Faced cards (e.g. Zendikar Rising).
|
||||||
{
|
{
|
||||||
|
if(!currentZone) currentZone = _target->controller()->game->hand; // If NULL, we consider hand as the default currentZone.
|
||||||
_target->castMethod = Constants::CAST_NORMALLY;
|
_target->castMethod = Constants::CAST_NORMALLY;
|
||||||
_target->controller()->game->battlefield->addCard(_target);
|
_target->controller()->game->battlefield->addCard(_target);
|
||||||
WEvent * e = NEW WEventZoneChange(_target, _target->controller()->game->hand, _target->controller()->game->battlefield);
|
WEvent * e = NEW WEventZoneChange(_target, currentZone, _target->controller()->game->battlefield);
|
||||||
game->receiveEvent(e);
|
game->receiveEvent(e);
|
||||||
} else {
|
} else {
|
||||||
WEvent * e = NEW WEventCardTransforms(_target);
|
WEvent * e = NEW WEventCardTransforms(_target);
|
||||||
|
|||||||
@@ -1363,11 +1363,15 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell
|
|||||||
|
|
||||||
//Token has been created
|
//Token has been created
|
||||||
if (TargetChooser * tc = parseSimpleTC(s, "tokencreated", card))
|
if (TargetChooser * tc = parseSimpleTC(s, "tokencreated", card))
|
||||||
return NEW TrTokenCreated(observer, id, card, tc, once);
|
return NEW TrTokenCreated(observer, id, card, tc, once, limitOnceATurn);
|
||||||
|
|
||||||
//Card is sacrificed
|
//Card is sacrificed
|
||||||
if (TargetChooser * tc = parseSimpleTC(s, "sacrificed", card))
|
if (TargetChooser * tc = parseSimpleTC(s, "sacrificed", card))
|
||||||
return NEW TrCardSacrificed(observer, id, card, tc, once);
|
return NEW TrCardSacrificed(observer, id, card, tc, once, limitOnceATurn);
|
||||||
|
|
||||||
|
//Card is exploited
|
||||||
|
if (TargetChooser * tc = parseSimpleTC(s, "exploited", card))
|
||||||
|
return NEW TrCardExploited(observer, id, card, tc, once, limitOnceATurn);
|
||||||
|
|
||||||
//Card is Discarded
|
//Card is Discarded
|
||||||
if (TargetChooser * tc = parseSimpleTC(s, "discarded", card))
|
if (TargetChooser * tc = parseSimpleTC(s, "discarded", card))
|
||||||
@@ -3626,10 +3630,11 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s.find("sacrifice") != string::npos)
|
if (s.find("sacrifice") != string::npos || s.find("exploits") != string::npos)
|
||||||
{
|
{
|
||||||
MTGAbility *a = NEW AASacrificeCard(observer, id, card, target);
|
MTGAbility *a = NEW AASacrificeCard(observer, id, card, target);
|
||||||
a->oneShot = 1;
|
a->oneShot = 1;
|
||||||
|
((AASacrificeCard*)a)->isExploited = (s.find("exploits") != string::npos)?true:false; // added to allow the Exploit trigger.
|
||||||
if(storedAndAbility.size())
|
if(storedAndAbility.size())
|
||||||
{
|
{
|
||||||
string stored = storedAndAbility;
|
string stored = storedAndAbility;
|
||||||
@@ -7004,6 +7009,13 @@ int TriggeredAbility::receiveEvent(WEvent * e)
|
|||||||
resolve();
|
resolve();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if(dynamic_cast<WEventCardExploited*>(e))
|
||||||
|
{
|
||||||
|
//exploited event must resolve instantly or by the time they do the cards that triggered them
|
||||||
|
//have already been put in graveyard.
|
||||||
|
resolve();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
if(dynamic_cast<WEventCardDiscard*>(e))
|
if(dynamic_cast<WEventCardDiscard*>(e))
|
||||||
{
|
{
|
||||||
//discard event must resolve instantly or by the time they do the cards that triggered them
|
//discard event must resolve instantly or by the time they do the cards that triggered them
|
||||||
|
|||||||
@@ -110,6 +110,11 @@ WEventCardSacrifice::WEventCardSacrifice(MTGCardInstance * card, MTGCardInstance
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WEventCardExploited::WEventCardExploited(MTGCardInstance * card, MTGCardInstance * after) :
|
||||||
|
WEventCardUpdate(card),cardAfter(after)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
WEventCardDiscard::WEventCardDiscard(MTGCardInstance * card) :
|
WEventCardDiscard::WEventCardDiscard(MTGCardInstance * card) :
|
||||||
WEventCardUpdate(card)
|
WEventCardUpdate(card)
|
||||||
{
|
{
|
||||||
@@ -440,6 +445,15 @@ Targetable * WEventCardSacrifice::getTarget(int target)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Targetable * WEventCardExploited::getTarget(int target)
|
||||||
|
{
|
||||||
|
if (target)
|
||||||
|
{
|
||||||
|
return cardAfter;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Targetable * WEventCardDiscard::getTarget(int target)
|
Targetable * WEventCardDiscard::getTarget(int target)
|
||||||
{
|
{
|
||||||
if (target) return card;
|
if (target) return card;
|
||||||
|
|||||||
Reference in New Issue
Block a user