From 98a75846c69f53f17389401096d2a19c697045d3 Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Wed, 3 Jun 2015 20:36:07 +0200 Subject: Have a working example to parse JSON sets and get cards by number --- .classpath | 9 + .project | 17 + .travis.yml | 8 - M15.json | 1 + bin/eu/equalparts/cardbase/data/Card.class | Bin 0 -> 5679 bytes bin/eu/equalparts/cardbase/data/CardBase.class | Bin 0 -> 550 bytes bin/eu/equalparts/cardbase/data/CardSet.class | Bin 0 -> 2817 bytes bin/eu/equalparts/cardbase/query/Test.class | Bin 0 -> 2792 bytes .../cardbase/standalone/CardBaseCLI.class | Bin 0 -> 2109 bytes cardbase.py | 76 - cardparser.py | 180 - ext/jackson-annotations-2.5.0.jar | Bin 0 -> 39815 bytes ext/jackson-core-2.5.3-sources.jar | Bin 0 -> 241161 bytes ext/jackson-core-2.5.3.jar | Bin 0 -> 229998 bytes ext/jackson-databind-2.5.3-sources.jar | Bin 0 -> 824134 bytes ext/jackson-databind-2.5.3.jar | Bin 0 -> 1143162 bytes fulltest.sh | 3 - shivandragon.json | 1 + src/eu/equalparts/cardbase/data/Card.java | 233 + src/eu/equalparts/cardbase/data/CardBase.java | 23 + src/eu/equalparts/cardbase/data/CardSet.java | 86 + src/eu/equalparts/cardbase/query/Test.java | 72 + .../cardbase/standalone/CardBaseCLI.java | 69 + test_callow.py | 75 - test_cardclass.py | 65 - test_coecon.py | 74 - test_fetching.py | 17 - test_hydra.py | 74 - test_island.py | 74 - test_nightmare.py | 74 - test_shivandragon.py | 74 - test_shoal.py | 75 - test_sorin.py | 75 - test_ugin.py | 74 - testcards/callow | 362 - testcards/coecon | 389 - testcards/hydra | 367 - testcards/island | 11785 ------------------- testcards/nightmare | 1004 -- testcards/shivandragon | 1032 -- testcards/shoal | 356 - testcards/sorin | 439 - testcards/ugincons | 389 - 43 files changed, 511 insertions(+), 17141 deletions(-) create mode 100644 .classpath create mode 100644 .project delete mode 100644 .travis.yml create mode 100644 M15.json create mode 100644 bin/eu/equalparts/cardbase/data/Card.class create mode 100644 bin/eu/equalparts/cardbase/data/CardBase.class create mode 100644 bin/eu/equalparts/cardbase/data/CardSet.class create mode 100644 bin/eu/equalparts/cardbase/query/Test.class create mode 100644 bin/eu/equalparts/cardbase/standalone/CardBaseCLI.class delete mode 100755 cardbase.py delete mode 100644 cardparser.py create mode 100644 ext/jackson-annotations-2.5.0.jar create mode 100644 ext/jackson-core-2.5.3-sources.jar create mode 100644 ext/jackson-core-2.5.3.jar create mode 100644 ext/jackson-databind-2.5.3-sources.jar create mode 100644 ext/jackson-databind-2.5.3.jar delete mode 100755 fulltest.sh create mode 100644 shivandragon.json create mode 100644 src/eu/equalparts/cardbase/data/Card.java create mode 100644 src/eu/equalparts/cardbase/data/CardBase.java create mode 100644 src/eu/equalparts/cardbase/data/CardSet.java create mode 100644 src/eu/equalparts/cardbase/query/Test.java create mode 100644 src/eu/equalparts/cardbase/standalone/CardBaseCLI.java delete mode 100755 test_callow.py delete mode 100755 test_cardclass.py delete mode 100755 test_coecon.py delete mode 100755 test_fetching.py delete mode 100755 test_hydra.py delete mode 100755 test_island.py delete mode 100755 test_nightmare.py delete mode 100755 test_shivandragon.py delete mode 100755 test_shoal.py delete mode 100755 test_sorin.py delete mode 100755 test_ugin.py delete mode 100644 testcards/callow delete mode 100644 testcards/coecon delete mode 100644 testcards/hydra delete mode 100644 testcards/island delete mode 100644 testcards/nightmare delete mode 100644 testcards/shivandragon delete mode 100644 testcards/shoal delete mode 100644 testcards/sorin delete mode 100644 testcards/ugincons diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..e113c09 --- /dev/null +++ b/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..71114ec --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Cardbase + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 46f140d..0000000 --- a/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: python -python: - - "3.4" -# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors -install: pip install lxml requests -# command to run tests, e.g. python setup.py test -#script: python -m unittest test_shivandragon test_callow test_cardclass test_sorin -script: ./fulltest.sh diff --git a/M15.json b/M15.json new file mode 100644 index 0000000..bab3bc6 --- /dev/null +++ b/M15.json @@ -0,0 +1 @@ +{"name":"Magic 2015 Core Set","code":"M15","magicCardsInfoCode":"m15","releaseDate":"2014-07-18","border":"black","type":"core","booster":[["rare","mythic rare"],"uncommon","uncommon","uncommon","common","common","common","common","common","common","common","common","common","common","land","marketing"],"cards":[{"layout":"normal","type":"Creature — Spirit","types":["Creature"],"colors":["Black"],"multiverseid":383175,"name":"Accursed Spirit","subtypes":["Spirit"],"cmc":4,"rarity":"Common","artist":"Kev Walker","power":"3","toughness":"2","manaCost":"{3}{B}","text":"Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)","flavor":"Many have heard the slither of dragging armor and the soft squelch of its voice. But only its victims ever meet its icy gaze.","number":"85","imageName":"accursed spirit"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Red"],"multiverseid":383176,"name":"Act on Impulse","cmc":3,"rarity":"Uncommon","artist":"Brad Rigney","manaCost":"{2}{R}","text":"Exile the top three cards of your library. Until end of turn, you may play cards exiled this way. (If you cast a spell this way, you still pay its costs. You can play a land this way only if you have an available land play remaining.)","flavor":"\"You don't want to know what happens after I put on the goggles.\"","number":"126","imageName":"act on impulse"},{"layout":"normal","type":"Creature — Angel","types":["Creature"],"colors":["White"],"multiverseid":383160,"name":"Aegis Angel","subtypes":["Angel"],"cmc":6,"rarity":"Rare","artist":"Aleksi Briclot","power":"5","toughness":"5","manaCost":"{4}{W}{W}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhen Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel. (Effects that say \"destroy\" don't destroy it. A creature with indestructible can't be destroyed by damage.)","number":"270","imageName":"aegis angel","starter":true},{"layout":"normal","type":"Creature — Human Artificer","types":["Creature"],"colors":["Blue"],"multiverseid":383177,"name":"Aeronaut Tinkerer","subtypes":["Human","Artificer"],"cmc":3,"rarity":"Common","artist":"Willian Murai","power":"2","toughness":"3","manaCost":"{2}{U}","text":"Aeronaut Tinkerer has flying as long as you control an artifact. (It can't be blocked except by creatures with flying or reach.)","flavor":"\"All tinkerers have their heads in the clouds. I don't intend to stop there.\"","number":"43","imageName":"aeronaut tinkerer"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383178,"name":"Ætherspouts","cmc":5,"rarity":"Rare","artist":"Dan Scott","manaCost":"{3}{U}{U}","text":"For each attacking creature, its owner puts it on the top or bottom of his or her library.","flavor":"\"Don't worry, there's plenty for everyone.\"\n—Vickon, Eleventh Company battlemage","number":"44","imageName":"aetherspouts"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Red"],"multiverseid":383179,"name":"Aggressive Mining","cmc":4,"rarity":"Rare","artist":"Franz Vohwinkel","manaCost":"{3}{R}","text":"You can't play lands.\nSacrifice a land: Draw two cards. Activate this ability only once each turn.","flavor":"Designed by Markus Persson","number":"127","imageName":"aggressive mining"},{"layout":"normal","type":"Planeswalker — Ajani","types":["Planeswalker"],"colors":["White"],"multiverseid":383180,"name":"Ajani Steadfast","subtypes":["Ajani"],"cmc":4,"rarity":"Mythic Rare","artist":"Chris Rahn","loyalty":4,"manaCost":"{3}{W}","text":"+1: Until end of turn, up to one target creature gets +1/+1 and gains first strike, vigilance, and lifelink.\n−2: Put a +1/+1 counter on each creature you control and a loyalty counter on each other planeswalker you control.\n−7: You get an emblem with \"If a source would deal damage to you or a planeswalker you control, prevent all but 1 of that damage.\"","number":"1","imageName":"ajani steadfast"},{"layout":"normal","type":"Creature — Cat Soldier","types":["Creature"],"colors":["White"],"multiverseid":383181,"name":"Ajani's Pridemate","subtypes":["Cat","Soldier"],"cmc":2,"rarity":"Uncommon","artist":"Svetlin Velinov","power":"2","toughness":"2","manaCost":"{1}{W}","text":"Whenever you gain life, you may put a +1/+1 counter on Ajani's Pridemate.","flavor":"\"When one of us prospers, the pride prospers.\"\n—Jazal Goldmane","number":"2","imageName":"ajani's pridemate"},{"layout":"normal","type":"Creature — Human Berserker","types":["Creature"],"colors":["Red"],"multiverseid":383182,"name":"Altac Bloodseeker","subtypes":["Human","Berserker"],"cmc":2,"rarity":"Uncommon","artist":"Cynthia Sheppard","power":"2","toughness":"1","manaCost":"{1}{R}","text":"Whenever a creature an opponent controls dies, Altac Bloodseeker gets +2/+0 and gains first strike and haste until end of turn. (It deals combat damage before creatures without first strike, and it can attack and {T} as soon as it comes under your control.)","number":"128","imageName":"altac bloodseeker"},{"layout":"normal","type":"Creature — Salamander Wizard","types":["Creature"],"colors":["Blue"],"multiverseid":383183,"name":"Amphin Pathmage","subtypes":["Salamander","Wizard"],"cmc":4,"rarity":"Common","artist":"Mark Winters","power":"3","toughness":"2","manaCost":"{3}{U}","text":"{2}{U}: Target creature can't be blocked this turn.","flavor":"\"There are those who do not believe in the existence of the amphin. This seems somehow to be of their own design.\"\n—Gor Muldrak, Cryptohistories","number":"45","imageName":"amphin pathmage"},{"layout":"normal","type":"Creature — Ape","types":["Creature"],"colors":["Green"],"multiverseid":383184,"name":"Ancient Silverback","subtypes":["Ape"],"cmc":6,"rarity":"Uncommon","artist":"Scott M. Fischer","power":"6","toughness":"5","manaCost":"{4}{G}{G}","text":"{G}: Regenerate Ancient Silverback. (The next time this creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat.)","number":"168","imageName":"ancient silverback"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Creature — Angel","types":["Creature"],"colors":["White"],"multiverseid":383185,"name":"Avacyn, Guardian Angel","subtypes":["Angel"],"cmc":5,"rarity":"Rare","artist":"Winona Nelson","power":"5","toughness":"4","manaCost":"{2}{W}{W}{W}","text":"Flying, vigilance\n{1}{W}: Prevent all damage that would be dealt to another target creature this turn by sources of the color of your choice.\n{5}{W}{W}: Prevent all damage that would be dealt to target player this turn by sources of the color of your choice.","number":"3","imageName":"avacyn, guardian angel"},{"layout":"normal","type":"Artifact — Equipment","types":["Artifact"],"multiverseid":383186,"name":"Avarice Amulet","subtypes":["Equipment"],"cmc":4,"rarity":"Rare","artist":"Steven Belledin","manaCost":"{4}","text":"Equipped creature gets +2/+0 and has vigilance and \"At the beginning of your upkeep, draw a card.\"\nWhen equipped creature dies, target opponent gains control of Avarice Amulet.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)","flavor":"Designed by Penny Arcade","number":"212","imageName":"avarice amulet"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383187,"name":"Back to Nature","cmc":2,"rarity":"Uncommon","artist":"Howard Lyon","manaCost":"{1}{G}","text":"Destroy all enchantments.","flavor":"There will always be those who presume to improve nature, or dare to befoul it. And nature will always have a response.","number":"169","imageName":"back to nature"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["White"],"multiverseid":383188,"name":"Battle Mastery","subtypes":["Aura"],"cmc":3,"rarity":"Uncommon","artist":"Zoltan Boros & Gabor Szikszai","manaCost":"{2}{W}","text":"Enchant creature\nEnchanted creature has double strike. (It deals both first-strike and regular combat damage.)","flavor":"\"Boom! Boom! Boots the size of oxcarts, then an axe like a falling sun. Elves scattered. Trees scattered. Even the hills ran for the hills!\"\n—Clachan Tales","number":"4","imageName":"battle mastery"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383189,"name":"Battlefield Forge","rarity":"Rare","artist":"Darrell Riche","text":"{T}: Add {1} to your mana pool.\n{T}: Add {R} or {W} to your mana pool. Battlefield Forge deals 1 damage to you.","number":"240","imageName":"battlefield forge"},{"layout":"normal","type":"Creature — Sliver","types":["Creature"],"colors":["Red"],"multiverseid":383190,"name":"Belligerent Sliver","subtypes":["Sliver"],"cmc":3,"rarity":"Uncommon","artist":"Raymond Swanland","power":"2","toughness":"2","manaCost":"{2}{R}","text":"Sliver creatures you control have \"This creature can't be blocked except by two or more creatures.\"","flavor":"\"The slivers became adept at provoking a fear response in other species.\"\n—Hastric, Thunian scout","number":"129","imageName":"belligerent sliver"},{"layout":"normal","type":"Creature — Zombie Cat","types":["Creature"],"colors":["Black"],"multiverseid":383191,"name":"Black Cat","subtypes":["Zombie","Cat"],"cmc":2,"rarity":"Common","artist":"David Palumbo","power":"1","toughness":"1","manaCost":"{1}{B}","text":"When Black Cat dies, target opponent discards a card at random.","flavor":"Its last life is spent tormenting your dreams.","number":"86","imageName":"black cat"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383192,"name":"Blastfire Bolt","cmc":6,"rarity":"Common","artist":"Phill Simmer","manaCost":"{5}{R}","text":"Blastfire Bolt deals 5 damage to target creature. Destroy all Equipment attached to that creature.","flavor":"\"Encase yourself in the most elaborate armor, and cower behind the heaviest shield. I would hate for you to feel helpless.\"\n—Korig the Ruiner","number":"130","imageName":"blastfire bolt"},{"layout":"normal","type":"Creature — Vampire","types":["Creature"],"colors":["Black"],"multiverseid":383193,"name":"Blood Host","subtypes":["Vampire"],"cmc":5,"rarity":"Uncommon","artist":"Cynthia Sheppard","power":"3","toughness":"3","manaCost":"{3}{B}{B}","text":"{1}{B}, Sacrifice another creature: Put a +1/+1 counter on Blood Host and you gain 2 life.","flavor":"It would be ill-mannered to decline his invitation. It would be ill-advised to accept it.","number":"87","imageName":"blood host"},{"layout":"normal","type":"Creature — Giant Monk","types":["Creature"],"colors":["White"],"multiverseid":383194,"name":"Boonweaver Giant","subtypes":["Giant","Monk"],"cmc":7,"rarity":"Uncommon","artist":"Adam Paquette","power":"4","toughness":"4","manaCost":"{6}{W}","text":"When Boonweaver Giant enters the battlefield, you may search your graveyard, hand, and/or library for an Aura card and put it onto the battlefield attached to Boonweaver Giant. If you search your library this way, shuffle it.","number":"5","imageName":"boonweaver giant"},{"layout":"normal","type":"Creature — Human Warrior","types":["Creature"],"colors":["Red"],"multiverseid":383195,"name":"Borderland Marauder","subtypes":["Human","Warrior"],"cmc":2,"rarity":"Common","artist":"Scott M. Fischer","power":"1","toughness":"2","manaCost":"{1}{R}","text":"Whenever Borderland Marauder attacks, it gets +2/+0 until end of turn.","flavor":"Though she is rightly feared, there are relatively few tales of her deeds in battle, for few survive her raids.","number":"131","imageName":"borderland marauder"},{"layout":"normal","type":"Artifact — Equipment","types":["Artifact"],"multiverseid":383196,"name":"Brawler's Plate","subtypes":["Equipment"],"cmc":3,"rarity":"Uncommon","artist":"Jung Park","manaCost":"{3}","text":"Equipped creature gets +2/+2 and has trample. (If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)\nEquip {4} ({4}: Attach to target creature you control. Equip only as a sorcery.)","number":"213","imageName":"brawler's plate"},{"layout":"normal","type":"Artifact Creature — Sable","types":["Artifact","Creature"],"multiverseid":383197,"name":"Bronze Sable","subtypes":["Sable"],"cmc":2,"rarity":"Common","artist":"Jasper Sandner","power":"2","toughness":"1","manaCost":"{2}","flavor":"The Champion stood alone between the horde of the Returned and the shrine to Karametra, cutting down scores among hundreds. She would have been overcome if not for the aid of the temple guardians whom Karametra awakened.\n—The Theriad","number":"214","imageName":"bronze sable"},{"layout":"normal","type":"Creature — Human Shaman","types":["Creature"],"colors":["Red"],"multiverseid":383198,"name":"Brood Keeper","subtypes":["Human","Shaman"],"cmc":4,"rarity":"Uncommon","artist":"Scott Murphy","power":"2","toughness":"3","manaCost":"{3}{R}","text":"Whenever an Aura becomes attached to Brood Keeper, put a 2/2 red Dragon creature token with flying onto the battlefield. It has \"{R}: This creature gets +1/+0 until end of turn.\"","flavor":"\"Come, little one. Unfurl your wings, fill your lungs, and release your first fiery breath.\"","number":"132","imageName":"brood keeper"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Red"],"multiverseid":383199,"name":"Burning Anger","subtypes":["Aura"],"cmc":5,"rarity":"Rare","artist":"Anthony Palumbo","manaCost":"{4}{R}","text":"Enchant creature\nEnchanted creature has \"{T}: This creature deals damage equal to its power to target creature or player.\"","flavor":"\"With rage as your forge, your hammer can smite anything.\"","number":"133","imageName":"burning anger"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383161,"name":"Cancel","cmc":3,"rarity":"Common","artist":"David Palumbo","manaCost":"{1}{U}{U}","text":"Counter target spell.","flavor":"\"What you are attempting is not against the law. It is, however, extremely foolish.\"","number":"274","imageName":"cancel","starter":true},{"layout":"normal","type":"Creature — Plant Elemental Beast","types":["Creature"],"colors":["Green"],"multiverseid":383200,"name":"Carnivorous Moss-Beast","subtypes":["Plant","Elemental","Beast"],"cmc":6,"rarity":"Common","artist":"Filip Burburan","power":"4","toughness":"5","manaCost":"{4}{G}{G}","text":"{5}{G}{G}: Put a +1/+1 counter on Carnivorous Moss-Beast.","flavor":"Ranger wisdom dictates that when fleeing from a moss-beast, you must stay calm, find your bearings, and run south.","number":"170","imageName":"carnivorous moss-beast"},{"layout":"normal","type":"Creature — Zombie Bird","types":["Creature"],"colors":["Black"],"multiverseid":383201,"name":"Carrion Crow","subtypes":["Zombie","Bird"],"cmc":3,"rarity":"Common","artist":"Aaron Miller","power":"2","toughness":"2","manaCost":"{2}{B}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nCarrion Crow enters the battlefield tapped.","flavor":"When carrion feeds on carrion, dark days approach.","number":"88","imageName":"carrion crow"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Black"],"multiverseid":383202,"name":"Caustic Tar","subtypes":["Aura"],"cmc":6,"rarity":"Uncommon","artist":"Jung Park","manaCost":"{4}{B}{B}","text":"Enchant land\nEnchanted land has \"{T}: Target player loses 3 life.\"","flavor":"A forest fire can rejuvenate the land, but the tar's vile consumption leaves the land forever ruined.","number":"89","imageName":"caustic tar"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383203,"name":"Caves of Koilos","rarity":"Rare","artist":"Jim Nelson","text":"{T}: Add {1} to your mana pool.\n{T}: Add {W} or {B} to your mana pool. Caves of Koilos deals 1 damage to you.","number":"241","imageName":"caves of koilos"},{"layout":"normal","type":"Creature — Centaur Warrior","types":["Creature"],"colors":["Green"],"multiverseid":383162,"name":"Centaur Courser","subtypes":["Centaur","Warrior"],"cmc":3,"rarity":"Common","artist":"Vance Kovacs","power":"3","toughness":"3","manaCost":"{2}{G}","flavor":"\"The centaurs are truly free. Never will they be tamed by temptation or controlled by fear. They live in total harmony, a feat not yet achieved by our kind.\"\n—Ramal, sage of Westgate","number":"282","imageName":"centaur courser","starter":true},{"layout":"normal","type":"Planeswalker — Chandra","types":["Planeswalker"],"colors":["Red"],"multiverseid":383204,"name":"Chandra, Pyromaster","subtypes":["Chandra"],"cmc":4,"rarity":"Mythic Rare","artist":"Winona Nelson","loyalty":4,"manaCost":"{2}{R}{R}","text":"+1: Chandra, Pyromaster deals 1 damage to target player and 1 damage to up to one target creature that player controls. That creature can't block this turn.\n0: Exile the top card of your library. You may play it this turn.\n−7: Exile the top ten cards of your library. Choose an instant or sorcery card exiled this way and copy it three times. You may cast the copies without paying their mana costs.","number":"134","imageName":"chandra, pyromaster"},{"layout":"normal","type":"Creature — Rhino","types":["Creature"],"colors":["Green"],"multiverseid":383205,"name":"Charging Rhino","subtypes":["Rhino"],"cmc":5,"rarity":"Common","artist":"Daren Bader","power":"4","toughness":"4","manaCost":"{3}{G}{G}","text":"Charging Rhino can't be blocked by more than one creature.","flavor":"The knights of Troinir Keep took the rhino as their emblem due to its intense focus when charging down a perceived threat—a trait they discovered on a hunting excursion.","number":"171","imageName":"charging rhino"},{"layout":"normal","type":"Creature — Squid Horror","types":["Creature"],"colors":["Blue"],"multiverseid":383206,"name":"Chasm Skulker","subtypes":["Squid","Horror"],"cmc":3,"rarity":"Rare","artist":"Jack Wang","power":"1","toughness":"1","manaCost":"{2}{U}","text":"Whenever you draw a card, put a +1/+1 counter on Chasm Skulker.\nWhen Chasm Skulker dies, put X 1/1 blue Squid creature tokens with islandwalk onto the battlefield, where X is the number of +1/+1 counters on Chasm Skulker. (They can't be blocked as long as defending player controls an Island.)","flavor":"Designed by Mike Neumann","number":"46","imageName":"chasm skulker"},{"layout":"normal","type":"Creature — Vedalken Artificer","types":["Creature"],"colors":["Blue"],"multiverseid":383207,"name":"Chief Engineer","subtypes":["Vedalken","Artificer"],"cmc":2,"rarity":"Rare","artist":"Steven Belledin","power":"1","toughness":"3","manaCost":"{1}{U}","text":"Artifact spells you cast have convoke. (Your creatures can help cast those spells. Each creature you tap while casting an artifact spell pays for {1} or one mana of that creature's color.)","flavor":"An eye for detail, a mind for numbers, a soul of clockwork.","number":"47","imageName":"chief engineer"},{"layout":"normal","type":"Creature — Vampire","types":["Creature"],"colors":["Black"],"multiverseid":383208,"name":"Child of Night","subtypes":["Vampire"],"cmc":2,"rarity":"Common","artist":"Ash Wood","power":"2","toughness":"1","manaCost":"{1}{B}","text":"Lifelink (Damage dealt by this creature also causes you to gain that much life.)","flavor":"Sins that would be too gruesome in the light of day are made more pleasing in the dark of night.","number":"90","imageName":"child of night"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383209,"name":"Chord of Calling","cmc":3,"rarity":"Rare","artist":"Karl Kopinski","manaCost":"{X}{G}{G}{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nSearch your library for a creature card with converted mana cost X or less and put it onto the battlefield. Then shuffle your library.","number":"172","imageName":"chord of calling"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383210,"name":"Chronostutter","cmc":6,"rarity":"Common","artist":"Seb McKinnon","manaCost":"{5}{U}","text":"Put target creature into its owner's library second from the top.","flavor":"Timing is everything.","number":"48","imageName":"chronostutter"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Red"],"multiverseid":383211,"name":"Circle of Flame","cmc":2,"rarity":"Uncommon","artist":"Jaime Jones","manaCost":"{1}{R}","text":"Whenever a creature without flying attacks you or a planeswalker you control, Circle of Flame deals 1 damage to that creature.","flavor":"\"Which do you think is a better deterrent: a moat of water or one of fire?\"\n—Chandra Nalaar","number":"135","imageName":"circle of flame"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Red"],"multiverseid":383212,"name":"Clear a Path","cmc":1,"rarity":"Common","artist":"Karl Kopinski","manaCost":"{R}","text":"Destroy target creature with defender.","flavor":"\"Why do guards always look surprised when we bash them?\" asked Ruric.\n\"I think they expect a bribe,\" said Thar.","number":"136","imageName":"clear a path"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Red"],"multiverseid":383213,"name":"Cone of Flame","cmc":5,"rarity":"Uncommon","artist":"Chippy","manaCost":"{3}{R}{R}","text":"Cone of Flame deals 1 damage to target creature or player, 2 damage to another target creature or player, and 3 damage to a third target creature or player.","number":"137","imageName":"cone of flame"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383214,"name":"Congregate","cmc":4,"rarity":"Uncommon","artist":"Mark Zug","manaCost":"{3}{W}","text":"Target player gains 2 life for each creature on the battlefield.","flavor":"\"In the gathering there is strength for all who founder, renewal for all who languish, love for all who sing.\"\n—Song of All, canto 642","number":"6","imageName":"congregate"},{"layout":"normal","type":"Creature — Sliver","types":["Creature"],"colors":["White"],"multiverseid":383215,"name":"Constricting Sliver","subtypes":["Sliver"],"cmc":6,"rarity":"Uncommon","artist":"Karl Kopinski","power":"3","toughness":"3","manaCost":"{5}{W}","text":"Sliver creatures you control have \"When this creature enters the battlefield, you may exile target creature an opponent controls until this creature leaves the battlefield.\"","flavor":"Slivers are often seen toying with enemies they capture, not out of cruelty, but to fully learn their physical capabilities.","number":"7","imageName":"constricting sliver"},{"layout":"normal","type":"Creature — Wall","types":["Creature"],"colors":["Blue"],"multiverseid":383216,"name":"Coral Barrier","subtypes":["Wall"],"cmc":3,"rarity":"Common","artist":"Florian de Gesincourt","power":"1","toughness":"3","manaCost":"{2}{U}","text":"Defender (This creature can't attack.)\nWhen Coral Barrier enters the battlefield, put a 1/1 blue Squid creature token with islandwalk onto the battlefield. (It can't be blocked as long as defending player controls an Island.)","number":"49","imageName":"coral barrier"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383217,"name":"Covenant of Blood","cmc":7,"rarity":"Common","artist":"Seb McKinnon","manaCost":"{6}{B}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nCovenant of Blood deals 4 damage to target creature or player and you gain 4 life.","number":"91","imageName":"covenant of blood"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Black"],"multiverseid":383218,"name":"Crippling Blight","subtypes":["Aura"],"cmc":1,"rarity":"Common","artist":"Lucas Graciano","manaCost":"{B}","text":"Enchant creature\nEnchanted creature gets -1/-1 and can't block.","flavor":"\"Still alive? No matter. I'll leave you as a warning to others who would oppose me.\"\n—Vish Kal, Blood Arbiter","number":"92","imageName":"crippling blight"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383219,"name":"Crowd's Favor","cmc":1,"rarity":"Common","artist":"Slawomir Maniak","manaCost":"{R}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nTarget creature gets +1/+0 and gains first strike until end of turn. (It deals combat damage before creatures without first strike.)","number":"138","imageName":"crowd's favor"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Red"],"multiverseid":383220,"name":"Crucible of Fire","cmc":4,"rarity":"Rare","artist":"Dominick Domingo","manaCost":"{3}{R}","text":"Dragon creatures you control get +3/+3.","flavor":"\"The dragon is a perfect marriage of power and the will to use it.\"\n—Sarkhan Vol","number":"139","imageName":"crucible of fire"},{"layout":"normal","type":"Creature — Human Assassin","types":["Creature"],"colors":["Black"],"multiverseid":383221,"name":"Cruel Sadist","subtypes":["Human","Assassin"],"cmc":1,"rarity":"Rare","artist":"Min Yum","power":"1","toughness":"1","manaCost":"{B}","text":"{B}, {T}, Pay 1 life: Put a +1/+1 counter on Cruel Sadist.\n{2}{B}, {T}, Remove X +1/+1 counters from Cruel Sadist: Cruel Sadist deals X damage to target creature.","flavor":"Face of innocence. Hand of death.\nDesigned by Edmund McMillen","number":"93","imageName":"cruel sadist"},{"layout":"normal","type":"Artifact Land","types":["Artifact","Land"],"multiverseid":383222,"name":"Darksteel Citadel","rarity":"Uncommon","artist":"John Avon","text":"Indestructible (Effects that say \"destroy\" don't destroy this land.)\n{T}: Add {1} to your mana pool.","flavor":"Structures built from darksteel yield to neither assault nor age.","number":"242","imageName":"darksteel citadel"},{"layout":"normal","type":"Creature — Human Soldier","types":["Creature"],"colors":["White"],"multiverseid":383223,"name":"Dauntless River Marshal","subtypes":["Human","Soldier"],"cmc":2,"rarity":"Uncommon","artist":"Mark Winters","power":"2","toughness":"1","manaCost":"{1}{W}","text":"Dauntless River Marshal gets +1/+1 as long as you control an Island.\n{3}{U}: Tap target creature.","flavor":"\"Thieves and squid squirm the same way when you capture them.\"","number":"8","imageName":"dauntless river marshal"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383224,"name":"Devouring Light","cmc":3,"rarity":"Uncommon","artist":"Slawomir Maniak","manaCost":"{1}{W}{W}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nExile target attacking or blocking creature.","flavor":"\"Even your shadow is too foul to tolerate.\"","number":"9","imageName":"devouring light"},{"layout":"normal","type":"Creature — Sliver","types":["Creature"],"colors":["Blue"],"multiverseid":383225,"name":"Diffusion Sliver","subtypes":["Sliver"],"cmc":2,"rarity":"Uncommon","artist":"Trevor Claxton","power":"1","toughness":"1","manaCost":"{1}{U}","text":"Whenever a Sliver creature you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}.","flavor":"\"The hive shimmered, and its walls seemed a living mirror.\"\n—Hastric, Thunian scout","number":"50","imageName":"diffusion sliver"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383226,"name":"Dissipate","cmc":3,"rarity":"Uncommon","artist":"Tomasz Jedruszek","manaCost":"{1}{U}{U}","text":"Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard.","flavor":"\"This abomination never belonged in our world. I'm merely setting it free.\"\n—Dierk, geistmage","number":"51","imageName":"dissipate"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Blue"],"multiverseid":383227,"name":"Divination","cmc":3,"rarity":"Common","artist":"Howard Lyon","manaCost":"{2}{U}","text":"Draw two cards.","flavor":"\"The key to unlocking this puzzle is within you.\"\n—Doriel, mentor of Mistral Isle","number":"52","imageName":"divination"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["White"],"multiverseid":383228,"name":"Divine Favor","subtypes":["Aura"],"cmc":2,"rarity":"Common","artist":"Allen Williams","manaCost":"{1}{W}","text":"Enchant creature\nWhen Divine Favor enters the battlefield, you gain 3 life.\nEnchanted creature gets +1/+3.","flavor":"With an armory of light, even the squire may champion her people.","number":"10","imageName":"divine favor"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383163,"name":"Divine Verdict","cmc":4,"rarity":"Common","artist":"Kev Walker","manaCost":"{3}{W}","text":"Destroy target attacking or blocking creature.","flavor":"\"Guilty.\"","number":"271","imageName":"divine verdict","starter":true},{"layout":"normal","type":"Creature — Elf Druid","types":["Creature"],"colors":["Green"],"multiverseid":383229,"name":"Elvish Mystic","subtypes":["Elf","Druid"],"cmc":1,"rarity":"Common","artist":"Wesley Burt","power":"1","toughness":"1","manaCost":"{G}","text":"{T}: Add {G} to your mana pool.","flavor":"\"Life grows everywhere. My kin merely find those places where it grows strongest.\"\n—Nissa Revane","number":"173","imageName":"elvish mystic"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Blue"],"multiverseid":383230,"name":"Encrust","subtypes":["Aura"],"cmc":3,"rarity":"Common","artist":"Jason Felix","manaCost":"{1}{U}{U}","text":"Enchant artifact or creature\nEnchanted permanent doesn't untap during its controller's untap step and its activated abilities can't be activated.","flavor":"\"The sea blesses the tiny with the power to fell the mighty.\"\n—Talrand, sky summoner","number":"53","imageName":"encrust"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383231,"name":"Endless Obedience","cmc":6,"rarity":"Uncommon","artist":"Karl Kopinski","manaCost":"{4}{B}{B}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nPut target creature card from a graveyard onto the battlefield under your control.","number":"94","imageName":"endless obedience"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Blue"],"multiverseid":383232,"name":"Ensoul Artifact","subtypes":["Aura"],"cmc":2,"rarity":"Uncommon","artist":"Jasper Sandner","manaCost":"{1}{U}","text":"Enchant artifact\nEnchanted artifact is a creature with base power and toughness 5/5 in addition to its other types.","flavor":"Too often, some self-described genius comes up with a \"labor-saving device\" that ends up creating far more work.","number":"54","imageName":"ensoul artifact"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383233,"name":"Ephemeral Shields","cmc":2,"rarity":"Common","artist":"Yohann Schepacz","manaCost":"{1}{W}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nTarget creature gains indestructible until end of turn. (Damage and effects that say \"destroy\" don't destroy it.)","number":"11","imageName":"ephemeral shields"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Black"],"multiverseid":383234,"name":"Eternal Thirst","subtypes":["Aura"],"cmc":2,"rarity":"Common","artist":"Clint Cearley","manaCost":"{1}{B}","text":"Enchant creature\nEnchanted creature has lifelink and \"Whenever a creature an opponent controls dies, put a +1/+1 counter on this creature.\" (Damage dealt by a creature with lifelink also causes its controller to gain that much life.)","number":"95","imageName":"eternal thirst"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383235,"name":"Evolving Wilds","rarity":"Common","artist":"Steven Belledin","text":"{T}, Sacrifice Evolving Wilds: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library.","flavor":"Without the interfering hands of civilization, nature will always shape itself to its own needs.","number":"243","imageName":"evolving wilds"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Black"],"multiverseid":383236,"name":"Feast on the Fallen","cmc":3,"rarity":"Uncommon","artist":"Dave Kendall","manaCost":"{2}{B}","text":"At the beginning of each upkeep, if an opponent lost life last turn, put a +1/+1 counter on target creature you control.","flavor":"\"As our numbers dwindle, the ranks of the dead grow ever stronger.\"\n—Thalia, Knight-Cathar","number":"96","imageName":"feast on the fallen"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Green"],"multiverseid":383237,"name":"Feral Incarnation","cmc":9,"rarity":"Uncommon","artist":"Eytan Zana","manaCost":"{8}{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nPut three 3/3 green Beast creature tokens onto the battlefield.","flavor":"Nature is itself wild—in all its forms.","number":"174","imageName":"feral incarnation"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383238,"name":"Festergloom","cmc":3,"rarity":"Common","artist":"Mathias Kollros","manaCost":"{2}{B}","text":"Nonblack creatures get -1/-1 until end of turn.","flavor":"The death of a scout can be as informative as a safe return.","number":"97","imageName":"festergloom"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["White"],"multiverseid":383239,"name":"First Response","cmc":4,"rarity":"Uncommon","artist":"Slawomir Maniak","manaCost":"{3}{W}","text":"At the beginning of each upkeep, if you lost life last turn, put a 1/1 white Soldier creature token onto the battlefield.","flavor":"\"There's never a good time for a disaster or an attack. That's why we're here.\"\n—Oren, militia captain","number":"12","imageName":"first response"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Black"],"multiverseid":383240,"name":"Flesh to Dust","cmc":5,"rarity":"Common","artist":"Julie Dillon","manaCost":"{3}{B}{B}","text":"Destroy target creature. It can't be regenerated.","flavor":"\"Pain is temporary. So is life.\"\n—Liliana Vess","number":"98","imageName":"flesh to dust"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Forest","types":["Land"],"multiverseid":383244,"name":"Forest","subtypes":["Forest"],"rarity":"Basic Land","artist":"John Avon","number":"266","variations":[383241,383242,383243],"imageName":"forest1"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Forest","types":["Land"],"multiverseid":383242,"name":"Forest","subtypes":["Forest"],"rarity":"Basic Land","artist":"Steven Belledin","number":"267","variations":[383241,383243,383244],"imageName":"forest2"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Forest","types":["Land"],"multiverseid":383243,"name":"Forest","subtypes":["Forest"],"rarity":"Basic Land","artist":"Noah Bradley","number":"268","variations":[383241,383242,383244],"imageName":"forest3"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Forest","types":["Land"],"multiverseid":383241,"name":"Forest","subtypes":["Forest"],"rarity":"Basic Land","artist":"Jonas De Ro","number":"269","variations":[383242,383243,383244],"imageName":"forest4"},{"layout":"normal","type":"Creature — Devil","types":["Creature"],"colors":["Red"],"multiverseid":383245,"name":"Forge Devil","subtypes":["Devil"],"cmc":1,"rarity":"Common","artist":"Austin Hsu","power":"1","toughness":"1","manaCost":"{R}","text":"When Forge Devil enters the battlefield, it deals 1 damage to target creature and 1 damage to you.","flavor":"A bit of pain never hurts.","number":"140","imageName":"forge devil"},{"layout":"normal","type":"Creature — Goblin Warrior","types":["Creature"],"colors":["Red"],"multiverseid":383246,"name":"Foundry Street Denizen","subtypes":["Goblin","Warrior"],"cmc":1,"rarity":"Common","artist":"Raoul Vitale","power":"1","toughness":"1","manaCost":"{R}","text":"Whenever another red creature enters the battlefield under your control, Foundry Street Denizen gets +1/+0 until end of turn.","flavor":"After the Foundry Street riot, Arrester Hulbein tried to ban bludgeons. Which, inevitably, resulted in another riot.","number":"141","imageName":"foundry street denizen"},{"layout":"normal","type":"Creature — Goblin Berserker","types":["Creature"],"colors":["Red"],"multiverseid":383247,"name":"Frenzied Goblin","subtypes":["Goblin","Berserker"],"cmc":1,"rarity":"Uncommon","artist":"Carl Critchlow","power":"1","toughness":"1","manaCost":"{R}","text":"Whenever Frenzied Goblin attacks, you may pay {R}. If you do, target creature can't block this turn.","flavor":"What he lacks in stature, he makes up for with enthusiasm.","number":"142","imageName":"frenzied goblin"},{"layout":"normal","type":"Creature — Elemental Cat","types":["Creature"],"colors":["Blue"],"multiverseid":383248,"name":"Frost Lynx","subtypes":["Elemental","Cat"],"cmc":3,"rarity":"Common","artist":"Izzy","power":"2","toughness":"2","manaCost":"{2}{U}","text":"When Frost Lynx enters the battlefield, tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step.","flavor":"It readily attacks much larger prey, knowing retaliation is impossible.","number":"55","imageName":"frost lynx"},{"layout":"normal","type":"Creature — Human Wizard","types":["Creature"],"colors":["Blue"],"multiverseid":383249,"name":"Fugitive Wizard","subtypes":["Human","Wizard"],"cmc":1,"rarity":"Common","artist":"Mark Zug","power":"1","toughness":"1","manaCost":"{U}","flavor":"\"The law has its place—as a footnote in my spellbook.\"\n—Siyani, fugitive mage","number":"56","imageName":"fugitive wizard"},{"layout":"normal","type":"Creature — Dragon","types":["Creature"],"colors":["Red"],"multiverseid":383164,"name":"Furnace Whelp","subtypes":["Dragon"],"cmc":4,"rarity":"Uncommon","artist":"Matt Cavotta","power":"2","toughness":"2","manaCost":"{2}{R}{R}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\n{R}: Furnace Whelp gets +1/+0 until end of turn.","flavor":"Baby dragons can't figure out humans—if they didn't want to be killed, why were they made of meat and treasure?","number":"279","imageName":"furnace whelp","starter":true},{"layout":"normal","type":"Artifact Creature — Gargoyle","types":["Artifact","Creature"],"multiverseid":383250,"name":"Gargoyle Sentinel","subtypes":["Gargoyle"],"cmc":3,"rarity":"Uncommon","artist":"Drew Baker","power":"3","toughness":"3","manaCost":"{3}","text":"Defender (This creature can't attack.)\n{3}: Until end of turn, Gargoyle Sentinel loses defender and gains flying.","flavor":"The beating of a gargoyle's wings on the air is like the cracking of stones. Intruders who rouse a gargoyle are certain to hear the cracking of bones.","number":"216","imageName":"gargoyle sentinel"},{"layout":"normal","type":"Creature — Beast","types":["Creature"],"colors":["Green"],"multiverseid":383165,"name":"Garruk's Packleader","subtypes":["Beast"],"cmc":5,"rarity":"Uncommon","artist":"Nils Hamm","power":"4","toughness":"4","manaCost":"{4}{G}","text":"Whenever another creature with power 3 or greater enters the battlefield under your control, you may draw a card.","flavor":"\"He has learned much in his long years. And unlike selfish humans, he's willing to share.\"\n—Garruk Wildspeaker","number":"283","imageName":"garruk's packleader","starter":true},{"layout":"normal","type":"Planeswalker — Garruk","types":["Planeswalker"],"colors":["Black","Green"],"multiverseid":383251,"name":"Garruk, Apex Predator","subtypes":["Garruk"],"cmc":7,"rarity":"Mythic Rare","artist":"Tyler Jacobson","loyalty":5,"manaCost":"{5}{B}{G}","text":"+1: Destroy another target planeswalker.\n+1: Put a 3/3 black Beast creature token with deathtouch onto the battlefield.\n−3: Destroy target creature. You gain life equal to its toughness.\n−8: Target opponent gets an emblem with \"Whenever a creature attacks you, it gets +5/+5 and gains trample until end of turn.\"","number":"210","imageName":"garruk, apex predator"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383252,"name":"Gather Courage","cmc":1,"rarity":"Uncommon","artist":"Brian Despain","manaCost":"{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nTarget creature gets +2/+2 until end of turn.","number":"175","imageName":"gather courage"},{"layout":"normal","type":"Creature — Spirit","types":["Creature"],"colors":["White"],"multiverseid":383253,"name":"Geist of the Moors","subtypes":["Spirit"],"cmc":3,"rarity":"Uncommon","artist":"Aaron Miller","power":"3","toughness":"1","manaCost":"{1}{W}{W}","text":"Flying","flavor":"\"The battle is won. There's work to be done. / The Blessed Sleep must wait. / A fiend is about. It stalks the devout. / I'll save them from my fate.\"\n—\"The Good Geist's Vow\"","number":"13","imageName":"geist of the moors"},{"layout":"normal","type":"Creature — Elemental","types":["Creature"],"colors":["Red"],"multiverseid":383254,"name":"Generator Servant","subtypes":["Elemental"],"cmc":2,"rarity":"Common","artist":"Mathias Kollros","power":"2","toughness":"1","manaCost":"{1}{R}","text":"{T}, Sacrifice Generator Servant: Add {2} to your mana pool. If that mana is spent on a creature spell, it gains haste until end of turn. (That creature can attack and {T} as soon as it comes under your control.)","number":"143","imageName":"generator servant"},{"layout":"normal","type":"Creature — Plant Hydra","types":["Creature"],"colors":["Green"],"multiverseid":383255,"name":"Genesis Hydra","subtypes":["Plant","Hydra"],"cmc":2,"rarity":"Rare","artist":"Peter Mohrbacher","power":"0","toughness":"0","manaCost":"{X}{G}{G}","text":"When you cast Genesis Hydra, reveal the top X cards of your library. You may put a nonland permanent card with converted mana cost X or less from among them onto the battlefield. Then shuffle the rest into your library.\nGenesis Hydra enters the battlefield with X +1/+1 counters on it.","flavor":"Designed by George Fan","number":"176","imageName":"genesis hydra"},{"layout":"normal","type":"Creature — Elemental","types":["Creature"],"colors":["Blue"],"multiverseid":383256,"name":"Glacial Crasher","subtypes":["Elemental"],"cmc":6,"rarity":"Common","artist":"Mark Winters","power":"5","toughness":"5","manaCost":"{4}{U}{U}","text":"Trample (If this creature would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)\nGlacial Crasher can't attack unless there is a Mountain on the battlefield.","number":"57","imageName":"glacial crasher"},{"layout":"normal","type":"Creature — Goblin Warrior","types":["Creature"],"colors":["Red"],"multiverseid":383257,"name":"Goblin Kaboomist","subtypes":["Goblin","Warrior"],"cmc":2,"rarity":"Rare","artist":"Kev Walker","power":"1","toughness":"2","manaCost":"{1}{R}","text":"At the beginning of your upkeep, put a colorless artifact token named Land Mine onto the battlefield with \"{R}, Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying.\" Then flip a coin. If you lose the flip, Goblin Kaboomist deals 2 damage to itself.","flavor":"Designed by Stone Librande","number":"144","imageName":"goblin kaboomist"},{"layout":"normal","type":"Creature — Goblin Warrior","types":["Creature"],"colors":["Red"],"multiverseid":383258,"name":"Goblin Rabblemaster","subtypes":["Goblin","Warrior"],"cmc":3,"rarity":"Rare","artist":"Svetlin Velinov","power":"2","toughness":"2","manaCost":"{2}{R}","text":"Other Goblin creatures you control attack each turn if able.\nAt the beginning of combat on your turn, put a 1/1 red Goblin creature token with haste onto the battlefield.\nWhenever Goblin Rabblemaster attacks, it gets +1/+0 until end of turn for each other attacking Goblin.","number":"145","imageName":"goblin rabblemaster"},{"layout":"normal","type":"Creature — Goblin Knight","types":["Creature"],"colors":["Red"],"multiverseid":383259,"name":"Goblin Roughrider","subtypes":["Goblin","Knight"],"cmc":3,"rarity":"Common","artist":"Jesper Ejsing","power":"3","toughness":"2","manaCost":"{2}{R}","flavor":"Astride the bucking creature, Gribble hurtled down the mountainside while his Grotag brethren cheered. It was at that moment that the legend of the Skrill Tamer was born.","number":"146","imageName":"goblin roughrider"},{"layout":"normal","type":"Creature — Zombie","types":["Creature"],"colors":["Black"],"multiverseid":383260,"name":"Gravedigger","subtypes":["Zombie"],"cmc":4,"rarity":"Uncommon","artist":"Dermot Power","power":"2","toughness":"2","manaCost":"{3}{B}","text":"When Gravedigger enters the battlefield, you may return target creature card from your graveyard to your hand.","flavor":"A grave is not always for burial.","number":"99","imageName":"gravedigger"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383261,"name":"Grindclock","cmc":2,"rarity":"Rare","artist":"Nils Hamm","manaCost":"{2}","text":"{T}: Put a charge counter on Grindclock.\n{T}: Target player puts the top X cards of his or her library into his or her graveyard, where X is the number of charge counters on Grindclock.","flavor":"Pray you never hear it chime.","number":"217","imageName":"grindclock"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Red"],"multiverseid":383262,"name":"Hammerhand","subtypes":["Aura"],"cmc":1,"rarity":"Common","artist":"Tomasz Jedruszek","manaCost":"{R}","text":"Enchant creature\nWhen Hammerhand enters the battlefield, target creature can't block this turn.\nEnchanted creature gets +1/+1 and has haste. (It can attack and {T} no matter when it came under your control.)","number":"147","imageName":"hammerhand"},{"layout":"normal","type":"Artifact — Equipment","types":["Artifact"],"multiverseid":383263,"name":"Haunted Plate Mail","subtypes":["Equipment"],"cmc":4,"rarity":"Rare","artist":"Izzy","manaCost":"{4}","text":"Equipped creature gets +4/+4.\n{0}: Until end of turn, Haunted Plate Mail becomes a 4/4 Spirit artifact creature that's no longer an Equipment. Activate this ability only if you control no creatures.\nEquip {4} ({4}: Attach to target creature you control. Equip only as a sorcery.)","number":"218","imageName":"haunted plate mail"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383264,"name":"Heat Ray","cmc":1,"rarity":"Uncommon","artist":"Austin Hsu","manaCost":"{X}{R}","text":"Heat Ray deals X damage to target creature.","flavor":"\"There was clearly a scream. I'm not sure if there was a mouth.\"\n—Sachir, Akoum Expeditionary House","number":"148","imageName":"heat ray"},{"layout":"normal","type":"Creature — Human Cleric","types":["Creature"],"colors":["White"],"multiverseid":383265,"name":"Heliod's Pilgrim","subtypes":["Human","Cleric"],"cmc":3,"rarity":"Common","artist":"Izzy","power":"1","toughness":"2","manaCost":"{2}{W}","text":"When Heliod's Pilgrim enters the battlefield, you may search your library for an Aura card, reveal it, put it into your hand, then shuffle your library.","flavor":"The blessings of Heliod are apparent for all to see.","number":"14","imageName":"heliod's pilgrim"},{"layout":"normal","type":"Creature — Dragon","types":["Creature"],"colors":["Red"],"multiverseid":383266,"name":"Hoarding Dragon","subtypes":["Dragon"],"cmc":5,"rarity":"Rare","artist":"Matt Cavotta","power":"4","toughness":"4","manaCost":"{3}{R}{R}","text":"Flying\nWhen Hoarding Dragon enters the battlefield, you may search your library for an artifact card, exile it, then shuffle your library.\nWhen Hoarding Dragon dies, you may put the exiled card into its owner's hand.","number":"149","imageName":"hoarding dragon"},{"layout":"normal","type":"Creature — Insect","types":["Creature"],"colors":["Green"],"multiverseid":383267,"name":"Hornet Nest","subtypes":["Insect"],"cmc":3,"rarity":"Rare","artist":"Adam Paquette","power":"0","toughness":"2","manaCost":"{2}{G}","text":"Defender (This creature can't attack.)\nWhenever Hornet Nest is dealt damage, put that many 1/1 green Insect creature tokens with flying and deathtouch onto the battlefield. (Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it.)","number":"177","imageName":"hornet nest"},{"layout":"normal","type":"Creature — Insect","types":["Creature"],"colors":["Green"],"multiverseid":383268,"name":"Hornet Queen","subtypes":["Insect"],"cmc":7,"rarity":"Rare","artist":"Martina Pilcerova","power":"2","toughness":"2","manaCost":"{4}{G}{G}{G}","text":"Flying\nDeathtouch (Any amount of damage this deals to a creature is enough to destroy it.)\nWhen Hornet Queen enters the battlefield, put four 1/1 green Insect creature tokens with flying and deathtouch onto the battlefield.","number":"178","imageName":"hornet queen"},{"layout":"normal","type":"Artifact — Equipment","types":["Artifact"],"multiverseid":383269,"name":"Hot Soup","subtypes":["Equipment"],"cmc":1,"rarity":"Uncommon","artist":"David Palumbo","manaCost":"{1}","text":"Equipped creature can't be blocked.\nWhenever equipped creature is dealt damage, destroy it.\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.)","flavor":"\"Comin' through!\"\nDesigned by James Ernest","number":"219","imageName":"hot soup"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Green"],"multiverseid":383270,"name":"Hunt the Weak","cmc":4,"rarity":"Common","artist":"Raoul Vitale","manaCost":"{3}{G}","text":"Put a +1/+1 counter on target creature you control. Then that creature fights target creature you don't control. (Each deals damage equal to its power to the other.)","flavor":"He who hesitates is lunch.","number":"179","imageName":"hunt the weak"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383271,"name":"Hunter's Ambush","cmc":3,"rarity":"Common","artist":"David Palumbo","manaCost":"{2}{G}","text":"Prevent all combat damage that would be dealt by nongreen creatures this turn.","flavor":"First you lose your enemy's trail. Then you lose all sense of direction. Then you hear the growls . . .","number":"180","imageName":"hunter's ambush"},{"layout":"normal","type":"Creature — Hippogriff","types":["Creature"],"colors":["White"],"multiverseid":383272,"name":"Hushwing Gryff","subtypes":["Hippogriff"],"cmc":3,"rarity":"Rare","artist":"John Severin Brassell","power":"2","toughness":"1","manaCost":"{2}{W}","text":"Flash (You may cast this spell any time you could cast an instant.)\nFlying\nCreatures entering the battlefield don't cause abilities to trigger.","flavor":"An overwhelming sense of calm accompanies the gryffs that wheel above the roofs of Gavony.","number":"15","imageName":"hushwing gryff"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383273,"name":"Hydrosurge","cmc":1,"rarity":"Common","artist":"Steve Prescott","manaCost":"{U}","text":"Target creature gets -5/-0 until end of turn.","flavor":"\"Thirsty?\"\n—Drunvalus, hydromancer","number":"58","imageName":"hydrosurge"},{"layout":"normal","type":"Creature — Angel Illusion","types":["Creature"],"colors":["Blue"],"multiverseid":383274,"name":"Illusory Angel","subtypes":["Angel","Illusion"],"cmc":3,"rarity":"Uncommon","artist":"Allen Williams","power":"4","toughness":"4","manaCost":"{2}{U}","text":"Flying\nCast Illusory Angel only if you've cast another spell this turn.","flavor":"\"In a daze, I woke and looked upon the battlefield, where I could swear my dreams were laying waste to the enemy.\"\n—Letter from a soldier","number":"59","imageName":"illusory angel"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383275,"name":"In Garruk's Wake","cmc":9,"rarity":"Rare","artist":"Chase Stone","manaCost":"{7}{B}{B}","text":"Destroy all creatures you don't control and all planeswalkers you don't control.","flavor":"Beyond pain, beyond obsession and wild despair, there lies a place of twisted power only the most tormented souls can reach.","number":"100","imageName":"in garruk's wake"},{"layout":"normal","type":"Creature — Demon","types":["Creature"],"colors":["Black"],"multiverseid":383276,"name":"Indulgent Tormentor","subtypes":["Demon"],"cmc":5,"rarity":"Rare","artist":"Wesley Burt","power":"5","toughness":"3","manaCost":"{3}{B}{B}","text":"Flying\nAt the beginning of your upkeep, draw a card unless target opponent sacrifices a creature or pays 3 life.","flavor":"The promise of anguish is payment enough for services rendered.","number":"101","imageName":"indulgent tormentor"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Red"],"multiverseid":383277,"name":"Inferno Fist","subtypes":["Aura"],"cmc":2,"rarity":"Common","artist":"James Ryman","manaCost":"{1}{R}","text":"Enchant creature you control\nEnchanted creature gets +2/+0.\n{R}, Sacrifice Inferno Fist: Inferno Fist deals 2 damage to target creature or player.","flavor":"\"I've never been above throwing the first punch.\"","number":"150","imageName":"inferno fist"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383166,"name":"Inspired Charge","cmc":4,"rarity":"Common","artist":"Wayne Reynolds","manaCost":"{2}{W}{W}","text":"Creatures you control get +2/+1 until end of turn.","flavor":"\"Impossible! How could they overwhelm us? We had barricades, war elephants, . . . and they were barely a tenth of our number!\"\n—General Avitora","number":"272","imageName":"inspired charge","starter":true},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Blue"],"multiverseid":383278,"name":"Into the Void","cmc":4,"rarity":"Uncommon","artist":"Daarken","manaCost":"{3}{U}","text":"Return up to two target creatures to their owners' hands.","flavor":"\"The cathars have their swords, the inquisitors their axes. I prefer the ‘diplomatic' approach.\"\n—Terhold, archmage of Drunau","number":"60","imageName":"into the void"},{"layout":"normal","type":"Creature — Insect","types":["Creature"],"colors":["Green"],"multiverseid":383279,"name":"Invasive Species","subtypes":["Insect"],"cmc":3,"rarity":"Common","artist":"Christopher Moeller","power":"3","toughness":"3","manaCost":"{2}{G}","text":"When Invasive Species enters the battlefield, return another permanent you control to its owner's hand.","flavor":"It's easier to relocate a village that lies in their path than to turn the bugs aside.","number":"181","imageName":"invasive species"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Blue"],"multiverseid":383280,"name":"Invisibility","subtypes":["Aura"],"cmc":2,"rarity":"Common","artist":"Pete Venters","manaCost":"{U}{U}","text":"Enchant creature\nEnchanted creature can't be blocked except by Walls.","flavor":"Verick held his breath. Breathing wouldn't reveal his position, but it would force him to smell the goblins.","number":"61","imageName":"invisibility"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Island","types":["Land"],"multiverseid":383284,"name":"Island","subtypes":["Island"],"rarity":"Basic Land","artist":"Cliff Childs","number":"254","variations":[383281,383282,383283],"imageName":"island1"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Island","types":["Land"],"multiverseid":383281,"name":"Island","subtypes":["Island"],"rarity":"Basic Land","artist":"Florian de Gesincourt","number":"255","variations":[383282,383283,383284],"imageName":"island2"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Island","types":["Land"],"multiverseid":383283,"name":"Island","subtypes":["Island"],"rarity":"Basic Land","artist":"Peter Mohrbacher","number":"256","variations":[383281,383282,383284],"imageName":"island3"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Island","types":["Land"],"multiverseid":383282,"name":"Island","subtypes":["Island"],"rarity":"Basic Land","artist":"Andreas Rocha","number":"257","variations":[383281,383283,383284],"imageName":"island4"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383286,"name":"Jace's Ingenuity","cmc":5,"rarity":"Uncommon","artist":"Igor Kieryluk","manaCost":"{3}{U}{U}","text":"Draw three cards.","flavor":"\"Brute force can sometimes kick down a locked door, but knowledge is a skeleton key.\"","number":"63","imageName":"jace's ingenuity"},{"layout":"normal","type":"Planeswalker — Jace","types":["Planeswalker"],"colors":["Blue"],"multiverseid":383285,"name":"Jace, the Living Guildpact","subtypes":["Jace"],"cmc":4,"rarity":"Mythic Rare","artist":"Chase Stone","loyalty":5,"manaCost":"{2}{U}{U}","text":"+1: Look at the top two cards of your library. Put one of them into your graveyard.\n−3: Return another target nonland permanent to its owner's hand.\n−8: Each player shuffles his or her hand and graveyard into his or her library. You draw seven cards.","number":"62","imageName":"jace, the living guildpact"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Creature — Human Wizard","types":["Creature"],"colors":["Blue"],"multiverseid":383287,"name":"Jalira, Master Polymorphist","subtypes":["Human","Wizard"],"cmc":4,"rarity":"Rare","artist":"Steve Prescott","power":"2","toughness":"2","manaCost":"{3}{U}","text":"{2}{U}, {T}, Sacrifice another creature: Reveal cards from the top of your library until you reveal a nonlegendary creature card. Put that card onto the battlefield and the rest on the bottom of your library in a random order.","flavor":"\"You can become anything if I just put my mind to it.\"","number":"64","imageName":"jalira, master polymorphist"},{"layout":"normal","type":"Creature — Leech","types":["Creature"],"colors":["Blue"],"multiverseid":383288,"name":"Jorubai Murk Lurker","subtypes":["Leech"],"cmc":3,"rarity":"Uncommon","artist":"Clint Cearley","power":"1","toughness":"3","manaCost":"{2}{U}","text":"Jorubai Murk Lurker gets +1/+1 as long as you control a Swamp.\n{1}{B}: Target creature gains lifelink until end of turn. (Damage dealt by the creature also causes its controller to gain that much life.)","number":"65","imageName":"jorubai murk lurker"},{"layout":"normal","type":"Artifact Creature — Juggernaut","types":["Artifact","Creature"],"multiverseid":383289,"name":"Juggernaut","subtypes":["Juggernaut"],"cmc":4,"rarity":"Uncommon","artist":"Kev Walker","power":"5","toughness":"3","manaCost":"{4}","text":"Juggernaut attacks each turn if able.\nJuggernaut can't be blocked by Walls.","flavor":"Many a besieged city has surrendered upon hearing the distinctive rumble of the juggernaut.","number":"220","imageName":"juggernaut"},{"layout":"normal","type":"Creature — Treefolk Warrior","types":["Creature"],"colors":["Green"],"multiverseid":383290,"name":"Kalonian Twingrove","subtypes":["Treefolk","Warrior"],"cmc":6,"rarity":"Rare","artist":"Todd Lockwood","power":"*","toughness":"*","manaCost":"{5}{G}","text":"Kalonian Twingrove's power and toughness are each equal to the number of Forests you control.\nWhen Kalonian Twingrove enters the battlefield, put a green Treefolk Warrior creature token onto the battlefield with \"This creature's power and toughness are each equal to the number of Forests you control.\"","number":"182","imageName":"kalonian twingrove"},{"layout":"normal","type":"Creature — Fish","types":["Creature"],"colors":["Blue"],"multiverseid":383291,"name":"Kapsho Kitefins","subtypes":["Fish"],"cmc":6,"rarity":"Uncommon","artist":"Ryan Yee","power":"3","toughness":"3","manaCost":"{4}{U}{U}","text":"Flying\nWhenever Kapsho Kitefins or another creature enters the battlefield under your control, tap target creature an opponent controls.","flavor":"\"It's a truly disconcerting sight to see their shadows cast upon the deck.\"\n—Captain Triff","number":"66","imageName":"kapsho kitefins"},{"layout":"normal","type":"Creature — Kithkin Soldier","types":["Creature"],"colors":["White"],"multiverseid":383292,"name":"Kinsbaile Skirmisher","subtypes":["Kithkin","Soldier"],"cmc":2,"rarity":"Common","artist":"Thomas Denmark","power":"2","toughness":"2","manaCost":"{1}{W}","text":"When Kinsbaile Skirmisher enters the battlefield, target creature gets +1/+1 until end of turn.","flavor":"\"If a boggart even dares breathe near one of my kin, I'll know. And I'll not be happy.\"","number":"16","imageName":"kinsbaile skirmisher"},{"layout":"normal","type":"Creature — Ape","types":["Creature"],"colors":["Red"],"multiverseid":383293,"name":"Kird Chieftain","subtypes":["Ape"],"cmc":4,"rarity":"Uncommon","artist":"Lars Grant-West","power":"3","toughness":"3","manaCost":"{3}{R}","text":"Kird Chieftain gets +1/+1 as long as you control a Forest.\n{4}{G}: Target creature gets +2/+2 and gains trample until end of turn. (If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)","number":"151","imageName":"kird chieftain"},{"layout":"normal","type":"Creature — Goblin Warrior","types":["Creature"],"colors":["Red"],"multiverseid":383294,"name":"Krenko's Enforcer","subtypes":["Goblin","Warrior"],"cmc":3,"rarity":"Common","artist":"Karl Kopinski","power":"2","toughness":"2","manaCost":"{1}{R}{R}","text":"Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)","flavor":"He just likes to break legs. Collecting the debt is a bonus.","number":"152","imageName":"krenko's enforcer"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Creature — Ogre Spirit","types":["Creature"],"colors":["Red"],"multiverseid":383295,"name":"Kurkesh, Onakke Ancient","subtypes":["Ogre","Spirit"],"cmc":4,"rarity":"Rare","artist":"Slawomir Maniak","power":"4","toughness":"3","manaCost":"{2}{R}{R}","text":"Whenever you activate an ability of an artifact, if it isn't a mana ability, you may pay {R}. If you do, copy that ability. You may choose new targets for the copy.","flavor":"The Onakke were masters of dark arts and artifice. Their creations continue to spread foul magic, paving the way for their return.","number":"153","imageName":"kurkesh, onakke ancient"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Red"],"multiverseid":383296,"name":"Lava Axe","cmc":5,"rarity":"Common","artist":"Brian Snõddy","manaCost":"{4}{R}","text":"Lava Axe deals 5 damage to target player.","flavor":"A strict upgrade over the cinder hatchet.","number":"154","imageName":"lava axe"},{"layout":"normal","type":"Creature — Sliver","types":["Creature"],"colors":["Black"],"multiverseid":383297,"name":"Leeching Sliver","subtypes":["Sliver"],"cmc":2,"rarity":"Uncommon","artist":"Svetlin Velinov","power":"1","toughness":"1","manaCost":"{1}{B}","text":"Whenever a Sliver you control attacks, defending player loses 1 life.","flavor":"\"Seeing one slowly devour one of my party begged the question—do they know what cruelty is?\"\n—Hastric, Thunian scout","number":"102","imageName":"leeching sliver"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Green"],"multiverseid":383298,"name":"Life's Legacy","cmc":2,"rarity":"Rare","artist":"Howard Lyon","manaCost":"{1}{G}","text":"As an additional cost to cast Life's Legacy, sacrifice a creature.\nDraw cards equal to the sacrificed creature's power.","flavor":"At the instant of death, the mystery of life.","number":"183","imageName":"life's legacy"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383299,"name":"Lightning Strike","cmc":2,"rarity":"Common","artist":"Adam Paquette","manaCost":"{1}{R}","text":"Lightning Strike deals 3 damage to target creature or player.","flavor":"To wield lightning is to tame chaos.","number":"155","imageName":"lightning strike"},{"layout":"normal","type":"Planeswalker — Liliana","types":["Planeswalker"],"colors":["Black"],"multiverseid":383300,"name":"Liliana Vess","subtypes":["Liliana"],"cmc":5,"rarity":"Mythic Rare","artist":"Aleksi Briclot","loyalty":5,"manaCost":"{3}{B}{B}","text":"+1: Target player discards a card.\n−2: Search your library for a card, then shuffle your library and put that card on top of it.\n−8: Put all creature cards from all graveyards onto the battlefield under your control.","number":"103","imageName":"liliana vess"},{"layout":"normal","type":"Creature — Plant Elemental","types":["Creature"],"colors":["Green"],"multiverseid":383301,"name":"Living Totem","subtypes":["Plant","Elemental"],"cmc":4,"rarity":"Common","artist":"Svetlin Velinov","power":"2","toughness":"3","manaCost":"{3}{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nWhen Living Totem enters the battlefield, you may put a +1/+1 counter on another target creature.","number":"184","imageName":"living totem"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383302,"name":"Llanowar Wastes","rarity":"Rare","artist":"Rob Alexander","text":"{T}: Add {1} to your mana pool.\n{T}: Add {B} or {G} to your mana pool. Llanowar Wastes deals 1 damage to you.","number":"244","imageName":"llanowar wastes"},{"layout":"normal","type":"Creature — Djinn","types":["Creature"],"colors":["Blue"],"multiverseid":383167,"name":"Mahamoti Djinn","subtypes":["Djinn"],"cmc":6,"rarity":"Rare","artist":"Greg Staples","power":"5","toughness":"6","manaCost":"{4}{U}{U}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)","flavor":"Of royal blood among the spirits of the air, the Mahamoti djinn rides on the wings of the winds. As dangerous in the gambling hall as he is in battle, he is a master of trickery and misdirection.","number":"275","imageName":"mahamoti djinn","starter":true},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["White"],"multiverseid":383303,"name":"Marked by Honor","subtypes":["Aura"],"cmc":4,"rarity":"Common","artist":"David Palumbo","manaCost":"{3}{W}","text":"Enchant creature\nEnchanted creature gets +2/+2 and has vigilance. (Attacking doesn't cause it to tap.)","flavor":"Stand your post for duty. Stand your ground for honor.","number":"17","imageName":"marked by honor"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["White"],"multiverseid":383304,"name":"Mass Calcify","cmc":7,"rarity":"Rare","artist":"Brandon Kitkouski","manaCost":"{5}{W}{W}","text":"Destroy all nonwhite creatures.","flavor":"The dead serve as their own tombstones.","number":"18","imageName":"mass calcify"},{"layout":"normal","type":"Creature — Sphinx","types":["Creature"],"colors":["Blue"],"multiverseid":383305,"name":"Master of Predicaments","subtypes":["Sphinx"],"cmc":5,"rarity":"Rare","artist":"Matt Stewart","power":"4","toughness":"4","manaCost":"{3}{U}{U}","text":"Flying\nWhenever Master of Predicaments deals combat damage to a player, choose a card in your hand. That player guesses whether the card's converted mana cost is greater than 4. If the player guessed wrong, you may cast the card without paying its mana cost.","flavor":"Designed by David Sirlin","number":"67","imageName":"master of predicaments"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383306,"name":"Meditation Puzzle","cmc":5,"rarity":"Common","artist":"Mark Winters","manaCost":"{3}{W}{W}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nYou gain 8 life.","flavor":"Find your center, and you will find your way.","number":"19","imageName":"meditation puzzle"},{"layout":"normal","type":"Creature — Shapeshifter","types":["Creature"],"colors":["Blue"],"multiverseid":383307,"name":"Mercurial Pretender","subtypes":["Shapeshifter"],"cmc":5,"rarity":"Rare","artist":"Izzy","power":"0","toughness":"0","manaCost":"{4}{U}","text":"You may have Mercurial Pretender enter the battlefield as a copy of any creature you control except it gains \"{2}{U}{U}: Return this creature to its owner's hand.\"","flavor":"The king went off to find himself. Imagine his terror when he succeeded.","number":"68","imageName":"mercurial pretender"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383308,"name":"Meteorite","cmc":5,"rarity":"Uncommon","artist":"Scott Murphy","manaCost":"{5}","text":"When Meteorite enters the battlefield, it deals 2 damage to target creature or player.\n{T}: Add one mana of any color to your mana pool.","flavor":"\"And if I'm lying,\" he began . . .","number":"221","imageName":"meteorite"},{"layout":"normal","type":"Creature — Human Soldier","types":["Creature"],"colors":["White"],"multiverseid":383309,"name":"Midnight Guard","subtypes":["Human","Soldier"],"cmc":3,"rarity":"Common","artist":"Jason A. Engle","power":"2","toughness":"3","manaCost":"{2}{W}","text":"Whenever another creature enters the battlefield, untap Midnight Guard.","flavor":"\"When you're on watch, no noise is harmless and no shadow can be ignored.\"\n—Olgard of the Skiltfolk","number":"20","imageName":"midnight guard"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Red"],"multiverseid":383310,"name":"Might Makes Right","cmc":6,"rarity":"Uncommon","artist":"Mark Winters","manaCost":"{5}{R}","text":"At the beginning of combat on your turn, if you control each creature on the battlefield with the greatest power, gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn. (It can attack and {T} this turn.)","flavor":"An oath of fealty sworn with a handshake.","number":"156","imageName":"might makes right"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Blue"],"multiverseid":383311,"name":"Military Intelligence","cmc":2,"rarity":"Uncommon","artist":"Craig J Spearing","manaCost":"{1}{U}","text":"Whenever you attack with two or more creatures, draw a card.","flavor":"To know the battlefield is to anticipate the enemy. To know the enemy is to anticipate victory.","number":"69","imageName":"military intelligence"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383312,"name":"Mind Rot","cmc":3,"rarity":"Common","artist":"Steve Luke","manaCost":"{2}{B}","text":"Target player discards two cards.","flavor":"\"It saddens me to lose a source of inspiration. This one seemed especially promising.\"\n—Ashiok","number":"104","imageName":"mind rot"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Blue"],"multiverseid":383313,"name":"Mind Sculpt","cmc":2,"rarity":"Common","artist":"Michael C. Hayes","manaCost":"{1}{U}","text":"Target opponent puts the top seven cards of his or her library into his or her graveyard.","flavor":"\"Your mind was a curious mix of madness and genius. I just took away the genius.\"\n—Jace Beleren","number":"70","imageName":"mind sculpt"},{"layout":"normal","type":"Creature — Elemental","types":["Creature"],"colors":["Red"],"multiverseid":383314,"name":"Miner's Bane","subtypes":["Elemental"],"cmc":6,"rarity":"Common","artist":"Adam Paquette","power":"6","toughness":"3","manaCost":"{4}{R}{R}","text":"{2}{R}: Miner's Bane gets +1/+0 and gains trample until end of turn. (If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)","flavor":"There are certain stones even dwarves know to leave in the earth.","number":"157","imageName":"miner's bane"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Mountain","types":["Land"],"multiverseid":383315,"name":"Mountain","subtypes":["Mountain"],"rarity":"Basic Land","artist":"Cliff Childs","number":"262","variations":[383316,383317,383318],"imageName":"mountain1"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Mountain","types":["Land"],"multiverseid":383317,"name":"Mountain","subtypes":["Mountain"],"rarity":"Basic Land","artist":"Florian de Gesincourt","number":"263","variations":[383315,383316,383318],"imageName":"mountain2"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Mountain","types":["Land"],"multiverseid":383318,"name":"Mountain","subtypes":["Mountain"],"rarity":"Basic Land","artist":"Nils Hamm","number":"264","variations":[383315,383316,383317],"imageName":"mountain3"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Mountain","types":["Land"],"multiverseid":383316,"name":"Mountain","subtypes":["Mountain"],"rarity":"Basic Land","artist":"Karl Kopinski","number":"265","variations":[383315,383317,383318],"imageName":"mountain4"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383319,"name":"Naturalize","cmc":2,"rarity":"Common","artist":"Tim Hildebrandt","manaCost":"{1}{G}","text":"Destroy target artifact or enchantment.","flavor":"\"When your cities and trinkets crumble, only nature will remain.\"\n—Garruk Wildspeaker","number":"185","imageName":"naturalize"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Black"],"multiverseid":383320,"name":"Necrobite","cmc":3,"rarity":"Common","artist":"Nils Hamm","manaCost":"{2}{B}","text":"Target creature gains deathtouch until end of turn. Regenerate it. (The next time that creature would be destroyed this turn, it isn't. Instead tap it, remove all damage from it, and remove it from combat. Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it.)","number":"105","imageName":"necrobite"},{"layout":"normal","type":"Creature — Horror","types":["Creature"],"colors":["Black"],"multiverseid":383321,"name":"Necrogen Scudder","subtypes":["Horror"],"cmc":3,"rarity":"Uncommon","artist":"Raymond Swanland","power":"3","toughness":"3","manaCost":"{2}{B}","text":"Flying\nWhen Necrogen Scudder enters the battlefield, you lose 3 life.","flavor":"Contrary to popular belief, it's kept aloft by necrogen gas, not the screaming agony of a thousand murdered souls.","number":"106","imageName":"necrogen scudder"},{"layout":"normal","type":"Creature — Zombie","types":["Creature"],"colors":["Black"],"multiverseid":383322,"name":"Necromancer's Assistant","subtypes":["Zombie"],"cmc":3,"rarity":"Common","artist":"Svetlin Velinov","power":"3","toughness":"1","manaCost":"{2}{B}","text":"When Necromancer's Assistant enters the battlefield, put the top three cards of your library into your graveyard.","flavor":"Zombies and necromancers agree: easy access to brains is preferred.","number":"107","imageName":"necromancer's assistant"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Black"],"multiverseid":383323,"name":"Necromancer's Stockpile","cmc":2,"rarity":"Rare","artist":"Seb McKinnon","manaCost":"{1}{B}","text":"{1}{B}, Discard a creature card: Draw a card. If the discarded card was a Zombie card, put a 2/2 black Zombie creature token onto the battlefield tapped.","flavor":"The experiments decided to perform some research of their own.","number":"108","imageName":"necromancer's stockpile"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383324,"name":"Negate","cmc":2,"rarity":"Common","artist":"Jeremy Jarvis","manaCost":"{1}{U}","text":"Counter target noncreature spell.","flavor":"Masters of the arcane savor a delicious irony. Their study of deep and complex arcana leads to such a simple end: the ability to say merely yes or no.","number":"71","imageName":"negate"},{"layout":"normal","type":"Creature — Spider","types":["Creature"],"colors":["Green"],"multiverseid":383325,"name":"Netcaster Spider","subtypes":["Spider"],"cmc":3,"rarity":"Common","artist":"Yohann Schepacz","power":"2","toughness":"3","manaCost":"{2}{G}","text":"Reach (This creature can block creatures with flying.)\nWhenever Netcaster Spider blocks a creature with flying, Netcaster Spider gets +2/+0 until end of turn.","flavor":"It is an expert at culling individuals who stray too far from the herd.","number":"186","imageName":"netcaster spider"},{"layout":"normal","type":"Creature — Zombie Giant","types":["Creature"],"colors":["Black"],"multiverseid":383326,"name":"Nightfire Giant","subtypes":["Zombie","Giant"],"cmc":5,"rarity":"Uncommon","artist":"Dave Kendall","power":"4","toughness":"3","manaCost":"{4}{B}","text":"Nightfire Giant gets +1/+1 as long as you control a Mountain.\n{4}{R}: Nightfire Giant deals 2 damage to target creature or player.","flavor":"Nightfire turns the greatest weakness of the undead into formidable strength.","number":"109","imageName":"nightfire giant"},{"layout":"normal","type":"Creature — Nightmare Horse","types":["Creature"],"colors":["Black"],"multiverseid":383168,"name":"Nightmare","subtypes":["Nightmare","Horse"],"cmc":6,"rarity":"Rare","artist":"Vance Kovacs","power":"*","toughness":"*","manaCost":"{5}{B}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nNightmare's power and toughness are each equal to the number of Swamps you control.","flavor":"The thunder of its hooves beats dreams into despair.","number":"276","imageName":"nightmare","starter":true},{"layout":"normal","type":"Creature — Elemental","types":["Creature"],"colors":["Blue"],"multiverseid":383327,"name":"Nimbus of the Isles","subtypes":["Elemental"],"cmc":5,"rarity":"Common","artist":"Cliff Childs","power":"3","toughness":"3","manaCost":"{4}{U}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)","flavor":"The people of the Sevick Isles have a unique understanding of the term \"ominous clouds.\"","number":"72","imageName":"nimbus of the isles"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Green"],"multiverseid":383329,"name":"Nissa's Expedition","cmc":5,"rarity":"Uncommon","artist":"Dan Scott","manaCost":"{4}{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nSearch your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library.","number":"188","imageName":"nissa's expedition"},{"layout":"normal","type":"Planeswalker — Nissa","types":["Planeswalker"],"colors":["Green"],"multiverseid":383328,"name":"Nissa, Worldwaker","subtypes":["Nissa"],"cmc":5,"rarity":"Mythic Rare","artist":"Peter Mohrbacher","loyalty":3,"manaCost":"{3}{G}{G}","text":"+1: Target land you control becomes a 4/4 Elemental creature with trample. It's still a land.\n+1: Untap up to four target Forests.\n−7: Search your library for any number of basic land cards, put them onto the battlefield, then shuffle your library. Those lands become 4/4 Elemental creatures with trample. They're still lands.","number":"187","imageName":"nissa, worldwaker"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Creature — Demon","types":["Creature"],"colors":["Black"],"multiverseid":383330,"name":"Ob Nixilis, Unshackled","subtypes":["Demon"],"cmc":6,"rarity":"Rare","artist":"Karl Kopinski","power":"4","toughness":"4","manaCost":"{4}{B}{B}","text":"Flying, trample\nWhenever an opponent searches his or her library, that player sacrifices a creature and loses 10 life.\nWhenever another creature dies, put a +1/+1 counter on Ob Nixilis, Unshackled.","flavor":"Designed by Brad Muir","number":"110","imageName":"ob nixilis, unshackled"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383331,"name":"Obelisk of Urd","cmc":6,"rarity":"Rare","artist":"John Severin Brassell","manaCost":"{6}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nAs Obelisk of Urd enters the battlefield, choose a creature type.\nCreatures you control of the chosen type get +2/+2.","number":"222","imageName":"obelisk of urd"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["White"],"multiverseid":383332,"name":"Oppressive Rays","subtypes":["Aura"],"cmc":1,"rarity":"Common","artist":"Mark Zug","manaCost":"{W}","text":"Enchant creature\nEnchanted creature can't attack or block unless its controller pays {3}.\nActivated abilities of enchanted creature cost {3} more to activate.","number":"21","imageName":"oppressive rays"},{"layout":"normal","type":"Creature — Cat Warrior","types":["Creature"],"colors":["White"],"multiverseid":383333,"name":"Oreskos Swiftclaw","subtypes":["Cat","Warrior"],"cmc":2,"rarity":"Common","artist":"James Ryman","power":"3","toughness":"1","manaCost":"{1}{W}","flavor":"After the Battle of Pharagax Bridge, the Champion spent many months among the leonin of Oreskos. She found that they were quick to take offense, not because they were thin-skinned, but because they were always eager for a fight.\n—The Theriad","number":"22","imageName":"oreskos swiftclaw"},{"layout":"normal","type":"Artifact Creature — Thopter","types":["Artifact","Creature"],"multiverseid":383334,"name":"Ornithopter","subtypes":["Thopter"],"cmc":0,"rarity":"Common","artist":"Franz Vohwinkel","power":"0","toughness":"2","manaCost":"{0}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)","flavor":"Once a year, the skies over Paliano fill with the flying machines of those who hope to be taken on as pupils by the artificer Muzzio.","number":"223","imageName":"ornithopter"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Green"],"multiverseid":383335,"name":"Overwhelm","cmc":7,"rarity":"Uncommon","artist":"Wayne Reynolds","manaCost":"{5}{G}{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nCreatures you control get +3/+3 until end of turn.","flavor":"The Conclave acts with a single will, expressed by countless warriors.","number":"189","imageName":"overwhelm"},{"layout":"normal","type":"Creature — Human Druid","types":["Creature"],"colors":["Green"],"multiverseid":383336,"name":"Paragon of Eternal Wilds","subtypes":["Human","Druid"],"cmc":4,"rarity":"Uncommon","artist":"Winona Nelson","power":"2","toughness":"2","manaCost":"{3}{G}","text":"Other green creatures you control get +1/+1.\n{G}, {T}: Another target green creature you control gains trample until end of turn. (If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)","number":"190","imageName":"paragon of eternal wilds"},{"layout":"normal","type":"Creature — Human Warrior","types":["Creature"],"colors":["Red"],"multiverseid":383337,"name":"Paragon of Fierce Defiance","subtypes":["Human","Warrior"],"cmc":4,"rarity":"Uncommon","artist":"Slawomir Maniak","power":"2","toughness":"2","manaCost":"{3}{R}","text":"Other red creatures you control get +1/+1.\n{R}, {T}: Another target red creature you control gains haste until end of turn. (It can attack and {T} this turn.)","number":"158","imageName":"paragon of fierce defiance"},{"layout":"normal","type":"Creature — Human Wizard","types":["Creature"],"colors":["Blue"],"multiverseid":383338,"name":"Paragon of Gathering Mists","subtypes":["Human","Wizard"],"cmc":4,"rarity":"Uncommon","artist":"Michael C. Hayes","power":"2","toughness":"2","manaCost":"{3}{U}","text":"Other blue creatures you control get +1/+1.\n{U}, {T}: Another target blue creature you control gains flying until end of turn.","number":"73","imageName":"paragon of gathering mists"},{"layout":"normal","type":"Creature — Human Soldier","types":["Creature"],"colors":["White"],"multiverseid":383339,"name":"Paragon of New Dawns","subtypes":["Human","Soldier"],"cmc":4,"rarity":"Uncommon","artist":"John Stanko","power":"2","toughness":"2","manaCost":"{3}{W}","text":"Other white creatures you control get +1/+1.\n{W}, {T}: Another target white creature you control gains vigilance until end of turn. (Attacking doesn't cause it to tap.)","number":"23","imageName":"paragon of new dawns"},{"layout":"normal","type":"Creature — Skeleton Warrior","types":["Creature"],"colors":["Black"],"multiverseid":383340,"name":"Paragon of Open Graves","subtypes":["Skeleton","Warrior"],"cmc":4,"rarity":"Uncommon","artist":"Min Yum","power":"2","toughness":"2","manaCost":"{3}{B}","text":"Other black creatures you control get +1/+1.\n{2}{B}, {T}: Another target black creature you control gains deathtouch until end of turn. (Any amount of damage it deals to a creature is enough to destroy it.)","number":"111","imageName":"paragon of open graves"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383341,"name":"Peel from Reality","cmc":2,"rarity":"Common","artist":"Jason Felix","manaCost":"{1}{U}","text":"Return target creature you control and target creature you don't control to their owners' hands.","flavor":"\"Soulless demon, you are bound to me. Now we will both dwell in oblivion.\"","number":"74","imageName":"peel from reality"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383342,"name":"Perilous Vault","cmc":4,"rarity":"Mythic Rare","artist":"Sam Burley","manaCost":"{4}","text":"{5}, {T}, Exile Perilous Vault: Exile all nonland permanents.","flavor":"The spirit dragon Ugin arranged the hedrons of Zendikar to direct leylines of energy. To disrupt one is to unleash devastation and chaos.","number":"224","imageName":"perilous vault"},{"layout":"normal","type":"Artifact Creature — Horror","types":["Artifact","Creature"],"multiverseid":383343,"name":"Phyrexian Revoker","subtypes":["Horror"],"cmc":2,"rarity":"Rare","artist":"Kev Walker","power":"2","toughness":"1","manaCost":"{2}","text":"As Phyrexian Revoker enters the battlefield, name a nonland card.\nActivated abilities of sources with the chosen name can't be activated.","flavor":"\"To be in the presence of a revoker is to be truly alone.\"\n—Kara Vrist, Neurok agent","number":"225","imageName":"phyrexian revoker"},{"layout":"normal","type":"Creature — Plant Elemental","types":["Creature"],"colors":["Green"],"multiverseid":383344,"name":"Phytotitan","subtypes":["Plant","Elemental"],"cmc":6,"rarity":"Rare","artist":"Marco Nelor","power":"7","toughness":"2","manaCost":"{4}{G}{G}","text":"When Phytotitan dies, return it to the battlefield tapped under its owner's control at the beginning of his or her next upkeep.","flavor":"Its root system spans the entire floor of the jungle, making eradication impossible.","number":"191","imageName":"phytotitan"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383345,"name":"Pillar of Light","cmc":3,"rarity":"Common","artist":"Erica Yang","manaCost":"{2}{W}","text":"Exile target creature with toughness 4 or greater.","flavor":"\"The vaulted ceiling of our faith rests upon such pillars.\"\n—Darugand, banisher priest","number":"24","imageName":"pillar of light"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Plains","types":["Land"],"multiverseid":383347,"name":"Plains","subtypes":["Plains"],"rarity":"Basic Land","artist":"John Avon","number":"250","variations":[383346,383348,383349],"imageName":"plains1"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Plains","types":["Land"],"multiverseid":383346,"name":"Plains","subtypes":["Plains"],"rarity":"Basic Land","artist":"Nils Hamm","number":"251","variations":[383347,383348,383349],"imageName":"plains2"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Plains","types":["Land"],"multiverseid":383348,"name":"Plains","subtypes":["Plains"],"rarity":"Basic Land","artist":"Howard Lyon","number":"252","variations":[383346,383347,383349],"imageName":"plains3"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Plains","types":["Land"],"multiverseid":383349,"name":"Plains","subtypes":["Plains"],"rarity":"Basic Land","artist":"Andreas Rocha","number":"253","variations":[383346,383347,383348],"imageName":"plains4"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383350,"name":"Plummet","cmc":2,"rarity":"Common","artist":"Pete Venters","manaCost":"{1}{G}","text":"Destroy target creature with flying.","flavor":"\"Let nothing own the skies but the wind.\"\n—Dejara, Giltwood druid","number":"192","imageName":"plummet"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383351,"name":"Polymorphist's Jest","cmc":3,"rarity":"Rare","artist":"Craig J Spearing","manaCost":"{1}{U}{U}","text":"Until end of turn, each creature target player controls loses all abilities and becomes a blue Frog with base power and toughness 1/1.","flavor":"\"The flies were bothering me.\"\n—Jalira, master polymorphist","number":"75","imageName":"polymorphist's jest"},{"layout":"normal","type":"Creature — Kithkin Soldier","types":["Creature"],"colors":["White"],"multiverseid":383352,"name":"Preeminent Captain","subtypes":["Kithkin","Soldier"],"cmc":3,"rarity":"Rare","artist":"Greg Staples","power":"2","toughness":"2","manaCost":"{2}{W}","text":"First strike (This creature deals combat damage before creatures without first strike.)\nWhenever Preeminent Captain attacks, you may put a Soldier creature card from your hand onto the battlefield tapped and attacking.","number":"25","imageName":"preeminent captain"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383353,"name":"Profane Memento","cmc":1,"rarity":"Uncommon","artist":"Franz Vohwinkel","manaCost":"{1}","text":"Whenever a creature card is put into an opponent's graveyard from anywhere, you gain 1 life.","flavor":"\"An angel's skull is left too plain by death. I made a few aesthetic modifications.\"\n—Dommique, blood artist","number":"226","imageName":"profane memento"},{"layout":"normal","type":"Creature — Faerie Rogue","types":["Creature"],"colors":["Blue"],"multiverseid":383354,"name":"Quickling","subtypes":["Faerie","Rogue"],"cmc":2,"rarity":"Uncommon","artist":"Clint Cearley","power":"2","toughness":"2","manaCost":"{1}{U}","text":"Flash (You may cast this spell any time you could cast an instant.)\nFlying\nWhen Quickling enters the battlefield, sacrifice it unless you return another creature you control to its owner's hand.","number":"76","imageName":"quickling"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383355,"name":"Radiant Fountain","rarity":"Common","artist":"Adam Paquette","text":"When Radiant Fountain enters the battlefield, you gain 2 life.\n{T}: Add {1} to your mana pool.","flavor":"\"All peoples treasure a place where the weary traveler may drink in peace.\"\n—Ajani Goldmane","number":"245","imageName":"radiant fountain"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383356,"name":"Raise the Alarm","cmc":2,"rarity":"Common","artist":"Zoltan Boros","manaCost":"{1}{W}","text":"Put two 1/1 white Soldier creature tokens onto the battlefield.","flavor":"Like blinking or breathing, responding to an alarm is an involuntary reflex.","number":"26","imageName":"raise the alarm"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383357,"name":"Ranger's Guile","cmc":1,"rarity":"Common","artist":"Steve Prescott","manaCost":"{G}","text":"Target creature you control gets +1/+1 and gains hexproof until end of turn. (It can't be the target of spells or abilities your opponents control.)","flavor":"\"You don't survive in the wild by standing in plain sight.\"\n—Garruk Wildspeaker","number":"193","imageName":"ranger's guile"},{"layout":"normal","type":"Creature — Griffin","types":["Creature"],"colors":["White"],"multiverseid":383358,"name":"Razorfoot Griffin","subtypes":["Griffin"],"cmc":4,"rarity":"Common","artist":"Ben Thompson","power":"2","toughness":"2","manaCost":"{3}{W}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nFirst strike (This creature deals combat damage before creatures without first strike.)","flavor":"Like a meteor, it strikes from above without warning. Unlike a meteor, it then carries you off and eats you.","number":"27","imageName":"razorfoot griffin"},{"layout":"normal","type":"Creature — Elf Shaman","types":["Creature"],"colors":["Green"],"multiverseid":383359,"name":"Reclamation Sage","subtypes":["Elf","Shaman"],"cmc":3,"rarity":"Uncommon","artist":"Christopher Moeller","power":"2","toughness":"1","manaCost":"{2}{G}","text":"When Reclamation Sage enters the battlefield, you may destroy target artifact or enchantment.","flavor":"\"What was once formed by masons, shaped by smiths, or given life by mages, I will return to the embrace of the earth.\"","number":"194","imageName":"reclamation sage"},{"layout":"normal","type":"Creature — Human Wizard","types":["Creature"],"colors":["Blue"],"multiverseid":383360,"name":"Research Assistant","subtypes":["Human","Wizard"],"cmc":2,"rarity":"Common","artist":"Svetlin Velinov","power":"1","toughness":"3","manaCost":"{1}{U}","text":"{3}{U}, {T}: Draw a card, then discard a card.","flavor":"There are many words and phrases that can cause an experienced wizard to tremble in fear. Chief among them is \"oops.\"","number":"77","imageName":"research assistant"},{"layout":"normal","type":"Creature — Angel","types":["Creature"],"colors":["White"],"multiverseid":383361,"name":"Resolute Archangel","subtypes":["Angel"],"cmc":7,"rarity":"Rare","artist":"Anthony Palumbo","power":"4","toughness":"4","manaCost":"{5}{W}{W}","text":"Flying\nWhen Resolute Archangel enters the battlefield, if your life total is less than your starting life total, it becomes equal to your starting life total.","flavor":"Cut it down, bury it in snow, put it to the torch. The rose will still bloom again.","number":"28","imageName":"resolute archangel"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Green"],"multiverseid":383362,"name":"Restock","cmc":5,"rarity":"Uncommon","artist":"Daren Bader","manaCost":"{3}{G}{G}","text":"Return two target cards from your graveyard to your hand. Exile Restock.","flavor":"What looked like a retreat was actually a replenishing.","number":"195","imageName":"restock"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["White"],"multiverseid":383363,"name":"Return to the Ranks","cmc":2,"rarity":"Rare","artist":"Michael Komarck","manaCost":"{X}{W}{W}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nReturn X target creature cards with converted mana cost 2 or less from your graveyard to the battlefield.","number":"29","imageName":"return to the ranks"},{"layout":"normal","type":"Creature — Beast","types":["Creature"],"colors":["Green"],"multiverseid":383364,"name":"Roaring Primadox","subtypes":["Beast"],"cmc":4,"rarity":"Uncommon","artist":"James Ryman","power":"4","toughness":"4","manaCost":"{3}{G}","text":"At the beginning of your upkeep, return a creature you control to its owner's hand.","flavor":"\"They're easy enough to find. Question is, are you sure you want to find one?\"\n—Juruk, Kalonian tracker","number":"196","imageName":"roaring primadox"},{"layout":"normal","type":"Artifact — Equipment","types":["Artifact"],"multiverseid":383365,"name":"Rogue's Gloves","subtypes":["Equipment"],"cmc":2,"rarity":"Uncommon","artist":"Cyril Van Der Haegen","manaCost":"{2}","text":"Whenever equipped creature deals combat damage to a player, you may draw a card.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)","flavor":"Professional pilferers prefer proper preparation.","number":"227","imageName":"rogue's gloves"},{"layout":"normal","type":"Creature — Insect","types":["Creature"],"colors":["Black"],"multiverseid":383366,"name":"Rotfeaster Maggot","subtypes":["Insect"],"cmc":5,"rarity":"Common","artist":"Yeong-Hao Han","power":"3","toughness":"5","manaCost":"{4}{B}","text":"When Rotfeaster Maggot enters the battlefield, exile target creature card from a graveyard. You gain life equal to that card's toughness.","flavor":"Is it at the top of the food chain or the bottom?","number":"112","imageName":"rotfeaster maggot"},{"layout":"normal","type":"Creature — Goblin Rogue","types":["Creature"],"colors":["Red"],"multiverseid":383367,"name":"Rummaging Goblin","subtypes":["Goblin","Rogue"],"cmc":3,"rarity":"Common","artist":"Karl Kopinski","power":"1","toughness":"1","manaCost":"{2}{R}","text":"{T}, Discard a card: Draw a card.","flavor":"To a goblin, value is based on the four S's: shiny, stabby, smelly, and super smelly.","number":"159","imageName":"rummaging goblin"},{"layout":"normal","type":"Creature — Bear","types":["Creature"],"colors":["Green"],"multiverseid":383368,"name":"Runeclaw Bear","subtypes":["Bear"],"cmc":2,"rarity":"Common","artist":"Jesper Ejsing","power":"2","toughness":"2","manaCost":"{1}{G}","flavor":"The magic of the elves leaves its mark on the forest. The magic of the forest leaves its mark on the animals who live there. The animals of the forest leave their mark on all who trespass.","number":"197","imageName":"runeclaw bear"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383369,"name":"Sacred Armory","cmc":2,"rarity":"Uncommon","artist":"Yeong-Hao Han","manaCost":"{2}","text":"{2}: Target creature gets +1/+0 until end of turn.","flavor":"Arrive for worship. Leave for war.","number":"228","imageName":"sacred armory"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["White"],"multiverseid":383370,"name":"Sanctified Charge","cmc":5,"rarity":"Common","artist":"Dave Kendall","manaCost":"{4}{W}","text":"Creatures you control get +2/+1 until end of turn. White creatures you control also gain first strike until end of turn. (They deal combat damage before creatures without first strike.)","flavor":"You need only raise your spear to receive this blessing.","number":"30","imageName":"sanctified charge"},{"layout":"normal","type":"Creature — Satyr","types":["Creature"],"colors":["Green"],"multiverseid":383371,"name":"Satyr Wayfinder","subtypes":["Satyr"],"cmc":2,"rarity":"Common","artist":"Steve Prescott","power":"1","toughness":"1","manaCost":"{1}{G}","text":"When Satyr Wayfinder enters the battlefield, reveal the top four cards of your library. You may put a land card from among them into your hand. Put the rest into your graveyard.","flavor":"The first satyr to wake after a revel must search for the site of the next one.","number":"198","imageName":"satyr wayfinder"},{"layout":"normal","type":"Creature — Hound","types":["Creature"],"colors":["Red"],"multiverseid":383372,"name":"Scrapyard Mongrel","subtypes":["Hound"],"cmc":4,"rarity":"Common","artist":"Svetlin Velinov","power":"3","toughness":"3","manaCost":"{3}{R}","text":"As long as you control an artifact, Scrapyard Mongrel gets +2/+0 and has trample. (If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)","flavor":"Trespassers are welcome to try.","number":"160","imageName":"scrapyard mongrel"},{"layout":"normal","type":"Artifact Creature — Construct","types":["Artifact","Creature"],"multiverseid":383373,"name":"Scuttling Doom Engine","subtypes":["Construct"],"cmc":6,"rarity":"Rare","artist":"Filip Burburan","power":"6","toughness":"6","manaCost":"{6}","text":"Scuttling Doom Engine can't be blocked by creatures with power 2 or less.\nWhen Scuttling Doom Engine dies, it deals 6 damage to target opponent.","flavor":"A masterwork of spite, inspired by madness.","number":"229","imageName":"scuttling doom engine"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383169,"name":"Seismic Strike","cmc":3,"rarity":"Common","artist":"Christopher Moeller","manaCost":"{2}{R}","text":"Seismic Strike deals damage to target creature equal to the number of Mountains you control.","flavor":"\"Life up here is simple. Adapt to the ways of the mountains and they will reward you. Fight them and they will end you.\"\n—Kezim, prodigal pyromancer","number":"280","imageName":"seismic strike","starter":true},{"layout":"normal","type":"Creature — Human Cleric","types":["Creature"],"colors":["White"],"multiverseid":383374,"name":"Selfless Cathar","subtypes":["Human","Cleric"],"cmc":1,"rarity":"Common","artist":"Slawomir Maniak","power":"1","toughness":"1","manaCost":"{W}","text":"{1}{W}, Sacrifice Selfless Cathar: Creatures you control get +1/+1 until end of turn.","flavor":"\"If I fail to offer myself, we will surely be overrun. My fate would be the same.\"","number":"31","imageName":"selfless cathar"},{"layout":"normal","type":"Creature — Vampire","types":["Creature"],"colors":["Black"],"multiverseid":383170,"name":"Sengir Vampire","subtypes":["Vampire"],"cmc":5,"rarity":"Uncommon","artist":"Kev Walker","power":"4","toughness":"4","manaCost":"{3}{B}{B}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.","flavor":"Empires rise and fall, but evil is eternal.","number":"277","imageName":"sengir vampire","starter":true},{"layout":"normal","type":"Creature — Angel","types":["Creature"],"colors":["White"],"multiverseid":383375,"name":"Seraph of the Masses","subtypes":["Angel"],"cmc":7,"rarity":"Uncommon","artist":"Zoltan Boros","power":"*","toughness":"*","manaCost":"{5}{W}{W}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nFlying\nSeraph of the Masses's power and toughness are each equal to the number of creatures you control.","number":"32","imageName":"seraph of the masses"},{"layout":"normal","type":"Creature — Angel","types":["Creature"],"colors":["White"],"multiverseid":383171,"name":"Serra Angel","subtypes":["Angel"],"cmc":5,"rarity":"Uncommon","artist":"Greg Staples","power":"4","toughness":"4","manaCost":"{3}{W}{W}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nVigilance (Attacking doesn't cause this creature to tap.)","flavor":"Follow the light. In its absence, follow her.","number":"273","imageName":"serra angel","starter":true},{"layout":"normal","type":"Creature — Vampire","types":["Creature"],"colors":["Black"],"multiverseid":383376,"name":"Shadowcloak Vampire","subtypes":["Vampire"],"cmc":5,"rarity":"Common","artist":"Cynthia Sheppard","power":"4","toughness":"3","manaCost":"{4}{B}","text":"Pay 2 life: Shadowcloak Vampire gains flying until end of turn. (It can't be blocked except by creatures with flying or reach.)","flavor":"\"My favorite guilty pleasure? Are there innocent ones?\"","number":"113","imageName":"shadowcloak vampire"},{"layout":"normal","type":"Creature — Elf Shaman","types":["Creature"],"colors":["Green"],"multiverseid":383377,"name":"Shaman of Spring","subtypes":["Elf","Shaman"],"cmc":4,"rarity":"Common","artist":"Johannes Voss","power":"2","toughness":"2","manaCost":"{3}{G}","text":"When Shaman of Spring enters the battlefield, draw a card.","flavor":"Some shamanic sects advocate the different seasons, each working to preserve nature's cycles.","number":"199","imageName":"shaman of spring"},{"layout":"normal","type":"Artifact — Equipment","types":["Artifact"],"multiverseid":383378,"name":"Shield of the Avatar","subtypes":["Equipment"],"cmc":1,"rarity":"Rare","artist":"Volkan Baga","manaCost":"{1}","text":"If a source would deal damage to equipped creature, prevent X of that damage, where X is the number of creatures you control.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)","flavor":"We are made stronger by those we fight for.\nDesigned by Richard Garriott","number":"230","imageName":"shield of the avatar"},{"layout":"normal","type":"Creature — Dragon","types":["Creature"],"colors":["Red"],"multiverseid":383172,"name":"Shivan Dragon","subtypes":["Dragon"],"cmc":6,"rarity":"Rare","artist":"Donato Giancola","power":"5","toughness":"5","manaCost":"{4}{R}{R}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\n{R}: Shivan Dragon gets +1/+0 until end of turn.","flavor":"The undisputed master of the mountains of Shiv.","number":"281","imageName":"shivan dragon","starter":true},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383379,"name":"Shivan Reef","rarity":"Rare","artist":"Rob Alexander","text":"{T}: Add {1} to your mana pool.\n{T}: Add {U} or {R} to your mana pool. Shivan Reef deals 1 damage to you.","number":"246","imageName":"shivan reef"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383380,"name":"Shrapnel Blast","cmc":2,"rarity":"Uncommon","artist":"Hideaki Takamura","manaCost":"{1}{R}","text":"As an additional cost to cast Shrapnel Blast, sacrifice an artifact.\nShrapnel Blast deals 5 damage to target creature or player.","flavor":"It requires immense pressure to imbue an item with magic. If the spell is broken . . .","number":"161","imageName":"shrapnel blast"},{"layout":"normal","type":"Creature — Dragon","types":["Creature"],"colors":["Red"],"multiverseid":383381,"name":"Siege Dragon","subtypes":["Dragon"],"cmc":7,"rarity":"Rare","artist":"Karl Kopinski","power":"5","toughness":"5","manaCost":"{5}{R}{R}","text":"Flying\nWhen Siege Dragon enters the battlefield, destroy all Walls your opponents control.\nWhenever Siege Dragon attacks, if defending player controls no Walls, it deals 2 damage to each creature without flying that player controls.","number":"162","imageName":"siege dragon"},{"layout":"normal","type":"Creature — Wurm","types":["Creature"],"colors":["Green"],"multiverseid":383382,"name":"Siege Wurm","subtypes":["Wurm"],"cmc":7,"rarity":"Common","artist":"Carl Critchlow","power":"5","toughness":"5","manaCost":"{5}{G}{G}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nTrample (If this creature would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)","number":"200","imageName":"siege wurm"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383383,"name":"Sign in Blood","cmc":2,"rarity":"Common","artist":"Howard Lyon","manaCost":"{B}{B}","text":"Target player draws two cards and loses 2 life.","flavor":"Little agonies pave the way to greater power.","number":"114","imageName":"sign in blood"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383384,"name":"Sliver Hive","rarity":"Rare","artist":"Igor Kieryluk","text":"{T}: Add {1} to your mana pool.\n{T}: Add one mana of any color to your mana pool. Spend this mana only to cast a Sliver spell.\n{5}, {T}: Put a 1/1 colorless Sliver creature token onto the battlefield. Activate this ability only if you control a Sliver.","number":"247","imageName":"sliver hive"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Creature — Sliver","types":["Creature"],"colors":["White","Blue","Black","Red","Green"],"multiverseid":383385,"name":"Sliver Hivelord","subtypes":["Sliver"],"cmc":5,"rarity":"Mythic Rare","artist":"Aleksi Briclot","power":"5","toughness":"5","manaCost":"{W}{U}{B}{R}{G}","text":"Sliver creatures you control have indestructible. (Damage and effects that say \"destroy\" don't destroy them.)","flavor":"\"This is the source, the line unbroken since the calamity that brought such monsters to our shores.\"\n—Hastric, Thunian scout","number":"211","imageName":"sliver hivelord"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["White"],"multiverseid":383386,"name":"Solemn Offering","cmc":3,"rarity":"Common","artist":"Sam Wood","manaCost":"{2}{W}","text":"Destroy target artifact or enchantment. You gain 4 life.","flavor":"\"You will be reimbursed for your donation.\"\n\"The reimbursement is spiritual.\"\n—Temple signs","number":"33","imageName":"solemn offering"},{"layout":"normal","type":"Creature — Avatar","types":["Creature"],"colors":["Black"],"multiverseid":383387,"name":"Soul of Innistrad","subtypes":["Avatar"],"cmc":6,"rarity":"Mythic Rare","artist":"Adam Paquette","power":"6","toughness":"6","manaCost":"{4}{B}{B}","text":"Deathtouch\n{3}{B}{B}: Return up to three target creature cards from your graveyard to your hand.\n{3}{B}{B}, Exile Soul of Innistrad from your graveyard: Return up to three target creature cards from your graveyard to your hand.","number":"115","imageName":"soul of innistrad"},{"layout":"normal","type":"Artifact Creature — Avatar","types":["Artifact","Creature"],"multiverseid":383388,"name":"Soul of New Phyrexia","subtypes":["Avatar"],"cmc":6,"rarity":"Mythic Rare","artist":"Daarken","power":"6","toughness":"6","manaCost":"{6}","text":"Trample\n{5}: Permanents you control gain indestructible until end of turn.\n{5}, Exile Soul of New Phyrexia from your graveyard: Permanents you control gain indestructible until end of turn.","number":"231","imageName":"soul of new phyrexia"},{"layout":"normal","type":"Creature — Avatar","types":["Creature"],"colors":["Blue"],"multiverseid":383389,"name":"Soul of Ravnica","subtypes":["Avatar"],"cmc":6,"rarity":"Mythic Rare","artist":"Stephan Martiniere","power":"6","toughness":"6","manaCost":"{4}{U}{U}","text":"Flying\n{5}{U}{U}: Draw a card for each color among permanents you control.\n{5}{U}{U}, Exile Soul of Ravnica from your graveyard: Draw a card for each color among permanents you control.","number":"78","imageName":"soul of ravnica"},{"layout":"normal","type":"Creature — Avatar","types":["Creature"],"colors":["Red"],"multiverseid":383390,"name":"Soul of Shandalar","subtypes":["Avatar"],"cmc":6,"rarity":"Mythic Rare","artist":"Raymond Swanland","power":"6","toughness":"6","manaCost":"{4}{R}{R}","text":"First strike\n{3}{R}{R}: Soul of Shandalar deals 3 damage to target player and 3 damage to up to one target creature that player controls.\n{3}{R}{R}, Exile Soul of Shandalar from your graveyard: Soul of Shandalar deals 3 damage to target player and 3 damage to up to one target creature that player controls.","number":"163","imageName":"soul of shandalar"},{"layout":"normal","type":"Creature — Avatar","types":["Creature"],"colors":["White"],"multiverseid":383391,"name":"Soul of Theros","subtypes":["Avatar"],"cmc":6,"rarity":"Mythic Rare","artist":"Zack Stella","power":"6","toughness":"6","manaCost":"{4}{W}{W}","text":"Vigilance\n{4}{W}{W}: Creatures you control get +2/+2 and gain first strike and lifelink until end of turn.\n{4}{W}{W}, Exile Soul of Theros from your graveyard: Creatures you control get +2/+2 and gain first strike and lifelink until end of turn.","number":"34","imageName":"soul of theros"},{"layout":"normal","type":"Creature — Avatar","types":["Creature"],"colors":["Green"],"multiverseid":383392,"name":"Soul of Zendikar","subtypes":["Avatar"],"cmc":6,"rarity":"Mythic Rare","artist":"Vincent Proce","power":"6","toughness":"6","manaCost":"{4}{G}{G}","text":"Reach\n{3}{G}{G}: Put a 3/3 green Beast creature token onto the battlefield.\n{3}{G}{G}, Exile Soul of Zendikar from your graveyard: Put a 3/3 green Beast creature token onto the battlefield.","number":"201","imageName":"soul of zendikar"},{"layout":"normal","type":"Creature — Human Cleric","types":["Creature"],"colors":["White"],"multiverseid":383393,"name":"Soulmender","subtypes":["Human","Cleric"],"cmc":1,"rarity":"Common","artist":"James Ryman","power":"1","toughness":"1","manaCost":"{W}","text":"{T}: You gain 1 life.","flavor":"\"Healing is more art than magic. Well, there is still quite a bit of magic.\"","number":"35","imageName":"soulmender"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["White"],"multiverseid":383394,"name":"Spectra Ward","subtypes":["Aura"],"cmc":5,"rarity":"Rare","artist":"Ryan Alexander Lee","manaCost":"{3}{W}{W}","text":"Enchant creature\nEnchanted creature gets +2/+2 and has protection from all colors. This effect doesn't remove Auras. (It can't be blocked, targeted, or dealt damage by anything that's white, blue, black, red, or green.)","number":"36","imageName":"spectra ward"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["White"],"multiverseid":383395,"name":"Spirit Bonds","cmc":2,"rarity":"Rare","artist":"Willian Murai","manaCost":"{1}{W}","text":"Whenever a nontoken creature enters the battlefield under your control, you may pay {W}. If you do, put a 1/1 white Spirit creature token with flying onto the battlefield.\n{1}{W}, Sacrifice a Spirit: Target non-Spirit creature gains indestructible until end of turn. (Damage and effects that say \"destroy\" don't destroy it.)","flavor":"Designed by Justin Gary","number":"37","imageName":"spirit bonds"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Black"],"multiverseid":383396,"name":"Stab Wound","subtypes":["Aura"],"cmc":3,"rarity":"Uncommon","artist":"Scott Chou","manaCost":"{2}{B}","text":"Enchant creature\nEnchanted creature gets -2/-2.\nAt the beginning of the upkeep of enchanted creature's controller, that player loses 2 life.","number":"116","imageName":"stab wound"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383397,"name":"Staff of the Death Magus","cmc":3,"rarity":"Uncommon","artist":"Daniel Ljunggren","manaCost":"{3}","text":"Whenever you cast a black spell or a Swamp enters the battlefield under your control, you gain 1 life.","flavor":"A symbol of ambition in ruthless times.","number":"232","imageName":"staff of the death magus"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383398,"name":"Staff of the Flame Magus","cmc":3,"rarity":"Uncommon","artist":"Daniel Ljunggren","manaCost":"{3}","text":"Whenever you cast a red spell or a Mountain enters the battlefield under your control, you gain 1 life.","flavor":"A symbol of passion in indifferent times.","number":"233","imageName":"staff of the flame magus"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383399,"name":"Staff of the Mind Magus","cmc":3,"rarity":"Uncommon","artist":"Daniel Ljunggren","manaCost":"{3}","text":"Whenever you cast a blue spell or an Island enters the battlefield under your control, you gain 1 life.","flavor":"A symbol of sagacity in bewildering times.","number":"234","imageName":"staff of the mind magus"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383400,"name":"Staff of the Sun Magus","cmc":3,"rarity":"Uncommon","artist":"Daniel Ljunggren","manaCost":"{3}","text":"Whenever you cast a white spell or a Plains enters the battlefield under your control, you gain 1 life.","flavor":"A symbol of conviction in uncertain times.","number":"235","imageName":"staff of the sun magus"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383401,"name":"Staff of the Wild Magus","cmc":3,"rarity":"Uncommon","artist":"Daniel Ljunggren","manaCost":"{3}","text":"Whenever you cast a green spell or a Forest enters the battlefield under your control, you gain 1 life.","flavor":"A symbol of ferocity in oppressive times.","number":"236","imageName":"staff of the wild magus"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Black"],"multiverseid":383402,"name":"Stain the Mind","cmc":5,"rarity":"Rare","artist":"Jason Rainville","manaCost":"{4}{B}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nName a nonland card. Search target player's graveyard, hand, and library for any number of cards with that name and exile them. Then that player shuffles his or her library.","number":"117","imageName":"stain the mind"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383403,"name":"Statute of Denial","cmc":4,"rarity":"Common","artist":"Zoltan Boros","manaCost":"{2}{U}{U}","text":"Counter target spell. If you control a blue creature, draw a card, then discard a card.","flavor":"\"Pyrotechnic activity of any sort is strictly prohibited. It is irrelevant that today is a holiday.\"","number":"79","imageName":"statute of denial"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Red"],"multiverseid":383404,"name":"Stoke the Flames","cmc":4,"rarity":"Uncommon","artist":"Ryan Barger","manaCost":"{2}{R}{R}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nStoke the Flames deals 4 damage to target creature or player.","number":"164","imageName":"stoke the flames"},{"layout":"normal","type":"Creature — Leviathan","types":["Creature"],"colors":["Blue"],"multiverseid":383405,"name":"Stormtide Leviathan","subtypes":["Leviathan"],"cmc":8,"rarity":"Rare","artist":"Karl Kopinski","power":"8","toughness":"8","manaCost":"{5}{U}{U}{U}","text":"Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nAll lands are Islands in addition to their other types.\nCreatures without flying or islandwalk can't attack.","number":"80","imageName":"stormtide leviathan"},{"layout":"normal","type":"Creature — Elf Warrior","types":["Creature"],"colors":["Green"],"multiverseid":383406,"name":"Sunblade Elf","subtypes":["Elf","Warrior"],"cmc":1,"rarity":"Uncommon","artist":"Lucas Graciano","power":"1","toughness":"1","manaCost":"{G}","text":"Sunblade Elf gets +1/+1 as long as you control a Plains.\n{4}{W}: Creatures you control get +1/+1 until end of turn.","flavor":"\"We patrol the steppes to keep enemies from the forest verge.\"","number":"202","imageName":"sunblade elf"},{"layout":"normal","type":"Creature — Pegasus","types":["Creature"],"colors":["White"],"multiverseid":383407,"name":"Sungrace Pegasus","subtypes":["Pegasus"],"cmc":2,"rarity":"Common","artist":"Phill Simmer","power":"1","toughness":"2","manaCost":"{1}{W}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nLifelink (Damage dealt by this creature also causes you to gain that much life.)","flavor":"The sacred feathers of the pegasus are said to have healing powers.","number":"38","imageName":"sungrace pegasus"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Swamp","types":["Land"],"multiverseid":383409,"name":"Swamp","subtypes":["Swamp"],"rarity":"Basic Land","artist":"John Avon","number":"258","variations":[383408,383410,383411],"imageName":"swamp1"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Swamp","types":["Land"],"multiverseid":383410,"name":"Swamp","subtypes":["Swamp"],"rarity":"Basic Land","artist":"Cliff Childs","number":"259","variations":[383408,383409,383411],"imageName":"swamp2"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Swamp","types":["Land"],"multiverseid":383411,"name":"Swamp","subtypes":["Swamp"],"rarity":"Basic Land","artist":"Jonas De Ro","number":"260","variations":[383408,383409,383410],"imageName":"swamp3"},{"layout":"normal","supertypes":["Basic"],"type":"Basic Land — Swamp","types":["Land"],"multiverseid":383408,"name":"Swamp","subtypes":["Swamp"],"rarity":"Basic Land","artist":"Jung Park","number":"261","variations":[383409,383410,383411],"imageName":"swamp4"},{"layout":"normal","type":"Creature — Beast","types":["Creature"],"colors":["Green"],"multiverseid":383173,"name":"Terra Stomper","subtypes":["Beast"],"cmc":6,"rarity":"Rare","artist":"Goran Josic","power":"8","toughness":"8","manaCost":"{3}{G}{G}{G}","text":"Terra Stomper can't be countered.\nTrample (If this creature would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)","flavor":"Its footfalls cause violent earthquakes, hurtling boulders, and unseasonable dust storms.","number":"284","imageName":"terra stomper","starter":true},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Artifact","types":["Artifact"],"multiverseid":383412,"name":"The Chain Veil","cmc":4,"rarity":"Mythic Rare","artist":"Volkan Baga","manaCost":"{4}","text":"At the beginning of your end step, if you didn't activate a loyalty ability of a planeswalker this turn, you lose 2 life.\n{4}, {T}: For each planeswalker you control, you may activate one of its loyalty abilities once this turn as though none of its loyalty abilities have been activated this turn.","number":"215","imageName":"the chain veil"},{"layout":"normal","type":"Creature — Giant","types":["Creature"],"colors":["Red"],"multiverseid":383413,"name":"Thundering Giant","subtypes":["Giant"],"cmc":5,"rarity":"Common","artist":"Mark Zug","power":"4","toughness":"3","manaCost":"{3}{R}{R}","text":"Haste (This creature can attack and {T} as soon as it comes under your control.)","flavor":"The giant was felt a few seconds before he was seen.","number":"165","imageName":"thundering giant"},{"layout":"normal","type":"Creature — Human Cleric","types":["Creature"],"colors":["White"],"multiverseid":383414,"name":"Tireless Missionaries","subtypes":["Human","Cleric"],"cmc":5,"rarity":"Common","artist":"Dave Kendall","power":"2","toughness":"3","manaCost":"{4}{W}","text":"When Tireless Missionaries enters the battlefield, you gain 3 life.","flavor":"If they succeed in their holy work, their order will vanish into welcome obscurity, for there will be no more souls to redeem.","number":"39","imageName":"tireless missionaries"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Green"],"multiverseid":383415,"name":"Titanic Growth","cmc":2,"rarity":"Common","artist":"Ryan Pancoast","manaCost":"{1}{G}","text":"Target creature gets +4/+4 until end of turn.","flavor":"The massive dominate through might. The tiny survive with guile. Beware the tiny who become massive.","number":"203","imageName":"titanic growth"},{"layout":"normal","type":"Creature — Devil","types":["Creature"],"colors":["Red"],"multiverseid":383416,"name":"Torch Fiend","subtypes":["Devil"],"cmc":2,"rarity":"Common","artist":"Winona Nelson","power":"2","toughness":"1","manaCost":"{1}{R}","text":"{R}, Sacrifice Torch Fiend: Destroy target artifact.","flavor":"Devils redecorate every room with fire.","number":"166","imageName":"torch fiend"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383417,"name":"Tormod's Crypt","cmc":0,"rarity":"Uncommon","artist":"Lars Grant-West","manaCost":"{0}","text":"{T}, Sacrifice Tormod's Crypt: Exile all cards from target player's graveyard.","flavor":"Dominaria's most extravagant crypt nevertheless holds an empty grave.","number":"237","imageName":"tormod's crypt"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["White"],"multiverseid":383418,"name":"Triplicate Spirits","cmc":6,"rarity":"Common","artist":"Izzy","manaCost":"{4}{W}{W}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nPut three 1/1 white Spirit creature tokens with flying onto the battlefield. (They can't be blocked except by creatures with flying or reach.)","number":"40","imageName":"triplicate spirits"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Blue"],"multiverseid":383419,"name":"Turn to Frog","cmc":2,"rarity":"Uncommon","artist":"Warren Mahy","manaCost":"{1}{U}","text":"Until end of turn, target creature loses all abilities and becomes a blue Frog with base power and toughness 1/1.","flavor":"\"Ribbit.\"","number":"81","imageName":"turn to frog"},{"layout":"normal","type":"Creature — Rat","types":["Creature"],"colors":["Black"],"multiverseid":383420,"name":"Typhoid Rats","subtypes":["Rat"],"cmc":1,"rarity":"Common","artist":"Kev Walker","power":"1","toughness":"1","manaCost":"{B}","text":"Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)","flavor":"Kidnappers caught in Havengul are given two choices: languish in prison or become rat catchers. The smart ones go to prison.","number":"118","imageName":"typhoid rats"},{"layout":"normal","type":"Artifact","types":["Artifact"],"multiverseid":383421,"name":"Tyrant's Machine","cmc":2,"rarity":"Common","artist":"Yeong-Hao Han","manaCost":"{2}","text":"{4}, {T}: Tap target creature.","flavor":"\"Though tempered differently, all wills can be broken.\"\n—Inquisitor Kyrik","number":"238","imageName":"tyrant's machine"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Black"],"multiverseid":383422,"name":"Ulcerate","cmc":1,"rarity":"Uncommon","artist":"Johann Bodin","manaCost":"{B}","text":"Target creature gets -3/-3 until end of turn. You lose 3 life.","flavor":"\"If it were merely lethal, that would be sufficient. The art, however, is in maximizing the suffering it causes.\"\n—Liliana Vess","number":"119","imageName":"ulcerate"},{"layout":"normal","type":"Creature — Fungus Horror","types":["Creature"],"colors":["Green"],"multiverseid":383423,"name":"Undergrowth Scavenger","subtypes":["Fungus","Horror"],"cmc":4,"rarity":"Common","artist":"Nils Hamm","power":"0","toughness":"0","manaCost":"{3}{G}","text":"Undergrowth Scavenger enters the battlefield with a number of +1/+1 counters on it equal to the number of creature cards in all graveyards.","flavor":"It sees a rotting carcass as a good wine which has been aged properly.","number":"204","imageName":"undergrowth scavenger"},{"layout":"normal","type":"Instant","types":["Instant"],"colors":["Black"],"multiverseid":383424,"name":"Unmake the Graves","cmc":5,"rarity":"Common","artist":"Aaron Miller","manaCost":"{4}{B}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nReturn up to two target creature cards from your graveyard to your hand.","flavor":"\"I'm raising an army. Any volunteers?\"","number":"120","imageName":"unmake the graves"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Land","types":["Land"],"multiverseid":383425,"name":"Urborg, Tomb of Yawgmoth","rarity":"Rare","artist":"John Avon","text":"Each land is a Swamp in addition to its other land types.","flavor":"\"Yawgmoth's corpse is a wound in the universe. His foul blood seeps out, infecting the land with his final curse.\"\n—Lord Windgrace","number":"248","imageName":"urborg, tomb of yawgmoth"},{"layout":"normal","type":"Creature — Sliver","types":["Creature"],"colors":["Green"],"multiverseid":383426,"name":"Venom Sliver","subtypes":["Sliver"],"cmc":2,"rarity":"Uncommon","artist":"Dave Kendall","power":"1","toughness":"1","manaCost":"{1}{G}","text":"Sliver creatures you control have deathtouch. (Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it.)","flavor":"\"We attacked with arrows dipped in poison. The slivers that did not die began to change.\"\n—Hastric, Thunian scout","number":"205","imageName":"venom sliver"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Green"],"multiverseid":383427,"name":"Verdant Haven","subtypes":["Aura"],"cmc":3,"rarity":"Common","artist":"Daniel Ljunggren","manaCost":"{2}{G}","text":"Enchant land\nWhen Verdant Haven enters the battlefield, you gain 2 life.\nWhenever enchanted land is tapped for mana, its controller adds one mana of any color to his or her mana pool (in addition to the mana the land produces).","number":"206","imageName":"verdant haven"},{"layout":"normal","type":"Enchantment — Aura","types":["Enchantment"],"colors":["Green"],"multiverseid":383428,"name":"Vineweft","subtypes":["Aura"],"cmc":1,"rarity":"Common","artist":"Lucas Graciano","manaCost":"{G}","text":"Enchant creature\nEnchanted creature gets +1/+1.\n{4}{G}: Return Vineweft from your graveyard to your hand.","flavor":"Fortified by the wilds.","number":"207","imageName":"vineweft"},{"layout":"normal","type":"Sorcery","types":["Sorcery"],"colors":["Blue"],"multiverseid":383429,"name":"Void Snare","cmc":1,"rarity":"Common","artist":"Zack Stella","manaCost":"{U}","text":"Return target nonland permanent to its owner's hand.","flavor":"\"I've tried so many variations on how to get rid of annoying things that it's hard to decide which one I like best.\"\n—Ashurel, voidmage","number":"82","imageName":"void snare"},{"layout":"normal","type":"Creature — Zombie","types":["Creature"],"colors":["Black"],"multiverseid":383174,"name":"Walking Corpse","subtypes":["Zombie"],"cmc":2,"rarity":"Common","artist":"Igor Kieryluk","power":"2","toughness":"2","manaCost":"{1}{B}","flavor":"\"Feeding a normal army is a problem of logistics. With zombies, it is an asset. Feeding is why they fight. Feeding is why they are feared.\"\n—Jadar, ghoulcaller of Nephalia","number":"278","imageName":"walking corpse","starter":true},{"layout":"normal","type":"Creature — Wall","types":["Creature"],"colors":["White"],"multiverseid":383430,"name":"Wall of Essence","subtypes":["Wall"],"cmc":2,"rarity":"Uncommon","artist":"Adam Rex","power":"0","toughness":"4","manaCost":"{1}{W}","text":"Defender (This creature can't attack.)\nWhenever Wall of Essence is dealt combat damage, you gain that much life.","flavor":"\"If you cannot turn your enemy's strength to weakness, then make that strength your own.\"\n—Gresha, warrior sage","number":"41","imageName":"wall of essence"},{"layout":"normal","type":"Creature — Wall","types":["Creature"],"colors":["Red"],"multiverseid":383431,"name":"Wall of Fire","subtypes":["Wall"],"cmc":3,"rarity":"Common","artist":"Dan Dos Santos","power":"0","toughness":"5","manaCost":"{1}{R}{R}","text":"Defender (This creature can't attack.)\n{R}: Wall of Fire gets +1/+0 until end of turn.","flavor":"Mercy is for those who keep their distance.","number":"167","imageName":"wall of fire"},{"layout":"normal","type":"Creature — Wall","types":["Creature"],"colors":["Blue"],"multiverseid":383432,"name":"Wall of Frost","subtypes":["Wall"],"cmc":3,"rarity":"Uncommon","artist":"Mike Bierek","power":"0","toughness":"7","manaCost":"{1}{U}{U}","text":"Defender (This creature can't attack.)\nWhenever Wall of Frost blocks a creature, that creature doesn't untap during its controller's next untap step.","flavor":"\"I have seen countless petty warmongers gaze on it for a time before turning away.\"\n—Sarlena, paladin of the Northern Verge","number":"83","imageName":"wall of frost"},{"layout":"normal","type":"Creature — Zombie Wall","types":["Creature"],"colors":["Black"],"multiverseid":383433,"name":"Wall of Limbs","subtypes":["Zombie","Wall"],"cmc":3,"rarity":"Uncommon","artist":"Yeong-Hao Han","power":"0","toughness":"3","manaCost":"{2}{B}","text":"Defender (This creature can't attack.)\nWhenever you gain life, put a +1/+1 counter on Wall of Limbs.\n{5}{B}{B}, Sacrifice Wall of Limbs: Target player loses X life, where X is Wall of Limbs's power.","number":"121","imageName":"wall of limbs"},{"layout":"normal","type":"Creature — Wall","types":["Creature"],"colors":["Green"],"multiverseid":383434,"name":"Wall of Mulch","subtypes":["Wall"],"cmc":2,"rarity":"Uncommon","artist":"Anthony S. Waters","power":"0","toughness":"4","manaCost":"{1}{G}","text":"Defender (This creature can't attack.)\n{G}, Sacrifice a Wall: Draw a card.","flavor":"Mulch is the fabric of life in the forest. Plants live in it, they die in it, and then they become part of it, feeding countless generations to come.","number":"208","imageName":"wall of mulch"},{"layout":"normal","type":"Creature — Human Wizard","types":["Creature"],"colors":["White"],"multiverseid":383435,"name":"Warden of the Beyond","subtypes":["Human","Wizard"],"cmc":3,"rarity":"Uncommon","artist":"Raymond Swanland","power":"2","toughness":"2","manaCost":"{2}{W}","text":"Vigilance (Attacking doesn't cause this creature to tap.)\nWarden of the Beyond gets +2/+2 as long as an opponent owns a card in exile.","flavor":"He draws strength from a vast source few mortals can fathom.\nDesigned by Isaiah Cartwright","number":"42","imageName":"warden of the beyond"},{"layout":"normal","type":"Enchantment","types":["Enchantment"],"colors":["Black"],"multiverseid":383436,"name":"Waste Not","cmc":2,"rarity":"Rare","artist":"Matt Stewart","manaCost":"{1}{B}","text":"Whenever an opponent discards a creature card, put a 2/2 black Zombie creature token onto the battlefield.\nWhenever an opponent discards a land card, add {B}{B} to your mana pool.\nWhenever an opponent discards a noncreature, nonland card, draw a card.","flavor":"Designed by the Magic community","number":"122","imageName":"waste not"},{"layout":"normal","type":"Creature — Bird","types":["Creature"],"colors":["Blue"],"multiverseid":383437,"name":"Welkin Tern","subtypes":["Bird"],"cmc":2,"rarity":"Common","artist":"Austin Hsu","power":"2","toughness":"1","manaCost":"{1}{U}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\nWelkin Tern can block only creatures with flying.","flavor":"Sailors have come to regard them as bad luck, for they falsely bring hope of land.","number":"84","imageName":"welkin tern"},{"layout":"normal","type":"Artifact Creature — Golem","types":["Artifact","Creature"],"multiverseid":383438,"name":"Will-Forged Golem","subtypes":["Golem"],"cmc":6,"rarity":"Common","artist":"Jason Felix","power":"4","toughness":"4","manaCost":"{6}","text":"Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)","flavor":"The modular nature of the automaton's design makes assembly perfectly intuitive.","number":"239","imageName":"will-forged golem"},{"layout":"normal","type":"Creature — Frog","types":["Creature"],"colors":["Black"],"multiverseid":383439,"name":"Witch's Familiar","subtypes":["Frog"],"cmc":3,"rarity":"Common","artist":"Jack Wang","power":"2","toughness":"3","manaCost":"{2}{B}","flavor":"Some bog witches practice the strange art of batrachomancy, reading portents in the number, size, and color of warts on a toad's hide.","number":"123","imageName":"witch's familiar"},{"layout":"normal","type":"Creature — Human Assassin","types":["Creature"],"colors":["Black"],"multiverseid":383440,"name":"Xathrid Slyblade","subtypes":["Human","Assassin"],"cmc":3,"rarity":"Uncommon","artist":"Steve Prescott","power":"2","toughness":"1","manaCost":"{2}{B}","text":"Hexproof (This creature can't be the target of spells or abilities your opponents control.)\n{3}{B}: Until end of turn, Xathrid Slyblade loses hexproof and gains first strike and deathtouch. (It deals combat damage before creatures without first strike. Any amount of damage it deals to a creature is enough to destroy it.)","flavor":"Designed by Rob Pardo","number":"124","imageName":"xathrid slyblade"},{"layout":"normal","type":"Land","types":["Land"],"multiverseid":383441,"name":"Yavimaya Coast","rarity":"Rare","artist":"Anthony S. Waters","text":"{T}: Add {1} to your mana pool.\n{T}: Add {G} or {U} to your mana pool. Yavimaya Coast deals 1 damage to you.","number":"249","imageName":"yavimaya coast"},{"layout":"normal","supertypes":["Legendary"],"type":"Legendary Creature — Human Rogue","types":["Creature"],"colors":["Green"],"multiverseid":383442,"name":"Yisan, the Wanderer Bard","subtypes":["Human","Rogue"],"cmc":3,"rarity":"Rare","artist":"Chase Stone","power":"2","toughness":"3","manaCost":"{2}{G}","text":"{2}{G}, {T}, Put a verse counter on Yisan, the Wanderer Bard: Search your library for a creature card with converted mana cost equal to the number of verse counters on Yisan, put it onto the battlefield, then shuffle your library.","flavor":"Designed by Brian Fargo","number":"209","imageName":"yisan, the wanderer bard"},{"layout":"normal","type":"Creature — Shade","types":["Creature"],"colors":["Black"],"multiverseid":383443,"name":"Zof Shade","subtypes":["Shade"],"cmc":4,"rarity":"Common","artist":"Jason A. Engle","power":"2","toughness":"2","manaCost":"{3}{B}","text":"{2}{B}: Zof Shade gets +2/+2 until end of turn.","flavor":"Shades are drawn to places of power, often rooting themselves in a single area to feed.","number":"125","imageName":"zof shade"}],"languagesPrinted":["Chinese Simplified","Chinese Traditional","French","German","Italian","Japanese","Korean","Portuguese (Brazil)","Russian","Spanish"]} \ No newline at end of file diff --git a/bin/eu/equalparts/cardbase/data/Card.class b/bin/eu/equalparts/cardbase/data/Card.class new file mode 100644 index 0000000..c63cff7 Binary files /dev/null and b/bin/eu/equalparts/cardbase/data/Card.class differ diff --git a/bin/eu/equalparts/cardbase/data/CardBase.class b/bin/eu/equalparts/cardbase/data/CardBase.class new file mode 100644 index 0000000..bff993f Binary files /dev/null and b/bin/eu/equalparts/cardbase/data/CardBase.class differ diff --git a/bin/eu/equalparts/cardbase/data/CardSet.class b/bin/eu/equalparts/cardbase/data/CardSet.class new file mode 100644 index 0000000..f7afa48 Binary files /dev/null and b/bin/eu/equalparts/cardbase/data/CardSet.class differ diff --git a/bin/eu/equalparts/cardbase/query/Test.class b/bin/eu/equalparts/cardbase/query/Test.class new file mode 100644 index 0000000..2d462aa Binary files /dev/null and b/bin/eu/equalparts/cardbase/query/Test.class differ diff --git a/bin/eu/equalparts/cardbase/standalone/CardBaseCLI.class b/bin/eu/equalparts/cardbase/standalone/CardBaseCLI.class new file mode 100644 index 0000000..62685bc Binary files /dev/null and b/bin/eu/equalparts/cardbase/standalone/CardBaseCLI.class differ diff --git a/cardbase.py b/cardbase.py deleted file mode 100755 index bb831b0..0000000 --- a/cardbase.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 - -import cardparser -import requests -import sys -from lxml import html -import yaml -import re - -def exit(msg=""): - if msg != "": - print(msg) - - #database.close() - - sys.exit() - -def main(args): - - try: - dataFile = args[1] - #database = open(args[1], "w") - except Exception as e: - print("Please provide a valid database file as the first argument.") - exit(e) - - print("Welcome to cardbase") - print("For a list of commands, type \"help\"") - - globalSet = "" - - while(True): - #try: - raw = input("(" + globalSet + ")> ").strip() - args = re.split("[\t ]+", raw) - - if args[0] == "help": - print("Need help? try google.com") - - elif args[0] == "exit": - exit() - - elif args[0] == "set": - if args[1] and args[1] != "": - globalSet = re.sub("[^0-9A-Za-z]", "", args[1]) - else: - globalSet = "" - - elif args[0] == "save": - if args[1] and args[1] != "": - dataFile = args[1] - - elif args[0]: - if globalSet != "": - cardNo = re.sub("[^0-9A-Za-z]", "", args[0]) - print("Fetching card " + cardNo) - try: - pass - newCard = cardparser.fetchCard(globalSet, args[0]) - print(newCard.title) - except cardparser.CardNotFoundException as e: - print("Card not found.") - else: - print("Select a set with the \"set\" command before adding cards.") - - else: - print("Invalid input") - - #except Exception as e: - # exit(e) - - -# The entry point -if __name__ == "__main__": - main(sys.argv) - diff --git a/cardparser.py b/cardparser.py deleted file mode 100644 index 4a9de71..0000000 --- a/cardparser.py +++ /dev/null @@ -1,180 +0,0 @@ -import re -import requests -from lxml import html - -class Card(): - def __init__(self): - self.title = "" - self.cost = "" - self.convertedCost = "" - self.colour = "" - self.type = "" - self.subtype = "" - self.edition = "" - self.scan = "" - self.artist = "" - self.text = "" - self.flavour = "" - self.rarity = "" - self.number = "" - self.power = "" - self.toughness = "" - self.loyalty = "" - -class CardNotFoundException(Exception): - pass - -# fetching functions -def makeUrl(cardSet, cardNo): - return "http://magiccards.info/" + cardSet + "/en/" + cardNo + ".html" - -def remoteFetch(url): - return html.fromstring(requests.get(url).text) - -def isValid(page): - notFound = page.xpath("/html/body/h1/text()") - response404 = page.xpath("/html/body/h1/text()") - if notFound: - raise CardNotFoundException() - -def setRemoteData(card, url): - # fetch card from upstream - page = html.fromstring(requests.get(url).text) - isValid(page) - - # parse and set data - card.title = getTitle(page) - card.cost = getCost(page) - card.convertedCost = getConvertedCost(page) - card.colour = getColour(page) - card.type = getType(page) - card.subtype = getSubType(page) - card.artist = getArtist(page) - card.text = getText(page) - card.flavour = getFlavour(page) - card.rarity = getRarity(page) - card.power = getPower(page) - card.toughness = getToughness(page) - card.loyalty = getLoyalty(page) - - -def fetchCard(cardSet, cardNo): - # build object - card = Card() - card.edition = cardSet - card.scan = "http://magiccards.info/scans/en/" + cardSet + "/" + cardNo + ".jpg" - card.number = cardNo - - setRemoteData(card, makeUrl(cardSet, cardNo)) - - return card - -# parsing functions -def getTitle(page): - return page.xpath("/html/body/table[3]/tr/td[2]/span/a/text()")[0] - -def extractSubTitle(page): - line = page.xpath("/html/body/table[3]/tr/td[2]/p[1]/text()")[0] - line = re.sub("\n", "", line) - line = re.sub(" +", " ", line) - line = line.strip() - - return line - -def getCost(page): - cost = extractSubTitle(page) - cost = re.search(" ([0-9X]*[WGRBU\{\}/]*) ", cost) - - if cost: - return cost.group(1) - else: - return "" - -def getConvertedCost(page): - cost = extractSubTitle(page) - cost = re.search("\(([0-9+])\)", cost) - - if cost: - return cost.group(1) - else: - return "" - -def getColour(page): - colours = extractSubTitle(page) - colours = re.search(" [0-9X]*([WGRBU\{\}/]*) ", colours) - - if colours: - colours = colours.group(1) - colours = re.sub("[\{\}/]*", "", colours) - colours = re.sub(r"(.)\1+", r"\1", colours) - - return colours - else: - return "" - -def getType(page): - types = extractSubTitle(page) - types = re.search("([A-Za-z ]*)( —)?", types).group(1).strip() - - return types - -def getSubType(page): - subtypes = extractSubTitle(page) - subtypes = re.search("— ([A-Za-z ]*)", subtypes) - - if subtypes: - return subtypes.group(1).strip() - else: - return "" - -def getArtist(page): - artist = page.xpath("/html/body/table[3]/tr/td[2]/p[4]/text()")[0] - artist = re.sub("Illus. ", "", artist) - - return artist - -def getText(page): - text = page.xpath("/html/body/table[3]/tr/td[2]/p[2]/b/text()") - - return text - -def getFlavour(page): - flavour = page.xpath("/html/body/table[3]/tr/td[2]/p[3]/i/text()") - if flavour: - flavour = re.sub("\n", "", " ".join(flavour)) - return flavour - else: - return "" - -def getRarity(page): - rarity = page.xpath("/html/body/table[3]/tr/td[3]/small/b[2]/text()")[0] - rarity = re.search("\(([A-Za-z ]*)\)", rarity).group(1) - - return rarity - -def getPower(page): - power = extractSubTitle(page) - power = re.search("([0-9X\*]+)/[0-9X\*]+", power) - - if power: - return power.group(1) - else: - return "" - -def getToughness(page): - toughness = extractSubTitle(page) - toughness = re.search("[0-9X\*]+/([0-9X\*]+)", toughness) - - if toughness: - return toughness.group(1) - else: - return "" - -def getLoyalty(page): - loyalty = extractSubTitle(page) - loyalty = re.search("\(Loyalty: ([0-9X*]+)\)", loyalty) - - if loyalty: - return loyalty.group(1) - else: - return "" diff --git a/ext/jackson-annotations-2.5.0.jar b/ext/jackson-annotations-2.5.0.jar new file mode 100644 index 0000000..6252131 Binary files /dev/null and b/ext/jackson-annotations-2.5.0.jar differ diff --git a/ext/jackson-core-2.5.3-sources.jar b/ext/jackson-core-2.5.3-sources.jar new file mode 100644 index 0000000..0e9ba46 Binary files /dev/null and b/ext/jackson-core-2.5.3-sources.jar differ diff --git a/ext/jackson-core-2.5.3.jar b/ext/jackson-core-2.5.3.jar new file mode 100644 index 0000000..f3ae1ae Binary files /dev/null and b/ext/jackson-core-2.5.3.jar differ diff --git a/ext/jackson-databind-2.5.3-sources.jar b/ext/jackson-databind-2.5.3-sources.jar new file mode 100644 index 0000000..06bd734 Binary files /dev/null and b/ext/jackson-databind-2.5.3-sources.jar differ diff --git a/ext/jackson-databind-2.5.3.jar b/ext/jackson-databind-2.5.3.jar new file mode 100644 index 0000000..e217187 Binary files /dev/null and b/ext/jackson-databind-2.5.3.jar differ diff --git a/fulltest.sh b/fulltest.sh deleted file mode 100755 index ac01b15..0000000 --- a/fulltest.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh - -python -m unittest test_cardclass test_shivandragon test_callow test_sorin test_island test_shoal test_coecon test_hydra test_nightmare test_ugin diff --git a/shivandragon.json b/shivandragon.json new file mode 100644 index 0000000..231dde4 --- /dev/null +++ b/shivandragon.json @@ -0,0 +1 @@ +{"layout":"normal","type":"Creature — Dragon","types":["Creature"],"colors":["Red"],"multiverseid":383172,"name":"Shivan Dragon","subtypes":["Dragon"],"cmc":6,"rarity":"Rare","artist":"Donato Giancola","power":"5","toughness":"5","manaCost":"{4}{R}{R}","text":"Flying (This creature can't be blocked except by creatures with flying or reach.)\n{R}: Shivan Dragon gets +1/+0 until end of turn.","flavor":"The undisputed master of the mountains of Shiv.","number":"281","imageName":"shivan dragon","starter":true} diff --git a/src/eu/equalparts/cardbase/data/Card.java b/src/eu/equalparts/cardbase/data/Card.java new file mode 100644 index 0000000..d125c54 --- /dev/null +++ b/src/eu/equalparts/cardbase/data/Card.java @@ -0,0 +1,233 @@ +package eu.equalparts.cardbase.data; + +import java.util.ArrayList; + +public class Card { + private String layout; + private String name; + private ArrayList names; + private String manaCost; + private Integer cmc; + private ArrayList colors; + private String type; + private ArrayList supertypes; + private ArrayList types; + private ArrayList subtypes; + private String rarity; + private String text; + private String flavor; + private String artist; + private String number; + private String power; + private String toughness; + private Integer loyalty; + private Integer multiverseid; + private ArrayList variations; + private String imageName; + private String border; + private String watermark; + + // Not part of JSON, will be set later + private String setCode; + private String setName; + + public String getLayout() { + return layout; + } + + public void setLayout(String layout) { + this.layout = layout; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ArrayList getNames() { + return names; + } + + public void setNames(ArrayList names) { + this.names = names; + } + + public String getManaCost() { + return manaCost; + } + + public void setManaCost(String manaCost) { + this.manaCost = manaCost; + } + + public Integer getCmc() { + return cmc; + } + + public void setCmc(Integer cmc) { + this.cmc = cmc; + } + + public ArrayList getColors() { + return colors; + } + + public void setColors(ArrayList colors) { + this.colors = colors; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ArrayList getSupertypes() { + return supertypes; + } + + public void setSupertypes(ArrayList supertypes) { + this.supertypes = supertypes; + } + + public ArrayList getTypes() { + return types; + } + + public void setTypes(ArrayList types) { + this.types = types; + } + + public ArrayList getSubtypes() { + return subtypes; + } + + public void setSubtypes(ArrayList subtypes) { + this.subtypes = subtypes; + } + + public String getRarity() { + return rarity; + } + + public void setRarity(String rarity) { + this.rarity = rarity; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getFlavor() { + return flavor; + } + + public void setFlavor(String flavor) { + this.flavor = flavor; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getPower() { + return power; + } + + public void setPower(String power) { + this.power = power; + } + + public String getToughness() { + return toughness; + } + + public void setToughness(String toughness) { + this.toughness = toughness; + } + + public Integer getLoyalty() { + return loyalty; + } + + public void setLoyalty(Integer loyalty) { + this.loyalty = loyalty; + } + + public Integer getMultiverseid() { + return multiverseid; + } + + public void setMultiverseid(Integer multiverseid) { + this.multiverseid = multiverseid; + } + + public ArrayList getVariations() { + return variations; + } + + public void setVariations(ArrayList variations) { + this.variations = variations; + } + + public String getImageName() { + return imageName; + } + + public void setImageName(String imageName) { + this.imageName = imageName; + } + + public String getBorder() { + return border; + } + + public void setBorder(String border) { + this.border = border; + } + + public String getWatermark() { + return watermark; + } + + public void setWatermark(String watermark) { + this.watermark = watermark; + } + + public String getSetName() { + return setName; + } + + public void setSetName(String setName) { + this.setName = setName; + } + + public String getSetCode() { + return setCode; + } + + public void setSetCode(String setCode) { + this.setCode = setCode; + } +} \ No newline at end of file diff --git a/src/eu/equalparts/cardbase/data/CardBase.java b/src/eu/equalparts/cardbase/data/CardBase.java new file mode 100644 index 0000000..14c30a5 --- /dev/null +++ b/src/eu/equalparts/cardbase/data/CardBase.java @@ -0,0 +1,23 @@ +package eu.equalparts.cardbase.data; +import java.io.File; + +public class CardBase { + + public static void main(String... args) { + + } + + /** + * Parse a cardbase file and create an associated CardBase object. + */ + public CardBase(File cardbase) { + + } + + /** + * Create an empty CardBase. + */ + public CardBase() { + + } +} diff --git a/src/eu/equalparts/cardbase/data/CardSet.java b/src/eu/equalparts/cardbase/data/CardSet.java new file mode 100644 index 0000000..97622db --- /dev/null +++ b/src/eu/equalparts/cardbase/data/CardSet.java @@ -0,0 +1,86 @@ +package eu.equalparts.cardbase.data; + +import java.util.ArrayList; + +public class CardSet { + private String name; + private String code; + private String releaseDate; + private String border; + private String type; + private String block; + private String gathererCode; + private ArrayList cards; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getReleaseDate() { + return releaseDate; + } + + public void setReleaseDate(String releaseDate) { + this.releaseDate = releaseDate; + } + + public String getBorder() { + return border; + } + + public void setBorder(String border) { + this.border = border; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getBlock() { + return block; + } + + public void setBlock(String block) { + this.block = block; + } + + public ArrayList getCards() { + return cards; + } + + public Card getCardByNumber(String number) { + for (Card card : cards) { + if (card.getNumber().equals(number)) + return card; + } + return null; + } + + public void setCards(ArrayList cards) { + this.cards = cards; + } + + public String getGathererCode() { + return gathererCode; + } + + public void setGathererCode(String gathererCode) { + this.gathererCode = gathererCode; + } +} \ No newline at end of file diff --git a/src/eu/equalparts/cardbase/query/Test.java b/src/eu/equalparts/cardbase/query/Test.java new file mode 100644 index 0000000..646139e --- /dev/null +++ b/src/eu/equalparts/cardbase/query/Test.java @@ -0,0 +1,72 @@ +package eu.equalparts.cardbase.query; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.equalparts.cardbase.data.Card; +import eu.equalparts.cardbase.data.CardSet; + +public class Test { + +// public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { +// ObjectMapper mapper = new ObjectMapper(); +// mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); +// +// @SuppressWarnings("unchecked") +// List allCards = getAllCards((Map) mapper +// .readValue(new File("AllSets.json"), new TypeReference>() {})); +// +// System.out.println("Number of cards: " + allCards.size()); +// } +// +// public static List getAllCards(Map sets) { +// List allCards = new ArrayList(); +// +// for (CardSet set : sets.values()) { +// for (Card card : set.getCards()) { +// card.setSetCode(set.getCode()); +// card.setSetName(set.getName()); +// // System.out.println(set.getName() + ": " + card.getName()); +// +// allCards.add(card); +// } +// } +// +// return allCards; +// } + + public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + +// @SuppressWarnings("unchecked") + CardSet set = mapper.readValue(new File("M15.json"), CardSet.class); + System.out.println(set.getCardByNumber("281").getName()); + + } + + public static List getAllCards(Map sets) { + List allCards = new ArrayList(); + + for (CardSet set : sets.values()) { + for (Card card : set.getCards()) { + card.setSetCode(set.getCode()); + card.setSetName(set.getName()); + // System.out.println(set.getName() + ": " + card.getName()); + + allCards.add(card); + } + } + + return allCards; + } +} diff --git a/src/eu/equalparts/cardbase/standalone/CardBaseCLI.java b/src/eu/equalparts/cardbase/standalone/CardBaseCLI.java new file mode 100644 index 0000000..4b746b2 --- /dev/null +++ b/src/eu/equalparts/cardbase/standalone/CardBaseCLI.java @@ -0,0 +1,69 @@ +package eu.equalparts.cardbase.standalone; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; + +import eu.equalparts.cardbase.data.CardBase; + +/** + * This provides a lightweight CLI for interacting with cardbase files. + * + */ +public class CardBaseCLI { + + /** + * Execute the interface. + * + * @param args the first argument is the cardbase file. Further arguments are ignored. + */ + public static void main(String... args) { + + System.out.println("Welcome to cardbase"); + CardBase cb; + + // construct the cardbase + if (args.length > 0) { + System.out.println("Building cardbase from " + args[0]); + cb = new CardBase(new File(args[0])); + } else { + System.out.println("No cardbase file was provided, initialising a clean cardbase"); + cb = new CardBase(); + } + + // main UI loop + try { + // initialise necessary components + System.out.println("Fetching card sets from upstream"); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + boolean exit = false; + + while (!exit) { + String rawInput = br.readLine().trim().toLowerCase(); + String[] commands = rawInput.split("[ \t]+"); + + if (commands.length > 0) { + switch (commands[0]) { + case "exit": + exit = true; + break; + case "sets": + break; + case "set": + break; + case "write": + break; + default: + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + + } + +} diff --git a/test_callow.py b/test_callow.py deleted file mode 100755 index ab6c67e..0000000 --- a/test_callow.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/callow", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Callow Jushi") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "1UU") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "3") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "U") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Creature") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Human Wizard") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Tsutomu Kawade") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Callow Jushi.", "At the beginning of the end step, if there are two or more ki counters on Callow Jushi, you may flip it."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Uncommon") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "2") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "2") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("bok", "31a") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "bok") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/bok/31a.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "31a") - - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_cardclass.py b/test_cardclass.py deleted file mode 100755 index 409bff4..0000000 --- a/test_cardclass.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -import cardparser - -class Test_cardClass(unittest.TestCase): - - def setUp(self): - self.card = cardparser.Card() - - # Tests - def test_cardHasTitle(self): - self.assertIsNotNone(self.card.title) - - def test_cardHasCost(self): - self.assertIsNotNone(self.card.cost) - - def test_cardHasConvertedCost(self): - self.assertIsNotNone(self.card.convertedCost) - - def test_cardHasColour(self): - self.assertIsNotNone(self.card.colour) - - def test_cardHasType(self): - self.assertIsNotNone(self.card.type) - - def test_cardHasSubType(self): - self.assertIsNotNone(self.card.subtype) - - def test_cardHasEdition(self): - self.assertIsNotNone(self.card.edition) - - def test_cardHasScan(self): - self.assertIsNotNone(self.card.scan) - - def test_cardHasArtist(self): - self.assertIsNotNone(self.card.artist) - - def test_cardHasText(self): - self.assertIsNotNone(self.card.text) - - def test_cardHasFlavour(self): - self.assertIsNotNone(self.card.flavour) - - def test_cardHasRarity(self): - self.assertIsNotNone(self.card.rarity) - - def test_cardHasNumber(self): - self.assertIsNotNone(self.card.number) - - def test_cardHasPower(self): - self.assertIsNotNone(self.card.power) - - def test_cardHasToughness(self): - self.assertIsNotNone(self.card.toughness) - - def test_cardHasLoyalty(self): - self.assertIsNotNone(self.card.loyalty) - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_coecon.py b/test_coecon.py deleted file mode 100755 index 8c1dac8..0000000 --- a/test_coecon.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/coecon", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Coerced Confession") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "4{U/B}") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "5") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "UB") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Sorcery") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Mathias Kollros") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["Target player puts the top four cards of his or her library into his or her graveyard. You draw a card for each creature card put into that graveyard this way."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "\"Ask the right questions in the right way and truth is inevitable.\" —Lazav") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Uncommon") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("gtc", "217") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "gtc") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/gtc/217.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "217") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_fetching.py b/test_fetching.py deleted file mode 100755 index bf17a22..0000000 --- a/test_fetching.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -import cardparser - -class Test_cardPageFetching(unittest.TestCase): - - # Tests - def test_correctUrlIsBuilt(self): - self.assertEqual(cardparser.makeUrl("set", "number"), "http://magiccards.info/set/en/number.html") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_hydra.py b/test_hydra.py deleted file mode 100755 index 4853715..0000000 --- a/test_hydra.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/hydra", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Khalni Hydra") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "GGGGGGGG") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "8") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "G") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Creature") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Hydra") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Todd Lockwood") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["Khalni Hydra costs {G} less to cast for each green creature you control.", "Trample"]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "\"In ages past, bargains were struck and promises were made. Now we must collect on our debt. Begin the hymns.\" —Moruul, Khalni druid") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Mythic Rare") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "8") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "8") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("roe", "192") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "roe") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/roe/192.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "192") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_island.py b/test_island.py deleted file mode 100755 index 0710949..0000000 --- a/test_island.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/island", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Island") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Basic Land") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Island") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Florian de Gesincourt") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["({T}: Add {U} to your mana pool.)"]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Land") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("dtk", "253") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "dtk") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/dtk/253.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "253") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_nightmare.py b/test_nightmare.py deleted file mode 100755 index befcc6f..0000000 --- a/test_nightmare.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/nightmare", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Nightmare") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "5B") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "6") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "B") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Creature") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Nightmare Horse") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Vance Kovacs") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["Flying (This creature can't be blocked except by creatures with flying or reach.)", "Nightmare's power and toughness are each equal to the number of Swamps you control."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "The thunder of its hooves beats dreams into despair.") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Rare") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "*") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "*") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("m15", "276") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "m15") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/m15/276.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "276") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_shivandragon.py b/test_shivandragon.py deleted file mode 100755 index 0c73426..0000000 --- a/test_shivandragon.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/shivandragon", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Shivan Dragon") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "4RR") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "6") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "R") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Creature") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Dragon") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Donato Giancola") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["Flying (This creature can't be blocked except by creatures with flying or reach.)", "{R}: Shivan Dragon gets +1/+0 until end of turn."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "The undisputed master of the mountains of Shiv.") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Rare") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "5") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "5") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("m15", "281") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "m15") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/m15/281.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "281") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_shoal.py b/test_shoal.py deleted file mode 100755 index 8359bce..0000000 --- a/test_shoal.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/shoal", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Disrupting Shoal") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "XUU") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "2") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "U") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Instant") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Arcane") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Scott M. Fischer") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["You may exile a blue card with converted mana cost X from your hand rather than pay Disrupting Shoal's mana cost.", "Counter target spell if its converted mana cost is X."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Rare") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("bok", "33") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "bok") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/bok/33.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "33") - - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_sorin.py b/test_sorin.py deleted file mode 100755 index 905ca9e..0000000 --- a/test_sorin.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/sorin", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Sorin Markov") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "3BBB") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "6") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "B") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Planeswalker") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Sorin") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Michael Komarck") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["+2: Sorin Markov deals 2 damage to target creature or player and you gain 2 life.", "−3: Target opponent's life total becomes 10.", "−7: You control target player during that player's next turn."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Mythic Rare") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "4") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("m12", "109") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "m12") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/m12/109.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "109") - - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/test_ugin.py b/test_ugin.py deleted file mode 100755 index 153e226..0000000 --- a/test_ugin.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 - -import unittest -from lxml import html -import cardparser - -class Test_cardInformationParsing(unittest.TestCase): - - @classmethod - def setUpClass(cls): - with open("testcards/ugincons", "r") as file: - cls.page = html.fromstring(file.read()) - - # Tests - def test_correctTitleIsParsed(self): - self.assertEqual(cardparser.getTitle(self.page), "Ugin's Construct") - - def test_correctCostIsParsed(self): - self.assertEqual(cardparser.getCost(self.page), "4") - - def test_correctConvertedCostIsParsed(self): - self.assertEqual(cardparser.getConvertedCost(self.page), "4") - - def test_correctColourIsParsed(self): - self.assertEqual(cardparser.getColour(self.page), "") - - def test_correctTypeIsParsed(self): - self.assertEqual(cardparser.getType(self.page), "Artifact Creature") - - def test_correctSubTypeIsParsed(self): - self.assertEqual(cardparser.getSubType(self.page), "Construct") - - def test_correctArtistIsParsed(self): - self.assertEqual(cardparser.getArtist(self.page), "Peter Mohrbacher") - - def test_correctTextIsParsed(self): - self.assertEqual(cardparser.getText(self.page), ["When Ugin's Construct enters the battlefield, sacrifice a permanent that's one or more colors."]) - - def test_correctFlavourIsParsed(self): - self.assertEqual(cardparser.getFlavour(self.page), "While trapping the Eldrazi on Zendikar, Ugin learned little from Sorin, but he gleaned the rudiments of lithomancy from Nahiri.") - - def test_correctRarityIsParsed(self): - self.assertEqual(cardparser.getRarity(self.page), "Uncommon") - - def test_correctPowerIsParsed(self): - self.assertEqual(cardparser.getPower(self.page), "4") - - def test_correctToughnessIsParsed(self): - self.assertEqual(cardparser.getToughness(self.page), "5") - - def test_correctLoyaltyIsParsed(self): - self.assertEqual(cardparser.getLoyalty(self.page), "") - -class Test_additionalCardData(unittest.TestCase): - - @classmethod - def setUpClass(cls): - cls.card = cardparser.fetchCard("frf", "164") - - def test_cardHasCorrectEdition(self): - self.assertEqual(self.card.edition, "frf") - - def test_cardHasCorrectScan(self): - self.assertEqual(self.card.scan, "http://magiccards.info/scans/en/frf/164.jpg") - - def test_cardHasCorrectNumber(self): - self.assertEqual(self.card.number, "164") - -def test(): - unittest.main(exit=False) - -# The entry point -if __name__ == "__main__": - test() diff --git a/testcards/callow b/testcards/callow deleted file mode 100644 index fde0e5c..0000000 --- a/testcards/callow +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - Callow Jushi (Betrayers of Kamigawa) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Yomiji, Who Bars the Way - - - Betrayers of Kamigawa - - - - Jaraku the Interloper → - -
-
- - - - - - - -
- - Callow Jushi - - - Callow Jushi - English - - - - -

