Add project files: decks, scripts, and collection data
This commit is contained in:
14859
card_cache.json
Normal file
14859
card_cache.json
Normal file
File diff suppressed because it is too large
Load Diff
932
collection/Box1 2026-01-30.txt
Normal file
932
collection/Box1 2026-01-30.txt
Normal file
@@ -0,0 +1,932 @@
|
||||
1 Giant Koi (TLA) 53
|
||||
1 Grappling Kraken (FDN) 39
|
||||
3 Stratosoarer (ECL) 72
|
||||
1 Doc Ock, Sinister Scientist (SPM) 29
|
||||
1 Hraesvelgr of the First Brood (FIC) 37
|
||||
1 Summon: Shiva (FIN) 78
|
||||
2 Pestered Wellguard (ECL) 63
|
||||
2 Wanderwine Distracter (ECL) 82
|
||||
1 Alphinaud Leveilleur (FIC) 33
|
||||
1 Kukemssa Serpent (MIR) 72
|
||||
1 Surveillance Monitor (MKM) 73
|
||||
1 Enduring Curiosity (DSK) 51
|
||||
2 Kulrath Mystic (ECL) 56
|
||||
1 Glamermite (ECL) 50
|
||||
1 Nebelgast Herald (INR) 78
|
||||
1 Quistis Trepe (FIN) 66
|
||||
1 Erudite Wizard (FDN) 37
|
||||
1 The Mechanist, Aerial Artisan (TLA) 64
|
||||
1 Jill, Shiva's Dominant // Shiva, Warden of Ice (FIN) 58
|
||||
1 Gogo, Master of Mimicry (FIN) 54
|
||||
1 Fear of Isolation (DSK) 58
|
||||
1 Il Mheg Pixie (FIN) 57
|
||||
1 Agent of Kotis (TDM) 36
|
||||
1 Hypnotic Sprite // Mesmeric Glare (FIC) 264
|
||||
1 Tiger-Seal (TLA) 75
|
||||
1 Kithkeeper (ECL) 23
|
||||
1 Salt Road Packbeast (TDM) 23
|
||||
1 Beatrix, Loyal General (FIN) 554
|
||||
2 Sun-Dappled Celebrant (ECL) 37
|
||||
1 Summon: Good King Mog XII (FIC) 26
|
||||
1 Master Piandao (TLA) 28
|
||||
1 Kalonian Twingrove (M15) 182
|
||||
1 Thancred Waters (FIC) 31
|
||||
1 Minwu, White Mage (FIN) 26
|
||||
1 Friendly Ghost (DSK) 12
|
||||
1 Daily Bugle Reporters (SPM) 6
|
||||
1 Unsettling Twins (DSK) 38
|
||||
1 Kyoshi Warriors (TLA) 26
|
||||
1 Summon: Primal Garuda (FIN) 37
|
||||
1 Rosa, Resolute White Mage (FIN) 555
|
||||
1 Dragonback Lancer (TDM) 9
|
||||
4 Weapons Vendor (FIN) 40
|
||||
1 Gallant Fowlknight (ECL) 17
|
||||
4 Shore Lurker (ECL) 34
|
||||
1 Anafenza, Unyielding Lineage (TDM) 2
|
||||
1 Tempest Hawk (TDM) 31
|
||||
1 Summon: Choco/Mog (FIN) 35
|
||||
1 Arachne, Psionic Weaver (SPM) 2
|
||||
1 Dazzling Angel (FDN) 9
|
||||
1 Flight-Deck Coordinator (EOE) 17
|
||||
1 Earth Kingdom Jailer (TLA) 16
|
||||
1 Aerith Gainsborough (FIN) 4
|
||||
1 Alisaie Leveilleur (FIC) 9
|
||||
1 Glider Kids (TLA) 21
|
||||
3 Gaelicat (FIN) 22
|
||||
2 Reluctant Dounguard (ECL) 31
|
||||
2 Meanders Guide (ECL) 25
|
||||
1 Tributary Vaulter (ECL) 40
|
||||
1 Sunpearl Kirin (TDM) 29
|
||||
1 Bearer of Glory (TDM) 4
|
||||
1 Flash Thompson, Spider-Fan (SPM) 7
|
||||
1 Tataru Taru (FIC) 30
|
||||
1 Jeong Jeong's Deserters (TLA) 25
|
||||
1 Hildibrand Manderville // Gentleman's Rise (FIC) 83
|
||||
2 Ambrosia Whiteheart (FIN) 6
|
||||
4 Coeurl (FIN) 12
|
||||
2 Timid Shieldbearer (ECL) 39
|
||||
1 Encumbered Reejerey (ECL) 14
|
||||
1 Veteran Survivor (DSK) 40
|
||||
1 Mardu Devotee (TDM) 16
|
||||
1 Momo, Friendly Flier (TLA) 29
|
||||
1 Curious Farm Animals (TLA) 14
|
||||
2 Valkyrie Aerial Unit (FIN) 84
|
||||
2 Ice Flan (FIN) 55
|
||||
3 Rook Turret (FIN) 69
|
||||
2 Venser, Shaper Savant (FCA) 6
|
||||
2 Qiqirn Merchant (FIN) 65
|
||||
8 Dragoon's Wyvern (FIN) 49
|
||||
3 Sahagin (FIN) 71
|
||||
3 Scorpion Sentinel (FIN) 72
|
||||
2 G'raha Tia (FIN) 21
|
||||
4 Cloudbound Moogle (FIN) 11
|
||||
2 Delivery Moogle (FIN) 15
|
||||
2 Compassionate Healer (TLA) 13
|
||||
3 Adelbert Steiner (FIN) 3
|
||||
6 Dwarven Castle Guard (FIN) 18
|
||||
2 Magitek Infantry (FIN) 25
|
||||
1 Zodiark, Umbral God (FIN) 128
|
||||
1 Feral Deathgorger // Dusk Sight (TDM) 80
|
||||
1 Basilica Stalker (MKM) 78
|
||||
1 Spectral Snatcher (DSK) 116
|
||||
1 Canyon Crawler (TLA) 90
|
||||
1 Perigee Beckoner (EOE) 112
|
||||
1 Venom, Evil Unleashed (SPM) 71
|
||||
1 Stinging Scorpion (UND) 46
|
||||
2 Blighted Blackthorn (ECL) 90
|
||||
1 Syr Konrad, the Grim (FCA) 10
|
||||
1 Zenos yae Galvus // Shinryu, Transcendent Rival (FIN) 127
|
||||
1 Jecht, Reluctant Guardian // Braska's Final Aeon (FIN) 104
|
||||
1 Dashing Bloodsucker (DSK) 90
|
||||
1 Crypt Feaster (FDN) 59
|
||||
1 Gravblade Heavy (EOE) 102
|
||||
1 Buzzard-Wasp Colony (TLA) 88
|
||||
1 Soul-Shackled Zombie (FDN) 70
|
||||
3 Dawnhand Eulogist (ECL) 99
|
||||
4 Dream Seizer (ECL) 101
|
||||
1 Nightmare Sower (ECL) 114
|
||||
1 Vincent Valentine // Galian Beast (FIN) 125
|
||||
1 Shambling Cie'th (FIN) 117
|
||||
1 Plaguecrafter (BLC) 187
|
||||
1 Archghoul of Thraben (INR) 95
|
||||
1 Fang, Fearless l'Cie (FIN) 99
|
||||
1 Hog-Monkey (TLA) 104
|
||||
1 Pirate Peddlers (TLA) 115
|
||||
1 Moonglove Extractor (ECL) 109
|
||||
1 Heirloom Auntie (ECL) 107
|
||||
1 Gnarlbark Elm (ECL) 103
|
||||
1 Retched Wretch (ECL) 117
|
||||
1 June, Bounty Hunter (TLA) 106
|
||||
1 Merchant of Many Hats (TLA) 110
|
||||
1 Mai, Scornful Striker (TLA) 109
|
||||
1 Corrupt Court Official (TLA) 92
|
||||
1 Burglar Rat (FDN) 170
|
||||
1 Reno and Rude (FIN) 113
|
||||
1 Demon Wall (FIN) 97
|
||||
1 Unburied Earthcarver (TDM) 95
|
||||
1 Scarblade Scout (ECL) 118
|
||||
3 Boggart Prankster (ECL) 93
|
||||
3 Bile-Vial Boggart (ECL) 87
|
||||
2 Summon: Primal Odin (FIN) 121
|
||||
2 Malboro (FIN) 106
|
||||
2 Beetle-Headed Merchants (TLA) 86
|
||||
4 Namazu Trader (FIN) 107
|
||||
2 Gaius van Baelsar (FIN) 102
|
||||
2 Qutrub Forayer (FIN) 112
|
||||
3 Ahriman (FIN) 87
|
||||
3 Shinra Reinforcements (FIN) 118
|
||||
2 Fire Nation Engineer (TLA) 99
|
||||
2 Wolfbat (TLA) 122
|
||||
3 Al Bhed Salvagers (FIN) 88
|
||||
3 Undercity Dire Rat (FIN) 123
|
||||
5 Hecteyes (FIN) 103
|
||||
2 Kulrath Zealot (ECL) 148
|
||||
1 Gilgamesh, Master-at-Arms (FIN) 139
|
||||
1 Mongoose Lizard (TLA) 148
|
||||
1 Boilerbilges Ripper (DSK) 127
|
||||
1 Razorkin Hordecaller (DSK) 152
|
||||
1 Sandworm (FIN) 155
|
||||
1 Combustion Man (TLA) 127
|
||||
1 Meticulous Artisan (TDM) 112
|
||||
1 Sower of Chaos (FDN) 95
|
||||
1 Wartime Protestors (TLA) 160
|
||||
1 Gogo, Mysterious Mime (FIC) 56
|
||||
1 Flamekin Gildweaver (ECL) 140
|
||||
1 Tersa Lightshatter (TDM) 127
|
||||
1 Vicious Clown (DSK) 163
|
||||
1 Frontline War-Rager (EOE) 134
|
||||
1 Spider-Gwen, Free Spirit (SPM) 90
|
||||
1 Lightning, Security Sergeant (FIN) 560
|
||||
1 Summon: G.F. Cerberus (FIN) 162
|
||||
1 Boar-q-pine (TLA) 124
|
||||
3 Brambleback Brute (ECL) 128
|
||||
1 Brazen Scourge (FDN) 191
|
||||
1 Deserter's Disciple (TLA) 131
|
||||
1 Yuyan Archers (TLA) 161
|
||||
1 Blood Petal Celebrant (INR) 144
|
||||
1 Axgard Cavalry (FDN) 189
|
||||
1 Shock Brigade (TDM) 120
|
||||
1 Taxi Driver (SPM) 97
|
||||
1 Firebrand Archer (FDN) 196
|
||||
1 Explosive Prodigy (ECL) 136
|
||||
2 Flame-Chain Mauler (ECL) 138
|
||||
2 Hill Gigas (FIN) 141
|
||||
2 Boldwyr Aggressor (ECL) 125
|
||||
2 Barret Wallace (FIN) 129
|
||||
2 Spider-Islanders (SPM) 91
|
||||
2 Fire Nation Raider (TLA) 135
|
||||
2 Mysidian Elder (FIN) 145
|
||||
2 Superior Foes of Spider-Man (SPM) 96
|
||||
2 Queen Brahne (FIN) 149
|
||||
4 Summon: G.F. Ifrit (FIN) 163
|
||||
3 Enraged Flamecaster (ECL) 135
|
||||
2 Sabotender (FIN) 153
|
||||
2 Tiger-Dillo (TLA) 155
|
||||
7 Item Shopkeep (FIN) 142
|
||||
3 Gristle Glutton (ECL) 144
|
||||
3 Blazing Bomb (FIN) 130
|
||||
2 Freya Crescent (FIN) 138
|
||||
1 Wildwood Scourge (FDN) 236
|
||||
1 Diamond Weapon (FIN) 183
|
||||
1 Coliseum Behemoth (FIN) 181
|
||||
1 Slavering Branchsnapper (DSK) 198
|
||||
1 Spider-Rex, Daring Dino (SPM) 116
|
||||
1 Apothecary Stomper (FDN) 99
|
||||
1 Badgermole (TLA) 166
|
||||
2 Safewright Cavalry (ECL) 191
|
||||
1 The Boulder, Ready to Rumble (TLA) 168
|
||||
1 Cackling Prowler (FDN) 101
|
||||
1 Damage Control Crew (SPM) 99
|
||||
1 Festerhide Boar (INR) 196
|
||||
1 Rainveil Rejuvenator (TDM) 152
|
||||
1 Trystan, Callous Cultivator // Trystan, Penitent Culler (ECL) 199
|
||||
1 Vinebred Brawler (ECL) 201
|
||||
1 Ostrich-Horse (TLA) 188
|
||||
1 Supportive Parents (SPM) 119
|
||||
1 Cryptid Inspector (DSK) 174
|
||||
1 Tireless Tracker (EOC) 110
|
||||
3 Lys Alana Informant (ECL) 181
|
||||
1 Lys Alana Dignitary (ECL) 180
|
||||
1 Town Greeter (FIN) 209
|
||||
1 Sultai Devotee (TDM) 160
|
||||
1 Rebellious Captives (TLA) 191
|
||||
1 Hinterland Logger // Timber Shredder (INR) 203
|
||||
1 House Cartographer (DSK) 185
|
||||
1 Tunnel Tipster (MKM) 180
|
||||
2 Virulent Emissary (ECL) 202
|
||||
1 Spider-Ham, Peter Porker (PW25) 10
|
||||
1 Cactuar (FIN) 177
|
||||
1 Llanowar Elves (FDN) 227
|
||||
3 Balamb T-Rexaur (FIN) 173
|
||||
2 Summon: Fat Chocobo (FIN) 202
|
||||
2 Vanille, Cheerful l'Cie (FIN) 211
|
||||
6 Gigantoad (FIN) 187
|
||||
3 Crossroads Watcher (ECL) 173
|
||||
2 Walltop Sentries (TLA) 202
|
||||
3 Loporrit Scout (FIN) 192
|
||||
3 Summon: Fenrir (FIN) 203
|
||||
2 Great Forest Druid (ECL) 178
|
||||
2 Goobbue Gardener (FIN) 188
|
||||
2 Kraven's Cats (SPM) 104
|
||||
2 Turtle-Duck (TLA) 200
|
||||
2 Gran Pulse Ochu (FIN) 189
|
||||
1 Reputable Merchant (TDM) 217
|
||||
1 Monastery Messenger (TDM) 208
|
||||
1 G'raha Tia, Scion Reborn (FIC) 3
|
||||
1 Rhino, Barreling Brute (SPM) 140
|
||||
1 Vibrance (ECL) 249
|
||||
1 Huntmaster of the Fells // Ravager of the Fells (INR) 241
|
||||
1 Uncle Iroh (TLA) 248
|
||||
1 Rydia, Summoner of Mist (FIN) 239
|
||||
2 Stoic Grove-Guide (ECL) 243
|
||||
1 Dai Li Agents (TLA) 214
|
||||
1 Jenova, Ancient Calamity (FIN) 228
|
||||
1 Stalwart Successor (TDM) 227
|
||||
1 Lluwen, Imperfect Naturalist (ECL) 232
|
||||
1 Shadow Urchin (ECL) 242
|
||||
2 Chaos Spewer (ECL) 210
|
||||
1 Black Waltz No. 3 (FIN) 214
|
||||
1 Vial Smasher the Fierce (FCA) 59
|
||||
1 Zuko, Conflicted (TLA) 253
|
||||
1 Omega, Heartless Evolution (FIN) 236
|
||||
1 Guru Pathik (TLA) 223
|
||||
1 Clement, the Worrywort (BLB) 329
|
||||
1 Hermitic Herbalist (TLA) 226
|
||||
1 Platypus-Bear (TLA) 236
|
||||
1 Twinflame Travelers (ECL) 345
|
||||
1 Twinflame Travelers (ECL) 248
|
||||
1 Sanar, Innovative First-Year (ECL) 241
|
||||
2 Shantotto, Tactician Magician (FIN) 241
|
||||
2 Flaring Cinder (ECL) 225
|
||||
1 Ashling, Rekindled // Ashling, Rimebound (ECL) 124
|
||||
2 The Emperor of Palamecia // The Lord Master of Hell (FIN) 219
|
||||
1 Balmor, Battlemage Captain (FDN) 237
|
||||
1 Azula, Cunning Usurper (TLA) 208
|
||||
1 Ultimecia, Time Sorceress // Ultimecia, Omnipotent (FIN) 247
|
||||
1 Messenger Hawk (TLA) 234
|
||||
1 Emet-Selch, Unsundered // Hades, Sorcerer of Eld (FIN) 218
|
||||
1 Locke Cole (FIN) 234
|
||||
1 Suki, Kyoshi Warrior (TLA) 243
|
||||
1 Good-Fortune Unicorn (FDN) 240
|
||||
1 Serah Farron // Crystallized Serah (FIN) 240
|
||||
1 Wary Farmer (ECL) 251
|
||||
1 Garnet, Princess of Alexandria (FIN) 222
|
||||
1 Catharsis (ECL) 209
|
||||
1 Cloud, Planet's Champion (FIN) 552 *F*
|
||||
1 Sami, Ship's Engineer (EOE) 225
|
||||
2 Feisty Spikeling (ECL) 223
|
||||
1 Eirdu, Carrier of Dawn // Isilu, Carrier of Twilight (ECL) 13
|
||||
1 Estinien Varlineau (FIC) 82
|
||||
1 Prideful Feastling (ECL) 238
|
||||
1 Ardbert, Warrior of Darkness (FIC) 77
|
||||
1 Merrow Skyswimmer (ECL) 234
|
||||
1 Wraith, Vicious Vigilante (SPM) 160
|
||||
1 Lyse Hext (FIC) 88
|
||||
1 Tidus, Blitzball Star (FIN) 246
|
||||
1 Deepchannel Duelist (ECL) 213
|
||||
1 Urianger Augurelt (FIC) 96
|
||||
2 Gladiolus Amicitia (FIN) 224
|
||||
2 Balthier and Fran (FIN) 213
|
||||
3 Cloud of Darkness (FIN) 217
|
||||
2 Exdeath, Void Warlock // Neo Exdeath, Dimension's End (FIN) 220
|
||||
2 Boggart Cursecrafter (ECL) 331
|
||||
2 Garland, Knight of Cornelia // Chaos, the Endless (FIN) 221
|
||||
2 Ignis Scientia (FIN) 227
|
||||
2 Mischievous Sneakling (ECL) 235
|
||||
2 Voracious Tome-Skimmer (ECL) 250
|
||||
2 Rinoa Heartilly (FIN) 237
|
||||
2 Giott, King of the Dwarves (FIN) 223
|
||||
2 Private Eye (MKM) 223
|
||||
1 Red Herring (MKM) 142
|
||||
1 Abundant Maw (INR) 1
|
||||
1 Relentless X-ATM092 (FIN) 268
|
||||
2 Rooftop Percher (ECL) 2
|
||||
1 Palladium Myr (CMM) 967
|
||||
2 Changeling Wayfinder (ECL) 1
|
||||
1 Spider-Bot (SPM) 173
|
||||
1 Campus Guide (FDN) 251
|
||||
2 Iron Giant (FIN) 260
|
||||
7 Magic Pot (FIN) 263
|
||||
2 Mechanical Mobster (SPM) 168
|
||||
2 Embermouth Sentinel (TDM) 242
|
||||
2 Chocobo Racetrack (FIN) 179
|
||||
1 The Fire Crystal (FIN) 135
|
||||
1 Chaos Shrine's Black Crystal (FIC) 445
|
||||
1 Cryogen Relic (EOE) 52
|
||||
1 Phoenix Down (FIN) 29
|
||||
1 Coveted Jewel (FIC) 341
|
||||
2 Firdoch Core (ECL) 255
|
||||
1 Puca's Eye (ECL) 259
|
||||
1 Talisman of Dominance (FIC) 364
|
||||
1 Ravenous Amulet (FDN) 131
|
||||
1 Tome of Legends (FIC) 369
|
||||
3 Sol Ring (M3C) 305
|
||||
2 Everflowing Chalice (FIC) 343
|
||||
9 White Auracite (FIN) 41
|
||||
3 Blitzball (FIN) 254
|
||||
4 Instant Ramen (FIN) 259
|
||||
3 World Map (FIN) 270
|
||||
3 Lunatic Pandora (FIN) 262
|
||||
1 Genji Glove (FIN) 258
|
||||
2 Black Mage's Rod (FIN) 90
|
||||
2 Barbed Bloodletter (ECL) 86
|
||||
2 Blue Mage's Cane (FIC) 35
|
||||
1 Dragoon's Lance (FIN) 17
|
||||
1 Ultima Weapon (FIN) 563
|
||||
1 Leyline Axe (FDN) 129
|
||||
1 Butcher's Cleaver (INR) 256
|
||||
2 Whispersilk Cloak (10E) 345
|
||||
1 Monk's Fist (FIN) 265
|
||||
1 Cobbled Wings (INR) 258
|
||||
1 Kyoshi Battle Fan (TLA) 257
|
||||
2 Swiftfoot Boots (TDC) 328
|
||||
1 Spider-Suit (SPM) 176
|
||||
1 Thinking Cap (MKM) 257
|
||||
1 Excalibur II (FIN) 352
|
||||
1 Phantom Train (FIN) 110
|
||||
1 Invasion Submersible (TLA) 57
|
||||
1 Cargo Ship (FIN) 47
|
||||
1 Smuggler's Copter (FCA) 62
|
||||
1 Subway Train (SPM) 178
|
||||
3 Bard's Bow (FIN) 174
|
||||
5 Warrior's Sword (FIN) 169
|
||||
5 Samurai's Katana (FIN) 154
|
||||
4 Red Mage's Rapier (FIN) 152
|
||||
3 Coral Sword (FIN) 134
|
||||
4 Dark Knight's Greatsword (FIN) 95
|
||||
4 Sage's Nouliths (FIN) 70
|
||||
3 Astrologian's Planisphere (FIN) 46
|
||||
3 Paladin's Arms (FIN) 28
|
||||
4 White Mage's Staff (FIN) 42
|
||||
2 Crystal Fragments // Summon: Alexander (FIN) 13
|
||||
2 The Masamune (FIN) 264
|
||||
4 Stalactite Dagger (ECL) 261
|
||||
2 The Prima Vista (FIN) 64
|
||||
3 Magitek Armor (FIN) 24
|
||||
1 Disturbing Mirth (DSK) 212
|
||||
1 Eusocial Engineering (EOE) 181
|
||||
1 Wall Crawl (SPM) 121
|
||||
5 Gilt-Leaf's Embrace (ECL) 177
|
||||
1 Campsite Cuisine (FIC) 464
|
||||
1 Triple Triad (FIN) 340
|
||||
1 Breaching Dragonstorm (TDM) 101
|
||||
1 Connecting the Dots (MKM) 118
|
||||
1 Meathook Massacre II (DSK) 108
|
||||
1 Boggart Mischief (ECL) 92
|
||||
1 Cracked Skull (DSK) 88
|
||||
1 Bastion of Remembrance (FIC) 274
|
||||
1 Eye of Nidhogg (FIC) 44
|
||||
2 Mornsong Aria (ECL) 111
|
||||
1 Corroding Dragonstorm (TDM) 75
|
||||
1 Northern Air Temple (TLA) 111
|
||||
1 Sidequest: Card Collection // Magicked Card (FIN) 73
|
||||
1 Meat Locker // Drowned Diner (DSK) 65
|
||||
1 Spider-Man No More (SPM) 45
|
||||
1 Security Bypass (SNC) 59
|
||||
1 Roiling Dragonstorm (TDM) 296
|
||||
3 Blossombind (ECL) 45
|
||||
1 Noggle the Mind (ECL) 60
|
||||
1 Aquitect's Defenses (ECL) 44
|
||||
1 Watery Grasp (TLA) 82
|
||||
1 Sleep Magic (FIN) 74
|
||||
1 Witness Protection (FDN) 168
|
||||
1 Ringing Strike Mastery (TDM) 53
|
||||
1 Kinbinding (ECL) 407 *F*
|
||||
1 Southern Air Temple (TLA) 36
|
||||
2 Clachan Festival (ECL) 10
|
||||
4 Spiral into Solitude (ECL) 36
|
||||
1 Evershrike's Gift (ECL) 15
|
||||
2 Kraven's Last Hunt (SPM) 105
|
||||
2 Prismatic Undercurrents (ECL) 189
|
||||
3 Ride the Shoopuf (FIN) 197
|
||||
2 Sidequest: Play Blitzball // World Champion, Celestial Weapon (FIN) 158
|
||||
3 Liminal Hold (ECL) 24
|
||||
2 Sidequest: Catch a Fish // Cooking Campsite (FIN) 31
|
||||
2 Due Diligence (MKM) 14
|
||||
1 Dragonclaw Strike (TDM) 180
|
||||
1 Trystan's Command (ECL) 247
|
||||
1 Grub's Command (ECL) 228
|
||||
1 Pumpkin Bombardment (SPM) 139
|
||||
1 Lie in Wait (TDM) 203
|
||||
1 Brigid's Command (ECL) 208
|
||||
1 Rydia's Return (FIN) 198
|
||||
1 Bite Down on Crime (MKM) 154
|
||||
1 Earthbending Lesson (TLA) 176
|
||||
2 Reach the Horizon (FIN) 195
|
||||
1 Tend the Sprigs (ECL) 197
|
||||
1 Shattered Wings (EOE) 206
|
||||
1 Scout the City (SPM) 113
|
||||
2 Chocobo Kick (FIN) 178
|
||||
1 Clash of the Eikons (FIN) 180
|
||||
1 Clash of the Eikons (FIN) 341
|
||||
1 Choco-Comet (FIN) 132
|
||||
1 Terminal Velocity (EOE) 163
|
||||
1 Unexpected Request (FIN) 167
|
||||
1 Light Up the Stage (FCA) 39
|
||||
1 Boulder Dash (ECL) 127
|
||||
1 Jet's Brainwashing (TLA) 143
|
||||
1 Killing Wave (INR) 121
|
||||
1 Bloodline Bidding (ECL) 91
|
||||
1 Evil Reawakened (FIN) 98
|
||||
1 Crux of Fate (FIC) 275
|
||||
2 Circle of Power (FIN) 92
|
||||
1 The Final Days (FIN) 101
|
||||
2 Risky Research (SPM) 62
|
||||
1 Temporal Intervention (EOE) 120
|
||||
1 Extract a Confession (MKM) 84
|
||||
4 Bogslither's Embrace (ECL) 94
|
||||
1 Reanimate (ARC) 21
|
||||
1 Wanderwine Farewell (ECL) 83
|
||||
1 Waterbending Lesson (TLA) 80
|
||||
1 Lingering Souls (FIC) 245
|
||||
1 Cut a Deal (FIC) 238
|
||||
4 Gysahl Greens (FIN) 190
|
||||
4 Commune with Beavers (FIN) 182
|
||||
2 Random Encounter (FIN) 150
|
||||
2 Call the Mountain Chocobo (FIN) 131
|
||||
3 Suplex (FIN) 164
|
||||
2 Impolite Entrance (ECL) 146
|
||||
3 Cinder Strike (ECL) 131
|
||||
3 Venom's Hunger (SPM) 73
|
||||
2 Darkness Descends (ECL) 97
|
||||
2 Poison the Waters (FIN) 111
|
||||
2 Dai Li Indoctrination (TLA) 93
|
||||
4 Resentful Revelation (FIN) 114
|
||||
2 Retrieve the Esper (FIN) 68
|
||||
2 Temporal Cleansing (ECL) 78
|
||||
3 Relm's Sketching (FIN) 67
|
||||
3 Combat Tutorial (FIN) 48
|
||||
2 Boomerang Basics (TLA) 46
|
||||
2 The Crystal's Chosen (FIN) 14
|
||||
3 Aerith Rescue Mission (FIN) 5
|
||||
2 From Father to Son (FIN) 20
|
||||
2 Aang's Journey (TLA) 1
|
||||
1 Auroral Procession (TDM) 169
|
||||
1 Perennation (TDM) 212
|
||||
1 Abandon Attachments (TLA) 205
|
||||
2 Prishe's Wanderings (FIN) 193
|
||||
1 Cycle of Renewal (TLA) 170
|
||||
2 Unforgiving Aim (ECL) 200
|
||||
1 Origin of Metalbending (TLA) 187
|
||||
1 Rocky Rebuke (TLA) 193
|
||||
1 Heritage Reclamation (TDM) 145
|
||||
1 Close Encounter (EOE) 176
|
||||
2 Midnight Tilling (ECL) 182
|
||||
1 Giant Growth (FDN) 223
|
||||
1 Caught Red-Handed (MKM) 115
|
||||
1 Impossible Inferno (DSK) 140
|
||||
1 Judgment Bolt (FIN) 559
|
||||
1 Seize Opportunity (TDM) 119
|
||||
2 Tweeze (ECL) 162
|
||||
1 Laughing Mad (FIN) 143
|
||||
1 Lightning Strike (TLA) 146
|
||||
1 Firebending Lesson (TLA) 138
|
||||
2 Fire Magic (FIN) 136
|
||||
1 Murder (DSK) 110
|
||||
1 Alesha's Legacy (TDM) 72
|
||||
1 Fatal Fissure (TLA) 97
|
||||
2 Vincent's Limit Break (FIN) 126
|
||||
1 Fatal Push (FCA) 9
|
||||
3 Scarblade's Malice (ECL) 119
|
||||
1 Into the Story (FIC) 266
|
||||
2 Sublime Epiphany (FIC) 271
|
||||
2 Unexpected Assistance (ECL) 80
|
||||
1 Uncharted Voyage (FDN) 53
|
||||
1 Glimmerburst (DSK) 62
|
||||
1 Scour for Scrap (EOE) 73
|
||||
1 Swat Away (ECL) 75
|
||||
1 Faebloom Trick (FDN) 38
|
||||
1 Don't Make a Sound (DSK) 49
|
||||
1 It'll Quench Ya! (TLA) 58
|
||||
1 Dreams of Laguna (FIN) 50
|
||||
1 Backslide (ONS) 70
|
||||
1 Accumulate Wisdom (TLA) 44
|
||||
1 Whoosh! (SPM) 48
|
||||
3 Run Away Together (ECL) 67
|
||||
4 Wild Unraveling (ECL) 84
|
||||
1 Get Out (DSK) 60
|
||||
1 Long River's Pull (BLB) 58
|
||||
1 Stolen Uniform (FIN) 75
|
||||
1 Claws Out (FDN) 6
|
||||
1 Moogles' Valor (FIN) 27
|
||||
1 Rally the Monastery (TDM) 19
|
||||
1 Protective Response (ECL) 29
|
||||
1 Razor Rings (TLA) 33
|
||||
1 Keep Out (ECL) 19
|
||||
2 Riverguard's Reflexes (ECL) 33
|
||||
1 Yip Yip! (TLA) 43
|
||||
1 Enter the Avatar State (TLA) 18
|
||||
1 Unwanted Remake (DSK) 39
|
||||
1 Strength of Arms (INR) 42
|
||||
1 Zuko's Exile (TLA) 3
|
||||
3 Airship Crash (FIN) 171
|
||||
2 Allies at Last (TLA) 164
|
||||
2 Sarkhan's Resolve (TDM) 158
|
||||
3 Blitzball Shot (FIN) 176
|
||||
2 Light of Judgment (FIN) 144
|
||||
2 Haste Magic (FIN) 140
|
||||
2 Cunning Maneuver (TLA) 130
|
||||
4 Thunder Magic (FIN) 165
|
||||
2 Sephiroth's Intervention (FIN) 116
|
||||
3 Fight On! (FIN) 100
|
||||
3 Vayne's Treachery (FIN) 124
|
||||
3 Syncopate (FIN) 80
|
||||
2 Lost Days (TLA) 62
|
||||
2 Eject (FIN) 52
|
||||
3 Ice Magic (FIN) 56
|
||||
2 Octopus Form (TLA) 66
|
||||
3 Magic Damper (FIN) 61
|
||||
6 Fate of the Sun-Cryst (FIN) 19
|
||||
2 Auron's Inspiration (FIN) 8
|
||||
2 Battle Menu (FIN) 9
|
||||
6 Slash of Light (FIN) 32
|
||||
3 You're Not Alone (FIN) 44
|
||||
1 Emeria Angel (TDC) 114
|
||||
1 Summon: Choco/Mog (FIN) 358
|
||||
1 Arcane Denial (CMA) 30
|
||||
1 Emeria Shepherd (ZNC) 16
|
||||
1 Abandoned Air Temple (TLA) 263
|
||||
2 Prairie Stream (FIC) 413
|
||||
1 Tangled Islet (FIC) 434
|
||||
3 Reliquary Tower (TDC) 386
|
||||
1 Farseek (FCA) 45
|
||||
1 Gilded Goose (BLC) 221
|
||||
1 Restoration Magic (FIN) 30
|
||||
1 Radiant Grove (FIC) 414
|
||||
1 Tranquil Landscape (MH3) 231
|
||||
1 Suburban Sanctuary (SPM) 185
|
||||
1 Hinterland Harbor (FIC) 403
|
||||
1 Jackdaw Savior (BLB) 18
|
||||
1 Negate (BBD) 123
|
||||
1 Sazh's Chocobo (FIN) 200
|
||||
1 Balamb Garden, SeeD Academy // Balamb Garden, Airborne (FIN) 272
|
||||
2 Birds of Paradise (FIC) 483 *F*
|
||||
2 Beastmaster Ascension (BLC) 118
|
||||
1 River Hoopoe (2X2) 269
|
||||
2 Swords to Plowshares (FIC) 256
|
||||
1 Austere Command (M3C) 167
|
||||
1 Bartz and Boko (FIN) 175
|
||||
1 The Goose Mother (WOE) 204
|
||||
1 Beast Within (TDC) 249
|
||||
1 Flurry of Wings (ARB) 127
|
||||
1 Glacial Fortress (BLC) 307
|
||||
1 An Offer You Can't Refuse (FIC) 267
|
||||
1 Cultivate (PW23) 6 *F*
|
||||
1 Patchwork Banner (BLB) 247
|
||||
1 Kastral, the Windcrested (BLB) 221
|
||||
1 Restless Anchorage (LCI) 347
|
||||
2 Plains (FIN) 295
|
||||
1 Watcher of the Spheres (M21) 227
|
||||
1 Murmuration (BLC) 10
|
||||
1 Talisman of Progress (FIC) 367
|
||||
1 Windurst, Federation Center (FIN) 292
|
||||
1 Meditation Pools (TLA) 272
|
||||
1 Demolition Field (FDN) 687
|
||||
1 Adarkar Wastes (EOC) 147
|
||||
1 Empyrean Eagle (FDN) 239
|
||||
1 Forest (FIN) 307
|
||||
1 Seaside Citadel (FIC) 420
|
||||
1 Warden of Evos Isle (CMR) 106
|
||||
2 Exotic Orchard (BLC) 131
|
||||
1 Felidar Retreat (ZNR) 292
|
||||
1 Ascend from Avernus (CLB) 5
|
||||
1 Path to Exile (BLC) 147
|
||||
1 Curiosity Crafter (BLC) 165
|
||||
1 Sazh Katzroy (FIN) 199
|
||||
1 Traveling Chocobo (FIN) 568 *F*
|
||||
2 Counterspell (DSC) 114
|
||||
1 Jumbo Cactuar (FIN) 191
|
||||
1 Lifecreed Duo (BLB) 20
|
||||
2 Evolving Wilds (BLC) 302
|
||||
2 Path of Ancestry (TDC) 382
|
||||
1 Airborne Aid (ONS) 62
|
||||
1 Sharlayan, Nation of Scholars (FIN) 288
|
||||
1 Brushland (FIC) 377
|
||||
1 Plumecreed Escort (BLB) 65
|
||||
1 Summon: Fat Chocobo (FIN) 371
|
||||
1 Rampant Growth (TDC) 265
|
||||
1 Winged Portent (VOW) 89
|
||||
1 Hermes, Overseer of Elpis (FIC) 36
|
||||
1 Wingmate Roc (C19) 78
|
||||
1 Sunpetal Grove (BLC) 335
|
||||
1 Herald's Horn (M3C) 296
|
||||
1 Kangee's Lieutenant (CMR) 26
|
||||
1 Dusk // Dawn (DRC) 65
|
||||
1 Nature's Lore (FIC) 311
|
||||
1 Terramorphic Expanse (TDC) 408
|
||||
1 Plains (FIN) 294
|
||||
1 Yavimaya Coast (TDC) 413
|
||||
1 Seaside Haven (ONS) 323
|
||||
1 Forest (FIN) 306
|
||||
1 Gwaihir the Windlord (LTR) 210
|
||||
1 City Pigeon (SPM) 4
|
||||
1 Command Tower (FIC) 484
|
||||
1 Sevinne's Reclamation (MH3) 267
|
||||
1 Kangee, Sky Warden (CMR) 283
|
||||
3 Plains (FIC) 478 *F*
|
||||
1 Sidequest: Raise a Chocobo // Black Chocobo (FIN) 201
|
||||
1 Generous Gift (BLC) 106
|
||||
4 Island (FIC) 479 *F*
|
||||
1 Canopy Vista (FIC) 378
|
||||
2 Forest (FIC) 482 *F*
|
||||
1 Choco, Seeker of Paradise (FIN) 215
|
||||
3 Plains (FIN) 296
|
||||
2 Mountain (FIC) 481 *F*
|
||||
1 Mana Geyser (TDC) 223
|
||||
1 Big Score (TDC) 206
|
||||
1 Ovika, Enigma Goliath (ONE) 322
|
||||
1 Summons of Saruman (LTC) 70
|
||||
1 Izzet Signet (TDC) 320
|
||||
1 Seize the Storm (INR) 170
|
||||
1 Fact or Fiction (CMM) 91
|
||||
2 Ring of the Lucii (FIN) 269
|
||||
1 Elixir of Immortality (C21) 243
|
||||
1 Drown in Dreams (M3C) 181
|
||||
1 Vivi Ornitier (FIN) 248
|
||||
1 Ultros, Obnoxious Octopus (FIN) 83
|
||||
1 Island (TLA) 293
|
||||
1 Decaying Time Loop (WHO) 80
|
||||
1 Tellah, Great Sage (FIN) 244
|
||||
1 Traumatize (MAR) 15
|
||||
1 Experimental Overload (M21) 218
|
||||
1 Sulfur Falls (EOC) 184
|
||||
1 Abundant Growth (INR) 184
|
||||
1 Curator's Ward (DOM) 49
|
||||
2 Curiosity (ISD) 49
|
||||
1 Snort (FIC) 58
|
||||
1 Aetherize (FDN) 151
|
||||
1 Talrand, Sky Summoner (OTC) 116
|
||||
1 Epic Experiment (OTC) 222
|
||||
2 Ur-Golem's Eye (C14) 280
|
||||
1 Careful Consideration (TSR) 56
|
||||
1 Isengard Unleashed (LTC) 495
|
||||
1 The Rollercrusher Ride (DSK) 155
|
||||
1 Press the Enemy (LTR) 65
|
||||
1 Thousand-Year Storm (FDN) 248
|
||||
1 Fateful Showdown (KLD) 114
|
||||
1 Increasing Confusion (DKA) 41
|
||||
1 Snapcaster Mage (ISD) 78
|
||||
1 Tezzeret's Gambit (M3C) 194
|
||||
1 Command Tower (FIC) 382
|
||||
1 Shivan Reef (EOC) 179
|
||||
1 Zephid's Embrace (USG) 114
|
||||
1 Arcane Signet (FIC) 335
|
||||
1 Drake Umbra (ROE) 63
|
||||
1 Channeled Force (IKO) 180
|
||||
1 Bond of Insight (WAR) 43
|
||||
1 Consider (TDC) 148
|
||||
1 Baron, Airship Kingdom (FIN) 273
|
||||
1 Mystic Confluence (LTC) 193
|
||||
1 Frostboil Snarl (DRC) 158
|
||||
1 Ether (FIN) 53
|
||||
1 Spellheart Chimera (DDS) 25
|
||||
1 Protective Bubble (LRW) 80
|
||||
1 Path of the Pyromancer (MOC) 34
|
||||
1 Blasphemous Act (TDC) 207
|
||||
2 Firemind Vessel (2X2) 306
|
||||
1 Pirate's Pillage (2X2) 120
|
||||
1 Rise from the Tides (INR) 82
|
||||
1 Full Throttle (DFT) 127
|
||||
2 Rewind (M21) 63
|
||||
1 Gandalf's Sanction (LTR) 208
|
||||
2 Hedron Archive (BLC) 275
|
||||
1 Peter Parker's Camera (SPM) 171
|
||||
1 Pinnacle Monk // Mystic Peak (MH3) 246
|
||||
1 Cut Your Losses (SNC) 38
|
||||
2 Mountain (FIN) 304
|
||||
6 Island (FIN) 297
|
||||
4 Mountain (FIN) 305
|
||||
6 Island (FIN) 298
|
||||
4 Mountain (FIN) 303
|
||||
5 Island (FIN) 299
|
||||
1 Garruk, Cursed Huntsman (BLC) 99
|
||||
1 Moldervine Reclamation (BLC) 255
|
||||
1 Chitterspitter (BLC) 211
|
||||
1 Viridescent Bog (EOC) 190
|
||||
1 Gourmand's Talent (BLC) 31
|
||||
1 Moonstone Eulogist (BLC) 19
|
||||
1 Wolfwillow Haven (BLC) 246
|
||||
1 Beledros Witherbloom (BLC) 247
|
||||
1 Ravenous Squirrel (BLC) 258
|
||||
1 Llanowar Wastes (EOC) 165
|
||||
1 Arasta of the Endless Web (TDC) 244
|
||||
1 Command Tower (BLC) 130
|
||||
1 Worthy Cost (TDM) 99
|
||||
1 Swarmyard Massacre (BLC) 20
|
||||
1 Rootcast Apprenticeship (BLC) 32
|
||||
1 Sword of the Squeak (BLC) 40
|
||||
1 Necroblossom Snarl (DSC) 290
|
||||
1 Chatterfang, Squirrel General (BLC) 209
|
||||
1 Chatterstorm (BLC) 210
|
||||
1 Gilded Goose (LTC) 246
|
||||
1 Temple of Malady (TDC) 403
|
||||
1 Golgari Rot Farm (TDC) 368
|
||||
1 Casualties of War (BLC) 125
|
||||
1 Woe Strider (TDC) 201
|
||||
1 Bojuka Bog (EOC) 149
|
||||
1 Haunted Mire (TDC) 369
|
||||
1 Hazel's Brewmaster (BLC) 17
|
||||
1 Deadly Dispute (TDC) 177
|
||||
1 Ogre Slumlord (BLC) 186
|
||||
1 Nested Shambler (BLC) 185
|
||||
1 Oran-Rief, the Vastwood (BLC) 320
|
||||
1 Terramorphic Expanse (BLC) 345
|
||||
1 Prosperous Innkeeper (BLC) 121
|
||||
1 Maelstrom Pulse (BLC) 126
|
||||
1 Jungle Hollow (BLC) 313
|
||||
1 Skullclamp (BLC) 283
|
||||
1 Plumb the Forbidden (BLC) 188
|
||||
1 Saw in Half (BLC) 113
|
||||
1 End-Raze Forerunners (BLC) 214
|
||||
1 Putrefy (BLC) 257
|
||||
1 Squirrel Sovereign (BLC) 240
|
||||
1 Toski, Bearer of Secrets (BLC) 244
|
||||
1 Insatiable Frugivore (BLC) 18
|
||||
1 Poison-Tip Archer (BLC) 256
|
||||
1 Windgrace's Judgment (EOC) 129
|
||||
1 Honored Dreyleader (BLB) 178
|
||||
1 Cache Grab (BLB) 167
|
||||
1 Tear Asunder (EOC) 109
|
||||
1 Tranquil Thicket (DSC) 318
|
||||
1 Skyfisher Spider (BLC) 261
|
||||
1 Shamanic Revelation (BLC) 237
|
||||
1 Zulaport Cutthroat (BLC) 190
|
||||
1 Nadier's Nightblade (BLC) 184
|
||||
1 Chittering Witch (TDC) 175
|
||||
1 Haywire Mite (DSC) 247
|
||||
1 Deep Forest Hermit (BLC) 213
|
||||
1 Idol of Oblivion (TDC) 319
|
||||
1 Tainted Wood (DSC) 305
|
||||
1 Barren Moor (DSC) 262
|
||||
1 Talisman of Resilience (DSC) 255
|
||||
1 Binding the Old Gods (DSC) 213
|
||||
1 Tireless Provisioner (BLC) 243
|
||||
1 Midgar, City of Mako // Reactor Raid (FIN) 286
|
||||
1 Golgari Signet (DSC) 246
|
||||
1 Morbid Opportunist (TDC) 188
|
||||
1 Swarmyard (BLC) 133
|
||||
1 Twilight Mire (EOC) 189
|
||||
1 Arcane Signet (BLC) 127
|
||||
1 Squirrel Nest (BLC) 239
|
||||
1 Maskwood Nexus (DRC) 132
|
||||
1 The Odd Acorn Gang (BLC) 7 *F*
|
||||
1 Woodland Cemetery (TDC) 412
|
||||
1 Second Harvest (BLC) 123
|
||||
1 Academy Manufactor (BLC) 264
|
||||
1 Sol Ring (BLC) 129
|
||||
1 Scurry of Squirrels (BLC) 33
|
||||
1 Decree of Pain (DSC) 136
|
||||
1 Bastion of Remembrance (TDC) 171
|
||||
1 Grim Backwoods (DSC) 281
|
||||
1 Hazel of the Rootbloom (BLC) 2
|
||||
5 Forest (BLB) 377
|
||||
4 Swamp (BLB) 374
|
||||
4 Forest (BLB) 378
|
||||
3 Swamp (BLB) 373
|
||||
1 Exotic Orchard (FIC) 390
|
||||
1 Ultima (FIN) 38
|
||||
1 Darkwater Catacombs (FIC) 384
|
||||
1 Void Rend (FIC) 331
|
||||
1 Avatar's Wrath (TLA) 12
|
||||
1 Arcane Sanctum (FIC) 373
|
||||
1 Vindicate (FIC) 330
|
||||
1 Overkill (FIN) 109
|
||||
1 Drowned Catacomb (FIC) 388
|
||||
1 Authority of the Consuls (FIC) 232
|
||||
1 School Daze (SPM) 42
|
||||
1 Cleansing Nova (FIC) 235
|
||||
1 Multiversal Passage (SPM) 180
|
||||
1 Choked Estuary (FIC) 379
|
||||
1 Exsanguinate (FIC) 276
|
||||
1 Cornered by Black Mages (FIN) 93
|
||||
1 Frantic Search (TDC) 153
|
||||
1 Evolving Wilds (FIC) 389
|
||||
1 Lethal Scheme (FIC) 277
|
||||
1 Withering Torment (DSK) 124
|
||||
1 Rite of Replication (FIC) 270
|
||||
1 Underground River (FIC) 439
|
||||
1 Archaeomancer's Map (FIC) 230
|
||||
2 Swamp (FIC) 480 *F*
|
||||
1 Vanish from Sight (DSK) 82
|
||||
1 Scavenger Grounds (FIC) 419
|
||||
1 Fetid Heath (FIC) 391
|
||||
1 Reaper's Scythe (FIC) 48
|
||||
1 Brainstorm (FCA) 28
|
||||
1 Urza's Saga (MH2) 259
|
||||
1 Krile Baldesion (FIC) 86
|
||||
1 Swamp (FIN) 301
|
||||
1 Amazing Acrobatics (SPM) 25
|
||||
1 Ash Barrens (FIC) 374
|
||||
1 Riverwalk Technique (TDM) 54
|
||||
1 Dig Through Time (FIC) 263
|
||||
1 Vote Out (EOE) 126
|
||||
1 Syphon Mind (FIC) 288
|
||||
1 Banishing Light (FDN) 138
|
||||
1 Command Beacon (TDC) 352
|
||||
1 Murderous Rider // Swift End (FIC) 279
|
||||
1 Emet-Selch of the Third Seat (FIC) 81
|
||||
1 Sunlit Marsh (FIC) 431
|
||||
1 Dancer's Chakrams (FIC) 17
|
||||
1 Skycloud Expanse (FIC) 423
|
||||
1 Sol Ring (FIC) 359
|
||||
1 Stuck in Summoner's Sanctum (FIN) 76
|
||||
1 Static Snare (TDM) 26
|
||||
1 Fandaniel, Telophoroi Ascian (FIC) 46
|
||||
1 Talisman of Hierarchy (FIC) 365
|
||||
1 Archmage Emeritus (FIC) 261
|
||||
1 Shineshadow Snarl (FIC) 422
|
||||
1 Sunken Hollow (FIC) 429
|
||||
1 Idyllic Beachfront (FIC) 404
|
||||
1 Glacial Fortress (FIC) 400
|
||||
1 Thought Vessel (FIC) 368
|
||||
1 Papalymo Totolymo (FIC) 90
|
||||
1 Path of Ancestry (FIC) 411
|
||||
1 Final Judgment (FIC) 243
|
||||
1 Torrential Gearhulk (FIC) 272
|
||||
1 Propaganda (FIC) 268
|
||||
1 Transpose (FIC) 52
|
||||
1 Snuff Out (FIC) 285
|
||||
1 Dovin's Veto (FCA) 51
|
||||
1 Archmage of Runes (FDN) 30
|
||||
1 Temple of the False God (FIC) 438
|
||||
1 Sunken Ruins (FIC) 430
|
||||
1 Observed Stasis (FIC) 40
|
||||
1 Relic of Legends (FIC) 354
|
||||
1 Contaminated Aquifer (FIC) 383
|
||||
1 Port Town (FIC) 412
|
||||
1 Demolition Field (FIC) 385
|
||||
1 Champions from Beyond (FIC) 11
|
||||
1 Baleful Strix (FIC) 318
|
||||
1 Desolate Mire (FIC) 386
|
||||
1 Isolated Chapel (FIC) 405
|
||||
1 Y'shtola, Night's Blessed (FIC) 7
|
||||
1 Barret, Avalanche Leader (FIC) 472 *F*
|
||||
1 Cloud, Midgar Mercenary (FIN) 564 *F*
|
||||
1 Wakka, Devoted Guardian (FIC) 477 *F*
|
||||
1 Elspeth, Storm Slayer (TDM) 11
|
||||
1 Forest (ECL) 273
|
||||
2 Boneclub Berserker (ECL) 126
|
||||
1 Flitterwing Nuisance (ECL) 48
|
||||
1 Thoughtweft Lieutenant (ECL) 343
|
||||
1 Rime Chill (ECL) 64
|
||||
1 Flock Impostor (ECL) 16
|
||||
1 Reckless Ransacking (ECL) 152
|
||||
1 Requiting Hex (ECL) 116
|
||||
1 Bristlebane Battler (ECL) 168
|
||||
1 Sting-Slinger (ECL) 161
|
||||
1 Surly Farrier (ECL) 196
|
||||
1 Gravelgill Scoundrel (ECL) 53
|
||||
2 Omni-Changeling (ECL) 62
|
||||
1 Ashling's Command (ECL) 205
|
||||
1 Hovel Hurler (ECL) 230
|
||||
1 Perfect Intimidation (ECL) 115
|
||||
1 Chomping Changeling (ECL) 172
|
||||
1 Rhys, the Evermore (ECL) 32
|
||||
1 Pitiless Fists (ECL) 187
|
||||
1 Bark of Doran (ECL) 6
|
||||
1 Lofty Dreams (ECL) 58
|
||||
1 Taster of Wares (ECL) 121
|
||||
1 Tanufel Rimespeaker (ECL) 77
|
||||
1 Blossoming Defense (ECL) 167
|
||||
1 Appeal to Eirdu (ECL) 5
|
||||
2 Dawn-Blessed Pennant (ECL) 254
|
||||
1 Deepway Navigator (ECL) 214
|
||||
1 Iron-Shield Elf (ECL) 108
|
||||
2 Evolving Wilds (ECL) 264
|
||||
2 Giantfall (ECL) 141
|
||||
2 Rimekin Recluse (ECL) 66
|
||||
2 Foraging Wickermaw (ECL) 256
|
||||
2 Lasting Tarfire (ECL) 149
|
||||
2 Elder Auntie (ECL) 133
|
||||
1 Blight Rot (ECL) 89
|
||||
1 Goldmeadow Nomad (ECL) 18
|
||||
1 Mudbutton Cursetosser (ECL) 112
|
||||
1 Silvergill Mentor (ECL) 69
|
||||
1 Noggle Robber (ECL) 237
|
||||
1 Gangly Stompling (ECL) 226
|
||||
1 Spider-Sense (SPM) 284 *F*
|
||||
1 Abigale, Eloquent First-Year (ECL) 204
|
||||
1 Swamp (ECL) 271
|
||||
1 Pallimud (TMP) 195
|
||||
1 Steam Vents (ECL) 267
|
||||
1 Champions of the Shoal (ECL) 46
|
||||
1 End-Blaze Epiphany (ECL) 134
|
||||
1 Dundoolin Weaver (ECL) 175
|
||||
1 Boggart Cursecrafter (ECL) 206
|
||||
1 Mirrormind Crown (ECL) 258
|
||||
1 Celestial Reunion (ECL) 170
|
||||
1 Morcant's Loyalist (ECL) 236
|
||||
2 Assert Perfection (ECL) 164
|
||||
1 Gutsplitter Gang (ECL) 106
|
||||
1 Dream Harvest (ECL) 216
|
||||
1 Eclipsed Kithkin (ECL) 220
|
||||
1 Sizzling Changeling (ECL) 155
|
||||
1 Chitinous Graspling (ECL) 211
|
||||
1 Wanderbrine Preacher (ECL) 41
|
||||
1 Summit Sentinel (ECL) 73
|
||||
1 Mistmeadow Council (ECL) 183
|
||||
1 Burning Curiosity (ECL) 129
|
||||
1 Goliath Daydreamer (ECL) 143
|
||||
1 Morcant's Loyalist (ECL) 341
|
||||
1 Puca's Eye (ECL) 259
|
||||
1 Clachan Festival (ECL) 10
|
||||
74
collection/LWC Display 2026-09-19.txt
Normal file
74
collection/LWC Display 2026-09-19.txt
Normal file
@@ -0,0 +1,74 @@
|
||||
1 Nameless Inversion (ECL) 113
|
||||
1 Lavaleaper (ECL) 318
|
||||
1 Burdened Stoneback (ECL) 8
|
||||
1 Gathering Stone (ECL) 257
|
||||
1 Deepchannel Duelist (ECL) 213
|
||||
1 Gangly Stompling (ECL) 226
|
||||
1 Merrow Skyswimmer (ECL) 234
|
||||
1 Appeal to Eirdu (ECL) 5
|
||||
1 Elder Auntie (ECL) 133
|
||||
1 Sygg's Command (ECL) 244
|
||||
1 Pitiless Fists (ECL) 187
|
||||
1 Encumbered Reejerey (ECL) 14
|
||||
1 Sear (ECL) 154
|
||||
1 Feisty Spikeling (ECL) 223
|
||||
1 Enraged Flamecaster (ECL) 135
|
||||
1 Bile-Vial Boggart (ECL) 87
|
||||
1 Blossombind (ECL) 45
|
||||
1 Trystan, Callous Cultivator // Trystan, Penitent Culler (ECL) 199
|
||||
1 Gutsplitter Gang (ECL) 106
|
||||
1 Glamer Gifter (ECL) 49
|
||||
1 Keep Out (ECL) 19
|
||||
1 Barbed Bloodletter (ECL) 86
|
||||
1 Sun-Dappled Celebrant (ECL) 37
|
||||
1 Wanderwine Distracter (ECL) 82
|
||||
1 Lluwen, Imperfect Naturalist (ECL) 232
|
||||
1 Deceit (ECL) 212
|
||||
1 Iron-Shield Elf (ECL) 108
|
||||
1 Illusion Spinners (ECL) 55
|
||||
1 Kindle the Inner Flame (ECL) 147
|
||||
1 Mischievous Sneakling (ECL) 235
|
||||
1 Stratosoarer (ECL) 72
|
||||
1 Run Away Together (ECL) 67
|
||||
1 Shore Lurker (ECL) 34
|
||||
2 Reckless Ransacking (ECL) 152
|
||||
1 Dawnhand Eulogist (ECL) 99
|
||||
1 Evershrike's Gift (ECL) 15
|
||||
1 Dawnhand Dissident (ECL) 311
|
||||
1 Bark of Doran (ECL) 6
|
||||
1 Gnarlbark Elm (ECL) 103
|
||||
1 Luminollusk (ECL) 179
|
||||
1 Flaring Cinder (ECL) 225
|
||||
1 Dose of Dawnglow (ECL) 100
|
||||
1 Ashling, Rekindled // Ashling, Rimebound (ECL) 124
|
||||
1 Morcant's Eyes (ECL) 185
|
||||
1 Wanderwine Farewell (ECL) 83
|
||||
1 Pyrrhic Strike (ECL) 30
|
||||
1 Chaos Spewer (ECL) 210
|
||||
1 Blighted Blackthorn (ECL) 90
|
||||
1 Great Forest Druid (ECL) 178
|
||||
2 Thoughtweft Charge (ECL) 198
|
||||
2 Unexpected Assistance (ECL) 80
|
||||
2 Safewright Cavalry (ECL) 191
|
||||
3 Bogslither's Embrace (ECL) 94
|
||||
3 Riverguard's Reflexes (ECL) 33
|
||||
2 Unbury (ECL) 123
|
||||
3 Midnight Tilling (ECL) 182
|
||||
2 Flamekin Gildweaver (ECL) 140
|
||||
2 Stalactite Dagger (ECL) 261
|
||||
2 Cinder Strike (ECL) 131
|
||||
2 Lys Alana Informant (ECL) 181
|
||||
2 Reluctant Dounguard (ECL) 31
|
||||
2 Temporal Cleansing (ECL) 78
|
||||
1 Loch Mare (ECL) 57
|
||||
1 Sygg, Wanderwine Wisdom // Sygg, Wanderbrine Shield (ECL) 76
|
||||
1 Moonglove Extractor (ECL) 109
|
||||
1 Wildvine Pummeler (ECL) 203
|
||||
1 Aquitect's Defenses (ECL) 44
|
||||
1 Gallant Fowlknight (ECL) 17
|
||||
1 Wary Farmer (ECL) 251
|
||||
1 Chitinous Graspling (ECL) 211
|
||||
1 Reaping Willow (ECL) 240
|
||||
1 Moon-Vigil Adherents (ECL) 184
|
||||
1 Dawn-Blessed Pennant (ECL) 254
|
||||
1 Unwelcome Sprite (ECL) 81
|
||||
1325
collection_hydrated/artifacts.json
Normal file
1325
collection_hydrated/artifacts.json
Normal file
File diff suppressed because it is too large
Load Diff
20
collection_hydrated/commander.json
Normal file
20
collection_hydrated/commander.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"scryfall_uri": "https://scryfall.com/card/spm/29/doc-ock-sinister-scientist?utm_source=api",
|
||||
"name": "Doc Ock, Sinister Scientist",
|
||||
"mana_cost": "{4}{U}",
|
||||
"cmc": 5.0,
|
||||
"colors": [
|
||||
"U"
|
||||
],
|
||||
"color_identity": [
|
||||
"U"
|
||||
],
|
||||
"type_line": "Legendary Creature \u2014 Human Scientist Villain",
|
||||
"oracle_text": "As long as there are eight or more cards in your graveyard, Doc Ock has base power and toughness 8/8.\nAs long as you control another Villain, Doc Ock has hexproof. (He can't be the target of spells or abilities your opponents control.)",
|
||||
"power": "4",
|
||||
"toughness": "5",
|
||||
"loyalty": null,
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
7131
collection_hydrated/creatures.json
Normal file
7131
collection_hydrated/creatures.json
Normal file
File diff suppressed because it is too large
Load Diff
15380
collection_hydrated/deck.json
Normal file
15380
collection_hydrated/deck.json
Normal file
File diff suppressed because it is too large
Load Diff
1138
collection_hydrated/enchantments.json
Normal file
1138
collection_hydrated/enchantments.json
Normal file
File diff suppressed because it is too large
Load Diff
2252
collection_hydrated/instants.json
Normal file
2252
collection_hydrated/instants.json
Normal file
File diff suppressed because it is too large
Load Diff
1567
collection_hydrated/lands.json
Normal file
1567
collection_hydrated/lands.json
Normal file
File diff suppressed because it is too large
Load Diff
40
collection_hydrated/planeswalkers.json
Normal file
40
collection_hydrated/planeswalkers.json
Normal file
@@ -0,0 +1,40 @@
|
||||
[
|
||||
{
|
||||
"scryfall_uri": "https://scryfall.com/card/eld/191/garruk-cursed-huntsman?utm_source=api",
|
||||
"name": "Garruk, Cursed Huntsman",
|
||||
"mana_cost": "{4}{B}{G}",
|
||||
"cmc": 6.0,
|
||||
"colors": [
|
||||
"B",
|
||||
"G"
|
||||
],
|
||||
"color_identity": [
|
||||
"B",
|
||||
"G"
|
||||
],
|
||||
"type_line": "Legendary Planeswalker \u2014 Garruk",
|
||||
"oracle_text": "0: Create two 2/2 black and green Wolf creature tokens with \"When this token dies, put a loyalty counter on each Garruk you control.\"\n\u22123: Destroy target creature. Draw a card.\n\u22126: You get an emblem with \"Creatures you control get +3/+3 and have trample.\"",
|
||||
"power": null,
|
||||
"toughness": null,
|
||||
"loyalty": "5",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"scryfall_uri": "https://scryfall.com/card/tdm/11/elspeth-storm-slayer?utm_source=api",
|
||||
"name": "Elspeth, Storm Slayer",
|
||||
"mana_cost": "{3}{W}{W}",
|
||||
"cmc": 5.0,
|
||||
"colors": [
|
||||
"W"
|
||||
],
|
||||
"color_identity": [
|
||||
"W"
|
||||
],
|
||||
"type_line": "Legendary Planeswalker \u2014 Elspeth",
|
||||
"oracle_text": "If one or more tokens would be created under your control, twice that many of those tokens are created instead.\n+1: Create a 1/1 white Soldier creature token.\n0: Put a +1/+1 counter on each creature you control. Those creatures gain flying until your next turn.\n\u22123: Destroy target creature an opponent controls with mana value 3 or greater.",
|
||||
"power": null,
|
||||
"toughness": null,
|
||||
"loyalty": "5",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
1921
collection_hydrated/sorceries.json
Normal file
1921
collection_hydrated/sorceries.json
Normal file
File diff suppressed because it is too large
Load Diff
877
deck_analysis.json
Normal file
877
deck_analysis.json
Normal file
@@ -0,0 +1,877 @@
|
||||
{
|
||||
"palamecia": {
|
||||
"Aetherize": 1,
|
||||
"Arcane Signet": 1,
|
||||
"Baron, Airship Kingdom": 1,
|
||||
"Big Score": 1,
|
||||
"Blasphemous Act": 1,
|
||||
"Bond of Insight": 1,
|
||||
"Careful Consideration": 1,
|
||||
"Channeled Force": 1,
|
||||
"Combat Tutorial": 1,
|
||||
"Command Tower": 1,
|
||||
"Consider": 1,
|
||||
"Counterspell": 1,
|
||||
"Curator's Ward": 1,
|
||||
"Curiosity": 1,
|
||||
"Cut Your Losses": 1,
|
||||
"Decaying Time Loop": 1,
|
||||
"Drake Umbra": 1,
|
||||
"Drown in Dreams": 1,
|
||||
"Elixir of Immortality": 1,
|
||||
"Epic Experiment": 1,
|
||||
"Ether": 1,
|
||||
"Everflowing Chalice": 1,
|
||||
"Experimental Overload": 1,
|
||||
"Fact or Fiction": 1,
|
||||
"Fateful Showdown": 1,
|
||||
"Fire Magic": 1,
|
||||
"Firemind Vessel": 1,
|
||||
"Frostboil Snarl": 1,
|
||||
"Full Throttle": 1,
|
||||
"Gandalf's Sanction": 1,
|
||||
"Hedron Archive": 1,
|
||||
"Increasing Confusion": 1,
|
||||
"Isengard Unleashed": 1,
|
||||
"Island": 18,
|
||||
"Izzet Signet": 1,
|
||||
"Mana Geyser": 1,
|
||||
"Mountain": 12,
|
||||
"Mystic Confluence": 1,
|
||||
"Ovika, Enigma Goliath": 1,
|
||||
"Path of the Pyromancer": 1,
|
||||
"Peter Parker's Camera": 1,
|
||||
"Pinnacle Monk // Mystic Peak": 1,
|
||||
"Pirate's Pillage": 1,
|
||||
"Press the Enemy": 1,
|
||||
"Protective Bubble": 1,
|
||||
"Reliquary Tower": 1,
|
||||
"Rewind": 1,
|
||||
"Ring of the Lucii": 1,
|
||||
"Rise from the Tides": 1,
|
||||
"Sahagin": 1,
|
||||
"Seize the Storm": 1,
|
||||
"Shantotto, Tactician Magician": 1,
|
||||
"Shivan Reef": 1,
|
||||
"Snapcaster Mage": 1,
|
||||
"Snort": 1,
|
||||
"Sol Ring": 1,
|
||||
"Spellheart Chimera": 1,
|
||||
"Sulfur Falls": 1,
|
||||
"Summons of Saruman": 1,
|
||||
"Swiftfoot Boots": 1,
|
||||
"Talrand, Sky Summoner": 1,
|
||||
"Tellah, Great Sage": 1,
|
||||
"Tezzeret's Gambit": 1,
|
||||
"The Emperor of Palamecia // The Lord Master of Hell": 1,
|
||||
"The Rollercrusher Ride": 1,
|
||||
"Thousand-Year Storm": 1,
|
||||
"Traumatize": 1,
|
||||
"Ultros, Obnoxious Octopus": 1,
|
||||
"Ur-Golem's Eye": 1,
|
||||
"Vivi Ornitier": 1,
|
||||
"Whispersilk Cloak": 1,
|
||||
"Zephid's Embrace": 1
|
||||
},
|
||||
"choco": {
|
||||
"Abandoned Air Temple": 1,
|
||||
"Adarkar Wastes": 1,
|
||||
"Airborne Aid": 1,
|
||||
"Ambrosia Whiteheart": 1,
|
||||
"An Offer You Can't Refuse": 1,
|
||||
"Arcane Denial": 1,
|
||||
"Ascend from Avernus": 1,
|
||||
"Austere Command": 1,
|
||||
"Balamb Garden, SeeD Academy // Balamb Garden, Airborne": 1,
|
||||
"Bartz and Boko": 1,
|
||||
"Beast Within": 1,
|
||||
"Beastmaster Ascension": 1,
|
||||
"Birds of Paradise": 1,
|
||||
"Brushland": 1,
|
||||
"Canopy Vista": 1,
|
||||
"Choco, Seeker of Paradise": 1,
|
||||
"Chocobo Kick": 1,
|
||||
"Chocobo Racetrack": 1,
|
||||
"City Pigeon": 1,
|
||||
"Command Tower": 1,
|
||||
"Commune with Beavers": 1,
|
||||
"Counterspell": 1,
|
||||
"Cultivate": 1,
|
||||
"Curiosity Crafter": 1,
|
||||
"Demolition Field": 1,
|
||||
"Dusk // Dawn": 1,
|
||||
"Emeria Angel": 1,
|
||||
"Emeria Shepherd": 1,
|
||||
"Empyrean Eagle": 1,
|
||||
"Evolving Wilds": 1,
|
||||
"Exotic Orchard": 1,
|
||||
"Farseek": 1,
|
||||
"Felidar Retreat": 1,
|
||||
"Flurry of Wings": 1,
|
||||
"Forest": 3,
|
||||
"Generous Gift": 1,
|
||||
"Gilded Goose": 1,
|
||||
"Glacial Fortress": 1,
|
||||
"Gwaihir the Windlord": 1,
|
||||
"Gysahl Greens": 1,
|
||||
"Herald's Horn": 1,
|
||||
"Hermes, Overseer of Elpis": 1,
|
||||
"Hinterland Harbor": 1,
|
||||
"Island": 1,
|
||||
"Jackdaw Savior": 1,
|
||||
"Jumbo Cactuar": 1,
|
||||
"Kangee, Sky Warden": 1,
|
||||
"Kangee's Lieutenant": 1,
|
||||
"Kastral, the Windcrested": 1,
|
||||
"Lifecreed Duo": 1,
|
||||
"Meditation Pools": 1,
|
||||
"Murmuration": 1,
|
||||
"Nature's Lore": 1,
|
||||
"Negate": 1,
|
||||
"Patchwork Banner": 1,
|
||||
"Path of Ancestry": 1,
|
||||
"Path to Exile": 1,
|
||||
"Plains": 5,
|
||||
"Plumecreed Escort": 1,
|
||||
"Prairie Stream": 1,
|
||||
"Prishe's Wanderings": 1,
|
||||
"Radiant Grove": 1,
|
||||
"Rampant Growth": 1,
|
||||
"Reach the Horizon": 1,
|
||||
"Reliquary Tower": 1,
|
||||
"Restless Anchorage": 1,
|
||||
"Restoration Magic": 1,
|
||||
"Ride the Shoopuf": 1,
|
||||
"River Hoopoe": 1,
|
||||
"Sazh Katzroy": 1,
|
||||
"Sazh's Chocobo": 1,
|
||||
"Seaside Citadel": 1,
|
||||
"Seaside Haven": 1,
|
||||
"Sevinne's Reclamation": 1,
|
||||
"Sharlayan, Nation of Scholars": 1,
|
||||
"Sidequest: Raise a Chocobo // Black Chocobo": 1,
|
||||
"Sol Ring": 1,
|
||||
"Suburban Sanctuary": 1,
|
||||
"Summon: Choco/Mog": 1,
|
||||
"Summon: Fat Chocobo": 1,
|
||||
"Sunpetal Grove": 1,
|
||||
"Swords to Plowshares": 1,
|
||||
"Talisman of Progress": 1,
|
||||
"Tangled Islet": 1,
|
||||
"Terramorphic Expanse": 1,
|
||||
"The Goose Mother": 1,
|
||||
"Tranquil Landscape": 1,
|
||||
"Traveling Chocobo": 1,
|
||||
"Warden of Evos Isle": 1,
|
||||
"Watcher of the Spheres": 1,
|
||||
"Windurst, Federation Center": 1,
|
||||
"Winged Portent": 1,
|
||||
"Wingmate Roc": 1,
|
||||
"Yavimaya Coast": 1
|
||||
},
|
||||
"hazel": {
|
||||
"Academy Manufactor": 1,
|
||||
"Arasta of the Endless Web": 1,
|
||||
"Arcane Signet": 1,
|
||||
"Barren Moor": 1,
|
||||
"Bastion of Remembrance": 1,
|
||||
"Beastmaster Ascension": 1,
|
||||
"Beledros Witherbloom": 1,
|
||||
"Binding the Old Gods": 1,
|
||||
"Bojuka Bog": 1,
|
||||
"Cache Grab": 1,
|
||||
"Casualties of War": 1,
|
||||
"Chatterfang, Squirrel General": 1,
|
||||
"Chatterstorm": 1,
|
||||
"Chittering Witch": 1,
|
||||
"Chitterspitter": 1,
|
||||
"Command Tower": 1,
|
||||
"Deadly Dispute": 1,
|
||||
"Decree of Pain": 1,
|
||||
"Deep Forest Hermit": 1,
|
||||
"End-Raze Forerunners": 1,
|
||||
"Evolving Wilds": 1,
|
||||
"Exotic Orchard": 1,
|
||||
"Forest": 9,
|
||||
"Garruk, Cursed Huntsman": 1,
|
||||
"Gilded Goose": 1,
|
||||
"Golgari Rot Farm": 1,
|
||||
"Golgari Signet": 1,
|
||||
"Gourmand's Talent": 1,
|
||||
"Grim Backwoods": 1,
|
||||
"Haunted Mire": 1,
|
||||
"Haywire Mite": 1,
|
||||
"Hazel of the Rootbloom": 1,
|
||||
"Hazel's Brewmaster": 1,
|
||||
"Honored Dreyleader": 1,
|
||||
"Idol of Oblivion": 1,
|
||||
"Insatiable Frugivore": 1,
|
||||
"Jungle Hollow": 1,
|
||||
"Llanowar Wastes": 1,
|
||||
"Maelstrom Pulse": 1,
|
||||
"Maskwood Nexus": 1,
|
||||
"Midgar, City of Mako // Reactor Raid": 1,
|
||||
"Moldervine Reclamation": 1,
|
||||
"Moonstone Eulogist": 1,
|
||||
"Morbid Opportunist": 1,
|
||||
"Nadier's Nightblade": 1,
|
||||
"Necroblossom Snarl": 1,
|
||||
"Nested Shambler": 1,
|
||||
"Ogre Slumlord": 1,
|
||||
"Oran-Rief, the Vastwood": 1,
|
||||
"Path of Ancestry": 1,
|
||||
"Plumb the Forbidden": 1,
|
||||
"Poison-Tip Archer": 1,
|
||||
"Prosperous Innkeeper": 1,
|
||||
"Putrefy": 1,
|
||||
"Ravenous Squirrel": 1,
|
||||
"Rootcast Apprenticeship": 1,
|
||||
"Saw in Half": 1,
|
||||
"Scurry of Squirrels": 1,
|
||||
"Second Harvest": 1,
|
||||
"Shamanic Revelation": 1,
|
||||
"Skullclamp": 1,
|
||||
"Skyfisher Spider": 1,
|
||||
"Sol Ring": 1,
|
||||
"Squirrel Nest": 1,
|
||||
"Squirrel Sovereign": 1,
|
||||
"Swamp": 7,
|
||||
"Swarmyard": 1,
|
||||
"Swarmyard Massacre": 1,
|
||||
"Sword of the Squeak": 1,
|
||||
"Tainted Wood": 1,
|
||||
"Talisman of Resilience": 1,
|
||||
"Tear Asunder": 1,
|
||||
"Temple of Malady": 1,
|
||||
"Terramorphic Expanse": 1,
|
||||
"The Odd Acorn Gang": 1,
|
||||
"Tireless Provisioner": 1,
|
||||
"Toski, Bearer of Secrets": 1,
|
||||
"Tranquil Thicket": 1,
|
||||
"Twilight Mire": 1,
|
||||
"Viridescent Bog": 1,
|
||||
"Windgrace's Judgment": 1,
|
||||
"Woe Strider": 1,
|
||||
"Wolfwillow Haven": 1,
|
||||
"Woodland Cemetery": 1,
|
||||
"Worthy Cost": 1,
|
||||
"Zulaport Cutthroat": 1
|
||||
},
|
||||
"yshtola": {
|
||||
"Amazing Acrobatics": 1,
|
||||
"Arcane Sanctum": 1,
|
||||
"Archaeomancer's Map": 1,
|
||||
"Archmage Emeritus": 1,
|
||||
"Archmage of Runes": 1,
|
||||
"Ash Barrens": 1,
|
||||
"Authority of the Consuls": 1,
|
||||
"Avatar's Wrath": 1,
|
||||
"Baleful Strix": 1,
|
||||
"Banishing Light": 1,
|
||||
"Black Mage's Rod": 1,
|
||||
"Blitzball": 1,
|
||||
"Blue Mage's Cane": 1,
|
||||
"Brainstorm": 1,
|
||||
"Champions from Beyond": 1,
|
||||
"Choked Estuary": 1,
|
||||
"Circle of Power": 1,
|
||||
"Cleansing Nova": 1,
|
||||
"Command Beacon": 1,
|
||||
"Contaminated Aquifer": 1,
|
||||
"Cornered by Black Mages": 1,
|
||||
"Curiosity": 1,
|
||||
"Dancer's Chakrams": 1,
|
||||
"Darkwater Catacombs": 1,
|
||||
"Demolition Field": 1,
|
||||
"Desolate Mire": 1,
|
||||
"Dig Through Time": 1,
|
||||
"Dovin's Veto": 1,
|
||||
"Drowned Catacomb": 1,
|
||||
"Emet-Selch of the Third Seat": 1,
|
||||
"Evolving Wilds": 1,
|
||||
"Exotic Orchard": 1,
|
||||
"Exsanguinate": 1,
|
||||
"Fandaniel, Telophoroi Ascian": 1,
|
||||
"Fetid Heath": 1,
|
||||
"Fight On!": 1,
|
||||
"Final Judgment": 1,
|
||||
"Firemind Vessel": 1,
|
||||
"Frantic Search": 1,
|
||||
"Glacial Fortress": 1,
|
||||
"Hedron Archive": 1,
|
||||
"Idyllic Beachfront": 1,
|
||||
"Island": 2,
|
||||
"Isolated Chapel": 1,
|
||||
"Krile Baldesion": 1,
|
||||
"Lethal Scheme": 1,
|
||||
"Multiversal Passage": 1,
|
||||
"Murderous Rider // Swift End": 1,
|
||||
"Observed Stasis": 1,
|
||||
"Overkill": 1,
|
||||
"Papalymo Totolymo": 1,
|
||||
"Path of Ancestry": 1,
|
||||
"Plains": 3,
|
||||
"Port Town": 1,
|
||||
"Prairie Stream": 1,
|
||||
"Propaganda": 1,
|
||||
"Reaper's Scythe": 1,
|
||||
"Relic of Legends": 1,
|
||||
"Reliquary Tower": 1,
|
||||
"Rewind": 1,
|
||||
"Ring of the Lucii": 1,
|
||||
"Risky Research": 1,
|
||||
"Rite of Replication": 1,
|
||||
"Riverwalk Technique": 1,
|
||||
"Scavenger Grounds": 1,
|
||||
"School Daze": 1,
|
||||
"Shineshadow Snarl": 1,
|
||||
"Skycloud Expanse": 1,
|
||||
"Snuff Out": 1,
|
||||
"Sol Ring": 1,
|
||||
"Static Snare": 1,
|
||||
"Stuck in Summoner's Sanctum": 1,
|
||||
"Sublime Epiphany": 1,
|
||||
"Sunken Hollow": 1,
|
||||
"Sunken Ruins": 1,
|
||||
"Sunlit Marsh": 1,
|
||||
"Swamp": 2,
|
||||
"Swords to Plowshares": 1,
|
||||
"Syphon Mind": 1,
|
||||
"Talisman of Hierarchy": 1,
|
||||
"Temple of the False God": 1,
|
||||
"Thought Vessel": 1,
|
||||
"Torrential Gearhulk": 1,
|
||||
"Transpose": 1,
|
||||
"Ultima": 1,
|
||||
"Underground River": 1,
|
||||
"Ur-Golem's Eye": 1,
|
||||
"Urza's Saga": 1,
|
||||
"Vanish from Sight": 1,
|
||||
"Vincent's Limit Break": 1,
|
||||
"Vindicate": 1,
|
||||
"Void Rend": 1,
|
||||
"Vote Out": 1,
|
||||
"White Auracite": 1,
|
||||
"Withering Torment": 1,
|
||||
"Y'shtola, Night's Blessed": 1
|
||||
},
|
||||
"available": [
|
||||
"Magitek Infantry",
|
||||
"Resentful Revelation",
|
||||
"Venom's Hunger",
|
||||
"Genji Glove",
|
||||
"Auron's Inspiration",
|
||||
"Slavering Branchsnapper",
|
||||
"Retrieve the Esper",
|
||||
"Red Herring",
|
||||
"Firebrand Archer",
|
||||
"Llanowar Elves",
|
||||
"Wartime Protestors",
|
||||
"Sanar, Innovative First-Year",
|
||||
"Coeurl",
|
||||
"Azula, Cunning Usurper",
|
||||
"Glimmerburst",
|
||||
"Kraven's Cats",
|
||||
"Ringing Strike Mastery",
|
||||
"Unexpected Request",
|
||||
"Monk's Fist",
|
||||
"You're Not Alone",
|
||||
"Fate of the Sun-Cryst",
|
||||
"Dwarven Castle Guard",
|
||||
"Into the Story",
|
||||
"Good-Fortune Unicorn",
|
||||
"Venser, Shaper Savant",
|
||||
"Il Mheg Pixie",
|
||||
"Yuyan Archers",
|
||||
"Summon: Primal Odin",
|
||||
"Call the Mountain Chocobo",
|
||||
"Long River's Pull",
|
||||
"Mornsong Aria",
|
||||
"Embermouth Sentinel",
|
||||
"The Prima Vista",
|
||||
"Cackling Prowler",
|
||||
"Kithkeeper",
|
||||
"Lluwen, Imperfect Naturalist",
|
||||
"Cinder Strike",
|
||||
"Hog-Monkey",
|
||||
"Kukemssa Serpent",
|
||||
"Fire Nation Engineer",
|
||||
"Blossombind",
|
||||
"Summon: G.F. Ifrit",
|
||||
"Enduring Curiosity",
|
||||
"Triple Triad",
|
||||
"Hraesvelgr of the First Brood",
|
||||
"Wary Farmer",
|
||||
"Close Encounter",
|
||||
"Firdoch Core",
|
||||
"Origin of Metalbending",
|
||||
"Qiqirn Merchant",
|
||||
"Friendly Ghost",
|
||||
"Samurai's Katana",
|
||||
"Boggart Mischief",
|
||||
"Apothecary Stomper",
|
||||
"White Mage's Staff",
|
||||
"Sleep Magic",
|
||||
"Giant Growth",
|
||||
"Locke Cole",
|
||||
"Cloudbound Moogle",
|
||||
"Brazen Scourge",
|
||||
"Scour for Scrap",
|
||||
"Abundant Growth",
|
||||
"Paladin's Arms",
|
||||
"Syncopate",
|
||||
"Hecteyes",
|
||||
"Private Eye",
|
||||
"Vayne's Treachery",
|
||||
"Judgment Bolt",
|
||||
"Boggart Prankster",
|
||||
"Namazu Trader",
|
||||
"Plaguecrafter",
|
||||
"Pumpkin Bombardment",
|
||||
"Rydia's Return",
|
||||
"Rhino, Barreling Brute",
|
||||
"Lingering Souls",
|
||||
"Haste Magic",
|
||||
"Boilerbilges Ripper",
|
||||
"Magic Damper",
|
||||
"Unwanted Remake",
|
||||
"Momo, Friendly Flier",
|
||||
"Perigee Beckoner",
|
||||
"Boomerang Basics",
|
||||
"Summon: Fenrir",
|
||||
"Cobbled Wings",
|
||||
"Brigid's Command",
|
||||
"Campus Guide",
|
||||
"World Map",
|
||||
"Virulent Emissary",
|
||||
"Blazing Bomb",
|
||||
"Omega, Heartless Evolution",
|
||||
"The Fire Crystal",
|
||||
"Weapons Vendor",
|
||||
"Barret Wallace",
|
||||
"Agent of Kotis",
|
||||
"Cut a Deal",
|
||||
"Scorpion Sentinel",
|
||||
"Loporrit Scout",
|
||||
"Disturbing Mirth",
|
||||
"Sarkhan's Resolve",
|
||||
"Tiger-Seal",
|
||||
"Ice Magic",
|
||||
"Shadow Urchin",
|
||||
"Stoic Grove-Guide",
|
||||
"Changeling Wayfinder",
|
||||
"Unforgiving Aim",
|
||||
"Jenova, Ancient Calamity",
|
||||
"Impossible Inferno",
|
||||
"Scout the City",
|
||||
"Poison the Waters",
|
||||
"Lightning, Security Sergeant",
|
||||
"Airship Crash",
|
||||
"Roiling Dragonstorm",
|
||||
"Evershrike's Gift",
|
||||
"Vanille, Cheerful l'Cie",
|
||||
"Kyoshi Battle Fan",
|
||||
"Rally the Monastery",
|
||||
"Flight-Deck Coordinator",
|
||||
"Moogles' Valor",
|
||||
"Meanders Guide",
|
||||
"Nebelgast Herald",
|
||||
"Qutrub Forayer",
|
||||
"Mysidian Elder",
|
||||
"Heritage Reclamation",
|
||||
"Hermitic Herbalist",
|
||||
"House Cartographer",
|
||||
"Waterbending Lesson",
|
||||
"Turtle-Duck",
|
||||
"Perennation",
|
||||
"Reluctant Dounguard",
|
||||
"Razorkin Hordecaller",
|
||||
"Wraith, Vicious Vigilante",
|
||||
"Ahriman",
|
||||
"Accumulate Wisdom",
|
||||
"Dragoon's Wyvern",
|
||||
"Flamekin Gildweaver",
|
||||
"Keep Out",
|
||||
"Elspeth, Storm Slayer",
|
||||
"G'raha Tia",
|
||||
"Reanimate",
|
||||
"Tweeze",
|
||||
"Eirdu, Carrier of Dawn // Isilu, Carrier of Twilight",
|
||||
"Festerhide Boar",
|
||||
"Temporal Cleansing",
|
||||
"Hypnotic Sprite // Mesmeric Glare",
|
||||
"Coral Sword",
|
||||
"Rebellious Captives",
|
||||
"Deepchannel Duelist",
|
||||
"Sabotender",
|
||||
"Merrow Skyswimmer",
|
||||
"Iron Giant",
|
||||
"Magitek Armor",
|
||||
"Dawnhand Eulogist",
|
||||
"Frontline War-Rager",
|
||||
"Yip Yip!",
|
||||
"Gladiolus Amicitia",
|
||||
"Compassionate Healer",
|
||||
"Bard's Bow",
|
||||
"Kulrath Mystic",
|
||||
"Wakka, Devoted Guardian",
|
||||
"Kinbinding",
|
||||
"Summon: Primal Garuda",
|
||||
"Summon: Good King Mog XII",
|
||||
"Spider-Ham, Peter Porker",
|
||||
"Canyon Crawler",
|
||||
"Syr Konrad, the Grim",
|
||||
"Wanderwine Farewell",
|
||||
"Darkness Descends",
|
||||
"Cryptid Inspector",
|
||||
"Dragonback Lancer",
|
||||
"Impolite Entrance",
|
||||
"Vial Smasher the Fierce",
|
||||
"Blitzball Shot",
|
||||
"Aerith Rescue Mission",
|
||||
"Kyoshi Warriors",
|
||||
"Emet-Selch, Unsundered // Hades, Sorcerer of Eld",
|
||||
"Badgermole",
|
||||
"Crux of Fate",
|
||||
"Dreams of Laguna",
|
||||
"Merchant of Many Hats",
|
||||
"Lightning Strike",
|
||||
"Stratosoarer",
|
||||
"Jill, Shiva's Dominant // Shiva, Warden of Ice",
|
||||
"Leyline Axe",
|
||||
"Eusocial Engineering",
|
||||
"Alesha's Legacy",
|
||||
"Terminal Velocity",
|
||||
"Undercity Dire Rat",
|
||||
"Scarblade's Malice",
|
||||
"Campsite Cuisine",
|
||||
"Murder",
|
||||
"Cunning Maneuver",
|
||||
"Mechanical Mobster",
|
||||
"Temporal Intervention",
|
||||
"Rydia, Summoner of Mist",
|
||||
"Barbed Bloodletter",
|
||||
"Feisty Spikeling",
|
||||
"Mischievous Sneakling",
|
||||
"Dragonclaw Strike",
|
||||
"Ostrich-Horse",
|
||||
"Valkyrie Aerial Unit",
|
||||
"Minwu, White Mage",
|
||||
"Urianger Augurelt",
|
||||
"Eject",
|
||||
"Wall Crawl",
|
||||
"Glider Kids",
|
||||
"Summon: G.F. Cerberus",
|
||||
"Jet's Brainwashing",
|
||||
"Dragoon's Lance",
|
||||
"Zenos yae Galvus // Shinryu, Transcendent Rival",
|
||||
"Cargo Ship",
|
||||
"Great Forest Druid",
|
||||
"Relentless X-ATM092",
|
||||
"Supportive Parents",
|
||||
"Malboro",
|
||||
"Corroding Dragonstorm",
|
||||
"Spiral into Solitude",
|
||||
"Thunder Magic",
|
||||
"Chaos Spewer",
|
||||
"Sower of Chaos",
|
||||
"Beetle-Headed Merchants",
|
||||
"Uncharted Voyage",
|
||||
"Giant Koi",
|
||||
"Witness Protection",
|
||||
"Lie in Wait",
|
||||
"The Boulder, Ready to Rumble",
|
||||
"Northern Air Temple",
|
||||
"Ultima Weapon",
|
||||
"Lyse Hext",
|
||||
"Hildibrand Manderville // Gentleman's Rise",
|
||||
"Lys Alana Dignitary",
|
||||
"Eye of Nidhogg",
|
||||
"Seize Opportunity",
|
||||
"Lunatic Pandora",
|
||||
"Timid Shieldbearer",
|
||||
"From Father to Son",
|
||||
"Buzzard-Wasp Colony",
|
||||
"Enraged Flamecaster",
|
||||
"Cloud of Darkness",
|
||||
"Crossroads Watcher",
|
||||
"Magic Pot",
|
||||
"Choco-Comet",
|
||||
"Protective Response",
|
||||
"Kulrath Zealot",
|
||||
"Heirloom Auntie",
|
||||
"Faebloom Trick",
|
||||
"Surveillance Monitor",
|
||||
"Hill Gigas",
|
||||
"Sami, Ship's Engineer",
|
||||
"Red Mage's Rapier",
|
||||
"Retched Wretch",
|
||||
"Pestered Wellguard",
|
||||
"Spectral Snatcher",
|
||||
"Flash Thompson, Spider-Fan",
|
||||
"Shinra Reinforcements",
|
||||
"Brambleback Brute",
|
||||
"Unburied Earthcarver",
|
||||
"Dazzling Angel",
|
||||
"Nightmare Sower",
|
||||
"Ultimecia, Time Sorceress // Ultimecia, Omnipotent",
|
||||
"Jecht, Reluctant Guardian // Braska's Final Aeon",
|
||||
"Liminal Hold",
|
||||
"Spider-Rex, Daring Dino",
|
||||
"Cloud, Midgar Mercenary",
|
||||
"Phoenix Down",
|
||||
"Thancred Waters",
|
||||
"Dark Knight's Greatsword",
|
||||
"Gilgamesh, Master-at-Arms",
|
||||
"Tidus, Blitzball Star",
|
||||
"Bite Down on Crime",
|
||||
"Lys Alana Informant",
|
||||
"Erudite Wizard",
|
||||
"Run Away Together",
|
||||
"Tunnel Tipster",
|
||||
"Spider-Man No More",
|
||||
"Trystan's Command",
|
||||
"Rinoa Heartilly",
|
||||
"Veteran Survivor",
|
||||
"The Final Days",
|
||||
"Rosa, Resolute White Mage",
|
||||
"Soul-Shackled Zombie",
|
||||
"Adelbert Steiner",
|
||||
"Freya Crescent",
|
||||
"G'raha Tia, Scion Reborn",
|
||||
"Jeong Jeong's Deserters",
|
||||
"Ice Flan",
|
||||
"Instant Ramen",
|
||||
"Aerith Gainsborough",
|
||||
"Allies at Last",
|
||||
"Gallant Fowlknight",
|
||||
"Serah Farron // Crystallized Serah",
|
||||
"Grappling Kraken",
|
||||
"Ardbert, Warrior of Darkness",
|
||||
"Midnight Tilling",
|
||||
"Black Waltz No. 3",
|
||||
"Balthier and Fran",
|
||||
"Mardu Devotee",
|
||||
"Light of Judgment",
|
||||
"Catharsis",
|
||||
"Rocky Rebuke",
|
||||
"Don't Make a Sound",
|
||||
"Subway Train",
|
||||
"Vinebred Brawler",
|
||||
"Caught Red-Handed",
|
||||
"Axgard Cavalry",
|
||||
"Clachan Festival",
|
||||
"Vicious Clown",
|
||||
"Guru Pathik",
|
||||
"Gilt-Leaf's Embrace",
|
||||
"Dashing Bloodsucker",
|
||||
"Gaelicat",
|
||||
"Sandworm",
|
||||
"Spider-Suit",
|
||||
"Huntmaster of the Fells // Ravager of the Fells",
|
||||
"Queen Brahne",
|
||||
"Shambling Cie'th",
|
||||
"Bearer of Glory",
|
||||
"Sage's Nouliths",
|
||||
"Southern Air Temple",
|
||||
"Sun-Dappled Celebrant",
|
||||
"Gristle Glutton",
|
||||
"Burglar Rat",
|
||||
"Balmor, Battlemage Captain",
|
||||
"Watery Grasp",
|
||||
"Grub's Command",
|
||||
"Zuko's Exile",
|
||||
"Noggle the Mind",
|
||||
"Light Up the Stage",
|
||||
"Coveted Jewel",
|
||||
"Safewright Cavalry",
|
||||
"Random Encounter",
|
||||
"Archghoul of Thraben",
|
||||
"Strength of Arms",
|
||||
"Basilica Stalker",
|
||||
"Cloud, Planet's Champion",
|
||||
"Prismatic Undercurrents",
|
||||
"Diamond Weapon",
|
||||
"Claws Out",
|
||||
"Estinien Varlineau",
|
||||
"Cracked Skull",
|
||||
"Zodiark, Umbral God",
|
||||
"Doc Ock, Sinister Scientist",
|
||||
"Gigantoad",
|
||||
"The Masamune",
|
||||
"Daily Bugle Reporters",
|
||||
"Vincent Valentine // Galian Beast",
|
||||
"Chaos Shrine's Black Crystal",
|
||||
"Octopus Form",
|
||||
"Beatrix, Loyal General",
|
||||
"Tireless Tracker",
|
||||
"Stalactite Dagger",
|
||||
"Unsettling Twins",
|
||||
"Fatal Fissure",
|
||||
"Corrupt Court Official",
|
||||
"Backslide",
|
||||
"Platypus-Bear",
|
||||
"Anafenza, Unyielding Lineage",
|
||||
"Dai Li Agents",
|
||||
"Wild Unraveling",
|
||||
"Puca's Eye",
|
||||
"Reno and Rude",
|
||||
"Evil Reawakened",
|
||||
"Wolfbat",
|
||||
"Razor Rings",
|
||||
"Flame-Chain Mauler",
|
||||
"June, Bounty Hunter",
|
||||
"Giott, King of the Dwarves",
|
||||
"Suplex",
|
||||
"Butcher's Cleaver",
|
||||
"Abandon Attachments",
|
||||
"Cactuar",
|
||||
"Unexpected Assistance",
|
||||
"Spider-Islanders",
|
||||
"Auroral Procession",
|
||||
"Due Diligence",
|
||||
"Excalibur II",
|
||||
"Laughing Mad",
|
||||
"Fire Nation Raider",
|
||||
"Enter the Avatar State",
|
||||
"Combustion Man",
|
||||
"Security Bypass",
|
||||
"Boggart Cursecrafter",
|
||||
"The Crystal's Chosen",
|
||||
"Messenger Hawk",
|
||||
"Firebending Lesson",
|
||||
"Breaching Dragonstorm",
|
||||
"It'll Quench Ya!",
|
||||
"Battle Menu",
|
||||
"Fear of Isolation",
|
||||
"Deserter's Disciple",
|
||||
"Boldwyr Aggressor",
|
||||
"Sunpearl Kirin",
|
||||
"Barret, Avalanche Leader",
|
||||
"Ravenous Amulet",
|
||||
"Glamermite",
|
||||
"Master Piandao",
|
||||
"Feral Deathgorger // Dusk Sight",
|
||||
"Dream Seizer",
|
||||
"Smuggler's Copter",
|
||||
"Stalwart Successor",
|
||||
"Meticulous Artisan",
|
||||
"Curious Farm Animals",
|
||||
"Kalonian Twingrove",
|
||||
"Twinflame Travelers",
|
||||
"Whoosh!",
|
||||
"Venom, Evil Unleashed",
|
||||
"Exdeath, Void Warlock // Neo Exdeath, Dimension's End",
|
||||
"Cycle of Renewal",
|
||||
"Moonglove Extractor",
|
||||
"Crystal Fragments // Summon: Alexander",
|
||||
"Damage Control Crew",
|
||||
"Aang's Journey",
|
||||
"Explosive Prodigy",
|
||||
"Gran Pulse Ochu",
|
||||
"Uncle Iroh",
|
||||
"Mongoose Lizard",
|
||||
"Sultai Devotee",
|
||||
"Trystan, Callous Cultivator // Trystan, Penitent Culler",
|
||||
"Tributary Vaulter",
|
||||
"Phantom Train",
|
||||
"Sidequest: Play Blitzball // World Champion, Celestial Weapon",
|
||||
"Connecting the Dots",
|
||||
"Al Bhed Salvagers",
|
||||
"Warrior's Sword",
|
||||
"Superior Foes of Spider-Man",
|
||||
"Riverguard's Reflexes",
|
||||
"Coliseum Behemoth",
|
||||
"Lost Days",
|
||||
"Alisaie Leveilleur",
|
||||
"Walltop Sentries",
|
||||
"Hinterland Logger // Timber Shredder",
|
||||
"Summon: Shiva",
|
||||
"Suki, Kyoshi Warrior",
|
||||
"Wildwood Scourge",
|
||||
"Blood Petal Celebrant",
|
||||
"Tempest Hawk",
|
||||
"Monastery Messenger",
|
||||
"Gogo, Mysterious Mime",
|
||||
"Flaring Cinder",
|
||||
"Voracious Tome-Skimmer",
|
||||
"Goobbue Gardener",
|
||||
"Aquitect's Defenses",
|
||||
"Sidequest: Catch a Fish // Cooking Campsite",
|
||||
"Demon Wall",
|
||||
"Quistis Trepe",
|
||||
"Shore Lurker",
|
||||
"Gogo, Master of Mimicry",
|
||||
"Town Greeter",
|
||||
"Reputable Merchant",
|
||||
"Gnarlbark Elm",
|
||||
"Dai Li Indoctrination",
|
||||
"Fatal Push",
|
||||
"Rooftop Percher",
|
||||
"Ignis Scientia",
|
||||
"Balamb T-Rexaur",
|
||||
"Meathook Massacre II",
|
||||
"Gaius van Baelsar",
|
||||
"Meat Locker // Drowned Diner",
|
||||
"Tiger-Dillo",
|
||||
"Boulder Dash",
|
||||
"Fang, Fearless l'Cie",
|
||||
"Vibrance",
|
||||
"Scarblade Scout",
|
||||
"Item Shopkeep",
|
||||
"Stolen Uniform",
|
||||
"Invasion Submersible",
|
||||
"Shock Brigade",
|
||||
"Spider-Bot",
|
||||
"Clash of the Eikons",
|
||||
"Gravblade Heavy",
|
||||
"Earth Kingdom Jailer",
|
||||
"Rainveil Rejuvenator",
|
||||
"Mai, Scornful Striker",
|
||||
"The Mechanist, Aerial Artisan",
|
||||
"Tersa Lightshatter",
|
||||
"Zuko, Conflicted",
|
||||
"Encumbered Reejerey",
|
||||
"Crypt Feaster",
|
||||
"Delivery Moogle",
|
||||
"Slash of Light",
|
||||
"Tend the Sprigs",
|
||||
"Cryogen Relic",
|
||||
"Wanderwine Distracter",
|
||||
"Spider-Gwen, Free Spirit",
|
||||
"Prideful Feastling",
|
||||
"Bogslither's Embrace",
|
||||
"Thinking Cap",
|
||||
"Palladium Myr",
|
||||
"Salt Road Packbeast",
|
||||
"Clement, the Worrywort",
|
||||
"Get Out",
|
||||
"Arachne, Psionic Weaver",
|
||||
"Abundant Maw",
|
||||
"Rook Turret",
|
||||
"Tome of Legends",
|
||||
"Garland, Knight of Cornelia // Chaos, the Endless",
|
||||
"Alphinaud Leveilleur",
|
||||
"Shattered Wings",
|
||||
"Taxi Driver",
|
||||
"Pirate Peddlers",
|
||||
"Swat Away",
|
||||
"Extract a Confession",
|
||||
"Relm's Sketching",
|
||||
"Garnet, Princess of Alexandria",
|
||||
"Killing Wave",
|
||||
"Sephiroth's Intervention",
|
||||
"Stinging Scorpion",
|
||||
"Sidequest: Card Collection // Magicked Card",
|
||||
"Kraven's Last Hunt",
|
||||
"Tataru Taru",
|
||||
"Boar-q-pine",
|
||||
"Bile-Vial Boggart",
|
||||
"Earthbending Lesson",
|
||||
"Ashling, Rekindled // Ashling, Rimebound",
|
||||
"Bloodline Bidding",
|
||||
"Talisman of Dominance",
|
||||
"Blighted Blackthorn",
|
||||
"Astrologian's Planisphere"
|
||||
]
|
||||
}
|
||||
102
decks/choco.json
Normal file
102
decks/choco.json
Normal file
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"name": "Choco",
|
||||
"commander": "Choco, Seeker of Paradise",
|
||||
"colors": ["U", "G", "W"],
|
||||
"archetype": "Bird Tribal Landfall",
|
||||
"cards": {
|
||||
"Abandoned Air Temple": 1,
|
||||
"Adarkar Wastes": 1,
|
||||
"Airborne Aid": 1,
|
||||
"Ambrosia Whiteheart": 1,
|
||||
"An Offer You Can't Refuse": 1,
|
||||
"Arcane Denial": 1,
|
||||
"Ascend from Avernus": 1,
|
||||
"Austere Command": 1,
|
||||
"Balamb Garden, SeeD Academy // Balamb Garden, Airborne": 1,
|
||||
"Bartz and Boko": 1,
|
||||
"Beast Within": 1,
|
||||
"Beastmaster Ascension": 1,
|
||||
"Birds of Paradise": 1,
|
||||
"Brushland": 1,
|
||||
"Canopy Vista": 1,
|
||||
"Choco, Seeker of Paradise": 1,
|
||||
"Chocobo Kick": 1,
|
||||
"Chocobo Racetrack": 1,
|
||||
"City Pigeon": 1,
|
||||
"Command Tower": 1,
|
||||
"Commune with Beavers": 1,
|
||||
"Counterspell": 1,
|
||||
"Cultivate": 1,
|
||||
"Curiosity Crafter": 1,
|
||||
"Demolition Field": 1,
|
||||
"Dusk // Dawn": 1,
|
||||
"Emeria Angel": 1,
|
||||
"Emeria Shepherd": 1,
|
||||
"Empyrean Eagle": 1,
|
||||
"Evolving Wilds": 2,
|
||||
"Exotic Orchard": 1,
|
||||
"Farseek": 1,
|
||||
"Felidar Retreat": 1,
|
||||
"Flurry of Wings": 1,
|
||||
"Forest": 3,
|
||||
"Generous Gift": 1,
|
||||
"Gilded Goose": 1,
|
||||
"Glacial Fortress": 1,
|
||||
"Gwaihir the Windlord": 1,
|
||||
"Gysahl Greens": 1,
|
||||
"Herald's Horn": 1,
|
||||
"Hermes, Overseer of Elpis": 1,
|
||||
"Hinterland Harbor": 1,
|
||||
"Island": 1,
|
||||
"Jackdaw Savior": 1,
|
||||
"Jumbo Cactuar": 1,
|
||||
"Kangee, Sky Warden": 1,
|
||||
"Kangee's Lieutenant": 1,
|
||||
"Kastral, the Windcrested": 1,
|
||||
"Lifecreed Duo": 1,
|
||||
"Meditation Pools": 1,
|
||||
"Murmuration": 1,
|
||||
"Nature's Lore": 1,
|
||||
"Negate": 1,
|
||||
"Patchwork Banner": 1,
|
||||
"Path of Ancestry": 1,
|
||||
"Path to Exile": 1,
|
||||
"Plains": 5,
|
||||
"Plumecreed Escort": 1,
|
||||
"Prairie Stream": 1,
|
||||
"Prishe's Wanderings": 1,
|
||||
"Radiant Grove": 1,
|
||||
"Rampant Growth": 1,
|
||||
"Reach the Horizon": 1,
|
||||
"Reliquary Tower": 1,
|
||||
"Restless Anchorage": 1,
|
||||
"Restoration Magic": 1,
|
||||
"Ride the Shoopuf": 1,
|
||||
"River Hoopoe": 1,
|
||||
"Sazh Katzroy": 1,
|
||||
"Sazh's Chocobo": 1,
|
||||
"Seaside Citadel": 1,
|
||||
"Seaside Haven": 1,
|
||||
"Sevinne's Reclamation": 1,
|
||||
"Sharlayan, Nation of Scholars": 1,
|
||||
"Sidequest: Raise a Chocobo // Black Chocobo": 1,
|
||||
"Sol Ring": 1,
|
||||
"Suburban Sanctuary": 1,
|
||||
"Summon: Choco/Mog": 1,
|
||||
"Summon: Fat Chocobo": 1,
|
||||
"Sunpetal Grove": 1,
|
||||
"Swords to Plowshares": 1,
|
||||
"Talisman of Progress": 1,
|
||||
"Tangled Islet": 1,
|
||||
"Terramorphic Expanse": 1,
|
||||
"The Goose Mother": 1,
|
||||
"Tranquil Landscape": 1,
|
||||
"Traveling Chocobo": 1,
|
||||
"Warden of Evos Isle": 1,
|
||||
"Watcher of the Spheres": 1,
|
||||
"Windurst, Federation Center": 1,
|
||||
"Winged Portent": 1,
|
||||
"Wingmate Roc": 1,
|
||||
"Yavimaya Coast": 1
|
||||
}
|
||||
}
|
||||
94
decks/hazel.json
Normal file
94
decks/hazel.json
Normal file
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"name": "Hazel",
|
||||
"commander": "Hazel of the Rootbloom",
|
||||
"colors": ["B", "G"],
|
||||
"archetype": "Golgari Aristocrats",
|
||||
"cards": {
|
||||
"Academy Manufactor": 1,
|
||||
"Arasta of the Endless Web": 1,
|
||||
"Arcane Signet": 1,
|
||||
"Barren Moor": 1,
|
||||
"Bastion of Remembrance": 1,
|
||||
"Beastmaster Ascension": 1,
|
||||
"Beledros Witherbloom": 1,
|
||||
"Binding the Old Gods": 1,
|
||||
"Bojuka Bog": 1,
|
||||
"Cache Grab": 1,
|
||||
"Casualties of War": 1,
|
||||
"Chatterfang, Squirrel General": 1,
|
||||
"Chatterstorm": 1,
|
||||
"Chittering Witch": 1,
|
||||
"Chitterspitter": 1,
|
||||
"Command Tower": 1,
|
||||
"Deadly Dispute": 1,
|
||||
"Decree of Pain": 1,
|
||||
"Deep Forest Hermit": 1,
|
||||
"End-Raze Forerunners": 1,
|
||||
"Evolving Wilds": 1,
|
||||
"Exotic Orchard": 1,
|
||||
"Forest": 9,
|
||||
"Garruk, Cursed Huntsman": 1,
|
||||
"Gilded Goose": 1,
|
||||
"Golgari Rot Farm": 1,
|
||||
"Golgari Signet": 1,
|
||||
"Gourmand's Talent": 1,
|
||||
"Grim Backwoods": 1,
|
||||
"Haunted Mire": 1,
|
||||
"Haywire Mite": 1,
|
||||
"Hazel of the Rootbloom": 1,
|
||||
"Hazel's Brewmaster": 1,
|
||||
"Honored Dreyleader": 1,
|
||||
"Idol of Oblivion": 1,
|
||||
"Insatiable Frugivore": 1,
|
||||
"Jungle Hollow": 1,
|
||||
"Llanowar Wastes": 1,
|
||||
"Maelstrom Pulse": 1,
|
||||
"Maskwood Nexus": 1,
|
||||
"Midgar, City of Mako // Reactor Raid": 1,
|
||||
"Moldervine Reclamation": 1,
|
||||
"Moonstone Eulogist": 1,
|
||||
"Morbid Opportunist": 1,
|
||||
"Nadier's Nightblade": 1,
|
||||
"Necroblossom Snarl": 1,
|
||||
"Nested Shambler": 1,
|
||||
"Ogre Slumlord": 1,
|
||||
"Oran-Rief, the Vastwood": 1,
|
||||
"Path of Ancestry": 1,
|
||||
"Plumb the Forbidden": 1,
|
||||
"Poison-Tip Archer": 1,
|
||||
"Prosperous Innkeeper": 1,
|
||||
"Putrefy": 1,
|
||||
"Ravenous Squirrel": 1,
|
||||
"Rootcast Apprenticeship": 1,
|
||||
"Saw in Half": 1,
|
||||
"Scurry of Squirrels": 1,
|
||||
"Second Harvest": 1,
|
||||
"Shamanic Revelation": 1,
|
||||
"Skullclamp": 1,
|
||||
"Skyfisher Spider": 1,
|
||||
"Sol Ring": 1,
|
||||
"Squirrel Nest": 1,
|
||||
"Squirrel Sovereign": 1,
|
||||
"Swamp": 7,
|
||||
"Swarmyard": 1,
|
||||
"Swarmyard Massacre": 1,
|
||||
"Sword of the Squeak": 1,
|
||||
"Tainted Wood": 1,
|
||||
"Talisman of Resilience": 1,
|
||||
"Tear Asunder": 1,
|
||||
"Temple of Malady": 1,
|
||||
"Terramorphic Expanse": 1,
|
||||
"The Odd Acorn Gang": 1,
|
||||
"Tireless Provisioner": 1,
|
||||
"Toski, Bearer of Secrets": 1,
|
||||
"Tranquil Thicket": 1,
|
||||
"Twilight Mire": 1,
|
||||
"Viridescent Bog": 1,
|
||||
"Windgrace's Judgment": 1,
|
||||
"Woe Strider": 1,
|
||||
"Wolfwillow Haven": 1,
|
||||
"Woodland Cemetery": 1,
|
||||
"Worthy Cost": 1,
|
||||
"Zulaport Cutthroat": 1
|
||||
}
|
||||
}
|
||||
80
decks/palamecia.json
Normal file
80
decks/palamecia.json
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"name": "Palamecia",
|
||||
"commander": "The Emperor of Palamecia // The Lord Master of Hell",
|
||||
"colors": ["U", "R"],
|
||||
"archetype": "Izzet Self-Mill Storm",
|
||||
"cards": {
|
||||
"Aetherize": 1,
|
||||
"Arcane Signet": 1,
|
||||
"Baron, Airship Kingdom": 1,
|
||||
"Big Score": 1,
|
||||
"Blasphemous Act": 1,
|
||||
"Bond of Insight": 1,
|
||||
"Careful Consideration": 1,
|
||||
"Channeled Force": 1,
|
||||
"Combat Tutorial": 1,
|
||||
"Command Tower": 1,
|
||||
"Consider": 1,
|
||||
"Counterspell": 1,
|
||||
"Curator's Ward": 1,
|
||||
"Curiosity": 1,
|
||||
"Cut Your Losses": 1,
|
||||
"Decaying Time Loop": 1,
|
||||
"Drake Umbra": 1,
|
||||
"Drown in Dreams": 1,
|
||||
"Elixir of Immortality": 1,
|
||||
"Epic Experiment": 1,
|
||||
"Ether": 1,
|
||||
"Everflowing Chalice": 1,
|
||||
"Experimental Overload": 1,
|
||||
"Fact or Fiction": 1,
|
||||
"Fateful Showdown": 1,
|
||||
"Fire Magic": 1,
|
||||
"Firemind Vessel": 1,
|
||||
"Frostboil Snarl": 1,
|
||||
"Full Throttle": 1,
|
||||
"Gandalf's Sanction": 1,
|
||||
"Hedron Archive": 1,
|
||||
"Increasing Confusion": 1,
|
||||
"Isengard Unleashed": 1,
|
||||
"Island": 18,
|
||||
"Izzet Signet": 1,
|
||||
"Mana Geyser": 1,
|
||||
"Mountain": 12,
|
||||
"Mystic Confluence": 1,
|
||||
"Ovika, Enigma Goliath": 1,
|
||||
"Path of the Pyromancer": 1,
|
||||
"Peter Parker's Camera": 1,
|
||||
"Pinnacle Monk // Mystic Peak": 1,
|
||||
"Pirate's Pillage": 1,
|
||||
"Press the Enemy": 1,
|
||||
"Protective Bubble": 1,
|
||||
"Reliquary Tower": 1,
|
||||
"Rewind": 2,
|
||||
"Ring of the Lucii": 2,
|
||||
"Rise from the Tides": 1,
|
||||
"Sahagin": 1,
|
||||
"Seize the Storm": 1,
|
||||
"Shantotto, Tactician Magician": 2,
|
||||
"Shivan Reef": 1,
|
||||
"Snapcaster Mage": 1,
|
||||
"Snort": 1,
|
||||
"Sol Ring": 1,
|
||||
"Spellheart Chimera": 1,
|
||||
"Sulfur Falls": 1,
|
||||
"Summons of Saruman": 1,
|
||||
"Swiftfoot Boots": 1,
|
||||
"Talrand, Sky Summoner": 1,
|
||||
"Tellah, Great Sage": 1,
|
||||
"Tezzeret's Gambit": 1,
|
||||
"The Emperor of Palamecia // The Lord Master of Hell": 1,
|
||||
"The Rollercrusher Ride": 1,
|
||||
"Thousand-Year Storm": 1,
|
||||
"Traumatize": 1,
|
||||
"Ultros, Obnoxious Octopus": 1,
|
||||
"Ur-Golem's Eye": 2,
|
||||
"Vivi Ornitier": 1,
|
||||
"Whispersilk Cloak": 1,
|
||||
"Zephid's Embrace": 1
|
||||
}
|
||||
}
|
||||
104
decks/yshtola.json
Normal file
104
decks/yshtola.json
Normal file
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"name": "Yshtola",
|
||||
"commander": "Y'shtola, Night's Blessed",
|
||||
"colors": ["U", "B", "W"],
|
||||
"archetype": "Esper Stax Drain",
|
||||
"cards": {
|
||||
"Amazing Acrobatics": 1,
|
||||
"Arcane Sanctum": 1,
|
||||
"Archaeomancer's Map": 1,
|
||||
"Archmage Emeritus": 1,
|
||||
"Archmage of Runes": 1,
|
||||
"Ash Barrens": 1,
|
||||
"Authority of the Consuls": 1,
|
||||
"Avatar's Wrath": 1,
|
||||
"Baleful Strix": 1,
|
||||
"Banishing Light": 1,
|
||||
"Black Mage's Rod": 1,
|
||||
"Blitzball": 1,
|
||||
"Blue Mage's Cane": 1,
|
||||
"Brainstorm": 1,
|
||||
"Champions from Beyond": 1,
|
||||
"Choked Estuary": 1,
|
||||
"Circle of Power": 1,
|
||||
"Cleansing Nova": 1,
|
||||
"Command Beacon": 1,
|
||||
"Contaminated Aquifer": 1,
|
||||
"Cornered by Black Mages": 1,
|
||||
"Curiosity": 1,
|
||||
"Dancer's Chakrams": 1,
|
||||
"Darkwater Catacombs": 1,
|
||||
"Demolition Field": 1,
|
||||
"Desolate Mire": 1,
|
||||
"Dig Through Time": 1,
|
||||
"Dovin's Veto": 1,
|
||||
"Drowned Catacomb": 1,
|
||||
"Emet-Selch of the Third Seat": 1,
|
||||
"Evolving Wilds": 1,
|
||||
"Exotic Orchard": 1,
|
||||
"Exsanguinate": 1,
|
||||
"Fandaniel, Telophoroi Ascian": 1,
|
||||
"Fetid Heath": 1,
|
||||
"Fight On!": 1,
|
||||
"Final Judgment": 1,
|
||||
"Firemind Vessel": 1,
|
||||
"Frantic Search": 1,
|
||||
"Glacial Fortress": 1,
|
||||
"Hedron Archive": 1,
|
||||
"Idyllic Beachfront": 1,
|
||||
"Island": 2,
|
||||
"Isolated Chapel": 1,
|
||||
"Krile Baldesion": 1,
|
||||
"Lethal Scheme": 1,
|
||||
"Multiversal Passage": 1,
|
||||
"Murderous Rider // Swift End": 1,
|
||||
"Observed Stasis": 1,
|
||||
"Overkill": 1,
|
||||
"Papalymo Totolymo": 1,
|
||||
"Path of Ancestry": 1,
|
||||
"Plains": 3,
|
||||
"Port Town": 1,
|
||||
"Prairie Stream": 1,
|
||||
"Propaganda": 1,
|
||||
"Reaper's Scythe": 1,
|
||||
"Relic of Legends": 1,
|
||||
"Reliquary Tower": 1,
|
||||
"Rewind": 1,
|
||||
"Ring of the Lucii": 1,
|
||||
"Risky Research": 1,
|
||||
"Rite of Replication": 1,
|
||||
"Riverwalk Technique": 1,
|
||||
"Scavenger Grounds": 1,
|
||||
"School Daze": 1,
|
||||
"Shineshadow Snarl": 1,
|
||||
"Skycloud Expanse": 1,
|
||||
"Snuff Out": 1,
|
||||
"Sol Ring": 1,
|
||||
"Static Snare": 1,
|
||||
"Stuck in Summoner's Sanctum": 1,
|
||||
"Sublime Epiphany": 1,
|
||||
"Sunken Hollow": 1,
|
||||
"Sunken Ruins": 1,
|
||||
"Sunlit Marsh": 1,
|
||||
"Swamp": 2,
|
||||
"Swords to Plowshares": 1,
|
||||
"Syphon Mind": 1,
|
||||
"Talisman of Hierarchy": 1,
|
||||
"Temple of the False God": 1,
|
||||
"Thought Vessel": 1,
|
||||
"Torrential Gearhulk": 1,
|
||||
"Transpose": 1,
|
||||
"Ultima": 1,
|
||||
"Underground River": 1,
|
||||
"Ur-Golem's Eye": 1,
|
||||
"Urza's Saga": 1,
|
||||
"Vanish from Sight": 1,
|
||||
"Vincent's Limit Break": 1,
|
||||
"Vindicate": 1,
|
||||
"Void Rend": 1,
|
||||
"Vote Out": 1,
|
||||
"White Auracite": 1,
|
||||
"Withering Torment": 1,
|
||||
"Y'shtola, Night's Blessed": 1
|
||||
}
|
||||
}
|
||||
435
docs/plans/2026-02-19-auto-docs.md
Normal file
435
docs/plans/2026-02-19-auto-docs.md
Normal file
@@ -0,0 +1,435 @@
|
||||
# Auto-updating Documentation Implementation Plan
|
||||
|
||||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||
|
||||
**Goal:** Create README.md and AGENTS.md that auto-update via git pre-commit hook when files change.
|
||||
|
||||
**Architecture:** Template files with placeholders + Python generator script that reads deck/collection data + pre-commit hook that runs on every commit.
|
||||
|
||||
**Tech Stack:** Python 3 stdlib (json, pathlib, argparse)
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Create Template Files
|
||||
|
||||
**Files:**
|
||||
- Create: `docs/templates/README.template.md`
|
||||
- Create: `docs/templates/AGENTS.template.md`
|
||||
|
||||
**Step 1: Create docs/templates directory**
|
||||
|
||||
```bash
|
||||
mkdir -p docs/templates
|
||||
```
|
||||
|
||||
**Step 2: Create README template**
|
||||
|
||||
Create `docs/templates/README.template.md`:
|
||||
|
||||
```markdown
|
||||
# MTG EDH Deck Manager
|
||||
|
||||
Command-line toolkit for managing Magic: The Gathering Commander (EDH) decks using the Scryfall API.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
git clone <repo-url>
|
||||
cd Decks
|
||||
```
|
||||
|
||||
No dependencies required - pure Python 3 standard library.
|
||||
|
||||
## Usage
|
||||
|
||||
### Hydrate a Collection
|
||||
|
||||
Fetch card data from Scryfall for a decklist:
|
||||
|
||||
```bash
|
||||
python hydrate.py hydrate collection/decklist.txt -o collection_hydrated/ -c card_cache.json
|
||||
```
|
||||
|
||||
### Create a New Deck
|
||||
|
||||
```bash
|
||||
python hydrate.py new my_deck
|
||||
```
|
||||
|
||||
### Analyze Decks
|
||||
|
||||
Find upgrade options from your collection:
|
||||
|
||||
```bash
|
||||
python scripts/analyze_decks.py --collection collection_hydrated/deck.json --deck-dir decks/
|
||||
```
|
||||
|
||||
### Find Synergies
|
||||
|
||||
Search for cards by keywords, colors, and type:
|
||||
|
||||
```bash
|
||||
# Find landfall cards in Simic colors
|
||||
python scripts/find_synergies.py --collection collection_hydrated/deck.json --colors U G --keywords landfall
|
||||
|
||||
# Find Bird creatures in Bant colors
|
||||
python scripts/find_synergies.py --collection collection_hydrated/deck.json --colors U G W --creature-type Bird
|
||||
|
||||
# Find instants with CMC 2 or less
|
||||
python scripts/find_synergies.py --collection collection_hydrated/deck.json --type instant --cmc-max 2
|
||||
```
|
||||
|
||||
### Generate Reports
|
||||
|
||||
```bash
|
||||
python scripts/deck_report.py --collection collection_hydrated/deck.json --decks-dir decks/ --output report.md
|
||||
```
|
||||
|
||||
## Decks
|
||||
|
||||
{{DECK_TABLE}}
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Import** - Place text decklists in `collection/`
|
||||
2. **Hydrate** - Run `hydrate.py` to fetch Scryfall data → `collection_hydrated/`
|
||||
3. **Define** - Create deck JSON files in `decks/`
|
||||
4. **Analyze** - Run `analyze_decks.py` to find upgrade options
|
||||
5. **Report** - Use `deck_report.py` for markdown summaries
|
||||
|
||||
## Collection Stats
|
||||
|
||||
{{COLLECTION_STATS}}
|
||||
|
||||
---
|
||||
|
||||
*This file is auto-generated. Edit `docs/templates/README.template.md` instead.*
|
||||
```
|
||||
|
||||
**Step 3: Create AGENTS template**
|
||||
|
||||
Create `docs/templates/AGENTS.template.md`:
|
||||
|
||||
```markdown
|
||||
# AGENTS.md
|
||||
|
||||
Guide for AI assistants working on this codebase.
|
||||
|
||||
## Build/Verify Commands
|
||||
|
||||
This project has no external dependencies or test framework.
|
||||
|
||||
```bash
|
||||
# No lint/typecheck commands currently
|
||||
# Verify scripts work by running them:
|
||||
python hydrate.py --help
|
||||
python scripts/analyze_decks.py --help
|
||||
```
|
||||
|
||||
## Code Style
|
||||
|
||||
- **Language:** Python 3 (stdlib only, no external packages)
|
||||
- **Formatting:** 4-space indent, max line length ~100
|
||||
- **Imports:** Standard library only (argparse, json, pathlib, urllib, re, sys, os, time)
|
||||
- **CLI:** Use `argparse` with subparsers for multi-command tools
|
||||
- **Error handling:** Print to stderr, use sys.exit(1) for failures
|
||||
- **Docstrings:** Triple-quoted at module and function level with usage examples
|
||||
- **Type hints:** Optional but encouraged for complex functions
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
├── hydrate.py # Main CLI - fetches card data from Scryfall
|
||||
├── card_cache.json # Local cache of Scryfall card data
|
||||
├── deck_analysis.json # Analysis output
|
||||
├── collection/ # Raw decklist text files
|
||||
├── collection_hydrated/ # Enriched card data by type
|
||||
│ ├── deck.json # All cards combined
|
||||
│ ├── commander.json
|
||||
│ ├── creatures.json
|
||||
│ ├── instants.json
|
||||
│ ├── sorceries.json
|
||||
│ ├── artifacts.json
|
||||
│ ├── enchantments.json
|
||||
│ ├── lands.json
|
||||
│ └── planeswalkers.json
|
||||
├── decks/ # Deck definitions (JSON)
|
||||
│ └── <deck_name>.json # name, commander, colors, archetype, cards
|
||||
├── scripts/
|
||||
│ ├── analyze_decks.py # Find upgrade options for decks
|
||||
│ ├── find_synergies.py # Search for synergistic cards
|
||||
│ ├── parse_deck.py # Parse text decklists to JSON
|
||||
│ └── deck_report.py # Generate markdown reports
|
||||
└── docs/
|
||||
└── templates/ # Documentation templates
|
||||
```
|
||||
|
||||
## Data Formats
|
||||
|
||||
### Deck JSON (`decks/*.json`)
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Deck Name",
|
||||
"commander": "Commander Name",
|
||||
"colors": ["U", "G", "W"],
|
||||
"archetype": "Theme Description",
|
||||
"cards": {
|
||||
"Card Name": count,
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Card Data (`collection_hydrated/*.json`)
|
||||
|
||||
Array of card objects with Scryfall fields:
|
||||
- `name`, `mana_cost`, `cmc`, `colors`, `color_identity`
|
||||
- `type_line`, `oracle_text`, `power`, `toughness`, `loyalty`
|
||||
- `scryfall_uri`, `count`
|
||||
|
||||
## Extension Guide
|
||||
|
||||
### Adding a New Deck
|
||||
|
||||
1. Create `decks/<name>.json` with required fields
|
||||
2. Run `python scripts/update_docs.py` to regenerate documentation
|
||||
|
||||
### Adding a New Script
|
||||
|
||||
1. Create `scripts/<name>.py` with argparse CLI
|
||||
2. Follow existing patterns: `load_collection()`, argparse with --help
|
||||
3. Update README template with usage example
|
||||
4. Run `python scripts/update_docs.py`
|
||||
|
||||
### Modifying Deck Analysis
|
||||
|
||||
- `scripts/analyze_decks.py`: Core logic for finding upgrades
|
||||
- Color identity matching uses `color_identity` field from Scryfall
|
||||
- Cards are categorized by `type_line`
|
||||
|
||||
## Current Decks
|
||||
|
||||
{{DECK_TABLE}}
|
||||
```
|
||||
|
||||
**Step 4: Commit templates**
|
||||
|
||||
```bash
|
||||
git add docs/templates/
|
||||
git commit -m "Add documentation templates"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Create update_docs.py Script
|
||||
|
||||
**Files:**
|
||||
- Create: `scripts/update_docs.py`
|
||||
|
||||
**Step 1: Create the generator script**
|
||||
|
||||
Create `scripts/update_docs.py`:
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate README.md and AGENTS.md from templates.
|
||||
Usage:
|
||||
python scripts/update_docs.py
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
SCRIPT_DIR = Path(__file__).parent
|
||||
PROJECT_ROOT = SCRIPT_DIR.parent
|
||||
TEMPLATES_DIR = PROJECT_ROOT / "docs" / "templates"
|
||||
DECKS_DIR = PROJECT_ROOT / "decks"
|
||||
COLLECTION_DIR = PROJECT_ROOT / "collection_hydrated"
|
||||
|
||||
|
||||
def load_decks() -> list[dict]:
|
||||
"""Load all deck JSON files."""
|
||||
decks = []
|
||||
if DECKS_DIR.exists():
|
||||
for path in sorted(DECKS_DIR.glob("*.json")):
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
data["filename"] = path.stem
|
||||
decks.append(data)
|
||||
return decks
|
||||
|
||||
|
||||
def load_collection_stats() -> dict:
|
||||
"""Get collection statistics."""
|
||||
stats = {
|
||||
"total_cards": 0,
|
||||
"unique_cards": 0,
|
||||
"by_type": {}
|
||||
}
|
||||
deck_file = COLLECTION_DIR / "deck.json"
|
||||
if deck_file.exists():
|
||||
with open(deck_file, "r", encoding="utf-8") as f:
|
||||
cards = json.load(f)
|
||||
stats["unique_cards"] = len(cards)
|
||||
stats["total_cards"] = sum(c.get("count", 1) for c in cards)
|
||||
for category in ["creatures", "instants", "sorceries", "artifacts", "enchantments", "lands", "planeswalkers"]:
|
||||
cat_file = COLLECTION_DIR / f"{category}.json"
|
||||
if cat_file.exists():
|
||||
with open(cat_file, "r", encoding="utf-8") as f:
|
||||
cards = json.load(f)
|
||||
stats["by_type"][category] = len(cards)
|
||||
return stats
|
||||
|
||||
|
||||
def generate_deck_table(decks: list[dict]) -> str:
|
||||
"""Generate markdown table of decks."""
|
||||
if not decks:
|
||||
return "*No decks defined yet.*"
|
||||
lines = ["| Deck | Colors | Commander | Archetype |", "|------|--------|-----------|-----------|"]
|
||||
color_map = {"W": "White", "U": "Blue", "B": "Black", "R": "Red", "G": "Green"}
|
||||
for deck in decks:
|
||||
name = deck.get("name", deck.get("filename", "Unknown"))
|
||||
colors = deck.get("colors", [])
|
||||
color_str = "".join(colors) if colors else "Colorless"
|
||||
commander = deck.get("commander", "Unknown")
|
||||
archetype = deck.get("archetype", "-")
|
||||
lines.append(f"| {name} | {color_str} | {commander} | {archetype} |")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def generate_collection_stats(stats: dict) -> str:
|
||||
"""Generate collection statistics section."""
|
||||
lines = [f"- **Total cards:** {stats['total_cards']}", f"- **Unique cards:** {stats['unique_cards']}"]
|
||||
if stats["by_type"]:
|
||||
lines.append("- **By type:**")
|
||||
for category, count in sorted(stats["by_type"].items()):
|
||||
lines.append(f" - {category.title()}: {count}")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def generate_docs() -> None:
|
||||
"""Generate README.md and AGENTS.md from templates."""
|
||||
decks = load_decks()
|
||||
stats = load_collection_stats()
|
||||
deck_table = generate_deck_table(decks)
|
||||
collection_stats = generate_collection_stats(stats)
|
||||
|
||||
for template_name in ["README.template.md", "AGENTS.template.md"]:
|
||||
template_path = TEMPLATES_DIR / template_name
|
||||
if not template_path.exists():
|
||||
print(f"Template not found: {template_path}")
|
||||
continue
|
||||
with open(template_path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
content = content.replace("{{DECK_TABLE}}", deck_table)
|
||||
content = content.replace("{{COLLECTION_STATS}}", collection_stats)
|
||||
output_name = template_name.replace(".template", "")
|
||||
output_path = PROJECT_ROOT / output_name
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
print(f"Generated: {output_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_docs()
|
||||
```
|
||||
|
||||
**Step 2: Test the script**
|
||||
|
||||
```bash
|
||||
python scripts/update_docs.py
|
||||
```
|
||||
|
||||
Expected: Creates README.md and AGENTS.md in project root
|
||||
|
||||
**Step 3: Verify generated files**
|
||||
|
||||
```bash
|
||||
ls -la README.md AGENTS.md
|
||||
head -20 README.md
|
||||
```
|
||||
|
||||
**Step 4: Commit the script**
|
||||
|
||||
```bash
|
||||
git add scripts/update_docs.py README.md AGENTS.md
|
||||
git commit -m "Add update_docs.py and generate initial documentation"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 3: Create Pre-commit Hook
|
||||
|
||||
**Files:**
|
||||
- Create: `.git/hooks/pre-commit`
|
||||
|
||||
**Step 1: Create the hook**
|
||||
|
||||
```bash
|
||||
cat > .git/hooks/pre-commit << 'EOF'
|
||||
#!/bin/bash
|
||||
# Auto-update documentation on commit
|
||||
|
||||
python scripts/update_docs.py
|
||||
|
||||
if [ -f README.md ]; then
|
||||
git add README.md
|
||||
fi
|
||||
|
||||
if [ -f AGENTS.md ]; then
|
||||
git add AGENTS.md
|
||||
fi
|
||||
EOF
|
||||
chmod +x .git/hooks/pre-commit
|
||||
```
|
||||
|
||||
**Step 2: Test the hook**
|
||||
|
||||
```bash
|
||||
# Make a small change to trigger the hook
|
||||
echo "# test" >> hydrate.py
|
||||
git add hydrate.py
|
||||
git commit -m "Test pre-commit hook"
|
||||
```
|
||||
|
||||
Expected: Hook runs, updates docs if needed, includes them in commit
|
||||
|
||||
**Step 3: Verify hook worked**
|
||||
|
||||
```bash
|
||||
git log -1 --stat
|
||||
```
|
||||
|
||||
Expected: README.md and AGENTS.md may appear in commit if changed
|
||||
|
||||
---
|
||||
|
||||
### Task 4: Cleanup and Final Commit
|
||||
|
||||
**Step 1: Remove test change if added**
|
||||
|
||||
```bash
|
||||
# If you added the test line, revert it:
|
||||
git checkout hydrate.py
|
||||
```
|
||||
|
||||
**Step 2: Make a clean commit documenting the hook**
|
||||
|
||||
```bash
|
||||
git add .git/hooks/pre-commit
|
||||
git commit -m "Add pre-commit hook for auto-updating documentation"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- [ ] `README.md` exists with deck table and usage docs
|
||||
- [ ] `AGENTS.md` exists with build commands and project structure
|
||||
- [ ] `scripts/update_docs.py` generates both files from templates
|
||||
- [ ] Pre-commit hook runs and stages updated docs
|
||||
- [ ] Templates are editable without touching generated files
|
||||
174
scripts/analyze_decks.py
Normal file
174
scripts/analyze_decks.py
Normal file
@@ -0,0 +1,174 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Analyze decks against a hydrated collection to find upgrade options.
|
||||
Usage:
|
||||
python analyze_decks.py --collection collection_hydrated/deck.json --decks deck1.json deck2.json ...
|
||||
python analyze_decks.py --collection collection_hydrated/deck.json --deck-dir decks/
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def load_collection(path: str) -> dict:
|
||||
"""Load hydrated collection JSON."""
|
||||
with open(path, 'r') as f:
|
||||
cards = json.load(f)
|
||||
return {c['name']: c for c in cards}
|
||||
|
||||
|
||||
def load_deck(path: str) -> dict:
|
||||
"""Load deck JSON (from parse_deck.py output or deck.json format)."""
|
||||
with open(path, 'r') as f:
|
||||
data = json.load(f)
|
||||
if 'cards' in data:
|
||||
return data['cards']
|
||||
return data
|
||||
|
||||
|
||||
def get_color_identity(card: dict) -> set:
|
||||
"""Get color identity as a set."""
|
||||
return set(card.get('color_identity', []))
|
||||
|
||||
|
||||
def matches_colors(card_identity: set, deck_colors: set) -> bool:
|
||||
"""Check if card identity fits within deck colors."""
|
||||
return card_identity <= deck_colors or not card_identity
|
||||
|
||||
|
||||
def find_upgrades(collection: dict[str, dict], deck_cards: dict, all_deck_cards: set,
|
||||
deck_colors: set, archetype: str | None = None) -> dict:
|
||||
"""Find potential upgrade cards for a deck."""
|
||||
available = set(collection.keys()) - all_deck_cards
|
||||
upgrades = {
|
||||
'creatures': [],
|
||||
'instants': [],
|
||||
'sorceries': [],
|
||||
'artifacts': [],
|
||||
'enchantments': [],
|
||||
'lands': [],
|
||||
'other': []
|
||||
}
|
||||
|
||||
for name in available:
|
||||
card = collection.get(name, {})
|
||||
if not card:
|
||||
continue
|
||||
|
||||
ci = get_color_identity(card)
|
||||
if not matches_colors(ci, deck_colors):
|
||||
continue
|
||||
|
||||
type_line = card.get('type_line', '').lower() if card.get('type_line') else ''
|
||||
entry = {
|
||||
'name': name,
|
||||
'mana_cost': card.get('mana_cost', ''),
|
||||
'cmc': card.get('cmc', 0),
|
||||
'type_line': card.get('type_line', ''),
|
||||
'oracle_text': card.get('oracle_text', ''),
|
||||
'count': card.get('count', 1)
|
||||
}
|
||||
|
||||
if 'creature' in type_line:
|
||||
upgrades['creatures'].append(entry)
|
||||
elif 'instant' in type_line:
|
||||
upgrades['instants'].append(entry)
|
||||
elif 'sorcery' in type_line:
|
||||
upgrades['sorceries'].append(entry)
|
||||
elif 'artifact' in type_line:
|
||||
upgrades['artifacts'].append(entry)
|
||||
elif 'enchantment' in type_line:
|
||||
upgrades['enchantments'].append(entry)
|
||||
elif 'land' in type_line:
|
||||
upgrades['lands'].append(entry)
|
||||
else:
|
||||
upgrades['other'].append(entry)
|
||||
|
||||
return upgrades
|
||||
|
||||
|
||||
def find_synergies(collection: dict, available: set, deck_colors: set,
|
||||
keywords: list) -> list:
|
||||
"""Find cards with specific keyword synergies."""
|
||||
synergies = []
|
||||
for name in available:
|
||||
card = collection.get(name, {})
|
||||
if not card:
|
||||
continue
|
||||
ci = get_color_identity(card)
|
||||
if not matches_colors(ci, deck_colors):
|
||||
continue
|
||||
oracle = card.get('oracle_text', '').lower() if card.get('oracle_text') else ''
|
||||
if any(kw.lower() in oracle for kw in keywords):
|
||||
synergies.append({
|
||||
'name': name,
|
||||
'type_line': card.get('type_line', ''),
|
||||
'mana_cost': card.get('mana_cost', ''),
|
||||
'oracle_snippet': oracle[:100]
|
||||
})
|
||||
return synergies
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Analyze decks for upgrade options')
|
||||
parser.add_argument('--collection', '-c', required=True, help='Hydrated collection JSON')
|
||||
parser.add_argument('--decks', '-d', nargs='+', help='Deck JSON files')
|
||||
parser.add_argument('--deck-dir', help='Directory containing deck JSON files')
|
||||
parser.add_argument('--output', '-o', help='Output JSON file')
|
||||
parser.add_argument('--keywords', '-k', nargs='+', help='Keywords to search for synergies')
|
||||
args = parser.parse_args()
|
||||
|
||||
collection = load_collection(args.collection)
|
||||
|
||||
decks = {}
|
||||
if args.decks:
|
||||
for path in args.decks:
|
||||
name = Path(path).stem
|
||||
decks[name] = load_deck(path)
|
||||
elif args.deck_dir:
|
||||
for path in Path(args.deck_dir).glob('*.json'):
|
||||
decks[path.stem] = load_deck(str(path))
|
||||
else:
|
||||
print("Error: Provide --decks or --deck-dir", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
all_deck_cards = set()
|
||||
for deck_cards in decks.values():
|
||||
all_deck_cards.update(deck_cards.keys())
|
||||
|
||||
results = {}
|
||||
for deck_name, deck_cards in decks.items():
|
||||
deck_colors = set()
|
||||
for name in deck_cards:
|
||||
card = collection.get(name, {})
|
||||
deck_colors |= get_color_identity(card)
|
||||
|
||||
upgrades = find_upgrades(collection, deck_cards, all_deck_cards, deck_colors)
|
||||
|
||||
available = set(collection.keys()) - all_deck_cards
|
||||
synergies = {}
|
||||
if args.keywords:
|
||||
synergies = find_synergies(collection, available, deck_colors, args.keywords)
|
||||
|
||||
results[deck_name] = {
|
||||
'total_cards': sum(deck_cards.values()),
|
||||
'unique_cards': len(deck_cards),
|
||||
'color_identity': list(deck_colors),
|
||||
'available_upgrades': {k: len(v) for k, v in upgrades.items()},
|
||||
'upgrades': upgrades,
|
||||
'synergies': synergies
|
||||
}
|
||||
|
||||
output = json.dumps(results, indent=2)
|
||||
if args.output:
|
||||
with open(args.output, 'w') as f:
|
||||
f.write(output)
|
||||
else:
|
||||
print(output)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
72
scripts/deck_report.py
Normal file
72
scripts/deck_report.py
Normal file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate a deck upgrade report comparing collection to existing decks.
|
||||
Usage:
|
||||
python deck_report.py --collection collection_hydrated/deck.json --decks-dir decks/ --output report.md
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def load_collection(path: str) -> dict:
|
||||
with open(path, 'r') as f:
|
||||
cards = json.load(f)
|
||||
return {c['name']: c for c in cards}
|
||||
|
||||
|
||||
def load_deck(path: str) -> dict:
|
||||
with open(path, 'r') as f:
|
||||
data = json.load(f)
|
||||
if 'cards' in data:
|
||||
return data
|
||||
return {'cards': data, 'name': Path(path).stem}
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Generate deck upgrade report')
|
||||
parser.add_argument('--collection', '-c', required=True)
|
||||
parser.add_argument('--decks-dir', '-d', required=True)
|
||||
parser.add_argument('--output', '-o', required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
collection = load_collection(args.collection)
|
||||
decks = []
|
||||
for path in Path(args.decks_dir).glob('*.json'):
|
||||
decks.append(load_deck(str(path)))
|
||||
|
||||
# Find all cards in decks
|
||||
all_deck_cards = set()
|
||||
for deck in decks:
|
||||
all_deck_cards.update(deck['cards'].keys())
|
||||
|
||||
available = set(collection.keys()) - all_deck_cards
|
||||
|
||||
report = []
|
||||
report.append("# Deck Upgrade Report\n")
|
||||
report.append(f"Collection size: {len(collection)} cards")
|
||||
report.append(f"Cards in decks: {len(all_deck_cards)}")
|
||||
report.append(f"Available for upgrades: {len(available)}\n")
|
||||
|
||||
for deck in decks:
|
||||
deck_name = deck.get('name', 'Unknown')
|
||||
deck_cards = deck['cards']
|
||||
deck_colors = set()
|
||||
for name in deck_cards:
|
||||
card = collection.get(name, {})
|
||||
ci = card.get('color_identity', [])
|
||||
deck_colors.update(ci)
|
||||
|
||||
report.append(f"\n---\n## {deck_name}\n")
|
||||
report.append(f"**Colors:** {''.join(sorted(deck_colors))}")
|
||||
report.append(f"**Total cards:** {sum(deck_cards.values())}")
|
||||
report.append(f"**Unique cards:** {len(deck_cards)}\n")
|
||||
|
||||
with open(args.output, 'w') as f:
|
||||
f.write('\n'.join(report))
|
||||
print(f"Report saved to {args.output}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
119
scripts/find_synergies.py
Normal file
119
scripts/find_synergies.py
Normal file
@@ -0,0 +1,119 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Find cards with specific synergies from a hydrated collection.
|
||||
Usage:
|
||||
python find_synergies.py --collection collection_hydrated/deck.json --colors U R --keywords "landfall" "enter the battlefield"
|
||||
python find_synergies.py --collection collection_hydrated/deck.json --colors U R --creature-type Bird
|
||||
python find_synergies.py --collection collection_hydrated/deck.json --colors U R --cmc-min 4 --type instant
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def load_collection(path: str) -> dict:
|
||||
"""Load hydrated collection JSON."""
|
||||
with open(path, 'r') as f:
|
||||
cards = json.load(f)
|
||||
return {c['name']: c for c in cards}
|
||||
|
||||
|
||||
def matches_colors(card_identity: set, allowed_colors: set) -> bool:
|
||||
"""Check if card identity fits within allowed colors."""
|
||||
if not card_identity:
|
||||
return True
|
||||
return card_identity <= allowed_colors
|
||||
|
||||
|
||||
def extract_creature_types(type_line: str) -> list:
|
||||
"""Extract creature types from type line."""
|
||||
if not type_line:
|
||||
return []
|
||||
parts = type_line.split('—')
|
||||
if len(parts) < 2:
|
||||
return []
|
||||
types_part = parts[1].strip()
|
||||
return [t.strip().lower() for t in types_part.split()]
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Find synergistic cards in collection')
|
||||
parser.add_argument('--collection', '-c', required=True, help='Hydrated collection JSON')
|
||||
parser.add_argument('--colors', nargs='+', default=[], help='Allowed colors (e.g., U R for Izzet)')
|
||||
parser.add_argument('--exclude', nargs='+', default=[], help='Cards to exclude (already in deck)')
|
||||
parser.add_argument('--keywords', '-k', nargs='+', help='Keywords to search in oracle text')
|
||||
parser.add_argument('--creature-type', '-t', help='Creature type to search for')
|
||||
parser.add_argument('--type', help='Card type to filter (creature, instant, sorcery, etc.)')
|
||||
parser.add_argument('--cmc-min', type=int, help='Minimum CMC')
|
||||
parser.add_argument('--cmc-max', type=int, help='Maximum CMC')
|
||||
parser.add_argument('--output', '-o', help='Output JSON file')
|
||||
parser.add_argument('--format', choices=['json', 'text'], default='text', help='Output format')
|
||||
args = parser.parse_args()
|
||||
|
||||
collection = load_collection(args.collection)
|
||||
allowed_colors = set(c.upper() for c in args.colors)
|
||||
exclude = set(args.exclude)
|
||||
|
||||
matches = []
|
||||
for name, card in collection.items():
|
||||
if name in exclude:
|
||||
continue
|
||||
|
||||
ci = set(card.get('color_identity', []))
|
||||
if not matches_colors(ci, allowed_colors):
|
||||
continue
|
||||
|
||||
type_line = card.get('type_line', '').lower() if card.get('type_line') else ''
|
||||
|
||||
if args.type and args.type.lower() not in type_line:
|
||||
continue
|
||||
|
||||
cmc = card.get('cmc', 0) or 0
|
||||
if args.cmc_min is not None and cmc < args.cmc_min:
|
||||
continue
|
||||
if args.cmc_max is not None and cmc > args.cmc_max:
|
||||
continue
|
||||
|
||||
if args.creature_type:
|
||||
creature_types = extract_creature_types(type_line)
|
||||
if args.creature_type.lower() not in creature_types:
|
||||
continue
|
||||
|
||||
oracle = card.get('oracle_text', '').lower() if card.get('oracle_text') else ''
|
||||
|
||||
if args.keywords:
|
||||
if not any(kw.lower() in oracle for kw in args.keywords):
|
||||
continue
|
||||
|
||||
matches.append({
|
||||
'name': name,
|
||||
'mana_cost': card.get('mana_cost', ''),
|
||||
'cmc': cmc,
|
||||
'type_line': card.get('type_line', ''),
|
||||
'colors': card.get('colors', []),
|
||||
'color_identity': list(ci),
|
||||
'oracle_text': card.get('oracle_text', ''),
|
||||
'count': card.get('count', 1)
|
||||
})
|
||||
|
||||
matches.sort(key=lambda x: (x['cmc'], x['name']))
|
||||
|
||||
if args.format == 'json':
|
||||
output = json.dumps(matches, indent=2)
|
||||
if args.output:
|
||||
with open(args.output, 'w') as f:
|
||||
f.write(output)
|
||||
else:
|
||||
print(output)
|
||||
else:
|
||||
for card in matches:
|
||||
print(f"{card['mana_cost']} {card['name']} ({int(card['cmc'])}cmc) x{card['count']}")
|
||||
if card['oracle_text']:
|
||||
print(f" {card['oracle_text'][:100]}...")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
62
scripts/parse_deck.py
Normal file
62
scripts/parse_deck.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Parse deck list text files or pasted deck lists.
|
||||
Usage:
|
||||
python parse_deck.py <deck_file.txt>
|
||||
python parse_deck.py --stdin < decklist.txt
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
def parse_deck_text(text: str) -> dict[str, int]:
|
||||
"""Parse deck list text into {card_name: count} dict."""
|
||||
cards = {}
|
||||
for line in text.strip().split('\n'):
|
||||
line = line.strip()
|
||||
if not line or line.startswith('#'):
|
||||
continue
|
||||
match = re.match(r'^(\d+)x?\s+(.+)$', line, re.IGNORECASE)
|
||||
if match:
|
||||
count = int(match.group(1))
|
||||
name = match.group(2).strip()
|
||||
cards[name] = count
|
||||
return cards
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Parse deck list into JSON')
|
||||
parser.add_argument('input', nargs='?', help='Deck list file')
|
||||
parser.add_argument('--stdin', action='store_true', help='Read from stdin')
|
||||
parser.add_argument('-o', '--output', help='Output JSON file')
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.stdin:
|
||||
text = sys.stdin.read()
|
||||
elif args.input:
|
||||
with open(args.input, 'r') as f:
|
||||
text = f.read()
|
||||
else:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
cards = parse_deck_text(text)
|
||||
result = {
|
||||
'total_cards': sum(cards.values()),
|
||||
'unique_cards': len(cards),
|
||||
'cards': cards
|
||||
}
|
||||
|
||||
output = json.dumps(result, indent=2)
|
||||
if args.output:
|
||||
with open(args.output, 'w') as f:
|
||||
f.write(output)
|
||||
else:
|
||||
print(output)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user