From 73712f6bd58d3ed8113f4aeae556ee147745a611 Mon Sep 17 00:00:00 2001 From: Eduardo MG Date: Fri, 28 Apr 2023 19:49:01 -0600 Subject: [PATCH] Balanced brackets check, sanitization, bug fixes Added bracket balancing checks to the program for opening and closing sequences of parenthesis, square brackets, curly brackets, ,'ability$!' and '!$' characters, as well as for the 'and!(' opening sequence and the ')!' closing sequence. Sanitization operations removing empty lines and spaces at end of line. Pious Interdiction so the AI doesn't enchant own creatures. All 724 Tests Succesful! --- .../mtg/bin/Res/sets/primitives/_macros.txt | 12 +- .../bin/Res/sets/primitives/borderline.txt | 135 +++++++++--------- projects/mtg/bin/Res/sets/primitives/mtg.txt | 6 +- .../bin/Res/sets/primitives/planeswalkers.txt | 10 +- 4 files changed, 81 insertions(+), 82 deletions(-) diff --git a/projects/mtg/bin/Res/sets/primitives/_macros.txt b/projects/mtg/bin/Res/sets/primitives/_macros.txt index b5aed1acc..bedc7801f 100644 --- a/projects/mtg/bin/Res/sets/primitives/_macros.txt +++ b/projects/mtg/bin/Res/sets/primitives/_macros.txt @@ -4,7 +4,7 @@ # it means that if you have a macro named MACRO and a macro named MACRO2, you'll run into trouble because MACRO2 will match MACRO # Because of that, you need to use a unique delimiter at the beginning and the end of a macro, I personally use "__" # -# Limitations: parameter inside macro must not contain ")" +# Limitations: parameter inside macro must not contain "()" # Standard Cycling #AUTO_DEFINE __CYCLING__($cost) $cost{cycle}:name(cycling) draw:1 @@ -98,7 +98,7 @@ # Ripple #AUTO_DEFINE _RIPPLE_($c) autostack=if casted(this) then reveal:$c optionone name(Cast Card) target([share!name!]|reveal) moveTo(mylibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put on bottom) target(<$c>*|reveal) bottomoflibrary optiontwoend afterrevealed all(tobecast|mylibrary) moveTo(myLibrary) and!( activate castcard(normal) )! afterrevealedend revealend -# Recover +# Recover #AUTO_DEFINE _RECOVER_($cost) @movedTo(creature|myGraveyard) from(Battlefield):may pay{$cost} name(Return to owner Hand) moveTo(ownerHand) all(this) donothing?moveTo(exile) all(this) # Clash, not implemented @@ -127,7 +127,7 @@ $AUTO_DEFINE _CLASH_ Put here a code if compare the casting cost based on Errati # Monarch #AUTO_DEFINE _MONARCH_CONTROLLER_ if type(The Monarch|battlefield)~lessthan~1 then token(The Monarch) else all(The Monarch|battlefield) moveto(mybattlefield) and!( transforms((,newability[becomesmonarch controller])) forever )! -#AUTO_DEFINE _MONARCH_OPPONENT_ if type(The Monarch|battlefield)~lessthan~1 then token(The Monarch) opponent else all(The Monarch|battlefield) moveto(opponentbattlefield) and!( transforms((,newability[becomesmonarch controller])) forever )! +#AUTO_DEFINE _MONARCH_OPPONENT_ if type(The Monarch|battlefield)~lessthan~1 then token(The Monarch) opponent else all(The Monarch|battlefield) moveto(opponentbattlefield) and!( transforms((,newability[becomesmonarch controller])) forever )! # Explore, not implemented #AUTO_DEFINE _EXPLORE_ reveal:1 optionone if type(land|reveal)~lessthan~1 then transforms((,newability[counter(1/1)])) optiononeend optiontwo if type(land|reveal)~morethan~0 then name(move to Hand) target(<1>*|reveal) moveto(myHand) else transforms((,newability[Choice name(back to library) target(<1>*|reveal) moveto(mylibrary)],newability[Choice name(put into Graveyard) target(<1>*|reveal) moveto(myGraveyard)])) optiontwoend revealend limit:1 @@ -151,7 +151,7 @@ $AUTO_DEFINE _CLASH_ Put here a code if compare the casting cost based on Errati #AUTO_DEFINE _AFTERLIFE_($c) @movedTo(this|graveyard) from(battlefield):create(Spirit:Creature Spirit:1/1:white,black:flying)*$c # Riot -#AUTO_DEFINE _RIOT_ movedTo(this|myBattlefield):transforms((,newability[ability$! name(Choose counter or ability) choice name(Put a +1/+1 counter) counter(1/1,1) target(creature) _ choice name(Gains Haste) haste target(creature) forever !$ controller])) +#AUTO_DEFINE _RIOT_ movedTo(this|myBattlefield):transforms((,newability[ability$! name(Choose counter or ability) choice name(Put a +1/+1 counter) counter(1/1) target(creature) _ choice name(Gains Haste) haste target(creature) forever !$ controller])) # Learn #AUTO_DEFINE _LEARN_ name(Learn) transforms((,newability[if type(*[lesson]|mysideboard)~morethan~0 then choice name(Put lesson in hand) name(Put lesson in hand) target(*[lesson]|mysideboard) moveto(myhand)],newability[if type(*|myhand)~morethan~0 then choice name(Discard and draw) name(Discard and draw) target(*|myhand) reject and!(draw:1)!],newability[if type(Retriever Phoenix|mygraveyard)~morethan~0 then choice name(Return a Retriever Phoenix) name(Return a Retriever Phoenix) target(Retriever Phoenix|mygraveyard) moveto(myBattlefield)],newability[choice name(Don't learn) donothing])) oneshot @@ -227,9 +227,9 @@ $AUTO_DEFINE _CLASH_ Put here a code if compare the casting cost based on Errati # Thopter Token #AUTO_DEFINE _THOPTERTOKEN_ create(Thopter:Artifact Creature Thopter:1/1:flying) - + # Wolf Token #AUTO_DEFINE _WOLFTOKEN_ create(Wolf:creature Wolf:2/2:green) # Zombie Token -#AUTO_DEFINE _ZOMBIETOKEN_ create(zombie:creature zombie:2/2:black) +#AUTO_DEFINE _ZOMBIETOKEN_ create(zombie:creature zombie:2/2:black) \ No newline at end of file diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index d71fb1f55..f71a409a6 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -596,7 +596,7 @@ name=Aerial Boost other={convoke} name(Convoke) target=creature auto=2/2 -auto=flying +auto=flying 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.) -- Target creature gets +2/+2 and gains flying until end of turn. mana={1}{W} type=Instant @@ -3245,7 +3245,7 @@ name=Archangel Elspeth auto=counter(0/0,4,loyalty) auto={C(0/0,+1,Loyalty)}:create(soldier:creature soldier:1/1:white:lifelink) auto={C(0/0,-2,Loyalty)}:target(creature) counter(1/1,2) && transforms((Angel,newability[flying])) forever -auto={C(0/0,-6,Loyalty)}:moveTo(mybattlefield) all(*[-land;-instant;-sorcery;manacost<=3]|myGraveyard) +auto={C(0/0,-6,Loyalty)}:moveTo(mybattlefield) all(*[-land;-instant;-sorcery;manacost<=3]|myGraveyard) text=[+1]: Create a 1/1 white Soldier creature token with lifelink. -- [-2]: Put two +1/+1 counters on target creature. It becomes an Angel in addition to its other types and gains flying. -- [-6]: Return all nonland permanent cards with mana value 3 or less from your graveyard to the battlefield. mana={2}{W}{W} type=Legendary Planeswalker @@ -3313,7 +3313,7 @@ toughness=5 name=Archfiend of Spite abilities=flying,madness autoexile=restriction{discarded} pay({3}{B}{B}) name(pay 3BB to cast) activate name(pay 2G to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard) -auto=_ENRAGE_life:-thatmuch opponent donothing?sacrifice notatarget(*|mybattlefield)!$ opponent +auto=_ENRAGE_ability$!life:-thatmuch opponent donothing?sacrifice notatarget(*|mybattlefield)!$ opponent text=Flying -- Whenever a source an opponent controls deals damage to Archfiend of Spite, that source's controller loses that much life unless they sacrifice that many permanents. -- Madness {3}{B}{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={5}{B}{B} type=Creature @@ -6437,7 +6437,7 @@ name=Beamtown Beatstick auto=teach(creature) 1/0 auto=teach(creature) menace auto=teach(creature) transforms((,newability[@combatdamagefoeof(player) from(this):create(Treasure sur)])) -auto={2}:equip +auto={2}:equip text=Equipped creature gets +1/+0 and has menace. (It can't be blocked except by two or more creatures.) -- Whenever equipped creature deals combat damage to a player or battle, create a Treasure token. -- Equip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) mana={R} type=Artifact @@ -7586,7 +7586,7 @@ abilities=flash auto=rehook target(creature|myBattlefield) auto=indestructible ueot auto=teach(creature) 1/0 -auto={1}:equip +auto={1}:equip text=Flash -- When Bladed Battle-Fan enters the battlefield, attach it to target creature you control. That creature gains indestructible until end of turn. -- Equipped creature gets +1/+0. -- Equip {1} ({1} : Attach to target creature you control. Equip only as a sorcery.) mana={1}{B} type=Artifact @@ -7789,7 +7789,7 @@ auto=if paid(alternative) then untap target(creature) auto=if paid(alternative) then ability$!name(sacrifice) target(creature[attacking]|mybattlefield) sacrifice!$ targetedplayer auto=ifnot paid(alternative) then choice name(Player gains life) life:4 controller auto=ifnot paid(alternative) then choice name(Untap creatures) untap target(creature) -auto=ifnot paid(alternative) then choice name(Opponent scrifices creature) target(creature[attacking]|mybattlefield) sacrifice!$ targetedplayer +auto=ifnot paid(alternative) then choice ability$!name(Opponent scrifices creature) target(creature[attacking]|mybattlefield) sacrifice!$ targetedplayer text=Escalate {2} (Pay this cost for each mode chosen beyond the first.) -- Choose one or more -- Target player gains 4 life. -- Untap up to two target creatures. -- Target opponent sacrifices an attacking creature. mana={1}{W} type=Instant @@ -9974,7 +9974,7 @@ type=Instant [/card] [card] name=Branching Evolution -auto=@counteradded(1/1) from(creature):counter(1/1) all(trigger[from]) +auto=@counteradded(1/1) from(creature|mybattlefield):target(creature[counter{1/1}]|Battlefield) counter(1/1) notrg text=If one or more +1/+1 counters would be put on a creature you control, twice that many +1/+1 counters are put on that creature instead. mana={2}{G} type=Enchantment @@ -15354,7 +15354,7 @@ type=Sorcery name=Collective Nightmare other={convoke} name(Convoke) target=creature -auto=-3/-3 +auto=-3/-3 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.) -- Target creature gets -3/-3 until end of turn. mana={2}{B} type=Instant @@ -24946,7 +24946,7 @@ subtype=Saga [card] name=Elspeth's Smite target=*[attacking;blocking] -auto=exiledeath +auto=exiledeath auto=damage:3 text=Elspeth's Smite deals 3 damage to target attacking or blocking creature. If that creature would die this turn, exile it instead. mana={W} @@ -26288,7 +26288,6 @@ name=Ethereal Escort abilities=lifelink auto=name(Creature perpetually gains lifelink) target(*|myhand) transforms((,newability[perpetuallifelink])) forever auto=_ATTACKING_name(Creature perpetually gains lifelink) target(*|myhand) transforms((,newability[perpetuallifelink])) forever -auto=@Ethereal Escort enters the battlefield or attackschoose a card in your handperpetually) lifelink text=Lifelink -- Whenever Ethereal Escort enters the battlefield or attacks, choose a card in your hand. It perpetually gains lifelink. mana={2}{W} type=Creature @@ -31511,7 +31510,7 @@ toughness=2 [card] name=Gale's Redirection target=*|stack -auto=fizzleto(exile) +auto=fizzleto(exile) auto=name(Roll a d20) rolld20 20 winability all(*[zpos=type:*:opponentexile]|opponentexile) transforms((,newability[canplayfromexile],newability[zerocast])) forever winabilityend loseability if compare(lastrollresultplusmanacostplusend)~lessthan~15 then all(*[zpos=type:*:opponentexile]|opponentexile) transforms((,newability[canplayfromexile],newability[anytypeofmana])) forever else all(*[zpos=type:*:opponentexile]|opponentexile) transforms((,newability[canplayfromexile],newability[zerocast])) forever loseabilityend rolld20end text=Exile target spell, then roll a d20 and add that spell's mana value. -- 1—14 | You may cast the exiled card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. -- 15+ | You may cast the exiled card without paying its mana cost for as long as it remains exiled. mana={3}{U}{U} @@ -32521,7 +32520,7 @@ toughness=3 name=Ghitu Fire target=creature,player abilities=flash -restriction=myturnonly +restriction=can play sorcery other={X}{2}{R} name(Cast as Instant) auto=paidmana damage:X auto=alternative damage:X @@ -38167,7 +38166,7 @@ name=Heliod, the Radiant Dawn backside=Heliod, the Warped Eclipse restriction=compare(isflipped)~equalto~0 anyzone={0}:doubleside(backside) -auto=moveTo(myhand) target(*[enchantment;-god]|mygraveyard) +auto=moveTo(myhand) target(*[enchantment;-god]|mygraveyard) auto={3}{p(U)}:flip(backside) asSorcery text=When Heliod, the Radiant Dawn enters the battlefield, return target enchantment card that isn't a God from your graveyard to your hand. -- {3}{U/P}: Transform Heliod, the Radiant Dawn. Activate only as a sorcery. ({U/P} can be paid with either {U} or 2 life.) mana={2}{W}{W} @@ -39053,7 +39052,7 @@ toughness=3 [card] name=Hobblefiend abilities=trample -auto={1}{S(other creature|myBattlefield}:counter(1/1) all(this) +auto={1}{S(other creature|myBattlefield)}:counter(1/1) all(this) text=Trample (This creature can deal excess combat damage to the player or planeswalker it's attacking.) -- {1}, Sacrifice another creature: Put a +1/+1 counter on Hobblefiend. mana={1}{R} type=Creature @@ -39335,7 +39334,7 @@ auto={T}:add{W} auto={T}:add{B} auto={T}:add{G} auto={T}:add{U} -auto={2}{T}:name)Exile a card) target(*|graveyard) moveto(exile) +auto={2}{T}:target(*|graveyard) moveto(exile) text={T}: Add one mana of any color. -- {2}, {T}: Exile target card from a graveyard. mana={3} type=Artifact @@ -46171,7 +46170,7 @@ toughness=4 name=Kor Halberd auto=teach(creature) 1/1 auto=teach(creature) vigilance -auto={1}:equip +auto={1}:equip text=Equipped creature gets +1/+1 and has vigilance. -- Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) mana={W} type=Artifact @@ -46443,8 +46442,8 @@ toughness=5 [card] name=Kroxa and Kunoros abilities=lifelink,menace,vigilance -auto=may moveTo(exile) notatarget(<5>*|mygraveyard) and!( target(creature|mygraveyard) moveTo(battlefield) )! -auto=_ATTACKING_may moveTo(exile) notatarget(<5>*|mygraveyard) and!( target(creature|mygraveyard) moveTo(battlefield) )! +auto=may moveTo(exile) notatarget(<5>*|mygraveyard) and!( target(creature|mygraveyard) moveTo(battlefield) )! restriction{type(*|mygraveyard)~morethan~5} +auto=_ATTACKING_may moveTo(exile) notatarget(<5>*|mygraveyard) and!( target(creature|mygraveyard) moveTo(battlefield) )! restriction{type(*|mygraveyard)~morethan~5} text=Vigilance, menace, lifelink -- Whenever Kroxa and Kunoros enters the battlefield or attacks, you may exile five cards from your graveyard. When you do, return target creature card from your graveyard to the battlefield. mana={3}{R}{W}{B} type=Legendary Creature @@ -46461,7 +46460,7 @@ auto=if type(*[-land]|opponenthand)~equalto~0 then if type(land|opponenthand)~mo auto=if type(*[-land]|opponenthand)~morethan~0 then if type(land|opponenthand)~morethan~0 then ability$!name(Choose one) choice name(Discard non-land card) reject notatarget(*[-land]|myhand) _ choice name(Discard land card) reject notatarget(land|myhand) and!(life:-3)! !$ opponent auto=@combat(attacking) source(this) restriction{type(*|opponenthand)~equalto~0}:life:-3 opponent auto=@combat(attacking) source(this) restriction{type(*[-land]|opponenthand)~morethan~0,type(land|opponenthand)~equalto~0}:ability$!name(Discard non-land) card name(Discard non-land card) reject notatarget(*[-land]|myhand)!$ opponent -auto=@combat(attacking) source(this) restriction{type(*[-land]|opponenthand)~equalto~0,type(land|opponenthand)~morethan~0}:ability$!name(Discard land card) name(Discard land card) reject notatarget(land|myhand) and!(life:-3)! $ opponent +auto=@combat(attacking) source(this) restriction{type(*[-land]|opponenthand)~equalto~0,type(land|opponenthand)~morethan~0}:ability$!name(Discard land card) name(Discard land card) reject notatarget(land|myhand) and!(life:-3)! !$ opponent auto=@combat(attacking) source(this) restriction{type(*[-land]|opponenthand)~morethan~0,type(land|opponenthand)~morethan~0}:ability$!name(Choose one) choice name(Discard non-land card) reject notatarget(*[-land]|myhand) _ choice name(Discard land card) reject notatarget(land|myhand) and!(life:-3)! !$ opponent retrace={B}{B}{R}{R}{E(other *|mygraveyard)}{E(other *|mygraveyard)}{E(other *|mygraveyard)}{E(other *|mygraveyard)}{E(other *|mygraveyard)} name(Escape) text=When Kroxa enters the battlefield, sacrifice it unless it escaped. -- Whenever Kroxa enters the battlefield or attacks, each opponent discards a card, then each opponent who didn't discard a nonland card this way loses 3 life. -- Escape-{B}{B}{R}{R}, Exile five other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.) @@ -52624,7 +52623,7 @@ name=Mirran Banesplitter abilities=flash auto=name(Attach to creature) rehook target(creature|mybattlefield) auto=teach(creature) 2/0 -auto={3}:equip +auto={3}:equip text=Flash -- When Mirran Banesplitter enters the battlefield, attach it to target creature you control. -- Equipped creature gets +2/+0. -- Equip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) mana={R} type=Artifact @@ -55203,7 +55202,7 @@ name=Neheb, the Worthy abilities=first strike auto=lord(minotaur|mybattlefield) first strike auto=aslongas(*|myhand) lord(minotaur|mybattlefield) 2/0 <2 -auto=@combatdamaged(player) from(this):ability$!target(*|myhand) reject$! opponent +auto=@combatdamaged(player) from(this):ability$!target(*|myhand) reject!$ opponent auto=@combatdamaged(player) from(this):transforms((,newability[target(*|myhand) reject])) forever text=First strike -- Other Minotaurs you control have first strike. -- As long as you have one or fewer cards in hand, Minotaurs you control get +2/+0. -- Whenever Neheb, the Worthy deals combat damage to a player, each player discards a card. mana={1}{B}{R} @@ -57293,9 +57292,9 @@ toughness=3 [/card] [card] name=Ojutai's Command -auto=choice name(Choose 1 and 2) target(creature[manacost<=2]|mygraveyard) moveto(mybattlefield && life:4 controller -auto=choice name(Choose 1 and 3) target(creature[manacost<=2]|mygraveyard) moveto(mybattlefield and!( transforms((,newability[name(Counter spell) fizzle target(*|stack)])) oneshot )! -auto=choice name(Choose 1 and 4) target(creature[manacost<=2]|mygraveyard) moveto(mybattlefield && draw:1 controller +auto=choice name(Choose 1 and 2) target(creature[manacost<=2]|mygraveyard) moveto(mybattlefield) && life:4 controller +auto=choice name(Choose 1 and 3) target(creature[manacost<=2]|mygraveyard) moveto(mybattlefield) and!( transforms((,newability[name(Counter spell) fizzle target(*|stack)])) oneshot )! +auto=choice name(Choose 1 and 4) target(creature[manacost<=2]|mygraveyard) moveto(mybattlefield) && draw:1 controller auto=choice name(Choose 2 and 3) life:4 controller && fizzle target(*|stack) auto=choice name(Choose 2 and 4) life:4 controller && draw:1 controller auto=choice name(Choose 3 and 4) fizzle target(*|stack) && draw:1 controller @@ -59518,7 +59517,7 @@ auto=@each my blockers restriction{type(creature[attacking;vigilance]|myBattlefi auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~1,type(creature[attacking;vigilance]|myBattlefield)~morethan~0}:if type(creature[attacking;haste]|myBattlefield)~morethan~0 then flip(Metzali, Tower of Triumph) auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~1,type(creature[attacking;vigilance]|myBattlefield)~morethan~0}:if type(creature[attacking;first strike]|myBattlefield)~morethan~0 then flip(Metzali, Tower of Triumph) auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~1,type(creature[attacking;vigilance]|myBattlefield)~morethan~0}:if type(creature[attacking;double strike]|myBattlefield)~morethan~0 then flip(Metzali, Tower of Triumph) -auto=@each my blockers restriction{type(type(creature[attacking;haste]|myBattlefield)~morethan~1}:flip(Metzali, Tower of Triumph) +auto=@each my blockers restriction{type(creature[attacking;haste]|myBattlefield)~morethan~1}:flip(Metzali, Tower of Triumph) auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~1,type(creature[attacking;haste]|myBattlefield)~morethan~0}:if type(creature[attacking;vigilance]|myBattlefield)~morethan~0 then flip(Metzali, Tower of Triumph) auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~1,type(creature[attacking;haste]|myBattlefield)~morethan~0}:if type(creature[attacking;first strike]|myBattlefield)~morethan~0 then flip(Metzali, Tower of Triumph) auto=@each my blockers restriction{type(creature[attacking]|myBattlefield)~morethan~1,type(creature[attacking;haste]|myBattlefield)~morethan~0}:if type(creature[attacking;double strike]|myBattlefield)~morethan~0 then flip(Metzali, Tower of Triumph) @@ -60583,10 +60582,10 @@ type=Instant [card] name=Pious Interdiction target=creature -auto=life:2 controller auto=cantattack auto=cantpwattack auto=cantblock +auto=life:2 controller text=Enchant creature -- When Pious Interdiction enters the battlefield, you gain 2 life. -- Enchanted creature can't attack or block. mana={3}{W} type=Enchantment @@ -64375,7 +64374,7 @@ name=Ramosian Greatsword other={convoke} name(Convoke) auto=teach(creature) 3/1 auto=teach(creature) trample -auto={2}:equip +auto={2}:equip 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.) -- Equipped creature gets +3/+1 and has trample. -- Equip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) mana={4}{R} type=Artifact @@ -65340,7 +65339,7 @@ type=Instant name=Reckless Ringleader abilities=haste auto=name(Creature perpetually gains haste) target(creature|myhand) counter(0/0.1.PerpetualHaste) -auto=emblem transforms((,newability[lord(creature[counter{0/0.1.PerpetualHaste}]) transforms((,newability[haste])) forever dontremove +auto=emblem transforms((,newability[lord(creature[counter{0/0.1.PerpetualHaste}]) haste)) forever dontremove text=Haste -- When Reckless Ringleader enters the battlefield, choose a creature card in your hand. It perpetually gains haste. mana={R} type=Creature @@ -66211,7 +66210,7 @@ toughness=2 [card] name=Resculpt target=artifact,creature -auto=moveto(exile) and!( transforms((,newability[token(Elemental^Creature Elemental^4/4^blue^red)])) oneshot +auto=moveto(exile) and!( transforms((,newability[token(Elemental^Creature Elemental^4/4^blue^red)])) )! oneshot text=Exile target artifact or creature. Its controller creates a 4/4 blue and red Elemental creature token. mana={1}{U} type=Instant @@ -69813,7 +69812,7 @@ subtype=Shrine [/card] [card] name=Sanctum of Calm Waters -auto=@each my firstmain:may foreach(*[shrine]|mybattlefield) name(draw a card for each shrine) draw:1 controller && transforms((,newability[target(*|myhand) reject])) oneshot +auto=@each my firstmain:may foreach(*[shrine]|mybattlefield) name(draw a card for each shrine) _LOOT_ text=At the beginning of your precombat main phase, you may draw X cards, where X is the number of Shrines you control. If you do, discard a card. mana={3}{U} type=Legendary Enchantment @@ -70988,7 +70987,7 @@ toughness=6 name=Scourge of the Skyclaves anyzone=-highestlifetotal/-highestlifetotal cdaactive kicker={4}{B} -auto=if paid(kicker) then transforms((,newability[life:-halfuplifetotal controller],newability[life:-halfupopponentlifetotal opponent] +auto=if paid(kicker) then transforms((,newability[life:-halfuplifetotal controller],newability[life:-halfupopponentlifetotal opponent])) auto=20/20 text=Kicker {4}{B} -- When you cast this spell, if it was kicked, each player loses half their life, rounded up. -- Scourge of the Skyclaves's power and toughness are each equal to 20 minus the highest life total among players. mana={1}{B} @@ -71665,7 +71664,7 @@ type=Sorcery name=Security Bypass target=creature auto=teach(creature) transforms((,newability[@combat(attacking) source(this) restriction{type(creature[attacking]|myBattlefield)~lessthan~2}:all(this) unblockable ueot oneShot])) -auto=teach(creature) transforms((,newability[@combatdamaged(player) from(this):_CONNIVES_])) forever +auto=teach(creature) transforms((,newability[@combatdamaged(player) from(this):_CONNIVES_])) forever text=Enchant creature -- As long as enchanted creature is attacking alone, it can't be blocked. -- Enchanted creature has "Whenever this creature deals combat damage to a player, it connives." (Its controller draws a card, then discards a card. If they discarded a nonland card, they put a +1/+1 counter on this creature.) mana={1}{U} type=Enchantment @@ -75458,8 +75457,8 @@ type=Sorcery name=Skyclave Relic abilities=indestructible kicker={3} -auto=if paid(kicker) then all(this) clone and!(transforms((,newability[tap(noevent]))! -auto=if paid(kicker) then all(this) clone and!(transforms((,newability[tap(noevent]))! +auto=if paid(kicker) then all(this) clone and!(transforms((,newability[tap(noevent)])))! +auto=if paid(kicker) then all(this) clone and!(transforms((,newability[tap(noevent)])))! auto={T}:ability$! name(Add any color) choice name(Add White) add{W} _ choice name(Add Blue) add{U} _ choice name(Add Black) add{B} _ choice name(Add Red) add{R} _ choice name(Add Green) add{G} !$ controller text=Kicker {3} -- Indestructible -- When Skyclave Relic enters the battlefield, if it was kicked, create two tapped tokens that are copies of Skyclave Relic. -- {T}: Add one mana of any color. mana={3} @@ -77900,7 +77899,7 @@ name=Spiked Pit Trap abilities=flash auto={5}:name(Roll a d20) target(creature|battlefield) counter(0/0,1,SpikedEffect) && all(this) rolld20 20 winability donothing winabilityend rolld20end auto=@dierolled(this) from(controller):all(this) sacrifice -auto=@dierolled(this) from(controller):ability$!name(Deal 5 damage) all(creature[counter{0/0.1.SpikedEffect}]|battlefield) transforms((,newability[damage:5],newability[removeallcounters(0/0.1.SpikedEffect)])) oneshot!controller +auto=@dierolled(this) from(controller):ability$!name(Deal 5 damage) all(creature[counter{0/0.1.SpikedEffect}]|battlefield) transforms((,newability[damage:5],newability[removeallcounters(0/0.1.SpikedEffect)])) oneshot!$controller auto=@dierolled(this) result(10) from(controller):name(Create treasure) token(Treasure Sur) auto=@dierolled(this) result(11) from(controller):name(Create treasure) token(Treasure Sur) auto=@dierolled(this) result(12) from(controller):name(Create treasure) token(Treasure Sur) @@ -78330,7 +78329,7 @@ type=Instant [/card] [card] name=Spoils of War -auto=if type(*[artifact;creature]|opponentgraveyard)~equalto~compare(X) then name(Distribute 1/1 counters) thisforeach(X) ability$!name(Put 1/1 counter) name(Put 1/1 counter) target(creature) counter(1/1)!$ controller +auto=if type(*[artifact;creature]|opponentgraveyard)~equalto~compare(X) then name(Distribute 1/1 counters) thisforeach(X) ability$! name(Put 1/1 counter) name(Put 1/1 counter) target(creature) counter(1/1) !$ controller text=X is the number of artifact and/or creature cards in an opponent's graveyard as you cast Spoils of War. -- Distribute X +1/+1 counters among any number of target creatures. mana={X}{B} type=Sorcery @@ -81283,9 +81282,9 @@ toughness=2 [card] name=Swallow Whole target=creature[tapped] -auto=moveTo(exile) && counter(1/1) target(creature[tapped]|myBattlefield) +auto=moveTo(exile) && ability$!counter(1/1) target(creature[tapped]|myBattlefield)!$ controller text=As an additional cost to cast this spell, tap an untapped creature you control. -- Exile target tapped creature. Put a +1/+1 counter on the creature tapped to pay this spell's additional cost. -mana={W}{T(creature|myBattlefield} +mana={W}{T(creature|myBattlefield)} type=Sorcery [/card] [card] @@ -82886,7 +82885,7 @@ type=Instant [/card] [card] name=Teferi's Protege -auto={1}{U}{T}:draw:1 controller && transforms((,newability[target(*|myhand) reject])) oneshot +auto={1}{U}{T}:_LOOT_ text={1}{U}, {T}: Draw a card, then discard a card. mana={2}{U} type=Creature @@ -82914,7 +82913,7 @@ type=Instant [/card] [card] name=Teferi's Tutelage -auto=draw:1 controller && transforms((,newability[target(*|myhand) reject])) oneshot +auto=_LOOT_ auto=@drawof(player):deplete:2 opponent text=When Teferi's Tutelage enters the battlefield, draw a card, then discard a card. -- Whenever you draw a card, target opponent mills two cards. (They put the top two cards of their library into their graveyard.) mana={2}{U} @@ -83245,7 +83244,7 @@ toughness=2 name=Tenured Oilcaster abilities=menace auto=aslongas(*|opponentGraveyard) 3/0 >7 -auto=@combat(attacking,blocking) source(this):all(player) deplete:1 +auto=@combat(attacking,blocking) source(this):all(player) deplete:1 text=Menace (This creature can't be blocked except by two or more creatures.) -- Tenured Oilcaster gets +3/+0 as long as an opponent has eight or more cards in their graveyard. -- Whenever Tenured Oilcaster attacks or blocks, each player mills a card. mana={3}{B} type=Creature @@ -87813,7 +87812,7 @@ toughness=4 [/card] [card] name=Two-Headed Giant -auto=_ATTACKING_flipacoin winability transforms((,newability[flipacoin winability double strike winabilityend loseability loseabilityend flipend] winabilityend loseability transforms((,newability[flipacoin winability winabilityend loseability menace loseabilityend flipend] loseabilityend flipend +auto=_ATTACKING_flipacoin winability transforms((,newability[flipacoin winability double strike winabilityend loseability loseabilityend flipend])) winabilityend loseability transforms((,newability[flipacoin winability winabilityend loseability menace loseabilityend flipend])) loseabilityend flipend text=Whenever Two-Headed Giant attacks, flip two coins. If both coins come up heads, Two-Headed Giant gains double strike until end of turn. If both coins come up tails, Two-Headed Giant gains menace until end of turn. mana={2}{R}{R} type=Creature @@ -88155,7 +88154,7 @@ other={3}{W} name(Entwine) auto=ifnot paid(alternative) then if type(creature|battlefield)~morethan~0 then choice name(Put 1/1 counter) name(Put 1/1 counter) name(Put 1/1 counter) target(creature|battlefield) counter(1/1) auto=ifnot paid(alternative) then choice name(Proliferate) _PROLIFERATE_ auto=if paid(alternative) then if type(creature|battlefield)~morethan~0 then name(Put 1/1 counter) name(Put 1/1 counter) name(Put 1/1 counter) target(creature|battlefield) counter(1/1) -auto=if paid(alternative) then ability$!name(Proliferate) _PROLIFERATE_ +auto=if paid(alternative) then _PROLIFERATE_ text=Choose one -- Put a +1/+1 counter on each of up to two target creatures. -- Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) -- Entwine {3}{W} (Choose both if you pay the entwine cost.) mana={1}{W} type=Instant @@ -90080,27 +90079,27 @@ toughness=3 name=Vengeful Rebirth auto=moveto(myexile) all(this) auto=if type(land|mygraveyard)~morethan~0 then choice name(Return land card):target(land|mygraveyard) moveto(myhand) -auto=if type(*[manacost=0]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 0):target(*[manacost=0] moveto(myhand) -auto=if type(*[manacost=1]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 1):target(*[manacost=1] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:1!$ controller -auto=if type(*[manacost=2]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 2):target(*[manacost=2] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:2!$ controller -auto=if type(*[manacost=3]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 3):target(*[manacost=3] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:3!$ controller -auto=if type(*[manacost=4]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 4):target(*[manacost=4] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:4!$ controller -auto=if type(*[manacost=5]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 5):target(*[manacost=5] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:5!$ controller -auto=if type(*[manacost=6]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 6):target(*[manacost=6] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:6!$ controller -auto=if type(*[manacost=7]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 7):target(*[manacost=7] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:7!$ controller -auto=if type(*[manacost=8]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 8):target(*[manacost=8] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:8!$ controller -auto=if type(*[manacost=9]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 9):target(*[manacost=9] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:9!$ controller -auto=if type(*[manacost=10]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 10):target(*[manacost=10] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:10!$ controller -auto=if type(*[manacost=11]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 11):target(*[manacost=11] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:11!$ controller -auto=if type(*[manacost=12]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 12):target(*[manacost=12] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:12!$ controller -auto=if type(*[manacost=13]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 13):target(*[manacost=13] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:13!$ controller -auto=if type(*[manacost=14]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 14):target(*[manacost=14] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:14!$ controller -auto=if type(*[manacost=15]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 15):target(*[manacost=15] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:15!$ controller -auto=if type(*[manacost=16]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 16):target(*[manacost=16] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:16!$ controller -auto=if type(*[manacost=17]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 17):target(*[manacost=17] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:17!$ controller -auto=if type(*[manacost=18]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 18):target(*[manacost=18] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:18!$ controller -auto=if type(*[manacost=19]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 19):target(*[manacost=19] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:19!$ controller -auto=if type(*[manacost>=20]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 20):target(*[manacost>=20] moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:20!$ controller +auto=if type(*[manacost=0]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 0):target(*[manacost=0]|mygraveyard) moveto(myhand) +auto=if type(*[manacost=1]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 1):target(*[manacost=1]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:1!$ controller +auto=if type(*[manacost=2]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 2):target(*[manacost=2]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:2!$ controller +auto=if type(*[manacost=3]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 3):target(*[manacost=3]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:3!$ controller +auto=if type(*[manacost=4]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 4):target(*[manacost=4]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:4!$ controller +auto=if type(*[manacost=5]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 5):target(*[manacost=5]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:5!$ controller +auto=if type(*[manacost=6]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 6):target(*[manacost=6]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:6!$ controller +auto=if type(*[manacost=7]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 7):target(*[manacost=7]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:7!$ controller +auto=if type(*[manacost=8]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 8):target(*[manacost=8]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:8!$ controller +auto=if type(*[manacost=9]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 9):target(*[manacost=9]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:9!$ controller +auto=if type(*[manacost=10]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 10):target(*[manacost=10]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:10!$ controller +auto=if type(*[manacost=11]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 11):target(*[manacost=11]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:11!$ controller +auto=if type(*[manacost=12]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 12):target(*[manacost=12]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:12!$ controller +auto=if type(*[manacost=13]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 13):target(*[manacost=13]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:13!$ controller +auto=if type(*[manacost=14]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 14):target(*[manacost=14]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:14!$ controller +auto=if type(*[manacost=15]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 15):target(*[manacost=15]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:15!$ controller +auto=if type(*[manacost=16]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 16):target(*[manacost=16]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:16!$ controller +auto=if type(*[manacost=17]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 17):target(*[manacost=17]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:17!$ controller +auto=if type(*[manacost=18]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 18):target(*[manacost=18]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:18!$ controller +auto=if type(*[manacost=19]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 19):target(*[manacost=19]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:19!$ controller +auto=if type(*[manacost>=20]|mygraveyard)~morethan~0 then choice name(Return non land card with manacost 20):target(*[manacost>=20]|mygraveyard) moveto(myhand) && ability$!name(Damage target creature or player) target(creature,player) damage:20!$ controller text=Return target card from your graveyard to your hand. If you return a nonland card to your hand this way, Vengeful Rebirth deals damage equal to that card's mana value to target creature or player. -- Exile Vengeful Rebirth. mana={4}{R}{G} type=Sorcery @@ -90651,7 +90650,7 @@ toughness=5 [card] name=Vigorspore Wurm abilities=oneblocker -auto=target(creature) transforms((,newability[vigilance],newability[type:creature:mygraveyard/type:creature:mygraveyard]) ueot +auto=target(creature) transforms((,newability[vigilance],newability[type:creature:mygraveyard/type:creature:mygraveyard])) ueot text=Undergrowth - When Vigorspore Wurm enters the battlefield, target creature gains vigilance and gets +X/+X until end of turn, where X is the number of creature cards in your graveyard. -- Vigorspore Wurm can't be blocked by more than one creature. mana={5}{G} type=Creature @@ -91105,7 +91104,7 @@ toughness=3 [card] name=Vivien's Invocation aicode=activate target(creature[zpos<=7]|mylibrary) moveto(mybattlefield) and!(transforms((,newability[target(creature|opponentbattlefield) dynamicability])) oneshot)! -auto=reveal:7 optionone name(Get Creature) target(<1>creature|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) bottomoflibrary )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(transforms((,newability[target(creature|opponentbattlefield) dynamicability])) oneshot)! afterrevealedend revealend +auto=reveal:7 optionone name(Get Creature) target(<1>creature|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) bottomoflibrary )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(transforms((,newability[target(creature|opponentbattlefield) dynamicability])) oneshot)! )! afterrevealedend revealend text=Look at the top seven cards of your library. You may put a creature card from among them onto the battlefield. Put the rest on the bottom of your library in a random order. When a creature is put onto the battlefield this way, it deals damage equal to its power to target creature an opponent controls. mana={5}{G}{G} type=Sorcery @@ -92712,7 +92711,7 @@ type=Artifact [/card] [card] name=Weaponize the Monsters -auto={2}{S(creature|myBattlefield}:damage:2 target(player,creature,planeswalker) +auto={2}{S(creature|myBattlefield)}:damage:2 target(player,creature,planeswalker) text={2}, Sacrifice a creature: Weaponize the Monsters deals 2 damage to any target. mana={R} type=Enchantment @@ -95679,4 +95678,4 @@ type=Legendary Creature subtype=Devil power=2 toughness=3 -[/card] +[/card] \ No newline at end of file diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 19b98742f..841b598a6 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -7712,7 +7712,7 @@ toughness=3 name=Aven Shrine auto=lord(*|opponentgraveyard) transforms((,newability[@movedTo(*[share!name!]|mystack):life:1 controller])) auto=lord(*|opponentgraveyard) transforms((,newability[@movedTo(*[share!name!]|opponentstack):life:1 opponent])) -auto=lord(*|mygraveyard) transforms((,newability[@movedTo(*[share!name!]|mystack):life:1 controller)])) +auto=lord(*|mygraveyard) transforms((,newability[@movedTo(*[share!name!]|mystack):life:1 controller])) auto=lord(*|mygraveyard) transforms((,newability[@movedTo(*[share!name!]|opponentstack):life:1 opponent])) text=Whenever a player casts a spell, that player gains X life, where X is the number of cards in all graveyards with the same name as that spell. mana={1}{W}{W} @@ -44982,7 +44982,7 @@ toughness=2 [card] name=Geier Reach Sanitarium auto={T}:Add{C} -auto={2}{T}:name(draw & discard) draw:1 all(player) && transforms((,newability[ability$!notatarget(*|myhand) reject)!$ controller],newability[ability$!notatarget(*|myhand) reject)!$ opponent])) all(this) +auto={2}{T}:name(draw & discard) draw:1 all(player) && transforms((,newability[ability$!notatarget(*|myhand) reject!$ controller],newability[ability$!notatarget(*|myhand) reject!$ opponent])) all(this) text={T}: Add {C} to your mana pool. -- {2}, {T}: Each player draws a card, then discards a card. type=Legendary Land [/card] @@ -61561,7 +61561,7 @@ toughness=2 [/card] [card] name=Kami of the Tended Garden -auto=upcost[{G}] sacrifice) +auto=upcost[{G}] sacrifice auto=_DIES_may moveTo(myhand) target(spirit[manacost<=3]|mygraveyard) text=At the beginning of your upkeep, sacrifice Kami of the Tended Garden unless you pay {G}. -- Soulshift 3 (When this dies, you may return target Spirit card with mana value 3 or less from your graveyard to your hand.) mana={3}{G} diff --git a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt index 72276b72a..36840ff0e 100644 --- a/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt +++ b/projects/mtg/bin/Res/sets/primitives/planeswalkers.txt @@ -724,7 +724,7 @@ name=Domri, Chaos Bringer auto=counter(0/0,5,loyalty) aicode=activate moveto(myHand) target(creature[zpos=2]|myLibrary) auto={C(0/0,1,Loyalty)}:name(+1: Add red if its a creature, Riot) add{R} && if type(creature|myStack)~morethan~0 then ability$!name(Choose one) choice name(Put a +1/1 counter) counter(1/1) target(creature[fresh]|myBattlefield) _ choice name(Gain Haste) haste target(creature[fresh]|myBattlefield)!$ controller -auto={C(0/0,1,Loyalty)}:name(+1: Add green if its a creature, Riot) add{G} && if type(creature|myStack)~morethan~0 then ability$!name(Choose one) choice name(Put a +1/1 counter) counter(1/1) target(creature[fresh]|myBattlefield) _ choice name(Gain Haste) haste target(creature[fresh]|myBattlefield)!$ controller !$ controller +auto={C(0/0,1,Loyalty)}:name(+1: Add green if its a creature, Riot) add{G} && if type(creature|myStack)~morethan~0 then ability$!name(Choose one) choice name(Put a +1/1 counter) counter(1/1) target(creature[fresh]|myBattlefield) _ choice name(Gain Haste) haste target(creature[fresh]|myBattlefield)!$ controller auto={C(0/0,-3,Loyalty)}:name(-3: Reveal four and put up to two creature) name(Look your Library) reveal:4 optionone name(Get a card) target(*[creature]|reveal) moveto(myhand) optiononeend optiontwo name(put on bottom) target(<4>*|reveal) bottomoflibrary optiontwoend revealend auto={C(0/0,-8,Loyalty)}:name(-8: Emblem: "Each end of turn create a 4/4 Beast) emblem transforms((,newability[@each endofturn: token(Beast,Creature Beast,4/4,red,green,trample)])) forever dontrevome text=+1: Add {R} or {G}. If that mana is spent on a creature spell, it gains riot. (It enters the battlefield with your choice of a +1/+1 counter or haste.) -- −3: Look at the top four cards of your library. You may reveal up to two creature cards from among them and put them into your hand. Put the rest on the bottom of your library in a random order. -- −8: You get an emblem with "At the beginning of each end step, create a 4/4 red and green Beast creature token with trample." @@ -2087,7 +2087,7 @@ subtype=Bolas [card] name=Nicol Bolas, the Deceiver auto=counter(0/0,5,loyalty) -auto={C(0/0,3,Loyalty)}:name(+3: Loses 3 life unless discard or sacrifices permanent) ability$!choice life:-3 controller choice sacrifice notatarget(*[-land]|mybattlefield) choice target(*|myhand) reject$! opponent +auto={C(0/0,3,Loyalty)}:name(+3: Loses 3 life unless discard or sacrifices permanent) ability$!choice life:-3 controller choice sacrifice notatarget(*[-land]|mybattlefield) choice target(*|myhand) reject!$ opponent auto={C(0/0,-3,Loyalty)}:name(-3: Destroy target creature and draw a card) destroy target(creature) and!(draw:1 controller)! auto={C(0/0,-11,Loyalty)}:name(-11: Deals 7 damage and draw 7) damage:7 opponent and!(draw:7 controller)! text=+3: Each opponent loses 3 life unless that player sacrifices a nonland permanent or discards a card. -- -3: Destroy target creature. Draw a card. -- -11: Nicol Bolas, the Deceiver deals 7 damage to each opponent. You draw seven cards. @@ -2247,7 +2247,7 @@ abilities=canbecommander auto=counter(0/0,3,loyalty) auto={C(0/0,2,Loyalty)}:name(+2: Each opponent loses 1 life...) life:-1 opponent && life:1 controller auto={C(0/0,-2,Loyalty)}:name(-2: Create a 5/5 black Demon with flying...) token(Demon,Creature Demon,5/5,black,flying) && life:-2 controller -auto={C(0/0,-8,Loyalty)}:name(-8: Emblem: "{1}{B}, sacrifice a creature: Draw X and gain X life") emblem transforms((,newability[{1}{B}{S(creature|myBattlefield}:draw:storedpower && life:storedpower])) forever dontremove +auto={C(0/0,-8,Loyalty)}:name(-8: Emblem: "{1}{B}, sacrifice a creature: Draw X and gain X life") emblem transforms((,newability[{1}{B}{S(creature|myBattlefield)}:draw:storedpower && life:storedpower])) forever dontremove text=+2: Each opponent loses 1 life. You gain life equal to the life lost this way. -- -2: Create a 5/5 black Demon creature token with flying. You lose 2 life. -- -8: You get an emblem with "{1}{B}, Sacrifice a creature: You gain X life and draw X cards, where X is the sacrificed creature's power." -- Ob Nixilis of the Black Oath can be your commander. mana={3}{B}{B} type=Legendary Planeswalker @@ -2729,7 +2729,7 @@ subtype=Teferi [card] name=Teferi, Master of Time auto=counter(0/0,3,loyalty) -auto={C(0/0,1,Loyalty)}:name(+1: Draw a card and discard one) draw:1 controller && transforms((,newability[target(*|myhand) reject])) oneshot +auto={C(0/0,1,Loyalty)}:name(+1: Draw a card and discard one) _LOOT_ auto={C(0/0,-3,Loyalty)}:name(-3: Target creature you don't control phases out) target(creature|opponentBattlefield) phaseout auto={C(0/0,-10,Loyalty)}:name(-10: Take two extra turns) turns:+2 controller text=You may activate loyalty abilities of Teferi, Master of Time on any player's turn any time you could cast an instant. -- +1: Draw a card, then discard a card. -- −3: Target creature you don't control phases out. (Treat it and anything attached to it as though they don't exist until its controller's next turn.) -- −10: Take two extra turns after this one. @@ -2864,7 +2864,7 @@ name=Tezzeret, Cruel Machinist auto=counter(0/0,4,loyalty) auto={C(0/0,1,Loyalty)}:name(+1: Draw a card) draw:1 controller auto={C(0/0,0,Loyalty)}:name(+0: Target artifact becomes 5/5) target(artifact) transforms((Artifact Creature,setpower=5,settoughness=5)) uynt -auto={C(0/0,-7,Loyalty)}:name(-7: Manifest any number of cards form your hand) manifest notatarget(*|myHand) and!( transforms((Artifact Creature,setpower=5,settoughness=5) forever )! +auto={C(0/0,-7,Loyalty)}:name(-7: Manifest any number of cards form your hand) manifest notatarget(*|myHand) and!( transforms((Artifact Creature,setpower=5,settoughness=5)) forever )! text=+1: Draw a card. -- 0: Until your next turn, target artifact you control becomes a 5/5 creature in addition to its other types. -- −7: Put any number of cards from your hand onto the battlefield face down. They're 5/5 artifact creatures. mana={4}{U}{U} type=Legendary Planeswalker