Creature — Human Wizard 2/2, - 1UU (3) -

-

Whenever you cast a Spirit or Arcane spell, you may put a ki counter on Callow Jushi.

At the beginning of the end step, if there are two or more ki counters on Callow Jushi, you may flip it.

- - -

-

Illus. Tsutomu Kawade

-

Gatherer Card Rulings?, Legality?

- -
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - The other part is:
- English - Jaraku the Interloper

- - - - - Printings:
- - - - #31a (Tsutomu Kawade)
- - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Betrayers of Kamigawa (Uncommon)
- - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - German - Unerfahrener Jushi
- - - - - French - Jushi novice
- - - - - Italian - Jushi Inesperta
- - - - - Spanish - Jushi inexperta
- - - - - Portuguese - Jushi Inexperiente
- - - - - Japanese - 未熟な呪士
- - - - - Simplified Chinese - 生手术士
- - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Callow Jushi
- View Decks with Callow Jushi
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/coecon b/testcards/coecon deleted file mode 100644 index bcdf681..0000000 --- a/testcards/coecon +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - Coerced Confession (Gatecrash) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Burning-Tree Emissary - - - Gatecrash - - - - Deathcult Rogue → - -
-
- - - - - - - -
- - Coerced Confession - - - Coerced Confession - English - - - - -

