This commit is contained in:
cawtds 2026-03-21 16:31:49 +01:00 committed by GitHub
commit 3288e613b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 1241 additions and 655 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

View File

@ -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

View File

@ -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);

View File

@ -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,

View File

@ -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

View File

@ -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);

View File

@ -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);

15
include/trainer.h Normal file
View File

@ -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

View File

@ -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+)')

View File

@ -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+)')

View File

@ -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+)')

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;

View File

@ -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.

View File

@ -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);

View File

@ -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

View File

@ -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),
},
};

View File

@ -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[] =

View File

@ -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);

View File

@ -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)

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

32
src/trainer.c Normal file
View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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

View File

@ -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)
{