diff --git a/src/start_menu.c b/src/start_menu.c index dd77663e0..5f4e50155 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -312,16 +312,40 @@ static void DestroySafariZoneStatsWindow(void) } } +#define tCounter data[0] + +static void Task_UpdateTimeWindow(u8 taskId) +{ + if (gTasks[taskId].tCounter < 60) + { + gTasks[taskId].tCounter++; + return; + } + + if (IsDma3ManagerBusyWithBgCopy()) + return; + + DrawStdWindowFrame(sTimeWindowId, FALSE); + ConvertIntToDecimalStringN(gStringVar1, GetCurrentHour(), STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, GetCurrentMinute(), STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_MenuTime); + AddTextPrinterParameterized(sTimeWindowId, FONT_NORMAL, gStringVar4, 4, 1, 0xFF, NULL); + + StringCopy(gStringVar1, GetSeasonName(GetSeason())); + ConvertIntToDecimalStringN(gStringVar2, GetSeasonDay(), STR_CONV_MODE_RIGHT_ALIGN, 2); + StringExpandPlaceholders(gStringVar4, gText_MenuDay); + AddTextPrinterParameterized(sTimeWindowId, FONT_NORMAL, gStringVar4, 4, 18, 0xFF, NULL); + + CopyWindowToVram(sTimeWindowId, COPYWIN_GFX); + gTasks[taskId].tCounter = 0; +} + static void DrawTimeWindow(void) { if (GetSafariZoneFlag()) - { sTimeWindowId = AddWindow(&sTimeSafariWindowTemplate); - } else - { sTimeWindowId = AddWindow(&sTimeWindowTemplate); - } PutWindowTilemap(sTimeWindowId); DrawStdWindowFrame(sTimeWindowId, FALSE); @@ -336,13 +360,26 @@ static void DrawTimeWindow(void) AddTextPrinterParameterized(sTimeWindowId, FONT_NORMAL, gStringVar4, 4, 18, 0xFF, NULL); CopyWindowToVram(sTimeWindowId, COPYWIN_GFX); + + u8 taskId = CreateTask(Task_UpdateTimeWindow, 0); + gTasks[taskId].tCounter = 0; } +#undef tCounter + static void DestroyTimeWindow(void) { + u8 taskId = FindTaskIdByFunc(Task_UpdateTimeWindow); + if (taskId != TASK_NONE) + DestroyTask(taskId); + + if (sTimeWindowId == WINDOW_NONE) + return; + ClearStdWindowAndFrameToTransparent(sTimeWindowId, FALSE); - CopyWindowToVram(sTimeWindowId, COPYWIN_GFX); + CopyWindowToVram(sTimeWindowId, COPYWIN_FULL); RemoveWindow(sTimeWindowId); + sTimeWindowId = WINDOW_NONE; } static s8 PrintStartMenuItems(s8 *cursor_p, u8 nitems) @@ -507,6 +544,7 @@ static bool8 StartCB_HandleInput(void) if (JOY_NEW(B_BUTTON | START_BUTTON)) { DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); if (DEBUG_OVERWORLD_MENU != TRUE) DestroyHelpMessageWindow_(); CloseStartMenu(); @@ -541,6 +579,7 @@ static bool8 StartMenuPokedexCallback(void) IncrementGameStat(GAME_STAT_CHECKED_POKEDEX); PlayRainStoppingSoundEffect(); DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); CleanupOverworldWindowsAndTilemaps(); SetMainCallback2(CB2_OpenPokedexFromStartMenu); return TRUE; @@ -554,6 +593,7 @@ static bool8 StartMenuPokemonCallback(void) { PlayRainStoppingSoundEffect(); DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); CleanupOverworldWindowsAndTilemaps(); SetMainCallback2(CB2_PartyMenuFromStartMenu); return TRUE; @@ -567,6 +607,7 @@ static bool8 StartMenuBagCallback(void) { PlayRainStoppingSoundEffect(); DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); CleanupOverworldWindowsAndTilemaps(); SetMainCallback2(CB2_BagMenuFromStartMenu); return TRUE; @@ -580,6 +621,7 @@ static bool8 StartMenuPlayerCallback(void) { PlayRainStoppingSoundEffect(); DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); CleanupOverworldWindowsAndTilemaps(); ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); return TRUE; @@ -599,6 +641,7 @@ static bool8 StartMenuOptionCallback(void) { PlayRainStoppingSoundEffect(); DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); CleanupOverworldWindowsAndTilemaps(); SetMainCallback2(CB2_OptionsMenuFromStartMenu); gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu; @@ -610,6 +653,7 @@ static bool8 StartMenuOptionCallback(void) static bool8 StartMenuExitCallback(void) { DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); if (DEBUG_OVERWORLD_MENU != TRUE) DestroyHelpMessageWindow_(); CloseStartMenu(); @@ -619,6 +663,7 @@ static bool8 StartMenuExitCallback(void) static bool8 StartMenuDebugCallback(void) { DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); HideStartMenuDebug(); // Hide start menu without enabling movement if (DEBUG_OVERWORLD_MENU == TRUE) @@ -632,6 +677,7 @@ static bool8 StartMenuDebugCallback(void) static bool8 StartMenuSafariZoneRetireCallback(void) { DestroySafariZoneStatsWindow(); + DestroyTimeWindow(); if (DEBUG_OVERWORLD_MENU != TRUE) DestroyHelpMessageWindow_(); CloseStartMenu(); @@ -803,6 +849,7 @@ static u8 SaveDialogCB_PrintAskSaveText(void) { ClearStdWindowAndFrame(GetStartMenuWindowId(), FALSE); RemoveStartMenuWindow(); + DestroyTimeWindow(); if (DEBUG_OVERWORLD_MENU != TRUE) DestroyHelpMessageWindow(0); PrintSaveStats(); @@ -1098,7 +1145,6 @@ void CloseStartMenu(void) RemoveStartMenuWindow(); ClearPlayerHeldMovementAndUnfreezeObjectEvents(); UnlockPlayerFieldControls(); - DestroyTimeWindow(); } void AppendToList(u8 *list, u8 *cursor, u8 newEntry)