Sorcery, - 4{U/B} (5) -

-

Target player puts the top four cards of his or her library into his or her graveyard. You draw a card for each creature card put into that graveyard this way.

- - -

"Ask the right questions in the right way and truth is inevitable."
—Lazav

-

Illus. Mathias Kollros

-

Gatherer Card Rulings?, Legality?

- -
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #217 (Mathias Kollros)
- - - - - - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Gatecrash (Uncommon)
- - - - - - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - German - Erzwungenes Geständnis
- - - - - French - Confession sous la contrainte
- - - - - Italian - Confessione Forzata
- - - - - Spanish - Confesión coercitiva
- - - - - Portuguese - Confissão Forçada
- - - - - Japanese - 強要された自白
- - - - - Simplified Chinese - 被迫招供
- - - - - Russian - Признание под Принуждением
- - - - - Traditional Chinese - 被迫招供
- - - - - Korean - 강요된 자백
- - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Coerced Confession
- View Decks with Coerced Confession
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/hydra b/testcards/hydra deleted file mode 100644 index 14a6559..0000000 --- a/testcards/hydra +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - Khalni Hydra (Rise of the Eldrazi) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Kazandu Tuskcaller - - - Rise of the Eldrazi - - - - Kozilek's Predator → - -
-
- - - - - - - -
- - Khalni Hydra - - - Khalni Hydra - English - - - - -

