Trainers trigger in local id order (#7424)

Co-authored-by: Martin Griffin <martinrgriffin@gmail.com>
This commit is contained in:
grintoul 2025-09-02 22:14:23 +01:00 committed by GitHub
parent ee0953ab29
commit a8e60a8ba3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -360,6 +360,8 @@ static const struct SpriteTemplate sSpriteTemplate_Emote =
bool8 CheckForTrainersWantingBattle(void)
{
u8 i;
u8 trainerObjects[OBJECT_EVENTS_COUNT];
u8 trainerObjectsCount = 0;
if (FlagGet(OW_FLAG_NO_TRAINER_SEE))
return FALSE;
@ -367,17 +369,34 @@ bool8 CheckForTrainersWantingBattle(void)
gNoOfApproachingTrainers = 0;
gApproachingTrainerId = 0;
// Adds trainers wanting to battle to array
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
u8 numTrainers;
{
if (!gObjectEvents[i].active)
continue;
if (gObjectEvents[i].trainerType != TRAINER_TYPE_NORMAL && gObjectEvents[i].trainerType != TRAINER_TYPE_BURIED)
continue;
trainerObjects[trainerObjectsCount++] = i;
}
numTrainers = CheckTrainer(i);
if (numTrainers == 0xFF) // non-trainerbatle script
// Sorts array by localId
for (i = 1; i <= trainerObjectsCount; i++)
{
u8 x = trainerObjects[i];
u8 j = i;
while (j > 0 && gObjectEvents[trainerObjects[j-1]].localId > gObjectEvents[x].localId)
{
trainerObjects[j] = trainerObjects[j-1];
j--;
}
trainerObjects[j] = x;
}
for (i = 1; i <= trainerObjectsCount; i++)
{
u8 numTrainers;
numTrainers = CheckTrainer(trainerObjects[i]);
if (numTrainers == 0xFF) // non-trainerbattle script
{
u32 objectEventId = gApproachingTrainers[gNoOfApproachingTrainers - 1].objectEventId;
gSelectedObjectEvent = objectEventId;