From 28bb39d558f11efaa1c3b7ee0967d27710eef79e Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Wed, 7 Jan 2026 20:13:07 +0000 Subject: [PATCH] feat(*): Add improvements to the UX and the data seeding --- data/pokemon/games.csv | 18 +- data/pokemon/gen1-kanto.csv | 350 +++++++++--------- data/pokemon/gen2-johto.csv | 149 ++++++++ scripts/csv-to-migration.js | 19 +- src/lib/components/PokemonSprite.svelte | 32 +- .../pokedex/PokedexEntryCatchRecord.svelte | 4 +- src/lib/components/pokedex/PokedexForm.svelte | 42 ++- .../components/pokedex/PokedexModal.svelte | 109 ++++++ .../components/pokedex/PokedexSidebar.svelte | 149 -------- .../pokedex/PokedexViewBoxes.svelte | 20 +- .../components/pokedex/PokedexViewList.svelte | 55 --- src/lib/models/PokedexEntry.ts | 36 +- .../repositories/CombinedDataRepository.ts | 71 +--- src/routes/api/games/+server.ts | 32 ++ src/routes/pokedex/[id]/+page.svelte | 218 +++++++---- .../20260105151500_create_games_table.sql | 40 ++ ...anto.sql => 20260105155340_seed_kanto.sql} | 66 ++-- .../migrations/20260105160807_seed_johto.sql | 282 ++++++++++++++ 18 files changed, 1069 insertions(+), 623 deletions(-) create mode 100644 data/pokemon/gen2-johto.csv create mode 100644 src/lib/components/pokedex/PokedexModal.svelte delete mode 100644 src/lib/components/pokedex/PokedexSidebar.svelte delete mode 100644 src/lib/components/pokedex/PokedexViewList.svelte create mode 100644 src/routes/api/games/+server.ts create mode 100644 supabase/migrations/20260105151500_create_games_table.sql rename supabase/migrations/{20260104000003_seed_kanto.sql => 20260105155340_seed_kanto.sql} (90%) create mode 100644 supabase/migrations/20260105160807_seed_johto.sql diff --git a/data/pokemon/games.csv b/data/pokemon/games.csv index b242991..f5f0043 100644 --- a/data/pokemon/games.csv +++ b/data/pokemon/games.csv @@ -1,6 +1,12 @@ -id,displayName,region,generation -red,Red,Kanto,1 -blue,Blue,Kanto,1 -yellow,Yellow,Kanto,1 -lg--pikachu,LG: Pikachu,Kanto,7 -lg--eevee,LG: Eevee,Kanto,7 \ No newline at end of file +id,displayName,region,generation,releaseYear +red,Red,Kanto,1,1996 +blue,Blue,Kanto,1,1996 +yellow,Yellow,Kanto,1,1998 +lg--pikachu,LG: Pikachu,Kanto,7,2018 +lg--eevee,LG: Eevee,Kanto,7,2018 +gold,Gold,Johto,2,1999 +silver,Silver,Johto,2,1999 +crystal,Crystal,Johto,2,2000 +heartgold,HeartGold,Johto,4,2009 +soulsilver,SoulSilver,Johto,4,2009 +legends-arceus,Legends: Arceus,Hisui,8,2022 \ No newline at end of file diff --git a/data/pokemon/gen1-kanto.csv b/data/pokemon/gen1-kanto.csv index f811bd6..77bc781 100644 --- a/data/pokemon/gen1-kanto.csv +++ b/data/pokemon/gen1-kanto.csv @@ -1,175 +1,175 @@ -pokedexNumber,name,form,games,regionalNumber -1,Bulbasaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,1 -2,Ivysaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,2 -3,Venusaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,3 -3,Venusaur,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -4,Charmander,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,4 -5,Charmeleon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,5 -6,Charizard,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,6 -7,Squirtle,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,7 -8,Wartortle,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,8 -9,Blastoise,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,9 -10,Caterpie,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,10 -11,Metapod,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,11 -12,Butterfree,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,12 -12,Butterfree,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -13,Weedle,,Red|Blue|LG: Pikachu|LG: Eevee,13 -14,Kakuna,,Red|Blue|LG: Pikachu|LG: Eevee,14 -15,Beedrill,,Red|Blue|LG: Pikachu|LG: Eevee,15 -16,Pidgey,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,16 -17,Pidgeotto,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,17 -18,Pidgeot,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,18 -19,Rattata,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,19 -19,Rattata,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -20,Raticate,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,20 -20,Raticate,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -21,Spearow,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,21 -22,Fearow,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,22 -23,Ekans,,Red|Blue|LG: Eevee,23 -24,Arbok,,Red|Blue|LG: Eevee,24 -25,Pikachu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,25 -25,Pikachu,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -26,Raichu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,26 -26,Raichu,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -27,Sandshrew,,Blue|Yellow|LG: Pikachu,27 -28,Sandslash,,Blue|Yellow|LG: Pikachu,28 -29,Nidoran♀,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,29 -30,Nidorina,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,30 -31,Nidoqueen,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,31 -32,Nidoran♂,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,32 -33,Nidorino,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,33 -34,Nidoking,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,34 -35,Clefairy,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,35 -36,Clefable,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,36 -37,Vulpix,,Blue|Yellow|LG: Eevee,37 -38,Ninetales,,Blue|Yellow|LG: Eevee,38 -39,Jigglypuff,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,39 -40,Wigglytuff,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,40 -41,Zubat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,41 -41,Zubat,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -42,Golbat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,42 -42,Golbat,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -43,Oddish,,Red|Yellow|LG: Pikachu,43 -44,Gloom,,Red|Yellow|LG: Pikachu,44 -44,Gloom,Female,Red|Yellow|LG: Pikachu, -45,Vileplume,,Red|Yellow|LG: Pikachu,45 -45,Vileplume,Female,Red|Yellow|LG: Pikachu, -46,Paras,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,46 -47,Parasect,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,47 -48,Venonat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,48 -49,Venomoth,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,49 -50,Diglett,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,50 -51,Dugtrio,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,51 -52,Meowth,,Blue|LG: Eevee,52 -53,Persian,,Blue|LG: Eevee,53 -54,Psyduck,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,54 -55,Golduck,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,55 -56,Mankey,,Red|Yellow|LG: Pikachu,56 -57,Primeape,,Red|Yellow|LG: Pikachu,57 -58,Growlithe,,Red|Yellow|LG: Pikachu,58 -59,Arcanine,,Red|Yellow|LG: Pikachu|LG: Eevee,59 -60,Poliwag,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,60 -61,Poliwhirl,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,61 -62,Poliwrath,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,62 -63,Abra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,63 -64,Kadabra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,64 -64,Kadabra,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -65,Alakazam,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,65 -65,Alakazam,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -66,Machop,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,66 -67,Machoke,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,67 -68,Machamp,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,68 -69,Bellsprout,,Blue|Yellow|LG: Eevee,69 -70,Weepinbell,,Blue|Yellow|LG: Eevee,70 -71,Victreebel,,Blue|Yellow|LG: Eevee,71 -72,Tentacool,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,72 -73,Tentacruel,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,73 -74,Geodude,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,74 -75,Graveler,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,75 -76,Golem,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,76 -77,Ponyta,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,77 -78,Rapidash,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,78 -79,Slowpoke,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,79 -80,Slowbro,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,80 -81,Magnemite,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,81 -82,Magneton,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,82 -83,Farfetch’d,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,83 -84,Doduo,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,84 -84,Doduo,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -85,Dodrio,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,85 -85,Dodrio,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -86,Seel,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,86 -87,Dewgong,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,87 -88,Grimer,,Red|Blue|Yellow|LG: Pikachu,88 -89,Muk,,Red|Blue|Yellow|LG: Pikachu,89 -90,Shellder,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,90 -91,Cloyster,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,91 -92,Gastly,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,92 -93,Haunter,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,93 -94,Gengar,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,94 -95,Onix,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,95 -96,Drowzee,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,96 -97,Hypno,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,97 -97,Hypno,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -98,Krabby,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,98 -99,Kingler,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,99 -100,Voltorb,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,100 -101,Electrode,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,101 -102,Exeggcute,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,102 -103,Exeggutor,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,103 -104,Cubone,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,104 -105,Marowak,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,105 -106,Hitmonlee,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,106 -107,Hitmonchan,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,107 -108,Lickitung,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,108 -109,Koffing,,Red|Blue|LG: Eevee,109 -110,Weezing,,Red|Blue|LG: Eevee,110 -111,Rhyhorn,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,111 -111,Rhyhorn,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -112,Rhydon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,112 -112,Rhydon,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -113,Chansey,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,113 -114,Tangela,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,114 -115,Kangaskhan,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,115 -116,Horsea,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,116 -117,Seadra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,117 -118,Goldeen,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,118 -118,Goldeen,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -119,Seaking,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,119 -119,Seaking,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -120,Staryu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,120 -121,Starmie,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,121 -122,Mr. Mime,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,122 -123,Scyther,,Red|Yellow|LG: Pikachu,123 -123,Scyther,Female,Red|Yellow|LG: Pikachu, -124,Jynx,,Red|Blue|LG: Pikachu|LG: Eevee,124 -125,Electabuzz,,Red|LG: Pikachu|LG: Eevee,125 -126,Magmar,,Blue|LG: Pikachu|LG: Eevee,126 -127,Pinsir,,Blue|Yellow|LG: Eevee,127 -128,Tauros,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,128 -129,Magikarp,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,129 -129,Magikarp,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -130,Gyarados,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,130 -130,Gyarados,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -131,Lapras,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,131 -132,Ditto,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,132 -133,Eevee,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,133 -133,Eevee,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, -134,Vaporeon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,134 -135,Jolteon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,135 -136,Flareon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,136 -137,Porygon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,137 -138,Omanyte,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,138 -139,Omastar,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,139 -140,Kabuto,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,140 -141,Kabutops,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,141 -142,Aerodactyl,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,142 -143,Snorlax,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,143 -144,Articuno,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,144 -145,Zapdos,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,145 -146,Moltres,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,146 -147,Dratini,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,147 -148,Dragonair,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,148 -149,Dragonite,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,149 -150,Mewtwo,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,150 -151,Mew,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,151 \ No newline at end of file +pokedexNumber,name,form,originGames,regionalDexGames,regionalNumber +1,Bulbasaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,1 +2,Ivysaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,2 +3,Venusaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,3 +3,Venusaur,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +4,Charmander,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,4 +5,Charmeleon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,5 +6,Charizard,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,6 +7,Squirtle,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,7 +8,Wartortle,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,8 +9,Blastoise,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,9 +10,Caterpie,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,10 +11,Metapod,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,11 +12,Butterfree,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,12 +12,Butterfree,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +13,Weedle,,Red|Blue|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,13 +14,Kakuna,,Red|Blue|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,14 +15,Beedrill,,Red|Blue|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,15 +16,Pidgey,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,16 +17,Pidgeotto,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,17 +18,Pidgeot,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,18 +19,Rattata,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,19 +19,Rattata,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +20,Raticate,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,20 +20,Raticate,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +21,Spearow,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,21 +22,Fearow,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,22 +23,Ekans,,Red|Blue|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,23 +24,Arbok,,Red|Blue|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,24 +25,Pikachu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,25 +25,Pikachu,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +26,Raichu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,26 +26,Raichu,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +27,Sandshrew,,Blue|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,27 +28,Sandslash,,Blue|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,28 +29,Nidoran♀,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,29 +30,Nidorina,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,30 +31,Nidoqueen,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,31 +32,Nidoran♂,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,32 +33,Nidorino,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,33 +34,Nidoking,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,34 +35,Clefairy,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,35 +36,Clefable,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,36 +37,Vulpix,,Blue|Yellow|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,37 +38,Ninetales,,Blue|Yellow|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,38 +39,Jigglypuff,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,39 +40,Wigglytuff,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,40 +41,Zubat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,41 +41,Zubat,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +42,Golbat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,42 +42,Golbat,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +43,Oddish,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,43 +44,Gloom,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,44 +44,Gloom,Female,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +45,Vileplume,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,45 +45,Vileplume,Female,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +46,Paras,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,46 +47,Parasect,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,47 +48,Venonat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,48 +49,Venomoth,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,49 +50,Diglett,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,50 +51,Dugtrio,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,51 +52,Meowth,,Blue|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,52 +53,Persian,,Blue|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,53 +54,Psyduck,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,54 +55,Golduck,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,55 +56,Mankey,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,56 +57,Primeape,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,57 +58,Growlithe,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,58 +59,Arcanine,,Red|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,59 +60,Poliwag,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,60 +61,Poliwhirl,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,61 +62,Poliwrath,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,62 +63,Abra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,63 +64,Kadabra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,64 +64,Kadabra,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +65,Alakazam,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,65 +65,Alakazam,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +66,Machop,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,66 +67,Machoke,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,67 +68,Machamp,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,68 +69,Bellsprout,,Blue|Yellow|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,69 +70,Weepinbell,,Blue|Yellow|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,70 +71,Victreebel,,Blue|Yellow|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,71 +72,Tentacool,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,72 +73,Tentacruel,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,73 +74,Geodude,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,74 +75,Graveler,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,75 +76,Golem,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,76 +77,Ponyta,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,77 +78,Rapidash,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,78 +79,Slowpoke,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,79 +80,Slowbro,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,80 +81,Magnemite,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,81 +82,Magneton,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,82 +83,Farfetch’d,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,83 +84,Doduo,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,84 +84,Doduo,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +85,Dodrio,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,85 +85,Dodrio,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +86,Seel,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,86 +87,Dewgong,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,87 +88,Grimer,,Red|Blue|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,88 +89,Muk,,Red|Blue|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,89 +90,Shellder,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,90 +91,Cloyster,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,91 +92,Gastly,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,92 +93,Haunter,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,93 +94,Gengar,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,94 +95,Onix,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,95 +96,Drowzee,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,96 +97,Hypno,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,97 +97,Hypno,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +98,Krabby,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,98 +99,Kingler,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,99 +100,Voltorb,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,100 +101,Electrode,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,101 +102,Exeggcute,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,102 +103,Exeggutor,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,103 +104,Cubone,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,104 +105,Marowak,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,105 +106,Hitmonlee,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,106 +107,Hitmonchan,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,107 +108,Lickitung,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,108 +109,Koffing,,Red|Blue|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,109 +110,Weezing,,Red|Blue|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,110 +111,Rhyhorn,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,111 +111,Rhyhorn,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +112,Rhydon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,112 +112,Rhydon,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +113,Chansey,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,113 +114,Tangela,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,114 +115,Kangaskhan,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,115 +116,Horsea,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,116 +117,Seadra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,117 +118,Goldeen,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,118 +118,Goldeen,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +119,Seaking,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,119 +119,Seaking,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +120,Staryu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,120 +121,Starmie,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,121 +122,Mr. Mime,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,122 +123,Scyther,,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,123 +123,Scyther,Female,Red|Yellow|LG: Pikachu,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +124,Jynx,,Red|Blue|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,124 +125,Electabuzz,,Red|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,125 +126,Magmar,,Blue|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,126 +127,Pinsir,,Blue|Yellow|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,127 +128,Tauros,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,128 +129,Magikarp,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,129 +129,Magikarp,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +130,Gyarados,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,130 +130,Gyarados,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +131,Lapras,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,131 +132,Ditto,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,132 +133,Eevee,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,133 +133,Eevee,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee, +134,Vaporeon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,134 +135,Jolteon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,135 +136,Flareon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,136 +137,Porygon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,137 +138,Omanyte,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,138 +139,Omastar,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,139 +140,Kabuto,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,140 +141,Kabutops,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,141 +142,Aerodactyl,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,142 +143,Snorlax,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,143 +144,Articuno,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,144 +145,Zapdos,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,145 +146,Moltres,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,146 +147,Dratini,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,147 +148,Dragonair,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,148 +149,Dragonite,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,149 +150,Mewtwo,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,150 +151,Mew,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,151 diff --git a/data/pokemon/gen2-johto.csv b/data/pokemon/gen2-johto.csv new file mode 100644 index 0000000..57b28f5 --- /dev/null +++ b/data/pokemon/gen2-johto.csv @@ -0,0 +1,149 @@ +pokedexNumber,name,form,originGames,regionalDexGames,regionalNumber +152,Chikorita,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,1 +153,Bayleef,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,2 +154,Meganium,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,3 +154,Meganium,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +155,Cyndaquil,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,4 +156,Quilava,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,5 +157,Typhlosion,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,6 +158,Totodile,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,7 +159,Croconaw,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,8 +160,Feraligatr,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,9 +161,Sentret,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,10 +162,Furret,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,11 +163,Hoothoot,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,12 +164,Noctowl,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,13 +165,Ledyba,,Silver|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,14 +165,Ledyba,Female,Silver|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +166,Ledian,,Silver|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,15 +166,Ledian,Female,Silver|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +167,Spinarak,,Gold|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver,16 +168,Ariados,,Gold|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver,17 +169,Crobat,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,18 +170,Chinchou,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,19 +171,Lanturn,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,20 +172,Pichu,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,21 +173,Cleffa,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,22 +174,Igglybuff,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,23 +175,Togepi,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,24 +176,Togetic,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,25 +177,Natu,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,26 +178,Xatu,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,27 +178,Xatu,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +179,Mareep,,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,28 +180,Flaaffy,,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,29 +181,Ampharos,,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,30 +182,Bellossom,,Red|Yellow|LG: Pikachu,Gold|Silver|Crystal|HeartGold|SoulSilver,31 +183,Marill,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,32 +184,Azumarill,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,33 +185,Sudowoodo,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,34 +185,Sudowoodo,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +186,Politoed,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,35 +186,Politoed,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver, +187,Hoppip,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,36 +188,Skiploom,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,37 +189,Jumpluff,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,38 +190,Aipom,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,39 +190,Aipom,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +191,Sunkern,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,40 +192,Sunflora,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,41 +193,Yanma,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,42 +194,Wooper,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,43 +194,Wooper,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +195,Quagsire,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,44 +195,Quagsire,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +196,Espeon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,45 +197,Umbreon,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,46 +198,Murkrow,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,47 +198,Murkrow,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +199,Slowking,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,48 +200,Misdreavus,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,49 +201,Unown,A,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,50 +201,Unown,B,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,C,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,D,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,E,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,F,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,G,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,H,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,I,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,J,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,K,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,L,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,M,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,N,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,O,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,P,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,Q,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,R,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,S,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,T,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,U,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,V,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,W,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,X,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,Y,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,Z,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,!,HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +201,Unown,?,HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +202,Wobbuffet,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,51 +202,Wobbuffet,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +203,Girafarig,,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,52 +203,Girafarig,Female,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +204,Pineco,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,53 +205,Forretress,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,54 +206,Dunsparce,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,55 +207,Gligar,,Gold|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver,56 +207,Gligar,Female,Gold|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver, +208,Steelix,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,57 +208,Steelix,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver, +209,Snubbull,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,58 +210,Granbull,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,59 +211,Qwilfish,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,60 +212,Scizor,,Red|Yellow|LG: Pikachu,Gold|Silver|Crystal|HeartGold|SoulSilver,61 +212,Scizor,Female,Red|Yellow|LG: Pikachu,Gold|Silver|Crystal|HeartGold|SoulSilver, +213,Shuckle,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,62 +214,Heracross,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,63 +214,Heracross,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +215,Sneasel,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,64 +215,Sneasel,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +216,Teddiursa,,Gold|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,65 +217,Ursaring,,Gold|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,66 +217,Ursaring,Female,Gold|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +218,Slugma,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,67 +219,Magcargo,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,68 +220,Swinub,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,69 +221,Piloswine,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,70 +221,Piloswine,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +222,Corsola,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,71 +223,Remoraid,,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,72 +224,Octillery,,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,73 +224,Octillery,Female,Gold|Silver|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +225,Delibird,,Silver|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,74 +226,Mantine,,Gold|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver,75 +227,Skarmory,,Silver|Crystal|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,76 +228,Houndour,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,77 +229,Houndoom,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,78 +229,Houndoom,Female,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver, +230,Kingdra,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,79 +231,Phanpy,,Silver|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver,80 +232,Donphan,,Silver|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver,81 +232,Donphan,Female,Silver|Crystal|HeartGold,Gold|Silver|Crystal|HeartGold|SoulSilver, +234,Stantler,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,83 +235,Smeargle,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,84 +236,Tyrogue,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,85 +237,Hitmontop,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,86 +238,Smoochum,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,87 +239,Elekid,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,88 +240,Magby,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,89 +241,Miltank,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,90 +242,Blissey,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,Gold|Silver|Crystal|HeartGold|SoulSilver,91 +243,Raikou,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,92 +244,Entei,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,93 +245,Suicune,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,94 +246,Larvitar,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,95 +247,Pupitar,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,96 +248,Tyranitar,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,97 +249,Lugia,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,98 +250,Ho-Oh,,Gold|Silver|Crystal|HeartGold|SoulSilver,Gold|Silver|Crystal|HeartGold|SoulSilver,99 +251,Celebi,,Crystal,Crystal|HeartGold|SoulSilver,100 diff --git a/scripts/csv-to-migration.js b/scripts/csv-to-migration.js index a21ad65..fcbb84a 100644 --- a/scripts/csv-to-migration.js +++ b/scripts/csv-to-migration.js @@ -113,7 +113,10 @@ function generateMigration(region) { const rows = pokemon.map(p => { const form = p.form ? `'${p.form}'` : 'NULL'; - const gamesList = p.games.split('|'); + // Use regionalDexGames for the database (regional dex availability) + // originGames column is for future origin dex feature + const gamesField = p.regionalDexGames || p.games; // Fallback to old 'games' column for compatibility + const gamesList = gamesField.split('|'); const gamesArray = `ARRAY[${gamesList.map(g => `'${g}'`).join(', ')}]`; return `(${p.pokedexNumber}, '${p.name}', ${form}, false, '${region}', ${gamesArray})`; @@ -124,11 +127,6 @@ function generateMigration(region) { // Regional dex numbers (separate table) sql += `-- Insert ${region} regional dex numbers\n`; - sql += `INSERT INTO regional_dex_numbers (\n`; - sql += ` pokedex_entry_id,\n`; - sql += ` region,\n`; - sql += ` dex_number\n`; - sql += `) VALUES\n`; const dexRows = pokemon .filter(p => p.regionalNumber) // Only entries with regional dex numbers @@ -141,10 +139,15 @@ function generateMigration(region) { }); if (dexRows.length > 0) { + sql += `INSERT INTO regional_dex_numbers (\n`; + sql += ` pokedex_entry_id,\n`; + sql += ` region,\n`; + sql += ` dex_number\n`; + sql += `) VALUES\n`; sql += dexRows.join(',\n'); sql += ';\n\n'; } else { - sql += ' -- No regional dex numbers for this region\n\n'; + sql += '-- No regional dex numbers for this region\n\n'; } // Add metadata @@ -155,7 +158,7 @@ function generateMigration(region) { sql += ` ('${region.toLowerCase()}_pokemon_count', '${pokemon.filter(p => !p.form).length}');\n`; // 4. Write file - const timestamp = new Date().toISOString().replace(/[-:.]/g, '').slice(0, 14); + const timestamp = new Date().toISOString().replace(/[-:T.]/g, '').slice(0, 14); const filename = `${timestamp}_seed_${region.toLowerCase()}.sql`; const outputPath = path.join(__dirname, '..', 'supabase', 'migrations', filename); diff --git a/src/lib/components/PokemonSprite.svelte b/src/lib/components/PokemonSprite.svelte index 4b0602b..d90fd50 100644 --- a/src/lib/components/PokemonSprite.svelte +++ b/src/lib/components/PokemonSprite.svelte @@ -31,13 +31,20 @@ // Sanitise the pokemon name by making it all lowercase and replacing any spaces with hyphens and removing other characters let sanitisedPokemonName = pokemonName.toLowerCase().replace(/[^a-z]/g, ''); - // Get the PokeApi id for the pokemon + /** + * Sprite Resolution Strategy: + * 1. For forms with PokeAPI entries (regional forms): Use PokeAPI ID (e.g., 10107.png) + * 2. For forms without PokeAPI entries (Unown, Burmy, etc.): Use {pokedexNumber}-{form} (e.g., 201-a.png) + * 3. For base forms: Use PokeAPI ID matching species_id + */ let pokeApiId; if (form && form.length > 0 && form !== 'Female') { // Sanitise the form by making it all lowercase and replacing spaces with hyphens let sanitisedForm = form .toLowerCase() .replaceAll(' ', '-') + .replaceAll('!', 'exclamation') + .replaceAll('?', 'question') .replaceAll('2', 'two') .replaceAll('3', 'three') .replaceAll('4', 'four'); @@ -59,20 +66,17 @@ break; } - // If the form is contained in the identifier, use that - if ( - pokeApiPokemon.find( - (pokemon) => pokemon.identifier === sanitisedPokemonName + '-' + sanitisedForm - ) - ) { - pokeApiId = pokeApiPokemon.find( - (pokemon) => pokemon.identifier === sanitisedPokemonName + '-' + sanitisedForm - )?.id; + // Try to find by PokeAPI identifier (e.g., "meowth-alola" -> 10107) + const pokeApiEntry = pokeApiPokemon.find( + (pokemon) => pokemon.identifier === sanitisedPokemonName + '-' + sanitisedForm + ); + + if (pokeApiEntry) { + // Pattern 1: Use PokeAPI ID (e.g., 10107.png for Meowth-Alola) + pokeApiId = pokeApiEntry.id; } else { - // If the form is not contained in the identifier, use the species_id - pokeApiId = pokeApiPokemon.find( - (pokemon) => pokemon.species_id.toString() === strippedPokedexNumber - )?.id; + // Pattern 2: Use {pokedexNumber}-{form} (e.g., 201-a.png for Unown-A) + pokeApiId = `${strippedPokedexNumber}-${sanitisedForm}`; } } else { pokeApiId = pokeApiPokemon.find( diff --git a/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte b/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte index fc914b6..75a4dd4 100644 --- a/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte +++ b/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte @@ -139,6 +139,7 @@ bind:value={catchRecord.personalNotes} id={`personalNotesInput-${catchRecord._id || pokedexEntry._id}`} class="form-textarea w-full p-2 border rounded" + style="min-height: 120px;" on:change={updateCatchRecord} >

@@ -199,7 +200,8 @@ diff --git a/src/lib/components/pokedex/PokedexSidebar.svelte b/src/lib/components/pokedex/PokedexSidebar.svelte deleted file mode 100644 index 183aea1..0000000 --- a/src/lib/components/pokedex/PokedexSidebar.svelte +++ /dev/null @@ -1,149 +0,0 @@ - - - diff --git a/src/lib/components/pokedex/PokedexViewBoxes.svelte b/src/lib/components/pokedex/PokedexViewBoxes.svelte index 96f101a..624c0ac 100644 --- a/src/lib/components/pokedex/PokedexViewBoxes.svelte +++ b/src/lib/components/pokedex/PokedexViewBoxes.svelte @@ -18,6 +18,7 @@ export let markBoxAsInHome = (boxNumber: number) => {}; export let markBoxAsNotInHome = (boxNumber: number) => {}; export let createCatchRecords = () => {}; + export let onPokemonClick: (pokemon: CombinedData) => void = () => {}; function cellBackgroundColourClass(catchRecord: CatchRecord | null) { if (catchRecord?.caught) { @@ -51,19 +52,19 @@ {#each boxNumbers as boxNumber}

Box {boxNumber}

- - - - -
@@ -72,10 +73,13 @@ ? pokedexEntry.boxPlacementForms : pokedexEntry.boxPlacement} {#if placement.box === boxNumber} -
onPokemonClick({ pokedexEntry, catchRecord })} + aria-label="View details for {pokedexEntry.pokemon}" >
@@ -106,7 +110,7 @@
-
+ {/if} {/each}
diff --git a/src/lib/components/pokedex/PokedexViewList.svelte b/src/lib/components/pokedex/PokedexViewList.svelte deleted file mode 100644 index 3189c57..0000000 --- a/src/lib/components/pokedex/PokedexViewList.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - -
-
- {#if combinedData && combinedData.length > 0} - {#each combinedData as { pokedexEntry, catchRecord }} - - {/each} - {:else if failedToLoad} - {#if creatingRecords && totalRecordsCreated > 0} -

Processed {totalRecordsCreated} Pokédex entries so far...

-

Please be patient, this may take some time.

- {:else if creatingRecords} -

Processing...

-

Please be patient, this may take some time.

- {:else} -

Failed to load

-

- If you're seeing this, you probably haven't created your Pokédex data yet. Please do so by - clicking this button. -

- - {/if} - {:else} -
-

Loading Pokédex

- -
- {/if} -
-
diff --git a/src/lib/models/PokedexEntry.ts b/src/lib/models/PokedexEntry.ts index d502928..91d968b 100644 --- a/src/lib/models/PokedexEntry.ts +++ b/src/lib/models/PokedexEntry.ts @@ -12,23 +12,7 @@ export interface PokedexEntry { regionToEvolveIn: string; evolutionInformation: string; catchInformation: string[]; - // Regional dex numbers - kantoDexNumber?: number; - johtoDexNumber?: number; - hoennDexNumber?: number; - sinnohDexNumber?: number; - unovaBwDexNumber?: number; - unovaB2w2DexNumber?: number; - kalosCentralDexNumber?: number; - kalosCoastalDexNumber?: number; - kalosMountainDexNumber?: number; - alolaSmDexNumber?: number; - alolaUsumDexNumber?: number; - galarDexNumber?: number; - galarIsleOfArmorDexNumber?: number; - galarCrownTundraDexNumber?: number; - hisuiDexNumber?: number; - paldeaDexNumber?: number; + // Note: Regional dex numbers stored in separate regional_dex_numbers table } // Database record type for Supabase @@ -43,23 +27,7 @@ export interface PokedexEntryDB { regionToEvolveIn: string | null; evolutionInformation: string | null; catchInformation: string[] | null; - // Regional dex numbers - snake_case to match database - kanto_dex_number: number | null; - johto_dex_number: number | null; - hoenn_dex_number: number | null; - sinnoh_dex_number: number | null; - unova_bw_dex_number: number | null; - unova_b2w2_dex_number: number | null; - kalos_central_dex_number: number | null; - kalos_coastal_dex_number: number | null; - kalos_mountain_dex_number: number | null; - alola_sm_dex_number: number | null; - alola_usum_dex_number: number | null; - galar_dex_number: number | null; - galar_isle_of_armor_dex_number: number | null; - galar_crown_tundra_dex_number: number | null; - hisui_dex_number: number | null; - paldea_dex_number: number | null; + // Note: Regional dex numbers stored in separate regional_dex_numbers table createdAt: string; updatedAt: string; } diff --git a/src/lib/repositories/CombinedDataRepository.ts b/src/lib/repositories/CombinedDataRepository.ts index cd1868d..b1c3088 100644 --- a/src/lib/repositories/CombinedDataRepository.ts +++ b/src/lib/repositories/CombinedDataRepository.ts @@ -2,8 +2,6 @@ import { type PokedexEntry, type PokedexEntryDB } from '$lib/models/PokedexEntry import { type CatchRecord, type CatchRecordDB } from '$lib/models/CatchRecord'; import { type CombinedData } from '$lib/models/CombinedData'; import type { SupabaseClient } from '@supabase/supabase-js'; -import { getRegionalDexColumnName } from '$lib/utils/regionalDexMapping'; -import { calculateBoxPlacement } from '$lib/utils/boxPlacement'; class CombinedDataRepository { constructor( @@ -27,23 +25,8 @@ class CombinedDataRepository { catchInformation: entry.catchInformation || [], // Box placement will be calculated dynamically after sorting boxPlacementForms: { box: 0, row: 0, column: 0 }, - boxPlacement: { box: 0, row: 0, column: 0 }, - kantoDexNumber: entry.kanto_dex_number ?? undefined, - johtoDexNumber: entry.johto_dex_number ?? undefined, - hoennDexNumber: entry.hoenn_dex_number ?? undefined, - sinnohDexNumber: entry.sinnoh_dex_number ?? undefined, - unovaBwDexNumber: entry.unova_bw_dex_number ?? undefined, - unovaB2w2DexNumber: entry.unova_b2w2_dex_number ?? undefined, - kalosCentralDexNumber: entry.kalos_central_dex_number ?? undefined, - kalosCoastalDexNumber: entry.kalos_coastal_dex_number ?? undefined, - kalosMountainDexNumber: entry.kalos_mountain_dex_number ?? undefined, - alolaSmDexNumber: entry.alola_sm_dex_number ?? undefined, - alolaUsumDexNumber: entry.alola_usum_dex_number ?? undefined, - galarDexNumber: entry.galar_dex_number ?? undefined, - galarIsleOfArmorDexNumber: entry.galar_isle_of_armor_dex_number ?? undefined, - galarCrownTundraDexNumber: entry.galar_crown_tundra_dex_number ?? undefined, - hisuiDexNumber: entry.hisui_dex_number ?? undefined, - paldeaDexNumber: entry.paldea_dex_number ?? undefined + boxPlacement: { box: 0, row: 0, column: 0 } + // Note: Regional dex numbers are stored in separate regional_dex_numbers table }; } @@ -71,8 +54,8 @@ class CombinedDataRepository { // Apply filters if (!enableForms) { - // Filter to only base forms (form is NULL) - query = query.is('form', null); + // Filter to only base forms (form is NULL) OR Unown "A" (since Unown has no base form) + query = query.or('form.is.null,and(pokemon.eq.Unown,form.eq.A)'); } if (region) { @@ -83,22 +66,9 @@ class CombinedDataRepository { query = query.contains('gamesToCatchIn', [game]); } - // Determine ordering strategy based on game filter - if (game) { - const regionalColumn = getRegionalDexColumnName(game); - if (regionalColumn) { - // Order by regional dex with national dex fallback for NULLs - query = query - .order(regionalColumn, { ascending: true, nullsFirst: false }) - .order('pokedexNumber', { ascending: true }); - } else { - // Game specified but has no regional dex mapping - query = query.order('pokedexNumber', { ascending: true }); - } - } else { - // No game filter - order by national dex number - query = query.order('pokedexNumber', { ascending: true }); - } + // Always order by national dex number + // Note: Regional dex ordering would require joining with regional_dex_numbers table + query = query.order('pokedexNumber', { ascending: true }); const { data: entries, error: entriesError } = await query; @@ -162,8 +132,8 @@ class CombinedDataRepository { // Apply filters if (!enableForms) { - // Filter to only base forms (form is NULL) - query = query.is('form', null); + // Filter to only base forms (form is NULL) OR Unown "A" (since Unown has no base form) + query = query.or('form.is.null,and(pokemon.eq.Unown,form.eq.A)'); } if (region) { @@ -174,22 +144,9 @@ class CombinedDataRepository { query = query.contains('gamesToCatchIn', [game]); } - // Determine ordering strategy based on game filter - if (game) { - const regionalColumn = getRegionalDexColumnName(game); - if (regionalColumn) { - // Order by regional dex with national dex fallback for NULLs - query = query - .order(regionalColumn, { ascending: true, nullsFirst: false }) - .order('pokedexNumber', { ascending: true }); - } else { - // Game specified but has no regional dex mapping - query = query.order('pokedexNumber', { ascending: true }); - } - } else { - // No game filter - order by national dex number - query = query.order('pokedexNumber', { ascending: true }); - } + // Always order by national dex number + // Note: Regional dex ordering would require joining with regional_dex_numbers table + query = query.order('pokedexNumber', { ascending: true }); const { data: entries, error: entriesError } = await query; @@ -247,8 +204,8 @@ class CombinedDataRepository { // Apply same filters as in findCombinedData if (!enableForms) { - // Filter to only base forms (form is NULL) - query = query.is('form', null); + // Filter to only base forms (form is NULL) OR Unown "A" (since Unown has no base form) + query = query.or('form.is.null,and(pokemon.eq.Unown,form.eq.A)'); } if (region) { diff --git a/src/routes/api/games/+server.ts b/src/routes/api/games/+server.ts new file mode 100644 index 0000000..104302b --- /dev/null +++ b/src/routes/api/games/+server.ts @@ -0,0 +1,32 @@ +import { json } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; + +/** + * GET /api/games + * Returns all games from the games table, sorted by release year descending (newest first) + */ +export const GET: RequestHandler = async ({ locals }) => { + const { supabase } = locals; + + try { + // Query games table for all games, sorted by release year descending + const { data, error } = await supabase + .from('games') + .select('displayName, releaseYear') + .order('releaseYear', { ascending: false }) + .order('displayName', { ascending: true }); // Secondary sort by name for same year + + if (error) { + console.error('Error fetching games:', error); + return json({ error: 'Failed to fetch games' }, { status: 500 }); + } + + // Extract just the display names + const gameNames = data.map((row) => row.displayName); + + return json({ games: gameNames }); + } catch (err) { + console.error('Unexpected error fetching games:', err); + return json({ error: 'Internal server error' }, { status: 500 }); + } +}; diff --git a/src/routes/pokedex/[id]/+page.svelte b/src/routes/pokedex/[id]/+page.svelte index 9d6fc58..8c0f3d6 100644 --- a/src/routes/pokedex/[id]/+page.svelte +++ b/src/routes/pokedex/[id]/+page.svelte @@ -5,9 +5,9 @@ import { type CombinedData } from '$lib/models/CombinedData'; import { browser } from '$app/environment'; import type { PokedexEntry } from '$lib/models/PokedexEntry'; - import PokedexSidebar from '$lib/components/pokedex/PokedexSidebar.svelte'; - import PokedexViewList from '$lib/components/pokedex/PokedexViewList.svelte'; import PokedexViewBoxes from '$lib/components/pokedex/PokedexViewBoxes.svelte'; + import PokedexModal from '$lib/components/pokedex/PokedexModal.svelte'; + import PokedexEntryCatchRecord from '$lib/components/pokedex/PokedexEntryCatchRecord.svelte'; import type { PageData } from './$types'; export let data: PageData; @@ -23,40 +23,49 @@ let creatingRecords = false; let totalRecordsCreated = 0; let failedToLoad = false; - let catchRegion = ''; - let catchGame = ''; let localUser: User | null; - let showOrigins = true; - let showShiny = false; - let drawerOpen = false; - let viewAsBoxes = false; let boxNumbers: number[] = []; + let showModal = false; + let selectedPokemon: CombinedData | null = null; + + // Derive from pokedex config + $: showOrigins = pokedex.isOriginDex; + $: showShiny = pokedex.isShinyDex; const unsubscribe = user.subscribe((value) => { localUser = value; }); onDestroy(unsubscribe); - function toggleOrigins() { - showOrigins = !showOrigins; + function openPokemonModal(pokemon: CombinedData) { + selectedPokemon = pokemon; + showModal = true; } - async function toggleShiny() { - showShiny = !showShiny; - await getData(); + function closePokemonModal() { + showModal = false; + selectedPokemon = null; } - async function toggleViewAsBoxes() { - viewAsBoxes = !viewAsBoxes; - await getData(); + async function handleModalCatchUpdate(event: any) { + await updateACatch(event); // Existing handler + // Sync modal with refreshed data + if (selectedPokemon && combinedData) { + const updated = combinedData.find( + (cd) => cd.pokedexEntry._id === selectedPokemon!.pokedexEntry._id + ); + if (updated) { + selectedPokemon = updated; + } + } } async function getData(setCombinedDataToNull = true) { if (setCombinedDataToNull) { combinedData = null; } - // Use new pokédex-scoped endpoint - let endpoint = `/api/pokedexes/${pokedexId}/combined-data?page=${currentPage}&limit=${viewAsBoxes ? 9999 : itemsPerPage}&enableForms=${pokedex.isFormDex}®ion=${catchRegion}&game=${catchGame}`; + // Use new pokédex-scoped endpoint - always fetch all data for box view + let endpoint = `/api/pokedexes/${pokedexId}/combined-data?page=${currentPage}&limit=9999&enableForms=${pokedex.isFormDex}`; const response = await fetch(endpoint); const fetchedData = await response.json(); @@ -66,7 +75,8 @@ } combinedData = fetchedData.combinedData; totalPages = fetchedData.totalPages || 0; - if (viewAsBoxes) { + // Always extract box numbers for box view + if (combinedData) { boxNumbers = [ ...new Set( combinedData.map(({ pokedexEntry }) => @@ -116,6 +126,8 @@ needsToEvolve: boolean, inHome: boolean | null = null ) { + if (!combinedData) return; + let catchRecordsToUpdate = combinedData .filter(({ pokedexEntry }) => (pokedex.isFormDex ? pokedexEntry.boxPlacementForms.box : pokedexEntry.boxPlacement.box) === @@ -260,63 +272,119 @@ {#if !localUser}

Please sign in

{:else} -
- -
- +
+ +
+
+
+ +
+

{pokedex.name}

- {#if viewAsBoxes} - - {:else} - - {/if} -
-
- - +
+ + {#if pokedex.isLivingDex} +
+ + + + Living +
+ {/if} + {#if pokedex.isShinyDex} +
+ + + + Shiny +
+ {/if} + {#if pokedex.isOriginDex} +
+ + + + Origin +
+ {/if} + {#if pokedex.isFormDex} +
+ + + + Form +
+ {/if} + + + {#if pokedex.gameScope} +
+
+ + + + + {pokedex.gameScope} +
+ {:else} +
+
+ + + + All Games +
+ {/if} +
+ + {#if pokedex.description} +

{pokedex.description}

+ {/if} +
+ + + +
+
+ + +
+ + {#if showModal && selectedPokemon} + + + + {/if} {/if} diff --git a/supabase/migrations/20260105151500_create_games_table.sql b/supabase/migrations/20260105151500_create_games_table.sql new file mode 100644 index 0000000..56619e1 --- /dev/null +++ b/supabase/migrations/20260105151500_create_games_table.sql @@ -0,0 +1,40 @@ +-- Create games table to store game metadata +CREATE TABLE IF NOT EXISTS games ( + id TEXT PRIMARY KEY, + "displayName" TEXT NOT NULL, + region TEXT NOT NULL, + generation INTEGER NOT NULL, + "releaseYear" INTEGER NOT NULL, + "createdAt" TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + "updatedAt" TIMESTAMP WITH TIME ZONE DEFAULT NOW() +); + +-- Enable RLS +ALTER TABLE games ENABLE ROW LEVEL SECURITY; + +-- Allow anyone to read games (public reference data) +CREATE POLICY "Games are publicly readable" + ON games + FOR SELECT + TO public + USING (true); + +-- Insert games data from games.csv +INSERT INTO games (id, "displayName", region, generation, "releaseYear") VALUES + ('red', 'Red', 'Kanto', 1, 1996), + ('blue', 'Blue', 'Kanto', 1, 1996), + ('yellow', 'Yellow', 'Kanto', 1, 1998), + ('lg--pikachu', 'LG: Pikachu', 'Kanto', 7, 2018), + ('lg--eevee', 'LG: Eevee', 'Kanto', 7, 2018), + ('gold', 'Gold', 'Johto', 2, 1999), + ('silver', 'Silver', 'Johto', 2, 1999), + ('crystal', 'Crystal', 'Johto', 2, 2000), + ('heartgold', 'HeartGold', 'Johto', 4, 2009), + ('soulsilver', 'SoulSilver', 'Johto', 4, 2009), + ('legends-arceus', 'Legends: Arceus', 'Hisui', 8, 2022) +ON CONFLICT (id) DO UPDATE SET + "displayName" = EXCLUDED."displayName", + region = EXCLUDED.region, + generation = EXCLUDED.generation, + "releaseYear" = EXCLUDED."releaseYear", + "updatedAt" = NOW(); diff --git a/supabase/migrations/20260104000003_seed_kanto.sql b/supabase/migrations/20260105155340_seed_kanto.sql similarity index 90% rename from supabase/migrations/20260104000003_seed_kanto.sql rename to supabase/migrations/20260105155340_seed_kanto.sql index 2e60ab6..88960ee 100644 --- a/supabase/migrations/20260104000003_seed_kanto.sql +++ b/supabase/migrations/20260105155340_seed_kanto.sql @@ -33,9 +33,9 @@ INSERT INTO pokedex_entries ( (11, 'Metapod', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (12, 'Butterfree', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (12, 'Butterfree', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(13, 'Weedle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee']), -(14, 'Kakuna', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee']), -(15, 'Beedrill', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee']), +(13, 'Weedle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(14, 'Kakuna', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(15, 'Beedrill', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (16, 'Pidgey', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (17, 'Pidgeotto', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (18, 'Pidgeot', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), @@ -45,14 +45,14 @@ INSERT INTO pokedex_entries ( (20, 'Raticate', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (21, 'Spearow', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (22, 'Fearow', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(23, 'Ekans', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee']), -(24, 'Arbok', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee']), +(23, 'Ekans', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(24, 'Arbok', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (25, 'Pikachu', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (25, 'Pikachu', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (26, 'Raichu', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (26, 'Raichu', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(27, 'Sandshrew', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Pikachu']), -(28, 'Sandslash', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Pikachu']), +(27, 'Sandshrew', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(28, 'Sandslash', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (29, 'Nidoran♀', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (30, 'Nidorina', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (31, 'Nidoqueen', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), @@ -61,33 +61,33 @@ INSERT INTO pokedex_entries ( (34, 'Nidoking', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (35, 'Clefairy', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (36, 'Clefable', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(37, 'Vulpix', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee']), -(38, 'Ninetales', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee']), +(37, 'Vulpix', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(38, 'Ninetales', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (39, 'Jigglypuff', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (40, 'Wigglytuff', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (41, 'Zubat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (41, 'Zubat', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (42, 'Golbat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (42, 'Golbat', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(43, 'Oddish', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(44, 'Gloom', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(44, 'Gloom', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(45, 'Vileplume', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(45, 'Vileplume', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), +(43, 'Oddish', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(44, 'Gloom', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(44, 'Gloom', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(45, 'Vileplume', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(45, 'Vileplume', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (46, 'Paras', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (47, 'Parasect', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (48, 'Venonat', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (49, 'Venomoth', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (50, 'Diglett', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (51, 'Dugtrio', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(52, 'Meowth', NULL, false, 'Kanto', ARRAY['Blue', 'LG: Eevee']), -(53, 'Persian', NULL, false, 'Kanto', ARRAY['Blue', 'LG: Eevee']), +(52, 'Meowth', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(53, 'Persian', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (54, 'Psyduck', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (55, 'Golduck', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(56, 'Mankey', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(57, 'Primeape', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(58, 'Growlithe', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(59, 'Arcanine', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(56, 'Mankey', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(57, 'Primeape', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(58, 'Growlithe', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(59, 'Arcanine', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (60, 'Poliwag', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (61, 'Poliwhirl', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (62, 'Poliwrath', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), @@ -99,9 +99,9 @@ INSERT INTO pokedex_entries ( (66, 'Machop', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (67, 'Machoke', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (68, 'Machamp', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(69, 'Bellsprout', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee']), -(70, 'Weepinbell', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee']), -(71, 'Victreebel', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee']), +(69, 'Bellsprout', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(70, 'Weepinbell', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(71, 'Victreebel', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (72, 'Tentacool', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (73, 'Tentacruel', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (74, 'Geodude', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), @@ -120,8 +120,8 @@ INSERT INTO pokedex_entries ( (85, 'Dodrio', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (86, 'Seel', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (87, 'Dewgong', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(88, 'Grimer', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu']), -(89, 'Muk', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu']), +(88, 'Grimer', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(89, 'Muk', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (90, 'Shellder', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (91, 'Cloyster', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (92, 'Gastly', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), @@ -142,8 +142,8 @@ INSERT INTO pokedex_entries ( (106, 'Hitmonlee', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (107, 'Hitmonchan', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (108, 'Lickitung', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(109, 'Koffing', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee']), -(110, 'Weezing', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Eevee']), +(109, 'Koffing', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(110, 'Weezing', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (111, 'Rhyhorn', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (111, 'Rhyhorn', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (112, 'Rhydon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), @@ -160,12 +160,12 @@ INSERT INTO pokedex_entries ( (120, 'Staryu', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (121, 'Starmie', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (122, 'Mr. Mime', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), -(123, 'Scyther', NULL, false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(123, 'Scyther', 'Female', false, 'Kanto', ARRAY['Red', 'Yellow', 'LG: Pikachu']), -(124, 'Jynx', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'LG: Pikachu', 'LG: Eevee']), -(125, 'Electabuzz', NULL, false, 'Kanto', ARRAY['Red', 'LG: Pikachu', 'LG: Eevee']), -(126, 'Magmar', NULL, false, 'Kanto', ARRAY['Blue', 'LG: Pikachu', 'LG: Eevee']), -(127, 'Pinsir', NULL, false, 'Kanto', ARRAY['Blue', 'Yellow', 'LG: Eevee']), +(123, 'Scyther', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(123, 'Scyther', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(124, 'Jynx', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(125, 'Electabuzz', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(126, 'Magmar', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), +(127, 'Pinsir', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (128, 'Tauros', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (129, 'Magikarp', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), (129, 'Magikarp', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']), diff --git a/supabase/migrations/20260105160807_seed_johto.sql b/supabase/migrations/20260105160807_seed_johto.sql new file mode 100644 index 0000000..79df3ef --- /dev/null +++ b/supabase/migrations/20260105160807_seed_johto.sql @@ -0,0 +1,282 @@ +-- Seed Johto region Pokémon (Gen 2) +-- Auto-generated from CSV files + +-- Insert Johto region-game mappings +INSERT INTO region_game_mappings (region, game) VALUES + ('Johto', 'Gold'), + ('Johto', 'Silver'), + ('Johto', 'Crystal'), + ('Johto', 'HeartGold'), + ('Johto', 'SoulSilver') +ON CONFLICT (region, game) DO NOTHING; + +-- Insert Johto Pokémon entries +INSERT INTO pokedex_entries ( + "pokedexNumber", + pokemon, + form, + "canGigantamax", + "regionToCatchIn", + "gamesToCatchIn" +) VALUES +(152, 'Chikorita', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(153, 'Bayleef', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(154, 'Meganium', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(154, 'Meganium', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(155, 'Cyndaquil', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(156, 'Quilava', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(157, 'Typhlosion', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(158, 'Totodile', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(159, 'Croconaw', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(160, 'Feraligatr', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(161, 'Sentret', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(162, 'Furret', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(163, 'Hoothoot', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(164, 'Noctowl', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(165, 'Ledyba', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(165, 'Ledyba', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(166, 'Ledian', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(166, 'Ledian', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(167, 'Spinarak', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(168, 'Ariados', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(169, 'Crobat', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(170, 'Chinchou', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(171, 'Lanturn', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(172, 'Pichu', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(173, 'Cleffa', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(174, 'Igglybuff', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(175, 'Togepi', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(176, 'Togetic', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(177, 'Natu', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(178, 'Xatu', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(178, 'Xatu', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(179, 'Mareep', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(180, 'Flaaffy', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(181, 'Ampharos', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(182, 'Bellossom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(183, 'Marill', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(184, 'Azumarill', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(185, 'Sudowoodo', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(185, 'Sudowoodo', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(186, 'Politoed', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(186, 'Politoed', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(187, 'Hoppip', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(188, 'Skiploom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(189, 'Jumpluff', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(190, 'Aipom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(190, 'Aipom', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(191, 'Sunkern', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(192, 'Sunflora', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(193, 'Yanma', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(194, 'Wooper', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(194, 'Wooper', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(195, 'Quagsire', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(195, 'Quagsire', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(196, 'Espeon', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(197, 'Umbreon', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(198, 'Murkrow', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(198, 'Murkrow', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(199, 'Slowking', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(200, 'Misdreavus', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'A', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'B', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'C', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'D', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'E', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'F', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'G', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'H', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'I', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'J', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'K', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'L', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'M', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'N', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'O', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'P', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'Q', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'R', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'S', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'T', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'U', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'V', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'W', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'X', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'Y', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', 'Z', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', '!', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(201, 'Unown', '?', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(202, 'Wobbuffet', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(202, 'Wobbuffet', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(203, 'Girafarig', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(203, 'Girafarig', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(204, 'Pineco', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(205, 'Forretress', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(206, 'Dunsparce', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(207, 'Gligar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(207, 'Gligar', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(208, 'Steelix', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(208, 'Steelix', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(209, 'Snubbull', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(210, 'Granbull', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(211, 'Qwilfish', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(212, 'Scizor', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(212, 'Scizor', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(213, 'Shuckle', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(214, 'Heracross', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(214, 'Heracross', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(215, 'Sneasel', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(215, 'Sneasel', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(216, 'Teddiursa', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(217, 'Ursaring', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(217, 'Ursaring', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(218, 'Slugma', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(219, 'Magcargo', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(220, 'Swinub', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(221, 'Piloswine', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(221, 'Piloswine', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(222, 'Corsola', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(223, 'Remoraid', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(224, 'Octillery', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(224, 'Octillery', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(225, 'Delibird', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(226, 'Mantine', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(227, 'Skarmory', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(228, 'Houndour', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(229, 'Houndoom', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(229, 'Houndoom', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(230, 'Kingdra', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(231, 'Phanpy', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(232, 'Donphan', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(232, 'Donphan', 'Female', false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(234, 'Stantler', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(235, 'Smeargle', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(236, 'Tyrogue', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(237, 'Hitmontop', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(238, 'Smoochum', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(239, 'Elekid', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(240, 'Magby', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(241, 'Miltank', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(242, 'Blissey', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(243, 'Raikou', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(244, 'Entei', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(245, 'Suicune', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(246, 'Larvitar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(247, 'Pupitar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(248, 'Tyranitar', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(249, 'Lugia', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(250, 'Ho-Oh', NULL, false, 'Johto', ARRAY['Gold', 'Silver', 'Crystal', 'HeartGold', 'SoulSilver']), +(251, 'Celebi', NULL, false, 'Johto', ARRAY['Crystal', 'HeartGold', 'SoulSilver']) +ON CONFLICT ON CONSTRAINT unique_pokemon_form DO NOTHING; + +-- Insert Johto regional dex numbers +INSERT INTO regional_dex_numbers ( + pokedex_entry_id, + region, + dex_number +) VALUES + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 152 AND form IS NULL), 'Johto', 1), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 153 AND form IS NULL), 'Johto', 2), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 154 AND form IS NULL), 'Johto', 3), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 155 AND form IS NULL), 'Johto', 4), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 156 AND form IS NULL), 'Johto', 5), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 157 AND form IS NULL), 'Johto', 6), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 158 AND form IS NULL), 'Johto', 7), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 159 AND form IS NULL), 'Johto', 8), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 160 AND form IS NULL), 'Johto', 9), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 161 AND form IS NULL), 'Johto', 10), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 162 AND form IS NULL), 'Johto', 11), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 163 AND form IS NULL), 'Johto', 12), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 164 AND form IS NULL), 'Johto', 13), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 165 AND form IS NULL), 'Johto', 14), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 166 AND form IS NULL), 'Johto', 15), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 167 AND form IS NULL), 'Johto', 16), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 168 AND form IS NULL), 'Johto', 17), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 169 AND form IS NULL), 'Johto', 18), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 170 AND form IS NULL), 'Johto', 19), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 171 AND form IS NULL), 'Johto', 20), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 172 AND form IS NULL), 'Johto', 21), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 173 AND form IS NULL), 'Johto', 22), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 174 AND form IS NULL), 'Johto', 23), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 175 AND form IS NULL), 'Johto', 24), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 176 AND form IS NULL), 'Johto', 25), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 177 AND form IS NULL), 'Johto', 26), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 178 AND form IS NULL), 'Johto', 27), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 179 AND form IS NULL), 'Johto', 28), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 180 AND form IS NULL), 'Johto', 29), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 181 AND form IS NULL), 'Johto', 30), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 182 AND form IS NULL), 'Johto', 31), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 183 AND form IS NULL), 'Johto', 32), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 184 AND form IS NULL), 'Johto', 33), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 185 AND form IS NULL), 'Johto', 34), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 186 AND form IS NULL), 'Johto', 35), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 187 AND form IS NULL), 'Johto', 36), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 188 AND form IS NULL), 'Johto', 37), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 189 AND form IS NULL), 'Johto', 38), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 190 AND form IS NULL), 'Johto', 39), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 191 AND form IS NULL), 'Johto', 40), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 192 AND form IS NULL), 'Johto', 41), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 193 AND form IS NULL), 'Johto', 42), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 194 AND form IS NULL), 'Johto', 43), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 195 AND form IS NULL), 'Johto', 44), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 196 AND form IS NULL), 'Johto', 45), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 197 AND form IS NULL), 'Johto', 46), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 198 AND form IS NULL), 'Johto', 47), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 199 AND form IS NULL), 'Johto', 48), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 200 AND form IS NULL), 'Johto', 49), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 201 AND form = 'A'), 'Johto', 50), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 202 AND form IS NULL), 'Johto', 51), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 203 AND form IS NULL), 'Johto', 52), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 204 AND form IS NULL), 'Johto', 53), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 205 AND form IS NULL), 'Johto', 54), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 206 AND form IS NULL), 'Johto', 55), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 207 AND form IS NULL), 'Johto', 56), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 208 AND form IS NULL), 'Johto', 57), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 209 AND form IS NULL), 'Johto', 58), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 210 AND form IS NULL), 'Johto', 59), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 211 AND form IS NULL), 'Johto', 60), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 212 AND form IS NULL), 'Johto', 61), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 213 AND form IS NULL), 'Johto', 62), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 214 AND form IS NULL), 'Johto', 63), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 215 AND form IS NULL), 'Johto', 64), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 216 AND form IS NULL), 'Johto', 65), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 217 AND form IS NULL), 'Johto', 66), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 218 AND form IS NULL), 'Johto', 67), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 219 AND form IS NULL), 'Johto', 68), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 220 AND form IS NULL), 'Johto', 69), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 221 AND form IS NULL), 'Johto', 70), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 222 AND form IS NULL), 'Johto', 71), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 223 AND form IS NULL), 'Johto', 72), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 224 AND form IS NULL), 'Johto', 73), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 225 AND form IS NULL), 'Johto', 74), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 226 AND form IS NULL), 'Johto', 75), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 227 AND form IS NULL), 'Johto', 76), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 228 AND form IS NULL), 'Johto', 77), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 229 AND form IS NULL), 'Johto', 78), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 230 AND form IS NULL), 'Johto', 79), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 231 AND form IS NULL), 'Johto', 80), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 232 AND form IS NULL), 'Johto', 81), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 234 AND form IS NULL), 'Johto', 83), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 235 AND form IS NULL), 'Johto', 84), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 236 AND form IS NULL), 'Johto', 85), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 237 AND form IS NULL), 'Johto', 86), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 238 AND form IS NULL), 'Johto', 87), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 239 AND form IS NULL), 'Johto', 88), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 240 AND form IS NULL), 'Johto', 89), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 241 AND form IS NULL), 'Johto', 90), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 242 AND form IS NULL), 'Johto', 91), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 243 AND form IS NULL), 'Johto', 92), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 244 AND form IS NULL), 'Johto', 93), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 245 AND form IS NULL), 'Johto', 94), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 246 AND form IS NULL), 'Johto', 95), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 247 AND form IS NULL), 'Johto', 96), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 248 AND form IS NULL), 'Johto', 97), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 249 AND form IS NULL), 'Johto', 98), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 250 AND form IS NULL), 'Johto', 99), + ((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 251 AND form IS NULL), 'Johto', 100); + +-- Add metadata +INSERT INTO metadata (key, value) VALUES + ('johto_seeded', 'true'), + ('johto_seed_date', NOW()::TEXT), + ('johto_pokemon_count', '98');