Creature — Hydra 8/8, - GGGGGGGG (8) -

-

Khalni Hydra costs {G} less to cast for each green creature you control.

Trample

- - -

"In ages past, bargains were struck and promises were made. Now we must collect on our debt. Begin the hymns."
—Moruul, Khalni druid

-

Illus. Todd Lockwood

-

Gatherer Card Rulings?, Legality?

-
  • 6/15/2010: For the purpose of determining the cost reduction, the number of green creatures you control is checked as you cast Khalni Hydra, before your last chance to activate mana abilities to pay for it. For example, if you control Wild Cantor (a red and green creature with the ability "Sacrifice Wild Cantor: Add one mana of any color to your mana pool") as you cast Khalni Hydra, first the cost to cast Khalni Hydra is reduced by {G}, then you could sacrifice Wild Cantor for mana to help pay for it.
  • 6/15/2010: Khalni Hydra's cost reduction effect doesn't change its mana cost or converted mana cost.
  • 6/15/2010: If an effect (such as the one from Lodestone Golem) imposes an additional generic mana cost to casting Khalni Hydra, the Hydra's ability will reduce it too. It'll reduce the amount of green mana you need to spend first, though.
-
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #192 (Todd Lockwood)
- - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Rise of the Eldrazi (Mythic Rare)
- - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - German - Khalni-Hydra
- - - - - French - Hydre de Khalni
- - - - - Italian - Idra di Khalni
- - - - - Spanish - Hidra de Khalni
- - - - - Portuguese - Hidra de Khalni
- - - - - Japanese - カルニのハイドラ
- - - - - Simplified Chinese - 坎尼多头龙
- - - - - Russian - Гидра Кални
- - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Khalni Hydra
- View Decks with Khalni Hydra
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/island b/testcards/island deleted file mode 100644 index 40b6677..0000000 --- a/testcards/island +++ /dev/null @@ -1,11785 +0,0 @@ - - - - - - Island (Dragons of Tarkir) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Plains - - - Dragons of Tarkir - - - - Island → - -
-
- - - - - - - -
- - Island - - - Island - English - - - - -

