diff options
Diffstat (limited to 'src/play_time.c')
-rw-r--r-- | src/play_time.c | 93 |
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); +} |