diff options
Diffstat (limited to 'structs/pokemon.h')
-rw-r--r-- | structs/pokemon.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/structs/pokemon.h b/structs/pokemon.h new file mode 100644 index 00000000..36f17307 --- /dev/null +++ b/structs/pokemon.h @@ -0,0 +1,195 @@ +#ifndef POKEDIAMOND_POKEMON_H +#define POKEDIAMOND_POKEMON_H + +#include "nitro/types.h" + +// Enums + +typedef enum { + EGG=0, + EVENT=0, + HATCHED=0, + PAL_PARK=0, + TALL_GRASS=2, + DIALGA_GAME_EVENT=4, + PALKIA_GAME_EVENT=4, + CAVE=5, + HALL_OF_ORIGIN=5, + SURFING=7, + FISHING=7, + BUILDING=9, + SAFARI_ZONE=10, + STARTER=12, + FOSSIL=12, + GIFT_EEVEE=12 +} EncounterType; + +typedef enum { + JAPANESE=1, + ENGLISH=2, + FRENCH=3, + ITALIAN=4, + GERMAN=5, + SPANISH=7, + KOREAN=8 +} OriginLanguage; + +typedef enum { + // TODO: Add all Arceus forms + // and sort by value + ARCEUS_EARTH=32, + ARCEUS_FIST=8, + ARCEUS_NORMAL=0, + ARCEUS_SKY=16, + ARCEUS_STONE=40, + ARCEUS_TOXIC=24, + BURMY_PLANT=0, + BURMY_SANDY=8, + BURMY_TRASH=16, + DEOXYS_ATTACK=8, + DEOXYS_DEFENSE=16, + DEOXYS_NORMAL=0, + DEOXYS_SPEED=24, + GIRATINA_ALTERED=0, + GIRATINA_ORIGIN=8, + ROTOM_FAN=32, + ROTOM_FROST=24, + ROTOM_HEAT=8, + ROTOM_MOW=40, + ROTOM_NORMAL=0, + ROTOM_WASH=16, + SHAYMIN_LAND=0, + SHAYMIN_SKY=8, + SHELLOS_EAST=8, + SHELLOS_WEST=0, + UNOWN_EXCLAMATIONMARK =208, + UNOWN_QUESTIONMARK=216, + UNOWN_A=0, + UNOWN_B=8, + UNOWN_C=16, + UNOWN_D=24, + UNOWN_E=32, + UNOWN_F=40, + UNOWN_G=48, + UNOWN_H=56, + UNOWN_I=64, + UNOWN_J=72, + UNOWN_K=80, + UNOWN_L=88, + UNOWN_M=96, + UNOWN_N=104, + UNOWN_O=112, + UNOWN_P=120, + UNOWN_Q=128, + UNOWN_R=136, + UNOWN_S=144, + UNOWN_T=152, + UNOWN_U=160, + UNOWN_V=168, + UNOWN_W=176, + UNOWN_X=184, + UNOWN_Y=192, + UNOWN_Z=200 +} AlternateForms; + +// Structs + +typedef struct { + u16 species; + u16 heldItem; + u16 otID; + u16 otSecretID; + u32 exp; + u8 friendship; + u8 ability; + u8 circleMarking:1, triangleMarking:1, squareMarking:1, heartMarking:1, starMarking:1, diamondMarking:1; + OriginLanguage originLanguage; + u8 hpEV; + u8 atkEV; + u8 defEV; + u8 spdEV; + u8 spatkEV; + u8 spdefEV; + u8 coolStat; + u8 beautyStat; + u8 cuteStat; + u8 smartStat; + u8 toughStat; + u8 sheen; + // TODO: Finish SinnohRibbonSet1 + u8 sinnohChampRibbon:1, abilityRibbon:1; + u8 field_0x1d; + u8 gorgeousRoyalRibbon:1, footprintRibbon:1; + u8 field_0x1f; +} PokemonDataBlockA; + +typedef struct { + u16 move1; + u16 move2; + u16 move3; + u16 move4; + u8 move1pp; + u8 move2pp; + u8 move3pp; + u8 move4pp; + u8 move1ppUps; + u8 move2ppUps; + u8 move3ppUps; + u8 move4ppUps; + u32 hpIV:5, atkIV:5, defIV:5, spdIV:5, spatkIV:5, spdefIV:5, isEgg:1, isNicknamed:1; + // TODO: Finish HoennRibbonSet + u8 coolRibbon:1; + u8 field_0x15; + u8 field_0x16; + u8 field_0x17; + u8 fatefulEncounter:1, female:1, genderless:1, alternateForm:5; + u8 HGSS_shinyLeaves; // TODO: Turn into bitfield + u16 Unused; + u16 Platinum_EggLocation; + u16 Platinum_MetLocation; +} PokemonDataBlockB; + +typedef struct { + u16 nickname[11]; + u8 Unused; + u8 originGame; + // TODO: Finish SinnohRibbonSet2 + u8 coolRibbon:1; + u8 field_0x19; + u8 field_0x1a; + u8 field_0x1b; + u32 Unused2; +} PokemonDataBlockC; + +typedef struct { + u16 otTrainerName[8]; + u8 dateEggReceived[3]; + u8 dateMet[3]; + u16 DP_EggLocation; + u16 DP_MetLocation; + u8 pokerus; + u8 pokeball; + u8 flags; + EncounterType encounterType; + u8 HGSS_Pokeball; + u8 HGSS_Performance; +} PokemonDataBlockD; + +typedef union { + PokemonDataBlockA blockA; + PokemonDataBlockB blockB; + PokemonDataBlockC blockC; + PokemonDataBlockD blockD; +} PokemonDataBlock; + +struct PokemonData { + u32 personalityValue; + u16 Unused; // Might be used for validity checks + u16 checksum; // Stored checksum of pokemon + PokemonDataBlock block1; // Blocks A-D; Order based on personalityValue + PokemonDataBlock block2; + PokemonDataBlock block3; + PokemonDataBlock block4; +}; + +#endif //POKEDIAMOND_POKEMON_H |