pokediamond/structs/pokemon.h

205 lines
4.2 KiB
C

#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 {
ARCEUS_NORMAL = 0,
ARCEUS_FIST = 8,
ARCEUS_SKY = 16,
ARCEUS_TOXIC = 24,
ARCEUS_EARTH = 32,
ARCEUS_STONE = 40,
ARCEUS_INSECT = 48,
ARCEUS_SPOOKY = 56,
ARCEUS_IRON = 64,
ARCEUS_FLAME = 72,
ARCEUS_SPLASH = 80,
ARCEUS_MEADOW = 88,
ARCEUS_ZAP = 96,
ARCEUS_MIND = 104,
ARCEUS_ICICLE = 112,
ARCEUS_DRACO = 120,
ARCEUS_DREAD = 128,
BURMY_PLANT = 0,
BURMY_SANDY = 8,
BURMY_TRASH = 16,
DEOXYS_NORMAL = 0,
DEOXYS_ATTACK = 8,
DEOXYS_DEFENSE = 16,
DEOXYS_SPEED = 24,
GIRATINA_ALTERED = 0,
GIRATINA_ORIGIN = 8,
ROTOM_NORMAL = 0,
ROTOM_HEAT = 8,
ROTOM_WASH = 16,
ROTOM_FROST = 24,
ROTOM_FAN = 32,
ROTOM_MOW = 40,
SHAYMIN_LAND = 0,
SHAYMIN_SKY = 8,
SHELLOS_WEST = 0,
SHELLOS_EAST = 8,
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,
UNOWN_EXCLAMATION_MARK = 208,
UNOWN_QUESTION_MARK = 216
} 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