summaryrefslogtreecommitdiff
path: root/src/play_time.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/play_time.c')
-rw-r--r--src/play_time.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/play_time.c b/src/play_time.c
new file mode 100644
index 0000000..37af5fe
--- /dev/null
+++ b/src/play_time.c
@@ -0,0 +1,93 @@
+#include "global.h"
+#include "play_time.h"
+
+extern struct PlayTimeStruct *gPlayTimeRef;
+extern struct PlayTimeStruct gPlayTime;
+
+extern void sub_809488C(u8 *r0, u8 *r1, u32);
+extern void sub_8094924(u8 *r0, u8 *r1, u32);
+
+void InitializePlayTime(void)
+{
+ gPlayTimeRef = &gPlayTime;
+ ResetPlayTime(&gPlayTime);
+}
+
+struct PlayTimeStruct *GetPlayTime(void)
+{
+ return &gPlayTime;
+}
+
+void ResetPlayTime(struct PlayTimeStruct *Time)
+{
+ Time->frames = 0;
+ Time->seconds = 0;
+ Time->minutes = 0;
+ Time->hours = 0;
+}
+
+void IncrementPlayTime(struct PlayTimeStruct *Time)
+{
+ u16 temp_store16;
+
+ Time->frames++;
+ if(Time->frames <= 59)
+ return;
+ Time->frames = 0;
+
+ Time->seconds++;
+ if(Time->seconds <= 59)
+ return;
+ Time->seconds = 0;
+
+ Time->minutes++;
+ if(Time->minutes <= 59)
+ return;
+ Time->minutes = 0;
+
+ // Casting here for unsigned comparison
+ temp_store16 = Time->hours;
+ if(Time->hours <= 9998)
+ {
+ temp_store16++;
+ Time->hours = temp_store16;
+ }
+ else
+ {
+ Time->seconds = 59;
+ Time->minutes = 59;
+ Time->hours= 9999;
+ }
+}
+
+void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinutes, u32 *outSeconds)
+{
+ if(r0->hours <= 9999)
+ {
+ *outHours = r0->hours;
+ *outMinutes = r0->minutes;
+ *outSeconds = r0->seconds;
+ }
+ else
+ {
+ *outHours = 9999;
+ *outMinutes = 59;
+ *outSeconds = 59;
+ }
+}
+
+void sub_8095044(u8 *r0)
+{
+ sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
+ sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
+ sub_809488C(r0, (&(gPlayTimeRef->minutes)), 6);
+ sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
+}
+
+void sub_8095080(u8 *r0)
+{
+ sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
+ sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
+ sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
+ sub_8094924(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
+}