Basic Land — Island -

-

({T}: Add {U} to your mana pool.)

- - -

-

Illus. Florian de Gesincourt

-

Gatherer Card Rulings?, Legality?

- -
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #253 (Florian de Gesincourt)
- - - - - - #254 (Florian de Gesincourt)
- - - - - - #255 (Adam Paquette)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Dragons of Tarkir (Land)
- - - - - - - - - - English - - Duel Decks: Kiora vs. Elspeth (Land)
- - - - - - - - - - English - - Fate Reforged (Land)
- - - - - - - - English - - Commander 2014 Edition (Land)
- - - - - - - - - - - - English - - Khans of Tarkir (Land)
- - - - - - - - - - - - English - - Duel Decks: Speed vs. Cunning (Land)
- - - - - - - - - - English - - Magic 2015 (Land)
- - - - - - - - - - - - English - - Duel Decks: Jace vs. Vraska (Land)
- - - - - - - - - - - - - - English - - Commander 2013 Edition (Land)
- - - - - - - - - - - - English - - Theros (Land)
- - - - - - - - - - - - English - - Magic 2014 Core Set (Land)
- - - - - - - - - - - - English - - Return to Ravnica (Land)
- - - - - - - - - - - - - - English - - Duel Decks: Izzet vs. Golgari (Land)
- - - - - - - - - - - - English - - Magic 2013 (Land)
- - - - - - - - - - - - English - - Planechase 2012 Edition (Land)
- - - - - - - - - - - - - - English - - Avacyn Restored (Land)
- - - - - - - - - - English - - Duel Decks: Venser vs. Koth (Land)
- - - - - - - - - - English - - Innistrad (Land)
- - - - - - - - - - English - - Duel Decks: Ajani vs. Nicol Bolas (Land)
- - - - - - English - - Magic 2012 (Land)
- - - - - - - - - - - - English - - Commander (Land)
- - - - - - - - - - - - English - - New Phyrexia (Land)
- - - - - - - - English - - Mirrodin Besieged (Land)
- - - - - - - - English - - Scars of Mirrodin (Land)
- - - - - - - - - - - - English - - Duel Decks: Elspeth vs. Tezzeret (Land)
- - - - - - - - - - - - English - - Magic 2011 (Land)
- - - - - - - - - - - - English - - Duels of the Planeswalkers (Land)
- - - - - - - - - - - - English - - Archenemy (Land)
- - - - - - - - - - English - - Rise of the Eldrazi (Land)
- - - - - - - - - - - - English - - Duel Decks: Phyrexia vs. The Coalition (Land)
- - - - - - English - - Premium Deck Series: Slivers (Land)
- - - - - - English - - Zendikar (Land)
- - - - - - - - - - - - - - - - - - - - English - - Planechase (Land)
- - - - - - - - - - - - English - - Magic 2010 (Land)
- - - - - - - - - - - - English - - Duel Decks: Jace vs. Chandra (Land)
- - - - - - - - - - - - English - - Shards of Alara (Land)
- - - - - - - - - - - - English - - Shadowmoor (Land)
- - - - - - - - - - - - English - - Lorwyn (Land)
- - - - - - - - - - - - English - - Tenth Edition (Land)
- - - - - - - - - - - - English - - Time Spiral (Land)
- - - - - - - - - - - - English - - Coldsnap Theme Decks (Special)
- - - - - - - - - - English - - Ravnica: City of Guilds (Land)
- - - - - - - - - - - - English - - Ninth Edition (Land)
- - - - - - - - - - - - English - - Unhinged (Land)
- - - - - - English - - Champions of Kamigawa (Land)
- - - - - - - - - - - - English - - Mirrodin (Land)
- - - - - - - - - - - - English - - Eighth Edition (Land)
- - - - - - - - - - - - English - - Onslaught (Land)
- - - - - - - - - - - - English - - Odyssey (Land)
- - - - - - - - - - - - English - - Seventh Edition (Land)
- - - - - - - - - - - - English - - Arena League (Special)
- - - - - - - - - - - - - - - - - - - - - - English - - Beatdown Box Set (Land)
- - - - - - - - - - English - - Invasion (Land)
- - - - - - - - - - - - English - - European Land Program (Special)
- - - - - - - - - - English - - Battle Royale Box Set (Special)
- - - - - - - - - - - - - - English - - Mercadian Masques (Land)
- - - - - - - - - - - - English - - Starter 1999 (Land)
- - - - - - - - - - - - English - - Guru (Special)
- - - - - - English - - Portal Three Kingdoms (Land)
- - - - - - - - - - English - - Classic Sixth Edition (Land)
- - - - - - - - - - - - English - - Urza's Saga (Land)
- - - - - - - - - - - - English - - Asia Pacific Land Program (Special)
- - - - - - - - - - English - - Unglued (Land)
- - - - - - English - - Portal Second Age (Land)
- - - - - - - - - - English - - Judge Gift Program (Special)
- - - - - - English - - Tempest (Land)
- - - - - - - - - - - - English - - Portal (Land)
- - - - - - - - - - - - English - - Fifth Edition (Land)
- - - - - - - - - - - - English - - Mirage (Land)
- - - - - - - - - - - - English - - Introductory Two-Player Set (Special)
- - - - - - - - - - English - - Ice Age (Land)
- - - - - - - - - - English - - Fourth Edition (Land)
- - - - - - - - - - English - - Revised Edition (Land)
- - - - - - - - - - English - - International Collectors' Edition (Land)
- - - - - - - - - - English - - Collector's Edition (Land)
- - - - - - - - - - English - - Unlimited Edition (Land)
- - - - - - - - - - English - - Limited Edition Beta (Land)
- - - - - - - - - - English - - Limited Edition Alpha (Land)
- - - - - - - - English - - MTGO Masters Edition III (Land)
- - - - - - - - - - English - - MTGO Masters Edition (Land)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - German - Insel
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - French - île
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Italian - Isola
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Spanish - Isla
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Portuguese - Ilha
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Japanese -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Simplified Chinese - 海岛
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Russian - Остров
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Traditional Chinese - 海島
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Korean -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Island
- View Decks with Island
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/nightmare b/testcards/nightmare deleted file mode 100644 index d2d04de..0000000 --- a/testcards/nightmare +++ /dev/null @@ -1,1004 +0,0 @@ - - - - - - Nightmare (Magic 2015) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Mahamoti Djinn - - - Magic 2015 - - - - Sengir Vampire → - -
-
- - - - - - - -
- - Nightmare - - - Nightmare - English - - - - -

