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()