#ifndef GUARD_DATA_H #define GUARD_DATA_H #include "constants/moves.h" #define SPECIES_SHINY_TAG 5000 #define MAX_TRAINER_ITEMS 4 #define TRAINER_PIC_WIDTH 64 #define TRAINER_PIC_HEIGHT 64 #define TRAINER_PIC_SIZE (TRAINER_PIC_WIDTH * TRAINER_PIC_HEIGHT / 2) // Red and Leaf's back pics have 5 frames, but this is presumably irrelevant in the places this is used. #define MAX_TRAINER_PIC_FRAMES 4 enum { BATTLER_AFFINE_NORMAL, BATTLER_AFFINE_EMERGE, BATTLER_AFFINE_RETURN, }; struct MonCoords { // This would use a bitfield, but some function // uses it as a u8 and casting won't match. u8 size; // u8 width:4, height:4; u8 y_offset; }; #define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8)) #define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8) #define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) #define TRAINER_PARTY_IVS(hp, atk, def, speed, spatk, spdef) (hp | (atk << 5) | (def << 10) | (speed << 15) | (spatk << 20) | (spdef << 25)) #define TRAINER_PARTY_EVS(hp, atk, def, speed, spatk, spdef) ((const u8[6]){hp,atk,def,spatk,spdef,speed}) #define TRAINER_PARTY_NATURE(nature) (nature+1) struct TrainerMonCustomized { const u8 *nickname; const u8 *ev; u32 iv; u16 moves[4]; u16 species; u16 heldItem; u16 ability; u8 lvl; u8 ball; u8 friendship; u8 nature : 5; bool8 gender : 2; bool8 isShiny : 1; }; #define EVERYTHING_CUSTOMIZED(party) { .EverythingCustomized = party}, .partySize = ARRAY_COUNT(party) union TrainerMonPtr { const struct TrainerMonCustomized *EverythingCustomized; }; struct Trainer { /*0x00*/ u32 aiFlags; /*0x04*/ union TrainerMonPtr party; /*0x08*/ u16 items[MAX_TRAINER_ITEMS]; /*0x10*/ u8 trainerClass; /*0x11*/ u8 encounterMusic_gender; // last bit is gender /*0x12*/ u8 trainerPic; /*0x13*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; /*0x1E*/ bool8 doubleBattle:1; u8 padding:7; /*0x1F*/ u8 partySize; }; #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) extern const u16 gMinigameDigits_Pal[]; extern const u32 gMinigameDigits_Gfx[]; extern const struct SpriteFrameImage gBattlerPicTable_PlayerLeft[]; extern const struct SpriteFrameImage gBattlerPicTable_OpponentLeft[]; extern const struct SpriteFrameImage gBattlerPicTable_PlayerRight[]; extern const struct SpriteFrameImage gBattlerPicTable_OpponentRight[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Brendan[]; extern const struct SpriteFrameImage gTrainerBackPicTable_May[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Red[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Leaf[]; extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[]; extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Wally[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Steven[]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpritePlayerSide[]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[]; extern const union AnimCmd *const gAnims_MonPic[]; extern const struct MonCoords gMonFrontPicCoords[]; extern const struct MonCoords gMonBackPicCoords[]; extern const struct CompressedSpriteSheet gMonBackPicTable[]; extern const struct CompressedSpriteSheet gMonBackPicTableFemale[]; extern const struct CompressedSpritePalette gMonPaletteTable[]; extern const struct CompressedSpritePalette gMonPaletteTableFemale[]; extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; extern const struct CompressedSpritePalette gMonShinyPaletteTableFemale[]; extern const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const union AnimCmd *const *const gTrainerBackAnimsPtrTable[]; extern const struct MonCoords gTrainerBackPicCoords[]; extern const struct CompressedSpriteSheet gTrainerBackPicTable[]; // functionally unused extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern const u8 gEnemyMonElevation[NUM_SPECIES]; extern const union AnimCmd *const *const gMonFrontAnimsPtrTable[]; extern const struct CompressedSpriteSheet gMonFrontPicTable[]; extern const struct CompressedSpriteSheet gMonFrontPicTableFemale[]; extern const struct Trainer gTrainers[]; extern const u8 gTrainerClassNames[][13]; extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; extern const u8 *const gZMoveNames[]; #endif // GUARD_DATA_H