Creature — Nightmare Horse */*, - 5B (6) -

-

Flying (This creature can't be blocked except by creatures with flying or reach.)

Nightmare's power and toughness are each equal to the number of Swamps you control.

- - -

The thunder of its hooves beats dreams into despair.

-

Illus. Vance Kovacs

-

Gatherer Card Rulings?, Legality?

-
  • 4/1/2008: If you control 0 swamps, then the Nightmare has 0 toughness and will be put into its owner's graveyard as a state-based action right before the next player gains priority.
  • 10/1/2009: Nightmare's power and toughness changes as the number of Swamps you control changes.
  • 7/1/2013: The ability that defines Nightmare’s power and toughness works everywhere, not just on the battlefield.
  • 7/1/2013: Nightmare’s ability counts all lands you control with the subtype Swamp, not just ones named Swamp.
-
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #276 (Vance Kovacs)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Magic 2015 (Rare)
- - - - - - English - - Magic 2014 Core Set (Rare)
- - - - - - English - - Magic 2010 (Rare)
- - - - - - English - - Tenth Edition (Rare)
- - - - - - English - - Ninth Edition (Rare)
- - - - - - English - - Eighth Edition (Rare)
- - - - - - English - - Seventh Edition (Rare)
- - - - - - English - - Classic Sixth Edition (Rare)
- - - - - - English - - Fifth Edition (Rare)
- - - - - - English - - Fourth Edition (Rare)
- - - - - - English - - Revised Edition (Rare)
- - - - - - English - - International Collectors' Edition (Rare)
- - - - - - English - - Collector's Edition (Rare)
- - - - - - English - - Unlimited Edition (Rare)
- - - - - - English - - Limited Edition Beta (Rare)
- - - - - - English - - Limited Edition Alpha (Rare)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - German - Nachtmahr
- - - - - - - - - - - - - - - - - - - - - - - - - - - French - Cheval de cauchemar
- - - - - - - - - - - - - - - - - - - - - - - - - - - Italian - Incubo
- - - - - - - - - - - - - - - - - - - - - - - - - - - Spanish - Pesadilla
- - - - - - - - - - - - - - - - - - - - - - - - - Portuguese - Pesadelo
- - - - - - - - - - - - - - - - - - - - - - - - - Japanese - 夢魔
- - - - - - - - - - - - - Simplified Chinese - 梦魇
- - - - - - - - - - - - - Russian - Кошмар
- - - - - - - - - - - - - Traditional Chinese - 夢魘
- - - - - - - - - - - Korean - 나이트메어
- - - - - - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Nightmare
- View Decks with Nightmare
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/shivandragon b/testcards/shivandragon deleted file mode 100644 index 9ba92c1..0000000 --- a/testcards/shivandragon +++ /dev/null @@ -1,1032 +0,0 @@ - - - - - - Shivan Dragon (Magic 2015) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Seismic Strike - - - Magic 2015 - - - - Centaur Courser → - -
-
- - - - - - - -
- - Shivan Dragon - - - Shivan Dragon - English - - - - -

Creature — Dragon 5/5, - 4RR (6) -

-

Flying (This creature can't be blocked except by creatures with flying or reach.)

{R}: Shivan Dragon gets +1/+0 until end of turn.

- - -

The undisputed master of the mountains of Shiv.

-

Illus. Donato Giancola

-

Gatherer Card Rulings?, Legality?

- -
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #281 (Donato Giancola)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Magic 2015 (Rare)
- - - - - - English - - Magic 2014 Core Set (Rare)
- - - - - - English - - Duels of the Planeswalkers (Rare)
- - - - - - English - - Magic 2010 (Rare)
- - - - - - English - - From the Vault: Dragons (Rare)
- - - - - - English - - Release Events (Special)
- - - - - - English - - Tenth Edition (Rare)
- - - - - - English - - Ninth Edition (Rare)
- - - - - - English - - Eighth Edition (Rare)
- - - - - - English - - Seventh Edition (Rare)
- - - - - - English - - Beatdown Box Set (Special)
- - - - - - English - - Fifth Edition (Rare)
- - - - - - English - - Fourth Edition (Rare)
- - - - - - English - - Revised Edition (Rare)
- - - - - - English - - International Collectors' Edition (Rare)
- - - - - - English - - Collector's Edition (Rare)
- - - - - - English - - Unlimited Edition (Rare)
- - - - - - English - - Limited Edition Beta (Rare)
- - - - - - English - - Limited Edition Alpha (Rare)
- - - - - - English - - MTGO Masters Edition IV (Rare)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - German - Shivan-Drache
- - - - - - - - - - - - - - - - - - - - - - - - - French - Dragon shivân
- - - - - - - - - - - - - - - - - - - - - - - - - Italian - Drago di Shivan
- - - - - - - - - - - - - - - - - - - - - - - - - Spanish - Dragón shivano
- - - - - - - - - - - - - - - - - - - - - - - Portuguese - Dragão de Shiva
- - - - - - - - - - - - - - - - - - - - - - - Japanese - シヴ山のドラゴン
- - - - - - - - - - - - - - - Simplified Chinese - 西瓦巨龙
- - - - - - - - - - - - - Russian - Шиванский Дракон
- - - - - - - - - - - - - Traditional Chinese - 西瓦巨龍
- - - - - - - - - - - Korean - 시바의 용
- - - - - - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Shivan Dragon
- View Decks with Shivan Dragon
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/shoal b/testcards/shoal deleted file mode 100644 index 43aa6af..0000000 --- a/testcards/shoal +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - Disrupting Shoal (Betrayers of Kamigawa) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Chisei, Heart of Oceans - - - Betrayers of Kamigawa - - - - Floodbringer → - -
-
- - - - - - - -
- - Disrupting Shoal - - - Disrupting Shoal - English - - - - -

Instant — Arcane, - XUU (2) -

-

You may exile a blue card with converted mana cost X from your hand rather than pay Disrupting Shoal's mana cost.

Counter target spell if its converted mana cost is X.

- - -

-

Illus. Scott M. Fischer

-

Gatherer Card Rulings?, Legality?

-
  • 2/1/2005: Disrupting Shoal can target any spell, but does nothing unless that spell's converted mana cost is X.
-
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #33 (Scott M. Fischer)
- - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Betrayers of Kamigawa (Rare)
- - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - German - Störender Schwarm
- - - - - French - Banc perturbateur
- - - - - Italian - Branco Smembrante
- - - - - Spanish - Cardumen disruptor
- - - - - Portuguese - Cardume Desintegrador
- - - - - Japanese - 撹乱する群れ
- - - - - Simplified Chinese - 搅扰群列
- - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Disrupting Shoal
- View Decks with Disrupting Shoal
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/sorin b/testcards/sorin deleted file mode 100644 index 1042a46..0000000 --- a/testcards/sorin +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - Sorin Markov (Magic 2012) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Smallpox - - - Magic 2012 - - - - Sorin's Thirst → - -
-
- - - - - - - -
- - Sorin Markov - - - Sorin Markov - English - - - - -

Planeswalker — Sorin (Loyalty: 4), - 3BBB (6) -

-

+2: Sorin Markov deals 2 damage to target creature or player and you gain 2 life.

−3: Target opponent's life total becomes 10.

−7: You control target player during that player's next turn.

- - -

-

Illus. Michael Komarck

-

Gatherer Card Rulings?, Legality?

-
  • 10/1/2009: If the targeted creature or player is an illegal target by the time Sorin's first ability resolves, the entire ability is countered. You won't gain life.
  • 10/1/2009: For a player's life total to become 10, what actually happens is that the player gains or loses the appropriate amount of life. For example, if the targeted opponent's life total is 4 when this ability resolves, it will cause that player to gain 6 life; alternately, if the targeted player's life total is 17 when this ability resolves, it will cause that player to lose 7 life. Other cards that interact with life gain or life loss will interact with this effect accordingly.
  • 10/1/2009: Sorin's third ability allows you to control another player. This effect applies to the next turn that the affected player actually takes.
  • 10/1/2009: The player who is being controlled is still the active player.
  • 10/1/2009: While controlling another player, you also continue to make your own choices and decisions.
  • 10/1/2009: While controlling another player, you make all choices and decisions that player is allowed to make or is told to make during that turn. For example:
    -- You choose which lands the other player plays.
    -- You choose which spells the other player casts, and make all decisions as those spells are cast and as they resolve. For example, you choose the value of X for that player's Earthquake, the target for that player's Lightning Bolt, what mana that player spends to cast Day of Judgment, and what card that player gets with Diabolic Tutor.
    -- You choose which activated abilities the other player activates, and make all decisions as those abilities are activated and as they resolve. For example, you can have your opponent sacrifice his or her creatures to his or her Vampire Aristocrat or have your opponent's Caller of Gales give one of your creatures flying.
    -- You make all decisions for the other player's triggered abilities, including what they target and any decisions made when they resolve.
    -- You choose which creatures controlled by the other player attack, who or what they attack, and how they assign their combat damage.
    -- You make any choices and decisions that player would make for any other reason. For example, you could cast Fact or Fiction, choose that player to divide the revealed cards into piles, and thus divide those cards into piles yourself.
  • 10/1/2009: You can't make the affected player concede. That player may choose to concede at any time, even while you're controlling his or her turn.
  • 10/1/2009: You can't make any illegal decisions or illegal choices -- you can't do anything that player couldn't do. You can't make choices or decisions for that player that aren't called for by the game rules or by any cards, permanents, spells, abilities, and so on. If an effect causes another player to make decisions that the affected player would normally make (such as Master Warcraft does), that effect takes precedence. (In other words, if the affected player wouldn't make a decision, you wouldn't make that decision on his or her behalf.) You also can't make any choices or decisions for the player that would be called for by the tournament rules (such as whether to take an intentional draw or whether to call a judge).
  • 10/1/2009: You can use only the affected player's resources (cards, mana, and so on) to pay costs for that player; you can't use your own. Similarly, you can use the affected player's resources only to pay that player's costs; you can't spend them on your costs.
  • 10/1/2009: You only control the player. You don't control any of the other player's permanents, spells, or abilities.
  • 10/1/2009: If the player affected by Sorin's third ability skips his or her next turn, the ability will wait. You'll control the next turn the affected player actually takes.
  • 10/1/2009: Multiple player-controlling effects that affect the same player overwrite each other. The last one to be created is the one that works.
  • 10/1/2009: You could gain control of yourself using Sorin's third ability, but unless you do so to overwrite someone else's player-controlling effect, this doesn't do anything.
  • 6/15/2010: In a Two-Headed Giant game, Sorin's second ability causes the targeted opponent's team's life-total to become 10. Only the targeted player is actually considered to have actually gained or lost life.
  • 7/1/2012: While controlling another player, you can see all cards that player can see. This includes cards in that player's hand, face-down cards that player controls, his or her sideboard, and any cards in his or her library that he or she looks at.
  • 7/1/2013: Planeswalkers are permanents. You can cast one at the time you could cast a sorcery. When your planeswalker spell resolves, it enters the battlefield under your control.
  • 7/1/2013: Planeswalkers are not creatures. Spells and abilities that affect creatures won’t affect them.
  • 7/1/2013: Planeswalkers have loyalty. A planeswalker enters the battlefield with a number of loyalty counters on it equal to the number printed in its lower right corner. Activating one of its abilities may cause it to gain or lose loyalty counters. Damage dealt to a planeswalker causes that many loyalty counters to be removed from it. If it has no loyalty counters on it, it’s put into its owner’s graveyard as a state-based action.
  • 7/1/2013: Planeswalkers each have a number of activated abilities called “loyalty abilities.” You can activate a loyalty ability of a planeswalker you control only at the time you could cast a sorcery and only if you haven’t activated one of that planeswalker’s loyalty abilities yet that turn.
  • 7/1/2013: The cost to activate a planeswalker’s loyalty ability is represented by a symbol with a number inside. Up-arrows contain positive numbers, such as “+1”; this means “Put one loyalty counter on this planeswalker.” Down-arrows contain negative numbers, such as “-7”; this means “Remove seven loyalty counters from this planeswalker.” A symbol with a “0” means “Put zero loyalty counters on this planeswalker.”
  • 7/1/2013: You can’t activate a planeswalker’s ability with a negative loyalty cost unless the planeswalker has at least that many loyalty counters on it.
  • 7/1/2013: Planeswalkers can’t attack (unless an effect turns the planeswalker into a creature). However, they can be attacked. Each of your attacking creatures can attack your opponent or a planeswalker that player controls. You say which as you declare attackers.
  • 7/1/2013: If your planeswalkers are being attacked, you can block the attackers as normal.
  • 7/1/2013: If a creature that’s attacking a planeswalker isn’t blocked, it’ll deal its combat damage to that planeswalker. Damage dealt to a planeswalker causes that many loyalty counters to be removed from it.
  • 7/1/2013: If a source you control would deal noncombat damage to an opponent, you may have that source deal that damage to a planeswalker that opponent controls instead. For example, although you can’t target a planeswalker with Shock, you can target your opponent with Shock, and then as Shock resolves, choose to have Shock deal its 2 damage to one of your opponent’s planeswalkers. (You can’t split up that damage between different players and/or planeswalkers.) If you have Shock deal its damage to a planeswalker, two loyalty counters are removed from it.
  • 7/1/2013: If a player controls two or more planeswalkers that share a planeswalker type, that player chooses one of them and the rest are put into their owners’ graveyards as a state-based action.
-
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #109 (Michael Komarck)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Magic 2012 (Mythic Rare)
- - - - - - English - - Zendikar (Mythic Rare)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - - - German - Sorin Markov
- - - - - - - French - Sorin Markov
- - - - - - - Italian - Sorin Markov
- - - - - - - Spanish - Sorin Markov
- - - - - - - Portuguese - Sorin Markov
- - - - - - - Japanese - ソリン・マルコフ
- - - - - - - Simplified Chinese - 索霖马可夫
- - - - - - - Russian - Сорин Марков
- - - - - - - Traditional Chinese - 索霖馬可夫
- - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Sorin Markov
- View Decks with Sorin Markov
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - diff --git a/testcards/ugincons b/testcards/ugincons deleted file mode 100644 index 150ea02..0000000 --- a/testcards/ugincons +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - Ugin's Construct (Fate Reforged) - - - - - - - - - - - -
-
- - - - - -
- - - - - - - -
-
-
- - - - - - - - - -
- - - ← Scroll of the Masters - - - Fate Reforged - - - - Bloodfell Caves → - -
-
- - - - - - - -
- - Ugin's Construct - - - Ugin's Construct - English - - - - -

Artifact Creature — Construct 4/5, - 4 (4) -

-

When Ugin's Construct enters the battlefield, sacrifice a permanent that's one or more colors.

- - -

While trapping the Eldrazi on Zendikar, Ugin learned little from Sorin, but he gleaned the rudiments of lithomancy from Nahiri.

-

Illus. Peter Mohrbacher

-

Gatherer Card Rulings?, Legality?

-
  • 11/24/2014: If you control only colorless permanents as the ability resolves (for example, basic lands and face-down permanents), you won’t sacrifice anything.
-
    - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - Printings:
- - - - #164 (Peter Mohrbacher)
- - - - - - - - - - - - - - - - - - - - - - - - -
Editions:
- - - - English - - Fate Reforged (Uncommon)
- - - - - - - - - - - - - - - - - - - - - - - - - -
Languages:
- - - - - - German - Ugins Konstrukt
- - - - - French - Construction d'Ugin
- - - - - Italian - Costrutto di Ugin
- - - - - Spanish - Constructo de Ugin
- - - - - Portuguese - Constructo de Ugin
- - - - - Japanese - ウギンの構築物
- - - - - Simplified Chinese - 乌金组构体
- - - - - Russian - Конструкция Уджина
- - - - - Traditional Chinese - 烏金組構體
- - - - - Korean - 우진의 기계
- - - - - -

- all prints in all languages -
-
- -
- - - - - -
- Rules Questions / Links
- View All Prices for Ugin's Construct
- View Decks with Ugin's Construct
- Crystal Keep Rulings Summaries
- Cranial Insertion (MTG Salvation)
- -
- MOTL Price Lists
- Non-Foil · - Foil · - MTGO

- Print Proxies:
[ +1 ] [ +2 ] [ +3 ] [ +4 ] · View · Clear

- - HTML link to this card:

- BBCode link to this card:
-
- -
- -
- -
- - The information presented on this site about - Magic: The Gathering, both literal and graphical, - is copyrighted by Wizards of the Coast.
- This website is not produced, endorsed, supported, - or affiliated with Wizards of the Coast.
- - - - -- cgit v1.2.3