summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
authorAkira Akashi <rubenru09@aol.com>2021-04-29 14:37:47 +0100
committerGitHub <noreply@github.com>2021-04-29 14:37:47 +0100
commit222b8436bc472ab927b8c8b7df614df65f217bbe (patch)
tree0ee8aac84c054adbc77bab47b9e95eb76e704352 /arm9/src
parenta1d7afef6f0521330f031bf7f2dd886c2ec8412f (diff)
parent88aa75fe3e94f1aac0368b6dbcfaf75614066a8a (diff)
Merge pull request #364 from tgsm/unk_0204B0A0
Decompile unk_0204B0A0
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_0204B0A0.c198
1 files changed, 198 insertions, 0 deletions
diff --git a/arm9/src/unk_0204B0A0.c b/arm9/src/unk_0204B0A0.c
new file mode 100644
index 00000000..15a9111d
--- /dev/null
+++ b/arm9/src/unk_0204B0A0.c
@@ -0,0 +1,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);
+}