typedef unsigned char char_t;
typedef unsigned short short_t;
enum Type { NORMAL = 0x00, FIGHTING = 0x01, FLYING = 0x02, POISON = 0x03,
GROUND = 0x04, ROCK = 0x05, BUG = 0x06, GHOST = 0x07, STEEL = 0x08, FIRE = 0x09,
WATER = 0x0A, GRASS = 0x0B, ELECTRIC = 0x0C, PSYCHIC = 0x0D, ICE = 0x0E, DRAGON = 0x0F,
DARK = 0x10 };
#pragma pack(1)
struct BaseStats
{
char_t base_hp; //#0
char_t base_atk;
char_t base_def;
char_t base_spd;
char_t base_spatk;
char_t base_spdef;
char_t type1;
char_t type2;
char_t catch_rate; //#8
//#9 = stage of evolution (Legendaries get 3, Pokémon not part of an evolution line get 2)
//1 = not evolved, 2 = evolved once (or doesn't evolve), 3 = evolved twice (or legendary)
char_t evolution_stage;
//#10 - 11 = EV yield
union
{
struct
{
//byte 1
size_t ev_hp : 2;
size_t ev_atk : 2;
size_t ev_def : 2;
size_t ev_spd : 2;
//byte 2
size_t ev_spatk : 2;
size_t ev_spdef : 2;
size_t ev_padding : 4;
//item1
size_t ev_extra : 16;
};
struct
{
short ev_data;
short_t item1;
};
};
//#12 - 13 = held item 1 (little endian)
//#14 - 15 = held item 2
short_t item2;
//#16 - 17 = Dream World item (Pokémon will be holding this item when brought from the Dream world)
short_t item_special;
enum GENDER { GENDERLESS = 0xFF }; //The rest are a female percentage out of 254
//#18 = gender ratio
char_t gender;
//#19 = base egg cycles
char_t egg_cycles;
//#20 = base happiness
char_t base_happy;
enum GROWTH { ERRATIC = 1, FAST = 4, MED_FAST = 0, MED_SLOW = 3, SLOW = 5, FLUCTUATING = 2 };
//Lv. 100 Exp.: Erratic = 600,000; Fast = 800,000; Med. Fast = 1,000,000;
// Med. Slow = 1,059,860; Slow = 1,250,000; Fluctuating = 1,640,000
//#21 = experience growth
char_t growth;
enum EGG_GROUP { MONSTER = 0x01, WATER_1 = 0x02, BUG = 0x03, FLYING = 0x04, GROUND = 0x05, FAIRY = 0x06, PLANT = 0x07,
HUMAN_SHAPE = 0x08, WATER_3 = 0x09, MINERAL = 0x0A, INDETERMINATE = 0x0B, WATER_2 = 0x0C, DITTO = 0x0D, DRAGON = 0x0E };
//The rest cannot breed
//#22 = egg group 1
//#23 = egg group 2
char_t egg_group1;
char_t egg_group2;
//#24 = ability 1
//#25 = ability 2
//#26 = special ability (Dream World ability)
char_t ability1;
char_t ability2;
char_t ability_special;
//#27 = 0, 60, 90, 120 or 150 (not sure why)
char_t _3;
//#28 - 29 = index of alternate form list (starting from 1 = Bulbasaur)
//This is strictly for Pokémon where base stat data changes in other forms
short_t form_index;
//#30 - 31 = Something related to alternate forms (0 for Pokémon without alternate forms)
short_t form_thing;
//32 = the number of forms this Pokémon has (1 for Pokémon without alternate forms)
char_t form_num;
//33 = bitfields of some sort
char_t _8;
//#34 = base exp
char_t base_exp;
//#35 - 59 = ?
char_t _5[25];
};
#pragma pack()