From 048b84a4be6df7298b484180c06af0a797c13c50 Mon Sep 17 00:00:00 2001 From: Suitangi Uil Date: Mon, 29 Jul 2024 21:17:46 -0700 Subject: [PATCH] Added maintenance, edited readme, a couple more dailies --- README.md | 13 ++- dailyList.json | 2 +- maintenance/update.js | 238 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 249 insertions(+), 4 deletions(-) create mode 100644 maintenance/update.js diff --git a/README.md b/README.md index 79dfe73..3fb6bed 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,18 @@ A Magic: The Gathering card art letter guessing game similar to Hangman. With da [![Page Deployment](https://github.com/suitangi/Befuddle/actions/workflows/static.yml/badge.svg)](https://github.com/suitangi/Befuddle/actions/workflows/static.yml) -# Todo: +# Updating Befuddle +Run `node ./maintenance/update.js` from the root directory of the repo + +The script accepts the following flags: +- `-nd` or `-nodownload`: Skips downloading the bulk data from Scryfall +- `-daily`: Adds 50 days to the Daily mode +# Todo: ### Misc/Bugs -- Better daily share copy pasta/discord spoilers mode +- Better daily share copy pasta (emojis!)/discord spoilers mode +- Add more characters to the keyboard, allowing for AE, dashes and accents - More Easter eggs ### Options menu: @@ -25,7 +32,7 @@ A Magic: The Gathering card art letter guessing game similar to Hangman. With da # Changelog ``` -7/29/2024: Routine card update +7/29/2024: Routine card update; a couple more new Dailies; added maintenance 6/3/2024: Routine card update; new Dailies 4/13/2024: Routine card update; new Daily 2/23/2024: Routine card update; added new Daily Befuddles, added Ko-Fi button diff --git a/dailyList.json b/dailyList.json index ad0d154..c4e497c 100644 --- a/dailyList.json +++ b/dailyList.json @@ -1 +1 @@ -{"start":756,"list":[{"id":"c859b339-b55b-41fe-948c-27502e3b3ea8","name":"Pouncing Shoreshark","layout":"mutate","mana_cost":"{4}{U}","colors":["U"],"type_line":"Creature — Shark Beast","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/8/c859b339-b55b-41fe-948c-27502e3b3ea8.jpg?1591226459","art_crop":"https://cards.scryfall.io/art_crop/front/c/8/c859b339-b55b-41fe-948c-27502e3b3ea8.jpg?1591226459"}},{"id":"be80dd2d-f595-4d80-84ae-66d3d18e7399","name":"Needle Storm","layout":"normal","mana_cost":"{2}{G}","colors":["G"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/b/e/be80dd2d-f595-4d80-84ae-66d3d18e7399.jpg?1562056388","art_crop":"https://cards.scryfall.io/art_crop/front/b/e/be80dd2d-f595-4d80-84ae-66d3d18e7399.jpg?1562056388"}},{"id":"3ec5f005-d8fb-48b8-8ac5-74445cc83273","name":"Cloudpiercer","layout":"mutate","mana_cost":"{4}{R}","colors":["R"],"type_line":"Creature — Dinosaur","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/e/3ec5f005-d8fb-48b8-8ac5-74445cc83273.jpg?1591227132","art_crop":"https://cards.scryfall.io/art_crop/front/3/e/3ec5f005-d8fb-48b8-8ac5-74445cc83273.jpg?1591227132"}},{"id":"2b2dcafd-eb72-4f3a-9c1c-ba17fe30bf0f","name":"Skarrg Goliath","layout":"normal","mana_cost":"{6}{G}{G}","colors":["G"],"type_line":"Creature — Beast","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/b/2b2dcafd-eb72-4f3a-9c1c-ba17fe30bf0f.jpg?1561820572","art_crop":"https://cards.scryfall.io/art_crop/front/2/b/2b2dcafd-eb72-4f3a-9c1c-ba17fe30bf0f.jpg?1561820572"}},{"id":"687bb467-b447-4901-8a65-cd91fd3aa15d","name":"Fiery Fall","layout":"normal","mana_cost":"{5}{R}","colors":["R"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/8/687bb467-b447-4901-8a65-cd91fd3aa15d.jpg?1562801457","art_crop":"https://cards.scryfall.io/art_crop/front/6/8/687bb467-b447-4901-8a65-cd91fd3aa15d.jpg?1562801457"}},{"id":"d4ef14b6-e604-40c3-bf7e-587a192a68bc","name":"Monastery Swiftspear","layout":"normal","mana_cost":"{R}","colors":["R"],"type_line":"Creature — Human Monk","image_uris":{"normal":"https://cards.scryfall.io/normal/front/d/4/d4ef14b6-e604-40c3-bf7e-587a192a68bc.jpg?1682692562","art_crop":"https://cards.scryfall.io/art_crop/front/d/4/d4ef14b6-e604-40c3-bf7e-587a192a68bc.jpg?1682692562"}},{"id":"b458a3a2-b047-4edb-a621-87aee8be3a3c","name":"The Fallen Apart","layout":"normal","mana_cost":"{2}{B}{B}","colors":["B"],"type_line":"Creature — Zombie","image_uris":{"normal":"https://cards.scryfall.io/normal/front/b/4/b458a3a2-b047-4edb-a621-87aee8be3a3c.jpg?1562489368","art_crop":"https://cards.scryfall.io/art_crop/front/b/4/b458a3a2-b047-4edb-a621-87aee8be3a3c.jpg?1562489368"}},{"id":"32927bf2-63c1-4402-99dc-3a0f2f8e0f9c","name":"Case of the Pilfered Proof","layout":"case","mana_cost":"{1}{W}","colors":["W"],"type_line":"Enchantment — Case","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/2/32927bf2-63c1-4402-99dc-3a0f2f8e0f9c.jpg?1706241469","art_crop":"https://cards.scryfall.io/art_crop/front/3/2/32927bf2-63c1-4402-99dc-3a0f2f8e0f9c.jpg?1706241469"}},{"id":"c67088f4-4cbf-47f5-a4f8-a00f8aae305c","name":"Storm of Saruman","layout":"normal","mana_cost":"{4}{U}{U}","colors":["U"],"type_line":"Enchantment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/6/c67088f4-4cbf-47f5-a4f8-a00f8aae305c.jpg?1701081614","art_crop":"https://cards.scryfall.io/art_crop/front/c/6/c67088f4-4cbf-47f5-a4f8-a00f8aae305c.jpg?1701081614"}},{"id":"ddfc6396-5377-4ab3-9c10-8abcdeae2aa1","name":"Lotus Guardian","layout":"normal","mana_cost":"{7}","colors":[],"type_line":"Artifact Creature — Dragon","image_uris":{"normal":"https://cards.scryfall.io/normal/front/d/d/ddfc6396-5377-4ab3-9c10-8abcdeae2aa1.jpg?1562939672","art_crop":"https://cards.scryfall.io/art_crop/front/d/d/ddfc6396-5377-4ab3-9c10-8abcdeae2aa1.jpg?1562939672"}},{"id":"641f4e66-b46b-4da3-a053-f3763400d4f5","name":"Extinguish","layout":"normal","mana_cost":"{1}{U}","colors":["U"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/4/641f4e66-b46b-4da3-a053-f3763400d4f5.jpg?1562918557","art_crop":"https://cards.scryfall.io/art_crop/front/6/4/641f4e66-b46b-4da3-a053-f3763400d4f5.jpg?1562918557"}},{"id":"8ac3672e-ebab-4bb1-bf4d-5020047296d8","name":"Longbow Archer","layout":"normal","mana_cost":"{W}{W}","colors":["W"],"type_line":"Creature — Human Soldier Archer","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/a/8ac3672e-ebab-4bb1-bf4d-5020047296d8.jpg?1562242235","art_crop":"https://cards.scryfall.io/art_crop/front/8/a/8ac3672e-ebab-4bb1-bf4d-5020047296d8.jpg?1562242235"}},{"id":"6b925277-89e7-4143-8985-46c2fe3aeb9c","name":"Jared Carthalion, True Heir","layout":"normal","mana_cost":"{R}{G}{W}","colors":["G","R","W"],"type_line":"Legendary Creature — Human Warrior","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/b/6b925277-89e7-4143-8985-46c2fe3aeb9c.jpg?1613323914","art_crop":"https://cards.scryfall.io/art_crop/front/6/b/6b925277-89e7-4143-8985-46c2fe3aeb9c.jpg?1613323914"}},{"id":"498f74a2-7e5e-4082-97e7-b938d703f869","name":"Arrest","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Enchantment — Aura","image_uris":{"normal":"https://cards.scryfall.io/normal/front/4/9/498f74a2-7e5e-4082-97e7-b938d703f869.jpg?1562785762","art_crop":"https://cards.scryfall.io/art_crop/front/4/9/498f74a2-7e5e-4082-97e7-b938d703f869.jpg?1562785762"}},{"id":"b5708c87-108d-4ba1-a1e9-e83cb9b16b6c","name":"Thieves' Auction","layout":"normal","mana_cost":"{4}{R}{R}{R}","colors":["R"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/b/5/b5708c87-108d-4ba1-a1e9-e83cb9b16b6c.jpg?1562382555","art_crop":"https://cards.scryfall.io/art_crop/front/b/5/b5708c87-108d-4ba1-a1e9-e83cb9b16b6c.jpg?1562382555"}},{"id":"8bb2765f-4016-4e41-9db4-5ad463faceab","name":"Vashta Nerada","layout":"normal","mana_cost":"{2}{B}","colors":["B"],"type_line":"Creature — Alien Horror","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/b/8bb2765f-4016-4e41-9db4-5ad463faceab.jpg?1696636614","art_crop":"https://cards.scryfall.io/art_crop/front/8/b/8bb2765f-4016-4e41-9db4-5ad463faceab.jpg?1696636614"}},{"id":"690ccdc7-6c43-4902-9d11-2f07b7a36b11","name":"Bartolomé del Presidio","layout":"normal","mana_cost":"{W}{B}","colors":["B","W"],"type_line":"Legendary Creature — Vampire Knight","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/9/690ccdc7-6c43-4902-9d11-2f07b7a36b11.jpg?1699044523","art_crop":"https://cards.scryfall.io/art_crop/front/6/9/690ccdc7-6c43-4902-9d11-2f07b7a36b11.jpg?1699044523"}},{"id":"8edc7c57-9298-4fad-a0c2-4b75b944e2ce","name":"Thriving Ibex","layout":"normal","mana_cost":"{3}{W}","colors":["W"],"type_line":"Creature — Goat","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/e/8edc7c57-9298-4fad-a0c2-4b75b944e2ce.jpg?1576381025","art_crop":"https://cards.scryfall.io/art_crop/front/8/e/8edc7c57-9298-4fad-a0c2-4b75b944e2ce.jpg?1576381025"}},{"id":"701942dd-7777-436f-8076-194584be8285","name":"Charmed Pendant","layout":"normal","mana_cost":"{4}","colors":[],"type_line":"Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/7/0/701942dd-7777-436f-8076-194584be8285.jpg?1562915770","art_crop":"https://cards.scryfall.io/art_crop/front/7/0/701942dd-7777-436f-8076-194584be8285.jpg?1562915770"}},{"id":"5be0ec9b-17ea-4503-b9c2-67a3ca2a2b13","name":"Staff of Nin","layout":"normal","mana_cost":"{6}","colors":[],"type_line":"Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/5/b/5be0ec9b-17ea-4503-b9c2-67a3ca2a2b13.jpg?1605361708","art_crop":"https://cards.scryfall.io/art_crop/front/5/b/5be0ec9b-17ea-4503-b9c2-67a3ca2a2b13.jpg?1605361708"}},{"id":"74b769c1-48a0-448b-98d9-0d86526ef51e","name":"Auriok Champion","layout":"normal","mana_cost":"{W}{W}","colors":["W"],"type_line":"Creature — Human Cleric","image_uris":{"normal":"https://cards.scryfall.io/normal/front/7/4/74b769c1-48a0-448b-98d9-0d86526ef51e.jpg?1562850156","art_crop":"https://cards.scryfall.io/art_crop/front/7/4/74b769c1-48a0-448b-98d9-0d86526ef51e.jpg?1562850156"}},{"id":"aed27090-0cb2-45cf-8db1-d4c8ada2543a","name":"Windbrisk Heights","layout":"normal","mana_cost":"","colors":[],"type_line":"Land","image_uris":{"normal":"https://cards.scryfall.io/normal/front/a/e/aed27090-0cb2-45cf-8db1-d4c8ada2543a.jpg?1686966967","art_crop":"https://cards.scryfall.io/art_crop/front/a/e/aed27090-0cb2-45cf-8db1-d4c8ada2543a.jpg?1686966967"}},{"id":"1a30f99a-b295-45a2-bff7-479cbe7541a5","name":"Scrounge","layout":"normal","mana_cost":"{2}{B}","colors":["B"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/a/1a30f99a-b295-45a2-bff7-479cbe7541a5.jpg?1562635624","art_crop":"https://cards.scryfall.io/art_crop/front/1/a/1a30f99a-b295-45a2-bff7-479cbe7541a5.jpg?1562635624"}},{"id":"3e3597c3-3053-49f8-ab7e-a774e2fb082f","name":"Rathi Assassin","layout":"normal","mana_cost":"{2}{B}{B}","colors":["B"],"type_line":"Creature — Phyrexian Zombie Mercenary Assassin","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/e/3e3597c3-3053-49f8-ab7e-a774e2fb082f.jpg?1562629520","art_crop":"https://cards.scryfall.io/art_crop/front/3/e/3e3597c3-3053-49f8-ab7e-a774e2fb082f.jpg?1562629520"}},{"id":"418476cd-94da-47a5-ba77-6bb4771e9c89","name":"Rain of Blades","layout":"normal","mana_cost":"{W}","colors":["W"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/4/1/418476cd-94da-47a5-ba77-6bb4771e9c89.jpg?1562528049","art_crop":"https://cards.scryfall.io/art_crop/front/4/1/418476cd-94da-47a5-ba77-6bb4771e9c89.jpg?1562528049"}},{"id":"b0aaec1c-8084-4468-82e7-2e4cc5ebe244","name":"Steppe Lynx","layout":"normal","mana_cost":"{W}","colors":["W"],"type_line":"Creature — Cat","image_uris":{"normal":"https://cards.scryfall.io/normal/front/b/0/b0aaec1c-8084-4468-82e7-2e4cc5ebe244.jpg?1562615536","art_crop":"https://cards.scryfall.io/art_crop/front/b/0/b0aaec1c-8084-4468-82e7-2e4cc5ebe244.jpg?1562615536"}},{"id":"059fc73f-7a00-4014-9e92-75765798cf2d","name":"Cardboard Carapace","layout":"normal","mana_cost":"{5}{G}","colors":["G"],"type_line":"Enchantment — Aura","image_uris":{"normal":"https://cards.scryfall.io/normal/front/0/5/059fc73f-7a00-4014-9e92-75765798cf2d.jpg?1562799059","art_crop":"https://cards.scryfall.io/art_crop/front/0/5/059fc73f-7a00-4014-9e92-75765798cf2d.jpg?1562799059"}},{"id":"8a73fe35-68d6-4882-aeab-5c1e7b97b938","name":"Unwavering Initiate","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Creature — Human Warrior","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/a/8a73fe35-68d6-4882-aeab-5c1e7b97b938.jpg?1543674840","art_crop":"https://cards.scryfall.io/art_crop/front/8/a/8a73fe35-68d6-4882-aeab-5c1e7b97b938.jpg?1543674840"}},{"id":"3ee93ebf-710c-4c8b-a62b-26c41d8a5406","name":"Raphael, Fiendish Savior","layout":"normal","mana_cost":"{3}{B}{R}","colors":["B","R"],"type_line":"Legendary Creature — Devil Noble","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/e/3ee93ebf-710c-4c8b-a62b-26c41d8a5406.jpg?1681413017","art_crop":"https://cards.scryfall.io/art_crop/front/3/e/3ee93ebf-710c-4c8b-a62b-26c41d8a5406.jpg?1681413017"}},{"id":"c666dc97-8780-4982-b9e7-7d4a358f922c","name":"Leaf-Crowned Elder","layout":"normal","mana_cost":"{2}{G}{G}","colors":["G"],"type_line":"Creature — Treefolk Shaman","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/6/c666dc97-8780-4982-b9e7-7d4a358f922c.jpg?1562881291","art_crop":"https://cards.scryfall.io/art_crop/front/c/6/c666dc97-8780-4982-b9e7-7d4a358f922c.jpg?1562881291"}},{"id":"8ec71a29-19db-4747-8276-7fd4d563d4df","name":"Mistmoon Griffin","layout":"normal","mana_cost":"{3}{W}","colors":["W"],"type_line":"Creature — Griffin","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/e/8ec71a29-19db-4747-8276-7fd4d563d4df.jpg?1562802112","art_crop":"https://cards.scryfall.io/art_crop/front/8/e/8ec71a29-19db-4747-8276-7fd4d563d4df.jpg?1562802112"}},{"id":"27b29b3f-1f99-4880-8f66-442fa5326150","name":"Grey Knight Paragon","layout":"normal","mana_cost":"{4}{W}","colors":["W"],"type_line":"Creature — Astartes Knight","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/7/27b29b3f-1f99-4880-8f66-442fa5326150.jpg?1673308488","art_crop":"https://cards.scryfall.io/art_crop/front/2/7/27b29b3f-1f99-4880-8f66-442fa5326150.jpg?1673308488"}},{"id":"44a439e8-d586-4995-abfc-3dee5c860968","name":"Slime Molding","layout":"normal","mana_cost":"{X}{G}","colors":["G"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/4/4/44a439e8-d586-4995-abfc-3dee5c860968.jpg?1562785525","art_crop":"https://cards.scryfall.io/art_crop/front/4/4/44a439e8-d586-4995-abfc-3dee5c860968.jpg?1562785525"}},{"id":"207bb4cd-4525-47e0-b412-0d0e29717d44","name":"Bone Dancer","layout":"normal","mana_cost":"{1}{B}{B}","colors":["B"],"type_line":"Creature — Zombie","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/0/207bb4cd-4525-47e0-b412-0d0e29717d44.jpg?1562799773","art_crop":"https://cards.scryfall.io/art_crop/front/2/0/207bb4cd-4525-47e0-b412-0d0e29717d44.jpg?1562799773"}},{"id":"ee266113-34ce-4189-84e7-ee2c86a2722c","name":"Library of Alexandria","layout":"normal","mana_cost":"","colors":[],"type_line":"Land","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/e/ee266113-34ce-4189-84e7-ee2c86a2722c.jpg?1562939686","art_crop":"https://cards.scryfall.io/art_crop/front/e/e/ee266113-34ce-4189-84e7-ee2c86a2722c.jpg?1562939686"}},{"id":"8032c909-3170-45ab-a552-a8dc683b0a6e","name":"Guardian of the Forgotten","layout":"normal","mana_cost":"{3}{W}","colors":["W"],"type_line":"Creature — Elephant Warrior","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/0/8032c909-3170-45ab-a552-a8dc683b0a6e.jpg?1717011424","art_crop":"https://cards.scryfall.io/art_crop/front/8/0/8032c909-3170-45ab-a552-a8dc683b0a6e.jpg?1717011424"}},{"id":"9462cb4e-a38c-4a41-bad2-4ea3b22b0edb","name":"Goblin Dynamo","layout":"normal","mana_cost":"{5}{R}{R}","colors":["R"],"type_line":"Creature — Goblin Mutant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/9/4/9462cb4e-a38c-4a41-bad2-4ea3b22b0edb.jpg?1562924933","art_crop":"https://cards.scryfall.io/art_crop/front/9/4/9462cb4e-a38c-4a41-bad2-4ea3b22b0edb.jpg?1562924933"}},{"id":"a08b7a1e-b404-41ea-875f-b3468501cb4b","name":"Temporal Trespass","layout":"normal","mana_cost":"{8}{U}{U}{U}","colors":["U"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/a/0/a08b7a1e-b404-41ea-875f-b3468501cb4b.jpg?1562828177","art_crop":"https://cards.scryfall.io/art_crop/front/a/0/a08b7a1e-b404-41ea-875f-b3468501cb4b.jpg?1562828177"}},{"id":"ec9a3aba-25ae-4b5e-b356-9745e7236f35","name":"Sage Owl","layout":"normal","mana_cost":"{1}{U}","colors":["U"],"type_line":"Creature — Bird","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/c/ec9a3aba-25ae-4b5e-b356-9745e7236f35.jpg?1562250773","art_crop":"https://cards.scryfall.io/art_crop/front/e/c/ec9a3aba-25ae-4b5e-b356-9745e7236f35.jpg?1562250773"}},{"id":"1c2b1eeb-6cc9-48a7-a068-afa1011c45f2","name":"Shrike Harpy","layout":"normal","mana_cost":"{3}{B}{B}","colors":["B"],"type_line":"Creature — Harpy","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/c/1c2b1eeb-6cc9-48a7-a068-afa1011c45f2.jpg?1593092105","art_crop":"https://cards.scryfall.io/art_crop/front/1/c/1c2b1eeb-6cc9-48a7-a068-afa1011c45f2.jpg?1593092105"}},{"id":"59fdc045-b938-4321-aec3-51685cbbaa52","name":"Akrasan Squire","layout":"normal","mana_cost":"{W}","colors":["W"],"type_line":"Creature — Human Soldier","image_uris":{"normal":"https://cards.scryfall.io/normal/front/5/9/59fdc045-b938-4321-aec3-51685cbbaa52.jpg?1562704299","art_crop":"https://cards.scryfall.io/art_crop/front/5/9/59fdc045-b938-4321-aec3-51685cbbaa52.jpg?1562704299"}},{"id":"b5d26ddc-ad1e-4a97-85fb-34da685c3142","name":"Puppet Master","layout":"normal","mana_cost":"{U}{U}{U}","colors":["U"],"type_line":"Enchantment — Aura","image_uris":{"normal":"https://cards.scryfall.io/normal/front/b/5/b5d26ddc-ad1e-4a97-85fb-34da685c3142.jpg?1562860653","art_crop":"https://cards.scryfall.io/art_crop/front/b/5/b5d26ddc-ad1e-4a97-85fb-34da685c3142.jpg?1562860653"}},{"id":"e5a412b9-5cab-486f-a0d3-3f73b33b93ca","name":"Swiftfoot Boots","layout":"normal","mana_cost":"{2}","colors":[],"type_line":"Artifact — Equipment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/5/e5a412b9-5cab-486f-a0d3-3f73b33b93ca.jpg?1674092688","art_crop":"https://cards.scryfall.io/art_crop/front/e/5/e5a412b9-5cab-486f-a0d3-3f73b33b93ca.jpg?1674092688"}},{"id":"040eddb0-fca2-41eb-ab07-c48d49385973","name":"Stormbound Geist","layout":"normal","mana_cost":"{1}{U}{U}","colors":["U"],"type_line":"Creature — Spirit","image_uris":{"normal":"https://cards.scryfall.io/normal/front/0/4/040eddb0-fca2-41eb-ab07-c48d49385973.jpg?1562896034","art_crop":"https://cards.scryfall.io/art_crop/front/0/4/040eddb0-fca2-41eb-ab07-c48d49385973.jpg?1562896034"}},{"id":"c275aba7-cac6-48e8-b12c-6bd77a5c38fe","name":"Armor Sliver","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Creature — Sliver","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/2/c275aba7-cac6-48e8-b12c-6bd77a5c38fe.jpg?1708088318","art_crop":"https://cards.scryfall.io/art_crop/front/c/2/c275aba7-cac6-48e8-b12c-6bd77a5c38fe.jpg?1708088318"}},{"id":"e24fe6dc-662a-4abc-ad60-a1959b2be006","name":"Jem Lightfoote, Sky Explorer","layout":"normal","mana_cost":"{2}{W}{U}","colors":["U","W"],"type_line":"Legendary Creature — Human Scout","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/2/e24fe6dc-662a-4abc-ad60-a1959b2be006.jpg?1712356117","art_crop":"https://cards.scryfall.io/art_crop/front/e/2/e24fe6dc-662a-4abc-ad60-a1959b2be006.jpg?1712356117"}},{"id":"0cdf78b7-3c32-422a-a73f-d198e6f06290","name":"Swans of Bryn Argoll","layout":"normal","mana_cost":"{2}{W/U}{W/U}","colors":["U","W"],"type_line":"Creature — Bird Spirit","image_uris":{"normal":"https://cards.scryfall.io/normal/front/0/c/0cdf78b7-3c32-422a-a73f-d198e6f06290.jpg?1562826662","art_crop":"https://cards.scryfall.io/art_crop/front/0/c/0cdf78b7-3c32-422a-a73f-d198e6f06290.jpg?1562826662"}},{"id":"252eef1f-0a62-420d-aad8-e3d7f1e07c1b","name":"Broken Concentration","layout":"normal","mana_cost":"{1}{U}{U}","colors":["U"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/5/252eef1f-0a62-420d-aad8-e3d7f1e07c1b.jpg?1576383988","art_crop":"https://cards.scryfall.io/art_crop/front/2/5/252eef1f-0a62-420d-aad8-e3d7f1e07c1b.jpg?1576383988"}},{"id":"60df6592-0b3b-4b87-aeb2-8fa94b4fb7be","name":"Taiga","layout":"normal","mana_cost":"","colors":[],"type_line":"Land — Mountain Forest","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/0/60df6592-0b3b-4b87-aeb2-8fa94b4fb7be.jpg?1559591583","art_crop":"https://cards.scryfall.io/art_crop/front/6/0/60df6592-0b3b-4b87-aeb2-8fa94b4fb7be.jpg?1559591583"}},{"id":"85506a24-8d60-475c-9f43-65994caca7d4","name":"Sorcerous Spyglass","layout":"normal","mana_cost":"{2}","colors":[],"type_line":"Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/5/85506a24-8d60-475c-9f43-65994caca7d4.jpg?1564096143","art_crop":"https://cards.scryfall.io/art_crop/front/8/5/85506a24-8d60-475c-9f43-65994caca7d4.jpg?1564096143"}},{"id":"c3a5b25e-c5af-417e-8675-162ab18ac2b1","name":"Booster Tutor","layout":"normal","mana_cost":"{B}","colors":["B"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/3/c3a5b25e-c5af-417e-8675-162ab18ac2b1.jpg?1595010993","art_crop":"https://cards.scryfall.io/art_crop/front/c/3/c3a5b25e-c5af-417e-8675-162ab18ac2b1.jpg?1595010993"}},{"id":"d24d441c-f37f-44fe-8a93-f5c89df807e4","name":"Captain Sisay","layout":"normal","mana_cost":"{2}{G}{W}","colors":["G","W"],"type_line":"Legendary Creature — Human Soldier","image_uris":{"normal":"https://cards.scryfall.io/normal/front/d/2/d24d441c-f37f-44fe-8a93-f5c89df807e4.jpg?1562937244","art_crop":"https://cards.scryfall.io/art_crop/front/d/2/d24d441c-f37f-44fe-8a93-f5c89df807e4.jpg?1562937244"}},{"id":"3e6ebe92-1ea2-4bfa-8464-851b808fef0b","name":"Dark Depths","layout":"normal","mana_cost":"","colors":[],"type_line":"Legendary Snow Land","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/e/3e6ebe92-1ea2-4bfa-8464-851b808fef0b.jpg?1682714239","art_crop":"https://cards.scryfall.io/art_crop/front/3/e/3e6ebe92-1ea2-4bfa-8464-851b808fef0b.jpg?1682714239"}},{"id":"ea476ee1-67d9-4dd8-a5ac-f68a155eb18b","name":"Codie, Vociferous Codex","layout":"normal","mana_cost":"{3}","colors":[],"type_line":"Legendary Artifact Creature — Construct","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/a/ea476ee1-67d9-4dd8-a5ac-f68a155eb18b.jpg?1624740590","art_crop":"https://cards.scryfall.io/art_crop/front/e/a/ea476ee1-67d9-4dd8-a5ac-f68a155eb18b.jpg?1624740590"}},{"id":"f0336e07-8eaf-4b90-af54-4764e5ba50f2","name":"Salvaging Station","layout":"normal","mana_cost":"{6}","colors":[],"type_line":"Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/f/0/f0336e07-8eaf-4b90-af54-4764e5ba50f2.jpg?1562880585","art_crop":"https://cards.scryfall.io/art_crop/front/f/0/f0336e07-8eaf-4b90-af54-4764e5ba50f2.jpg?1562880585"}},{"id":"b474378c-5fa8-418f-8d76-23e78003ed18","name":"Tamiyo's Journal","layout":"normal","mana_cost":"{5}","colors":[],"type_line":"Legendary Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/b/4/b474378c-5fa8-418f-8d76-23e78003ed18.jpg?1576385483","art_crop":"https://cards.scryfall.io/art_crop/front/b/4/b474378c-5fa8-418f-8d76-23e78003ed18.jpg?1576385483"}},{"id":"19018f23-b63b-45af-8419-8959f41472d4","name":"Pre-War Formalwear","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Artifact — Equipment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/9/19018f23-b63b-45af-8419-8959f41472d4.jpg?1708741823","art_crop":"https://cards.scryfall.io/art_crop/front/1/9/19018f23-b63b-45af-8419-8959f41472d4.jpg?1708741823"}},{"id":"edcacc28-aacf-4d40-b8cc-f8c028380340","name":"Rising Populace","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Creature — Human","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/d/edcacc28-aacf-4d40-b8cc-f8c028380340.jpg?1557576058","art_crop":"https://cards.scryfall.io/art_crop/front/e/d/edcacc28-aacf-4d40-b8cc-f8c028380340.jpg?1557576058"}},{"id":"1b0fe46d-08d6-48c3-be0d-650d8d3d66af","name":"Ideas Unbound","layout":"normal","mana_cost":"{U}{U}","colors":["U"],"type_line":"Sorcery — Arcane","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/b/1b0fe46d-08d6-48c3-be0d-650d8d3d66af.jpg?1562492548","art_crop":"https://cards.scryfall.io/art_crop/front/1/b/1b0fe46d-08d6-48c3-be0d-650d8d3d66af.jpg?1562492548"}},{"id":"44043b50-9837-40d2-ad08-d515faed216c","name":"Zaxara, the Exemplary","layout":"normal","mana_cost":"{1}{B}{G}{U}","colors":["B","G","U"],"type_line":"Legendary Creature — Nightmare Hydra","image_uris":{"normal":"https://cards.scryfall.io/normal/front/4/4/44043b50-9837-40d2-ad08-d515faed216c.jpg?1697547158","art_crop":"https://cards.scryfall.io/art_crop/front/4/4/44043b50-9837-40d2-ad08-d515faed216c.jpg?1697547158"}},{"id":"ff09be4d-bbcc-4c25-9df2-b3df07fca955","name":"Essence Warden","layout":"normal","mana_cost":"{G}","colors":["G"],"type_line":"Creature — Elf Shaman","image_uris":{"normal":"https://cards.scryfall.io/normal/front/f/f/ff09be4d-bbcc-4c25-9df2-b3df07fca955.jpg?1686966012","art_crop":"https://cards.scryfall.io/art_crop/front/f/f/ff09be4d-bbcc-4c25-9df2-b3df07fca955.jpg?1686966012"}},{"id":"65721bc1-87fa-45b9-8b45-ee77c1aab6ac","name":"Tenured Oilcaster","layout":"normal","mana_cost":"{3}{B}","colors":["B"],"type_line":"Creature — Phyrexian Wizard","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/5/65721bc1-87fa-45b9-8b45-ee77c1aab6ac.jpg?1682203989","art_crop":"https://cards.scryfall.io/art_crop/front/6/5/65721bc1-87fa-45b9-8b45-ee77c1aab6ac.jpg?1682203989"}},{"id":"c7e0c0dc-2d35-4e5a-81da-dd5f35b8e579","name":"Lacerate Flesh","layout":"normal","mana_cost":"{4}{R}","colors":["R"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/7/c7e0c0dc-2d35-4e5a-81da-dd5f35b8e579.jpg?1643591591","art_crop":"https://cards.scryfall.io/art_crop/front/c/7/c7e0c0dc-2d35-4e5a-81da-dd5f35b8e579.jpg?1643591591"}},{"id":"0fb48c2e-ee0f-4fae-9c22-247870c10d5b","name":"Scurry Oak","layout":"normal","mana_cost":"{2}{G}","colors":["G"],"type_line":"Creature — Treefolk","image_uris":{"normal":"https://cards.scryfall.io/normal/front/0/f/0fb48c2e-ee0f-4fae-9c22-247870c10d5b.jpg?1626097756","art_crop":"https://cards.scryfall.io/art_crop/front/0/f/0fb48c2e-ee0f-4fae-9c22-247870c10d5b.jpg?1626097756"}},{"id":"2f884ca5-76b7-4eb8-857e-d347f3e70b1c","name":"Yasmin Khan","layout":"normal","mana_cost":"{3}{R}","colors":["R"],"type_line":"Legendary Creature — Human Detective","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/f/2f884ca5-76b7-4eb8-857e-d347f3e70b1c.jpg?1696637644","art_crop":"https://cards.scryfall.io/art_crop/front/2/f/2f884ca5-76b7-4eb8-857e-d347f3e70b1c.jpg?1696637644"}},{"id":"d2124603-d20e-40eb-97f0-a66323397ac2","name":"Bolas's Citadel","layout":"normal","mana_cost":"{3}{B}{B}{B}","colors":["B"],"type_line":"Legendary Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/d/2/d2124603-d20e-40eb-97f0-a66323397ac2.jpg?1591205069","art_crop":"https://cards.scryfall.io/art_crop/front/d/2/d2124603-d20e-40eb-97f0-a66323397ac2.jpg?1591205069"}},{"id":"58d8b2c8-7afe-4299-b59b-8cd2cdc8d4cb","name":"Comet Storm","layout":"normal","mana_cost":"{X}{R}{R}","colors":["R"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/5/8/58d8b2c8-7afe-4299-b59b-8cd2cdc8d4cb.jpg?1562287814","art_crop":"https://cards.scryfall.io/art_crop/front/5/8/58d8b2c8-7afe-4299-b59b-8cd2cdc8d4cb.jpg?1562287814"}},{"id":"34e501e6-38da-44ad-abe2-53ea7f0eb4ae","name":"Woodland Druid","layout":"normal","mana_cost":"{G}","colors":["G"],"type_line":"Creature — Human Druid","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/4/34e501e6-38da-44ad-abe2-53ea7f0eb4ae.jpg?1562904796","art_crop":"https://cards.scryfall.io/art_crop/front/3/4/34e501e6-38da-44ad-abe2-53ea7f0eb4ae.jpg?1562904796"}},{"id":"31c687dc-ee0c-4e54-a2b3-5d8e633b3245","name":"Two-Headed Giant of Foriys","layout":"normal","mana_cost":"{4}{R}","colors":["R"],"type_line":"Creature — Giant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/1/31c687dc-ee0c-4e54-a2b3-5d8e633b3245.jpg?1559591539","art_crop":"https://cards.scryfall.io/art_crop/front/3/1/31c687dc-ee0c-4e54-a2b3-5d8e633b3245.jpg?1559591539"}},{"id":"8f9ad5c0-a343-4d1a-9a85-1f4d5fa64079","name":"Eidolon of Rhetoric","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Enchantment Creature — Spirit","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/f/8f9ad5c0-a343-4d1a-9a85-1f4d5fa64079.jpg?1681728932","art_crop":"https://cards.scryfall.io/art_crop/front/8/f/8f9ad5c0-a343-4d1a-9a85-1f4d5fa64079.jpg?1681728932"}},{"id":"31292616-70e6-4d19-a883-e63ad860f50c","name":"Entreat the Angels","layout":"normal","mana_cost":"{X}{X}{W}{W}{W}","colors":["W"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/1/31292616-70e6-4d19-a883-e63ad860f50c.jpg?1592708298","art_crop":"https://cards.scryfall.io/art_crop/front/3/1/31292616-70e6-4d19-a883-e63ad860f50c.jpg?1592708298"}},{"id":"1dd64b1d-bcef-476c-bf0b-3ac7df7cbed3","name":"Nissa, Ascended Animist","layout":"normal","mana_cost":"{3}{G}{G}{G/P}{G/P}","colors":["G"],"type_line":"Legendary Planeswalker — Nissa","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/d/1dd64b1d-bcef-476c-bf0b-3ac7df7cbed3.jpg?1675957150","art_crop":"https://cards.scryfall.io/art_crop/front/1/d/1dd64b1d-bcef-476c-bf0b-3ac7df7cbed3.jpg?1675957150"}},{"id":"890e23d7-f4db-437d-bfe4-be35f0a443b3","name":"Vivien on the Hunt","layout":"normal","mana_cost":"{4}{G}{G}","colors":["G"],"type_line":"Legendary Planeswalker — Vivien","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/9/890e23d7-f4db-437d-bfe4-be35f0a443b3.jpg?1664503259","art_crop":"https://cards.scryfall.io/art_crop/front/8/9/890e23d7-f4db-437d-bfe4-be35f0a443b3.jpg?1664503259"}},{"id":"f2a37dcb-4a18-4f03-b28c-27188a1a5ec1","name":"Turn into a Pumpkin","layout":"normal","mana_cost":"{3}{U}","colors":["U"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/f/2/f2a37dcb-4a18-4f03-b28c-27188a1a5ec1.jpg?1572490021","art_crop":"https://cards.scryfall.io/art_crop/front/f/2/f2a37dcb-4a18-4f03-b28c-27188a1a5ec1.jpg?1572490021"}},{"id":"50bf91a7-4d04-437c-a290-6adb52f25312","name":"Spur Grappler","layout":"normal","mana_cost":"{2}{R}","colors":["R"],"type_line":"Creature — Beast","image_uris":{"normal":"https://cards.scryfall.io/normal/front/5/0/50bf91a7-4d04-437c-a290-6adb52f25312.jpg?1562909787","art_crop":"https://cards.scryfall.io/art_crop/front/5/0/50bf91a7-4d04-437c-a290-6adb52f25312.jpg?1562909787"}},{"id":"208c6f51-3c00-4fc6-8579-8f57444d0e97","name":"Baffling End","layout":"normal","mana_cost":"{1}{W}","colors":["W"],"type_line":"Enchantment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/0/208c6f51-3c00-4fc6-8579-8f57444d0e97.jpg?1555039647","art_crop":"https://cards.scryfall.io/art_crop/front/2/0/208c6f51-3c00-4fc6-8579-8f57444d0e97.jpg?1555039647"}},{"id":"251015ed-9408-4941-894a-158551ed2613","name":"Favored Hoplite","layout":"normal","mana_cost":"{W}","colors":["W"],"type_line":"Creature — Human Soldier","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/5/251015ed-9408-4941-894a-158551ed2613.jpg?1562815791","art_crop":"https://cards.scryfall.io/art_crop/front/2/5/251015ed-9408-4941-894a-158551ed2613.jpg?1562815791"}},{"id":"60c90d5d-7b3b-48d2-85f6-d6a2a452c0e9","name":"Neheb, Dreadhorde Champion","layout":"normal","mana_cost":"{2}{R}{R}","colors":["R"],"type_line":"Legendary Creature — Zombie Minotaur Warrior","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/0/60c90d5d-7b3b-48d2-85f6-d6a2a452c0e9.jpg?1559959426","art_crop":"https://cards.scryfall.io/art_crop/front/6/0/60c90d5d-7b3b-48d2-85f6-d6a2a452c0e9.jpg?1559959426"}}]} \ No newline at end of file +{"start":812,"list":[{"id":"19018f23-b63b-45af-8419-8959f41472d4","name":"Pre-War Formalwear","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Artifact — Equipment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/9/19018f23-b63b-45af-8419-8959f41472d4.jpg?1708741823","art_crop":"https://cards.scryfall.io/art_crop/front/1/9/19018f23-b63b-45af-8419-8959f41472d4.jpg?1708741823"}},{"id":"edcacc28-aacf-4d40-b8cc-f8c028380340","name":"Rising Populace","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Creature — Human","image_uris":{"normal":"https://cards.scryfall.io/normal/front/e/d/edcacc28-aacf-4d40-b8cc-f8c028380340.jpg?1557576058","art_crop":"https://cards.scryfall.io/art_crop/front/e/d/edcacc28-aacf-4d40-b8cc-f8c028380340.jpg?1557576058"}},{"id":"1b0fe46d-08d6-48c3-be0d-650d8d3d66af","name":"Ideas Unbound","layout":"normal","mana_cost":"{U}{U}","colors":["U"],"type_line":"Sorcery — Arcane","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/b/1b0fe46d-08d6-48c3-be0d-650d8d3d66af.jpg?1562492548","art_crop":"https://cards.scryfall.io/art_crop/front/1/b/1b0fe46d-08d6-48c3-be0d-650d8d3d66af.jpg?1562492548"}},{"id":"44043b50-9837-40d2-ad08-d515faed216c","name":"Zaxara, the Exemplary","layout":"normal","mana_cost":"{1}{B}{G}{U}","colors":["B","G","U"],"type_line":"Legendary Creature — Nightmare Hydra","image_uris":{"normal":"https://cards.scryfall.io/normal/front/4/4/44043b50-9837-40d2-ad08-d515faed216c.jpg?1697547158","art_crop":"https://cards.scryfall.io/art_crop/front/4/4/44043b50-9837-40d2-ad08-d515faed216c.jpg?1697547158"}},{"id":"ff09be4d-bbcc-4c25-9df2-b3df07fca955","name":"Essence Warden","layout":"normal","mana_cost":"{G}","colors":["G"],"type_line":"Creature — Elf Shaman","image_uris":{"normal":"https://cards.scryfall.io/normal/front/f/f/ff09be4d-bbcc-4c25-9df2-b3df07fca955.jpg?1686966012","art_crop":"https://cards.scryfall.io/art_crop/front/f/f/ff09be4d-bbcc-4c25-9df2-b3df07fca955.jpg?1686966012"}},{"id":"65721bc1-87fa-45b9-8b45-ee77c1aab6ac","name":"Tenured Oilcaster","layout":"normal","mana_cost":"{3}{B}","colors":["B"],"type_line":"Creature — Phyrexian Wizard","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/5/65721bc1-87fa-45b9-8b45-ee77c1aab6ac.jpg?1682203989","art_crop":"https://cards.scryfall.io/art_crop/front/6/5/65721bc1-87fa-45b9-8b45-ee77c1aab6ac.jpg?1682203989"}},{"id":"c7e0c0dc-2d35-4e5a-81da-dd5f35b8e579","name":"Lacerate Flesh","layout":"normal","mana_cost":"{4}{R}","colors":["R"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/7/c7e0c0dc-2d35-4e5a-81da-dd5f35b8e579.jpg?1643591591","art_crop":"https://cards.scryfall.io/art_crop/front/c/7/c7e0c0dc-2d35-4e5a-81da-dd5f35b8e579.jpg?1643591591"}},{"id":"0fb48c2e-ee0f-4fae-9c22-247870c10d5b","name":"Scurry Oak","layout":"normal","mana_cost":"{2}{G}","colors":["G"],"type_line":"Creature — Treefolk","image_uris":{"normal":"https://cards.scryfall.io/normal/front/0/f/0fb48c2e-ee0f-4fae-9c22-247870c10d5b.jpg?1626097756","art_crop":"https://cards.scryfall.io/art_crop/front/0/f/0fb48c2e-ee0f-4fae-9c22-247870c10d5b.jpg?1626097756"}},{"id":"2f884ca5-76b7-4eb8-857e-d347f3e70b1c","name":"Yasmin Khan","layout":"normal","mana_cost":"{3}{R}","colors":["R"],"type_line":"Legendary Creature — Human Detective","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/f/2f884ca5-76b7-4eb8-857e-d347f3e70b1c.jpg?1696637644","art_crop":"https://cards.scryfall.io/art_crop/front/2/f/2f884ca5-76b7-4eb8-857e-d347f3e70b1c.jpg?1696637644"}},{"id":"d2124603-d20e-40eb-97f0-a66323397ac2","name":"Bolas's Citadel","layout":"normal","mana_cost":"{3}{B}{B}{B}","colors":["B"],"type_line":"Legendary Artifact","image_uris":{"normal":"https://cards.scryfall.io/normal/front/d/2/d2124603-d20e-40eb-97f0-a66323397ac2.jpg?1591205069","art_crop":"https://cards.scryfall.io/art_crop/front/d/2/d2124603-d20e-40eb-97f0-a66323397ac2.jpg?1591205069"}},{"id":"58d8b2c8-7afe-4299-b59b-8cd2cdc8d4cb","name":"Comet Storm","layout":"normal","mana_cost":"{X}{R}{R}","colors":["R"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/5/8/58d8b2c8-7afe-4299-b59b-8cd2cdc8d4cb.jpg?1562287814","art_crop":"https://cards.scryfall.io/art_crop/front/5/8/58d8b2c8-7afe-4299-b59b-8cd2cdc8d4cb.jpg?1562287814"}},{"id":"34e501e6-38da-44ad-abe2-53ea7f0eb4ae","name":"Woodland Druid","layout":"normal","mana_cost":"{G}","colors":["G"],"type_line":"Creature — Human Druid","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/4/34e501e6-38da-44ad-abe2-53ea7f0eb4ae.jpg?1562904796","art_crop":"https://cards.scryfall.io/art_crop/front/3/4/34e501e6-38da-44ad-abe2-53ea7f0eb4ae.jpg?1562904796"}},{"id":"31c687dc-ee0c-4e54-a2b3-5d8e633b3245","name":"Two-Headed Giant of Foriys","layout":"normal","mana_cost":"{4}{R}","colors":["R"],"type_line":"Creature — Giant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/1/31c687dc-ee0c-4e54-a2b3-5d8e633b3245.jpg?1559591539","art_crop":"https://cards.scryfall.io/art_crop/front/3/1/31c687dc-ee0c-4e54-a2b3-5d8e633b3245.jpg?1559591539"}},{"id":"8f9ad5c0-a343-4d1a-9a85-1f4d5fa64079","name":"Eidolon of Rhetoric","layout":"normal","mana_cost":"{2}{W}","colors":["W"],"type_line":"Enchantment Creature — Spirit","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/f/8f9ad5c0-a343-4d1a-9a85-1f4d5fa64079.jpg?1681728932","art_crop":"https://cards.scryfall.io/art_crop/front/8/f/8f9ad5c0-a343-4d1a-9a85-1f4d5fa64079.jpg?1681728932"}},{"id":"31292616-70e6-4d19-a883-e63ad860f50c","name":"Entreat the Angels","layout":"normal","mana_cost":"{X}{X}{W}{W}{W}","colors":["W"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/3/1/31292616-70e6-4d19-a883-e63ad860f50c.jpg?1592708298","art_crop":"https://cards.scryfall.io/art_crop/front/3/1/31292616-70e6-4d19-a883-e63ad860f50c.jpg?1592708298"}},{"id":"1dd64b1d-bcef-476c-bf0b-3ac7df7cbed3","name":"Nissa, Ascended Animist","layout":"normal","mana_cost":"{3}{G}{G}{G/P}{G/P}","colors":["G"],"type_line":"Legendary Planeswalker — Nissa","image_uris":{"normal":"https://cards.scryfall.io/normal/front/1/d/1dd64b1d-bcef-476c-bf0b-3ac7df7cbed3.jpg?1675957150","art_crop":"https://cards.scryfall.io/art_crop/front/1/d/1dd64b1d-bcef-476c-bf0b-3ac7df7cbed3.jpg?1675957150"}},{"id":"890e23d7-f4db-437d-bfe4-be35f0a443b3","name":"Vivien on the Hunt","layout":"normal","mana_cost":"{4}{G}{G}","colors":["G"],"type_line":"Legendary Planeswalker — Vivien","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/9/890e23d7-f4db-437d-bfe4-be35f0a443b3.jpg?1664503259","art_crop":"https://cards.scryfall.io/art_crop/front/8/9/890e23d7-f4db-437d-bfe4-be35f0a443b3.jpg?1664503259"}},{"id":"f2a37dcb-4a18-4f03-b28c-27188a1a5ec1","name":"Turn into a Pumpkin","layout":"normal","mana_cost":"{3}{U}","colors":["U"],"type_line":"Instant","image_uris":{"normal":"https://cards.scryfall.io/normal/front/f/2/f2a37dcb-4a18-4f03-b28c-27188a1a5ec1.jpg?1572490021","art_crop":"https://cards.scryfall.io/art_crop/front/f/2/f2a37dcb-4a18-4f03-b28c-27188a1a5ec1.jpg?1572490021"}},{"id":"50bf91a7-4d04-437c-a290-6adb52f25312","name":"Spur Grappler","layout":"normal","mana_cost":"{2}{R}","colors":["R"],"type_line":"Creature — Beast","image_uris":{"normal":"https://cards.scryfall.io/normal/front/5/0/50bf91a7-4d04-437c-a290-6adb52f25312.jpg?1562909787","art_crop":"https://cards.scryfall.io/art_crop/front/5/0/50bf91a7-4d04-437c-a290-6adb52f25312.jpg?1562909787"}},{"id":"208c6f51-3c00-4fc6-8579-8f57444d0e97","name":"Baffling End","layout":"normal","mana_cost":"{1}{W}","colors":["W"],"type_line":"Enchantment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/0/208c6f51-3c00-4fc6-8579-8f57444d0e97.jpg?1555039647","art_crop":"https://cards.scryfall.io/art_crop/front/2/0/208c6f51-3c00-4fc6-8579-8f57444d0e97.jpg?1555039647"}},{"id":"251015ed-9408-4941-894a-158551ed2613","name":"Favored Hoplite","layout":"normal","mana_cost":"{W}","colors":["W"],"type_line":"Creature — Human Soldier","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/5/251015ed-9408-4941-894a-158551ed2613.jpg?1562815791","art_crop":"https://cards.scryfall.io/art_crop/front/2/5/251015ed-9408-4941-894a-158551ed2613.jpg?1562815791"}},{"id":"60c90d5d-7b3b-48d2-85f6-d6a2a452c0e9","name":"Neheb, Dreadhorde Champion","layout":"normal","mana_cost":"{2}{R}{R}","colors":["R"],"type_line":"Legendary Creature — Zombie Minotaur Warrior","image_uris":{"normal":"https://cards.scryfall.io/normal/front/6/0/60c90d5d-7b3b-48d2-85f6-d6a2a452c0e9.jpg?1559959426","art_crop":"https://cards.scryfall.io/art_crop/front/6/0/60c90d5d-7b3b-48d2-85f6-d6a2a452c0e9.jpg?1559959426"}},{"id":"272180bd-6afc-4be6-993c-b761acdedec3","name":"Mind Rot","layout":"normal","mana_cost":"{2}{B}","colors":["B"],"type_line":"Sorcery","image_uris":{"normal":"https://cards.scryfall.io/normal/front/2/7/272180bd-6afc-4be6-993c-b761acdedec3.jpg?1562783888","art_crop":"https://cards.scryfall.io/art_crop/front/2/7/272180bd-6afc-4be6-993c-b761acdedec3.jpg?1562783888"}},{"id":"8829efa0-498a-43ca-91aa-f9caeeafe298","name":"Hero of Bladehold","layout":"normal","mana_cost":"{2}{W}{W}","colors":["W"],"type_line":"Creature — Human Knight","image_uris":{"normal":"https://cards.scryfall.io/normal/front/8/8/8829efa0-498a-43ca-91aa-f9caeeafe298.jpg?1605370731","art_crop":"https://cards.scryfall.io/art_crop/front/8/8/8829efa0-498a-43ca-91aa-f9caeeafe298.jpg?1605370731"}},{"id":"c378b614-ad53-40cd-86fa-6b6c7b82b824","name":"Sphere of Safety","layout":"normal","mana_cost":"{4}{W}","colors":["W"],"type_line":"Enchantment","image_uris":{"normal":"https://cards.scryfall.io/normal/front/c/3/c378b614-ad53-40cd-86fa-6b6c7b82b824.jpg?1641135758","art_crop":"https://cards.scryfall.io/art_crop/front/c/3/c378b614-ad53-40cd-86fa-6b6c7b82b824.jpg?1641135758"}},{"id":"d4dbed36-190c-4748-b282-409a2fb5d134","name":"Zombie Ogre","layout":"normal","mana_cost":"{3}{B}{B}","colors":["B"],"type_line":"Creature — Zombie Ogre","image_uris":{"normal":"https://cards.scryfall.io/normal/front/d/4/d4dbed36-190c-4748-b282-409a2fb5d134.jpg?1627705679","art_crop":"https://cards.scryfall.io/art_crop/front/d/4/d4dbed36-190c-4748-b282-409a2fb5d134.jpg?1627705679"}}]} \ No newline at end of file diff --git a/maintenance/update.js b/maintenance/update.js new file mode 100644 index 0000000..3374035 --- /dev/null +++ b/maintenance/update.js @@ -0,0 +1,238 @@ +// node update.js to run +// options: +// - daily to add 50 cards of daily befuddle +// - nd or -nodownload will not download latest bulk card data + +const fs = require('fs'); +const https = require('https'); +const path = require('path'); +const url = require('url'); + +function deleteFile(filename) { + console.log("Deleting " + filename + "...") + if (!fs.existsSync(filename)) { + return; + } + fs.unlink(filename, (err) => { + if (err) { + throw err; + } + console.log("Deleted " + filename + " successfully."); + getBulkData(); + }); +} + +function getBulkData() { + console.log("Getting bulk data..."); + + const https_options = { + host: 'api.scryfall.com', + path: '/bulk-data', + headers: { + 'User-Agent': 'BefuddleApp/24.7.29', + 'Accept': 'application/json;q=0.9,*/*;q=0.8' + } + } + + //'https://api.scryfall.com/bulk-data' + https.get(https_options, (resp) => { + let data = ''; + + // A chunk of data has been received. + resp.on('data', (chunk) => { + data += chunk; + }); + + // The whole response has been received. Print out the result. + resp.on('end', () => { + // console.log(data); + console.log("Downloading from: " + JSON.parse(data)['data'][1]['download_uri']); + let url = new URL(JSON.parse(data)['data'][1]['download_uri']); + + let dw_option = { + host: url.hostname, + path: url.pathname, + headers: { + 'User-Agent': 'BefuddleApp/24.7.29', + 'Accept': 'application/json;q=0.9,*/*;q=0.8' + } + } + + https.get(dw_option, (res) => { + const path = './ignore/mtgCards.json'; + const filePath = fs.createWriteStream(path); + res.pipe(filePath); + filePath.on('finish', () => { + filePath.close(); + console.log('Bulk Data Download Completed'); + start(); + }) + }) + }); + + }).on("error", (err) => { + console.log("URI Error: " + err.message); + throw (err); + }); +} + +function getDateNumber() { + d1 = new Date('5/6/2022 0:00'); + d2 = new Date(); + dd = Math.floor((d2.getTime() - d1.getTime()) / 86400000) - 1; + return dd; +} + +function start() { + + let d = require('../ignore/mtgCards.json'); + let historical = require('../ignore/historical.json'); + + let setTypeExclude = ['memorabilia', 'token']; + let layoutExclude = ['vanguard', 'token', 'double_faced_token', 'art_series', 'scheme', 'planar', 'emblem', + 'reversible_card', 'host', 'augment']; + let setNameExclude = ['Mystery Booster Playtest Cards 2021', 'Mystery Booster Playtest Cards 2019']; + let dfc = ['transform', 'modal_dfc']; + + let toKeep = ['name', 'layout', 'mana_cost', 'colors', 'type_line']; + let img_uri = 'image_uris'; + let toKeepImg = ['normal', 'art_crop'] + + let cleanList = []; + let idList = []; + + let progress = 1; + console.log('Started list building and card processing .. '); + for (var i = 0; i < d.length; i++) { + if (setTypeExclude.includes(d[i].set_type) || layoutExclude.includes(d[i].layout) || setNameExclude.includes(d[i].set_name) || + d[i].oversized || d[i].content_warning || d[i].games == undefined || !d[i].games.includes('paper') || d[i].flavor_name != undefined) { + //excluded lists, oversized, content_warning, not paper, cards with flavor names + continue; + } else if (!dfc.includes(d[i].layout) && d[i].image_uris == undefined) { + //not dfc and no art images + continue; + } else if (!dfc.includes(d[i].layout) && (d[i].image_uris.art_crop == undefined || d[i].image_uris.normal == undefined)) { + //not dfc and doesn't have art crop + continue; + } else if (dfc.includes(d[i].layout) && d[i].card_faces == undefined) { + //dfc and no card_faces array + continue; + } else { //include the card + let card = d[i]; + + let toPush = { + id: card.id + }; + + if (dfc.includes(d[i].layout)) { //dfc + toPush['card_faces'] = []; + card.card_faces.forEach((cf, j) => { + toPush['card_faces'].push({}); + toKeep.forEach(key => { + toPush['card_faces'][j][key] = cf[key]; + }) + toPush['card_faces'][j][img_uri] = {}; + toKeepImg.forEach(key => { + toPush['card_faces'][j][img_uri][key] = cf.image_uris[key]; + }); + }); + } else { //not dfc + toKeep.forEach(key => { + toPush[key] = card[key]; + }) + toPush[img_uri] = {}; + toKeepImg.forEach(key => { + toPush[img_uri][key] = card.image_uris[key]; + }); + } + cleanList.push(toPush); + idList.push(card.id); + } + if (i > progress * Math.floor(d.length / 10)) { + console.log(" " + i + "/" + d.length + " cards processed"); + progress++; + } + } + + console.log("Finished card processing, exporting cleanedCards.json ..."); + let cl = JSON.stringify(cleanList); + fs.writeFileSync('./ignore/cleanedCards.json', cl); + console.log(" cleanedCards.json exported.") + + console.log("Exporting cardList.json ..."); + let il = JSON.stringify(idList); + fs.writeFileSync('./cardList.json', il); + console.log(" cardList.json exported.") + + function shuffle(array) { + let currentIndex = array.length, + randomIndex; + + // While there remain elements to shuffle. + while (currentIndex != 0) { + + // Pick a remaining element. + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex--; + + // And swap it with the current element. + [array[currentIndex], array[randomIndex]] = [ + array[randomIndex], array[currentIndex] + ]; + } + + return array; + } + + if (process.argv.includes('-daily')) { + console.log("Starting daily befuddle list building..."); + console.log(" Shuffling cleaned list...") + shuffle(cleanList); + console.log(" done shuffling, building list now") + + let days = 3; + let overlap = 2; + let dailyList = { + start: getDateNumber() - overlap, + list: [] + }; + + for (var loopDays = getDateNumber() - overlap ; loopDays < historical.length; loopDays++) { + dailyList.list.push({...historical[loopDays]}); + } + let card; + while (days >= 0) { + card = cleanList.pop(); + console.log(card); + if ((card['type_line'] != undefined && !card['type_line'].includes('Basic')) && //not basic lands + !historical.includes(card.id) // not in historical + ) { + dailyList.list.push(card); + historical.push(card); + days--; + } + } + + console.log("Exporting dailyList.json ..."); + let dl = JSON.stringify(dailyList); + fs.writeFileSync('./ignore/dailyList.json', dl); + fs.writeFileSync('./dailyList.json', dl); + console.log(" dailyList.json exported.") + + console.log("Updating historical.json ..."); + let hl = JSON.stringify(historical); + fs.writeFileSync('./ignore/historical.json', hl); + console.log(" historical.json exported.") + } else { + console.log("To update daily list +50 cards please include -daily flag"); + } + + console.log("--- All Done ---"); +} + +if (process.argv.includes('-nd') || process.argv.includes('-nodownload')) { + console.log('No download mode selected'); + start(); +} else { + deleteFile("./ignore/mtgCards.json"); +}