@pkmn/engine 0.1.0-dev.00879b8b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +368 -0
  3. package/build/pkg/addon.d.ts +7 -0
  4. package/build/pkg/addon.js +111 -0
  5. package/build/pkg/addon.js.map +1 -0
  6. package/build/pkg/data/ids.json +240 -0
  7. package/build/pkg/data/layout.json +108 -0
  8. package/build/pkg/data/protocol.json +230 -0
  9. package/build/pkg/data.d.ts +91 -0
  10. package/build/pkg/data.js +150 -0
  11. package/build/pkg/data.js.map +1 -0
  12. package/build/pkg/gen1.d.ts +110 -0
  13. package/build/pkg/gen1.js +684 -0
  14. package/build/pkg/gen1.js.map +1 -0
  15. package/build/pkg/index.d.ts +387 -0
  16. package/build/pkg/index.js +122 -0
  17. package/build/pkg/index.js.map +1 -0
  18. package/build/pkg/protocol.d.ts +73 -0
  19. package/build/pkg/protocol.js +473 -0
  20. package/build/pkg/protocol.js.map +1 -0
  21. package/build/test/display.js +400 -0
  22. package/build/test/display.js.map +1 -0
  23. package/build/tools/debug.js +134 -0
  24. package/build/tools/debug.js.map +1 -0
  25. package/build.zig +363 -0
  26. package/package.json +232 -0
  27. package/src/bin/install-pkmn-engine +404 -0
  28. package/src/bin/pkmn-debug +62 -0
  29. package/src/lib/common/battle.zig +17 -0
  30. package/src/lib/common/data.zig +117 -0
  31. package/src/lib/common/debug.zig +74 -0
  32. package/src/lib/common/js.zig +118 -0
  33. package/src/lib/common/optional.zig +67 -0
  34. package/src/lib/common/options.zig +51 -0
  35. package/src/lib/common/protocol.zig +1836 -0
  36. package/src/lib/common/rational.zig +357 -0
  37. package/src/lib/common/rng.zig +243 -0
  38. package/src/lib/common/util.zig +12 -0
  39. package/src/lib/gen1/calc.zig +507 -0
  40. package/src/lib/gen1/chance.zig +1063 -0
  41. package/src/lib/gen1/data/moves.zig +1866 -0
  42. package/src/lib/gen1/data/species.zig +1105 -0
  43. package/src/lib/gen1/data/types.zig +131 -0
  44. package/src/lib/gen1/data.zig +634 -0
  45. package/src/lib/gen1/helpers.zig +866 -0
  46. package/src/lib/gen1/mechanics.zig +3156 -0
  47. package/src/lib/gen2/calc.zig +143 -0
  48. package/src/lib/gen2/chance.zig +1315 -0
  49. package/src/lib/gen2/data/items.zig +230 -0
  50. package/src/lib/gen2/data/moves.zig +2878 -0
  51. package/src/lib/gen2/data/species.zig +1798 -0
  52. package/src/lib/gen2/data/types.zig +226 -0
  53. package/src/lib/gen2/data.zig +463 -0
  54. package/src/lib/gen2/generated.zig +806 -0
  55. package/src/lib/gen2/helpers.zig +249 -0
  56. package/src/lib/gen2/mechanics.zig +3632 -0
  57. package/src/lib/node.zig +131 -0
  58. package/src/lib/pkmn.zig +128 -0
  59. package/src/lib/wasm.zig +13 -0
  60. package/src/test/display/pkmn.html.tmpl +368 -0
