diff --git a/include/quest_log.h b/include/quest_log.h index eb860e71e..9857f53ee 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -193,7 +193,7 @@ void SetQuestLogEvent(u16, const u16 *); void SetQLPlayedTheSlots(void); void QuestLog_RecordEnteredMap(u16); u8 sub_8112CAC(void); -bool8 QuestLog_SchedulePlaybackCB(void (*func)(void)); +bool8 QL_AvoidDisplay(void (*func)(void)); void QuestLog_BackUpPalette(u16 offset, u16 size); void CommitQuestLogWindow1(void); void QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(void); @@ -220,7 +220,7 @@ void QuestLogRecordPlayerStepWithDuration(u8 movementActionId, u8 duration); void QuestLogRecordNPCStepWithDuration(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration); void QL_AfterRecordFishActionSuccessful(void); void sub_8110920(void); -void sub_8111708(void); +void QL_RestoreMapLayoutId(void); void sub_81127F8(struct FieldInput * a0); void sub_8112B3C(void); void RunQuestLogCB(void); diff --git a/include/script_menu.h b/include/script_menu.h index 3b62f459e..d3ce18b32 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -14,7 +14,7 @@ bool8 CreatePCMenu(void); void ScriptMenu_DisplayPCStartupPrompt(void); bool8 (*ScriptMenu_HidePokemonPic(void))(void); -void QLPlaybackCB_DestroyScriptMenuMonPicSprites(void); +void QL_DestroyAbortedDisplay(void); void PicboxCancel(void); #endif //GUARD_SCRIPT_MENU_H diff --git a/src/berry_powder.c b/src/berry_powder.c index 849e32f32..044810e94 100644 --- a/src/berry_powder.c +++ b/src/berry_powder.c @@ -113,15 +113,15 @@ void DisplayBerryPowderVendorMenu(void) { struct WindowTemplate template; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) - { - template = SetWindowTemplateFields(0, 1, 1, 8, 3, 15, 32); - sBerryPowderVendorWindowId = AddWindow(&template); - FillWindowPixelBuffer(sBerryPowderVendorWindowId, 0); - PutWindowTilemap(sBerryPowderVendorWindowId); - LoadStdWindowGfx(sBerryPowderVendorWindowId, 0x21D, 0xD0); - DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 0xD, GetBerryPowder()); - } + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) + return; + + template = SetWindowTemplateFields(0, 1, 1, 8, 3, 15, 32); + sBerryPowderVendorWindowId = AddWindow(&template); + FillWindowPixelBuffer(sBerryPowderVendorWindowId, 0); + PutWindowTilemap(sBerryPowderVendorWindowId); + LoadStdWindowGfx(sBerryPowderVendorWindowId, 0x21D, 0xD0); + DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 0xD, GetBerryPowder()); } void RemoveBerryPowderVendorMenu(void) diff --git a/src/field_specials.c b/src/field_specials.c index e6b2e65a1..5a267fb51 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1095,18 +1095,19 @@ void DrawElevatorCurrentFloorWindow(void) { const u8 *floorname; u32 strwidth; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) - { - sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate); - LoadStdWindowGfx(sElevatorCurrentFloorWindowId, 0x21D, 0xD0); - DrawStdFrameWithCustomTileAndPalette(sElevatorCurrentFloorWindowId, FALSE, 0x21D, 0xD); - AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, gText_NowOn, 0, 2, 0xFF, NULL); - floorname = sFloorNamePointers[gSpecialVar_0x8005]; - strwidth = GetStringWidth(FONT_NORMAL, floorname, 0); - AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, floorname, 56 - strwidth, 16, 0xFF, NULL); - PutWindowTilemap(sElevatorCurrentFloorWindowId); - CopyWindowToVram(sElevatorCurrentFloorWindowId, COPYWIN_FULL); - } + + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) + return; + + sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate); + LoadStdWindowGfx(sElevatorCurrentFloorWindowId, 0x21D, 0xD0); + DrawStdFrameWithCustomTileAndPalette(sElevatorCurrentFloorWindowId, FALSE, 0x21D, 0xD); + AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, gText_NowOn, 0, 2, 0xFF, NULL); + floorname = sFloorNamePointers[gSpecialVar_0x8005]; + strwidth = GetStringWidth(FONT_NORMAL, floorname, 0); + AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, floorname, 56 - strwidth, 16, 0xFF, NULL); + PutWindowTilemap(sElevatorCurrentFloorWindowId); + CopyWindowToVram(sElevatorCurrentFloorWindowId, COPYWIN_FULL); } void CloseElevatorCurrentFloorWindow(void) @@ -1164,91 +1165,92 @@ void ListMenu(void) { u8 taskId; struct Task *task; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) + + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) + return; + + taskId = CreateTask(Task_CreateScriptListMenu, 8); + task = &gTasks[taskId]; + switch (gSpecialVar_0x8004) { - taskId = CreateTask(Task_CreateScriptListMenu, 8); - task = &gTasks[taskId]; - switch (gSpecialVar_0x8004) - { - case LISTMENU_BADGES: - task->data[0] = 4; - task->data[1] = 9; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 12; - task->data[5] = 7; - task->data[6] = 1; - task->data[15] = taskId; - break; - case LISTMENU_SILPHCO_FLOORS: - task->data[0] = 7; - task->data[1] = 12; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 8; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; - task->data[7] = sElevatorScroll; - task->data[8] = sElevatorCursorPos; - break; - case LISTMENU_ROCKET_HIDEOUT_FLOORS: // Multichoice used instead - task->data[0] = 4; - task->data[1] = 4; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 8; - task->data[5] = 8; - task->data[6] = 0; - task->data[15] = taskId; - break; - case LISTMENU_DEPT_STORE_FLOORS: // Multichoice used instead - task->data[0] = 4; - task->data[1] = 6; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 8; - task->data[5] = 8; - task->data[6] = 0; - task->data[15] = taskId; - break; - case LISTMENU_WIRELESS_LECTURE_HEADERS: // Multichoice used instead - task->data[0] = 4; - task->data[1] = 4; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 17; - task->data[5] = 8; - task->data[6] = 1; - task->data[15] = taskId; - break; - case LISTMENU_BERRY_POWDER: - task->data[0] = 7; - task->data[1] = 12; - task->data[2] = 16; - task->data[3] = 1; - task->data[4] = 17; - task->data[5] = 12; - task->data[6] = 0; - task->data[15] = taskId; - break; - case LISTMENU_TRAINER_TOWER_FLOORS: // Mulitchoice used instead - task->data[0] = 3; - task->data[1] = 3; - task->data[2] = 1; - task->data[3] = 1; - task->data[4] = 8; - task->data[5] = 6; - task->data[6] = 0; - task->data[15] = taskId; - break; - case 99: - break; - default: - gSpecialVar_Result = 0x7F; - DestroyTask(taskId); - break; - } + case LISTMENU_BADGES: + task->data[0] = 4; + task->data[1] = 9; + task->data[2] = 1; + task->data[3] = 1; + task->data[4] = 12; + task->data[5] = 7; + task->data[6] = 1; + task->data[15] = taskId; + break; + case LISTMENU_SILPHCO_FLOORS: + task->data[0] = 7; + task->data[1] = 12; + task->data[2] = 1; + task->data[3] = 1; + task->data[4] = 8; + task->data[5] = 12; + task->data[6] = 0; + task->data[15] = taskId; + task->data[7] = sElevatorScroll; + task->data[8] = sElevatorCursorPos; + break; + case LISTMENU_ROCKET_HIDEOUT_FLOORS: // Multichoice used instead + task->data[0] = 4; + task->data[1] = 4; + task->data[2] = 1; + task->data[3] = 1; + task->data[4] = 8; + task->data[5] = 8; + task->data[6] = 0; + task->data[15] = taskId; + break; + case LISTMENU_DEPT_STORE_FLOORS: // Multichoice used instead + task->data[0] = 4; + task->data[1] = 6; + task->data[2] = 1; + task->data[3] = 1; + task->data[4] = 8; + task->data[5] = 8; + task->data[6] = 0; + task->data[15] = taskId; + break; + case LISTMENU_WIRELESS_LECTURE_HEADERS: // Multichoice used instead + task->data[0] = 4; + task->data[1] = 4; + task->data[2] = 1; + task->data[3] = 1; + task->data[4] = 17; + task->data[5] = 8; + task->data[6] = 1; + task->data[15] = taskId; + break; + case LISTMENU_BERRY_POWDER: + task->data[0] = 7; + task->data[1] = 12; + task->data[2] = 16; + task->data[3] = 1; + task->data[4] = 17; + task->data[5] = 12; + task->data[6] = 0; + task->data[15] = taskId; + break; + case LISTMENU_TRAINER_TOWER_FLOORS: // Mulitchoice used instead + task->data[0] = 3; + task->data[1] = 3; + task->data[2] = 1; + task->data[3] = 1; + task->data[4] = 8; + task->data[5] = 6; + task->data[6] = 0; + task->data[15] = taskId; + break; + case 99: + break; + default: + gSpecialVar_Result = 0x7F; + DestroyTask(taskId); + break; } } diff --git a/src/overworld.c b/src/overworld.c index 8dd9569ff..214ca92c8 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -819,7 +819,7 @@ static void QL_LoadMapNormal(void) ChooseAmbientCrySpecies(); SetDefaultFlashLevel(); sub_8110920(); - sub_8111708(); + QL_RestoreMapLayoutId(); LoadSaveblockMapHeader(); InitMap(); } diff --git a/src/quest_log.c b/src/quest_log.c index 8b0543a25..adf4bda49 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -69,11 +69,17 @@ enum { // sQuestLogActionRecordBuffer should be large enough to fill a scene's script with the maximum number of actions #define SCRIPT_BUFFER_SIZE (sizeof(gSaveBlock1Ptr->questLog[0].script) / sizeof(struct QuestLogAction)) +enum { + END_MODE_NONE, + END_MODE_FINISH, + END_MODE_SCENE, +}; + struct PlaybackControl { u8 state:4; u8 playingEvent:2; - u8 sceneEndMode:2; + u8 endMode:2; u8 cursor; u8 timer; u8 overlapTimer; @@ -118,8 +124,8 @@ static void QLogCB_Playback(void); static void SetPlayerInitialCoordsAtScene(u8); static void SetNPCInitialCoordsAtScene(u8); static void RecordSceneEnd(void); -static void BackUpTrainerRematchesToVars(void); -static void BackUpMapLayoutToVar(void); +static void BackUpTrainerRematches(void); +static void BackUpMapLayout(void); static void SetGameStateAtScene(u8); static u8 TryRecordActionSequence(struct QuestLogAction *); static void Task_BeginQuestLogPlayback(u8); @@ -128,19 +134,19 @@ static void QLPlayback_InitOverworldState(void); static void SetPokemonCounts(void); static u16 QuestLog_GetPartyCount(void); static u16 QuestLog_GetBoxMonCount(void); -static void sub_8111688(void); +static void RestoreTrainerRematches(void); static void ReadQuestLogScriptFromSav1(u8, struct QuestLogAction *); -static void QuestLog_BeginFadeAtEndOfScene(s8 delay); +static void DoSceneEndTransition(s8 delay); +static void DoSkipToEndTransition(s8 delay); static void QuestLog_AdvancePlayhead(void); static void QuestLog_StartFinalScene(void); -static void Task_RunPlaybackCB(u8); +static void Task_AvoidDisplay(u8); static void QuestLog_PlayCurrentEvent(void); static void HandleShowQuestLogMessage(void); static u8 GetQuestLogTextDisplayDuration(void); static void DrawSceneDescription(void); static void CopyDescriptionWindowTiles(u8); static void QuestLog_CloseTextWindow(void); -static void QuestLog_SkipToEndOfPlayback(s8 delay); static void QuestLog_WaitFadeAndCancelPlayback(void); static bool8 FieldCB2_FinalScene(void); static void Task_FinalScene_WaitFade(u8); @@ -205,7 +211,7 @@ void SetQuestLogRecordAndPlaybackPointers(void *oldPointer) if (gQuestLogState == QL_STATE_PLAYBACK) { int r3; - for (r3 = 0; r3 < (int)NELEMS(gUnknown_203AE0C); r3++) + for (r3 = 0; r3 < (int)ARRAY_COUNT(gUnknown_203AE0C); r3++) if (gUnknown_203AE0C[r3]) gUnknown_203AE0C[r3] = (void *)gUnknown_203AE0C[r3] + offset; } @@ -287,18 +293,18 @@ static void QLogCB_Playback(void) if (sPlaybackControl.state == 2) sPlaybackControl.state = 0; - if (sPlaybackControl.sceneEndMode == 0) + if (sPlaybackControl.endMode == END_MODE_NONE) { if (gQuestLogPlaybackState != QL_PLAYBACK_STATE_0 || sPlaybackControl.state == 1 - || (sPlaybackControl.cursor < NELEMS(gUnknown_203AE0C) + || (sPlaybackControl.cursor < ARRAY_COUNT(gUnknown_203AE0C) && gUnknown_203AE0C[sPlaybackControl.cursor] != NULL)) QuestLog_PlayCurrentEvent(); else { - sPlaybackControl.sceneEndMode = 2; + sPlaybackControl.endMode = END_MODE_SCENE; LockPlayerFieldControls(); - QuestLog_BeginFadeAtEndOfScene(0); + DoSceneEndTransition(0); } } } @@ -328,8 +334,8 @@ void StartRecordingQuestLogAction(u16 eventId) SetPokemonCounts(); SetPlayerInitialCoordsAtScene(sCurrentSceneNum); SetNPCInitialCoordsAtScene(sCurrentSceneNum); - BackUpTrainerRematchesToVars(); - BackUpMapLayoutToVar(); + BackUpTrainerRematches(); + BackUpMapLayout(); SetGameStateAtScene(sCurrentSceneNum); gUnknown_203ADFC = 0; SetUpQuestLogAction(2, sQuestLogActionRecordBuffer, sizeof(sQuestLogActionRecordBuffer)); @@ -389,26 +395,32 @@ static void SetGameStateAtScene(u8 sceneNum) CpuCopy16(gSaveBlock1Ptr->vars, questLog->vars, sizeof(gSaveBlock1Ptr->vars)); } -static void BackUpTrainerRematchesToVars(void) +static void BackUpTrainerRematches(void) { u16 i, j; - u16 sp0[4]; + u16 vars[4]; - for (i = 0; i < 4; i++) + // Save the contents of gSaveBlock1Ptr->trainerRematches to the 4 saveblock + // vars starting at VAR_QLBAK_TRAINER_REMATCHES. The rematch array is 100 bytes + // long, but each byte is only ever 0 or 1 to indicate that a rematch is available. + // They're compressed into single bits across 4 u16 save vars, which is only enough + // to save 64 elements of gSaveBlock1Ptr->trainerRematches. 64 however is the maximum + // that could ever be used, as its the maximum number of NPCs per map (OBJECT_EVENT_TEMPLATES_COUNT). + for (i = 0; i < ARRAY_COUNT(vars); i++) { - sp0[i] = 0; + vars[i] = 0; + + // 16 bits per var for (j = 0; j < 16; j++) { if (gSaveBlock1Ptr->trainerRematches[16 * i + j]) - { - sp0[i] += (1 << j); - } + vars[i] += (1 << j); } - VarSet(VAR_QLBAK_TRAINER_REMATCHES + i, sp0[i]); + VarSet(VAR_QLBAK_TRAINER_REMATCHES + i, vars[i]); } } -static void BackUpMapLayoutToVar(void) +static void BackUpMapLayout(void) { VarSet(VAR_QLBAK_MAP_LAYOUT, gSaveBlock1Ptr->mapLayoutId); } @@ -623,7 +635,7 @@ void sub_81113E4(void) CpuCopy16(questLog->flags, gSaveBlock1Ptr->flags, sizeof(gSaveBlock1Ptr->flags)); CpuCopy16(questLog->vars, gSaveBlock1Ptr->vars, sizeof(gSaveBlock1Ptr->vars)); - sub_8111688(); + RestoreTrainerRematches(); } struct PokemonAndSomethingElse @@ -735,35 +747,36 @@ static u16 QuestLog_GetBoxMonCount(void) return count; } -static void sub_8111688(void) +// Inverse of BackUpTrainerRematches +static void RestoreTrainerRematches(void) { u16 i, j; - u16 sp0[4]; + u16 vars[4]; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(vars); i++) { - sp0[i] = VarGet(VAR_QLBAK_TRAINER_REMATCHES + i); + vars[i] = VarGet(VAR_QLBAK_TRAINER_REMATCHES + i); + // 16 bits per var for (j = 0; j < 16; j++) { - if (sp0[i] & 1) + if (vars[i] & 1) gSaveBlock1Ptr->trainerRematches[16 * i + j] = 30; else gSaveBlock1Ptr->trainerRematches[16 * i + j] = 0; - sp0[i] >>= 1; + vars[i] >>= 1; } } } -void sub_8111708(void) +// Inverse of BackUpMapLayout +void QL_RestoreMapLayoutId(void) { - struct MapHeader sp0; - gSaveBlock1Ptr->mapLayoutId = VarGet(VAR_QLBAK_MAP_LAYOUT); if (gSaveBlock1Ptr->mapLayoutId == 0) { - sp0 = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); - gSaveBlock1Ptr->mapLayoutId = sp0.mapLayoutId; + struct MapHeader header = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); + gSaveBlock1Ptr->mapLayoutId = header.mapLayoutId; } } @@ -775,7 +788,7 @@ static void ReadQuestLogScriptFromSav1(u8 sceneNum, struct QuestLogAction * a1) u16 r9 = 0; memset(a1, 0, 32 * sizeof(struct QuestLogAction)); - for (i = 0; i < NELEMS(gUnknown_203AE0C); i++) + for (i = 0; i < ARRAY_COUNT(gUnknown_203AE0C); i++) { gUnknown_203AE0C[i] = NULL; } @@ -814,7 +827,7 @@ static void ReadQuestLogScriptFromSav1(u8 sceneNum, struct QuestLogAction * a1) } } -static void QuestLog_BeginFadeAtEndOfScene(s8 delay) +static void DoSceneEndTransition(s8 delay) { FadeScreen(FADE_TO_BLACK, delay); sQuestLogCB = QuestLog_AdvancePlayhead; @@ -822,19 +835,19 @@ static void QuestLog_BeginFadeAtEndOfScene(s8 delay) static void QuestLog_AdvancePlayhead(void) { - if (!gPaletteFade.active) + if (gPaletteFade.active) + return; + + LockPlayerFieldControls(); + if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType != 0) { - LockPlayerFieldControls(); - if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType != 0) - { - sNumScenes--; - QLPlayback_InitOverworldState(); - } - else - { - gQuestLogPlaybackState = QL_PLAYBACK_STATE_0; - QuestLog_StartFinalScene(); - } + sNumScenes--; + QLPlayback_InitOverworldState(); + } + else + { + gQuestLogPlaybackState = QL_PLAYBACK_STATE_0; + QuestLog_StartFinalScene(); } } @@ -855,48 +868,62 @@ void QuestLog_AdvancePlayhead_(void) QuestLog_AdvancePlayhead(); } -bool8 QuestLog_SchedulePlaybackCB(void (*callback)(void)) +#define tTimer data[0] +#define tState data[1] +#define DATA_IDX_CALLBACK 14 // data[14] and data[15] + +// This is used to avoid recording or displaying certain windows or images, like a shop menu. +// During playback it returns TRUE (meaning the action should be avoided) and calls the +// provided callback, which would be used to e.g. destroy any resources that were set up to do +// whatever is being avoided. In all cases the provided callback will be QL_DestroyAbortedDisplay. +// If we are not currently in playback return FALSE (meaning allow the action to occur) and +// stop recording (if we are currently). +bool8 QL_AvoidDisplay(void (*callback)(void)) { u8 taskId; switch (gQuestLogState) { - case QL_STATE_RECORDING: - QuestLog_CutRecording(); - break; - case QL_STATE_PLAYBACK: - gQuestLogPlaybackState = QL_PLAYBACK_STATE_3; - taskId = CreateTask(Task_RunPlaybackCB, 80); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - SetWordTaskArg(taskId, 14, (uintptr_t)callback); - return TRUE; + case QL_STATE_RECORDING: + QuestLog_CutRecording(); + break; + case QL_STATE_PLAYBACK: + gQuestLogPlaybackState = QL_PLAYBACK_STATE_3; + taskId = CreateTask(Task_AvoidDisplay, 80); + gTasks[taskId].tTimer = 0; + gTasks[taskId].tState = 0; + SetWordTaskArg(taskId, DATA_IDX_CALLBACK, (uintptr_t)callback); + return TRUE; } return FALSE; } -static void Task_RunPlaybackCB(u8 taskId) +static void Task_AvoidDisplay(u8 taskId) { void (*routine)(void); s16 *data = gTasks[taskId].data; - switch (data[1]) + switch (tState) { case 0: - if (++data[0] == 0x7F) + // Instead of displaying anything, wait and then end the scene. + if (++tTimer == 127) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, 0); - sPlaybackControl.sceneEndMode = 2; - data[1]++; + sPlaybackControl.endMode = END_MODE_SCENE; + tState++; } break; case 1: if (!gPaletteFade.active) { gQuestLogPlaybackState = QL_PLAYBACK_STATE_0; - routine = (void (*)(void)) GetWordTaskArg(taskId, 14); + + // Call the provided function (if any). In practice this is always QL_DestroyAbortedDisplay + routine = (void (*)(void)) GetWordTaskArg(taskId, DATA_IDX_CALLBACK); if (routine != NULL) routine(); + DestroyTask(taskId); sQuestLogCB = QuestLog_AdvancePlayhead; } @@ -904,6 +931,9 @@ static void Task_RunPlaybackCB(u8 taskId) } } +#undef tTimer +#undef tState + static void QuestLog_PlayCurrentEvent(void) { if (sPlaybackControl.state == 1) @@ -924,7 +954,7 @@ static void QuestLog_PlayCurrentEvent(void) sPlaybackControl.overlapTimer = 0; } } - if (sPlaybackControl.cursor < NELEMS(gUnknown_203AE0C)) + if (sPlaybackControl.cursor < ARRAY_COUNT(gUnknown_203AE0C)) { if (sub_8113B44(gUnknown_203AE0C[sPlaybackControl.cursor]) == 1) HandleShowQuestLogMessage(); @@ -981,26 +1011,29 @@ bool8 sub_8111C2C(void) void HandleQuestLogInput(void) { - if (sPlaybackControl.sceneEndMode != 0) + // Ignore input if we're currently ending a scene/playback + if (sPlaybackControl.endMode != END_MODE_NONE) return; if (JOY_NEW(A_BUTTON)) { - sPlaybackControl.sceneEndMode = 2; + // Pressed A, skip to next scene + sPlaybackControl.endMode = END_MODE_SCENE; gQuestLogPlaybackState = QL_PLAYBACK_STATE_0; - QuestLog_BeginFadeAtEndOfScene(-3); + DoSceneEndTransition(-3); } else if (JOY_NEW(B_BUTTON)) { - sPlaybackControl.sceneEndMode = 1; + // Pressed B, end playback + sPlaybackControl.endMode = END_MODE_FINISH; gQuestLogPlaybackState = QL_PLAYBACK_STATE_0; - QuestLog_SkipToEndOfPlayback(-3); + DoSkipToEndTransition(-3); } } bool8 QuestLogScenePlaybackIsEnding(void) { - if (sPlaybackControl.sceneEndMode != 0) + if (sPlaybackControl.endMode != END_MODE_NONE) return TRUE; return FALSE; } @@ -1072,7 +1105,7 @@ static void QuestLog_CloseTextWindow(void) CopyWindowToVram(sWindowIds[WIN_BOTTOM_BAR], COPYWIN_MAP); } -static void QuestLog_SkipToEndOfPlayback(s8 delay) +static void DoSkipToEndTransition(s8 delay) { FadeScreen(FADE_TO_BLACK, delay); sQuestLogCB = QuestLog_WaitFadeAndCancelPlayback; @@ -1134,7 +1167,7 @@ static void Task_QuestLogScene_SavedGame(u8 taskId) if (!gPaletteFade.active) { - if (sPlaybackControl.sceneEndMode != 1) + if (sPlaybackControl.endMode != END_MODE_FINISH) { GetMapNameGeneric(gStringVar1, gMapHeader.regionMapSectionId); StringExpandPlaceholders(gStringVar4, gText_QuestLog_SavedGameAtLocation); @@ -1154,7 +1187,7 @@ static void Task_WaitAtEndOfQuestLog(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (JOY_NEW(A_BUTTON | B_BUTTON) || task->tTimer >= 127 || sPlaybackControl.sceneEndMode == 1) + if (JOY_NEW(A_BUTTON | B_BUTTON) || task->tTimer >= 127 || sPlaybackControl.endMode == END_MODE_FINISH) { QuestLog_CloseTextWindow(); task->tTimer = 0; @@ -1207,7 +1240,7 @@ static void Task_EndQuestLog(u8 taskId) tState++; break; default: - if (sPlaybackControl.sceneEndMode == 1) + if (sPlaybackControl.endMode == END_MODE_FINISH) ShowMapNamePopup(TRUE); CpuCopy16(sPalettesBackup, gPlttBufferUnfaded, PLTT_SIZE); Free(sPalettesBackup); @@ -1618,6 +1651,8 @@ void sub_8112B3C(void) gQuestLogPlaybackState = QL_PLAYBACK_STATE_3; break; case QL_ACTION_WAIT: + // Nothing. The wait action uses sNextActionDelay to add a pause to playback. + // When the counter is finished and this is reached there's nothing else that needs to be done. break; case QL_ACTION_SCENE_END: gQuestLogPlaybackState = QL_PLAYBACK_STATE_0; diff --git a/src/scrcmd.c b/src/scrcmd.c index 12d0a9588..5d68549f1 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1818,7 +1818,7 @@ bool8 ScrCmd_showmoneybox(struct ScriptContext * ctx) u8 y = ScriptReadByte(ctx); u8 ignore = ScriptReadByte(ctx); - if (!ignore && QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) + if (!ignore && QL_AvoidDisplay(QL_DestroyAbortedDisplay) != TRUE) DrawMoneyBox(GetMoney(&gSaveBlock1Ptr->money), x, y); return FALSE; } @@ -1848,7 +1848,7 @@ bool8 ScrCmd_showcoinsbox(struct ScriptContext * ctx) u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) != TRUE) ShowCoinsWindow(GetCoins(), x, y); return FALSE; } diff --git a/src/script_menu.c b/src/script_menu.c index 49f5402b5..483ac88b2 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -711,7 +711,7 @@ static void DrawVerticalMultichoiceMenu(u8 left, u8 top, u8 mcId, u8 ignoreBpres u8 windowId; const struct MenuAction * list; - if ((ignoreBpress & 2) || QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) + if ((ignoreBpress & 2) || QL_AvoidDisplay(QL_DestroyAbortedDisplay) != TRUE) { ignoreBpress &= 1; count = gScriptMultiChoiceMenus[mcId].count; @@ -729,7 +729,7 @@ static void DrawVerticalMultichoiceMenu(u8 left, u8 top, u8 mcId, u8 ignoreBpres height = GetMCWindowHeight(count); windowId = CreateWindowFromRect(left, top, width, height); SetStdWindowBorderStyle(windowId, FALSE); - if (mcId == 30 || mcId == 13 || mcId == 41) + if (mcId == MULTICHOICE_GAME_CORNER_TMPRIZES || mcId == MULTICHOICE_BIKE_SHOP || mcId == MULTICHOICE_GAME_CORNER_BATTLE_ITEM_PRIZES) MultichoiceList_PrintItems(windowId, FONT_NORMAL, 8, 2, 14, count, list, 0, 2); else MultichoiceList_PrintItems(windowId, FONT_NORMAL, 8, 2, 14, count, list, 0, 2); @@ -769,7 +769,7 @@ static u8 GetMCWindowHeight(u8 count) static void CreateMCMenuInputHandlerTask(u8 ignoreBpress, u8 count, u8 windowId, u8 mcId) { u8 taskId; - if (mcId == 39 || mcId == 47 || mcId == 50) + if (mcId == MULTICHOICE_TRADE_CENTER_COLOSSEUM || mcId == MULTICHOICE_TRADE_COLOSSEUM_CRUSH || mcId == MULTICHOICE_TRADE_COLOSSEUM_2) sDelay = 12; else sDelay = 0; @@ -845,11 +845,12 @@ bool8 ScriptMenu_YesNo(u8 unused, u8 stuff) if (FuncIsActiveTask(Task_YesNoMenu_HandleInput) == TRUE) return FALSE; gSpecialVar_Result = SCR_MENU_UNSET; - if (!QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites)) - { - DisplayYesNoMenuDefaultYes(); - CreateTask(Task_YesNoMenu_HandleInput, 80); - } + + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay)) + return TRUE; + + DisplayYesNoMenuDefaultYes(); + CreateTask(Task_YesNoMenu_HandleInput, 80); return TRUE; } @@ -900,20 +901,22 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 co if (FuncIsActiveTask(Hask_MultichoiceGridMenu_HandleInput) == TRUE) return FALSE; gSpecialVar_Result = SCR_MENU_UNSET; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) - { - list = gScriptMultiChoiceMenus[multichoiceId].list; - count = gScriptMultiChoiceMenus[multichoiceId].count; - width = GetMenuWidthFromList(list, count) + 1; - rowCount = count / columnCount; - taskId = CreateTask(Hask_MultichoiceGridMenu_HandleInput, 80); - gTasks[taskId].data[4] = a4; - gTasks[taskId].data[6] = CreateWindowFromRect(left, top, width * columnCount, rowCount * 2); - SetStdWindowBorderStyle(gTasks[taskId].data[6], FALSE); - MultichoiceGrid_PrintItems(gTasks[taskId].data[6], FONT_NORMAL_COPY_1, width * 8, 16, columnCount, rowCount, list); - MultichoiceGrid_InitCursor(gTasks[taskId].data[6], FONT_NORMAL_COPY_1, 0, 1, width * 8, columnCount, rowCount, 0); - ScheduleBgCopyTilemapToVram(0); - } + + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) + return TRUE; + + list = gScriptMultiChoiceMenus[multichoiceId].list; + count = gScriptMultiChoiceMenus[multichoiceId].count; + width = GetMenuWidthFromList(list, count) + 1; + rowCount = count / columnCount; + taskId = CreateTask(Hask_MultichoiceGridMenu_HandleInput, 80); + gTasks[taskId].data[4] = a4; + gTasks[taskId].data[6] = CreateWindowFromRect(left, top, width * columnCount, rowCount * 2); + SetStdWindowBorderStyle(gTasks[taskId].data[6], FALSE); + MultichoiceGrid_PrintItems(gTasks[taskId].data[6], FONT_NORMAL_COPY_1, width * 8, 16, columnCount, rowCount, list); + MultichoiceGrid_InitCursor(gTasks[taskId].data[6], FONT_NORMAL_COPY_1, 0, 1, width * 8, columnCount, rowCount, 0); + ScheduleBgCopyTilemapToVram(0); + return TRUE; } @@ -1032,7 +1035,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y) { u8 spriteId; u8 taskId; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) == TRUE) + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) return TRUE; if (FindTaskIdByFunc(Task_ScriptShowMonPic) != 0xFF) return FALSE; @@ -1116,7 +1119,7 @@ bool8 OpenMuseumFossilPic(void) { u8 spriteId; u8 taskId; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) == TRUE) + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) return TRUE; if (FindTaskIdByFunc(Task_WaitMuseumFossilPic) != 0xFF) return FALSE; @@ -1169,7 +1172,7 @@ static void DestroyScriptMenuWindow(u8 windowId) RemoveWindow(windowId); } -void QLPlaybackCB_DestroyScriptMenuMonPicSprites(void) +void QL_DestroyAbortedDisplay(void) { u8 taskId; s16 *data; @@ -1205,44 +1208,45 @@ void DrawSeagallopDestinationMenu(void) u8 windowId; u8 i; gSpecialVar_Result = SCR_MENU_UNSET; - if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE) + + if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE) + return; + + if (gSpecialVar_0x8005 == 1) { - if (gSpecialVar_0x8005 == 1) - { - if (gSpecialVar_0x8004 < SEAGALLOP_FIVE_ISLAND) - r4 = SEAGALLOP_FIVE_ISLAND; - else - r4 = SEAGALLOP_FOUR_ISLAND; - nitems = 5; - top = 2; - } + if (gSpecialVar_0x8004 < SEAGALLOP_FIVE_ISLAND) + r4 = SEAGALLOP_FIVE_ISLAND; else - { - r4 = SEAGALLOP_VERMILION_CITY; - nitems = 6; - top = 0; - } - cursorWidth = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); - fontHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); - windowId = CreateWindowFromRect(17, top, 11, nitems * 2); - SetStdWindowBorderStyle(windowId, FALSE); - for (i = 0; i < nitems - 2; i++) - { - if (r4 != gSpecialVar_0x8004) - AddTextPrinterParameterized(windowId, FONT_NORMAL, sSeagallopDestStrings[r4], cursorWidth, i * 16 + 2, 0xFF, NULL); - else - i--; - r4++; - if (r4 == SEAGALLOP_CINNABAR_ISLAND) - r4 = SEAGALLOP_VERMILION_CITY; - } - AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Other, cursorWidth, i * 16 + 2, 0xFF, NULL); - i++; - AddTextPrinterParameterized(windowId, FONT_NORMAL, gOtherText_Exit, cursorWidth, i * 16 + 2, 0xFF, NULL); - Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, nitems, 0); - CreateMCMenuInputHandlerTask(FALSE, nitems, windowId, 0xFF); - ScheduleBgCopyTilemapToVram(0); + r4 = SEAGALLOP_FOUR_ISLAND; + nitems = 5; + top = 2; } + else + { + r4 = SEAGALLOP_VERMILION_CITY; + nitems = 6; + top = 0; + } + cursorWidth = GetMenuCursorDimensionByFont(FONT_NORMAL, 0); + fontHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT); + windowId = CreateWindowFromRect(17, top, 11, nitems * 2); + SetStdWindowBorderStyle(windowId, FALSE); + for (i = 0; i < nitems - 2; i++) + { + if (r4 != gSpecialVar_0x8004) + AddTextPrinterParameterized(windowId, FONT_NORMAL, sSeagallopDestStrings[r4], cursorWidth, i * 16 + 2, 0xFF, NULL); + else + i--; + r4++; + if (r4 == SEAGALLOP_CINNABAR_ISLAND) + r4 = SEAGALLOP_VERMILION_CITY; + } + AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Other, cursorWidth, i * 16 + 2, 0xFF, NULL); + i++; + AddTextPrinterParameterized(windowId, FONT_NORMAL, gOtherText_Exit, cursorWidth, i * 16 + 2, 0xFF, NULL); + Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, nitems, 0); + CreateMCMenuInputHandlerTask(FALSE, nitems, windowId, 0xFF); + ScheduleBgCopyTilemapToVram(0); } u16 GetSelectedSeagallopDestination(void) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index be6b11baa..91136a51f 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -26,6 +26,13 @@ #include "constants/quest_log.h" #include "constants/trainer_types.h" +// Each trainer can have up to 6 parties, including their original party. +// Each rematch is unavailable until the player has progressed to a certain point in the story (see TryGetRematchTrainerIdGivenGameState). +// A list of the trainer ids for each party is in sRematches. If a party doesn't update for a progression point it will have SKIP instead, +// and that trainer id will be ignored. +#define MAX_REMATCH_PARTIES 6 +#define SKIP 0xFFFF + enum { VSSEEKER_NOT_CHARGED, @@ -47,13 +54,12 @@ typedef enum VSSEEKER_RESPONSE_FOUND_REMATCHES } VsSeekerResponseCode; -// static types -typedef struct VsSeekerData +struct RematchData { - u16 trainerIdxs[6]; + u16 trainerIdxs[MAX_REMATCH_PARTIES]; u16 mapGroup; // unused u16 mapNum; // unused -} VsSeekerData; +}; struct VsSeekerTrainerInfo { @@ -91,19 +97,19 @@ static void Task_VsSeeker_2(u8 taskId); static void GatherNearbyTrainerInfo(void); static void Task_VsSeeker_3(u8 taskId); static bool8 CanUseVsSeeker(void); -static u8 GetVsSeekerResponseInArea(const VsSeekerData * vsSeekerData); +static u8 GetVsSeekerResponseInArea(const struct RematchData * vsSeekerData); static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchIdx); -static u8 ShouldTryRematchBattleInternal(const VsSeekerData * vsSeekerData, u16 trainerBattleOpponent); -static u8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData * vsSeekerData, u16 trainerBattleOpponent); -static int LookupVsSeekerOpponentInArray(const VsSeekerData * array, u16 trainerId); -static bool8 IsTrainerReadyForRematchInternal(const VsSeekerData * array, u16 trainerIdx); +static u8 ShouldTryRematchBattleInternal(const struct RematchData * vsSeekerData, u16 trainerBattleOpponent); +static u8 HasRematchTrainerAlreadyBeenFought(const struct RematchData * vsSeekerData, u16 trainerBattleOpponent); +static int LookupVsSeekerOpponentInArray(const struct RematchData * array, u16 trainerId); +static bool8 IsTrainerReadyForRematchInternal(const struct RematchData * array, u16 trainerIdx); static u8 GetRunningBehaviorFromGraphicsId(u8 graphicsId); static u16 GetTrainerFlagFromScript(const u8 * script); -static int GetRematchIdx(const VsSeekerData * vsSeekerData, u16 trainerFlagIdx); +static int GetRematchIdx(const struct RematchData * vsSeekerData, u16 trainerFlagIdx); static bool32 IsThisTrainerRematchable(u32 localId); static void ClearAllTrainerRematchStates(void); static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo); -static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr); +static u8 GetNextAvailableRematchTrainer(const struct RematchData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr); static u8 GetRematchableTrainerLocalId(void); static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo * trainerInfo, const u8 * script); static u8 GetCurVsSeekerResponse(s32 vsSeekerIdx, u16 trainerIdx); @@ -111,450 +117,447 @@ static void StartAllRespondantIdleMovements(void); static bool8 ObjectEventIdIsSane(u8 objectEventId); static u8 GetRandomFaceDirectionMovementType(); -// rodata -static const VsSeekerData sVsSeekerData[] = { - { {TRAINER_YOUNGSTER_BEN, TRAINER_YOUNGSTER_BEN_2, 0xFFFF, TRAINER_YOUNGSTER_BEN_3, TRAINER_YOUNGSTER_BEN_4}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, - { {TRAINER_YOUNGSTER_CALVIN, TRAINER_YOUNGSTER_CALVIN}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, - { {TRAINER_BUG_CATCHER_COLTON, TRAINER_BUG_CATCHER_COLTON_2, 0xFFFF, TRAINER_BUG_CATCHER_COLTON_3, 0xFFFF, TRAINER_BUG_CATCHER_COLTON_4}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, +static const struct RematchData sRematches[] = { + { {TRAINER_YOUNGSTER_BEN, TRAINER_YOUNGSTER_BEN_2, SKIP, TRAINER_YOUNGSTER_BEN_3, TRAINER_YOUNGSTER_BEN_4}, MAP(ROUTE3) }, + { {TRAINER_YOUNGSTER_CALVIN, TRAINER_YOUNGSTER_CALVIN}, MAP(ROUTE3) }, + { {TRAINER_BUG_CATCHER_COLTON, TRAINER_BUG_CATCHER_COLTON_2, SKIP, TRAINER_BUG_CATCHER_COLTON_3, SKIP, TRAINER_BUG_CATCHER_COLTON_4}, + MAP(ROUTE3) }, { {TRAINER_BUG_CATCHER_GREG, TRAINER_BUG_CATCHER_GREG}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, + MAP(ROUTE3) }, { {TRAINER_BUG_CATCHER_JAMES, TRAINER_BUG_CATCHER_JAMES}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, - { {TRAINER_LASS_JANICE, TRAINER_LASS_JANICE_2, 0xFFFF, TRAINER_LASS_JANICE_3}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, + MAP(ROUTE3) }, + { {TRAINER_LASS_JANICE, TRAINER_LASS_JANICE_2, SKIP, TRAINER_LASS_JANICE_3}, + MAP(ROUTE3) }, { {TRAINER_LASS_SALLY, TRAINER_LASS_SALLY}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, + MAP(ROUTE3) }, { {TRAINER_LASS_ROBIN, TRAINER_LASS_ROBIN}, - MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) }, + MAP(ROUTE3) }, { {TRAINER_LASS_CRISSY, TRAINER_LASS_CRISSY}, - MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4) }, - { {TRAINER_YOUNGSTER_TIMMY, TRAINER_YOUNGSTER_TIMMY_2, 0xFFFF, TRAINER_YOUNGSTER_TIMMY_3, 0xFFFF, TRAINER_YOUNGSTER_TIMMY_4}, - MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) }, + MAP(ROUTE4) }, + { {TRAINER_YOUNGSTER_TIMMY, TRAINER_YOUNGSTER_TIMMY_2, SKIP, TRAINER_YOUNGSTER_TIMMY_3, SKIP, TRAINER_YOUNGSTER_TIMMY_4}, + MAP(ROUTE24) }, { {TRAINER_BUG_CATCHER_CALE, TRAINER_BUG_CATCHER_CALE}, - MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) }, - { {TRAINER_LASS_RELI, TRAINER_LASS_RELI_2, 0xFFFF, TRAINER_LASS_RELI_3}, - MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) }, + MAP(ROUTE24) }, + { {TRAINER_LASS_RELI, TRAINER_LASS_RELI_2, SKIP, TRAINER_LASS_RELI_3}, + MAP(ROUTE24) }, { {TRAINER_LASS_ALI, TRAINER_LASS_ALI}, - MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) }, + MAP(ROUTE24) }, { {TRAINER_CAMPER_SHANE, TRAINER_CAMPER_SHANE}, - MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) }, + MAP(ROUTE24) }, { {TRAINER_CAMPER_ETHAN, TRAINER_CAMPER_ETHAN}, - MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) }, + MAP(ROUTE24) }, { {TRAINER_YOUNGSTER_JOEY, TRAINER_YOUNGSTER_JOEY}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, + MAP(ROUTE25) }, { {TRAINER_YOUNGSTER_DAN, TRAINER_YOUNGSTER_DAN}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, - { {TRAINER_YOUNGSTER_CHAD, TRAINER_YOUNGSTER_CHAD_2, 0xFFFF, TRAINER_YOUNGSTER_CHAD_3, TRAINER_YOUNGSTER_CHAD_4}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, - { {TRAINER_PICNICKER_KELSEY, TRAINER_PICNICKER_KELSEY_2, 0xFFFF, TRAINER_PICNICKER_KELSEY_3, TRAINER_PICNICKER_KELSEY_4}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, + MAP(ROUTE25) }, + { {TRAINER_YOUNGSTER_CHAD, TRAINER_YOUNGSTER_CHAD_2, SKIP, TRAINER_YOUNGSTER_CHAD_3, TRAINER_YOUNGSTER_CHAD_4}, + MAP(ROUTE25) }, + { {TRAINER_PICNICKER_KELSEY, TRAINER_PICNICKER_KELSEY_2, SKIP, TRAINER_PICNICKER_KELSEY_3, TRAINER_PICNICKER_KELSEY_4}, + MAP(ROUTE25) }, { {TRAINER_LASS_HALEY, TRAINER_LASS_HALEY}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, - { {TRAINER_HIKER_FRANKLIN, 0xFFFF, TRAINER_HIKER_FRANKLIN_2}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, + MAP(ROUTE25) }, + { {TRAINER_HIKER_FRANKLIN, SKIP, TRAINER_HIKER_FRANKLIN_2}, + MAP(ROUTE25) }, { {TRAINER_HIKER_NOB, TRAINER_HIKER_NOB}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, + MAP(ROUTE25) }, { {TRAINER_HIKER_WAYNE, TRAINER_HIKER_WAYNE}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, + MAP(ROUTE25) }, { {TRAINER_CAMPER_FLINT, TRAINER_CAMPER_FLINT}, - MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) }, + MAP(ROUTE25) }, { {TRAINER_BUG_CATCHER_KEIGO, TRAINER_BUG_CATCHER_KEIGO}, - MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) }, + MAP(ROUTE6) }, { {TRAINER_BUG_CATCHER_ELIJAH, TRAINER_BUG_CATCHER_ELIJAH}, - MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) }, - { {TRAINER_CAMPER_RICKY, TRAINER_CAMPER_RICKY_2, 0xFFFF, TRAINER_CAMPER_RICKY_3, 0xFFFF, TRAINER_CAMPER_RICKY_4}, - MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) }, - { {TRAINER_CAMPER_JEFF, TRAINER_CAMPER_JEFF_2, 0xFFFF, TRAINER_CAMPER_JEFF_3, 0xFFFF, TRAINER_CAMPER_JEFF_4}, - MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) }, + MAP(ROUTE6) }, + { {TRAINER_CAMPER_RICKY, TRAINER_CAMPER_RICKY_2, SKIP, TRAINER_CAMPER_RICKY_3, SKIP, TRAINER_CAMPER_RICKY_4}, + MAP(ROUTE6) }, + { {TRAINER_CAMPER_JEFF, TRAINER_CAMPER_JEFF_2, SKIP, TRAINER_CAMPER_JEFF_3, SKIP, TRAINER_CAMPER_JEFF_4}, + MAP(ROUTE6) }, { {TRAINER_PICNICKER_NANCY, TRAINER_PICNICKER_NANCY}, - MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) }, - { {TRAINER_PICNICKER_ISABELLE, TRAINER_PICNICKER_ISABELLE_2, 0xFFFF, TRAINER_PICNICKER_ISABELLE_3, TRAINER_PICNICKER_ISABELLE_4}, - MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) }, + MAP(ROUTE6) }, + { {TRAINER_PICNICKER_ISABELLE, TRAINER_PICNICKER_ISABELLE_2, SKIP, TRAINER_PICNICKER_ISABELLE_3, TRAINER_PICNICKER_ISABELLE_4}, + MAP(ROUTE6) }, { {TRAINER_YOUNGSTER_EDDIE, TRAINER_YOUNGSTER_EDDIE}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, { {TRAINER_YOUNGSTER_DILLON, TRAINER_YOUNGSTER_DILLON}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, - { {TRAINER_YOUNGSTER_YASU, 0xFFFF, TRAINER_YOUNGSTER_YASU_2, 0xFFFF, TRAINER_YOUNGSTER_YASU_3}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, + { {TRAINER_YOUNGSTER_YASU, SKIP, TRAINER_YOUNGSTER_YASU_2, SKIP, TRAINER_YOUNGSTER_YASU_3}, + MAP(ROUTE11) }, { {TRAINER_YOUNGSTER_DAVE, TRAINER_YOUNGSTER_DAVE}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, { {TRAINER_ENGINEER_BRAXTON, TRAINER_ENGINEER_BRAXTON}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, - { {TRAINER_ENGINEER_BERNIE, 0xFFFF, 0xFFFF, TRAINER_ENGINEER_BERNIE_2}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, + { {TRAINER_ENGINEER_BERNIE, SKIP, SKIP, TRAINER_ENGINEER_BERNIE_2}, + MAP(ROUTE11) }, { {TRAINER_GAMER_HUGO, TRAINER_GAMER_HUGO}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, { {TRAINER_GAMER_JASPER, TRAINER_GAMER_JASPER}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, { {TRAINER_GAMER_DIRK, TRAINER_GAMER_DIRK}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, - { {TRAINER_GAMER_DARIAN, 0xFFFF, 0xFFFF, TRAINER_GAMER_DARIAN_2}, - MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) }, + MAP(ROUTE11) }, + { {TRAINER_GAMER_DARIAN, SKIP, SKIP, TRAINER_GAMER_DARIAN_2}, + MAP(ROUTE11) }, { {TRAINER_BUG_CATCHER_BRENT, TRAINER_BUG_CATCHER_BRENT}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, + MAP(ROUTE9) }, { {TRAINER_BUG_CATCHER_CONNER, TRAINER_BUG_CATCHER_CONNER}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, - { {TRAINER_CAMPER_CHRIS, 0xFFFF, TRAINER_CAMPER_CHRIS_2, TRAINER_CAMPER_CHRIS_3, 0xFFFF, TRAINER_CAMPER_CHRIS_4}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, + MAP(ROUTE9) }, + { {TRAINER_CAMPER_CHRIS, SKIP, TRAINER_CAMPER_CHRIS_2, TRAINER_CAMPER_CHRIS_3, SKIP, TRAINER_CAMPER_CHRIS_4}, + MAP(ROUTE9) }, { {TRAINER_CAMPER_DREW, TRAINER_CAMPER_DREW}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, - { {TRAINER_PICNICKER_ALICIA, 0xFFFF, TRAINER_PICNICKER_ALICIA_2, TRAINER_PICNICKER_ALICIA_3, 0xFFFF, TRAINER_PICNICKER_ALICIA_4}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, + MAP(ROUTE9) }, + { {TRAINER_PICNICKER_ALICIA, SKIP, TRAINER_PICNICKER_ALICIA_2, TRAINER_PICNICKER_ALICIA_3, SKIP, TRAINER_PICNICKER_ALICIA_4}, + MAP(ROUTE9) }, { {TRAINER_PICNICKER_CAITLIN, TRAINER_PICNICKER_CAITLIN}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, + MAP(ROUTE9) }, { {TRAINER_HIKER_ALAN, TRAINER_HIKER_ALAN}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, + MAP(ROUTE9) }, { {TRAINER_HIKER_BRICE, TRAINER_HIKER_BRICE}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, - { {TRAINER_HIKER_JEREMY, 0xFFFF, 0xFFFF, TRAINER_HIKER_JEREMY_2}, - MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) }, + MAP(ROUTE9) }, + { {TRAINER_HIKER_JEREMY, SKIP, SKIP, TRAINER_HIKER_JEREMY_2}, + MAP(ROUTE9) }, { {TRAINER_PICNICKER_HEIDI, TRAINER_PICNICKER_HEIDI}, - MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) }, + MAP(ROUTE10) }, { {TRAINER_PICNICKER_CAROL, TRAINER_PICNICKER_CAROL}, - MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) }, - { {TRAINER_POKEMANIAC_MARK, 0xFFFF, 0xFFFF, TRAINER_POKEMANIAC_MARK_2, 0xFFFF, TRAINER_POKEMANIAC_MARK_3}, - MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) }, - { {TRAINER_POKEMANIAC_HERMAN, 0xFFFF, 0xFFFF, TRAINER_POKEMANIAC_HERMAN_2, 0xFFFF, TRAINER_POKEMANIAC_HERMAN_3}, - MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) }, + MAP(ROUTE10) }, + { {TRAINER_POKEMANIAC_MARK, SKIP, SKIP, TRAINER_POKEMANIAC_MARK_2, SKIP, TRAINER_POKEMANIAC_MARK_3}, + MAP(ROUTE10) }, + { {TRAINER_POKEMANIAC_HERMAN, SKIP, SKIP, TRAINER_POKEMANIAC_HERMAN_2, SKIP, TRAINER_POKEMANIAC_HERMAN_3}, + MAP(ROUTE10) }, { {TRAINER_HIKER_CLARK, TRAINER_HIKER_CLARK}, - MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) }, - { {TRAINER_HIKER_TRENT, 0xFFFF, 0xFFFF, TRAINER_HIKER_TRENT_2}, - MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) }, + MAP(ROUTE10) }, + { {TRAINER_HIKER_TRENT, SKIP, SKIP, TRAINER_HIKER_TRENT_2}, + MAP(ROUTE10) }, { {TRAINER_LASS_PAIGE, TRAINER_LASS_PAIGE}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, { {TRAINER_LASS_ANDREA, TRAINER_LASS_ANDREA}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, - { {TRAINER_LASS_MEGAN, 0xFFFF, TRAINER_LASS_MEGAN_2, 0xFFFF, TRAINER_LASS_MEGAN_3}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, + { {TRAINER_LASS_MEGAN, SKIP, TRAINER_LASS_MEGAN_2, SKIP, TRAINER_LASS_MEGAN_3}, + MAP(ROUTE8) }, { {TRAINER_LASS_JULIA, TRAINER_LASS_JULIA}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, { {TRAINER_SUPER_NERD_AIDAN, TRAINER_SUPER_NERD_AIDAN}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, - { {TRAINER_SUPER_NERD_GLENN, 0xFFFF, 0xFFFF, TRAINER_SUPER_NERD_GLENN_2}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, + { {TRAINER_SUPER_NERD_GLENN, SKIP, SKIP, TRAINER_SUPER_NERD_GLENN_2}, + MAP(ROUTE8) }, { {TRAINER_SUPER_NERD_LESLIE, TRAINER_SUPER_NERD_LESLIE}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, { {TRAINER_GAMER_STAN, TRAINER_GAMER_STAN}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, - { {TRAINER_GAMER_RICH, 0xFFFF, 0xFFFF, TRAINER_GAMER_RICH_2}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, - { {TRAINER_TWINS_ELI_ANNE, 0xFFFF, 0xFFFF, TRAINER_TWINS_ELI_ANNE_2}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, + { {TRAINER_GAMER_RICH, SKIP, SKIP, TRAINER_GAMER_RICH_2}, + MAP(ROUTE8) }, + { {TRAINER_TWINS_ELI_ANNE, SKIP, SKIP, TRAINER_TWINS_ELI_ANNE_2}, + MAP(ROUTE8) }, { {TRAINER_BIKER_RICARDO, TRAINER_BIKER_RICARDO}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, - { {TRAINER_BIKER_JAREN, 0xFFFF, 0xFFFF, TRAINER_BIKER_JAREN_2}, - MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) }, + MAP(ROUTE8) }, + { {TRAINER_BIKER_JAREN, SKIP, SKIP, TRAINER_BIKER_JAREN_2}, + MAP(ROUTE8) }, { {TRAINER_FISHERMAN_NED, TRAINER_FISHERMAN_NED}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, + MAP(ROUTE12) }, { {TRAINER_FISHERMAN_CHIP, TRAINER_FISHERMAN_CHIP}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, + MAP(ROUTE12) }, { {TRAINER_FISHERMAN_HANK, TRAINER_FISHERMAN_HANK}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, - { {TRAINER_FISHERMAN_ELLIOT, 0xFFFF, 0xFFFF, TRAINER_FISHERMAN_ELLIOT_2}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, + MAP(ROUTE12) }, + { {TRAINER_FISHERMAN_ELLIOT, SKIP, SKIP, TRAINER_FISHERMAN_ELLIOT_2}, + MAP(ROUTE12) }, { {TRAINER_FISHERMAN_ANDREW, TRAINER_FISHERMAN_ANDREW}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, - { {TRAINER_ROCKER_LUCA, 0xFFFF, 0xFFFF, TRAINER_ROCKER_LUCA_2}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, + MAP(ROUTE12) }, + { {TRAINER_ROCKER_LUCA, SKIP, SKIP, TRAINER_ROCKER_LUCA_2}, + MAP(ROUTE12) }, { {TRAINER_CAMPER_JUSTIN, TRAINER_CAMPER_JUSTIN}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, - { {TRAINER_YOUNG_COUPLE_GIA_JES, 0xFFFF, 0xFFFF, TRAINER_YOUNG_COUPLE_GIA_JES_2, 0xFFFF, TRAINER_YOUNG_COUPLE_GIA_JES_3}, - MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) }, + MAP(ROUTE12) }, + { {TRAINER_YOUNG_COUPLE_GIA_JES, SKIP, SKIP, TRAINER_YOUNG_COUPLE_GIA_JES_2, SKIP, TRAINER_YOUNG_COUPLE_GIA_JES_3}, + MAP(ROUTE12) }, { {TRAINER_BIKER_JARED, TRAINER_BIKER_JARED}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, { {TRAINER_BEAUTY_LOLA, TRAINER_BEAUTY_LOLA}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, - { {TRAINER_BEAUTY_SHEILA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BEAUTY_SHEILA_2}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, + { {TRAINER_BEAUTY_SHEILA, SKIP, SKIP, SKIP, TRAINER_BEAUTY_SHEILA_2}, + MAP(ROUTE13) }, { {TRAINER_BIRD_KEEPER_SEBASTIAN, TRAINER_BIRD_KEEPER_SEBASTIAN}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, { {TRAINER_BIRD_KEEPER_PERRY, TRAINER_BIRD_KEEPER_PERRY}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, - { {TRAINER_BIRD_KEEPER_ROBERT, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_ROBERT_2, TRAINER_BIRD_KEEPER_ROBERT_3}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, + { {TRAINER_BIRD_KEEPER_ROBERT, SKIP, SKIP, TRAINER_BIRD_KEEPER_ROBERT_2, TRAINER_BIRD_KEEPER_ROBERT_3}, + MAP(ROUTE13) }, { {TRAINER_PICNICKER_ALMA, TRAINER_PICNICKER_ALMA}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, - { {TRAINER_PICNICKER_SUSIE, 0xFFFF, 0xFFFF, TRAINER_PICNICKER_SUSIE_2, TRAINER_PICNICKER_SUSIE_3, TRAINER_PICNICKER_SUSIE_4}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, + { {TRAINER_PICNICKER_SUSIE, SKIP, SKIP, TRAINER_PICNICKER_SUSIE_2, TRAINER_PICNICKER_SUSIE_3, TRAINER_PICNICKER_SUSIE_4}, + MAP(ROUTE13) }, { {TRAINER_PICNICKER_VALERIE, TRAINER_PICNICKER_VALERIE}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, { {TRAINER_PICNICKER_GWEN, TRAINER_PICNICKER_GWEN}, - MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) }, + MAP(ROUTE13) }, { {TRAINER_BIKER_MALIK, TRAINER_BIKER_MALIK}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, - { {TRAINER_BIKER_LUKAS, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIKER_LUKAS_2}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, + { {TRAINER_BIKER_LUKAS, SKIP, SKIP, SKIP, TRAINER_BIKER_LUKAS_2}, + MAP(ROUTE14) }, { {TRAINER_BIKER_ISAAC, TRAINER_BIKER_ISAAC}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, { {TRAINER_BIKER_GERALD, TRAINER_BIKER_GERALD}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, { {TRAINER_BIRD_KEEPER_DONALD, TRAINER_BIRD_KEEPER_DONALD}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, - { {TRAINER_BIRD_KEEPER_BENNY, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_BENNY_2, TRAINER_BIRD_KEEPER_BENNY_3}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, + { {TRAINER_BIRD_KEEPER_BENNY, SKIP, SKIP, TRAINER_BIRD_KEEPER_BENNY_2, TRAINER_BIRD_KEEPER_BENNY_3}, + MAP(ROUTE14) }, { {TRAINER_BIRD_KEEPER_CARTER, TRAINER_BIRD_KEEPER_CARTER}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, { {TRAINER_BIRD_KEEPER_MITCH, TRAINER_BIRD_KEEPER_MITCH}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, { {TRAINER_BIRD_KEEPER_BECK, TRAINER_BIRD_KEEPER_BECK}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, - { {TRAINER_BIRD_KEEPER_MARLON, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_MARLON_2, TRAINER_BIRD_KEEPER_MARLON_3}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, + { {TRAINER_BIRD_KEEPER_MARLON, SKIP, SKIP, TRAINER_BIRD_KEEPER_MARLON_2, TRAINER_BIRD_KEEPER_MARLON_3}, + MAP(ROUTE14) }, { {TRAINER_TWINS_KIRI_JAN, TRAINER_TWINS_KIRI_JAN}, - MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) }, + MAP(ROUTE14) }, { {TRAINER_BIKER_ERNEST, TRAINER_BIKER_ERNEST}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, { {TRAINER_BIKER_ALEX, TRAINER_BIKER_ALEX}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, - { {TRAINER_BEAUTY_GRACE, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BEAUTY_GRACE_2}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, + { {TRAINER_BEAUTY_GRACE, SKIP, SKIP, SKIP, TRAINER_BEAUTY_GRACE_2}, + MAP(ROUTE15) }, { {TRAINER_BEAUTY_OLIVIA, TRAINER_BEAUTY_OLIVIA}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, { {TRAINER_BIRD_KEEPER_EDWIN, TRAINER_BIRD_KEEPER_EDWIN}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, - { {TRAINER_BIRD_KEEPER_CHESTER, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_CHESTER_2, TRAINER_BIRD_KEEPER_CHESTER_3}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, + { {TRAINER_BIRD_KEEPER_CHESTER, SKIP, SKIP, TRAINER_BIRD_KEEPER_CHESTER_2, TRAINER_BIRD_KEEPER_CHESTER_3}, + MAP(ROUTE15) }, { {TRAINER_PICNICKER_YAZMIN, TRAINER_PICNICKER_YAZMIN}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, { {TRAINER_PICNICKER_KINDRA, TRAINER_PICNICKER_KINDRA}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, - { {TRAINER_PICNICKER_BECKY, 0xFFFF, 0xFFFF, TRAINER_PICNICKER_BECKY_2, TRAINER_PICNICKER_BECKY_3, TRAINER_PICNICKER_BECKY_4}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, + { {TRAINER_PICNICKER_BECKY, SKIP, SKIP, TRAINER_PICNICKER_BECKY_2, TRAINER_PICNICKER_BECKY_3, TRAINER_PICNICKER_BECKY_4}, + MAP(ROUTE15) }, { {TRAINER_PICNICKER_CELIA, TRAINER_PICNICKER_CELIA}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, - { {TRAINER_CRUSH_KIN_RON_MYA, 0xFFFF, 0xFFFF, TRAINER_CRUSH_KIN_RON_MYA_2, TRAINER_CRUSH_KIN_RON_MYA_3, TRAINER_CRUSH_KIN_RON_MYA_4}, - MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) }, + MAP(ROUTE15) }, + { {TRAINER_CRUSH_KIN_RON_MYA, SKIP, SKIP, TRAINER_CRUSH_KIN_RON_MYA_2, TRAINER_CRUSH_KIN_RON_MYA_3, TRAINER_CRUSH_KIN_RON_MYA_4}, + MAP(ROUTE15) }, { {TRAINER_BIKER_LAO, TRAINER_BIKER_LAO}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, + MAP(ROUTE16) }, { {TRAINER_BIKER_HIDEO, TRAINER_BIKER_HIDEO}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, - { {TRAINER_BIKER_RUBEN, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIKER_RUBEN_2}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, + MAP(ROUTE16) }, + { {TRAINER_BIKER_RUBEN, SKIP, SKIP, SKIP, TRAINER_BIKER_RUBEN_2}, + MAP(ROUTE16) }, { {TRAINER_CUE_BALL_KOJI, TRAINER_CUE_BALL_KOJI}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, + MAP(ROUTE16) }, { {TRAINER_CUE_BALL_LUKE, TRAINER_CUE_BALL_LUKE}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, - { {TRAINER_CUE_BALL_CAMRON, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CUE_BALL_CAMRON_2}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, + MAP(ROUTE16) }, + { {TRAINER_CUE_BALL_CAMRON, SKIP, SKIP, SKIP, TRAINER_CUE_BALL_CAMRON_2}, + MAP(ROUTE16) }, { {TRAINER_YOUNG_COUPLE_LEA_JED, TRAINER_YOUNG_COUPLE_LEA_JED}, - MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) }, + MAP(ROUTE16) }, { {TRAINER_BIKER_BILLY, TRAINER_BIKER_BILLY}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, { {TRAINER_BIKER_NIKOLAS, TRAINER_BIKER_NIKOLAS}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, - { {TRAINER_BIKER_JAXON, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIKER_JAXON_2}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, + { {TRAINER_BIKER_JAXON, SKIP, SKIP, SKIP, TRAINER_BIKER_JAXON_2}, + MAP(ROUTE17) }, { {TRAINER_BIKER_WILLIAM, TRAINER_BIKER_WILLIAM}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, { {TRAINER_CUE_BALL_RAUL, TRAINER_CUE_BALL_RAUL}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, - { {TRAINER_CUE_BALL_ISAIAH, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CUE_BALL_ISAIAH_2}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, + { {TRAINER_CUE_BALL_ISAIAH, SKIP, SKIP, SKIP, TRAINER_CUE_BALL_ISAIAH_2}, + MAP(ROUTE17) }, { {TRAINER_CUE_BALL_ZEEK, TRAINER_CUE_BALL_ZEEK}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, { {TRAINER_CUE_BALL_JAMAL, TRAINER_CUE_BALL_JAMAL}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, - { {TRAINER_CUE_BALL_COREY, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CUE_BALL_COREY_2}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, + { {TRAINER_CUE_BALL_COREY, SKIP, SKIP, SKIP, TRAINER_CUE_BALL_COREY_2}, + MAP(ROUTE17) }, { {TRAINER_BIKER_VIRGIL, TRAINER_BIKER_VIRGIL}, - MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) }, + MAP(ROUTE17) }, { {TRAINER_BIRD_KEEPER_WILTON, TRAINER_BIRD_KEEPER_WILTON}, - MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18) }, + MAP(ROUTE18) }, { {TRAINER_BIRD_KEEPER_RAMIRO, TRAINER_BIRD_KEEPER_RAMIRO}, - MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18) }, - { {TRAINER_BIRD_KEEPER_JACOB, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_JACOB_2, TRAINER_BIRD_KEEPER_JACOB_3}, - MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18) }, + MAP(ROUTE18) }, + { {TRAINER_BIRD_KEEPER_JACOB, SKIP, SKIP, TRAINER_BIRD_KEEPER_JACOB_2, TRAINER_BIRD_KEEPER_JACOB_3}, + MAP(ROUTE18) }, { {TRAINER_SWIMMER_MALE_RICHARD, TRAINER_SWIMMER_MALE_RICHARD}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_MALE_REECE, TRAINER_SWIMMER_MALE_REECE}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, - { {TRAINER_SWIMMER_MALE_MATTHEW, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_MATTHEW_2}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, + { {TRAINER_SWIMMER_MALE_MATTHEW, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_MATTHEW_2}, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_MALE_DOUGLAS, TRAINER_SWIMMER_MALE_DOUGLAS}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_MALE_DAVID, TRAINER_SWIMMER_MALE_DAVID}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, - { {TRAINER_SWIMMER_MALE_TONY, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_TONY_2}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, + { {TRAINER_SWIMMER_MALE_TONY, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_TONY_2}, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_MALE_AXLE, TRAINER_SWIMMER_MALE_AXLE}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_FEMALE_ANYA, TRAINER_SWIMMER_FEMALE_ANYA}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, - { {TRAINER_SWIMMER_FEMALE_ALICE, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_FEMALE_ALICE_2}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, + { {TRAINER_SWIMMER_FEMALE_ALICE, SKIP, SKIP, SKIP, TRAINER_SWIMMER_FEMALE_ALICE_2}, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_FEMALE_CONNIE, TRAINER_SWIMMER_FEMALE_CONNIE}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, { {TRAINER_SIS_AND_BRO_LIA_LUC, TRAINER_SIS_AND_BRO_LIA_LUC}, - MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) }, + MAP(ROUTE19) }, { {TRAINER_SWIMMER_MALE_BARRY, TRAINER_SWIMMER_MALE_BARRY}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, { {TRAINER_SWIMMER_MALE_DEAN, TRAINER_SWIMMER_MALE_DEAN}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, - { {TRAINER_SWIMMER_MALE_DARRIN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_DARRIN_2}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, + { {TRAINER_SWIMMER_MALE_DARRIN, SKIP, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_DARRIN_2}, + MAP(ROUTE20) }, { {TRAINER_SWIMMER_FEMALE_TIFFANY, TRAINER_SWIMMER_FEMALE_TIFFANY}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, { {TRAINER_SWIMMER_FEMALE_NORA, TRAINER_SWIMMER_FEMALE_NORA}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, - { {TRAINER_SWIMMER_FEMALE_MELISSA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_FEMALE_MELISSA_2}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, + { {TRAINER_SWIMMER_FEMALE_MELISSA, SKIP, SKIP, SKIP, TRAINER_SWIMMER_FEMALE_MELISSA_2}, + MAP(ROUTE20) }, { {TRAINER_SWIMMER_FEMALE_SHIRLEY, TRAINER_SWIMMER_FEMALE_SHIRLEY}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, { {TRAINER_BIRD_KEEPER_ROGER, TRAINER_BIRD_KEEPER_ROGER}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, - { {TRAINER_PICNICKER_MISSY, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PICNICKER_MISSY_2, TRAINER_PICNICKER_MISSY_3}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, + { {TRAINER_PICNICKER_MISSY, SKIP, SKIP, SKIP, TRAINER_PICNICKER_MISSY_2, TRAINER_PICNICKER_MISSY_3}, + MAP(ROUTE20) }, { {TRAINER_PICNICKER_IRENE, TRAINER_PICNICKER_IRENE}, - MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) }, + MAP(ROUTE20) }, { {TRAINER_FISHERMAN_RONALD, TRAINER_FISHERMAN_RONALD}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, + MAP(ROUTE21_NORTH) }, { {TRAINER_FISHERMAN_CLAUDE, TRAINER_FISHERMAN_CLAUDE}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, - { {TRAINER_FISHERMAN_WADE, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_FISHERMAN_WADE_2}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, + MAP(ROUTE21_NORTH) }, + { {TRAINER_FISHERMAN_WADE, SKIP, SKIP, SKIP, TRAINER_FISHERMAN_WADE_2}, + MAP(ROUTE21_NORTH) }, { {TRAINER_FISHERMAN_NOLAN, TRAINER_FISHERMAN_NOLAN}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, + MAP(ROUTE21_NORTH) }, { {TRAINER_SWIMMER_MALE_SPENCER, TRAINER_SWIMMER_MALE_SPENCER}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, - { {TRAINER_SWIMMER_MALE_JACK, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_JACK_2}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, + MAP(ROUTE21_NORTH) }, + { {TRAINER_SWIMMER_MALE_JACK, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_JACK_2}, + MAP(ROUTE21_NORTH) }, { {TRAINER_SWIMMER_MALE_JEROME, TRAINER_SWIMMER_MALE_JEROME}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, + MAP(ROUTE21_NORTH) }, { {TRAINER_SWIMMER_MALE_ROLAND, TRAINER_SWIMMER_MALE_ROLAND}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, - { {TRAINER_SIS_AND_BRO_LIL_IAN, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SIS_AND_BRO_LIL_IAN_2, TRAINER_SIS_AND_BRO_LIL_IAN_3}, - MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) }, + MAP(ROUTE21_NORTH) }, + { {TRAINER_SIS_AND_BRO_LIL_IAN, SKIP, SKIP, SKIP, TRAINER_SIS_AND_BRO_LIL_IAN_2, TRAINER_SIS_AND_BRO_LIL_IAN_3}, + MAP(ROUTE21_NORTH) }, { {TRAINER_SWIMMER_FEMALE_MARIA, TRAINER_SWIMMER_FEMALE_MARIA}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, + MAP(ONE_ISLAND_KINDLE_ROAD) }, { {TRAINER_SWIMMER_FEMALE_ABIGAIL, TRAINER_SWIMMER_FEMALE_ABIGAIL}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, - { {TRAINER_SWIMMER_MALE_FINN, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_FINN_2}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, + MAP(ONE_ISLAND_KINDLE_ROAD) }, + { {TRAINER_SWIMMER_MALE_FINN, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_FINN_2}, + MAP(ONE_ISLAND_KINDLE_ROAD) }, { {TRAINER_SWIMMER_MALE_GARRETT, TRAINER_SWIMMER_MALE_GARRETT}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, + MAP(ONE_ISLAND_KINDLE_ROAD) }, { {TRAINER_FISHERMAN_TOMMY, TRAINER_FISHERMAN_TOMMY}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, - { {TRAINER_CRUSH_GIRL_SHARON, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_GIRL_SHARON_2, TRAINER_CRUSH_GIRL_SHARON_3}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, - { {TRAINER_CRUSH_GIRL_TANYA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_GIRL_TANYA_2, TRAINER_CRUSH_GIRL_TANYA_3}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, - { {TRAINER_BLACK_BELT_SHEA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BLACK_BELT_SHEA_2, TRAINER_BLACK_BELT_SHEA_3}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, - { {TRAINER_BLACK_BELT_HUGH, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BLACK_BELT_HUGH_2, TRAINER_BLACK_BELT_HUGH_3}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, + MAP(ONE_ISLAND_KINDLE_ROAD) }, + { {TRAINER_CRUSH_GIRL_SHARON, SKIP, SKIP, SKIP, TRAINER_CRUSH_GIRL_SHARON_2, TRAINER_CRUSH_GIRL_SHARON_3}, + MAP(ONE_ISLAND_KINDLE_ROAD) }, + { {TRAINER_CRUSH_GIRL_TANYA, SKIP, SKIP, SKIP, TRAINER_CRUSH_GIRL_TANYA_2, TRAINER_CRUSH_GIRL_TANYA_3}, + MAP(ONE_ISLAND_KINDLE_ROAD) }, + { {TRAINER_BLACK_BELT_SHEA, SKIP, SKIP, SKIP, TRAINER_BLACK_BELT_SHEA_2, TRAINER_BLACK_BELT_SHEA_3}, + MAP(ONE_ISLAND_KINDLE_ROAD) }, + { {TRAINER_BLACK_BELT_HUGH, SKIP, SKIP, SKIP, TRAINER_BLACK_BELT_HUGH_2, TRAINER_BLACK_BELT_HUGH_3}, + MAP(ONE_ISLAND_KINDLE_ROAD) }, { {TRAINER_CAMPER_BRYCE, TRAINER_CAMPER_BRYCE}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, + MAP(ONE_ISLAND_KINDLE_ROAD) }, { {TRAINER_PICNICKER_CLAIRE, TRAINER_PICNICKER_CLAIRE}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, - { {TRAINER_CRUSH_KIN_MIK_KIA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_KIN_MIK_KIA_2, TRAINER_CRUSH_KIN_MIK_KIA_3}, - MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) }, + MAP(ONE_ISLAND_KINDLE_ROAD) }, + { {TRAINER_CRUSH_KIN_MIK_KIA, SKIP, SKIP, SKIP, TRAINER_CRUSH_KIN_MIK_KIA_2, TRAINER_CRUSH_KIN_MIK_KIA_3}, + MAP(ONE_ISLAND_KINDLE_ROAD) }, { {TRAINER_SWIMMER_FEMALE_AMARA, TRAINER_SWIMMER_FEMALE_AMARA}, - MAP_GROUP(ONE_ISLAND_TREASURE_BEACH), MAP_NUM(ONE_ISLAND_TREASURE_BEACH) }, + MAP(ONE_ISLAND_TREASURE_BEACH) }, { {TRAINER_AROMA_LADY_NIKKI, TRAINER_AROMA_LADY_NIKKI}, - MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) }, + MAP(THREE_ISLAND_BOND_BRIDGE) }, { {TRAINER_AROMA_LADY_VIOLET, TRAINER_AROMA_LADY_VIOLET}, - MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) }, - { {TRAINER_TUBER_AMIRA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_TUBER_AMIRA_2}, - MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) }, + MAP(THREE_ISLAND_BOND_BRIDGE) }, + { {TRAINER_TUBER_AMIRA, SKIP, SKIP, SKIP, TRAINER_TUBER_AMIRA_2}, + MAP(THREE_ISLAND_BOND_BRIDGE) }, { {TRAINER_TUBER_ALEXIS, TRAINER_TUBER_ALEXIS}, - MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) }, + MAP(THREE_ISLAND_BOND_BRIDGE) }, { {TRAINER_SWIMMER_FEMALE_TISHA, TRAINER_SWIMMER_FEMALE_TISHA}, - MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) }, - { {TRAINER_TWINS_JOY_MEG, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_TWINS_JOY_MEG_2}, - MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) }, + MAP(THREE_ISLAND_BOND_BRIDGE) }, + { {TRAINER_TWINS_JOY_MEG, SKIP, SKIP, SKIP, TRAINER_TWINS_JOY_MEG_2}, + MAP(THREE_ISLAND_BOND_BRIDGE) }, { {TRAINER_PAINTER_DAISY, TRAINER_PAINTER_DAISY}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, { {TRAINER_PAINTER_CELINA, TRAINER_PAINTER_CELINA}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, - { {TRAINER_PAINTER_RAYNA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PAINTER_RAYNA_2}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, + { {TRAINER_PAINTER_RAYNA, SKIP, SKIP, SKIP, SKIP, TRAINER_PAINTER_RAYNA_2}, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, { {TRAINER_LADY_JACKI, TRAINER_LADY_JACKI}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, { {TRAINER_LADY_GILLIAN, TRAINER_LADY_GILLIAN}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, - { {TRAINER_YOUNGSTER_DESTIN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_YOUNGSTER_DESTIN_2}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, + { {TRAINER_YOUNGSTER_DESTIN, SKIP, SKIP, SKIP, SKIP, TRAINER_YOUNGSTER_DESTIN_2}, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, { {TRAINER_SWIMMER_MALE_TOBY, TRAINER_SWIMMER_MALE_TOBY}, - MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) }, - { {TRAINER_PKMN_BREEDER_ALIZE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_BREEDER_ALIZE_2}, - MAP_GROUP(FIVE_ISLAND_WATER_LABYRINTH), MAP_NUM(FIVE_ISLAND_WATER_LABYRINTH) }, - { {TRAINER_BIRD_KEEPER_MILO, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_MILO_2}, - MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR) }, - { {TRAINER_BIRD_KEEPER_CHAZ, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_CHAZ_2}, - MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR) }, - { {TRAINER_BIRD_KEEPER_HAROLD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_HAROLD_2}, - MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR) }, + MAP(FIVE_ISLAND_RESORT_GORGEOUS) }, + { {TRAINER_PKMN_BREEDER_ALIZE, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_BREEDER_ALIZE_2}, + MAP(FIVE_ISLAND_WATER_LABYRINTH) }, + { {TRAINER_BIRD_KEEPER_MILO, SKIP, SKIP, SKIP, SKIP, TRAINER_BIRD_KEEPER_MILO_2}, + MAP(FIVE_ISLAND_MEMORIAL_PILLAR) }, + { {TRAINER_BIRD_KEEPER_CHAZ, SKIP, SKIP, SKIP, SKIP, TRAINER_BIRD_KEEPER_CHAZ_2}, + MAP(FIVE_ISLAND_MEMORIAL_PILLAR) }, + { {TRAINER_BIRD_KEEPER_HAROLD, SKIP, SKIP, SKIP, SKIP, TRAINER_BIRD_KEEPER_HAROLD_2}, + MAP(FIVE_ISLAND_MEMORIAL_PILLAR) }, { {TRAINER_FISHERMAN_TYLOR, TRAINER_FISHERMAN_TYLOR}, - MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) }, + MAP(SIX_ISLAND_OUTCAST_ISLAND) }, { {TRAINER_SWIMMER_MALE_MYMO, TRAINER_SWIMMER_MALE_MYMO}, - MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) }, - { {TRAINER_SWIMMER_FEMALE_NICOLE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_FEMALE_NICOLE_2}, - MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) }, + MAP(SIX_ISLAND_OUTCAST_ISLAND) }, + { {TRAINER_SWIMMER_FEMALE_NICOLE, SKIP, SKIP, SKIP, SKIP, TRAINER_SWIMMER_FEMALE_NICOLE_2}, + MAP(SIX_ISLAND_OUTCAST_ISLAND) }, { {TRAINER_SIS_AND_BRO_AVA_GEB, TRAINER_SIS_AND_BRO_AVA_GEB}, - MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) }, - { {TRAINER_PSYCHIC_JACLYN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PSYCHIC_JACLYN_2}, - MAP_GROUP(SIX_ISLAND_GREEN_PATH), MAP_NUM(SIX_ISLAND_GREEN_PATH) }, + MAP(SIX_ISLAND_OUTCAST_ISLAND) }, + { {TRAINER_PSYCHIC_JACLYN, SKIP, SKIP, SKIP, SKIP, TRAINER_PSYCHIC_JACLYN_2}, + MAP(SIX_ISLAND_GREEN_PATH) }, { {TRAINER_AROMA_LADY_ROSE, TRAINER_AROMA_LADY_ROSE}, - MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) }, + MAP(SIX_ISLAND_WATER_PATH) }, { {TRAINER_JUGGLER_EDWARD, TRAINER_JUGGLER_EDWARD}, - MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) }, - { {TRAINER_SWIMMER_MALE_SAMIR, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_SAMIR_2}, - MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) }, + MAP(SIX_ISLAND_WATER_PATH) }, + { {TRAINER_SWIMMER_MALE_SAMIR, SKIP, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_SAMIR_2}, + MAP(SIX_ISLAND_WATER_PATH) }, { {TRAINER_SWIMMER_FEMALE_DENISE, TRAINER_SWIMMER_FEMALE_DENISE}, - MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) }, + MAP(SIX_ISLAND_WATER_PATH) }, { {TRAINER_TWINS_MIU_MIA, TRAINER_TWINS_MIU_MIA}, - MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) }, - { {TRAINER_HIKER_EARL, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_HIKER_EARL_2}, - MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) }, + MAP(SIX_ISLAND_WATER_PATH) }, + { {TRAINER_HIKER_EARL, SKIP, SKIP, SKIP, SKIP, TRAINER_HIKER_EARL_2}, + MAP(SIX_ISLAND_WATER_PATH) }, { {TRAINER_RUIN_MANIAC_STANLY, TRAINER_RUIN_MANIAC_STANLY}, - MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) }, + MAP(SIX_ISLAND_RUIN_VALLEY) }, { {TRAINER_RUIN_MANIAC_FOSTER, TRAINER_RUIN_MANIAC_FOSTER}, - MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) }, - { {TRAINER_RUIN_MANIAC_LARRY, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_RUIN_MANIAC_LARRY_2}, - MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) }, + MAP(SIX_ISLAND_RUIN_VALLEY) }, + { {TRAINER_RUIN_MANIAC_LARRY, SKIP, SKIP, SKIP, SKIP, TRAINER_RUIN_MANIAC_LARRY_2}, + MAP(SIX_ISLAND_RUIN_VALLEY) }, { {TRAINER_HIKER_DARYL, TRAINER_HIKER_DARYL}, - MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) }, - { {TRAINER_POKEMANIAC_HECTOR, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_POKEMANIAC_HECTOR_2}, - MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) }, - { {TRAINER_PSYCHIC_DARIO, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PSYCHIC_DARIO_2}, - MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER), MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER) }, - { {TRAINER_PSYCHIC_RODETTE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PSYCHIC_RODETTE_2}, - MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER), MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER) }, + MAP(SIX_ISLAND_RUIN_VALLEY) }, + { {TRAINER_POKEMANIAC_HECTOR, SKIP, SKIP, SKIP, SKIP, TRAINER_POKEMANIAC_HECTOR_2}, + MAP(SIX_ISLAND_RUIN_VALLEY) }, + { {TRAINER_PSYCHIC_DARIO, SKIP, SKIP, SKIP, SKIP, TRAINER_PSYCHIC_DARIO_2}, + MAP(SEVEN_ISLAND_TRAINER_TOWER) }, + { {TRAINER_PSYCHIC_RODETTE, SKIP, SKIP, SKIP, SKIP, TRAINER_PSYCHIC_RODETTE_2}, + MAP(SEVEN_ISLAND_TRAINER_TOWER) }, { {TRAINER_AROMA_LADY_MIAH, TRAINER_AROMA_LADY_MIAH}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, + MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, { {TRAINER_YOUNG_COUPLE_EVE_JON, TRAINER_YOUNG_COUPLE_EVE_JON}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, - { {TRAINER_JUGGLER_MASON, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_JUGGLER_MASON_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, - { {TRAINER_PKMN_RANGER_NICOLAS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_NICOLAS_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, - { {TRAINER_PKMN_RANGER_MADELINE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_MADELINE_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, - { {TRAINER_CRUSH_GIRL_CYNDY, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_GIRL_CYNDY_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, - { {TRAINER_TAMER_EVAN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_TAMER_EVAN_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, - { {TRAINER_PKMN_RANGER_JACKSON, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_JACKSON_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, - { {TRAINER_PKMN_RANGER_KATELYN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_KATELYN_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, - { {TRAINER_COOLTRAINER_LEROY, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_COOLTRAINER_LEROY_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, - { {TRAINER_COOLTRAINER_MICHELLE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_COOLTRAINER_MICHELLE_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, - { {TRAINER_COOL_COUPLE_LEX_NYA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_COOL_COUPLE_LEX_NYA_2}, - MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) }, + MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, + { {TRAINER_JUGGLER_MASON, SKIP, SKIP, SKIP, SKIP, TRAINER_JUGGLER_MASON_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, + { {TRAINER_PKMN_RANGER_NICOLAS, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_NICOLAS_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, + { {TRAINER_PKMN_RANGER_MADELINE, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_MADELINE_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) }, + { {TRAINER_CRUSH_GIRL_CYNDY, SKIP, SKIP, SKIP, SKIP, TRAINER_CRUSH_GIRL_CYNDY_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, + { {TRAINER_TAMER_EVAN, SKIP, SKIP, SKIP, SKIP, TRAINER_TAMER_EVAN_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, + { {TRAINER_PKMN_RANGER_JACKSON, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_JACKSON_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, + { {TRAINER_PKMN_RANGER_KATELYN, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_KATELYN_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, + { {TRAINER_COOLTRAINER_LEROY, SKIP, SKIP, SKIP, SKIP, TRAINER_COOLTRAINER_LEROY_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, + { {TRAINER_COOLTRAINER_MICHELLE, SKIP, SKIP, SKIP, SKIP, TRAINER_COOLTRAINER_MICHELLE_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, + { {TRAINER_COOL_COUPLE_LEX_NYA, SKIP, SKIP, SKIP, SKIP, TRAINER_COOL_COUPLE_LEX_NYA_2}, + MAP(SEVEN_ISLAND_SEVAULT_CANYON) }, { {TRAINER_RUIN_MANIAC_BRANDON, TRAINER_RUIN_MANIAC_BRANDON}, - MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) }, + MAP(SEVEN_ISLAND_TANOBY_RUINS) }, { {TRAINER_RUIN_MANIAC_BENJAMIN, TRAINER_RUIN_MANIAC_BENJAMIN}, - MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) }, + MAP(SEVEN_ISLAND_TANOBY_RUINS) }, { {TRAINER_PAINTER_EDNA, TRAINER_PAINTER_EDNA}, - MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) }, + MAP(SEVEN_ISLAND_TANOBY_RUINS) }, { {TRAINER_GENTLEMAN_CLIFFORD, TRAINER_GENTLEMAN_CLIFFORD}, - MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) }, + MAP(SEVEN_ISLAND_TANOBY_RUINS) }, }; static const u8 sMovementScript_Wait48[] = { @@ -760,7 +763,7 @@ void Task_VsSeeker_0(u8 taskId) } else if (respval == VSSEEKER_CAN_USE) { - ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff); + ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xFFFF); FieldEffectStart(FLDEFF_USE_VS_SEEKER); gTasks[taskId].func = Task_VsSeeker_1; gTasks[taskId].data[0] = 15; @@ -792,7 +795,7 @@ static void Task_VsSeeker_2(u8 taskId) data[1] = 0; data[2] = 0; VsSeekerResetInBagStepCounter(); - sVsSeeker->responseCode = GetVsSeekerResponseInArea(sVsSeekerData); + sVsSeeker->responseCode = GetVsSeekerResponseInArea(sRematches); ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, sMovementScript_Wait48); gTasks[taskId].func = Task_VsSeeker_3; } @@ -861,7 +864,7 @@ static u8 CanUseVsSeeker(void) } } -static u8 GetVsSeekerResponseInArea(const VsSeekerData * vsSeekerData) +static u8 GetVsSeekerResponseInArea(const struct RematchData * vsSeekerData) { u16 trainerIdx = 0; u16 rval = 0; @@ -933,7 +936,7 @@ void ClearRematchStateByTrainerId(void) { u8 objEventId = 0; struct ObjectEventTemplate *objectEventTemplates = gSaveBlock1Ptr->objectEventTemplates; - int vsSeekerDataIdx = LookupVsSeekerOpponentInArray(sVsSeekerData, gTrainerBattleOpponent_A); + int vsSeekerDataIdx = LookupVsSeekerOpponentInArray(sRematches, gTrainerBattleOpponent_A); if (vsSeekerDataIdx != -1) { @@ -943,7 +946,7 @@ void ClearRematchStateByTrainerId(void) { if ((objectEventTemplates[i].objUnion.normal.trainerType == TRAINER_TYPE_NORMAL || objectEventTemplates[i].objUnion.normal.trainerType == TRAINER_TYPE_BURIED) - && vsSeekerDataIdx == LookupVsSeekerOpponentInArray(sVsSeekerData, GetTrainerFlagFromScript(objectEventTemplates[i].script))) + && vsSeekerDataIdx == LookupVsSeekerOpponentInArray(sRematches, GetTrainerFlagFromScript(objectEventTemplates[i].script))) { struct ObjectEvent *objectEvent; @@ -965,28 +968,28 @@ static void TryGetRematchTrainerIdGivenGameState(const u16 * trainerIdxs, u8 * r { switch (*rematchIdx_p) { - case 0: - break; - case 1: - if (!FlagGet(FLAG_GOT_VS_SEEKER)) - *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); - break; - case 2: - if (!FlagGet(FLAG_WORLD_MAP_CELADON_CITY)) - *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); - break; - case 3: - if (!FlagGet(FLAG_WORLD_MAP_FUCHSIA_CITY)) - *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); - break; - case 4: - if (!FlagGet(FLAG_SYS_GAME_CLEAR)) - *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); - break; - case 5: - if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) - *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); - break; + case 0: + break; + case 1: + if (!FlagGet(FLAG_GOT_VS_SEEKER)) + *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); + break; + case 2: + if (!FlagGet(FLAG_WORLD_MAP_CELADON_CITY)) + *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); + break; + case 3: + if (!FlagGet(FLAG_WORLD_MAP_FUCHSIA_CITY)) + *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); + break; + case 4: + if (!FlagGet(FLAG_SYS_GAME_CLEAR)) + *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); + break; + case 5: + if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) + *rematchIdx_p = GetRematchTrainerIdGivenGameState(trainerIdxs, *rematchIdx_p); + break; } } @@ -995,7 +998,7 @@ static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchId while (--rematchIdx != 0) { const u16 *rematch_p = trainerIdxs + rematchIdx; - if (*rematch_p != 0xFFFF) + if (*rematch_p != SKIP) return rematchIdx; } return 0; @@ -1003,20 +1006,20 @@ static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchId bool8 ShouldTryRematchBattle(void) { - if (ShouldTryRematchBattleInternal(sVsSeekerData, gTrainerBattleOpponent_A)) + if (ShouldTryRematchBattleInternal(sRematches, gTrainerBattleOpponent_A)) { return TRUE; } - return HasRematchTrainerAlreadyBeenFought(sVsSeekerData, gTrainerBattleOpponent_A); + return HasRematchTrainerAlreadyBeenFought(sRematches, gTrainerBattleOpponent_A); } -static bool8 ShouldTryRematchBattleInternal(const VsSeekerData *vsSeekerData, u16 trainerBattleOpponent) +static bool8 ShouldTryRematchBattleInternal(const struct RematchData *vsSeekerData, u16 trainerBattleOpponent) { s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent); if (rematchIdx == -1) return FALSE; - if (rematchIdx >= 0 && rematchIdx < NELEMS(sVsSeekerData)) + if (rematchIdx >= 0 && rematchIdx < NELEMS(sRematches)) { if (IsThisTrainerRematchable(gSpecialVar_LastTalked)) return TRUE; @@ -1024,7 +1027,7 @@ static bool8 ShouldTryRematchBattleInternal(const VsSeekerData *vsSeekerData, u1 return FALSE; } -static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData, u16 trainerBattleOpponent) +static bool8 HasRematchTrainerAlreadyBeenFought(const struct RematchData *vsSeekerData, u16 trainerBattleOpponent) { s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent); @@ -1041,19 +1044,19 @@ void ClearRematchStateOfLastTalked(void) SetBattledTrainerFlag(); } -static int LookupVsSeekerOpponentInArray(const VsSeekerData * array, u16 trainerId) +static int LookupVsSeekerOpponentInArray(const struct RematchData * array, u16 trainerId) { int i, j; - for (i = 0; i < NELEMS(sVsSeekerData); i++) + for (i = 0; i < NELEMS(sRematches); i++) { - for (j = 0; j < 6; j++) + for (j = 0; j < MAX_REMATCH_PARTIES; j++) { u16 testTrainerId; if (array[i].trainerIdxs[j] == 0) break; testTrainerId = array[i].trainerIdxs[j]; - if (testTrainerId == 0xFFFF) + if (testTrainerId == SKIP) continue; if (testTrainerId == trainerId) return i; @@ -1067,25 +1070,25 @@ int GetRematchTrainerId(u16 trainerId) { u8 i; u8 j; - j = GetNextAvailableRematchTrainer(sVsSeekerData, trainerId, &i); + j = GetNextAvailableRematchTrainer(sRematches, trainerId, &i); if (!j) return 0; - TryGetRematchTrainerIdGivenGameState(sVsSeekerData[i].trainerIdxs, &j); - return sVsSeekerData[i].trainerIdxs[j]; + TryGetRematchTrainerIdGivenGameState(sRematches[i].trainerIdxs, &j); + return sRematches[i].trainerIdxs[j]; } u8 IsTrainerReadyForRematch(void) { - return IsTrainerReadyForRematchInternal(sVsSeekerData, gTrainerBattleOpponent_A); + return IsTrainerReadyForRematchInternal(sRematches, gTrainerBattleOpponent_A); } -static bool8 IsTrainerReadyForRematchInternal(const VsSeekerData * array, u16 trainerId) +static bool8 IsTrainerReadyForRematchInternal(const struct RematchData * array, u16 trainerId) { int rematchTrainerIdx = LookupVsSeekerOpponentInArray(array, trainerId); if (rematchTrainerIdx == -1) return FALSE; - if (rematchTrainerIdx >= NELEMS(sVsSeekerData)) + if (rematchTrainerIdx >= NELEMS(sRematches)) return FALSE; if (!IsThisTrainerRematchable(gSpecialVar_LastTalked)) return FALSE; @@ -1177,11 +1180,11 @@ static u16 GetTrainerFlagFromScript(const u8 *script) return trainerFlag; } -static int GetRematchIdx(const VsSeekerData * vsSeekerData, u16 trainerFlagIdx) +static int GetRematchIdx(const struct RematchData * vsSeekerData, u16 trainerFlagIdx) { int i; - for (i = 0; i < NELEMS(sVsSeekerData); i++) + for (i = 0; i < NELEMS(sRematches); i++) { if (vsSeekerData[i].trainerIdxs[0] == trainerFlagIdx) return i; @@ -1223,20 +1226,20 @@ static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo) return FALSE; } -static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr) +static u8 GetNextAvailableRematchTrainer(const struct RematchData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr) { int i, j; - for (i = 0; i < NELEMS(sVsSeekerData); i++) + for (i = 0; i < NELEMS(sRematches); i++) { if (vsSeekerData[i].trainerIdxs[0] == trainerFlagNo) { *idxPtr = i; - for (j = 1; j < 6; j++) + for (j = 1; j < MAX_REMATCH_PARTIES; j++) { - if (vsSeekerData[i].trainerIdxs[j] == 0) + if (vsSeekerData[i].trainerIdxs[j] == TRAINER_NONE) return j - 1; - if (vsSeekerData[i].trainerIdxs[j] == 0xffff) + if (vsSeekerData[i].trainerIdxs[j] == SKIP) continue; if (HasTrainerBeenFought(vsSeekerData[i].trainerIdxs[j])) continue; @@ -1259,7 +1262,7 @@ static u8 GetRematchableTrainerLocalId(void) { if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1) { - if (HasTrainerBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx)) + if (HasTrainerBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sRematches, sVsSeeker->trainerInfo[i].trainerIdx, &idx)) return sVsSeeker->trainerInfo[i].localId; } } @@ -1310,7 +1313,7 @@ static void StartAllRespondantIdleMovements(void) if (ObjectEventIdIsSane(sVsSeeker->trainerInfo[j].objectEventId) == 1) SetTrainerMovementType(objectEvent, sVsSeeker->runningBehaviourEtcArray[i]); OverrideMovementTypeForObjectEvent(objectEvent, sVsSeeker->runningBehaviourEtcArray[i]); - gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[j].localId] = GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[j].trainerIdx, &dummy); + gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[j].localId] = GetNextAvailableRematchTrainer(sRematches, sVsSeeker->trainerInfo[j].trainerIdx, &dummy); } } }