diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index 9bb1e00b3..d9eccfdef 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -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=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(*[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(*[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(sorcery[manacost<=3;zpos<=6]|mylibrary) moveto(mybattlefield) -auto=name(Look) reveal:6 optionone name(Get 2 sorcery) target(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(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(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(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(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(*[chosenname]|opponentgraveyard,opponentlibrary,opponenthand) moveto(exile) and!( shuffle opponent )! chooseend nonland!$ controller +auto=choice name(Target yourself) ability$!chooseaname name(Search that cards) target(*[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 diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 740407cac..f21d64483 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -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=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 diff --git a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt index 97f231d76..8fc9adda5 100644 --- a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt +++ b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt @@ -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(*[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(*[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(*[-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 diff --git a/projects/mtg/include/Player.h b/projects/mtg/include/Player.h index 458152419..fa7777417 100644 --- a/projects/mtg/include/Player.h +++ b/projects/mtg/include/Player.h @@ -68,7 +68,6 @@ public: int snowManaC; string lastChosenName; vector prowledTypes; - vectorcurses; Player(GameObserver *observer, string deckFile, string deckFileSmall, MTGDeck * deck = NULL); virtual ~Player(); virtual void setObserver(GameObserver*g); diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index 4685d9ab8..8625089f3 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -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); - vectorWin = parseBetween(abilityToAlter,"winability "," winabilityend"); + vectorWin = parseBetween(abilityToAlter, "winability ", " winabilityend"); if(Win.size()) { abilityWin = Win[1]; } - vectorLose = parseBetween(abilityToAlter,"loseability "," loseabilityend"); + vectorLose = 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(); } diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index 3b9d7b6e2..b02039ec1 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -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 owner’s graveyard. diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 0786f65d2..acff7a0a8 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -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 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 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 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 splitActions = parseBetween(s, "[", "]"); - if (!splitActions.size()) + vector 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) diff --git a/projects/mtg/src/TargetChooser.cpp b/projects/mtg/src/TargetChooser.cpp index 91c167bba..ec8dfc9fb 100644 --- a/projects/mtg/src/TargetChooser.cpp +++ b/projects/mtg/src/TargetChooser.cpp @@ -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(target)) + MTGCardInstance * compare = source->controller()->game->battlefield->cards[j]; + if(compare->hasType("Curse") && compare->playerTarget == source->controller() && compare == dynamic_cast(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(target)) return true; } return false; diff --git a/projects/mtg/src/WParsedInt.cpp b/projects/mtg/src/WParsedInt.cpp index 3d53526c3..d5547deb9 100644 --- a/projects/mtg/src/WParsedInt.cpp +++ b/projects/mtg/src/WParsedInt.cpp @@ -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());