summaryrefslogtreecommitdiff
path: root/arm9/src/unk_0204B0A0.c
blob: 15a9111d859e2b4ff99280a2cd243af43b6f7616 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include "global.h"
#include "event_data.h"
#include "unk_0204B0A0.h"
#include "unk_0205FA2C.h"

extern void GF_RTC_CopyDateTime(struct RTCDate* date, struct RTCTime* time);
extern void FUN_02029C08(void*);
extern void FUN_0202B3C4(void*, s32, u32);
extern u8 GF_RTC_GetTimeOfDayByHour(u32 hour);
extern s64 GF_RTC_DateTimeToSec(void);
extern void* FUN_02029AFC(struct SaveBlock2* sav2);
extern void* FUN_02022504(struct SaveBlock2* sav2);
extern void FUN_02025B60(struct SaveBlock2* sav2, s32, BOOL);
extern BOOL FUN_0205F668(struct SaveBlock2* sav2);
extern void FUN_0202A9D0(struct SaveBlock2* sav2, s32);
extern BOOL FUN_0205F618(struct SaveBlock2* sav2, u16);
extern void FUN_0204B3D0(struct UnkSavStruct80*, s32);
extern void FUN_0205F5A4(struct ScriptState* state, u16);
extern s32 FUN_0205F594(struct ScriptState* state);
extern void FUN_0202A988(void*, u32);
extern void* FUN_0202A9B0(struct SaveBlock2* sav2);
extern void FUN_02060344(struct SaveBlock2* sav2, s32);
extern void FUN_0203959C(struct UnkSavStruct80*);
extern void FUN_02025A60(struct SaveBlock2* sav2, s32);
extern struct SaveBlock2* ScriptEnvironment_GetSav2Ptr(struct UnkSavStruct80*);

THUMB_FUNC void FUN_0204B0F8(struct UnkSavStruct80* unk)
{
    RTCDate date;
    RTCTime time;

    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);
    if (rtc_info->field_00 != 0)
    {
        GF_RTC_CopyDateTime(&date, &time);
        FUN_0204B130(unk, rtc_info, &date);
        FUN_0204B158(unk, rtc_info, &date, &time);
    }
}

THUMB_FUNC void FUN_0204B130(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date)
{
    u32 days = (u32)RTC_ConvertDateToDay(date);
    u32 days_since_nitro_epoch = (u32)rtc_info->daysSinceNitroEpoch;

    if (days < days_since_nitro_epoch)
    {
        rtc_info->daysSinceNitroEpoch = (s32)days;
    }
    else if (days > days_since_nitro_epoch)
    {
        FUN_0204B1DC(unk, (s32)(days - days_since_nitro_epoch));
        rtc_info->daysSinceNitroEpoch = (s32)days;
    }
}

THUMB_FUNC void FUN_0204B158(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date, struct RTCTime* time)
{
    s64 unk1 = RTC_ConvertDateTimeToSecond(date, time);
    s64 unk2 = RTC_ConvertDateTimeToSecond(&rtc_info->date, &rtc_info->time);

    if (unk2 > unk1)
    {
        rtc_info->date = *date;
        rtc_info->time = *time;
        return;
    }

    s32 minutes = (s32)((unk1 - unk2) / 60);
    if (minutes > 0)
    {
        FUN_02023884(rtc_info, (u32)minutes);
        FUN_0204B270(unk, minutes, time);

        rtc_info->date = *date;
        rtc_info->time = *time;
    }
}

THUMB_FUNC void FUN_0204B1DC(struct UnkSavStruct80* unk, s32 a1)
{
    struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(unk);
    FUN_02025A60(sav2, a1);
    FUN_0203959C(unk);
    FUN_02060344(unk->saveBlock2, a1);

    void* unk_sav_ptr1 = FUN_0202881C(unk->saveBlock2);
    FUN_02028754(unk_sav_ptr1, (u32)a1);

    void* unk_sav_ptr2 = FUN_0202A9B0(unk->saveBlock2);
    unk_sav_ptr1 = FUN_0202881C(unk->saveBlock2);
    u32 unk1 = FUN_020287A4(unk_sav_ptr1);
    FUN_0202A988(unk_sav_ptr2, unk1);

    struct PlayerParty* party = SavArray_PlayerParty_get(unk->saveBlock2);
    Party_UpdatePokerus(party, a1);

    struct ScriptState* state = SavArray_Flags_get(unk->saveBlock2);
    s32 unk2 = FUN_0205F594(state);

    u16 unk3;
    if (unk2 > a1)
    {
        unk3 = (u16)(unk2 - a1);
    }
    else
    {
        unk3 = 0;
    }

    FUN_0205F5A4(state, unk3);
    FUN_0205F618(unk->saveBlock2, (u16)a1);
    FUN_0205F668(unk->saveBlock2);
    FUN_0206007C(unk->saveBlock2);

    void* unk_sav_ptr3 = FUN_02029AFC(unk->saveBlock2);
    FUN_02029C08(unk_sav_ptr3);
}

THUMB_FUNC void FUN_0204B270(struct UnkSavStruct80* unk, s32 a1, struct RTCTime* time)
{
    FUN_0204B3D0(unk, a1);
    FUN_0202A9D0(unk->saveBlock2, a1);
    BOOL unk_bool = FUN_0204B33C(unk);
    FUN_02025B60(unk->saveBlock2, a1, unk_bool);
    void* unk_sav_ptr = FUN_02022504(unk->saveBlock2);
    FUN_0202B3C4(unk_sav_ptr, a1, time->minute);
}

THUMB_FUNC u32 Script_GetTimeOfDay(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return GF_RTC_GetTimeOfDayByHour(rtc_info->time.hour);
}

THUMB_FUNC u32 Script_GetMonth(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return rtc_info->date.month;
}

THUMB_FUNC u32 Script_GetDay(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return rtc_info->date.day;
}

THUMB_FUNC RTCWeek Script_GetWeekday(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return rtc_info->date.week;
}

THUMB_FUNC u32 Script_GetHour(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return rtc_info->time.hour;
}

THUMB_FUNC u32 Script_GetMinute(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return rtc_info->time.minute;
}

THUMB_FUNC void Script_SavRTC_x24toDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    RTC_ConvertSecondToDateTime(date, time, rtc_info->secondsSinceNitroEpoch);
}

THUMB_FUNC void Script_SavRTC_x2CtoDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    RTC_ConvertSecondToDateTime(date, time, rtc_info->field_2C);
}

THUMB_FUNC void Script_SavRTC_DateTimeTox2C(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    rtc_info->field_2C = GF_RTC_DateTimeToSec();
}

THUMB_FUNC BOOL FUN_0204B33C(struct UnkSavStruct80* unk)
{
    struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2);

    return FUN_02023874(rtc_info);
}