Added trainerBackPic to Trainer struct to de-couple trainer pic and trainer back pic defines (#7425)
This commit is contained in:
parent
7b5844762d
commit
916f083852
@ -106,6 +106,7 @@ struct Trainer
|
||||
/*0x23*/ u8 poolPickIndex;
|
||||
/*0x24*/ u8 poolPruneIndex;
|
||||
/*0x25*/ u16 overrideTrainer;
|
||||
/*0x26*/ u8 trainerBackPic;
|
||||
};
|
||||
|
||||
struct TrainerClass
|
||||
@ -178,7 +179,6 @@ 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 u16 gTrainerPicToTrainerBackPic[];
|
||||
|
||||
extern const struct Trainer gTrainers[DIFFICULTY_COUNT][TRAINERS_COUNT];
|
||||
extern const struct Trainer gBattlePartners[DIFFICULTY_COUNT][PARTNER_COUNT];
|
||||
@ -261,6 +261,16 @@ static inline const u8 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 u8 GetTrainerStartingStatusFromId(u16 trainerId)
|
||||
{
|
||||
return GetTrainerStructFromId(trainerId)->startingStatus;
|
||||
|
||||
@ -206,7 +206,7 @@ static void PlayerPartnerHandleDrawTrainerPic(u32 battler)
|
||||
|
||||
if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE))
|
||||
{
|
||||
trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic;
|
||||
trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic;
|
||||
xPos = 90;
|
||||
yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80;
|
||||
}
|
||||
@ -320,9 +320,9 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler)
|
||||
enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId);
|
||||
|
||||
if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE))
|
||||
trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic].palette.data;
|
||||
trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic].palette.data;
|
||||
else if (IsAiVsAiBattle())
|
||||
trainerPal = gTrainerSprites[GetTrainerPicFromId(gPartnerTrainerId)].palette.data;
|
||||
trainerPal = gTrainerSprites[GetTrainerBackPicFromId(gPartnerTrainerId)].palette.data;
|
||||
else
|
||||
trainerPal = gTrainerSprites[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].palette.data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal.
|
||||
|
||||
|
||||
@ -2587,7 +2587,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task)
|
||||
|
||||
u8 trainerAPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA);
|
||||
u8 trainerBPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentB);
|
||||
u8 partnerPicId = gTrainerPicToTrainerBackPic[GetTrainerPicFromId(gPartnerTrainerId)];
|
||||
u8 partnerPicId = GetTrainerPicFromId(gPartnerTrainerId);
|
||||
s16 opponentARotationScales = 0;
|
||||
s16 opponentBRotationScales = 0;
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ Class: Pkmn Trainer 1
|
||||
Pic: Brendan
|
||||
Gender: Male
|
||||
Music: Male
|
||||
Back Pic: Brendan
|
||||
|
||||
=== PARTNER_STEVEN ===
|
||||
Name: STEVEN
|
||||
@ -11,6 +12,7 @@ Class: Rival
|
||||
Pic: Steven
|
||||
Gender: Male
|
||||
Music: Male
|
||||
Back Pic: Steven
|
||||
|
||||
Metang
|
||||
Brave Nature
|
||||
|
||||
@ -84,18 +84,6 @@ const u16 gFacilityClassToPicIndex[] =
|
||||
[FACILITY_CLASS_RS_MAY] = TRAINER_PIC_RS_MAY,
|
||||
};
|
||||
|
||||
const u16 gTrainerPicToTrainerBackPic[] =
|
||||
{
|
||||
[TRAINER_BACK_PIC_BRENDAN] = TRAINER_PIC_BRENDAN,
|
||||
[TRAINER_BACK_PIC_MAY] = TRAINER_PIC_MAY,
|
||||
[TRAINER_BACK_PIC_RED] = TRAINER_PIC_RED,
|
||||
[TRAINER_BACK_PIC_LEAF] = TRAINER_PIC_LEAF,
|
||||
[TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = TRAINER_PIC_RS_BRENDAN,
|
||||
[TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = TRAINER_PIC_RS_MAY,
|
||||
[TRAINER_BACK_PIC_WALLY] = TRAINER_PIC_WALLY,
|
||||
[TRAINER_BACK_PIC_STEVEN] = TRAINER_PIC_STEVEN,
|
||||
};
|
||||
|
||||
const enum TrainerClassID gFacilityClassToTrainerClass[] =
|
||||
{
|
||||
[FACILITY_CLASS_HIKER] = TRAINER_CLASS_HIKER,
|
||||
|
||||
@ -155,6 +155,9 @@ struct Trainer
|
||||
|
||||
struct String macro;
|
||||
int macro_line;
|
||||
|
||||
struct String back_pic;
|
||||
int back_pic_line;
|
||||
};
|
||||
|
||||
static bool is_empty_string(struct String s)
|
||||
@ -1300,6 +1303,13 @@ 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'");
|
||||
@ -1776,10 +1786,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 = ");
|
||||
if (starts_with(trainer->id, "PARTNER_"))
|
||||
fprint_constant(f, "TRAINER_BACK_PIC", trainer->pic);
|
||||
else
|
||||
fprint_constant(f, "TRAINER_PIC", trainer->pic);
|
||||
fprint_constant(f, "TRAINER_PIC", trainer->pic);
|
||||
fprintf(f, ",\n");
|
||||
}
|
||||
|
||||
@ -1884,6 +1891,21 @@ 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_BACK_PIC", 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", trainer->pic);
|
||||
fprintf(f, ",\n");
|
||||
}
|
||||
|
||||
if (trainer->macro_line)
|
||||
{
|
||||
fprintf(f, "#line %d\n", trainer->macro_line);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user