dynamic time window updates

This commit is contained in:
cawtds
2024-11-21 00:01:00 +01:00
parent 102445f1c7
commit f6bd9b03a4

View File

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