@@ -0,0 +1,1798 @@
1
+ //! Code generated by `tools/generate` - manual edits will be overwritten.
2
+
3
+ const std = @import("std");
4
+
5
+ const gen2 = @import("../../gen2/data.zig");
6
+
7
+ const assert = std.debug.assert;
8
+
9
+ const Stats = gen2.Stats;
10
+ const Types = gen2.Types;
11
+
12
+ /// Representation of a Generation II Pokémon species.
13
+ pub const Species = enum(u8) {
14
+ None,
15
+ Bulbasaur,
16
+ Ivysaur,
17
+ Venusaur,
18
+ Charmander,
19
+ Charmeleon,
20
+ Charizard,
21
+ Squirtle,
22
+ Wartortle,
23
+ Blastoise,
24
+ Caterpie,
25
+ Metapod,
26
+ Butterfree,
27
+ Weedle,
28
+ Kakuna,
29
+ Beedrill,
30
+ Pidgey,
31
+ Pidgeotto,
32
+ Pidgeot,
33
+ Rattata,
34
+ Raticate,
35
+ Spearow,
36
+ Fearow,
37
+ Ekans,
38
+ Arbok,
39
+ Pikachu,
40
+ Raichu,
41
+ Sandshrew,
42
+ Sandslash,
43
+ NidoranF,
44
+ Nidorina,
45
+ Nidoqueen,
46
+ NidoranM,
47
+ Nidorino,
48
+ Nidoking,
49
+ Clefairy,
50
+ Clefable,
51
+ Vulpix,
52
+ Ninetales,
53
+ Jigglypuff,
54
+ Wigglytuff,
55
+ Zubat,
56
+ Golbat,
57
+ Oddish,
58
+ Gloom,
59
+ Vileplume,
60
+ Paras,
61
+ Parasect,
62
+ Venonat,
63
+ Venomoth,
64
+ Diglett,
65
+ Dugtrio,
66
+ Meowth,
67
+ Persian,
68
+ Psyduck,
69
+ Golduck,
70
+ Mankey,
71
+ Primeape,
72
+ Growlithe,
73
+ Arcanine,
74
+ Poliwag,
75
+ Poliwhirl,
76
+ Poliwrath,
77
+ Abra,
78
+ Kadabra,
79
+ Alakazam,
80
+ Machop,
81
+ Machoke,
82
+ Machamp,
83
+ Bellsprout,
84
+ Weepinbell,
85
+ Victreebel,
86
+ Tentacool,
87
+ Tentacruel,
88
+ Geodude,
89
+ Graveler,
90
+ Golem,
91
+ Ponyta,
92
+ Rapidash,
93
+ Slowpoke,
94
+ Slowbro,
95
+ Magnemite,
96
+ Magneton,
97
+ Farfetchd,
98
+ Doduo,
99
+ Dodrio,
100
+ Seel,
101
+ Dewgong,
102
+ Grimer,
103
+ Muk,
104
+ Shellder,
105
+ Cloyster,
106
+ Gastly,
107
+ Haunter,
108
+ Gengar,
109
+ Onix,
110
+ Drowzee,
111
+ Hypno,
112
+ Krabby,
113
+ Kingler,
114
+ Voltorb,
115
+ Electrode,
116
+ Exeggcute,
117
+ Exeggutor,
118
+ Cubone,
119
+ Marowak,
120
+ Hitmonlee,
121
+ Hitmonchan,
122
+ Lickitung,
123
+ Koffing,
124
+ Weezing,
125
+ Rhyhorn,
126
+ Rhydon,
127
+ Chansey,
128
+ Tangela,
129
+ Kangaskhan,
130
+ Horsea,
131
+ Seadra,
132
+ Goldeen,
133
+ Seaking,
134
+ Staryu,
135
+ Starmie,
136
+ MrMime,
137
+ Scyther,
138
+ Jynx,
139
+ Electabuzz,
140
+ Magmar,
141
+ Pinsir,
142
+ Tauros,
143
+ Magikarp,
144
+ Gyarados,
145
+ Lapras,
146
+ Ditto,
147
+ Eevee,
148
+ Vaporeon,
149
+ Jolteon,
150
+ Flareon,
151
+ Porygon,
152
+ Omanyte,
153
+ Omastar,
154
+ Kabuto,
155
+ Kabutops,
156
+ Aerodactyl,
157
+ Snorlax,
158
+ Articuno,
159
+ Zapdos,
160
+ Moltres,
161
+ Dratini,
162
+ Dragonair,
163
+ Dragonite,
164
+ Mewtwo,
165
+ Mew,
166
+ Chikorita,
167
+ Bayleef,
168
+ Meganium,
169
+ Cyndaquil,
170
+ Quilava,
171
+ Typhlosion,
172
+ Totodile,
173
+ Croconaw,
174
+ Feraligatr,
175
+ Sentret,
176
+ Furret,
177
+ Hoothoot,
178
+ Noctowl,
179
+ Ledyba,
180
+ Ledian,
181
+ Spinarak,
182
+ Ariados,
183
+ Crobat,
184
+ Chinchou,
185
+ Lanturn,
186
+ Pichu,
187
+ Cleffa,
188
+ Igglybuff,
189
+ Togepi,
190
+ Togetic,
191
+ Natu,
192
+ Xatu,
193
+ Mareep,
194
+ Flaaffy,
195
+ Ampharos,
196
+ Bellossom,
197
+ Marill,
198
+ Azumarill,
199
+ Sudowoodo,
200
+ Politoed,
201
+ Hoppip,
202
+ Skiploom,
203
+ Jumpluff,
204
+ Aipom,
205
+ Sunkern,
206
+ Sunflora,
207
+ Yanma,
208
+ Wooper,
209
+ Quagsire,
210
+ Espeon,
211
+ Umbreon,
212
+ Murkrow,
213
+ Slowking,
214
+ Misdreavus,
215
+ Unown,
216
+ Wobbuffet,
217
+ Girafarig,
218
+ Pineco,
219
+ Forretress,
220
+ Dunsparce,
221
+ Gligar,
222
+ Steelix,
223
+ Snubbull,
224
+ Granbull,
225
+ Qwilfish,
226
+ Scizor,
227
+ Shuckle,
228
+ Heracross,
229
+ Sneasel,
230
+ Teddiursa,
231
+ Ursaring,
232
+ Slugma,
233
+ Magcargo,
234
+ Swinub,
235
+ Piloswine,
236
+ Corsola,
237
+ Remoraid,
238
+ Octillery,
239
+ Delibird,
240
+ Mantine,
241
+ Skarmory,
242
+ Houndour,
243
+ Houndoom,
244
+ Kingdra,
245
+ Phanpy,
246
+ Donphan,
247
+ Porygon2,
248
+ Stantler,
249
+ Smeargle,
250
+ Tyrogue,
251
+ Hitmontop,
252
+ Smoochum,
253
+ Elekid,
254
+ Magby,
255
+ Miltank,
256
+ Blissey,
257
+ Raikou,
258
+ Entei,
259
+ Suicune,
260
+ Larvitar,
261
+ Pupitar,
262
+ Tyranitar,
263
+ Lugia,
264
+ HoOh,
265
+ Celebi,
266
+
267
+ /// Data associated with a Pokémon species.
268
+ pub const Data = struct {
269
+ /// The base stats of the Pokémon species.
270
+ stats: Stats(u8),
271
+ /// The typing of the Pokémon species.
272
+ types: Types,
273
+ /// The gender ratio of the Pokémon species.
274
+ ratio: u8,
275
+ };
276
+
277
+ const DATA = [_]Data{
278
+ // Bulbasaur
279
+ .{
280
+ .stats = .{ .hp = 45, .atk = 49, .def = 49, .spe = 45, .spa = 65, .spd = 65 },
281
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
282
+ .ratio = 0x1F, // 12.5% F
283
+ },
284
+ // Ivysaur
285
+ .{
286
+ .stats = .{ .hp = 60, .atk = 62, .def = 63, .spe = 60, .spa = 80, .spd = 80 },
287
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
288
+ .ratio = 0x1F, // 12.5% F
289
+ },
290
+ // Venusaur
291
+ .{
292
+ .stats = .{ .hp = 80, .atk = 82, .def = 83, .spe = 80, .spa = 100, .spd = 100 },
293
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
294
+ .ratio = 0x1F, // 12.5% F
295
+ },
296
+ // Charmander
297
+ .{
298
+ .stats = .{ .hp = 39, .atk = 52, .def = 43, .spe = 65, .spa = 60, .spd = 50 },
299
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
300
+ .ratio = 0x1F, // 12.5% F
301
+ },
302
+ // Charmeleon
303
+ .{
304
+ .stats = .{ .hp = 58, .atk = 64, .def = 58, .spe = 80, .spa = 80, .spd = 65 },
305
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
306
+ .ratio = 0x1F, // 12.5% F
307
+ },
308
+ // Charizard
309
+ .{
310
+ .stats = .{ .hp = 78, .atk = 84, .def = 78, .spe = 100, .spa = 109, .spd = 85 },
311
+ .types = .{ .type1 = .Fire, .type2 = .Flying },
312
+ .ratio = 0x1F, // 12.5% F
313
+ },
314
+ // Squirtle
315
+ .{
316
+ .stats = .{ .hp = 44, .atk = 48, .def = 65, .spe = 43, .spa = 50, .spd = 64 },
317
+ .types = .{ .type1 = .Water, .type2 = .Water },
318
+ .ratio = 0x1F, // 12.5% F
319
+ },
320
+ // Wartortle
321
+ .{
322
+ .stats = .{ .hp = 59, .atk = 63, .def = 80, .spe = 58, .spa = 65, .spd = 80 },
323
+ .types = .{ .type1 = .Water, .type2 = .Water },
324
+ .ratio = 0x1F, // 12.5% F
325
+ },
326
+ // Blastoise
327
+ .{
328
+ .stats = .{ .hp = 79, .atk = 83, .def = 100, .spe = 78, .spa = 85, .spd = 105 },
329
+ .types = .{ .type1 = .Water, .type2 = .Water },
330
+ .ratio = 0x1F, // 12.5% F
331
+ },
332
+ // Caterpie
333
+ .{
334
+ .stats = .{ .hp = 45, .atk = 30, .def = 35, .spe = 45, .spa = 20, .spd = 20 },
335
+ .types = .{ .type1 = .Bug, .type2 = .Bug },
336
+ .ratio = 0x7F, // 50.0% F
337
+ },
338
+ // Metapod
339
+ .{
340
+ .stats = .{ .hp = 50, .atk = 20, .def = 55, .spe = 30, .spa = 25, .spd = 25 },
341
+ .types = .{ .type1 = .Bug, .type2 = .Bug },
342
+ .ratio = 0x7F, // 50.0% F
343
+ },
344
+ // Butterfree
345
+ .{
346
+ .stats = .{ .hp = 60, .atk = 45, .def = 50, .spe = 70, .spa = 80, .spd = 80 },
347
+ .types = .{ .type1 = .Bug, .type2 = .Flying },
348
+ .ratio = 0x7F, // 50.0% F
349
+ },
350
+ // Weedle
351
+ .{
352
+ .stats = .{ .hp = 40, .atk = 35, .def = 30, .spe = 50, .spa = 20, .spd = 20 },
353
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
354
+ .ratio = 0x7F, // 50.0% F
355
+ },
356
+ // Kakuna
357
+ .{
358
+ .stats = .{ .hp = 45, .atk = 25, .def = 50, .spe = 35, .spa = 25, .spd = 25 },
359
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
360
+ .ratio = 0x7F, // 50.0% F
361
+ },
362
+ // Beedrill
363
+ .{
364
+ .stats = .{ .hp = 65, .atk = 80, .def = 40, .spe = 75, .spa = 45, .spd = 80 },
365
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
366
+ .ratio = 0x7F, // 50.0% F
367
+ },
368
+ // Pidgey
369
+ .{
370
+ .stats = .{ .hp = 40, .atk = 45, .def = 40, .spe = 56, .spa = 35, .spd = 35 },
371
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
372
+ .ratio = 0x7F, // 50.0% F
373
+ },
374
+ // Pidgeotto
375
+ .{
376
+ .stats = .{ .hp = 63, .atk = 60, .def = 55, .spe = 71, .spa = 50, .spd = 50 },
377
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
378
+ .ratio = 0x7F, // 50.0% F
379
+ },
380
+ // Pidgeot
381
+ .{
382
+ .stats = .{ .hp = 83, .atk = 80, .def = 75, .spe = 91, .spa = 70, .spd = 70 },
383
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
384
+ .ratio = 0x7F, // 50.0% F
385
+ },
386
+ // Rattata
387
+ .{
388
+ .stats = .{ .hp = 30, .atk = 56, .def = 35, .spe = 72, .spa = 25, .spd = 35 },
389
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
390
+ .ratio = 0x7F, // 50.0% F
391
+ },
392
+ // Raticate
393
+ .{
394
+ .stats = .{ .hp = 55, .atk = 81, .def = 60, .spe = 97, .spa = 50, .spd = 70 },
395
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
396
+ .ratio = 0x7F, // 50.0% F
397
+ },
398
+ // Spearow
399
+ .{
400
+ .stats = .{ .hp = 40, .atk = 60, .def = 30, .spe = 70, .spa = 31, .spd = 31 },
401
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
402
+ .ratio = 0x7F, // 50.0% F
403
+ },
404
+ // Fearow
405
+ .{
406
+ .stats = .{ .hp = 65, .atk = 90, .def = 65, .spe = 100, .spa = 61, .spd = 61 },
407
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
408
+ .ratio = 0x7F, // 50.0% F
409
+ },
410
+ // Ekans
411
+ .{
412
+ .stats = .{ .hp = 35, .atk = 60, .def = 44, .spe = 55, .spa = 40, .spd = 54 },
413
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
414
+ .ratio = 0x7F, // 50.0% F
415
+ },
416
+ // Arbok
417
+ .{
418
+ .stats = .{ .hp = 60, .atk = 85, .def = 69, .spe = 80, .spa = 65, .spd = 79 },
419
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
420
+ .ratio = 0x7F, // 50.0% F
421
+ },
422
+ // Pikachu
423
+ .{
424
+ .stats = .{ .hp = 35, .atk = 55, .def = 30, .spe = 90, .spa = 50, .spd = 40 },
425
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
426
+ .ratio = 0x7F, // 50.0% F
427
+ },
428
+ // Raichu
429
+ .{
430
+ .stats = .{ .hp = 60, .atk = 90, .def = 55, .spe = 100, .spa = 90, .spd = 80 },
431
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
432
+ .ratio = 0x7F, // 50.0% F
433
+ },
434
+ // Sandshrew
435
+ .{
436
+ .stats = .{ .hp = 50, .atk = 75, .def = 85, .spe = 40, .spa = 20, .spd = 30 },
437
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
438
+ .ratio = 0x7F, // 50.0% F
439
+ },
440
+ // Sandslash
441
+ .{
442
+ .stats = .{ .hp = 75, .atk = 100, .def = 110, .spe = 65, .spa = 45, .spd = 55 },
443
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
444
+ .ratio = 0x7F, // 50.0% F
445
+ },
446
+ // NidoranF
447
+ .{
448
+ .stats = .{ .hp = 55, .atk = 47, .def = 52, .spe = 41, .spa = 40, .spd = 40 },
449
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
450
+ .ratio = 0xFE, // 100% F
451
+ },
452
+ // Nidorina
453
+ .{
454
+ .stats = .{ .hp = 70, .atk = 62, .def = 67, .spe = 56, .spa = 55, .spd = 55 },
455
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
456
+ .ratio = 0xFE, // 100% F
457
+ },
458
+ // Nidoqueen
459
+ .{
460
+ .stats = .{ .hp = 90, .atk = 82, .def = 87, .spe = 76, .spa = 75, .spd = 85 },
461
+ .types = .{ .type1 = .Poison, .type2 = .Ground },
462
+ .ratio = 0xFE, // 100% F
463
+ },
464
+ // NidoranM
465
+ .{
466
+ .stats = .{ .hp = 46, .atk = 57, .def = 40, .spe = 50, .spa = 40, .spd = 40 },
467
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
468
+ .ratio = 0x00, // 0.00% F
469
+ },
470
+ // Nidorino
471
+ .{
472
+ .stats = .{ .hp = 61, .atk = 72, .def = 57, .spe = 65, .spa = 55, .spd = 55 },
473
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
474
+ .ratio = 0x00, // 0.00% F
475
+ },
476
+ // Nidoking
477
+ .{
478
+ .stats = .{ .hp = 81, .atk = 92, .def = 77, .spe = 85, .spa = 85, .spd = 75 },
479
+ .types = .{ .type1 = .Poison, .type2 = .Ground },
480
+ .ratio = 0x00, // 0.00% F
481
+ },
482
+ // Clefairy
483
+ .{
484
+ .stats = .{ .hp = 70, .atk = 45, .def = 48, .spe = 35, .spa = 60, .spd = 65 },
485
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
486
+ .ratio = 0xBF, // 75.0% F
487
+ },
488
+ // Clefable
489
+ .{
490
+ .stats = .{ .hp = 95, .atk = 70, .def = 73, .spe = 60, .spa = 85, .spd = 90 },
491
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
492
+ .ratio = 0xBF, // 75.0% F
493
+ },
494
+ // Vulpix
495
+ .{
496
+ .stats = .{ .hp = 38, .atk = 41, .def = 40, .spe = 65, .spa = 50, .spd = 65 },
497
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
498
+ .ratio = 0xBF, // 75.0% F
499
+ },
500
+ // Ninetales
501
+ .{
502
+ .stats = .{ .hp = 73, .atk = 76, .def = 75, .spe = 100, .spa = 81, .spd = 100 },
503
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
504
+ .ratio = 0xBF, // 75.0% F
505
+ },
506
+ // Jigglypuff
507
+ .{
508
+ .stats = .{ .hp = 115, .atk = 45, .def = 20, .spe = 20, .spa = 45, .spd = 25 },
509
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
510
+ .ratio = 0xBF, // 75.0% F
511
+ },
512
+ // Wigglytuff
513
+ .{
514
+ .stats = .{ .hp = 140, .atk = 70, .def = 45, .spe = 45, .spa = 75, .spd = 50 },
515
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
516
+ .ratio = 0xBF, // 75.0% F
517
+ },
518
+ // Zubat
519
+ .{
520
+ .stats = .{ .hp = 40, .atk = 45, .def = 35, .spe = 55, .spa = 30, .spd = 40 },
521
+ .types = .{ .type1 = .Poison, .type2 = .Flying },
522
+ .ratio = 0x7F, // 50.0% F
523
+ },
524
+ // Golbat
525
+ .{
526
+ .stats = .{ .hp = 75, .atk = 80, .def = 70, .spe = 90, .spa = 65, .spd = 75 },
527
+ .types = .{ .type1 = .Poison, .type2 = .Flying },
528
+ .ratio = 0x7F, // 50.0% F
529
+ },
530
+ // Oddish
531
+ .{
532
+ .stats = .{ .hp = 45, .atk = 50, .def = 55, .spe = 30, .spa = 75, .spd = 65 },
533
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
534
+ .ratio = 0x7F, // 50.0% F
535
+ },
536
+ // Gloom
537
+ .{
538
+ .stats = .{ .hp = 60, .atk = 65, .def = 70, .spe = 40, .spa = 85, .spd = 75 },
539
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
540
+ .ratio = 0x7F, // 50.0% F
541
+ },
542
+ // Vileplume
543
+ .{
544
+ .stats = .{ .hp = 75, .atk = 80, .def = 85, .spe = 50, .spa = 100, .spd = 90 },
545
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
546
+ .ratio = 0x7F, // 50.0% F
547
+ },
548
+ // Paras
549
+ .{
550
+ .stats = .{ .hp = 35, .atk = 70, .def = 55, .spe = 25, .spa = 45, .spd = 55 },
551
+ .types = .{ .type1 = .Bug, .type2 = .Grass },
552
+ .ratio = 0x7F, // 50.0% F
553
+ },
554
+ // Parasect
555
+ .{
556
+ .stats = .{ .hp = 60, .atk = 95, .def = 80, .spe = 30, .spa = 60, .spd = 80 },
557
+ .types = .{ .type1 = .Bug, .type2 = .Grass },
558
+ .ratio = 0x7F, // 50.0% F
559
+ },
560
+ // Venonat
561
+ .{
562
+ .stats = .{ .hp = 60, .atk = 55, .def = 50, .spe = 45, .spa = 40, .spd = 55 },
563
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
564
+ .ratio = 0x7F, // 50.0% F
565
+ },
566
+ // Venomoth
567
+ .{
568
+ .stats = .{ .hp = 70, .atk = 65, .def = 60, .spe = 90, .spa = 90, .spd = 75 },
569
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
570
+ .ratio = 0x7F, // 50.0% F
571
+ },
572
+ // Diglett
573
+ .{
574
+ .stats = .{ .hp = 10, .atk = 55, .def = 25, .spe = 95, .spa = 35, .spd = 45 },
575
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
576
+ .ratio = 0x7F, // 50.0% F
577
+ },
578
+ // Dugtrio
579
+ .{
580
+ .stats = .{ .hp = 35, .atk = 80, .def = 50, .spe = 120, .spa = 50, .spd = 70 },
581
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
582
+ .ratio = 0x7F, // 50.0% F
583
+ },
584
+ // Meowth
585
+ .{
586
+ .stats = .{ .hp = 40, .atk = 45, .def = 35, .spe = 90, .spa = 40, .spd = 40 },
587
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
588
+ .ratio = 0x7F, // 50.0% F
589
+ },
590
+ // Persian
591
+ .{
592
+ .stats = .{ .hp = 65, .atk = 70, .def = 60, .spe = 115, .spa = 65, .spd = 65 },
593
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
594
+ .ratio = 0x7F, // 50.0% F
595
+ },
596
+ // Psyduck
597
+ .{
598
+ .stats = .{ .hp = 50, .atk = 52, .def = 48, .spe = 55, .spa = 65, .spd = 50 },
599
+ .types = .{ .type1 = .Water, .type2 = .Water },
600
+ .ratio = 0x7F, // 50.0% F
601
+ },
602
+ // Golduck
603
+ .{
604
+ .stats = .{ .hp = 80, .atk = 82, .def = 78, .spe = 85, .spa = 95, .spd = 80 },
605
+ .types = .{ .type1 = .Water, .type2 = .Water },
606
+ .ratio = 0x7F, // 50.0% F
607
+ },
608
+ // Mankey
609
+ .{
610
+ .stats = .{ .hp = 40, .atk = 80, .def = 35, .spe = 70, .spa = 35, .spd = 45 },
611
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
612
+ .ratio = 0x7F, // 50.0% F
613
+ },
614
+ // Primeape
615
+ .{
616
+ .stats = .{ .hp = 65, .atk = 105, .def = 60, .spe = 95, .spa = 60, .spd = 70 },
617
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
618
+ .ratio = 0x7F, // 50.0% F
619
+ },
620
+ // Growlithe
621
+ .{
622
+ .stats = .{ .hp = 55, .atk = 70, .def = 45, .spe = 60, .spa = 70, .spd = 50 },
623
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
624
+ .ratio = 0x3F, // 25.0% F
625
+ },
626
+ // Arcanine
627
+ .{
628
+ .stats = .{ .hp = 90, .atk = 110, .def = 80, .spe = 95, .spa = 100, .spd = 80 },
629
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
630
+ .ratio = 0x3F, // 25.0% F
631
+ },
632
+ // Poliwag
633
+ .{
634
+ .stats = .{ .hp = 40, .atk = 50, .def = 40, .spe = 90, .spa = 40, .spd = 40 },
635
+ .types = .{ .type1 = .Water, .type2 = .Water },
636
+ .ratio = 0x7F, // 50.0% F
637
+ },
638
+ // Poliwhirl
639
+ .{
640
+ .stats = .{ .hp = 65, .atk = 65, .def = 65, .spe = 90, .spa = 50, .spd = 50 },
641
+ .types = .{ .type1 = .Water, .type2 = .Water },
642
+ .ratio = 0x7F, // 50.0% F
643
+ },
644
+ // Poliwrath
645
+ .{
646
+ .stats = .{ .hp = 90, .atk = 85, .def = 95, .spe = 70, .spa = 70, .spd = 90 },
647
+ .types = .{ .type1 = .Water, .type2 = .Fighting },
648
+ .ratio = 0x7F, // 50.0% F
649
+ },
650
+ // Abra
651
+ .{
652
+ .stats = .{ .hp = 25, .atk = 20, .def = 15, .spe = 90, .spa = 105, .spd = 55 },
653
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
654
+ .ratio = 0x3F, // 25.0% F
655
+ },
656
+ // Kadabra
657
+ .{
658
+ .stats = .{ .hp = 40, .atk = 35, .def = 30, .spe = 105, .spa = 120, .spd = 70 },
659
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
660
+ .ratio = 0x3F, // 25.0% F
661
+ },
662
+ // Alakazam
663
+ .{
664
+ .stats = .{ .hp = 55, .atk = 50, .def = 45, .spe = 120, .spa = 135, .spd = 85 },
665
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
666
+ .ratio = 0x3F, // 25.0% F
667
+ },
668
+ // Machop
669
+ .{
670
+ .stats = .{ .hp = 70, .atk = 80, .def = 50, .spe = 35, .spa = 35, .spd = 35 },
671
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
672
+ .ratio = 0x3F, // 25.0% F
673
+ },
674
+ // Machoke
675
+ .{
676
+ .stats = .{ .hp = 80, .atk = 100, .def = 70, .spe = 45, .spa = 50, .spd = 60 },
677
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
678
+ .ratio = 0x3F, // 25.0% F
679
+ },
680
+ // Machamp
681
+ .{
682
+ .stats = .{ .hp = 90, .atk = 130, .def = 80, .spe = 55, .spa = 65, .spd = 85 },
683
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
684
+ .ratio = 0x3F, // 25.0% F
685
+ },
686
+ // Bellsprout
687
+ .{
688
+ .stats = .{ .hp = 50, .atk = 75, .def = 35, .spe = 40, .spa = 70, .spd = 30 },
689
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
690
+ .ratio = 0x7F, // 50.0% F
691
+ },
692
+ // Weepinbell
693
+ .{
694
+ .stats = .{ .hp = 65, .atk = 90, .def = 50, .spe = 55, .spa = 85, .spd = 45 },
695
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
696
+ .ratio = 0x7F, // 50.0% F
697
+ },
698
+ // Victreebel
699
+ .{
700
+ .stats = .{ .hp = 80, .atk = 105, .def = 65, .spe = 70, .spa = 100, .spd = 60 },
701
+ .types = .{ .type1 = .Grass, .type2 = .Poison },
702
+ .ratio = 0x7F, // 50.0% F
703
+ },
704
+ // Tentacool
705
+ .{
706
+ .stats = .{ .hp = 40, .atk = 40, .def = 35, .spe = 70, .spa = 50, .spd = 100 },
707
+ .types = .{ .type1 = .Water, .type2 = .Poison },
708
+ .ratio = 0x7F, // 50.0% F
709
+ },
710
+ // Tentacruel
711
+ .{
712
+ .stats = .{ .hp = 80, .atk = 70, .def = 65, .spe = 100, .spa = 80, .spd = 120 },
713
+ .types = .{ .type1 = .Water, .type2 = .Poison },
714
+ .ratio = 0x7F, // 50.0% F
715
+ },
716
+ // Geodude
717
+ .{
718
+ .stats = .{ .hp = 40, .atk = 80, .def = 100, .spe = 20, .spa = 30, .spd = 30 },
719
+ .types = .{ .type1 = .Rock, .type2 = .Ground },
720
+ .ratio = 0x7F, // 50.0% F
721
+ },
722
+ // Graveler
723
+ .{
724
+ .stats = .{ .hp = 55, .atk = 95, .def = 115, .spe = 35, .spa = 45, .spd = 45 },
725
+ .types = .{ .type1 = .Rock, .type2 = .Ground },
726
+ .ratio = 0x7F, // 50.0% F
727
+ },
728
+ // Golem
729
+ .{
730
+ .stats = .{ .hp = 80, .atk = 110, .def = 130, .spe = 45, .spa = 55, .spd = 65 },
731
+ .types = .{ .type1 = .Rock, .type2 = .Ground },
732
+ .ratio = 0x7F, // 50.0% F
733
+ },
734
+ // Ponyta
735
+ .{
736
+ .stats = .{ .hp = 50, .atk = 85, .def = 55, .spe = 90, .spa = 65, .spd = 65 },
737
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
738
+ .ratio = 0x7F, // 50.0% F
739
+ },
740
+ // Rapidash
741
+ .{
742
+ .stats = .{ .hp = 65, .atk = 100, .def = 70, .spe = 105, .spa = 80, .spd = 80 },
743
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
744
+ .ratio = 0x7F, // 50.0% F
745
+ },
746
+ // Slowpoke
747
+ .{
748
+ .stats = .{ .hp = 90, .atk = 65, .def = 65, .spe = 15, .spa = 40, .spd = 40 },
749
+ .types = .{ .type1 = .Water, .type2 = .Psychic },
750
+ .ratio = 0x7F, // 50.0% F
751
+ },
752
+ // Slowbro
753
+ .{
754
+ .stats = .{ .hp = 95, .atk = 75, .def = 110, .spe = 30, .spa = 100, .spd = 80 },
755
+ .types = .{ .type1 = .Water, .type2 = .Psychic },
756
+ .ratio = 0x7F, // 50.0% F
757
+ },
758
+ // Magnemite
759
+ .{
760
+ .stats = .{ .hp = 25, .atk = 35, .def = 70, .spe = 45, .spa = 95, .spd = 55 },
761
+ .types = .{ .type1 = .Electric, .type2 = .Steel },
762
+ .ratio = 0xFF, // N
763
+ },
764
+ // Magneton
765
+ .{
766
+ .stats = .{ .hp = 50, .atk = 60, .def = 95, .spe = 70, .spa = 120, .spd = 70 },
767
+ .types = .{ .type1 = .Electric, .type2 = .Steel },
768
+ .ratio = 0xFF, // N
769
+ },
770
+ // Farfetchd
771
+ .{
772
+ .stats = .{ .hp = 52, .atk = 65, .def = 55, .spe = 60, .spa = 58, .spd = 62 },
773
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
774
+ .ratio = 0x7F, // 50.0% F
775
+ },
776
+ // Doduo
777
+ .{
778
+ .stats = .{ .hp = 35, .atk = 85, .def = 45, .spe = 75, .spa = 35, .spd = 35 },
779
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
780
+ .ratio = 0x7F, // 50.0% F
781
+ },
782
+ // Dodrio
783
+ .{
784
+ .stats = .{ .hp = 60, .atk = 110, .def = 70, .spe = 100, .spa = 60, .spd = 60 },
785
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
786
+ .ratio = 0x7F, // 50.0% F
787
+ },
788
+ // Seel
789
+ .{
790
+ .stats = .{ .hp = 65, .atk = 45, .def = 55, .spe = 45, .spa = 45, .spd = 70 },
791
+ .types = .{ .type1 = .Water, .type2 = .Water },
792
+ .ratio = 0x7F, // 50.0% F
793
+ },
794
+ // Dewgong
795
+ .{
796
+ .stats = .{ .hp = 90, .atk = 70, .def = 80, .spe = 70, .spa = 70, .spd = 95 },
797
+ .types = .{ .type1 = .Water, .type2 = .Ice },
798
+ .ratio = 0x7F, // 50.0% F
799
+ },
800
+ // Grimer
801
+ .{
802
+ .stats = .{ .hp = 80, .atk = 80, .def = 50, .spe = 25, .spa = 40, .spd = 50 },
803
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
804
+ .ratio = 0x7F, // 50.0% F
805
+ },
806
+ // Muk
807
+ .{
808
+ .stats = .{ .hp = 105, .atk = 105, .def = 75, .spe = 50, .spa = 65, .spd = 100 },
809
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
810
+ .ratio = 0x7F, // 50.0% F
811
+ },
812
+ // Shellder
813
+ .{
814
+ .stats = .{ .hp = 30, .atk = 65, .def = 100, .spe = 40, .spa = 45, .spd = 25 },
815
+ .types = .{ .type1 = .Water, .type2 = .Water },
816
+ .ratio = 0x7F, // 50.0% F
817
+ },
818
+ // Cloyster
819
+ .{
820
+ .stats = .{ .hp = 50, .atk = 95, .def = 180, .spe = 70, .spa = 85, .spd = 45 },
821
+ .types = .{ .type1 = .Water, .type2 = .Ice },
822
+ .ratio = 0x7F, // 50.0% F
823
+ },
824
+ // Gastly
825
+ .{
826
+ .stats = .{ .hp = 30, .atk = 35, .def = 30, .spe = 80, .spa = 100, .spd = 35 },
827
+ .types = .{ .type1 = .Ghost, .type2 = .Poison },
828
+ .ratio = 0x7F, // 50.0% F
829
+ },
830
+ // Haunter
831
+ .{
832
+ .stats = .{ .hp = 45, .atk = 50, .def = 45, .spe = 95, .spa = 115, .spd = 55 },
833
+ .types = .{ .type1 = .Ghost, .type2 = .Poison },
834
+ .ratio = 0x7F, // 50.0% F
835
+ },
836
+ // Gengar
837
+ .{
838
+ .stats = .{ .hp = 60, .atk = 65, .def = 60, .spe = 110, .spa = 130, .spd = 75 },
839
+ .types = .{ .type1 = .Ghost, .type2 = .Poison },
840
+ .ratio = 0x7F, // 50.0% F
841
+ },
842
+ // Onix
843
+ .{
844
+ .stats = .{ .hp = 35, .atk = 45, .def = 160, .spe = 70, .spa = 30, .spd = 45 },
845
+ .types = .{ .type1 = .Rock, .type2 = .Ground },
846
+ .ratio = 0x7F, // 50.0% F
847
+ },
848
+ // Drowzee
849
+ .{
850
+ .stats = .{ .hp = 60, .atk = 48, .def = 45, .spe = 42, .spa = 43, .spd = 90 },
851
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
852
+ .ratio = 0x7F, // 50.0% F
853
+ },
854
+ // Hypno
855
+ .{
856
+ .stats = .{ .hp = 85, .atk = 73, .def = 70, .spe = 67, .spa = 73, .spd = 115 },
857
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
858
+ .ratio = 0x7F, // 50.0% F
859
+ },
860
+ // Krabby
861
+ .{
862
+ .stats = .{ .hp = 30, .atk = 105, .def = 90, .spe = 50, .spa = 25, .spd = 25 },
863
+ .types = .{ .type1 = .Water, .type2 = .Water },
864
+ .ratio = 0x7F, // 50.0% F
865
+ },
866
+ // Kingler
867
+ .{
868
+ .stats = .{ .hp = 55, .atk = 130, .def = 115, .spe = 75, .spa = 50, .spd = 50 },
869
+ .types = .{ .type1 = .Water, .type2 = .Water },
870
+ .ratio = 0x7F, // 50.0% F
871
+ },
872
+ // Voltorb
873
+ .{
874
+ .stats = .{ .hp = 40, .atk = 30, .def = 50, .spe = 100, .spa = 55, .spd = 55 },
875
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
876
+ .ratio = 0xFF, // N
877
+ },
878
+ // Electrode
879
+ .{
880
+ .stats = .{ .hp = 60, .atk = 50, .def = 70, .spe = 140, .spa = 80, .spd = 80 },
881
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
882
+ .ratio = 0xFF, // N
883
+ },
884
+ // Exeggcute
885
+ .{
886
+ .stats = .{ .hp = 60, .atk = 40, .def = 80, .spe = 40, .spa = 60, .spd = 45 },
887
+ .types = .{ .type1 = .Grass, .type2 = .Psychic },
888
+ .ratio = 0x7F, // 50.0% F
889
+ },
890
+ // Exeggutor
891
+ .{
892
+ .stats = .{ .hp = 95, .atk = 95, .def = 85, .spe = 55, .spa = 125, .spd = 65 },
893
+ .types = .{ .type1 = .Grass, .type2 = .Psychic },
894
+ .ratio = 0x7F, // 50.0% F
895
+ },
896
+ // Cubone
897
+ .{
898
+ .stats = .{ .hp = 50, .atk = 50, .def = 95, .spe = 35, .spa = 40, .spd = 50 },
899
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
900
+ .ratio = 0x7F, // 50.0% F
901
+ },
902
+ // Marowak
903
+ .{
904
+ .stats = .{ .hp = 60, .atk = 80, .def = 110, .spe = 45, .spa = 50, .spd = 80 },
905
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
906
+ .ratio = 0x7F, // 50.0% F
907
+ },
908
+ // Hitmonlee
909
+ .{
910
+ .stats = .{ .hp = 50, .atk = 120, .def = 53, .spe = 87, .spa = 35, .spd = 110 },
911
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
912
+ .ratio = 0x00, // 0.00% F
913
+ },
914
+ // Hitmonchan
915
+ .{
916
+ .stats = .{ .hp = 50, .atk = 105, .def = 79, .spe = 76, .spa = 35, .spd = 110 },
917
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
918
+ .ratio = 0x00, // 0.00% F
919
+ },
920
+ // Lickitung
921
+ .{
922
+ .stats = .{ .hp = 90, .atk = 55, .def = 75, .spe = 30, .spa = 60, .spd = 75 },
923
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
924
+ .ratio = 0x7F, // 50.0% F
925
+ },
926
+ // Koffing
927
+ .{
928
+ .stats = .{ .hp = 40, .atk = 65, .def = 95, .spe = 35, .spa = 60, .spd = 45 },
929
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
930
+ .ratio = 0x7F, // 50.0% F
931
+ },
932
+ // Weezing
933
+ .{
934
+ .stats = .{ .hp = 65, .atk = 90, .def = 120, .spe = 60, .spa = 85, .spd = 70 },
935
+ .types = .{ .type1 = .Poison, .type2 = .Poison },
936
+ .ratio = 0x7F, // 50.0% F
937
+ },
938
+ // Rhyhorn
939
+ .{
940
+ .stats = .{ .hp = 80, .atk = 85, .def = 95, .spe = 25, .spa = 30, .spd = 30 },
941
+ .types = .{ .type1 = .Ground, .type2 = .Rock },
942
+ .ratio = 0x7F, // 50.0% F
943
+ },
944
+ // Rhydon
945
+ .{
946
+ .stats = .{ .hp = 105, .atk = 130, .def = 120, .spe = 40, .spa = 45, .spd = 45 },
947
+ .types = .{ .type1 = .Ground, .type2 = .Rock },
948
+ .ratio = 0x7F, // 50.0% F
949
+ },
950
+ // Chansey
951
+ .{
952
+ .stats = .{ .hp = 250, .atk = 5, .def = 5, .spe = 50, .spa = 35, .spd = 105 },
953
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
954
+ .ratio = 0xFE, // 100% F
955
+ },
956
+ // Tangela
957
+ .{
958
+ .stats = .{ .hp = 65, .atk = 55, .def = 115, .spe = 60, .spa = 100, .spd = 40 },
959
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
960
+ .ratio = 0x7F, // 50.0% F
961
+ },
962
+ // Kangaskhan
963
+ .{
964
+ .stats = .{ .hp = 105, .atk = 95, .def = 80, .spe = 90, .spa = 40, .spd = 80 },
965
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
966
+ .ratio = 0xFE, // 100% F
967
+ },
968
+ // Horsea
969
+ .{
970
+ .stats = .{ .hp = 30, .atk = 40, .def = 70, .spe = 60, .spa = 70, .spd = 25 },
971
+ .types = .{ .type1 = .Water, .type2 = .Water },
972
+ .ratio = 0x7F, // 50.0% F
973
+ },
974
+ // Seadra
975
+ .{
976
+ .stats = .{ .hp = 55, .atk = 65, .def = 95, .spe = 85, .spa = 95, .spd = 45 },
977
+ .types = .{ .type1 = .Water, .type2 = .Water },
978
+ .ratio = 0x7F, // 50.0% F
979
+ },
980
+ // Goldeen
981
+ .{
982
+ .stats = .{ .hp = 45, .atk = 67, .def = 60, .spe = 63, .spa = 35, .spd = 50 },
983
+ .types = .{ .type1 = .Water, .type2 = .Water },
984
+ .ratio = 0x7F, // 50.0% F
985
+ },
986
+ // Seaking
987
+ .{
988
+ .stats = .{ .hp = 80, .atk = 92, .def = 65, .spe = 68, .spa = 65, .spd = 80 },
989
+ .types = .{ .type1 = .Water, .type2 = .Water },
990
+ .ratio = 0x7F, // 50.0% F
991
+ },
992
+ // Staryu
993
+ .{
994
+ .stats = .{ .hp = 30, .atk = 45, .def = 55, .spe = 85, .spa = 70, .spd = 55 },
995
+ .types = .{ .type1 = .Water, .type2 = .Water },
996
+ .ratio = 0xFF, // N
997
+ },
998
+ // Starmie
999
+ .{
1000
+ .stats = .{ .hp = 60, .atk = 75, .def = 85, .spe = 115, .spa = 100, .spd = 85 },
1001
+ .types = .{ .type1 = .Water, .type2 = .Psychic },
1002
+ .ratio = 0xFF, // N
1003
+ },
1004
+ // MrMime
1005
+ .{
1006
+ .stats = .{ .hp = 40, .atk = 45, .def = 65, .spe = 90, .spa = 100, .spd = 120 },
1007
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
1008
+ .ratio = 0x7F, // 50.0% F
1009
+ },
1010
+ // Scyther
1011
+ .{
1012
+ .stats = .{ .hp = 70, .atk = 110, .def = 80, .spe = 105, .spa = 55, .spd = 80 },
1013
+ .types = .{ .type1 = .Bug, .type2 = .Flying },
1014
+ .ratio = 0x7F, // 50.0% F
1015
+ },
1016
+ // Jynx
1017
+ .{
1018
+ .stats = .{ .hp = 65, .atk = 50, .def = 35, .spe = 95, .spa = 115, .spd = 95 },
1019
+ .types = .{ .type1 = .Ice, .type2 = .Psychic },
1020
+ .ratio = 0xFE, // 100% F
1021
+ },
1022
+ // Electabuzz
1023
+ .{
1024
+ .stats = .{ .hp = 65, .atk = 83, .def = 57, .spe = 105, .spa = 95, .spd = 85 },
1025
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1026
+ .ratio = 0x3F, // 25.0% F
1027
+ },
1028
+ // Magmar
1029
+ .{
1030
+ .stats = .{ .hp = 65, .atk = 95, .def = 57, .spe = 93, .spa = 100, .spd = 85 },
1031
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1032
+ .ratio = 0x3F, // 25.0% F
1033
+ },
1034
+ // Pinsir
1035
+ .{
1036
+ .stats = .{ .hp = 65, .atk = 125, .def = 100, .spe = 85, .spa = 55, .spd = 70 },
1037
+ .types = .{ .type1 = .Bug, .type2 = .Bug },
1038
+ .ratio = 0x7F, // 50.0% F
1039
+ },
1040
+ // Tauros
1041
+ .{
1042
+ .stats = .{ .hp = 75, .atk = 100, .def = 95, .spe = 110, .spa = 40, .spd = 70 },
1043
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1044
+ .ratio = 0x00, // 0.00% F
1045
+ },
1046
+ // Magikarp
1047
+ .{
1048
+ .stats = .{ .hp = 20, .atk = 10, .def = 55, .spe = 80, .spa = 15, .spd = 20 },
1049
+ .types = .{ .type1 = .Water, .type2 = .Water },
1050
+ .ratio = 0x7F, // 50.0% F
1051
+ },
1052
+ // Gyarados
1053
+ .{
1054
+ .stats = .{ .hp = 95, .atk = 125, .def = 79, .spe = 81, .spa = 60, .spd = 100 },
1055
+ .types = .{ .type1 = .Water, .type2 = .Flying },
1056
+ .ratio = 0x7F, // 50.0% F
1057
+ },
1058
+ // Lapras
1059
+ .{
1060
+ .stats = .{ .hp = 130, .atk = 85, .def = 80, .spe = 60, .spa = 85, .spd = 95 },
1061
+ .types = .{ .type1 = .Water, .type2 = .Ice },
1062
+ .ratio = 0x7F, // 50.0% F
1063
+ },
1064
+ // Ditto
1065
+ .{
1066
+ .stats = .{ .hp = 48, .atk = 48, .def = 48, .spe = 48, .spa = 48, .spd = 48 },
1067
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1068
+ .ratio = 0xFF, // N
1069
+ },
1070
+ // Eevee
1071
+ .{
1072
+ .stats = .{ .hp = 55, .atk = 55, .def = 50, .spe = 55, .spa = 45, .spd = 65 },
1073
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1074
+ .ratio = 0x1F, // 12.5% F
1075
+ },
1076
+ // Vaporeon
1077
+ .{
1078
+ .stats = .{ .hp = 130, .atk = 65, .def = 60, .spe = 65, .spa = 110, .spd = 95 },
1079
+ .types = .{ .type1 = .Water, .type2 = .Water },
1080
+ .ratio = 0x1F, // 12.5% F
1081
+ },
1082
+ // Jolteon
1083
+ .{
1084
+ .stats = .{ .hp = 65, .atk = 65, .def = 60, .spe = 130, .spa = 110, .spd = 95 },
1085
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1086
+ .ratio = 0x1F, // 12.5% F
1087
+ },
1088
+ // Flareon
1089
+ .{
1090
+ .stats = .{ .hp = 65, .atk = 130, .def = 60, .spe = 65, .spa = 95, .spd = 110 },
1091
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1092
+ .ratio = 0x1F, // 12.5% F
1093
+ },
1094
+ // Porygon
1095
+ .{
1096
+ .stats = .{ .hp = 65, .atk = 60, .def = 70, .spe = 40, .spa = 85, .spd = 75 },
1097
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1098
+ .ratio = 0xFF, // N
1099
+ },
1100
+ // Omanyte
1101
+ .{
1102
+ .stats = .{ .hp = 35, .atk = 40, .def = 100, .spe = 35, .spa = 90, .spd = 55 },
1103
+ .types = .{ .type1 = .Rock, .type2 = .Water },
1104
+ .ratio = 0x1F, // 12.5% F
1105
+ },
1106
+ // Omastar
1107
+ .{
1108
+ .stats = .{ .hp = 70, .atk = 60, .def = 125, .spe = 55, .spa = 115, .spd = 70 },
1109
+ .types = .{ .type1 = .Rock, .type2 = .Water },
1110
+ .ratio = 0x1F, // 12.5% F
1111
+ },
1112
+ // Kabuto
1113
+ .{
1114
+ .stats = .{ .hp = 30, .atk = 80, .def = 90, .spe = 55, .spa = 55, .spd = 45 },
1115
+ .types = .{ .type1 = .Rock, .type2 = .Water },
1116
+ .ratio = 0x1F, // 12.5% F
1117
+ },
1118
+ // Kabutops
1119
+ .{
1120
+ .stats = .{ .hp = 60, .atk = 115, .def = 105, .spe = 80, .spa = 65, .spd = 70 },
1121
+ .types = .{ .type1 = .Rock, .type2 = .Water },
1122
+ .ratio = 0x1F, // 12.5% F
1123
+ },
1124
+ // Aerodactyl
1125
+ .{
1126
+ .stats = .{ .hp = 80, .atk = 105, .def = 65, .spe = 130, .spa = 60, .spd = 75 },
1127
+ .types = .{ .type1 = .Rock, .type2 = .Flying },
1128
+ .ratio = 0x1F, // 12.5% F
1129
+ },
1130
+ // Snorlax
1131
+ .{
1132
+ .stats = .{ .hp = 160, .atk = 110, .def = 65, .spe = 30, .spa = 65, .spd = 110 },
1133
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1134
+ .ratio = 0x1F, // 12.5% F
1135
+ },
1136
+ // Articuno
1137
+ .{
1138
+ .stats = .{ .hp = 90, .atk = 85, .def = 100, .spe = 85, .spa = 95, .spd = 125 },
1139
+ .types = .{ .type1 = .Ice, .type2 = .Flying },
1140
+ .ratio = 0xFF, // N
1141
+ },
1142
+ // Zapdos
1143
+ .{
1144
+ .stats = .{ .hp = 90, .atk = 90, .def = 85, .spe = 100, .spa = 125, .spd = 90 },
1145
+ .types = .{ .type1 = .Electric, .type2 = .Flying },
1146
+ .ratio = 0xFF, // N
1147
+ },
1148
+ // Moltres
1149
+ .{
1150
+ .stats = .{ .hp = 90, .atk = 100, .def = 90, .spe = 90, .spa = 125, .spd = 85 },
1151
+ .types = .{ .type1 = .Fire, .type2 = .Flying },
1152
+ .ratio = 0xFF, // N
1153
+ },
1154
+ // Dratini
1155
+ .{
1156
+ .stats = .{ .hp = 41, .atk = 64, .def = 45, .spe = 50, .spa = 50, .spd = 50 },
1157
+ .types = .{ .type1 = .Dragon, .type2 = .Dragon },
1158
+ .ratio = 0x7F, // 50.0% F
1159
+ },
1160
+ // Dragonair
1161
+ .{
1162
+ .stats = .{ .hp = 61, .atk = 84, .def = 65, .spe = 70, .spa = 70, .spd = 70 },
1163
+ .types = .{ .type1 = .Dragon, .type2 = .Dragon },
1164
+ .ratio = 0x7F, // 50.0% F
1165
+ },
1166
+ // Dragonite
1167
+ .{
1168
+ .stats = .{ .hp = 91, .atk = 134, .def = 95, .spe = 80, .spa = 100, .spd = 100 },
1169
+ .types = .{ .type1 = .Dragon, .type2 = .Flying },
1170
+ .ratio = 0x7F, // 50.0% F
1171
+ },
1172
+ // Mewtwo
1173
+ .{
1174
+ .stats = .{ .hp = 106, .atk = 110, .def = 90, .spe = 130, .spa = 154, .spd = 90 },
1175
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
1176
+ .ratio = 0xFF, // N
1177
+ },
1178
+ // Mew
1179
+ .{
1180
+ .stats = .{ .hp = 100, .atk = 100, .def = 100, .spe = 100, .spa = 100, .spd = 100 },
1181
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
1182
+ .ratio = 0xFF, // N
1183
+ },
1184
+ // Chikorita
1185
+ .{
1186
+ .stats = .{ .hp = 45, .atk = 49, .def = 65, .spe = 45, .spa = 49, .spd = 65 },
1187
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
1188
+ .ratio = 0x1F, // 12.5% F
1189
+ },
1190
+ // Bayleef
1191
+ .{
1192
+ .stats = .{ .hp = 60, .atk = 62, .def = 80, .spe = 60, .spa = 63, .spd = 80 },
1193
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
1194
+ .ratio = 0x1F, // 12.5% F
1195
+ },
1196
+ // Meganium
1197
+ .{
1198
+ .stats = .{ .hp = 80, .atk = 82, .def = 100, .spe = 80, .spa = 83, .spd = 100 },
1199
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
1200
+ .ratio = 0x1F, // 12.5% F
1201
+ },
1202
+ // Cyndaquil
1203
+ .{
1204
+ .stats = .{ .hp = 39, .atk = 52, .def = 43, .spe = 65, .spa = 60, .spd = 50 },
1205
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1206
+ .ratio = 0x1F, // 12.5% F
1207
+ },
1208
+ // Quilava
1209
+ .{
1210
+ .stats = .{ .hp = 58, .atk = 64, .def = 58, .spe = 80, .spa = 80, .spd = 65 },
1211
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1212
+ .ratio = 0x1F, // 12.5% F
1213
+ },
1214
+ // Typhlosion
1215
+ .{
1216
+ .stats = .{ .hp = 78, .atk = 84, .def = 78, .spe = 100, .spa = 109, .spd = 85 },
1217
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1218
+ .ratio = 0x1F, // 12.5% F
1219
+ },
1220
+ // Totodile
1221
+ .{
1222
+ .stats = .{ .hp = 50, .atk = 65, .def = 64, .spe = 43, .spa = 44, .spd = 48 },
1223
+ .types = .{ .type1 = .Water, .type2 = .Water },
1224
+ .ratio = 0x1F, // 12.5% F
1225
+ },
1226
+ // Croconaw
1227
+ .{
1228
+ .stats = .{ .hp = 65, .atk = 80, .def = 80, .spe = 58, .spa = 59, .spd = 63 },
1229
+ .types = .{ .type1 = .Water, .type2 = .Water },
1230
+ .ratio = 0x1F, // 12.5% F
1231
+ },
1232
+ // Feraligatr
1233
+ .{
1234
+ .stats = .{ .hp = 85, .atk = 105, .def = 100, .spe = 78, .spa = 79, .spd = 83 },
1235
+ .types = .{ .type1 = .Water, .type2 = .Water },
1236
+ .ratio = 0x1F, // 12.5% F
1237
+ },
1238
+ // Sentret
1239
+ .{
1240
+ .stats = .{ .hp = 35, .atk = 46, .def = 34, .spe = 20, .spa = 35, .spd = 45 },
1241
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1242
+ .ratio = 0x7F, // 50.0% F
1243
+ },
1244
+ // Furret
1245
+ .{
1246
+ .stats = .{ .hp = 85, .atk = 76, .def = 64, .spe = 90, .spa = 45, .spd = 55 },
1247
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1248
+ .ratio = 0x7F, // 50.0% F
1249
+ },
1250
+ // Hoothoot
1251
+ .{
1252
+ .stats = .{ .hp = 60, .atk = 30, .def = 30, .spe = 50, .spa = 36, .spd = 56 },
1253
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
1254
+ .ratio = 0x7F, // 50.0% F
1255
+ },
1256
+ // Noctowl
1257
+ .{
1258
+ .stats = .{ .hp = 100, .atk = 50, .def = 50, .spe = 70, .spa = 76, .spd = 96 },
1259
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
1260
+ .ratio = 0x7F, // 50.0% F
1261
+ },
1262
+ // Ledyba
1263
+ .{
1264
+ .stats = .{ .hp = 40, .atk = 20, .def = 30, .spe = 55, .spa = 40, .spd = 80 },
1265
+ .types = .{ .type1 = .Bug, .type2 = .Flying },
1266
+ .ratio = 0x7F, // 50.0% F
1267
+ },
1268
+ // Ledian
1269
+ .{
1270
+ .stats = .{ .hp = 55, .atk = 35, .def = 50, .spe = 85, .spa = 55, .spd = 110 },
1271
+ .types = .{ .type1 = .Bug, .type2 = .Flying },
1272
+ .ratio = 0x7F, // 50.0% F
1273
+ },
1274
+ // Spinarak
1275
+ .{
1276
+ .stats = .{ .hp = 40, .atk = 60, .def = 40, .spe = 30, .spa = 40, .spd = 40 },
1277
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
1278
+ .ratio = 0x7F, // 50.0% F
1279
+ },
1280
+ // Ariados
1281
+ .{
1282
+ .stats = .{ .hp = 70, .atk = 90, .def = 70, .spe = 40, .spa = 60, .spd = 60 },
1283
+ .types = .{ .type1 = .Bug, .type2 = .Poison },
1284
+ .ratio = 0x7F, // 50.0% F
1285
+ },
1286
+ // Crobat
1287
+ .{
1288
+ .stats = .{ .hp = 85, .atk = 90, .def = 80, .spe = 130, .spa = 70, .spd = 80 },
1289
+ .types = .{ .type1 = .Poison, .type2 = .Flying },
1290
+ .ratio = 0x7F, // 50.0% F
1291
+ },
1292
+ // Chinchou
1293
+ .{
1294
+ .stats = .{ .hp = 75, .atk = 38, .def = 38, .spe = 67, .spa = 56, .spd = 56 },
1295
+ .types = .{ .type1 = .Water, .type2 = .Electric },
1296
+ .ratio = 0x7F, // 50.0% F
1297
+ },
1298
+ // Lanturn
1299
+ .{
1300
+ .stats = .{ .hp = 125, .atk = 58, .def = 58, .spe = 67, .spa = 76, .spd = 76 },
1301
+ .types = .{ .type1 = .Water, .type2 = .Electric },
1302
+ .ratio = 0x7F, // 50.0% F
1303
+ },
1304
+ // Pichu
1305
+ .{
1306
+ .stats = .{ .hp = 20, .atk = 40, .def = 15, .spe = 60, .spa = 35, .spd = 35 },
1307
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1308
+ .ratio = 0x7F, // 50.0% F
1309
+ },
1310
+ // Cleffa
1311
+ .{
1312
+ .stats = .{ .hp = 50, .atk = 25, .def = 28, .spe = 15, .spa = 45, .spd = 55 },
1313
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1314
+ .ratio = 0xBF, // 75.0% F
1315
+ },
1316
+ // Igglybuff
1317
+ .{
1318
+ .stats = .{ .hp = 90, .atk = 30, .def = 15, .spe = 15, .spa = 40, .spd = 20 },
1319
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1320
+ .ratio = 0xBF, // 75.0% F
1321
+ },
1322
+ // Togepi
1323
+ .{
1324
+ .stats = .{ .hp = 35, .atk = 20, .def = 65, .spe = 20, .spa = 40, .spd = 65 },
1325
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1326
+ .ratio = 0x1F, // 12.5% F
1327
+ },
1328
+ // Togetic
1329
+ .{
1330
+ .stats = .{ .hp = 55, .atk = 40, .def = 85, .spe = 40, .spa = 80, .spd = 105 },
1331
+ .types = .{ .type1 = .Normal, .type2 = .Flying },
1332
+ .ratio = 0x1F, // 12.5% F
1333
+ },
1334
+ // Natu
1335
+ .{
1336
+ .stats = .{ .hp = 40, .atk = 50, .def = 45, .spe = 70, .spa = 70, .spd = 45 },
1337
+ .types = .{ .type1 = .Psychic, .type2 = .Flying },
1338
+ .ratio = 0x7F, // 50.0% F
1339
+ },
1340
+ // Xatu
1341
+ .{
1342
+ .stats = .{ .hp = 65, .atk = 75, .def = 70, .spe = 95, .spa = 95, .spd = 70 },
1343
+ .types = .{ .type1 = .Psychic, .type2 = .Flying },
1344
+ .ratio = 0x7F, // 50.0% F
1345
+ },
1346
+ // Mareep
1347
+ .{
1348
+ .stats = .{ .hp = 55, .atk = 40, .def = 40, .spe = 35, .spa = 65, .spd = 45 },
1349
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1350
+ .ratio = 0x7F, // 50.0% F
1351
+ },
1352
+ // Flaaffy
1353
+ .{
1354
+ .stats = .{ .hp = 70, .atk = 55, .def = 55, .spe = 45, .spa = 80, .spd = 60 },
1355
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1356
+ .ratio = 0x7F, // 50.0% F
1357
+ },
1358
+ // Ampharos
1359
+ .{
1360
+ .stats = .{ .hp = 90, .atk = 75, .def = 75, .spe = 55, .spa = 115, .spd = 90 },
1361
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1362
+ .ratio = 0x7F, // 50.0% F
1363
+ },
1364
+ // Bellossom
1365
+ .{
1366
+ .stats = .{ .hp = 75, .atk = 80, .def = 85, .spe = 50, .spa = 90, .spd = 100 },
1367
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
1368
+ .ratio = 0x7F, // 50.0% F
1369
+ },
1370
+ // Marill
1371
+ .{
1372
+ .stats = .{ .hp = 70, .atk = 20, .def = 50, .spe = 40, .spa = 20, .spd = 50 },
1373
+ .types = .{ .type1 = .Water, .type2 = .Water },
1374
+ .ratio = 0x7F, // 50.0% F
1375
+ },
1376
+ // Azumarill
1377
+ .{
1378
+ .stats = .{ .hp = 100, .atk = 50, .def = 80, .spe = 50, .spa = 50, .spd = 80 },
1379
+ .types = .{ .type1 = .Water, .type2 = .Water },
1380
+ .ratio = 0x7F, // 50.0% F
1381
+ },
1382
+ // Sudowoodo
1383
+ .{
1384
+ .stats = .{ .hp = 70, .atk = 100, .def = 115, .spe = 30, .spa = 30, .spd = 65 },
1385
+ .types = .{ .type1 = .Rock, .type2 = .Rock },
1386
+ .ratio = 0x7F, // 50.0% F
1387
+ },
1388
+ // Politoed
1389
+ .{
1390
+ .stats = .{ .hp = 90, .atk = 75, .def = 75, .spe = 70, .spa = 90, .spd = 100 },
1391
+ .types = .{ .type1 = .Water, .type2 = .Water },
1392
+ .ratio = 0x7F, // 50.0% F
1393
+ },
1394
+ // Hoppip
1395
+ .{
1396
+ .stats = .{ .hp = 35, .atk = 35, .def = 40, .spe = 50, .spa = 35, .spd = 55 },
1397
+ .types = .{ .type1 = .Grass, .type2 = .Flying },
1398
+ .ratio = 0x7F, // 50.0% F
1399
+ },
1400
+ // Skiploom
1401
+ .{
1402
+ .stats = .{ .hp = 55, .atk = 45, .def = 50, .spe = 80, .spa = 45, .spd = 65 },
1403
+ .types = .{ .type1 = .Grass, .type2 = .Flying },
1404
+ .ratio = 0x7F, // 50.0% F
1405
+ },
1406
+ // Jumpluff
1407
+ .{
1408
+ .stats = .{ .hp = 75, .atk = 55, .def = 70, .spe = 110, .spa = 55, .spd = 85 },
1409
+ .types = .{ .type1 = .Grass, .type2 = .Flying },
1410
+ .ratio = 0x7F, // 50.0% F
1411
+ },
1412
+ // Aipom
1413
+ .{
1414
+ .stats = .{ .hp = 55, .atk = 70, .def = 55, .spe = 85, .spa = 40, .spd = 55 },
1415
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1416
+ .ratio = 0x7F, // 50.0% F
1417
+ },
1418
+ // Sunkern
1419
+ .{
1420
+ .stats = .{ .hp = 30, .atk = 30, .def = 30, .spe = 30, .spa = 30, .spd = 30 },
1421
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
1422
+ .ratio = 0x7F, // 50.0% F
1423
+ },
1424
+ // Sunflora
1425
+ .{
1426
+ .stats = .{ .hp = 75, .atk = 75, .def = 55, .spe = 30, .spa = 105, .spd = 85 },
1427
+ .types = .{ .type1 = .Grass, .type2 = .Grass },
1428
+ .ratio = 0x7F, // 50.0% F
1429
+ },
1430
+ // Yanma
1431
+ .{
1432
+ .stats = .{ .hp = 65, .atk = 65, .def = 45, .spe = 95, .spa = 75, .spd = 45 },
1433
+ .types = .{ .type1 = .Bug, .type2 = .Flying },
1434
+ .ratio = 0x7F, // 50.0% F
1435
+ },
1436
+ // Wooper
1437
+ .{
1438
+ .stats = .{ .hp = 55, .atk = 45, .def = 45, .spe = 15, .spa = 25, .spd = 25 },
1439
+ .types = .{ .type1 = .Water, .type2 = .Ground },
1440
+ .ratio = 0x7F, // 50.0% F
1441
+ },
1442
+ // Quagsire
1443
+ .{
1444
+ .stats = .{ .hp = 95, .atk = 85, .def = 85, .spe = 35, .spa = 65, .spd = 65 },
1445
+ .types = .{ .type1 = .Water, .type2 = .Ground },
1446
+ .ratio = 0x7F, // 50.0% F
1447
+ },
1448
+ // Espeon
1449
+ .{
1450
+ .stats = .{ .hp = 65, .atk = 65, .def = 60, .spe = 110, .spa = 130, .spd = 95 },
1451
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
1452
+ .ratio = 0x1F, // 12.5% F
1453
+ },
1454
+ // Umbreon
1455
+ .{
1456
+ .stats = .{ .hp = 95, .atk = 65, .def = 110, .spe = 65, .spa = 60, .spd = 130 },
1457
+ .types = .{ .type1 = .Dark, .type2 = .Dark },
1458
+ .ratio = 0x1F, // 12.5% F
1459
+ },
1460
+ // Murkrow
1461
+ .{
1462
+ .stats = .{ .hp = 60, .atk = 85, .def = 42, .spe = 91, .spa = 85, .spd = 42 },
1463
+ .types = .{ .type1 = .Dark, .type2 = .Flying },
1464
+ .ratio = 0x7F, // 50.0% F
1465
+ },
1466
+ // Slowking
1467
+ .{
1468
+ .stats = .{ .hp = 95, .atk = 75, .def = 80, .spe = 30, .spa = 100, .spd = 110 },
1469
+ .types = .{ .type1 = .Water, .type2 = .Psychic },
1470
+ .ratio = 0x7F, // 50.0% F
1471
+ },
1472
+ // Misdreavus
1473
+ .{
1474
+ .stats = .{ .hp = 60, .atk = 60, .def = 60, .spe = 85, .spa = 85, .spd = 85 },
1475
+ .types = .{ .type1 = .Ghost, .type2 = .Ghost },
1476
+ .ratio = 0x7F, // 50.0% F
1477
+ },
1478
+ // Unown
1479
+ .{
1480
+ .stats = .{ .hp = 48, .atk = 72, .def = 48, .spe = 48, .spa = 72, .spd = 48 },
1481
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
1482
+ .ratio = 0xFF, // N
1483
+ },
1484
+ // Wobbuffet
1485
+ .{
1486
+ .stats = .{ .hp = 190, .atk = 33, .def = 58, .spe = 33, .spa = 33, .spd = 58 },
1487
+ .types = .{ .type1 = .Psychic, .type2 = .Psychic },
1488
+ .ratio = 0x7F, // 50.0% F
1489
+ },
1490
+ // Girafarig
1491
+ .{
1492
+ .stats = .{ .hp = 70, .atk = 80, .def = 65, .spe = 85, .spa = 90, .spd = 65 },
1493
+ .types = .{ .type1 = .Normal, .type2 = .Psychic },
1494
+ .ratio = 0x7F, // 50.0% F
1495
+ },
1496
+ // Pineco
1497
+ .{
1498
+ .stats = .{ .hp = 50, .atk = 65, .def = 90, .spe = 15, .spa = 35, .spd = 35 },
1499
+ .types = .{ .type1 = .Bug, .type2 = .Bug },
1500
+ .ratio = 0x7F, // 50.0% F
1501
+ },
1502
+ // Forretress
1503
+ .{
1504
+ .stats = .{ .hp = 75, .atk = 90, .def = 140, .spe = 40, .spa = 60, .spd = 60 },
1505
+ .types = .{ .type1 = .Bug, .type2 = .Steel },
1506
+ .ratio = 0x7F, // 50.0% F
1507
+ },
1508
+ // Dunsparce
1509
+ .{
1510
+ .stats = .{ .hp = 100, .atk = 70, .def = 70, .spe = 45, .spa = 65, .spd = 65 },
1511
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1512
+ .ratio = 0x7F, // 50.0% F
1513
+ },
1514
+ // Gligar
1515
+ .{
1516
+ .stats = .{ .hp = 65, .atk = 75, .def = 105, .spe = 85, .spa = 35, .spd = 65 },
1517
+ .types = .{ .type1 = .Ground, .type2 = .Flying },
1518
+ .ratio = 0x7F, // 50.0% F
1519
+ },
1520
+ // Steelix
1521
+ .{
1522
+ .stats = .{ .hp = 75, .atk = 85, .def = 200, .spe = 30, .spa = 55, .spd = 65 },
1523
+ .types = .{ .type1 = .Steel, .type2 = .Ground },
1524
+ .ratio = 0x7F, // 50.0% F
1525
+ },
1526
+ // Snubbull
1527
+ .{
1528
+ .stats = .{ .hp = 60, .atk = 80, .def = 50, .spe = 30, .spa = 40, .spd = 40 },
1529
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1530
+ .ratio = 0xBF, // 75.0% F
1531
+ },
1532
+ // Granbull
1533
+ .{
1534
+ .stats = .{ .hp = 90, .atk = 120, .def = 75, .spe = 45, .spa = 60, .spd = 60 },
1535
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1536
+ .ratio = 0xBF, // 75.0% F
1537
+ },
1538
+ // Qwilfish
1539
+ .{
1540
+ .stats = .{ .hp = 65, .atk = 95, .def = 75, .spe = 85, .spa = 55, .spd = 55 },
1541
+ .types = .{ .type1 = .Water, .type2 = .Poison },
1542
+ .ratio = 0x7F, // 50.0% F
1543
+ },
1544
+ // Scizor
1545
+ .{
1546
+ .stats = .{ .hp = 70, .atk = 130, .def = 100, .spe = 65, .spa = 55, .spd = 80 },
1547
+ .types = .{ .type1 = .Bug, .type2 = .Steel },
1548
+ .ratio = 0x7F, // 50.0% F
1549
+ },
1550
+ // Shuckle
1551
+ .{
1552
+ .stats = .{ .hp = 20, .atk = 10, .def = 230, .spe = 5, .spa = 10, .spd = 230 },
1553
+ .types = .{ .type1 = .Bug, .type2 = .Rock },
1554
+ .ratio = 0x7F, // 50.0% F
1555
+ },
1556
+ // Heracross
1557
+ .{
1558
+ .stats = .{ .hp = 80, .atk = 125, .def = 75, .spe = 85, .spa = 40, .spd = 95 },
1559
+ .types = .{ .type1 = .Bug, .type2 = .Fighting },
1560
+ .ratio = 0x7F, // 50.0% F
1561
+ },
1562
+ // Sneasel
1563
+ .{
1564
+ .stats = .{ .hp = 55, .atk = 95, .def = 55, .spe = 115, .spa = 35, .spd = 75 },
1565
+ .types = .{ .type1 = .Dark, .type2 = .Ice },
1566
+ .ratio = 0x7F, // 50.0% F
1567
+ },
1568
+ // Teddiursa
1569
+ .{
1570
+ .stats = .{ .hp = 60, .atk = 80, .def = 50, .spe = 40, .spa = 50, .spd = 50 },
1571
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1572
+ .ratio = 0x7F, // 50.0% F
1573
+ },
1574
+ // Ursaring
1575
+ .{
1576
+ .stats = .{ .hp = 90, .atk = 130, .def = 75, .spe = 55, .spa = 75, .spd = 75 },
1577
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1578
+ .ratio = 0x7F, // 50.0% F
1579
+ },
1580
+ // Slugma
1581
+ .{
1582
+ .stats = .{ .hp = 40, .atk = 40, .def = 40, .spe = 20, .spa = 70, .spd = 40 },
1583
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1584
+ .ratio = 0x7F, // 50.0% F
1585
+ },
1586
+ // Magcargo
1587
+ .{
1588
+ .stats = .{ .hp = 50, .atk = 50, .def = 120, .spe = 30, .spa = 80, .spd = 80 },
1589
+ .types = .{ .type1 = .Fire, .type2 = .Rock },
1590
+ .ratio = 0x7F, // 50.0% F
1591
+ },
1592
+ // Swinub
1593
+ .{
1594
+ .stats = .{ .hp = 50, .atk = 50, .def = 40, .spe = 50, .spa = 30, .spd = 30 },
1595
+ .types = .{ .type1 = .Ice, .type2 = .Ground },
1596
+ .ratio = 0x7F, // 50.0% F
1597
+ },
1598
+ // Piloswine
1599
+ .{
1600
+ .stats = .{ .hp = 100, .atk = 100, .def = 80, .spe = 50, .spa = 60, .spd = 60 },
1601
+ .types = .{ .type1 = .Ice, .type2 = .Ground },
1602
+ .ratio = 0x7F, // 50.0% F
1603
+ },
1604
+ // Corsola
1605
+ .{
1606
+ .stats = .{ .hp = 55, .atk = 55, .def = 85, .spe = 35, .spa = 65, .spd = 85 },
1607
+ .types = .{ .type1 = .Water, .type2 = .Rock },
1608
+ .ratio = 0xBF, // 75.0% F
1609
+ },
1610
+ // Remoraid
1611
+ .{
1612
+ .stats = .{ .hp = 35, .atk = 65, .def = 35, .spe = 65, .spa = 65, .spd = 35 },
1613
+ .types = .{ .type1 = .Water, .type2 = .Water },
1614
+ .ratio = 0x7F, // 50.0% F
1615
+ },
1616
+ // Octillery
1617
+ .{
1618
+ .stats = .{ .hp = 75, .atk = 105, .def = 75, .spe = 45, .spa = 105, .spd = 75 },
1619
+ .types = .{ .type1 = .Water, .type2 = .Water },
1620
+ .ratio = 0x7F, // 50.0% F
1621
+ },
1622
+ // Delibird
1623
+ .{
1624
+ .stats = .{ .hp = 45, .atk = 55, .def = 45, .spe = 75, .spa = 65, .spd = 45 },
1625
+ .types = .{ .type1 = .Ice, .type2 = .Flying },
1626
+ .ratio = 0x7F, // 50.0% F
1627
+ },
1628
+ // Mantine
1629
+ .{
1630
+ .stats = .{ .hp = 65, .atk = 40, .def = 70, .spe = 70, .spa = 80, .spd = 140 },
1631
+ .types = .{ .type1 = .Water, .type2 = .Flying },
1632
+ .ratio = 0x7F, // 50.0% F
1633
+ },
1634
+ // Skarmory
1635
+ .{
1636
+ .stats = .{ .hp = 65, .atk = 80, .def = 140, .spe = 70, .spa = 40, .spd = 70 },
1637
+ .types = .{ .type1 = .Steel, .type2 = .Flying },
1638
+ .ratio = 0x7F, // 50.0% F
1639
+ },
1640
+ // Houndour
1641
+ .{
1642
+ .stats = .{ .hp = 45, .atk = 60, .def = 30, .spe = 65, .spa = 80, .spd = 50 },
1643
+ .types = .{ .type1 = .Dark, .type2 = .Fire },
1644
+ .ratio = 0x7F, // 50.0% F
1645
+ },
1646
+ // Houndoom
1647
+ .{
1648
+ .stats = .{ .hp = 75, .atk = 90, .def = 50, .spe = 95, .spa = 110, .spd = 80 },
1649
+ .types = .{ .type1 = .Dark, .type2 = .Fire },
1650
+ .ratio = 0x7F, // 50.0% F
1651
+ },
1652
+ // Kingdra
1653
+ .{
1654
+ .stats = .{ .hp = 75, .atk = 95, .def = 95, .spe = 85, .spa = 95, .spd = 95 },
1655
+ .types = .{ .type1 = .Water, .type2 = .Dragon },
1656
+ .ratio = 0x7F, // 50.0% F
1657
+ },
1658
+ // Phanpy
1659
+ .{
1660
+ .stats = .{ .hp = 90, .atk = 60, .def = 60, .spe = 40, .spa = 40, .spd = 40 },
1661
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
1662
+ .ratio = 0x7F, // 50.0% F
1663
+ },
1664
+ // Donphan
1665
+ .{
1666
+ .stats = .{ .hp = 90, .atk = 120, .def = 120, .spe = 50, .spa = 60, .spd = 60 },
1667
+ .types = .{ .type1 = .Ground, .type2 = .Ground },
1668
+ .ratio = 0x7F, // 50.0% F
1669
+ },
1670
+ // Porygon2
1671
+ .{
1672
+ .stats = .{ .hp = 85, .atk = 80, .def = 90, .spe = 60, .spa = 105, .spd = 95 },
1673
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1674
+ .ratio = 0xFF, // N
1675
+ },
1676
+ // Stantler
1677
+ .{
1678
+ .stats = .{ .hp = 73, .atk = 95, .def = 62, .spe = 85, .spa = 85, .spd = 65 },
1679
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1680
+ .ratio = 0x7F, // 50.0% F
1681
+ },
1682
+ // Smeargle
1683
+ .{
1684
+ .stats = .{ .hp = 55, .atk = 20, .def = 35, .spe = 75, .spa = 20, .spd = 45 },
1685
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1686
+ .ratio = 0x7F, // 50.0% F
1687
+ },
1688
+ // Tyrogue
1689
+ .{
1690
+ .stats = .{ .hp = 35, .atk = 35, .def = 35, .spe = 35, .spa = 35, .spd = 35 },
1691
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
1692
+ .ratio = 0x00, // 0.00% F
1693
+ },
1694
+ // Hitmontop
1695
+ .{
1696
+ .stats = .{ .hp = 50, .atk = 95, .def = 95, .spe = 70, .spa = 35, .spd = 110 },
1697
+ .types = .{ .type1 = .Fighting, .type2 = .Fighting },
1698
+ .ratio = 0x00, // 0.00% F
1699
+ },
1700
+ // Smoochum
1701
+ .{
1702
+ .stats = .{ .hp = 45, .atk = 30, .def = 15, .spe = 65, .spa = 85, .spd = 65 },
1703
+ .types = .{ .type1 = .Ice, .type2 = .Psychic },
1704
+ .ratio = 0xFE, // 100% F
1705
+ },
1706
+ // Elekid
1707
+ .{
1708
+ .stats = .{ .hp = 45, .atk = 63, .def = 37, .spe = 95, .spa = 65, .spd = 55 },
1709
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1710
+ .ratio = 0x3F, // 25.0% F
1711
+ },
1712
+ // Magby
1713
+ .{
1714
+ .stats = .{ .hp = 45, .atk = 75, .def = 37, .spe = 83, .spa = 70, .spd = 55 },
1715
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1716
+ .ratio = 0x3F, // 25.0% F
1717
+ },
1718
+ // Miltank
1719
+ .{
1720
+ .stats = .{ .hp = 95, .atk = 80, .def = 105, .spe = 100, .spa = 40, .spd = 70 },
1721
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1722
+ .ratio = 0xFE, // 100% F
1723
+ },
1724
+ // Blissey
1725
+ .{
1726
+ .stats = .{ .hp = 255, .atk = 10, .def = 10, .spe = 55, .spa = 75, .spd = 135 },
1727
+ .types = .{ .type1 = .Normal, .type2 = .Normal },
1728
+ .ratio = 0xFE, // 100% F
1729
+ },
1730
+ // Raikou
1731
+ .{
1732
+ .stats = .{ .hp = 90, .atk = 85, .def = 75, .spe = 115, .spa = 115, .spd = 100 },
1733
+ .types = .{ .type1 = .Electric, .type2 = .Electric },
1734
+ .ratio = 0xFF, // N
1735
+ },
1736
+ // Entei
1737
+ .{
1738
+ .stats = .{ .hp = 115, .atk = 115, .def = 85, .spe = 100, .spa = 90, .spd = 75 },
1739
+ .types = .{ .type1 = .Fire, .type2 = .Fire },
1740
+ .ratio = 0xFF, // N
1741
+ },
1742
+ // Suicune
1743
+ .{
1744
+ .stats = .{ .hp = 100, .atk = 75, .def = 115, .spe = 85, .spa = 90, .spd = 115 },
1745
+ .types = .{ .type1 = .Water, .type2 = .Water },
1746
+ .ratio = 0xFF, // N
1747
+ },
1748
+ // Larvitar
1749
+ .{
1750
+ .stats = .{ .hp = 50, .atk = 64, .def = 50, .spe = 41, .spa = 45, .spd = 50 },
1751
+ .types = .{ .type1 = .Rock, .type2 = .Ground },
1752
+ .ratio = 0x7F, // 50.0% F
1753
+ },
1754
+ // Pupitar
1755
+ .{
1756
+ .stats = .{ .hp = 70, .atk = 84, .def = 70, .spe = 51, .spa = 65, .spd = 70 },
1757
+ .types = .{ .type1 = .Rock, .type2 = .Ground },
1758
+ .ratio = 0x7F, // 50.0% F
1759
+ },
1760
+ // Tyranitar
1761
+ .{
1762
+ .stats = .{ .hp = 100, .atk = 134, .def = 110, .spe = 61, .spa = 95, .spd = 100 },
1763
+ .types = .{ .type1 = .Rock, .type2 = .Dark },
1764
+ .ratio = 0x7F, // 50.0% F
1765
+ },
1766
+ // Lugia
1767
+ .{
1768
+ .stats = .{ .hp = 106, .atk = 90, .def = 130, .spe = 110, .spa = 90, .spd = 154 },
1769
+ .types = .{ .type1 = .Psychic, .type2 = .Flying },
1770
+ .ratio = 0xFF, // N
1771
+ },
1772
+ // HoOh
1773
+ .{
1774
+ .stats = .{ .hp = 106, .atk = 130, .def = 90, .spe = 90, .spa = 110, .spd = 154 },
1775
+ .types = .{ .type1 = .Fire, .type2 = .Flying },
1776
+ .ratio = 0xFF, // N
1777
+ },
1778
+ // Celebi
1779
+ .{
1780
+ .stats = .{ .hp = 100, .atk = 100, .def = 100, .spe = 100, .spa = 100, .spd = 100 },
1781
+ .types = .{ .type1 = .Psychic, .type2 = .Grass },
1782
+ .ratio = 0xFF, // N
1783
+ },
1784
+ };
1785
+
1786
+ comptime {
1787
+ assert(@sizeOf(Species) == 1);
1788
+ }
1789
+
1790
+ /// The number of Pokémon species in this generation.
1791
+ pub const size = 251;
1792
+
1793
+ /// Returns the `Data` corresponding to the species.
1794
+ pub fn get(id: Species) Data {
1795
+ assert(id != .None);
1796
+ return DATA[@intFromEnum(id) - 1];
1797
+ }
1798
+ };