From 52e3177ef2a94864f868f35903c63c18b7d36cdf Mon Sep 17 00:00:00 2001 From: valfieri Date: Fri, 10 Jul 2020 19:53:46 +0200 Subject: [PATCH] Added new features and triggers to game about tokens and counters, fixed and added new primitives. --- .../bin/Res/sets/primitives/borderline.txt | 932 ++++++++++++++---- projects/mtg/bin/Res/sets/primitives/mtg.txt | 6 +- .../bin/Res/sets/primitives/unsupported.txt | 465 --------- projects/mtg/include/AllAbilities.h | 77 +- projects/mtg/include/Counters.h | 8 +- projects/mtg/include/WEvent.h | 9 +- projects/mtg/src/AllAbilities.cpp | 156 ++- projects/mtg/src/Counters.cpp | 33 +- projects/mtg/src/MTGAbility.cpp | 69 +- projects/mtg/src/MTGRules.cpp | 4 +- projects/mtg/src/WEvent.cpp | 15 +- 11 files changed, 1042 insertions(+), 732 deletions(-) diff --git a/projects/mtg/bin/Res/sets/primitives/borderline.txt b/projects/mtg/bin/Res/sets/primitives/borderline.txt index d959ce633..9145d9ba8 100644 --- a/projects/mtg/bin/Res/sets/primitives/borderline.txt +++ b/projects/mtg/bin/Res/sets/primitives/borderline.txt @@ -2276,8 +2276,8 @@ toughness=2 [card] name=Aven Wind Guide abilities=flying, vigilance -auto=lord(token|mybattlefield) flying -auto=lord(token|mybattlefield) vigilance +auto=lord(*[token]|mybattlefield) flying +auto=lord(*[token]|mybattlefield) vigilance autograveyard={4}{W}{U}{E}:name(Embalm) clone and!( transforms((Zombie,removemc,white)) forever )! asSorcery text=Flying, vigilance -- Creature tokens you control have flying and vigilance. -- Embalm {4}{W}{U} ({4}{W}{U}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie Bird Warrior with no mana cost. Embalm only as a sorcery.) mana={2}{W}{U} @@ -9130,6 +9130,16 @@ type=Enchantment subtype=Aura [/card] [card] +name=Deepglow Skate +auto=target(*|battlefield) duplicatecounters(all) +text=When Deepglow Skate enters the battlefield, double the number of each kind of counter on any number of target permanents. +mana={4}{U} +type=Creature +subtype=Fish +power=3 +toughness=3 +[/card] +[card] name=Deeproot Champion auto=@movedTo(*[-creature]|mystack):counter(1/1,1) text=Whenever you cast a noncreature spell, put a +1/+1 counter on Deeproot Champion. @@ -10351,6 +10361,14 @@ mana={R}{R} type=Sorcery [/card] [card] +name=Doubling Season +auto=@tokencreated(*|myBattlefield):name(Double the token) all(trigger) clone options(notrigger) +auto=@counteradded(duplicateAll) from(*|myBattlefield):ability$!name(Double the counter) donothing!$ controller +text=If an effect would put one or more tokens onto the battlefield under your control, it puts twice that many of those tokens onto the battlefield instead. -- If an effect would place one or more counters on a permanent you control, it places twice that many of those counters on that permanent instead. +mana={4}{G} +type=Enchantment +[/card] +[card] name=Douser of Lights mana={4}{B} type=Creature @@ -17668,9 +17686,8 @@ toughness=2 [/card] [card] name=Heartless Act -#To remove just 3 counter is not supported ATM, so it removes all counters from target creature auto=choice name(Destroy):destroy target(creature[counter{notany}]) -auto=choice name(Remove three counters):removeallcounters(All) target(creature[counter{any}]) +auto=choice name(Remove three counters):target(creature) removesinglecountertype(1) && removesinglecountertype(1) && removesinglecountertype(1) text=Choose one — -- • Destroy target creature with no counters on it. -- • Remove up to three counters from target creature. mana={1}{B} type=Instant @@ -23920,7 +23937,7 @@ subtype=Equipment name=Mantle of the Wolf target=creature auto=4/4 -auto=@movedto(this|graveyard):token(Wolf,Man)*2 +auto=@movedto(this|graveyard):token(Wolf,Creature Wolf,2/2,green)*2 text=Enchant creature -- Enchanted creature gets +4/+4. -- When Mantle of the Wolf is put into a graveyard from the battlefield, create two 2/2 green Wolf creature tokens. mana={3}{G} type=Enchantment @@ -24404,7 +24421,6 @@ auto=choice name(Remove Quest counter) counter(0/0,-1,Quest) target(*|battlefiel auto=choice name(Remove Devotion counter) counter(0/0,-1,Devotion) target(*|battlefield) auto=choice name(Remove Blood counter) counter(0/0,-1,Blood) target(*|battlefield) auto=choice name(Remove Death counter) counter(0/0,-1,Death) target(*|battlefield) -auto=choice name(Remove Bounty counter) counter(0/0,-1,Bounty) target(*|battlefield) auto=choice name(Remove Age counter) counter(0/0,-1,Age) target(*|battlefield) auto=choice name(Remove Fuse counter) counter(0/0,-1,Fuse) target(*|battlefield) auto=choice name(Remove Unity counter) counter(0/0,-1,Unity) target(*|battlefield) @@ -29458,97 +29474,7 @@ toughness=3 [/card] [card] name=Power Conduit -auto={T}:if type(*[counter{1/1}]|battlefield)~morethan~0 then name(Remove 1/1 counter) counter(1/1,-1) target(*[counter{1/1}]|myBattlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Loyalty}]|battlefield)~morethan~0 then name(Remove Loyalty counter) counter(0/0,-1,Loyalty) target(*[counter{0/0.1.Loyalty}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Flying}]|battlefield)~morethan~0 then name(Remove Flying counter) counter(0/0,-1,Flying) target(*[counter{0/0.1.Flying}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Trample}]|battlefield)~morethan~0 then name(Remove Trample counter) counter(0/0,-1,Trample) target(*[counter{0/0.1.Trample}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.First Strike}]|battlefield)~morethan~0 then name(Remove First Strike counter) counter(0/0,-1,First Strike) target(*[counter{0/0.1.First Strike}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Vigilance}]|battlefield)~morethan~0 then name(Remove Vigilance counter) counter(0/0,-1,Vigilance) target(*[counter{0/0.1.Vigilance}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Deathtouch}]|battlefield)~morethan~0 then name(Remove Deathtouch counter) counter(0/0,-1,Deathtouch) target(*[counter{0/0.1.Deathtouch}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Lifelink}]|battlefield)~morethan~0 then name(Remove Lifelink counter) counter(0/0,-1,Lifelink) target(*[counter{0/0.1.Lifelink}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Flash}]|battlefield)~morethan~0 then name(Remove Flash counter) counter(0/0,-1,Flash) target(*[counter{0/0.1.Flash}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Hexproof}]|battlefield)~morethan~0 then name(Remove Hexproof counter) counter(0/0,-1,Hexproof) target(*[counter{0/0.1.Hexproof}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Double Strike}]|battlefield)~morethan~0 then name(Remove Double Strike counter) counter(0/0,-1,Double Strike) target(*[counter{0/0.1.Double Strike}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Charge}]|battlefield)~morethan~0 then name(Remove Charge counter) counter(0/0,-1,Charge) target(*[counter{0/0.1.Charge}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Verse}]|battlefield)~morethan~0 then name(Remove Verse counter) counter(0/0,-1,Verse) target(*[counter{0/0.1.Verse}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Gold}]|battlefield)~morethan~0 then name(Remove Gold counter) counter(0/0,-1,Gold) target(*[counter{0/0.1.Gold}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Storage}]|battlefield)~morethan~0 then name(Remove Storage counter) counter(0/0,-1,Storage) target(*[counter{0/0.1.Storage}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Slumber}]|battlefield)~morethan~0 then name(Remove Slumber counter) counter(0/0,-1,Slumber) target(*[counter{0/0.1.Slumber}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Time}]|battlefield)~morethan~0 then name(Remove Time counter) counter(0/0,-1,Time) target(*[counter{0/0.1.Time}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Coin}]|battlefield)~morethan~0 then name(Remove Coin counter) counter(0/0,-1,Coin) target(*[counter{0/0.1.Coin}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Reach}]|battlefield)~morethan~0 then name(Remove Reach counter) counter(0/0,-1,Reach) target(*[counter{0/0.1.Reach}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Flood}]|battlefield)~morethan~0 then name(Remove Flood counter) counter(0/0,-1,Flood) target(*[counter{0/0.1.Flood}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Menace}]|battlefield)~morethan~0 then name(Remove Menace counter) counter(0/0,-1,Menace) target(*[counter{0/0.1.Menace}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Lore}]|battlefield)~morethan~0 then name(Remove Lore counter) counter(0/0,-1,Lore) target(*[counter{0/0.1.Lore}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Fury}]|battlefield)~morethan~0 then name(Remove Fury counter) counter(0/0,-1,Fury) target(*[counter{0/0.1.Fury}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Bounty}]|battlefield)~morethan~0 then name(Remove Bounty counter) counter(0/0,-1,Bounty) target(*[counter{0/0.1.Bounty}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Egg}]|battlefield)~morethan~0 then name(Remove Egg counter) counter(0/0,-1,Egg) target(*[counter{0/0.1.Egg}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Level}]|battlefield)~morethan~0 then name(Remove Level counter) counter(0/0,-1,Level) target(*[counter{0/0.1.Level}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Doom}]|battlefield)~morethan~0 then name(Remove Doom counter) counter(0/0,-1,Doom) target(*[counter{0/0.1.Doom}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Eyeball}]|battlefield)~morethan~0 then name(Remove Eyeball counter) counter(0/0,-1,Eyeball) target(*[counter{0/0.1.Eyeball}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Brick}]|battlefield)~morethan~0 then name(Remove Brick counter) counter(0/0,-1,Brick) target(*[counter{0/0.1.Brick}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Magnet}]|battlefield)~morethan~0 then name(Remove Magnet counter) counter(0/0,-1,Magnet) target(*[counter{0/0.1.Magnet}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Hour}]|battlefield)~morethan~0 then name(Remove Hour counter) counter(0/0,-1,Hour) target(*[counter{0/0.1.Hour}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Foreshadow}]|battlefield)~morethan~0 then name(Remove Foreshadow counter) counter(0/0,-1,Foreshadow) target(*[counter{0/0.1.Foreshadow}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Redmana}]|battlefield)~morethan~0 then name(Remove Redmana counter) counter(0/0,-1,Redmana) target(*[counter{0/0.1.Redmana}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Growth}]|battlefield)~morethan~0 then name(Remove Growth counter) counter(0/0,-1,Growth) target(*[counter{0/0.1.Growth}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Knowledge}]|battlefield)~morethan~0 then name(Remove Knowledge counter) counter(0/0,-1,Knowledge) target(*[counter{0/0.1.Knowledge}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Landmark}]|battlefield)~morethan~0 then name(Remove Landmark counter) counter(0/0,-1,Landmark) target(*[counter{0/0.1.Landmark}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Wish}]|battlefield)~morethan~0 then name(Remove Wish counter) counter(0/0,-1,Wish) target(*[counter{0/0.1.Wish}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Ki}]|battlefield)~morethan~0 then name(Remove Ki counter) counter(0/0,-1,Ki) target(*[counter{0/0.1.Ki}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Filibuster}]|battlefield)~morethan~0 then name(Remove Filibuster counter) counter(0/0,-1,Filibuster) target(*[counter{0/0.1.Filibuster}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Page}]|battlefield)~morethan~0 then name(Remove Page counter) counter(0/0,-1,Page) target(*[counter{0/0.1.Page}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Muster}]|battlefield)~morethan~0 then name(Remove Muster counter) counter(0/0,-1,Muster) target(*[counter{0/0.1.Muster}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Quest}]|battlefield)~morethan~0 then name(Remove Quest counter) counter(0/0,-1,Quest) target(*[counter{0/0.1.Quest}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Devotion}]|battlefield)~morethan~0 then name(Remove Devotion counter) counter(0/0,-1,Devotion) target(*[counter{0/0.1.Devotion}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Blood}]|battlefield)~morethan~0 then name(Remove Blood counter) counter(0/0,-1,Blood) target(*[counter{0/0.1.Blood}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Death}]|battlefield)~morethan~0 then name(Remove Death counter) counter(0/0,-1,Death) target(*[counter{0/0.1.Death}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Bounty}]|battlefield)~morethan~0 then name(Remove Bounty counter) counter(0/0,-1,Bounty) target(*[counter{0/0.1.Bounty}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Age}]|battlefield)~morethan~0 then name(Remove Age counter) counter(0/0,-1,Age) target(*[counter{0/0.1.Age}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Fuse}]|battlefield)~morethan~0 then name(Remove Fuse counter) counter(0/0,-1,Fuse) target(*[counter{0/0.1.Fuse}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Unity}]|battlefield)~morethan~0 then name(Remove Unity counter) counter(0/0,-1,Unity) target(*[counter{0/0.1.Unity}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Strife}]|battlefield)~morethan~0 then name(Remove Strife counter) counter(0/0,-1,Strife) target(*[counter{0/0.1.Strife}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Ice}]|battlefield)~morethan~0 then name(Remove Ice counter) counter(0/0,-1,Ice) target(*[counter{0/0.1.Ice}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Payment}]|battlefield)~morethan~0 then name(Remove Payment counter) counter(0/0,-1,Payment) target(*[counter{0/0.1.Payment}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Spore}]|battlefield)~morethan~0 then name(Remove Spore counter) counter(0/0,-1,Spore) target(*[counter{0/0.1.Spore}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Infection}]|battlefield)~morethan~0 then name(Remove Infection counter) counter(0/0,-1,Infection) target(*[counter{0/0.1.Infection}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Paralyzation}]|battlefield)~morethan~0 then name(Remove Paralyzation counter) counter(0/0,-1,Paralyzation) target(*[counter{0/0.1.Paralyzation}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Essence}]|battlefield)~morethan~0 then name(Remove Essence counter) counter(0/0,-1,Essence) target(*[counter{0/0.1.Essence}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Blaze}]|battlefield)~morethan~0 then name(Remove Blaze counter) counter(0/0,-1,Blaze) target(*[counter{0/0.1.Blaze}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Wind}]|battlefield)~morethan~0 then name(Remove Wind counter) counter(0/0,-1,Wind) target(*[counter{0/0.1.Wind}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Healing}]|battlefield)~morethan~0 then name(Remove Healing counter) counter(0/0,-1,Healing) target(*[counter{0/0.1.Healing}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Study}]|battlefield)~morethan~0 then name(Remove Study counter) counter(0/0,-1,Study) target(*[counter{0/0.1.Study}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Bribe}]|battlefield)~morethan~0 then name(Remove Bribe counter) counter(0/0,-1,Bribe) target(*[counter{0/0.1.Bribe}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Tide}]|battlefield)~morethan~0 then name(Remove Tide counter) counter(0/0,-1,Tide) target(*[counter{0/0.1.Tide}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Pressure}]|battlefield)~morethan~0 then name(Remove Pressure counter) counter(0/0,-1,Pressure) target(*[counter{0/0.1.Pressure}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Depletion}]|battlefield)~morethan~0 then name(Remove Depletion counter) counter(0/0,-1,Depletion) target(*[counter{0/0.1.Depletion}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Hoofprint}]|battlefield)~morethan~0 then name(Remove Hoofprint counter) counter(0/0,-1,Hoofprint) target(*[counter{0/0.1.Hoofprint}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Credit}]|battlefield)~morethan~0 then name(Remove Credit counter) counter(0/0,-1,Credit) target(*[counter{0/0.1.Credit}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Javelin}]|battlefield)~morethan~0 then name(Remove Javelin counter) counter(0/0,-1,Javelin) target(*[counter{0/0.1.Javelin}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Feather}]|battlefield)~morethan~0 then name(Remove Feather counter) counter(0/0,-1,Feather) target(*[counter{0/0.1.Feather}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Treasure}]|battlefield)~morethan~0 then name(Remove Treasure counter) counter(0/0,-1,Treasure) target(*[counter{0/0.1.Treasure}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Matrix}]|battlefield)~morethan~0 then name(Remove Matrix counter) counter(0/0,-1,Matrix) target(*[counter{0/0.1.Matrix}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Vitality}]|battlefield)~morethan~0 then name(Remove Vitality counter) counter(0/0,-1,Vitality) target(*[counter{0/0.1.Vitality}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Petal}]|battlefield)~morethan~0 then name(Remove Petal counter) counter(0/0,-1,Petal) target(*[counter{0/0.1.Petal}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Eon}]|battlefield)~morethan~0 then name(Remove Eon counter) counter(0/0,-1,Eon) target(*[counter{0/0.1.Eon}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Winch}]|battlefield)~morethan~0 then name(Remove Winch counter) counter(0/0,-1,Winch) target(*[counter{0/0.1.Winch}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Mine}]|battlefield)~morethan~0 then name(Remove Mine counter) counter(0/0,-1,Mine) target(*[counter{0/0.1.Mine}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Divinity}]|battlefield)~morethan~0 then name(Remove Divinity counter) counter(0/0,-1,Divinity) target(*[counter{0/0.1.Divinity}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Theft}]|battlefield)~morethan~0 then name(Remove Theft counter) counter(0/0,-1,Theft) target(*[counter{0/0.1.Theft}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Fate}]|battlefield)~morethan~0 then name(Remove Fate counter) counter(0/0,-1,Fate) target(*[counter{0/0.1.Fate}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Shield}]|battlefield)~morethan~0 then name(Remove Shield counter) counter(0/0,-1,Shield) target(*[counter{0/0.1.Shield}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Plague}]|battlefield)~morethan~0 then name(Remove Plague counter) counter(0/0,-1,Plague) target(*[counter{0/0.1.Plague}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Isolation}]|battlefield)~morethan~0 then name(Remove Isolation counter) counter(0/0,-1,Isolation) target(*[counter{0/0.1.Isolation}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Shell}]|battlefield)~morethan~0 then name(Remove Shell counter) counter(0/0,-1,Shell) target(*[counter{0/0.1.Shell}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Wage}]|battlefield)~morethan~0 then name(Remove Wage counter) counter(0/0,-1,Wage) target(*[counter{0/0.1.Wage}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Corpse}]|battlefield)~morethan~0 then name(Remove Corpse counter) counter(0/0,-1,Corpse) target(*[counter{0/0.1.Corpse}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Hourglass}]|battlefield)~morethan~0 then name(Remove Hourglass counter) counter(0/0,-1,Hourglass) target(*[counter{0/0.1.Hourglass}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Velocity}]|battlefield)~morethan~0 then name(Remove Velocity counter) counter(0/0,-1,Velocity) target(*[counter{0/0.1.Velocity}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Pain}]|battlefield)~morethan~0 then name(Remove Pain counter) counter(0/0,-1,Pain) target(*[counter{0/0.1.Pain}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Currency}]|battlefield)~morethan~0 then name(Remove Currency counter) counter(0/0,-1,Currency) target(*[counter{0/0.1.Currency}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Trap}]|battlefield)~morethan~0 then name(Remove Trap counter) counter(0/0,-1,Trap) target(*[counter{0/0.1.Trap}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Hatchling}]|battlefield)~morethan~0 then name(Remove Hatchling counter) counter(0/0,-1,Hatchling) target(*[counter{0/0.1.Hatchling}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller -auto={T}:if type(*[counter{0/0.1.Pin}]|battlefield)~morethan~0 then name(Remove Pin counter) counter(0/0,-1,Pin) target(*[counter{0/0.1.Pin}]|battlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller +auto={T}:name(Remove a counter from permanent) removesinglecountertype(1) target(*[counter{any}]|myBattlefield) && ability$!name(Choose one) choice name(Put 1/1 counter) counter(1/1,1) target(creature) _ choice name(Put charge counter) counter(0/0,1,Charge) target(artifact)!$ controller text={T}, Remove a counter from a permanent you control: Choose one — -- • Put a charge counter on target artifact. -- • Put a +1/+1 counter on target creature. mana={2} type=Artifact @@ -31643,7 +31569,7 @@ toughness=2 [/card] [card] name=Renowned Weaponsmith -auto=if type(artifact|myhand,mybattlefield)~morethan~0 then add{C}{C} +auto={T}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{C}{C} aicode=activate moveTo(myBattlefield) target(*[Vial of Dragonfire;Heart-Piercer Bow]|myLibrary) auto={U}{T}:name(search card) reveal:plibrarycount revealzone(mylibrary) optionone name(choose card) target(<1>*[Vial of Dragonfire;Heart-Piercer Bow]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend text={T}: Add {2} to your mana pool. Spend this mana only to cast artifact spells or activate abilities of artifacts. -- {U}, {T}: Search your library for a card named Heart-Piercer Bow or Vial of Dragonfire, reveal it, put it into your hand, then shuffle your library. @@ -37902,97 +37828,8 @@ toughness=2 [card] name=Spinal Parasite abilities=sunburst -auto={C(1/1,-2)}:choice name(Remove 1/1 counter) counter(1/1,-1) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Loyalty counter) counter(0/0,-1,Loyalty) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Flying counter) counter(0/0,-1,Flying) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Trample counter) counter(0/0,-1,Trample) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove First Strike counter) counter(0/0,-1,First Strike) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Vigilance counter) counter(0/0,-1,Vigilance) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Deathtouch counter) counter(0/0,-1,Deathtouch) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Lifelink counter) counter(0/0,-1,Lifelink) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Flash counter) counter(0/0,-1,Flash) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Hexproof counter) counter(0/0,-1,Hexproof) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Double Strike counter) counter(0/0,-1,Double Strike) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Charge counter) counter(0/0,-1,Charge) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Verse counter) counter(0/0,-1,Verse) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Gold counter) counter(0/0,-1,Gold) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Storage counter) counter(0/0,-1,Storage) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Slumber counter) counter(0/0,-1,Slumber) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Time counter) counter(0/0,-1,Time) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Coin counter) counter(0/0,-1,Coin) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Reach counter) counter(0/0,-1,Reach) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Flood counter) counter(0/0,-1,Flood) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Menace counter) counter(0/0,-1,Menace) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Lore counter) counter(0/0,-1,Lore) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Fury counter) counter(0/0,-1,Fury) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Bounty counter) counter(0/0,-1,Bounty) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Egg counter) counter(0/0,-1,Egg) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Level counter) counter(0/0,-1,Level) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Doom counter) counter(0/0,-1,Doom) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Eyeball counter) counter(0/0,-1,Eyeball) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Brick counter) counter(0/0,-1,Brick) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Magnet counter) counter(0/0,-1,Magnet) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Hour counter) counter(0/0,-1,Hour) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Foreshadow counter) counter(0/0,-1,Foreshadow) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Redmana counter) counter(0/0,-1,Redmana) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Growth counter) counter(0/0,-1,Growth) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Knowledge counter) counter(0/0,-1,Knowledge) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Landmark counter) counter(0/0,-1,Landmark) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Wish counter) counter(0/0,-1,Wish) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Ki counter) counter(0/0,-1,Ki) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Filibuster counter) counter(0/0,-1,Filibuster) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Page counter) counter(0/0,-1,Page) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Muster counter) counter(0/0,-1,Muster) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Quest counter) counter(0/0,-1,Quest) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Devotion counter) counter(0/0,-1,Devotion) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Blood counter) counter(0/0,-1,Blood) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Death counter) counter(0/0,-1,Death) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Bounty counter) counter(0/0,-1,Bounty) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Age counter) counter(0/0,-1,Age) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Fuse counter) counter(0/0,-1,Fuse) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Unity counter) counter(0/0,-1,Unity) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Strife counter) counter(0/0,-1,Strife) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Ice counter) counter(0/0,-1,Ice) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Payment counter) counter(0/0,-1,Payment) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Spore counter) counter(0/0,-1,Spore) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Infection counter) counter(0/0,-1,Infection) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Paralyzation counter) counter(0/0,-1,Paralyzation) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Essence counter) counter(0/0,-1,Essence) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Blaze counter) counter(0/0,-1,Blaze) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Wind counter) counter(0/0,-1,Wind) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Healing counter) counter(0/0,-1,Healing) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Study counter) counter(0/0,-1,Study) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Bribe counter) counter(0/0,-1,Bribe) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Tide counter) counter(0/0,-1,Tide) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Pressure counter) counter(0/0,-1,Pressure) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Depletion counter) counter(0/0,-1,Depletion) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Hoofprint counter) counter(0/0,-1,Hoofprint) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Credit counter) counter(0/0,-1,Credit) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Javelin counter) counter(0/0,-1,Javelin) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Feather counter) counter(0/0,-1,Feather) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Treasure counter) counter(0/0,-1,Treasure) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Matrix counter) counter(0/0,-1,Matrix) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Vitality counter) counter(0/0,-1,Vitality) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Petal counter) counter(0/0,-1,Petal) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Eon counter) counter(0/0,-1,Eon) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Winch counter) counter(0/0,-1,Winch) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Mine counter) counter(0/0,-1,Mine) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Divinity counter) counter(0/0,-1,Divinity) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Theft counter) counter(0/0,-1,Theft) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Fate counter) counter(0/0,-1,Fate) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Shield counter) counter(0/0,-1,Shield) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Plague counter) counter(0/0,-1,Plague) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Isolation counter) counter(0/0,-1,Isolation) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Shell counter) counter(0/0,-1,Shell) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Wage counter) counter(0/0,-1,Wage) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Corpse counter) counter(0/0,-1,Corpse) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Hourglass counter) counter(0/0,-1,Hourglass) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Velocity counter) counter(0/0,-1,Velocity) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Pain counter) counter(0/0,-1,Pain) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Currency counter) counter(0/0,-1,Currency) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Trap counter) counter(0/0,-1,Trap) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Hatchling counter) counter(0/0,-1,Hatchling) target(*|battlefield) -auto={C(1/1,-2)}:choice name(Remove Pin counter) counter(0/0,-1,Pin) target(*|battlefield) +auto=counter(1/1,sunburst) +auto={C(1/1,-2)}:name(Remove a counter from permanent) removesinglecountertype(1) target(*[counter{any}]|myBattlefield) text=Sunburst (This enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.) -- Remove two +1/+1 counters from Spinal Parasite: Remove a counter from target permanent. mana={5} type=Artifact Creature @@ -40621,7 +40458,7 @@ subtype=Teferi [/card] [card] name=Temmet, Vizier of Naktamun -auto=@combat(attacking):target(token|mybattlefield) 1/1 ueot && unblockable ueot +auto=@combat(attacking):target(*[token]|mybattlefield) 1/1 ueot && unblockable ueot autograveyard={3}{W}{U}{E}:name(Embalm) clone and!( transforms((Zombie,removemc,white)) forever )! asSorcery text=At the beginning of combat on your turn, target creature token you control gets +1/+1 until end of turn and can't be blocked this turn. -- Embalm {3}{W}{U} ({3}{W}{U}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie Human Cleric with no mana cost. Embalm only as a sorcery.) mana={W}{U} @@ -43200,7 +43037,7 @@ toughness=8 [/card] [card] name=Ulamog's Despoiler -auto=if type(*|opponentexile)~morethan~1 then may target(<2>*|opponentexile) moveto(opponentgraveyard) && counter(1/1,4) all(this) +auto=if type(*|opponentexile)~morethan~1 then may target(<2>*|opponentexile) moveto(ownergraveyard) && counter(1/1,4) all(this) text=As Ulamog's Despoiler enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, Ulamog's Despoiler enters the battlefield with four +1/+1 counters on it. mana={6} type=Creature @@ -43209,6 +43046,17 @@ power=5 toughness=5 [/card] [card] +name=Ulamog's Nullifier +abilities=devoid,flash,flying +auto=if type(*|opponentexile)~morethan~1 then may target(<2>*|opponentexile) moveto(ownergraveyard) && ability$!name(Counter spell) target(*|stack) fizzle!$ controller +text=Devoid (This card has no color.) -- Flash -- Flying -- When Ulamog's Nullifier enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, counter target spell. +mana={2}{U}{B} +type=Creature +subtype=Eldrazi Processor +power=2 +toughness=3 +[/card] +[card] name=Umezawa's Charm auto=choice target(creature) 2/2 ueot auto=choice target(creature) -1/-1 ueot @@ -43481,6 +43329,14 @@ type=Enchantment subtype=Aura [/card] [card] +name=Unifying Theory +auto=@movedTo(*|mystack):ability$!name(Pay 2) pay[[{2}]] draw:2!$ controller +auto=@movedTo(*|opponentstack):ability$!name(Pay 2) pay[[{2}]] draw:2!$ opponent +text=Whenever a player casts a spell, that player may pay {2}. If the player does, he or she draws a card. +mana={1}{U} +type=Enchantment +[/card] +[card] name=Universal Automaton abilities=changeling text=Changeling (This card is every creature type.) @@ -43508,6 +43364,46 @@ mana={1}{B} type=Instant [/card] [card] +name=Unliving Psychopath +auto={B}:1/-1 ueot +auto=this(power=1) {B}{T}:destroy target(creature[power<1]) +auto=this(power=2) {B}{T}:destroy target(creature[power<2]) +auto=this(power=3) {B}{T}:destroy target(creature[power<3]) +auto=this(power=4) {B}{T}:destroy target(creature[power<4]) +auto=this(power=5) {B}{T}:destroy target(creature[power<5]) +auto=this(power=6) {B}{T}:destroy target(creature[power<6]) +auto=this(power=7) {B}{T}:destroy target(creature[power<7]) +auto=this(power=8) {B}{T}:destroy target(creature[power<8]) +auto=this(power=9) {B}{T}:destroy target(creature[power<9]) +auto=this(power=10) {B}{T}:destroy target(creature[power<10]) +auto=this(power=11) {B}{T}:destroy target(creature[power<11]) +auto=this(power=12) {B}{T}:destroy target(creature[power<12]) +auto=this(power=13) {B}{T}:destroy target(creature[power<13]) +auto=this(power=14) {B}{T}:destroy target(creature[power<14]) +auto=this(power=15) {B}{T}:destroy target(creature[power<15]) +auto=this(power=16) {B}{T}:destroy target(creature[power<16]) +auto=this(power=17) {B}{T}:destroy target(creature[power<17]) +auto=this(power=18) {B}{T}:destroy target(creature[power<18]) +auto=this(power=19) {B}{T}:destroy target(creature[power<19]) +auto=this(power=20) {B}{T}:destroy target(creature[power<20]) +text={B}: Unliving Psychopath gets +1/-1 until end of turn. -- {B}, {T}: Destroy target creature with power less than Unliving Psychopath's power. +mana={2}{B}{B} +type=Creature +subtype=Zombie Assassin +power=0 +toughness=4 +[/card] +[card] +name=Unnatural Aggression +abilities=devoid +target=creature|mybattlefield +auto=transforms((,newability[target(creature|opponentbattlefield) dynamicability && exiledeath ueot])) ueot +restriction=type(creature|opponentbattlefield)~morethan~0 +text=Devoid (This card has no color.) -- Target creature you control fights target creature an opponent controls. If the creature an opponent controls would die this turn, exile it instead. +mana={2}{G} +type=Instant +[/card] +[card] name=Unquenchable Thirst target=creature auto=aslongas(Desert|mybattlefield,myGraveyard) tap @@ -43529,6 +43425,26 @@ power=2 toughness=3 [/card] [card] +name=Unsettled Mariner +abilities=changeling +auto=@movedto(*|opponentstack):target(*|opponentstack) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) oneshot +text=Changeling (This card is every creature type.) -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. +mana={W}{U} +type=Creature +subtype=Shapeshifter +power=2 +toughness=2 +[/card] +[card] +name=Unstable Footing +#MISSING: Damage can't be prevented is not supported ATM +kicker={3}{R} +auto=kicker damage:5 target(player) +text=Kicker {3}{R} (You may pay an additional {3}{R} as you cast this spell.) -- Damage can't be prevented this turn. If Unstable Footing was kicked, it deals 5 damage to target player. +mana={R} +type=Instant +[/card] +[card] name=Unsubstantiate auto=choice name(Return target creature) target(creature|battlefield) moveTo(ownerHand) auto=choice name(Return target spell) target(*[-land]|stack) fizzleto(hand) @@ -43537,6 +43453,13 @@ mana={1}{U} type=Instant [/card] [card] +name=Untaidake, the Cloud Keeper +auto=tap(noevent) +auto={T}{L:2}:if type(*[legendary]|myhand)~morethan~0 then add{2} +text=Untaidake, the Cloud Keeper enters the battlefield tapped. -- {T}, Pay 2 life: Add {2} to your mana pool. Spend this mana only to cast legendary spells. +type=Legendary Land +[/card] +[card] name=Untamed Kavu abilities=vigilance, trample kicker={3} @@ -43569,6 +43492,17 @@ mana={2}{U} type=Instant [/card] [card] +name=Urborg Panther +auto={B}{S}:destroy target(creature[blocking]) +auto={S(*[Feral Shadow|mybattlefield)}{S(*[Breathstealer]|mybattlefield)}{S(*[Urborg Panther]|mybattlefield)}:name(search card) reveal:plibrarycount optionone name(choose card) target(*[Spirit of the Night]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield))! afterrevealedend revealend +text={B}, Sacrifice Urborg Panther: Destroy target creature blocking Urborg Panther. -- Sacrifice a creature named Feral Shadow, a creature named Breathstealer, and Urborg Panther: Search your library for a card named Spirit of the Night and put that card onto the battlefield. Then shuffle your library. +mana={2}{B} +type=Creature +subtype=Nightstalker Cat +power=2 +toughness=2 +[/card] +[card] name=Urgoros, the Empty One abilities=flying auto=@combatdamaged(player) from(this):ability$!name(discard) reject notatarget(*|myhand)!$ @@ -43591,6 +43525,40 @@ power=2 toughness=2 [/card] [card] +name=Urza's Armor +auto=@damaged(controller):life:1 controller +text=If a source would deal damage to you, prevent 1 of that damage. +mana={6} +type=Artifact +[/card] +[card] +name=Urza's Bauble +aicode=name(look) activate name(look) phaseaction[upkeep once] draw:1 controller +auto={T}{S}:target(player) reveal:1 revealzone(opponenthand) optionone name(Look a card) target(<1>*|reveal) moveto(ownerhand) optiononeend afterrevealed transforms((,newability[phaseaction[upkeep once] draw:1 controller])) oneshot afterrevealedend revealend +text={T}, Sacrifice Urza's Bauble: Look at a card at random in target player's hand. You draw a card at the beginning of the next turn's upkeep. +mana={0} +type=Artifact +[/card] +[card] +name=Urza's Miter +auto=@movedTo(artifact|mygraveyard) from(mybattlefield):may pay({3}) draw:1 +text=Whenever an artifact you control is put into a graveyard from the battlefield, if it wasn't sacrificed, you may pay {3}. If you do, draw a card. +mana={3} +type=Artifact +[/card] +[card] +name=Urza's Rage +#MISSING: damage can't be prevented not supported ATM +target=creature,player +abilities=nofizzle +kicker={8}{R} +auto=damage:3 +auto=kicker damage:7 +text=Kicker {8}{R} (You may pay an additional {8}{R} as you cast this spell.) -- Urza's Rage can't be countered by spells or abilities. -- Urza's Rage deals 3 damage to target creature or player. If Urza's Rage was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented. +mana={2}{R} +type=Instant +[/card] +[card] name=Urza's Ruinous Blast auto=moveto(exile) all(*[-legendary;-land]) auto=Exile all nonland permanents that aren't legendary @@ -43639,7 +43607,7 @@ auto=@movedTo(mytgt|exile) from(battlefield):all(this) moveTo(myExile) auto=@movedTo(mytgt|library) from(battlefield):all(this) moveTo(myLibrary) auto=@movedTo(mytgt|sideboard) from(battlefield):all(this) moveTo(mySideboard) auto={9999}:equip -other={1}{WU}{R}{R name(Mutate) +other={1}{WU}{R}{R} name(Mutate) auto=transforms((,newability[@mutated(this):may castcard(normal) target(*[-creature;manacost<=3]|mygraveyard)])) auto=if paid(alternative) then name(Mutate Over) this(mutations<1) name(Mutate Over) choice name(Mutate Over) mutateover target(other creature[-human]|mybattlefield) auto=if paid(alternative) then name(Mutate Over) this(mutations<1) name(Mutate Under) choice name(Mutate Under) mutateunder target(other creature[-human]|mybattlefield) @@ -43794,6 +43762,15 @@ mana={4}{R} type=Sorcery [/card] [card] +name=Vanguard's Shield +auto={3}:equip +auto=teach(creature) 0/3 +text=Equipped creature gets +0/+3 and can block an additional creature. -- Equip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) +mana={2} +type=Artifact +subtype=Equipment +[/card] +[card] name=Vanquish the Weak target=creature[power<=3] auto=destroy @@ -43862,6 +43839,20 @@ power=4 toughness=4 [/card] [card] +name=Vedalken Engineer +auto={T}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{W}{W} +auto={T}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{G}{G} +auto={T}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{B}{B} +auto={T}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{R}{R} +auto={T}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{U}{U} +text={T}: Add two mana of any one color to your mana pool. Spend this mana only to cast artifact spells or activate abilities of artifacts. +mana={1}{U} +type=Creature +subtype=Vedalken Artificer +power=1 +toughness=1 +[/card] +[card] name=Vedalken Humiliator auto=@combat(attacking) source(this):restriction{aslongas(artifact|mybattlefield) lord(creature|opponentBattlefield) loseabilities && lord(creature|opponentBattlefield) transforms((,setpower=1,settoughness=1))) >2 ueot} text=Metalcraft — Whenever Vedalken Humiliator attacks, if you control three or more artifacts, creatures your opponents control lose all abilities and have base power and toughness 1/1 until end of turn. @@ -43882,6 +43873,24 @@ power=2 toughness=1 [/card] [card] +name=Vedalken Plotter +auto=target(land|opponentbattlefield) moveto(mybattlefield) && ability$!name(Exchange control) target(land|myBattlefield) moveto(opponentbattlefield)!$ controller +text=When Vedalken Plotter enters the battlefield, exchange control of target land you control and target land an opponent controls. +mana={2}{U} +type=Creature +subtype=Vedalken Wizard +power=1 +toughness=1 +[/card] +[card] +name=Veiled Crocodile +auto=aslongas(*|myhand) transforms((Crocodile Creature,setpower=4,settoughness=4)) forever all(this) <1 +auto=aslongas(*|opponenthand) transforms((Crocodile Creature,setpower=4,settoughness=4)) forever all(this) <1 +text=When a player has no cards in hand, if Veiled Crocodile is an enchantment, Veiled Crocodile becomes a 4/4 Crocodile creature. +mana={2}{U} +type=Enchantment +[/card] +[card] name=Veiled Shade auto={1}{B}:1/1 ueot text={1}{B}: Veiled Shade gets +1/+1 until end of turn. @@ -43913,6 +43922,17 @@ power=4 toughness=4 [/card] [card] +name=Venarian Gold +target=creature +auto=counter(0/0,x,Sleep) +auto=@each targetController upkeep:counter(0/0,-1,Sleep) +auto=transforms((,newability[tap(noevent)],newability[this(counter{0/0.1.Sleep)}>0) doesnotuntap])) forever +text=Enchant creature -- When Venarian Gold enters the battlefield, tap enchanted creature and put X sleep counters on it. -- Enchanted creature doesn't untap during its controller's untap step if it has a sleep counter on it. -- At the beginning of the upkeep of enchanted creature's controller, remove a sleep counter from that creature. +mana={X}{U}{U} +type=Enchantment +subtype=Aura +[/card] +[card] name=Vengeant Vampire abilities=lifelink auto=@movedto(this|graveyard) from(battlefield):destroy target(creature|opponentBattlefield) && life:4 controller @@ -43935,6 +43955,61 @@ power=1 toughness=1 [/card] [card] +name=Vengeful Dreams +auto=if type(*|myHand)~morethan~0 then choice ability$!name(X=1) target(*|myhand) reject!$ controller && moveto(exile) target(creature[attacking]) +auto=if type(*|myHand)~morethan~1 then choice ability$!name(X=2) target(<2>*|myhand) reject!$ controller && moveto(exile) target(<2>creature[attacking]) +auto=if type(*|myHand)~morethan~2 then choice ability$!name(X=3) target(<3>*|myhand) reject!$ controller && moveto(exile) target(<3>creature[attacking]) +auto=if type(*|myHand)~morethan~3 then choice ability$!name(X=4) target(<4>*|myhand) reject!$ controller && moveto(exile) target(<4>creature[attacking]) +auto=if type(*|myHand)~morethan~4 then choice ability$!name(X=5) target(<5>*|myhand) reject!$ controller && moveto(exile) target(<5>creature[attacking]) +auto=if type(*|myHand)~morethan~5 then choice ability$!name(X=6) target(<6>*|myhand) reject!$ controller && moveto(exile) target(<6>creature[attacking]) +auto=if type(*|myHand)~morethan~6 then choice ability$!name(X=7) target(<7>*|myhand) reject!$ controller && moveto(exile) target(<7>creature[attacking]) +auto=if type(*|myHand)~morethan~7 then choice ability$!name(X=8) target(<8>*|myhand) reject!$ controller && moveto(exile) target(<8>creature[attacking]) +auto=if type(*|myHand)~morethan~8 then choice ability$!name(X=9) target(<9>*|myhand) reject!$ controller && moveto(exile) target(<9>creature[attacking]) +auto=if type(*|myHand)~morethan~9 then choice ability$!name(X=10) target(<10>*|myhand) reject!$ controller && moveto(exile) target(<10>creature[attacking]) +auto=if type(*|myHand)~morethan~10 then choice ability$!name(X=11) target(<11>*|myhand) reject!$ controller && moveto(exile) target(<11>creature[attacking]) +auto=if type(*|myHand)~morethan~11 then choice ability$!name(X=12) target(<12>*|myhand) reject!$ controller && moveto(exile) target(<12>creature[attacking]) +auto=if type(*|myHand)~morethan~12 then choice ability$!name(X=13) target(<13>*|myhand) reject!$ controller && moveto(exile) target(<13>creature[attacking]) +auto=if type(*|myHand)~morethan~13 then choice ability$!name(X=14) target(<14>*|myhand) reject!$ controller && moveto(exile) target(<14>creature[attacking]) +auto=if type(*|myHand)~morethan~14 then choice ability$!name(X=15) target(<15>*|myhand) reject!$ controller && moveto(exile) target(<15>creature[attacking]) +auto=if type(*|myHand)~morethan~15 then choice ability$!name(X=16) target(<16>*|myhand) reject!$ controller && moveto(exile) target(<16>creature[attacking]) +auto=if type(*|myHand)~morethan~16 then choice ability$!name(X=17) target(<17>*|myhand) reject!$ controller && moveto(exile) target(<17>creature[attacking]) +auto=if type(*|myHand)~morethan~17 then choice ability$!name(X=18) target(<18>*|myhand) reject!$ controller && moveto(exile) target(<18>creature[attacking]) +auto=if type(*|myHand)~morethan~18 then choice ability$!name(X=19) target(<19>*|myhand) reject!$ controller && moveto(exile) target(<19>creature[attacking]) +auto=if type(*|myHand)~morethan~19 then choice ability$!name(X=20) target(<20>*|myhand) reject!$ controller && moveto(exile) target(<20>creature[attacking]) +text=As an additional cost to cast Vengeful Dreams, discard X cards. -- Exile X target attacking creatures. +mana={W}{W} +type=Instant +[/card] +[card] +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 +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 converted mana cost to target creature or player. -- Exile Vengeful Rebirth. +mana={4}{R}{G} +type=Sorcery +[/card] +[card] name=Vengeful Warchief auto=@lifelostof(player) restriction{compare(thatmuch)~equalto~compare(lifelost)} turnlimited:1/1 text=Whenever you lose life for the first time each turn, put a +1/+1 counter on Vengeful Warchief. (Damage causes loss of life.) @@ -43966,6 +44041,17 @@ power=3 toughness=3 [/card] [card] +name=Venser, Shaper Savant +abilities=flash +auto=target(*) moveto(ownerhand) +text=Flash (You may cast this spell any time you could cast an instant.) -- When Venser, Shaper Savant enters the battlefield, return target spell or permanent to its owner's hand. +mana={2}{U}{U} +type=Legendary Creature +subtype=Human Wizard +power=2 +toughness=2 +[/card] +[card] name=Venser's Diffusion target=*[-land] auto=moveTo(ownerhand) @@ -43974,6 +44060,30 @@ mana={2}{U} type=Instant [/card] [card] +name=Verdant Confluence +aicode=activate moveTo(myBattlefield) and!(tap(noevent))! target(<3>land[basic]|myLibrary) +auto=choice name(Choose 1, 1, 1) target(<3>*[creature]) counter(1/1,2) +auto=choice name(Choose 1, 1, 2) target(<2>*[creature]) counter(1/1,2) && ability$!name(Return permanent to hand) moveto(myhand) target(*[-sorcery;-instant]|mygraveyard)!$ controller +auto=choice name(Choose 1, 2, 2) target(*[creature]) counter(1/1,2) && ability$!name(Return 2 permanents to hand) moveto(myhand) target(<2>*[-sorcery;-instant]|mygraveyard)!$ controller +auto=choice name(Choose 1, 2, 3) target(*[creature]) counter(1/1,2) && ability$!name(Return permanent to hand) moveto(myhand) target(*[-sorcery;-instant]|mygraveyard)!$ controller && ability$!name(Reveal) reveal:plibrarycount optionone name(choose land card) target(<1>land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend!$ controller +auto=choice name(Choose 1, 3, 3) target(*[creature]) counter(1/1,2) && ability$!name(Reveal) reveal:plibrarycount optionone name(choose 2 land cards) target(<2>land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend!$ controller +auto=choice name(Choose 2, 2, 2) target(<3>*[-sorcery;-instant]|mygraveyard) moveto(myhand) +auto=choice name(Choose 2, 2, 3) target(<2>*[-sorcery;-instant]|mygraveyard) moveto(myhand) && ability$!name(Reveal) reveal:plibrarycount optionone name(choose land card) target(<1>land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend!$ controller +auto=choice name(Choose 2, 3, 3) target(*[-sorcery;-instant]|mygraveyard) moveto(myhand) && ability$!name(Reveal) reveal:plibrarycount optionone name(choose 2 land cards) target(<2>land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend!$ controller +auto=choice name(Choose 3, 3, 3) reveal:plibrarycount optionone name(choose 3 land cards) target(<3>land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(shuffle)! )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend +text=Choose three. You may choose the same mode more than once. -- • Put two +1/+1 counters on target creature. -- • Return target permanent card from your graveyard to your hand. -- • Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. +mana={4}{G}{G} +type=Sorcery +[/card] +[card] +name=Verdant Crescendo +aicode=activate target(Nissa, Nature's Artisan|mylibrary,mygraveyard) moveto(myhand) && shuffle +auto=reveal:plibrarycount optionone name(choose card) target(land[basic]|reveal) moveto(ownerlibrary) and!( becomes(tobecast) ueot )! optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) )! optiontwoend afterrevealed all(tobecast|mylibrary) moveto(ownerlibrary) and!(moveTo(myBattlefield) and!(tap(noevent))!)! afterrevealedend revealend && ability$!name(Search Nissa, Nature's Artisan) moveto(myhand) target(Nissa, Nature's Artisan|mylibrary,mygraveyard) && shuffle!$ controller +text=Search your library for a basic land card and put it onto the battlefield tapped. Search your library and graveyard for a card named Nissa, Nature's Artisan, reveal it, and put it into your hand. Then shuffle your library. +mana={3}{G} +type=Sorcery +[/card] +[card] name=Verdant Rebirth target=creature auto=@movedto(ownergraveyard) from(ownerbattlefield):moveto(ownerhand) ueot @@ -44040,6 +44150,16 @@ power=2 toughness=1 [/card] [card] +name=Vexing Devil +auto=ability$!name(Choose one) choice name(Damage 4) damage:4 && sacrifice notatarget(Vexing Devil|opponentbattlefield) _ choice name(Donothing) donothing)!$ opponent +text=When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to him or her. If a player does, sacrifice Vexing Devil. +mana={R} +type=Creature +subtype=Devil +power=4 +toughness=3 +[/card] +[card] name=Vexing Gull abilities=flying,flash text=Flash -- Flying @@ -44113,6 +44233,32 @@ power=4 toughness=1 [/card] [card] +name=Vicious Betrayal +auto=if type(*[creature]|myBattlefield)~morethan~0 then choice name(Sacrifice 1 creature) ability$!sacrifice notatarget(creature|mybattlefield)!$ controller && target(creature) 2/2 ueot +auto=if type(*[creature]|myBattlefield)~morethan~1 then choice name(Sacrifice 2 creatures) ability$!sacrifice notatarget(<2>creature|mybattlefield)!$ controller && target(creature) 4/4 ueot +auto=if type(*[creature]|myBattlefield)~morethan~2 then choice name(Sacrifice 3 creatures) ability$!sacrifice notatarget(<3>creature|mybattlefield)!$ controller && target(creature) 6/6 ueot +auto=if type(*[creature]|myBattlefield)~morethan~3 then choice name(Sacrifice 4 creatures) ability$!sacrifice notatarget(<4>creature|mybattlefield)!$ controller && target(creature) 8/8 ueot +auto=if type(*[creature]|myBattlefield)~morethan~4 then choice name(Sacrifice 5 creatures) ability$!sacrifice notatarget(<5>creature|mybattlefield)!$ controller && target(creature) 10/10 ueot +auto=if type(*[creature]|myBattlefield)~morethan~5 then choice name(Sacrifice 6 creatures) ability$!sacrifice notatarget(<6>creature|mybattlefield)!$ controller && target(creature) 12/12 ueot +auto=if type(*[creature]|myBattlefield)~morethan~6 then choice name(Sacrifice 7 creatures) ability$!sacrifice notatarget(<7>creature|mybattlefield)!$ controller && target(creature) 14/14 ueot +auto=if type(*[creature]|myBattlefield)~morethan~7 then choice name(Sacrifice 8 creatures) ability$!sacrifice notatarget(<8>creature|mybattlefield)!$ controller && target(creature) 16/16 ueot +auto=if type(*[creature]|myBattlefield)~morethan~8 then choice name(Sacrifice 9 creatures) ability$!sacrifice notatarget(<9>creature|mybattlefield)!$ controller && target(creature) 18/18 ueot +auto=if type(*[creature]|myBattlefield)~morethan~9 then choice name(Sacrifice 10 creatures) ability$!sacrifice notatarget(<10>creature|mybattlefield)!$ controller && target(creature) 20/20 ueot +auto=if type(*[creature]|myBattlefield)~morethan~10 then choice name(Sacrifice 11 creatures) ability$!sacrifice notatarget(<11>creature|mybattlefield)!$ controller && target(creature) 22/22 ueot +auto=if type(*[creature]|myBattlefield)~morethan~11 then choice name(Sacrifice 12 creatures) ability$!sacrifice notatarget(<12>creature|mybattlefield)!$ controller && target(creature) 24/24 ueot +auto=if type(*[creature]|myBattlefield)~morethan~12 then choice name(Sacrifice 13 creatures) ability$!sacrifice notatarget(<13>creature|mybattlefield)!$ controller && target(creature) 26/26 ueot +auto=if type(*[creature]|myBattlefield)~morethan~13 then choice name(Sacrifice 14 creatures) ability$!sacrifice notatarget(<14>creature|mybattlefield)!$ controller && target(creature) 28/28 ueot +auto=if type(*[creature]|myBattlefield)~morethan~14 then choice name(Sacrifice 15 creatures) ability$!sacrifice notatarget(<15>creature|mybattlefield)!$ controller && target(creature) 30/30 ueot +auto=if type(*[creature]|myBattlefield)~morethan~15 then choice name(Sacrifice 16 creatures) ability$!sacrifice notatarget(<16>creature|mybattlefield)!$ controller && target(creature) 32/32 ueot +auto=if type(*[creature]|myBattlefield)~morethan~16 then choice name(Sacrifice 17 creatures) ability$!sacrifice notatarget(<17>creature|mybattlefield)!$ controller && target(creature) 34/34 ueot +auto=if type(*[creature]|myBattlefield)~morethan~17 then choice name(Sacrifice 18 creatures) ability$!sacrifice notatarget(<18>creature|mybattlefield)!$ controller && target(creature) 36/36 ueot +auto=if type(*[creature]|myBattlefield)~morethan~18 then choice name(Sacrifice 19 creatures) ability$!sacrifice notatarget(<19>creature|mybattlefield)!$ controller && target(creature) 38/38 ueot +auto=if type(*[creature]|myBattlefield)~morethan~19 then choice name(Sacrifice 20 creatures) ability$!sacrifice notatarget(<20>creature|mybattlefield)!$ controller && target(creature) 40/40 ueot +text=As an additional cost to cast Vicious Betrayal, sacrifice any number of creatures. -- Target creature gets +2/+2 until end of turn for each creature sacrificed this way. +mana={3}{B}{B} +type=Sorcery +[/card] +[card] name=Vicious Conquistador auto=@combat(attacking) source(this):life:-1 opponent text=Whenever Vicious Conquistador attacks, each opponent loses 1 life. @@ -44133,6 +44279,14 @@ mana={1}{B} type=Instant [/card] [card] +name=Victimize +target=<2>*[creature]|mygraveyard +auto=moveto(mybattlefield) and!(tap(noevent))! +text=Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped. +mana={2}{B}{S(*[creature]|mybattlefield)} +type=Sorcery +[/card] +[card] name=Victory Chimes auto=@each upkeep:untap auto={T}:target(player) add{c} @@ -44151,6 +44305,22 @@ power=3 toughness=3 [/card] [card] +name=View from Above +target=creature +auto=flying ueot +auto=if type(*[white]|mybattlefield)~morethan~0 then moveto(myhand) all(this) +text=Target creature gains flying until end of turn. If you control a white permanent, return View from Above to its owner's hand. +mana={1}{U} +type=Instant +[/card] +[card] +name=Vigil for the Lost +auto=@movedTo(creature|graveyard) from(mybattlefield):may pay({x}) name(Pay X) life:X controller +text=Whenever a creature you control dies, you may pay {X}. If you do, you gain X life. +mana={3}{W} +type=Enchantment +[/card] +[card] name=Vigilant Baloth abilities=vigilance text=Vigilance (Attacking doesn't cause this creature to tap.) @@ -44229,6 +44399,31 @@ power=1 toughness=3 [/card] [card] +name=Vintara Elephant +abilities=trample +auto={3}:-trample ueot +auto=foreach(land[-tapped]|opponentBattlefield) transforms((,newability[ability$!name(Pay 3) pay[[{3}]] name(Pay 3) notatarget(Vintara Elephant[trample]|opponentBattlefield) -trample ueot?donothing!$ opponent])) forever +text=Trample -- {3}: Vintara Elephant loses trample until end of turn. Any player may activate this ability. +mana={4}{G} +type=Creature +subtype=Elephant +power=4 +toughness=3 +[/card] +[card] +name=Violent Eruption +target=creature,player +auto=damage:1 +auto=damage:1 target(creature,player) +auto=ability$!name(damage) choice target(creature,player) damage:1!$ controller +auto=ability$!name(damage) choice target(creature,player) damage:1!$ controller +abilities=madness +autoexile=restriction{discarded} pay({1}{R}{R}) name(pay 1RR to cast) activate name(pay 1RR to cast) castcard(normal)?name(put in graveyard) moveto(ownergraveyard) +text=Violent Eruption deals 4 damage divided as you choose among any number of target creatures and/or players. -- Madness {1}{R}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.) +mana={1}{R}{R}{R} +type=Instant +[/card] +[card] name=Violent Impact target=artifact,land auto=destroy @@ -44250,6 +44445,15 @@ power=1 toughness=1 [/card] [card] +name=Virulent Wound +target=creature +auto=counter(-1/-1) +auto=transforms((,newability[@movedto(this|mygraveyard):alterpoison:1 controller])) ueot +text=Put a -1/-1 counter on target creature. When that creature dies this turn, its controller gets a poison counter. +mana={B} +type=Instant +[/card] +[card] name=Visage of Bolas auto=may moveto(myhand) target(Nicol Bolas, the Deceiver|mylibrary) auto={T}:Add{U} @@ -44260,6 +44464,15 @@ mana={4} type=Artifact [/card] [card] +name=Visions +target=player +aicode=activate moveto(targetedpersonshand) target(*|targetedpersonslibrary) +auto=name(Look 5 cards) reveal:5 revealzone(targetedpersonslibrary) optionone name(Look cards) target(<5>*|reveal) moveto(ownerhand) optiononeend optiontwo name(put back) target(<1>*|reveal) moveto(ownerlibrary) and!( all(*|reveal) moveto(ownerlibrary) and!(may shuffle)! )! optiontwoend revealend +text=Look at the top five cards of target player's library. You may then have that player shuffle that library. +mana={W} +type=Sorcery +[/card] +[card] name=Vitality Hunter abilities=lifelink auto=this(cantargetcard(*[-monstrous]) {X}{W}{W}:becomes(monstrous) forever && newability[counter(0/0,1,Lifelink) && (lifelink)forever target(creature)] @@ -44462,6 +44675,16 @@ power=1 toughness=3 [/card] [card] +name=Voice of Many +auto=if type(*[creature]|mybattlefield)~morethan~type(*[creature]|opponentbattlefield) then draw:1 controller +text=When Voice of Many enters the battlefield, draw a card for each opponent who controls fewer creatures than you. +mana={2}{G}{G} +type=Creature +subtype=Elf Druid +power=3 +toughness=3 +[/card] +[card] name=Void Beckoner abilities=deathtouch autohand=__CYCLING__({2}{B}) @@ -44474,6 +44697,19 @@ power=8 toughness=8 [/card] [card] +name=Void Maw +abilities=trample +auto=@movedto(creature|graveyard) from(battlefield):all(trigger[from]) moveto(ownerexile) +auto={0}:name(Target opponent creature) moveto(opponentgraveyard) target(creature|opponentexile) && 2/2 ueot all(this) +auto={0}:name(Target your creature) moveto(mygraveyard) target(creature|myexile) && 2/2 ueot all(this) +text=Trample -- If another creature would die, exile it instead. -- Put a card exiled with Void Maw into its owner's graveyard: Void Maw gets +2/+2 until end of turn. +mana={4}{B}{B} +type=Creature +subtype=Horror +power=4 +toughness=5 +[/card] +[card] name=Volatile Claws auto=all(creature|myBattlefield) 2/0 auto=all(creature|myBattlefield) transforms((allsubtypes)) @@ -44490,6 +44726,22 @@ mana={10}{R}{R} type=Sorcery [/card] [card] +name=Volcanic Vision +target=*[instant;sorcery]|mygraveyard +auto=moveto(myhand) && damage:manacost all(creature|opponentbattlefield) +auto=moveto(exile) all(this) +text=Return target instant or sorcery card from your graveyard to your hand. Volcanic Vision deals damage equal to that card's converted mana cost to each creature your opponents control. Exile Volcanic Vision. +mana={5}{R}{R} +type=Sorcery +[/card] +[card] +name=Volcanic Wind +auto=foreach(creature|mybattlefield) ability$!name(Damage) damage:1 target(creature)!$ controller +text=Volcanic Wind deals X damage divided as you choose among any number of target creatures, where X is the number of creatures on the battlefield as you cast Volcanic Wind. +mana={4}{R}{R} +type=Sorcery +[/card] +[card] name=Volley Veteran auto=damage:type:goblin:mybattlefield target(creature|opponentBattlefield) text=When Volley Veteran enters the battlefield, it deals damage to target creature an opponent controls equal to the number of Goblins you control. @@ -44500,6 +44752,20 @@ power=4 toughness=2 [/card] [card] +name=Volley of Boulders +target=creature,player +flashback={R}{R}{R}{R}{R}{R} +auto=damage:1 +auto=damage:1 target(creature,player) +auto=ability$!name(Damage) damage:1 target(creature,player)!$ controller +auto=ability$!name(Damage) damage:1 target(creature,player)!$ controller +auto=ability$!name(Damage) damage:1 target(creature,player)!$ controller +auto=ability$!name(Damage) damage:1 target(creature,player)!$ controller +text=Volley of Boulders deals 6 damage divided as you choose among any number of target creatures and/or players. -- Flashback {R}{R}{R}{R}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) +mana={8}{R} +type=Sorcery +[/card] +[card] name=Volrath, the Shapestealer auto=@each my combatbegins:target(creature) counter(-1/-1) auto={1}:copy target(creature[counter{any}]) ueot @@ -44511,6 +44777,22 @@ power=7 toughness=5 [/card] [card] +name=Volrath's Dungeon +auto={L:5}:sacrifice myturnonly +auto=@each opponent upkeep:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto=@each opponent untap:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto=@each opponent draw:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto=@each opponent combatbegins:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto=@each opponent blockers:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto=@each opponent firstmain:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto=@each opponent endofturn:ability$!name(Pay 5 life) pay[[{L:5}]] name(Pay 5 life) sacrifice notatarget(Volrath's Dungeon|opponentBattlefield)?donothing!$ opponent +auto={D(*|myhand)}:name(Target player) moveto(mylibrary) target(*|myhand) asSorcery +auto={D(*|myhand)}:name(Target opponent) moveto(opponentlibrary) target(*|opponenthand) asSorcery +text=Pay 5 life: Destroy Volrath's Dungeon. Any player may activate this ability but only during his or her turn. -- Discard a card: Target player puts a card from his or her hand on top of his or her library. Activate this ability only any time you could cast a sorcery. +mana={2}{B}{B} +type=Enchantment +[/card] +[card] name=Voltaic Servant auto=@each my endofturn:untap target(artifact) text=At the beginning of your end step, untap target artifact. @@ -44577,6 +44859,16 @@ power=4 toughness=4 [/card] [card] +name=Voracious Vacuum +auto=target(creature) counter(1/1) +text=When this creature enters the battlefield, put a +1/+1 counter on target creature. +mana={3} +type=Host Artifact Creature +subtype=Construct +power=1 +toughness=1 +[/card] +[card] name=Voracious Vampire abilities=menace auto=target(vampire|myBattlefield)) 1/1 && menace ueot @@ -44589,7 +44881,7 @@ toughness=2 [/card] [card] name=Vorel of the Hull Clade -auto={G}{U}{T}: target(*[artifact;creature;land]) propagate +auto={G}{U}{T}:target(*[artifact;creature;land]) duplicatecounters(all) text={G}{U}, {T}: Double the number of each kind of counter on target artifact, creature, or land. mana={1}{G}{U} type=Legendary Creature @@ -44730,6 +45022,17 @@ mana={B}{B} type=Sorcery [/card] [card] +name=Wall of Corpses +abilties=defender +auto={B}:if type(Wall of Corpses[blocking]|mybattlefield)~morethan~0 then destroy target(creature[blocked]|opponentbattlefield) +text=Defender (This creature can't attack.) -- {B}, Sacrifice Wall of Corpses: Destroy target creature Wall of Corpses is blocking. +mana={1}{B} +type=Creature +subtype=Wall +power=0 +toughness=2 +[/card] +[card] name=Wall of Forgotten Pharaohs abilities=defender auto={T}{restriction type(desert|mybattlefield,mygraveyard)~morethan~0}:damage:1 target(player) @@ -44741,6 +45044,16 @@ power=0 toughness=4 [/card] [card] +name=Wall of Glare +abilities=defender +text=Defender (This creature can't attack.) -- Wall of Glare can block any number of creatures. +mana={1}{W} +type=Creature +subtype=Wall +power=0 +toughness=5 +[/card] +[card] name=Wall of Lost Thoughts abilities=defender auto=deplete:4 target(player) @@ -44809,6 +45122,17 @@ mana={4}{W} type=Sorcery [/card] [card] +name=Wandering Eye +abilities=flying +auto={0}:Reveal:type:*:opponenthand revealzone(opponenthand) revealtype(*|opponenthand) optionone target(*|reveal) moveto(opponenthand) optiononeend optiontwo name(Put Back) target(*|reveal) transforms((,newability[all(*|reveal) moveto(ownerhand)])) ueot optiontwoend revealend +text=Flying -- Players play with their hands revealed. +mana={2}{U} +type=Creature +subtype=Illusion +power=1 +toughness=3 +[/card] +[card] name=Wandermare auto=@movedto(creature[adventure]|mystack) from(mylibrary):counter(1/1,1) text=Whenever you cast a creature spell that has an Adventure, put a +1/+1 counter on Wandermare. (It doesn't need to have gone on the adventure first.) @@ -44829,6 +45153,13 @@ power=4 toughness=3 [/card] [card] +name=War Barge +auto={3}:target(creature) islandwalk ueot && transforms((,newability[@movedto(War Barge|graveyard) from(battlefield):bury all(this)])) forever +text={3}: Target creature gains islandwalk until end of turn. When War Barge leaves the battlefield this turn, destroy that creature. A creature destroyed this way can't be regenerated. +mana={4} +type=Artifact +[/card] +[card] name=War Screecher abilities=flying auto={5}{W}{T}:all(other creature|myBattlefield)) 1/1 @@ -44934,6 +45265,27 @@ mana={R} type=Sorcery [/card] [card] +name=Warmonger +auto={2}:damage:2 all(creature[-flying]) && damage:2 all(player) +auto=foreach(land[-tapped]|opponentBattlefield) transforms((,newability[ability$!name(Pay 2) pay[[{2}]] name(Pay 2) damage:2 all(creature[-flying]) && damage:2 all(player)?donothing!$ opponent])) forever +text={2}: Warmonger deals 1 damage to each creature without flying and each player. Any player may activate this ability. +mana={3}{R} +type=Creature +subtype=Minotaur Monger +power=3 +toughness=3 +[/card] +[card] +name=Warping Wail +auto=choice name(Exile creature with power 1 or less) target(creature[power<=1]) moveto(exile) +auto=choice name(Exile creature with toughness 1 or less) target(creature[toughness<=1]) moveto(exile) +auto=choice name(Counter sorcery) target(*[sorcery]|stack) fizzle +auto=choice name(Create Eldrazi Scion) token(Eldrazi Scion,Creature Eldrazi Scion,1/1) and!( transforms((,newability[{S}:Add{C}])) forever )! controller +text=({C} represents colorless mana.) -- Choose one — -- • Exile target creature with power or toughness 1 or less. -- • Counter target sorcery spell. -- • Put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {C} to your mana pool." +mana={1}{C} +type=Instant +[/card] +[card] name=Warrior abilities=trample,haste text=Trample, Haste @@ -45008,6 +45360,16 @@ power=3 toughness=4 [/card] [card] +name=Watcher in the Web +abilities=reach +text=Reach (This creature can block creatures with flying.) -- Watcher in the Web can block an additional seven creatures each combat. +mana={4}{G} +type=Creature +subtype=Spider +power=2 +toughness=5 +[/card] +[card] name=Watcher of the Roost abilities=flying facedown={3} @@ -45123,6 +45485,15 @@ power=2 toughness=2 [/card] [card] +name=Wax // Wane +other={W} name(Wane) +auto=ifnot paid(alternative) then target(creature) 2/2 ueot +auto=if paid(alternative) then target(enchantment) destroy +text=Target creature gets +2/+2 until end of turn. // Destroy target enchantment. +mana={G} +type=Instant +[/card] +[card] name=Wayward Swordtooth abilities=cantattack,cantblock auto=maxPlay(land)+1 @@ -45153,6 +45524,17 @@ mana={R} type=Enchantment [/card] [card] +name=Wear // Tear +other={W} name(Tear) +auto=if paid(alternative) then destroy target(enchantment) +kicker={W} +auto=kicker ifnot paid(alternative) then destroy target(enchantment) +auto=ifnot paid(alternative) then destroy target(artifact) +text=Destroy target artifact. // Destroy target enchantment. -- Fuse (You may cast one or both halves of this card from your hand.) +mana={1}{R} +type=Instant +[/card] +[card] name=Weaselback Redcap auto={1}{R}:2/0 ueot text={1}{R}: Weaselback Redcap gets +2/+0 until end of turn. @@ -45223,6 +45605,14 @@ toughness=* color=blue,red [/card] [card] +name=Well of Knowledge +auto=@each my draw:may pay[[{2}]] draw:2 controller +auto=@each opponent draw:ability$!name(pay 2) pay[[{2}]] name(pay 2 mana) draw:1?donothing!$ opponent +text={2}: Draw a card. Any player may activate this ability but only during his or her draw step. +mana={3} +type=Artifact +[/card] +[card] name=Well of Lost Dreams auto=@lifeof(player):foreach:life: may pay({lifeof}) draw:thatmuch controller text=Whenever you gain life, you may pay {X}, where X is less than or equal to the amount of life you gained. If you do, draw X cards. @@ -45230,6 +45620,15 @@ mana={4} type=Artifact [/card] [card] +name=Wheel of Sun and Moon +target=player +auto=@movedto(*|targetedpersonsgraveyard) from(battlefield):all(trigger[from]) bottomoflibrary +text=Enchant player -- If a card would be put into enchanted player's graveyard from anywhere, instead that card is revealed and put on the bottom of that player's library. +mana={GW}{GW} +type=Enchantment +subtype=Aura +[/card] +[card] name=Whale Reef auto=@movedTo(this|mygraveyard) from(myBattlefield):token(Kraken Reef) text=When this creature dies, put a 9/9 blue Kraken creature token onto the battlefield. @@ -45302,6 +45701,16 @@ power=2 toughness=2 [/card] [card] +name=Wicked Akuba +auto=damaged(player) from(this):transforms((,newability[{B}:damage:1 opponent])) ueot +text={B}: Target player dealt damage by Wicked Akuba this turn loses 1 life. +mana={B}{B} +type=Creature +subtype=Spirit +power=2 +toughness=2 +[/card] +[card] name=Wicked Guardian auto=may ability$!name(damage) damage:2 target(other creature|myBattlefield) and!(draw:1) controller!$ text=When Wicked Guardian enters the battlefield, you may have it deal 2 damage to another creature you control. If you do, draw a card. @@ -45338,6 +45747,25 @@ power=4 toughness=3 [/card] [card] +name=Wild Crocodile +auto=reveal:type:*:mylibrary revealzone(mylibrary) optionone name(choose card) target(<1>land[basic]|reveal) transforms((,newability[all(other *|reveal) moveto(mylibrary) and!(shuffle)!],newability[moveto(myhand)])) optiononeend optiontwo name(shuffle) bottomoflibrary target(<1>*|reveal) and!( all(*|reveal) bottomoflibrary and!(shuffle)! )! optiontwoend revealend +text=When this creature enters the battlefield, search your library for a basic land card, reveal it, put it into your hand, then shuffle your library. +mana={1}{G} +type=Host Creature +subtype=Crocodile +power=1 +toughness=1 +[/card] +[card] +name=Wild Might +target=creature +auto=1/1 ueot +auto=ability$!name(pay or 4/4) pay[[{2}]] name(pay 2 mana) donothing?target(creature|opponentbattlefield) 4/4 ueot!$ opponent +text=Target creature gets +1/+1 until end of turn. That creature gets an additional +4/+4 until end of turn unless any player pays {2}. +mana={1}{G} +type=Instant +[/card] +[card] name=Wild Onslaught kicker={4} auto=kicker all(creature|myBattlefield) counter(1/1) @@ -45347,6 +45775,15 @@ mana={3}{G} type=Instant [/card] [card] +name=Wild Slash +#MISSING:Damage can't be prevented is not supported ATM +target=player,creature +auto=damage:2 +text=Ferocious — If you control a creature with power 4 or greater, damage can't be prevented this turn. -- Wild Slash deals 2 damage to target creature or player. +mana={R} +type=Instant +[/card] +[card] name=Wildborn Preserver abilities=flash,reach auto=@movedTo(other creature[-human]|myBattlefield):{X}:counter(1/1,X) @@ -45526,6 +45963,19 @@ mana={1}{G} type=Sorcery [/card] [card] +name=Winds of Abandon +target=creature|opponentbattlefield +abilities=overload +other={4}{W}{W} name(Overload) +auto=overload moveto(exile) all(creature|opponentbattlefield) +auto=paidmana moveto(exile) +auto=paidmana ability$!name(Reveal) reveal:plibrarycount optionone name(choose basic land) target(<1>land[basic]|reveal) moveto(myBattlefield) optiononeend optiontwo name(put back) moveto(ownerlibrary) all(*|reveal) optiontwoend afterrevealed tap(noevent) notatarget(basic[fresh]|myBattlefield) afterrevealedend revealend!$ opponent +auto=overload ability$!name(Reveal) reveal:plibrarycount optionone name(choose basic lands) target(land[basic]|reveal) moveto(myBattlefield) optiononeend optiontwo name(put back) moveto(ownerlibrary) all(*|reveal) optiontwoend afterrevealed tap(noevent) notatarget(basic[fresh]|myBattlefield) afterrevealedend revealend!$ opponent +text=Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle their libraries. -- Overload {4}{W}{W} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") +mana={1}{W} +type=Sorcery +[/card] +[card] name=Winds of Rebuke target=*[-land] auto=moveto(ownerhand) @@ -45640,6 +46090,15 @@ type=Snow Enchantment subtype=Aura [/card] [card] +name=Winterflame +auto=choice name(Tap creature) tap(noevent) target(creature) +auto=choice name(Damage 2 target creature) damage:2 target(creature) +auto=choice name(Choose both) tap(noevent) target(creature) && ability$!name(Damage 2 target creature) damage:2 target(creature)!$ controller +text=Choose one or both — -- • Tap target creature. -- • Winterflame deals 2 damage to target creature. +mana={1}{U}{R} +type=Instant +[/card] +[card] name=Wintermoor Commander abilities=deathtouch anyzone=2/type:creature[knight]:battlefield cdaactive @@ -45728,6 +46187,14 @@ mana={U} type=Artifact [/card] [card] +name=Withdraw +auto=ability$!name(Bounce) moveto(ownerhand) notatarget(creature)!$ controller +auto=target(creature) transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?moveto(ownerhand)])) forever +text=Return target creature to its owner's hand. Then return another target creature to its owner's hand unless its controller pays {1}. +mana={U}{U} +type=Instant +[/card] +[card] name=Without Weakness target=creature|myBattlefield auto=indestructible @@ -45811,22 +46278,6 @@ mana={4}{G}{G} type=Sorcery [/card] [card] -name=Wolf,Man -type=Creature -subtype=Wolf -power=2 -toughness=2 -color=green -[/card] -[card] -name=Wolf,Wol -type=Creature -subtype=Wolf -power=2 -toughness=2 -color=green -[/card] -[card] name=Wolfrider's Saddle auto=livingweapontoken(Wolf,Creature Wolf,2/2,green) auto={3}:equip @@ -45841,7 +46292,7 @@ subtype=Equipment name=Wolfwillow Haven target=land auto=teach(land) transforms((,newability[@tappedformana(mytgt):produceextra:{G}])) -auto={4}{G}{S}:token(Wolf,Wol) restriction{during my turn} +auto={4}{G}{S}:token(Wolf,Creature Wolf,2/2,green) myTurnOnly text=Enchant land -- Whenever enchanted land is tapped for mana, its controller adds an additional {G}. -- {4}{G}, Sacrifice Wolfwillow Haven: Create a 2/2 green Wolf creature token. Activate this ability only during your turn. mana={1}{G} type=Enchantment @@ -45849,7 +46300,7 @@ subtype=Aura [/card] [card] name=Woodland Champion -auto=@movedTo(token|myBattlefield) counter(1/1,1) +auto=@movedTo(*[token]|myBattlefield) counter(1/1,1) text=Whenever one or more tokens enter the battlefield under your control, put that many +1/+1 counters on Woodland Champion. mana={1}{G} type=Creature @@ -45901,6 +46352,17 @@ power=0 toughness=0 [/card] [card] +name=Wormfang Crab +abilities=unblockable +auto=ability$!name(Exile permanent) notatarget(*[-Wormfang Crab]|opponentbattlefield) (blink)forsrc!$ opponent +text=Wormfang Crab is unblockable. -- When Wormfang Crab enters the battlefield, an opponent chooses a permanent you control other than Wormfang Crab and exiles it. -- When Wormfang Crab leaves the battlefield, return the exiled card to the battlefield under its owner's control. +mana={3}{U} +type=Creature +subtype=Nightmare Crab +power=3 +toughness=6 +[/card] +[card] name=Worthy Knight auto=@movedTo(creature[knight]|mystack):create(Human:creature Human:1/1:white) text=Whenever you cast a Knight spell, create a 1/1 white Human creature token. @@ -45937,8 +46399,7 @@ toughness=3 [/card] [card] name=Wretched Camel -auto=@movedTo(this|graveyard) from(battlefield):may target(player) ability$!name(discard) target(*|myhand) reject!$ targetedplayer -#aslongas(Desert|mybattlefield,myGraveyard) +auto=@movedTo(this|graveyard) from(battlefield):if type(*[desert]|mybattlefield,myGraveyard)~morethan~0 then target(player) ability$!name(discard) target(*|myhand) reject!$ targetedplayer text=When Wretched Camel dies, if you control a Desert or there is a Desert card in your graveyard, target player discards a card. mana={1}{B} type=Creature @@ -45947,6 +46408,21 @@ power=2 toughness=1 [/card] [card] +name=Wretched Confluence +auto=choice name(Choose 1,1,1) target(player) draw:3 && life:-3 +auto=choice name(Choose 1,1,2) target(player) draw:2 && life:-2 && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller +auto=choice name(Choose 1,2,2) target(player) draw:1 && life:-1 && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller +auto=choice name(Choose 1,2,3) target(player) draw:1 && life:-1 && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller && ability$!name(Return creature to hand) notatarget(creature|mygraveyard) moveto(myhand)!$ controller +auto=choice name(Choose 1,3,3) target(player) draw:1 && life:-1 && ability$!name(Return creature to hand) notatarget(<2>creature|mygraveyard) moveto(myhand)!$ controller +auto=choice name(Choose 2,2,2) target(creature) -2/-2 ueot && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller +auto=choice name(Choose 2,2,3) target(creature) -2/-2 ueot && ability$!name(Creature gets -2/-2) notatarget(creature) -2/-2 ueot!$ controller && ability$!name(Return creature to hand) notatarget(creature|mygraveyard) moveto(myhand)!$ controller +auto=choice name(Choose 2,3,3) target(creature) -2/-2 ueot && ability$!name(Return creature to hand) notatarget(<2>creature|mygraveyard) moveto(myhand)!$ controller +auto=choice name(Choose 3,3,3) target(<3>creature|mygraveyard) moveto(myhand) +text=Choose three. You may choose the same mode more than once. -- • Target player draws a card and loses 1 life. -- • Target creature gets -2/-2 until end of turn. -- • Return target creature card from your graveyard to your hand. +mana={3}{B}{B} +type=Instant +[/card] +[card] name=Xantcha, Sleeper Agent auto=moveto(opponentBattlefield) auto=this(cantattack) @@ -45959,6 +46435,16 @@ power=5 toughness=5 [/card] [card] +name=Xenic Poltergeist +auto={T}:target(artifact[-creature]) transforms((creature,setpower=0,settoughness=1,newability[dynamicability becomes(creature) ueot],newability[0/-1 ueot all(this)],newability[@each opponent untap:dynamicability becomes(creature) ueot],newability[@each opponent upkeep:0/-1 ueot all(this)])) uynt +text={T}: Until your next upkeep, target noncreature artifact becomes an artifact creature with power and toughness each equal to its converted mana cost. +mana={1}{B}{B} +type=Creature +subtype=Spirit +power=1 +toughness=1 +[/card] +[card] name=Xyris, the Writhing Storm abilities=flying auto=@drawfoeof(player):token(Snake Xyr) @@ -45995,6 +46481,14 @@ power=3 toughness=3 [/card] [card] +name=Yare +target=creature[blocking] +auto=3/0 ueot +text=Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn. +mana={2}{W} +type=Instant +[/card] +[card] name=Yargle, Glutton of Urborg mana={4}{B} type=Legendary Creature @@ -46186,6 +46680,18 @@ power=1 toughness=1 [/card] [card] +name=Zerapa Minotaur +abilities=first strike +auto={2}:-first strike ueot +auto=foreach(land[-tapped]|opponentBattlefield) transforms((,newability[ability$!name(Pay 2) pay[[{2}]] name(Pay 2) notatarget(Zerapa Minotaur[first strike]|opponentBattlefield) -first strike ueot?donothing!$ opponent])) forever +text=First strike -- {2}: Zerapa Minotaur loses first strike until end of turn. Any player may activate this ability. +mana={2}{R}{R} +type=Creature +subtype=Minotaur +power=3 +toughness=3 +[/card] +[card] name=Zetalpa, Primal Dawn abilities=flying, double strike, indestructible, vigilance, trample text=Flying, double strike, vigilance, trample, indestructible diff --git a/projects/mtg/bin/Res/sets/primitives/mtg.txt b/projects/mtg/bin/Res/sets/primitives/mtg.txt index 4805718f5..13763f7ab 100644 --- a/projects/mtg/bin/Res/sets/primitives/mtg.txt +++ b/projects/mtg/bin/Res/sets/primitives/mtg.txt @@ -11876,7 +11876,7 @@ type=Land [card] name=Blinkmoth Urn auto=@each my firstmain sourcenottapped:all(artifact|mybattlefield) add{1} -auto=@each opponentfirstmain sourcenottapped:all(artifact|opponentbattlefield) add{1} +auto=@each opponent firstmain sourcenottapped:all(artifact|opponentbattlefield) add{1} text=At the beginning of each player's precombat main phase, if Blinkmoth Urn is untapped, that player adds {1} to his or her mana pool for each artifact he or she controls. mana={5} type=Artifact @@ -49486,7 +49486,7 @@ toughness=3 name=Grand Architect auto=lord(other creature[blue]|myBattlefield) 1/1 auto={U}:target(creature[artifact]) becomes(blue) -auto={T(creature[blue]|mybattlefield)}:Add{2} +auto={T(creature[blue]|mybattlefield)}:if type(artifact|myhand,mybattlefield)~morethan~0 then add{C}{C} text=Other blue creatures you control get +1/+1. -- {U}:Target artifact creature becomes blue until end of turn. -- Tap an untapped blue creature you control: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts. mana={1}{U}{U} type=Creature @@ -78956,7 +78956,7 @@ type=Artifact [card] name=Necrogen Mists auto=@each my upkeep:reject target(*|myhand) -auto=@each opponentupkeep:ability$!name(discard) target(*|myhand) reject!$ opponent +auto=@each opponent upkeep:ability$!name(discard) target(*|myhand) reject!$ opponent text=At the beginning of each player's upkeep, that player discards a card. mana={2}{B} type=Enchantment diff --git a/projects/mtg/bin/Res/sets/primitives/unsupported.txt b/projects/mtg/bin/Res/sets/primitives/unsupported.txt index 9d9b182b7..9ed65ddf5 100644 --- a/projects/mtg/bin/Res/sets/primitives/unsupported.txt +++ b/projects/mtg/bin/Res/sets/primitives/unsupported.txt @@ -3200,15 +3200,6 @@ mana={U}{U} type=Enchantment [/card] [card] -name=Deepglow Skate -text=When Deepglow Skate enters the battlefield, double the number of each kind of counter on any number of target permanents. -mana={4}{U} -type=Creature -subtype=Fish -power=3 -toughness=3 -[/card] -[card] name=Defective Detective text=Defective Detective can't be blocked. -- When Defective Detective enters the battlefield, a person outside the game looks at target opponent's hand and chooses a card from it. That player reveals that card. mana={2}{U} @@ -3591,12 +3582,6 @@ mana={5}{G} type=Sorcery [/card] [card] -name=Doubling Season -text=If an effect would put one or more tokens onto the battlefield under your control, it puts twice that many of those tokens onto the battlefield instead. -- If an effect would place one or more counters on a permanent you control, it places twice that many of those counters on that permanent instead. -mana={4}{G} -type=Enchantment -[/card] -[card] name=Dovin Baan auto=counter(0/0,3,loyalty) text=+1: Until your next turn, up to one target creature gets -3/-0 and its activated abilities can't be activated. -- -1: You gain 2 life and draw a card. -- -7: You get an emblem with "Your opponents can't untap more than two permanents during their untap steps." @@ -14631,16 +14616,6 @@ mana={5} type=Legendary Artifact [/card] [card] -name=Ulamog's Nullifier -abilities=devoid -text=Devoid (This card has no color.) -- Flash -- Flying -- When Ulamog's Nullifier enters the battlefield, you may put two cards your opponents own from exile into their owners' graveyards. If you do, counter target spell. -mana={2}{U}{B} -type=Creature -subtype=Eldrazi Processor -power=2 -toughness=3 -[/card] -[card] name=Umbra Mystic text=Auras attached to permanents you control have totem armor. (If an enchanted permanent you control would be destroyed, instead remove all damage from it and destroy an Aura attached to it.) mana={2}{W} @@ -14710,64 +14685,12 @@ text=Black legendary creatures you control have "bands with other legendary crea type=Land [/card] [card] -name=Unifying Theory -text=Whenever a player casts a spell, that player may pay {2}. If the player does, he or she draws a card. -mana={1}{U} -type=Enchantment -[/card] -[card] -name=Unliving Psychopath -text={B}: Unliving Psychopath gets +1/-1 until end of turn. -- {B}, {T}: Destroy target creature with power less than Unliving Psychopath's power. -mana={2}{B}{B} -type=Creature -subtype=Zombie Assassin -power=0 -toughness=4 -[/card] -[card] -name=Unnatural Aggression -text=Devoid (This card has no color.) -- Target creature you control fights target creature an opponent controls. If the creature an opponent controls would die this turn, exile it instead. -mana={2}{G} -type=Instant -[/card] -[card] name=Unpredictable Cyclone text=If a cycling ability of another nonland card would cause you to draw a card, instead exile cards from the top of your library until you exile a card that shares a card type with the cycled 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 your library in a random order. -- Cycling {2} ({2}, Discard this card: Draw a card.) mana={3}{R}{R} type=Enchantment [/card] [card] -name=Unsettled Mariner -abilities=changeling -auto=@targeted(*|mybattlefield) from(*|opponentbattlefield,opponenthand,opponentstack,opponentgraveyard,opponentexile,opponentlibrary):transforms((,newability[pay[[{1}]] name(pay 1 mana) donothing?fizzle])) forever -text=Changeling (This card is every creature type.) -- Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. -mana={W}{U} -type=Creature -subtype=Shapeshifter -power=2 -toughness=2 -[/card] -[card] -name=Unstable Footing -text=Kicker {3}{R} (You may pay an additional {3}{R} as you cast this spell.) -- Damage can't be prevented this turn. If Unstable Footing was kicked, it deals 5 damage to target player. -mana={R} -type=Instant -[/card] -[card] -name=Untaidake, the Cloud Keeper -text=Untaidake, the Cloud Keeper enters the battlefield tapped. -- {T}, Pay 2 life: Add {2} to your mana pool. Spend this mana only to cast legendary spells. -type=Legendary Land -[/card] -[card] -name=Urborg Panther -text={B}, Sacrifice Urborg Panther: Destroy target creature blocking Urborg Panther. -- Sacrifice a creature named Feral Shadow, a creature named Breathstealer, and Urborg Panther: Search your library for a card named Spirit of the Night and put that card onto the battlefield. Then shuffle your library. -mana={2}{B} -type=Creature -subtype=Nightstalker Cat -power=2 -toughness=2 -[/card] -[card] name=Uro, Titan of Nature's Wrath text=When Uro enters the battlefield, sacrifice it unless it escaped. -- Whenever Uro enters the battlefield or attacks, you gain 3 life and draw a card, then you may put a land card from your hand onto the battlefield. -- Escape— {G}{G}{U}{U}, Exile five other cards from your graveyard. (You may cast this card from your graveyard for its escape cost.) mana={1}{G}{U} @@ -14777,12 +14700,6 @@ power=6 toughness=6 [/card] [card] -name=Urza's Armor -text=If a source would deal damage to you, prevent 1 of that damage. -mana={6} -type=Artifact -[/card] -[card] name=Urza's Avenger text={0}: Urza's Avenger gets -1/-1 and gains your choice of banding, flying, first strike, or trample until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) mana={6} @@ -14792,12 +14709,6 @@ power=4 toughness=4 [/card] [card] -name=Urza's Bauble -text={T}, Sacrifice Urza's Bauble: Look at a card at random in target player's hand. You draw a card at the beginning of the next turn's upkeep. -mana={0} -type=Artifact -[/card] -[card] name=Urza's Contact Lenses text=Urza's Contact Lenses comes into play tapped and does not untap during its controller's untap phase. -- All players play with their hands face up. -- Clap your hands twice: Tap or untap Urza's Contact Lenses. mana={0} @@ -14820,18 +14731,6 @@ mana={2} type=Artifact [/card] [card] -name=Urza's Miter -text=Whenever an artifact you control is put into a graveyard from the battlefield, if it wasn't sacrificed, you may pay {3}. If you do, draw a card. -mana={3} -type=Artifact -[/card] -[card] -name=Urza's Rage -text=Kicker {8}{R} (You may pay an additional {8}{R} as you cast this spell.) -- Urza's Rage can't be countered by spells or abilities. -- Urza's Rage deals 3 damage to target creature or player. If Urza's Rage was kicked, instead it deals 10 damage to that creature or player and the damage can't be prevented. -mana={2}{R} -type=Instant -[/card] -[card] name=Urza's Science Fair Project text={2}: Roll a six-sided die for Urza's Science Fair Project. -- 1 It gets -2/-2 until end of turn. -- 2 It deals no combat damage this turn. -- 3 Attacking does not cause it to tap this turn. -- 4 It gains first strike until end of turn. -- 5 It gains flying until end of turn. -- 6 It gets +2/+2 until end of turn. mana={6} @@ -14872,13 +14771,6 @@ mana={W} type=Instant [/card] [card] -name=Vanguard's Shield -text=Equipped creature gets +0/+3 and can block an additional creature. -- Equip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) -mana={2} -type=Artifact -subtype=Equipment -[/card] -[card] name=Vanish into Memory text=Exile target creature. You draw cards equal to that creature's power. At the beginning of your next upkeep, return that card to the battlefield under its owner's control. If you do, discard cards equal to its toughness. mana={2}{W}{U} @@ -14900,24 +14792,6 @@ mana={3}{W} type=Enchantment [/card] [card] -name=Vedalken Engineer -text={T}: Add two mana of any one color to your mana pool. Spend this mana only to cast artifact spells or activate abilities of artifacts. -mana={1}{U} -type=Creature -subtype=Vedalken Artificer -power=1 -toughness=1 -[/card] -[card] -name=Vedalken Plotter -text=When Vedalken Plotter enters the battlefield, exchange control of target land you control and target land an opponent controls. -mana={2}{U} -type=Creature -subtype=Vedalken Wizard -power=1 -toughness=1 -[/card] -[card] name=Veil of Secrecy text=Target creature gains shroud until end of turn and is unblockable this turn. -- Splice onto Arcane—Return a blue creature you control to its owner's hand. (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) mana={1}{U} @@ -14931,25 +14805,12 @@ mana={G} type=Instant [/card] [card] -name=Veiled Crocodile -text=When a player has no cards in hand, if Veiled Crocodile is an enchantment, Veiled Crocodile becomes a 4/4 Crocodile creature. -mana={2}{U} -type=Enchantment -[/card] -[card] name=Veiled Sentry text=When an opponent casts a spell, if Veiled Sentry is an enchantment, Veiled Sentry becomes an Illusion creature with power and toughness each equal to that spell's converted mana cost. mana={U} type=Enchantment [/card] [card] -name=Venarian Gold -text=Enchant creature -- When Venarian Gold enters the battlefield, tap enchanted creature and put X sleep counters on it. -- Enchanted creature doesn't untap during its controller's untap step if it has a sleep counter on it. -- At the beginning of the upkeep of enchanted creature's controller, remove a sleep counter from that creature. -mana={X}{U}{U} -type=Enchantment -subtype=Aura -[/card] -[card] name=Vengeful Archon abilities=flying text=Flying -- {X}: Prevent the next X damage that would be dealt to you this turn. If damage is prevented this way, Vengeful Archon deals that much damage to target player. @@ -14960,46 +14821,12 @@ power=7 toughness=7 [/card] [card] -name=Vengeful Dreams -text=As an additional cost to cast Vengeful Dreams, discard X cards. -- Exile X target attacking creatures. -mana={W}{W} -type=Instant -[/card] -[card] -name=Vengeful Rebirth -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 converted mana cost to target creature or player. -- Exile Vengeful Rebirth. -mana={4}{R}{G} -type=Sorcery -[/card] -[card] name=Venomous Breath text=Choose target creature. At end of combat, destroy all creatures that blocked or were blocked by it this turn. mana={3}{G} type=Instant [/card] [card] -name=Venser, Shaper Savant -abilities=flash -text=Flash (You may cast this spell any time you could cast an instant.) -- When Venser, Shaper Savant enters the battlefield, return target spell or permanent to its owner's hand. -mana={2}{U}{U} -type=Legendary Creature -subtype=Human Wizard -power=2 -toughness=2 -[/card] -[card] -name=Verdant Confluence -text=Choose three. You may choose the same mode more than once. -- • Put two +1/+1 counters on target creature. -- • Return target permanent card from your graveyard to your hand. -- • Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library. -mana={4}{G}{G} -type=Sorcery -[/card] -[card] -name=Verdant Crescendo -text=Search your library for a basic land card and put it onto the battlefield tapped. Search your library and graveyard for a card named Nissa, Nature's Artisan, reveal it, and put it into your hand. Then shuffle your library. -mana={3}{G} -type=Sorcery -[/card] -[card] name=Very Cryptic Command (a) text=Choose two — -- • Switch target creature's power and toughness until end of turn. -- • Target creature can't be blocked this turn. -- • Draw a card. If that card's art is by Wayne England, you may reveal it and draw another card. -- • Assemble a Contraption. mana={1}{U}{U}{U} @@ -15069,39 +14896,6 @@ mana={4} type=Artifact [/card] [card] -name=Vexing Devil -text=When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to him or her. If a player does, sacrifice Vexing Devil. -mana={R} -type=Creature -subtype=Devil -power=4 -toughness=3 -[/card] -[card] -name=Vicious Betrayal -text=As an additional cost to cast Vicious Betrayal, sacrifice any number of creatures. -- Target creature gets +2/+2 until end of turn for each creature sacrificed this way. -mana={3}{B}{B} -type=Sorcery -[/card] -[card] -name=Victimize -text=Choose two target creature cards in your graveyard. Sacrifice a creature. If you do, return the chosen cards to the battlefield tapped. -mana={2}{B} -type=Sorcery -[/card] -[card] -name=View from Above -text=Target creature gains flying until end of turn. If you control a white permanent, return View from Above to its owner's hand. -mana={1}{U} -type=Instant -[/card] -[card] -name=Vigil for the Lost -text=Whenever a creature you control dies, you may pay {X}. If you do, you gain X life. -mana={3}{W} -type=Enchantment -[/card] -[card] name=Vile Bile text=Whenever a player's skin or fingernail touches Vile Bile, that player loses 2 life. mana={1}{B} @@ -15111,40 +14905,12 @@ power=2{1/2} toughness=2{1/2} [/card] [card] -name=Vintara Elephant -abilities=trample -text=Trample -- {3}: Vintara Elephant loses trample until end of turn. Any player may activate this ability. -mana={4}{G} -type=Creature -subtype=Elephant -power=4 -toughness=3 -[/card] -[card] -name=Violent Eruption -text=Violent Eruption deals 4 damage divided as you choose among any number of target creatures and/or players. -- Madness {1}{R}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.) -mana={1}{R}{R}{R} -type=Instant -[/card] -[card] -name=Virulent Wound -text=Put a -1/-1 counter on target creature. When that creature dies this turn, its controller gets a poison counter. -mana={B} -type=Instant -[/card] -[card] name=Vision Charm text=Choose one — Target player puts the top four cards of his or her library into his or her graveyard; or choose a land type and a basic land type, and each land of the first chosen type becomes the second chosen type until end of turn; or target artifact phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before its controller untaps during his or her next untap step.) mana={U} type=Instant [/card] [card] -name=Visions -text=Look at the top five cards of target player's library. You may then have that player shuffle that library. -mana={W} -type=Sorcery -[/card] -[card] name=Vital Surge text=You gain 3 life. -- Splice onto Arcane {1}{G} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) mana={1}{G} @@ -15171,25 +14937,6 @@ power=0 toughness=4 [/card] [card] -name=Voice of Many -text=When Voice of Many enters the battlefield, draw a card for each opponent who controls fewer creatures than you. -mana={2}{G}{G} -type=Creature -subtype=Elf Druid -power=3 -toughness=3 -[/card] -[card] -name=Void Maw -abilities=trample -text=Trample -- If another creature would die, exile it instead. -- Put a card exiled with Void Maw into its owner's graveyard: Void Maw gets +2/+2 until end of turn. -mana={4}{B}{B} -type=Creature -subtype=Horror -power=4 -toughness=5 -[/card] -[card] name=Voidmage Husher abilities=flash text=Flash (You may cast this spell any time you could cast an instant.) -- When Voidmage Husher enters the battlefield, counter target activated ability. (Mana abilities can't be targeted.) -- Whenever you cast a spell, you may return Voidmage Husher to its owner's hand. @@ -15237,18 +14984,6 @@ mana={4}{R} type=Instant [/card] [card] -name=Volcanic Vision -text=Return target instant or sorcery card from your graveyard to your hand. Volcanic Vision deals damage equal to that card's converted mana cost to each creature your opponents control. Exile Volcanic Vision. -mana={5}{R}{R} -type=Sorcery -[/card] -[card] -name=Volcanic Wind -text=Volcanic Wind deals X damage divided as you choose among any number of target creatures, where X is the number of creatures on the battlefield as you cast Volcanic Wind. -mana={4}{R}{R} -type=Sorcery -[/card] -[card] name=Volcano Hellion text=Volcano Hellion has echo {X}, where X is your life total. (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.) -- When Volcano Hellion enters the battlefield, it deals an amount of damage of your choice to you and target creature. The damage can't be prevented. mana={2}{R}{R} @@ -15258,12 +14993,6 @@ power=6 toughness=5 [/card] [card] -name=Volley of Boulders -text=Volley of Boulders deals 6 damage divided as you choose among any number of target creatures and/or players. -- Flashback {R}{R}{R}{R}{R}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) -mana={8}{R} -type=Sorcery -[/card] -[card] name=Volrath's Curse text=Enchant creature -- Enchanted creature can't attack or block, and its activated abilities can't be activated. That creature's controller may sacrifice a permanent for that player to ignore this effect until end of turn. -- {1}{U}: Return Volrath's Curse to its owner's hand. mana={1}{U} @@ -15271,12 +15000,6 @@ type=Enchantment subtype=Aura [/card] [card] -name=Volrath's Dungeon -text=Pay 5 life: Destroy Volrath's Dungeon. Any player may activate this ability but only during his or her turn. -- Discard a card: Target player puts a card from his or her hand on top of his or her library. Activate this ability only any time you could cast a sorcery. -mana={2}{B}{B} -type=Enchantment -[/card] -[card] name=Volrath's Motion Sensor text=When Volrath's Motion Sensor comes into play, choose target hand controlled by an opponent. Enchanted player balances Volrath's Motion Sensor on the back of that hand. -- If Volrath's Motion Sensor falls off the hand, sacrifice Volrath's Motion Sensor and that player loses 3 life. mana={B} @@ -15312,15 +15035,6 @@ power=4 toughness=4 [/card] [card] -name=Voracious Vacuum -text=When this creature enters the battlefield, put a +1/+1 counter on target creature. -mana={3} -type=Host Artifact Creature -subtype=Construct -power=1 -toughness=1 -[/card] -[card] name=Vortex Elemental text={U}: Put Vortex Elemental and each creature blocking or blocked by it on top of their owners' libraries, then those players shuffle their libraries. -- {3}{U}{U}: Target creature blocks Vortex Elemental this turn if able. mana={U} @@ -15340,16 +15054,6 @@ power=2 toughness=1 [/card] [card] -name=Wall of Corpses -abilities=defender -text=Defender (This creature can't attack.) -- {B}, Sacrifice Wall of Corpses: Destroy target creature Wall of Corpses is blocking. -mana={1}{B} -type=Creature -subtype=Wall -power=0 -toughness=2 -[/card] -[card] name=Wall of Deceit abilities=defender text=Defender (This creature can't attack.) -- {3}: Turn Wall of Deceit face down. -- Morph {U} (You may cast this face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) @@ -15369,16 +15073,6 @@ power=0 toughness=4 [/card] [card] -name=Wall of Glare -abilities=defender -text=Defender (This creature can't attack.) -- Wall of Glare can block any number of creatures. -mana={1}{W} -type=Creature -subtype=Wall -power=0 -toughness=5 -[/card] -[card] name=Wall of Shadows abilities=defender text=Defender (This creature can't attack.) -- Prevent all damage that would be dealt to Wall of Shadows by creatures it's blocking. -- Wall of Shadows can't be the target of spells that can target only Walls or of abilities that can target only Walls. @@ -15424,22 +15118,6 @@ mana={4} type=Artifact [/card] [card] -name=Wandering Eye -abilities=flying -text=Flying -- Players play with their hands revealed. -mana={2}{U} -type=Creature -subtype=Illusion -power=1 -toughness=3 -[/card] -[card] -name=War Barge -text={3}: Target creature gains islandwalk until end of turn. When War Barge leaves the battlefield this turn, destroy that creature. A creature destroyed this way can't be regenerated. -mana={4} -type=Artifact -[/card] -[card] name=War Elephant abilities=trample,banding text=Trample; banding (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) @@ -15482,27 +15160,12 @@ type=Enchantment subtype=Aura [/card] [card] -name=Warmonger -text={2}: Warmonger deals 1 damage to each creature without flying and each player. Any player may activate this ability. -mana={3}{R} -type=Creature -subtype=Minotaur Monger -power=3 -toughness=3 -[/card] -[card] name=Warp World text=Each player shuffles all permanents he or she owns into his or her library, then reveals that many cards from the top of his or her library. Each player puts all artifact, creature, and land cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of his or her library. mana={5}{R}{R}{R} type=Sorcery [/card] [card] -name=Warping Wail -text=({C} represents colorless mana.) -- Choose one — -- • Exile target creature with power or toughness 1 or less. -- • Counter target sorcery spell. -- • Put a 1/1 colorless Eldrazi Scion creature token onto the battlefield. It has "Sacrifice this creature: Add {C} to your mana pool." -mana={1}{C} -type=Instant -[/card] -[card] name=Warrior en-Kor text={0}: The next 1 damage that would be dealt to Warrior en-Kor this turn is dealt to target creature you control instead. mana={W}{W} @@ -15521,16 +15184,6 @@ power=2 toughness=1 [/card] [card] -name=Watcher in the Web -abilities=reach -text=Reach (This creature can block creatures with flying.) -- Watcher in the Web can block an additional seven creatures each combat. -mana={4}{G} -type=Creature -subtype=Spider -power=2 -toughness=5 -[/card] -[card] name=Water Gun Balloon Game text=As Water Gun Balloon Game comes into play, each player puts a pop counter on a 0. -- Whenever a player plays a spell, move that player's pop counter up 1. -- Whenever a player's pop counter hits 5, that player puts a 5/5 pink Giant Teddy Bear creature token into play and resets all pop counters to 0. mana={2} @@ -15548,24 +15201,12 @@ mana={5}{G}{G} type=Sorcery [/card] [card] -name=Wax // Wane -text=Target creature gets +2/+2 until end of turn. -- // -- Destroy target enchantment. -mana={G} // {W} -type=Instant // Instant -[/card] -[card] name=Waxing Moon text=Transform up to one target Werewolf you control. Creatures you control gain trample until end of turn. mana={1}{G} type=Instant [/card] [card] -name=Wear // Tear -text=Destroy target artifact. -- // -- Destroy target enchantment. -- -- Fuse (You may cast one or both halves of this card from your hand.) -mana={1}{R} // {W} -type=Instant // Instant -[/card] -[card] name=Wear Away text=Destroy target artifact or enchantment. -- Splice onto Arcane {3}{G} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) mana={G}{G} @@ -15615,25 +15256,12 @@ mana={2}{U}{U} type=Sorcery [/card] [card] -name=Well of Knowledge -text={2}: Draw a card. Any player may activate this ability but only during his or her draw step. -mana={3} -type=Artifact -[/card] -[card] name=Wet Willie of the Damned text=Wet Willie of the Damned deals 2½ damage to target creature or player and you gain 2½ life. mana={2}{B}{B} type=Sorcery [/card] [card] -name=Wheel of Sun and Moon -text=Enchant player -- If a card would be put into enchanted player's graveyard from anywhere, instead that card is revealed and put on the bottom of that player's library. -mana={GW}{GW} -type=Enchantment -subtype=Aura -[/card] -[card] name=When Fluffy Bunnies Attack text=Target creature gets -X/-X until end of turn, where X is the number of times the letter of your choice appears in that creature's name. mana={3}{B} @@ -15740,15 +15368,6 @@ text=Who -- {X}{W} -- Instant -- Target player gains X life. -- ----- -- What -- type=Instant [/card] [card] -name=Wicked Akuba -text={B}: Target player dealt damage by Wicked Akuba this turn loses 1 life. -mana={B}{B} -type=Creature -subtype=Spirit -power=2 -toughness=2 -[/card] -[card] name=Widespread Panic text=Whenever a spell or ability causes its controller to shuffle his or her library, that player puts a card from his or her hand on top of his or her library. mana={2}{R} @@ -15761,27 +15380,12 @@ type=Artifact subtype=Contraption [/card] [card] -name=Wild Crocodile -text=When this creature enters the battlefield, search your library for a basic land card, reveal it, put it into your hand, then shuffle your library. -mana={1}{G} -type=Host Creature -subtype=Crocodile -power=1 -toughness=1 -[/card] -[card] name=Wild Evocation text=At the beginning of each player's upkeep, that player reveals a card at random from his or her hand. If it's a land card, the player puts it onto the battlefield. Otherwise, the player casts it without paying its mana cost if able. mana={5}{R} type=Enchantment [/card] [card] -name=Wild Might -text=Target creature gets +1/+1 until end of turn. That creature gets an additional +4/+4 until end of turn unless any player pays {2}. -mana={1}{G} -type=Instant -[/card] -[card] name=Wild Pair text=Whenever a creature enters the battlefield, if you cast it from your hand, you may search your library for a creature card with the same total power and toughness and put it onto the battlefield. If you do, shuffle your library. mana={4}{G}{G} @@ -15794,12 +15398,6 @@ mana={2}{R}{R} type=Instant [/card] [card] -name=Wild Slash -text=Ferocious — If you control a creature with power 4 or greater, damage can't be prevented this turn. -- Wild Slash deals 2 damage to target creature or player. -mana={R} -type=Instant -[/card] -[card] name=Wild Swing text=Choose three target nonenchantment permanents. Destroy one of them at random. mana={3}{R} @@ -15857,28 +15455,12 @@ type=Plane subtype=Belenon [/card] [card] -name=Winds of Abandon -abilities=overload -other={4}{W}{W} name(Overload) -target=creature|opponentbattlefield -auto=moveto(exile) -text=Exile target creature you don't control. For each creature exiled this way, its controller searches their library for a basic land card. Those players put those cards onto the battlefield tapped, then shuffle their libraries. -- Overload {4}{W}{W} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") -mana={1}{W} -type=Sorcery -[/card] -[card] name=Winter's Chill text=Cast Winter's Chill only during combat before blockers are declared. -- X can't be greater than the number of snow lands you control. -- Choose X target attacking creatures. For each of those creatures, its controller may pay {1} or {2}. If that player doesn't, destroy that creature at end of combat. If that player pays only {1}, prevent all combat damage that would be dealt to and dealt by that creature this combat. mana={X}{U} type=Instant [/card] [card] -name=Winterflame -text=Choose one or both — -- • Tap target creature. -- • Winterflame deals 2 damage to target creature. -mana={1}{U}{R} -type=Instant -[/card] -[card] name=Wishmonger text={2}: Target creature gains protection from the color of its controller's choice until end of turn. Any player may activate this ability. mana={3}{W} @@ -15888,12 +15470,6 @@ power=3 toughness=3 [/card] [card] -name=Withdraw -text=Return target creature to its owner's hand. Then return another target creature to its owner's hand unless its controller pays {1}. -mana={U}{U} -type=Instant -[/card] -[card] name=Wojek Apothecary text=Radiance — {T}: Prevent the next 1 damage that would be dealt to target creature and each other creature that shares a color with it this turn. mana={2}{W}{W} @@ -16028,16 +15604,6 @@ mana={4}{WU}{WU}{WU}{WU} type=Sorcery [/card] [card] -name=Wormfang Crab -abilities=unblockable. -text=Wormfang Crab is unblockable. -- When Wormfang Crab enters the battlefield, an opponent chooses a permanent you control other than Wormfang Crab and exiles it. -- When Wormfang Crab leaves the battlefield, return the exiled card to the battlefield under its owner's control. -mana={3}{U} -type=Creature -subtype=Nightmare Crab -power=3 -toughness=6 -[/card] -[card] name=Worms of the Earth text=Players can't play lands. -- Lands can't enter the battlefield. -- At the beginning of each upkeep, any player may sacrifice two lands or have Worms of the Earth deal 5 damage to him or her. If a player does either, destroy Worms of the Earth. mana={2}{B}{B}{B} @@ -16079,12 +15645,6 @@ type=Legendary Planeswalker subtype=Wrenn [/card] [card] -name=Wretched Confluence -text=Choose three. You may choose the same mode more than once. -- • Target player draws a card and loses 1 life. -- • Target creature gets -2/-2 until end of turn. -- • Return target creature card from your graveyard to your hand. -mana={3}{B}{B} -type=Instant -[/card] -[card] name=Write into Being text=Look at the top two cards of your library. Manifest one of those cards, then put the other on the top or bottom of your library. (To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card.) mana={2}{U} @@ -16100,21 +15660,6 @@ power=2 toughness=2 [/card] [card] -name=Xenic Poltergeist -text={T}: Until your next upkeep, target noncreature artifact becomes an artifact creature with power and toughness each equal to its converted mana cost. -mana={1}{B}{B} -type=Creature -subtype=Spirit -power=1 -toughness=1 -[/card] -[card] -name=Yare -text=Target creature defending player controls gets +3/+0 until end of turn. That creature can block up to two additional creatures this turn. -mana={2}{W} -type=Instant -[/card] -[card] name=Yarok, the Desecrated text=Deathtouch, lifelink -- If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. mana={2}{B}{G}{U} @@ -16240,16 +15785,6 @@ power=2 toughness=4 [/card] [card] -name=Zerapa Minotaur -abilities=first strike -text=First strike -- {2}: Zerapa Minotaur loses first strike until end of turn. Any player may activate this ability. -mana={2}{R}{R} -type=Creature -subtype=Minotaur -power=3 -toughness=3 -[/card] -[card] name=Zhalfirin Crusader abilities=flanking text=Flanking (Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn.) -- {1}{W}: The next 1 damage that would be dealt to Zhalfirin Crusader this turn is dealt to target creature or player instead. diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index fa2450033..3c86404eb 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -578,13 +578,9 @@ private: { intValue = card->controller()->opponent()->energyCount; } - else if (s == "pyidarocount") + else if (s == "pyidarocount" || s == "oyidarocount") { - intValue = card->controller()->yidaroCount; - } - else if (s == "oyidarocount") - { - intValue = card->controller()->opponent()->yidaroCount; + intValue = (s == "pyidarocount")?card->controller()->yidaroCount:card->controller()->opponent()->yidaroCount; } else if (s == "praidcount") { @@ -1672,6 +1668,29 @@ public: } }; +class TrTokenCreated: public Trigger +{ +public: + bool thiscontroller, thisopponent; + TrTokenCreated(GameObserver* observer, int id, MTGCardInstance * source, TargetChooser * tc,bool once = false) : + Trigger(observer, id, source,once, tc) + { + } + + int triggerOnEventImpl(WEvent * event) + { + WEventTokenCreated * e = dynamic_cast (event); + if (!e) return 0; + if (!tc->canTarget(e->card)) return 0; + return 1; + } + + TrTokenCreated * clone() const + { + return NEW TrTokenCreated(*this); + } +}; + class TrCardSacrificed: public Trigger { public: @@ -1920,8 +1939,10 @@ class TrCounter: public Trigger public: Counter * counter; int type; - TrCounter(GameObserver* observer, int id, MTGCardInstance * source, Counter * counter, TargetChooser * tc, int type = 0,bool once = false) : - Trigger(observer, id, source, once, tc),counter(counter), type(type) + bool duplicate; + MTGCardInstance * counterException; //added exception to avid a counter loop (eg. Doubling Season) + TrCounter(GameObserver* observer, int id, MTGCardInstance * source, Counter * counter, TargetChooser * tc, int type = 0, bool once = false, bool duplicate = false, MTGCardInstance * counterException = NULL) : + Trigger(observer, id, source, once, tc), counter(counter), type(type), duplicate(duplicate), counterException(counterException) { } @@ -1931,8 +1952,15 @@ public: if (!e) return 0; if (type == 0 && !e->removed) return 0; if (type == 1 && !e->added) return 0; - if (!(e->power == counter->power && e->toughness == counter->toughness && e->name == counter->name)) return 0; + if (counterException && e->source && !strcmp(counterException->data->name.c_str(), e->source->data->name.c_str())) return 0; //If the source of counter gain/loss it's the exception card it doesn't have effect (loop avoidance); + if (counter && !(e->power == counter->power && e->toughness == counter->toughness && e->name == counter->name)) return 0; if (tc && !tc->canTarget(e->targetCard)) return 0; + if (duplicate){ + if(type == 1) + e->targetCard->counters->addCounter(e->name.c_str(),e->power,e->toughness,true,true,e->source); + else + e->targetCard->counters->removeCounter(counter->name.c_str(),counter->power,counter->toughness,true,true,e->source); + } return 1; } @@ -2147,13 +2175,35 @@ class AAProliferate: public ActivatedAbility { public: bool allcounters; - AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,ManaCost * cost = NULL); + AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL); int resolve(); const string getMenuText(); AAProliferate * clone() const; ~AAProliferate(); }; +class AADuplicateCounters: public ActivatedAbility +{ +public: + bool allcounters; + AADuplicateCounters(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL); + int resolve(); + const string getMenuText(); + AADuplicateCounters * clone() const; + ~AADuplicateCounters(); +}; + +class AARemoveSingleCounter: public ActivatedAbility +{ +public: + int nb; + AARemoveSingleCounter(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost = NULL, int nb = 1); + int resolve(); + const string getMenuText(); + AARemoveSingleCounter * clone() const; + ~AARemoveSingleCounter(); +}; + //MultiAbility : triggers several actions for a cost class MultiAbility: public ActivatedAbility { @@ -2243,13 +2293,14 @@ public: int who; string with; string types; + string options; list awith; list colors; list typesToAdd; MTGAbility * andAbility; AACloner(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target = NULL, ManaCost * _cost = NULL, int who = 0, - string abilitiesStringList = "",string typeslist = ""); + string abilitiesStringList = "", string typeslist = "", string optionsList = ""); int resolve(); const string getMenuText(); virtual ostream& toString(ostream& out) const; @@ -4060,6 +4111,8 @@ public: andAbilityClone->addToGame(); } } + WEvent * e = NEW WEventTokenCreated(myToken); + source->getObserver()->receiveEvent(e); // triggers the @tokencreated event for any other listener. delete spell; } return 1; @@ -7035,7 +7088,7 @@ public: bool noEvent; bool putinplay; bool asNormalMadness; - bool alternative; + bool alternative; AACastCard(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target,bool restricted,bool copied,bool _asNormal,string nameCard,string abilityName,bool _noEvent, bool putinplay,bool asNormalMadness = false,bool alternative = false); int testDestroy(){return 0;}; diff --git a/projects/mtg/include/Counters.h b/projects/mtg/include/Counters.h index 26478fa8d..f4fd9b87c 100644 --- a/projects/mtg/include/Counters.h +++ b/projects/mtg/include/Counters.h @@ -19,7 +19,7 @@ public: int init(MTGCardInstance * _target, const char * _name, int _power, int _toughness); bool sameAs(const char * _name, int _power, int _toughness); bool cancels(int _power, int _toughness); - int cancelCounter(int power, int toughness); + int cancelCounter(int power, int toughness, MTGCardInstance * _source); int added(); int removed(); }; @@ -29,14 +29,14 @@ class Counters { public: int mCount; - vectorcounters; + vectorcounters; MTGCardInstance * target; Counters(MTGCardInstance * _target); ~Counters(); - int addCounter(const char * _name, int _power = 0, int _toughness = 0, bool _noevent = false); + int addCounter(const char * _name, int _power = 0, int _toughness = 0, bool _noevent = false, bool duplicated = false, MTGCardInstance * _source = NULL); int addCounter(int _power, int _toughness); int addCounter(int _power, int _toughness, bool _noevent); - int removeCounter(const char * _name, int _power = 0, int _toughness = 0); + int removeCounter(const char * _name, int _power = 0, int _toughness = 0, bool _noevent = false, bool duplicated = false, MTGCardInstance * _source = NULL); int removeCounter(int _power, int _toughness); Counter * hasCounter(const char * _name, int _power = 0, int _toughness = 0); Counter * hasCounter(int _power, int _toughness); diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index 619d4229c..70d5f72db 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -63,7 +63,8 @@ struct WEventCounters : public WEvent { int toughness; bool added; bool removed; - WEventCounters(Counters *counter,string name,int power, int toughness,bool added = false, bool removed = false); + MTGCardInstance * source; + WEventCounters(Counters *counter,string name,int power, int toughness,bool added = false, bool removed = false, MTGCardInstance * source = NULL); using WEvent::getTarget; virtual Targetable * getTarget(); }; @@ -357,6 +358,12 @@ struct WEventCardMutated : public WEventCardUpdate { virtual Targetable * getTarget(int target); }; +//token creation event +struct WEventTokenCreated : public WEventCardUpdate { + WEventTokenCreated(MTGCardInstance * card); + virtual Targetable * getTarget(int target); +}; + std::ostream& operator<<(std::ostream&, const WEvent&); #endif diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index a1190292d..cc600de5b 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1894,7 +1894,7 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M } if(!maxNb || (maxNb && currentAmount < maxNb)) { - _target->counters->addCounter(name.c_str(), power, toughness); + _target->counters->addCounter(name.c_str(), power, toughness, false, false, source); } } } @@ -1904,7 +1904,7 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M { while (_target->next) _target = _target->next; - _target->counters->removeCounter(name.c_str(), power, toughness); + _target->counters->removeCounter(name.c_str(), power, toughness, false, false, source); } } @@ -1920,7 +1920,7 @@ AACounter::AACounter(GameObserver* observer, int id, MTGCardInstance * source, M { if (_target->counters->counters[i]->cancels(power, toughness) && !name.size() && _target->counters->counters[i]->nb > 0) { - _target->counters->counters[i]->cancelCounter(power,toughness); + _target->counters->counters[i]->cancelCounter(power,toughness, source); } } } @@ -2157,8 +2157,147 @@ AARemoveAllCounter * AARemoveAllCounter::clone() const return NEW AARemoveAllCounter(*this); } +//remove a single counter of a spefic kind chosen by user +AARemoveSingleCounter::AARemoveSingleCounter(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost, int nb) : +ActivatedAbility(observer, id, source, cost, 0), nb(nb) +{ + this->GetId(); +} + +int AARemoveSingleCounter::resolve() +{ + if (!target) + return 0; + + vectorpcounters; + + Player * pTarget = dynamic_cast(target); + MTGCardInstance * cTarget = dynamic_cast(target); + + if(pTarget && pTarget->poisonCount) + { + MTGAbility * a = NEW AAAlterPoison(game, game->mLayers->actionLayer()->getMaxId(), source, target, -nb, NULL); + a->oneShot = true; + pcounters.push_back(a); + } + else if(pTarget && pTarget->energyCount) + { + MTGAbility * a = NEW AAAlterEnergy(game, game->mLayers->actionLayer()->getMaxId(), source, target, -nb, NULL); + a->oneShot = true; + pcounters.push_back(a); + } + else if (cTarget && cTarget->counters) + { + Counters * counters = cTarget->counters; + for(size_t i = 0; i < counters->counters.size(); ++i) + { + Counter * counter = counters->counters[i]; + MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, -nb, 0); + a->oneShot = true; + pcounters.push_back(a); + } + } + if(pcounters.size()) + { + MTGAbility * a = NEW MenuAbility(game, this->GetId(), target, source,false,pcounters); + a->resolve(); + } + return 1; + +} + +const string AARemoveSingleCounter::getMenuText() +{ + return "Remove single specific counter"; +} + +AARemoveSingleCounter * AARemoveSingleCounter::clone() const +{ + return NEW AARemoveSingleCounter(*this); +} + +AARemoveSingleCounter::~AARemoveSingleCounter() +{ +} + +//duplicate counters +AADuplicateCounters::AADuplicateCounters(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost) : +ActivatedAbility(observer, id, source, cost, 0) +{ + this->GetId(); + allcounters = false; +} + +int AADuplicateCounters::resolve() +{ + if (!target) + return 0; + + vectorpcounters; + + Player * pTarget = dynamic_cast(target); + MTGCardInstance * cTarget = dynamic_cast(target); + + if(pTarget && pTarget->poisonCount) + { + MTGAbility * a = NEW AAAlterPoison(game, game->mLayers->actionLayer()->getMaxId(), source, target, pTarget->poisonCount, NULL); + a->oneShot = true; + pcounters.push_back(a); + } + else if(pTarget && pTarget->energyCount) + { + MTGAbility * a = NEW AAAlterEnergy(game, game->mLayers->actionLayer()->getMaxId(), source, target, pTarget->energyCount, NULL); + a->oneShot = true; + pcounters.push_back(a); + } + else if (cTarget && cTarget->counters) + { + Counters * counters = cTarget->counters; + for(size_t i = 0; i < counters->counters.size(); ++i) + { + Counter * counter = counters->counters[i]; + MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, counter->nb, 0); + a->oneShot = true; + pcounters.push_back(a); + } + } + if(pcounters.size()) + { + if(allcounters) + { + for(size_t j = 0; j < pcounters.size(); j++) + { + pcounters[j]->resolve(); + } + } + else + { + MTGAbility * a = NEW MenuAbility(game, this->GetId(), target, source,false,pcounters); + a->resolve(); + } + } + return 1; + +} + +const string AADuplicateCounters::getMenuText() +{ + if(allcounters) + return "Duplicate all Counters"; + return "Duplicate specific Counters"; +} + +AADuplicateCounters * AADuplicateCounters::clone() const +{ + return NEW AADuplicateCounters(*this); +} + +AADuplicateCounters::~AADuplicateCounters() +{ +} + //proliferate a target -AAProliferate::AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target,ManaCost * cost) : +AAProliferate::AAProliferate(GameObserver* observer, int id, MTGCardInstance * source, Targetable * target, ManaCost * cost) : ActivatedAbility(observer, id, source, cost, 0) { this->GetId(); @@ -2193,7 +2332,7 @@ int AAProliferate::resolve() for(size_t i = 0; i < counters->counters.size(); ++i) { Counter * counter = counters->counters[i]; - MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, 1,0); + MTGAbility * a = NEW AACounter(game, game->mLayers->actionLayer()->getMaxId(), source, cTarget,"", counter->name.c_str(), counter->power, counter->toughness, 1, 0); a->oneShot = true; pcounters.push_back(a); } @@ -4366,12 +4505,13 @@ AALifeSet::~AALifeSet() //AACloner //cloning...this makes a token thats a copy of the target. AACloner::AACloner(GameObserver* observer, int _id, MTGCardInstance * _source, MTGCardInstance * _target, ManaCost * _cost, int who, - string abilitiesStringList,string TypesList) : + string abilitiesStringList, string TypesList, string optionsList) : ActivatedAbility(observer, _id, _source, _cost, 0), who(who) { aType = MTGAbility::CLONING; target = _target; source = _source; + options = optionsList; if (abilitiesStringList.size() > 0) { PopulateAbilityIndexVector(awith, abilitiesStringList); @@ -4497,6 +4637,10 @@ int AACloner::resolve() andAbilityClone->addToGame(); } } + if(options.find("notrigger") == string::npos){ // check if the @tokencreated trigger has to be activated or not + WEvent * e = NEW WEventTokenCreated(spell->source); + source->getObserver()->receiveEvent(e); // triggers the @tokencreated event for any other listener. + } delete spell; } return 1; diff --git a/projects/mtg/src/Counters.cpp b/projects/mtg/src/Counters.cpp index 4b89c10dd..eb8176b3d 100644 --- a/projects/mtg/src/Counters.cpp +++ b/projects/mtg/src/Counters.cpp @@ -38,14 +38,14 @@ bool Counter::cancels(int _power, int _toughness) return (power == -_power && toughness == -_toughness); } -int Counter::cancelCounter(int power, int toughness) +int Counter::cancelCounter(int power, int toughness, MTGCardInstance * _source) { while(this->target->counters->hasCounter(power,toughness) && this->target->counters->hasCounter(power*-1,toughness*-1)) { GameObserver *g = this->target->getObserver(); this->removed(); this->nb--; - WEvent * t = NEW WEventCounters(NULL,"",power*-1,toughness*-1,false,true); + WEvent * t = NEW WEventCounters(NULL,"",power*-1,toughness*-1,false,true,_source); dynamic_cast(t)->targetCard = this->target; g->receiveEvent(t); this->target->counters->removeCounter(power,toughness); @@ -98,7 +98,7 @@ Counters::~Counters() } } -int Counters::addCounter(const char * _name, int _power, int _toughness, bool _noevent) +int Counters::addCounter(const char * _name, int _power, int _toughness, bool _noevent, bool duplicated, MTGCardInstance * _source) { /*420.5n If a permanent has both a +1/+1 counter and a -1/-1 counter on it, N +1/+1 and N -1/-1 counters are removed from it, where N is the smaller of the number of +1/+1 and -1/-1 counters on it.*/ GameObserver *g = target->getObserver(); @@ -112,9 +112,12 @@ int Counters::addCounter(const char * _name, int _power, int _toughness, bool _n { counters[i]->added(); counters[i]->nb++; - WEvent * j = NEW WEventCounters(this,_name,_power,_toughness,true,false); - dynamic_cast(j)->targetCard = this->target; - g->receiveEvent(j); + if (!duplicated) + { + WEvent * j = NEW WEventCounters(this,_name,_power,_toughness,true,false,_source); + dynamic_cast(j)->targetCard = this->target; + g->receiveEvent(j); + } delete(e); return mCount; } @@ -122,13 +125,13 @@ int Counters::addCounter(const char * _name, int _power, int _toughness, bool _n Counter * counter = NEW Counter(target, _name, _power, _toughness); counters.push_back(counter); counter->added(); - if (!_noevent) + mCount++; + if (!_noevent && !duplicated) { - WEvent * w = NEW WEventCounters(this,_name,_power,_toughness,true,false); + WEvent * w = NEW WEventCounters(this,_name,_power,_toughness,true,false,_source); dynamic_cast(w)->targetCard = this->target; g->receiveEvent(w); } - mCount++; /*the damage test should be handled on game state based effect i think*/ //this->target->doDamageTest = 1; //this->target->afterDamage(); @@ -160,7 +163,7 @@ int Counters::init() return 1; } -int Counters::removeCounter(const char * _name, int _power, int _toughness) +int Counters::removeCounter(const char * _name, int _power, int _toughness, bool _noevent, bool duplicated, MTGCardInstance * _source) { for (int i = 0; i < mCount; i++) { @@ -172,10 +175,12 @@ int Counters::removeCounter(const char * _name, int _power, int _toughness) counters[i]->removed(); counters[i]->nb--; GameObserver *g = target->getObserver(); - WEvent * e = NEW WEventCounters(this,_name,_power,_toughness,false,true); - dynamic_cast(e)->targetCard = this->target; - g->receiveEvent(e); - + if (!_noevent && !duplicated) + { + WEvent * e = NEW WEventCounters(this,_name,_power,_toughness,false,true,_source); + dynamic_cast(e)->targetCard = this->target; + g->receiveEvent(e); + } // special case: when the last time counter is removed from non-suspended card // sacrifice that card if (!target->suspended && counters[i]->name == "time" && counters[i]->nb == 0) { diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 69b97d23a..b5bb2892b 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -1072,9 +1072,8 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell fromTc = tcf.createTargetChooser(starget, card); fromTc->targetter = NULL; //avoid protection from } - TriggeredAbility * mover = NEW TrCardAddedToZone(observer, id, card, (TargetZoneChooser *) toTc, - toTcCard, (TargetZoneChooser *) fromTc, fromTcCard, once, sourceUntapped, isSuspended, limitOnceATurn); - if(neverRemove) + TriggeredAbility * mover = NEW TrCardAddedToZone(observer, id, card, (TargetZoneChooser *) toTc, toTcCard, (TargetZoneChooser *) fromTc, fromTcCard, once, sourceUntapped, isSuspended, limitOnceATurn); + if(neverRemove && mover) { mover->forcedAlive = 1; mover->forceDestroy = -1; @@ -1172,6 +1171,10 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell //Card is mutated if (TargetChooser * tc = parseSimpleTC(s, "mutated", card)) return NEW TrCardMutated(observer, id, card, tc,once); + + //Token has been created + if (TargetChooser * tc = parseSimpleTC(s, "tokencreated", card)) + return NEW TrTokenCreated(observer, id, card, tc,once); //Card is sacrificed if (TargetChooser * tc = parseSimpleTC(s, "sacrificed", card)) @@ -1331,17 +1334,35 @@ TriggeredAbility * AbilityFactory::parseTrigger(string s, string, int id, Spell if (s.find("counteradded(") != string::npos) { vectorsplitCounter = parseBetween(s,"counteradded(",")"); - Counter * counter = parseCounter(splitCounter[1],card,NULL); + Counter * counter = NULL; + bool duplicate = false; + if(s.find("(duplicateall)") != string::npos) + duplicate = true; + else if(s.find("(any)") == string::npos) + counter = parseCounter(splitCounter[1],card,NULL); TargetChooser * tc = parseSimpleTC(s, "from", card); - return NEW TrCounter(observer, id, card, counter, tc, 1,once); + TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a counter add/remove exception in order to avoid counter loop (eg. Doubling Season) + if(exception) + return NEW TrCounter(observer, id, card, counter, tc, 1, once, duplicate, exception->source); + else + return NEW TrCounter(observer, id, card, counter, tc, 1, once, duplicate); } if (s.find("counterremoved(") != string::npos) { vectorsplitCounter = parseBetween(s,"counterremoved(",")"); - Counter * counter = parseCounter(splitCounter[1],card,NULL); + Counter * counter = NULL; + bool duplicate = false; + if(s.find("(duplicateall)") != string::npos) + duplicate = true; + else if(s.find("(any)") == string::npos) + counter = parseCounter(splitCounter[1],card,NULL); TargetChooser * tc = parseSimpleTC(s, "from", card); - return NEW TrCounter(observer, id, card, counter, tc, 0,once); + TargetChooser *exception = parseSimpleTC(s, "except", card); // Added a new keyword except to specify a counter add/remove exception in order to avoid counter loop (eg. Doubling Season) + if(exception) + return NEW TrCounter(observer, id, card, counter, tc, 0, once, duplicate, exception->source); + else + return NEW TrCounter(observer, id, card, counter, tc, 0, once, duplicate); } int who = 0; @@ -3047,6 +3068,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG { string with = ""; string types = ""; + string options = ""; vector splitWith = parseBetween(s, "with(", ")"); if (splitWith.size()) { @@ -3057,7 +3079,12 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG { types = splitTypes[1]; } - MTGAbility * a = NEW AACloner(observer, id, card, target, 0, who, with,types); + vector splitOptions = parseBetween(s, "options(", ")"); + if (splitOptions.size()) + { + options = splitOptions[1]; + } + MTGAbility * a = NEW AACloner(observer, id, card, target, 0, who, with, types, options); a->oneShot = 1; if(storedAndAbility.size()) { @@ -3132,7 +3159,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG bool asNormalMadness = splitCastCard[1].find("madness") != string::npos; bool sendNoEvent = splitCastCard[1].find("noevent") != string::npos; bool putinplay = splitCastCard[1].find("putinplay") != string::npos; - bool alternative = splitCastCard[1].find("alternative") != string::npos; + bool alternative = splitCastCard[1].find("alternative") != string::npos; string nameCard = ""; if(splitCastCard[1].find("named!:") != string::npos) { @@ -3719,6 +3746,28 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG string splitCounterTrack = splitCounterTracking[1]; return NEW ACounterTracker(observer, id, card, target,splitCounterTrack); } + //duplicate counters + vector splitDuplicateCounters = parseBetween(s, "duplicatecounters(", ")"); + if (splitDuplicateCounters.size()) + { + MTGAbility * a = NEW AADuplicateCounters(observer, id, card, target, NULL); + a->oneShot = 1; + a->canBeInterrupted = false; + string counterString = splitDuplicateCounters[1]; + if(counterString.find("all") != string::npos) + ((AADuplicateCounters*)a)->allcounters = true; + return a; + } + //remove single counter of any type + vector splitRemoveSpecificCounters = parseBetween(s, "removesinglecountertype(", ")"); + if (splitRemoveSpecificCounters.size()) + { + int nb = atoi(splitRemoveSpecificCounters[1].c_str()); + MTGAbility * a = NEW AARemoveSingleCounter(observer, id, card, target, NULL, nb); + a->oneShot = 1; + a->canBeInterrupted = false; + return a; + } //removes all counters of the specifified type. vector splitRemoveCounter = parseBetween(s, "removeallcounters(", ")"); if (splitRemoveCounter.size()) @@ -4176,7 +4225,7 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG ((AAProliferate*)a)->allcounters = true; return a; } - + //frozen, next untap this does not untap. found = s.find("frozen"); if (found != string::npos) diff --git a/projects/mtg/src/MTGRules.cpp b/projects/mtg/src/MTGRules.cpp index 31ec6f8ee..00bd6e17e 100644 --- a/projects/mtg/src/MTGRules.cpp +++ b/projects/mtg/src/MTGRules.cpp @@ -911,7 +911,7 @@ int MTGAlternativeCostRule::reactToClick(MTGCardInstance * card, ManaCost *alter ManaCost * Xcost = NEW ManaCost(); Xcost->copy(alternateCost); Xcost->add(Constants::MTG_COLOR_ARTIFACT, card->setX); - card->X = card->setX; // Fix to don't loose X value on alternative cast + card->X = card->setX; // Fix to don't loose X value on alternative cast Xcost->remove(7, 1);//remove the X if (playerMana->canAfford(Xcost)) { @@ -3414,7 +3414,7 @@ int MTGNewLegend::receiveEvent(WEvent * e) { if(card->basicAbilities[(int)Constants::MUTATE] && card->alternateCostPaid[(int)ManaCost::MANA_PAID_WITH_ALTERNATIVE]) return 0; // The Leged rule for Mutating card will be checked later just if it's a Mutation Over choice - CheckLegend(card); + CheckLegend(card); return 1; } } diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index f26509437..368aaa57e 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -43,8 +43,8 @@ WEventCardUpdate::WEventCardUpdate(MTGCardInstance * card) : } ; -WEventCounters::WEventCounters(Counters *counter,string name,int power,int toughness,bool added,bool removed) : -WEvent(),counter(counter),name(name),power(power),toughness(toughness),added(added),removed(removed) +WEventCounters::WEventCounters(Counters *counter,string name,int power,int toughness,bool added,bool removed, MTGCardInstance* source) : +WEvent(),counter(counter),name(name),power(power),toughness(toughness),added(added),removed(removed),source(source) { } @@ -291,6 +291,11 @@ WEventCardMutated::WEventCardMutated(MTGCardInstance * card) : WEventCardUpdate(card) { } + +WEventTokenCreated::WEventTokenCreated(MTGCardInstance * card) : + WEventCardUpdate(card) +{ +} ; Targetable * WEventDamage::getTarget(int target) @@ -495,6 +500,12 @@ Targetable * WEventCardMutated::getTarget(int target) return NULL; } +Targetable * WEventTokenCreated::getTarget(int target) +{ + if (target) return card; + return NULL; +} + Targetable * WEventplayerEnergized::getTarget(Player * player) { if (player) return player;