Merge pull request #81 from jcreek/data/dexes
Improve data seeding and structure
@@ -19,6 +19,10 @@ A web app to track completion of a living Pokédex.
|
||||
N.B. All local emails are captured by MailPit when running Supabase in Docker.
|
||||
8. You can now use [the app](http://localhost:5173/).
|
||||
|
||||
## Reference Data Updates
|
||||
|
||||
The seed data lives in `supabase/migrations/20260118001000_seed_reference_data.sql`. Update that migration directly when new data is added.
|
||||
|
||||
## Building
|
||||
|
||||
To create a production version:
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
dexId,gameDisplayName,dexDisplayName,sortOrder,isDlc,parentDexId,file
|
||||
red-kanto,Red,Kanto,1,false,,native-game-dexes/red-blue-yellow.csv
|
||||
blue-kanto,Blue,Kanto,1,false,,native-game-dexes/red-blue-yellow.csv
|
||||
yellow-kanto,Yellow,Kanto,1,false,,native-game-dexes/red-blue-yellow.csv
|
||||
gold-johto,Gold,Johto,1,false,,native-game-dexes/gold-silver-crystal.csv
|
||||
silver-johto,Silver,Johto,1,false,,native-game-dexes/gold-silver-crystal.csv
|
||||
crystal-johto,Crystal,Johto,1,false,,native-game-dexes/gold-silver-crystal.csv
|
||||
ruby-hoenn,Ruby,Hoenn,1,false,,native-game-dexes/ruby-sapphire-emerald.csv
|
||||
sapphire-hoenn,Sapphire,Hoenn,1,false,,native-game-dexes/ruby-sapphire-emerald.csv
|
||||
emerald-hoenn,Emerald,Hoenn,1,false,,native-game-dexes/ruby-sapphire-emerald.csv
|
||||
firered-kanto,FireRed,Kanto,1,false,,native-game-dexes/fire-red-leaf-green.csv
|
||||
leafgreen-kanto,LeafGreen,Kanto,1,false,,native-game-dexes/fire-red-leaf-green.csv
|
||||
diamond-sinnoh,Diamond,Sinnoh,1,false,,native-game-dexes/diamond-pearl.csv
|
||||
pearl-sinnoh,Pearl,Sinnoh,1,false,,native-game-dexes/diamond-pearl.csv
|
||||
platinum-sinnoh,Platinum,Sinnoh,1,false,,native-game-dexes/platinum.csv
|
||||
heart-gold-johto,Heart Gold,Johto,1,false,,native-game-dexes/heart-gold-soul-silver.csv
|
||||
soul-silver-johto,Soul Silver,Johto,1,false,,native-game-dexes/heart-gold-soul-silver.csv
|
||||
black-unova,Black,Unova,1,false,,native-game-dexes/black-white.csv
|
||||
white-unova,White,Unova,1,false,,native-game-dexes/black-white.csv
|
||||
black-2-unova,Black 2,Unova,1,false,,native-game-dexes/black-2-white-2.csv
|
||||
white-2-unova,White 2,Unova,1,false,,native-game-dexes/black-2-white-2.csv
|
||||
x-central-kalos,X,Central Kalos,1,false,,native-game-dexes/x-y-central-kalos.csv
|
||||
x-coastal-kalos,X,Coastal Kalos,2,false,,native-game-dexes/x-y-coastal-kalos.csv
|
||||
x-mountain-kalos,X,Mountain Kalos,3,false,,native-game-dexes/x-y-mountain-kalos.csv
|
||||
y-central-kalos,Y,Central Kalos,1,false,,native-game-dexes/x-y-central-kalos.csv
|
||||
y-coastal-kalos,Y,Coastal Kalos,2,false,,native-game-dexes/x-y-coastal-kalos.csv
|
||||
y-mountain-kalos,Y,Mountain Kalos,3,false,,native-game-dexes/x-y-mountain-kalos.csv
|
||||
omega-ruby-hoenn,Omega Ruby,Hoenn,1,false,,native-game-dexes/omega-ruby-alpha-sapphire.csv
|
||||
alpha-sapphire-hoenn,Alpha Sapphire,Hoenn,1,false,,native-game-dexes/omega-ruby-alpha-sapphire.csv
|
||||
sun-alola,Sun,Alola,1,false,,native-game-dexes/sun-moon-alola.csv
|
||||
moon-alola,Moon,Alola,1,false,,native-game-dexes/sun-moon-alola.csv
|
||||
ultra-sun-alola,Ultra Sun,Alola,1,false,,native-game-dexes/ultra-sun-ultra-moon-alola.csv
|
||||
ultra-moon-alola,Ultra Moon,Alola,1,false,,native-game-dexes/ultra-sun-ultra-moon-alola.csv
|
||||
lg-pikachu-kanto,LG: Pikachu,Kanto,1,false,,native-game-dexes/lets-go-pikachu-eevee.csv
|
||||
lg-eevee-kanto,LG: Eevee,Kanto,1,false,,native-game-dexes/lets-go-pikachu-eevee.csv
|
||||
sword-galar,Sword,Galar,1,false,,native-game-dexes/sword-shield.csv
|
||||
sword-isle-armor,Sword,Isle of Armor,2,true,sword-galar,native-game-dexes/sword-shield-isle-armor.csv
|
||||
sword-crown-tundra,Sword,Crown Tundra,3,true,sword-galar,native-game-dexes/sword-shield-crown-tundra.csv
|
||||
shield-galar,Shield,Galar,1,false,,native-game-dexes/sword-shield.csv
|
||||
shield-isle-armor,Shield,Isle of Armor,2,true,shield-galar,native-game-dexes/sword-shield-isle-armor.csv
|
||||
shield-crown-tundra,Shield,Crown Tundra,3,true,shield-galar,native-game-dexes/sword-shield-crown-tundra.csv
|
||||
brilliant-diamond-sinnoh,Brilliant Diamond,Sinnoh,1,false,,native-game-dexes/brilliant-diamond-shining-pearl.csv
|
||||
shining-pearl-sinnoh,Shining Pearl,Sinnoh,1,false,,native-game-dexes/brilliant-diamond-shining-pearl.csv
|
||||
legends-arceus-hisui,Legends: Arceus,Hisui,1,false,,native-game-dexes/legends-arceus.csv
|
||||
scarlet-paldea,Scarlet,Paldea,1,false,,native-game-dexes/scarlet-violet.csv
|
||||
scarlet-kitakami,Scarlet,Kitakami,2,true,scarlet-paldea,native-game-dexes/scarlet-violet-kitakami.csv
|
||||
scarlet-blueberry,Scarlet,Blueberry,3,true,scarlet-paldea,native-game-dexes/scarlet-violet-blueberry.csv
|
||||
violet-paldea,Violet,Paldea,1,false,,native-game-dexes/scarlet-violet.csv
|
||||
violet-kitakami,Violet,Kitakami,2,true,violet-paldea,native-game-dexes/scarlet-violet-kitakami.csv
|
||||
violet-blueberry,Violet,Blueberry,3,true,violet-paldea,native-game-dexes/scarlet-violet-blueberry.csv
|
||||
legends-z-a-kalos,Legends: Z-A,Kalos,1,false,,native-game-dexes/legends-z-a.csv
|
||||
legends-z-a-mega-dimension,Legends: Z-A,Mega Dimension,2,true,legends-z-a-kalos,native-game-dexes/legends-z-a-mega-dimension.csv
|
||||
|
@@ -0,0 +1,46 @@
|
||||
game,region,releaseYear
|
||||
Red,Kanto,1996
|
||||
Blue,Kanto,1996
|
||||
Yellow,Kanto,1998
|
||||
Gold,Johto,1999
|
||||
Silver,Johto,1999
|
||||
Crystal,Johto,2000
|
||||
Ruby,Hoenn,2002
|
||||
Sapphire,Hoenn,2002
|
||||
Colosseum,Orre,2003
|
||||
Emerald,Hoenn,2004
|
||||
FireRed,Kanto,2004
|
||||
LeafGreen,Kanto,2004
|
||||
XD: Gale of Darkness,Orre,2005
|
||||
Diamond,Sinnoh,2006
|
||||
Pearl,Sinnoh,2006
|
||||
Platinum,Sinnoh,2008
|
||||
Ranch,Ranch,2008
|
||||
Heart Gold,Johto,2009
|
||||
Soul Silver,Johto,2009
|
||||
Black,Unova,2010
|
||||
White,Unova,2010
|
||||
Black 2,Unova,2012
|
||||
White 2,Unova,2012
|
||||
Dream Radar,Unova,2012
|
||||
X,Kalos,2013
|
||||
Y,Kalos,2013
|
||||
Omega Ruby,Hoenn,2014
|
||||
Alpha Sapphire,Hoenn,2014
|
||||
Sun,Alola,2016
|
||||
Moon,Alola,2016
|
||||
Moon (demo),Alola,2016
|
||||
Go,Go,2016
|
||||
Ultra Sun,Alola,2017
|
||||
Ultra Moon,Alola,2017
|
||||
LG: Pikachu,Kanto,2018
|
||||
LG: Eevee,Kanto,2018
|
||||
Sword,Galar,2019
|
||||
Shield,Galar,2019
|
||||
Home,Home,2020
|
||||
Brilliant Diamond,Sinnoh,2021
|
||||
Shining Pearl,Sinnoh,2021
|
||||
Legends: Arceus,Hisui,2022
|
||||
Scarlet,Paldea,2022
|
||||
Violet,Paldea,2022
|
||||
Legends: Z-A,Kalos,2025
|
||||
|
@@ -0,0 +1,302 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
0,Victini,,
|
||||
1,Snivy,,
|
||||
2,Servine,,
|
||||
3,Serperior,,
|
||||
4,Tepig,,
|
||||
5,Pignite,,
|
||||
6,Emboar,,
|
||||
7,Oshawott,,
|
||||
8,Dewott,,
|
||||
9,Samurott,,
|
||||
10,Patrat,,
|
||||
11,Watchog,,
|
||||
12,Purrloin,,
|
||||
13,Liepard,,
|
||||
14,Pidove,,
|
||||
15,Tranquill,,
|
||||
16,Unfezant,,
|
||||
17,Sewaddle,,
|
||||
18,Swadloon,,
|
||||
19,Leavanny,,
|
||||
20,Sunkern,,
|
||||
21,Sunflora,,
|
||||
22,Lillipup,,
|
||||
23,Herdier,,
|
||||
24,Stoutland,,
|
||||
25,Mareep,,
|
||||
26,Flaaffy,,
|
||||
27,Ampharos,,
|
||||
28,Psyduck,,
|
||||
29,Golduck,,
|
||||
30,Azurill,,
|
||||
31,Marill,,
|
||||
32,Azumarill,,
|
||||
33,Riolu,,
|
||||
34,Lucario,,
|
||||
35,Dunsparce,,
|
||||
36,Audino,,
|
||||
37,Pansage,,
|
||||
38,Simisage,,
|
||||
39,Pansear,,
|
||||
40,Simisear,,
|
||||
41,Panpour,,
|
||||
42,Simipour,,
|
||||
43,Venipede,,
|
||||
44,Whirlipede,,
|
||||
45,Scolipede,,
|
||||
46,Koffing,,
|
||||
47,Weezing,,
|
||||
48,Magnemite,,
|
||||
49,Magneton,,
|
||||
50,Magnezone,,
|
||||
51,Growlithe,,
|
||||
52,Arcanine,,
|
||||
53,Magby,,
|
||||
54,Magmar,,
|
||||
55,Magmortar,,
|
||||
56,Elekid,,
|
||||
57,Electabuzz,,
|
||||
58,Electivire,,
|
||||
59,Rattata,,
|
||||
60,Raticate,,
|
||||
61,Zubat,,
|
||||
62,Golbat,,
|
||||
63,Crobat,,
|
||||
64,Grimer,,
|
||||
65,Muk,,
|
||||
66,Woobat,,
|
||||
67,Swoobat,,
|
||||
68,Roggenrola,,
|
||||
69,Boldore,,
|
||||
70,Gigalith,,
|
||||
71,Onix,,
|
||||
72,Steelix,,
|
||||
73,Timburr,,
|
||||
74,Gurdurr,,
|
||||
75,Conkeldurr,,
|
||||
76,Drilbur,,
|
||||
77,Excadrill,,
|
||||
78,Skitty,,
|
||||
79,Delcatty,,
|
||||
80,Buneary,,
|
||||
81,Lopunny,,
|
||||
82,Cottonee,,
|
||||
83,Whimsicott,,
|
||||
84,Petilil,,
|
||||
85,Lilligant,,
|
||||
86,Munna,,
|
||||
87,Musharna,,
|
||||
88,Cleffa,,
|
||||
89,Clefairy,,
|
||||
90,Clefable,,
|
||||
91,Eevee,,
|
||||
92,Vaporeon,,
|
||||
93,Jolteon,,
|
||||
94,Flareon,,
|
||||
95,Espeon,,
|
||||
96,Umbreon,,
|
||||
97,Leafeon,,
|
||||
98,Glaceon,,
|
||||
99,Sandile,,
|
||||
100,Krokorok,,
|
||||
101,Krookodile,,
|
||||
102,Darumaka,,
|
||||
103,Darmanitan,,
|
||||
104,Basculin,,
|
||||
105,Trubbish,,
|
||||
106,Garbodor,,
|
||||
107,Minccino,,
|
||||
108,Cinccino,,
|
||||
109,Rufflet,,
|
||||
110,Braviary,,
|
||||
111,Vullaby,,
|
||||
112,Mandibuzz,,
|
||||
113,Sandshrew,,
|
||||
114,Sandslash,,
|
||||
115,Dwebble,,
|
||||
116,Crustle,,
|
||||
117,Scraggy,,
|
||||
118,Scrafty,,
|
||||
119,Maractus,,
|
||||
120,Sigilyph,,
|
||||
121,Trapinch,,
|
||||
122,Vibrava,,
|
||||
123,Flygon,,
|
||||
124,Yamask,,
|
||||
125,Cofagrigus,,
|
||||
126,Tirtouga,,
|
||||
127,Carracosta,,
|
||||
128,Archen,,
|
||||
129,Archeops,,
|
||||
130,Klink,,
|
||||
131,Klang,,
|
||||
132,Klinklang,,
|
||||
133,Budew,,
|
||||
134,Roselia,,
|
||||
135,Roserade,,
|
||||
136,Gothita,,
|
||||
137,Gothorita,,
|
||||
138,Gothitelle,,
|
||||
139,Solosis,,
|
||||
140,Duosion,,
|
||||
141,Reuniclus,,
|
||||
142,Combee,,
|
||||
143,Vespiquen,,
|
||||
144,Emolga,,
|
||||
145,Heracross,,
|
||||
146,Pinsir,,
|
||||
147,Blitzle,,
|
||||
148,Zebstrika,,
|
||||
149,Buizel,,
|
||||
150,Floatzel,,
|
||||
151,Zorua,,
|
||||
152,Zoroark,,
|
||||
153,Ducklett,,
|
||||
154,Swanna,,
|
||||
155,Karrablast,,
|
||||
156,Escavalier,,
|
||||
157,Shelmet,,
|
||||
158,Accelgor,,
|
||||
159,Deerling,,
|
||||
160,Sawsbuck,,
|
||||
161,Foongus,,
|
||||
162,Amoonguss,,
|
||||
163,Castform,,
|
||||
164,Nosepass,,
|
||||
165,Probopass,,
|
||||
166,Aron,,
|
||||
167,Lairon,,
|
||||
168,Aggron,,
|
||||
169,Baltoy,,
|
||||
170,Claydol,,
|
||||
171,Larvesta,,
|
||||
172,Volcarona,,
|
||||
173,Joltik,,
|
||||
174,Galvantula,,
|
||||
175,Ferroseed,,
|
||||
176,Ferrothorn,,
|
||||
177,Tynamo,,
|
||||
178,Eelektrik,,
|
||||
179,Eelektross,,
|
||||
180,Frillish,,
|
||||
181,Jellicent,,
|
||||
182,Alomomola,,
|
||||
183,Axew,,
|
||||
184,Fraxure,,
|
||||
185,Haxorus,,
|
||||
186,Zangoose,,
|
||||
187,Seviper,,
|
||||
188,Elgyem,,
|
||||
189,Beheeyem,,
|
||||
190,Litwick,,
|
||||
191,Lampent,,
|
||||
192,Chandelure,,
|
||||
193,Heatmor,,
|
||||
194,Durant,,
|
||||
195,Cubchoo,,
|
||||
196,Beartic,,
|
||||
197,Cryogonal,,
|
||||
198,Tornadus,,
|
||||
199,Thundurus,,
|
||||
200,Landorus,,
|
||||
201,Skorupi,,
|
||||
202,Drapion,,
|
||||
203,Skarmory,,
|
||||
204,Numel,,
|
||||
205,Camerupt,,
|
||||
206,Spoink,,
|
||||
207,Grumpig,,
|
||||
208,Drifloon,,
|
||||
209,Drifblim,,
|
||||
210,Shuppet,,
|
||||
211,Banette,,
|
||||
212,Wingull,,
|
||||
213,Pelipper,,
|
||||
214,Lunatone,,
|
||||
215,Solrock,,
|
||||
216,Absol,,
|
||||
217,Tangela,,
|
||||
218,Tangrowth,,
|
||||
219,Mienfoo,,
|
||||
220,Mienshao,,
|
||||
221,Gligar,,
|
||||
222,Gliscor,,
|
||||
223,Pawniard,,
|
||||
224,Bisharp,,
|
||||
225,Cobalion,,
|
||||
226,Terrakion,,
|
||||
227,Virizion,,
|
||||
228,Tympole,,
|
||||
229,Palpitoad,,
|
||||
230,Seismitoad,,
|
||||
231,Stunfisk,,
|
||||
232,Shuckle,,
|
||||
233,Mantyke,,
|
||||
234,Mantine,,
|
||||
235,Remoraid,,
|
||||
236,Octillery,,
|
||||
237,Corsola,,
|
||||
238,Staryu,,
|
||||
239,Starmie,,
|
||||
240,Wailmer,,
|
||||
241,Wailord,,
|
||||
242,Lapras,,
|
||||
243,Spheal,,
|
||||
244,Sealeo,,
|
||||
245,Walrein,,
|
||||
246,Swablu,,
|
||||
247,Altaria,,
|
||||
248,Vulpix,,
|
||||
249,Ninetales,,
|
||||
250,Bronzor,,
|
||||
251,Bronzong,,
|
||||
252,Sneasel,,
|
||||
253,Weavile,,
|
||||
254,Delibird,,
|
||||
255,Vanillite,,
|
||||
256,Vanillish,,
|
||||
257,Vanilluxe,,
|
||||
258,Swinub,,
|
||||
259,Piloswine,,
|
||||
260,Mamoswine,,
|
||||
261,Ditto,,
|
||||
262,Beldum,,
|
||||
263,Metang,,
|
||||
264,Metagross,,
|
||||
265,Seel,,
|
||||
266,Dewgong,,
|
||||
267,Throh,,
|
||||
268,Sawk,,
|
||||
269,Bouffalant,,
|
||||
270,Druddigon,,
|
||||
271,Golett,,
|
||||
272,Golurk,,
|
||||
273,Deino,,
|
||||
274,Zweilous,,
|
||||
275,Hydreigon,,
|
||||
276,Slakoth,,
|
||||
277,Vigoroth,,
|
||||
278,Slaking,,
|
||||
279,Corphish,,
|
||||
280,Crawdaunt,,
|
||||
281,Igglybuff,,
|
||||
282,Jigglypuff,,
|
||||
283,Wigglytuff,,
|
||||
284,Lickitung,,
|
||||
285,Lickilicky,,
|
||||
286,Yanma,,
|
||||
287,Yanmega,,
|
||||
288,Tropius,,
|
||||
289,Carnivine,,
|
||||
290,Croagunk,,
|
||||
291,Toxicroak,,
|
||||
292,Larvitar,,
|
||||
293,Pupitar,,
|
||||
294,Tyranitar,,
|
||||
295,Reshiram,,
|
||||
296,Zekrom,,
|
||||
297,Kyurem,,
|
||||
298,Keldeo,,
|
||||
299,Meloetta,,
|
||||
300,Genesect,,
|
||||
|
@@ -0,0 +1,157 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
0,Victini,,
|
||||
1,Snivy,,
|
||||
2,Servine,,
|
||||
3,Serperior,,
|
||||
4,Tepig,,
|
||||
5,Pignite,,
|
||||
6,Emboar,,
|
||||
7,Oshawott,,
|
||||
8,Dewott,,
|
||||
9,Samurott,,
|
||||
10,Patrat,,
|
||||
11,Watchog,,
|
||||
12,Lillipup,,
|
||||
13,Herdier,,
|
||||
14,Stoutland,,
|
||||
15,Purrloin,,
|
||||
16,Liepard,,
|
||||
17,Pansage,,
|
||||
18,Simisage,,
|
||||
19,Pansear,,
|
||||
20,Simisear,,
|
||||
21,Panpour,,
|
||||
22,Simipour,,
|
||||
23,Munna,,
|
||||
24,Musharna,,
|
||||
25,Pidove,,
|
||||
26,Tranquill,,
|
||||
27,Unfezant,,
|
||||
28,Blitzle,,
|
||||
29,Zebstrika,,
|
||||
30,Roggenrola,,
|
||||
31,Boldore,,
|
||||
32,Gigalith,,
|
||||
33,Woobat,,
|
||||
34,Swoobat,,
|
||||
35,Drilbur,,
|
||||
36,Excadrill,,
|
||||
37,Audino,,
|
||||
38,Timburr,,
|
||||
39,Gurdurr,,
|
||||
40,Conkeldurr,,
|
||||
41,Tympole,,
|
||||
42,Palpitoad,,
|
||||
43,Seismitoad,,
|
||||
44,Throh,,
|
||||
45,Sawk,,
|
||||
46,Sewaddle,,
|
||||
47,Swadloon,,
|
||||
48,Leavanny,,
|
||||
49,Venipede,,
|
||||
50,Whirlipede,,
|
||||
51,Scolipede,,
|
||||
52,Cottonee,,
|
||||
53,Whimsicott,,
|
||||
54,Petilil,,
|
||||
55,Lilligant,,
|
||||
56,Basculin,,
|
||||
57,Sandile,,
|
||||
58,Krokorok,,
|
||||
59,Krookodile,,
|
||||
60,Darumaka,,
|
||||
61,Darmanitan,,
|
||||
62,Maractus,,
|
||||
63,Dwebble,,
|
||||
64,Crustle,,
|
||||
65,Scraggy,,
|
||||
66,Scrafty,,
|
||||
67,Sigilyph,,
|
||||
68,Yamask,,
|
||||
69,Cofagrigus,,
|
||||
70,Tirtouga,,
|
||||
71,Carracosta,,
|
||||
72,Archen,,
|
||||
73,Archeops,,
|
||||
74,Trubbish,,
|
||||
75,Garbodor,,
|
||||
76,Zorua,,
|
||||
77,Zoroark,,
|
||||
78,Minccino,,
|
||||
79,Cinccino,,
|
||||
80,Gothita,,
|
||||
81,Gothorita,,
|
||||
82,Gothitelle,,
|
||||
83,Solosis,,
|
||||
84,Duosion,,
|
||||
85,Reuniclus,,
|
||||
86,Ducklett,,
|
||||
87,Swanna,,
|
||||
88,Vanillite,,
|
||||
89,Vanillish,,
|
||||
90,Vanilluxe,,
|
||||
91,Deerling,,
|
||||
92,Sawsbuck,,
|
||||
93,Emolga,,
|
||||
94,Karrablast,,
|
||||
95,Escavalier,,
|
||||
96,Foongus,,
|
||||
97,Amoonguss,,
|
||||
98,Frillish,,
|
||||
99,Jellicent,,
|
||||
100,Alomomola,,
|
||||
101,Joltik,,
|
||||
102,Galvantula,,
|
||||
103,Ferroseed,,
|
||||
104,Ferrothorn,,
|
||||
105,Klink,,
|
||||
106,Klang,,
|
||||
107,Klinklang,,
|
||||
108,Tynamo,,
|
||||
109,Eelektrik,,
|
||||
110,Eelektross,,
|
||||
111,Elgyem,,
|
||||
112,Beheeyem,,
|
||||
113,Litwick,,
|
||||
114,Lampent,,
|
||||
115,Chandelure,,
|
||||
116,Axew,,
|
||||
117,Fraxure,,
|
||||
118,Haxorus,,
|
||||
119,Cubchoo,,
|
||||
120,Beartic,,
|
||||
121,Cryogonal,,
|
||||
122,Shelmet,,
|
||||
123,Accelgor,,
|
||||
124,Stunfisk,,
|
||||
125,Mienfoo,,
|
||||
126,Mienshao,,
|
||||
127,Druddigon,,
|
||||
128,Golett,,
|
||||
129,Golurk,,
|
||||
130,Pawniard,,
|
||||
131,Bisharp,,
|
||||
132,Bouffalant,,
|
||||
133,Rufflet,,
|
||||
134,Braviary,,
|
||||
135,Vullaby,,
|
||||
136,Mandibuzz,,
|
||||
137,Heatmor,,
|
||||
138,Durant,,
|
||||
139,Deino,,
|
||||
140,Zweilous,,
|
||||
141,Hydreigon,,
|
||||
142,Larvesta,,
|
||||
143,Volcarona,,
|
||||
144,Cobalion,,
|
||||
145,Terrakion,,
|
||||
146,Virizion,,
|
||||
147,Tornadus,,
|
||||
148,Thundurus,,
|
||||
149,Reshiram,,
|
||||
150,Zekrom,,
|
||||
151,Landorus,,
|
||||
152,Kyurem,,
|
||||
153,Keldeo,,
|
||||
154,Meloetta,,
|
||||
155,Genesect,,
|
||||
|
@@ -0,0 +1,152 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Turtwig,,
|
||||
2,Grotle,,
|
||||
3,Torterra,,
|
||||
4,Chimchar,,
|
||||
5,Monferno,,
|
||||
6,Infernape,,
|
||||
7,Piplup,,
|
||||
8,Prinplup,,
|
||||
9,Empoleon,,
|
||||
10,Starly,,
|
||||
11,Staravia,,
|
||||
12,Staraptor,,
|
||||
13,Bidoof,,
|
||||
14,Bibarel,,
|
||||
15,Kricketot,,
|
||||
16,Kricketune,,
|
||||
17,Shinx,,
|
||||
18,Luxio,,
|
||||
19,Luxray,,
|
||||
20,Abra,,
|
||||
21,Kadabra,,
|
||||
22,Alakazam,,
|
||||
23,Magikarp,,
|
||||
24,Gyarados,,
|
||||
25,Budew,,
|
||||
26,Roselia,,
|
||||
27,Roserade,,
|
||||
28,Zubat,,
|
||||
29,Golbat,,
|
||||
30,Crobat,,
|
||||
31,Geodude,,
|
||||
32,Graveler,,
|
||||
33,Golem,,
|
||||
34,Onix,,
|
||||
35,Steelix,,
|
||||
36,Cranidos,,
|
||||
37,Rampardos,,
|
||||
38,Shieldon,,
|
||||
39,Bastiodon,,
|
||||
40,Machop,,
|
||||
41,Machoke,,
|
||||
42,Machamp,,
|
||||
43,Psyduck,,
|
||||
44,Golduck,,
|
||||
45,Burmy,,
|
||||
46,Wormadam,,
|
||||
47,Mothim,,
|
||||
48,Wurmple,,
|
||||
49,Silcoon,,
|
||||
50,Beautifly,,
|
||||
51,Cascoon,,
|
||||
52,Dustox,,
|
||||
53,Combee,,
|
||||
54,Vespiquen,,
|
||||
55,Pachirisu,,
|
||||
56,Buizel,,
|
||||
57,Floatzel,,
|
||||
58,Cherubi,,
|
||||
59,Cherrim,,
|
||||
60,Shellos,,
|
||||
61,Gastrodon,,
|
||||
62,Heracross,,
|
||||
63,Aipom,,
|
||||
64,Ambipom,,
|
||||
65,Drifloon,,
|
||||
66,Drifblim,,
|
||||
67,Buneary,,
|
||||
68,Lopunny,,
|
||||
69,Gastly,,
|
||||
70,Haunter,,
|
||||
71,Gengar,,
|
||||
72,Misdreavus,,
|
||||
73,Mismagius,,
|
||||
74,Murkrow,,
|
||||
75,Honchkrow,,
|
||||
76,Glameow,,
|
||||
77,Purugly,,
|
||||
78,Goldeen,,
|
||||
79,Seaking,,
|
||||
80,Barboach,,
|
||||
81,Whiscash,,
|
||||
82,Chingling,,
|
||||
83,Chimecho,,
|
||||
84,Stunky,,
|
||||
85,Skuntank,,
|
||||
86,Meditite,,
|
||||
87,Medicham,,
|
||||
88,Bronzor,,
|
||||
89,Bronzong,,
|
||||
90,Ponyta,,
|
||||
91,Rapidash,,
|
||||
92,Bonsly,,
|
||||
93,Sudowoodo,,
|
||||
94,Mime Jr.,,
|
||||
95,Mr. Mime,,
|
||||
96,Happiny,,
|
||||
97,Chansey,,
|
||||
98,Blissey,,
|
||||
99,Cleffa,,
|
||||
100,Clefairy,,
|
||||
101,Clefable,,
|
||||
102,Chatot,,
|
||||
103,Pichu,,
|
||||
104,Pikachu,,
|
||||
105,Raichu,,
|
||||
106,Hoothoot,,
|
||||
107,Noctowl,,
|
||||
108,Spiritomb,,
|
||||
109,Gible,,
|
||||
110,Gabite,,
|
||||
111,Garchomp,,
|
||||
112,Munchlax,,
|
||||
113,Snorlax,,
|
||||
114,Unown,,
|
||||
115,Riolu,,
|
||||
116,Lucario,,
|
||||
117,Wooper,,
|
||||
118,Quagsire,,
|
||||
119,Wingull,,
|
||||
120,Pelipper,,
|
||||
121,Girafarig,,
|
||||
122,Hippopotas,,
|
||||
123,Hippowdon,,
|
||||
124,Azurill,,
|
||||
125,Marill,,
|
||||
126,Azumarill,,
|
||||
127,Skorupi,,
|
||||
128,Drapion,,
|
||||
129,Croagunk,,
|
||||
130,Toxicroak,,
|
||||
131,Carnivine,,
|
||||
132,Remoraid,,
|
||||
133,Octillery,,
|
||||
134,Finneon,,
|
||||
135,Lumineon,,
|
||||
136,Tentacool,,
|
||||
137,Tentacruel,,
|
||||
138,Feebas,,
|
||||
139,Milotic,,
|
||||
140,Mantyke,,
|
||||
141,Mantine,,
|
||||
142,Snover,,
|
||||
143,Abomasnow,,
|
||||
144,Sneasel,,
|
||||
145,Weavile,,
|
||||
146,Uxie,,
|
||||
147,Mesprit,,
|
||||
148,Azelf,,
|
||||
149,Dialga,,
|
||||
150,Palkia,,
|
||||
151,Manaphy,,
|
||||
|
@@ -0,0 +1,152 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Turtwig,,
|
||||
2,Grotle,,
|
||||
3,Torterra,,
|
||||
4,Chimchar,,
|
||||
5,Monferno,,
|
||||
6,Infernape,,
|
||||
7,Piplup,,
|
||||
8,Prinplup,,
|
||||
9,Empoleon,,
|
||||
10,Starly,,
|
||||
11,Staravia,,
|
||||
12,Staraptor,,
|
||||
13,Bidoof,,
|
||||
14,Bibarel,,
|
||||
15,Kricketot,,
|
||||
16,Kricketune,,
|
||||
17,Shinx,,
|
||||
18,Luxio,,
|
||||
19,Luxray,,
|
||||
20,Abra,,
|
||||
21,Kadabra,,
|
||||
22,Alakazam,,
|
||||
23,Magikarp,,
|
||||
24,Gyarados,,
|
||||
25,Budew,,
|
||||
26,Roselia,,
|
||||
27,Roserade,,
|
||||
28,Zubat,,
|
||||
29,Golbat,,
|
||||
30,Crobat,,
|
||||
31,Geodude,,
|
||||
32,Graveler,,
|
||||
33,Golem,,
|
||||
34,Onix,,
|
||||
35,Steelix,,
|
||||
36,Cranidos,,
|
||||
37,Rampardos,,
|
||||
38,Shieldon,,
|
||||
39,Bastiodon,,
|
||||
40,Machop,,
|
||||
41,Machoke,,
|
||||
42,Machamp,,
|
||||
43,Psyduck,,
|
||||
44,Golduck,,
|
||||
45,Burmy,,
|
||||
46,Wormadam,,
|
||||
47,Mothim,,
|
||||
48,Wurmple,,
|
||||
49,Silcoon,,
|
||||
50,Beautifly,,
|
||||
51,Cascoon,,
|
||||
52,Dustox,,
|
||||
53,Combee,,
|
||||
54,Vespiquen,,
|
||||
55,Pachirisu,,
|
||||
56,Buizel,,
|
||||
57,Floatzel,,
|
||||
58,Cherubi,,
|
||||
59,Cherrim,,
|
||||
60,Shellos,,
|
||||
61,Gastrodon,,
|
||||
62,Heracross,,
|
||||
63,Aipom,,
|
||||
64,Ambipom,,
|
||||
65,Drifloon,,
|
||||
66,Drifblim,,
|
||||
67,Buneary,,
|
||||
68,Lopunny,,
|
||||
69,Gastly,,
|
||||
70,Haunter,,
|
||||
71,Gengar,,
|
||||
72,Misdreavus,,
|
||||
73,Mismagius,,
|
||||
74,Murkrow,,
|
||||
75,Honchkrow,,
|
||||
76,Glameow,,
|
||||
77,Purugly,,
|
||||
78,Goldeen,,
|
||||
79,Seaking,,
|
||||
80,Barboach,,
|
||||
81,Whiscash,,
|
||||
82,Chingling,,
|
||||
83,Chimecho,,
|
||||
84,Stunky,,
|
||||
85,Skuntank,,
|
||||
86,Meditite,,
|
||||
87,Medicham,,
|
||||
88,Bronzor,,
|
||||
89,Bronzong,,
|
||||
90,Ponyta,,
|
||||
91,Rapidash,,
|
||||
92,Bonsly,,
|
||||
93,Sudowoodo,,
|
||||
94,Mime Jr.,,
|
||||
95,Mr. Mime,,
|
||||
96,Happiny,,
|
||||
97,Chansey,,
|
||||
98,Blissey,,
|
||||
99,Cleffa,,
|
||||
100,Clefairy,,
|
||||
101,Clefable,,
|
||||
102,Chatot,,
|
||||
103,Pichu,,
|
||||
104,Pikachu,,
|
||||
105,Raichu,,
|
||||
106,Hoothoot,,
|
||||
107,Noctowl,,
|
||||
108,Spiritomb,,
|
||||
109,Gible,,
|
||||
110,Gabite,,
|
||||
111,Garchomp,,
|
||||
112,Munchlax,,
|
||||
113,Snorlax,,
|
||||
114,Unown,,
|
||||
115,Riolu,,
|
||||
116,Lucario,,
|
||||
117,Wooper,,
|
||||
118,Quagsire,,
|
||||
119,Wingull,,
|
||||
120,Pelipper,,
|
||||
121,Girafarig,,
|
||||
122,Hippopotas,,
|
||||
123,Hippowdon,,
|
||||
124,Azurill,,
|
||||
125,Marill,,
|
||||
126,Azumarill,,
|
||||
127,Skorupi,,
|
||||
128,Drapion,,
|
||||
129,Croagunk,,
|
||||
130,Toxicroak,,
|
||||
131,Carnivine,,
|
||||
132,Remoraid,,
|
||||
133,Octillery,,
|
||||
134,Finneon,,
|
||||
135,Lumineon,,
|
||||
136,Tentacool,,
|
||||
137,Tentacruel,,
|
||||
138,Feebas,,
|
||||
139,Milotic,,
|
||||
140,Mantyke,,
|
||||
141,Mantine,,
|
||||
142,Snover,,
|
||||
143,Abomasnow,,
|
||||
144,Sneasel,,
|
||||
145,Weavile,,
|
||||
146,Uxie,,
|
||||
147,Mesprit,,
|
||||
148,Azelf,,
|
||||
149,Dialga,,
|
||||
150,Palkia,,
|
||||
151,Manaphy,,
|
||||
|
@@ -0,0 +1,152 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Bulbasaur,,
|
||||
2,Ivysaur,,
|
||||
3,Venusaur,,
|
||||
4,Charmander,,
|
||||
5,Charmeleon,,
|
||||
6,Charizard,,
|
||||
7,Squirtle,,
|
||||
8,Wartortle,,
|
||||
9,Blastoise,,
|
||||
10,Caterpie,,
|
||||
11,Metapod,,
|
||||
12,Butterfree,,
|
||||
13,Weedle,,
|
||||
14,Kakuna,,
|
||||
15,Beedrill,,
|
||||
16,Pidgey,,
|
||||
17,Pidgeotto,,
|
||||
18,Pidgeot,,
|
||||
19,Rattata,,
|
||||
20,Raticate,,
|
||||
21,Spearow,,
|
||||
22,Fearow,,
|
||||
23,Ekans,,
|
||||
24,Arbok,,
|
||||
25,Pikachu,,
|
||||
26,Raichu,,
|
||||
27,Sandshrew,,
|
||||
28,Sandslash,,
|
||||
29,Nidoran♀,,
|
||||
30,Nidorina,,
|
||||
31,Nidoqueen,,
|
||||
32,Nidoran♂,,
|
||||
33,Nidorino,,
|
||||
34,Nidoking,,
|
||||
35,Clefairy,,
|
||||
36,Clefable,,
|
||||
37,Vulpix,,
|
||||
38,Ninetales,,
|
||||
39,Jigglypuff,,
|
||||
40,Wigglytuff,,
|
||||
41,Zubat,,
|
||||
42,Golbat,,
|
||||
43,Oddish,,
|
||||
44,Gloom,,
|
||||
45,Vileplume,,
|
||||
46,Paras,,
|
||||
47,Parasect,,
|
||||
48,Venonat,,
|
||||
49,Venomoth,,
|
||||
50,Diglett,,
|
||||
51,Dugtrio,,
|
||||
52,Meowth,,
|
||||
53,Persian,,
|
||||
54,Psyduck,,
|
||||
55,Golduck,,
|
||||
56,Mankey,,
|
||||
57,Primeape,,
|
||||
58,Growlithe,,
|
||||
59,Arcanine,,
|
||||
60,Poliwag,,
|
||||
61,Poliwhirl,,
|
||||
62,Poliwrath,,
|
||||
63,Abra,,
|
||||
64,Kadabra,,
|
||||
65,Alakazam,,
|
||||
66,Machop,,
|
||||
67,Machoke,,
|
||||
68,Machamp,,
|
||||
69,Bellsprout,,
|
||||
70,Weepinbell,,
|
||||
71,Victreebel,,
|
||||
72,Tentacool,,
|
||||
73,Tentacruel,,
|
||||
74,Geodude,,
|
||||
75,Graveler,,
|
||||
76,Golem,,
|
||||
77,Ponyta,,
|
||||
78,Rapidash,,
|
||||
79,Slowpoke,,
|
||||
80,Slowbro,,
|
||||
81,Magnemite,,
|
||||
82,Magneton,,
|
||||
83,Farfetch’d,,
|
||||
84,Doduo,,
|
||||
85,Dodrio,,
|
||||
86,Seel,,
|
||||
87,Dewgong,,
|
||||
88,Grimer,,
|
||||
89,Muk,,
|
||||
90,Shellder,,
|
||||
91,Cloyster,,
|
||||
92,Gastly,,
|
||||
93,Haunter,,
|
||||
94,Gengar,,
|
||||
95,Onix,,
|
||||
96,Drowzee,,
|
||||
97,Hypno,,
|
||||
98,Krabby,,
|
||||
99,Kingler,,
|
||||
100,Voltorb,,
|
||||
101,Electrode,,
|
||||
102,Exeggcute,,
|
||||
103,Exeggutor,,
|
||||
104,Cubone,,
|
||||
105,Marowak,,
|
||||
106,Hitmonlee,,
|
||||
107,Hitmonchan,,
|
||||
108,Lickitung,,
|
||||
109,Koffing,,
|
||||
110,Weezing,,
|
||||
111,Rhyhorn,,
|
||||
112,Rhydon,,
|
||||
113,Chansey,,
|
||||
114,Tangela,,
|
||||
115,Kangaskhan,,
|
||||
116,Horsea,,
|
||||
117,Seadra,,
|
||||
118,Goldeen,,
|
||||
119,Seaking,,
|
||||
120,Staryu,,
|
||||
121,Starmie,,
|
||||
122,Mr. Mime,,
|
||||
123,Scyther,,
|
||||
124,Jynx,,
|
||||
125,Electabuzz,,
|
||||
126,Magmar,,
|
||||
127,Pinsir,,
|
||||
128,Tauros,,
|
||||
129,Magikarp,,
|
||||
130,Gyarados,,
|
||||
131,Lapras,,
|
||||
132,Ditto,,
|
||||
133,Eevee,,
|
||||
134,Vaporeon,,
|
||||
135,Jolteon,,
|
||||
136,Flareon,,
|
||||
137,Porygon,,
|
||||
138,Omanyte,,
|
||||
139,Omastar,,
|
||||
140,Kabuto,,
|
||||
141,Kabutops,,
|
||||
142,Aerodactyl,,
|
||||
143,Snorlax,,
|
||||
144,Articuno,,
|
||||
145,Zapdos,,
|
||||
146,Moltres,,
|
||||
147,Dratini,,
|
||||
148,Dragonair,,
|
||||
149,Dragonite,,
|
||||
150,Mewtwo,,
|
||||
151,Mew,,
|
||||
|
@@ -0,0 +1,252 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Chikorita,,
|
||||
2,Bayleef,,
|
||||
3,Meganium,,
|
||||
4,Cyndaquil,,
|
||||
5,Quilava,,
|
||||
6,Typhlosion,,
|
||||
7,Totodile,,
|
||||
8,Croconaw,,
|
||||
9,Feraligatr,,
|
||||
10,Pidgey,,
|
||||
11,Pidgeotto,,
|
||||
12,Pidgeot,,
|
||||
13,Spearow,,
|
||||
14,Fearow,,
|
||||
15,Hoothoot,,
|
||||
16,Noctowl,,
|
||||
17,Rattata,,
|
||||
18,Raticate,,
|
||||
19,Sentret,,
|
||||
20,Furret,,
|
||||
21,Pichu,,
|
||||
22,Pikachu,,
|
||||
23,Raichu,,
|
||||
24,Caterpie,,
|
||||
25,Metapod,,
|
||||
26,Butterfree,,
|
||||
27,Weedle,,
|
||||
28,Kakuna,,
|
||||
29,Beedrill,,
|
||||
30,Ledyba,,
|
||||
31,Ledian,,
|
||||
32,Spinarak,,
|
||||
33,Ariados,,
|
||||
34,Geodude,,
|
||||
35,Graveler,,
|
||||
36,Golem,,
|
||||
37,Zubat,,
|
||||
38,Golbat,,
|
||||
39,Crobat,,
|
||||
40,Cleffa,,
|
||||
41,Clefairy,,
|
||||
42,Clefable,,
|
||||
43,Igglybuff,,
|
||||
44,Jigglypuff,,
|
||||
45,Wigglytuff,,
|
||||
46,Togepi,,
|
||||
47,Togetic,,
|
||||
48,Sandshrew,,
|
||||
49,Sandslash,,
|
||||
50,Ekans,,
|
||||
51,Arbok,,
|
||||
52,Dunsparce,,
|
||||
53,Mareep,,
|
||||
54,Flaaffy,,
|
||||
55,Ampharos,,
|
||||
56,Wooper,,
|
||||
57,Quagsire,,
|
||||
58,Gastly,,
|
||||
59,Haunter,,
|
||||
60,Gengar,,
|
||||
61,Unown,,
|
||||
62,Onix,,
|
||||
63,Steelix,,
|
||||
64,Bellsprout,,
|
||||
65,Weepinbell,,
|
||||
66,Victreebel,,
|
||||
67,Hoppip,,
|
||||
68,Skiploom,,
|
||||
69,Jumpluff,,
|
||||
70,Paras,,
|
||||
71,Parasect,,
|
||||
72,Poliwag,,
|
||||
73,Poliwhirl,,
|
||||
74,Poliwrath,,
|
||||
75,Politoed,,
|
||||
76,Magikarp,,
|
||||
77,Gyarados,,
|
||||
78,Goldeen,,
|
||||
79,Seaking,,
|
||||
80,Slowpoke,,
|
||||
81,Slowbro,,
|
||||
82,Slowking,,
|
||||
83,Oddish,,
|
||||
84,Gloom,,
|
||||
85,Vileplume,,
|
||||
86,Bellossom,,
|
||||
87,Drowzee,,
|
||||
88,Hypno,,
|
||||
89,Abra,,
|
||||
90,Kadabra,,
|
||||
91,Alakazam,,
|
||||
92,Ditto,,
|
||||
93,Pineco,,
|
||||
94,Forretress,,
|
||||
95,Nidoran♀,,
|
||||
96,Nidorina,,
|
||||
97,Nidoqueen,,
|
||||
98,Nidoran♂,,
|
||||
99,Nidorino,,
|
||||
100,Nidoking,,
|
||||
101,Yanma,,
|
||||
102,Sunkern,,
|
||||
103,Sunflora,,
|
||||
104,Exeggcute,,
|
||||
105,Exeggutor,,
|
||||
106,Sudowoodo,,
|
||||
107,Wobbuffet,,
|
||||
108,Venonat,,
|
||||
109,Venomoth,,
|
||||
110,Scyther,,
|
||||
111,Scizor,,
|
||||
112,Pinsir,,
|
||||
113,Heracross,,
|
||||
114,Koffing,,
|
||||
115,Weezing,,
|
||||
116,Grimer,,
|
||||
117,Muk,,
|
||||
118,Magnemite,,
|
||||
119,Magneton,,
|
||||
120,Voltorb,,
|
||||
121,Electrode,,
|
||||
122,Aipom,,
|
||||
123,Snubbull,,
|
||||
124,Granbull,,
|
||||
125,Vulpix,,
|
||||
126,Ninetales,,
|
||||
127,Growlithe,,
|
||||
128,Arcanine,,
|
||||
129,Stantler,,
|
||||
130,Marill,,
|
||||
131,Azumarill,,
|
||||
132,Diglett,,
|
||||
133,Dugtrio,,
|
||||
134,Mankey,,
|
||||
135,Primeape,,
|
||||
136,Meowth,,
|
||||
137,Persian,,
|
||||
138,Psyduck,,
|
||||
139,Golduck,,
|
||||
140,Machop,,
|
||||
141,Machoke,,
|
||||
142,Machamp,,
|
||||
143,Tyrogue,,
|
||||
144,Hitmonlee,,
|
||||
145,Hitmonchan,,
|
||||
146,Hitmontop,,
|
||||
147,Girafarig,,
|
||||
148,Tauros,,
|
||||
149,Miltank,,
|
||||
150,Magby,,
|
||||
151,Magmar,,
|
||||
152,Smoochum,,
|
||||
153,Jynx,,
|
||||
154,Elekid,,
|
||||
155,Electabuzz,,
|
||||
156,Mr. Mime,,
|
||||
157,Smeargle,,
|
||||
158,Farfetch’d,,
|
||||
159,Natu,,
|
||||
160,Xatu,,
|
||||
161,Qwilfish,,
|
||||
162,Tentacool,,
|
||||
163,Tentacruel,,
|
||||
164,Krabby,,
|
||||
165,Kingler,,
|
||||
166,Shuckle,,
|
||||
167,Staryu,,
|
||||
168,Starmie,,
|
||||
169,Shellder,,
|
||||
170,Cloyster,,
|
||||
171,Corsola,,
|
||||
172,Remoraid,,
|
||||
173,Octillery,,
|
||||
174,Chinchou,,
|
||||
175,Lanturn,,
|
||||
176,Seel,,
|
||||
177,Dewgong,,
|
||||
178,Lickitung,,
|
||||
179,Tangela,,
|
||||
180,Eevee,,
|
||||
181,Vaporeon,,
|
||||
182,Jolteon,,
|
||||
183,Flareon,,
|
||||
184,Espeon,,
|
||||
185,Umbreon,,
|
||||
186,Horsea,,
|
||||
187,Seadra,,
|
||||
188,Kingdra,,
|
||||
189,Gligar,,
|
||||
190,Delibird,,
|
||||
191,Swinub,,
|
||||
192,Piloswine,,
|
||||
193,Teddiursa,,
|
||||
194,Ursaring,,
|
||||
195,Phanpy,,
|
||||
196,Donphan,,
|
||||
197,Mantine,,
|
||||
198,Skarmory,,
|
||||
199,Doduo,,
|
||||
200,Dodrio,,
|
||||
201,Ponyta,,
|
||||
202,Rapidash,,
|
||||
203,Cubone,,
|
||||
204,Marowak,,
|
||||
205,Kangaskhan,,
|
||||
206,Rhyhorn,,
|
||||
207,Rhydon,,
|
||||
208,Murkrow,,
|
||||
209,Houndour,,
|
||||
210,Houndoom,,
|
||||
211,Slugma,,
|
||||
212,Magcargo,,
|
||||
213,Sneasel,,
|
||||
214,Misdreavus,,
|
||||
215,Porygon,,
|
||||
216,Porygon2,,
|
||||
217,Chansey,,
|
||||
218,Blissey,,
|
||||
219,Lapras,,
|
||||
220,Omanyte,,
|
||||
221,Omastar,,
|
||||
222,Kabuto,,
|
||||
223,Kabutops,,
|
||||
224,Aerodactyl,,
|
||||
225,Snorlax,,
|
||||
226,Bulbasaur,,
|
||||
227,Ivysaur,,
|
||||
228,Venusaur,,
|
||||
229,Charmander,,
|
||||
230,Charmeleon,,
|
||||
231,Charizard,,
|
||||
232,Squirtle,,
|
||||
233,Wartortle,,
|
||||
234,Blastoise,,
|
||||
235,Articuno,,
|
||||
236,Zapdos,,
|
||||
237,Moltres,,
|
||||
238,Raikou,,
|
||||
239,Entei,,
|
||||
240,Suicune,,
|
||||
241,Dratini,,
|
||||
242,Dragonair,,
|
||||
243,Dragonite,,
|
||||
244,Larvitar,,
|
||||
245,Pupitar,,
|
||||
246,Tyranitar,,
|
||||
247,Lugia,,
|
||||
248,Ho-Oh,,
|
||||
249,Mewtwo,,
|
||||
250,Mew,,
|
||||
251,Celebi,,
|
||||
|
@@ -0,0 +1,257 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Chikorita,,
|
||||
2,Bayleef,,
|
||||
3,Meganium,,
|
||||
4,Cyndaquil,,
|
||||
5,Quilava,,
|
||||
6,Typhlosion,,
|
||||
7,Totodile,,
|
||||
8,Croconaw,,
|
||||
9,Feraligatr,,
|
||||
10,Pidgey,,
|
||||
11,Pidgeotto,,
|
||||
12,Pidgeot,,
|
||||
13,Spearow,,
|
||||
14,Fearow,,
|
||||
15,Hoothoot,,
|
||||
16,Noctowl,,
|
||||
17,Rattata,,
|
||||
18,Raticate,,
|
||||
19,Sentret,,
|
||||
20,Furret,,
|
||||
21,Pichu,,
|
||||
22,Pikachu,,
|
||||
23,Raichu,,
|
||||
24,Caterpie,,
|
||||
25,Metapod,,
|
||||
26,Butterfree,,
|
||||
27,Weedle,,
|
||||
28,Kakuna,,
|
||||
29,Beedrill,,
|
||||
30,Ledyba,,
|
||||
31,Ledian,,
|
||||
32,Spinarak,,
|
||||
33,Ariados,,
|
||||
34,Geodude,,
|
||||
35,Graveler,,
|
||||
36,Golem,,
|
||||
37,Zubat,,
|
||||
38,Golbat,,
|
||||
39,Crobat,,
|
||||
40,Cleffa,,
|
||||
41,Clefairy,,
|
||||
42,Clefable,,
|
||||
43,Igglybuff,,
|
||||
44,Jigglypuff,,
|
||||
45,Wigglytuff,,
|
||||
46,Togepi,,
|
||||
47,Togetic,,
|
||||
48,Sandshrew,,
|
||||
49,Sandslash,,
|
||||
50,Ekans,,
|
||||
51,Arbok,,
|
||||
52,Dunsparce,,
|
||||
53,Mareep,,
|
||||
54,Flaaffy,,
|
||||
55,Ampharos,,
|
||||
56,Wooper,,
|
||||
57,Quagsire,,
|
||||
58,Gastly,,
|
||||
59,Haunter,,
|
||||
60,Gengar,,
|
||||
61,Unown,,
|
||||
62,Onix,,
|
||||
63,Steelix,,
|
||||
64,Bellsprout,,
|
||||
65,Weepinbell,,
|
||||
66,Victreebel,,
|
||||
67,Hoppip,,
|
||||
68,Skiploom,,
|
||||
69,Jumpluff,,
|
||||
70,Paras,,
|
||||
71,Parasect,,
|
||||
72,Poliwag,,
|
||||
73,Poliwhirl,,
|
||||
74,Poliwrath,,
|
||||
75,Politoed,,
|
||||
76,Magikarp,,
|
||||
77,Gyarados,,
|
||||
78,Goldeen,,
|
||||
79,Seaking,,
|
||||
80,Slowpoke,,
|
||||
81,Slowbro,,
|
||||
82,Slowking,,
|
||||
83,Oddish,,
|
||||
84,Gloom,,
|
||||
85,Vileplume,,
|
||||
86,Bellossom,,
|
||||
87,Drowzee,,
|
||||
88,Hypno,,
|
||||
89,Abra,,
|
||||
90,Kadabra,,
|
||||
91,Alakazam,,
|
||||
92,Ditto,,
|
||||
93,Pineco,,
|
||||
94,Forretress,,
|
||||
95,Nidoran♀,,
|
||||
96,Nidorina,,
|
||||
97,Nidoqueen,,
|
||||
98,Nidoran♂,,
|
||||
99,Nidorino,,
|
||||
100,Nidoking,,
|
||||
101,Yanma,,
|
||||
102,Yanmega,,
|
||||
103,Sunkern,,
|
||||
104,Sunflora,,
|
||||
105,Exeggcute,,
|
||||
106,Exeggutor,,
|
||||
107,Sudowoodo,,
|
||||
108,Wobbuffet,,
|
||||
109,Venonat,,
|
||||
110,Venomoth,,
|
||||
111,Scyther,,
|
||||
112,Scizor,,
|
||||
113,Pinsir,,
|
||||
114,Heracross,,
|
||||
115,Koffing,,
|
||||
116,Weezing,,
|
||||
117,Grimer,,
|
||||
118,Muk,,
|
||||
119,Magnemite,,
|
||||
120,Magneton,,
|
||||
121,Voltorb,,
|
||||
122,Electrode,,
|
||||
123,Aipom,,
|
||||
124,Ambipom,,
|
||||
125,Snubbull,,
|
||||
126,Granbull,,
|
||||
127,Vulpix,,
|
||||
128,Ninetales,,
|
||||
129,Growlithe,,
|
||||
130,Arcanine,,
|
||||
131,Stantler,,
|
||||
132,Marill,,
|
||||
133,Azumarill,,
|
||||
134,Diglett,,
|
||||
135,Dugtrio,,
|
||||
136,Mankey,,
|
||||
137,Primeape,,
|
||||
138,Meowth,,
|
||||
139,Persian,,
|
||||
140,Psyduck,,
|
||||
141,Golduck,,
|
||||
142,Machop,,
|
||||
143,Machoke,,
|
||||
144,Machamp,,
|
||||
145,Tyrogue,,
|
||||
146,Hitmonlee,,
|
||||
147,Hitmonchan,,
|
||||
148,Hitmontop,,
|
||||
149,Girafarig,,
|
||||
150,Tauros,,
|
||||
151,Miltank,,
|
||||
152,Magby,,
|
||||
153,Magmar,,
|
||||
154,Smoochum,,
|
||||
155,Jynx,,
|
||||
156,Elekid,,
|
||||
157,Electabuzz,,
|
||||
158,Mr. Mime,,
|
||||
159,Smeargle,,
|
||||
160,Farfetch’d,,
|
||||
161,Natu,,
|
||||
162,Xatu,,
|
||||
163,Qwilfish,,
|
||||
164,Tentacool,,
|
||||
165,Tentacruel,,
|
||||
166,Krabby,,
|
||||
167,Kingler,,
|
||||
168,Shuckle,,
|
||||
169,Staryu,,
|
||||
170,Starmie,,
|
||||
171,Shellder,,
|
||||
172,Cloyster,,
|
||||
173,Corsola,,
|
||||
174,Remoraid,,
|
||||
175,Octillery,,
|
||||
176,Chinchou,,
|
||||
177,Lanturn,,
|
||||
178,Seel,,
|
||||
179,Dewgong,,
|
||||
180,Lickitung,,
|
||||
181,Lickilicky,,
|
||||
182,Tangela,,
|
||||
183,Tangrowth,,
|
||||
184,Eevee,,
|
||||
185,Vaporeon,,
|
||||
186,Jolteon,,
|
||||
187,Flareon,,
|
||||
188,Espeon,,
|
||||
189,Umbreon,,
|
||||
190,Horsea,,
|
||||
191,Seadra,,
|
||||
192,Kingdra,,
|
||||
193,Gligar,,
|
||||
194,Delibird,,
|
||||
195,Swinub,,
|
||||
196,Piloswine,,
|
||||
197,Mamoswine,,
|
||||
198,Teddiursa,,
|
||||
199,Ursaring,,
|
||||
200,Phanpy,,
|
||||
201,Donphan,,
|
||||
202,Mantine,,
|
||||
203,Skarmory,,
|
||||
204,Doduo,,
|
||||
205,Dodrio,,
|
||||
206,Ponyta,,
|
||||
207,Rapidash,,
|
||||
208,Cubone,,
|
||||
209,Marowak,,
|
||||
210,Kangaskhan,,
|
||||
211,Rhyhorn,,
|
||||
212,Rhydon,,
|
||||
213,Murkrow,,
|
||||
214,Houndour,,
|
||||
215,Houndoom,,
|
||||
216,Slugma,,
|
||||
217,Magcargo,,
|
||||
218,Sneasel,,
|
||||
219,Misdreavus,,
|
||||
220,Porygon,,
|
||||
221,Porygon2,,
|
||||
222,Chansey,,
|
||||
223,Blissey,,
|
||||
224,Lapras,,
|
||||
225,Omanyte,,
|
||||
226,Omastar,,
|
||||
227,Kabuto,,
|
||||
228,Kabutops,,
|
||||
229,Aerodactyl,,
|
||||
230,Snorlax,,
|
||||
231,Bulbasaur,,
|
||||
232,Ivysaur,,
|
||||
233,Venusaur,,
|
||||
234,Charmander,,
|
||||
235,Charmeleon,,
|
||||
236,Charizard,,
|
||||
237,Squirtle,,
|
||||
238,Wartortle,,
|
||||
239,Blastoise,,
|
||||
240,Articuno,,
|
||||
241,Zapdos,,
|
||||
242,Moltres,,
|
||||
243,Raikou,,
|
||||
244,Entei,,
|
||||
245,Suicune,,
|
||||
246,Dratini,,
|
||||
247,Dragonair,,
|
||||
248,Dragonite,,
|
||||
249,Larvitar,,
|
||||
250,Pupitar,,
|
||||
251,Tyranitar,,
|
||||
252,Lugia,,
|
||||
253,Ho-Oh,,
|
||||
254,Mewtwo,,
|
||||
255,Mew,,
|
||||
256,Celebi,,
|
||||
|
@@ -0,0 +1,243 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Rowlet,,
|
||||
2,Dartrix,,
|
||||
3,Decidueye,,
|
||||
4,Cyndaquil,,
|
||||
5,Quilava,,
|
||||
6,Typhlosion,,
|
||||
7,Oshawott,,
|
||||
8,Dewott,,
|
||||
9,Samurott,,
|
||||
10,Bidoof,,
|
||||
11,Bibarel,,
|
||||
12,Starly,,
|
||||
13,Staravia,,
|
||||
14,Staraptor,,
|
||||
15,Shinx,,
|
||||
16,Luxio,,
|
||||
17,Luxray,,
|
||||
18,Wurmple,,
|
||||
19,Silcoon,,
|
||||
20,Beautifly,,
|
||||
21,Cascoon,,
|
||||
22,Dustox,,
|
||||
23,Ponyta,,
|
||||
24,Rapidash,,
|
||||
25,Eevee,,
|
||||
26,Vaporeon,,
|
||||
27,Jolteon,,
|
||||
28,Flareon,,
|
||||
29,Espeon,,
|
||||
30,Umbreon,,
|
||||
31,Leafeon,,
|
||||
32,Glaceon,,
|
||||
33,Sylveon,,
|
||||
34,Zubat,,
|
||||
35,Golbat,,
|
||||
36,Crobat,,
|
||||
37,Drifloon,,
|
||||
38,Drifblim,,
|
||||
39,Kricketot,,
|
||||
40,Kricketune,,
|
||||
41,Buizel,,
|
||||
42,Floatzel,,
|
||||
43,Burmy,,
|
||||
44,Wormadam,,
|
||||
45,Mothim,,
|
||||
46,Geodude,,
|
||||
47,Graveler,,
|
||||
48,Golem,,
|
||||
49,Stantler,,
|
||||
50,Wyrdeer,,
|
||||
51,Munchlax,,
|
||||
52,Snorlax,,
|
||||
53,Paras,,
|
||||
54,Parasect,,
|
||||
55,Pichu,,
|
||||
56,Pikachu,,
|
||||
57,Raichu,,
|
||||
58,Abra,,
|
||||
59,Kadabra,,
|
||||
60,Alakazam,,
|
||||
61,Chimchar,,
|
||||
62,Monferno,,
|
||||
63,Infernape,,
|
||||
64,Buneary,,
|
||||
65,Lopunny,,
|
||||
66,Cherubi,,
|
||||
67,Cherrim,,
|
||||
68,Psyduck,,
|
||||
69,Golduck,,
|
||||
70,Combee,,
|
||||
71,Vespiquen,,
|
||||
72,Scyther,,
|
||||
73,Kleavor,,
|
||||
74,Scizor,,
|
||||
75,Heracross,,
|
||||
76,Mime Jr.,,
|
||||
77,Mr. Mime,,
|
||||
78,Aipom,,
|
||||
79,Ambipom,,
|
||||
80,Magikarp,,
|
||||
81,Gyarados,,
|
||||
82,Shellos,,
|
||||
83,Gastrodon,,
|
||||
84,Qwilfish,,
|
||||
85,Overqwil,,
|
||||
86,Happiny,,
|
||||
87,Chansey,,
|
||||
88,Blissey,,
|
||||
89,Budew,,
|
||||
90,Roselia,,
|
||||
91,Roserade,,
|
||||
92,Carnivine,,
|
||||
93,Petilil,,
|
||||
94,Lilligant,,
|
||||
95,Tangela,,
|
||||
96,Tangrowth,,
|
||||
97,Barboach,,
|
||||
98,Whiscash,,
|
||||
99,Croagunk,,
|
||||
100,Toxicroak,,
|
||||
101,Ralts,,
|
||||
102,Kirlia,,
|
||||
103,Gardevoir,,
|
||||
104,Gallade,,
|
||||
105,Yanma,,
|
||||
106,Yanmega,,
|
||||
107,Hippopotas,,
|
||||
108,Hippowdon,,
|
||||
109,Pachirisu,,
|
||||
110,Stunky,,
|
||||
111,Skuntank,,
|
||||
112,Teddiursa,,
|
||||
113,Ursaring,,
|
||||
114,Ursaluna,,
|
||||
115,Goomy,,
|
||||
116,Sliggoo,,
|
||||
117,Goodra,,
|
||||
118,Onix,,
|
||||
119,Steelix,,
|
||||
120,Rhyhorn,,
|
||||
121,Rhydon,,
|
||||
122,Rhyperior,,
|
||||
123,Bonsly,,
|
||||
124,Sudowoodo,,
|
||||
125,Lickitung,,
|
||||
126,Lickilicky,,
|
||||
127,Togepi,,
|
||||
128,Togetic,,
|
||||
129,Togekiss,,
|
||||
130,Turtwig,,
|
||||
131,Grotle,,
|
||||
132,Torterra,,
|
||||
133,Porygon,,
|
||||
134,Porygon2,,
|
||||
135,Porygon-Z,,
|
||||
136,Gastly,,
|
||||
137,Haunter,,
|
||||
138,Gengar,,
|
||||
139,Spiritomb,,
|
||||
140,Murkrow,,
|
||||
141,Honchkrow,,
|
||||
142,Unown,,
|
||||
143,Spheal,,
|
||||
144,Sealeo,,
|
||||
145,Walrein,,
|
||||
146,Remoraid,,
|
||||
147,Octillery,,
|
||||
148,Skorupi,,
|
||||
149,Drapion,,
|
||||
150,Growlithe,,
|
||||
151,Arcanine,,
|
||||
152,Glameow,,
|
||||
153,Purugly,,
|
||||
154,Machop,,
|
||||
155,Machoke,,
|
||||
156,Machamp,,
|
||||
157,Chatot,,
|
||||
158,Duskull,,
|
||||
159,Dusclops,,
|
||||
160,Dusknoir,,
|
||||
161,Piplup,,
|
||||
162,Prinplup,,
|
||||
163,Empoleon,,
|
||||
164,Mantyke,,
|
||||
165,Mantine,,
|
||||
166,Basculin,,
|
||||
167,Basculegion,,
|
||||
168,Vulpix,,
|
||||
169,Ninetales,,
|
||||
170,Tentacool,,
|
||||
171,Tentacruel,,
|
||||
172,Finneon,,
|
||||
173,Lumineon,,
|
||||
174,Magby,,
|
||||
175,Magmar,,
|
||||
176,Magmortar,,
|
||||
177,Magnemite,,
|
||||
178,Magneton,,
|
||||
179,Magnezone,,
|
||||
180,Bronzor,,
|
||||
181,Bronzong,,
|
||||
182,Elekid,,
|
||||
183,Electabuzz,,
|
||||
184,Electivire,,
|
||||
185,Gligar,,
|
||||
186,Gliscor,,
|
||||
187,Gible,,
|
||||
188,Gabite,,
|
||||
189,Garchomp,,
|
||||
190,Nosepass,,
|
||||
191,Probopass,,
|
||||
192,Voltorb,,
|
||||
193,Electrode,,
|
||||
194,Rotom,,
|
||||
195,Chingling,,
|
||||
196,Chimecho,,
|
||||
197,Misdreavus,,
|
||||
198,Mismagius,,
|
||||
199,Cleffa,,
|
||||
200,Clefairy,,
|
||||
201,Clefable,,
|
||||
202,Sneasel,,
|
||||
203,Sneasler,,
|
||||
204,Weavile,,
|
||||
205,Snorunt,,
|
||||
206,Glalie,,
|
||||
207,Froslass,,
|
||||
208,Cranidos,,
|
||||
209,Rampardos,,
|
||||
210,Shieldon,,
|
||||
211,Bastiodon,,
|
||||
212,Swinub,,
|
||||
213,Piloswine,,
|
||||
214,Mamoswine,,
|
||||
215,Bergmite,,
|
||||
216,Avalugg,,
|
||||
217,Snover,,
|
||||
218,Abomasnow,,
|
||||
219,Zorua,,
|
||||
220,Zoroark,,
|
||||
221,Rufflet,,
|
||||
222,Braviary,,
|
||||
223,Riolu,,
|
||||
224,Lucario,,
|
||||
225,Uxie,,
|
||||
226,Mesprit,,
|
||||
227,Azelf,,
|
||||
228,Heatran,,
|
||||
229,Regigigas,,
|
||||
230,Cresselia,,
|
||||
231,Tornadus,,
|
||||
232,Thundurus,,
|
||||
233,Landorus,,
|
||||
234,Enamorus,,
|
||||
235,Dialga,,
|
||||
236,Palkia,,
|
||||
237,Giratina,,
|
||||
238,Arceus,,
|
||||
239,Phione,,
|
||||
240,Manaphy,,
|
||||
241,Shaymin,,
|
||||
242,Darkrai,,
|
||||
|
@@ -0,0 +1,133 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Mankey,,
|
||||
2,Primeape,,
|
||||
3,Annihilape,,
|
||||
4,Meowth,,
|
||||
5,Persian,,
|
||||
6,Perrserker,,
|
||||
7,Farfetch’d,,
|
||||
8,Sirfetch’d,,
|
||||
9,Cubone,,
|
||||
10,Marowak,,
|
||||
11,Porygon,,
|
||||
12,Porygon2,,
|
||||
13,Porygon-Z,,
|
||||
14,Capsakid,,
|
||||
15,Scovillain,,
|
||||
16,Tinkatink,,
|
||||
17,Tinkatuff,,
|
||||
18,Tinkaton,,
|
||||
19,Cyclizar,,
|
||||
20,Glimmet,,
|
||||
21,Glimmora,,
|
||||
22,Rotom,,
|
||||
23,Greavard,,
|
||||
24,Houndstone,,
|
||||
25,Sandygast,,
|
||||
26,Palossand,,
|
||||
27,Kecleon,,
|
||||
28,Flamigo,,
|
||||
29,Cryogonal,,
|
||||
30,Dondozo,,
|
||||
31,Tatsugiri,,
|
||||
32,Frigibax,,
|
||||
33,Arctibax,,
|
||||
34,Baxcalibur,,
|
||||
35,Gimmighoul,,
|
||||
36,Gholdengo,,
|
||||
37,Qwilfish,,
|
||||
38,Overqwil,,
|
||||
39,Treecko,,
|
||||
40,Grovyle,,
|
||||
41,Sceptile,,
|
||||
42,Torchic,,
|
||||
43,Combusken,,
|
||||
44,Blaziken,,
|
||||
45,Mudkip,,
|
||||
46,Marshtomp,,
|
||||
47,Swampert,,
|
||||
48,Feebas,,
|
||||
49,Milotic,,
|
||||
50,Chingling,,
|
||||
51,Chimecho,,
|
||||
52,Indeedee,,
|
||||
53,Purrloin,,
|
||||
54,Liepard,,
|
||||
55,Munna,,
|
||||
56,Musharna,,
|
||||
57,Throh,,
|
||||
58,Sawk,,
|
||||
59,Yamask,,
|
||||
60,Cofagrigus,,
|
||||
61,Runerigus,,
|
||||
62,Wimpod,,
|
||||
63,Golisopod,,
|
||||
64,Nickit,,
|
||||
65,Thievul,,
|
||||
66,Clobbopus,,
|
||||
67,Grapploct,,
|
||||
68,Mimikyu,,
|
||||
69,Kleavor,,
|
||||
70,Morpeko,,
|
||||
71,Golett,,
|
||||
72,Golurk,,
|
||||
73,Rookidee,,
|
||||
74,Corvisquire,,
|
||||
75,Corviknight,,
|
||||
76,Igglybuff,,
|
||||
77,Jigglypuff,,
|
||||
78,Wigglytuff,,
|
||||
79,Fidough,,
|
||||
80,Dachsbun,,
|
||||
81,Starly,,
|
||||
82,Staravia,,
|
||||
83,Staraptor,,
|
||||
84,Spoink,,
|
||||
85,Grumpig,,
|
||||
86,Squawkabilly,,
|
||||
87,Crabrawler,,
|
||||
88,Crabominable,,
|
||||
89,Nacli,,
|
||||
90,Naclstack,,
|
||||
91,Garganacl,,
|
||||
92,Gulpin,,
|
||||
93,Swalot,,
|
||||
94,Zubat,,
|
||||
95,Golbat,,
|
||||
96,Crobat,,
|
||||
97,Charcadet,,
|
||||
98,Armarouge,,
|
||||
99,Ceruledge,,
|
||||
100,Maschiff,,
|
||||
101,Mabosstiff,,
|
||||
102,Toxel,,
|
||||
103,Toxtricity,,
|
||||
104,Shroodle,,
|
||||
105,Grafaiai,,
|
||||
106,Zangoose,,
|
||||
107,Seviper,,
|
||||
108,Mime Jr.,,
|
||||
109,Mr. Mime,,
|
||||
110,Mr. Rime,,
|
||||
111,Foongus,,
|
||||
112,Amoonguss,,
|
||||
113,Heatran,,
|
||||
114,Volcanion,,
|
||||
115,Cobalion,,
|
||||
116,Terrakion,,
|
||||
117,Virizion,,
|
||||
118,Keldeo,,
|
||||
119,Meloetta,,
|
||||
120,Genesect,,
|
||||
121,Hoopa,,
|
||||
122,Marshadow,,
|
||||
123,Meltan,,
|
||||
124,Melmetal,,
|
||||
125,Darkrai,,
|
||||
126,Latias,,
|
||||
127,Latios,,
|
||||
128,Kyogre,,
|
||||
129,Groudon,,
|
||||
130,Rayquaza,,
|
||||
131,Magearna,,
|
||||
132,Zeraora,,
|
||||
|
@@ -0,0 +1,233 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Chikorita,,
|
||||
2,Bayleef,,
|
||||
3,Meganium,,
|
||||
4,Tepig,,
|
||||
5,Pignite,,
|
||||
6,Emboar,,
|
||||
7,Totodile,,
|
||||
8,Croconaw,,
|
||||
9,Feraligatr,,
|
||||
10,Fletchling,,
|
||||
11,Fletchinder,,
|
||||
12,Talonflame,,
|
||||
13,Bunnelby,,
|
||||
14,Diggersby,,
|
||||
15,Scatterbug,,
|
||||
16,Spewpa,,
|
||||
17,Vivillon,,
|
||||
18,Weedle,,
|
||||
19,Kakuna,,
|
||||
20,Beedrill,,
|
||||
21,Pidgey,,
|
||||
22,Pidgeotto,,
|
||||
23,Pidgeot,,
|
||||
24,Mareep,,
|
||||
25,Flaaffy,,
|
||||
26,Ampharos,,
|
||||
27,Patrat,,
|
||||
28,Watchog,,
|
||||
29,Budew,,
|
||||
30,Roselia,,
|
||||
31,Roserade,,
|
||||
32,Magikarp,,
|
||||
33,Gyarados,,
|
||||
34,Binacle,,
|
||||
35,Barbaracle,,
|
||||
36,Staryu,,
|
||||
37,Starmie,,
|
||||
38,Flabébé,,
|
||||
39,Floette,,
|
||||
40,Florges,,
|
||||
41,Skiddo,,
|
||||
42,Gogoat,,
|
||||
43,Espurr,,
|
||||
44,Meowstic,,
|
||||
45,Litleo,,
|
||||
46,Pyroar,,
|
||||
47,Pancham,,
|
||||
48,Pangoro,,
|
||||
49,Trubbish,,
|
||||
50,Garbodor,,
|
||||
51,Dedenne,,
|
||||
52,Pichu,,
|
||||
53,Pikachu,,
|
||||
54,Raichu,,
|
||||
55,Cleffa,,
|
||||
56,Clefairy,,
|
||||
57,Clefable,,
|
||||
58,Spinarak,,
|
||||
59,Ariados,,
|
||||
60,Ekans,,
|
||||
61,Arbok,,
|
||||
62,Abra,,
|
||||
63,Kadabra,,
|
||||
64,Alakazam,,
|
||||
65,Gastly,,
|
||||
66,Haunter,,
|
||||
67,Gengar,,
|
||||
68,Venipede,,
|
||||
69,Whirlipede,,
|
||||
70,Scolipede,,
|
||||
71,Honedge,,
|
||||
72,Doublade,,
|
||||
73,Aegislash,,
|
||||
74,Bellsprout,,
|
||||
75,Weepinbell,,
|
||||
76,Victreebel,,
|
||||
77,Pansage,,
|
||||
78,Simisage,,
|
||||
79,Pansear,,
|
||||
80,Simisear,,
|
||||
81,Panpour,,
|
||||
82,Simipour,,
|
||||
83,Meditite,,
|
||||
84,Medicham,,
|
||||
85,Electrike,,
|
||||
86,Manectric,,
|
||||
87,Ralts,,
|
||||
88,Kirlia,,
|
||||
89,Gardevoir,,
|
||||
90,Gallade,,
|
||||
91,Houndour,,
|
||||
92,Houndoom,,
|
||||
93,Swablu,,
|
||||
94,Altaria,,
|
||||
95,Audino,,
|
||||
96,Spritzee,,
|
||||
97,Aromatisse,,
|
||||
98,Swirlix,,
|
||||
99,Slurpuff,,
|
||||
100,Eevee,,
|
||||
101,Vaporeon,,
|
||||
102,Jolteon,,
|
||||
103,Flareon,,
|
||||
104,Espeon,,
|
||||
105,Umbreon,,
|
||||
106,Leafeon,,
|
||||
107,Glaceon,,
|
||||
108,Sylveon,,
|
||||
109,Buneary,,
|
||||
110,Lopunny,,
|
||||
111,Shuppet,,
|
||||
112,Banette,,
|
||||
113,Vanillite,,
|
||||
114,Vanillish,,
|
||||
115,Vanilluxe,,
|
||||
116,Numel,,
|
||||
117,Camerupt,,
|
||||
118,Hippopotas,,
|
||||
119,Hippowdon,,
|
||||
120,Drilbur,,
|
||||
121,Excadrill,,
|
||||
122,Sandile,,
|
||||
123,Krokorok,,
|
||||
124,Krookodile,,
|
||||
125,Machop,,
|
||||
126,Machoke,,
|
||||
127,Machamp,,
|
||||
128,Gible,,
|
||||
129,Gabite,,
|
||||
130,Garchomp,,
|
||||
131,Carbink,,
|
||||
132,Sableye,,
|
||||
133,Mawile,,
|
||||
134,Absol,,
|
||||
135,Riolu,,
|
||||
136,Lucario,,
|
||||
137,Slowpoke,,
|
||||
138,Slowbro,,
|
||||
139,Slowking,,
|
||||
140,Carvanha,,
|
||||
141,Sharpedo,,
|
||||
142,Tynamo,,
|
||||
143,Eelektrik,,
|
||||
144,Eelektross,,
|
||||
145,Dratini,,
|
||||
146,Dragonair,,
|
||||
147,Dragonite,,
|
||||
148,Bulbasaur,,
|
||||
149,Ivysaur,,
|
||||
150,Venusaur,,
|
||||
151,Charmander,,
|
||||
152,Charmeleon,,
|
||||
153,Charizard,,
|
||||
154,Squirtle,,
|
||||
155,Wartortle,,
|
||||
156,Blastoise,,
|
||||
157,Stunfisk,,
|
||||
158,Furfrou,,
|
||||
159,Inkay,,
|
||||
160,Malamar,,
|
||||
161,Skrelp,,
|
||||
162,Dragalge,,
|
||||
163,Clauncher,,
|
||||
164,Clawitzer,,
|
||||
165,Goomy,,
|
||||
166,Sliggoo,,
|
||||
167,Goodra,,
|
||||
168,Delibird,,
|
||||
169,Snorunt,,
|
||||
170,Glalie,,
|
||||
171,Froslass,,
|
||||
172,Snover,,
|
||||
173,Abomasnow,,
|
||||
174,Bergmite,,
|
||||
175,Avalugg,,
|
||||
176,Scyther,,
|
||||
177,Scizor,,
|
||||
178,Pinsir,,
|
||||
179,Heracross,,
|
||||
180,Emolga,,
|
||||
181,Hawlucha,,
|
||||
182,Phantump,,
|
||||
183,Trevenant,,
|
||||
184,Scraggy,,
|
||||
185,Scrafty,,
|
||||
186,Noibat,,
|
||||
187,Noivern,,
|
||||
188,Klefki,,
|
||||
189,Litwick,,
|
||||
190,Lampent,,
|
||||
191,Chandelure,,
|
||||
192,Aerodactyl,,
|
||||
193,Tyrunt,,
|
||||
194,Tyrantrum,,
|
||||
195,Amaura,,
|
||||
196,Aurorus,,
|
||||
197,Onix,,
|
||||
198,Steelix,,
|
||||
199,Aron,,
|
||||
200,Lairon,,
|
||||
201,Aggron,,
|
||||
202,Helioptile,,
|
||||
203,Heliolisk,,
|
||||
204,Pumpkaboo,,
|
||||
205,Gourgeist,,
|
||||
206,Larvitar,,
|
||||
207,Pupitar,,
|
||||
208,Tyranitar,,
|
||||
209,Froakie,,
|
||||
210,Frogadier,,
|
||||
211,Greninja,,
|
||||
212,Falinks,,
|
||||
213,Chespin,,
|
||||
214,Quilladin,,
|
||||
215,Chesnaught,,
|
||||
216,Skarmory,,
|
||||
217,Fennekin,,
|
||||
218,Braixen,,
|
||||
219,Delphox,,
|
||||
220,Bagon,,
|
||||
221,Shelgon,,
|
||||
222,Salamence,,
|
||||
223,Kangaskhan,,
|
||||
224,Drampa,,
|
||||
225,Beldum,,
|
||||
226,Metang,,
|
||||
227,Metagross,,
|
||||
228,Xerneas,,
|
||||
229,Yveltal,,
|
||||
230,Zygarde,,
|
||||
231,Diancie,,
|
||||
232,Mewtwo,,
|
||||
|
@@ -0,0 +1,154 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Bulbasaur,,
|
||||
2,Ivysaur,,
|
||||
3,Venusaur,,
|
||||
4,Charmander,,
|
||||
5,Charmeleon,,
|
||||
6,Charizard,,
|
||||
7,Squirtle,,
|
||||
8,Wartortle,,
|
||||
9,Blastoise,,
|
||||
10,Caterpie,,
|
||||
11,Metapod,,
|
||||
12,Butterfree,,
|
||||
13,Weedle,,
|
||||
14,Kakuna,,
|
||||
15,Beedrill,,
|
||||
16,Pidgey,,
|
||||
17,Pidgeotto,,
|
||||
18,Pidgeot,,
|
||||
19,Rattata,,
|
||||
20,Raticate,,
|
||||
21,Spearow,,
|
||||
22,Fearow,,
|
||||
23,Ekans,,
|
||||
24,Arbok,,
|
||||
25,Pikachu,,
|
||||
26,Raichu,,
|
||||
27,Sandshrew,,
|
||||
28,Sandslash,,
|
||||
29,Nidoran♀,,
|
||||
30,Nidorina,,
|
||||
31,Nidoqueen,,
|
||||
32,Nidoran♂,,
|
||||
33,Nidorino,,
|
||||
34,Nidoking,,
|
||||
35,Clefairy,,
|
||||
36,Clefable,,
|
||||
37,Vulpix,,
|
||||
38,Ninetales,,
|
||||
39,Jigglypuff,,
|
||||
40,Wigglytuff,,
|
||||
41,Zubat,,
|
||||
42,Golbat,,
|
||||
43,Oddish,,
|
||||
44,Gloom,,
|
||||
45,Vileplume,,
|
||||
46,Paras,,
|
||||
47,Parasect,,
|
||||
48,Venonat,,
|
||||
49,Venomoth,,
|
||||
50,Diglett,,
|
||||
51,Dugtrio,,
|
||||
52,Meowth,,
|
||||
53,Persian,,
|
||||
54,Psyduck,,
|
||||
55,Golduck,,
|
||||
56,Mankey,,
|
||||
57,Primeape,,
|
||||
58,Growlithe,,
|
||||
59,Arcanine,,
|
||||
60,Poliwag,,
|
||||
61,Poliwhirl,,
|
||||
62,Poliwrath,,
|
||||
63,Abra,,
|
||||
64,Kadabra,,
|
||||
65,Alakazam,,
|
||||
66,Machop,,
|
||||
67,Machoke,,
|
||||
68,Machamp,,
|
||||
69,Bellsprout,,
|
||||
70,Weepinbell,,
|
||||
71,Victreebel,,
|
||||
72,Tentacool,,
|
||||
73,Tentacruel,,
|
||||
74,Geodude,,
|
||||
75,Graveler,,
|
||||
76,Golem,,
|
||||
77,Ponyta,,
|
||||
78,Rapidash,,
|
||||
79,Slowpoke,,
|
||||
80,Slowbro,,
|
||||
81,Magnemite,,
|
||||
82,Magneton,,
|
||||
83,Farfetch’d,,
|
||||
84,Doduo,,
|
||||
85,Dodrio,,
|
||||
86,Seel,,
|
||||
87,Dewgong,,
|
||||
88,Grimer,,
|
||||
89,Muk,,
|
||||
90,Shellder,,
|
||||
91,Cloyster,,
|
||||
92,Gastly,,
|
||||
93,Haunter,,
|
||||
94,Gengar,,
|
||||
95,Onix,,
|
||||
96,Drowzee,,
|
||||
97,Hypno,,
|
||||
98,Krabby,,
|
||||
99,Kingler,,
|
||||
100,Voltorb,,
|
||||
101,Electrode,,
|
||||
102,Exeggcute,,
|
||||
103,Exeggutor,,
|
||||
104,Cubone,,
|
||||
105,Marowak,,
|
||||
106,Hitmonlee,,
|
||||
107,Hitmonchan,,
|
||||
108,Lickitung,,
|
||||
109,Koffing,,
|
||||
110,Weezing,,
|
||||
111,Rhyhorn,,
|
||||
112,Rhydon,,
|
||||
113,Chansey,,
|
||||
114,Tangela,,
|
||||
115,Kangaskhan,,
|
||||
116,Horsea,,
|
||||
117,Seadra,,
|
||||
118,Goldeen,,
|
||||
119,Seaking,,
|
||||
120,Staryu,,
|
||||
121,Starmie,,
|
||||
122,Mr. Mime,,
|
||||
123,Scyther,,
|
||||
124,Jynx,,
|
||||
125,Electabuzz,,
|
||||
126,Magmar,,
|
||||
127,Pinsir,,
|
||||
128,Tauros,,
|
||||
129,Magikarp,,
|
||||
130,Gyarados,,
|
||||
131,Lapras,,
|
||||
132,Ditto,,
|
||||
133,Eevee,,
|
||||
134,Vaporeon,,
|
||||
135,Jolteon,,
|
||||
136,Flareon,,
|
||||
137,Porygon,,
|
||||
138,Omanyte,,
|
||||
139,Omastar,,
|
||||
140,Kabuto,,
|
||||
141,Kabutops,,
|
||||
142,Aerodactyl,,
|
||||
143,Snorlax,,
|
||||
144,Articuno,,
|
||||
145,Zapdos,,
|
||||
146,Moltres,,
|
||||
147,Dratini,,
|
||||
148,Dragonair,,
|
||||
149,Dragonite,,
|
||||
150,Mewtwo,,
|
||||
151,Mew,,
|
||||
152,Meltan,,
|
||||
153,Melmetal,,
|
||||
|
@@ -0,0 +1,212 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Treecko,,
|
||||
2,Grovyle,,
|
||||
3,Sceptile,,
|
||||
4,Torchic,,
|
||||
5,Combusken,,
|
||||
6,Blaziken,,
|
||||
7,Mudkip,,
|
||||
8,Marshtomp,,
|
||||
9,Swampert,,
|
||||
10,Poochyena,,
|
||||
11,Mightyena,,
|
||||
12,Zigzagoon,,
|
||||
13,Linoone,,
|
||||
14,Wurmple,,
|
||||
15,Silcoon,,
|
||||
16,Beautifly,,
|
||||
17,Cascoon,,
|
||||
18,Dustox,,
|
||||
19,Lotad,,
|
||||
20,Lombre,,
|
||||
21,Ludicolo,,
|
||||
22,Seedot,,
|
||||
23,Nuzleaf,,
|
||||
24,Shiftry,,
|
||||
25,Taillow,,
|
||||
26,Swellow,,
|
||||
27,Wingull,,
|
||||
28,Pelipper,,
|
||||
29,Ralts,,
|
||||
30,Kirlia,,
|
||||
31,Gardevoir,,
|
||||
32,Gallade,,
|
||||
33,Surskit,,
|
||||
34,Masquerain,,
|
||||
35,Shroomish,,
|
||||
36,Breloom,,
|
||||
37,Slakoth,,
|
||||
38,Vigoroth,,
|
||||
39,Slaking,,
|
||||
40,Abra,,
|
||||
41,Kadabra,,
|
||||
42,Alakazam,,
|
||||
43,Nincada,,
|
||||
44,Ninjask,,
|
||||
45,Shedinja,,
|
||||
46,Whismur,,
|
||||
47,Loudred,,
|
||||
48,Exploud,,
|
||||
49,Makuhita,,
|
||||
50,Hariyama,,
|
||||
51,Goldeen,,
|
||||
52,Seaking,,
|
||||
53,Magikarp,,
|
||||
54,Gyarados,,
|
||||
55,Azurill,,
|
||||
56,Marill,,
|
||||
57,Azumarill,,
|
||||
58,Geodude,,
|
||||
59,Graveler,,
|
||||
60,Golem,,
|
||||
61,Nosepass,,
|
||||
62,Probopass,,
|
||||
63,Skitty,,
|
||||
64,Delcatty,,
|
||||
65,Zubat,,
|
||||
66,Golbat,,
|
||||
67,Crobat,,
|
||||
68,Tentacool,,
|
||||
69,Tentacruel,,
|
||||
70,Sableye,,
|
||||
71,Mawile,,
|
||||
72,Aron,,
|
||||
73,Lairon,,
|
||||
74,Aggron,,
|
||||
75,Machop,,
|
||||
76,Machoke,,
|
||||
77,Machamp,,
|
||||
78,Meditite,,
|
||||
79,Medicham,,
|
||||
80,Electrike,,
|
||||
81,Manectric,,
|
||||
82,Plusle,,
|
||||
83,Minun,,
|
||||
84,Magnemite,,
|
||||
85,Magneton,,
|
||||
86,Magnezone,,
|
||||
87,Voltorb,,
|
||||
88,Electrode,,
|
||||
89,Volbeat,,
|
||||
90,Illumise,,
|
||||
91,Oddish,,
|
||||
92,Gloom,,
|
||||
93,Vileplume,,
|
||||
94,Bellossom,,
|
||||
95,Doduo,,
|
||||
96,Dodrio,,
|
||||
97,Budew,,
|
||||
98,Roselia,,
|
||||
99,Roserade,,
|
||||
100,Gulpin,,
|
||||
101,Swalot,,
|
||||
102,Carvanha,,
|
||||
103,Sharpedo,,
|
||||
104,Wailmer,,
|
||||
105,Wailord,,
|
||||
106,Numel,,
|
||||
107,Camerupt,,
|
||||
108,Slugma,,
|
||||
109,Magcargo,,
|
||||
110,Torkoal,,
|
||||
111,Grimer,,
|
||||
112,Muk,,
|
||||
113,Koffing,,
|
||||
114,Weezing,,
|
||||
115,Spoink,,
|
||||
116,Grumpig,,
|
||||
117,Sandshrew,,
|
||||
118,Sandslash,,
|
||||
119,Spinda,,
|
||||
120,Skarmory,,
|
||||
121,Trapinch,,
|
||||
122,Vibrava,,
|
||||
123,Flygon,,
|
||||
124,Cacnea,,
|
||||
125,Cacturne,,
|
||||
126,Swablu,,
|
||||
127,Altaria,,
|
||||
128,Zangoose,,
|
||||
129,Seviper,,
|
||||
130,Lunatone,,
|
||||
131,Solrock,,
|
||||
132,Barboach,,
|
||||
133,Whiscash,,
|
||||
134,Corphish,,
|
||||
135,Crawdaunt,,
|
||||
136,Baltoy,,
|
||||
137,Claydol,,
|
||||
138,Lileep,,
|
||||
139,Cradily,,
|
||||
140,Anorith,,
|
||||
141,Armaldo,,
|
||||
142,Igglybuff,,
|
||||
143,Jigglypuff,,
|
||||
144,Wigglytuff,,
|
||||
145,Feebas,,
|
||||
146,Milotic,,
|
||||
147,Castform,,
|
||||
148,Staryu,,
|
||||
149,Starmie,,
|
||||
150,Kecleon,,
|
||||
151,Shuppet,,
|
||||
152,Banette,,
|
||||
153,Duskull,,
|
||||
154,Dusclops,,
|
||||
155,Dusknoir,,
|
||||
156,Tropius,,
|
||||
157,Chingling,,
|
||||
158,Chimecho,,
|
||||
159,Absol,,
|
||||
160,Vulpix,,
|
||||
161,Ninetales,,
|
||||
162,Pichu,,
|
||||
163,Pikachu,,
|
||||
164,Raichu,,
|
||||
165,Psyduck,,
|
||||
166,Golduck,,
|
||||
167,Wynaut,,
|
||||
168,Wobbuffet,,
|
||||
169,Natu,,
|
||||
170,Xatu,,
|
||||
171,Girafarig,,
|
||||
172,Phanpy,,
|
||||
173,Donphan,,
|
||||
174,Pinsir,,
|
||||
175,Heracross,,
|
||||
176,Rhyhorn,,
|
||||
177,Rhydon,,
|
||||
178,Rhyperior,,
|
||||
179,Snorunt,,
|
||||
180,Glalie,,
|
||||
181,Froslass,,
|
||||
182,Spheal,,
|
||||
183,Sealeo,,
|
||||
184,Walrein,,
|
||||
185,Clamperl,,
|
||||
186,Huntail,,
|
||||
187,Gorebyss,,
|
||||
188,Relicanth,,
|
||||
189,Corsola,,
|
||||
190,Chinchou,,
|
||||
191,Lanturn,,
|
||||
192,Luvdisc,,
|
||||
193,Horsea,,
|
||||
194,Seadra,,
|
||||
195,Kingdra,,
|
||||
196,Bagon,,
|
||||
197,Shelgon,,
|
||||
198,Salamence,,
|
||||
199,Beldum,,
|
||||
200,Metang,,
|
||||
201,Metagross,,
|
||||
202,Regirock,,
|
||||
203,Regice,,
|
||||
204,Registeel,,
|
||||
205,Latias,,
|
||||
206,Latios,,
|
||||
207,Kyogre,,
|
||||
208,Groudon,,
|
||||
209,Rayquaza,,
|
||||
210,Jirachi,,
|
||||
211,Deoxys,,
|
||||
|
@@ -0,0 +1,211 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Turtwig,,
|
||||
2,Grotle,,
|
||||
3,Torterra,,
|
||||
4,Chimchar,,
|
||||
5,Monferno,,
|
||||
6,Infernape,,
|
||||
7,Piplup,,
|
||||
8,Prinplup,,
|
||||
9,Empoleon,,
|
||||
10,Starly,,
|
||||
11,Staravia,,
|
||||
12,Staraptor,,
|
||||
13,Bidoof,,
|
||||
14,Bibarel,,
|
||||
15,Kricketot,,
|
||||
16,Kricketune,,
|
||||
17,Shinx,,
|
||||
18,Luxio,,
|
||||
19,Luxray,,
|
||||
20,Abra,,
|
||||
21,Kadabra,,
|
||||
22,Alakazam,,
|
||||
23,Magikarp,,
|
||||
24,Gyarados,,
|
||||
25,Budew,,
|
||||
26,Roselia,,
|
||||
27,Roserade,,
|
||||
28,Zubat,,
|
||||
29,Golbat,,
|
||||
30,Crobat,,
|
||||
31,Geodude,,
|
||||
32,Graveler,,
|
||||
33,Golem,,
|
||||
34,Onix,,
|
||||
35,Steelix,,
|
||||
36,Cranidos,,
|
||||
37,Rampardos,,
|
||||
38,Shieldon,,
|
||||
39,Bastiodon,,
|
||||
40,Machop,,
|
||||
41,Machoke,,
|
||||
42,Machamp,,
|
||||
43,Psyduck,,
|
||||
44,Golduck,,
|
||||
45,Burmy,,
|
||||
46,Wormadam,,
|
||||
47,Mothim,,
|
||||
48,Wurmple,,
|
||||
49,Silcoon,,
|
||||
50,Beautifly,,
|
||||
51,Cascoon,,
|
||||
52,Dustox,,
|
||||
53,Combee,,
|
||||
54,Vespiquen,,
|
||||
55,Pachirisu,,
|
||||
56,Buizel,,
|
||||
57,Floatzel,,
|
||||
58,Cherubi,,
|
||||
59,Cherrim,,
|
||||
60,Shellos,,
|
||||
61,Gastrodon,,
|
||||
62,Heracross,,
|
||||
63,Aipom,,
|
||||
64,Ambipom,,
|
||||
65,Drifloon,,
|
||||
66,Drifblim,,
|
||||
67,Buneary,,
|
||||
68,Lopunny,,
|
||||
69,Gastly,,
|
||||
70,Haunter,,
|
||||
71,Gengar,,
|
||||
72,Misdreavus,,
|
||||
73,Mismagius,,
|
||||
74,Murkrow,,
|
||||
75,Honchkrow,,
|
||||
76,Glameow,,
|
||||
77,Purugly,,
|
||||
78,Goldeen,,
|
||||
79,Seaking,,
|
||||
80,Barboach,,
|
||||
81,Whiscash,,
|
||||
82,Chingling,,
|
||||
83,Chimecho,,
|
||||
84,Stunky,,
|
||||
85,Skuntank,,
|
||||
86,Meditite,,
|
||||
87,Medicham,,
|
||||
88,Bronzor,,
|
||||
89,Bronzong,,
|
||||
90,Ponyta,,
|
||||
91,Rapidash,,
|
||||
92,Bonsly,,
|
||||
93,Sudowoodo,,
|
||||
94,Mime Jr.,,
|
||||
95,Mr. Mime,,
|
||||
96,Happiny,,
|
||||
97,Chansey,,
|
||||
98,Blissey,,
|
||||
99,Cleffa,,
|
||||
100,Clefairy,,
|
||||
101,Clefable,,
|
||||
102,Chatot,,
|
||||
103,Pichu,,
|
||||
104,Pikachu,,
|
||||
105,Raichu,,
|
||||
106,Hoothoot,,
|
||||
107,Noctowl,,
|
||||
108,Spiritomb,,
|
||||
109,Gible,,
|
||||
110,Gabite,,
|
||||
111,Garchomp,,
|
||||
112,Munchlax,,
|
||||
113,Snorlax,,
|
||||
114,Unown,,
|
||||
115,Riolu,,
|
||||
116,Lucario,,
|
||||
117,Wooper,,
|
||||
118,Quagsire,,
|
||||
119,Wingull,,
|
||||
120,Pelipper,,
|
||||
121,Girafarig,,
|
||||
122,Hippopotas,,
|
||||
123,Hippowdon,,
|
||||
124,Azurill,,
|
||||
125,Marill,,
|
||||
126,Azumarill,,
|
||||
127,Skorupi,,
|
||||
128,Drapion,,
|
||||
129,Croagunk,,
|
||||
130,Toxicroak,,
|
||||
131,Carnivine,,
|
||||
132,Remoraid,,
|
||||
133,Octillery,,
|
||||
134,Finneon,,
|
||||
135,Lumineon,,
|
||||
136,Tentacool,,
|
||||
137,Tentacruel,,
|
||||
138,Feebas,,
|
||||
139,Milotic,,
|
||||
140,Mantyke,,
|
||||
141,Mantine,,
|
||||
142,Snover,,
|
||||
143,Abomasnow,,
|
||||
144,Sneasel,,
|
||||
145,Weavile,,
|
||||
146,Uxie,,
|
||||
147,Mesprit,,
|
||||
148,Azelf,,
|
||||
149,Dialga,,
|
||||
150,Palkia,,
|
||||
151,Manaphy,,
|
||||
152,Rotom,,
|
||||
153,Gligar,,
|
||||
154,Gliscor,,
|
||||
155,Nosepass,,
|
||||
156,Probopass,,
|
||||
157,Ralts,,
|
||||
158,Kirlia,,
|
||||
159,Gardevoir,,
|
||||
160,Gallade,,
|
||||
161,Lickitung,,
|
||||
162,Lickilicky,,
|
||||
163,Eevee,,
|
||||
164,Vaporeon,,
|
||||
165,Jolteon,,
|
||||
166,Flareon,,
|
||||
167,Espeon,,
|
||||
168,Umbreon,,
|
||||
169,Leafeon,,
|
||||
170,Glaceon,,
|
||||
171,Swablu,,
|
||||
172,Altaria,,
|
||||
173,Togepi,,
|
||||
174,Togetic,,
|
||||
175,Togekiss,,
|
||||
176,Houndour,,
|
||||
177,Houndoom,,
|
||||
178,Magnemite,,
|
||||
179,Magneton,,
|
||||
180,Magnezone,,
|
||||
181,Tangela,,
|
||||
182,Tangrowth,,
|
||||
183,Yanma,,
|
||||
184,Yanmega,,
|
||||
185,Tropius,,
|
||||
186,Rhyhorn,,
|
||||
187,Rhydon,,
|
||||
188,Rhyperior,,
|
||||
189,Duskull,,
|
||||
190,Dusclops,,
|
||||
191,Dusknoir,,
|
||||
192,Porygon,,
|
||||
193,Porygon2,,
|
||||
194,Porygon-Z,,
|
||||
195,Scyther,,
|
||||
196,Scizor,,
|
||||
197,Elekid,,
|
||||
198,Electabuzz,,
|
||||
199,Electivire,,
|
||||
200,Magby,,
|
||||
201,Magmar,,
|
||||
202,Magmortar,,
|
||||
203,Swinub,,
|
||||
204,Piloswine,,
|
||||
205,Mamoswine,,
|
||||
206,Snorunt,,
|
||||
207,Glalie,,
|
||||
208,Froslass,,
|
||||
209,Absol,,
|
||||
210,Giratina,,
|
||||
|
@@ -0,0 +1,152 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Bulbasaur,,
|
||||
2,Ivysaur,,
|
||||
3,Venusaur,,
|
||||
4,Charmander,,
|
||||
5,Charmeleon,,
|
||||
6,Charizard,,
|
||||
7,Squirtle,,
|
||||
8,Wartortle,,
|
||||
9,Blastoise,,
|
||||
10,Caterpie,,
|
||||
11,Metapod,,
|
||||
12,Butterfree,,
|
||||
13,Weedle,,
|
||||
14,Kakuna,,
|
||||
15,Beedrill,,
|
||||
16,Pidgey,,
|
||||
17,Pidgeotto,,
|
||||
18,Pidgeot,,
|
||||
19,Rattata,,
|
||||
20,Raticate,,
|
||||
21,Spearow,,
|
||||
22,Fearow,,
|
||||
23,Ekans,,
|
||||
24,Arbok,,
|
||||
25,Pikachu,,
|
||||
26,Raichu,,
|
||||
27,Sandshrew,,
|
||||
28,Sandslash,,
|
||||
29,Nidoran♀,,
|
||||
30,Nidorina,,
|
||||
31,Nidoqueen,,
|
||||
32,Nidoran♂,,
|
||||
33,Nidorino,,
|
||||
34,Nidoking,,
|
||||
35,Clefairy,,
|
||||
36,Clefable,,
|
||||
37,Vulpix,,
|
||||
38,Ninetales,,
|
||||
39,Jigglypuff,,
|
||||
40,Wigglytuff,,
|
||||
41,Zubat,,
|
||||
42,Golbat,,
|
||||
43,Oddish,,
|
||||
44,Gloom,,
|
||||
45,Vileplume,,
|
||||
46,Paras,,
|
||||
47,Parasect,,
|
||||
48,Venonat,,
|
||||
49,Venomoth,,
|
||||
50,Diglett,,
|
||||
51,Dugtrio,,
|
||||
52,Meowth,,
|
||||
53,Persian,,
|
||||
54,Psyduck,,
|
||||
55,Golduck,,
|
||||
56,Mankey,,
|
||||
57,Primeape,,
|
||||
58,Growlithe,,
|
||||
59,Arcanine,,
|
||||
60,Poliwag,,
|
||||
61,Poliwhirl,,
|
||||
62,Poliwrath,,
|
||||
63,Abra,,
|
||||
64,Kadabra,,
|
||||
65,Alakazam,,
|
||||
66,Machop,,
|
||||
67,Machoke,,
|
||||
68,Machamp,,
|
||||
69,Bellsprout,,
|
||||
70,Weepinbell,,
|
||||
71,Victreebel,,
|
||||
72,Tentacool,,
|
||||
73,Tentacruel,,
|
||||
74,Geodude,,
|
||||
75,Graveler,,
|
||||
76,Golem,,
|
||||
77,Ponyta,,
|
||||
78,Rapidash,,
|
||||
79,Slowpoke,,
|
||||
80,Slowbro,,
|
||||
81,Magnemite,,
|
||||
82,Magneton,,
|
||||
83,Farfetch’d,,
|
||||
84,Doduo,,
|
||||
85,Dodrio,,
|
||||
86,Seel,,
|
||||
87,Dewgong,,
|
||||
88,Grimer,,
|
||||
89,Muk,,
|
||||
90,Shellder,,
|
||||
91,Cloyster,,
|
||||
92,Gastly,,
|
||||
93,Haunter,,
|
||||
94,Gengar,,
|
||||
95,Onix,,
|
||||
96,Drowzee,,
|
||||
97,Hypno,,
|
||||
98,Krabby,,
|
||||
99,Kingler,,
|
||||
100,Voltorb,,
|
||||
101,Electrode,,
|
||||
102,Exeggcute,,
|
||||
103,Exeggutor,,
|
||||
104,Cubone,,
|
||||
105,Marowak,,
|
||||
106,Hitmonlee,,
|
||||
107,Hitmonchan,,
|
||||
108,Lickitung,,
|
||||
109,Koffing,,
|
||||
110,Weezing,,
|
||||
111,Rhyhorn,,
|
||||
112,Rhydon,,
|
||||
113,Chansey,,
|
||||
114,Tangela,,
|
||||
115,Kangaskhan,,
|
||||
116,Horsea,,
|
||||
117,Seadra,,
|
||||
118,Goldeen,,
|
||||
119,Seaking,,
|
||||
120,Staryu,,
|
||||
121,Starmie,,
|
||||
122,Mr. Mime,,
|
||||
123,Scyther,,
|
||||
124,Jynx,,
|
||||
125,Electabuzz,,
|
||||
126,Magmar,,
|
||||
127,Pinsir,,
|
||||
128,Tauros,,
|
||||
129,Magikarp,,
|
||||
130,Gyarados,,
|
||||
131,Lapras,,
|
||||
132,Ditto,,
|
||||
133,Eevee,,
|
||||
134,Vaporeon,,
|
||||
135,Jolteon,,
|
||||
136,Flareon,,
|
||||
137,Porygon,,
|
||||
138,Omanyte,,
|
||||
139,Omastar,,
|
||||
140,Kabuto,,
|
||||
141,Kabutops,,
|
||||
142,Aerodactyl,,
|
||||
143,Snorlax,,
|
||||
144,Articuno,,
|
||||
145,Zapdos,,
|
||||
146,Moltres,,
|
||||
147,Dratini,,
|
||||
148,Dragonair,,
|
||||
149,Dragonite,,
|
||||
150,Mewtwo,,
|
||||
151,Mew,,
|
||||
|
@@ -0,0 +1,203 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Treecko,,
|
||||
2,Grovyle,,
|
||||
3,Sceptile,,
|
||||
4,Torchic,,
|
||||
5,Combusken,,
|
||||
6,Blaziken,,
|
||||
7,Mudkip,,
|
||||
8,Marshtomp,,
|
||||
9,Swampert,,
|
||||
10,Poochyena,,
|
||||
11,Mightyena,,
|
||||
12,Zigzagoon,,
|
||||
13,Linoone,,
|
||||
14,Wurmple,,
|
||||
15,Silcoon,,
|
||||
16,Beautifly,,
|
||||
17,Cascoon,,
|
||||
18,Dustox,,
|
||||
19,Lotad,,
|
||||
20,Lombre,,
|
||||
21,Ludicolo,,
|
||||
22,Seedot,,
|
||||
23,Nuzleaf,,
|
||||
24,Shiftry,,
|
||||
25,Taillow,,
|
||||
26,Swellow,,
|
||||
27,Wingull,,
|
||||
28,Pelipper,,
|
||||
29,Ralts,,
|
||||
30,Kirlia,,
|
||||
31,Gardevoir,,
|
||||
32,Surskit,,
|
||||
33,Masquerain,,
|
||||
34,Shroomish,,
|
||||
35,Breloom,,
|
||||
36,Slakoth,,
|
||||
37,Vigoroth,,
|
||||
38,Slaking,,
|
||||
39,Abra,,
|
||||
40,Kadabra,,
|
||||
41,Alakazam,,
|
||||
42,Nincada,,
|
||||
43,Ninjask,,
|
||||
44,Shedinja,,
|
||||
45,Whismur,,
|
||||
46,Loudred,,
|
||||
47,Exploud,,
|
||||
48,Makuhita,,
|
||||
49,Hariyama,,
|
||||
50,Goldeen,,
|
||||
51,Seaking,,
|
||||
52,Magikarp,,
|
||||
53,Gyarados,,
|
||||
54,Azurill,,
|
||||
55,Marill,,
|
||||
56,Azumarill,,
|
||||
57,Geodude,,
|
||||
58,Graveler,,
|
||||
59,Golem,,
|
||||
60,Nosepass,,
|
||||
61,Skitty,,
|
||||
62,Delcatty,,
|
||||
63,Zubat,,
|
||||
64,Golbat,,
|
||||
65,Crobat,,
|
||||
66,Tentacool,,
|
||||
67,Tentacruel,,
|
||||
68,Sableye,,
|
||||
69,Mawile,,
|
||||
70,Aron,,
|
||||
71,Lairon,,
|
||||
72,Aggron,,
|
||||
73,Machop,,
|
||||
74,Machoke,,
|
||||
75,Machamp,,
|
||||
76,Meditite,,
|
||||
77,Medicham,,
|
||||
78,Electrike,,
|
||||
79,Manectric,,
|
||||
80,Plusle,,
|
||||
81,Minun,,
|
||||
82,Magnemite,,
|
||||
83,Magneton,,
|
||||
84,Voltorb,,
|
||||
85,Electrode,,
|
||||
86,Volbeat,,
|
||||
87,Illumise,,
|
||||
88,Oddish,,
|
||||
89,Gloom,,
|
||||
90,Vileplume,,
|
||||
91,Bellossom,,
|
||||
92,Doduo,,
|
||||
93,Dodrio,,
|
||||
94,Roselia,,
|
||||
95,Gulpin,,
|
||||
96,Swalot,,
|
||||
97,Carvanha,,
|
||||
98,Sharpedo,,
|
||||
99,Wailmer,,
|
||||
100,Wailord,,
|
||||
101,Numel,,
|
||||
102,Camerupt,,
|
||||
103,Slugma,,
|
||||
104,Magcargo,,
|
||||
105,Torkoal,,
|
||||
106,Grimer,,
|
||||
107,Muk,,
|
||||
108,Koffing,,
|
||||
109,Weezing,,
|
||||
110,Spoink,,
|
||||
111,Grumpig,,
|
||||
112,Sandshrew,,
|
||||
113,Sandslash,,
|
||||
114,Spinda,,
|
||||
115,Skarmory,,
|
||||
116,Trapinch,,
|
||||
117,Vibrava,,
|
||||
118,Flygon,,
|
||||
119,Cacnea,,
|
||||
120,Cacturne,,
|
||||
121,Swablu,,
|
||||
122,Altaria,,
|
||||
123,Zangoose,,
|
||||
124,Seviper,,
|
||||
125,Lunatone,,
|
||||
126,Solrock,,
|
||||
127,Barboach,,
|
||||
128,Whiscash,,
|
||||
129,Corphish,,
|
||||
130,Crawdaunt,,
|
||||
131,Baltoy,,
|
||||
132,Claydol,,
|
||||
133,Lileep,,
|
||||
134,Cradily,,
|
||||
135,Anorith,,
|
||||
136,Armaldo,,
|
||||
137,Igglybuff,,
|
||||
138,Jigglypuff,,
|
||||
139,Wigglytuff,,
|
||||
140,Feebas,,
|
||||
141,Milotic,,
|
||||
142,Castform,,
|
||||
143,Staryu,,
|
||||
144,Starmie,,
|
||||
145,Kecleon,,
|
||||
146,Shuppet,,
|
||||
147,Banette,,
|
||||
148,Duskull,,
|
||||
149,Dusclops,,
|
||||
150,Tropius,,
|
||||
151,Chimecho,,
|
||||
152,Absol,,
|
||||
153,Vulpix,,
|
||||
154,Ninetales,,
|
||||
155,Pichu,,
|
||||
156,Pikachu,,
|
||||
157,Raichu,,
|
||||
158,Psyduck,,
|
||||
159,Golduck,,
|
||||
160,Wynaut,,
|
||||
161,Wobbuffet,,
|
||||
162,Natu,,
|
||||
163,Xatu,,
|
||||
164,Girafarig,,
|
||||
165,Phanpy,,
|
||||
166,Donphan,,
|
||||
167,Pinsir,,
|
||||
168,Heracross,,
|
||||
169,Rhyhorn,,
|
||||
170,Rhydon,,
|
||||
171,Snorunt,,
|
||||
172,Glalie,,
|
||||
173,Spheal,,
|
||||
174,Sealeo,,
|
||||
175,Walrein,,
|
||||
176,Clamperl,,
|
||||
177,Huntail,,
|
||||
178,Gorebyss,,
|
||||
179,Relicanth,,
|
||||
180,Corsola,,
|
||||
181,Chinchou,,
|
||||
182,Lanturn,,
|
||||
183,Luvdisc,,
|
||||
184,Horsea,,
|
||||
185,Seadra,,
|
||||
186,Kingdra,,
|
||||
187,Bagon,,
|
||||
188,Shelgon,,
|
||||
189,Salamence,,
|
||||
190,Beldum,,
|
||||
191,Metang,,
|
||||
192,Metagross,,
|
||||
193,Regirock,,
|
||||
194,Regice,,
|
||||
195,Registeel,,
|
||||
196,Latias,,
|
||||
197,Latios,,
|
||||
198,Kyogre,,
|
||||
199,Groudon,,
|
||||
200,Rayquaza,,
|
||||
201,Jirachi,,
|
||||
202,Deoxys,,
|
||||
|
@@ -0,0 +1,244 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Doduo,,
|
||||
2,Dodrio,,
|
||||
3,Exeggcute,,
|
||||
4,Exeggutor,,
|
||||
5,Rhyhorn,,
|
||||
6,Rhydon,,
|
||||
7,Rhyperior,,
|
||||
8,Venonat,,
|
||||
9,Venomoth,,
|
||||
10,Elekid,,
|
||||
11,Electabuzz,,
|
||||
12,Electivire,,
|
||||
13,Magby,,
|
||||
14,Magmar,,
|
||||
15,Magmortar,,
|
||||
16,Happiny,,
|
||||
17,Chansey,,
|
||||
18,Blissey,,
|
||||
19,Scyther,,
|
||||
20,Scizor,,
|
||||
21,Kleavor,,
|
||||
22,Tauros,,
|
||||
23,Blitzle,,
|
||||
24,Zebstrika,,
|
||||
25,Girafarig,,
|
||||
26,Farigiraf,,
|
||||
27,Sandile,,
|
||||
28,Krokorok,,
|
||||
29,Krookodile,,
|
||||
30,Rellor,,
|
||||
31,Rabsca,,
|
||||
32,Rufflet,,
|
||||
33,Braviary,,
|
||||
34,Vullaby,,
|
||||
35,Mandibuzz,,
|
||||
36,Litleo,,
|
||||
37,Pyroar,,
|
||||
38,Deerling,,
|
||||
39,Sawsbuck,,
|
||||
40,Smeargle,,
|
||||
41,Rotom,,
|
||||
42,Milcery,,
|
||||
43,Alcremie,,
|
||||
44,Trapinch,,
|
||||
45,Vibrava,,
|
||||
46,Flygon,,
|
||||
47,Pikipek,,
|
||||
48,Trumbeak,,
|
||||
49,Toucannon,,
|
||||
50,Tentacool,,
|
||||
51,Tentacruel,,
|
||||
52,Horsea,,
|
||||
53,Seadra,,
|
||||
54,Kingdra,,
|
||||
55,Bruxish,,
|
||||
56,Cottonee,,
|
||||
57,Whimsicott,,
|
||||
58,Comfey,,
|
||||
59,Slakoth,,
|
||||
60,Vigoroth,,
|
||||
61,Slaking,,
|
||||
62,Oddish,,
|
||||
63,Gloom,,
|
||||
64,Vileplume,,
|
||||
65,Bellossom,,
|
||||
66,Diglett,,
|
||||
67,Dugtrio,,
|
||||
68,Grimer,,
|
||||
69,Muk,,
|
||||
70,Zangoose,,
|
||||
71,Seviper,,
|
||||
72,Crabrawler,,
|
||||
73,Crabominable,,
|
||||
74,Oricorio,,
|
||||
75,Slowpoke,,
|
||||
76,Slowbro,,
|
||||
77,Slowking,,
|
||||
78,Chinchou,,
|
||||
79,Lanturn,,
|
||||
80,Inkay,,
|
||||
81,Malamar,,
|
||||
82,Luvdisc,,
|
||||
83,Finneon,,
|
||||
84,Lumineon,,
|
||||
85,Alomomola,,
|
||||
86,Torkoal,,
|
||||
87,Fletchling,,
|
||||
88,Fletchinder,,
|
||||
89,Talonflame,,
|
||||
90,Dewpider,,
|
||||
91,Araquanid,,
|
||||
92,Tyrogue,,
|
||||
93,Hitmonlee,,
|
||||
94,Hitmonchan,,
|
||||
95,Hitmontop,,
|
||||
96,Geodude,,
|
||||
97,Graveler,,
|
||||
98,Golem,,
|
||||
99,Drilbur,,
|
||||
100,Excadrill,,
|
||||
101,Gothita,,
|
||||
102,Gothorita,,
|
||||
103,Gothitelle,,
|
||||
104,Espurr,,
|
||||
105,Meowstic,,
|
||||
106,Minior,,
|
||||
107,Cranidos,,
|
||||
108,Rampardos,,
|
||||
109,Shieldon,,
|
||||
110,Bastiodon,,
|
||||
111,Minccino,,
|
||||
112,Cinccino,,
|
||||
113,Skarmory,,
|
||||
114,Swablu,,
|
||||
115,Altaria,,
|
||||
116,Magnemite,,
|
||||
117,Magneton,,
|
||||
118,Magnezone,,
|
||||
119,Plusle,,
|
||||
120,Minun,,
|
||||
121,Scraggy,,
|
||||
122,Scrafty,,
|
||||
123,Golett,,
|
||||
124,Golurk,,
|
||||
125,Numel,,
|
||||
126,Camerupt,,
|
||||
127,Sinistea,,
|
||||
128,Polteageist,,
|
||||
129,Porygon,,
|
||||
130,Porygon2,,
|
||||
131,Porygon-Z,,
|
||||
132,Joltik,,
|
||||
133,Galvantula,,
|
||||
134,Tynamo,,
|
||||
135,Eelektrik,,
|
||||
136,Eelektross,,
|
||||
137,Beldum,,
|
||||
138,Metang,,
|
||||
139,Metagross,,
|
||||
140,Axew,,
|
||||
141,Fraxure,,
|
||||
142,Haxorus,,
|
||||
143,Seel,,
|
||||
144,Dewgong,,
|
||||
145,Lapras,,
|
||||
146,Qwilfish,,
|
||||
147,Overqwil,,
|
||||
148,Solosis,,
|
||||
149,Duosion,,
|
||||
150,Reuniclus,,
|
||||
151,Snubbull,,
|
||||
152,Granbull,,
|
||||
153,Cubchoo,,
|
||||
154,Beartic,,
|
||||
155,Sandshrew,,
|
||||
156,Sandslash,,
|
||||
157,Vulpix,,
|
||||
158,Ninetales,,
|
||||
159,Snover,,
|
||||
160,Abomasnow,,
|
||||
161,Duraludon,,
|
||||
162,Archaludon,,
|
||||
163,Hydrapple,,
|
||||
164,Bulbasaur,,
|
||||
165,Ivysaur,,
|
||||
166,Venusaur,,
|
||||
167,Charmander,,
|
||||
168,Charmeleon,,
|
||||
169,Charizard,,
|
||||
170,Squirtle,,
|
||||
171,Wartortle,,
|
||||
172,Blastoise,,
|
||||
173,Chikorita,,
|
||||
174,Bayleef,,
|
||||
175,Meganium,,
|
||||
176,Cyndaquil,,
|
||||
177,Quilava,,
|
||||
178,Typhlosion,,
|
||||
179,Totodile,,
|
||||
180,Croconaw,,
|
||||
181,Feraligatr,,
|
||||
182,Treecko,,
|
||||
183,Grovyle,,
|
||||
184,Sceptile,,
|
||||
185,Torchic,,
|
||||
186,Combusken,,
|
||||
187,Blaziken,,
|
||||
188,Mudkip,,
|
||||
189,Marshtomp,,
|
||||
190,Swampert,,
|
||||
191,Turtwig,,
|
||||
192,Grotle,,
|
||||
193,Torterra,,
|
||||
194,Chimchar,,
|
||||
195,Monferno,,
|
||||
196,Infernape,,
|
||||
197,Piplup,,
|
||||
198,Prinplup,,
|
||||
199,Empoleon,,
|
||||
200,Snivy,,
|
||||
201,Servine,,
|
||||
202,Serperior,,
|
||||
203,Tepig,,
|
||||
204,Pignite,,
|
||||
205,Emboar,,
|
||||
206,Oshawott,,
|
||||
207,Dewott,,
|
||||
208,Samurott,,
|
||||
209,Chespin,,
|
||||
210,Quilladin,,
|
||||
211,Chesnaught,,
|
||||
212,Fennekin,,
|
||||
213,Braixen,,
|
||||
214,Delphox,,
|
||||
215,Froakie,,
|
||||
216,Frogadier,,
|
||||
217,Greninja,,
|
||||
218,Rowlet,,
|
||||
219,Dartrix,,
|
||||
220,Decidueye,,
|
||||
221,Litten,,
|
||||
222,Torracat,,
|
||||
223,Incineroar,,
|
||||
224,Popplio,,
|
||||
225,Brionne,,
|
||||
226,Primarina,,
|
||||
227,Grookey,,
|
||||
228,Thwackey,,
|
||||
229,Rillaboom,,
|
||||
230,Scorbunny,,
|
||||
231,Raboot,,
|
||||
232,Cinderace,,
|
||||
233,Sobble,,
|
||||
234,Drizzile,,
|
||||
235,Inteleon,,
|
||||
236,Gouging Fire,,
|
||||
237,Raging Bolt,,
|
||||
238,Iron Crown,,
|
||||
239,Iron Boulder,,
|
||||
240,Terapagos,,
|
||||
241,Walking Wake,,
|
||||
242,Iron Leaves,,
|
||||
243,Pecharunt,,
|
||||
|
@@ -0,0 +1,201 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Spinarak,,
|
||||
2,Ariados,,
|
||||
3,Yanma,,
|
||||
4,Yanmega,,
|
||||
5,Wooper,,
|
||||
6,Quagsire,,
|
||||
7,Poochyena,,
|
||||
8,Mightyena,,
|
||||
9,Volbeat,,
|
||||
10,Illumise,,
|
||||
11,Corphish,,
|
||||
12,Crawdaunt,,
|
||||
13,Sewaddle,,
|
||||
14,Swadloon,,
|
||||
15,Leavanny,,
|
||||
16,Cutiefly,,
|
||||
17,Ribombee,,
|
||||
18,Ekans,,
|
||||
19,Arbok,,
|
||||
20,Pichu,,
|
||||
21,Pikachu,,
|
||||
22,Raichu,,
|
||||
23,Bellsprout,,
|
||||
24,Weepinbell,,
|
||||
25,Victreebel,,
|
||||
26,Sentret,,
|
||||
27,Furret,,
|
||||
28,Starly,,
|
||||
29,Staravia,,
|
||||
30,Staraptor,,
|
||||
31,Fomantis,,
|
||||
32,Lurantis,,
|
||||
33,Applin,,
|
||||
34,Flapple,,
|
||||
35,Appletun,,
|
||||
36,Dipplin,,
|
||||
37,Vulpix,,
|
||||
38,Ninetales,,
|
||||
39,Poliwag,,
|
||||
40,Poliwhirl,,
|
||||
41,Poliwrath,,
|
||||
42,Politoed,,
|
||||
43,Magikarp,,
|
||||
44,Gyarados,,
|
||||
45,Hoothoot,,
|
||||
46,Noctowl,,
|
||||
47,Aipom,,
|
||||
48,Ambipom,,
|
||||
49,Heracross,,
|
||||
50,Swinub,,
|
||||
51,Piloswine,,
|
||||
52,Mamoswine,,
|
||||
53,Stantler,,
|
||||
54,Seedot,,
|
||||
55,Nuzleaf,,
|
||||
56,Shiftry,,
|
||||
57,Ralts,,
|
||||
58,Kirlia,,
|
||||
59,Gardevoir,,
|
||||
60,Gallade,,
|
||||
61,Kricketot,,
|
||||
62,Kricketune,,
|
||||
63,Pachirisu,,
|
||||
64,Riolu,,
|
||||
65,Lucario,,
|
||||
66,Petilil,,
|
||||
67,Lilligant,,
|
||||
68,Phantump,,
|
||||
69,Trevenant,,
|
||||
70,Rockruff,,
|
||||
71,Lycanroc,,
|
||||
72,Skwovet,,
|
||||
73,Greedent,,
|
||||
74,Toedscool,,
|
||||
75,Toedscruel,,
|
||||
76,Poltchageist,,
|
||||
77,Sinistcha,,
|
||||
78,Growlithe,,
|
||||
79,Arcanine,,
|
||||
80,Geodude,,
|
||||
81,Graveler,,
|
||||
82,Golem,,
|
||||
83,Bonsly,,
|
||||
84,Sudowoodo,,
|
||||
85,Timburr,,
|
||||
86,Gurdurr,,
|
||||
87,Conkeldurr,,
|
||||
88,Noibat,,
|
||||
89,Noivern,,
|
||||
90,Arrokuda,,
|
||||
91,Barraskewda,,
|
||||
92,Hatenna,,
|
||||
93,Hattrem,,
|
||||
94,Hatterene,,
|
||||
95,Morpeko,,
|
||||
96,Orthworm,,
|
||||
97,Tandemaus,,
|
||||
98,Maushold,,
|
||||
99,Mankey,,
|
||||
100,Primeape,,
|
||||
101,Annihilape,,
|
||||
102,Munchlax,,
|
||||
103,Snorlax,,
|
||||
104,Lotad,,
|
||||
105,Lombre,,
|
||||
106,Ludicolo,,
|
||||
107,Nosepass,,
|
||||
108,Probopass,,
|
||||
109,Shinx,,
|
||||
110,Luxio,,
|
||||
111,Luxray,,
|
||||
112,Grubbin,,
|
||||
113,Charjabug,,
|
||||
114,Vikavolt,,
|
||||
115,Oricorio,,
|
||||
116,Sandshrew,,
|
||||
117,Sandslash,,
|
||||
118,Gastly,,
|
||||
119,Haunter,,
|
||||
120,Gengar,,
|
||||
121,Gligar,,
|
||||
122,Gliscor,,
|
||||
123,Houndour,,
|
||||
124,Houndoom,,
|
||||
125,Spoink,,
|
||||
126,Grumpig,,
|
||||
127,Vullaby,,
|
||||
128,Mandibuzz,,
|
||||
129,Mudbray,,
|
||||
130,Mudsdale,,
|
||||
131,Jangmo-o,,
|
||||
132,Hakamo-o,,
|
||||
133,Kommo-o,,
|
||||
134,Bombirdier,,
|
||||
135,Koffing,,
|
||||
136,Weezing,,
|
||||
137,Mienfoo,,
|
||||
138,Mienshao,,
|
||||
139,Duskull,,
|
||||
140,Dusclops,,
|
||||
141,Dusknoir,,
|
||||
142,Chingling,,
|
||||
143,Chimecho,,
|
||||
144,Slugma,,
|
||||
145,Magcargo,,
|
||||
146,Litwick,,
|
||||
147,Lampent,,
|
||||
148,Chandelure,,
|
||||
149,Surskit,,
|
||||
150,Masquerain,,
|
||||
151,Cleffa,,
|
||||
152,Clefairy,,
|
||||
153,Clefable,,
|
||||
154,Bronzor,,
|
||||
155,Bronzong,,
|
||||
156,Glimmet,,
|
||||
157,Glimmora,,
|
||||
158,Feebas,,
|
||||
159,Milotic,,
|
||||
160,Dunsparce,,
|
||||
161,Dudunsparce,,
|
||||
162,Barboach,,
|
||||
163,Whiscash,,
|
||||
164,Gible,,
|
||||
165,Gabite,,
|
||||
166,Garchomp,,
|
||||
167,Carbink,,
|
||||
168,Salandit,,
|
||||
169,Salazzle,,
|
||||
170,Sneasel,,
|
||||
171,Weavile,,
|
||||
172,Snorunt,,
|
||||
173,Glalie,,
|
||||
174,Froslass,,
|
||||
175,Tynamo,,
|
||||
176,Eelektrik,,
|
||||
177,Eelektross,,
|
||||
178,Goomy,,
|
||||
179,Sliggoo,,
|
||||
180,Goodra,,
|
||||
181,Ducklett,,
|
||||
182,Swanna,,
|
||||
183,Chewtle,,
|
||||
184,Drednaw,,
|
||||
185,Cramorant,,
|
||||
186,Pawniard,,
|
||||
187,Bisharp,,
|
||||
188,Kingambit,,
|
||||
189,Mimikyu,,
|
||||
190,Impidimp,,
|
||||
191,Morgrem,,
|
||||
192,Grimmsnarl,,
|
||||
193,Indeedee,,
|
||||
194,Basculin,,
|
||||
195,Basculegion,,
|
||||
196,Ursaluna,,
|
||||
197,Okidogi,,
|
||||
198,Munkidori,,
|
||||
199,Fezandipiti,,
|
||||
200,Ogerpon,,
|
||||
|
@@ -0,0 +1,401 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Sprigatito,,
|
||||
2,Floragato,,
|
||||
3,Meowscarada,,
|
||||
4,Fuecoco,,
|
||||
5,Crocalor,,
|
||||
6,Skeledirge,,
|
||||
7,Quaxly,,
|
||||
8,Quaxwell,,
|
||||
9,Quaquaval,,
|
||||
10,Lechonk,,
|
||||
11,Oinkologne,,
|
||||
12,Tarountula,,
|
||||
13,Spidops,,
|
||||
14,Nymble,,
|
||||
15,Lokix,,
|
||||
16,Hoppip,,
|
||||
17,Skiploom,,
|
||||
18,Jumpluff,,
|
||||
19,Fletchling,,
|
||||
20,Fletchinder,,
|
||||
21,Talonflame,,
|
||||
22,Pawmi,,
|
||||
23,Pawmo,,
|
||||
24,Pawmot,,
|
||||
25,Houndour,,
|
||||
26,Houndoom,,
|
||||
27,Yungoos,,
|
||||
28,Gumshoos,,
|
||||
29,Skwovet,,
|
||||
30,Greedent,,
|
||||
31,Sunkern,,
|
||||
32,Sunflora,,
|
||||
33,Kricketot,,
|
||||
34,Kricketune,,
|
||||
35,Scatterbug,,
|
||||
36,Spewpa,,
|
||||
37,Vivillon,,
|
||||
38,Combee,,
|
||||
39,Vespiquen,,
|
||||
40,Rookidee,,
|
||||
41,Corvisquire,,
|
||||
42,Corviknight,,
|
||||
43,Happiny,,
|
||||
44,Chansey,,
|
||||
45,Blissey,,
|
||||
46,Azurill,,
|
||||
47,Marill,,
|
||||
48,Azumarill,,
|
||||
49,Surskit,,
|
||||
50,Masquerain,,
|
||||
51,Buizel,,
|
||||
52,Floatzel,,
|
||||
53,Wooper,,
|
||||
54,Clodsire,,
|
||||
55,Psyduck,,
|
||||
56,Golduck,,
|
||||
57,Chewtle,,
|
||||
58,Drednaw,,
|
||||
59,Igglybuff,,
|
||||
60,Jigglypuff,,
|
||||
61,Wigglytuff,,
|
||||
62,Ralts,,
|
||||
63,Kirlia,,
|
||||
64,Gardevoir,,
|
||||
65,Gallade,,
|
||||
66,Drowzee,,
|
||||
67,Hypno,,
|
||||
68,Gastly,,
|
||||
69,Haunter,,
|
||||
70,Gengar,,
|
||||
71,Tandemaus,,
|
||||
72,Maushold,,
|
||||
73,Pichu,,
|
||||
74,Pikachu,,
|
||||
75,Raichu,,
|
||||
76,Fidough,,
|
||||
77,Dachsbun,,
|
||||
78,Slakoth,,
|
||||
79,Vigoroth,,
|
||||
80,Slaking,,
|
||||
81,Bounsweet,,
|
||||
82,Steenee,,
|
||||
83,Tsareena,,
|
||||
84,Smoliv,,
|
||||
85,Dolliv,,
|
||||
86,Arboliva,,
|
||||
87,Bonsly,,
|
||||
88,Sudowoodo,,
|
||||
89,Rockruff,,
|
||||
90,Lycanroc,,
|
||||
91,Rolycoly,,
|
||||
92,Carkol,,
|
||||
93,Coalossal,,
|
||||
94,Shinx,,
|
||||
95,Luxio,,
|
||||
96,Luxray,,
|
||||
97,Starly,,
|
||||
98,Staravia,,
|
||||
99,Staraptor,,
|
||||
100,Oricorio,,
|
||||
101,Mareep,,
|
||||
102,Flaaffy,,
|
||||
103,Ampharos,,
|
||||
104,Petilil,,
|
||||
105,Lilligant,,
|
||||
106,Shroomish,,
|
||||
107,Breloom,,
|
||||
108,Applin,,
|
||||
109,Flapple,,
|
||||
110,Appletun,,
|
||||
111,Spoink,,
|
||||
112,Grumpig,,
|
||||
113,Squawkabilly,,
|
||||
114,Misdreavus,,
|
||||
115,Mismagius,,
|
||||
116,Makuhita,,
|
||||
117,Hariyama,,
|
||||
118,Crabrawler,,
|
||||
119,Crabominable,,
|
||||
120,Salandit,,
|
||||
121,Salazzle,,
|
||||
122,Phanpy,,
|
||||
123,Donphan,,
|
||||
124,Cufant,,
|
||||
125,Copperajah,,
|
||||
126,Gible,,
|
||||
127,Gabite,,
|
||||
128,Garchomp,,
|
||||
129,Nacli,,
|
||||
130,Naclstack,,
|
||||
131,Garganacl,,
|
||||
132,Wingull,,
|
||||
133,Pelipper,,
|
||||
134,Magikarp,,
|
||||
135,Gyarados,,
|
||||
136,Arrokuda,,
|
||||
137,Barraskewda,,
|
||||
138,Basculin,,
|
||||
139,Gulpin,,
|
||||
140,Swalot,,
|
||||
141,Meowth,,
|
||||
142,Persian,,
|
||||
143,Drifloon,,
|
||||
144,Drifblim,,
|
||||
145,Flabébé,,
|
||||
146,Floette,,
|
||||
147,Florges,,
|
||||
148,Diglett,,
|
||||
149,Dugtrio,,
|
||||
150,Torkoal,,
|
||||
151,Numel,,
|
||||
152,Camerupt,,
|
||||
153,Bronzor,,
|
||||
154,Bronzong,,
|
||||
155,Axew,,
|
||||
156,Fraxure,,
|
||||
157,Haxorus,,
|
||||
158,Mankey,,
|
||||
159,Primeape,,
|
||||
160,Annihilape,,
|
||||
161,Meditite,,
|
||||
162,Medicham,,
|
||||
163,Riolu,,
|
||||
164,Lucario,,
|
||||
165,Charcadet,,
|
||||
166,Armarouge,,
|
||||
167,Ceruledge,,
|
||||
168,Barboach,,
|
||||
169,Whiscash,,
|
||||
170,Tadbulb,,
|
||||
171,Bellibolt,,
|
||||
172,Goomy,,
|
||||
173,Sliggoo,,
|
||||
174,Goodra,,
|
||||
175,Croagunk,,
|
||||
176,Toxicroak,,
|
||||
177,Wattrel,,
|
||||
178,Kilowattrel,,
|
||||
179,Eevee,,
|
||||
180,Vaporeon,,
|
||||
181,Jolteon,,
|
||||
182,Flareon,,
|
||||
183,Espeon,,
|
||||
184,Umbreon,,
|
||||
185,Leafeon,,
|
||||
186,Glaceon,,
|
||||
187,Sylveon,,
|
||||
188,Dunsparce,,
|
||||
189,Dudunsparce,,
|
||||
190,Deerling,,
|
||||
191,Sawsbuck,,
|
||||
192,Girafarig,,
|
||||
193,Farigiraf,,
|
||||
194,Grimer,,
|
||||
195,Muk,,
|
||||
196,Maschiff,,
|
||||
197,Mabosstiff,,
|
||||
198,Toxel,,
|
||||
199,Toxtricity,,
|
||||
200,Dedenne,,
|
||||
201,Pachirisu,,
|
||||
202,Shroodle,,
|
||||
203,Grafaiai,,
|
||||
204,Stantler,,
|
||||
205,Foongus,,
|
||||
206,Amoonguss,,
|
||||
207,Voltorb,,
|
||||
208,Electrode,,
|
||||
209,Magnemite,,
|
||||
210,Magneton,,
|
||||
211,Magnezone,,
|
||||
212,Ditto,,
|
||||
213,Growlithe,,
|
||||
214,Arcanine,,
|
||||
215,Teddiursa,,
|
||||
216,Ursaring,,
|
||||
217,Zangoose,,
|
||||
218,Seviper,,
|
||||
219,Swablu,,
|
||||
220,Altaria,,
|
||||
221,Skiddo,,
|
||||
222,Gogoat,,
|
||||
223,Tauros,,
|
||||
224,Litleo,,
|
||||
225,Pyroar,,
|
||||
226,Stunky,,
|
||||
227,Skuntank,,
|
||||
228,Zorua,,
|
||||
229,Zoroark,,
|
||||
230,Sneasel,,
|
||||
231,Weavile,,
|
||||
232,Murkrow,,
|
||||
233,Honchkrow,,
|
||||
234,Gothita,,
|
||||
235,Gothorita,,
|
||||
236,Gothitelle,,
|
||||
237,Sinistea,,
|
||||
238,Polteageist,,
|
||||
239,Mimikyu,,
|
||||
240,Klefki,,
|
||||
241,Indeedee,,
|
||||
242,Bramblin,,
|
||||
243,Brambleghast,,
|
||||
244,Toedscool,,
|
||||
245,Toedscruel,,
|
||||
246,Tropius,,
|
||||
247,Fomantis,,
|
||||
248,Lurantis,,
|
||||
249,Klawf,,
|
||||
250,Capsakid,,
|
||||
251,Scovillain,,
|
||||
252,Cacnea,,
|
||||
253,Cacturne,,
|
||||
254,Rellor,,
|
||||
255,Rabsca,,
|
||||
256,Venonat,,
|
||||
257,Venomoth,,
|
||||
258,Pineco,,
|
||||
259,Forretress,,
|
||||
260,Scyther,,
|
||||
261,Scizor,,
|
||||
262,Heracross,,
|
||||
263,Flittle,,
|
||||
264,Espathra,,
|
||||
265,Hippopotas,,
|
||||
266,Hippowdon,,
|
||||
267,Sandile,,
|
||||
268,Krokorok,,
|
||||
269,Krookodile,,
|
||||
270,Silicobra,,
|
||||
271,Sandaconda,,
|
||||
272,Mudbray,,
|
||||
273,Mudsdale,,
|
||||
274,Larvesta,,
|
||||
275,Volcarona,,
|
||||
276,Bagon,,
|
||||
277,Shelgon,,
|
||||
278,Salamence,,
|
||||
279,Tinkatink,,
|
||||
280,Tinkatuff,,
|
||||
281,Tinkaton,,
|
||||
282,Hatenna,,
|
||||
283,Hattrem,,
|
||||
284,Hatterene,,
|
||||
285,Impidimp,,
|
||||
286,Morgrem,,
|
||||
287,Grimmsnarl,,
|
||||
288,Wiglett,,
|
||||
289,Wugtrio,,
|
||||
290,Bombirdier,,
|
||||
291,Finizen,,
|
||||
292,Palafin,,
|
||||
293,Varoom,,
|
||||
294,Revavroom,,
|
||||
295,Cyclizar,,
|
||||
296,Orthworm,,
|
||||
297,Sableye,,
|
||||
298,Shuppet,,
|
||||
299,Banette,,
|
||||
300,Falinks,,
|
||||
301,Hawlucha,,
|
||||
302,Spiritomb,,
|
||||
303,Noibat,,
|
||||
304,Noivern,,
|
||||
305,Dreepy,,
|
||||
306,Drakloak,,
|
||||
307,Dragapult,,
|
||||
308,Glimmet,,
|
||||
309,Glimmora,,
|
||||
310,Rotom,,
|
||||
311,Greavard,,
|
||||
312,Houndstone,,
|
||||
313,Oranguru,,
|
||||
314,Passimian,,
|
||||
315,Komala,,
|
||||
316,Larvitar,,
|
||||
317,Pupitar,,
|
||||
318,Tyranitar,,
|
||||
319,Stonjourner,,
|
||||
320,Eiscue,,
|
||||
321,Pincurchin,,
|
||||
322,Sandygast,,
|
||||
323,Palossand,,
|
||||
324,Slowpoke,,
|
||||
325,Slowbro,,
|
||||
326,Slowking,,
|
||||
327,Shellos,,
|
||||
328,Gastrodon,,
|
||||
329,Shellder,,
|
||||
330,Cloyster,,
|
||||
331,Qwilfish,,
|
||||
332,Luvdisc,,
|
||||
333,Finneon,,
|
||||
334,Lumineon,,
|
||||
335,Bruxish,,
|
||||
336,Alomomola,,
|
||||
337,Skrelp,,
|
||||
338,Dragalge,,
|
||||
339,Clauncher,,
|
||||
340,Clawitzer,,
|
||||
341,Tynamo,,
|
||||
342,Eelektrik,,
|
||||
343,Eelektross,,
|
||||
344,Mareanie,,
|
||||
345,Toxapex,,
|
||||
346,Flamigo,,
|
||||
347,Dratini,,
|
||||
348,Dragonair,,
|
||||
349,Dragonite,,
|
||||
350,Snom,,
|
||||
351,Frosmoth,,
|
||||
352,Snover,,
|
||||
353,Abomasnow,,
|
||||
354,Delibird,,
|
||||
355,Cubchoo,,
|
||||
356,Beartic,,
|
||||
357,Snorunt,,
|
||||
358,Glalie,,
|
||||
359,Froslass,,
|
||||
360,Cryogonal,,
|
||||
361,Cetoddle,,
|
||||
362,Cetitan,,
|
||||
363,Bergmite,,
|
||||
364,Avalugg,,
|
||||
365,Rufflet,,
|
||||
366,Braviary,,
|
||||
367,Pawniard,,
|
||||
368,Bisharp,,
|
||||
369,Kingambit,,
|
||||
370,Deino,,
|
||||
371,Zweilous,,
|
||||
372,Hydreigon,,
|
||||
373,Veluza,,
|
||||
374,Dondozo,,
|
||||
375,Tatsugiri,,
|
||||
376,Great Tusk,,
|
||||
377,Scream Tail,,
|
||||
378,Brute Bonnet,,
|
||||
379,Flutter Mane,,
|
||||
380,Slither Wing,,
|
||||
381,Sandy Shocks,,
|
||||
382,Iron Treads,,
|
||||
383,Iron Bundle,,
|
||||
384,Iron Hands,,
|
||||
385,Iron Jugulis,,
|
||||
386,Iron Moth,,
|
||||
387,Iron Thorns,,
|
||||
388,Frigibax,,
|
||||
389,Arctibax,,
|
||||
390,Baxcalibur,,
|
||||
391,Gimmighoul,,
|
||||
392,Gholdengo,,
|
||||
393,Wo-Chien,,
|
||||
394,Chien-Pao,,
|
||||
395,Ting-Lu,,
|
||||
396,Chi-Yu,,
|
||||
397,Roaring Moon,,
|
||||
398,Iron Valiant,,
|
||||
399,Koraidon,,
|
||||
400,Miraidon,,
|
||||
|
@@ -0,0 +1,131 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Pikipek,,
|
||||
2,Trumbeak,,
|
||||
3,Toucannon,,
|
||||
4,Yungoos,,
|
||||
5,Gumshoos,,
|
||||
6,Rattata,,
|
||||
7,Raticate,,
|
||||
8,Caterpie,,
|
||||
9,Metapod,,
|
||||
10,Butterfree,,
|
||||
11,Grubbin,,
|
||||
12,Charjabug,,
|
||||
13,Vikavolt,,
|
||||
14,Bonsly,,
|
||||
15,Sudowoodo,,
|
||||
16,Happiny,,
|
||||
17,Chansey,,
|
||||
18,Blissey,,
|
||||
19,Wingull,,
|
||||
20,Pelipper,,
|
||||
21,Crabrawler,,
|
||||
22,Crabominable,,
|
||||
23,Gastly,,
|
||||
24,Haunter,,
|
||||
25,Gengar,,
|
||||
26,Zubat,,
|
||||
27,Golbat,,
|
||||
28,Crobat,,
|
||||
29,Diglett,,
|
||||
30,Dugtrio,,
|
||||
31,Oricorio,,
|
||||
32,Psyduck,,
|
||||
33,Golduck,,
|
||||
34,Magikarp,,
|
||||
35,Gyarados,,
|
||||
36,Barboach,,
|
||||
37,Whiscash,,
|
||||
38,Tentacool,,
|
||||
39,Tentacruel,,
|
||||
40,Finneon,,
|
||||
41,Lumineon,,
|
||||
42,Wishiwashi,,
|
||||
43,Luvdisc,,
|
||||
44,Corsola,,
|
||||
45,Mareanie,,
|
||||
46,Toxapex,,
|
||||
47,Lillipup,,
|
||||
48,Herdier,,
|
||||
49,Stoutland,,
|
||||
50,Eevee,,
|
||||
51,Vaporeon,,
|
||||
52,Jolteon,,
|
||||
53,Flareon,,
|
||||
54,Espeon,,
|
||||
55,Umbreon,,
|
||||
56,Leafeon,,
|
||||
57,Glaceon,,
|
||||
58,Sylveon,,
|
||||
59,Mudbray,,
|
||||
60,Mudsdale,,
|
||||
61,Igglybuff,,
|
||||
62,Jigglypuff,,
|
||||
63,Wigglytuff,,
|
||||
64,Tauros,,
|
||||
65,Miltank,,
|
||||
66,Surskit,,
|
||||
67,Masquerain,,
|
||||
68,Dewpider,,
|
||||
69,Araquanid,,
|
||||
70,Fomantis,,
|
||||
71,Lurantis,,
|
||||
72,Morelull,,
|
||||
73,Shiinotic,,
|
||||
74,Paras,,
|
||||
75,Parasect,,
|
||||
76,Poliwag,,
|
||||
77,Poliwhirl,,
|
||||
78,Poliwrath,,
|
||||
79,Politoed,,
|
||||
80,Goldeen,,
|
||||
81,Seaking,,
|
||||
82,Feebas,,
|
||||
83,Milotic,,
|
||||
84,Alomomola,,
|
||||
85,Fletchling,,
|
||||
86,Fletchinder,,
|
||||
87,Talonflame,,
|
||||
88,Salandit,,
|
||||
89,Salazzle,,
|
||||
90,Cubone,,
|
||||
91,Marowak,,
|
||||
92,Kangaskhan,,
|
||||
93,Magby,,
|
||||
94,Magmar,,
|
||||
95,Magmortar,,
|
||||
96,Stufful,,
|
||||
97,Bewear,,
|
||||
98,Bounsweet,,
|
||||
99,Steenee,,
|
||||
100,Tsareena,,
|
||||
101,Comfey,,
|
||||
102,Pinsir,,
|
||||
103,Oranguru,,
|
||||
104,Passimian,,
|
||||
105,Goomy,,
|
||||
106,Sliggoo,,
|
||||
107,Goodra,,
|
||||
108,Castform,,
|
||||
109,Wimpod,,
|
||||
110,Golisopod,,
|
||||
111,Staryu,,
|
||||
112,Starmie,,
|
||||
113,Sandygast,,
|
||||
114,Palossand,,
|
||||
115,Cranidos,,
|
||||
116,Rampardos,,
|
||||
117,Shieldon,,
|
||||
118,Bastiodon,,
|
||||
119,Archen,,
|
||||
120,Archeops,,
|
||||
121,Tirtouga,,
|
||||
122,Carracosta,,
|
||||
123,Phantump,,
|
||||
124,Trevenant,,
|
||||
125,Nosepass,,
|
||||
126,Probopass,,
|
||||
127,Pyukumuku,,
|
||||
128,Chinchou,,
|
||||
129,Lanturn,,
|
||||
130,Tapu Lele,,
|
||||
|
@@ -0,0 +1,303 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Rowlet,,
|
||||
2,Dartrix,,
|
||||
3,Decidueye,,
|
||||
4,Litten,,
|
||||
5,Torracat,,
|
||||
6,Incineroar,,
|
||||
7,Popplio,,
|
||||
8,Brionne,,
|
||||
9,Primarina,,
|
||||
10,Pikipek,,
|
||||
11,Trumbeak,,
|
||||
12,Toucannon,,
|
||||
13,Yungoos,,
|
||||
14,Gumshoos,,
|
||||
15,Rattata,,
|
||||
16,Raticate,,
|
||||
17,Caterpie,,
|
||||
18,Metapod,,
|
||||
19,Butterfree,,
|
||||
20,Ledyba,,
|
||||
21,Ledian,,
|
||||
22,Spinarak,,
|
||||
23,Ariados,,
|
||||
24,Pichu,,
|
||||
25,Pikachu,,
|
||||
26,Raichu,,
|
||||
27,Grubbin,,
|
||||
28,Charjabug,,
|
||||
29,Vikavolt,,
|
||||
30,Bonsly,,
|
||||
31,Sudowoodo,,
|
||||
32,Happiny,,
|
||||
33,Chansey,,
|
||||
34,Blissey,,
|
||||
35,Munchlax,,
|
||||
36,Snorlax,,
|
||||
37,Slowpoke,,
|
||||
38,Slowbro,,
|
||||
39,Slowking,,
|
||||
40,Wingull,,
|
||||
41,Pelipper,,
|
||||
42,Abra,,
|
||||
43,Kadabra,,
|
||||
44,Alakazam,,
|
||||
45,Meowth,,
|
||||
46,Persian,,
|
||||
47,Magnemite,,
|
||||
48,Magneton,,
|
||||
49,Magnezone,,
|
||||
50,Grimer,,
|
||||
51,Muk,,
|
||||
52,Growlithe,,
|
||||
53,Arcanine,,
|
||||
54,Drowzee,,
|
||||
55,Hypno,,
|
||||
56,Makuhita,,
|
||||
57,Hariyama,,
|
||||
58,Smeargle,,
|
||||
59,Crabrawler,,
|
||||
60,Crabominable,,
|
||||
61,Gastly,,
|
||||
62,Haunter,,
|
||||
63,Gengar,,
|
||||
64,Drifloon,,
|
||||
65,Drifblim,,
|
||||
66,Misdreavus,,
|
||||
67,Mismagius,,
|
||||
68,Zubat,,
|
||||
69,Golbat,,
|
||||
70,Crobat,,
|
||||
71,Diglett,,
|
||||
72,Dugtrio,,
|
||||
73,Spearow,,
|
||||
74,Fearow,,
|
||||
75,Rufflet,,
|
||||
76,Braviary,,
|
||||
77,Vullaby,,
|
||||
78,Mandibuzz,,
|
||||
79,Mankey,,
|
||||
80,Primeape,,
|
||||
81,Delibird,,
|
||||
82,Oricorio,,
|
||||
83,Cutiefly,,
|
||||
84,Ribombee,,
|
||||
85,Petilil,,
|
||||
86,Lilligant,,
|
||||
87,Cottonee,,
|
||||
88,Whimsicott,,
|
||||
89,Psyduck,,
|
||||
90,Golduck,,
|
||||
91,Magikarp,,
|
||||
92,Gyarados,,
|
||||
93,Barboach,,
|
||||
94,Whiscash,,
|
||||
95,Machop,,
|
||||
96,Machoke,,
|
||||
97,Machamp,,
|
||||
98,Roggenrola,,
|
||||
99,Boldore,,
|
||||
100,Gigalith,,
|
||||
101,Carbink,,
|
||||
102,Sableye,,
|
||||
103,Rockruff,,
|
||||
104,Lycanroc,,
|
||||
105,Spinda,,
|
||||
106,Tentacool,,
|
||||
107,Tentacruel,,
|
||||
108,Finneon,,
|
||||
109,Lumineon,,
|
||||
110,Wishiwashi,,
|
||||
111,Luvdisc,,
|
||||
112,Corsola,,
|
||||
113,Mareanie,,
|
||||
114,Toxapex,,
|
||||
115,Shellder,,
|
||||
116,Cloyster,,
|
||||
117,Bagon,,
|
||||
118,Shelgon,,
|
||||
119,Salamence,,
|
||||
120,Lillipup,,
|
||||
121,Herdier,,
|
||||
122,Stoutland,,
|
||||
123,Eevee,,
|
||||
124,Vaporeon,,
|
||||
125,Jolteon,,
|
||||
126,Flareon,,
|
||||
127,Espeon,,
|
||||
128,Umbreon,,
|
||||
129,Leafeon,,
|
||||
130,Glaceon,,
|
||||
131,Sylveon,,
|
||||
132,Mudbray,,
|
||||
133,Mudsdale,,
|
||||
134,Igglybuff,,
|
||||
135,Jigglypuff,,
|
||||
136,Wigglytuff,,
|
||||
137,Tauros,,
|
||||
138,Miltank,,
|
||||
139,Surskit,,
|
||||
140,Masquerain,,
|
||||
141,Dewpider,,
|
||||
142,Araquanid,,
|
||||
143,Fomantis,,
|
||||
144,Lurantis,,
|
||||
145,Morelull,,
|
||||
146,Shiinotic,,
|
||||
147,Paras,,
|
||||
148,Parasect,,
|
||||
149,Poliwag,,
|
||||
150,Poliwhirl,,
|
||||
151,Poliwrath,,
|
||||
152,Politoed,,
|
||||
153,Goldeen,,
|
||||
154,Seaking,,
|
||||
155,Feebas,,
|
||||
156,Milotic,,
|
||||
157,Alomomola,,
|
||||
158,Fletchling,,
|
||||
159,Fletchinder,,
|
||||
160,Talonflame,,
|
||||
161,Salandit,,
|
||||
162,Salazzle,,
|
||||
163,Cubone,,
|
||||
164,Marowak,,
|
||||
165,Kangaskhan,,
|
||||
166,Magby,,
|
||||
167,Magmar,,
|
||||
168,Magmortar,,
|
||||
169,Stufful,,
|
||||
170,Bewear,,
|
||||
171,Bounsweet,,
|
||||
172,Steenee,,
|
||||
173,Tsareena,,
|
||||
174,Comfey,,
|
||||
175,Pinsir,,
|
||||
176,Oranguru,,
|
||||
177,Passimian,,
|
||||
178,Goomy,,
|
||||
179,Sliggoo,,
|
||||
180,Goodra,,
|
||||
181,Castform,,
|
||||
182,Wimpod,,
|
||||
183,Golisopod,,
|
||||
184,Staryu,,
|
||||
185,Starmie,,
|
||||
186,Sandygast,,
|
||||
187,Palossand,,
|
||||
188,Cranidos,,
|
||||
189,Rampardos,,
|
||||
190,Shieldon,,
|
||||
191,Bastiodon,,
|
||||
192,Archen,,
|
||||
193,Archeops,,
|
||||
194,Tirtouga,,
|
||||
195,Carracosta,,
|
||||
196,Phantump,,
|
||||
197,Trevenant,,
|
||||
198,Nosepass,,
|
||||
199,Probopass,,
|
||||
200,Pyukumuku,,
|
||||
201,Chinchou,,
|
||||
202,Lanturn,,
|
||||
203,Type: Null,,
|
||||
204,Silvally,,
|
||||
205,Zygarde,,
|
||||
206,Trubbish,,
|
||||
207,Garbodor,,
|
||||
208,Skarmory,,
|
||||
209,Ditto,,
|
||||
210,Cleffa,,
|
||||
211,Clefairy,,
|
||||
212,Clefable,,
|
||||
213,Minior,,
|
||||
214,Beldum,,
|
||||
215,Metang,,
|
||||
216,Metagross,,
|
||||
217,Porygon,,
|
||||
218,Porygon2,,
|
||||
219,Porygon-Z,,
|
||||
220,Pancham,,
|
||||
221,Pangoro,,
|
||||
222,Komala,,
|
||||
223,Torkoal,,
|
||||
224,Turtonator,,
|
||||
225,Togedemaru,,
|
||||
226,Elekid,,
|
||||
227,Electabuzz,,
|
||||
228,Electivire,,
|
||||
229,Geodude,,
|
||||
230,Graveler,,
|
||||
231,Golem,,
|
||||
232,Sandile,,
|
||||
233,Krokorok,,
|
||||
234,Krookodile,,
|
||||
235,Trapinch,,
|
||||
236,Vibrava,,
|
||||
237,Flygon,,
|
||||
238,Gible,,
|
||||
239,Gabite,,
|
||||
240,Garchomp,,
|
||||
241,Klefki,,
|
||||
242,Mimikyu,,
|
||||
243,Bruxish,,
|
||||
244,Drampa,,
|
||||
245,Absol,,
|
||||
246,Snorunt,,
|
||||
247,Glalie,,
|
||||
248,Froslass,,
|
||||
249,Sneasel,,
|
||||
250,Weavile,,
|
||||
251,Sandshrew,,
|
||||
252,Sandslash,,
|
||||
253,Vulpix,,
|
||||
254,Ninetales,,
|
||||
255,Vanillite,,
|
||||
256,Vanillish,,
|
||||
257,Vanilluxe,,
|
||||
258,Snubbull,,
|
||||
259,Granbull,,
|
||||
260,Shellos,,
|
||||
261,Gastrodon,,
|
||||
262,Relicanth,,
|
||||
263,Dhelmise,,
|
||||
264,Carvanha,,
|
||||
265,Sharpedo,,
|
||||
266,Wailmer,,
|
||||
267,Wailord,,
|
||||
268,Lapras,,
|
||||
269,Exeggcute,,
|
||||
270,Exeggutor,,
|
||||
271,Jangmo-o,,
|
||||
272,Hakamo-o,,
|
||||
273,Kommo-o,,
|
||||
274,Emolga,,
|
||||
275,Scyther,,
|
||||
276,Scizor,,
|
||||
277,Murkrow,,
|
||||
278,Honchkrow,,
|
||||
279,Riolu,,
|
||||
280,Lucario,,
|
||||
281,Dratini,,
|
||||
282,Dragonair,,
|
||||
283,Dragonite,,
|
||||
284,Aerodactyl,,
|
||||
285,Tapu Koko,,
|
||||
286,Tapu Lele,,
|
||||
287,Tapu Bulu,,
|
||||
288,Tapu Fini,,
|
||||
289,Cosmog,,
|
||||
290,Cosmoem,,
|
||||
291,Solgaleo,,
|
||||
292,Lunala,,
|
||||
293,Nihilego,,
|
||||
294,Buzzwole,,
|
||||
295,Pheromosa,,
|
||||
296,Xurkitree,,
|
||||
297,Celesteela,,
|
||||
298,Kartana,,
|
||||
299,Guzzlord,,
|
||||
300,Necrozma,,
|
||||
301,Magearna,,
|
||||
302,Marshadow,,
|
||||
|
@@ -0,0 +1,121 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Rowlet,,
|
||||
2,Dartrix,,
|
||||
3,Decidueye,,
|
||||
4,Litten,,
|
||||
5,Torracat,,
|
||||
6,Incineroar,,
|
||||
7,Popplio,,
|
||||
8,Brionne,,
|
||||
9,Primarina,,
|
||||
10,Pikipek,,
|
||||
11,Trumbeak,,
|
||||
12,Toucannon,,
|
||||
13,Yungoos,,
|
||||
14,Gumshoos,,
|
||||
15,Rattata,,
|
||||
16,Raticate,,
|
||||
17,Caterpie,,
|
||||
18,Metapod,,
|
||||
19,Butterfree,,
|
||||
20,Ledyba,,
|
||||
21,Ledian,,
|
||||
22,Spinarak,,
|
||||
23,Ariados,,
|
||||
24,Pichu,,
|
||||
25,Pikachu,,
|
||||
26,Raichu,,
|
||||
27,Grubbin,,
|
||||
28,Charjabug,,
|
||||
29,Vikavolt,,
|
||||
30,Bonsly,,
|
||||
31,Sudowoodo,,
|
||||
32,Happiny,,
|
||||
33,Chansey,,
|
||||
34,Blissey,,
|
||||
35,Munchlax,,
|
||||
36,Snorlax,,
|
||||
37,Slowpoke,,
|
||||
38,Slowbro,,
|
||||
39,Slowking,,
|
||||
40,Wingull,,
|
||||
41,Pelipper,,
|
||||
42,Abra,,
|
||||
43,Kadabra,,
|
||||
44,Alakazam,,
|
||||
45,Meowth,,
|
||||
46,Persian,,
|
||||
47,Magnemite,,
|
||||
48,Magneton,,
|
||||
49,Magnezone,,
|
||||
50,Grimer,,
|
||||
51,Muk,,
|
||||
52,Growlithe,,
|
||||
53,Arcanine,,
|
||||
54,Drowzee,,
|
||||
55,Hypno,,
|
||||
56,Makuhita,,
|
||||
57,Hariyama,,
|
||||
58,Smeargle,,
|
||||
59,Crabrawler,,
|
||||
60,Crabominable,,
|
||||
61,Gastly,,
|
||||
62,Haunter,,
|
||||
63,Gengar,,
|
||||
64,Drifloon,,
|
||||
65,Drifblim,,
|
||||
66,Misdreavus,,
|
||||
67,Mismagius,,
|
||||
68,Zubat,,
|
||||
69,Golbat,,
|
||||
70,Crobat,,
|
||||
71,Diglett,,
|
||||
72,Dugtrio,,
|
||||
73,Spearow,,
|
||||
74,Fearow,,
|
||||
75,Rufflet,,
|
||||
76,Braviary,,
|
||||
77,Vullaby,,
|
||||
78,Mandibuzz,,
|
||||
79,Mankey,,
|
||||
80,Primeape,,
|
||||
81,Delibird,,
|
||||
82,Oricorio,,
|
||||
83,Cutiefly,,
|
||||
84,Ribombee,,
|
||||
85,Petilil,,
|
||||
86,Lilligant,,
|
||||
87,Cottonee,,
|
||||
88,Whimsicott,,
|
||||
89,Psyduck,,
|
||||
90,Golduck,,
|
||||
91,Magikarp,,
|
||||
92,Gyarados,,
|
||||
93,Barboach,,
|
||||
94,Whiscash,,
|
||||
95,Machop,,
|
||||
96,Machoke,,
|
||||
97,Machamp,,
|
||||
98,Roggenrola,,
|
||||
99,Boldore,,
|
||||
100,Gigalith,,
|
||||
101,Carbink,,
|
||||
102,Sableye,,
|
||||
103,Rockruff,,
|
||||
104,Lycanroc,,
|
||||
105,Spinda,,
|
||||
106,Tentacool,,
|
||||
107,Tentacruel,,
|
||||
108,Finneon,,
|
||||
109,Lumineon,,
|
||||
110,Wishiwashi,,
|
||||
111,Luvdisc,,
|
||||
112,Corsola,,
|
||||
113,Mareanie,,
|
||||
114,Toxapex,,
|
||||
115,Shellder,,
|
||||
116,Cloyster,,
|
||||
117,Bagon,,
|
||||
118,Shelgon,,
|
||||
119,Salamence,,
|
||||
120,Tapu Koko,,
|
||||
|
@@ -0,0 +1,101 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Pikipek,,
|
||||
2,Trumbeak,,
|
||||
3,Toucannon,,
|
||||
4,Yungoos,,
|
||||
5,Gumshoos,,
|
||||
6,Rattata,,
|
||||
7,Raticate,,
|
||||
8,Happiny,,
|
||||
9,Chansey,,
|
||||
10,Blissey,,
|
||||
11,Wingull,,
|
||||
12,Pelipper,,
|
||||
13,Drowzee,,
|
||||
14,Hypno,,
|
||||
15,Makuhita,,
|
||||
16,Hariyama,,
|
||||
17,Crabrawler,,
|
||||
18,Crabominable,,
|
||||
19,Zubat,,
|
||||
20,Golbat,,
|
||||
21,Crobat,,
|
||||
22,Diglett,,
|
||||
23,Dugtrio,,
|
||||
24,Spearow,,
|
||||
25,Fearow,,
|
||||
26,Rufflet,,
|
||||
27,Braviary,,
|
||||
28,Vullaby,,
|
||||
29,Mandibuzz,,
|
||||
30,Mankey,,
|
||||
31,Primeape,,
|
||||
32,Oricorio,,
|
||||
33,Cutiefly,,
|
||||
34,Ribombee,,
|
||||
35,Petilil,,
|
||||
36,Lilligant,,
|
||||
37,Cottonee,,
|
||||
38,Whimsicott,,
|
||||
39,Psyduck,,
|
||||
40,Golduck,,
|
||||
41,Magikarp,,
|
||||
42,Gyarados,,
|
||||
43,Barboach,,
|
||||
44,Whiscash,,
|
||||
45,Machop,,
|
||||
46,Machoke,,
|
||||
47,Machamp,,
|
||||
48,Roggenrola,,
|
||||
49,Boldore,,
|
||||
50,Gigalith,,
|
||||
51,Carbink,,
|
||||
52,Sableye,,
|
||||
53,Rockruff,,
|
||||
54,Lycanroc,,
|
||||
55,Tentacool,,
|
||||
56,Tentacruel,,
|
||||
57,Finneon,,
|
||||
58,Lumineon,,
|
||||
59,Mudbray,,
|
||||
60,Mudsdale,,
|
||||
61,Tauros,,
|
||||
62,Miltank,,
|
||||
63,Stufful,,
|
||||
64,Bewear,,
|
||||
65,Pinsir,,
|
||||
66,Goomy,,
|
||||
67,Sliggoo,,
|
||||
68,Goodra,,
|
||||
69,Castform,,
|
||||
70,Wimpod,,
|
||||
71,Golisopod,,
|
||||
72,Skarmory,,
|
||||
73,Snubbull,,
|
||||
74,Granbull,,
|
||||
75,Shellos,,
|
||||
76,Gastrodon,,
|
||||
77,Relicanth,,
|
||||
78,Dhelmise,,
|
||||
79,Carvanha,,
|
||||
80,Sharpedo,,
|
||||
81,Wailmer,,
|
||||
82,Wailord,,
|
||||
83,Lapras,,
|
||||
84,Exeggcute,,
|
||||
85,Exeggutor,,
|
||||
86,Jangmo-o,,
|
||||
87,Hakamo-o,,
|
||||
88,Kommo-o,,
|
||||
89,Emolga,,
|
||||
90,Scyther,,
|
||||
91,Scizor,,
|
||||
92,Murkrow,,
|
||||
93,Honchkrow,,
|
||||
94,Riolu,,
|
||||
95,Lucario,,
|
||||
96,Dratini,,
|
||||
97,Dragonair,,
|
||||
98,Dragonite,,
|
||||
99,Aerodactyl,,
|
||||
100,Tapu Fini,,
|
||||
|
@@ -0,0 +1,131 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Pikipek,,
|
||||
2,Trumbeak,,
|
||||
3,Toucannon,,
|
||||
4,Yungoos,,
|
||||
5,Gumshoos,,
|
||||
6,Rattata,,
|
||||
7,Raticate,,
|
||||
8,Ledyba,,
|
||||
9,Ledian,,
|
||||
10,Spinarak,,
|
||||
11,Ariados,,
|
||||
12,Grubbin,,
|
||||
13,Charjabug,,
|
||||
14,Vikavolt,,
|
||||
15,Happiny,,
|
||||
16,Chansey,,
|
||||
17,Blissey,,
|
||||
18,Slowpoke,,
|
||||
19,Slowbro,,
|
||||
20,Slowking,,
|
||||
21,Wingull,,
|
||||
22,Pelipper,,
|
||||
23,Meowth,,
|
||||
24,Persian,,
|
||||
25,Magnemite,,
|
||||
26,Magneton,,
|
||||
27,Magnezone,,
|
||||
28,Grimer,,
|
||||
29,Muk,,
|
||||
30,Crabrawler,,
|
||||
31,Crabominable,,
|
||||
32,Gastly,,
|
||||
33,Haunter,,
|
||||
34,Gengar,,
|
||||
35,Zubat,,
|
||||
36,Golbat,,
|
||||
37,Crobat,,
|
||||
38,Diglett,,
|
||||
39,Dugtrio,,
|
||||
40,Spearow,,
|
||||
41,Fearow,,
|
||||
42,Oricorio,,
|
||||
43,Cutiefly,,
|
||||
44,Ribombee,,
|
||||
45,Petilil,,
|
||||
46,Lilligant,,
|
||||
47,Cottonee,,
|
||||
48,Whimsicott,,
|
||||
49,Psyduck,,
|
||||
50,Golduck,,
|
||||
51,Magikarp,,
|
||||
52,Gyarados,,
|
||||
53,Tentacool,,
|
||||
54,Tentacruel,,
|
||||
55,Finneon,,
|
||||
56,Lumineon,,
|
||||
57,Wishiwashi,,
|
||||
58,Mudbray,,
|
||||
59,Mudsdale,,
|
||||
60,Surskit,,
|
||||
61,Masquerain,,
|
||||
62,Dewpider,,
|
||||
63,Araquanid,,
|
||||
64,Morelull,,
|
||||
65,Shiinotic,,
|
||||
66,Paras,,
|
||||
67,Parasect,,
|
||||
68,Poliwag,,
|
||||
69,Poliwhirl,,
|
||||
70,Poliwrath,,
|
||||
71,Politoed,,
|
||||
72,Goldeen,,
|
||||
73,Seaking,,
|
||||
74,Goomy,,
|
||||
75,Sliggoo,,
|
||||
76,Goodra,,
|
||||
77,Castform,,
|
||||
78,Trubbish,,
|
||||
79,Garbodor,,
|
||||
80,Skarmory,,
|
||||
81,Ditto,,
|
||||
82,Cleffa,,
|
||||
83,Clefairy,,
|
||||
84,Clefable,,
|
||||
85,Minior,,
|
||||
86,Beldum,,
|
||||
87,Metang,,
|
||||
88,Metagross,,
|
||||
89,Porygon,,
|
||||
90,Porygon2,,
|
||||
91,Porygon-Z,,
|
||||
92,Pancham,,
|
||||
93,Pangoro,,
|
||||
94,Komala,,
|
||||
95,Torkoal,,
|
||||
96,Turtonator,,
|
||||
97,Togedemaru,,
|
||||
98,Elekid,,
|
||||
99,Electabuzz,,
|
||||
100,Electivire,,
|
||||
101,Geodude,,
|
||||
102,Graveler,,
|
||||
103,Golem,,
|
||||
104,Sandile,,
|
||||
105,Krokorok,,
|
||||
106,Krookodile,,
|
||||
107,Trapinch,,
|
||||
108,Vibrava,,
|
||||
109,Flygon,,
|
||||
110,Gible,,
|
||||
111,Gabite,,
|
||||
112,Garchomp,,
|
||||
113,Klefki,,
|
||||
114,Mimikyu,,
|
||||
115,Bruxish,,
|
||||
116,Drampa,,
|
||||
117,Absol,,
|
||||
118,Snorunt,,
|
||||
119,Glalie,,
|
||||
120,Froslass,,
|
||||
121,Sneasel,,
|
||||
122,Weavile,,
|
||||
123,Sandshrew,,
|
||||
124,Sandslash,,
|
||||
125,Vulpix,,
|
||||
126,Ninetales,,
|
||||
127,Vanillite,,
|
||||
128,Vanillish,,
|
||||
129,Vanilluxe,,
|
||||
130,Tapu Bulu,,
|
||||
|
@@ -0,0 +1,211 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Snom,,
|
||||
2,Frosmoth,,
|
||||
3,Wooloo,,
|
||||
4,Dubwool,,
|
||||
5,Skwovet,,
|
||||
6,Greedent,,
|
||||
7,Swinub,,
|
||||
8,Piloswine,,
|
||||
9,Mamoswine,,
|
||||
10,Mime Jr.,,
|
||||
11,Mr. Mime,,
|
||||
12,Mr. Rime,,
|
||||
13,Smoochum,,
|
||||
14,Jynx,,
|
||||
15,Elekid,,
|
||||
16,Electabuzz,,
|
||||
17,Electivire,,
|
||||
18,Magby,,
|
||||
19,Magmar,,
|
||||
20,Magmortar,,
|
||||
21,Audino,,
|
||||
22,Vanillite,,
|
||||
23,Vanillish,,
|
||||
24,Vanilluxe,,
|
||||
25,Snorunt,,
|
||||
26,Glalie,,
|
||||
27,Froslass,,
|
||||
28,Sneasel,,
|
||||
29,Weavile,,
|
||||
30,Cryogonal,,
|
||||
31,Snover,,
|
||||
32,Abomasnow,,
|
||||
33,Phantump,,
|
||||
34,Trevenant,,
|
||||
35,Swablu,,
|
||||
36,Altaria,,
|
||||
37,Impidimp,,
|
||||
38,Morgrem,,
|
||||
39,Grimmsnarl,,
|
||||
40,Hatenna,,
|
||||
41,Hattrem,,
|
||||
42,Hatterene,,
|
||||
43,Cleffa,,
|
||||
44,Clefairy,,
|
||||
45,Clefable,,
|
||||
46,Mimikyu,,
|
||||
47,Spiritomb,,
|
||||
48,Litwick,,
|
||||
49,Lampent,,
|
||||
50,Chandelure,,
|
||||
51,Gothita,,
|
||||
52,Gothorita,,
|
||||
53,Gothitelle,,
|
||||
54,Solosis,,
|
||||
55,Duosion,,
|
||||
56,Reuniclus,,
|
||||
57,Timburr,,
|
||||
58,Gurdurr,,
|
||||
59,Conkeldurr,,
|
||||
60,Barboach,,
|
||||
61,Whiscash,,
|
||||
62,Magikarp,,
|
||||
63,Gyarados,,
|
||||
64,Basculin,,
|
||||
65,Nidoran♀,,
|
||||
66,Nidorina,,
|
||||
67,Nidoqueen,,
|
||||
68,Nidoran♂,,
|
||||
69,Nidorino,,
|
||||
70,Nidoking,,
|
||||
71,Zigzagoon,,
|
||||
72,Linoone,,
|
||||
73,Obstagoon,,
|
||||
74,Eevee,,
|
||||
75,Vaporeon,,
|
||||
76,Jolteon,,
|
||||
77,Flareon,,
|
||||
78,Umbreon,,
|
||||
79,Espeon,,
|
||||
80,Glaceon,,
|
||||
81,Leafeon,,
|
||||
82,Sylveon,,
|
||||
83,Tyrunt,,
|
||||
84,Tyrantrum,,
|
||||
85,Amaura,,
|
||||
86,Aurorus,,
|
||||
87,Bronzor,,
|
||||
88,Bronzong,,
|
||||
89,Stonjourner,,
|
||||
90,Eiscue,,
|
||||
91,Dewpider,,
|
||||
92,Araquanid,,
|
||||
93,Joltik,,
|
||||
94,Galvantula,,
|
||||
95,Karrablast,,
|
||||
96,Escavalier,,
|
||||
97,Shelmet,,
|
||||
98,Accelgor,,
|
||||
99,Sizzlipede,,
|
||||
100,Centiskorch,,
|
||||
101,Durant,,
|
||||
102,Heatmor,,
|
||||
103,Darumaka,,
|
||||
104,Darmanitan,,
|
||||
105,Ponyta,,
|
||||
106,Rapidash,,
|
||||
107,Absol,,
|
||||
108,Cufant,,
|
||||
109,Copperajah,,
|
||||
110,Dreepy,,
|
||||
111,Drakloak,,
|
||||
112,Dragapult,,
|
||||
113,Bagon,,
|
||||
114,Shelgon,,
|
||||
115,Salamence,,
|
||||
116,Gible,,
|
||||
117,Gabite,,
|
||||
118,Garchomp,,
|
||||
119,Druddigon,,
|
||||
120,Delibird,,
|
||||
121,Cubchoo,,
|
||||
122,Beartic,,
|
||||
123,Omanyte,,
|
||||
124,Omastar,,
|
||||
125,Kabuto,,
|
||||
126,Kabutops,,
|
||||
127,Aerodactyl,,
|
||||
128,Carbink,,
|
||||
129,Beldum,,
|
||||
130,Metang,,
|
||||
131,Metagross,,
|
||||
132,Sinistea,,
|
||||
133,Polteageist,,
|
||||
134,Riolu,,
|
||||
135,Lucario,,
|
||||
136,Deino,,
|
||||
137,Zweilous,,
|
||||
138,Hydreigon,,
|
||||
139,Larvitar,,
|
||||
140,Pupitar,,
|
||||
141,Tyranitar,,
|
||||
142,Bergmite,,
|
||||
143,Avalugg,,
|
||||
144,Zubat,,
|
||||
145,Golbat,,
|
||||
146,Crobat,,
|
||||
147,Tirtouga,,
|
||||
148,Carracosta,,
|
||||
149,Archen,,
|
||||
150,Archeops,,
|
||||
151,Baltoy,,
|
||||
152,Claydol,,
|
||||
153,Golett,,
|
||||
154,Golurk,,
|
||||
155,Yamper,,
|
||||
156,Boltund,,
|
||||
157,Morpeko,,
|
||||
158,Pincurchin,,
|
||||
159,Spheal,,
|
||||
160,Sealeo,,
|
||||
161,Walrein,,
|
||||
162,Dhelmise,,
|
||||
163,Rookidee,,
|
||||
164,Corvisquire,,
|
||||
165,Corviknight,,
|
||||
166,Gossifleur,,
|
||||
167,Eldegoss,,
|
||||
168,Cottonee,,
|
||||
169,Whimsicott,,
|
||||
170,Shuckle,,
|
||||
171,Indeedee,,
|
||||
172,Munchlax,,
|
||||
173,Snorlax,,
|
||||
174,Sableye,,
|
||||
175,Mawile,,
|
||||
176,Rolycoly,,
|
||||
177,Carkol,,
|
||||
178,Coalossal,,
|
||||
179,Ferroseed,,
|
||||
180,Ferrothorn,,
|
||||
181,Noibat,,
|
||||
182,Noivern,,
|
||||
183,Lileep,,
|
||||
184,Cradily,,
|
||||
185,Anorith,,
|
||||
186,Armaldo,,
|
||||
187,Relicanth,,
|
||||
188,Feebas,,
|
||||
189,Milotic,,
|
||||
190,Lapras,,
|
||||
191,Aron,,
|
||||
192,Lairon,,
|
||||
193,Aggron,,
|
||||
194,Dratini,,
|
||||
195,Dragonair,,
|
||||
196,Dragonite,,
|
||||
197,Regirock,,
|
||||
198,Regice,,
|
||||
199,Registeel,,
|
||||
200,Regieleki,,
|
||||
201,Regidrago,,
|
||||
202,Articuno,,
|
||||
203,Zapdos,,
|
||||
204,Moltres,,
|
||||
205,Cobalion,,
|
||||
206,Terrakion,,
|
||||
207,Virizion,,
|
||||
208,Glastrier,,
|
||||
209,Spectrier,,
|
||||
210,Calyrex,,
|
||||
|
@@ -0,0 +1,212 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Slowpoke,,
|
||||
2,Slowbro,,
|
||||
3,Slowking,,
|
||||
4,Buneary,,
|
||||
5,Lopunny,,
|
||||
6,Happiny,,
|
||||
7,Chansey,,
|
||||
8,Blissey,,
|
||||
9,Skwovet,,
|
||||
10,Greedent,,
|
||||
11,Igglybuff,,
|
||||
12,Jigglypuff,,
|
||||
13,Wigglytuff,,
|
||||
14,Blipbug,,
|
||||
15,Dottler,,
|
||||
16,Orbeetle,,
|
||||
17,Fomantis,,
|
||||
18,Lurantis,,
|
||||
19,Applin,,
|
||||
20,Flapple,,
|
||||
21,Appletun,,
|
||||
22,Fletchling,,
|
||||
23,Fletchinder,,
|
||||
24,Talonflame,,
|
||||
25,Shinx,,
|
||||
26,Luxio,,
|
||||
27,Luxray,,
|
||||
28,Klefki,,
|
||||
29,Pawniard,,
|
||||
30,Bisharp,,
|
||||
31,Abra,,
|
||||
32,Kadabra,,
|
||||
33,Alakazam,,
|
||||
34,Ralts,,
|
||||
35,Kirlia,,
|
||||
36,Gardevoir,,
|
||||
37,Gallade,,
|
||||
38,Krabby,,
|
||||
39,Kingler,,
|
||||
40,Tentacool,,
|
||||
41,Tentacruel,,
|
||||
42,Magikarp,,
|
||||
43,Gyarados,,
|
||||
44,Remoraid,,
|
||||
45,Octillery,,
|
||||
46,Mantyke,,
|
||||
47,Mantine,,
|
||||
48,Wingull,,
|
||||
49,Pelipper,,
|
||||
50,Skorupi,,
|
||||
51,Drapion,,
|
||||
52,Dunsparce,,
|
||||
53,Bouffalant,,
|
||||
54,Lickitung,,
|
||||
55,Lickilicky,,
|
||||
56,Chewtle,,
|
||||
57,Drednaw,,
|
||||
58,Wooper,,
|
||||
59,Quagsire,,
|
||||
60,Goomy,,
|
||||
61,Sliggoo,,
|
||||
62,Goodra,,
|
||||
63,Druddigon,,
|
||||
64,Shelmet,,
|
||||
65,Accelgor,,
|
||||
66,Karrablast,,
|
||||
67,Escavalier,,
|
||||
68,Bulbasaur,,
|
||||
69,Ivysaur,,
|
||||
70,Venusaur,,
|
||||
71,Squirtle,,
|
||||
72,Wartortle,,
|
||||
73,Blastoise,,
|
||||
74,Venipede,,
|
||||
75,Whirlipede,,
|
||||
76,Scolipede,,
|
||||
77,Foongus,,
|
||||
78,Amoonguss,,
|
||||
79,Comfey,,
|
||||
80,Tangela,,
|
||||
81,Tangrowth,,
|
||||
82,Croagunk,,
|
||||
83,Toxicroak,,
|
||||
84,Pichu,,
|
||||
85,Pikachu,,
|
||||
86,Raichu,,
|
||||
87,Zorua,,
|
||||
88,Zoroark,,
|
||||
89,Oranguru,,
|
||||
90,Passimian,,
|
||||
91,Corphish,,
|
||||
92,Crawdaunt,,
|
||||
93,Cramorant,,
|
||||
94,Goldeen,,
|
||||
95,Seaking,,
|
||||
96,Arrokuda,,
|
||||
97,Barraskewda,,
|
||||
98,Staryu,,
|
||||
99,Starmie,,
|
||||
100,Kubfu,,
|
||||
101,Urshifu,,
|
||||
102,Emolga,,
|
||||
103,Dedenne,,
|
||||
104,Morpeko,,
|
||||
105,Magnemite,,
|
||||
106,Magneton,,
|
||||
107,Magnezone,,
|
||||
108,Inkay,,
|
||||
109,Malamar,,
|
||||
110,Wishiwashi,,
|
||||
111,Carvanha,,
|
||||
112,Sharpedo,,
|
||||
113,Lillipup,,
|
||||
114,Herdier,,
|
||||
115,Stoutland,,
|
||||
116,Tauros,,
|
||||
117,Miltank,,
|
||||
118,Scyther,,
|
||||
119,Scizor,,
|
||||
120,Pinsir,,
|
||||
121,Heracross,,
|
||||
122,Dwebble,,
|
||||
123,Crustle,,
|
||||
124,Wimpod,,
|
||||
125,Golisopod,,
|
||||
126,Pincurchin,,
|
||||
127,Mareanie,,
|
||||
128,Toxapex,,
|
||||
129,Clobbopus,,
|
||||
130,Grapploct,,
|
||||
131,Shellder,,
|
||||
132,Cloyster,,
|
||||
133,Sandygast,,
|
||||
134,Palossand,,
|
||||
135,Drifloon,,
|
||||
136,Drifblim,,
|
||||
137,Barboach,,
|
||||
138,Whiscash,,
|
||||
139,Azurill,,
|
||||
140,Marill,,
|
||||
141,Azumarill,,
|
||||
142,Poliwag,,
|
||||
143,Poliwhirl,,
|
||||
144,Poliwrath,,
|
||||
145,Politoed,,
|
||||
146,Psyduck,,
|
||||
147,Golduck,,
|
||||
148,Whismur,,
|
||||
149,Loudred,,
|
||||
150,Exploud,,
|
||||
151,Woobat,,
|
||||
152,Swoobat,,
|
||||
153,Skarmory,,
|
||||
154,Roggenrola,,
|
||||
155,Boldore,,
|
||||
156,Gigalith,,
|
||||
157,Rockruff,,
|
||||
158,Lycanroc,,
|
||||
159,Salandit,,
|
||||
160,Salazzle,,
|
||||
161,Scraggy,,
|
||||
162,Scrafty,,
|
||||
163,Mienfoo,,
|
||||
164,Mienshao,,
|
||||
165,Jangmo-o,,
|
||||
166,Hakamo-o,,
|
||||
167,Kommo-o,,
|
||||
168,Sandshrew,,
|
||||
169,Sandslash,,
|
||||
170,Cubone,,
|
||||
171,Marowak,,
|
||||
172,Kangaskhan,,
|
||||
173,Torkoal,,
|
||||
174,Silicobra,,
|
||||
175,Sandaconda,,
|
||||
176,Sandile,,
|
||||
177,Krokorok,,
|
||||
178,Krookodile,,
|
||||
179,Rufflet,,
|
||||
180,Braviary,,
|
||||
181,Vullaby,,
|
||||
182,Mandibuzz,,
|
||||
183,Rhyhorn,,
|
||||
184,Rhydon,,
|
||||
185,Rhyperior,,
|
||||
186,Larvesta,,
|
||||
187,Volcarona,,
|
||||
188,Chinchou,,
|
||||
189,Lanturn,,
|
||||
190,Wailmer,,
|
||||
191,Wailord,,
|
||||
192,Frillish,,
|
||||
193,Jellicent,,
|
||||
194,Skrelp,,
|
||||
195,Dragalge,,
|
||||
196,Clauncher,,
|
||||
197,Clawitzer,,
|
||||
198,Horsea,,
|
||||
199,Seadra,,
|
||||
200,Kingdra,,
|
||||
201,Petilil,,
|
||||
202,Lilligant,,
|
||||
203,Combee,,
|
||||
204,Vespiquen,,
|
||||
205,Exeggcute,,
|
||||
206,Exeggutor,,
|
||||
207,Ditto,,
|
||||
208,Porygon,,
|
||||
209,Porygon2,,
|
||||
210,Porygon-Z,,
|
||||
211,Zarude,,
|
||||
|
@@ -0,0 +1,401 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Grookey,,
|
||||
2,Thwackey,,
|
||||
3,Rillaboom,,
|
||||
4,Scorbunny,,
|
||||
5,Raboot,,
|
||||
6,Cinderace,,
|
||||
7,Sobble,,
|
||||
8,Drizzile,,
|
||||
9,Inteleon,,
|
||||
10,Blipbug,,
|
||||
11,Dottler,,
|
||||
12,Orbeetle,,
|
||||
13,Caterpie,,
|
||||
14,Metapod,,
|
||||
15,Butterfree,,
|
||||
16,Grubbin,,
|
||||
17,Charjabug,,
|
||||
18,Vikavolt,,
|
||||
19,Hoothoot,,
|
||||
20,Noctowl,,
|
||||
21,Rookidee,,
|
||||
22,Corvisquire,,
|
||||
23,Corviknight,,
|
||||
24,Skwovet,,
|
||||
25,Greedent,,
|
||||
26,Pidove,,
|
||||
27,Tranquill,,
|
||||
28,Unfezant,,
|
||||
29,Nickit,,
|
||||
30,Thievul,,
|
||||
31,Zigzagoon,,
|
||||
32,Linoone,,
|
||||
33,Obstagoon,,
|
||||
34,Wooloo,,
|
||||
35,Dubwool,,
|
||||
36,Lotad,,
|
||||
37,Lombre,,
|
||||
38,Ludicolo,,
|
||||
39,Seedot,,
|
||||
40,Nuzleaf,,
|
||||
41,Shiftry,,
|
||||
42,Chewtle,,
|
||||
43,Drednaw,,
|
||||
44,Purrloin,,
|
||||
45,Liepard,,
|
||||
46,Yamper,,
|
||||
47,Boltund,,
|
||||
48,Bunnelby,,
|
||||
49,Diggersby,,
|
||||
50,Minccino,,
|
||||
51,Cinccino,,
|
||||
52,Bounsweet,,
|
||||
53,Steenee,,
|
||||
54,Tsareena,,
|
||||
55,Oddish,,
|
||||
56,Gloom,,
|
||||
57,Vileplume,,
|
||||
58,Bellossom,,
|
||||
59,Budew,,
|
||||
60,Roselia,,
|
||||
61,Roserade,,
|
||||
62,Wingull,,
|
||||
63,Pelipper,,
|
||||
64,Joltik,,
|
||||
65,Galvantula,,
|
||||
66,Electrike,,
|
||||
67,Manectric,,
|
||||
68,Vulpix,,
|
||||
69,Ninetales,,
|
||||
70,Growlithe,,
|
||||
71,Arcanine,,
|
||||
72,Vanillite,,
|
||||
73,Vanillish,,
|
||||
74,Vanilluxe,,
|
||||
75,Swinub,,
|
||||
76,Piloswine,,
|
||||
77,Mamoswine,,
|
||||
78,Delibird,,
|
||||
79,Snorunt,,
|
||||
80,Glalie,,
|
||||
81,Froslass,,
|
||||
82,Baltoy,,
|
||||
83,Claydol,,
|
||||
84,Mudbray,,
|
||||
85,Mudsdale,,
|
||||
86,Dwebble,,
|
||||
87,Crustle,,
|
||||
88,Golett,,
|
||||
89,Golurk,,
|
||||
90,Munna,,
|
||||
91,Musharna,,
|
||||
92,Natu,,
|
||||
93,Xatu,,
|
||||
94,Stufful,,
|
||||
95,Bewear,,
|
||||
96,Snover,,
|
||||
97,Abomasnow,,
|
||||
98,Krabby,,
|
||||
99,Kingler,,
|
||||
100,Wooper,,
|
||||
101,Quagsire,,
|
||||
102,Corphish,,
|
||||
103,Crawdaunt,,
|
||||
104,Nincada,,
|
||||
105,Ninjask,,
|
||||
106,Shedinja,,
|
||||
107,Tyrogue,,
|
||||
108,Hitmonlee,,
|
||||
109,Hitmonchan,,
|
||||
110,Hitmontop,,
|
||||
111,Pancham,,
|
||||
112,Pangoro,,
|
||||
113,Klink,,
|
||||
114,Klang,,
|
||||
115,Klinklang,,
|
||||
116,Combee,,
|
||||
117,Vespiquen,,
|
||||
118,Bronzor,,
|
||||
119,Bronzong,,
|
||||
120,Ralts,,
|
||||
121,Kirlia,,
|
||||
122,Gardevoir,,
|
||||
123,Gallade,,
|
||||
124,Drifloon,,
|
||||
125,Drifblim,,
|
||||
126,Gossifleur,,
|
||||
127,Eldegoss,,
|
||||
128,Cherubi,,
|
||||
129,Cherrim,,
|
||||
130,Stunky,,
|
||||
131,Skuntank,,
|
||||
132,Tympole,,
|
||||
133,Palpitoad,,
|
||||
134,Seismitoad,,
|
||||
135,Duskull,,
|
||||
136,Dusclops,,
|
||||
137,Dusknoir,,
|
||||
138,Machop,,
|
||||
139,Machoke,,
|
||||
140,Machamp,,
|
||||
141,Gastly,,
|
||||
142,Haunter,,
|
||||
143,Gengar,,
|
||||
144,Magikarp,,
|
||||
145,Gyarados,,
|
||||
146,Goldeen,,
|
||||
147,Seaking,,
|
||||
148,Remoraid,,
|
||||
149,Octillery,,
|
||||
150,Shellder,,
|
||||
151,Cloyster,,
|
||||
152,Feebas,,
|
||||
153,Milotic,,
|
||||
154,Basculin,,
|
||||
155,Wishiwashi,,
|
||||
156,Pyukumuku,,
|
||||
157,Trubbish,,
|
||||
158,Garbodor,,
|
||||
159,Sizzlipede,,
|
||||
160,Centiskorch,,
|
||||
161,Rolycoly,,
|
||||
162,Carkol,,
|
||||
163,Coalossal,,
|
||||
164,Diglett,,
|
||||
165,Dugtrio,,
|
||||
166,Drilbur,,
|
||||
167,Excadrill,,
|
||||
168,Roggenrola,,
|
||||
169,Boldore,,
|
||||
170,Gigalith,,
|
||||
171,Timburr,,
|
||||
172,Gurdurr,,
|
||||
173,Conkeldurr,,
|
||||
174,Woobat,,
|
||||
175,Swoobat,,
|
||||
176,Noibat,,
|
||||
177,Noivern,,
|
||||
178,Onix,,
|
||||
179,Steelix,,
|
||||
180,Arrokuda,,
|
||||
181,Barraskewda,,
|
||||
182,Meowth,,
|
||||
183,Perrserker,,
|
||||
184,Persian,,
|
||||
185,Milcery,,
|
||||
186,Alcremie,,
|
||||
187,Cutiefly,,
|
||||
188,Ribombee,,
|
||||
189,Ferroseed,,
|
||||
190,Ferrothorn,,
|
||||
191,Pumpkaboo,,
|
||||
192,Gourgeist,,
|
||||
193,Pichu,,
|
||||
194,Pikachu,,
|
||||
195,Raichu,,
|
||||
196,Eevee,,
|
||||
197,Vaporeon,,
|
||||
198,Jolteon,,
|
||||
199,Flareon,,
|
||||
200,Espeon,,
|
||||
201,Umbreon,,
|
||||
202,Leafeon,,
|
||||
203,Glaceon,,
|
||||
204,Sylveon,,
|
||||
205,Applin,,
|
||||
206,Flapple,,
|
||||
207,Appletun,,
|
||||
208,Espurr,,
|
||||
209,Meowstic,,
|
||||
210,Swirlix,,
|
||||
211,Slurpuff,,
|
||||
212,Spritzee,,
|
||||
213,Aromatisse,,
|
||||
214,Dewpider,,
|
||||
215,Araquanid,,
|
||||
216,Wynaut,,
|
||||
217,Wobbuffet,,
|
||||
218,Farfetch’d,,
|
||||
219,Sirfetch’d,,
|
||||
220,Chinchou,,
|
||||
221,Lanturn,,
|
||||
222,Croagunk,,
|
||||
223,Toxicroak,,
|
||||
224,Scraggy,,
|
||||
225,Scrafty,,
|
||||
226,Stunfisk,,
|
||||
227,Shuckle,,
|
||||
228,Barboach,,
|
||||
229,Whiscash,,
|
||||
230,Shellos,,
|
||||
231,Gastrodon,,
|
||||
232,Wimpod,,
|
||||
233,Golisopod,,
|
||||
234,Binacle,,
|
||||
235,Barbaracle,,
|
||||
236,Corsola,,
|
||||
237,Cursola,,
|
||||
238,Impidimp,,
|
||||
239,Morgrem,,
|
||||
240,Grimmsnarl,,
|
||||
241,Hatenna,,
|
||||
242,Hattrem,,
|
||||
243,Hatterene,,
|
||||
244,Salandit,,
|
||||
245,Salazzle,,
|
||||
246,Pawniard,,
|
||||
247,Bisharp,,
|
||||
248,Throh,,
|
||||
249,Sawk,,
|
||||
250,Koffing,,
|
||||
251,Weezing,,
|
||||
252,Bonsly,,
|
||||
253,Sudowoodo,,
|
||||
254,Cleffa,,
|
||||
255,Clefairy,,
|
||||
256,Clefable,,
|
||||
257,Togepi,,
|
||||
258,Togetic,,
|
||||
259,Togekiss,,
|
||||
260,Munchlax,,
|
||||
261,Snorlax,,
|
||||
262,Cottonee,,
|
||||
263,Whimsicott,,
|
||||
264,Rhyhorn,,
|
||||
265,Rhydon,,
|
||||
266,Rhyperior,,
|
||||
267,Gothita,,
|
||||
268,Gothorita,,
|
||||
269,Gothitelle,,
|
||||
270,Solosis,,
|
||||
271,Duosion,,
|
||||
272,Reuniclus,,
|
||||
273,Karrablast,,
|
||||
274,Escavalier,,
|
||||
275,Shelmet,,
|
||||
276,Accelgor,,
|
||||
277,Elgyem,,
|
||||
278,Beheeyem,,
|
||||
279,Cubchoo,,
|
||||
280,Beartic,,
|
||||
281,Rufflet,,
|
||||
282,Braviary,,
|
||||
283,Vullaby,,
|
||||
284,Mandibuzz,,
|
||||
285,Skorupi,,
|
||||
286,Drapion,,
|
||||
287,Litwick,,
|
||||
288,Lampent,,
|
||||
289,Chandelure,,
|
||||
290,Inkay,,
|
||||
291,Malamar,,
|
||||
292,Sneasel,,
|
||||
293,Weavile,,
|
||||
294,Sableye,,
|
||||
295,Mawile,,
|
||||
296,Maractus,,
|
||||
297,Sigilyph,,
|
||||
298,Riolu,,
|
||||
299,Lucario,,
|
||||
300,Torkoal,,
|
||||
301,Mimikyu,,
|
||||
302,Cufant,,
|
||||
303,Copperajah,,
|
||||
304,Qwilfish,,
|
||||
305,Frillish,,
|
||||
306,Jellicent,,
|
||||
307,Mareanie,,
|
||||
308,Toxapex,,
|
||||
309,Cramorant,,
|
||||
310,Toxel,,
|
||||
311,Toxtricity,,
|
||||
312,Silicobra,,
|
||||
313,Sandaconda,,
|
||||
314,Hippopotas,,
|
||||
315,Hippowdon,,
|
||||
316,Durant,,
|
||||
317,Heatmor,,
|
||||
318,Helioptile,,
|
||||
319,Heliolisk,,
|
||||
320,Hawlucha,,
|
||||
321,Trapinch,,
|
||||
322,Vibrava,,
|
||||
323,Flygon,,
|
||||
324,Axew,,
|
||||
325,Fraxure,,
|
||||
326,Haxorus,,
|
||||
327,Yamask,,
|
||||
328,Runerigus,,
|
||||
329,Cofagrigus,,
|
||||
330,Honedge,,
|
||||
331,Doublade,,
|
||||
332,Aegislash,,
|
||||
333,Ponyta,,
|
||||
334,Rapidash,,
|
||||
335,Sinistea,,
|
||||
336,Polteageist,,
|
||||
337,Indeedee,,
|
||||
338,Phantump,,
|
||||
339,Trevenant,,
|
||||
340,Morelull,,
|
||||
341,Shiinotic,,
|
||||
342,Oranguru,,
|
||||
343,Passimian,,
|
||||
344,Morpeko,,
|
||||
345,Falinks,,
|
||||
346,Drampa,,
|
||||
347,Turtonator,,
|
||||
348,Togedemaru,,
|
||||
349,Snom,,
|
||||
350,Frosmoth,,
|
||||
351,Clobbopus,,
|
||||
352,Grapploct,,
|
||||
353,Pincurchin,,
|
||||
354,Mantyke,,
|
||||
355,Mantine,,
|
||||
356,Wailmer,,
|
||||
357,Wailord,,
|
||||
358,Bergmite,,
|
||||
359,Avalugg,,
|
||||
360,Dhelmise,,
|
||||
361,Lapras,,
|
||||
362,Lunatone,,
|
||||
363,Solrock,,
|
||||
364,Mime Jr.,,
|
||||
365,Mr. Mime,,
|
||||
366,Mr. Rime,,
|
||||
367,Darumaka,,
|
||||
368,Darmanitan,,
|
||||
369,Stonjourner,,
|
||||
370,Eiscue,,
|
||||
371,Duraludon,,
|
||||
372,Rotom,,
|
||||
373,Ditto,,
|
||||
374,Dracozolt,,
|
||||
375,Arctozolt,,
|
||||
376,Dracovish,,
|
||||
377,Arctovish,,
|
||||
378,Charmander,,
|
||||
379,Charmeleon,,
|
||||
380,Charizard,,
|
||||
381,Type: Null,,
|
||||
382,Silvally,,
|
||||
383,Larvitar,,
|
||||
384,Pupitar,,
|
||||
385,Tyranitar,,
|
||||
386,Deino,,
|
||||
387,Zweilous,,
|
||||
388,Hydreigon,,
|
||||
389,Goomy,,
|
||||
390,Sliggoo,,
|
||||
391,Goodra,,
|
||||
392,Jangmo-o,,
|
||||
393,Hakamo-o,,
|
||||
394,Kommo-o,,
|
||||
395,Dreepy,,
|
||||
396,Drakloak,,
|
||||
397,Dragapult,,
|
||||
398,Zacian,,
|
||||
399,Zamazenta,,
|
||||
400,Eternatus,,
|
||||
|
@@ -0,0 +1,161 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Pikipek,,
|
||||
2,Trumbeak,,
|
||||
3,Toucannon,,
|
||||
4,Yungoos,,
|
||||
5,Gumshoos,,
|
||||
6,Rattata,,
|
||||
7,Raticate,,
|
||||
8,Caterpie,,
|
||||
9,Metapod,,
|
||||
10,Butterfree,,
|
||||
11,Grubbin,,
|
||||
12,Charjabug,,
|
||||
13,Vikavolt,,
|
||||
14,Bonsly,,
|
||||
15,Sudowoodo,,
|
||||
16,Happiny,,
|
||||
17,Chansey,,
|
||||
18,Blissey,,
|
||||
19,Wingull,,
|
||||
20,Pelipper,,
|
||||
21,Crabrawler,,
|
||||
22,Crabominable,,
|
||||
23,Gastly,,
|
||||
24,Haunter,,
|
||||
25,Gengar,,
|
||||
26,Zubat,,
|
||||
27,Golbat,,
|
||||
28,Crobat,,
|
||||
29,Diglett,,
|
||||
30,Dugtrio,,
|
||||
31,Oricorio,,
|
||||
32,Psyduck,,
|
||||
33,Golduck,,
|
||||
34,Magikarp,,
|
||||
35,Gyarados,,
|
||||
36,Barboach,,
|
||||
37,Whiscash,,
|
||||
38,Tentacool,,
|
||||
39,Tentacruel,,
|
||||
40,Finneon,,
|
||||
41,Lumineon,,
|
||||
42,Wishiwashi,,
|
||||
43,Luvdisc,,
|
||||
44,Corsola,,
|
||||
45,Mareanie,,
|
||||
46,Toxapex,,
|
||||
47,Remoraid,,
|
||||
48,Octillery,,
|
||||
49,Mantyke,,
|
||||
50,Mantine,,
|
||||
51,Lillipup,,
|
||||
52,Herdier,,
|
||||
53,Stoutland,,
|
||||
54,Eevee,,
|
||||
55,Vaporeon,,
|
||||
56,Jolteon,,
|
||||
57,Flareon,,
|
||||
58,Espeon,,
|
||||
59,Umbreon,,
|
||||
60,Leafeon,,
|
||||
61,Glaceon,,
|
||||
62,Sylveon,,
|
||||
63,Mareep,,
|
||||
64,Flaaffy,,
|
||||
65,Ampharos,,
|
||||
66,Mudbray,,
|
||||
67,Mudsdale,,
|
||||
68,Igglybuff,,
|
||||
69,Jigglypuff,,
|
||||
70,Wigglytuff,,
|
||||
71,Tauros,,
|
||||
72,Miltank,,
|
||||
73,Surskit,,
|
||||
74,Masquerain,,
|
||||
75,Dewpider,,
|
||||
76,Araquanid,,
|
||||
77,Fomantis,,
|
||||
78,Lurantis,,
|
||||
79,Morelull,,
|
||||
80,Shiinotic,,
|
||||
81,Paras,,
|
||||
82,Parasect,,
|
||||
83,Poliwag,,
|
||||
84,Poliwhirl,,
|
||||
85,Poliwrath,,
|
||||
86,Politoed,,
|
||||
87,Goldeen,,
|
||||
88,Seaking,,
|
||||
89,Basculin,,
|
||||
90,Feebas,,
|
||||
91,Milotic,,
|
||||
92,Alomomola,,
|
||||
93,Fletchling,,
|
||||
94,Fletchinder,,
|
||||
95,Talonflame,,
|
||||
96,Salandit,,
|
||||
97,Salazzle,,
|
||||
98,Cubone,,
|
||||
99,Marowak,,
|
||||
100,Kangaskhan,,
|
||||
101,Magby,,
|
||||
102,Magmar,,
|
||||
103,Magmortar,,
|
||||
104,Larvesta,,
|
||||
105,Volcarona,,
|
||||
106,Stufful,,
|
||||
107,Bewear,,
|
||||
108,Bounsweet,,
|
||||
109,Steenee,,
|
||||
110,Tsareena,,
|
||||
111,Comfey,,
|
||||
112,Pinsir,,
|
||||
113,Hoothoot,,
|
||||
114,Noctowl,,
|
||||
115,Kecleon,,
|
||||
116,Oranguru,,
|
||||
117,Passimian,,
|
||||
118,Goomy,,
|
||||
119,Sliggoo,,
|
||||
120,Goodra,,
|
||||
121,Castform,,
|
||||
122,Wimpod,,
|
||||
123,Golisopod,,
|
||||
124,Staryu,,
|
||||
125,Starmie,,
|
||||
126,Sandygast,,
|
||||
127,Palossand,,
|
||||
128,Omanyte,,
|
||||
129,Omastar,,
|
||||
130,Kabuto,,
|
||||
131,Kabutops,,
|
||||
132,Lileep,,
|
||||
133,Cradily,,
|
||||
134,Anorith,,
|
||||
135,Armaldo,,
|
||||
136,Cranidos,,
|
||||
137,Rampardos,,
|
||||
138,Shieldon,,
|
||||
139,Bastiodon,,
|
||||
140,Archen,,
|
||||
141,Archeops,,
|
||||
142,Tirtouga,,
|
||||
143,Carracosta,,
|
||||
144,Tyrunt,,
|
||||
145,Tyrantrum,,
|
||||
146,Amaura,,
|
||||
147,Aurorus,,
|
||||
148,Larvitar,,
|
||||
149,Pupitar,,
|
||||
150,Tyranitar,,
|
||||
151,Phantump,,
|
||||
152,Trevenant,,
|
||||
153,Natu,,
|
||||
154,Xatu,,
|
||||
155,Nosepass,,
|
||||
156,Probopass,,
|
||||
157,Pyukumuku,,
|
||||
158,Chinchou,,
|
||||
159,Lanturn,,
|
||||
160,Tapu Lele,,
|
||||
|
@@ -0,0 +1,404 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Rowlet,,
|
||||
2,Dartrix,,
|
||||
3,Decidueye,,
|
||||
4,Litten,,
|
||||
5,Torracat,,
|
||||
6,Incineroar,,
|
||||
7,Popplio,,
|
||||
8,Brionne,,
|
||||
9,Primarina,,
|
||||
10,Pikipek,,
|
||||
11,Trumbeak,,
|
||||
12,Toucannon,,
|
||||
13,Yungoos,,
|
||||
14,Gumshoos,,
|
||||
15,Rattata,,
|
||||
16,Raticate,,
|
||||
17,Caterpie,,
|
||||
18,Metapod,,
|
||||
19,Butterfree,,
|
||||
20,Ledyba,,
|
||||
21,Ledian,,
|
||||
22,Spinarak,,
|
||||
23,Ariados,,
|
||||
24,Buneary,,
|
||||
25,Lopunny,,
|
||||
26,Inkay,,
|
||||
27,Malamar,,
|
||||
28,Zorua,,
|
||||
29,Zoroark,,
|
||||
30,Furfrou,,
|
||||
31,Pichu,,
|
||||
32,Pikachu,,
|
||||
33,Raichu,,
|
||||
34,Grubbin,,
|
||||
35,Charjabug,,
|
||||
36,Vikavolt,,
|
||||
37,Bonsly,,
|
||||
38,Sudowoodo,,
|
||||
39,Happiny,,
|
||||
40,Chansey,,
|
||||
41,Blissey,,
|
||||
42,Munchlax,,
|
||||
43,Snorlax,,
|
||||
44,Slowpoke,,
|
||||
45,Slowbro,,
|
||||
46,Slowking,,
|
||||
47,Wingull,,
|
||||
48,Pelipper,,
|
||||
49,Abra,,
|
||||
50,Kadabra,,
|
||||
51,Alakazam,,
|
||||
52,Meowth,,
|
||||
53,Persian,,
|
||||
54,Magnemite,,
|
||||
55,Magneton,,
|
||||
56,Magnezone,,
|
||||
57,Grimer,,
|
||||
58,Muk,,
|
||||
59,Mime Jr.,,
|
||||
60,Mr. Mime,,
|
||||
61,Ekans,,
|
||||
62,Arbok,,
|
||||
63,Dunsparce,,
|
||||
64,Growlithe,,
|
||||
65,Arcanine,,
|
||||
66,Drowzee,,
|
||||
67,Hypno,,
|
||||
68,Makuhita,,
|
||||
69,Hariyama,,
|
||||
70,Smeargle,,
|
||||
71,Crabrawler,,
|
||||
72,Crabominable,,
|
||||
73,Gastly,,
|
||||
74,Haunter,,
|
||||
75,Gengar,,
|
||||
76,Drifloon,,
|
||||
77,Drifblim,,
|
||||
78,Murkrow,,
|
||||
79,Honchkrow,,
|
||||
80,Zubat,,
|
||||
81,Golbat,,
|
||||
82,Crobat,,
|
||||
83,Noibat,,
|
||||
84,Noivern,,
|
||||
85,Diglett,,
|
||||
86,Dugtrio,,
|
||||
87,Spearow,,
|
||||
88,Fearow,,
|
||||
89,Rufflet,,
|
||||
90,Braviary,,
|
||||
91,Vullaby,,
|
||||
92,Mandibuzz,,
|
||||
93,Mankey,,
|
||||
94,Primeape,,
|
||||
95,Delibird,,
|
||||
96,Hawlucha,,
|
||||
97,Oricorio,,
|
||||
98,Cutiefly,,
|
||||
99,Ribombee,,
|
||||
100,Flabébé,,
|
||||
101,Floette,,
|
||||
102,Florges,,
|
||||
103,Petilil,,
|
||||
104,Lilligant,,
|
||||
105,Cottonee,,
|
||||
106,Whimsicott,,
|
||||
107,Psyduck,,
|
||||
108,Golduck,,
|
||||
109,Smoochum,,
|
||||
110,Jynx,,
|
||||
111,Magikarp,,
|
||||
112,Gyarados,,
|
||||
113,Barboach,,
|
||||
114,Whiscash,,
|
||||
115,Seel,,
|
||||
116,Dewgong,,
|
||||
117,Machop,,
|
||||
118,Machoke,,
|
||||
119,Machamp,,
|
||||
120,Roggenrola,,
|
||||
121,Boldore,,
|
||||
122,Gigalith,,
|
||||
123,Carbink,,
|
||||
124,Sableye,,
|
||||
125,Mawile,,
|
||||
126,Rockruff,,
|
||||
127,Lycanroc,,
|
||||
128,Spinda,,
|
||||
129,Tentacool,,
|
||||
130,Tentacruel,,
|
||||
131,Finneon,,
|
||||
132,Lumineon,,
|
||||
133,Wishiwashi,,
|
||||
134,Luvdisc,,
|
||||
135,Corsola,,
|
||||
136,Mareanie,,
|
||||
137,Toxapex,,
|
||||
138,Shellder,,
|
||||
139,Cloyster,,
|
||||
140,Clamperl,,
|
||||
141,Huntail,,
|
||||
142,Gorebyss,,
|
||||
143,Remoraid,,
|
||||
144,Octillery,,
|
||||
145,Mantyke,,
|
||||
146,Mantine,,
|
||||
147,Bagon,,
|
||||
148,Shelgon,,
|
||||
149,Salamence,,
|
||||
150,Lillipup,,
|
||||
151,Herdier,,
|
||||
152,Stoutland,,
|
||||
153,Eevee,,
|
||||
154,Vaporeon,,
|
||||
155,Jolteon,,
|
||||
156,Flareon,,
|
||||
157,Espeon,,
|
||||
158,Umbreon,,
|
||||
159,Leafeon,,
|
||||
160,Glaceon,,
|
||||
161,Sylveon,,
|
||||
162,Mareep,,
|
||||
163,Flaaffy,,
|
||||
164,Ampharos,,
|
||||
165,Mudbray,,
|
||||
166,Mudsdale,,
|
||||
167,Igglybuff,,
|
||||
168,Jigglypuff,,
|
||||
169,Wigglytuff,,
|
||||
170,Tauros,,
|
||||
171,Miltank,,
|
||||
172,Surskit,,
|
||||
173,Masquerain,,
|
||||
174,Dewpider,,
|
||||
175,Araquanid,,
|
||||
176,Fomantis,,
|
||||
177,Lurantis,,
|
||||
178,Morelull,,
|
||||
179,Shiinotic,,
|
||||
180,Paras,,
|
||||
181,Parasect,,
|
||||
182,Poliwag,,
|
||||
183,Poliwhirl,,
|
||||
184,Poliwrath,,
|
||||
185,Politoed,,
|
||||
186,Goldeen,,
|
||||
187,Seaking,,
|
||||
188,Basculin,,
|
||||
189,Feebas,,
|
||||
190,Milotic,,
|
||||
191,Alomomola,,
|
||||
192,Fletchling,,
|
||||
193,Fletchinder,,
|
||||
194,Talonflame,,
|
||||
195,Salandit,,
|
||||
196,Salazzle,,
|
||||
197,Cubone,,
|
||||
198,Marowak,,
|
||||
199,Kangaskhan,,
|
||||
200,Magby,,
|
||||
201,Magmar,,
|
||||
202,Magmortar,,
|
||||
203,Larvesta,,
|
||||
204,Volcarona,,
|
||||
205,Stufful,,
|
||||
206,Bewear,,
|
||||
207,Bounsweet,,
|
||||
208,Steenee,,
|
||||
209,Tsareena,,
|
||||
210,Comfey,,
|
||||
211,Pinsir,,
|
||||
212,Hoothoot,,
|
||||
213,Noctowl,,
|
||||
214,Kecleon,,
|
||||
215,Oranguru,,
|
||||
216,Passimian,,
|
||||
217,Goomy,,
|
||||
218,Sliggoo,,
|
||||
219,Goodra,,
|
||||
220,Castform,,
|
||||
221,Wimpod,,
|
||||
222,Golisopod,,
|
||||
223,Staryu,,
|
||||
224,Starmie,,
|
||||
225,Sandygast,,
|
||||
226,Palossand,,
|
||||
227,Omanyte,,
|
||||
228,Omastar,,
|
||||
229,Kabuto,,
|
||||
230,Kabutops,,
|
||||
231,Lileep,,
|
||||
232,Cradily,,
|
||||
233,Anorith,,
|
||||
234,Armaldo,,
|
||||
235,Cranidos,,
|
||||
236,Rampardos,,
|
||||
237,Shieldon,,
|
||||
238,Bastiodon,,
|
||||
239,Archen,,
|
||||
240,Archeops,,
|
||||
241,Tirtouga,,
|
||||
242,Carracosta,,
|
||||
243,Tyrunt,,
|
||||
244,Tyrantrum,,
|
||||
245,Amaura,,
|
||||
246,Aurorus,,
|
||||
247,Larvitar,,
|
||||
248,Pupitar,,
|
||||
249,Tyranitar,,
|
||||
250,Phantump,,
|
||||
251,Trevenant,,
|
||||
252,Natu,,
|
||||
253,Xatu,,
|
||||
254,Nosepass,,
|
||||
255,Probopass,,
|
||||
256,Pyukumuku,,
|
||||
257,Chinchou,,
|
||||
258,Lanturn,,
|
||||
259,Type: Null,,
|
||||
260,Silvally,,
|
||||
261,Poipole,,
|
||||
262,Naganadel,,
|
||||
263,Zygarde,,
|
||||
264,Trubbish,,
|
||||
265,Garbodor,,
|
||||
266,Minccino,,
|
||||
267,Cinccino,,
|
||||
268,Pineco,,
|
||||
269,Forretress,,
|
||||
270,Skarmory,,
|
||||
271,Ditto,,
|
||||
272,Cleffa,,
|
||||
273,Clefairy,,
|
||||
274,Clefable,,
|
||||
275,Elgyem,,
|
||||
276,Beheeyem,,
|
||||
277,Minior,,
|
||||
278,Beldum,,
|
||||
279,Metang,,
|
||||
280,Metagross,,
|
||||
281,Porygon,,
|
||||
282,Porygon2,,
|
||||
283,Porygon-Z,,
|
||||
284,Pancham,,
|
||||
285,Pangoro,,
|
||||
286,Komala,,
|
||||
287,Torkoal,,
|
||||
288,Turtonator,,
|
||||
289,Houndour,,
|
||||
290,Houndoom,,
|
||||
291,Dedenne,,
|
||||
292,Togedemaru,,
|
||||
293,Electrike,,
|
||||
294,Manectric,,
|
||||
295,Elekid,,
|
||||
296,Electabuzz,,
|
||||
297,Electivire,,
|
||||
298,Geodude,,
|
||||
299,Graveler,,
|
||||
300,Golem,,
|
||||
301,Sandile,,
|
||||
302,Krokorok,,
|
||||
303,Krookodile,,
|
||||
304,Trapinch,,
|
||||
305,Vibrava,,
|
||||
306,Flygon,,
|
||||
307,Gible,,
|
||||
308,Gabite,,
|
||||
309,Garchomp,,
|
||||
310,Baltoy,,
|
||||
311,Claydol,,
|
||||
312,Golett,,
|
||||
313,Golurk,,
|
||||
314,Klefki,,
|
||||
315,Mimikyu,,
|
||||
316,Shuppet,,
|
||||
317,Banette,,
|
||||
318,Frillish,,
|
||||
319,Jellicent,,
|
||||
320,Bruxish,,
|
||||
321,Drampa,,
|
||||
322,Absol,,
|
||||
323,Snorunt,,
|
||||
324,Glalie,,
|
||||
325,Froslass,,
|
||||
326,Sneasel,,
|
||||
327,Weavile,,
|
||||
328,Sandshrew,,
|
||||
329,Sandslash,,
|
||||
330,Vulpix,,
|
||||
331,Ninetales,,
|
||||
332,Vanillite,,
|
||||
333,Vanillish,,
|
||||
334,Vanilluxe,,
|
||||
335,Scraggy,,
|
||||
336,Scrafty,,
|
||||
337,Pawniard,,
|
||||
338,Bisharp,,
|
||||
339,Snubbull,,
|
||||
340,Granbull,,
|
||||
341,Shellos,,
|
||||
342,Gastrodon,,
|
||||
343,Relicanth,,
|
||||
344,Dhelmise,,
|
||||
345,Carvanha,,
|
||||
346,Sharpedo,,
|
||||
347,Skrelp,,
|
||||
348,Dragalge,,
|
||||
349,Clauncher,,
|
||||
350,Clawitzer,,
|
||||
351,Wailmer,,
|
||||
352,Wailord,,
|
||||
353,Lapras,,
|
||||
354,Tropius,,
|
||||
355,Exeggcute,,
|
||||
356,Exeggutor,,
|
||||
357,Corphish,,
|
||||
358,Crawdaunt,,
|
||||
359,Mienfoo,,
|
||||
360,Mienshao,,
|
||||
361,Jangmo-o,,
|
||||
362,Hakamo-o,,
|
||||
363,Kommo-o,,
|
||||
364,Emolga,,
|
||||
365,Scyther,,
|
||||
366,Scizor,,
|
||||
367,Heracross,,
|
||||
368,Aipom,,
|
||||
369,Ambipom,,
|
||||
370,Litleo,,
|
||||
371,Pyroar,,
|
||||
372,Misdreavus,,
|
||||
373,Mismagius,,
|
||||
374,Druddigon,,
|
||||
375,Lickitung,,
|
||||
376,Lickilicky,,
|
||||
377,Riolu,,
|
||||
378,Lucario,,
|
||||
379,Dratini,,
|
||||
380,Dragonair,,
|
||||
381,Dragonite,,
|
||||
382,Aerodactyl,,
|
||||
383,Tapu Koko,,
|
||||
384,Tapu Lele,,
|
||||
385,Tapu Bulu,,
|
||||
386,Tapu Fini,,
|
||||
387,Cosmog,,
|
||||
388,Cosmoem,,
|
||||
389,Solgaleo,,
|
||||
390,Lunala,,
|
||||
391,Stakataka,,
|
||||
392,Blacephalon,,
|
||||
393,Nihilego,,
|
||||
394,Buzzwole,,
|
||||
395,Pheromosa,,
|
||||
396,Xurkitree,,
|
||||
397,Celesteela,,
|
||||
398,Kartana,,
|
||||
399,Guzzlord,,
|
||||
400,Necrozma,,
|
||||
401,Magearna,,
|
||||
402,Marshadow,,
|
||||
403,Zeraora,,
|
||||
|
@@ -0,0 +1,151 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Rowlet,,
|
||||
2,Dartrix,,
|
||||
3,Decidueye,,
|
||||
4,Litten,,
|
||||
5,Torracat,,
|
||||
6,Incineroar,,
|
||||
7,Popplio,,
|
||||
8,Brionne,,
|
||||
9,Primarina,,
|
||||
10,Pikipek,,
|
||||
11,Trumbeak,,
|
||||
12,Toucannon,,
|
||||
13,Yungoos,,
|
||||
14,Gumshoos,,
|
||||
15,Rattata,,
|
||||
16,Raticate,,
|
||||
17,Caterpie,,
|
||||
18,Metapod,,
|
||||
19,Butterfree,,
|
||||
20,Ledyba,,
|
||||
21,Ledian,,
|
||||
22,Spinarak,,
|
||||
23,Ariados,,
|
||||
24,Buneary,,
|
||||
25,Lopunny,,
|
||||
26,Inkay,,
|
||||
27,Malamar,,
|
||||
28,Zorua,,
|
||||
29,Zoroark,,
|
||||
30,Furfrou,,
|
||||
31,Pichu,,
|
||||
32,Pikachu,,
|
||||
33,Raichu,,
|
||||
34,Grubbin,,
|
||||
35,Charjabug,,
|
||||
36,Vikavolt,,
|
||||
37,Bonsly,,
|
||||
38,Sudowoodo,,
|
||||
39,Happiny,,
|
||||
40,Chansey,,
|
||||
41,Blissey,,
|
||||
42,Munchlax,,
|
||||
43,Snorlax,,
|
||||
44,Slowpoke,,
|
||||
45,Slowbro,,
|
||||
46,Slowking,,
|
||||
47,Wingull,,
|
||||
48,Pelipper,,
|
||||
49,Abra,,
|
||||
50,Kadabra,,
|
||||
51,Alakazam,,
|
||||
52,Meowth,,
|
||||
53,Persian,,
|
||||
54,Magnemite,,
|
||||
55,Magneton,,
|
||||
56,Magnezone,,
|
||||
57,Grimer,,
|
||||
58,Muk,,
|
||||
59,Mime Jr.,,
|
||||
60,Mr. Mime,,
|
||||
61,Ekans,,
|
||||
62,Arbok,,
|
||||
63,Dunsparce,,
|
||||
64,Growlithe,,
|
||||
65,Arcanine,,
|
||||
66,Drowzee,,
|
||||
67,Hypno,,
|
||||
68,Makuhita,,
|
||||
69,Hariyama,,
|
||||
70,Smeargle,,
|
||||
71,Crabrawler,,
|
||||
72,Crabominable,,
|
||||
73,Gastly,,
|
||||
74,Haunter,,
|
||||
75,Gengar,,
|
||||
76,Drifloon,,
|
||||
77,Drifblim,,
|
||||
78,Murkrow,,
|
||||
79,Honchkrow,,
|
||||
80,Zubat,,
|
||||
81,Golbat,,
|
||||
82,Crobat,,
|
||||
83,Noibat,,
|
||||
84,Noivern,,
|
||||
85,Diglett,,
|
||||
86,Dugtrio,,
|
||||
87,Spearow,,
|
||||
88,Fearow,,
|
||||
89,Rufflet,,
|
||||
90,Braviary,,
|
||||
91,Vullaby,,
|
||||
92,Mandibuzz,,
|
||||
93,Mankey,,
|
||||
94,Primeape,,
|
||||
95,Delibird,,
|
||||
96,Hawlucha,,
|
||||
97,Oricorio,,
|
||||
98,Cutiefly,,
|
||||
99,Ribombee,,
|
||||
100,Flabébé,,
|
||||
101,Floette,,
|
||||
102,Florges,,
|
||||
103,Petilil,,
|
||||
104,Lilligant,,
|
||||
105,Cottonee,,
|
||||
106,Whimsicott,,
|
||||
107,Psyduck,,
|
||||
108,Golduck,,
|
||||
109,Smoochum,,
|
||||
110,Jynx,,
|
||||
111,Magikarp,,
|
||||
112,Gyarados,,
|
||||
113,Barboach,,
|
||||
114,Whiscash,,
|
||||
115,Seel,,
|
||||
116,Dewgong,,
|
||||
117,Machop,,
|
||||
118,Machoke,,
|
||||
119,Machamp,,
|
||||
120,Roggenrola,,
|
||||
121,Boldore,,
|
||||
122,Gigalith,,
|
||||
123,Carbink,,
|
||||
124,Sableye,,
|
||||
125,Mawile,,
|
||||
126,Rockruff,,
|
||||
127,Lycanroc,,
|
||||
128,Spinda,,
|
||||
129,Tentacool,,
|
||||
130,Tentacruel,,
|
||||
131,Finneon,,
|
||||
132,Lumineon,,
|
||||
133,Wishiwashi,,
|
||||
134,Luvdisc,,
|
||||
135,Corsola,,
|
||||
136,Mareanie,,
|
||||
137,Toxapex,,
|
||||
138,Shellder,,
|
||||
139,Cloyster,,
|
||||
140,Clamperl,,
|
||||
141,Huntail,,
|
||||
142,Gorebyss,,
|
||||
143,Remoraid,,
|
||||
144,Octillery,,
|
||||
145,Mantyke,,
|
||||
146,Mantine,,
|
||||
147,Bagon,,
|
||||
148,Shelgon,,
|
||||
149,Salamence,,
|
||||
150,Tapu Koko,,
|
||||
|
@@ -0,0 +1,131 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Pikipek,,
|
||||
2,Trumbeak,,
|
||||
3,Toucannon,,
|
||||
4,Yungoos,,
|
||||
5,Gumshoos,,
|
||||
6,Rattata,,
|
||||
7,Raticate,,
|
||||
8,Buneary,,
|
||||
9,Lopunny,,
|
||||
10,Inkay,,
|
||||
11,Malamar,,
|
||||
12,Zorua,,
|
||||
13,Zoroark,,
|
||||
14,Furfrou,,
|
||||
15,Happiny,,
|
||||
16,Chansey,,
|
||||
17,Blissey,,
|
||||
18,Wingull,,
|
||||
19,Pelipper,,
|
||||
20,Drowzee,,
|
||||
21,Hypno,,
|
||||
22,Makuhita,,
|
||||
23,Hariyama,,
|
||||
24,Crabrawler,,
|
||||
25,Crabominable,,
|
||||
26,Zubat,,
|
||||
27,Golbat,,
|
||||
28,Crobat,,
|
||||
29,Noibat,,
|
||||
30,Noivern,,
|
||||
31,Diglett,,
|
||||
32,Dugtrio,,
|
||||
33,Spearow,,
|
||||
34,Fearow,,
|
||||
35,Rufflet,,
|
||||
36,Braviary,,
|
||||
37,Vullaby,,
|
||||
38,Mandibuzz,,
|
||||
39,Mankey,,
|
||||
40,Primeape,,
|
||||
41,Oricorio,,
|
||||
42,Cutiefly,,
|
||||
43,Ribombee,,
|
||||
44,Flabébé,,
|
||||
45,Floette,,
|
||||
46,Florges,,
|
||||
47,Petilil,,
|
||||
48,Lilligant,,
|
||||
49,Cottonee,,
|
||||
50,Whimsicott,,
|
||||
51,Psyduck,,
|
||||
52,Golduck,,
|
||||
53,Magikarp,,
|
||||
54,Gyarados,,
|
||||
55,Barboach,,
|
||||
56,Whiscash,,
|
||||
57,Machop,,
|
||||
58,Machoke,,
|
||||
59,Machamp,,
|
||||
60,Roggenrola,,
|
||||
61,Boldore,,
|
||||
62,Gigalith,,
|
||||
63,Carbink,,
|
||||
64,Sableye,,
|
||||
65,Rockruff,,
|
||||
66,Lycanroc,,
|
||||
67,Tentacool,,
|
||||
68,Tentacruel,,
|
||||
69,Finneon,,
|
||||
70,Lumineon,,
|
||||
71,Mudbray,,
|
||||
72,Mudsdale,,
|
||||
73,Tauros,,
|
||||
74,Miltank,,
|
||||
75,Basculin,,
|
||||
76,Stufful,,
|
||||
77,Bewear,,
|
||||
78,Pinsir,,
|
||||
79,Goomy,,
|
||||
80,Sliggoo,,
|
||||
81,Goodra,,
|
||||
82,Castform,,
|
||||
83,Wimpod,,
|
||||
84,Golisopod,,
|
||||
85,Skarmory,,
|
||||
86,Snubbull,,
|
||||
87,Granbull,,
|
||||
88,Shellos,,
|
||||
89,Gastrodon,,
|
||||
90,Relicanth,,
|
||||
91,Dhelmise,,
|
||||
92,Carvanha,,
|
||||
93,Sharpedo,,
|
||||
94,Skrelp,,
|
||||
95,Dragalge,,
|
||||
96,Clauncher,,
|
||||
97,Clawitzer,,
|
||||
98,Wailmer,,
|
||||
99,Wailord,,
|
||||
100,Lapras,,
|
||||
101,Tropius,,
|
||||
102,Exeggcute,,
|
||||
103,Exeggutor,,
|
||||
104,Corphish,,
|
||||
105,Crawdaunt,,
|
||||
106,Mienfoo,,
|
||||
107,Mienshao,,
|
||||
108,Jangmo-o,,
|
||||
109,Hakamo-o,,
|
||||
110,Kommo-o,,
|
||||
111,Emolga,,
|
||||
112,Scyther,,
|
||||
113,Scizor,,
|
||||
114,Heracross,,
|
||||
115,Aipom,,
|
||||
116,Ambipom,,
|
||||
117,Litleo,,
|
||||
118,Pyroar,,
|
||||
119,Misdreavus,,
|
||||
120,Mismagius,,
|
||||
121,Druddigon,,
|
||||
122,Lickitung,,
|
||||
123,Lickilicky,,
|
||||
124,Riolu,,
|
||||
125,Lucario,,
|
||||
126,Dratini,,
|
||||
127,Dragonair,,
|
||||
128,Dragonite,,
|
||||
129,Aerodactyl,,
|
||||
130,Tapu Fini,,
|
||||
|
@@ -0,0 +1,161 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Pikipek,,
|
||||
2,Trumbeak,,
|
||||
3,Toucannon,,
|
||||
4,Yungoos,,
|
||||
5,Gumshoos,,
|
||||
6,Rattata,,
|
||||
7,Raticate,,
|
||||
8,Ledyba,,
|
||||
9,Ledian,,
|
||||
10,Spinarak,,
|
||||
11,Ariados,,
|
||||
12,Grubbin,,
|
||||
13,Charjabug,,
|
||||
14,Vikavolt,,
|
||||
15,Happiny,,
|
||||
16,Chansey,,
|
||||
17,Blissey,,
|
||||
18,Slowpoke,,
|
||||
19,Slowbro,,
|
||||
20,Slowking,,
|
||||
21,Wingull,,
|
||||
22,Pelipper,,
|
||||
23,Meowth,,
|
||||
24,Persian,,
|
||||
25,Magnemite,,
|
||||
26,Magneton,,
|
||||
27,Magnezone,,
|
||||
28,Grimer,,
|
||||
29,Muk,,
|
||||
30,Crabrawler,,
|
||||
31,Crabominable,,
|
||||
32,Gastly,,
|
||||
33,Haunter,,
|
||||
34,Gengar,,
|
||||
35,Zubat,,
|
||||
36,Golbat,,
|
||||
37,Crobat,,
|
||||
38,Diglett,,
|
||||
39,Dugtrio,,
|
||||
40,Spearow,,
|
||||
41,Fearow,,
|
||||
42,Oricorio,,
|
||||
43,Cutiefly,,
|
||||
44,Ribombee,,
|
||||
45,Flabébé,,
|
||||
46,Floette,,
|
||||
47,Florges,,
|
||||
48,Petilil,,
|
||||
49,Lilligant,,
|
||||
50,Cottonee,,
|
||||
51,Whimsicott,,
|
||||
52,Psyduck,,
|
||||
53,Golduck,,
|
||||
54,Magikarp,,
|
||||
55,Gyarados,,
|
||||
56,Tentacool,,
|
||||
57,Tentacruel,,
|
||||
58,Finneon,,
|
||||
59,Lumineon,,
|
||||
60,Wishiwashi,,
|
||||
61,Clamperl,,
|
||||
62,Huntail,,
|
||||
63,Gorebyss,,
|
||||
64,Mudbray,,
|
||||
65,Mudsdale,,
|
||||
66,Surskit,,
|
||||
67,Masquerain,,
|
||||
68,Dewpider,,
|
||||
69,Araquanid,,
|
||||
70,Morelull,,
|
||||
71,Shiinotic,,
|
||||
72,Paras,,
|
||||
73,Parasect,,
|
||||
74,Poliwag,,
|
||||
75,Poliwhirl,,
|
||||
76,Poliwrath,,
|
||||
77,Politoed,,
|
||||
78,Goldeen,,
|
||||
79,Seaking,,
|
||||
80,Basculin,,
|
||||
81,Goomy,,
|
||||
82,Sliggoo,,
|
||||
83,Goodra,,
|
||||
84,Castform,,
|
||||
85,Trubbish,,
|
||||
86,Garbodor,,
|
||||
87,Minccino,,
|
||||
88,Cinccino,,
|
||||
89,Pineco,,
|
||||
90,Forretress,,
|
||||
91,Skarmory,,
|
||||
92,Ditto,,
|
||||
93,Cleffa,,
|
||||
94,Clefairy,,
|
||||
95,Clefable,,
|
||||
96,Elgyem,,
|
||||
97,Beheeyem,,
|
||||
98,Minior,,
|
||||
99,Beldum,,
|
||||
100,Metang,,
|
||||
101,Metagross,,
|
||||
102,Porygon,,
|
||||
103,Porygon2,,
|
||||
104,Porygon-Z,,
|
||||
105,Pancham,,
|
||||
106,Pangoro,,
|
||||
107,Komala,,
|
||||
108,Torkoal,,
|
||||
109,Turtonator,,
|
||||
110,Houndour,,
|
||||
111,Houndoom,,
|
||||
112,Dedenne,,
|
||||
113,Togedemaru,,
|
||||
114,Electrike,,
|
||||
115,Manectric,,
|
||||
116,Elekid,,
|
||||
117,Electabuzz,,
|
||||
118,Electivire,,
|
||||
119,Geodude,,
|
||||
120,Graveler,,
|
||||
121,Golem,,
|
||||
122,Sandile,,
|
||||
123,Krokorok,,
|
||||
124,Krookodile,,
|
||||
125,Trapinch,,
|
||||
126,Vibrava,,
|
||||
127,Flygon,,
|
||||
128,Gible,,
|
||||
129,Gabite,,
|
||||
130,Garchomp,,
|
||||
131,Baltoy,,
|
||||
132,Claydol,,
|
||||
133,Golett,,
|
||||
134,Golurk,,
|
||||
135,Klefki,,
|
||||
136,Mimikyu,,
|
||||
137,Shuppet,,
|
||||
138,Banette,,
|
||||
139,Frillish,,
|
||||
140,Jellicent,,
|
||||
141,Bruxish,,
|
||||
142,Drampa,,
|
||||
143,Absol,,
|
||||
144,Snorunt,,
|
||||
145,Glalie,,
|
||||
146,Froslass,,
|
||||
147,Sneasel,,
|
||||
148,Weavile,,
|
||||
149,Sandshrew,,
|
||||
150,Sandslash,,
|
||||
151,Vulpix,,
|
||||
152,Ninetales,,
|
||||
153,Vanillite,,
|
||||
154,Vanillish,,
|
||||
155,Vanilluxe,,
|
||||
156,Scraggy,,
|
||||
157,Scrafty,,
|
||||
158,Pawniard,,
|
||||
159,Bisharp,,
|
||||
160,Tapu Bulu,,
|
||||
|
@@ -0,0 +1,154 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Chespin,,
|
||||
2,Quilladin,,
|
||||
3,Chesnaught,,
|
||||
4,Fennekin,,
|
||||
5,Braixen,,
|
||||
6,Delphox,,
|
||||
7,Froakie,,
|
||||
8,Frogadier,,
|
||||
9,Greninja,,
|
||||
10,Bunnelby,,
|
||||
11,Diggersby,,
|
||||
12,Zigzagoon,,
|
||||
13,Linoone,,
|
||||
14,Fletchling,,
|
||||
15,Fletchinder,,
|
||||
16,Talonflame,,
|
||||
17,Pidgey,,
|
||||
18,Pidgeotto,,
|
||||
19,Pidgeot,,
|
||||
20,Scatterbug,,
|
||||
21,Spewpa,,
|
||||
22,Vivillon,,
|
||||
23,Caterpie,,
|
||||
24,Metapod,,
|
||||
25,Butterfree,,
|
||||
26,Weedle,,
|
||||
27,Kakuna,,
|
||||
28,Beedrill,,
|
||||
29,Pansage,,
|
||||
30,Simisage,,
|
||||
31,Pansear,,
|
||||
32,Simisear,,
|
||||
33,Panpour,,
|
||||
34,Simipour,,
|
||||
35,Pichu,,
|
||||
36,Pikachu,,
|
||||
37,Raichu,,
|
||||
38,Bidoof,,
|
||||
39,Bibarel,,
|
||||
40,Dunsparce,,
|
||||
41,Azurill,,
|
||||
42,Marill,,
|
||||
43,Azumarill,,
|
||||
44,Burmy,,
|
||||
45,Wormadam,,
|
||||
46,Mothim,,
|
||||
47,Surskit,,
|
||||
48,Masquerain,,
|
||||
49,Magikarp,,
|
||||
50,Gyarados,,
|
||||
51,Corphish,,
|
||||
52,Crawdaunt,,
|
||||
53,Goldeen,,
|
||||
54,Seaking,,
|
||||
55,Carvanha,,
|
||||
56,Sharpedo,,
|
||||
57,Litleo,,
|
||||
58,Pyroar,,
|
||||
59,Psyduck,,
|
||||
60,Golduck,,
|
||||
61,Farfetch'd,,
|
||||
62,Riolu,,
|
||||
63,Lucario,,
|
||||
64,Ralts,,
|
||||
65,Kirlia,,
|
||||
66,Gardevoir,,
|
||||
67,Gallade,,
|
||||
68,Flabébé,,
|
||||
69,Floette,,
|
||||
70,Florges,,
|
||||
71,Budew,,
|
||||
72,Roselia,,
|
||||
73,Roserade,,
|
||||
74,Ledyba,,
|
||||
75,Ledian,,
|
||||
76,Combee,,
|
||||
77,Vespiquen,,
|
||||
78,Skitty,,
|
||||
79,Delcatty,,
|
||||
80,Bulbasaur,,
|
||||
81,Ivysaur,,
|
||||
82,Venusaur,,
|
||||
83,Charmander,,
|
||||
84,Charmeleon,,
|
||||
85,Charizard,,
|
||||
86,Squirtle,,
|
||||
87,Wartortle,,
|
||||
88,Blastoise,,
|
||||
89,Skiddo,,
|
||||
90,Gogoat,,
|
||||
91,Pancham,,
|
||||
92,Pangoro,,
|
||||
93,Furfrou,,
|
||||
94,Doduo,,
|
||||
95,Dodrio,,
|
||||
96,Plusle,,
|
||||
97,Minun,,
|
||||
98,Gulpin,,
|
||||
99,Swalot,,
|
||||
100,Scraggy,,
|
||||
101,Scrafty,,
|
||||
102,Abra,,
|
||||
103,Kadabra,,
|
||||
104,Alakazam,,
|
||||
105,Oddish,,
|
||||
106,Gloom,,
|
||||
107,Vileplume,,
|
||||
108,Bellossom,,
|
||||
109,Sentret,,
|
||||
110,Furret,,
|
||||
111,Nincada,,
|
||||
112,Ninjask,,
|
||||
113,Shedinja,,
|
||||
114,Espurr,,
|
||||
115,Meowstic,,
|
||||
116,Kecleon,,
|
||||
117,Honedge,,
|
||||
118,Doublade,,
|
||||
119,Aegislash,,
|
||||
120,Venipede,,
|
||||
121,Whirlipede,,
|
||||
122,Scolipede,,
|
||||
123,Audino,,
|
||||
124,Smeargle,,
|
||||
125,Croagunk,,
|
||||
126,Toxicroak,,
|
||||
127,Ducklett,,
|
||||
128,Swanna,,
|
||||
129,Spritzee,,
|
||||
130,Aromatisse,,
|
||||
131,Swirlix,,
|
||||
132,Slurpuff,,
|
||||
133,Volbeat,,
|
||||
134,Illumise,,
|
||||
135,Hoppip,,
|
||||
136,Skiploom,,
|
||||
137,Jumpluff,,
|
||||
138,Munchlax,,
|
||||
139,Snorlax,,
|
||||
140,Whismur,,
|
||||
141,Loudred,,
|
||||
142,Exploud,,
|
||||
143,Meditite,,
|
||||
144,Medicham,,
|
||||
145,Zubat,,
|
||||
146,Golbat,,
|
||||
147,Crobat,,
|
||||
148,Axew,,
|
||||
149,Fraxure,,
|
||||
150,Haxorus,,
|
||||
151,Diancie,,
|
||||
152,Hoopa,,
|
||||
153,Volcanion,,
|
||||
|
@@ -0,0 +1,154 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Drifloon,,
|
||||
2,Drifblim,,
|
||||
3,Mienfoo,,
|
||||
4,Mienshao,,
|
||||
5,Zangoose,,
|
||||
6,Seviper,,
|
||||
7,Spoink,,
|
||||
8,Grumpig,,
|
||||
9,Absol,,
|
||||
10,Inkay,,
|
||||
11,Malamar,,
|
||||
12,Lunatone,,
|
||||
13,Solrock,,
|
||||
14,Bagon,,
|
||||
15,Shelgon,,
|
||||
16,Salamence,,
|
||||
17,Wingull,,
|
||||
18,Pelipper,,
|
||||
19,Taillow,,
|
||||
20,Swellow,,
|
||||
21,Binacle,,
|
||||
22,Barbaracle,,
|
||||
23,Dwebble,,
|
||||
24,Crustle,,
|
||||
25,Tentacool,,
|
||||
26,Tentacruel,,
|
||||
27,Wailmer,,
|
||||
28,Wailord,,
|
||||
29,Luvdisc,,
|
||||
30,Skrelp,,
|
||||
31,Dragalge,,
|
||||
32,Clauncher,,
|
||||
33,Clawitzer,,
|
||||
34,Staryu,,
|
||||
35,Starmie,,
|
||||
36,Shellder,,
|
||||
37,Cloyster,,
|
||||
38,Qwilfish,,
|
||||
39,Horsea,,
|
||||
40,Seadra,,
|
||||
41,Kingdra,,
|
||||
42,Relicanth,,
|
||||
43,Sandile,,
|
||||
44,Krokorok,,
|
||||
45,Krookodile,,
|
||||
46,Helioptile,,
|
||||
47,Heliolisk,,
|
||||
48,Hippopotas,,
|
||||
49,Hippowdon,,
|
||||
50,Rhyhorn,,
|
||||
51,Rhydon,,
|
||||
52,Rhyperior,,
|
||||
53,Onix,,
|
||||
54,Steelix,,
|
||||
55,Woobat,,
|
||||
56,Swoobat,,
|
||||
57,Machop,,
|
||||
58,Machoke,,
|
||||
59,Machamp,,
|
||||
60,Cubone,,
|
||||
61,Marowak,,
|
||||
62,Kangaskhan,,
|
||||
63,Mawile,,
|
||||
64,Tyrunt,,
|
||||
65,Tyrantrum,,
|
||||
66,Amaura,,
|
||||
67,Aurorus,,
|
||||
68,Aerodactyl,,
|
||||
69,Ferroseed,,
|
||||
70,Ferrothorn,,
|
||||
71,Snubbull,,
|
||||
72,Granbull,,
|
||||
73,Electrike,,
|
||||
74,Manectric,,
|
||||
75,Houndour,,
|
||||
76,Houndoom,,
|
||||
77,Eevee,,
|
||||
78,Vaporeon,,
|
||||
79,Jolteon,,
|
||||
80,Flareon,,
|
||||
81,Espeon,,
|
||||
82,Umbreon,,
|
||||
83,Leafeon,,
|
||||
84,Glaceon,,
|
||||
85,Sylveon,,
|
||||
86,Emolga,,
|
||||
87,Yanma,,
|
||||
88,Yanmega,,
|
||||
89,Hawlucha,,
|
||||
90,Sigilyph,,
|
||||
91,Golett,,
|
||||
92,Golurk,,
|
||||
93,Nosepass,,
|
||||
94,Probopass,,
|
||||
95,Makuhita,,
|
||||
96,Hariyama,,
|
||||
97,Throh,,
|
||||
98,Sawk,,
|
||||
99,Starly,,
|
||||
100,Staravia,,
|
||||
101,Staraptor,,
|
||||
102,Stunky,,
|
||||
103,Skuntank,,
|
||||
104,Nidoran♀,,
|
||||
105,Nidorina,,
|
||||
106,Nidoqueen,,
|
||||
107,Nidoran♂,,
|
||||
108,Nidorino,,
|
||||
109,Nidoking,,
|
||||
110,Dedenne,,
|
||||
111,Chingling,,
|
||||
112,Chimecho,,
|
||||
113,Mime Jr.,,
|
||||
114,Mr. Mime,,
|
||||
115,Solosis,,
|
||||
116,Duosion,,
|
||||
117,Reuniclus,,
|
||||
118,Wynaut,,
|
||||
119,Wobbuffet,,
|
||||
120,Roggenrola,,
|
||||
121,Boldore,,
|
||||
122,Gigalith,,
|
||||
123,Sableye,,
|
||||
124,Carbink,,
|
||||
125,Tauros,,
|
||||
126,Miltank,,
|
||||
127,Mareep,,
|
||||
128,Flaaffy,,
|
||||
129,Ampharos,,
|
||||
130,Pinsir,,
|
||||
131,Heracross,,
|
||||
132,Pachirisu,,
|
||||
133,Slowpoke,,
|
||||
134,Slowbro,,
|
||||
135,Slowking,,
|
||||
136,Exeggcute,,
|
||||
137,Exeggutor,,
|
||||
138,Chatot,,
|
||||
139,Mantyke,,
|
||||
140,Mantine,,
|
||||
141,Clamperl,,
|
||||
142,Huntail,,
|
||||
143,Gorebyss,,
|
||||
144,Remoraid,,
|
||||
145,Octillery,,
|
||||
146,Corsola,,
|
||||
147,Chinchou,,
|
||||
148,Lanturn,,
|
||||
149,Alomomola,,
|
||||
150,Lapras,,
|
||||
151,Articuno,,
|
||||
152,Zapdos,,
|
||||
153,Moltres,,
|
||||
|
@@ -0,0 +1,152 @@
|
||||
dexNumber,pokemon,form,notes
|
||||
1,Diglett,,
|
||||
2,Dugtrio,,
|
||||
3,Trapinch,,
|
||||
4,Vibrava,,
|
||||
5,Flygon,,
|
||||
6,Gible,,
|
||||
7,Gabite,,
|
||||
8,Garchomp,,
|
||||
9,Geodude,,
|
||||
10,Graveler,,
|
||||
11,Golem,,
|
||||
12,Slugma,,
|
||||
13,Magcargo,,
|
||||
14,Shuckle,,
|
||||
15,Skorupi,,
|
||||
16,Drapion,,
|
||||
17,Wooper,,
|
||||
18,Quagsire,,
|
||||
19,Goomy,,
|
||||
20,Sliggoo,,
|
||||
21,Goodra,,
|
||||
22,Karrablast,,
|
||||
23,Escavalier,,
|
||||
24,Shelmet,,
|
||||
25,Accelgor,,
|
||||
26,Bellsprout,,
|
||||
27,Weepinbell,,
|
||||
28,Victreebel,,
|
||||
29,Carnivine,,
|
||||
30,Gastly,,
|
||||
31,Haunter,,
|
||||
32,Gengar,,
|
||||
33,Poliwag,,
|
||||
34,Poliwhirl,,
|
||||
35,Poliwrath,,
|
||||
36,Politoed,,
|
||||
37,Ekans,,
|
||||
38,Arbok,,
|
||||
39,Stunfisk,,
|
||||
40,Barboach,,
|
||||
41,Whiscash,,
|
||||
42,Purrloin,,
|
||||
43,Liepard,,
|
||||
44,Poochyena,,
|
||||
45,Mightyena,,
|
||||
46,Patrat,,
|
||||
47,Watchog,,
|
||||
48,Pawniard,,
|
||||
49,Bisharp,,
|
||||
50,Klefki,,
|
||||
51,Murkrow,,
|
||||
52,Honchkrow,,
|
||||
53,Foongus,,
|
||||
54,Amoonguss,,
|
||||
55,Lotad,,
|
||||
56,Lombre,,
|
||||
57,Ludicolo,,
|
||||
58,Buizel,,
|
||||
59,Floatzel,,
|
||||
60,Basculin,,
|
||||
61,Phantump,,
|
||||
62,Trevenant,,
|
||||
63,Pumpkaboo,,
|
||||
64,Gourgeist,,
|
||||
65,Litwick,,
|
||||
66,Lampent,,
|
||||
67,Chandelure,,
|
||||
68,Rotom,,
|
||||
69,Magnemite,,
|
||||
70,Magneton,,
|
||||
71,Magnezone,,
|
||||
72,Voltorb,,
|
||||
73,Electrode,,
|
||||
74,Trubbish,,
|
||||
75,Garbodor,,
|
||||
76,Swinub,,
|
||||
77,Piloswine,,
|
||||
78,Mamoswine,,
|
||||
79,Bergmite,,
|
||||
80,Avalugg,,
|
||||
81,Cubchoo,,
|
||||
82,Beartic,,
|
||||
83,Smoochum,,
|
||||
84,Jynx,,
|
||||
85,Vanillite,,
|
||||
86,Vanillish,,
|
||||
87,Vanilluxe,,
|
||||
88,Snover,,
|
||||
89,Abomasnow,,
|
||||
90,Delibird,,
|
||||
91,Sneasel,,
|
||||
92,Weavile,,
|
||||
93,Timburr,,
|
||||
94,Gurdurr,,
|
||||
95,Conkeldurr,,
|
||||
96,Torkoal,,
|
||||
97,Sandshrew,,
|
||||
98,Sandslash,,
|
||||
99,Aron,,
|
||||
100,Lairon,,
|
||||
101,Aggron,,
|
||||
102,Larvitar,,
|
||||
103,Pupitar,,
|
||||
104,Tyranitar,,
|
||||
105,Heatmor,,
|
||||
106,Durant,,
|
||||
107,Spinarak,,
|
||||
108,Ariados,,
|
||||
109,Spearow,,
|
||||
110,Fearow,,
|
||||
111,Cryogonal,,
|
||||
112,Skarmory,,
|
||||
113,Noibat,,
|
||||
114,Noivern,,
|
||||
115,Gligar,,
|
||||
116,Gliscor,,
|
||||
117,Hoothoot,,
|
||||
118,Noctowl,,
|
||||
119,Igglybuff,,
|
||||
120,Jigglypuff,,
|
||||
121,Wigglytuff,,
|
||||
122,Shuppet,,
|
||||
123,Banette,,
|
||||
124,Zorua,,
|
||||
125,Zoroark,,
|
||||
126,Gothita,,
|
||||
127,Gothorita,,
|
||||
128,Gothitelle,,
|
||||
129,Bonsly,,
|
||||
130,Sudowoodo,,
|
||||
131,Spinda,,
|
||||
132,Teddiursa,,
|
||||
133,Ursaring,,
|
||||
134,Lickitung,,
|
||||
135,Lickilicky,,
|
||||
136,Scyther,,
|
||||
137,Scizor,,
|
||||
138,Ditto,,
|
||||
139,Swablu,,
|
||||
140,Altaria,,
|
||||
141,Druddigon,,
|
||||
142,Deino,,
|
||||
143,Zweilous,,
|
||||
144,Hydreigon,,
|
||||
145,Dratini,,
|
||||
146,Dragonair,,
|
||||
147,Dragonite,,
|
||||
148,Xerneas,,
|
||||
149,Yveltal,,
|
||||
150,Zygarde,,
|
||||
151,Mewtwo,,
|
||||
|
@@ -0,0 +1,15 @@
|
||||
region,releaseOrder
|
||||
Kanto,1
|
||||
Johto,2
|
||||
Hoenn,3
|
||||
Orre,4
|
||||
Sinnoh,5
|
||||
Ranch,6
|
||||
Unova,7
|
||||
Kalos,8
|
||||
Alola,9
|
||||
Go,10
|
||||
Galar,11
|
||||
Home,12
|
||||
Hisui,13
|
||||
Paldea,14
|
||||
|
@@ -1,155 +0,0 @@
|
||||
# Pokémon Data (CSV Format)
|
||||
|
||||
This directory contains Pokémon data in CSV format for easy editing and maintenance.
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
/data/pokemon/
|
||||
├── gen1-kanto.csv # Gen 1 Pokémon (Kanto region, #1-151)
|
||||
├── gen2-johto.csv # Gen 2 Pokémon (Johto region, #152-251) - Future
|
||||
├── gen3-hoenn.csv # Gen 3 Pokémon (Hoenn region, #252-386) - Future
|
||||
├── games.csv # All Pokémon games definitions
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## CSV Format
|
||||
|
||||
### gen{N}-{region}.csv
|
||||
|
||||
One CSV file per generation/region containing all Pokémon from that generation.
|
||||
|
||||
**Columns:**
|
||||
- `pokedexNumber` - National Pokédex number (e.g., 1, 25, 151)
|
||||
- `name` - Pokémon name (e.g., Bulbasaur, Pikachu, Mew)
|
||||
- `form` - Form name (empty for base form, "Female" for gender differences, "Alolan" for regional forms, etc.)
|
||||
- `games` - Pipe-separated list of games where this Pokémon can be caught (e.g., "Red|Blue|Yellow")
|
||||
- `regionalNumber` - Regional Pokédex number for base forms (empty for gender/alternative forms)
|
||||
|
||||
**Example (gen1-kanto.csv):**
|
||||
```csv
|
||||
pokedexNumber,name,form,games,regionalNumber
|
||||
1,Bulbasaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,1
|
||||
3,Venusaur,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,3
|
||||
3,Venusaur,Female,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,
|
||||
25,Pikachu,,Red|Blue|Yellow|LG: Pikachu|LG: Eevee,25
|
||||
151,Mew,,Red|Blue|Yellow,151
|
||||
```
|
||||
|
||||
### games.csv
|
||||
|
||||
Defines all Pokémon games.
|
||||
|
||||
**Columns:**
|
||||
- `id` - Unique game identifier (lowercase, hyphenated, e.g., "red", "lg-pikachu")
|
||||
- `displayName` - Display name for the game (e.g., "Red", "LG: Pikachu")
|
||||
- `region` - Region/generation the game belongs to (e.g., "Kanto", "Johto")
|
||||
- `generation` - Generation number (1-9)
|
||||
|
||||
**Example:**
|
||||
```csv
|
||||
id,displayName,region,generation
|
||||
red,Red,Kanto,1
|
||||
blue,Blue,Kanto,1
|
||||
lg-pikachu,LG: Pikachu,Kanto,7
|
||||
```
|
||||
|
||||
## Editing with Excel/Google Sheets
|
||||
|
||||
CSV files are designed to be edited in spreadsheet applications:
|
||||
|
||||
1. Open the CSV file in Excel or Google Sheets
|
||||
2. Use formulas, sorting, and filtering for bulk operations
|
||||
3. Save as CSV when done
|
||||
|
||||
**Example workflows:**
|
||||
|
||||
### Adding a new game to existing Pokémon
|
||||
Find & Replace in the `games` column:
|
||||
- Find: `Red|Blue`
|
||||
- Replace: `Red|Blue|NewGame`
|
||||
|
||||
### Adding a new Pokémon
|
||||
Add a new row with all required fields:
|
||||
```csv
|
||||
152,Chikorita,,Gold|Silver|Crystal,1
|
||||
```
|
||||
|
||||
### Adding a regional form
|
||||
Add a new row with the form name:
|
||||
```csv
|
||||
19,Rattata,Alolan,Sun|Moon|US|UM,
|
||||
```
|
||||
|
||||
## Generating SQL Migrations
|
||||
|
||||
After editing CSV files, generate SQL migrations using npm scripts:
|
||||
|
||||
```bash
|
||||
# Generate migration for Kanto
|
||||
npm run seed:kanto
|
||||
|
||||
# Generate migration for Johto (when ready)
|
||||
npm run seed:johto
|
||||
|
||||
# Custom region
|
||||
npm run seed:generate <RegionName>
|
||||
```
|
||||
|
||||
Generated migrations will be created in `/supabase/migrations/` with timestamp prefixes.
|
||||
|
||||
## Testing Changes
|
||||
|
||||
After generating a migration:
|
||||
|
||||
```bash
|
||||
# Reset local database to test
|
||||
npm run supabase:reset
|
||||
|
||||
# Verify the changes loaded correctly
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Regional Numbers**: Only base forms (no `form` value) should have `regionalNumber` values. Forms like "Female" or "Alolan" should leave this column empty.
|
||||
|
||||
2. **Game Names**: Must exactly match the `displayName` in `games.csv`. Use pipe `|` as separator, no spaces around pipes.
|
||||
|
||||
3. **National Dex Numbers**: Must be accurate. Gender forms and regional variants share the same `pokedexNumber` as their base form.
|
||||
|
||||
4. **CSV Encoding**: Save files with UTF-8 encoding to support special characters.
|
||||
|
||||
5. **Quotes**: Only use quotes around values containing commas. Excel/Google Sheets handles this automatically.
|
||||
|
||||
## Common Operations
|
||||
|
||||
### Add a new generation (e.g., Gen 2 - Johto)
|
||||
|
||||
1. Create `gen2-johto.csv` with the format above
|
||||
2. Add Johto games to `games.csv`
|
||||
3. Run `npm run seed:johto`
|
||||
4. Test with `npm run supabase:reset`
|
||||
|
||||
### Add a new game to existing generation
|
||||
|
||||
1. Open `games.csv`, add new game row
|
||||
2. Open the relevant `gen{N}-{region}.csv` file
|
||||
3. Use Find & Replace to add the new game to the `games` column
|
||||
4. Regenerate the migration: `npm run seed:{region}`
|
||||
5. Test with `npm run supabase:reset`
|
||||
|
||||
### Add DLC/expansion Pokémon
|
||||
|
||||
1. Add new Pokémon rows to the appropriate generation CSV
|
||||
2. Update the `games` column with the DLC games
|
||||
3. Regenerate the migration
|
||||
4. Test
|
||||
|
||||
## Database Schema
|
||||
|
||||
Generated migrations insert data into two tables:
|
||||
|
||||
- **`pokedex_entries`**: Pokémon species data (name, form, games, etc.)
|
||||
- **`regional_dex_numbers`**: Regional Pokédex numbers (separate table for scalability)
|
||||
|
||||
This design allows adding new regions without database schema changes.
|
||||
@@ -1,17 +0,0 @@
|
||||
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
|
||||
ruby,Ruby,Hoenn,3,2002
|
||||
sapphire,Sapphire,Hoenn,3,2002
|
||||
emerald,Emerald,Hoenn,3,2004
|
||||
omega-ruby,Omega Ruby,Hoenn,6,2014
|
||||
alpha-sapphire,Alpha Sapphire,Hoenn,6,2014
|
||||
heartgold,HeartGold,Johto,4,2009
|
||||
soulsilver,SoulSilver,Johto,4,2009
|
||||
legends-arceus,Legends: Arceus,Hisui,8,2022
|
||||
|
@@ -1,175 +0,0 @@
|
||||
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
|
||||
|
@@ -1,149 +0,0 @@
|
||||
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
|
||||
|
@@ -1,148 +0,0 @@
|
||||
pokedexNumber,name,form,originGames,regionalDexGames,regionalNumber
|
||||
252,Treecko,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,001
|
||||
253,Grovyle,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,002
|
||||
254,Sceptile,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,003
|
||||
255,Torchic,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,004
|
||||
256,Combusken,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,005
|
||||
257,Blaziken,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,006
|
||||
258,Mudkip,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,007
|
||||
259,Marshtomp,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,008
|
||||
260,Swampert,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,009
|
||||
261,Poochyena,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,010
|
||||
262,Mightyena,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,011
|
||||
263,Zigzagoon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,012
|
||||
264,Linoone,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,013
|
||||
265,Wurmple,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,014
|
||||
266,Silcoon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,015
|
||||
267,Beautifly,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,016
|
||||
267,Beautifly,Female,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,016
|
||||
268,Cascoon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,017
|
||||
269,Dustox,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,018
|
||||
269,Dustox,Female,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,018
|
||||
270,Lotad,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,019
|
||||
271,Lombre,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,020
|
||||
272,Ludicolo,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,021
|
||||
273,Seedot,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,022
|
||||
274,Nuzleaf,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,023
|
||||
275,Shiftry,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,024
|
||||
276,Taillow,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,025
|
||||
277,Swellow,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,026
|
||||
278,Wingull,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,027
|
||||
279,Pelipper,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,028
|
||||
280,Ralts,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,029
|
||||
281,Kirlia,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,030
|
||||
282,Gardevoir,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,031
|
||||
283,Surskit,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,032
|
||||
284,Masquerain,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,033
|
||||
285,Shroomish,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,034
|
||||
286,Breloom,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,035
|
||||
287,Slakoth,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,036
|
||||
288,Vigoroth,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,037
|
||||
289,Slaking,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,038
|
||||
290,Nincada,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,039
|
||||
291,Ninjask,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,040
|
||||
292,Shedinja,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,041
|
||||
293,Whismur,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,042
|
||||
294,Loudred,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,043
|
||||
295,Exploud,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,044
|
||||
296,Makuhita,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,045
|
||||
297,Hariyama,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,046
|
||||
298,Azurill,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,047
|
||||
299,Nosepass,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,048
|
||||
300,Skitty,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,049
|
||||
301,Delcatty,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,050
|
||||
302,Sableye,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,051
|
||||
302,Sableye,Female,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,051
|
||||
303,Mawile,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,052
|
||||
303,Mawile,Female,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,052
|
||||
304,Aron,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,053
|
||||
305,Lairon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,054
|
||||
306,Aggron,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,055
|
||||
307,Meditite,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,056
|
||||
308,Medicham,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,057
|
||||
308,Medicham,Female,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,057
|
||||
309,Electrike,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,058
|
||||
310,Manectric,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,059
|
||||
311,Plusle,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,060
|
||||
312,Minun,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,061
|
||||
313,Volbeat,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,062
|
||||
314,Illumise,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,063
|
||||
315,Roselia,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,064
|
||||
316,Gulpin,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,065
|
||||
317,Swalot,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,066
|
||||
318,Carvanha,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,067
|
||||
319,Sharpedo,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,068
|
||||
320,Wailmer,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,069
|
||||
321,Wailord,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,070
|
||||
322,Numel,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,071
|
||||
323,Camerupt,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,072
|
||||
324,Torkoal,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,073
|
||||
325,Spoink,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,074
|
||||
326,Grumpig,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,075
|
||||
327,Spinda,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,076
|
||||
328,Trapinch,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,077
|
||||
329,Vibrava,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,078
|
||||
330,Flygon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,079
|
||||
331,Cacnea,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,080
|
||||
332,Cacturne,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,081
|
||||
333,Swablu,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,082
|
||||
334,Altaria,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,083
|
||||
335,Zangoose,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,084
|
||||
336,Seviper,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,085
|
||||
337,Lunatone,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,086
|
||||
338,Solrock,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,087
|
||||
339,Barboach,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,088
|
||||
340,Whiscash,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,089
|
||||
341,Corphish,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,090
|
||||
342,Crawdaunt,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,091
|
||||
343,Baltoy,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,092
|
||||
344,Claydol,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,093
|
||||
345,Lileep,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,094
|
||||
346,Cradily,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,095
|
||||
347,Anorith,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,096
|
||||
348,Armaldo,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,097
|
||||
349,Feebas,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,098
|
||||
350,Milotic,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,099
|
||||
351,Castform,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,100
|
||||
351,Castform,Sunny,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,100
|
||||
351,Castform,Rainy,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,100
|
||||
351,Castform,Snowy,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,100
|
||||
352,Kecleon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,101
|
||||
353,Shuppet,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,102
|
||||
354,Banette,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,103
|
||||
355,Duskull,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,104
|
||||
356,Dusclops,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,105
|
||||
357,Tropius,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,106
|
||||
358,Chimecho,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,107
|
||||
359,Absol,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,108
|
||||
359,Absol,Female,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,108
|
||||
360,Wynaut,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,109
|
||||
361,Snorunt,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,110
|
||||
362,Glalie,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,111
|
||||
363,Spheal,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,112
|
||||
364,Sealeo,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,113
|
||||
365,Walrein,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,114
|
||||
366,Clamperl,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,115
|
||||
367,Huntail,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,116
|
||||
368,Gorebyss,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,117
|
||||
369,Relicanth,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,118
|
||||
370,Luvdisc,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,119
|
||||
371,Bagon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,120
|
||||
372,Shelgon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,121
|
||||
373,Salamence,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,122
|
||||
374,Beldum,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,123
|
||||
375,Metang,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,124
|
||||
376,Metagross,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,125
|
||||
377,Regirock,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,126
|
||||
378,Regice,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,127
|
||||
379,Registeel,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,128
|
||||
380,Latias,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,129
|
||||
381,Latios,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,130
|
||||
382,Kyogre,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,131
|
||||
383,Groudon,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,132
|
||||
384,Rayquaza,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,133
|
||||
385,Jirachi,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,134
|
||||
386,Deoxys,,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,135
|
||||
386,Deoxys,Attack,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,135
|
||||
386,Deoxys,Defense,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,135
|
||||
386,Deoxys,Speed,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,Ruby|Sapphire|Emerald|Omega Ruby|Alpha Sapphire,135
|
||||
|
@@ -1,99 +1,75 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from 'svelte';
|
||||
import pokeApiPokemon from '$lib/helpers/pokeapi-pokemon.json';
|
||||
import { PUBLIC_USE_LOCAL_POKEMON_SPRITE_FOLDER } from '$env/static/public';
|
||||
|
||||
export let pokemonName: string;
|
||||
export let pokedexNumber: string | number;
|
||||
export let form: string | undefined;
|
||||
export let spriteKey: string | undefined;
|
||||
export let shiny: boolean | undefined = false;
|
||||
|
||||
let imagePath = null as string | null;
|
||||
let blah = '';
|
||||
|
||||
function setImagePath() {
|
||||
function isFemaleForm(value?: string) {
|
||||
return /^female\b/i.test((value ?? '').trim());
|
||||
}
|
||||
|
||||
function buildFallbackKey() {
|
||||
const strippedPokedexNumber = pokedexNumber.toString().replace(/^0+/, '') || '0';
|
||||
if (!form) return strippedPokedexNumber;
|
||||
|
||||
let formValue = form.trim();
|
||||
formValue = formValue.replace(/^female[-\s]*/i, '');
|
||||
formValue = formValue.replace(/\s*\(.*?\)/g, '').replace(/\s*\[.*?\]/g, '').trim();
|
||||
if (!formValue || formValue.toLowerCase() === 'male') return strippedPokedexNumber;
|
||||
|
||||
formValue = formValue
|
||||
.toLowerCase()
|
||||
.replace(/%/g, '')
|
||||
.replace(/\balolan\b/g, 'alola')
|
||||
.replace(/\bgalarian\b/g, 'galar')
|
||||
.replace(/\bhisuian\b/g, 'hisui')
|
||||
.replace(/\bpaldean\b/g, 'paldea')
|
||||
.replace(/\bform(e)?$/, '')
|
||||
.replace(/\bability$/, '')
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/(^-|-$)/g, '')
|
||||
.replace(/2/g, 'two')
|
||||
.replace(/3/g, 'three')
|
||||
.replace(/4/g, 'four');
|
||||
|
||||
return formValue ? `${strippedPokedexNumber}-${formValue}` : strippedPokedexNumber;
|
||||
}
|
||||
|
||||
function computeImagePath() {
|
||||
let rootFolder =
|
||||
PUBLIC_USE_LOCAL_POKEMON_SPRITE_FOLDER === 'true'
|
||||
? '/sprites/home'
|
||||
: 'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/home';
|
||||
|
||||
if (form === 'Female') {
|
||||
rootFolder += '/female';
|
||||
}
|
||||
|
||||
if (shiny) {
|
||||
rootFolder += '/shiny';
|
||||
}
|
||||
|
||||
// Remove leading zeros
|
||||
const strippedPokedexNumber = pokedexNumber.toString().replace(/^0+/, '');
|
||||
|
||||
// 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, '');
|
||||
|
||||
/**
|
||||
* 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');
|
||||
|
||||
switch (sanitisedForm) {
|
||||
case 'alolan':
|
||||
sanitisedForm = 'alola';
|
||||
break;
|
||||
case 'galarian':
|
||||
sanitisedForm = 'galar';
|
||||
break;
|
||||
case 'hisuian':
|
||||
sanitisedForm = 'hisui';
|
||||
break;
|
||||
// case 'rainbow-ribbon':
|
||||
// sanitisedForm = 'rainbow-swirl-ribbon-sweet';
|
||||
// break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// 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 {
|
||||
// Pattern 2: Use {pokedexNumber}-{form} (e.g., 201-a.png for Unown-A)
|
||||
pokeApiId = `${strippedPokedexNumber}-${sanitisedForm}`;
|
||||
}
|
||||
} else {
|
||||
pokeApiId = pokeApiPokemon.find(
|
||||
(pokemon) => pokemon.species_id.toString() === strippedPokedexNumber
|
||||
)?.id;
|
||||
if (isFemaleForm(form)) {
|
||||
rootFolder += '/female';
|
||||
}
|
||||
|
||||
imagePath = `${rootFolder}/${pokeApiId}.png`;
|
||||
blah = `${pokeApiId}.png`;
|
||||
// blah = `${strippedPokedexNumber}${form?.length && form !== 'Female' ? '-' + form : ''}.png`;
|
||||
const resolvedSpriteKey = spriteKey?.trim() || buildFallbackKey();
|
||||
if (!spriteKey?.trim()) {
|
||||
console.warn('Missing sprite key for pokemon entry', {
|
||||
pokemonName,
|
||||
pokedexNumber,
|
||||
form
|
||||
});
|
||||
}
|
||||
|
||||
return `${rootFolder}/${resolvedSpriteKey}.png`;
|
||||
}
|
||||
|
||||
onMount(setImagePath);
|
||||
$: imagePath = computeImagePath();
|
||||
</script>
|
||||
|
||||
{#if imagePath}
|
||||
<!-- {blah} -->
|
||||
<img src={imagePath} alt="sprite" />
|
||||
{:else}
|
||||
<span class="loading loading-spinner loading-xs"></span>
|
||||
|
||||
@@ -71,11 +71,12 @@
|
||||
|
||||
<!-- Email Input -->
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="signin-email">
|
||||
<span class="label-text font-medium">Email</span>
|
||||
</label>
|
||||
<div class="relative">
|
||||
<input
|
||||
id="signin-email"
|
||||
type="email"
|
||||
placeholder="your@email.com"
|
||||
class="input input-bordered w-full pl-10"
|
||||
@@ -101,11 +102,12 @@
|
||||
|
||||
<!-- Password Input -->
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="signin-password">
|
||||
<span class="label-text font-medium">Password</span>
|
||||
</label>
|
||||
<div class="relative">
|
||||
<input
|
||||
id="signin-password"
|
||||
type="password"
|
||||
placeholder="••••••••"
|
||||
class="input input-bordered w-full pl-10"
|
||||
|
||||
@@ -38,10 +38,11 @@
|
||||
|
||||
<form class="card-body">
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="signup-email">
|
||||
<span class="label-text">Email</span>
|
||||
</label>
|
||||
<input
|
||||
id="signup-email"
|
||||
type="email"
|
||||
placeholder="email"
|
||||
class="input input-bordered"
|
||||
@@ -50,10 +51,11 @@
|
||||
/>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="signup-password">
|
||||
<span class="label-text">Password</span>
|
||||
</label>
|
||||
<input
|
||||
id="signup-password"
|
||||
type="password"
|
||||
placeholder="password"
|
||||
class="input input-bordered"
|
||||
|
||||
@@ -7,14 +7,16 @@
|
||||
</script>
|
||||
|
||||
<div class="relative inline-block">
|
||||
<div
|
||||
class="tooltip-trigger cursor-pointer"
|
||||
<button
|
||||
type="button"
|
||||
class="tooltip-trigger cursor-pointer bg-transparent border-0 p-0 appearance-none"
|
||||
aria-expanded={show}
|
||||
on:click={handleClick}
|
||||
on:mouseenter={() => (show = true)}
|
||||
on:mouseleave={() => (show = false)}
|
||||
>
|
||||
<slot name="hover-target" />
|
||||
</div>
|
||||
</button>
|
||||
|
||||
{#if show}
|
||||
<div class="tooltip-content absolute z-10 mt-2 w-52">
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
<span class="font-semibold">Game:</span>
|
||||
{pokedex.gameScope}
|
||||
</div>
|
||||
{#if pokedex.dexScopes?.length}
|
||||
<div class="text-sm text-base-content/70">
|
||||
<span class="font-semibold">Dexes:</span>
|
||||
{pokedex.dexScopes.length}
|
||||
</div>
|
||||
{/if}
|
||||
{:else}
|
||||
<div class="text-sm text-base-content/70">
|
||||
<span class="font-semibold">Scope:</span> All Games
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import type { CatchRecord } from '$lib/models/CatchRecord';
|
||||
import type { PokedexEntry } from '$lib/models/PokedexEntry';
|
||||
import type { CatchInformationItem, PokedexEntry } from '$lib/models/PokedexEntry';
|
||||
import PokemonSprite from '../PokemonSprite.svelte';
|
||||
import { createEventDispatcher } from 'svelte';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
catchRecord = {
|
||||
_id: '', // Empty string, not temp ID - will be created by server
|
||||
userId: userId || '',
|
||||
pokedexEntryId: pokedexEntry._id,
|
||||
pokemonId: pokedexEntry._id,
|
||||
pokedexId: pokedexId,
|
||||
haveToEvolve: false,
|
||||
caught: false,
|
||||
@@ -31,6 +31,10 @@
|
||||
|
||||
type UpdateCatchSource = 'toggle' | 'notes' | 'notes-blur';
|
||||
|
||||
const isCatchInformationItem = (
|
||||
value: string | CatchInformationItem
|
||||
): value is CatchInformationItem => typeof value !== 'string';
|
||||
|
||||
function updateCatchRecord(source: UpdateCatchSource) {
|
||||
dispatch('updateCatch', { pokedexEntry, catchRecord, source });
|
||||
}
|
||||
@@ -64,6 +68,7 @@
|
||||
pokemonName={pokedexEntry.pokemon}
|
||||
pokedexNumber={pokedexEntry.pokedexNumber}
|
||||
form={pokedexEntry.form}
|
||||
spriteKey={pokedexEntry.spriteKey}
|
||||
shiny={showShiny}
|
||||
/>
|
||||
</div>
|
||||
@@ -193,11 +198,15 @@
|
||||
<ul class="list-disc list-inside">
|
||||
{#each pokedexEntry.catchInformation as info}
|
||||
<li>
|
||||
<ul>
|
||||
<li><strong>Game:</strong> {info.game}</li>
|
||||
<li><strong>Location:</strong> {info.location}</li>
|
||||
<li><strong>Notes:</strong> {info.notes}</li>
|
||||
</ul>
|
||||
{#if isCatchInformationItem(info)}
|
||||
<ul>
|
||||
<li><strong>Game:</strong> {info.game}</li>
|
||||
<li><strong>Location:</strong> {info.location}</li>
|
||||
<li><strong>Notes:</strong> {info.notes}</li>
|
||||
</ul>
|
||||
{:else}
|
||||
{info}
|
||||
{/if}
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
|
||||
@@ -9,36 +9,83 @@
|
||||
isShinyDex: false,
|
||||
isOriginDex: false,
|
||||
isFormDex: false,
|
||||
gameScope: null
|
||||
gameScope: null,
|
||||
dexScopes: []
|
||||
};
|
||||
export let mode: 'create' | 'edit' = 'create';
|
||||
export let onSubmit: () => void;
|
||||
export let onCancel: () => void;
|
||||
|
||||
let games: string[] = [];
|
||||
let loadingGames = true;
|
||||
type GameDex = {
|
||||
id: string;
|
||||
displayName: string;
|
||||
sortOrder: number;
|
||||
isDlc: boolean;
|
||||
parentDexId: string | null;
|
||||
};
|
||||
type GameSummary = {
|
||||
displayName: string;
|
||||
releaseYear: number;
|
||||
};
|
||||
|
||||
// Fetch available games from the database
|
||||
let gameDexes: Record<string, GameDex[]> = {};
|
||||
let gameOrder: string[] = [];
|
||||
let gameList: GameSummary[] = [];
|
||||
let availableDexes: GameDex[] = [];
|
||||
let loadingDexes = true;
|
||||
let lastGameScope: string | null = null;
|
||||
let dexScopesInitialized = false;
|
||||
let hasSeenGameScope = false;
|
||||
|
||||
// Fetch available game dexes from the database
|
||||
onMount(async () => {
|
||||
try {
|
||||
const response = await fetch('/api/games');
|
||||
const response = await fetch('/api/game-dexes');
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
games = data.games || [];
|
||||
gameDexes = data.gameDexes || {};
|
||||
gameOrder = data.gameOrder || Object.keys(gameDexes);
|
||||
gameList = data.games || [];
|
||||
} else {
|
||||
console.error('Failed to fetch games');
|
||||
console.error('Failed to fetch game dexes');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching games:', error);
|
||||
console.error('Error fetching game dexes:', error);
|
||||
} finally {
|
||||
loadingGames = false;
|
||||
loadingDexes = false;
|
||||
}
|
||||
});
|
||||
|
||||
// Validation
|
||||
$: hasAtLeastOneType =
|
||||
pokedex.isLivingDex || pokedex.isShinyDex || pokedex.isOriginDex || pokedex.isFormDex;
|
||||
$: canSubmit = pokedex.name && pokedex.name.trim() !== '' && hasAtLeastOneType;
|
||||
$: hasDexScope =
|
||||
!pokedex.gameScope || (pokedex.dexScopes && pokedex.dexScopes.length > 0);
|
||||
$: canSubmit =
|
||||
pokedex.name && pokedex.name.trim() !== '' && hasAtLeastOneType && hasDexScope;
|
||||
|
||||
$: if (pokedex.gameScope !== lastGameScope) {
|
||||
const shouldResetDexes = mode === 'create' || hasSeenGameScope;
|
||||
lastGameScope = pokedex.gameScope || null;
|
||||
dexScopesInitialized = false;
|
||||
if (shouldResetDexes) {
|
||||
pokedex.dexScopes = [];
|
||||
}
|
||||
if (!pokedex.gameScope) {
|
||||
availableDexes = [];
|
||||
}
|
||||
hasSeenGameScope = true;
|
||||
}
|
||||
|
||||
$: if (!loadingDexes && pokedex.gameScope) {
|
||||
availableDexes = gameDexes[pokedex.gameScope] || [];
|
||||
if (!dexScopesInitialized) {
|
||||
if (!pokedex.dexScopes || pokedex.dexScopes.length === 0) {
|
||||
pokedex.dexScopes = availableDexes.map((dex) => dex.id);
|
||||
}
|
||||
dexScopesInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
function handleSubmit() {
|
||||
if (canSubmit) {
|
||||
@@ -74,30 +121,32 @@
|
||||
</div>
|
||||
|
||||
<div class="form-control w-full">
|
||||
<label class="label">
|
||||
<span class="label-text">Type(s)</span>
|
||||
<span class="label-text-alt text-error"
|
||||
>{!hasAtLeastOneType ? 'At least one type required' : ''}</span
|
||||
>
|
||||
</label>
|
||||
<div class="flex flex-col gap-2">
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isLivingDex} />
|
||||
<span class="label-text">Living Dex (one of each Pokémon)</span>
|
||||
</label>
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isShinyDex} />
|
||||
<span class="label-text">Shiny Dex (shiny variants only)</span>
|
||||
</label>
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isOriginDex} />
|
||||
<span class="label-text">Origin Dex (caught in native regions)</span>
|
||||
</label>
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isFormDex} />
|
||||
<span class="label-text">Form Dex (all forms included)</span>
|
||||
</label>
|
||||
</div>
|
||||
<fieldset class="w-full">
|
||||
<legend class="label">
|
||||
<span class="label-text">Type(s)</span>
|
||||
<span class="label-text-alt text-error"
|
||||
>{!hasAtLeastOneType ? 'At least one type required' : ''}</span
|
||||
>
|
||||
</legend>
|
||||
<div class="flex flex-col gap-2">
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isLivingDex} />
|
||||
<span class="label-text">Living Dex (one of each Pokémon)</span>
|
||||
</label>
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isShinyDex} />
|
||||
<span class="label-text">Shiny Dex (shiny variants only)</span>
|
||||
</label>
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isOriginDex} />
|
||||
<span class="label-text">Origin Dex (caught in native regions)</span>
|
||||
</label>
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input type="checkbox" class="checkbox" bind:checked={pokedex.isFormDex} />
|
||||
<span class="label-text">Form Dex (all forms included)</span>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="form-control w-full">
|
||||
@@ -108,19 +157,53 @@
|
||||
id="game-scope"
|
||||
class="select select-bordered"
|
||||
bind:value={pokedex.gameScope}
|
||||
disabled={loadingGames}
|
||||
disabled={loadingDexes}
|
||||
>
|
||||
<option value={null}>All Games</option>
|
||||
{#if loadingGames}
|
||||
{#if loadingDexes}
|
||||
<option disabled>Loading games...</option>
|
||||
{:else}
|
||||
{#each games as game}
|
||||
<option value={game}>{game}</option>
|
||||
{/each}
|
||||
{#if gameList.length > 0}
|
||||
{#each gameList as game}
|
||||
<option value={game.displayName}>{game.displayName}</option>
|
||||
{/each}
|
||||
{:else}
|
||||
{#each gameOrder.length > 0 ? gameOrder : Object.keys(gameDexes) as game}
|
||||
<option value={game}>{game}</option>
|
||||
{/each}
|
||||
{/if}
|
||||
{/if}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{#if pokedex.gameScope}
|
||||
<div class="form-control w-full">
|
||||
<fieldset class="w-full">
|
||||
<legend class="label">
|
||||
<span class="label-text">Dex Scope</span>
|
||||
<span class="label-text-alt text-error">{!hasDexScope ? 'Select at least one dex' : ''}</span>
|
||||
</legend>
|
||||
{#if availableDexes.length === 0}
|
||||
<p class="text-sm text-error">No dexes found for this game.</p>
|
||||
{:else}
|
||||
<div class="flex flex-col gap-2">
|
||||
{#each availableDexes as dex}
|
||||
<label class="label cursor-pointer justify-start gap-3">
|
||||
<input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
value={dex.id}
|
||||
bind:group={pokedex.dexScopes}
|
||||
/>
|
||||
<span class="label-text">{dex.displayName}</span>
|
||||
</label>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
</fieldset>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="modal-action">
|
||||
<button class="btn btn-ghost" type="button" on:click={onCancel}>Cancel</button>
|
||||
<button class="btn btn-primary" type="button" on:click={handleSubmit} disabled={!canSubmit}>
|
||||
|
||||
@@ -31,11 +31,12 @@
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
<button
|
||||
type="button"
|
||||
class="modal-backdrop bg-black/50"
|
||||
aria-label="Close modal"
|
||||
on:click={handleBackdropClick}
|
||||
on:keydown={() => {}}
|
||||
></div>
|
||||
></button>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
@@ -46,6 +47,8 @@
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.modal-box-custom {
|
||||
|
||||
@@ -353,7 +353,7 @@
|
||||
<div class="mb-8">
|
||||
<div class="flex flex-wrap items-center justify-between gap-3 mb-4 relative z-20">
|
||||
<h2 class="text-xl font-bold">Box {boxNumber}</h2>
|
||||
<div class="relative" on:click|stopPropagation>
|
||||
<div class="relative">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-sm btn-outline relative z-[210]"
|
||||
@@ -376,12 +376,11 @@
|
||||
<ul
|
||||
id={bulkMenuId}
|
||||
class="menu bg-base-100 rounded-box absolute right-0 mt-2 z-[220] w-56 p-2 shadow border border-base-300"
|
||||
on:click|stopPropagation
|
||||
>
|
||||
<li>
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
on:click|stopPropagation={() => {
|
||||
markBoxAsNotCaught(boxNumber);
|
||||
openBulkMenuForBox = null;
|
||||
}}
|
||||
@@ -392,7 +391,7 @@
|
||||
<li>
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
on:click|stopPropagation={() => {
|
||||
markBoxAsCaught(boxNumber);
|
||||
openBulkMenuForBox = null;
|
||||
}}
|
||||
@@ -403,7 +402,7 @@
|
||||
<li>
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
on:click|stopPropagation={() => {
|
||||
markBoxAsNeedsToEvolve(boxNumber);
|
||||
openBulkMenuForBox = null;
|
||||
}}
|
||||
@@ -414,7 +413,7 @@
|
||||
<li>
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
on:click|stopPropagation={() => {
|
||||
markBoxAsInHome(boxNumber);
|
||||
openBulkMenuForBox = null;
|
||||
}}
|
||||
@@ -425,7 +424,7 @@
|
||||
<li>
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
on:click|stopPropagation={() => {
|
||||
markBoxAsNotInHome(boxNumber);
|
||||
openBulkMenuForBox = null;
|
||||
}}
|
||||
@@ -531,6 +530,7 @@
|
||||
pokemonName={pokedexEntry.pokemon}
|
||||
pokedexNumber={pokedexEntry.pokedexNumber}
|
||||
form={pokedexEntry.form}
|
||||
spriteKey={pokedexEntry.spriteKey}
|
||||
shiny={showShiny}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
export interface CatchRecord {
|
||||
_id: string; // Maps to Supabase 'id' field for frontend compatibility
|
||||
userId: string;
|
||||
pokedexEntryId: string; // String representation of the foreign key
|
||||
pokedexId: string; // NEW: Foreign key to pokedexes table
|
||||
pokemonId: string;
|
||||
pokedexId: string;
|
||||
haveToEvolve: boolean;
|
||||
caught: boolean;
|
||||
inHome: boolean;
|
||||
@@ -15,7 +15,8 @@ export interface CatchRecord {
|
||||
export interface CatchRecordDB {
|
||||
id: string;
|
||||
userId: string;
|
||||
pokedexEntryId: number; // Numeric foreign key in database
|
||||
/** Numeric foreign key in database (references `pokemon.id`) */
|
||||
pokemonId: number;
|
||||
pokedexId: string; // NEW: Foreign key to pokedexes table
|
||||
haveToEvolve: boolean;
|
||||
caught: boolean;
|
||||
|
||||
@@ -8,6 +8,7 @@ export interface Pokedex {
|
||||
isOriginDex: boolean;
|
||||
isFormDex: boolean;
|
||||
gameScope: string | null;
|
||||
dexScopes: string[];
|
||||
}
|
||||
|
||||
export interface PokedexDB {
|
||||
|
||||
@@ -1,15 +1,22 @@
|
||||
// Supabase-based PokedexEntry interface
|
||||
export type CatchInformationItem = {
|
||||
game: string;
|
||||
location: string;
|
||||
notes: string;
|
||||
};
|
||||
|
||||
export interface PokedexEntry {
|
||||
_id: string; // Maps to Supabase 'id' field for frontend compatibility
|
||||
pokedexNumber: number;
|
||||
pokemon: string;
|
||||
form: string;
|
||||
spriteKey: string;
|
||||
canGigantamax: boolean;
|
||||
regionToCatchIn: string;
|
||||
gamesToCatchIn: string[];
|
||||
regionToEvolveIn: string;
|
||||
evolutionInformation: string;
|
||||
catchInformation: string[];
|
||||
catchInformation: Array<string | CatchInformationItem>;
|
||||
// Note: Regional dex numbers stored in separate regional_dex_numbers table
|
||||
}
|
||||
|
||||
@@ -19,6 +26,7 @@ export interface PokedexEntryDB {
|
||||
pokedexNumber: number;
|
||||
pokemon: string;
|
||||
form: string | null;
|
||||
spriteKey: string | null;
|
||||
canGigantamax: boolean;
|
||||
regionToCatchIn: string | null;
|
||||
gamesToCatchIn: string[] | null;
|
||||
|
||||
@@ -15,7 +15,7 @@ class CatchRecordRepository {
|
||||
return {
|
||||
_id: record.id,
|
||||
userId: record.userId,
|
||||
pokedexEntryId: record.pokedexEntryId.toString(),
|
||||
pokemonId: record.pokemonId.toString(),
|
||||
pokedexId: record.pokedexId,
|
||||
haveToEvolve: record.haveToEvolve,
|
||||
caught: record.caught,
|
||||
@@ -28,12 +28,12 @@ class CatchRecordRepository {
|
||||
// Transform frontend data to database format (minimal transformation)
|
||||
private transformToDatabase(data: Partial<CatchRecord>): Partial<CatchRecordDB> {
|
||||
const dbData: Partial<CatchRecordDB> = {};
|
||||
if (data.pokedexEntryId !== undefined && data.pokedexEntryId !== null) {
|
||||
const numericId = Number(data.pokedexEntryId);
|
||||
if (data.pokemonId !== undefined && data.pokemonId !== null) {
|
||||
const numericId = Number(data.pokemonId);
|
||||
if (isNaN(numericId)) {
|
||||
throw new Error(`Invalid pokedexEntryId: ${data.pokedexEntryId}`);
|
||||
throw new Error(`Invalid pokemonId: ${data.pokemonId}`);
|
||||
}
|
||||
dbData.pokedexEntryId = numericId;
|
||||
dbData.pokemonId = numericId;
|
||||
}
|
||||
if (data.pokedexId !== undefined) dbData.pokedexId = data.pokedexId;
|
||||
if (data.haveToEvolve !== undefined) dbData.haveToEvolve = data.haveToEvolve;
|
||||
@@ -53,14 +53,14 @@ class CatchRecordRepository {
|
||||
* catch the error and fall back to per-record upserts.
|
||||
*/
|
||||
async bulkUpsert(
|
||||
records: Array<PartialExcept<CatchRecord, 'pokedexEntryId'>>
|
||||
records: Array<PartialExcept<CatchRecord, 'pokemonId'>>
|
||||
): Promise<CatchRecord[]> {
|
||||
if (records.length === 0) return [];
|
||||
|
||||
const dbRows: Partial<CatchRecordDB>[] = records.map((r, index) => {
|
||||
if (r.pokedexEntryId === undefined || r.pokedexEntryId === null || r.pokedexEntryId === '') {
|
||||
if (r.pokemonId === undefined || r.pokemonId === null || r.pokemonId === '') {
|
||||
throw new Error(
|
||||
`CatchRecordRepository.bulkUpsert: record at index ${index} is missing required field "pokedexEntryId"`
|
||||
`CatchRecordRepository.bulkUpsert: record at index ${index} is missing required field "pokemonId"`
|
||||
);
|
||||
}
|
||||
|
||||
@@ -81,9 +81,9 @@ class CatchRecordRepository {
|
||||
mapped.userId = this.userId;
|
||||
mapped.pokedexId = this.pokedexId;
|
||||
|
||||
if (mapped.pokedexEntryId === undefined || mapped.pokedexEntryId === null) {
|
||||
if (mapped.pokemonId === undefined || mapped.pokemonId === null) {
|
||||
throw new Error(
|
||||
`CatchRecordRepository.bulkUpsert: record at index ${index} produced no pokedexEntryId after transform`
|
||||
`CatchRecordRepository.bulkUpsert: record at index ${index} produced no pokemonId after transform`
|
||||
);
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ class CatchRecordRepository {
|
||||
const { data: result, error } = await this.supabase
|
||||
.from('catch_records')
|
||||
.upsert(dbRows, {
|
||||
onConflict: '"userId","pokedexId","pokedexEntryId"'
|
||||
onConflict: '"userId","pokedexId","pokemonId"'
|
||||
})
|
||||
.select();
|
||||
|
||||
@@ -198,13 +198,9 @@ class CatchRecordRepository {
|
||||
async upsert(data: Partial<CatchRecord>): Promise<CatchRecord | null> {
|
||||
if (data._id) {
|
||||
return this.update(data._id, data);
|
||||
} else if (data.pokedexEntryId) {
|
||||
} else if (data.pokemonId) {
|
||||
// Try to find existing record for this user, pokemon, and pokedex
|
||||
const existing = await this.findByUserAndPokemon(
|
||||
this.userId,
|
||||
data.pokedexEntryId,
|
||||
this.pokedexId
|
||||
);
|
||||
const existing = await this.findByUserAndPokemon(this.userId, data.pokemonId, this.pokedexId);
|
||||
if (existing) {
|
||||
return this.update(existing._id, data);
|
||||
} else {
|
||||
@@ -216,10 +212,10 @@ class CatchRecordRepository {
|
||||
|
||||
async findByUserAndPokemon(
|
||||
userId: string,
|
||||
pokedexEntryId: string,
|
||||
pokemonId: string,
|
||||
pokedexId: string
|
||||
): Promise<CatchRecord | null> {
|
||||
const numericId = Number(pokedexEntryId);
|
||||
const numericId = Number(pokemonId);
|
||||
if (isNaN(numericId)) {
|
||||
return null;
|
||||
}
|
||||
@@ -227,7 +223,7 @@ class CatchRecordRepository {
|
||||
.from('catch_records')
|
||||
.select('*')
|
||||
.eq('userId', userId)
|
||||
.eq('pokedexEntryId', numericId)
|
||||
.eq('pokemonId', numericId)
|
||||
.eq('pokedexId', pokedexId)
|
||||
.single();
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ import { type CombinedData } from '$lib/models/CombinedData';
|
||||
import type { SupabaseClient } from '@supabase/supabase-js';
|
||||
|
||||
class CombinedDataRepository {
|
||||
private static readonly MAX_ROWS_PER_REQUEST = 1000;
|
||||
|
||||
constructor(
|
||||
private supabase: SupabaseClient,
|
||||
private userId: string | null,
|
||||
@@ -17,6 +19,7 @@ class CombinedDataRepository {
|
||||
pokedexNumber: entry.pokedexNumber,
|
||||
pokemon: entry.pokemon,
|
||||
form: entry.form || '',
|
||||
spriteKey: entry.spriteKey || '',
|
||||
canGigantamax: entry.canGigantamax,
|
||||
regionToCatchIn: entry.regionToCatchIn || '',
|
||||
gamesToCatchIn: entry.gamesToCatchIn || [],
|
||||
@@ -31,7 +34,7 @@ class CombinedDataRepository {
|
||||
return {
|
||||
_id: record.id,
|
||||
userId: record.userId,
|
||||
pokedexEntryId: record.pokedexEntryId.toString(),
|
||||
pokemonId: record.pokemonId.toString(),
|
||||
pokedexId: record.pokedexId,
|
||||
haveToEvolve: record.haveToEvolve,
|
||||
caught: record.caught,
|
||||
@@ -41,18 +44,12 @@ class CombinedDataRepository {
|
||||
};
|
||||
}
|
||||
|
||||
async findAllCombinedData(
|
||||
userId: string,
|
||||
enableForms: boolean = true,
|
||||
region: string = '',
|
||||
game: string = ''
|
||||
): Promise<CombinedData[]> {
|
||||
private buildEntriesQuery(enableForms: boolean, region: string, game: string) {
|
||||
let query = this.supabase.from('pokedex_entries').select('*');
|
||||
|
||||
// Apply filters
|
||||
if (!enableForms) {
|
||||
// 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)');
|
||||
// Filter to base forms: NULL or 'male' (gendered species), plus Unown "A".
|
||||
query = query.or('form.is.null,form.eq.male,and(pokemon.eq.Unown,form.eq.A)');
|
||||
}
|
||||
|
||||
if (region) {
|
||||
@@ -63,17 +60,212 @@ class CombinedDataRepository {
|
||||
query = query.contains('gamesToCatchIn', [game]);
|
||||
}
|
||||
|
||||
// Always order by national dex number
|
||||
// Note: Regional dex ordering would require joining with regional_dex_numbers table
|
||||
query = query.order('pokedexNumber', { ascending: true });
|
||||
// Stable ordering from the database: national dex, Unown order, base/female/temporal, then form label.
|
||||
query = query
|
||||
.order('pokedexNumber', { ascending: true })
|
||||
.order('unownSortOrder', { ascending: true })
|
||||
.order('formSortBucket', { ascending: true })
|
||||
.order('formSortRegionOrder', { ascending: true })
|
||||
.order('formSortRegionalSub', { ascending: true })
|
||||
.order('formSortLabel', { ascending: true });
|
||||
|
||||
const { data: entries, error: entriesError } = await query;
|
||||
return query;
|
||||
}
|
||||
|
||||
if (entriesError) {
|
||||
console.error('Error finding combined data:', entriesError);
|
||||
return [];
|
||||
private buildDexEntriesQuery(dexScopes: string[], enableForms: boolean, region: string) {
|
||||
let query = this.supabase.from('game_pokedex_entry_details').select('*').in('dexId', dexScopes);
|
||||
|
||||
if (!enableForms) {
|
||||
// Filter to base forms: NULL or 'male' (gendered species), plus Unown "A".
|
||||
query = query.or('form.is.null,form.eq.male,and(pokemon.eq.Unown,form.eq.A)');
|
||||
}
|
||||
|
||||
if (region) {
|
||||
query = query.eq('regionToCatchIn', region);
|
||||
}
|
||||
|
||||
// Stable ordering: dex order, dex number, Unown order, base/female/temporal, then form label.
|
||||
query = query
|
||||
.order('dexSortOrder', { ascending: true })
|
||||
.order('dexNumber', { ascending: true })
|
||||
.order('unownSortOrder', { ascending: true })
|
||||
.order('formSortBucket', { ascending: true })
|
||||
.order('formSortRegionOrder', { ascending: true })
|
||||
.order('formSortRegionalSub', { ascending: true })
|
||||
.order('formSortLabel', { ascending: true });
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
private async fetchAllDexEntries(
|
||||
dexScopes: string[],
|
||||
enableForms: boolean,
|
||||
region: string
|
||||
): Promise<PokedexEntryDB[]> {
|
||||
if (dexScopes.length === 0) return [];
|
||||
|
||||
const entries: PokedexEntryDB[] = [];
|
||||
let start = 0;
|
||||
const maxRows = CombinedDataRepository.MAX_ROWS_PER_REQUEST;
|
||||
|
||||
while (true) {
|
||||
const end = start + maxRows - 1;
|
||||
const { data, error } = await this.buildDexEntriesQuery(dexScopes, enableForms, region).range(
|
||||
start,
|
||||
end
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('Error finding dex-scoped combined data:', error);
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!data || data.length === 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
entries.push(...data);
|
||||
|
||||
if (data.length < maxRows) {
|
||||
break;
|
||||
}
|
||||
|
||||
start = end + 1;
|
||||
}
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
private dedupeEntries(entries: PokedexEntryDB[]): PokedexEntryDB[] {
|
||||
const seen = new Set<number>();
|
||||
const deduped: PokedexEntryDB[] = [];
|
||||
|
||||
for (const entry of entries) {
|
||||
if (seen.has(entry.id)) continue;
|
||||
seen.add(entry.id);
|
||||
deduped.push(entry);
|
||||
}
|
||||
|
||||
return deduped;
|
||||
}
|
||||
|
||||
private async fetchEntriesByRange(
|
||||
from: number,
|
||||
to: number,
|
||||
enableForms: boolean,
|
||||
region: string,
|
||||
game: string
|
||||
): Promise<PokedexEntryDB[]> {
|
||||
const entries: PokedexEntryDB[] = [];
|
||||
let start = from;
|
||||
const maxRows = CombinedDataRepository.MAX_ROWS_PER_REQUEST;
|
||||
|
||||
while (start <= to) {
|
||||
const end = Math.min(to, start + maxRows - 1);
|
||||
const { data, error } = await this.buildEntriesQuery(enableForms, region, game).range(
|
||||
start,
|
||||
end
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('Error finding paginated combined data:', error);
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!data || data.length === 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
entries.push(...data);
|
||||
|
||||
if (data.length < end - start + 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
start = end + 1;
|
||||
}
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
private async fetchAllEntries(
|
||||
enableForms: boolean,
|
||||
region: string,
|
||||
game: string
|
||||
): Promise<PokedexEntryDB[]> {
|
||||
const entries: PokedexEntryDB[] = [];
|
||||
let start = 0;
|
||||
const maxRows = CombinedDataRepository.MAX_ROWS_PER_REQUEST;
|
||||
|
||||
while (true) {
|
||||
const end = start + maxRows - 1;
|
||||
const { data, error } = await this.buildEntriesQuery(enableForms, region, game).range(
|
||||
start,
|
||||
end
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error('Error finding combined data:', error);
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!data || data.length === 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
entries.push(...data);
|
||||
|
||||
if (data.length < maxRows) {
|
||||
break;
|
||||
}
|
||||
|
||||
start = end + 1;
|
||||
}
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
private async fetchCatchRecords(entryIds: number[], userId: string): Promise<CatchRecordDB[]> {
|
||||
if (!this.pokedexId) return [];
|
||||
if (entryIds.length === 0) return [];
|
||||
|
||||
const records: CatchRecordDB[] = [];
|
||||
const chunkSize = 1000;
|
||||
|
||||
for (let i = 0; i < entryIds.length; i += chunkSize) {
|
||||
const chunk = entryIds.slice(i, i + chunkSize);
|
||||
const { data, error } = await this.supabase
|
||||
.from('catch_records')
|
||||
.select('*')
|
||||
.eq('userId', userId)
|
||||
.eq('pokedexId', this.pokedexId)
|
||||
.in('pokemonId', chunk);
|
||||
|
||||
if (error) {
|
||||
console.error('Error loading catch records:', error);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (data) {
|
||||
records.push(...data);
|
||||
}
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
|
||||
async findAllCombinedData(
|
||||
userId: string,
|
||||
enableForms: boolean = true,
|
||||
region: string = '',
|
||||
game: string = '',
|
||||
dexScopes: string[] = []
|
||||
): Promise<CombinedData[]> {
|
||||
const entries =
|
||||
dexScopes.length > 0
|
||||
? this.dedupeEntries(await this.fetchAllDexEntries(dexScopes, enableForms, region))
|
||||
: await this.fetchAllEntries(enableForms, region, game);
|
||||
|
||||
if (!entries || entries.length === 0) {
|
||||
return [];
|
||||
}
|
||||
@@ -82,22 +274,12 @@ class CombinedDataRepository {
|
||||
let catchRecords: CatchRecordDB[] = [];
|
||||
if (userId && this.pokedexId) {
|
||||
const entryIds = entries.map((entry) => entry.id);
|
||||
const { data: records, error: recordsError } = await this.supabase
|
||||
.from('catch_records')
|
||||
.select('*')
|
||||
.eq('userId', userId)
|
||||
.eq('pokedexId', this.pokedexId)
|
||||
.in('pokedexEntryId', entryIds);
|
||||
|
||||
if (!recordsError && records) {
|
||||
catchRecords = records;
|
||||
}
|
||||
catchRecords = await this.fetchCatchRecords(entryIds, userId);
|
||||
}
|
||||
|
||||
// Combine the data exactly like master branch
|
||||
const combinedData = entries.map((entry) => {
|
||||
const userCatchRecord =
|
||||
catchRecords.find((record) => record.pokedexEntryId === entry.id) || null;
|
||||
const userCatchRecord = catchRecords.find((record) => record.pokemonId === entry.id) || null;
|
||||
|
||||
const transformedEntry = this.transformPokedexEntry(entry);
|
||||
const transformedCatchRecord = userCatchRecord
|
||||
@@ -120,37 +302,18 @@ class CombinedDataRepository {
|
||||
limit: number = 20,
|
||||
enableForms: boolean = true,
|
||||
region: string = '',
|
||||
game: string = ''
|
||||
game: string = '',
|
||||
dexScopes: string[] = []
|
||||
): Promise<CombinedData[]> {
|
||||
const from = (page - 1) * limit;
|
||||
const to = from + limit - 1;
|
||||
|
||||
let query = this.supabase.from('pokedex_entries').select('*').range(from, to);
|
||||
|
||||
// Apply filters
|
||||
if (!enableForms) {
|
||||
// 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) {
|
||||
query = query.eq('regionToCatchIn', region);
|
||||
}
|
||||
|
||||
if (game) {
|
||||
query = query.contains('gamesToCatchIn', [game]);
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
if (entriesError) {
|
||||
console.error('Error finding paginated combined data:', entriesError);
|
||||
return [];
|
||||
}
|
||||
const entries =
|
||||
dexScopes.length > 0
|
||||
? this.dedupeEntries(await this.fetchAllDexEntries(dexScopes, enableForms, region)).slice(
|
||||
from,
|
||||
to + 1
|
||||
)
|
||||
: await this.fetchEntriesByRange(from, to, enableForms, region, game);
|
||||
|
||||
if (!entries || entries.length === 0) {
|
||||
return [];
|
||||
@@ -160,22 +323,12 @@ class CombinedDataRepository {
|
||||
let catchRecords: CatchRecordDB[] = [];
|
||||
if (userId && this.pokedexId) {
|
||||
const entryIds = entries.map((entry) => entry.id);
|
||||
const { data: records, error: recordsError } = await this.supabase
|
||||
.from('catch_records')
|
||||
.select('*')
|
||||
.eq('userId', userId)
|
||||
.eq('pokedexId', this.pokedexId)
|
||||
.in('pokedexEntryId', entryIds);
|
||||
|
||||
if (!recordsError && records) {
|
||||
catchRecords = records;
|
||||
}
|
||||
catchRecords = await this.fetchCatchRecords(entryIds, userId);
|
||||
}
|
||||
|
||||
// Combine the data exactly like master branch
|
||||
const combinedData = entries.map((entry) => {
|
||||
const userCatchRecord =
|
||||
catchRecords.find((record) => record.pokedexEntryId === entry.id) || null;
|
||||
const userCatchRecord = catchRecords.find((record) => record.pokemonId === entry.id) || null;
|
||||
|
||||
const transformedEntry = this.transformPokedexEntry(entry);
|
||||
const transformedCatchRecord = userCatchRecord
|
||||
@@ -192,13 +345,25 @@ class CombinedDataRepository {
|
||||
return combinedData;
|
||||
}
|
||||
|
||||
async countCombinedData(enableForms: boolean, region: string, game: string): Promise<number> {
|
||||
async countCombinedData(
|
||||
enableForms: boolean,
|
||||
region: string,
|
||||
game: string,
|
||||
dexScopes: string[] = []
|
||||
): Promise<number> {
|
||||
if (dexScopes.length > 0) {
|
||||
const entries = this.dedupeEntries(
|
||||
await this.fetchAllDexEntries(dexScopes, enableForms, region)
|
||||
);
|
||||
return entries.length;
|
||||
}
|
||||
|
||||
let query = this.supabase.from('pokedex_entries').select('id', { count: 'exact', head: true });
|
||||
|
||||
// Apply same filters as in findCombinedData
|
||||
if (!enableForms) {
|
||||
// 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)');
|
||||
// Filter to base forms: NULL or 'male' (gendered species), plus Unown "A".
|
||||
query = query.or('form.is.null,form.eq.male,and(pokemon.eq.Unown,form.eq.A)');
|
||||
}
|
||||
|
||||
if (region) {
|
||||
|
||||
@@ -1,9 +1,45 @@
|
||||
import { type PokedexEntry, type PokedexEntryDB } from '$lib/models/PokedexEntry';
|
||||
import {
|
||||
type CatchInformationItem,
|
||||
type PokedexEntry,
|
||||
type PokedexEntryDB
|
||||
} from '$lib/models/PokedexEntry';
|
||||
import type { SupabaseClient } from '@supabase/supabase-js';
|
||||
|
||||
class PokedexEntryRepository {
|
||||
constructor(private supabase: SupabaseClient) {}
|
||||
|
||||
private parseCatchInformation(
|
||||
values: string[] | null
|
||||
): Array<string | CatchInformationItem> {
|
||||
if (!values) return [];
|
||||
return values.map((value) => {
|
||||
const trimmed = value.trim();
|
||||
if (!trimmed.startsWith('{')) return value;
|
||||
try {
|
||||
const parsed = JSON.parse(trimmed) as Partial<CatchInformationItem>;
|
||||
if (
|
||||
parsed &&
|
||||
typeof parsed.game === 'string' &&
|
||||
typeof parsed.location === 'string' &&
|
||||
typeof parsed.notes === 'string'
|
||||
) {
|
||||
return {
|
||||
game: parsed.game,
|
||||
location: parsed.location,
|
||||
notes: parsed.notes
|
||||
};
|
||||
}
|
||||
} catch {
|
||||
return value;
|
||||
}
|
||||
return value;
|
||||
});
|
||||
}
|
||||
|
||||
private serializeCatchInformation(values: Array<string | CatchInformationItem>): string[] {
|
||||
return values.map((value) => (typeof value === 'string' ? value : JSON.stringify(value)));
|
||||
}
|
||||
|
||||
// Transform Supabase data to match frontend expectations (minimal transformation)
|
||||
private transformPokedexEntry(entry: PokedexEntryDB): PokedexEntry {
|
||||
return {
|
||||
@@ -11,12 +47,13 @@ class PokedexEntryRepository {
|
||||
pokedexNumber: entry.pokedexNumber,
|
||||
pokemon: entry.pokemon,
|
||||
form: entry.form || '',
|
||||
spriteKey: entry.spriteKey || '',
|
||||
canGigantamax: entry.canGigantamax,
|
||||
regionToCatchIn: entry.regionToCatchIn || '',
|
||||
gamesToCatchIn: entry.gamesToCatchIn || [],
|
||||
regionToEvolveIn: entry.regionToEvolveIn || '',
|
||||
evolutionInformation: entry.evolutionInformation || '',
|
||||
catchInformation: entry.catchInformation || []
|
||||
catchInformation: this.parseCatchInformation(entry.catchInformation)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -47,13 +84,16 @@ class PokedexEntryRepository {
|
||||
if (data.pokedexNumber !== undefined) dbData.pokedexNumber = data.pokedexNumber;
|
||||
if (data.pokemon !== undefined) dbData.pokemon = data.pokemon;
|
||||
if (data.form !== undefined) dbData.form = data.form;
|
||||
if (data.spriteKey !== undefined) dbData.spriteKey = data.spriteKey;
|
||||
if (data.canGigantamax !== undefined) dbData.canGigantamax = data.canGigantamax;
|
||||
if (data.regionToCatchIn !== undefined) dbData.regionToCatchIn = data.regionToCatchIn;
|
||||
if (data.gamesToCatchIn !== undefined) dbData.gamesToCatchIn = data.gamesToCatchIn;
|
||||
if (data.regionToEvolveIn !== undefined) dbData.regionToEvolveIn = data.regionToEvolveIn;
|
||||
if (data.evolutionInformation !== undefined)
|
||||
dbData.evolutionInformation = data.evolutionInformation;
|
||||
if (data.catchInformation !== undefined) dbData.catchInformation = data.catchInformation;
|
||||
if (data.catchInformation !== undefined) {
|
||||
dbData.catchInformation = this.serializeCatchInformation(data.catchInformation);
|
||||
}
|
||||
// Box placement is calculated dynamically - not stored in database
|
||||
|
||||
const { data: result, error } = await this.supabase
|
||||
@@ -72,13 +112,16 @@ class PokedexEntryRepository {
|
||||
if (data.pokedexNumber !== undefined) dbData.pokedexNumber = data.pokedexNumber;
|
||||
if (data.pokemon !== undefined) dbData.pokemon = data.pokemon;
|
||||
if (data.form !== undefined) dbData.form = data.form;
|
||||
if (data.spriteKey !== undefined) dbData.spriteKey = data.spriteKey;
|
||||
if (data.canGigantamax !== undefined) dbData.canGigantamax = data.canGigantamax;
|
||||
if (data.regionToCatchIn !== undefined) dbData.regionToCatchIn = data.regionToCatchIn;
|
||||
if (data.gamesToCatchIn !== undefined) dbData.gamesToCatchIn = data.gamesToCatchIn;
|
||||
if (data.regionToEvolveIn !== undefined) dbData.regionToEvolveIn = data.regionToEvolveIn;
|
||||
if (data.evolutionInformation !== undefined)
|
||||
dbData.evolutionInformation = data.evolutionInformation;
|
||||
if (data.catchInformation !== undefined) dbData.catchInformation = data.catchInformation;
|
||||
if (data.catchInformation !== undefined) {
|
||||
dbData.catchInformation = this.serializeCatchInformation(data.catchInformation);
|
||||
}
|
||||
// Box placement is calculated dynamically - not stored in database
|
||||
|
||||
const { data: result, error } = await this.supabase
|
||||
|
||||
@@ -7,7 +7,7 @@ class PokedexRepository {
|
||||
private userId: string
|
||||
) {}
|
||||
|
||||
private transform(db: PokedexDB): Pokedex {
|
||||
private transform(db: PokedexDB, dexScopes: string[] = []): Pokedex {
|
||||
return {
|
||||
_id: db.id,
|
||||
userId: db.userId,
|
||||
@@ -17,7 +17,8 @@ class PokedexRepository {
|
||||
isShinyDex: db.isShinyDex,
|
||||
isOriginDex: db.isOriginDex,
|
||||
isFormDex: db.isFormDex,
|
||||
gameScope: db.gameScope
|
||||
gameScope: db.gameScope,
|
||||
dexScopes
|
||||
};
|
||||
}
|
||||
|
||||
@@ -33,6 +34,23 @@ class PokedexRepository {
|
||||
return dbData;
|
||||
}
|
||||
|
||||
private async fetchDexScopesMap(pokedexIds: string[]): Promise<Map<string, string[]>> {
|
||||
if (pokedexIds.length === 0) return new Map();
|
||||
const { data, error } = await this.supabase
|
||||
.from('pokedex_dex_scopes')
|
||||
.select('pokedexId, dexId')
|
||||
.in('pokedexId', pokedexIds);
|
||||
|
||||
if (error || !data) return new Map();
|
||||
|
||||
const map = new Map<string, string[]>();
|
||||
for (const row of data) {
|
||||
if (!map.has(row.pokedexId)) map.set(row.pokedexId, []);
|
||||
map.get(row.pokedexId)?.push(row.dexId);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
async findById(id: string): Promise<Pokedex | null> {
|
||||
const { data, error } = await this.supabase
|
||||
.from('pokedexes')
|
||||
@@ -42,7 +60,8 @@ class PokedexRepository {
|
||||
.single();
|
||||
|
||||
if (error || !data) return null;
|
||||
return this.transform(data);
|
||||
const dexScopesMap = await this.fetchDexScopesMap([data.id]);
|
||||
return this.transform(data, dexScopesMap.get(data.id) || []);
|
||||
}
|
||||
|
||||
async findAll(): Promise<Pokedex[]> {
|
||||
@@ -53,7 +72,8 @@ class PokedexRepository {
|
||||
.order('createdAt', { ascending: true });
|
||||
|
||||
if (error || !data) return [];
|
||||
return data.map((d) => this.transform(d));
|
||||
const dexScopesMap = await this.fetchDexScopesMap(data.map((d) => d.id));
|
||||
return data.map((d) => this.transform(d, dexScopesMap.get(d.id) || []));
|
||||
}
|
||||
|
||||
async create(data: Partial<Pokedex>): Promise<Pokedex> {
|
||||
|
||||
@@ -1,24 +1,38 @@
|
||||
import RegionGameMappingModel, { type RegionGameMapping } from '$lib/models/RegionGameMapping';
|
||||
import type { RegionGameMapping } from '$lib/models/RegionGameMapping';
|
||||
|
||||
class RegionGameMappingRepository {
|
||||
async findById(id: string): Promise<RegionGameMapping | null> {
|
||||
return RegionGameMappingModel.findById(id).exec();
|
||||
void id;
|
||||
return null;
|
||||
}
|
||||
|
||||
async findAll(): Promise<RegionGameMapping[]> {
|
||||
return RegionGameMappingModel.find().exec();
|
||||
return [];
|
||||
}
|
||||
|
||||
async create(data: Partial<RegionGameMapping>): Promise<RegionGameMapping> {
|
||||
return RegionGameMappingModel.create(data);
|
||||
async create(data: Partial<RegionGameMapping>): Promise<RegionGameMapping | null> {
|
||||
if (!data.region || !data.game) return null;
|
||||
return {
|
||||
id: data.id,
|
||||
region: data.region,
|
||||
game: data.game
|
||||
};
|
||||
}
|
||||
|
||||
async update(id: string, data: Partial<RegionGameMapping>): Promise<RegionGameMapping | null> {
|
||||
return RegionGameMappingModel.findByIdAndUpdate(id, data, { new: true }).exec();
|
||||
if (!data.region || !data.game) return null;
|
||||
const normalizedId = Number(id);
|
||||
const resolvedId = Number.isFinite(normalizedId) ? normalizedId : data.id;
|
||||
if (typeof resolvedId !== 'number' || !Number.isFinite(resolvedId)) return null;
|
||||
return {
|
||||
id: resolvedId,
|
||||
region: data.region,
|
||||
game: data.game
|
||||
};
|
||||
}
|
||||
|
||||
async delete(id: string): Promise<void> {
|
||||
await RegionGameMappingModel.findByIdAndDelete(id).exec();
|
||||
void id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
import type { SupabaseClient } from '@supabase/supabase-js';
|
||||
import type { Pokedex } from '$lib/models/Pokedex';
|
||||
|
||||
type GameDexRow = {
|
||||
id: string;
|
||||
displayName: string;
|
||||
sortOrder: number;
|
||||
isDlc: boolean;
|
||||
parentDexId: string | null;
|
||||
};
|
||||
|
||||
type GameSummary = {
|
||||
displayName: string;
|
||||
releaseYear: number;
|
||||
};
|
||||
|
||||
type GameDexRowWithGame = GameDexRow & {
|
||||
games: GameSummary | GameSummary[] | null;
|
||||
};
|
||||
|
||||
async function getGameIdForScope(
|
||||
supabase: SupabaseClient,
|
||||
gameScope: string
|
||||
): Promise<string | null> {
|
||||
const { data, error } = await supabase
|
||||
.from('games')
|
||||
.select('id')
|
||||
.eq('displayName', gameScope)
|
||||
.maybeSingle();
|
||||
|
||||
if (error || !data) return null;
|
||||
return data.id;
|
||||
}
|
||||
|
||||
export async function resolveDexScopes(
|
||||
supabase: SupabaseClient,
|
||||
pokedex: Pokedex
|
||||
): Promise<string[]> {
|
||||
if (!pokedex.gameScope) return [];
|
||||
if (pokedex.dexScopes && pokedex.dexScopes.length > 0) {
|
||||
return pokedex.dexScopes;
|
||||
}
|
||||
|
||||
const gameId = await getGameIdForScope(supabase, pokedex.gameScope);
|
||||
if (!gameId) return [];
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('game_dexes')
|
||||
.select('id')
|
||||
.eq('gameId', gameId)
|
||||
.order('sortOrder', { ascending: true })
|
||||
.order('displayName', { ascending: true });
|
||||
|
||||
if (error || !data) return [];
|
||||
return data.map((row) => row.id);
|
||||
}
|
||||
|
||||
export async function setPokedexDexScopes(
|
||||
supabase: SupabaseClient,
|
||||
pokedexId: string,
|
||||
dexIds: string[]
|
||||
): Promise<void> {
|
||||
const uniqueDexIds = Array.from(new Set(dexIds));
|
||||
|
||||
const { error: deleteError } = await supabase
|
||||
.from('pokedex_dex_scopes')
|
||||
.delete()
|
||||
.eq('pokedexId', pokedexId);
|
||||
|
||||
if (deleteError) {
|
||||
throw new Error(`Failed to clear dex scopes: ${deleteError.message}`);
|
||||
}
|
||||
|
||||
if (uniqueDexIds.length === 0) return;
|
||||
|
||||
const rows = uniqueDexIds.map((dexId) => ({
|
||||
pokedexId,
|
||||
dexId
|
||||
}));
|
||||
|
||||
const { error: insertError } = await supabase.from('pokedex_dex_scopes').insert(rows);
|
||||
if (insertError) {
|
||||
throw new Error(`Failed to save dex scopes: ${insertError.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
export async function listGameDexes(
|
||||
supabase: SupabaseClient
|
||||
): Promise<{
|
||||
gameDexes: Record<string, GameDexRow[]>;
|
||||
gameOrder: string[];
|
||||
games: { displayName: string; releaseYear: number }[];
|
||||
}> {
|
||||
const { data, error } = await supabase
|
||||
.from('game_dexes')
|
||||
.select('id, displayName, sortOrder, isDlc, parentDexId, games!inner(displayName, releaseYear)')
|
||||
.order('sortOrder', { ascending: true })
|
||||
.order('displayName', { ascending: true });
|
||||
|
||||
if (error || !data) return { gameDexes: {}, gameOrder: [], games: [] };
|
||||
|
||||
const grouped: Record<string, GameDexRow[]> = {};
|
||||
const releaseYears: Record<string, number> = {};
|
||||
const rows = data as GameDexRowWithGame[];
|
||||
for (const row of rows) {
|
||||
const game = Array.isArray(row.games) ? row.games[0] : row.games;
|
||||
if (!game) continue;
|
||||
const gameName = game.displayName;
|
||||
if (!grouped[gameName]) grouped[gameName] = [];
|
||||
if (releaseYears[gameName] == null) {
|
||||
releaseYears[gameName] = game.releaseYear;
|
||||
}
|
||||
grouped[gameName].push({
|
||||
id: row.id,
|
||||
displayName: row.displayName,
|
||||
sortOrder: row.sortOrder,
|
||||
isDlc: row.isDlc,
|
||||
parentDexId: row.parentDexId
|
||||
});
|
||||
}
|
||||
|
||||
const games = Object.keys(grouped)
|
||||
.map((name) => ({
|
||||
displayName: name,
|
||||
releaseYear: releaseYears[name] ?? 0
|
||||
}))
|
||||
.sort((a, b) => {
|
||||
if (a.releaseYear !== b.releaseYear) return b.releaseYear - a.releaseYear;
|
||||
return a.displayName.localeCompare(b.displayName);
|
||||
});
|
||||
|
||||
const gameOrder = games.map((game) => game.displayName);
|
||||
|
||||
return { gameDexes: grouped, gameOrder, games };
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { Pokedex } from '$lib/models/Pokedex';
|
||||
import type { SupabaseClient } from '@supabase/supabase-js';
|
||||
import { resolveDexScopes } from '$lib/services/PokedexDexScopeService';
|
||||
|
||||
/**
|
||||
* Calculate expected pokedex entries based on pokedex configuration
|
||||
@@ -10,21 +11,64 @@ export async function calculateExpectedEntries(
|
||||
supabase: SupabaseClient,
|
||||
pokedex: Pokedex
|
||||
): Promise<number[]> {
|
||||
const dexScopes = await resolveDexScopes(supabase, pokedex);
|
||||
|
||||
if (dexScopes.length > 0) {
|
||||
const { data: dexEntries, error: dexError } = await supabase
|
||||
.from('game_pokedex_entries')
|
||||
.select('pokemonId')
|
||||
.in('dexId', dexScopes);
|
||||
|
||||
if (dexError) {
|
||||
console.error('Error calculating dex-scoped entries:', dexError);
|
||||
throw new Error(`Failed to calculate dex-scoped entries: ${dexError.message}`);
|
||||
}
|
||||
|
||||
const uniqueIds = Array.from(new Set(dexEntries?.map((row) => row.pokemonId) || []));
|
||||
if (uniqueIds.length === 0) return [];
|
||||
|
||||
if (!pokedex.isFormDex) {
|
||||
const { data: entries, error: entryError } = await supabase
|
||||
.from('pokedex_entries')
|
||||
.select('id, pokemon, form')
|
||||
.in('id', uniqueIds);
|
||||
|
||||
if (entryError) {
|
||||
console.error('Error filtering base forms for dex scopes:', entryError);
|
||||
throw new Error(`Failed to filter base forms: ${entryError.message}`);
|
||||
}
|
||||
|
||||
return (
|
||||
entries
|
||||
?.filter(
|
||||
(entry) =>
|
||||
entry.form === null ||
|
||||
entry.form === 'male' ||
|
||||
(entry.pokemon === 'Unown' && entry.form === 'A')
|
||||
)
|
||||
.map((entry) => entry.id) || []
|
||||
);
|
||||
}
|
||||
|
||||
return uniqueIds;
|
||||
}
|
||||
|
||||
let query = supabase.from('pokedex_entries').select('id');
|
||||
|
||||
// Apply form filter: if isFormDex is false, only include base forms
|
||||
// Base forms have form IS NULL, except Unown which has no base form (use 'A')
|
||||
if (!pokedex.isFormDex) {
|
||||
query = query.or('form.is.null,and(pokemon.eq.Unown,form.eq.A)');
|
||||
query = query.or('form.is.null,form.eq.male,and(pokemon.eq.Unown,form.eq.A)');
|
||||
}
|
||||
|
||||
// Apply region filter: if gameScope is specified, filter by region
|
||||
if (pokedex.gameScope) {
|
||||
// Determine region from gameScope using region_game_mappings
|
||||
// Determine region from gameScope using games table.
|
||||
// We keep games.region as a denormalized convenience column.
|
||||
const { data: regionData, error: regionError } = await supabase
|
||||
.from('region_game_mappings')
|
||||
.from('games')
|
||||
.select('region')
|
||||
.eq('game', pokedex.gameScope)
|
||||
.eq('displayName', pokedex.gameScope)
|
||||
.maybeSingle();
|
||||
|
||||
if (regionError) {
|
||||
@@ -71,17 +115,18 @@ export async function populatePokedexMappings(
|
||||
return;
|
||||
}
|
||||
|
||||
const mappings = expectedEntryIds.map((pokedexEntryId) => ({
|
||||
// New schema writes to pokedex_pokemon_mapping; column is pokemonId
|
||||
const mappings = expectedEntryIds.map((pokemonId) => ({
|
||||
pokedexId,
|
||||
pokedexEntryId
|
||||
pokemonId
|
||||
}));
|
||||
|
||||
// Process in chunks to avoid request size limits
|
||||
const CHUNK_SIZE = 500;
|
||||
for (let i = 0; i < mappings.length; i += CHUNK_SIZE) {
|
||||
const chunk = mappings.slice(i, i + CHUNK_SIZE);
|
||||
const { error } = await supabase.from('pokedex_entries_mapping').upsert(chunk, {
|
||||
onConflict: 'pokedexId,pokedexEntryId',
|
||||
const { error } = await supabase.from('pokedex_pokemon_mapping').upsert(chunk, {
|
||||
onConflict: 'pokedexId,pokemonId',
|
||||
ignoreDuplicates: true
|
||||
});
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ export type FlushOptions = {
|
||||
};
|
||||
|
||||
function keyFor(record: CatchRecord): string {
|
||||
return `${record.userId}:${record.pokedexId}:${record.pokedexEntryId}`;
|
||||
return `${record.userId}:${record.pokedexId}:${record.pokemonId}`;
|
||||
}
|
||||
|
||||
function backoffMs(attempts: number): number {
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
import { pwaAssetsHead } from 'virtual:pwa-assets/head';
|
||||
|
||||
$: webManifestLink = pwaInfo ? pwaInfo.webManifest.linkTag : '';
|
||||
const pwaDescription = (pwaAssetsHead as { description?: { content: string } }).description;
|
||||
|
||||
export let data;
|
||||
let { supabase } = data;
|
||||
@@ -22,8 +23,10 @@
|
||||
});
|
||||
onDestroy(unsubscribe);
|
||||
|
||||
onMount(async () => {
|
||||
await getUser();
|
||||
let authSubscription: { unsubscribe: () => void } | null = null;
|
||||
|
||||
onMount(() => {
|
||||
void getUser();
|
||||
|
||||
// Listen for auth state changes to keep the user store in sync
|
||||
const {
|
||||
@@ -36,27 +39,30 @@
|
||||
}
|
||||
user.set(localUser);
|
||||
});
|
||||
authSubscription = subscription;
|
||||
|
||||
if (pwaInfo) {
|
||||
const { registerSW } = await import('virtual:pwa-register');
|
||||
registerSW({
|
||||
immediate: true,
|
||||
onRegistered(r) {
|
||||
// uncomment following code if you want check for updates
|
||||
// r && setInterval(() => {
|
||||
// console.log('Checking for sw update')
|
||||
// r.update()
|
||||
// }, 20000 /* 20s for testing purposes */)
|
||||
console.log(`SW Registered: ${r}`);
|
||||
},
|
||||
onRegisterError(error) {
|
||||
console.log('SW registration error', error);
|
||||
}
|
||||
});
|
||||
void (async () => {
|
||||
const { registerSW } = await import('virtual:pwa-register');
|
||||
registerSW({
|
||||
immediate: true,
|
||||
onRegistered(r) {
|
||||
// uncomment following code if you want check for updates
|
||||
// r && setInterval(() => {
|
||||
// console.log('Checking for sw update')
|
||||
// r.update()
|
||||
// }, 20000 /* 20s for testing purposes */)
|
||||
console.log(`SW Registered: ${r}`);
|
||||
},
|
||||
onRegisterError(error) {
|
||||
console.log('SW registration error', error);
|
||||
}
|
||||
});
|
||||
})();
|
||||
}
|
||||
|
||||
return () => {
|
||||
subscription.unsubscribe();
|
||||
authSubscription?.unsubscribe();
|
||||
};
|
||||
});
|
||||
|
||||
@@ -80,8 +86,8 @@
|
||||
{#if pwaAssetsHead.themeColor}
|
||||
<meta name="theme-color" content={pwaAssetsHead.themeColor.content} />
|
||||
{/if}
|
||||
{#if pwaAssetsHead.description}
|
||||
<meta name="description" content={pwaAssetsHead.description.content} />
|
||||
{#if pwaDescription}
|
||||
<meta name="description" content={pwaDescription.content} />
|
||||
{/if}
|
||||
{#each pwaAssetsHead.links as link}
|
||||
<link {...link} />
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import type { RequestHandler } from './$types';
|
||||
import { listGameDexes } from '$lib/services/PokedexDexScopeService';
|
||||
|
||||
/**
|
||||
* GET /api/game-dexes
|
||||
* Returns game dexes grouped by game display name.
|
||||
*/
|
||||
export const GET: RequestHandler = async ({ locals }) => {
|
||||
try {
|
||||
const { gameDexes, gameOrder, games } = await listGameDexes(locals.supabase);
|
||||
return json({ gameDexes, gameOrder, games });
|
||||
} catch (err) {
|
||||
console.error('Unexpected error fetching game dexes:', err);
|
||||
return json({ error: 'Internal server error' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
@@ -4,6 +4,7 @@ import PokedexRepository from '$lib/repositories/PokedexRepository';
|
||||
import { requireAuth } from '$lib/utils/auth';
|
||||
import type { RequestEvent } from '@sveltejs/kit';
|
||||
import { populatePokedexMappings } from '$lib/services/PokedexMappingService';
|
||||
import { resolveDexScopes, setPokedexDexScopes } from '$lib/services/PokedexDexScopeService';
|
||||
|
||||
// GET: List all pokedexes for user
|
||||
export const GET = async (event: RequestEvent) => {
|
||||
@@ -31,19 +32,27 @@ export const POST = async (event: RequestEvent) => {
|
||||
const data: Partial<Pokedex> = await event.request.json();
|
||||
requestedName = typeof data.name === 'string' ? data.name : undefined;
|
||||
data.userId = userId;
|
||||
const requestedDexScopes = Array.isArray(data.dexScopes) ? data.dexScopes : [];
|
||||
|
||||
const repo = new PokedexRepository(event.locals.supabase, userId);
|
||||
const pokedex = await repo.create(data);
|
||||
createdPokedexId = pokedex._id;
|
||||
createdPokedexName = pokedex.name;
|
||||
|
||||
// Populate pokedex_entries_mapping table with expected entries
|
||||
// Populate dex scopes and pokedex_entries_mapping table with expected entries
|
||||
try {
|
||||
const resolvedDexScopes = await resolveDexScopes(event.locals.supabase, {
|
||||
...pokedex,
|
||||
dexScopes: requestedDexScopes
|
||||
});
|
||||
await setPokedexDexScopes(event.locals.supabase, pokedex._id, resolvedDexScopes);
|
||||
pokedex.dexScopes = resolvedDexScopes;
|
||||
|
||||
await populatePokedexMappings(event.locals.supabase, pokedex._id, pokedex);
|
||||
} catch (mappingError) {
|
||||
// Rollback: delete the partially-initialised pokedex to prevent dangling records
|
||||
console.error(
|
||||
`Failed to populate pokedex mappings for pokedex id="${createdPokedexId}" name="${createdPokedexName}":`,
|
||||
`Failed to initialize pokedex id="${createdPokedexId}" name="${createdPokedexName}":`,
|
||||
mappingError
|
||||
);
|
||||
try {
|
||||
|
||||
@@ -4,6 +4,7 @@ import PokedexRepository from '$lib/repositories/PokedexRepository';
|
||||
import { requireAuth } from '$lib/utils/auth';
|
||||
import type { RequestEvent } from '@sveltejs/kit';
|
||||
import { recalculatePokedexMappings } from '$lib/services/PokedexMappingService';
|
||||
import { resolveDexScopes, setPokedexDexScopes } from '$lib/services/PokedexDexScopeService';
|
||||
|
||||
// GET: Get single pokedex by ID
|
||||
export const GET = async (event: RequestEvent) => {
|
||||
@@ -71,12 +72,35 @@ export const PUT = async (event: RequestEvent) => {
|
||||
return json({ error: 'Pokedex not found' }, { status: 404 });
|
||||
}
|
||||
|
||||
const dexScopesProvided = Object.prototype.hasOwnProperty.call(data, 'dexScopes');
|
||||
const requestedDexScopes =
|
||||
dexScopesProvided && Array.isArray(data.dexScopes)
|
||||
? data.dexScopes
|
||||
: existingPokedex.dexScopes || [];
|
||||
|
||||
const resolvedDexScopes = await resolveDexScopes(event.locals.supabase, {
|
||||
...pokedex,
|
||||
dexScopes: requestedDexScopes
|
||||
});
|
||||
pokedex.dexScopes = resolvedDexScopes;
|
||||
|
||||
const existingDexScopes = new Set(existingPokedex.dexScopes || []);
|
||||
const nextDexScopes = new Set(resolvedDexScopes);
|
||||
const dexScopesChanged =
|
||||
existingDexScopes.size !== nextDexScopes.size ||
|
||||
[...existingDexScopes].some((dexId) => !nextDexScopes.has(dexId));
|
||||
|
||||
if (dexScopesChanged) {
|
||||
await setPokedexDexScopes(event.locals.supabase, id, resolvedDexScopes);
|
||||
}
|
||||
|
||||
// Recalculate pokedex_entries_mapping if configuration changed
|
||||
// Only recalculate if isFormDex or gameScope actually changed (these are the only fields that affect mapping)
|
||||
// Only recalculate if isFormDex, gameScope, or dexScopes changed
|
||||
// Compare the persisted result (pokedex) to existingPokedex to catch changes that repo.update may normalize or default
|
||||
const configChanged =
|
||||
pokedex.isFormDex !== existingPokedex.isFormDex ||
|
||||
pokedex.gameScope !== existingPokedex.gameScope;
|
||||
pokedex.gameScope !== existingPokedex.gameScope ||
|
||||
dexScopesChanged;
|
||||
|
||||
if (configChanged) {
|
||||
await recalculatePokedexMappings(event.locals.supabase, id, pokedex);
|
||||
|
||||
@@ -31,7 +31,7 @@ export const GET = async (event: RequestEvent) => {
|
||||
const repo = new CatchRecordRepository(event.locals.supabase, userId, pokedexId);
|
||||
const catchData = await repo.findAll();
|
||||
const sortedData = catchData.sort(
|
||||
(a, b) => Number(a.pokedexEntryId) - Number(b.pokedexEntryId)
|
||||
(a, b) => Number(a.pokemonId) - Number(b.pokemonId)
|
||||
);
|
||||
return json(sortedData);
|
||||
} catch (err) {
|
||||
@@ -99,17 +99,18 @@ export const POST = async (event: RequestEvent) => {
|
||||
}
|
||||
const invalidIndex = body.findIndex((r) => {
|
||||
if (!r || typeof r !== 'object') return true;
|
||||
const entryId = (r as Partial<CatchRecord>).pokedexEntryId;
|
||||
return entryId === undefined || entryId === null || entryId === '';
|
||||
const record = r as Partial<CatchRecord>;
|
||||
const pokemonId = record.pokemonId;
|
||||
return pokemonId === undefined || pokemonId === null || pokemonId === '';
|
||||
});
|
||||
if (invalidIndex !== -1) {
|
||||
return json(
|
||||
{ error: `Record at index ${invalidIndex} is missing required field "pokedexEntryId"` },
|
||||
{ error: `Record at index ${invalidIndex} is missing required field "pokemonId"` },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
const records = body as Array<Partial<CatchRecord> & Pick<CatchRecord, 'pokedexEntryId'>>;
|
||||
const records = body as Array<Partial<CatchRecord> & Pick<CatchRecord, 'pokemonId'>>;
|
||||
|
||||
const { session } = await event.locals.safeGetSession();
|
||||
if (session) {
|
||||
|
||||
@@ -3,6 +3,7 @@ import CombinedDataRepository from '$lib/repositories/CombinedDataRepository';
|
||||
import PokedexRepository from '$lib/repositories/PokedexRepository';
|
||||
import { getOptionalUserId } from '$lib/utils/auth';
|
||||
import type { RequestEvent } from '@sveltejs/kit';
|
||||
import { resolveDexScopes } from '$lib/services/PokedexDexScopeService';
|
||||
|
||||
// GET: Get combined data (pokédex entries + catch records) for specific pokédex
|
||||
export const GET = async (event: RequestEvent) => {
|
||||
@@ -39,6 +40,7 @@ export const GET = async (event: RequestEvent) => {
|
||||
|
||||
// Use pokédex's gameScope as default filter if no manual game filter is set
|
||||
const effectiveGame = game || pokedex.gameScope || '';
|
||||
const dexScopes = await resolveDexScopes(event.locals.supabase, pokedex);
|
||||
|
||||
const repo = new CombinedDataRepository(event.locals.supabase, userId, pokedexId);
|
||||
|
||||
@@ -49,11 +51,12 @@ export const GET = async (event: RequestEvent) => {
|
||||
limit,
|
||||
enableForms,
|
||||
region,
|
||||
effectiveGame
|
||||
effectiveGame,
|
||||
dexScopes
|
||||
);
|
||||
|
||||
// Get total count for pagination
|
||||
const totalCount = await repo.countCombinedData(enableForms, region, effectiveGame);
|
||||
const totalCount = await repo.countCombinedData(enableForms, region, effectiveGame, dexScopes);
|
||||
const totalPages = Math.ceil(totalCount / limit);
|
||||
|
||||
return json({
|
||||
|
||||
@@ -146,11 +146,12 @@
|
||||
|
||||
<!-- Email Input -->
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="forgot-password-email">
|
||||
<span class="label-text font-medium">Email</span>
|
||||
</label>
|
||||
<div class="relative">
|
||||
<input
|
||||
id="forgot-password-email"
|
||||
type="email"
|
||||
placeholder="your@email.com"
|
||||
class="input input-bordered w-full pl-10"
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
isShinyDex: false,
|
||||
isOriginDex: false,
|
||||
isFormDex: false,
|
||||
gameScope: null
|
||||
gameScope: null,
|
||||
dexScopes: []
|
||||
};
|
||||
|
||||
$: mode = editingPokedex ? ('edit' as const) : ('create' as const);
|
||||
@@ -55,7 +56,8 @@
|
||||
isShinyDex: false,
|
||||
isOriginDex: false,
|
||||
isFormDex: false,
|
||||
gameScope: null
|
||||
gameScope: null,
|
||||
dexScopes: []
|
||||
};
|
||||
showModal = true;
|
||||
}
|
||||
@@ -199,6 +201,11 @@
|
||||
</h3>
|
||||
<PokedexForm bind:pokedex={formData} {mode} onSubmit={handleSubmit} onCancel={closeModal} />
|
||||
</div>
|
||||
<div class="modal-backdrop" on:click={closeModal}></div>
|
||||
<button
|
||||
type="button"
|
||||
class="modal-backdrop"
|
||||
aria-label="Close modal"
|
||||
on:click={closeModal}
|
||||
></button>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
function applyOptimisticCatchRecordUpdate(next: CatchRecord) {
|
||||
if (!combinedData) return;
|
||||
const idx = combinedData.findIndex((cd) => cd.pokedexEntry._id === next.pokedexEntryId);
|
||||
const idx = combinedData.findIndex((cd) => cd.pokedexEntry._id === next.pokemonId);
|
||||
if (idx === -1) return;
|
||||
// Replace the catchRecord entry with the updated version.
|
||||
const current = combinedData[idx];
|
||||
@@ -112,7 +112,7 @@
|
||||
};
|
||||
combinedData = [...combinedData.slice(0, idx), patched, ...combinedData.slice(idx + 1)];
|
||||
|
||||
if (selectedPokemon?.pokedexEntry._id === next.pokedexEntryId) {
|
||||
if (selectedPokemon?.pokedexEntry._id === next.pokemonId) {
|
||||
selectedPokemon = patched;
|
||||
}
|
||||
}
|
||||
@@ -207,7 +207,7 @@
|
||||
const baseRecord: CatchRecord = catchRecord ?? {
|
||||
_id: '',
|
||||
userId: localUser?.id || '',
|
||||
pokedexEntryId: pokedexEntry._id,
|
||||
pokemonId: pokedexEntry._id,
|
||||
pokedexId: pokedexId,
|
||||
haveToEvolve: false,
|
||||
caught: false,
|
||||
@@ -281,7 +281,7 @@
|
||||
creatingRecords = true;
|
||||
const newCatchRecords = pokedexEntries.map((entry: PokedexEntry) => ({
|
||||
userId: localUser?.id,
|
||||
pokedexEntryId: entry._id,
|
||||
pokemonId: entry._id,
|
||||
pokedexId: pokedexId,
|
||||
haveToEvolve: false,
|
||||
caught: false,
|
||||
@@ -467,6 +467,11 @@
|
||||
/>
|
||||
</svg>
|
||||
<span class="font-semibold">{pokedex.gameScope}</span>
|
||||
{#if pokedex.dexScopes?.length}
|
||||
<span class="text-xs text-base-content/60">
|
||||
({pokedex.dexScopes.length} dex{pokedex.dexScopes.length === 1 ? '' : 'es'})
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
{:else}
|
||||
<div class="divider divider-horizontal mx-0"></div>
|
||||
|
||||
@@ -174,11 +174,12 @@
|
||||
|
||||
<!-- New Password Input -->
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="reset-password-new">
|
||||
<span class="label-text font-medium">New Password</span>
|
||||
</label>
|
||||
<div class="relative">
|
||||
<input
|
||||
id="reset-password-new"
|
||||
type="password"
|
||||
placeholder="••••••••"
|
||||
class="input input-bordered w-full pl-10"
|
||||
@@ -203,11 +204,12 @@
|
||||
|
||||
<!-- Confirm Password Input -->
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<label class="label" for="reset-password-confirm">
|
||||
<span class="label-text font-medium">Confirm Password</span>
|
||||
</label>
|
||||
<div class="relative">
|
||||
<input
|
||||
id="reset-password-confirm"
|
||||
type="password"
|
||||
placeholder="••••••••"
|
||||
class="input input-bordered w-full pl-10"
|
||||
|
||||
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
@@ -1,112 +0,0 @@
|
||||
CREATE TABLE pokedex_entries (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
"pokedexNumber" INTEGER NOT NULL,
|
||||
pokemon TEXT NOT NULL,
|
||||
form TEXT,
|
||||
"canGigantamax" BOOLEAN DEFAULT FALSE,
|
||||
"regionToCatchIn" TEXT,
|
||||
"gamesToCatchIn" TEXT[],
|
||||
"regionToEvolveIn" TEXT,
|
||||
"evolutionInformation" TEXT,
|
||||
"catchInformation" TEXT[],
|
||||
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Add unique constraint to prevent duplicate pokemon forms
|
||||
ALTER TABLE pokedex_entries ADD CONSTRAINT unique_pokemon_form
|
||||
UNIQUE("pokedexNumber", form);
|
||||
|
||||
CREATE TABLE catch_records (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
"userId" UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
"pokedexEntryId" BIGINT NOT NULL REFERENCES pokedex_entries(id) ON DELETE CASCADE,
|
||||
|
||||
-- Catch status fields
|
||||
"haveToEvolve" BOOLEAN DEFAULT FALSE,
|
||||
caught BOOLEAN DEFAULT FALSE,
|
||||
"inHome" BOOLEAN DEFAULT FALSE,
|
||||
"hasGigantamaxed" BOOLEAN DEFAULT FALSE,
|
||||
"personalNotes" TEXT,
|
||||
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
-- Ensure one record per user per pokemon entry
|
||||
UNIQUE("userId", "pokedexEntryId")
|
||||
);
|
||||
|
||||
CREATE TABLE region_game_mappings (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
region TEXT NOT NULL,
|
||||
game TEXT NOT NULL,
|
||||
UNIQUE(region, game)
|
||||
);
|
||||
|
||||
CREATE TABLE metadata (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
key TEXT UNIQUE NOT NULL,
|
||||
value TEXT,
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Create indexes for better performance
|
||||
CREATE INDEX idx_pokedex_entries_pokedex_number ON pokedex_entries("pokedexNumber");
|
||||
CREATE INDEX idx_pokedex_entries_pokemon ON pokedex_entries(pokemon);
|
||||
|
||||
CREATE INDEX idx_catch_records_user_id ON catch_records("userId");
|
||||
CREATE INDEX idx_catch_records_pokedex_entry_id ON catch_records("pokedexEntryId");
|
||||
CREATE INDEX idx_catch_records_caught ON catch_records(caught);
|
||||
CREATE INDEX idx_catch_records_in_home ON catch_records("inHome");
|
||||
CREATE INDEX idx_catch_records_user_caught ON catch_records("userId", caught);
|
||||
|
||||
-- Function to automatically update updated_at timestamp
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW."updatedAt" = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Create triggers for updated_at
|
||||
CREATE TRIGGER update_pokedex_entries_updated_at
|
||||
BEFORE UPDATE ON pokedex_entries
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_catch_records_updated_at
|
||||
BEFORE UPDATE ON catch_records
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- Enable RLS on all tables
|
||||
ALTER TABLE pokedex_entries ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE catch_records ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE region_game_mappings ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE metadata ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS policies for pokedex_entries (public read)
|
||||
CREATE POLICY "Anyone can view pokemon entries" ON pokedex_entries
|
||||
FOR SELECT USING (true);
|
||||
|
||||
-- RLS policies for catch_records (user-specific)
|
||||
CREATE POLICY "Users can view own catch records" ON catch_records
|
||||
FOR SELECT USING (auth.uid() = "userId");
|
||||
|
||||
CREATE POLICY "Users can insert own catch records" ON catch_records
|
||||
FOR INSERT WITH CHECK (auth.uid() = "userId");
|
||||
|
||||
CREATE POLICY "Users can update own catch records" ON catch_records
|
||||
FOR UPDATE USING (auth.uid() = "userId");
|
||||
|
||||
CREATE POLICY "Users can delete own catch records" ON catch_records
|
||||
FOR DELETE USING (auth.uid() = "userId");
|
||||
|
||||
-- RLS policies for region_game_mappings (public read)
|
||||
CREATE POLICY "Anyone can view region game mappings" ON region_game_mappings
|
||||
FOR SELECT USING (true);
|
||||
|
||||
-- RLS policies for metadata (public read)
|
||||
CREATE POLICY "Anyone can view metadata" ON metadata
|
||||
FOR SELECT USING (true);
|
||||
@@ -1,51 +0,0 @@
|
||||
-- Create pokedexes table
|
||||
CREATE TABLE pokedexes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
"userId" UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
|
||||
-- Type flags (combinable)
|
||||
"isLivingDex" BOOLEAN DEFAULT FALSE,
|
||||
"isShinyDex" BOOLEAN DEFAULT FALSE,
|
||||
"isOriginDex" BOOLEAN DEFAULT FALSE,
|
||||
"isFormDex" BOOLEAN DEFAULT FALSE,
|
||||
|
||||
-- Scope (NULL = all games, or specific game)
|
||||
"gameScope" TEXT,
|
||||
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
-- User can't have duplicate pokédex names
|
||||
UNIQUE("userId", name)
|
||||
);
|
||||
|
||||
-- Create index for performance
|
||||
CREATE INDEX idx_pokedexes_user_id ON pokedexes("userId");
|
||||
|
||||
-- Trigger to automatically update updated_at timestamp
|
||||
CREATE TRIGGER update_pokedexes_updated_at
|
||||
BEFORE UPDATE ON pokedexes
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- Enable RLS
|
||||
ALTER TABLE pokedexes ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS POLICIES - CRITICAL: Users can ONLY access their own pokédexes
|
||||
|
||||
-- Users can ONLY view their own pokédexes
|
||||
CREATE POLICY "Users can view own pokedexes" ON pokedexes
|
||||
FOR SELECT USING (auth.uid() = "userId");
|
||||
|
||||
-- Users can ONLY create pokédexes for themselves
|
||||
CREATE POLICY "Users can create own pokedexes" ON pokedexes
|
||||
FOR INSERT WITH CHECK (auth.uid() = "userId");
|
||||
|
||||
-- Users can ONLY update their own pokédexes
|
||||
CREATE POLICY "Users can update own pokedexes" ON pokedexes
|
||||
FOR UPDATE USING (auth.uid() = "userId");
|
||||
|
||||
-- Users can ONLY delete their own pokédexes
|
||||
CREATE POLICY "Users can delete own pokedexes" ON pokedexes
|
||||
FOR DELETE USING (auth.uid() = "userId");
|
||||
@@ -1,74 +0,0 @@
|
||||
-- Truncate existing catch records (no real users, as confirmed)
|
||||
TRUNCATE TABLE catch_records;
|
||||
|
||||
-- Add pokedexId column
|
||||
ALTER TABLE catch_records
|
||||
ADD COLUMN "pokedexId" UUID REFERENCES pokedexes(id) ON DELETE CASCADE;
|
||||
|
||||
-- Make pokedexId NOT NULL
|
||||
ALTER TABLE catch_records
|
||||
ALTER COLUMN "pokedexId" SET NOT NULL;
|
||||
|
||||
-- Drop old unique constraint (userId, pokedexEntryId)
|
||||
ALTER TABLE catch_records
|
||||
DROP CONSTRAINT IF EXISTS catch_records_userId_pokedexEntryId_key;
|
||||
|
||||
-- Add new unique constraint (userId, pokedexEntryId, pokedexId)
|
||||
ALTER TABLE catch_records
|
||||
ADD CONSTRAINT catch_records_user_pokemon_pokedex_unique
|
||||
UNIQUE("userId", "pokedexEntryId", "pokedexId");
|
||||
|
||||
-- Add index for performance
|
||||
CREATE INDEX idx_catch_records_pokedex_id ON catch_records("pokedexId");
|
||||
|
||||
-- RLS POLICIES - CRITICAL: Users can ONLY access catch records for their own pokédexes
|
||||
|
||||
-- Drop existing RLS policies if they exist
|
||||
DROP POLICY IF EXISTS "Users can view own catch records" ON catch_records;
|
||||
DROP POLICY IF EXISTS "Users can insert own catch records" ON catch_records;
|
||||
DROP POLICY IF EXISTS "Users can update own catch records" ON catch_records;
|
||||
DROP POLICY IF EXISTS "Users can delete own catch records" ON catch_records;
|
||||
|
||||
-- Users can ONLY view catch records for their own pokédexes
|
||||
CREATE POLICY "Users can view own catch records" ON catch_records
|
||||
FOR SELECT USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- Users can ONLY insert catch records for their own pokédexes
|
||||
CREATE POLICY "Users can insert own catch records" ON catch_records
|
||||
FOR INSERT WITH CHECK (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- Users can ONLY update catch records for their own pokédexes
|
||||
CREATE POLICY "Users can update own catch records" ON catch_records
|
||||
FOR UPDATE USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- Users can ONLY delete catch records for their own pokédexes
|
||||
CREATE POLICY "Users can delete own catch records" ON catch_records
|
||||
FOR DELETE USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
@@ -1,21 +0,0 @@
|
||||
-- Create regional_dex_numbers table for generic regional dex number storage
|
||||
-- This table replaces region-specific columns (kanto_dex_number, johto_dex_number, etc.)
|
||||
-- and allows adding new regions without schema changes
|
||||
|
||||
CREATE TABLE IF NOT EXISTS regional_dex_numbers (
|
||||
id SERIAL PRIMARY KEY,
|
||||
pokedex_entry_id INT NOT NULL REFERENCES pokedex_entries(id) ON DELETE CASCADE,
|
||||
region TEXT NOT NULL,
|
||||
dex_number INT NOT NULL,
|
||||
UNIQUE(pokedex_entry_id, region)
|
||||
);
|
||||
|
||||
-- Create indexes for better query performance
|
||||
CREATE INDEX IF NOT EXISTS idx_regional_dex_numbers_region ON regional_dex_numbers(region, dex_number);
|
||||
CREATE INDEX IF NOT EXISTS idx_regional_dex_numbers_entry ON regional_dex_numbers(pokedex_entry_id);
|
||||
|
||||
-- RLS policies (read-only reference data, same pattern as pokedex_entries)
|
||||
ALTER TABLE regional_dex_numbers ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
CREATE POLICY "Allow public read access" ON regional_dex_numbers
|
||||
FOR SELECT USING (true);
|
||||
@@ -1,40 +0,0 @@
|
||||
-- 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();
|
||||
@@ -1,360 +0,0 @@
|
||||
-- Seed Kanto region Pokémon (Gen 1)
|
||||
-- Auto-generated from CSV files
|
||||
|
||||
-- Insert Kanto region-game mappings
|
||||
INSERT INTO region_game_mappings (region, game) VALUES
|
||||
('Kanto', 'Red'),
|
||||
('Kanto', 'Blue'),
|
||||
('Kanto', 'Yellow'),
|
||||
('Kanto', 'LG: Pikachu'),
|
||||
('Kanto', 'LG: Eevee')
|
||||
ON CONFLICT (region, game) DO NOTHING;
|
||||
|
||||
-- Insert Kanto Pokémon entries
|
||||
INSERT INTO pokedex_entries (
|
||||
"pokedexNumber",
|
||||
pokemon,
|
||||
form,
|
||||
"canGigantamax",
|
||||
"regionToCatchIn",
|
||||
"gamesToCatchIn"
|
||||
) VALUES
|
||||
(1, 'Bulbasaur', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(2, 'Ivysaur', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(3, 'Venusaur', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(3, 'Venusaur', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(4, 'Charmander', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(5, 'Charmeleon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(6, 'Charizard', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(7, 'Squirtle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(8, 'Wartortle', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(9, 'Blastoise', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(10, 'Caterpie', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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', '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']),
|
||||
(19, 'Rattata', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(19, 'Rattata', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(20, 'Raticate', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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', '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['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']),
|
||||
(32, 'Nidoran♂', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(33, 'Nidorino', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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['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', '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['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', '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']),
|
||||
(63, 'Abra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(64, 'Kadabra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(64, 'Kadabra', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(65, 'Alakazam', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(65, 'Alakazam', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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['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']),
|
||||
(75, 'Graveler', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(76, 'Golem', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(77, 'Ponyta', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(78, 'Rapidash', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(79, 'Slowpoke', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(80, 'Slowbro', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(81, 'Magnemite', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(82, 'Magneton', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(83, 'Farfetch’d', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(84, 'Doduo', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(84, 'Doduo', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(85, 'Dodrio', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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', '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']),
|
||||
(93, 'Haunter', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(94, 'Gengar', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(95, 'Onix', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(96, 'Drowzee', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(97, 'Hypno', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(97, 'Hypno', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(98, 'Krabby', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(99, 'Kingler', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(100, 'Voltorb', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(101, 'Electrode', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(102, 'Exeggcute', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(103, 'Exeggutor', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(104, 'Cubone', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(105, 'Marowak', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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', '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']),
|
||||
(112, 'Rhydon', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(113, 'Chansey', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(114, 'Tangela', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(115, 'Kangaskhan', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(116, 'Horsea', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(117, 'Seadra', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(118, 'Goldeen', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(118, 'Goldeen', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(119, 'Seaking', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(119, 'Seaking', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(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', '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']),
|
||||
(130, 'Gyarados', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(130, 'Gyarados', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(131, 'Lapras', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(132, 'Ditto', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(133, 'Eevee', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(133, 'Eevee', 'Female', false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(134, 'Vaporeon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(135, 'Jolteon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(136, 'Flareon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(137, 'Porygon', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(138, 'Omanyte', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(139, 'Omastar', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(140, 'Kabuto', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(141, 'Kabutops', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(142, 'Aerodactyl', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(143, 'Snorlax', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(144, 'Articuno', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(145, 'Zapdos', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(146, 'Moltres', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(147, 'Dratini', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(148, 'Dragonair', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(149, 'Dragonite', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(150, 'Mewtwo', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee']),
|
||||
(151, 'Mew', NULL, false, 'Kanto', ARRAY['Red', 'Blue', 'Yellow', 'LG: Pikachu', 'LG: Eevee'])
|
||||
ON CONFLICT ON CONSTRAINT unique_pokemon_form DO NOTHING;
|
||||
|
||||
-- Insert Kanto regional dex numbers
|
||||
INSERT INTO regional_dex_numbers (
|
||||
pokedex_entry_id,
|
||||
region,
|
||||
dex_number
|
||||
) VALUES
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 1 AND form IS NULL), 'Kanto', 1),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 2 AND form IS NULL), 'Kanto', 2),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 3 AND form IS NULL), 'Kanto', 3),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 4 AND form IS NULL), 'Kanto', 4),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 5 AND form IS NULL), 'Kanto', 5),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 6 AND form IS NULL), 'Kanto', 6),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 7 AND form IS NULL), 'Kanto', 7),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 8 AND form IS NULL), 'Kanto', 8),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 9 AND form IS NULL), 'Kanto', 9),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 10 AND form IS NULL), 'Kanto', 10),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 11 AND form IS NULL), 'Kanto', 11),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 12 AND form IS NULL), 'Kanto', 12),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 13 AND form IS NULL), 'Kanto', 13),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 14 AND form IS NULL), 'Kanto', 14),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 15 AND form IS NULL), 'Kanto', 15),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 16 AND form IS NULL), 'Kanto', 16),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 17 AND form IS NULL), 'Kanto', 17),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 18 AND form IS NULL), 'Kanto', 18),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 19 AND form IS NULL), 'Kanto', 19),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 20 AND form IS NULL), 'Kanto', 20),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 21 AND form IS NULL), 'Kanto', 21),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 22 AND form IS NULL), 'Kanto', 22),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 23 AND form IS NULL), 'Kanto', 23),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 24 AND form IS NULL), 'Kanto', 24),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 25 AND form IS NULL), 'Kanto', 25),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 26 AND form IS NULL), 'Kanto', 26),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 27 AND form IS NULL), 'Kanto', 27),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 28 AND form IS NULL), 'Kanto', 28),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 29 AND form IS NULL), 'Kanto', 29),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 30 AND form IS NULL), 'Kanto', 30),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 31 AND form IS NULL), 'Kanto', 31),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 32 AND form IS NULL), 'Kanto', 32),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 33 AND form IS NULL), 'Kanto', 33),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 34 AND form IS NULL), 'Kanto', 34),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 35 AND form IS NULL), 'Kanto', 35),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 36 AND form IS NULL), 'Kanto', 36),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 37 AND form IS NULL), 'Kanto', 37),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 38 AND form IS NULL), 'Kanto', 38),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 39 AND form IS NULL), 'Kanto', 39),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 40 AND form IS NULL), 'Kanto', 40),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 41 AND form IS NULL), 'Kanto', 41),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 42 AND form IS NULL), 'Kanto', 42),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 43 AND form IS NULL), 'Kanto', 43),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 44 AND form IS NULL), 'Kanto', 44),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 45 AND form IS NULL), 'Kanto', 45),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 46 AND form IS NULL), 'Kanto', 46),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 47 AND form IS NULL), 'Kanto', 47),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 48 AND form IS NULL), 'Kanto', 48),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 49 AND form IS NULL), 'Kanto', 49),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 50 AND form IS NULL), 'Kanto', 50),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 51 AND form IS NULL), 'Kanto', 51),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 52 AND form IS NULL), 'Kanto', 52),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 53 AND form IS NULL), 'Kanto', 53),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 54 AND form IS NULL), 'Kanto', 54),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 55 AND form IS NULL), 'Kanto', 55),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 56 AND form IS NULL), 'Kanto', 56),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 57 AND form IS NULL), 'Kanto', 57),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 58 AND form IS NULL), 'Kanto', 58),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 59 AND form IS NULL), 'Kanto', 59),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 60 AND form IS NULL), 'Kanto', 60),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 61 AND form IS NULL), 'Kanto', 61),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 62 AND form IS NULL), 'Kanto', 62),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 63 AND form IS NULL), 'Kanto', 63),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 64 AND form IS NULL), 'Kanto', 64),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 65 AND form IS NULL), 'Kanto', 65),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 66 AND form IS NULL), 'Kanto', 66),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 67 AND form IS NULL), 'Kanto', 67),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 68 AND form IS NULL), 'Kanto', 68),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 69 AND form IS NULL), 'Kanto', 69),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 70 AND form IS NULL), 'Kanto', 70),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 71 AND form IS NULL), 'Kanto', 71),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 72 AND form IS NULL), 'Kanto', 72),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 73 AND form IS NULL), 'Kanto', 73),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 74 AND form IS NULL), 'Kanto', 74),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 75 AND form IS NULL), 'Kanto', 75),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 76 AND form IS NULL), 'Kanto', 76),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 77 AND form IS NULL), 'Kanto', 77),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 78 AND form IS NULL), 'Kanto', 78),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 79 AND form IS NULL), 'Kanto', 79),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 80 AND form IS NULL), 'Kanto', 80),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 81 AND form IS NULL), 'Kanto', 81),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 82 AND form IS NULL), 'Kanto', 82),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 83 AND form IS NULL), 'Kanto', 83),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 84 AND form IS NULL), 'Kanto', 84),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 85 AND form IS NULL), 'Kanto', 85),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 86 AND form IS NULL), 'Kanto', 86),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 87 AND form IS NULL), 'Kanto', 87),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 88 AND form IS NULL), 'Kanto', 88),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 89 AND form IS NULL), 'Kanto', 89),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 90 AND form IS NULL), 'Kanto', 90),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 91 AND form IS NULL), 'Kanto', 91),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 92 AND form IS NULL), 'Kanto', 92),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 93 AND form IS NULL), 'Kanto', 93),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 94 AND form IS NULL), 'Kanto', 94),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 95 AND form IS NULL), 'Kanto', 95),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 96 AND form IS NULL), 'Kanto', 96),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 97 AND form IS NULL), 'Kanto', 97),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 98 AND form IS NULL), 'Kanto', 98),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 99 AND form IS NULL), 'Kanto', 99),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 100 AND form IS NULL), 'Kanto', 100),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 101 AND form IS NULL), 'Kanto', 101),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 102 AND form IS NULL), 'Kanto', 102),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 103 AND form IS NULL), 'Kanto', 103),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 104 AND form IS NULL), 'Kanto', 104),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 105 AND form IS NULL), 'Kanto', 105),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 106 AND form IS NULL), 'Kanto', 106),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 107 AND form IS NULL), 'Kanto', 107),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 108 AND form IS NULL), 'Kanto', 108),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 109 AND form IS NULL), 'Kanto', 109),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 110 AND form IS NULL), 'Kanto', 110),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 111 AND form IS NULL), 'Kanto', 111),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 112 AND form IS NULL), 'Kanto', 112),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 113 AND form IS NULL), 'Kanto', 113),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 114 AND form IS NULL), 'Kanto', 114),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 115 AND form IS NULL), 'Kanto', 115),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 116 AND form IS NULL), 'Kanto', 116),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 117 AND form IS NULL), 'Kanto', 117),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 118 AND form IS NULL), 'Kanto', 118),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 119 AND form IS NULL), 'Kanto', 119),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 120 AND form IS NULL), 'Kanto', 120),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 121 AND form IS NULL), 'Kanto', 121),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 122 AND form IS NULL), 'Kanto', 122),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 123 AND form IS NULL), 'Kanto', 123),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 124 AND form IS NULL), 'Kanto', 124),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 125 AND form IS NULL), 'Kanto', 125),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 126 AND form IS NULL), 'Kanto', 126),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 127 AND form IS NULL), 'Kanto', 127),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 128 AND form IS NULL), 'Kanto', 128),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 129 AND form IS NULL), 'Kanto', 129),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 130 AND form IS NULL), 'Kanto', 130),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 131 AND form IS NULL), 'Kanto', 131),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 132 AND form IS NULL), 'Kanto', 132),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 133 AND form IS NULL), 'Kanto', 133),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 134 AND form IS NULL), 'Kanto', 134),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 135 AND form IS NULL), 'Kanto', 135),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 136 AND form IS NULL), 'Kanto', 136),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 137 AND form IS NULL), 'Kanto', 137),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 138 AND form IS NULL), 'Kanto', 138),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 139 AND form IS NULL), 'Kanto', 139),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 140 AND form IS NULL), 'Kanto', 140),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 141 AND form IS NULL), 'Kanto', 141),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 142 AND form IS NULL), 'Kanto', 142),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 143 AND form IS NULL), 'Kanto', 143),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 144 AND form IS NULL), 'Kanto', 144),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 145 AND form IS NULL), 'Kanto', 145),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 146 AND form IS NULL), 'Kanto', 146),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 147 AND form IS NULL), 'Kanto', 147),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 148 AND form IS NULL), 'Kanto', 148),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 149 AND form IS NULL), 'Kanto', 149),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 150 AND form IS NULL), 'Kanto', 150),
|
||||
((SELECT id FROM pokedex_entries WHERE "pokedexNumber" = 151 AND form IS NULL), 'Kanto', 151);
|
||||
|
||||
-- Add metadata
|
||||
INSERT INTO metadata (key, value) VALUES
|
||||
('kanto_seeded', 'true'),
|
||||
('kanto_seed_date', NOW()::TEXT),
|
||||
('kanto_pokemon_count', '151');
|
||||
@@ -1,284 +0,0 @@
|
||||
-- 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']),
|
||||
(233, 'Porygon2', NULL, 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" = 233 AND form IS NULL), 'Johto', 82),
|
||||
((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', '99');
|
||||
@@ -1,217 +0,0 @@
|
||||
-- Fix catch_records uniqueness for multi-pokédex support.
|
||||
--
|
||||
-- Intended invariant:
|
||||
-- one catch record per (userId, pokedexId, pokedexEntryId)
|
||||
--
|
||||
-- This migration is written to be safe to run even if parts of the schema already exist.
|
||||
|
||||
-- 1) Ensure pokedexId column exists
|
||||
ALTER TABLE public.catch_records
|
||||
ADD COLUMN IF NOT EXISTS "pokedexId" UUID;
|
||||
|
||||
-- 1.5) Guards: fail early with diagnostics if the backfill would be unsafe.
|
||||
--
|
||||
-- Why:
|
||||
-- - The backfill below only updates rows for users that have at least one pokedex.
|
||||
-- If any user has catch_records but no pokedexes, those rows would remain NULL
|
||||
-- and the NOT NULL enforcement would fail.
|
||||
-- - The backfill assigns all NULL pokedexId rows to each user's oldest pokedex.
|
||||
-- That can create duplicate (userId, pokedexId, pokedexEntryId) combinations.
|
||||
--
|
||||
-- If either condition is detected, this migration aborts and prints sample IDs.
|
||||
DO $$
|
||||
DECLARE
|
||||
orphan_user_count bigint;
|
||||
orphan_row_count bigint;
|
||||
orphan_user_samples text;
|
||||
|
||||
dup_group_count bigint;
|
||||
dup_group_samples text;
|
||||
BEGIN
|
||||
-- Guard A: Any catch_records with NULL pokedexId for users who have no pokedexes?
|
||||
WITH orphan_users AS (
|
||||
SELECT cr."userId" AS user_id,
|
||||
COUNT(*)::bigint AS null_row_count
|
||||
FROM public.catch_records cr
|
||||
WHERE cr."pokedexId" IS NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM public.pokedexes p
|
||||
WHERE p."userId" = cr."userId"
|
||||
)
|
||||
GROUP BY cr."userId"
|
||||
)
|
||||
SELECT
|
||||
COUNT(*)::bigint,
|
||||
COALESCE(SUM(null_row_count), 0)::bigint,
|
||||
(
|
||||
SELECT string_agg(user_id::text, ', ' ORDER BY user_id::text)
|
||||
FROM (
|
||||
SELECT user_id, null_row_count
|
||||
FROM orphan_users
|
||||
ORDER BY null_row_count DESC, user_id
|
||||
LIMIT 10
|
||||
) s
|
||||
)
|
||||
INTO orphan_user_count, orphan_row_count, orphan_user_samples
|
||||
FROM orphan_users;
|
||||
|
||||
IF orphan_user_count > 0 THEN
|
||||
RAISE EXCEPTION
|
||||
'USAFE MIGRATION: found % user(s) with % catch_records row(s) where "pokedexId" is NULL but the user has no pokedexes. Sample userId(s): %',
|
||||
orphan_user_count,
|
||||
orphan_row_count,
|
||||
COALESCE(orphan_user_samples, '(none)');
|
||||
END IF;
|
||||
|
||||
-- Guard B: Would assigning NULL pokedexId rows to each user''s oldest pokedex create duplicates?
|
||||
WITH primary_pokedex AS (
|
||||
SELECT DISTINCT ON ("userId") id AS pokedex_id, "userId"
|
||||
FROM public.pokedexes
|
||||
ORDER BY "userId", "createdAt" ASC
|
||||
),
|
||||
projected AS (
|
||||
SELECT
|
||||
cr."userId",
|
||||
COALESCE(cr."pokedexId", pp.pokedex_id) AS projected_pokedex_id,
|
||||
cr."pokedexEntryId"
|
||||
FROM public.catch_records cr
|
||||
LEFT JOIN primary_pokedex pp
|
||||
ON pp."userId" = cr."userId"
|
||||
),
|
||||
dup_groups AS (
|
||||
SELECT
|
||||
"userId",
|
||||
projected_pokedex_id,
|
||||
"pokedexEntryId",
|
||||
COUNT(*)::bigint AS row_count
|
||||
FROM projected
|
||||
WHERE projected_pokedex_id IS NOT NULL
|
||||
GROUP BY "userId", projected_pokedex_id, "pokedexEntryId"
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
SELECT
|
||||
COUNT(*)::bigint,
|
||||
(
|
||||
SELECT string_agg(
|
||||
format(
|
||||
'(userId=%s, pokedexId=%s, pokedexEntryId=%s, rows=%s)',
|
||||
"userId"::text,
|
||||
projected_pokedex_id::text,
|
||||
"pokedexEntryId"::text,
|
||||
row_count::text
|
||||
),
|
||||
E'\n'
|
||||
ORDER BY row_count DESC, "userId"::text
|
||||
)
|
||||
FROM (
|
||||
SELECT * FROM dup_groups
|
||||
ORDER BY row_count DESC, "userId"::text
|
||||
LIMIT 10
|
||||
) s
|
||||
)
|
||||
INTO dup_group_count, dup_group_samples
|
||||
FROM dup_groups;
|
||||
|
||||
IF dup_group_count > 0 THEN
|
||||
RAISE EXCEPTION
|
||||
'USAFE MIGRATION: backfill would create % duplicate (userId, pokedexId, pokedexEntryId) group(s) after projecting NULL "pokedexId" to each user''s oldest pokedex. Sample group(s):\n%',
|
||||
dup_group_count,
|
||||
COALESCE(dup_group_samples, '(none)');
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 2) Best-effort backfill for any NULL pokedexId rows.
|
||||
-- Strategy: assign to the user's oldest pokedex.
|
||||
WITH primary_pokedex AS (
|
||||
SELECT DISTINCT ON ("userId") id AS pokedex_id, "userId"
|
||||
FROM public.pokedexes
|
||||
ORDER BY "userId", "createdAt" ASC
|
||||
)
|
||||
UPDATE public.catch_records cr
|
||||
SET "pokedexId" = pp.pokedex_id
|
||||
FROM primary_pokedex pp
|
||||
WHERE cr."userId" = pp."userId"
|
||||
AND cr."pokedexId" IS NULL;
|
||||
|
||||
-- 3) Enforce NOT NULL + FK
|
||||
ALTER TABLE public.catch_records
|
||||
ALTER COLUMN "pokedexId" SET NOT NULL;
|
||||
|
||||
-- Drop/recreate FK to avoid "already exists" name collisions.
|
||||
ALTER TABLE public.catch_records
|
||||
DROP CONSTRAINT IF EXISTS "catch_records_pokedexId_fkey";
|
||||
|
||||
ALTER TABLE public.catch_records
|
||||
ADD CONSTRAINT "catch_records_pokedexId_fkey"
|
||||
FOREIGN KEY ("pokedexId") REFERENCES public.pokedexes(id) ON DELETE CASCADE;
|
||||
|
||||
-- 4) Replace uniqueness constraint
|
||||
ALTER TABLE public.catch_records
|
||||
DROP CONSTRAINT IF EXISTS "catch_records_userId_pokedexEntryId_key";
|
||||
|
||||
ALTER TABLE public.catch_records
|
||||
DROP CONSTRAINT IF EXISTS "catch_records_user_pokemon_pokedex_unique";
|
||||
|
||||
ALTER TABLE public.catch_records
|
||||
ADD CONSTRAINT "catch_records_user_pokemon_pokedex_unique"
|
||||
UNIQUE ("userId", "pokedexId", "pokedexEntryId");
|
||||
|
||||
-- 5) Helpful index
|
||||
CREATE INDEX IF NOT EXISTS idx_catch_records_pokedex_id ON public.catch_records("pokedexId");
|
||||
|
||||
-- 6) RLS policies (recreate safely)
|
||||
ALTER TABLE public.catch_records ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "Users can view own catch records" ON public.catch_records;
|
||||
DROP POLICY IF EXISTS "Users can insert own catch records" ON public.catch_records;
|
||||
DROP POLICY IF EXISTS "Users can update own catch records" ON public.catch_records;
|
||||
DROP POLICY IF EXISTS "Users can delete own catch records" ON public.catch_records;
|
||||
|
||||
CREATE POLICY "Users can view own catch records" ON public.catch_records
|
||||
FOR SELECT USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.pokedexes
|
||||
WHERE public.pokedexes.id = public.catch_records."pokedexId"
|
||||
AND public.pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
CREATE POLICY "Users can insert own catch records" ON public.catch_records
|
||||
FOR INSERT WITH CHECK (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.pokedexes
|
||||
WHERE public.pokedexes.id = public.catch_records."pokedexId"
|
||||
AND public.pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
CREATE POLICY "Users can update own catch records" ON public.catch_records
|
||||
FOR UPDATE USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.pokedexes
|
||||
WHERE public.pokedexes.id = public.catch_records."pokedexId"
|
||||
AND public.pokedexes."userId" = auth.uid()
|
||||
)
|
||||
)
|
||||
WITH CHECK (
|
||||
auth.uid() = public.catch_records."userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.pokedexes
|
||||
WHERE public.pokedexes.id = public.catch_records."pokedexId"
|
||||
AND public.pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
CREATE POLICY "Users can delete own catch records" ON public.catch_records
|
||||
FOR DELETE USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM public.pokedexes
|
||||
WHERE public.pokedexes.id = public.catch_records."pokedexId"
|
||||
AND public.pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
@@ -1,22 +0,0 @@
|
||||
-- Create stats_cache table to store cached statistics
|
||||
-- This table will be updated once per day to improve performance
|
||||
|
||||
CREATE TABLE stats_cache (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
pokemon_caught BIGINT NOT NULL DEFAULT 0,
|
||||
total_users BIGINT NOT NULL DEFAULT 0,
|
||||
completed_pokedexes BIGINT NOT NULL DEFAULT 0,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Create index for faster lookups
|
||||
CREATE INDEX idx_stats_cache_updated_at ON stats_cache(updated_at DESC);
|
||||
|
||||
-- Enable RLS
|
||||
ALTER TABLE stats_cache ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS policies: Only allow reads (stats are public)
|
||||
CREATE POLICY "Anyone can view stats cache" ON stats_cache
|
||||
FOR SELECT USING (true);
|
||||
|
||||
-- No insert/update/delete policies - only database functions can modify this table
|
||||
@@ -1,53 +0,0 @@
|
||||
-- Create function to calculate and update stats in the cache table
|
||||
-- This function runs the expensive queries and stores the results
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_and_get_stats()
|
||||
RETURNS TABLE (
|
||||
pokemon_caught BIGINT,
|
||||
total_users BIGINT,
|
||||
completed_pokedexes BIGINT,
|
||||
updated_at TIMESTAMPTZ
|
||||
)
|
||||
SECURITY DEFINER
|
||||
SET search_path = public, pg_temp
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_pokemon_caught BIGINT;
|
||||
v_total_users BIGINT;
|
||||
v_completed_pokedexes BIGINT;
|
||||
v_updated_at TIMESTAMPTZ := NOW();
|
||||
BEGIN
|
||||
-- Calculate current stats: count of caught Pokémon
|
||||
SELECT COUNT(*) INTO v_pokemon_caught
|
||||
FROM catch_records
|
||||
WHERE caught = true;
|
||||
|
||||
-- Calculate current stats: count of total users
|
||||
SELECT COUNT(*) INTO v_total_users
|
||||
FROM auth.users;
|
||||
|
||||
-- Calculate current stats: count of completed pokedexes
|
||||
-- A pokedex is completed when all its entries have caught = true
|
||||
SELECT COUNT(*) INTO v_completed_pokedexes
|
||||
FROM (
|
||||
SELECT "pokedexId"
|
||||
FROM catch_records
|
||||
GROUP BY "pokedexId"
|
||||
HAVING COUNT(*) = COUNT(*) FILTER (WHERE caught = true)
|
||||
) completed;
|
||||
|
||||
-- Update cache using UPSERT pattern
|
||||
INSERT INTO stats_cache (id, pokemon_caught, total_users, completed_pokedexes, updated_at)
|
||||
VALUES (1, v_pokemon_caught, v_total_users, v_completed_pokedexes, v_updated_at)
|
||||
ON CONFLICT (id) DO UPDATE
|
||||
SET pokemon_caught = EXCLUDED.pokemon_caught,
|
||||
total_users = EXCLUDED.total_users,
|
||||
completed_pokedexes = EXCLUDED.completed_pokedexes,
|
||||
updated_at = v_updated_at;
|
||||
|
||||
-- Return the stats
|
||||
RETURN QUERY
|
||||
SELECT v_pokemon_caught, v_total_users, v_completed_pokedexes, v_updated_at AS updated_at;
|
||||
END;
|
||||
$$;
|
||||
@@ -1,36 +0,0 @@
|
||||
-- Create function to get public stats with caching
|
||||
-- Returns cached stats if fresh (within 24 hours), otherwise refreshes cache
|
||||
|
||||
CREATE OR REPLACE FUNCTION get_public_stats()
|
||||
RETURNS TABLE (
|
||||
pokemon_caught BIGINT,
|
||||
total_users BIGINT,
|
||||
completed_pokedexes BIGINT,
|
||||
updated_at TIMESTAMPTZ
|
||||
)
|
||||
SECURITY DEFINER
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_cache_exists BOOLEAN;
|
||||
BEGIN
|
||||
-- Check if cache exists and is fresh (within 24 hours)
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM stats_cache
|
||||
WHERE stats_cache.updated_at > NOW() - INTERVAL '24 hours'
|
||||
) INTO v_cache_exists;
|
||||
|
||||
IF v_cache_exists THEN
|
||||
-- Return cached stats
|
||||
RETURN QUERY
|
||||
SELECT sc.pokemon_caught, sc.total_users, sc.completed_pokedexes, sc.updated_at
|
||||
FROM stats_cache sc
|
||||
ORDER BY sc.updated_at DESC
|
||||
LIMIT 1;
|
||||
ELSE
|
||||
-- Cache is stale or doesn't exist, update it
|
||||
RETURN QUERY
|
||||
SELECT * FROM update_and_get_stats();
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
@@ -1,95 +0,0 @@
|
||||
-- Fix ambiguous column reference errors in stats functions.
|
||||
--
|
||||
-- If earlier migrations have already been applied, editing them will not update
|
||||
-- the deployed database. This migration re-defines the functions using
|
||||
-- CREATE OR REPLACE so the corrected definitions take effect.
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_and_get_stats()
|
||||
RETURNS TABLE (
|
||||
pokemon_caught BIGINT,
|
||||
total_users BIGINT,
|
||||
completed_pokedexes BIGINT,
|
||||
updated_at TIMESTAMPTZ
|
||||
)
|
||||
SECURITY DEFINER
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_pokemon_caught BIGINT;
|
||||
v_total_users BIGINT;
|
||||
v_completed_pokedexes BIGINT;
|
||||
v_updated_at TIMESTAMPTZ := NOW();
|
||||
BEGIN
|
||||
-- Calculate current stats: count of caught Pokémon
|
||||
SELECT COUNT(*) INTO v_pokemon_caught
|
||||
FROM catch_records
|
||||
WHERE caught = true;
|
||||
|
||||
-- Calculate current stats: count of total users
|
||||
SELECT COUNT(*) INTO v_total_users
|
||||
FROM auth.users;
|
||||
|
||||
-- Calculate current stats: count of completed pokedexes
|
||||
-- A pokedex is completed when all its expected entries have caught = true
|
||||
-- Join catch_records to pokedex_entries_mapping to validate against explicit expected entries
|
||||
SELECT COUNT(*) INTO v_completed_pokedexes
|
||||
FROM (
|
||||
SELECT cr."pokedexId"
|
||||
FROM catch_records cr
|
||||
INNER JOIN pokedex_entries_mapping pem
|
||||
ON cr."pokedexId" = pem."pokedexId"
|
||||
AND cr."pokedexEntryId" = pem."pokedexEntryId"
|
||||
GROUP BY cr."pokedexId"
|
||||
HAVING COUNT(*) = COUNT(*) FILTER (WHERE cr.caught = true)
|
||||
AND COUNT(*) = (SELECT COUNT(*) FROM pokedex_entries_mapping WHERE "pokedexId" = cr."pokedexId")
|
||||
) completed;
|
||||
|
||||
-- Update cache using UPSERT pattern
|
||||
INSERT INTO stats_cache (id, pokemon_caught, total_users, completed_pokedexes, updated_at)
|
||||
VALUES (1, v_pokemon_caught, v_total_users, v_completed_pokedexes, v_updated_at)
|
||||
ON CONFLICT (id) DO UPDATE
|
||||
SET pokemon_caught = EXCLUDED.pokemon_caught,
|
||||
total_users = EXCLUDED.total_users,
|
||||
completed_pokedexes = EXCLUDED.completed_pokedexes,
|
||||
updated_at = v_updated_at;
|
||||
|
||||
-- Return stats
|
||||
RETURN QUERY
|
||||
SELECT v_pokemon_caught, v_total_users, v_completed_pokedexes, v_updated_at AS updated_at;
|
||||
END;
|
||||
$$;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION get_public_stats()
|
||||
RETURNS TABLE (
|
||||
pokemon_caught BIGINT,
|
||||
total_users BIGINT,
|
||||
completed_pokedexes BIGINT,
|
||||
updated_at TIMESTAMPTZ
|
||||
)
|
||||
SECURITY DEFINER
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_cache_exists BOOLEAN;
|
||||
BEGIN
|
||||
-- Check if cache exists and is fresh (within 24 hours)
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM stats_cache
|
||||
WHERE stats_cache.updated_at > NOW() - INTERVAL '24 hours'
|
||||
) INTO v_cache_exists;
|
||||
|
||||
IF v_cache_exists THEN
|
||||
-- Return cached stats (qualify updated_at to avoid ambiguity with output parameter)
|
||||
RETURN QUERY
|
||||
SELECT sc.pokemon_caught, sc.total_users, sc.completed_pokedexes, sc.updated_at
|
||||
FROM stats_cache sc
|
||||
ORDER BY sc.updated_at DESC
|
||||
LIMIT 1;
|
||||
ELSE
|
||||
-- Cache is stale or doesn't exist, update it
|
||||
RETURN QUERY
|
||||
SELECT * FROM update_and_get_stats();
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
@@ -1,46 +0,0 @@
|
||||
-- Add pokedex_entries_mapping table to explicitly define which entries belong to each pokedex
|
||||
-- This fixes the stats functions ambiguity issue by providing an explicit definition of expected entries
|
||||
|
||||
-- Create pokedex_entries_mapping table
|
||||
CREATE TABLE pokedex_entries_mapping (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
"pokedexId" UUID NOT NULL REFERENCES pokedexes(id) ON DELETE CASCADE,
|
||||
"pokedexEntryId" BIGINT NOT NULL REFERENCES pokedex_entries(id) ON DELETE CASCADE,
|
||||
UNIQUE("pokedexId", "pokedexEntryId")
|
||||
);
|
||||
|
||||
-- Create indexes for performance
|
||||
CREATE INDEX idx_pokedex_entries_mapping_pokedex_id ON pokedex_entries_mapping("pokedexId");
|
||||
CREATE INDEX idx_pokedex_entries_mapping_entry_id ON pokedex_entries_mapping("pokedexEntryId");
|
||||
|
||||
-- Enable RLS
|
||||
ALTER TABLE pokedex_entries_mapping ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS Policies
|
||||
|
||||
-- Public read access (mapping is reference data)
|
||||
CREATE POLICY "Anyone can view pokedex entries mapping"
|
||||
ON pokedex_entries_mapping
|
||||
FOR SELECT USING (true);
|
||||
|
||||
-- Users can only insert mappings for their own pokedexes
|
||||
CREATE POLICY "Users can insert own pokedex mappings"
|
||||
ON pokedex_entries_mapping
|
||||
FOR INSERT WITH CHECK (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_entries_mapping."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
-- Users can only delete mappings for their own pokedexes
|
||||
CREATE POLICY "Users can delete own pokedex mappings"
|
||||
ON pokedex_entries_mapping
|
||||
FOR DELETE USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_entries_mapping."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
@@ -1,24 +0,0 @@
|
||||
-- Populate pokedex_entries_mapping for existing pokedexes
|
||||
-- This is a one-time migration to backfill data for pokedexes created before the mapping table
|
||||
|
||||
-- Insert mappings for all existing pokedexes
|
||||
-- Apply the same filtering logic that the application uses to determine expected entries
|
||||
INSERT INTO pokedex_entries_mapping ("pokedexId", "pokedexEntryId")
|
||||
SELECT
|
||||
p.id AS "pokedexId",
|
||||
pe.id AS "pokedexEntryId"
|
||||
FROM pokedexes p
|
||||
LEFT JOIN region_game_mappings rg ON rg.game = p."gameScope"
|
||||
CROSS JOIN pokedex_entries pe
|
||||
WHERE
|
||||
-- Form filter: if isFormDex is false, only include base forms
|
||||
-- Base forms have form IS NULL, except Unown which has no base form (use 'A')
|
||||
(p."isFormDex" = true OR (pe.form IS NULL OR (pe.pokemon = 'Unown' AND pe.form = 'A')))
|
||||
-- Game scope filter: if gameScope is specified, filter by game
|
||||
AND (p."gameScope" IS NULL OR pe."gamesToCatchIn" @> ARRAY[p."gameScope"]::TEXT[])
|
||||
-- Region filter: only enforce when a mapping exists
|
||||
AND (p."gameScope" IS NULL OR rg.region IS NULL OR pe."regionToCatchIn" = rg.region)
|
||||
ON CONFLICT ("pokedexId", "pokedexEntryId") DO NOTHING;
|
||||
|
||||
-- Add comment to document this migration
|
||||
COMMENT ON TABLE pokedex_entries_mapping IS 'Junction table defining which pokedex_entries belong to each pokedex. Used for accurate stats calculation.';
|
||||
@@ -1,44 +0,0 @@
|
||||
-- Create function to atomically recalculate pokedex entries mapping
|
||||
-- This function replaces the two-step delete+insert process with a single atomic operation
|
||||
-- to prevent orphaned pokedexes if repopulation fails or yields an empty list
|
||||
|
||||
CREATE OR REPLACE FUNCTION recalculate_pokedex_mappings(
|
||||
p_pokedex_id UUID,
|
||||
p_entry_ids BIGINT[]
|
||||
)
|
||||
RETURNS VOID
|
||||
SECURITY DEFINER
|
||||
SET search_path = public, pg_temp
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_user_id UUID;
|
||||
BEGIN
|
||||
-- Validate that entry_ids is not empty to avoid accidental deletion
|
||||
IF p_entry_ids IS NULL OR array_length(p_entry_ids, 1) IS NULL THEN
|
||||
RAISE EXCEPTION 'entry_ids cannot be null or empty';
|
||||
END IF;
|
||||
|
||||
-- Verify that the caller owns the target pokedex
|
||||
SELECT "userId" INTO v_user_id
|
||||
FROM pokedexes
|
||||
WHERE id = p_pokedex_id;
|
||||
|
||||
IF v_user_id IS NULL THEN
|
||||
RAISE EXCEPTION 'pokedex not found';
|
||||
END IF;
|
||||
|
||||
IF auth.uid() IS NULL OR v_user_id IS DISTINCT FROM auth.uid() THEN
|
||||
RAISE EXCEPTION 'not authorized: you do not own this pokedex';
|
||||
END IF;
|
||||
|
||||
-- Delete old mappings and insert new mappings in a single transaction
|
||||
-- This ensures atomicity - either both operations succeed or both fail
|
||||
DELETE FROM pokedex_entries_mapping
|
||||
WHERE "pokedexId" = p_pokedex_id;
|
||||
|
||||
INSERT INTO pokedex_entries_mapping ("pokedexId", "pokedexEntryId")
|
||||
SELECT p_pokedex_id, unnest(p_entry_ids)
|
||||
ON CONFLICT ("pokedexId", "pokedexEntryId") DO NOTHING;
|
||||
END;
|
||||
$$;
|
||||
@@ -1,16 +0,0 @@
|
||||
-- Fix RLS SELECT policy on pokedex_entries_mapping to restrict reads to owning user
|
||||
-- This prevents exposing all user mappings and ensures consistency with INSERT/DELETE policies
|
||||
|
||||
-- Drop the overly permissive public SELECT policy
|
||||
DROP POLICY IF EXISTS "Anyone can view pokedex entries mapping" ON pokedex_entries_mapping;
|
||||
|
||||
-- Create a new SELECT policy that restricts reads to the owning user
|
||||
CREATE POLICY "Users can view own pokedex entries mapping"
|
||||
ON pokedex_entries_mapping
|
||||
FOR SELECT USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_entries_mapping."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,536 @@
|
||||
-- Baseline schema for reference data + user data.
|
||||
-- Replaces legacy migrations; safe to reapply on a fresh database.
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
||||
|
||||
-- Function to automatically update updatedAt timestamp
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW."updatedAt" = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Reference data: regions
|
||||
CREATE TABLE regions (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
"releaseOrder" INTEGER NOT NULL,
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Reference data: games
|
||||
CREATE TABLE games (
|
||||
id TEXT PRIMARY KEY,
|
||||
"displayName" TEXT NOT NULL UNIQUE,
|
||||
"regionId" BIGINT NOT NULL REFERENCES regions(id) ON DELETE RESTRICT,
|
||||
region TEXT NOT NULL,
|
||||
"releaseYear" INTEGER NOT NULL,
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_games_region_id ON games("regionId");
|
||||
CREATE INDEX idx_games_release_year ON games("releaseYear");
|
||||
|
||||
-- Reference data: game dexes (base, DLCs, islands, etc.)
|
||||
CREATE TABLE game_dexes (
|
||||
id TEXT PRIMARY KEY,
|
||||
"gameId" TEXT NOT NULL REFERENCES games(id) ON DELETE CASCADE,
|
||||
"displayName" TEXT NOT NULL,
|
||||
"sortOrder" INTEGER NOT NULL,
|
||||
"isDlc" BOOLEAN DEFAULT FALSE,
|
||||
"parentDexId" TEXT REFERENCES game_dexes(id) ON DELETE SET NULL,
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
UNIQUE ("gameId", "displayName")
|
||||
);
|
||||
|
||||
CREATE INDEX idx_game_dexes_game_id ON game_dexes("gameId");
|
||||
CREATE INDEX idx_game_dexes_sort_order ON game_dexes("sortOrder");
|
||||
|
||||
-- Reference data: pokemon (one row per pokedexNumber + form)
|
||||
CREATE TABLE pokemon (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
"pokedexNumber" INTEGER NOT NULL,
|
||||
pokemon TEXT NOT NULL,
|
||||
form TEXT,
|
||||
"spriteKey" TEXT,
|
||||
"originRegionId" BIGINT NOT NULL REFERENCES regions(id) ON DELETE RESTRICT,
|
||||
"canGigantamax" BOOLEAN DEFAULT FALSE,
|
||||
"regionToEvolveIn" TEXT,
|
||||
"evolutionInformation" TEXT,
|
||||
"catchInformation" TEXT[],
|
||||
notes TEXT,
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX uniq_pokemon_base_form
|
||||
ON pokemon("pokedexNumber")
|
||||
WHERE form IS NULL;
|
||||
|
||||
CREATE UNIQUE INDEX uniq_pokemon_number_form
|
||||
ON pokemon("pokedexNumber", form)
|
||||
WHERE form IS NOT NULL;
|
||||
|
||||
CREATE INDEX idx_pokemon_pokedex_number ON pokemon("pokedexNumber");
|
||||
CREATE INDEX idx_pokemon_name ON pokemon(pokemon);
|
||||
CREATE INDEX idx_pokemon_origin_region_id ON pokemon("originRegionId");
|
||||
|
||||
-- Reference data: pokemon origin games (many-to-many)
|
||||
CREATE TABLE pokemon_origin_games (
|
||||
"pokemonId" BIGINT NOT NULL REFERENCES pokemon(id) ON DELETE CASCADE,
|
||||
"gameId" TEXT NOT NULL REFERENCES games(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY ("pokemonId", "gameId")
|
||||
);
|
||||
|
||||
CREATE INDEX idx_pokemon_origin_games_game_id ON pokemon_origin_games("gameId");
|
||||
|
||||
-- Reference data: per-game pokedex entries (seeded from per-game CSVs)
|
||||
CREATE TABLE game_pokedex_entries (
|
||||
"dexId" TEXT NOT NULL REFERENCES game_dexes(id) ON DELETE CASCADE,
|
||||
"pokemonId" BIGINT NOT NULL REFERENCES pokemon(id) ON DELETE CASCADE,
|
||||
"dexNumber" INTEGER,
|
||||
notes TEXT,
|
||||
PRIMARY KEY ("dexId", "pokemonId")
|
||||
);
|
||||
|
||||
CREATE INDEX idx_game_pokedex_entries_dex_id ON game_pokedex_entries("dexId");
|
||||
CREATE INDEX idx_game_pokedex_entries_pokemon_id ON game_pokedex_entries("pokemonId");
|
||||
|
||||
-- User-owned pokedexes
|
||||
CREATE TABLE pokedexes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
"userId" UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
|
||||
-- Type flags (combinable)
|
||||
"isLivingDex" BOOLEAN DEFAULT FALSE,
|
||||
"isShinyDex" BOOLEAN DEFAULT FALSE,
|
||||
"isOriginDex" BOOLEAN DEFAULT FALSE,
|
||||
"isFormDex" BOOLEAN DEFAULT FALSE,
|
||||
|
||||
-- Scope (NULL = all games, or specific game displayName)
|
||||
"gameScope" TEXT,
|
||||
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
UNIQUE("userId", name)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_pokedexes_user_id ON pokedexes("userId");
|
||||
|
||||
-- Selected dex scopes per user pokedex
|
||||
CREATE TABLE pokedex_dex_scopes (
|
||||
"pokedexId" UUID NOT NULL REFERENCES pokedexes(id) ON DELETE CASCADE,
|
||||
"dexId" TEXT NOT NULL REFERENCES game_dexes(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY ("pokedexId", "dexId")
|
||||
);
|
||||
|
||||
CREATE INDEX idx_pokedex_dex_scopes_pokedex_id ON pokedex_dex_scopes("pokedexId");
|
||||
CREATE INDEX idx_pokedex_dex_scopes_dex_id ON pokedex_dex_scopes("dexId");
|
||||
|
||||
-- User-owned expected entries per pokedex
|
||||
CREATE TABLE pokedex_pokemon_mapping (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
"pokedexId" UUID NOT NULL REFERENCES pokedexes(id) ON DELETE CASCADE,
|
||||
"pokemonId" BIGINT NOT NULL REFERENCES pokemon(id) ON DELETE CASCADE,
|
||||
UNIQUE("pokedexId", "pokemonId")
|
||||
);
|
||||
|
||||
CREATE INDEX idx_pokedex_pokemon_mapping_pokedex_id
|
||||
ON pokedex_pokemon_mapping("pokedexId");
|
||||
CREATE INDEX idx_pokedex_pokemon_mapping_pokemon_id
|
||||
ON pokedex_pokemon_mapping("pokemonId");
|
||||
|
||||
-- User-owned catch records
|
||||
CREATE TABLE catch_records (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
"userId" UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
"pokemonId" BIGINT NOT NULL REFERENCES pokemon(id) ON DELETE CASCADE,
|
||||
"pokedexId" UUID NOT NULL REFERENCES pokedexes(id) ON DELETE CASCADE,
|
||||
|
||||
-- Catch status fields
|
||||
"haveToEvolve" BOOLEAN DEFAULT FALSE,
|
||||
caught BOOLEAN DEFAULT FALSE,
|
||||
"inHome" BOOLEAN DEFAULT FALSE,
|
||||
"hasGigantamaxed" BOOLEAN DEFAULT FALSE,
|
||||
"personalNotes" TEXT,
|
||||
|
||||
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
"updatedAt" TIMESTAMPTZ DEFAULT NOW(),
|
||||
|
||||
UNIQUE("userId", "pokemonId", "pokedexId")
|
||||
);
|
||||
|
||||
CREATE INDEX idx_catch_records_user_id ON catch_records("userId");
|
||||
CREATE INDEX idx_catch_records_pokemon_id ON catch_records("pokemonId");
|
||||
CREATE INDEX idx_catch_records_pokedex_id ON catch_records("pokedexId");
|
||||
CREATE INDEX idx_catch_records_caught ON catch_records(caught);
|
||||
CREATE INDEX idx_catch_records_user_caught ON catch_records("userId", caught);
|
||||
|
||||
-- Cached public stats
|
||||
CREATE TABLE stats_cache (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
pokemon_caught BIGINT NOT NULL DEFAULT 0,
|
||||
total_users BIGINT NOT NULL DEFAULT 0,
|
||||
completed_pokedexes BIGINT NOT NULL DEFAULT 0,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_stats_cache_updated_at ON stats_cache(updated_at DESC);
|
||||
|
||||
-- Triggers for updatedAt
|
||||
CREATE TRIGGER update_regions_updated_at
|
||||
BEFORE UPDATE ON regions
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_games_updated_at
|
||||
BEFORE UPDATE ON games
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_game_dexes_updated_at
|
||||
BEFORE UPDATE ON game_dexes
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_pokemon_updated_at
|
||||
BEFORE UPDATE ON pokemon
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_pokedexes_updated_at
|
||||
BEFORE UPDATE ON pokedexes
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
CREATE TRIGGER update_catch_records_updated_at
|
||||
BEFORE UPDATE ON catch_records
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- RLS policies
|
||||
ALTER TABLE regions ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Regions are publicly readable" ON regions
|
||||
FOR SELECT TO public USING (true);
|
||||
|
||||
ALTER TABLE games ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Games are publicly readable" ON games
|
||||
FOR SELECT TO public USING (true);
|
||||
|
||||
ALTER TABLE game_dexes ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Game dexes are publicly readable" ON game_dexes
|
||||
FOR SELECT TO public USING (true);
|
||||
|
||||
ALTER TABLE pokemon ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Pokemon are publicly readable" ON pokemon
|
||||
FOR SELECT TO public USING (true);
|
||||
|
||||
ALTER TABLE pokemon_origin_games ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Pokemon origin games are publicly readable" ON pokemon_origin_games
|
||||
FOR SELECT TO public USING (true);
|
||||
|
||||
ALTER TABLE game_pokedex_entries ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Game pokedex entries are publicly readable" ON game_pokedex_entries
|
||||
FOR SELECT TO public USING (true);
|
||||
|
||||
ALTER TABLE pokedexes ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Users can view own pokedexes" ON pokedexes
|
||||
FOR SELECT USING (auth.uid() = "userId");
|
||||
CREATE POLICY "Users can create own pokedexes" ON pokedexes
|
||||
FOR INSERT WITH CHECK (auth.uid() = "userId");
|
||||
CREATE POLICY "Users can update own pokedexes" ON pokedexes
|
||||
FOR UPDATE USING (auth.uid() = "userId");
|
||||
CREATE POLICY "Users can delete own pokedexes" ON pokedexes
|
||||
FOR DELETE USING (auth.uid() = "userId");
|
||||
|
||||
ALTER TABLE pokedex_dex_scopes ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Users can view own dex scopes" ON pokedex_dex_scopes
|
||||
FOR SELECT USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_dex_scopes."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
CREATE POLICY "Users can manage own dex scopes" ON pokedex_dex_scopes
|
||||
FOR ALL USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_dex_scopes."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
ALTER TABLE pokedex_pokemon_mapping ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Anyone can view pokedex pokemon mapping"
|
||||
ON pokedex_pokemon_mapping
|
||||
FOR SELECT USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_pokemon_mapping."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
CREATE POLICY "Users can insert own pokedex pokemon mappings"
|
||||
ON pokedex_pokemon_mapping
|
||||
FOR INSERT WITH CHECK (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_pokemon_mapping."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
CREATE POLICY "Users can delete own pokedex pokemon mappings"
|
||||
ON pokedex_pokemon_mapping
|
||||
FOR DELETE USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = pokedex_pokemon_mapping."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
ALTER TABLE catch_records ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Users can view own catch records" ON catch_records
|
||||
FOR SELECT USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
CREATE POLICY "Users can insert own catch records" ON catch_records
|
||||
FOR INSERT WITH CHECK (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
CREATE POLICY "Users can update own catch records" ON catch_records
|
||||
FOR UPDATE USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
CREATE POLICY "Users can delete own catch records" ON catch_records
|
||||
FOR DELETE USING (
|
||||
auth.uid() = "userId" AND
|
||||
EXISTS (
|
||||
SELECT 1 FROM pokedexes
|
||||
WHERE pokedexes.id = catch_records."pokedexId"
|
||||
AND pokedexes."userId" = auth.uid()
|
||||
)
|
||||
);
|
||||
|
||||
ALTER TABLE stats_cache ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Anyone can view stats cache" ON stats_cache
|
||||
FOR SELECT USING (true);
|
||||
|
||||
-- Compatibility view for the app (pokedex_entries)
|
||||
CREATE OR REPLACE VIEW pokedex_entries AS
|
||||
SELECT
|
||||
p.id,
|
||||
p."pokedexNumber",
|
||||
p.pokemon,
|
||||
p.form,
|
||||
p."spriteKey",
|
||||
p."canGigantamax",
|
||||
r.name AS "regionToCatchIn",
|
||||
r."releaseOrder" AS "regionReleaseOrder",
|
||||
COALESCE(
|
||||
ARRAY_AGG(g."displayName" ORDER BY g."displayName") FILTER (WHERE g.id IS NOT NULL),
|
||||
ARRAY[]::TEXT[]
|
||||
) AS "gamesToCatchIn",
|
||||
p."regionToEvolveIn",
|
||||
p."evolutionInformation",
|
||||
p."catchInformation",
|
||||
p."createdAt",
|
||||
p."updatedAt",
|
||||
CASE
|
||||
WHEN p.form IS NULL OR lower(p.form) = 'male' THEN 0
|
||||
WHEN lower(p.form) = 'female' THEN 1
|
||||
WHEN lower(p.form) LIKE '%alolan%'
|
||||
OR lower(p.form) LIKE '%galarian%'
|
||||
OR lower(p.form) LIKE '%hisuian%'
|
||||
OR lower(p.form) LIKE '%paldean%'
|
||||
THEN 2
|
||||
ELSE 3
|
||||
END AS "formSortBucket",
|
||||
CASE
|
||||
WHEN lower(p.form) LIKE '%alolan%'
|
||||
OR lower(p.form) LIKE '%galarian%'
|
||||
OR lower(p.form) LIKE '%hisuian%'
|
||||
OR lower(p.form) LIKE '%paldean%'
|
||||
THEN r."releaseOrder"
|
||||
ELSE 0
|
||||
END AS "formSortRegionOrder",
|
||||
CASE
|
||||
WHEN lower(p.form) LIKE 'female-%' THEN 1
|
||||
ELSE 0
|
||||
END AS "formSortRegionalSub",
|
||||
COALESCE(lower(p.form), '') AS "formSortLabel",
|
||||
CASE
|
||||
WHEN p.pokemon = 'Unown' THEN
|
||||
CASE
|
||||
WHEN p.form = '?' THEN 26
|
||||
WHEN p.form = '!' THEN 27
|
||||
WHEN length(p.form) = 1 AND ascii(upper(p.form)) BETWEEN 65 AND 90 THEN ascii(upper(p.form)) - 65
|
||||
ELSE 28
|
||||
END
|
||||
ELSE 0
|
||||
END AS "unownSortOrder"
|
||||
FROM pokemon p
|
||||
JOIN regions r ON r.id = p."originRegionId"
|
||||
LEFT JOIN pokemon_origin_games pog ON pog."pokemonId" = p.id
|
||||
LEFT JOIN games g ON g.id = pog."gameId"
|
||||
GROUP BY p.id, r.name, r."releaseOrder";
|
||||
|
||||
GRANT SELECT ON pokedex_entries TO anon, authenticated;
|
||||
|
||||
-- Dex-scoped view for ordering and filtering by native dexes
|
||||
CREATE OR REPLACE VIEW game_pokedex_entry_details AS
|
||||
SELECT
|
||||
gpe."dexId",
|
||||
gd."displayName" AS "dexDisplayName",
|
||||
gd."sortOrder" AS "dexSortOrder",
|
||||
gpe."dexNumber",
|
||||
pe.*
|
||||
FROM game_pokedex_entries gpe
|
||||
JOIN game_dexes gd ON gd.id = gpe."dexId"
|
||||
JOIN pokedex_entries pe ON pe.id = gpe."pokemonId";
|
||||
|
||||
GRANT SELECT ON game_pokedex_entry_details TO anon, authenticated;
|
||||
|
||||
-- RPC: recalculate expected mappings for a pokedex
|
||||
CREATE OR REPLACE FUNCTION recalculate_pokedex_mappings(
|
||||
p_pokedex_id UUID,
|
||||
p_entry_ids BIGINT[]
|
||||
)
|
||||
RETURNS VOID
|
||||
SECURITY DEFINER
|
||||
SET search_path = public, pg_temp
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_user_id UUID;
|
||||
BEGIN
|
||||
IF p_entry_ids IS NULL OR array_length(p_entry_ids, 1) IS NULL THEN
|
||||
RAISE EXCEPTION 'entry_ids cannot be null or empty';
|
||||
END IF;
|
||||
|
||||
SELECT "userId" INTO v_user_id
|
||||
FROM pokedexes
|
||||
WHERE id = p_pokedex_id;
|
||||
|
||||
IF v_user_id IS NULL THEN
|
||||
RAISE EXCEPTION 'pokedex not found';
|
||||
END IF;
|
||||
|
||||
IF auth.uid() IS NULL OR v_user_id IS DISTINCT FROM auth.uid() THEN
|
||||
RAISE EXCEPTION 'not authorized: you do not own this pokedex';
|
||||
END IF;
|
||||
|
||||
DELETE FROM pokedex_pokemon_mapping
|
||||
WHERE "pokedexId" = p_pokedex_id;
|
||||
|
||||
INSERT INTO pokedex_pokemon_mapping ("pokedexId", "pokemonId")
|
||||
SELECT p_pokedex_id, unnest(p_entry_ids)
|
||||
ON CONFLICT ("pokedexId", "pokemonId") DO NOTHING;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- RPC: stats cache
|
||||
CREATE OR REPLACE FUNCTION update_and_get_stats()
|
||||
RETURNS TABLE (
|
||||
pokemon_caught BIGINT,
|
||||
total_users BIGINT,
|
||||
completed_pokedexes BIGINT,
|
||||
updated_at TIMESTAMPTZ
|
||||
)
|
||||
SECURITY DEFINER
|
||||
SET search_path = public, pg_temp
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_pokemon_caught BIGINT;
|
||||
v_total_users BIGINT;
|
||||
v_completed_pokedexes BIGINT;
|
||||
v_updated_at TIMESTAMPTZ := NOW();
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_pokemon_caught
|
||||
FROM catch_records
|
||||
WHERE caught = true;
|
||||
|
||||
SELECT COUNT(*) INTO v_total_users
|
||||
FROM auth.users;
|
||||
|
||||
SELECT COUNT(*) INTO v_completed_pokedexes
|
||||
FROM (
|
||||
SELECT cr."pokedexId"
|
||||
FROM catch_records cr
|
||||
INNER JOIN pokedex_pokemon_mapping ppm
|
||||
ON cr."pokedexId" = ppm."pokedexId"
|
||||
AND cr."pokemonId" = ppm."pokemonId"
|
||||
GROUP BY cr."pokedexId"
|
||||
HAVING COUNT(*) = COUNT(*) FILTER (WHERE cr.caught = true)
|
||||
AND COUNT(*) = (
|
||||
SELECT COUNT(*)
|
||||
FROM pokedex_pokemon_mapping
|
||||
WHERE "pokedexId" = cr."pokedexId"
|
||||
)
|
||||
) completed;
|
||||
|
||||
INSERT INTO stats_cache (id, pokemon_caught, total_users, completed_pokedexes, updated_at)
|
||||
VALUES (1, v_pokemon_caught, v_total_users, v_completed_pokedexes, v_updated_at)
|
||||
ON CONFLICT (id) DO UPDATE
|
||||
SET pokemon_caught = EXCLUDED.pokemon_caught,
|
||||
total_users = EXCLUDED.total_users,
|
||||
completed_pokedexes = EXCLUDED.completed_pokedexes,
|
||||
updated_at = v_updated_at;
|
||||
|
||||
RETURN QUERY
|
||||
SELECT v_pokemon_caught, v_total_users, v_completed_pokedexes, v_updated_at AS updated_at;
|
||||
END;
|
||||
$$;
|
||||
REVOKE EXECUTE ON FUNCTION update_and_get_stats() FROM PUBLIC;
|
||||
GRANT EXECUTE ON FUNCTION update_and_get_stats() TO service_role;
|
||||
|
||||
CREATE OR REPLACE FUNCTION get_public_stats()
|
||||
RETURNS TABLE (
|
||||
pokemon_caught BIGINT,
|
||||
total_users BIGINT,
|
||||
completed_pokedexes BIGINT,
|
||||
updated_at TIMESTAMPTZ
|
||||
)
|
||||
SECURITY DEFINER
|
||||
SET search_path = public, pg_temp
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
v_cache_exists BOOLEAN;
|
||||
BEGIN
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM stats_cache
|
||||
WHERE stats_cache.updated_at > NOW() - INTERVAL '24 hours'
|
||||
) INTO v_cache_exists;
|
||||
|
||||
IF v_cache_exists THEN
|
||||
RETURN QUERY
|
||||
SELECT sc.pokemon_caught, sc.total_users, sc.completed_pokedexes, sc.updated_at
|
||||
FROM stats_cache sc
|
||||
ORDER BY sc.updated_at DESC
|
||||
LIMIT 1;
|
||||
ELSE
|
||||
RETURN QUERY
|
||||
SELECT * FROM update_and_get_stats();
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||