#ifndef GUARD_GLOBAL_H #define GUARD_GLOBAL_H #include "gba/gba.h" #ifndef REVISION #define REVISION 0 #endif // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) #define POKEMON_NAME_LENGTH 10 #define OT_NAME_LENGTH 7 extern u8 gStringVar1[]; extern u8 gStringVar2[]; extern u8 gStringVar3[]; enum { VERSION_SAPPHIRE = 1, VERSION_RUBY = 2, }; enum { MALE, FEMALE }; enum { OPTIONS_BUTTON_MODE_NORMAL, OPTIONS_BUTTON_MODE_LR, OPTIONS_BUTTON_MODE_L_EQUALS_A }; enum { OPTIONS_TEXT_SPEED_SLOW, OPTIONS_TEXT_SPEED_MID, OPTIONS_TEXT_SPEED_FAST }; struct Coords16 { s16 x; s16 y; }; struct SecretBaseRecord { u8 sbr_field_0; // ID? u8 sbr_field_1_0:4; u8 gender:1; u8 sbr_field_1_5:1; u8 sbr_field_2[7]; // 0xFF bytes? u8 trainerId[4]; // byte 0 is used for determining trainer class u16 sbr_field_e; u8 sbr_field_10; u8 sbr_field_11; u8 decorations[16]; u8 sbr_field_22[16]; u32 partyPersonality[6]; u16 partyMoves[6 * 4]; u16 partySpecies[6]; u16 partyHeldItems[6]; u8 partyLevels[6]; u8 partyEVs[6]; }; struct Time { s16 days; s8 hours; s8 minutes; s8 seconds; }; struct SaveBlock2 { u8 playerName[8]; u8 playerGender; // MALE, FEMALE u8 sb2_field_9; u8 playerTrainerId[4]; u16 playTimeHours; u8 playTimeMinutes; u8 playTimeSeconds; u8 playTimeVBlanks; u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] u8 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] u8 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes u8 filler[0x83]; struct Time localTimeOffset; }; extern struct SaveBlock2 gSaveBlock2; #endif // GUARD_GLOBAL_H