Fixed some primitives from issue #1085 and from Discord channel, fixed all curses primitives and targets, added new keywords "oppotgt" and "ctrltgt" to check wich player has been targeted from a card, fixed an issue on "chooseaname" ability.

This commit is contained in:
Vittorio Alfieri
2023-07-13 17:24:11 +02:00
parent c170733af6
commit fbfcb7d3ac
9 changed files with 298 additions and 174 deletions

View File

@@ -1,7 +1,7 @@
grade=borderline
#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
#I sorted this programmatically - Thanks to Vitty85 11-07-2023
#I sorted this programmatically - Thanks to Vitty85 13-07-2023
[card]
name=+2 Mace
auto={3}:equip
@@ -13139,12 +13139,10 @@ toughness=3
[/card]
[card]
name=Calamity Bearer
auto=@damaged(creature|myBattlefield) from(*[giant]|myzones) turnlimited:damage:thatmuch all(trigger[to])
auto=@damaged(creature|opponentBattlefield) from(*[giant]|*) turnlimited:damage:thatmuch all(trigger[to])
auto=@damageof(player) from(*[giant]|myzones) turnlimited:damage:thatmuch controller
auto=@damagefoeof(player) from(*[giant]|*) turnlimited:damage:thatmuch opponent
auto=@damaged(planeswalker|myBattlefield) from(*[giant]|myzones) turnlimited:damage:thatmuch all(trigger[to])
auto=@damaged(planeswalker|opponentBattlefield) from(*[giant]|*) turnlimited:damage:thatmuch all(trigger[to])
auto=transforms((,newability[double strike])) forever
auto=@damaged(*|battlefield) from(*[-Calamity Bearer&giant]|myzones):name(Deals double damage) all(trigger[to]) name(Deals double damage) damage:thatmuch
auto=@damageof(player) from(*[-Calamity Bearer&giant]|myzones):name(Deals double damage) damage:thatmuch controller
auto=@damagefoeof(player) from(*[-Calamity Bearer&giant]|myzones):name(Deals double damage) damage:thatmuch opponent
text=If a Giant source you control would deal damage to a permanent or player, it deals double that damage to that permanent or player instead.
mana={2}{R}{R}
type=Creature
@@ -13205,9 +13203,9 @@ toughness=3
[/card]
[card]
name=Caldaia Strongarm
auto=target(creature) counter(1/1,2)
other={3}{G}:name(Blitz)
auto=if paid(alternative) then moveto(mybattlefield) and!( transforms((,newability[haste],newability[_DIES_draw:1],newability[treason])) forever )! asSorcery
auto=if paid(alternative) then moveto(mybattlefield) and!( transforms((,newability[haste],newability[_DIES_draw:1 controller],newability[treason],newability[name(Put 1/1 counters) name(Put 1/1 counters) target(creature|battlefield) counter(1/1.2)])) forever )!
auto=ifnot paid(alternative) then name(Put 1/1 counters) name(Put 1/1 counters) target(creature|battlefield) counter(1/1,2)
text=When Caldaia Strongarm enters the battlefield, put two +1/+1 counters on target creature. -- Blitz {3}{G} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.)
mana={4}{G}
type=Creature
@@ -13257,8 +13255,12 @@ type=Sorcery
[/card]
[card]
name=Call of the Death-Dweller
target=<upto:2>creature[manacost<=3]|myGraveyard
auto=moveTo(myBattlefield) and!( transforms((,newability[counter(0/0.1.Deathtouch)],newability[this(counter{0/0.1.Deathtouch}>=1) deathtouch],newability[counter(0/0.1.Menace)],newability[this(counter{0/0.1.Menace}>=1) menace])) forever )!
auto=emblem transforms((,newability[lord(creature[counter{0/0.1.Deathtouch}]|mybattlefield) deathtouch],newability[lord(creature[counter{0/0.1.Menace}]|mybattlefield) menace])) forever dontremove
auto=if type(creature[manacost=0]|mygraveyard)~morethan~0 then choice name(Return creature with manacost 0) name(Return creature with manacost 0) target(creature[manacost=0]|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[counter(0/0.1.Menace)],newability[counter(0/0.1.Deathtouch)],newability[if type(creature[manacost=0]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 0) name(Return another creature with manacost 0) target(creature[manacost=0]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[if type(creature[manacost=1]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 1) name(Return another creature with manacost 1) target(creature[manacost=1]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[if type(creature[manacost=2]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 2) name(Return another creature with manacost 2) target(creature[manacost=2]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[if type(creature[manacost=3]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 3) name(Return another creature with manacost 3) target(creature[manacost=3]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[choice name(Don't return another creature) donothing])) forever )!
auto=if type(creature[manacost=1]|mygraveyard)~morethan~0 then choice name(Return creature with manacost 1) name(Return creature with manacost 1) target(creature[manacost=1]|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[counter(0/0.1.Menace)],newability[counter(0/0.1.Deathtouch)],newability[if type(creature[manacost=0]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 0) name(Return another creature with manacost 0) target(creature[manacost=0]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[if type(creature[manacost=1]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 1) name(Return another creature with manacost 1) target(creature[manacost=1]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[if type(creature[manacost=2]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 2) name(Return another creature with manacost 2) target(creature[manacost=2]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[choice name(Don't return another creature) donothing])) forever )!
auto=if type(creature[manacost=2]|mygraveyard)~morethan~0 then choice name(Return creature with manacost 2) name(Return creature with manacost 3) target(creature[manacost=2]|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[counter(0/0.1.Menace)],newability[counter(0/0.1.Deathtouch)],newability[if type(creature[manacost=0]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 0) name(Return another creature with manacost 0) target(creature[manacost=0]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[if type(creature[manacost=1]|mygraveyard)~morethan~0 then choice name(Return another creature with manacost 1) name(Return another creature with manacost 1) target(creature[manacost=1]|mygraveyard) moveto(mybattlefield) and!( counter(0/0.1.Menace) && counter(0/0.1.Deathtouch) )!],newability[choice name(Don't return another creature) donothing])) forever )!
auto=if type(creature[manacost=3]|mygraveyard)~morethan~0 then choice name(Return creature with manacost 3) name(Return creature with manacost 3) target(creature[manacost=3]|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[counter(0/0.1.Menace)],newability[counter(0/0.1.Deathtouch)])) forever )!
auto=choice name(Don't return any creature) donothing
text=Return up to two target creature cards with total mana value 3 or less from your graveyard to the battlefield. Put a deathtouch counter on either of them. Then put a menace counter on either of them.
mana={2}{B}
type=Sorcery
@@ -13273,7 +13275,7 @@ type=Enchantment
[/card]
[card]
name=Call the Cavalry
auto=create(Knight:creature Knight:2/2:white:vigilance)*2
auto=name(Create knights) token(Knight,Creature Knight,2/2,white,vigilance)*2
text=Create two 2/2 white Knight creature tokens with vigilance.
mana={3}{W}
type=Sorcery
@@ -14920,7 +14922,7 @@ subtype=Saga
[card]
name=Chainer, Nightmare Adept
auto={D(*|myhand)}:name(Can play from graveyard) target(creature|mygraveyard) transforms((,newability[canplayfromgraveyard])) ueot limit:1
auto=@movedto(creature[-token]|myBattlefield):name(May gain haste) all(trigger[to]) transforms((,newability[ifnot casted(this) then transforms((,newability[haste])) uynt])) forever
auto=@movedto(creature[-token]|mystack) from(mygraveyard,myexile,mycommandzone,mysideboard,mylibrary):name(Creature gains haste) transforms((,newability[@movedto(creature[-token]|mybattlefield) turnlimited:name(Creature gains haste) all(trigger[to]) name(Creature gains haste) transforms((,newability[haste])) uynt])) uynt
text=Discard a card: You may cast a creature card from your graveyard this turn. Activate this ability only once each turn. -- Whenever a nontoken creature enters the battlefield under your control, if you didn't cast it from your hand, it gains haste until your next turn.
mana={2}{B}{R}
type=Legendary Creature
@@ -15507,7 +15509,8 @@ toughness=6
[/card]
[card]
name=Chaos Wand
auto={4}{T}:Reveal:1 revealzone(opponentlibrary) revealuntil(*[instant;sorcery]|opponentlibrary) optionone choice name(Cast revelead instant or sorcery?) target(<upto:1>*[instant;sorcery]|reveal) moveto(ownerexile) and!( transforms((,newability[counter(0/0.1.ChaosExiledCast)])) forever )! optiononeend optiontwo choice name(put exile) target(<1>*|reveal) bottomoflibrary and!( all(*|reveal) moveto(ownerexile) and!( transforms((,newability[counter(0/0.1.ChaosExiled)])) forever )! )! optiontwoend afterrevealed all(*[counter{0/0.1.ChaosExiled}]|opponentexile) bottomoflibrary and!( name(Cast instant or sorcery) name(Cast instant or sorcery) target(*[counter{0/0.1.ChaosExiledCast}]|opponentexile) activate castcard(normal) )! afterrevealedend revealend
aicode=activate transforms((,newability[all(*[zpos=oppofindfirsttypenonpermanent]|opponentlibrary) moveto(opponentexile) and!( activate castcard(normal) and!( all(*[zpos<=oppofindfirsttypenonpermanent]|opponentlibrary) moveto(opponentexile) and!( bottomoflibrary )! )! )!])) ueot
auto={4}{T}:name(Exile from opponent library) reveal:1 revealzone(opponentlibrary) revealuntil(*[instant;sorcery]|opponentlibrary) optionone name(Choose instant or sorcery) target(<upto:1>*[instant;sorcery]|reveal) moveto(opponentexile) and!( becomes(tobecha) ueot )! optiononeend optiontwo name(Put exile) target(*|reveal) moveto(ownerexile) and!( bottomoflibrary and!( all(*|reveal) moveto(ownerexile) and!( bottomoflibrary )! )! )! optiontwoend afterrevealed all(tobecha|opponentexile) activate castcard(normal) afterrevealedend revealend
text={4}, {T}: Target opponent exiles cards from the top of their library until they exile an instant or sorcery card. You may cast that card without paying its mana cost. Then put the exiled cards that weren't cast this way on the bottom of that library in a random order.
mana={3}
type=Artifact
@@ -15844,8 +15847,8 @@ toughness=1
[card]
name=Chevill, Bane of Monsters
abilities=deathtouch
auto=@each my upkeep restriction{type(*[counter{0/0.1.Bounty}]|opponentBattlefield)~morethan~0}:counter(0/0,1,Bounty) target(creature,planeswalker|opponentBattlefield)
auto=@movedto(graveyard) from(*[counter{0/0.1.Bounty}]|opponentbattlefield):life:3 controller && draw:1 controller
auto=@each my upkeep:if type(*[counter{0/0.1.Bounty}]|opponentBattlefield)~equalto~0 then name(Put bounty counter) name(Put bounty counter) target(*[creature;planeswalker]|opponentBattlefield) counter(0/0,1,Bounty)
auto=@movedto(graveyard) from(*[counter{0/0.1.Bounty}]|opponentbattlefield):name(Gain life and draw) life:3 controller && draw:1 controller
text=Deathtouch -- At the beginning of your upkeep, if your opponents control no permanents with bounty counters on them, put a bounty counter on target creature or planeswalker an opponent controls. -- Whenever a permanent an opponent controls with a bounty counter on it dies, you gain 3 life and draw a card.
mana={B}{G}
type=Legendary Creature
@@ -15892,27 +15895,47 @@ toughness=5
[/card]
[card]
name=Chill Haunting
target=creature
auto=if type(creature|mygraveyard)~morethan~0 then choice name(Exile 1 creature) name(Exile 1 creature) -1/-1 ueot && target(creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~1 then choice name(Exile 2 creatures) name(Exile 2 creatures) -2/-2 ueot && target(<2>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~2 then choice name(Exile 3 creatures) name(Exile 3 creatures) -3/-3 ueot && target(<3>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~3 then choice name(Exile 4 creatures) name(Exile 4 creatures) -4/-4 ueot && target(<4>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~4 then choice name(Exile 5 creatures) name(Exile 5 creatures) -5/-5 ueot && target(<5>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~5 then choice name(Exile 6 creatures) name(Exile 6 creatures) -6/-6 ueot && target(<6>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~6 then choice name(Exile 7 creatures) name(Exile 7 creatures) -7/-7 ueot && target(<7>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~7 then choice name(Exile 8 creatures) name(Exile 8 creatures) -8/-8 ueot && target(<8>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~8 then choice name(Exile 9 creatures) name(Exile 9 creatures) -9/-9 ueot && target(<9>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~9 then choice name(Exile 10 creatures) name(Exile 10 creatures) -10/-10 ueot && target(<10>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~10 then choice name(Exile 11 creatures) name(Exile 11 creatures) -11/-11 ueot && target(<11>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~11 then choice name(Exile 12 creatures) name(Exile 12 creatures) -12/-12 ueot && target(<12>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~12 then choice name(Exile 13 creatures) name(Exile 13 creatures) -13/-13 ueot && target(<13>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~13 then choice name(Exile 14 creatures) name(Exile 14 creatures) -14/-14 ueot && target(<14>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~14 then choice name(Exile 15 creatures) name(Exile 15 creatures) -15/-15 ueot && target(<15>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~15 then choice name(Exile 16 creatures) name(Exile 16 creatures) -16/-16 ueot && target(<16>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~16 then choice name(Exile 17 creatures) name(Exile 17 creatures) -17/-17 ueot && target(<17>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~17 then choice name(Exile 18 creatures) name(Exile 18 creatures) -18/-18 ueot && target(<18>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~18 then choice name(Exile 19 creatures) name(Exile 19 creatures) -19/-19 ueot && target(<19>creature|mygraveyard) moveTo(exile)
auto=if type(creature|mygraveyard)~morethan~19 then choice name(Exile 20 creatures) name(Exile 20 creatures) -20/-20 ueot && target(<20>creature|mygraveyard) moveTo(exile)
restriction=type(creature|battlefield)~morethan~0
auto=if type(creature|mygraveyard)~morethan~0 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 1) name(Target opponent creature and exile 1) name(Target opponent creature and exile 1 creature) target(creature|opponentbattlefield) transforms((,newability[-1/-1 ueot],newability[ability$!name(Exile 1 creature) target(creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~1 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 2) name(Target opponent creature and exile 2) name(Target opponent creature and exile 2) target(creature|opponentbattlefield) transforms((,newability[-2/-2 ueot],newability[ability$!name(Exile 2 creatures) target(<2>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~2 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 3) name(Target opponent creature and exile 3) name(Target opponent creature and exile 3) target(creature|opponentbattlefield) transforms((,newability[-3/-3 ueot],newability[ability$!name(Exile 3 creatures) target(<3>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~3 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 4) name(Target opponent creature and exile 4) name(Target opponent creature and exile 4) target(creature|opponentbattlefield) transforms((,newability[-4/-4 ueot],newability[ability$!name(Exile 4 creatures) target(<4>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~4 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 5) name(Target opponent creature and exile 5) name(Target opponent creature and exile 5) target(creature|opponentbattlefield) transforms((,newability[-5/-5 ueot],newability[ability$!name(Exile 5 creatures) target(<5>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~5 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 6) name(Target opponent creature and exile 6) name(Target opponent creature and exile 6) target(creature|opponentbattlefield) transforms((,newability[-6/-6 ueot],newability[ability$!name(Exile 6 creatures) target(<6>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~6 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 7) name(Target opponent creature and exile 7) name(Target opponent creature and exile 7) target(creature|opponentbattlefield) transforms((,newability[-7/-7 ueot],newability[ability$!name(Exile 7 creatures) target(<7>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~7 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 8) name(Target opponent creature and exile 8) name(Target opponent creature and exile 8) target(creature|opponentbattlefield) transforms((,newability[-8/-8 ueot],newability[ability$!name(Exile 8 creatures) target(<8>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~8 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 9) name(Target opponent creature and exile 9) name(Target opponent creature and exile 9) target(creature|opponentbattlefield) transforms((,newability[-9/-9 ueot],newability[ability$!name(Exile 9 creatures) target(<9>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~9 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 10) name(Target opponent creature and exile 10) name(Target opponent creature and exile 10) target(creature|opponentbattlefield) transforms((,newability[-10/-10 ueot],newability[ability$!name(Exile 10 creatures) target(<10>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~10 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 11) name(Target opponent creature and exile 11) name(Target opponent creature and exile 11) target(creature|opponentbattlefield) transforms((,newability[-11/-11 ueot],newability[ability$!name(Exile 11 creatures) target(<11>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~11 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 12) name(Target opponent creature and exile 12) name(Target opponent creature and exile 12) target(creature|opponentbattlefield) transforms((,newability[-12/-12 ueot],newability[ability$!name(Exile 12 creatures) target(<12>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~12 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 13) name(Target opponent creature and exile 13) name(Target opponent creature and exile 13) target(creature|opponentbattlefield) transforms((,newability[-13/-13 ueot],newability[ability$!name(Exile 13 creatures) target(<13>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~13 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 14) name(Target opponent creature and exile 14) name(Target opponent creature and exile 14) target(creature|opponentbattlefield) transforms((,newability[-14/-14 ueot],newability[ability$!name(Exile 14 creatures) target(<14>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~14 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 15) name(Target opponent creature and exile 15) name(Target opponent creature and exile 15) target(creature|opponentbattlefield) transforms((,newability[-15/-15 ueot],newability[ability$!name(Exile 15 creatures) target(<15>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~15 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 16) name(Target opponent creature and exile 16) name(Target opponent creature and exile 16) target(creature|opponentbattlefield) transforms((,newability[-16/-16 ueot],newability[ability$!name(Exile 16 creatures) target(<16>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~16 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 17) name(Target opponent creature and exile 17) name(Target opponent creature and exile 17) target(creature|opponentbattlefield) transforms((,newability[-17/-17 ueot],newability[ability$!name(Exile 17 creatures) target(<17>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~17 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 18) name(Target opponent creature and exile 18) name(Target opponent creature and exile 18) target(creature|opponentbattlefield) transforms((,newability[-18/-18 ueot],newability[ability$!name(Exile 18 creatures) target(<18>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~18 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 19) name(Target opponent creature and exile 19) name(Target opponent creature and exile 19) target(creature|opponentbattlefield) transforms((,newability[-19/-19 ueot],newability[ability$!name(Exile 19 creatures) target(<19>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~19 then if type(creature|opponentbattlefield)~morethan~0 then choice name(Target opponent creature and exile 20) name(Target opponent creature and exile 20) name(Target opponent creature and exile 20) target(creature|opponentbattlefield) transforms((,newability[-20/-20 ueot],newability[ability$!name(Exile 20 creatures) target(<20>creature|mygraveyard) moveto(myexile)!$ opponent])) ueot
auto=if type(creature|mygraveyard)~morethan~0 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 1) name(Target your creature and exile 1) name(Target your creature and exile 1 creature) target(creature|mybattlefield) transforms((,newability[-1/-1 ueot],newability[ability$!name(Exile 1 creature) target(creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~1 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 2) name(Target your creature and exile 2) name(Target your creature and exile 2) target(creature|mybattlefield) transforms((,newability[-2/-2 ueot],newability[ability$!name(Exile 2 creatures) target(<2>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~2 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 3) name(Target your creature and exile 3) name(Target your creature and exile 3) target(creature|mybattlefield) transforms((,newability[-3/-3 ueot],newability[ability$!name(Exile 3 creatures) target(<3>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~3 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 4) name(Target your creature and exile 4) name(Target your creature and exile 4) target(creature|mybattlefield) transforms((,newability[-4/-4 ueot],newability[ability$!name(Exile 4 creatures) target(<4>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~4 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 5) name(Target your creature and exile 5) name(Target your creature and exile 5) target(creature|mybattlefield) transforms((,newability[-5/-5 ueot],newability[ability$!name(Exile 5 creatures) target(<5>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~5 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 6) name(Target your creature and exile 6) name(Target your creature and exile 6) target(creature|mybattlefield) transforms((,newability[-6/-6 ueot],newability[ability$!name(Exile 6 creatures) target(<6>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~6 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 7) name(Target your creature and exile 7) name(Target your creature and exile 7) target(creature|mybattlefield) transforms((,newability[-7/-7 ueot],newability[ability$!name(Exile 7 creatures) target(<7>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~7 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 8) name(Target your creature and exile 8) name(Target your creature and exile 8) target(creature|mybattlefield) transforms((,newability[-8/-8 ueot],newability[ability$!name(Exile 8 creatures) target(<8>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~8 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 9) name(Target your creature and exile 9) name(Target your creature and exile 9) target(creature|mybattlefield) transforms((,newability[-9/-9 ueot],newability[ability$!name(Exile 9 creatures) target(<9>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~9 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 10) name(Target your creature and exile 10) name(Target your creature and exile 10) target(creature|mybattlefield) transforms((,newability[-10/-10 ueot],newability[ability$!name(Exile 10 creatures) target(<10>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~10 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 11) name(Target your creature and exile 11) name(Target your creature and exile 11) target(creature|mybattlefield) transforms((,newability[-11/-11 ueot],newability[ability$!name(Exile 11 creatures) target(<11>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~11 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 12) name(Target your creature and exile 12) name(Target your creature and exile 12) target(creature|mybattlefield) transforms((,newability[-12/-12 ueot],newability[ability$!name(Exile 12 creatures) target(<12>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~12 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 13) name(Target your creature and exile 13) name(Target your creature and exile 13) target(creature|mybattlefield) transforms((,newability[-13/-13 ueot],newability[ability$!name(Exile 13 creatures) target(<13>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~13 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 14) name(Target your creature and exile 14) name(Target your creature and exile 14) target(creature|mybattlefield) transforms((,newability[-14/-14 ueot],newability[ability$!name(Exile 14 creatures) target(<14>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~14 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 15) name(Target your creature and exile 15) name(Target your creature and exile 15) target(creature|mybattlefield) transforms((,newability[-15/-15 ueot],newability[ability$!name(Exile 15 creatures) target(<15>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~15 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 16) name(Target your creature and exile 16) name(Target your creature and exile 16) target(creature|mybattlefield) transforms((,newability[-16/-16 ueot],newability[ability$!name(Exile 16 creatures) target(<16>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~16 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 17) name(Target your creature and exile 17) name(Target your creature and exile 17) target(creature|mybattlefield) transforms((,newability[-17/-17 ueot],newability[ability$!name(Exile 17 creatures) target(<17>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~17 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 18) name(Target your creature and exile 18) name(Target your creature and exile 18) target(creature|mybattlefield) transforms((,newability[-18/-18 ueot],newability[ability$!name(Exile 18 creatures) target(<18>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~18 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 19) name(Target your creature and exile 19) name(Target your creature and exile 19) target(creature|mybattlefield) transforms((,newability[-19/-19 ueot],newability[ability$!name(Exile 19 creatures) target(<19>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
auto=if type(creature|mygraveyard)~morethan~19 then if type(creature|mybattlefield)~morethan~0 then choice name(Target your creature and exile 20) name(Target your creature and exile 20) name(Target your creature and exile 20) target(creature|mybattlefield) transforms((,newability[-20/-20 ueot],newability[ability$!name(Exile 20 creatures) target(<20>creature|mygraveyard) moveto(myexile)!$ controller])) ueot
text=As an additional cost to cast Chill Haunting, exile X creature cards from your graveyard. -- Target creature gets -X/-X until end of turn.
mana={1}{B}
type=Instant
@@ -15988,8 +16011,7 @@ toughness=3
[card]
name=Chisei, Heart of Oceans
abilities=flying
auto=@each my upkeep:choice name(Don't remove any counter and sacrifice) sacrifice
auto=@each my upkeep restriction{type(*[counter{any}]|myBattlefield)~morethan~0}:choice name(Remove a counter) removesinglecountertype(1) target(*[counter{any}]|myBattlefield)
auto=@each my upkeep:transforms((,newability[if type(*[counter{any}]|myBattlefield)~morethan~0 then choice name(Remove a counter) name(Remove a counter) removesinglecountertype(1) target(*[counter{any}]|myBattlefield)],newability[choice name(Don't remove any counter and sacrifice) sacrifice])) oneshot
text=Flying -- At the beginning of your upkeep, sacrifice Chisei, Heart of Oceans unless you remove a counter from a permanent you control.
mana={2}{U}{U}
type=Legendary Creature
@@ -17475,8 +17497,8 @@ type=Instant
[/card]
[card]
name=Collected Conjuring
aicode=activate target(<upto:2>sorcery[manacost<=3;zpos<=6]|mylibrary) moveto(mybattlefield)
auto=name(Look) reveal:6 optionone name(Get 2 sorcery) target(<upto:2>sorcery[manacost<=3]|reveal) moveto(mybattlefield) optiononeend optiontwo name(put on bottom) target(<6>*|reveal) bottomoflibrary optiontwoend revealend
aicode=activate transforms((,newability[if type(sorcery[manacost<=3&zpos<=6]|mylibrary)~equalto~0 then all(*[zpos<=6]|mylibrary) moveto(myexile) and!( bottomoflibrary )!],newability[if type(sorcery[manacost<=3&zpos<=6]|mylibrary)~morethan~0 then target(<upto:2>sorcery[manacost<=3&zpos<=6]|mylibrary) moveto(myexile) and!( activate castcard(normal) and!( all(*[zpos<=6]|mylibrary) moveto(myexile) and!( bottomoflibrary )! )! )!])) oneshot
auto=name(Exile top 6 cards) reveal:6 optionone name(Get 2 sorcery) target(<upto:2>sorcery[manacost<=3]|reveal) moveto(myexile) and!( becomes(tobecol) ueot )! optiononeend optiontwo name(Put on bottom) target(*|reveal) moveto(myexile) and!( bottomoflibrary and!( all(*|reveal) moveto(myexile) and!( bottomoflibrary )! )! )! optiontwoend afterrevealedend all(tobecol|myexile) activate castcard(normal) afterrevealedend revealend
text=Exile the top six cards of your library. You may cast up to two sorcery cards with mana value 3 or less from among them without paying their mana costs. Put the exiled cards not cast this way on the bottom of your library in a random order.
mana={2}{U}{R}
type=Sorcery
@@ -18845,7 +18867,7 @@ type=Sorcery
[/card]
[card]
name=Corpse Augur
auto=_DIES_foreach(creature|mygraveyard) draw:1 controller && foreach(creature|mygraveyard) life:-1 controller
auto=_DIES_name(Choose a player) transforms((,newability[choice name(Target opponent) draw:type:creature:opponentgraveyard controller && life:-type:creature:opponentgraveyard controller],newability[choice name(Target controller) draw:type:creature:mygraveyard controller && life:-type:creature:mygraveyard controller])) ueot
text=When Corpse Augur dies, you draw X cards and you lose X life, where X is the number of creature cards in target player's graveyard.
mana={3}{B}
type=Creature
@@ -18996,9 +19018,13 @@ toughness=1
[/card]
[card]
name=Cosima, God of the Voyage
auto=@each my upkeep:may name(Exile Cosima) moveto(myexile) and!( counter(0/0,1,CosimaEffect) )!
autoexile=@movedto(land|mybattlefield) restriction{compare(hascntcosimaeffect)~morethan~0}:transforms((,newability[choice name(Add voyage counter) counter(0/0.1.Voyage)],newability[choice name(Return in play) draw:hascntvoyage controller && moveTo(mybattlefield) and!( counter(1/1.hascntvoyage) )!])) oneshot
text=At the beginning of your upkeep, you may exile Cosima. If you do, it gains "Whenever a land enters the battlefield under your control, if Cosima is exiled, you may put a voyage counter on it. If you don't, return Cosima to the battlefield with X +1/+1 counters on it and draw X cards, where X is the number of voyage counters on it."
other={1}{U} name(The Omenkeel)
otherrestriction=can play artifact,compare(isflipped)~equalto~1
restriction=compare(isflipped)~equalto~0
anyzone={0}:doubleside(The Omenkeel)
autostack=if paid(alternative) then flip(The Omenkeel) forcetype(Legendary Artifact)
auto=@each my upkeep restriction{compare(isflipped)~equalto~0}:may name(Exile Cosima) moveto(myexile) and!( transforms((,newability[@movedto(land|mybattlefield):name(Choose one) transforms((,newability[choice name(Add voyage counter) counter(0/0.1.Voyage)],newability[choice name(Return in play) draw:hascntvoyage controller && moveTo(mybattlefield) and!( counter(1/1.hascntvoyage) )!])) oneshot])) forever )!
text=At the beginning of your upkeep, you may exile Cosima. If you do, it gains "Whenever a land enters the battlefield under your control, if Cosima is exiled, you may put a voyage counter on it. If you don't, return Cosima to the battlefield with X +1/+1 counters on it and draw X cards, where X is the number of voyage counters on it." // {1}{U} The Omenkeel
mana={2}{U}
type=Legendary Creature
subtype=God
@@ -20232,7 +20258,7 @@ auto=this(counter{0/0.1.Menace}>=1) menace
auto=this(counter{0/0.1.Reach}>=1) reach
auto=this(counter{0/0.1.Trample}>=1) trample
auto=this(counter{0/0.1.Vigilance}>=1) vigilance
auto=@each my combatbegins:ability$!choice counter(1/1) target(Crystalline Giant[-counter{1/1.1}]|myBattlefield) _ choice counter(0/0,1,Vigilance) target(Crystalline Giant[-counter{0/0.1.Vigilance}]|myBattlefield) _ choice counter(0/0,1,Trample) target(Crystalline Giant[-counter{0/0.1.Trample}]|myBattlefield) _ choice counter(0/0,1,Reach) target(Crystalline Giant[-counter{0/0.1.Reach}]|myBattlefield) _ choice counter(0/0,1,Menace) target(Crystalline Giant[-counter{0/0.1.Menace}]|myBattlefield) _ choice counter(0/0,1,Lifelink) target(Crystalline Giant[-counter{0/0.1.Lifelink}]|myBattlefield) _ choice counter(0/0,1,Hexproof) target(Crystalline Giant[-counter{0/0.1.Hexproof}]|myBattlefield) _ choice counter(0/0,1,Deathtouch) target(Crystalline Giant[-counter{0/0.1.Deathtouch}]|myBattlefield) _ choice counter(0/0,1,Flying) target(Crystalline Giant[-counter{0/0.1.Flying}]|myBattlefield) _ choice counter(0/0,1,First Strike) target(Crystalline Giant[-counter{0/0.1.First Strike}]|myBattlefield) !$ controller
auto=@each my combatbegins:name(Choose a counter) transforms((,newability[if compare(hascnt11)~equalto~0 then choice name(Put 1/1 counter) name(Put 1/1 counter) counter(1/1)],newability[if compare(hascntflying)~equalto~0 then choice name(Put flying counter) name(Put flying counter) counter(0/0.1.Flying)],newability[if compare(hascntfirststrike)~equalto~0 then choice name(Put first strike counter) name(Put first strike counter) counter(0/0.1.FirstStrike)],newability[if compare(hascntdeathtouch)~equalto~0 then choice name(Put deathtouch counter) name(Put deathtouch counter) counter(0/0.1.Deathtouch)],newability[if compare(hascnthexproof)~equalto~0 then choice name(Put hexproof counter) name(Put hexproof counter) counter(0/0.1.Hexproof)],newability[if compare(hascntlifelink)~equalto~0 then choice name(Put lifelink counter) name(Put lifelink counter) counter(0/0.1.Lifelink)],newability[if compare(hascntmenace)~equalto~0 then choice name(Put menace counter) name(Put menace counter) counter(0/0.1.Menace)],newability[if compare(hascntreach)~equalto~0 then choice name(Put reach counter) name(Put reach counter) counter(0/0.1.Reach)],newability[if compare(hascnttrample)~equalto~0 then choice name(Put trample counter) name(Put trample counter) counter(0/0.1.Trample)],newability[if compare(hascntvigilance)~equalto~0 then choice name(Put vigilance counter) name(Put vigilance counter) counter(0/0.1.Vigilance)])) forever
text=At the beginning of combat on your turn, choose a kind of counter at random that Crystalline Giant doesn't have on it from among flying, first strike, deathtouch, hexproof, lifelink, menace, reach, trample, vigilance, and +1/+1. Put a counter of that kind on Crystalline Giant.
mana={3}
type=Artifact Creature
@@ -20495,8 +20521,8 @@ toughness=3
[/card]
[card]
name=Curse of Bloodletting
target=opponent
auto=@damaged(targetedplayer) from(*[-Curse of Bloodletting]|*):damage:thatmuch opponent
target=player
auto=@damaged(targetedplayer) from(*[-Curse of Bloodletting]|*):damage:thatmuch targetedplayer
text=Enchant player -- If a source would deal damage to enchanted player, it deals double that damage to that player instead.
mana={3}{R}{R}
type=Enchantment
@@ -20504,8 +20530,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Bounty
target=opponent
auto=@combat(attacking) source(creature|mybattlefield) turnlimited:name(Untap all non-land permanents) untap all(*[-land]|myBattlefield)
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|mybattlefield) turnlimited:name(Untap all non-land permanents) untap all(*[-land]|myBattlefield)])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Untap all non-land permanents) untap all(*[-land]|myBattlefield)],newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Untap all non-land permanents) untap all(*[-land]|opponentbattlefield)])) forever
text=Enchant player -- Whenever enchanted player is attacked, untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents they control.
mana={1}{G}
type=Enchantment
@@ -20513,8 +20540,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Chaos
target=opponent
auto=@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Discard and draw) target(*|myhand) reject and!( draw:1 )!
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Discard and draw) target(*|myhand) reject and!( draw:1 )!])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:ability$!may name(Discard and draw) target(*|myhand) reject and!( draw:1 )!!$ opponent])) forever
text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may discard a card. If the player does, he or she draws a card.
mana={2}{R}
type=Enchantment
@@ -20540,8 +20568,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Disturbance
target=opponent
auto=@combat(attacking) source(creature|mybattlefield) turnlimited:name(Create Zombie) _ZOMBIETOKEN_
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|mybattlefield) turnlimited:name(Create Zombie) _ZOMBIETOKEN_])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Create Zombie) _ZOMBIETOKEN_],newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Create Zombie) _ZOMBIETOKEN_ opponent])) forever
text=Enchant player -- Whenever enchanted player is attacked, create a 2/2 black Zombie creature token. Each opponent attacking that player does the same.
mana={2}{B}
type=Enchantment
@@ -20549,8 +20578,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Echoes
target=opponent
auto=@movedto(*[instant;sorcery]|targetedpersonsstack):may name(Copy casted spell) all(trigger[to]) activate castcard(copied)
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@movedto(*[instant;sorcery]|opponentstack):may name(Copy casted spell) all(trigger[to]) activate castcard(copied)])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@movedto(*[instant;sorcery]|mystack):name(Copy casted spell) ability$!may name(Copy casted spell) target(*[instant;sorcery]|opponentstack) activate castcard(copied)!$ opponent])) forever
text=Enchant player -- Whenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy he or she controls.
mana={4}{U}
type=Enchantment
@@ -20558,10 +20588,11 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Fool's Wisdom
target=player
abilities=madness
target=opponent
auto=@drawn(targetedplayer):name(Lose life) life:-2 opponent && life:2 controller
autoexile=restriction{discarded} pay({3}{B}) name(pay 3B to cast) activate name(pay 3B to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard)
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@drawn(targetedplayer):name(Lose life) life:-2 opponent && life:2 controller])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@drawn(targetedplayer):name(Lose life) life:-2 controller && life:2 controller])) forever
text=Enchant player -- Whenever enchanted player draws a card, they lose 2 life and you gain 2 life. -- Madness {3}{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={4}{B}{B}
type=Enchantment
@@ -20569,9 +20600,11 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Hospitality
target=opponent
auto=lord(creature|mybattlefield) trample
auto=@combatdamagefoeof(player) from(creature|mybattlefield):name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile],newability[anytypeofmana],newability[phaseaction[endofturn once checkex] moveto(ownerexile)])) ueot )!
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[lord(creature[attacking]|mybattlefield) trample])) forever
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combatdamagefoeof(player) from(creature|mybattlefield):name(Exile top card) all(*[zpos=1]|opponentlibrary) moveto(myexile) and!( transforms((,newability[canplayfromexile ueot],newability[anytypeofmana ueot],newability[phaseaction[endofturn once checkex] moveto(ownerexile)])) ueot )!])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[lord(creature[attacking]|opponentbattlefield) trample])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combatdamageof(player) from(creature|opponentbattlefield):name(Exile top card) all(*[zpos=1]|mylibrary) moveto(opponentexile) and!( transforms((,newability[canplayfromexile ueot],newability[anytypeofmana ueot],newability[phaseaction[opponent upkeep once checkex] moveto(ownerexile)])) ueot )!])) forever
text=Enchant player -- Creatures attacking enchanted player have trample. -- Whenever a creature deals combat damage to enchanted player, that player exiles the top card of their library. Until end of turn, that creature's controller may play that card and they may spend mana as though it were mana of any color to cast that spell.
mana={2}{R}
type=Enchantment
@@ -20579,8 +20612,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Inertia
target=opponent
auto=@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Tap or untap permanent) transforms((,newability[choice name(Tap a permanent) target(*|battlefield) tap],newability[choice name(Untap a permanent) target(*|battlefield) untap])) oneshot
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Tap or untap permanent) transforms((,newability[choice name(Tap a permanent) target(*[-tapped]|battlefield) tap],newability[choice name(Untap a permanent) target(*[tapped]|battlefield) untap])) oneshot])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Tap or untap permanent) ability$!may name(Tap or untap permanent) transforms((,newability[choice name(Tap a permanent) target(*[-tapped]|battlefield) tap],newability[choice name(Untap a permanent) target(*[tapped]|battlefield) untap])) oneshot!$ opponent])) forever
text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of his or her choice.
mana={2}{U}
type=Enchantment
@@ -20602,7 +20636,7 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Misfortunes
target=opponent
target=player
auto=@each my upkeep:may name(Search curse) target(curse[-Curse of Misfortunes]|mylibrary) transforms((,newability[if type(curse[share!name!]|myBattlefield)~equalto~0 then moveto(myBattlefield) and!( shuffle )!])) oneshot
text=Enchant player -- At the beginning of your upkeep, you may search your library for a Curse card that doesn't have the same name as a Curse attached to enchanted player, put it onto the battlefield attached to that player, then shuffle your library.
mana={4}{B}
@@ -20622,7 +20656,8 @@ subtype=Aura Curse
[card]
name=Curse of Opulence
target=player
auto=@combat(attacking) source(creature|myBattlefield) turnlimited:name(Create Gold) token(Gold)
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|myBattlefield) turnlimited:name(Create Gold) name(Create Gold) token(Gold)])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentBattlefield) turnlimited:name(Create Gold) name(Create Gold) token(Gold)])) forever
text=Enchant player -- Whenever enchanted player is attacked, create a colorless artifact token named Gold. It has "Sacrifice this artifact: Add one mana of any color.". Each opponent attacking that player does the same.
mana={R}
type=Enchantment
@@ -20630,8 +20665,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Predation
target=opponent
auto=@combat(attacking) source(creature|myBattlefield):name(Put 1/1 counter) all(trigger[to]) counter(1/1)
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|myBattlefield):name(Put 1/1 counter) all(trigger[to]) name(Put 1/1 counter) counter(1/1)])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentBattlefield):name(Put 1/1 counter) all(trigger[to]) name(Put 1/1 counter) counter(1/1)])) forever
text=Enchant player -- Whenever a creature attacks enchanted player, put a +1/+1 counter on it.
mana={2}{G}
type=Enchantment
@@ -20640,7 +20676,8 @@ subtype=Aura Curse
[card]
name=Curse of Shaken Faith
target=player
auto=@movedto(*|targetedpersonsstack) restriction{thisturn(*|targetedpersonsstack)~morethan~0}:damage:2 targetedplayer
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@movedto(*|opponentstack) restriction{thisturn(*|opponentstack)~morethan~0}:damage:2 opponent])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@movedto(*|mystack) restriction{thisturn(*|mystack)~morethan~0}:damage:2 controller])) forever
text=Enchant player -- Whenever enchanted player casts a spell other than the first spell they cast each turn or copies a spell, Curse of Shaken Faith deals 2 damage to them.
mana={1}{R}
type=Enchantment
@@ -20648,8 +20685,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Shallow Graves
target=opponent
auto=@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Create Zombie) _ZOMBIETOKEN_ and!( tap(noevent) )!
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|mybattlefield) turnlimited:may name(Create Zombie) _ZOMBIETOKEN_ and!( tap(noevent) )!])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentBattlefield) turnlimited:ability$!may name(Create Zombie) _ZOMBIETOKEN_ and!( moveto(mybattlefield) and!( tap(noevent) )! )!!$ opponent])) forever
text=Enchant player -- Whenever a player attacks enchanted player with one or more creatures, that attacking player may put a 2/2 black Zombie creature token onto the battlefield tapped.
mana={2}{B}
type=Enchantment
@@ -20657,8 +20695,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Silence
target=opponent
auto=chooseanameopp transforms((,newability[lord(*[chosenname]|opponentcastingzone) changecost(colorless:+2)],newability[@movedTo(*[chosenname]|opponentstack):may name(Sacrifice and draw) sacrifice and!( draw:1 controller )!])) forever chooseend nonland
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[chooseanameopp transforms((,newability[lord(*[chosenname]|opponentcastingzone) changecost(colorless:+2)],newability[@movedTo(*[chosenname]|opponentstack):may name(Sacrifice and draw) sacrifice and!( draw:1 controller )!])) forever chooseend nonland])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) chooseaname transforms((,newability[lord(*[chosenname]|mycastingzone) changecost(colorless:+2)],newability[@movedTo(*[chosenname]|mystack):may name(Sacrifice and draw) sacrifice and!( draw:1 controller )!])) forever chooseend nonland
text=Enchant player -- As Curse of Silence enters the battlefield, choose a card name. -- Spells with the chosen name enchanted player casts cost {2} more to cast. -- Whenever enchanted player casts a spell with the chosen name, you may sacrifice Curse of Silence. If you do, draw a card.
mana={W}
type=Enchantment
@@ -20666,8 +20705,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Surveillance
target=opponent
auto=@each opponent upkeep:draw:type:enchantment[curse]:mybattlefield controller
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@each opponent upkeep:name(Draw a card for each curse) draw:targetedcurses controller])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@each my upkeep:name(Draw a card for each curse) draw:targetedcurses opponent])) forever
text=Enchant player -- At the beginning of enchanted player's upkeep, any number of target players other than that player each draw cards equal to the number of Curses attached to that player.
mana={4}{U}
type=Enchantment
@@ -20685,8 +20725,8 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Vengeance
target=opponent
auto=@movedto(*[instant;sorcery]|targetedpersonsstack):name(Put spite counter) counter(0/0,1,Spite)
target=player
auto=@movedto(*|targetedpersonsstack):name(Put spite counter) counter(0/0,1,Spite)
text=Enchant player -- Whenever enchanted player casts a spell, put a spite counter on Curse of Vengeance. -- When enchanted player loses the game, you gain X life and draw X cards, where X is the number of spite counters on Curse of Vengeance.
mana={B}
type=Enchantment
@@ -20694,8 +20734,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Verbosity
target=opponent
auto=@combat(attacking) source(creature|myBattlefield) turnlimited:name(Draw a card) draw:1 controller
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|myBattlefield) turnlimited:name(Draw a card) draw:1 controller])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Draw a card) draw:1 controller],newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Draw a card) draw:1 opponent])) forever
text=Enchant player -- Whenever enchanted player is attacked, you draw a card. Each opponent attacking that player does the same.
mana={2}{U}
type=Enchantment
@@ -20703,8 +20744,9 @@ subtype=Aura Curse
[/card]
[card]
name=Curse of Vitality
target=opponent
auto=@combat(attacking) source(creature|myBattlefield) turnlimited:name(Gain 2 life) life:2 controller
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|myBattlefield) turnlimited:name(Gain 2 life) life:2 controller])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Gain 2 life) life:2 controller],newability[@combat(attacking) source(creature|opponentbattlefield) turnlimited:name(Gain 2 life) life:2 opponent])) forever
text=Enchant player -- Whenever enchanted player is attacked, you gain 2 life. Each opponent attacking that player does the same.
mana={2}{W}
type=Enchantment
@@ -20731,8 +20773,9 @@ toughness=5
[/card]
[card]
name=Curse of the Forsaken
target=opponent
auto=@combat(attacking) source(creature|mybattlefield):name(Gain 1 life) life:1 controller
target=player
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@combat(attacking) source(creature|mybattlefield):name(Gain 1 life) life:1 controller])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@combat(attacking) source(creature|opponentbattlefield):name(Gain 1 life) life:1 opponent])) forever
text=Enchant player -- Whenever a creature attacks enchanted player, its controller gains 1 life.
mana={2}{W}
type=Enchantment
@@ -20777,7 +20820,7 @@ type=Artifact
[/card]
[card]
name=Cursed Rack
auto=hmodifer:-3 opponent
auto=sethand:4 opponent
text=As Cursed Rack enters the battlefield, choose an opponent. -- The chosen player's maximum hand size is four.
mana={4}
type=Artifact
@@ -35243,7 +35286,7 @@ type=Sorcery
[card]
name=Fraying Sanity
target=player
auto=@each endofturn:deplete:type:*[fresh]:targetedpersonsgraveyard targetedplayer
auto=@each endofturn:name(Mill cards) deplete:type:*[fresh]:targetedpersonsgraveyard targetedplayer
text=Enchant player -- At the beginning of each end step, enchanted player puts the top X cards of his or her library into his or her graveyard, where X is the number of cards put into that graveyard from anywhere this turn.
mana={2}{U}
type=Enchantment
@@ -47819,8 +47862,8 @@ type=Instant
[card]
name=Infectious Curse
target=player
auto=lord(*[instant;sorcery]|mycastingzone) altercost(colorless, -1)
auto=@each opponent upkeep:life:-1 opponent && life:1 controller
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[lord(*[instant;sorcery;curse]|mycastingzone) changecost(colorless:-1)],newability[@each opponent upkeep:name(Gain life) life:-1 opponent && life:1 controller])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[lord(*[instant;sorcery;curse]|opponentcastingzone) changecost(colorless:-1)],newability[@each my upkeep:name(Gain life) life:-1 controller && life:1 controller])) forever
text=Enchant player -- Spells you cast that target enchanted player cost {1} less to cast. -- At the beginning of enchanted player's upkeep, that player loses 1 life and you gain 1 life.
type=Enchantment
subtype=Aura Curse
@@ -58141,7 +58184,7 @@ type=Sorcery
[card]
name=Maddening Hex
target=player
auto=@movedTo(*[-creature]|targetedpersonsstack):name(Roll a d6) rolld6 6 winability damage:lastrollresult targetedplayer winabilityend loseability damage:targetedplayer opponent loseabilityend rolld6end
auto=@movedTo(*[-creature]|targetedpersonsstack):name(Roll a d6) rolld6 6 winability damage:lastrollresult targetedplayer winabilityend loseability damage:lastrollresult targetedplayer loseabilityend rolld6end
text=Enchant player -- Whenever enchanted player casts a noncreature spell, roll a d6. Maddening Hex deals damage to that player equal to the result. Then attach Maddening Hex to another one of your opponents chosen at random.
mana={1}{R}{R}
type=Enchantment
@@ -67458,7 +67501,7 @@ toughness=4
[card]
name=Oliphaunt
abilities=trample
autohand={2}{cycle}:name(Search mountain) target(mountain|mylibrary) moveto(myhand) and!( shuffle )!
autohand={1}{cycle}:name(Search mountain) target(mountain|mylibrary) moveto(myhand) and!( shuffle )!
auto=_ATTACKING_name(Creaure gains 2/0 and trample) target(other creature|myBattlefield) transforms((,newability[2/0],newability[trample])) ueot
text=Trample -- Whenever Oliphaunt attacks, another target creature you control gets +2/+0 and gains trample until end of turn. -- Mountaincycling {1} ({1}, Discard this card: Search your library for a mountain card, reveal it, put it into your hand, then shuffle.)
mana={5}{R}
@@ -74811,8 +74854,8 @@ subtype=Forest Plains
[card]
name=Radiant Restraints
backside=Radiant Grace
target=opponent
auto=@movedto(creature|opponentbattlefield):name(Creatures enter tapped) all(trigger[to]) name(Creatures enter tapped) tap(noevent)
target=player
auto=@movedto(creature|targetedplayerbattlefield):name(Creatures enter tapped) all(trigger[to]) name(Creatures enter tapped) tap(noevent)
text=Enchant player -- Creatures enchanted player controls enter the battlefield tapped. // Radiant Grace
color=white
type=Enchantment
@@ -87424,9 +87467,11 @@ subtype=Arcane
[/card]
[card]
name=Sinner's Judgment
target=player
abilities=exiledeath
backside=Faithbound Judge
target=opponent
auto=@each my upkeep restriction{compare(oppotgt)~morethan~0}:name(Put judgdment counter) counter(0/0,1,Judgment) && if compare(hascntjudgment)~morethan~2 then wingame controller
auto=@each my upkeep restriction{compare(ctrltgt)~morethan~0}:name(Put judgdment counter) counter(0/0,1,Judgment) && if compare(hascntjudgment)~morethan~2 then wingame opponent
text=Enchant player -- At the beginning of your upkeep, put a judgment counter on Sinner's Judgment. Then if there are three or more judgment counters on it, enchanted player loses the game. -- If Sinner's Judgment would be put into a graveyard from anywhere, exile it instead. // Faithbound Judge
color=white
type=Enchantment
@@ -92105,8 +92150,8 @@ subtype=Aura
[card]
name=Stain the Mind
other={convoke} name(Convoke)
auto=choice name(Target opponent) ability$!chooseanameopp name(Search that cards) target(<anyamount>creature[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland!$ controller
auto=choice name(Target yourself) ability$!chooseaname name(Search that cards) target(<anyamount>creature[chosenname]|mygraveyard,mylibrary,myhand) moveto(exile) and!( shuffle controller )! chooseend nonland!$ controller
auto=choice name(Target opponent) ability$!chooseanameopp name(Search that cards) target(<anyamount>*[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland!$ controller
auto=choice name(Target yourself) ability$!chooseaname name(Search that cards) target(<anyamount>*[chosenname]|mygraveyard,mylibrary,myhand) moveto(exile) and!( shuffle controller )! chooseend nonland!$ controller
text=Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.) -- Name a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library.
mana={4}{B}
type=Sorcery
@@ -96739,7 +96784,7 @@ type=Legendary Enchantment
name=Teferi's Protection
abilities=exiledeath
auto=all(*|myBattlefield) phaseout
auto=token(Teferi's Protection,Emblem,0/0,indestructible,shroud,cantchangelife,controllershroud,playershroud,notrigger) and!( transforms((,newability[@each my untap:sacrifice])) forever )!
auto=token(Teferi's Protection,Emblem,0/0,indestructible,shroud,cantchangelife,controllershroud,playershroud,notrigger) and!( transforms((,newability[preventalldamage to(controller) from(*|opponentzones)],newability[preventalldamage to(controller) from(*|myzones)],newability[@each my untap:sacrifice])) forever )!
text=Until your next turn, your life total can't change and you gain protection from everything. All permanents you control phase out. (While they're phased out, they're treated as though they don't exist. They phase in before you untap during your untap step.) -- Exile Teferi's Protection.
mana={2}{W}
type=Instant
@@ -98443,12 +98488,12 @@ subtype=Sphere
[/card]
[card]
name=The Omenkeel
auto=@combatdamagefoeof(player) from(vehicle|mybattlefield):transforms((,newability[all(*[-land;zpos<=thatmuch]|opponentlibrary) moveto(opponentexile)],newability[all(land[zpos<=thatmuch]|opponentlibrary) moveto(opponentexile) and!( counter(0/0.1.OmenkeelExiled) )!])) oneshot
auto=@combatdamageof(player) from(vehicle|mybattlefield):transforms((,newability[all(*[-land;zpos<=thatmuch]|mylibrary) moveto(myexile)],newability[all(land[zpos<=thatmuch]|mylibrary) moveto(myexile) and!( counter(0/0.1.OmenkeelExiled) )!])) oneshot
auto={0}:restriction{can play land} name(Play land from opponent exile) target(land[counter{0/0.1.OmenkeelExiled}]|opponentexile) moveTo(myexile) and!( transforms((,newability[counter(0/0.1.OmenkeelExiled)],newability[canplayfromexile],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)],newability[phaseaction[untap once checkex] counter(0/0.1.OmenkeelExiled)])) ueot )!
auto=lord(land[counter{0/0.1.OmenkeelExiled}]|myexile) canplayfromexile
auto=@combatdamagefoeof(player) from(vehicle|mybattlefield):name(Exile top cards) transforms((,newability[all(*[zpos<=thatmuch]|opponentlibrary) moveto(opponentexile) and!( if cantargetcard(*[land]|*) then becomes(OmenkeelExiled) forever )!])) forever
auto=@combatdamageof(player) from(vehicle|mybattlefield):name(Exile top cards) transforms((,newability[all(*[zpos<=thatmuch]|mylibrary) moveto(myexile) and!( if cantargetcard(*[land]|*) then becomes(OmenkeelExiled) forever )!])) forever
auto={0}:restriction{can play land} name(Play land from opponent exile) name(Play land from opponent exile) target(land[OmenkeelExiled]|opponentexile) moveTo(myexile) and!( transforms((,newability[becomes(OmenkeelExiled) forever],newability[phaseaction[endofturn once checkex] moveTo(ownerexile)],newability[phaseaction[untap once checkex] becomes(OmenkeelExiled) forever])) ueot )!
auto=lord(land[OmenkeelExiled]|myexile) canplayfromexile
auto={crew(other creature[power>=1]|myBattlefield)}:name(crew 1 [1 creature]) becomes(Artifact Creature) ueot restriction{type(other creature[-tapped;power>=1]|mybattlefield)~morethan~0,compare(crewtotalpower)~morethan~0}
text=Whenever a Vehicle you control deals combat damage to a player, that player exiles that many cards from the top of their library. You may play lands from among those cards for as long as they remain exiled. -- Crew 1
text=Whenever a Vehicle you control deals combat damage to a player, that player exiles that many cards from the top of their library. You may play lands from among those cards for as long as they remain exiled. -- Crew 1 // {2}{U} Cosima, God of the Voyage
mana={1}{U}
type=Legendary Artifact
subtype=Vehicle
@@ -98458,7 +98503,7 @@ toughness=3
[card]
name=The One Ring
abilities=indestructible
auto=if casted(this) then name(Gain protection) name(Gain protection) transforms((,newability[controllershroud],newability[playershroud])) uynt
auto=if casted(this) then name(Gain protection) name(Gain protection) transforms((,newability[controllershroud],newability[playershroud],newability[preventalldamage to(controller) from(*|opponentzones)],newability[preventalldamage to(controller) from(*|myzones)])) uynt
auto=@each my upkeep restriction{compare(hascntburden)~morethan~0}:name(Lose life) life:-hascntburden
auto={T}:name(Put burden counter) counter(0/0,1,Burden) && draw:hascntburden controller
text=Indestructible -- When The One Ring enters the battlefield, if you cast it, you gain protection from everything until your next turn. -- At the beginning of your upkeep, you lose 1 life for each burden counter on The One Ring. -- {T}: Put a burden counter on The One Ring, then draw a card for each burden counter on The One Ring.
@@ -100958,7 +101003,10 @@ type=Sorcery
[card]
name=Torment of Scarabs
target=player
auto=@each targetedplayer upkeep:ability$!pay[[{L:3}]] name(pay or sacrifice) donothing?sacrifice notatarget(*[-land]|mybattlefield)!$ targetedplayer
auto=@each targetedplayer upkeep restriction{type(*[-land]|targetedplayerbattlefield)~morethan~0,type(*|targetedplayerhand)~morethan~0}:name(Pay or sacrifice or discard) name(Pay or sacrifice or discard) ability$!name(Pay or sacrifice or discard) choice name(Discard a card) reject notatarget(*|myhand) _ choice name(Pay 3 life) life:-3 controller _ choice name(Sacrifice nonland permanent) sacrifice notatarget(*[-land]|mybattlefield)!$ targetedplayer
auto=@each targetedplayer upkeep restriction{type(*[-land]|targetedplayerbattlefield)~morethan~0,type(*|targetedplayerhand)~equalto~0}:name(Pay or sacrifice) name(Pay or sacrifice) ability$!name(Pay or sacrifice) choice name(Sacrifice nonland permanent) sacrifice notatarget(*[-land]|mybattlefield) _ choice name(Pay 3 life) life:-3 controller!$ targetedplayer
auto=@each targetedplayer upkeep restriction{type(*[-land]|targetedplayerbattlefield)~equalto~0,type(*|targetedplayerhand)~morethan~0}:name(Pay or discard) name(Pay or discard) ability$!name(Pay or discard) choice name(Discard a card) reject notatarget(*|myhand) _ choice name(Pay 3 life) life:-3 controller!$ targetedplayer
auto=@each targetedplayer upkeep restriction{type(*[-land]|targetedplayerbattlefield)~equalto~0,type(*|targetedplayerhand)~equalto~0}:name(Pay 3 life) name(Pay 3 life) name(Pay 3 life) life:-3 targetedplayer
text=Enchant player -- At the beginning of enchanted player's upkeep, that player loses 3 life unless he or she sacrifices a nonland permanent or discards a card.
mana={3}{B}
type=Enchantment
@@ -101819,7 +101867,7 @@ toughness=5
[card]
name=Trespasser's Curse
target=player
auto=@movedto(creature|opponentBattlefield):life:-1 opponent && life:1 controller
auto=@movedto(creature|targetedplayerbattlefield):name(Gain life) life:-1 targetedplayer && life:1 controller
text=Enchant player -- Whenever a creature enters the battlefield under enchanted player's control, that player loses 1 life and you gain 1 life.
mana={1}{B}
type=Enchantment
@@ -102105,8 +102153,8 @@ type=Instant
[/card]
[card]
name=True-Name Nemesis
auto=name(choose opponent) notatarget(opponent) deplete:0
auto=protection from(*)
auto=choice name(choose opponent) transforms((,newability[protection from(*|opponentzones)])) forever
auto=choice name(choose yourself) transforms((,newability[protection from(*|myzones)])) forever
text=As True-Name Nemesis enters the battlefield, choose a player. True-Name Nemesis has protection from the chosen player. (This creature can't be blocked, targeted, dealt damage, or enchanted by anything controlled by that player.)
mana={1}{U}{U}
type=Creature

View File

@@ -1,6 +1,6 @@
#Primitives Pack for Wagic the Homebrew.
#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 11-07-2023
#I sorted this programmatically so the other comments are removed except for AUTO_DEFINE - Vitty85 13-07-2023
[card]
name=Abandon Reason
target=<upto:2>creature
@@ -22427,8 +22427,8 @@ type=Instant
[/card]
[card]
name=Coordinated Barrage
target=creature[attacking;blocking]
auto=chooseatype damage:type:*[chosentype]:mybattlefield chooseend
restriction=type(creature[attacking;blocking]|battlefield)~morethan~0
auto=chooseatype name(Deal damage) target(creature[attacking;blocking]|battlefield) damage:type:*[chosentype]:mybattlefield chooseend
text=Choose a creature type. Coordinated Barrage deals damage to target attacking or blocking creature equal to the number of permanents you control of the chosen type.
mana={W}
type=Instant
@@ -23848,8 +23848,8 @@ type=Enchantment
[card]
name=Crosis, the Purger
abilities=flying
auto=@combatdamagefoeof(player) from(this):pay({2}{B}) activatechooseacolor all(*[chosencolor]|opponenthand) reject activatechooseend
auto=@combatdamageof(player) from(this):pay({2}{B}) activatechooseacolor all(*[chosencolor]|myhand) reject activatechooseend
auto=@combatdamagefoeof(player) from(this):may name(Pay and choose color) pay({2}{B}) name(Pay and choose color) transforms((,newability[choice name(Choose red) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) and!( reject all(*[red]|opponenthand) )! )!],newability[choice name(Choose green) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) and!( reject all(*[green]|opponenthand) )! )!],newability[choice name(Choose blue) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) and!( reject all(*[blue]|opponenthand) )! )!],newability[choice name(Choose white) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) and!( reject all(*[white]|opponenthand) )! )!],newability[choice name(Choose black) target(*|opponenthand) moveto(myreveal) and!( moveto(opponenthand) and!( reject all(*[black]|opponenthand) )! )!])) oneshot
auto=@combatdamageof(player) from(this):may name(Pay and choose color) pay({2}{B}) name(Pay and choose color) transforms((,newability[choice name(Choose red) reject all(*[red]|myhand)],newability[choice name(Choose green) reject all(*[green]|opponenthand)],newability[choice name(Choose blue) reject all(*[blue]|opponenthand)],newability[choice name(Choose white) reject all(*[white]|opponenthand)],newability[choice name(Choose black) reject all(*[black]|opponenthand)])) oneshot
text=Flying -- Whenever Crosis, the Purger deals combat damage to a player, you may pay {2}{B}. If you do, choose a color, then that player reveals his or her hand and discards all cards of that color.
mana={3}{U}{B}{R}
type=Legendary Creature
@@ -24994,7 +24994,7 @@ type=Enchantment
[card]
name=Curse of Oblivion
target=player
auto=@each targetedplayer upkeep:ability$!name(exile 2 cards from graveyard) target(<2>*|mygraveyard) moveTo(exile)!$ targetedplayer
auto=@each targetedplayer upkeep:name(Exile 2 cards from graveyard) ability$!name(Exile 2 cards from graveyard) name(Exile 2 cards from graveyard) target(<2>*|mygraveyard) moveto(exile)!$ targetedplayer
text=At the beginning of enchanted player's upkeep, that player exiles two cards from his or her graveyard.
mana={3}{B}
type=Enchantment
@@ -25003,7 +25003,7 @@ subtype=Aura Curse
[card]
name=Curse of Stalked Prey
target=player
auto=@combatdamaged(targetedplayer) from(creature):all(trigger[from]) counter(1/1)
auto=@combatdamaged(targetedplayer) from(creature):name(Put 1/1 counter) all(trigger[from]) name(Put 1/1 counter) counter(1/1)
text=Enchant player -- Whenever a creature deals combat damage to enchanted player, put a +1/+1 counter on that creature.
mana={1}{R}
type=Enchantment
@@ -25012,7 +25012,7 @@ subtype=Aura Curse
[card]
name=Curse of the Bloody Tome
target=player
auto=@each targetedplayer upkeep:deplete:2 targetedplayer
auto=@each targetedplayer upkeep:name(Mill 2 cards) deplete:2 targetedplayer
text=Enchant player -- At the beginning of enchanted player's upkeep, that player mills two cards.
mana={2}{U}
type=Enchantment
@@ -25030,7 +25030,7 @@ subtype=Aura Curse
[card]
name=Curse of the Pierced Heart
target=player
auto=@each targetedplayer upkeep:damage:1 targetedplayer
auto=@each targetedplayer upkeep:name(Deal damage) damage:1 targetedplayer
text=Enchant player -- At the beginning of enchanted player's upkeep, Curse of the Pierced Heart deals 1 damage to that player.
mana={1}{R}
type=Enchantment
@@ -25047,7 +25047,8 @@ type=Sorcery
[card]
name=Curse of Thirst
target=player
auto=@each targetedplayer upkeep:damage:targetedcurses
auto=if compare(oppotgt)~morethan~0 then name(Target opponent) name(Target opponent) transforms((,newability[@each opponent upkeep:damage:targetedcurses opponent])) forever
auto=if compare(ctrltgt)~morethan~0 then name(Target yourself) name(Target yourself) transforms((,newability[@each my upkeep:damage:targetedcurses controller])) forever
text=Enchant player -- At the beginning of enchanted player's upkeep, Curse of Thirst deals damage to that player equal to the number of Curses attached to him or her.
mana={4}{B}
type=Enchantment

View File

@@ -1,6 +1,6 @@
#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
#We sorted this in alphabetical order - Luruz & Vitty85 11-07-2023
#We sorted this in alphabetical order - Luruz & Vitty85 12-07-2023
[card]
name=Abian, Luvion Usurper
auto=counter(0/0,5,loyalty)
@@ -526,11 +526,10 @@ subtype=Chandra
[/card]
[card]
name=Chandra, Heart of Fire
aicode=activate moveto(exile) target(<anyamount>*[instant;sorcery;red]|myLibrary,myGraveyard) and!( canplayfromexile )!
auto=counter(0/0,5,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Discard hand, exile three from top and cast from exile) ability$!name(Discard hand) reject all(*|myHand)!$ controller && moveTo(exile) all(*[zpos<=3]|mylibrary) && transforms((,newability[canplayfromexile])) ueot
auto={C(0/0,1,Loyalty)}:name(+1: Discard hand, exile three from top and cast from exile) discard:type:*:myhand && all(*[zpos<=3]|mylibrary) moveTo(exile) and!( transforms((,newability[canplayfromexile ueot])) ueot )!
auto={C(0/0,1,Loyalty)}:name(+1: Deals 2 damage to any target) damage:2 target(anytarget)
auto={C(0/0,-9,Loyalty)}:name(-9: Search instants or sorceries, exile them and add six red mana) target(<anyamount>*[instant;sorcery;red]|myLibrary,myGraveyard) moveto(exile) and!( transforms((,newability[canplayfromexile])) ueot )! && shuffle controller && add{R}{R}{R}{R}{R}{R}
auto={C(0/0,-9,Loyalty)}:name(-9: Search red instants or sorceries, exile them and add six red mana) transforms((,newability[target(<anyamount>*[-permanent&red]|myLibrary^myGraveyard) moveto(myexile) and!( transforms((,newability[canplayfromexile ueot],newability[shuffle])) ueot )!],newability[add{R}{R}{R}{R}{R}{R}])) oneshot
text=+1: Discard your hand, then exile the top three cards of your library. Until end of turn, you may play cards exiled this way. -- +1: Chandra, Heart of Fire deals 2 damage to any target. -- 9: Search your graveyard and library for any number of red instant and/or sorcery cards, exile them, then shuffle your library. You may cast them this turn. Add six {R}.
mana={3}{R}{R}
type=Legendary Planeswalker
@@ -644,10 +643,12 @@ subtype=Chandra
[card]
name=Chandra, Pyromaster
auto=counter(0/0,4,loyalty)
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage to opponent and 1 to creature) damage:1 opponent && target(creature|opponentbattlefield) damage:1 && transforms((,newability[cantblock])) ueot
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage to controller and 1 to creature) damage:1 controller && target(creature|mybattlefield) damage:1 && transforms((,newability[cantblock])) ueot
auto={C(0/0,0,Loyalty)}:name(+0: Exile the top and may play it) moveto(exile) and!(transforms((,newability[canplayfromexile])) ueot)! all(*[zpos=1]|mylibrary)
auto={C(0/0,-7,Loyalty)}:name(-7: Exile the top ten and may cast it) moveto(exile) all(*[zpos<=10]|mylibrary) && target(*[instant;sorcery]|myexile) clone && clone && clone
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage only to opponent) damage:1 opponent
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage only to controller) damage:1 controller
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage to opponent and creature) damage:1 opponent && target(creature|opponentbattlefield) damage:1 && transforms((,newability[cantblock])) ueot
auto={C(0/0,1,Loyalty)}:name(+1: Deals 1 damage to controller and creature) damage:1 controller && target(creature|mybattlefield) damage:1 && transforms((,newability[cantblock])) ueot
auto={C(0/0,0,Loyalty)}:name(+0: Exile the top and may play it) all(*[zpos=1]|mylibrary) moveto(myexile) and!(transforms((,newability[canplayfromexile ueot])) ueot )!
auto={C(0/0,-7,Loyalty)}:name(-7: Exile the top ten and may cast it) all(*[zpos=1]|mylibrary) moveto(myexile) and!( transforms((tobecha,newability[all(*[zpos<=10]|mylibrary) moveto(myexile) and!( becomes(tobecha) ueot )!],newability[name(Choose instant or sorcery) target(*[-permanent&tobecha]|myexile) transforms((,newability[choice name(Cast 3 copies) activate castcard(copied) && activate castcard(copied) && activate castcard(copied)],newability[choice name(Don't cast copies) donothing],newability[all(tobecha|myexile) losesatype(tobecha)])) ueot])) ueot )!
text=+1: Chandra, Pyromaster deals 1 damage to target player and 1 damage to up to one target creature that player controls. That creature can't block this turn. -- 0: Exile the top card of your library. You may play it this turn. -- -7: Exile the top ten cards of your library. Choose an instant or sorcery card exiled this way and copy it three times. You may cast the copies without paying their mana costs.
mana={2}{R}{R}
type=Legendary Planeswalker

View File

@@ -68,7 +68,6 @@ public:
int snowManaC;
string lastChosenName;
vector<string> prowledTypes;
vector<MTGCardInstance*>curses;
Player(GameObserver *observer, string deckFile, string deckFileSmall, MTGDeck * deck = NULL);
virtual ~Player();
virtual void setObserver(GameObserver*g);

View File

@@ -3817,7 +3817,7 @@ GenericRollDie::~GenericRollDie()
//set die result
AASetDie::AASetDie(GameObserver* observer, int id, MTGCardInstance * source, MTGCardInstance * _target, int _side, int _diefaces, string toAlter):
InstantAbility(observer, id, source),side(_side), diefaces(_diefaces), abilityToAlter(toAlter)
InstantAbility(observer, id, source), side(_side), diefaces(_diefaces), abilityToAlter(toAlter)
{
this->target = _target;
abilityAltered = NULL;
@@ -3833,12 +3833,12 @@ int AASetDie::resolve()
_target->dieNumFaces = diefaces;
WEvent * e = NEW WEventCardRollDie(_target, source->controller()->getDisplayName());
game->receiveEvent(e);
vector<string>Win = parseBetween(abilityToAlter,"winability "," winabilityend");
vector<string>Win = parseBetween(abilityToAlter, "winability ", " winabilityend");
if(Win.size())
{
abilityWin = Win[1];
}
vector<string>Lose = parseBetween(abilityToAlter,"loseability "," loseabilityend");
vector<string>Lose = parseBetween(abilityToAlter, "loseability ", " loseabilityend");
if(Lose.size())
{
abilityLose = Lose[1];
@@ -3860,14 +3860,14 @@ int AASetDie::resolve()
abilityAltered->addToGame();
}
msg << "Result is: " << roll << ". You Won The Die Roll";
MTGAbility * message = NEW MTGEventText(game,this->GetId(), source, msg.str());
MTGAbility * message = NEW MTGEventText(game, this->GetId(), source, msg.str());
message->oneShot = true;
message->addToGame();
}
else if(abilityWin.size() && !abilityLose.size())
{
msg << "Result is: " << roll << ". You Lost The Die Roll";
MTGAbility * message = NEW MTGEventText(game,this->GetId(), source, msg.str());
MTGAbility * message = NEW MTGEventText(game, this->GetId(), source, msg.str());
message->oneShot = true;
message->addToGame();
}
@@ -3886,14 +3886,14 @@ int AASetDie::resolve()
abilityAltered->addToGame();
}
msg << "Result is: " << roll << ". You Lost The Die Roll";
MTGAbility * message = NEW MTGEventText(game,this->GetId(), source, msg.str());
MTGAbility * message = NEW MTGEventText(game, this->GetId(), source, msg.str());
message->oneShot = true;
message->addToGame();
}
else if(abilityLose.size())
{
msg << "Result is: " << roll << ". You Won The Die Roll";
MTGAbility * message = NEW MTGEventText(game,this->GetId(), source, msg.str());
MTGAbility * message = NEW MTGEventText(game, this->GetId(), source, msg.str());
message->oneShot = true;
message->addToGame();
}

View File

@@ -726,7 +726,6 @@ void GameObserver::gameStateBasedEffects()
for (int i = 0; i < 2; i++)
{
MTGGameZone * zone = players[i]->game->inPlay;
players[i]->curses.clear();
for (int j = zone->nb_cards - 1; j >= 0; j--)
{
MTGCardInstance * card = zone->cards[j];
@@ -843,10 +842,6 @@ void GameObserver::gameStateBasedEffects()
{
card->target->enchanted = true;
}
if (card->playerTarget && card->hasType("curse"))
{
card->playerTarget->curses.push_back(card);
}
//704.5n If an Aura is attached to an illegal object or player,
//or is not attached to an object or player, that Aura is put into its owners graveyard.

View File

@@ -2259,12 +2259,34 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
return NULL;
}
if (StartsWith(s, "chooseacolor ") || StartsWith(s, "chooseatype ") || StartsWith(s, "chooseaname"))
{
MTGAbility * choose = parseChooseActionAbility(s,card,spell,target,0,id);
choose = NEW GenericActivatedAbility(observer, "","",id, card,choose,NULL);
MayAbility * mainAbility = NEW MayAbility(observer, id, choose, card,true);
if (storedAbilityString.size() && StartsWith(s, "chooseaname"))
{
bool chooseoppo = false;
vector<string> splitChoose = parseBetween(s, "chooseaname ", " chooseend", false);
if(!splitChoose.size()){
splitChoose = parseBetween(s, "chooseanameopp ", " chooseend", false);
chooseoppo = true;
}
if (splitChoose.size())
{
if(!chooseoppo)
s = "chooseaname ";
else
s = "chooseanameopp ";
s.append(storedAbilityString);
s.append(" ");
if(splitChoose[2].empty())
s.append(splitChoose[1]);
else
s.append(splitChoose[2]);
}
}
MTGAbility * choose = parseChooseActionAbility(s, card, spell, target, 0, id);
choose = NEW GenericActivatedAbility(observer, "", "", id, card, choose, NULL);
MayAbility * mainAbility = NEW MayAbility(observer, id, choose, card, true);
return mainAbility;
}
@@ -2305,6 +2327,34 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
storedPayString.clear();
}
bool chooseoppo = false;
vector<string> splitChoose = parseBetween(s, "chooseaname ", " chooseend", false);
if(!splitChoose.size()){
splitChoose = parseBetween(s, "chooseanameopp ", " chooseend", false);
chooseoppo = true;
}
if (splitChoose.size() && storedAbilityString.empty())
{
storedAbilityString = splitChoose[1];
size_t pos1 = s.find("transforms(("); // Try to handle chooseaname ability inside ability$! or transforms keywords.
size_t pos2 = s.find("ability$!");
if(pos2 == string::npos)
pos2 = s.find("winability"); // Try to handle chooseaname ability inside winability or loseability keywords.
if(pos2 == string::npos)
pos2 = s.find("loseability");
size_t pos3 = s.find(splitChoose[1]);
if((pos1 == string::npos && pos2 == string::npos) || (pos2 != string::npos && pos1 != string::npos && pos3 <= pos1 && pos3 <= pos2) ||
(pos2 == string::npos && pos1 != string::npos && pos3 <= pos1) || (pos1 == string::npos && pos2 != string::npos && pos3 <= pos2)){
s = splitChoose[0];
if(!chooseoppo)
s.append("chooseaname ");
else
s.append("chooseanameopp ");
s.append(splitChoose[2]);
} else
storedAbilityString.clear();
}
vector<string> splitGrant = parseBetween(s, "grant ", " grantend", false);
if (splitGrant.size() && storedAbilityString.empty())
{
@@ -4540,7 +4590,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG
SAFE_DELETE(parser);
}
Damageable * t = spell ? spell->getNextDamageableTarget() : NULL;
MTGAbility * a = NEW AASetHand(observer, id, card, t, hand, NULL, who);
MTGAbility * a = NEW AASetHand(observer, id, card, t, hand, NULL, who);
a->oneShot = 1;
return a;
}
@@ -5751,37 +5801,38 @@ MTGAbility * AbilityFactory::parseUpkeepAbility(string s,MTGCardInstance * card,
MTGAbility * AbilityFactory::parsePhaseActionAbility(string s,MTGCardInstance * card,Spell * spell,MTGCardInstance * target, int restrictions,int id)
{
vector<string> splitActions = parseBetween(s, "[", "]");
if (!splitActions.size())
vector<string> splitActions = parseBetween(s, "[", "]");
if (!splitActions.size())
{
DebugTrace("MTGABILITY:Parsing Error " << s);
return NULL;
}
string s1 = splitActions[1];
int phase = MTG_PHASE_UPKEEP;
for (int i = 0; i < NB_MTG_PHASES; i++)
{
string phaseStr = Constants::MTGPhaseCodeNames[i];
if (s1.find(phaseStr) != string::npos)
{
DebugTrace("MTGABILITY:Parsing Error " << s);
return NULL;
}
string s1 = splitActions[1];
int phase = MTG_PHASE_UPKEEP;
for (int i = 0; i < NB_MTG_PHASES; i++)
{
string phaseStr = Constants::MTGPhaseCodeNames[i];
if (s1.find(phaseStr) != string::npos)
{
phase = PhaseRing::phaseStrToInt(phaseStr);
break;
}
phase = PhaseRing::phaseStrToInt(phaseStr);
break;
}
}
bool opponentturn = (s1.find("my") == string::npos);
bool myturn = (s1.find("opponent") == string::npos);
bool sourceinPlay = (s1.find("sourceinplay") != string::npos);
bool checkexile = (s1.find("checkex") != string::npos);
bool next = (s1.find("next") == string::npos); //Why is this one the opposite of the two others? That's completely inconsistent
bool once = (s1.find("once") != string::npos);
bool opponentturn = (s1.find("my") == string::npos);
bool myturn = (s1.find("opponent") == string::npos);
bool sourceinPlay = (s1.find("sourceinplay") != string::npos);
bool checkexile = (s1.find("checkex") != string::npos);
bool next = (s1.find("next") == string::npos); //Why is this one the opposite of the two others? That's completely inconsistent
bool once = (s1.find("once") != string::npos);
MTGCardInstance * _target = NULL;
if (spell)
_target = spell->getNextCardTarget();
if(!_target)
_target = target;
return NEW APhaseActionGeneric(observer, id, card,_target, trim(splitActions[2]), restrictions, phase,sourceinPlay,next,myturn,opponentturn,once,checkexile);
MTGCardInstance * _target = NULL;
if (spell)
_target = spell->getNextCardTarget();
if(!_target)
_target = target;
return NEW APhaseActionGeneric(observer, id, card, _target, trim(splitActions[2]), restrictions, phase, sourceinPlay, next, myturn, opponentturn, once, checkexile);
}
MTGAbility * AbilityFactory::parseChooseActionAbility(string s,MTGCardInstance * card,Spell *,MTGCardInstance * target, int, int id)

View File

@@ -2289,12 +2289,18 @@ bool TriggerTargetChooser::equals(TargetChooser * tc)
}
/*my curses */
bool myCursesChooser::canTarget(Targetable * target,bool)
bool myCursesChooser::canTarget(Targetable * target, bool)
{
for(unsigned int i = 0;i < source->controller()->curses.size();++i)
for (int j = source->controller()->game->battlefield->nb_cards - 1; j >= 0; --j)
{
MTGCardInstance * compare = source->controller()->curses[i];
if(compare == dynamic_cast<MTGCardInstance*>(target))
MTGCardInstance * compare = source->controller()->game->battlefield->cards[j];
if(compare->hasType("Curse") && compare->playerTarget == source->controller() && compare == dynamic_cast<MTGCardInstance*>(target))
return true;
}
for (int j = source->controller()->opponent()->game->battlefield->nb_cards - 1; j >= 0; --j)
{
MTGCardInstance * compare = source->controller()->opponent()->game->battlefield->cards[j];
if(compare->hasType("Curse") && compare->playerTarget == source->controller() && compare == dynamic_cast<MTGCardInstance*>(target))
return true;
}
return false;

View File

@@ -572,7 +572,19 @@ void WParsedInt::init(string s, Spell * spell, MTGCardInstance * card)
}
else if (s == "targetedcurses")
{
intValue = (card->playerTarget)?card->playerTarget->curses.size():0;
intValue = 0;
for (int j = card->controller()->game->battlefield->nb_cards - 1; j >= 0; --j)
{
MTGCardInstance * curse = card->controller()->game->battlefield->cards[j];
if (curse->hasType("Curse") && curse->playerTarget == card->playerTarget)
intValue++;
}
for (int j = card->controller()->opponent()->game->battlefield->nb_cards - 1; j >= 0; --j)
{
MTGCardInstance * curse = card->controller()->opponent()->game->battlefield->cards[j];
if (curse->hasType("Curse") && curse->playerTarget == card->playerTarget)
intValue++;
}
}
else if (s == "lifetotal" || s == "opponentlifetotal")
{
@@ -820,9 +832,9 @@ void WParsedInt::init(string s, Spell * spell, MTGCardInstance * card)
{
intValue = (s == "countedamount")?target->CountedObjects:target->CountedObjectsB;
}
else if (s == "kicked" || s == "handsize")
else if (s == "handsize" || s == "ohandsize")
{
intValue = (s == "kicked")?card->kicked:target->controller()->handsize;
intValue = (s == "ohandsize")?card->controller()->opponent()->handsize:target->controller()->handsize;
}
else if (s == "olandg" || s == "olandu")
{
@@ -1650,6 +1662,17 @@ void WParsedInt::extendedParse(string s, Spell * spell, MTGCardInstance * card)
{
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
{
intValue = 0;
Player* p = (s == "oppotgt")?card->controller()->opponent():card->controller();
if(card->playerTarget == p)
intValue = 1;
}
else if (s == "kicked")
{
intValue = card->kicked;
}
else if(!intValue)//found nothing, try parsing a atoi
{
intValue = atoi(s.c_str());