summaryrefslogtreecommitdiff
path: root/src/code_8094F88.c
blob: b9d2828e5ba690d2c6928fc23da6a65c87558051 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "global.h"
#include "time.h"

extern struct PlayTimeStruct *gPlayTimeRef;
extern struct PlayTimeStruct gPlayTime;

extern u8 gUnknown_2038C88;
extern u8 gUnknown_2039288;
extern u32 gUnknown_20392E8;
extern u32 gUnknown_20393C0;
extern u8 *gUnknown_203B480;
extern u8 *gUnknown_203B484;
extern u32 *gUnknown_203B488;
extern u32 *gUnknown_203B48C;


extern void sub_809488C(u32 *r0, u32 *r1, u32);
extern void sub_8094924(u32 *r0, u32 *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(u32 *r0)
{
    sub_809488C(r0, (u32 *)(&(gPlayTimeRef->frames)), 6);
    sub_809488C(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6);
    sub_809488C(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6);
    sub_809488C(r0, (u32 *)(&(gPlayTimeRef->hours)), 14);
}

void sub_8095080(u32 *r0)
{
    sub_8094924(r0, (u32 *)(&(gPlayTimeRef->frames)), 6);
    sub_8094924(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6);
    sub_8094924(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6);
    sub_8094924(r0, (u32 *)(&(gPlayTimeRef->hours)), 14);
}

void sub_80950BC(void)
{
    gUnknown_203B480 = &gUnknown_2038C88;
    gUnknown_203B484 = &gUnknown_2039288;
    gUnknown_203B488 = &gUnknown_20392E8;
    gUnknown_203B48C = &gUnknown_20393C0;
}

u8 *sub_80950F8(void)
{
    return &gUnknown_2038C88;
}

u8 *sub_8095100(void)
{
    return &gUnknown_2039288;
}

u32 *sub_8095108(void)
{
    return &gUnknown_20392E8;
}

u32 *sub_8095110(void)
{
    return &gUnknown_20393C0;
}