summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/z_play.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c
index d5bcb5beb..f99979715 100644
--- a/soh/src/code/z_play.c
+++ b/soh/src/code/z_play.c
@@ -7,6 +7,8 @@
#include "../libultraship/ImGuiImpl.h"
#include "soh/frame_interpolation.h"
+#include <time.h>
+
void* D_8012D1F0 = NULL;
//UNK_TYPE D_8012D1F4 = 0; // unused
Input* D_8012D1F8 = NULL;
@@ -1444,6 +1446,18 @@ void Gameplay_Draw(GlobalContext* globalCtx) {
CLOSE_DISPS(gfxCtx);
}
+time_t Gameplay_GetRealTime() {
+ time_t t1, t2;
+ struct tm* tms;
+ time(&t1);
+ tms = localtime(&t1);
+ tms->tm_hour = 0;
+ tms->tm_min = 0;
+ tms->tm_sec = 0;
+ t2 = mktime(tms);
+ return t1 - t2;
+}
+
void Gameplay_Main(GameState* thisx) {
GlobalContext* globalCtx = (GlobalContext*)thisx;
@@ -1487,6 +1501,20 @@ void Gameplay_Main(GameState* thisx) {
if (1 && HREG(63)) {
LOG_NUM("1", 1);
}
+
+ if (CVar_GetS32("gTimeSync", 0)) {
+ const int maxRealDaySeconds = 86400;
+ const int maxInGameDayTicks = 65536;
+
+ int secs = (int)Gameplay_GetRealTime();
+ float percent = (float)secs / (float)maxRealDaySeconds;
+
+ int newIngameTime = maxInGameDayTicks * percent;
+
+ gSaveContext.dayTime = newIngameTime;
+
+ }
+
}
// original name: "Game_play_demo_mode_check"