diff --git a/graphics/trainers/back_pics/none.png b/graphics/trainers/back_pics/none.png new file mode 100644 index 0000000000..22cbdc68a1 Binary files /dev/null and b/graphics/trainers/back_pics/none.png differ diff --git a/graphics/trainers/front_pics/none.png b/graphics/trainers/front_pics/none.png new file mode 100644 index 0000000000..ceb74c2e8f Binary files /dev/null and b/graphics/trainers/front_pics/none.png differ diff --git a/graphics/trainers/palettes/none.pal b/graphics/trainers/palettes/none.pal new file mode 100644 index 0000000000..681f1cefe9 --- /dev/null +++ b/graphics/trainers/palettes/none.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 205 205 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +205 205 205 +172 172 172 +255 255 255 +0 0 0 diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index ccc3631a6d..e0ced7066a 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -14,9 +14,9 @@ bool8 IsBattleSEPlaying(enum BattlerId battler); void BattleLoadMonSpriteGfx(struct Pokemon *mon, enum BattlerId battler); void DecompressGhostFrontPic(enum BattlerId battler); void BattleGfxSfxDummy2(enum Species species); -void DecompressTrainerFrontPic(u16 frontPicId, enum BattlerId battler); -void DecompressTrainerBackPic(enum TrainerPicID backPicId, enum BattlerId battler); -void FreeTrainerFrontPicPalette(u16 frontPicId); +void DecompressTrainerFrontPic(enum TrainerPicID trainerPicId, enum BattlerId battler); +void DecompressTrainerBackPic(enum TrainerPicID trainerPicId, enum BattlerId battler); +void FreeTrainerFrontPicPalette(enum TrainerPicID trainerPicId); bool8 BattleLoadAllHealthBoxesGfx(u8 state); void LoadBattleBarGfx(u8 unused); bool8 BattleInitAllSprites(u8 *state1, u8 *battler); diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 0422ea8811..5017711a51 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -17,179 +17,167 @@ enum __attribute__((packed)) TrainerPicID { - TRAINER_PIC_FRONT_HIKER, - TRAINER_PIC_FRONT_AQUA_GRUNT_M, - TRAINER_PIC_FRONT_POKEMON_BREEDER_F, - TRAINER_PIC_FRONT_COOLTRAINER_M, - TRAINER_PIC_FRONT_BIRD_KEEPER, - TRAINER_PIC_FRONT_COLLECTOR, - TRAINER_PIC_FRONT_AQUA_GRUNT_F, - TRAINER_PIC_FRONT_SWIMMER_M, - TRAINER_PIC_FRONT_MAGMA_GRUNT_M, - TRAINER_PIC_FRONT_EXPERT_M, - TRAINER_PIC_FRONT_AQUA_ADMIN_M, - TRAINER_PIC_FRONT_BLACK_BELT, - TRAINER_PIC_FRONT_AQUA_ADMIN_F, - TRAINER_PIC_FRONT_AQUA_LEADER_ARCHIE, - TRAINER_PIC_FRONT_HEX_MANIAC, - TRAINER_PIC_FRONT_AROMA_LADY, - TRAINER_PIC_FRONT_RUIN_MANIAC, - TRAINER_PIC_FRONT_INTERVIEWER, - TRAINER_PIC_FRONT_TUBER_F, - TRAINER_PIC_FRONT_TUBER_M, - TRAINER_PIC_FRONT_COOLTRAINER_F, - TRAINER_PIC_FRONT_LADY, - TRAINER_PIC_FRONT_BEAUTY, - TRAINER_PIC_FRONT_RICH_BOY, - TRAINER_PIC_FRONT_EXPERT_F, - TRAINER_PIC_FRONT_POKEMANIAC, - TRAINER_PIC_FRONT_MAGMA_GRUNT_F, - TRAINER_PIC_FRONT_GUITARIST, - TRAINER_PIC_FRONT_KINDLER, - TRAINER_PIC_FRONT_CAMPER, - TRAINER_PIC_FRONT_PICNICKER, - TRAINER_PIC_FRONT_BUG_MANIAC, - TRAINER_PIC_FRONT_POKEMON_BREEDER_M, - TRAINER_PIC_FRONT_PSYCHIC_M, - TRAINER_PIC_FRONT_PSYCHIC_F, - TRAINER_PIC_FRONT_GENTLEMAN, - TRAINER_PIC_FRONT_ELITE_FOUR_SIDNEY, - TRAINER_PIC_FRONT_ELITE_FOUR_PHOEBE, - TRAINER_PIC_FRONT_ELITE_FOUR_GLACIA, - TRAINER_PIC_FRONT_ELITE_FOUR_DRAKE, - TRAINER_PIC_FRONT_LEADER_ROXANNE, - TRAINER_PIC_FRONT_LEADER_BRAWLY, - TRAINER_PIC_FRONT_LEADER_WATTSON, - TRAINER_PIC_FRONT_LEADER_FLANNERY, - TRAINER_PIC_FRONT_LEADER_NORMAN, - TRAINER_PIC_FRONT_LEADER_WINONA, - TRAINER_PIC_FRONT_LEADER_TATE_AND_LIZA, - TRAINER_PIC_FRONT_LEADER_JUAN, - TRAINER_PIC_FRONT_SCHOOL_KID_M, - TRAINER_PIC_FRONT_SCHOOL_KID_F, - TRAINER_PIC_FRONT_SR_AND_JR, - TRAINER_PIC_FRONT_POKEFAN_M, - TRAINER_PIC_FRONT_POKEFAN_F, - TRAINER_PIC_FRONT_YOUNGSTER, - TRAINER_PIC_FRONT_CHAMPION_WALLACE, - TRAINER_PIC_FRONT_FISHERMAN, - TRAINER_PIC_FRONT_CYCLING_TRIATHLETE_M, - TRAINER_PIC_FRONT_CYCLING_TRIATHLETE_F, - TRAINER_PIC_FRONT_RUNNING_TRIATHLETE_M, - TRAINER_PIC_FRONT_RUNNING_TRIATHLETE_F, - TRAINER_PIC_FRONT_SWIMMING_TRIATHLETE_M, - TRAINER_PIC_FRONT_SWIMMING_TRIATHLETE_F, - TRAINER_PIC_FRONT_DRAGON_TAMER, - TRAINER_PIC_FRONT_NINJA_BOY, - TRAINER_PIC_FRONT_BATTLE_GIRL, - TRAINER_PIC_FRONT_PARASOL_LADY, - TRAINER_PIC_FRONT_SWIMMER_F, - TRAINER_PIC_FRONT_TWINS, - TRAINER_PIC_FRONT_SAILOR, - TRAINER_PIC_FRONT_MAGMA_ADMIN, - TRAINER_PIC_FRONT_WALLY, - TRAINER_PIC_FRONT_BRENDAN, - TRAINER_PIC_FRONT_MAY, - TRAINER_PIC_FRONT_BUG_CATCHER, - TRAINER_PIC_FRONT_POKEMON_RANGER_M, - TRAINER_PIC_FRONT_POKEMON_RANGER_F, - TRAINER_PIC_FRONT_MAGMA_LEADER_MAXIE, - TRAINER_PIC_FRONT_LASS, - TRAINER_PIC_FRONT_YOUNG_COUPLE, - TRAINER_PIC_FRONT_OLD_COUPLE, - TRAINER_PIC_FRONT_SIS_AND_BRO, - TRAINER_PIC_FRONT_STEVEN, - TRAINER_PIC_FRONT_SALON_MAIDEN_ANABEL, - TRAINER_PIC_FRONT_DOME_ACE_TUCKER, - TRAINER_PIC_FRONT_PALACE_MAVEN_SPENSER, - TRAINER_PIC_FRONT_ARENA_TYCOON_GRETA, - TRAINER_PIC_FRONT_FACTORY_HEAD_NOLAND, - TRAINER_PIC_FRONT_PIKE_QUEEN_LUCY, - TRAINER_PIC_FRONT_PYRAMID_KING_BRANDON, - TRAINER_PIC_FRONT_RED, - TRAINER_PIC_FRONT_LEAF, - TRAINER_PIC_FRONT_RS_BRENDAN, - TRAINER_PIC_FRONT_RS_MAY, - TRAINER_PIC_FRONT_POKEMON_RANGER_M_FRLG, - TRAINER_PIC_FRONT_AROMA_LADY_FRLG, - TRAINER_PIC_FRONT_YOUNGSTER_FRLG, - TRAINER_PIC_FRONT_BUG_CATCHER_FRLG, - TRAINER_PIC_FRONT_LASS_FRLG, - TRAINER_PIC_FRONT_SAILOR_FRLG, - TRAINER_PIC_FRONT_CAMPER_FRLG, - TRAINER_PIC_FRONT_PICNICKER_FRLG, - TRAINER_PIC_FRONT_POKEMANIAC_FRLG, - TRAINER_PIC_FRONT_HIKER_FRLG, - TRAINER_PIC_FRONT_FISHERMAN_FRLG, - TRAINER_PIC_FRONT_SWIMMER_M_FRLG, - TRAINER_PIC_FRONT_BEAUTY_FRLG, - TRAINER_PIC_FRONT_SWIMMER_F_FRLG, - TRAINER_PIC_FRONT_PSYCHIC_M_FRLG, - TRAINER_PIC_FRONT_BIRD_KEEPER_FRLG, - TRAINER_PIC_FRONT_BLACK_BELT_FRLG, - TRAINER_PIC_FRONT_COOLTRAINER_M_FRLG, - TRAINER_PIC_FRONT_COOLTRAINER_F_FRLG, - TRAINER_PIC_FRONT_GENTLEMAN_FRLG, - TRAINER_PIC_FRONT_TWINS_FRLG, - TRAINER_PIC_FRONT_YOUNG_COUPLE_FRLG, - TRAINER_PIC_FRONT_SIS_AND_BRO_FRLG, - TRAINER_PIC_FRONT_PSYCHIC_F_FRLG, - TRAINER_PIC_FRONT_TUBER_F_FRLG, - TRAINER_PIC_FRONT_POKEMON_RANGER_F_FRLG, - TRAINER_PIC_FRONT_RUIN_MANIAC_FRLG, - TRAINER_PIC_FRONT_LADY_FRLG, - TRAINER_PIC_FRONT_SUPER_NERD_FRLG, - TRAINER_PIC_FRONT_BIKER_FRLG, - TRAINER_PIC_FRONT_BURGLAR_FRLG, - TRAINER_PIC_FRONT_ENGINEER_FRLG, - TRAINER_PIC_FRONT_CUE_BALL_FRLG, - TRAINER_PIC_FRONT_GAMER_FRLG, - TRAINER_PIC_FRONT_ROCKER_FRLG, - TRAINER_PIC_FRONT_JUGGLER_FRLG, - TRAINER_PIC_FRONT_TAMER_FRLG, - TRAINER_PIC_FRONT_RIVAL_EARLY_FRLG, - TRAINER_PIC_FRONT_SCIENTIST_FRLG, - TRAINER_PIC_FRONT_LEADER_GIOVANNI_FRLG, - TRAINER_PIC_FRONT_ROCKET_GRUNT_M_FRLG, - TRAINER_PIC_FRONT_ELITE_FOUR_LORELEI_FRLG, - TRAINER_PIC_FRONT_ELITE_FOUR_BRUNO_FRLG, - TRAINER_PIC_FRONT_ELITE_FOUR_AGATHA_FRLG, - TRAINER_PIC_FRONT_ELITE_FOUR_LANCE_FRLG, - TRAINER_PIC_FRONT_LEADER_BROCK_FRLG, - TRAINER_PIC_FRONT_LEADER_MISTY_FRLG, - TRAINER_PIC_FRONT_LEADER_LT_SURGE_FRLG, - TRAINER_PIC_FRONT_LEADER_ERIKA_FRLG, - TRAINER_PIC_FRONT_LEADER_KOGA_FRLG, - TRAINER_PIC_FRONT_LEADER_BLAINE_FRLG, - TRAINER_PIC_FRONT_LEADER_SABRINA_FRLG, - TRAINER_PIC_FRONT_RIVAL_LATE_FRLG, - TRAINER_PIC_FRONT_CHAMPION_RIVAL_FRLG, - TRAINER_PIC_FRONT_CHANNELER_FRLG, - TRAINER_PIC_FRONT_COOL_COUPLE_FRLG, - TRAINER_PIC_FRONT_CRUSH_KIN_FRLG, - TRAINER_PIC_FRONT_PROFESSOR_OAK_FRLG, - TRAINER_PIC_FRONT_ROCKET_GRUNT_F_FRLG, - TRAINER_PIC_FRONT_CRUSH_GIRL_FRLG, - TRAINER_PIC_FRONT_POKEMON_BREEDER_FRLG, - TRAINER_PIC_FRONT_PAINTER_FRLG, - TRAINER_PIC_FRONT_COUNT, - TRAINER_PIC_BACK_BRENDAN = TRAINER_PIC_FRONT_COUNT, // The player back pics are assumed to alternate according to the gender values (MALE/FEMALE) - TRAINER_PIC_BACK_MAY, - TRAINER_PIC_BACK_RED, - TRAINER_PIC_BACK_LEAF, - TRAINER_PIC_BACK_RUBY_SAPPHIRE_BRENDAN, - TRAINER_PIC_BACK_RUBY_SAPPHIRE_MAY, - TRAINER_PIC_BACK_WALLY, - TRAINER_PIC_BACK_STEVEN, - TRAINER_PIC_BACK_POKEDUDE, - TRAINER_PIC_BACK_OLD_MAN, + TRAINER_PIC_NONE, + TRAINER_PIC_BRENDAN, // The player back pics are assumed to alternate according to the gender values (MALE/FEMALE) + TRAINER_PIC_MAY, + TRAINER_PIC_RED, + TRAINER_PIC_LEAF, + TRAINER_PIC_RS_BRENDAN, + TRAINER_PIC_RS_MAY, + TRAINER_PIC_WALLY, + TRAINER_PIC_STEVEN, + TRAINER_PIC_POKEDUDE, + TRAINER_PIC_OLD_MAN, + TRAINER_PIC_HIKER, + TRAINER_PIC_AQUA_GRUNT_M, + TRAINER_PIC_POKEMON_BREEDER_F, + TRAINER_PIC_COOLTRAINER_M, + TRAINER_PIC_BIRD_KEEPER, + TRAINER_PIC_COLLECTOR, + TRAINER_PIC_AQUA_GRUNT_F, + TRAINER_PIC_SWIMMER_M, + TRAINER_PIC_MAGMA_GRUNT_M, + TRAINER_PIC_EXPERT_M, + TRAINER_PIC_AQUA_ADMIN_M, + TRAINER_PIC_BLACK_BELT, + TRAINER_PIC_AQUA_ADMIN_F, + TRAINER_PIC_AQUA_LEADER_ARCHIE, + TRAINER_PIC_HEX_MANIAC, + TRAINER_PIC_AROMA_LADY, + TRAINER_PIC_RUIN_MANIAC, + TRAINER_PIC_INTERVIEWER, + TRAINER_PIC_TUBER_F, + TRAINER_PIC_TUBER_M, + TRAINER_PIC_COOLTRAINER_F, + TRAINER_PIC_LADY, + TRAINER_PIC_BEAUTY, + TRAINER_PIC_RICH_BOY, + TRAINER_PIC_EXPERT_F, + TRAINER_PIC_POKEMANIAC, + TRAINER_PIC_MAGMA_GRUNT_F, + TRAINER_PIC_GUITARIST, + TRAINER_PIC_KINDLER, + TRAINER_PIC_CAMPER, + TRAINER_PIC_PICNICKER, + TRAINER_PIC_BUG_MANIAC, + TRAINER_PIC_POKEMON_BREEDER_M, + TRAINER_PIC_PSYCHIC_M, + TRAINER_PIC_PSYCHIC_F, + TRAINER_PIC_GENTLEMAN, + TRAINER_PIC_ELITE_FOUR_SIDNEY, + TRAINER_PIC_ELITE_FOUR_PHOEBE, + TRAINER_PIC_ELITE_FOUR_GLACIA, + TRAINER_PIC_ELITE_FOUR_DRAKE, + TRAINER_PIC_LEADER_ROXANNE, + TRAINER_PIC_LEADER_BRAWLY, + TRAINER_PIC_LEADER_WATTSON, + TRAINER_PIC_LEADER_FLANNERY, + TRAINER_PIC_LEADER_NORMAN, + TRAINER_PIC_LEADER_WINONA, + TRAINER_PIC_LEADER_TATE_AND_LIZA, + TRAINER_PIC_LEADER_JUAN, + TRAINER_PIC_SCHOOL_KID_M, + TRAINER_PIC_SCHOOL_KID_F, + TRAINER_PIC_SR_AND_JR, + TRAINER_PIC_POKEFAN_M, + TRAINER_PIC_POKEFAN_F, + TRAINER_PIC_YOUNGSTER, + TRAINER_PIC_CHAMPION_WALLACE, + TRAINER_PIC_FISHERMAN, + TRAINER_PIC_CYCLING_TRIATHLETE_M, + TRAINER_PIC_CYCLING_TRIATHLETE_F, + TRAINER_PIC_RUNNING_TRIATHLETE_M, + TRAINER_PIC_RUNNING_TRIATHLETE_F, + TRAINER_PIC_SWIMMING_TRIATHLETE_M, + TRAINER_PIC_SWIMMING_TRIATHLETE_F, + TRAINER_PIC_DRAGON_TAMER, + TRAINER_PIC_NINJA_BOY, + TRAINER_PIC_BATTLE_GIRL, + TRAINER_PIC_PARASOL_LADY, + TRAINER_PIC_SWIMMER_F, + TRAINER_PIC_TWINS, + TRAINER_PIC_SAILOR, + TRAINER_PIC_MAGMA_ADMIN, + TRAINER_PIC_BUG_CATCHER, + TRAINER_PIC_POKEMON_RANGER_M, + TRAINER_PIC_POKEMON_RANGER_F, + TRAINER_PIC_MAGMA_LEADER_MAXIE, + TRAINER_PIC_LASS, + TRAINER_PIC_YOUNG_COUPLE, + TRAINER_PIC_OLD_COUPLE, + TRAINER_PIC_SIS_AND_BRO, + TRAINER_PIC_SALON_MAIDEN_ANABEL, + TRAINER_PIC_DOME_ACE_TUCKER, + TRAINER_PIC_PALACE_MAVEN_SPENSER, + TRAINER_PIC_ARENA_TYCOON_GRETA, + TRAINER_PIC_FACTORY_HEAD_NOLAND, + TRAINER_PIC_PIKE_QUEEN_LUCY, + TRAINER_PIC_PYRAMID_KING_BRANDON, + TRAINER_PIC_POKEMON_RANGER_M_FRLG, + TRAINER_PIC_AROMA_LADY_FRLG, + TRAINER_PIC_YOUNGSTER_FRLG, + TRAINER_PIC_BUG_CATCHER_FRLG, + TRAINER_PIC_LASS_FRLG, + TRAINER_PIC_SAILOR_FRLG, + TRAINER_PIC_CAMPER_FRLG, + TRAINER_PIC_PICNICKER_FRLG, + TRAINER_PIC_POKEMANIAC_FRLG, + TRAINER_PIC_HIKER_FRLG, + TRAINER_PIC_FISHERMAN_FRLG, + TRAINER_PIC_SWIMMER_M_FRLG, + TRAINER_PIC_BEAUTY_FRLG, + TRAINER_PIC_SWIMMER_F_FRLG, + TRAINER_PIC_PSYCHIC_M_FRLG, + TRAINER_PIC_BIRD_KEEPER_FRLG, + TRAINER_PIC_BLACK_BELT_FRLG, + TRAINER_PIC_COOLTRAINER_M_FRLG, + TRAINER_PIC_COOLTRAINER_F_FRLG, + TRAINER_PIC_GENTLEMAN_FRLG, + TRAINER_PIC_TWINS_FRLG, + TRAINER_PIC_YOUNG_COUPLE_FRLG, + TRAINER_PIC_SIS_AND_BRO_FRLG, + TRAINER_PIC_PSYCHIC_F_FRLG, + TRAINER_PIC_TUBER_F_FRLG, + TRAINER_PIC_POKEMON_RANGER_F_FRLG, + TRAINER_PIC_RUIN_MANIAC_FRLG, + TRAINER_PIC_LADY_FRLG, + TRAINER_PIC_SUPER_NERD_FRLG, + TRAINER_PIC_BIKER_FRLG, + TRAINER_PIC_BURGLAR_FRLG, + TRAINER_PIC_ENGINEER_FRLG, + TRAINER_PIC_CUE_BALL_FRLG, + TRAINER_PIC_GAMER_FRLG, + TRAINER_PIC_ROCKER_FRLG, + TRAINER_PIC_JUGGLER_FRLG, + TRAINER_PIC_TAMER_FRLG, + TRAINER_PIC_RIVAL_EARLY_FRLG, + TRAINER_PIC_SCIENTIST_FRLG, + TRAINER_PIC_LEADER_GIOVANNI_FRLG, + TRAINER_PIC_ROCKET_GRUNT_M_FRLG, + TRAINER_PIC_ELITE_FOUR_LORELEI_FRLG, + TRAINER_PIC_ELITE_FOUR_BRUNO_FRLG, + TRAINER_PIC_ELITE_FOUR_AGATHA_FRLG, + TRAINER_PIC_ELITE_FOUR_LANCE_FRLG, + TRAINER_PIC_LEADER_BROCK_FRLG, + TRAINER_PIC_LEADER_MISTY_FRLG, + TRAINER_PIC_LEADER_LT_SURGE_FRLG, + TRAINER_PIC_LEADER_ERIKA_FRLG, + TRAINER_PIC_LEADER_KOGA_FRLG, + TRAINER_PIC_LEADER_BLAINE_FRLG, + TRAINER_PIC_LEADER_SABRINA_FRLG, + TRAINER_PIC_RIVAL_LATE_FRLG, + TRAINER_PIC_CHAMPION_RIVAL_FRLG, + TRAINER_PIC_CHANNELER_FRLG, + TRAINER_PIC_COOL_COUPLE_FRLG, + TRAINER_PIC_CRUSH_KIN_FRLG, + TRAINER_PIC_PROFESSOR_OAK_FRLG, + TRAINER_PIC_ROCKET_GRUNT_F_FRLG, + TRAINER_PIC_CRUSH_GIRL_FRLG, + TRAINER_PIC_POKEMON_BREEDER_FRLG, + TRAINER_PIC_PAINTER_FRLG, TRAINER_PIC_COUNT, - TRAINER_PIC_BACK_COUNT = (TRAINER_PIC_COUNT - TRAINER_PIC_FRONT_COUNT), }; -#define TRAINER_BACK_PIC_PLAYER_MALE (IS_FRLG ? TRAINER_PIC_BACK_RED : TRAINER_PIC_BACK_BRENDAN) -#define TRAINER_BACK_PIC_PLAYER_FEMALE (IS_FRLG ? TRAINER_PIC_BACK_LEAF : TRAINER_PIC_BACK_MAY) - enum { FACILITY_CLASS_HIKER, diff --git a/include/data.h b/include/data.h index 9f109c98bb..846c57ae3f 100644 --- a/include/data.h +++ b/include/data.h @@ -31,24 +31,29 @@ struct MonCoords u8 y_offset; }; -struct TrainerSprite +struct TrainerFrontPicInfo { - u8 y_offset; - struct CompressedSpriteSheet frontPic; - struct SpritePalette palette; + const u32 *imageData; + const u16 *paletteData; const union AnimCmd *const *const animation; const struct Coords16 mugshotCoords; s16 mugshotRotation; }; -struct TrainerBacksprite +struct TrainerBackPicInfo { const struct MonCoords coordinates; - const struct SpriteFrameImage backPic; - const struct SpritePalette palette; + const struct SpriteFrameImage image; + const u16 *paletteData; const union AnimCmd *const *const animation; }; +struct TrainerPicInfo +{ + const struct TrainerFrontPicInfo *frontPic; + const struct TrainerBackPicInfo *backPic; +}; + #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) @@ -132,7 +137,6 @@ struct Trainer u8 poolPickIndex; u8 poolPruneIndex; u16 overrideTrainer; - enum TrainerPicID trainerBackPic; }; struct TrainerClass @@ -203,8 +207,7 @@ extern const union AnimCmd sAnim_GeneralFrame0[]; extern const union AnimCmd sAnim_GeneralFrame3[]; extern const union AnimCmd *const gAnims_MonPic[]; extern const union AnimCmd *const gAnims_Trainer[]; -extern const struct TrainerSprite gTrainerSprites[]; -extern const struct TrainerBacksprite gTrainerBacksprites[]; +extern const struct TrainerPicInfo gTrainerPicInfo[TRAINER_PIC_COUNT]; extern const struct Trainer gTrainers[DIFFICULTY_COUNT][TRAINERS_COUNT]; extern const struct Trainer gBattlePartners[DIFFICULTY_COUNT][PARTNER_COUNT]; @@ -305,16 +308,6 @@ static inline const enum TrainerPicID GetTrainerPicFromId(u16 trainerId) return GetTrainerStructFromId(trainerId)->trainerPic; } -static inline const u8 GetTrainerBackPicFromId(u16 trainerId) -{ - enum DifficultyLevel partnerDifficulty = GetBattlePartnerDifficultyLevel(trainerId); - - if (trainerId > TRAINER_PARTNER(PARTNER_NONE)) - return gBattlePartners[partnerDifficulty][trainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; - - return GetTrainerStructFromId(trainerId)->trainerBackPic; -} - static inline const struct StartingStatuses GetTrainerStartingStatusFromId(u16 trainerId) { return GetTrainerStructFromId(trainerId)->startingStatus; @@ -355,4 +348,73 @@ static inline const u64 GetTrainerAIFlagsFromId(u16 trainerId) return GetTrainerStructFromId(trainerId)->aiFlags; } +static inline enum TrainerPicID SanitizeTrainerPic(enum TrainerPicID trainerPicID) +{ + assertf(trainerPicID < TRAINER_PIC_COUNT, "trainerPicID %d out of range", trainerPicID) + { + return TRAINER_PIC_NONE; + }; + return trainerPicID; +} + +static inline enum TrainerPicID SanitizeFrontTrainerPic(enum TrainerPicID trainerPicID) +{ + trainerPicID = SanitizeTrainerPic(trainerPicID); + assertf(gTrainerPicInfo[trainerPicID].frontPic != NULL, "trainerPicID %d does not have a front pic defined", trainerPicID) + { + return TRAINER_PIC_NONE; + } + return trainerPicID; +} + +static inline enum TrainerPicID SanitizeBackTrainerPic(enum TrainerPicID trainerPicID) +{ + trainerPicID = SanitizeTrainerPic(trainerPicID); + assertf(gTrainerPicInfo[trainerPicID].backPic != NULL, "trainerPicID %d does not have a back pic defined", trainerPicID) + { + return TRAINER_PIC_NONE; + } + return trainerPicID; +} + +static inline const u32 *GetTrainerFrontPicData(enum TrainerPicID trainerPic) +{ + return gTrainerPicInfo[SanitizeFrontTrainerPic(trainerPic)].frontPic->imageData; +} + +static inline const u16 *GetTrainerFrontPicPalette(enum TrainerPicID trainerPic) +{ + return gTrainerPicInfo[SanitizeFrontTrainerPic(trainerPic)].frontPic->paletteData; +} + +static inline const struct Coords16 GetTrainerFrontPicMugshotCoords(enum TrainerPicID trainerPic) +{ + return gTrainerPicInfo[SanitizeFrontTrainerPic(trainerPic)].frontPic->mugshotCoords; +} + +static inline s16 GetTrainerFrontPicMugshotRotation(enum TrainerPicID trainerPic) +{ + return gTrainerPicInfo[SanitizeFrontTrainerPic(trainerPic)].frontPic->mugshotRotation; +} + +static inline const struct MonCoords *GetTrainerBackPicCoords(enum TrainerPicID trainerPic) +{ + return &gTrainerPicInfo[SanitizeBackTrainerPic(trainerPic)].backPic->coordinates; +} + +static inline const struct SpriteFrameImage *GetTrainerBackPicImage(enum TrainerPicID trainerPic) +{ + return &gTrainerPicInfo[SanitizeBackTrainerPic(trainerPic)].backPic->image; +} + +static inline const union AnimCmd *const *GetTrainerBackPicAnims(enum TrainerPicID trainerPic) +{ + return gTrainerPicInfo[SanitizeBackTrainerPic(trainerPic)].backPic->animation; +} + +static inline const u16 *GetTrainerBackPicPalette(enum TrainerPicID trainerPic) +{ + return gTrainerPicInfo[SanitizeBackTrainerPic(trainerPic)].backPic->paletteData; +} + #endif // GUARD_DATA_H diff --git a/include/decompress.h b/include/decompress.h index af51a304ef..2e7ba76ba0 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -74,8 +74,6 @@ u32 LoadCompressedSpriteSheetByTemplate(const struct SpriteTemplate *template, s u32 LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer); bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src); -void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer); - void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, enum Species species, u32 personality); void HandleLoadSpecialPokePicIsEgg(bool32 isFrontPic, void *dest, enum Species species, u32 personality, bool32 isEgg); diff --git a/include/field_effect.h b/include/field_effect.h index 656c5f0c95..e864ead620 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -16,7 +16,7 @@ void ReturnToFieldFromFlyMapSelect(void); void FieldCallback_UseFly(void); u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority); void FieldEffectStop(struct Sprite *sprite, u8 id); -u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); +u8 CreateTrainerSprite(enum TrainerPicID trainerPicId, s16 x, s16 y, u8 subpriority, u8 *buffer); void FldEff_TeleportWarpOut(void); void FieldEffectActiveListRemove(u8 id); void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); diff --git a/include/trainer.h b/include/trainer.h new file mode 100644 index 0000000000..2309984438 --- /dev/null +++ b/include/trainer.h @@ -0,0 +1,15 @@ +#ifndef GUARD_TRAINER_H +#define GUARD_TRAINER_H + +#include "constants/global.h" +#include "constants/trainers.h" + +enum TrainerPicID GetPlayerTrainerPic(enum Gender gender, enum GameVersion version); + + +static inline u16 GetTrainerPicTag(enum TrainerPicID trainerPicId, bool32 isFrontPic) +{ + return isFrontPic ? trainerPicId : TRAINER_PIC_COUNT + trainerPicId; +} + +#endif // GUARD_TRAINER_H diff --git a/migration_scripts/1.13/convert_trainers.py b/migration_scripts/1.13/convert_trainers.py index 59ad3cccee..ba48f5465e 100644 --- a/migration_scripts/1.13/convert_trainers.py +++ b/migration_scripts/1.13/convert_trainers.py @@ -32,7 +32,7 @@ end_pokemon_definition = re.compile(r' },') trainer_class_definition = re.compile(r'\.trainerClass = TRAINER_CLASS_(\w+)') encounter_music_gender_definition = re.compile(r'\.encounterMusic_gender = (F_TRAINER_FEMALE \| )?TRAINER_ENCOUNTER_MUSIC_(\w+)') encounter_music_definition = re.compile(r'TRAINER_ENCOUNTER_MUSIC_(\w+)') -trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_FRONT_(\w+)') +trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_(\w+)') trainer_name_definition = re.compile(r'\.trainerName = _\("([^"]*)"\)') trainer_items_definition = re.compile(r'\.items = \{([^}]*)\}') trainer_item_definition = re.compile(r'ITEM_(\w+)') diff --git a/migration_scripts/1.9/convert_partner_parties.py b/migration_scripts/1.9/convert_partner_parties.py index eeefe9fa4f..108e1b02a9 100644 --- a/migration_scripts/1.9/convert_partner_parties.py +++ b/migration_scripts/1.9/convert_partner_parties.py @@ -183,7 +183,7 @@ begin_trainer_definition = re.compile(r' \[(PARTNER_\w+)\] =') end_trainer_definition = re.compile(r' }') trainer_class_definition = re.compile(r'\.trainerClass = TRAINER_CLASS_(\w+)') encounter_music_gender_definition = re.compile(r'\.encounterMusic_gender = (F_TRAINER_FEMALE \| )?TRAINER_ENCOUNTER_MUSIC_(\w+)') -trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_BACK_(\w+)') +trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_(\w+)') trainer_name_definition = re.compile(r'\.trainerName = _\("([^"]*)"\)') trainer_items_definition = re.compile(r'\.items = \{([^}]*)\}') trainer_item_definition = re.compile(r'ITEM_(\w+)') diff --git a/migration_scripts/1.9/convert_trainer_parties.py b/migration_scripts/1.9/convert_trainer_parties.py index caf18c183b..463816c021 100644 --- a/migration_scripts/1.9/convert_trainer_parties.py +++ b/migration_scripts/1.9/convert_trainer_parties.py @@ -183,7 +183,7 @@ begin_trainer_definition = re.compile(r' \[(TRAINER_\w+)\] =') end_trainer_definition = re.compile(r' }') trainer_class_definition = re.compile(r'\.trainerClass = TRAINER_CLASS_(\w+)') encounter_music_gender_definition = re.compile(r'\.encounterMusic_gender = (F_TRAINER_FEMALE \| )?TRAINER_ENCOUNTER_MUSIC_(\w+)') -trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_FRONT_(\w+)') +trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_(\w+)') trainer_name_definition = re.compile(r'\.trainerName = _\("([^"]*)"\)') trainer_items_definition = re.compile(r'\.items = \{([^}]*)\}') trainer_item_definition = re.compile(r'ITEM_(\w+)') diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 317b1f548c..b17dca5a79 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -149,7 +149,7 @@ static void LinkPartnerHandleDrawTrainerPic(enum BattlerId battler) trainerPicId = LinkPlayerGetTrainerPicId(GetBattlerMultiplayerId(battler)); BtlController_HandleDrawTrainerPic(battler, trainerPicId, FALSE, - xPos, 80 + 4 * (8 - gTrainerBacksprites[trainerPicId].coordinates.size), + xPos, 80 + 4 * (8 - GetTrainerBackPicCoords(trainerPicId)->size), -1); } @@ -161,7 +161,7 @@ static void LinkPartnerHandleTrainerSlideBack(enum BattlerId battler) static void LinkPartnerHandleIntroTrainerBallThrow(enum BattlerId battler) { enum TrainerPicID trainerPicId = LinkPlayerGetTrainerPicId(GetBattlerMultiplayerId(battler)); - const u16 *trainerPal = gTrainerBacksprites[trainerPicId].palette.data; + const u16 *trainerPal = GetTrainerBackPicPalette(trainerPicId); // Link partner uses the same intro sequence as the player partner. BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Controller_PlayerPartnerShowIntroHealthbox); } diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index 37b70a4d2b..1509e0bf55 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -17,6 +17,7 @@ #include "strings.h" #include "task.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "constants/battle_string_ids.h" #include "constants/items.h" @@ -677,13 +678,25 @@ void OakOldManBufferExecCompleted(enum BattlerId battler) static void OakOldManHandleDrawTrainerPic(enum BattlerId battler) { - u32 trainerPicId = (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) ? gSaveBlock2Ptr->playerGender + TRAINER_PIC_BACK_RED : TRAINER_PIC_BACK_OLD_MAN; - BtlController_HandleDrawTrainerPic(battler, trainerPicId, FALSE, 80, (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80, 30); + enum TrainerPicID trainerPicId; + + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); + else + trainerPicId = TRAINER_PIC_OLD_MAN; + + BtlController_HandleDrawTrainerPic(battler, trainerPicId, FALSE, 80, (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80, 30); } static void OakOldManHandleTrainerSlide(enum BattlerId battler) { - u32 trainerPicId = (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) ? gSaveBlock2Ptr->playerGender + TRAINER_PIC_BACK_RED : TRAINER_PIC_BACK_OLD_MAN; + enum TrainerPicID trainerPicId; + + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); + else + trainerPicId = TRAINER_PIC_OLD_MAN; + BtlController_HandleTrainerSlide(battler, trainerPicId); } @@ -856,7 +869,8 @@ static void OakOldManHandleIntroTrainerBallThrow(enum BattlerId battler) { if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { - const u16 *trainerPal = gTrainerBacksprites[gSaveBlock2Ptr->playerGender].palette.data; + enum TrainerPicID trainerPicID = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); + const u16 *trainerPal = GetTrainerBackPicPalette(trainerPicID); BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F8, trainerPal, 31, Intro_TryShinyAnimShowHealthbox); } else diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a95233f0ee..e8f8b8ae85 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -382,7 +382,7 @@ static void OpponentHandleDrawTrainerPic(enum BattlerId battler) { if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) { - trainerPicId = TRAINER_PIC_FRONT_LEAF; + trainerPicId = TRAINER_PIC_LEAF; if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) xPos = 176; else @@ -390,7 +390,7 @@ static void OpponentHandleDrawTrainerPic(enum BattlerId battler) } else { - trainerPicId = TRAINER_PIC_FRONT_RED; + trainerPicId = TRAINER_PIC_RED; xPos = 152; } } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index eb75c03a52..852c01cafe 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -29,6 +29,7 @@ #include "task.h" #include "test_runner.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "window.h" #include "line_break.h" @@ -511,7 +512,7 @@ void HandleInputChooseTarget(enum BattlerId battler) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move) || (moveTarget == TARGET_OPPONENT && IsOnPlayerSide(gMultiUsePlayerCursor))) validTarget = FALSE; - + if (B_SHOW_EFFECTIVENESS && validTarget) MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(battler, gMultiUsePlayerCursor), battler); @@ -1881,19 +1882,10 @@ static void PlayerHandleLoadMonSprite(enum BattlerId battler) enum TrainerPicID LinkPlayerGetTrainerPicId(u32 multiplayerId) { - enum TrainerPicID trainerPicId; - u8 gender = gLinkPlayers[multiplayerId].gender; enum GameVersion version = gLinkPlayers[multiplayerId].version & 0xFF; - if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - trainerPicId = gender + TRAINER_PIC_BACK_RED; - else if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) - trainerPicId = gender + TRAINER_PIC_BACK_RUBY_SAPPHIRE_BRENDAN; - else - trainerPicId = gender + TRAINER_PIC_BACK_BRENDAN; - - return trainerPicId; + return GetPlayerTrainerPic(gender, version); } static enum TrainerPicID PlayerGetTrainerBackPicId(void) @@ -1903,7 +1895,7 @@ static enum TrainerPicID PlayerGetTrainerBackPicId(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK) trainerPicId = LinkPlayerGetTrainerPicId(GetMultiplayerId()); else - trainerPicId = gSaveBlock2Ptr->playerGender == FEMALE ? TRAINER_BACK_PIC_PLAYER_FEMALE : TRAINER_BACK_PIC_PLAYER_MALE; + trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); return trainerPicId; } @@ -1919,12 +1911,12 @@ static void PlayerHandleDrawTrainerPic(enum BattlerId battler) if (IsMultibattleTest()) { - trainerPicId = TRAINER_PIC_BACK_BRENDAN; + trainerPicId = TRAINER_PIC_BRENDAN; if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) xPos = 32; else xPos = 80; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } else { @@ -1944,13 +1936,13 @@ static void PlayerHandleDrawTrainerPic(enum BattlerId battler) } else { - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } } else { xPos = 80; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } } @@ -2302,8 +2294,8 @@ static void PlayerHandleOneReturnValue_Duplicate(enum BattlerId battler) static void PlayerHandleIntroTrainerBallThrow(enum BattlerId battler) { - const u32 paletteIndex = PlayerGetTrainerBackPicId() - TRAINER_PIC_FRONT_COUNT; - const u16 *trainerPal = gTrainerBacksprites[paletteIndex].palette.data; + enum TrainerPicID trainerPicID = PlayerGetTrainerBackPicId(); + const u16 *trainerPal = GetTrainerBackPicPalette(trainerPicID); BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F8, trainerPal, 31, Intro_TryShinyAnimShowHealthbox); } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index c684fe2c30..b2fb26ca17 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -25,6 +25,7 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "window.h" #include "constants/battle_anim.h" @@ -202,9 +203,9 @@ static enum TrainerPicID PlayerPartnerGetTrainerBackPicId(enum DifficultyLevel d enum TrainerPicID trainerPicId; if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; + trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic; else - trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_PIC_BACK_BRENDAN; + trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); return trainerPicId; } @@ -222,15 +223,15 @@ static void PlayerPartnerHandleDrawTrainerPic(enum BattlerId battler) if (IsMultibattleTest()) { - trainerPicId = TRAINER_PIC_BACK_STEVEN; + trainerPicId = TRAINER_PIC_STEVEN; xPos = 90; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } else if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) { trainerPicId = PlayerPartnerGetTrainerBackPicId(difficulty); xPos = 90; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } else if (IsAiVsAiBattle()) { @@ -356,11 +357,11 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(enum BattlerId battler) enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId); if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) - trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic].palette.data; + trainerPal = GetTrainerBackPicPalette(gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic); else if (IsAiVsAiBattle()) - trainerPal = gTrainerSprites[GetTrainerBackPicFromId(gPartnerTrainerId)].palette.data; + trainerPal = GetTrainerFrontPicPalette(GetTrainerPicFromId(gPartnerTrainerId)); else - trainerPal = gTrainerSprites[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].palette.data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. + trainerPal = GetTrainerFrontPicPalette(GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)); // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Controller_PlayerPartnerShowIntroHealthbox); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index d9ff71afef..58fbf2eed0 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -280,7 +280,7 @@ static void RecordedOpponentHandleDrawTrainerPic(enum BattlerId battler) { if (position == B_POSITION_OPPONENT_LEFT) { - trainerPicId = TRAINER_PIC_FRONT_LEAF; + trainerPicId = TRAINER_PIC_LEAF; if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) xPos = 176; else @@ -288,7 +288,7 @@ static void RecordedOpponentHandleDrawTrainerPic(enum BattlerId battler) } else { - trainerPicId = TRAINER_PIC_FRONT_RED; + trainerPicId = TRAINER_PIC_RED; xPos = 152; } } diff --git a/src/battle_controller_recorded_partner.c b/src/battle_controller_recorded_partner.c index 4f019deaae..a625b8bf7d 100644 --- a/src/battle_controller_recorded_partner.c +++ b/src/battle_controller_recorded_partner.c @@ -25,6 +25,7 @@ #include "task.h" #include "test_runner.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "window.h" #include "constants/battle_anim.h" @@ -198,9 +199,9 @@ static enum TrainerPicID RecordedPartnerGetTrainerBackPicId(enum DifficultyLevel enum TrainerPicID trainerPicId; if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; + trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic; else - trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_PIC_BACK_BRENDAN; + trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); return trainerPicId; } @@ -218,9 +219,9 @@ static void RecordedPartnerHandleDrawTrainerPic(enum BattlerId battler) if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) { - trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; + trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic; xPos = 90; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } else if (IsAiVsAiBattle()) { @@ -285,11 +286,11 @@ static void RecordedPartnerHandleIntroTrainerBallThrow(enum BattlerId battler) enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId); if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) - trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic].palette.data; + trainerPal = GetTrainerBackPicPalette(gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic); else if (IsAiVsAiBattle()) - trainerPal = gTrainerSprites[GetTrainerBackPicFromId(gPartnerTrainerId)].palette.data; + trainerPal = GetTrainerFrontPicPalette(GetTrainerPicFromId(gPartnerTrainerId)); else - trainerPal = gTrainerSprites[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].palette.data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. + trainerPal = GetTrainerFrontPicPalette(GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)); // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Controller_RecordedPartnerShowIntroHealthbox); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 78908955d0..fd3bf0e7b5 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -22,6 +22,7 @@ #include "task.h" #include "test_runner.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "window.h" #include "constants/battle_anim.h" @@ -277,25 +278,27 @@ static void RecordedPlayerHandleDrawTrainerPic(enum BattlerId battler) // Sets Multibattle test player sprites to not be Hiker if (IsMultibattleTest()) { - trainerPicId = TRAINER_PIC_BACK_BRENDAN; + trainerPicId = TRAINER_PIC_BRENDAN; if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) xPos = 32; else xPos = 80; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } else { + enum Gender gender; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - trainerPicId = GetBattlerLinkPlayerGender(battler) + TRAINER_PIC_BACK_BRENDAN; + gender = GetBattlerLinkPlayerGender(battler); else - trainerPicId = gLinkPlayers[gRecordedBattleMultiplayerId].gender + TRAINER_PIC_BACK_BRENDAN; + gender = gLinkPlayers[gRecordedBattleMultiplayerId].gender; } else - trainerPicId = gLinkPlayers[0].gender + TRAINER_PIC_BACK_BRENDAN; + gender = gLinkPlayers[0].gender; + trainerPicId = GetPlayerTrainerPic(gender, GAME_VERSION); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon @@ -311,13 +314,13 @@ static void RecordedPlayerHandleDrawTrainerPic(enum BattlerId battler) } else { - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } } else { xPos = 80; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + yPos = (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80; } } @@ -400,13 +403,15 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(enum BattlerId battler) { enum TrainerPicID trainerPicId; const u16 *trainerPal; + enum Gender gender; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(battler)].gender == FEMALE ? TRAINER_BACK_PIC_PLAYER_FEMALE : TRAINER_BACK_PIC_PLAYER_MALE; + gender = gLinkPlayers[GetBattlerMultiplayerId(battler)].gender; else - trainerPicId = gSaveBlock2Ptr->playerGender == FEMALE ? TRAINER_BACK_PIC_PLAYER_FEMALE : TRAINER_BACK_PIC_PLAYER_MALE; + gender = gSaveBlock2Ptr->playerGender; - trainerPal = gTrainerBacksprites[trainerPicId].palette.data; + trainerPicId = GetPlayerTrainerPic(gender, GAME_VERSION); + trainerPal = GetTrainerBackPicPalette(trainerPicId); BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Intro_TryShinyAnimShowHealthbox); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index e15ed35188..e5cb4d9361 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -19,6 +19,7 @@ #include "sound.h" #include "task.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "window.h" #include "line_break.h" @@ -275,10 +276,10 @@ void SafariBufferExecCompleted(enum BattlerId battler) static void SafariHandleDrawTrainerPic(enum BattlerId battler) { - enum TrainerPicID trainerPicId = gSaveBlock2Ptr->playerGender == FEMALE ? TRAINER_BACK_PIC_PLAYER_FEMALE : TRAINER_BACK_PIC_PLAYER_MALE; + enum TrainerPicID trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); BtlController_HandleDrawTrainerPic(battler, trainerPicId, FALSE, - 80, 80 + 4 * (8 - gTrainerBacksprites[trainerPicId].coordinates.size), + 80, 80 + 4 * (8 - GetTrainerBackPicCoords(trainerPicId)->size), 30); } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 427da044ae..de31aef0c3 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -282,14 +282,14 @@ void WallyBufferExecCompleted(enum BattlerId battler) static void WallyHandleDrawTrainerPic(enum BattlerId battler) { - BtlController_HandleDrawTrainerPic(battler, TRAINER_PIC_BACK_WALLY, FALSE, - 80, 80 + 4 * (8 - gTrainerBacksprites[TRAINER_PIC_BACK_WALLY].coordinates.size), + BtlController_HandleDrawTrainerPic(battler, TRAINER_PIC_WALLY, FALSE, + 80, 80 + 4 * (8 - GetTrainerBackPicCoords(TRAINER_PIC_WALLY)->size), 30); } static void WallyHandleTrainerSlide(enum BattlerId battler) { - BtlController_HandleTrainerSlide(battler, TRAINER_PIC_BACK_WALLY); + BtlController_HandleTrainerSlide(battler, TRAINER_PIC_WALLY); } #undef sSpeedX @@ -366,7 +366,7 @@ static void WallyHandleFaintingCry(enum BattlerId battler) static void WallyHandleIntroTrainerBallThrow(enum BattlerId battler) { - const u16 *trainerPal = gTrainerBacksprites[TRAINER_PIC_BACK_WALLY].palette.data; + const u16 *trainerPal = GetTrainerBackPicPalette(TRAINER_PIC_WALLY); BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F8, trainerPal, 31, Intro_TryShinyAnimShowHealthbox); } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 10d030eaa4..eb9f9d0ae7 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -26,6 +26,7 @@ #include "task.h" #include "test_runner.h" #include "text.h" +#include "trainer.h" #include "util.h" #include "wild_encounter.h" #include "constants/abilities.h" @@ -2433,7 +2434,7 @@ void BtlController_HandleDrawTrainerPic(enum BattlerId battler, enum TrainerPicI yPos, subpriority); - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag); + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(trainerPicId, TRUE)); gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = -DISPLAY_WIDTH; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = 2; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineParam = trainerPicId; @@ -2451,7 +2452,7 @@ void BtlController_HandleDrawTrainerPic(enum BattlerId battler, enum TrainerPicI yPos, subpriority); - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag); + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(trainerPicId, TRUE)); gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineMode = ST_OAM_AFFINE_OFF; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].hFlip = 1; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].y2 = 48; @@ -2471,7 +2472,7 @@ void BtlController_HandleDrawTrainerPic(enum BattlerId battler, enum TrainerPicI // Sets sprite priority to 1 so mons don't remain in foreground gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.priority = 1; - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerBacksprites[trainerPicId].palette.tag); + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(trainerPicId, FALSE)); } gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = DISPLAY_WIDTH; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = -2; @@ -2492,13 +2493,13 @@ void BtlController_HandleTrainerSlide(enum BattlerId battler, enum TrainerPicID SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler)); gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 80, - (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80, + (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80, 30); if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) gBattlerSpriteIds[battler] = gBattleStruct->trainerSlideSpriteIds[battler]; // Sets sprite priority to 1 so mons don't remain in foreground gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.priority = 1; - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerBacksprites[trainerPicId].palette.tag); + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(trainerPicId, FALSE)); gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = -96; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = 2; } @@ -2508,7 +2509,7 @@ void BtlController_HandleTrainerSlide(enum BattlerId battler, enum TrainerPicID SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(battler)); gBattleStruct->trainerSlideSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 176, 40, 0); gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineParam = trainerPicId; - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerSprites[trainerPicId].palette.tag); + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(trainerPicId, TRUE)); gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = 96; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x += 32; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = -2; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 486dde21bc..6aea646eae 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -23,6 +23,7 @@ #include "data.h" #include "palette.h" #include "contest.h" +#include "trainer.h" #include "trainer_pokemon_sprites.h" #include "constants/songs.h" #include "constants/rgb.h" @@ -689,24 +690,23 @@ void BattleGfxSfxDummy2(enum Species species) { } -void DecompressTrainerFrontPic(u16 frontPicId, enum BattlerId battler) +void DecompressTrainerFrontPic(enum TrainerPicID trainerPicId, enum BattlerId battler) { enum BattlerPosition position = GetBattlerPosition(battler); - DecompressPicFromTable(&gTrainerSprites[frontPicId].frontPic, - gMonSpritesGfxPtr->spritesGfx[position]); - LoadSpritePalette(&gTrainerSprites[frontPicId].palette); + DecompressDataWithHeaderWram(GetTrainerFrontPicData(trainerPicId), gMonSpritesGfxPtr->spritesGfx[position]); + LoadSpritePaletteWithTag(GetTrainerFrontPicPalette(trainerPicId), GetTrainerPicTag(trainerPicId, TRUE)); } -void DecompressTrainerBackPic(enum TrainerPicID backPicId, enum BattlerId battler) +void DecompressTrainerBackPic(enum TrainerPicID trainerPicId, enum BattlerId battler) { enum BattlerPosition position = GetBattlerPosition(battler); - CopyTrainerBackspriteFramesToDest(backPicId, gMonSpritesGfxPtr->spritesGfx[position]); - LoadSpritePalette(&gTrainerBacksprites[backPicId].palette); + CopyTrainerBackspriteFramesToDest(trainerPicId, gMonSpritesGfxPtr->spritesGfx[position]); + LoadSpritePaletteWithTag(GetTrainerBackPicPalette(trainerPicId), GetTrainerPicTag(trainerPicId, FALSE)); } -void FreeTrainerFrontPicPalette(u16 frontPicId) +void FreeTrainerFrontPicPalette(enum TrainerPicID trainerPicId) { - FreeSpritePaletteByTag(gTrainerSprites[frontPicId].palette.tag); + FreeSpritePaletteByTag(GetTrainerPicTag(trainerPicId, TRUE)); } // Unused. diff --git a/src/battle_transition.c b/src/battle_transition.c index 4a58de592d..2c24987a4a 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -2583,18 +2583,20 @@ static void Mugshots_CreateTrainerPics(struct Task *task) { struct Sprite *opponentSpriteA, *opponentSpriteB=0, *playerSprite, *partnerSprite=0; - u8 trainerAPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); - u8 trainerBPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentB); - u8 partnerPicId = GetTrainerPicFromId(gPartnerTrainerId); + enum TrainerPicID trainerAPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); + enum TrainerPicID trainerBPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentB); + enum TrainerPicID partnerPicId = GetTrainerPicFromId(gPartnerTrainerId); + struct Coords16 mugshotCoordsA = GetTrainerFrontPicMugshotCoords(trainerAPicId); s16 opponentARotationScales = 0; s16 opponentBRotationScales = 0; gReservedSpritePaletteCount = 10; if (TRAINER_BATTLE_PARAM.opponentB != TRAINER_NONE && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { + struct Coords16 mugshotCoordsB = GetTrainerFrontPicMugshotCoords(trainerBPicId); task->tOpponentSpriteBId = CreateTrainerSprite(trainerBPicId, - gTrainerSprites[trainerBPicId].mugshotCoords.x - 240, - gTrainerSprites[trainerBPicId].mugshotCoords.y + 42, + mugshotCoordsB.x - 240, + mugshotCoordsB.y + 42, 0, NULL); opponentSpriteB = &gSprites[task->tOpponentSpriteBId]; opponentSpriteB->callback = SpriteCB_MugshotTrainerPicPartner; @@ -2603,13 +2605,13 @@ static void Mugshots_CreateTrainerPics(struct Task *task) opponentSpriteB->oam.shape = SPRITE_SHAPE(64x32); opponentSpriteB->oam.size = SPRITE_SIZE(64x32); CalcCenterToCornerVec(opponentSpriteB, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE); - opponentBRotationScales = gTrainerSprites[trainerBPicId].mugshotRotation; + opponentBRotationScales = GetTrainerFrontPicMugshotRotation(trainerBPicId); SetOamMatrixRotationScaling(opponentSpriteB->oam.matrixNum, opponentBRotationScales, opponentBRotationScales, 0); } task->tOpponentSpriteAId = CreateTrainerSprite(trainerAPicId, - gTrainerSprites[trainerAPicId].mugshotCoords.x - 32, - gTrainerSprites[trainerAPicId].mugshotCoords.y + 42, + mugshotCoordsA.x - 32, + mugshotCoordsA.y + 42, 0, NULL); gReservedSpritePaletteCount = 12; @@ -2655,7 +2657,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task) CalcCenterToCornerVec(opponentSpriteA, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE); CalcCenterToCornerVec(playerSprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE); - opponentARotationScales = gTrainerSprites[trainerAPicId].mugshotRotation; + opponentARotationScales = GetTrainerFrontPicMugshotRotation(trainerAPicId); SetOamMatrixRotationScaling(opponentSpriteA->oam.matrixNum, opponentARotationScales, opponentARotationScales, 0); SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0); diff --git a/src/data/battle_partners.party b/src/data/battle_partners.party index 8de1dc0f2b..d330a35fa5 100644 --- a/src/data/battle_partners.party +++ b/src/data/battle_partners.party @@ -4,7 +4,6 @@ Class: Pkmn Trainer 1 Pic: Brendan Gender: Male Music: Male -Back Pic: Brendan === PARTNER_STEVEN === Name: STEVEN @@ -12,7 +11,6 @@ Class: Rival Pic: Steven Gender: Male Music: Male -Back Pic: Steven AI: Basic Trainer Metang diff --git a/src/data/graphics/trainers.h b/src/data/graphics/trainers.h index dfba0632ab..afca4140f4 100644 --- a/src/data/graphics/trainers.h +++ b/src/data/graphics/trainers.h @@ -1,6 +1,9 @@ #include "constants/trainers.h" #include "data.h" +const u32 gTrainerFrontPic_None[] = INCBIN_U32("graphics/trainers/front_pics/none.4bpp.smol"); +const u16 gTrainerPalette_None[] = INCBIN_U16("graphics/trainers/palettes/none.gbapal"); + const u32 gTrainerFrontPic_Hiker[] = INCBIN_U32("graphics/trainers/front_pics/hiker.4bpp.smol"); const u16 gTrainerPalette_Hiker[] = INCBIN_U16("graphics/trainers/front_pics/hiker.gbapal"); @@ -466,6 +469,7 @@ const u16 gTrainerPalette_LadyFrlg[] = INCBIN_U16("graphics/trainers/palettes/la const u32 gTrainerFrontPic_PainterFrlg[] = INCBIN_U32("graphics/trainers/front_pics/painter_frlg.4bpp.smol"); const u16 gTrainerPalette_PainterFrlg[] = INCBIN_U16("graphics/trainers/palettes/painter_frlg.gbapal"); +static const u8 gTrainerBackPic_None[] = INCBIN_U8("graphics/trainers/back_pics/none.4bpp"); const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan.4bpp"); const u8 gTrainerBackPic_May[] = INCBIN_U8("graphics/trainers/back_pics/may.4bpp"); const u8 gTrainerBackPic_Red[] = INCBIN_U8("graphics/trainers/back_pics/red.4bpp"); @@ -482,178 +486,6 @@ const u16 gTrainerBackPicPalette_Leaf[] = INCBIN_U16("graphics/trainers/back_pic const u16 gTrainerBackPicPalette_Pokedude[] = INCBIN_U16("graphics/trainers/back_pics/pokedude.gbapal"); const u16 gTrainerBackPicPalette_OldMan[] = INCBIN_U16("graphics/trainers/back_pics/old_man.gbapal"); -// The first two parameters invoke a front pic and palette by -// calling a "TRAINER_PIC" constant (e.g. TRAINER_PIC_FRONT_HIKER), and -// gTrainerFrontPic/gTrainerPalette pointers, (e.g "gTrainerFrontPic_Hiker" and "gTrainerPalette_Hiker"). -// The last three parameters control the X and Y coordinates and rotation of the mugshot on the screen. -// They default to 0, 0, and 0x200 which are default values used by the majority of the game's trainer sprites. -#define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \ - [trainerPic] = \ - { \ - .frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \ - .palette = {paletteFile, trainerPic}, \ - .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ - .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ - } - -const struct TrainerSprite gTrainerSprites[] = -{ - TRAINER_SPRITE(TRAINER_PIC_FRONT_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, gTrainerPalette_PokemonBreederF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, gTrainerPalette_CoolTrainerM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, gTrainerPalette_BirdKeeper), - TRAINER_SPRITE(TRAINER_PIC_FRONT_COLLECTOR, gTrainerFrontPic_Collector, gTrainerPalette_Collector), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, gTrainerPalette_AquaGruntF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SWIMMER_M, gTrainerFrontPic_SwimmerM, gTrainerPalette_SwimmerM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, gTrainerPalette_MagmaGruntM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_EXPERT_M, gTrainerFrontPic_ExpertM, gTrainerPalette_ExpertM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, gTrainerPalette_AquaAdminM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BLACK_BELT, gTrainerFrontPic_BlackBelt, gTrainerPalette_BlackBelt), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, gTrainerPalette_AquaAdminF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, gTrainerPalette_AquaLeaderArchie), - TRAINER_SPRITE(TRAINER_PIC_FRONT_HEX_MANIAC, gTrainerFrontPic_HexManiac, gTrainerPalette_HexManiac), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AROMA_LADY, gTrainerFrontPic_AromaLady, gTrainerPalette_AromaLady), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RUIN_MANIAC, gTrainerFrontPic_RuinManiac, gTrainerPalette_RuinManiac), - TRAINER_SPRITE(TRAINER_PIC_FRONT_INTERVIEWER, gTrainerFrontPic_Interviewer, gTrainerPalette_Interviewer), - TRAINER_SPRITE(TRAINER_PIC_FRONT_TUBER_F, gTrainerFrontPic_TuberF, gTrainerPalette_TuberF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_TUBER_M, gTrainerFrontPic_TuberM, gTrainerPalette_TuberM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, gTrainerPalette_CoolTrainerF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LADY, gTrainerFrontPic_Lady, gTrainerPalette_Lady), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BEAUTY, gTrainerFrontPic_Beauty, gTrainerPalette_Beauty), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RICH_BOY, gTrainerFrontPic_RichBoy, gTrainerPalette_RichBoy), - TRAINER_SPRITE(TRAINER_PIC_FRONT_EXPERT_F, gTrainerFrontPic_ExpertF, gTrainerPalette_ExpertF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMANIAC, gTrainerFrontPic_Pokemaniac, gTrainerPalette_Pokemaniac), - TRAINER_SPRITE(TRAINER_PIC_FRONT_MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, gTrainerPalette_MagmaGruntF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_GUITARIST, gTrainerFrontPic_Guitarist, gTrainerPalette_Guitarist), - TRAINER_SPRITE(TRAINER_PIC_FRONT_KINDLER, gTrainerFrontPic_Kindler, gTrainerPalette_Kindler), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CAMPER, gTrainerFrontPic_Camper, gTrainerPalette_Camper), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PICNICKER, gTrainerFrontPic_Picnicker, gTrainerPalette_Picnicker), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BUG_MANIAC, gTrainerFrontPic_BugManiac, gTrainerPalette_BugManiac), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, gTrainerPalette_PokemonBreederM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PSYCHIC_M, gTrainerFrontPic_PsychicM, gTrainerPalette_PsychicM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PSYCHIC_F, gTrainerFrontPic_PsychicF, gTrainerPalette_PsychicF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_GENTLEMAN, gTrainerFrontPic_Gentleman, gTrainerPalette_Gentleman), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, gTrainerPalette_EliteFourSidney), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, gTrainerPalette_EliteFourPhoebe), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, gTrainerPalette_EliteFourGlacia, -4, 4, 0x1B0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, gTrainerPalette_EliteFourDrake, 0, 5, 0x1A0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, gTrainerPalette_LeaderRoxanne), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, gTrainerPalette_LeaderBrawly), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, gTrainerPalette_LeaderWattson), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, gTrainerPalette_LeaderFlannery), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, gTrainerPalette_LeaderNorman), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_WINONA, gTrainerFrontPic_LeaderWinona, gTrainerPalette_LeaderWinona), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, gTrainerPalette_LeaderTateAndLiza), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_JUAN, gTrainerFrontPic_LeaderJuan, gTrainerPalette_LeaderJuan), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, gTrainerPalette_SchoolKidM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, gTrainerPalette_SchoolKidF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SR_AND_JR, gTrainerFrontPic_SrAndJr, gTrainerPalette_SrAndJr), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEFAN_M, gTrainerFrontPic_PokefanM, gTrainerPalette_PokefanM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEFAN_F, gTrainerFrontPic_PokefanF, gTrainerPalette_PokefanF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_YOUNGSTER, gTrainerFrontPic_Youngster, gTrainerPalette_Youngster), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, gTrainerPalette_ChampionWallace, -8, 7, 0x188), - TRAINER_SPRITE(TRAINER_PIC_FRONT_FISHERMAN, gTrainerFrontPic_Fisherman, gTrainerPalette_Fisherman), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, gTrainerPalette_CyclingTriathleteM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, gTrainerPalette_CyclingTriathleteF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, gTrainerPalette_RunningTriathleteM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, gTrainerPalette_RunningTriathleteF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, gTrainerPalette_SwimmingTriathleteM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, gTrainerPalette_SwimmingTriathleteF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_DRAGON_TAMER, gTrainerFrontPic_DragonTamer, gTrainerPalette_DragonTamer), - TRAINER_SPRITE(TRAINER_PIC_FRONT_NINJA_BOY, gTrainerFrontPic_NinjaBoy, gTrainerPalette_NinjaBoy), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BATTLE_GIRL, gTrainerFrontPic_BattleGirl, gTrainerPalette_BattleGirl), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PARASOL_LADY, gTrainerFrontPic_ParasolLady, gTrainerPalette_ParasolLady), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SWIMMER_F, gTrainerFrontPic_SwimmerF, gTrainerPalette_SwimmerF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_TWINS, gTrainerFrontPic_Twins, gTrainerPalette_Twins), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SAILOR, gTrainerFrontPic_Sailor, gTrainerPalette_Sailor), - TRAINER_SPRITE(TRAINER_PIC_FRONT_MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, gTrainerPalette_MagmaAdmin), - TRAINER_SPRITE(TRAINER_PIC_FRONT_WALLY, gTrainerFrontPic_Wally, gTrainerPalette_Wally), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BRENDAN, gTrainerFrontPic_Brendan, gTrainerPalette_Brendan), - TRAINER_SPRITE(TRAINER_PIC_FRONT_MAY, gTrainerFrontPic_May, gTrainerPalette_May), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BUG_CATCHER, gTrainerFrontPic_BugCatcher, gTrainerPalette_BugCatcher), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, gTrainerPalette_PokemonRangerM), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, gTrainerPalette_PokemonRangerF), - TRAINER_SPRITE(TRAINER_PIC_FRONT_MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, gTrainerPalette_MagmaLeaderMaxie), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LASS, gTrainerFrontPic_Lass, gTrainerPalette_Lass), - TRAINER_SPRITE(TRAINER_PIC_FRONT_YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, gTrainerPalette_YoungCouple), - TRAINER_SPRITE(TRAINER_PIC_FRONT_OLD_COUPLE, gTrainerFrontPic_OldCouple, gTrainerPalette_OldCouple), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SIS_AND_BRO, gTrainerFrontPic_SisAndBro, gTrainerPalette_SisAndBro), - TRAINER_SPRITE(TRAINER_PIC_FRONT_STEVEN, gTrainerFrontPic_Steven, gTrainerPalette_Steven, 0, 7, 0x188), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, gTrainerPalette_SalonMaidenAnabel), - TRAINER_SPRITE(TRAINER_PIC_FRONT_DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, gTrainerPalette_DomeAceTucker), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, gTrainerPalette_PalaceMavenSpenser), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, gTrainerPalette_ArenaTycoonGreta), - TRAINER_SPRITE(TRAINER_PIC_FRONT_FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, gTrainerPalette_FactoryHeadNoland), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, gTrainerPalette_PikeQueenLucy), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, gTrainerPalette_PyramidKingBrandon), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RED, gTrainerFrontPic_Red, gTrainerPalette_Red), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEAF, gTrainerFrontPic_Leaf, gTrainerPalette_Leaf), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), - TRAINER_SPRITE(TRAINER_PIC_FRONT_YOUNGSTER_FRLG, gTrainerFrontPic_YoungsterFrlg, gTrainerPalette_YoungsterFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BUG_CATCHER_FRLG, gTrainerFrontPic_BugCatcherFrlg, gTrainerPalette_BugCatcherFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LASS_FRLG, gTrainerFrontPic_LassFrlg, gTrainerPalette_LassFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SAILOR_FRLG, gTrainerFrontPic_SailorFrlg, gTrainerPalette_SailorFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CAMPER_FRLG, gTrainerFrontPic_CamperFrlg, gTrainerPalette_CamperFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PICNICKER_FRLG, gTrainerFrontPic_PicnickerFrlg, gTrainerPalette_PicnickerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMANIAC_FRLG, gTrainerFrontPic_PokeManiacFrlg, gTrainerPalette_PokeManiacFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SUPER_NERD_FRLG, gTrainerFrontPic_SuperNerdFrlg, gTrainerPalette_SuperNerdFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_HIKER_FRLG, gTrainerFrontPic_HikerFrlg, gTrainerPalette_HikerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BIKER_FRLG, gTrainerFrontPic_BikerFrlg, gTrainerPalette_BikerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BURGLAR_FRLG, gTrainerFrontPic_BurglarFrlg, gTrainerPalette_BurglarFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ENGINEER_FRLG, gTrainerFrontPic_EngineerFrlg, gTrainerPalette_EngineerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_FISHERMAN_FRLG, gTrainerFrontPic_FishermanFrlg, gTrainerPalette_FishermanFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SWIMMER_M_FRLG, gTrainerFrontPic_SwimmerMFrlg, gTrainerPalette_SwimmerMFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CUE_BALL_FRLG, gTrainerFrontPic_CueBallFrlg, gTrainerPalette_CueBallFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_GAMER_FRLG, gTrainerFrontPic_GamerFrlg, gTrainerPalette_GamerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BEAUTY_FRLG, gTrainerFrontPic_BeautyFrlg, gTrainerPalette_BeautyFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SWIMMER_F_FRLG, gTrainerFrontPic_SwimmerFFrlg, gTrainerPalette_SwimmerFFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PSYCHIC_M_FRLG, gTrainerFrontPic_PsychicMFrlg, gTrainerPalette_PsychicMFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ROCKER_FRLG, gTrainerFrontPic_RockerFrlg, gTrainerPalette_RockerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_JUGGLER_FRLG, gTrainerFrontPic_JugglerFrlg, gTrainerPalette_JugglerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_TAMER_FRLG, gTrainerFrontPic_TamerFrlg, gTrainerPalette_TamerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BIRD_KEEPER_FRLG, gTrainerFrontPic_BirdKeeperFrlg, gTrainerPalette_BirdKeeperFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_BLACK_BELT_FRLG, gTrainerFrontPic_BlackBeltFrlg, gTrainerPalette_BlackBeltFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RIVAL_EARLY_FRLG, gTrainerFrontPic_RivalEarlyFrlg, gTrainerPalette_RivalEarlyFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SCIENTIST_FRLG, gTrainerFrontPic_ScientistFrlg, gTrainerPalette_ScientistFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_GIOVANNI_FRLG, gTrainerFrontPic_LeaderGiovanniFrlg, gTrainerPalette_LeaderGiovanniFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ROCKET_GRUNT_M_FRLG, gTrainerFrontPic_RocketGruntMFrlg, gTrainerPalette_RocketGruntMFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_COOLTRAINER_M_FRLG, gTrainerFrontPic_CooltrainerMFrlg, gTrainerPalette_CooltrainerMFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_COOLTRAINER_F_FRLG, gTrainerFrontPic_CooltrainerFFrlg, gTrainerPalette_CooltrainerFFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_LORELEI_FRLG, gTrainerFrontPic_EliteFourLoreleiFrlg, gTrainerPalette_EliteFourLoreleiFrlg, -8, 0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_BRUNO_FRLG, gTrainerFrontPic_EliteFourBrunoFrlg, gTrainerPalette_EliteFourBrunoFrlg, -10, 0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_AGATHA_FRLG, gTrainerFrontPic_EliteFourAgathaFrlg, gTrainerPalette_EliteFourAgathaFrlg, 0, 0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ELITE_FOUR_LANCE_FRLG, gTrainerFrontPic_EliteFourLanceFrlg, gTrainerPalette_EliteFourLanceFrlg, -32, 0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_BROCK_FRLG, gTrainerFrontPic_LeaderBrockFrlg, gTrainerPalette_LeaderBrockFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_MISTY_FRLG, gTrainerFrontPic_LeaderMistyFrlg, gTrainerPalette_LeaderMistyFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_LT_SURGE_FRLG, gTrainerFrontPic_LeaderLtSurgeFrlg, gTrainerPalette_LeaderLtSurgeFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_ERIKA_FRLG, gTrainerFrontPic_LeaderErikaFrlg, gTrainerPalette_LeaderErikaFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_KOGA_FRLG, gTrainerFrontPic_LeaderKogaFrlg, gTrainerPalette_LeaderKogaFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_BLAINE_FRLG, gTrainerFrontPic_LeaderBlaineFrlg, gTrainerPalette_LeaderBlaineFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LEADER_SABRINA_FRLG, gTrainerFrontPic_LeaderSabrinaFrlg, gTrainerPalette_LeaderSabrinaFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_GENTLEMAN_FRLG, gTrainerFrontPic_GentlemanFrlg, gTrainerPalette_GentlemanFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RIVAL_LATE_FRLG, gTrainerFrontPic_RivalLateFrlg, gTrainerPalette_RivalLateFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CHAMPION_RIVAL_FRLG, gTrainerFrontPic_ChampionRivalFrlg, gTrainerPalette_ChampionRivalFrlg, 0, 0), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CHANNELER_FRLG, gTrainerFrontPic_ChannelerFrlg, gTrainerPalette_ChannelerFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_TWINS_FRLG, gTrainerFrontPic_TwinsFrlg, gTrainerPalette_TwinsFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_COOL_COUPLE_FRLG, gTrainerFrontPic_CoolCoupleFrlg, gTrainerPalette_CoolCoupleFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_YOUNG_COUPLE_FRLG, gTrainerFrontPic_YoungCoupleFrlg, gTrainerPalette_YoungCoupleFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CRUSH_KIN_FRLG, gTrainerFrontPic_CrushKinFrlg, gTrainerPalette_CrushKinFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_SIS_AND_BRO_FRLG, gTrainerFrontPic_SisAndBroFrlg, gTrainerPalette_SisAndBroFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PROFESSOR_OAK_FRLG, gTrainerFrontPic_ProfessorOakFrlg, gTrainerPalette_ProfessorOakFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_ROCKET_GRUNT_F_FRLG, gTrainerFrontPic_RocketGruntFFrlg, gTrainerPalette_RocketGruntFFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PSYCHIC_F_FRLG, gTrainerFrontPic_PsychicFFrlg, gTrainerPalette_PsychicFFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_CRUSH_GIRL_FRLG, gTrainerFrontPic_CrushGirlFrlg, gTrainerPalette_CrushGirlFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_TUBER_F_FRLG, gTrainerFrontPic_TuberFFrlg, gTrainerPalette_TuberFFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_BREEDER_FRLG, gTrainerFrontPic_PokemonBreederFrlg, gTrainerPalette_PokemonBreederFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_RANGER_M_FRLG, gTrainerFrontPic_PokemonRangerMFrlg, gTrainerPalette_PokemonRangerMFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_POKEMON_RANGER_F_FRLG, gTrainerFrontPic_PokemonRangerFFrlg, gTrainerPalette_PokemonRangerFFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_AROMA_LADY_FRLG, gTrainerFrontPic_AromaLadyFrlg, gTrainerPalette_AromaLadyFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_RUIN_MANIAC_FRLG, gTrainerFrontPic_RuinManiacFrlg, gTrainerPalette_RuinManiacFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_LADY_FRLG, gTrainerFrontPic_LadyFrlg, gTrainerPalette_LadyFrlg), - TRAINER_SPRITE(TRAINER_PIC_FRONT_PAINTER_FRLG, gTrainerFrontPic_PainterFrlg, gTrainerPalette_PainterFrlg), -}; static const union AnimCmd sAnimCmd_Hoenn[] = { @@ -703,6 +535,11 @@ static const union AnimCmd sAnimCmd_Point_HGSS_Red_Leaf[] = ANIMCMD_END, }; +static const union AnimCmd *const sBackAnims_None[] = { + sAnim_GeneralFrame0, + sAnim_GeneralFrame0 +}; + static const union AnimCmd *const sBackAnims_Hoenn[] = { sAnim_GeneralFrame3, @@ -723,26 +560,670 @@ const union AnimCmd *const sBackAnims_OldManPokedude[] = { sAnim_GeneralFrame0, }; -#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, pal, anim) \ - [trainerPic] = \ - { \ +// The first two parameters invoke a front pic and palette by +// calling a "TRAINER_PIC" constant (e.g. TRAINER_PIC_HIKER), and +// gTrainerFrontPic/gTrainerPalette pointers, (e.g "gTrainerFrontPic_Hiker" and "gTrainerPalette_Hiker"). +// The last three parameters control the X and Y coordinates and rotation of the mugshot on the screen. +// They default to 0, 0, and 0x200 which are default values used by the majority of the game's trainer sprites. +#define TRAINER_FRONT_PIC(picFile, paletteFile, ...) \ + (const struct TrainerFrontPicInfo[]) \ + {{ \ + .imageData = picFile, \ + .paletteData = paletteFile, \ + .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ + .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ + }} + +#define TRAINER_BACK_PIC(yOffset, sprite, pal, anim) \ + (const struct TrainerBackPicInfo[]) \ + {{ \ .coordinates = {.size = 8, .y_offset = yOffset}, \ - .backPic = {.data = sprite, .size = TRAINER_PIC_SIZE, .relativeFrames = TRUE}, \ - .palette = {.data = pal, .tag = trainerPic}, \ + .image = {.data = sprite, .size = TRAINER_PIC_SIZE, .relativeFrames = TRUE}, \ + .paletteData = pal, \ .animation = anim, \ - } + }} -const struct TrainerBacksprite gTrainerBacksprites[] = +const struct TrainerPicInfo gTrainerPicInfo[TRAINER_PIC_COUNT] = { - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_BRENDAN, 4, gTrainerBackPic_Brendan, gTrainerPalette_Brendan, sBackAnims_Hoenn), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_MAY, 4, gTrainerBackPic_May, gTrainerPalette_May, sBackAnims_Hoenn), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_RED, 5, gTrainerBackPic_Red, gTrainerBackPicPalette_Red, sBackAnims_Kanto), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_LEAF, 5, gTrainerBackPic_Leaf, gTrainerBackPicPalette_Leaf, sBackAnims_Kanto), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_RUBY_SAPPHIRE_BRENDAN, 4, gTrainerBackPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan, sBackAnims_Hoenn), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_RUBY_SAPPHIRE_MAY, 4, gTrainerBackPic_RubySapphireMay, gTrainerPalette_RubySapphireMay, sBackAnims_Hoenn), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_WALLY, 4, gTrainerBackPic_Wally, gTrainerPalette_Wally, sBackAnims_Hoenn), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_STEVEN, 4, gTrainerBackPic_Steven, gTrainerPalette_Steven, sBackAnims_Hoenn), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_POKEDUDE, 4, gTrainerBackPic_Pokedude, gTrainerBackPicPalette_Pokedude, sBackAnims_OldManPokedude), - TRAINER_BACK_SPRITE(TRAINER_PIC_BACK_OLD_MAN, 4, gTrainerBackPic_OldMan, gTrainerBackPicPalette_OldMan, sBackAnims_OldManPokedude), - + [TRAINER_PIC_NONE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_None, gTrainerPalette_None), + .backPic = TRAINER_BACK_PIC(1, gTrainerBackPic_None, gTrainerPalette_None, sBackAnims_None), + }, + [TRAINER_PIC_BRENDAN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Brendan, gTrainerPalette_Brendan), + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_Brendan, gTrainerPalette_Brendan, sBackAnims_Hoenn), + }, + [TRAINER_PIC_MAY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_May, gTrainerPalette_May), + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_May, gTrainerPalette_May, sBackAnims_Hoenn), + }, + [TRAINER_PIC_RED] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Red, gTrainerPalette_Red), + .backPic = TRAINER_BACK_PIC(5, gTrainerBackPic_Red, gTrainerBackPicPalette_Red, sBackAnims_Kanto), + }, + [TRAINER_PIC_LEAF] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Leaf, gTrainerPalette_Leaf), + .backPic = TRAINER_BACK_PIC(5, gTrainerBackPic_Leaf, gTrainerBackPicPalette_Leaf, sBackAnims_Kanto), + }, + [TRAINER_PIC_RS_BRENDAN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan), + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan, sBackAnims_Hoenn), + }, + [TRAINER_PIC_RS_MAY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_RubySapphireMay, gTrainerPalette_RubySapphireMay, sBackAnims_Hoenn), + }, + [TRAINER_PIC_WALLY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Wally, gTrainerPalette_Wally), + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_Wally, gTrainerPalette_Wally, sBackAnims_Hoenn), + }, + [TRAINER_PIC_STEVEN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Steven, gTrainerPalette_Steven, 0, 7, 0x188), + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_Steven, gTrainerPalette_Steven, sBackAnims_Hoenn), + }, + [TRAINER_PIC_POKEDUDE] = + { + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_Pokedude, gTrainerBackPicPalette_Pokedude, sBackAnims_OldManPokedude), + }, + [TRAINER_PIC_OLD_MAN] = + { + .backPic = TRAINER_BACK_PIC(4, gTrainerBackPic_OldMan, gTrainerBackPicPalette_OldMan, sBackAnims_OldManPokedude), + }, + [TRAINER_PIC_HIKER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), + }, + [TRAINER_PIC_AQUA_GRUNT_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), + }, + [TRAINER_PIC_POKEMON_BREEDER_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonBreederF, gTrainerPalette_PokemonBreederF), + }, + [TRAINER_PIC_COOLTRAINER_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CoolTrainerM, gTrainerPalette_CoolTrainerM), + }, + [TRAINER_PIC_BIRD_KEEPER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BirdKeeper, gTrainerPalette_BirdKeeper), + }, + [TRAINER_PIC_COLLECTOR] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Collector, gTrainerPalette_Collector), + }, + [TRAINER_PIC_AQUA_GRUNT_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AquaGruntF, gTrainerPalette_AquaGruntF), + }, + [TRAINER_PIC_SWIMMER_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SwimmerM, gTrainerPalette_SwimmerM), + }, + [TRAINER_PIC_MAGMA_GRUNT_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_MagmaGruntM, gTrainerPalette_MagmaGruntM), + }, + [TRAINER_PIC_EXPERT_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ExpertM, gTrainerPalette_ExpertM), + }, + [TRAINER_PIC_AQUA_ADMIN_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AquaAdminM, gTrainerPalette_AquaAdminM), + }, + [TRAINER_PIC_BLACK_BELT] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BlackBelt, gTrainerPalette_BlackBelt), + }, + [TRAINER_PIC_AQUA_ADMIN_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AquaAdminF, gTrainerPalette_AquaAdminF), + }, + [TRAINER_PIC_AQUA_LEADER_ARCHIE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AquaLeaderArchie, gTrainerPalette_AquaLeaderArchie), + }, + [TRAINER_PIC_HEX_MANIAC] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_HexManiac, gTrainerPalette_HexManiac), + }, + [TRAINER_PIC_AROMA_LADY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AromaLady, gTrainerPalette_AromaLady), + }, + [TRAINER_PIC_RUIN_MANIAC] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RuinManiac, gTrainerPalette_RuinManiac), + }, + [TRAINER_PIC_INTERVIEWER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Interviewer, gTrainerPalette_Interviewer), + }, + [TRAINER_PIC_TUBER_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_TuberF, gTrainerPalette_TuberF), + }, + [TRAINER_PIC_TUBER_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_TuberM, gTrainerPalette_TuberM), + }, + [TRAINER_PIC_COOLTRAINER_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CoolTrainerF, gTrainerPalette_CoolTrainerF), + }, + [TRAINER_PIC_LADY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Lady, gTrainerPalette_Lady), + }, + [TRAINER_PIC_BEAUTY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Beauty, gTrainerPalette_Beauty), + }, + [TRAINER_PIC_RICH_BOY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RichBoy, gTrainerPalette_RichBoy), + }, + [TRAINER_PIC_EXPERT_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ExpertF, gTrainerPalette_ExpertF), + }, + [TRAINER_PIC_POKEMANIAC] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Pokemaniac, gTrainerPalette_Pokemaniac), + }, + [TRAINER_PIC_MAGMA_GRUNT_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_MagmaGruntF, gTrainerPalette_MagmaGruntF), + }, + [TRAINER_PIC_GUITARIST] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Guitarist, gTrainerPalette_Guitarist), + }, + [TRAINER_PIC_KINDLER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Kindler, gTrainerPalette_Kindler), + }, + [TRAINER_PIC_CAMPER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Camper, gTrainerPalette_Camper), + }, + [TRAINER_PIC_PICNICKER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Picnicker, gTrainerPalette_Picnicker), + }, + [TRAINER_PIC_BUG_MANIAC] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BugManiac, gTrainerPalette_BugManiac), + }, + [TRAINER_PIC_POKEMON_BREEDER_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonBreederM, gTrainerPalette_PokemonBreederM), + }, + [TRAINER_PIC_PSYCHIC_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PsychicM, gTrainerPalette_PsychicM), + }, + [TRAINER_PIC_PSYCHIC_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PsychicF, gTrainerPalette_PsychicF), + }, + [TRAINER_PIC_GENTLEMAN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Gentleman, gTrainerPalette_Gentleman), + }, + [TRAINER_PIC_ELITE_FOUR_SIDNEY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourSidney, gTrainerPalette_EliteFourSidney), + }, + [TRAINER_PIC_ELITE_FOUR_PHOEBE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourPhoebe, gTrainerPalette_EliteFourPhoebe), + }, + [TRAINER_PIC_ELITE_FOUR_GLACIA] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourGlacia, gTrainerPalette_EliteFourGlacia, -4, 4, 0x1B0), + }, + [TRAINER_PIC_ELITE_FOUR_DRAKE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourDrake, gTrainerPalette_EliteFourDrake, 0, 5, 0x1A0), + }, + [TRAINER_PIC_LEADER_ROXANNE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderRoxanne, gTrainerPalette_LeaderRoxanne), + }, + [TRAINER_PIC_LEADER_BRAWLY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderBrawly, gTrainerPalette_LeaderBrawly), + }, + [TRAINER_PIC_LEADER_WATTSON] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderWattson, gTrainerPalette_LeaderWattson), + }, + [TRAINER_PIC_LEADER_FLANNERY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderFlannery, gTrainerPalette_LeaderFlannery), + }, + [TRAINER_PIC_LEADER_NORMAN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderNorman, gTrainerPalette_LeaderNorman), + }, + [TRAINER_PIC_LEADER_WINONA] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderWinona, gTrainerPalette_LeaderWinona), + }, + [TRAINER_PIC_LEADER_TATE_AND_LIZA] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderTateAndLiza, gTrainerPalette_LeaderTateAndLiza), + }, + [TRAINER_PIC_LEADER_JUAN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderJuan, gTrainerPalette_LeaderJuan), + }, + [TRAINER_PIC_SCHOOL_KID_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SchoolKidM, gTrainerPalette_SchoolKidM), + }, + [TRAINER_PIC_SCHOOL_KID_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SchoolKidF, gTrainerPalette_SchoolKidF), + }, + [TRAINER_PIC_SR_AND_JR] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SrAndJr, gTrainerPalette_SrAndJr), + }, + [TRAINER_PIC_POKEFAN_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokefanM, gTrainerPalette_PokefanM), + }, + [TRAINER_PIC_POKEFAN_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokefanF, gTrainerPalette_PokefanF), + }, + [TRAINER_PIC_YOUNGSTER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Youngster, gTrainerPalette_Youngster), + }, + [TRAINER_PIC_CHAMPION_WALLACE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ChampionWallace, gTrainerPalette_ChampionWallace, -8, 7, 0x188), + }, + [TRAINER_PIC_FISHERMAN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Fisherman, gTrainerPalette_Fisherman), + }, + [TRAINER_PIC_CYCLING_TRIATHLETE_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CyclingTriathleteM, gTrainerPalette_CyclingTriathleteM), + }, + [TRAINER_PIC_CYCLING_TRIATHLETE_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CyclingTriathleteF, gTrainerPalette_CyclingTriathleteF), + }, + [TRAINER_PIC_RUNNING_TRIATHLETE_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RunningTriathleteM, gTrainerPalette_RunningTriathleteM), + }, + [TRAINER_PIC_RUNNING_TRIATHLETE_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RunningTriathleteF, gTrainerPalette_RunningTriathleteF), + }, + [TRAINER_PIC_SWIMMING_TRIATHLETE_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SwimmingTriathleteM, gTrainerPalette_SwimmingTriathleteM), + }, + [TRAINER_PIC_SWIMMING_TRIATHLETE_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SwimmingTriathleteF, gTrainerPalette_SwimmingTriathleteF), + }, + [TRAINER_PIC_DRAGON_TAMER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_DragonTamer, gTrainerPalette_DragonTamer), + }, + [TRAINER_PIC_NINJA_BOY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_NinjaBoy, gTrainerPalette_NinjaBoy), + }, + [TRAINER_PIC_BATTLE_GIRL] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BattleGirl, gTrainerPalette_BattleGirl), + }, + [TRAINER_PIC_PARASOL_LADY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ParasolLady, gTrainerPalette_ParasolLady), + }, + [TRAINER_PIC_SWIMMER_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SwimmerF, gTrainerPalette_SwimmerF), + }, + [TRAINER_PIC_TWINS] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Twins, gTrainerPalette_Twins), + }, + [TRAINER_PIC_SAILOR] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Sailor, gTrainerPalette_Sailor), + }, + [TRAINER_PIC_MAGMA_ADMIN] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_MagmaAdmin, gTrainerPalette_MagmaAdmin), + }, + [TRAINER_PIC_BUG_CATCHER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BugCatcher, gTrainerPalette_BugCatcher), + }, + [TRAINER_PIC_POKEMON_RANGER_M] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonRangerM, gTrainerPalette_PokemonRangerM), + }, + [TRAINER_PIC_POKEMON_RANGER_F] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonRangerF, gTrainerPalette_PokemonRangerF), + }, + [TRAINER_PIC_MAGMA_LEADER_MAXIE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_MagmaLeaderMaxie, gTrainerPalette_MagmaLeaderMaxie), + }, + [TRAINER_PIC_LASS] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_Lass, gTrainerPalette_Lass), + }, + [TRAINER_PIC_YOUNG_COUPLE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_YoungCouple, gTrainerPalette_YoungCouple), + }, + [TRAINER_PIC_OLD_COUPLE] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_OldCouple, gTrainerPalette_OldCouple), + }, + [TRAINER_PIC_SIS_AND_BRO] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SisAndBro, gTrainerPalette_SisAndBro), + }, + [TRAINER_PIC_SALON_MAIDEN_ANABEL] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SalonMaidenAnabel, gTrainerPalette_SalonMaidenAnabel), + }, + [TRAINER_PIC_DOME_ACE_TUCKER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_DomeAceTucker, gTrainerPalette_DomeAceTucker), + }, + [TRAINER_PIC_PALACE_MAVEN_SPENSER] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PalaceMavenSpenser, gTrainerPalette_PalaceMavenSpenser), + }, + [TRAINER_PIC_ARENA_TYCOON_GRETA] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ArenaTycoonGreta, gTrainerPalette_ArenaTycoonGreta), + }, + [TRAINER_PIC_FACTORY_HEAD_NOLAND] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_FactoryHeadNoland, gTrainerPalette_FactoryHeadNoland), + }, + [TRAINER_PIC_PIKE_QUEEN_LUCY] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PikeQueenLucy, gTrainerPalette_PikeQueenLucy), + }, + [TRAINER_PIC_PYRAMID_KING_BRANDON] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PyramidKingBrandon, gTrainerPalette_PyramidKingBrandon), + }, + [TRAINER_PIC_YOUNGSTER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_YoungsterFrlg, gTrainerPalette_YoungsterFrlg), + }, + [TRAINER_PIC_BUG_CATCHER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BugCatcherFrlg, gTrainerPalette_BugCatcherFrlg), + }, + [TRAINER_PIC_LASS_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LassFrlg, gTrainerPalette_LassFrlg), + }, + [TRAINER_PIC_SAILOR_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SailorFrlg, gTrainerPalette_SailorFrlg), + }, + [TRAINER_PIC_CAMPER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CamperFrlg, gTrainerPalette_CamperFrlg), + }, + [TRAINER_PIC_PICNICKER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PicnickerFrlg, gTrainerPalette_PicnickerFrlg), + }, + [TRAINER_PIC_POKEMANIAC_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokeManiacFrlg, gTrainerPalette_PokeManiacFrlg), + }, + [TRAINER_PIC_SUPER_NERD_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SuperNerdFrlg, gTrainerPalette_SuperNerdFrlg), + }, + [TRAINER_PIC_HIKER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_HikerFrlg, gTrainerPalette_HikerFrlg), + }, + [TRAINER_PIC_BIKER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BikerFrlg, gTrainerPalette_BikerFrlg), + }, + [TRAINER_PIC_BURGLAR_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BurglarFrlg, gTrainerPalette_BurglarFrlg), + }, + [TRAINER_PIC_ENGINEER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EngineerFrlg, gTrainerPalette_EngineerFrlg), + }, + [TRAINER_PIC_FISHERMAN_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_FishermanFrlg, gTrainerPalette_FishermanFrlg), + }, + [TRAINER_PIC_SWIMMER_M_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SwimmerMFrlg, gTrainerPalette_SwimmerMFrlg), + }, + [TRAINER_PIC_CUE_BALL_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CueBallFrlg, gTrainerPalette_CueBallFrlg), + }, + [TRAINER_PIC_GAMER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_GamerFrlg, gTrainerPalette_GamerFrlg), + }, + [TRAINER_PIC_BEAUTY_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BeautyFrlg, gTrainerPalette_BeautyFrlg), + }, + [TRAINER_PIC_SWIMMER_F_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SwimmerFFrlg, gTrainerPalette_SwimmerFFrlg), + }, + [TRAINER_PIC_PSYCHIC_M_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PsychicMFrlg, gTrainerPalette_PsychicMFrlg), + }, + [TRAINER_PIC_ROCKER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RockerFrlg, gTrainerPalette_RockerFrlg), + }, + [TRAINER_PIC_JUGGLER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_JugglerFrlg, gTrainerPalette_JugglerFrlg), + }, + [TRAINER_PIC_TAMER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_TamerFrlg, gTrainerPalette_TamerFrlg), + }, + [TRAINER_PIC_BIRD_KEEPER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BirdKeeperFrlg, gTrainerPalette_BirdKeeperFrlg), + }, + [TRAINER_PIC_BLACK_BELT_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_BlackBeltFrlg, gTrainerPalette_BlackBeltFrlg), + }, + [TRAINER_PIC_RIVAL_EARLY_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RivalEarlyFrlg, gTrainerPalette_RivalEarlyFrlg), + }, + [TRAINER_PIC_SCIENTIST_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ScientistFrlg, gTrainerPalette_ScientistFrlg), + }, + [TRAINER_PIC_LEADER_GIOVANNI_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderGiovanniFrlg, gTrainerPalette_LeaderGiovanniFrlg), + }, + [TRAINER_PIC_ROCKET_GRUNT_M_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RocketGruntMFrlg, gTrainerPalette_RocketGruntMFrlg), + }, + [TRAINER_PIC_COOLTRAINER_M_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CooltrainerMFrlg, gTrainerPalette_CooltrainerMFrlg), + }, + [TRAINER_PIC_COOLTRAINER_F_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CooltrainerFFrlg, gTrainerPalette_CooltrainerFFrlg), + }, + [TRAINER_PIC_ELITE_FOUR_LORELEI_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourLoreleiFrlg, gTrainerPalette_EliteFourLoreleiFrlg, -8, 0), + }, + [TRAINER_PIC_ELITE_FOUR_BRUNO_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourBrunoFrlg, gTrainerPalette_EliteFourBrunoFrlg, -10, 0), + }, + [TRAINER_PIC_ELITE_FOUR_AGATHA_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourAgathaFrlg, gTrainerPalette_EliteFourAgathaFrlg, 0, 0), + }, + [TRAINER_PIC_ELITE_FOUR_LANCE_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_EliteFourLanceFrlg, gTrainerPalette_EliteFourLanceFrlg, -32, 0), + }, + [TRAINER_PIC_LEADER_BROCK_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderBrockFrlg, gTrainerPalette_LeaderBrockFrlg), + }, + [TRAINER_PIC_LEADER_MISTY_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderMistyFrlg, gTrainerPalette_LeaderMistyFrlg), + }, + [TRAINER_PIC_LEADER_LT_SURGE_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderLtSurgeFrlg, gTrainerPalette_LeaderLtSurgeFrlg), + }, + [TRAINER_PIC_LEADER_ERIKA_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderErikaFrlg, gTrainerPalette_LeaderErikaFrlg), + }, + [TRAINER_PIC_LEADER_KOGA_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderKogaFrlg, gTrainerPalette_LeaderKogaFrlg), + }, + [TRAINER_PIC_LEADER_BLAINE_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderBlaineFrlg, gTrainerPalette_LeaderBlaineFrlg), + }, + [TRAINER_PIC_LEADER_SABRINA_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LeaderSabrinaFrlg, gTrainerPalette_LeaderSabrinaFrlg), + }, + [TRAINER_PIC_GENTLEMAN_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_GentlemanFrlg, gTrainerPalette_GentlemanFrlg), + }, + [TRAINER_PIC_RIVAL_LATE_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RivalLateFrlg, gTrainerPalette_RivalLateFrlg), + }, + [TRAINER_PIC_CHAMPION_RIVAL_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ChampionRivalFrlg, gTrainerPalette_ChampionRivalFrlg, 0, 0), + }, + [TRAINER_PIC_CHANNELER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ChannelerFrlg, gTrainerPalette_ChannelerFrlg), + }, + [TRAINER_PIC_TWINS_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_TwinsFrlg, gTrainerPalette_TwinsFrlg), + }, + [TRAINER_PIC_COOL_COUPLE_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CoolCoupleFrlg, gTrainerPalette_CoolCoupleFrlg), + }, + [TRAINER_PIC_YOUNG_COUPLE_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_YoungCoupleFrlg, gTrainerPalette_YoungCoupleFrlg), + }, + [TRAINER_PIC_CRUSH_KIN_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CrushKinFrlg, gTrainerPalette_CrushKinFrlg), + }, + [TRAINER_PIC_SIS_AND_BRO_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_SisAndBroFrlg, gTrainerPalette_SisAndBroFrlg), + }, + [TRAINER_PIC_PROFESSOR_OAK_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_ProfessorOakFrlg, gTrainerPalette_ProfessorOakFrlg), + }, + [TRAINER_PIC_ROCKET_GRUNT_F_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RocketGruntFFrlg, gTrainerPalette_RocketGruntFFrlg), + }, + [TRAINER_PIC_PSYCHIC_F_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PsychicFFrlg, gTrainerPalette_PsychicFFrlg), + }, + [TRAINER_PIC_CRUSH_GIRL_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_CrushGirlFrlg, gTrainerPalette_CrushGirlFrlg), + }, + [TRAINER_PIC_TUBER_F_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_TuberFFrlg, gTrainerPalette_TuberFFrlg), + }, + [TRAINER_PIC_POKEMON_BREEDER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonBreederFrlg, gTrainerPalette_PokemonBreederFrlg), + }, + [TRAINER_PIC_POKEMON_RANGER_M_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonRangerMFrlg, gTrainerPalette_PokemonRangerMFrlg), + }, + [TRAINER_PIC_POKEMON_RANGER_F_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PokemonRangerFFrlg, gTrainerPalette_PokemonRangerFFrlg), + }, + [TRAINER_PIC_AROMA_LADY_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_AromaLadyFrlg, gTrainerPalette_AromaLadyFrlg), + }, + [TRAINER_PIC_RUIN_MANIAC_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_RuinManiacFrlg, gTrainerPalette_RuinManiacFrlg), + }, + [TRAINER_PIC_LADY_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_LadyFrlg, gTrainerPalette_LadyFrlg), + }, + [TRAINER_PIC_PAINTER_FRLG] = + { + .frontPic = TRAINER_FRONT_PIC(gTrainerFrontPic_PainterFrlg, gTrainerPalette_PainterFrlg), + }, }; diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index 8ac74b6057..87155559e5 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -1,124 +1,124 @@ const u16 gFacilityClassToPicIndex[] = { - [FACILITY_CLASS_HIKER] = TRAINER_PIC_FRONT_HIKER, - [FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_PIC_FRONT_AQUA_GRUNT_M, - [FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_PIC_FRONT_POKEMON_BREEDER_F, - [FACILITY_CLASS_COOLTRAINER_M] = TRAINER_PIC_FRONT_COOLTRAINER_M, - [FACILITY_CLASS_BIRD_KEEPER] = TRAINER_PIC_FRONT_BIRD_KEEPER, - [FACILITY_CLASS_COLLECTOR] = TRAINER_PIC_FRONT_COLLECTOR, - [FACILITY_CLASS_AQUA_GRUNT_F] = TRAINER_PIC_FRONT_AQUA_GRUNT_F, - [FACILITY_CLASS_SWIMMER_M] = TRAINER_PIC_FRONT_SWIMMER_M, - [FACILITY_CLASS_MAGMA_GRUNT_M] = TRAINER_PIC_FRONT_MAGMA_GRUNT_M, - [FACILITY_CLASS_EXPERT_M] = TRAINER_PIC_FRONT_EXPERT_M, - [FACILITY_CLASS_BLACK_BELT] = TRAINER_PIC_FRONT_BLACK_BELT, - [FACILITY_CLASS_AQUA_LEADER_ARCHIE] = TRAINER_PIC_FRONT_AQUA_LEADER_ARCHIE, - [FACILITY_CLASS_HEX_MANIAC] = TRAINER_PIC_FRONT_HEX_MANIAC, - [FACILITY_CLASS_AROMA_LADY] = TRAINER_PIC_FRONT_AROMA_LADY, - [FACILITY_CLASS_RUIN_MANIAC] = TRAINER_PIC_FRONT_RUIN_MANIAC, - [FACILITY_CLASS_INTERVIEWER] = TRAINER_PIC_FRONT_INTERVIEWER, - [FACILITY_CLASS_TUBER_F] = TRAINER_PIC_FRONT_TUBER_F, - [FACILITY_CLASS_TUBER_M] = TRAINER_PIC_FRONT_TUBER_M, - [FACILITY_CLASS_COOLTRAINER_F] = TRAINER_PIC_FRONT_COOLTRAINER_F, - [FACILITY_CLASS_LADY] = TRAINER_PIC_FRONT_LADY, - [FACILITY_CLASS_BEAUTY] = TRAINER_PIC_FRONT_BEAUTY, - [FACILITY_CLASS_RICH_BOY] = TRAINER_PIC_FRONT_RICH_BOY, - [FACILITY_CLASS_EXPERT_F] = TRAINER_PIC_FRONT_EXPERT_F, - [FACILITY_CLASS_POKEMANIAC] = TRAINER_PIC_FRONT_POKEMANIAC, - [FACILITY_CLASS_MAGMA_GRUNT_F] = TRAINER_PIC_FRONT_MAGMA_GRUNT_F, - [FACILITY_CLASS_GUITARIST] = TRAINER_PIC_FRONT_GUITARIST, - [FACILITY_CLASS_KINDLER] = TRAINER_PIC_FRONT_KINDLER, - [FACILITY_CLASS_CAMPER] = TRAINER_PIC_FRONT_CAMPER, - [FACILITY_CLASS_PICNICKER] = TRAINER_PIC_FRONT_PICNICKER, - [FACILITY_CLASS_BUG_MANIAC] = TRAINER_PIC_FRONT_BUG_MANIAC, - [FACILITY_CLASS_PSYCHIC_M] = TRAINER_PIC_FRONT_PSYCHIC_M, - [FACILITY_CLASS_PSYCHIC_F] = TRAINER_PIC_FRONT_PSYCHIC_F, - [FACILITY_CLASS_GENTLEMAN] = TRAINER_PIC_FRONT_GENTLEMAN, - [FACILITY_CLASS_ELITE_FOUR_SIDNEY] = TRAINER_PIC_FRONT_ELITE_FOUR_SIDNEY, - [FACILITY_CLASS_ELITE_FOUR_PHOEBE] = TRAINER_PIC_FRONT_ELITE_FOUR_PHOEBE, - [FACILITY_CLASS_LEADER_ROXANNE] = TRAINER_PIC_FRONT_LEADER_ROXANNE, - [FACILITY_CLASS_LEADER_BRAWLY] = TRAINER_PIC_FRONT_LEADER_BRAWLY, - [FACILITY_CLASS_LEADER_TATE_AND_LIZA] = TRAINER_PIC_FRONT_LEADER_TATE_AND_LIZA, - [FACILITY_CLASS_SCHOOL_KID_M] = TRAINER_PIC_FRONT_SCHOOL_KID_M, - [FACILITY_CLASS_SCHOOL_KID_F] = TRAINER_PIC_FRONT_SCHOOL_KID_F, - [FACILITY_CLASS_SR_AND_JR] = TRAINER_PIC_FRONT_SR_AND_JR, - [FACILITY_CLASS_POKEFAN_M] = TRAINER_PIC_FRONT_POKEFAN_M, - [FACILITY_CLASS_POKEFAN_F] = TRAINER_PIC_FRONT_POKEFAN_F, - [FACILITY_CLASS_YOUNGSTER] = TRAINER_PIC_FRONT_YOUNGSTER, - [FACILITY_CLASS_CHAMPION_WALLACE] = TRAINER_PIC_FRONT_CHAMPION_WALLACE, - [FACILITY_CLASS_FISHERMAN] = TRAINER_PIC_FRONT_FISHERMAN, - [FACILITY_CLASS_CYCLING_TRIATHLETE_M] = TRAINER_PIC_FRONT_CYCLING_TRIATHLETE_M, - [FACILITY_CLASS_CYCLING_TRIATHLETE_F] = TRAINER_PIC_FRONT_CYCLING_TRIATHLETE_F, - [FACILITY_CLASS_RUNNING_TRIATHLETE_M] = TRAINER_PIC_FRONT_RUNNING_TRIATHLETE_M, - [FACILITY_CLASS_RUNNING_TRIATHLETE_F] = TRAINER_PIC_FRONT_RUNNING_TRIATHLETE_F, - [FACILITY_CLASS_SWIMMING_TRIATHLETE_M] = TRAINER_PIC_FRONT_SWIMMING_TRIATHLETE_M, - [FACILITY_CLASS_SWIMMING_TRIATHLETE_F] = TRAINER_PIC_FRONT_SWIMMING_TRIATHLETE_F, - [FACILITY_CLASS_DRAGON_TAMER] = TRAINER_PIC_FRONT_DRAGON_TAMER, - [FACILITY_CLASS_NINJA_BOY] = TRAINER_PIC_FRONT_NINJA_BOY, - [FACILITY_CLASS_BATTLE_GIRL] = TRAINER_PIC_FRONT_BATTLE_GIRL, - [FACILITY_CLASS_PARASOL_LADY] = TRAINER_PIC_FRONT_PARASOL_LADY, - [FACILITY_CLASS_SWIMMER_F] = TRAINER_PIC_FRONT_SWIMMER_F, - [FACILITY_CLASS_TWINS] = TRAINER_PIC_FRONT_TWINS, - [FACILITY_CLASS_SAILOR] = TRAINER_PIC_FRONT_SAILOR, - [FACILITY_CLASS_WALLY] = TRAINER_PIC_FRONT_WALLY, - [FACILITY_CLASS_BRENDAN] = TRAINER_PIC_FRONT_BRENDAN, - [FACILITY_CLASS_BRENDAN_2] = TRAINER_PIC_FRONT_BRENDAN, - [FACILITY_CLASS_BRENDAN_3] = TRAINER_PIC_FRONT_BRENDAN, - [FACILITY_CLASS_MAY] = TRAINER_PIC_FRONT_MAY, - [FACILITY_CLASS_MAY_2] = TRAINER_PIC_FRONT_MAY, - [FACILITY_CLASS_MAY_3] = TRAINER_PIC_FRONT_MAY, - [FACILITY_CLASS_PKMN_BREEDER_M] = TRAINER_PIC_FRONT_POKEMON_BREEDER_M, - [FACILITY_CLASS_BUG_CATCHER] = TRAINER_PIC_FRONT_BUG_CATCHER, - [FACILITY_CLASS_PKMN_RANGER_M] = TRAINER_PIC_FRONT_POKEMON_RANGER_M, - [FACILITY_CLASS_PKMN_RANGER_F] = TRAINER_PIC_FRONT_POKEMON_RANGER_F, - [FACILITY_CLASS_MAGMA_LEADER_MAXIE] = TRAINER_PIC_FRONT_MAGMA_LEADER_MAXIE, - [FACILITY_CLASS_LASS] = TRAINER_PIC_FRONT_LASS, - [FACILITY_CLASS_YOUNG_COUPLE] = TRAINER_PIC_FRONT_YOUNG_COUPLE, - [FACILITY_CLASS_OLD_COUPLE] = TRAINER_PIC_FRONT_OLD_COUPLE, - [FACILITY_CLASS_SIS_AND_BRO] = TRAINER_PIC_FRONT_SIS_AND_BRO, - [FACILITY_CLASS_STEVEN] = TRAINER_PIC_FRONT_STEVEN, - [FACILITY_CLASS_SALON_MAIDEN_ANABEL] = TRAINER_PIC_FRONT_SALON_MAIDEN_ANABEL, - [FACILITY_CLASS_DOME_ACE_TUCKER] = TRAINER_PIC_FRONT_DOME_ACE_TUCKER, - [FACILITY_CLASS_RED] = TRAINER_PIC_FRONT_RED, - [FACILITY_CLASS_LEAF] = TRAINER_PIC_FRONT_LEAF, - [FACILITY_CLASS_RS_BRENDAN] = TRAINER_PIC_FRONT_RS_BRENDAN, - [FACILITY_CLASS_RS_MAY] = TRAINER_PIC_FRONT_RS_MAY, - [FACILITY_CLASS_YOUNGSTER_FRLG] = TRAINER_PIC_FRONT_YOUNGSTER_FRLG, - [FACILITY_CLASS_BURGLAR_FRLG] = TRAINER_PIC_FRONT_BURGLAR_FRLG, - [FACILITY_CLASS_PSYCHIC_F_FRLG] = TRAINER_PIC_FRONT_PSYCHIC_F_FRLG, - [FACILITY_CLASS_COOL_COUPLE_FRLG] = TRAINER_PIC_FRONT_COOL_COUPLE_FRLG, - [FACILITY_CLASS_YOUNG_COUPLE_FRLG] = TRAINER_PIC_FRONT_YOUNG_COUPLE_FRLG, - [FACILITY_CLASS_CRUSH_KIN_FRLG] = TRAINER_PIC_FRONT_CRUSH_KIN_FRLG, - [FACILITY_CLASS_BIKER_FRLG] = TRAINER_PIC_FRONT_BIKER_FRLG, - [FACILITY_CLASS_CUE_BALL_FRLG] = TRAINER_PIC_FRONT_CUE_BALL_FRLG, - [FACILITY_CLASS_HIKER_FRLG] = TRAINER_PIC_FRONT_HIKER_FRLG, - [FACILITY_CLASS_CRUSH_GIRL_FRLG] = TRAINER_PIC_FRONT_CRUSH_GIRL_FRLG, - [FACILITY_CLASS_BLACK_BELT_FRLG] = TRAINER_PIC_FRONT_BLACK_BELT_FRLG, - [FACILITY_CLASS_CAMPER_FRLG] = TRAINER_PIC_FRONT_CAMPER_FRLG, - [FACILITY_CLASS_PKMN_BREEDER_FRLG] = TRAINER_PIC_FRONT_POKEMON_BREEDER_FRLG, - [FACILITY_CLASS_BUG_CATCHER_FRLG] = TRAINER_PIC_FRONT_BUG_CATCHER_FRLG, - [FACILITY_CLASS_TWINS_FRLG] = TRAINER_PIC_FRONT_TWINS_FRLG, - [FACILITY_CLASS_PKMN_RANGER_F_FRLG] = TRAINER_PIC_FRONT_POKEMON_RANGER_F_FRLG, - [FACILITY_CLASS_PKMN_RANGER_M_FRLG] = TRAINER_PIC_FRONT_POKEMON_RANGER_M_FRLG, - [FACILITY_CLASS_COOLTRAINER_M_FRLG] = TRAINER_PIC_FRONT_COOLTRAINER_M_FRLG, - [FACILITY_CLASS_PICNICKER_FRLG] = TRAINER_PIC_FRONT_PICNICKER_FRLG, - [FACILITY_CLASS_AROMA_LADY_FRLG] = TRAINER_PIC_FRONT_AROMA_LADY_FRLG, - [FACILITY_CLASS_COOLTRAINER_F_FRLG] = TRAINER_PIC_FRONT_COOLTRAINER_F_FRLG, - [FACILITY_CLASS_SWIMMER_M_FRLG] = TRAINER_PIC_FRONT_SWIMMER_M_FRLG, - [FACILITY_CLASS_SAILOR_FRLG] = TRAINER_PIC_FRONT_SAILOR_FRLG, - [FACILITY_CLASS_SIS_AND_BRO_FRLG] = TRAINER_PIC_FRONT_SIS_AND_BRO_FRLG, - [FACILITY_CLASS_TUBER_FRLG] = TRAINER_PIC_FRONT_TUBER_F_FRLG, - [FACILITY_CLASS_LADY_FRLG] = TRAINER_PIC_FRONT_LADY_FRLG, - [FACILITY_CLASS_SWIMMER_F_FRLG] = TRAINER_PIC_FRONT_SWIMMER_F_FRLG, - [FACILITY_CLASS_FISHERMAN_FRLG] = TRAINER_PIC_FRONT_FISHERMAN_FRLG, - [FACILITY_CLASS_GENTLEMAN_FRLG] = TRAINER_PIC_FRONT_GENTLEMAN_FRLG, - [FACILITY_CLASS_JUGGLER_FRLG] = TRAINER_PIC_FRONT_JUGGLER_FRLG, - [FACILITY_CLASS_SUPER_NERD_FRLG] = TRAINER_PIC_FRONT_SUPER_NERD_FRLG, - [FACILITY_CLASS_PSYCHIC_M_FRLG] = TRAINER_PIC_FRONT_PSYCHIC_M_FRLG, - [FACILITY_CLASS_ROCKER_FRLG] = TRAINER_PIC_FRONT_ROCKER_FRLG, - [FACILITY_CLASS_ENGINEER_FRLG] = TRAINER_PIC_FRONT_ENGINEER_FRLG, - [FACILITY_CLASS_SCIENTIST_FRLG] = TRAINER_PIC_FRONT_SCIENTIST_FRLG, - [FACILITY_CLASS_BEAUTY_FRLG] = TRAINER_PIC_FRONT_BEAUTY_FRLG, - [FACILITY_CLASS_LASS_FRLG] = TRAINER_PIC_FRONT_LASS_FRLG, + [FACILITY_CLASS_HIKER] = TRAINER_PIC_HIKER, + [FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_PIC_AQUA_GRUNT_M, + [FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F, + [FACILITY_CLASS_COOLTRAINER_M] = TRAINER_PIC_COOLTRAINER_M, + [FACILITY_CLASS_BIRD_KEEPER] = TRAINER_PIC_BIRD_KEEPER, + [FACILITY_CLASS_COLLECTOR] = TRAINER_PIC_COLLECTOR, + [FACILITY_CLASS_AQUA_GRUNT_F] = TRAINER_PIC_AQUA_GRUNT_F, + [FACILITY_CLASS_SWIMMER_M] = TRAINER_PIC_SWIMMER_M, + [FACILITY_CLASS_MAGMA_GRUNT_M] = TRAINER_PIC_MAGMA_GRUNT_M, + [FACILITY_CLASS_EXPERT_M] = TRAINER_PIC_EXPERT_M, + [FACILITY_CLASS_BLACK_BELT] = TRAINER_PIC_BLACK_BELT, + [FACILITY_CLASS_AQUA_LEADER_ARCHIE] = TRAINER_PIC_AQUA_LEADER_ARCHIE, + [FACILITY_CLASS_HEX_MANIAC] = TRAINER_PIC_HEX_MANIAC, + [FACILITY_CLASS_AROMA_LADY] = TRAINER_PIC_AROMA_LADY, + [FACILITY_CLASS_RUIN_MANIAC] = TRAINER_PIC_RUIN_MANIAC, + [FACILITY_CLASS_INTERVIEWER] = TRAINER_PIC_INTERVIEWER, + [FACILITY_CLASS_TUBER_F] = TRAINER_PIC_TUBER_F, + [FACILITY_CLASS_TUBER_M] = TRAINER_PIC_TUBER_M, + [FACILITY_CLASS_COOLTRAINER_F] = TRAINER_PIC_COOLTRAINER_F, + [FACILITY_CLASS_LADY] = TRAINER_PIC_LADY, + [FACILITY_CLASS_BEAUTY] = TRAINER_PIC_BEAUTY, + [FACILITY_CLASS_RICH_BOY] = TRAINER_PIC_RICH_BOY, + [FACILITY_CLASS_EXPERT_F] = TRAINER_PIC_EXPERT_F, + [FACILITY_CLASS_POKEMANIAC] = TRAINER_PIC_POKEMANIAC, + [FACILITY_CLASS_MAGMA_GRUNT_F] = TRAINER_PIC_MAGMA_GRUNT_F, + [FACILITY_CLASS_GUITARIST] = TRAINER_PIC_GUITARIST, + [FACILITY_CLASS_KINDLER] = TRAINER_PIC_KINDLER, + [FACILITY_CLASS_CAMPER] = TRAINER_PIC_CAMPER, + [FACILITY_CLASS_PICNICKER] = TRAINER_PIC_PICNICKER, + [FACILITY_CLASS_BUG_MANIAC] = TRAINER_PIC_BUG_MANIAC, + [FACILITY_CLASS_PSYCHIC_M] = TRAINER_PIC_PSYCHIC_M, + [FACILITY_CLASS_PSYCHIC_F] = TRAINER_PIC_PSYCHIC_F, + [FACILITY_CLASS_GENTLEMAN] = TRAINER_PIC_GENTLEMAN, + [FACILITY_CLASS_ELITE_FOUR_SIDNEY] = TRAINER_PIC_ELITE_FOUR_SIDNEY, + [FACILITY_CLASS_ELITE_FOUR_PHOEBE] = TRAINER_PIC_ELITE_FOUR_PHOEBE, + [FACILITY_CLASS_LEADER_ROXANNE] = TRAINER_PIC_LEADER_ROXANNE, + [FACILITY_CLASS_LEADER_BRAWLY] = TRAINER_PIC_LEADER_BRAWLY, + [FACILITY_CLASS_LEADER_TATE_AND_LIZA] = TRAINER_PIC_LEADER_TATE_AND_LIZA, + [FACILITY_CLASS_SCHOOL_KID_M] = TRAINER_PIC_SCHOOL_KID_M, + [FACILITY_CLASS_SCHOOL_KID_F] = TRAINER_PIC_SCHOOL_KID_F, + [FACILITY_CLASS_SR_AND_JR] = TRAINER_PIC_SR_AND_JR, + [FACILITY_CLASS_POKEFAN_M] = TRAINER_PIC_POKEFAN_M, + [FACILITY_CLASS_POKEFAN_F] = TRAINER_PIC_POKEFAN_F, + [FACILITY_CLASS_YOUNGSTER] = TRAINER_PIC_YOUNGSTER, + [FACILITY_CLASS_CHAMPION_WALLACE] = TRAINER_PIC_CHAMPION_WALLACE, + [FACILITY_CLASS_FISHERMAN] = TRAINER_PIC_FISHERMAN, + [FACILITY_CLASS_CYCLING_TRIATHLETE_M] = TRAINER_PIC_CYCLING_TRIATHLETE_M, + [FACILITY_CLASS_CYCLING_TRIATHLETE_F] = TRAINER_PIC_CYCLING_TRIATHLETE_F, + [FACILITY_CLASS_RUNNING_TRIATHLETE_M] = TRAINER_PIC_RUNNING_TRIATHLETE_M, + [FACILITY_CLASS_RUNNING_TRIATHLETE_F] = TRAINER_PIC_RUNNING_TRIATHLETE_F, + [FACILITY_CLASS_SWIMMING_TRIATHLETE_M] = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + [FACILITY_CLASS_SWIMMING_TRIATHLETE_F] = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + [FACILITY_CLASS_DRAGON_TAMER] = TRAINER_PIC_DRAGON_TAMER, + [FACILITY_CLASS_NINJA_BOY] = TRAINER_PIC_NINJA_BOY, + [FACILITY_CLASS_BATTLE_GIRL] = TRAINER_PIC_BATTLE_GIRL, + [FACILITY_CLASS_PARASOL_LADY] = TRAINER_PIC_PARASOL_LADY, + [FACILITY_CLASS_SWIMMER_F] = TRAINER_PIC_SWIMMER_F, + [FACILITY_CLASS_TWINS] = TRAINER_PIC_TWINS, + [FACILITY_CLASS_SAILOR] = TRAINER_PIC_SAILOR, + [FACILITY_CLASS_WALLY] = TRAINER_PIC_WALLY, + [FACILITY_CLASS_BRENDAN] = TRAINER_PIC_BRENDAN, + [FACILITY_CLASS_BRENDAN_2] = TRAINER_PIC_BRENDAN, + [FACILITY_CLASS_BRENDAN_3] = TRAINER_PIC_BRENDAN, + [FACILITY_CLASS_MAY] = TRAINER_PIC_MAY, + [FACILITY_CLASS_MAY_2] = TRAINER_PIC_MAY, + [FACILITY_CLASS_MAY_3] = TRAINER_PIC_MAY, + [FACILITY_CLASS_PKMN_BREEDER_M] = TRAINER_PIC_POKEMON_BREEDER_M, + [FACILITY_CLASS_BUG_CATCHER] = TRAINER_PIC_BUG_CATCHER, + [FACILITY_CLASS_PKMN_RANGER_M] = TRAINER_PIC_POKEMON_RANGER_M, + [FACILITY_CLASS_PKMN_RANGER_F] = TRAINER_PIC_POKEMON_RANGER_F, + [FACILITY_CLASS_MAGMA_LEADER_MAXIE] = TRAINER_PIC_MAGMA_LEADER_MAXIE, + [FACILITY_CLASS_LASS] = TRAINER_PIC_LASS, + [FACILITY_CLASS_YOUNG_COUPLE] = TRAINER_PIC_YOUNG_COUPLE, + [FACILITY_CLASS_OLD_COUPLE] = TRAINER_PIC_OLD_COUPLE, + [FACILITY_CLASS_SIS_AND_BRO] = TRAINER_PIC_SIS_AND_BRO, + [FACILITY_CLASS_STEVEN] = TRAINER_PIC_STEVEN, + [FACILITY_CLASS_SALON_MAIDEN_ANABEL] = TRAINER_PIC_SALON_MAIDEN_ANABEL, + [FACILITY_CLASS_DOME_ACE_TUCKER] = TRAINER_PIC_DOME_ACE_TUCKER, + [FACILITY_CLASS_RED] = TRAINER_PIC_RED, + [FACILITY_CLASS_LEAF] = TRAINER_PIC_LEAF, + [FACILITY_CLASS_RS_BRENDAN] = TRAINER_PIC_RS_BRENDAN, + [FACILITY_CLASS_RS_MAY] = TRAINER_PIC_RS_MAY, + [FACILITY_CLASS_YOUNGSTER_FRLG] = TRAINER_PIC_YOUNGSTER_FRLG, + [FACILITY_CLASS_BURGLAR_FRLG] = TRAINER_PIC_BURGLAR_FRLG, + [FACILITY_CLASS_PSYCHIC_F_FRLG] = TRAINER_PIC_PSYCHIC_F_FRLG, + [FACILITY_CLASS_COOL_COUPLE_FRLG] = TRAINER_PIC_COOL_COUPLE_FRLG, + [FACILITY_CLASS_YOUNG_COUPLE_FRLG] = TRAINER_PIC_YOUNG_COUPLE_FRLG, + [FACILITY_CLASS_CRUSH_KIN_FRLG] = TRAINER_PIC_CRUSH_KIN_FRLG, + [FACILITY_CLASS_BIKER_FRLG] = TRAINER_PIC_BIKER_FRLG, + [FACILITY_CLASS_CUE_BALL_FRLG] = TRAINER_PIC_CUE_BALL_FRLG, + [FACILITY_CLASS_HIKER_FRLG] = TRAINER_PIC_HIKER_FRLG, + [FACILITY_CLASS_CRUSH_GIRL_FRLG] = TRAINER_PIC_CRUSH_GIRL_FRLG, + [FACILITY_CLASS_BLACK_BELT_FRLG] = TRAINER_PIC_BLACK_BELT_FRLG, + [FACILITY_CLASS_CAMPER_FRLG] = TRAINER_PIC_CAMPER_FRLG, + [FACILITY_CLASS_PKMN_BREEDER_FRLG] = TRAINER_PIC_POKEMON_BREEDER_FRLG, + [FACILITY_CLASS_BUG_CATCHER_FRLG] = TRAINER_PIC_BUG_CATCHER_FRLG, + [FACILITY_CLASS_TWINS_FRLG] = TRAINER_PIC_TWINS_FRLG, + [FACILITY_CLASS_PKMN_RANGER_F_FRLG] = TRAINER_PIC_POKEMON_RANGER_F_FRLG, + [FACILITY_CLASS_PKMN_RANGER_M_FRLG] = TRAINER_PIC_POKEMON_RANGER_M_FRLG, + [FACILITY_CLASS_COOLTRAINER_M_FRLG] = TRAINER_PIC_COOLTRAINER_M_FRLG, + [FACILITY_CLASS_PICNICKER_FRLG] = TRAINER_PIC_PICNICKER_FRLG, + [FACILITY_CLASS_AROMA_LADY_FRLG] = TRAINER_PIC_AROMA_LADY_FRLG, + [FACILITY_CLASS_COOLTRAINER_F_FRLG] = TRAINER_PIC_COOLTRAINER_F_FRLG, + [FACILITY_CLASS_SWIMMER_M_FRLG] = TRAINER_PIC_SWIMMER_M_FRLG, + [FACILITY_CLASS_SAILOR_FRLG] = TRAINER_PIC_SAILOR_FRLG, + [FACILITY_CLASS_SIS_AND_BRO_FRLG] = TRAINER_PIC_SIS_AND_BRO_FRLG, + [FACILITY_CLASS_TUBER_FRLG] = TRAINER_PIC_TUBER_F_FRLG, + [FACILITY_CLASS_LADY_FRLG] = TRAINER_PIC_LADY_FRLG, + [FACILITY_CLASS_SWIMMER_F_FRLG] = TRAINER_PIC_SWIMMER_F_FRLG, + [FACILITY_CLASS_FISHERMAN_FRLG] = TRAINER_PIC_FISHERMAN_FRLG, + [FACILITY_CLASS_GENTLEMAN_FRLG] = TRAINER_PIC_GENTLEMAN_FRLG, + [FACILITY_CLASS_JUGGLER_FRLG] = TRAINER_PIC_JUGGLER_FRLG, + [FACILITY_CLASS_SUPER_NERD_FRLG] = TRAINER_PIC_SUPER_NERD_FRLG, + [FACILITY_CLASS_PSYCHIC_M_FRLG] = TRAINER_PIC_PSYCHIC_M_FRLG, + [FACILITY_CLASS_ROCKER_FRLG] = TRAINER_PIC_ROCKER_FRLG, + [FACILITY_CLASS_ENGINEER_FRLG] = TRAINER_PIC_ENGINEER_FRLG, + [FACILITY_CLASS_SCIENTIST_FRLG] = TRAINER_PIC_SCIENTIST_FRLG, + [FACILITY_CLASS_BEAUTY_FRLG] = TRAINER_PIC_BEAUTY_FRLG, + [FACILITY_CLASS_LASS_FRLG] = TRAINER_PIC_LASS_FRLG, }; const enum TrainerClassID gFacilityClassToTrainerClass[] = diff --git a/src/decompress.c b/src/decompress.c index 6572525706..8e34b777c9 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -244,11 +244,6 @@ u32 LoadCompressedSpriteSheetByTemplate(const struct SpriteTemplate *template, s } -void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer) -{ - DecompressDataWithHeaderWram(src->data, buffer); -} - void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, enum Species species, u32 personality) { LoadSpecialPokePicIsEgg(dest, species, personality, isFrontPic, FALSE); diff --git a/src/field_effect.c b/src/field_effect.c index b67652f458..8870d9f378 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -29,6 +29,7 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "trainer.h" #include "trainer_pokemon_sprites.h" #include "trig.h" #include "util.h" @@ -976,8 +977,9 @@ bool8 FieldEffectActiveListContains(u8 id) return FALSE; } -u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer) +u8 CreateTrainerSprite(enum TrainerPicID trainerPicId, s16 x, s16 y, u8 subpriority, u8 *buffer) { + struct CompressedSpriteSheet spriteSheet; struct SpriteTemplate spriteTemplate; bool32 alloced = FALSE; @@ -988,13 +990,17 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf alloced = TRUE; } - LoadSpritePalette(&gTrainerSprites[trainerSpriteID].palette); - LoadCompressedSpriteSheetOverrideBuffer(&gTrainerSprites[trainerSpriteID].frontPic, buffer); + spriteSheet.data = GetTrainerFrontPicData(trainerPicId); + spriteSheet.size = TRAINER_PIC_SIZE; + spriteSheet.tag = GetTrainerPicTag(trainerPicId, TRUE); + + LoadSpritePaletteWithTag(GetTrainerFrontPicPalette(trainerPicId), GetTrainerPicTag(trainerPicId, TRUE)); + LoadCompressedSpriteSheetOverrideBuffer(&spriteSheet, buffer); if (alloced) Free(buffer); - spriteTemplate.tileTag = gTrainerSprites[trainerSpriteID].frontPic.tag; - spriteTemplate.paletteTag = gTrainerSprites[trainerSpriteID].palette.tag; + spriteTemplate.tileTag = GetTrainerPicTag(trainerPicId, TRUE); + spriteTemplate.paletteTag = GetTrainerPicTag(trainerPicId, TRUE); spriteTemplate.oam = &sOam_64x64; spriteTemplate.anims = gDummySpriteAnimTable; spriteTemplate.images = NULL; @@ -1005,8 +1011,8 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf static void UNUSED LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { - DecompressDataWithHeaderVram(gTrainerSprites[gender].frontPic.data, dest); - LoadPalette(gTrainerSprites[gender].palette.data, palOffset, PLTT_SIZE_4BPP); + DecompressDataWithHeaderVram(GetTrainerFrontPicData(gender), dest); + LoadPalette(GetTrainerFrontPicPalette(gender), palOffset, PLTT_SIZE_4BPP); } u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) diff --git a/src/pokemon.c b/src/pokemon.c index 8207d62ac4..cee3f6ee8e 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -51,6 +51,7 @@ #include "task.h" #include "test_runner.h" #include "text.h" +#include "trainer.h" #include "trainer_hill.h" #include "util.h" #include "constants/abilities.h" @@ -2342,12 +2343,12 @@ void SetMultiuseSpriteTemplateToPokemon(enum Species speciesTag, enum BattlerPos void SetMultiuseSpriteTemplateToTrainerBack(enum TrainerPicID trainerPicId, enum BattlerPosition battlerPosition) { - gMultiuseSpriteTemplate.paletteTag = trainerPicId; + gMultiuseSpriteTemplate.paletteTag = GetTrainerPicTag(trainerPicId, FALSE); if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) { gMultiuseSpriteTemplate = sTrainerBackSpriteTemplate; - gMultiuseSpriteTemplate.images = &gTrainerBacksprites[trainerPicId].backPic; - gMultiuseSpriteTemplate.anims = gTrainerBacksprites[trainerPicId].animation; + gMultiuseSpriteTemplate.images = GetTrainerBackPicImage(trainerPicId); + gMultiuseSpriteTemplate.anims = GetTrainerBackPicAnims(trainerPicId); } else { @@ -2366,7 +2367,7 @@ void SetMultiuseSpriteTemplateToTrainerFront(enum TrainerPicID trainerPicId, enu else gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition]; - gMultiuseSpriteTemplate.paletteTag = trainerPicId; + gMultiuseSpriteTemplate.paletteTag = GetTrainerPicTag(trainerPicId, TRUE); gMultiuseSpriteTemplate.anims = gAnims_Trainer; } diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index 47c25b80b9..e43085986d 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -1245,8 +1245,8 @@ static void LoadCheckPageTrainerPic(struct Pokenav_MatchCallGfx *gfx) enum TrainerPicID trainerPic = GetMatchCallTrainerPic(PokenavList_GetSelectedIndex()); if (trainerPic >= 0) { - DecompressPicFromTable(&gTrainerSprites[trainerPic].frontPic, gfx->trainerPicGfx); - memcpy(gfx->trainerPicPal, gTrainerSprites[trainerPic].palette.data, 32); + DecompressDataWithHeaderWram(GetTrainerFrontPicData(trainerPic), gfx->trainerPicGfx); + memcpy(gfx->trainerPicPal, GetTrainerFrontPicPalette(trainerPic), 32); cursor = RequestDma3Copy(gfx->trainerPicGfx, gfx->trainerPicGfxPtr, sizeof(gfx->trainerPicGfx), 1); LoadPalette(gfx->trainerPicPal, gfx->trainerPicPalOffset, sizeof(gfx->trainerPicPal)); gfx->trainerPicSprite->data[0] = 0; diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index c52fe8c626..2d5dc677b1 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -11,6 +11,7 @@ #include "battle_controllers.h" #include "link.h" #include "sprite.h" +#include "trainer.h" #include "constants/trainers.h" #include "battle_interface.h" #include "battle_anim.h" @@ -24,7 +25,7 @@ static void CreateHealthboxSprite(enum BattlerId battler); static void ClearBattleBgCntBaseBlocks(void); static void CreateCaughtMonSprite(void); -#define CATCH_TUTORIAL_TRAINER_PIC_BACK (IS_FRLG ? TRAINER_PIC_BACK_OLD_MAN : TRAINER_PIC_BACK_WALLY) +#define CATCH_TUTORIAL_TRAINER_PIC (IS_FRLG ? TRAINER_PIC_OLD_MAN : TRAINER_PIC_WALLY) void ReshowBattleScreenDummy(void) { @@ -282,9 +283,9 @@ static bool8 LoadBattlerSpriteGfx(enum BattlerId battler) BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); } else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && position == B_POSITION_PLAYER_LEFT) - DecompressTrainerBackPic((gSaveBlock2Ptr->playerGender == FEMALE) ? TRAINER_BACK_PIC_PLAYER_FEMALE : TRAINER_BACK_PIC_PLAYER_MALE, battler); + DecompressTrainerBackPic(GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION), battler); else if (gBattleTypeFlags & BATTLE_TYPE_CATCH_TUTORIAL && position == B_POSITION_PLAYER_LEFT) - DecompressTrainerBackPic(CATCH_TUTORIAL_TRAINER_PIC_BACK, battler); + DecompressTrainerBackPic(CATCH_TUTORIAL_TRAINER_PIC, battler); else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) BattleLoadMonSpriteGfx(GetBattlerMon(battler), battler); else @@ -329,22 +330,22 @@ void CreateBattlerSprite(enum BattlerId battler) } else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && position == B_POSITION_PLAYER_LEFT) { - enum TrainerPicID trainerPicId = (gSaveBlock2Ptr->playerGender == FEMALE) ? TRAINER_BACK_PIC_PLAYER_FEMALE : TRAINER_BACK_PIC_PLAYER_MALE; + enum TrainerPicID trainerPicId = GetPlayerTrainerPic(gSaveBlock2Ptr->playerGender, GAME_VERSION); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, position); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50, - (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80, + (8 - GetTrainerBackPicCoords(trainerPicId)->size) * 4 + 80, GetBattlerSpriteSubpriority(0)); - gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerBacksprites[trainerPicId].palette.tag); + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(trainerPicId, FALSE)); gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; } else if (gBattleTypeFlags & BATTLE_TYPE_CATCH_TUTORIAL && position == B_POSITION_PLAYER_LEFT) { - SetMultiuseSpriteTemplateToTrainerBack(CATCH_TUTORIAL_TRAINER_PIC_BACK, position); + SetMultiuseSpriteTemplateToTrainerBack(CATCH_TUTORIAL_TRAINER_PIC, position); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50, - (8 - gTrainerBacksprites[CATCH_TUTORIAL_TRAINER_PIC_BACK].coordinates.size) * 4 + 80, + (8 - GetTrainerBackPicCoords(CATCH_TUTORIAL_TRAINER_PIC)->size) * 4 + 80, GetBattlerSpriteSubpriority(0)); - gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerBacksprites[CATCH_TUTORIAL_TRAINER_PIC_BACK].palette.tag); + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(GetTrainerPicTag(CATCH_TUTORIAL_TRAINER_PIC, FALSE)); gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; } diff --git a/src/trainer.c b/src/trainer.c new file mode 100644 index 0000000000..947f1ce613 --- /dev/null +++ b/src/trainer.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "constants/trainers.h" + +static enum TrainerPicID GetEmeraldTrainerPic(enum Gender gender) +{ + return gender == MALE ? TRAINER_PIC_BRENDAN : TRAINER_PIC_MAY; +} +static enum TrainerPicID GetRSTrainerPic(enum Gender gender) +{ + return gender == MALE ? TRAINER_PIC_RS_BRENDAN : TRAINER_PIC_RS_MAY; +} + +static enum TrainerPicID GetKantoTrainerPic(enum Gender gender) +{ + return gender == MALE ? TRAINER_PIC_RED : TRAINER_PIC_LEAF; +} + +enum TrainerPicID GetPlayerTrainerPic(enum Gender gender, enum GameVersion version) +{ + switch (version) + { + case VERSION_SAPPHIRE: + case VERSION_RUBY: + return GetRSTrainerPic(gender); + case VERSION_LEAF_GREEN: + case VERSION_FIRE_RED: + return GetKantoTrainerPic(gender); + case VERSION_EMERALD: + default: + return GetEmeraldTrainerPic(gender); + } +} diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index c48c388ef3..8099289f7c 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -4,6 +4,7 @@ #include "malloc.h" #include "palette.h" #include "decompress.h" +#include "trainer.h" #include "trainer_pokemon_sprites.h" #include "data.h" #include "pokemon.h" @@ -68,7 +69,7 @@ static bool16 DecompressPic(u16 picId, u32 personality, bool8 isFrontPic, u8 *de { enum TrainerPicID trainerPicId = picId; if (isFrontPic) - DecompressPicFromTable(&gTrainerSprites[trainerPicId].frontPic, dest); + DecompressDataWithHeaderWram(GetTrainerFrontPicData(trainerPicId), dest); else CopyTrainerBackspriteFramesToDest(trainerPicId, dest); } @@ -95,12 +96,12 @@ static void LoadPicPaletteByTagOrSlot(u16 species, bool8 isShiny, u32 personalit if (paletteTag == TAG_NONE) { sCreatingSpriteTemplate.paletteTag = TAG_NONE; - LoadPalette(gTrainerSprites[species].palette.data, OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); + LoadPalette(GetTrainerFrontPicPalette(species), OBJ_PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); } else { sCreatingSpriteTemplate.paletteTag = paletteTag; - LoadSpritePalette(&gTrainerSprites[species].palette); + LoadSpritePaletteWithTag(GetTrainerFrontPicPalette(species), GetTrainerPicTag(species, TRUE)); } } } @@ -110,7 +111,7 @@ static void LoadPicPaletteBySlot(u16 species, bool8 isShiny, u32 personality, u8 if (!isTrainer) LoadPalette(GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, personality), PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); else - LoadPalette(gTrainerSprites[species].palette.data, PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); + LoadPalette(GetTrainerFrontPicPalette(species), PLTT_ID(paletteSlot), PLTT_SIZE_4BPP); } static void AssignSpriteAnimsTable(bool8 isTrainer) @@ -362,8 +363,8 @@ u16 PlayerGenderToFrontTrainerPicId_Debug(enum Gender gender, bool8 getClass) void CopyTrainerBackspriteFramesToDest(enum TrainerPicID trainerPicId, u8 *dest) { - const struct SpriteFrameImage *frame = &gTrainerBacksprites[trainerPicId].backPic; + const struct SpriteFrameImage *frame = GetTrainerBackPicImage(trainerPicId); // y_offset is repurposed to indicates how many frames does the trainer pic have. - u32 size = (frame->size * gTrainerBacksprites[trainerPicId].coordinates.y_offset); + u32 size = (frame->size * GetTrainerBackPicCoords(trainerPicId)->y_offset); CpuSmartCopy16(frame->data, dest, size); } diff --git a/test/battle/partner_control.party b/test/battle/partner_control.party index b5bd7bb964..9483eac539 100644 --- a/test/battle/partner_control.party +++ b/test/battle/partner_control.party @@ -4,7 +4,6 @@ Class: Pkmn Trainer 1 Pic: Brendan Gender: Male Music: Male -Back Pic: Brendan === PARTNER_STEVEN_TEST === Name: STEVEN @@ -12,7 +11,6 @@ Class: Rival Pic: Steven Gender: Male Music: Male -Back Pic: Steven AI: Basic Trainer Difficulty: Normal @@ -52,7 +50,6 @@ Class: Rival Pic: Steven Gender: Male Music: Male -Back Pic: Steven Battle Type: Singles Difficulty: Easy @@ -65,7 +62,6 @@ Class: Rival Pic: Steven Gender: Male Music: Male -Back Pic: Steven Battle Type: Singles Difficulty: Hard diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index 84db2664fb..b4edc2cea1 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -157,9 +157,6 @@ struct Trainer struct String macro; int macro_line; - - struct String back_pic; - int back_pic_line; }; static bool is_empty_string(struct String s) @@ -1305,13 +1302,6 @@ static bool parse_trainer(struct Parser *p, const struct Parsed *parsed, struct trainer->macro_line = value.location.line; trainer->macro = token_string(&value); } - else if (is_literal_token(&key, "Back Pic")) - { - if (trainer->back_pic_line) - any_error = !set_show_parse_error(p, key.location, "duplicate 'Back Pic'"); - trainer->back_pic_line = value.location.line; - trainer->back_pic = token_string(&value); - } else { any_error = !set_show_parse_error(p, key.location, "expected one of 'Name', 'Class', 'Pic', 'Gender', 'Music', 'Items', 'Battle Type', 'Difficulty', 'Party Size', 'Pool Rules', 'Pool Pick Functions', 'Pool Prune' or 'AI'"); @@ -1820,7 +1810,7 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par { fprintf(f, "#line %d\n", trainer->pic_line); fprintf(f, " .trainerPic = "); - fprint_constant(f, "TRAINER_PIC_FRONT", trainer->pic); + fprint_constant(f, "TRAINER_PIC", trainer->pic); fprintf(f, ",\n"); } @@ -1928,20 +1918,6 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par fprint_string(f, trainer->copy_pool); fprintf(f, ",\n"); } - if (!is_empty_string(trainer->back_pic)) - { - fprintf(f, "#line %d\n", trainer->back_pic_line); - fprintf(f, " .trainerBackPic = "); - fprint_constant(f, "TRAINER_PIC_BACK", trainer->back_pic); - fprintf(f, ",\n"); - } - else // defaults to front pic in absence of defined back pic - { - fprintf(f, "#line %d\n", trainer->back_pic_line); - fprintf(f, " .trainerBackPic = "); - fprint_constant(f, "TRAINER_PIC_FRONT", trainer->pic); - fprintf(f, ",\n"); - } if (trainer->macro_line) {