From 5b2ecfe4d4ecad99e6da73ac72e479e22efab678 Mon Sep 17 00:00:00 2001 From: FosterProgramming Date: Sun, 19 Oct 2025 08:45:21 +0200 Subject: [PATCH] Setting wallclock time now properly sets fakeRTC (#7860) Co-authored-by: Bassoonian --- src/overworld.c | 4 ++++ src/rtc.c | 1 + src/wallclock.c | 10 +++++----- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/overworld.c b/src/overworld.c index e8be437519..d9d5543798 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1794,6 +1794,10 @@ void CB2_NewGame(void) SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); SetMainCallback2(CB2_Overworld); +#if OW_USE_FAKE_RTC + // Wall clock now track local time so we set it to 10AM to match initial wall clock time + RtcCalcLocalTimeOffset(0, 10, 0, 0); +#endif } void CB2_WhiteOut(void) diff --git a/src/rtc.c b/src/rtc.c index 34f84183cf..fb2518f210 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -348,6 +348,7 @@ void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds) gLocalTime.hours = hours; gLocalTime.minutes = minutes; gLocalTime.seconds = seconds; + FakeRtc_ManuallySetTime(gLocalTime.days, gLocalTime.hours, gLocalTime.minutes, seconds); RtcGetInfo(&sRtc); RtcCalcTimeDifference(&sRtc, &gSaveBlock2Ptr->localTimeOffset, &gLocalTime); } diff --git a/src/wallclock.c b/src/wallclock.c index 28c96fc972..bca008ac24 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -692,13 +692,13 @@ void CB2_StartWallClock(void) DecompressDataWithHeaderVram(gWallClockStart_Tilemap, (u16 *)BG_SCREEN_ADDR(7)); taskId = CreateTask(Task_SetClock_WaitFadeIn, 0); - gTasks[taskId].tHours = 10; - gTasks[taskId].tMinutes = 0; + gTasks[taskId].tHours = gLocalTime.hours; + gTasks[taskId].tMinutes = gLocalTime.minutes; gTasks[taskId].tMoveDir = 0; - gTasks[taskId].tPeriod = 0; + gTasks[taskId].tPeriod = gTasks[taskId].tHours / 12; gTasks[taskId].tMoveSpeed = 0; - gTasks[taskId].tMinuteHandAngle = 0; - gTasks[taskId].tHourHandAngle = 300; + gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; + gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; spriteId = CreateSprite(&sSpriteTemplate_MinuteHand, 120, 80, 1); gSprites[spriteId].sTaskId = taskId;