summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_0204B0A0.s302
-rw-r--r--arm9/src/unk_0204B0A0.c198
-rw-r--r--include/sav_system_info.h2
-rw-r--r--include/unk_0204B0A0.h25
4 files changed, 225 insertions, 302 deletions
diff --git a/arm9/asm/unk_0204B0A0.s b/arm9/asm/unk_0204B0A0.s
deleted file mode 100644
index a78c13d0..00000000
--- a/arm9/asm/unk_0204B0A0.s
+++ /dev/null
@@ -1,302 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_0204B0F8
-FUN_0204B0F8: ; 0x0204B0F8
- push {r4-r5, lr}
- sub sp, #0x1c
- add r5, r0, #0x0
- ldr r0, [r5, #0xc]
- bl Sav2_SysInfo_RTC_get
- add r4, r0, #0x0
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- beq _0204B12A
- add r0, sp, #0xc
- add r1, sp, #0x0
- bl GF_RTC_CopyDateTime
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, sp, #0xc
- bl FUN_0204B130
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, sp, #0xc
- add r3, sp, #0x0
- bl FUN_0204B158
-_0204B12A:
- add sp, #0x1c
- pop {r4-r5, pc}
- .balign 4
-
- thumb_func_start FUN_0204B130
-FUN_0204B130: ; 0x0204B130
- push {r4-r6, lr}
- add r6, r0, #0x0
- add r5, r1, #0x0
- add r0, r2, #0x0
- bl RTC_ConvertDateToDay
- ldr r1, [r5, #0x20]
- add r4, r0, #0x0
- cmp r4, r1
- bhs _0204B148
- str r4, [r5, #0x20]
- pop {r4-r6, pc}
-_0204B148:
- cmp r4, r1
- bls _0204B156
- add r0, r6, #0x0
- sub r1, r4, r1
- bl FUN_0204B1DC
- str r4, [r5, #0x20]
-_0204B156:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_0204B158
-FUN_0204B158: ; 0x0204B158
- push {r4-r7, lr}
- sub sp, #0xc
- add r4, r2, #0x0
- str r0, [sp, #0x0]
- add r6, r3, #0x0
- add r5, r1, #0x0
- add r0, r4, #0x0
- add r1, r6, #0x0
- bl RTC_ConvertDateTimeToSecond
- str r1, [sp, #0x8]
- add r1, r5, #0x0
- add r7, r0, #0x0
- add r0, r5, #0x4
- add r1, #0x14
- bl RTC_ConvertDateTimeToSecond
- add r2, r1, #0x0
- sub r1, r7, r0
- ldr r1, [sp, #0x8]
- sbc r1, r2
- bge _0204B19C
- add r2, r5, #0x4
- ldmia r4!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r4!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r6!, {r0-r1}
- add r5, #0x14
- stmia r5!, {r0-r1}
- ldr r0, [r6, #0x0]
- add sp, #0xc
- str r0, [r5, #0x0]
- pop {r4-r7, pc}
-_0204B19C:
- ldr r1, [sp, #0x8]
- sub r0, r7, r0
- sbc r1, r2
- mov r2, #0x3c
- mov r3, #0x0
- str r1, [sp, #0x8]
- bl _ll_sdiv
- add r7, r0, #0x0
- cmp r7, #0x0
- ble _0204B1D8
- add r0, r5, #0x0
- add r1, r7, #0x0
- bl FUN_02023884
- ldr r0, [sp, #0x0]
- add r1, r7, #0x0
- add r2, r6, #0x0
- bl FUN_0204B270
- add r2, r5, #0x4
- ldmia r4!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r4!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r6!, {r0-r1}
- add r5, #0x14
- stmia r5!, {r0-r1}
- ldr r0, [r6, #0x0]
- str r0, [r5, #0x0]
-_0204B1D8:
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start FUN_0204B1DC
-FUN_0204B1DC: ; 0x0204B1DC
- push {r4-r6, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- bl ScriptEnvironment_GetSav2Ptr
- add r1, r4, #0x0
- bl FUN_02025A60
- add r0, r5, #0x0
- bl FUN_0203959C
- ldr r0, [r5, #0xc]
- add r1, r4, #0x0
- bl FUN_02060344
- ldr r0, [r5, #0xc]
- bl FUN_0202881C
- add r1, r4, #0x0
- bl FUN_02028754
- ldr r0, [r5, #0xc]
- bl FUN_0202A9B0
- add r6, r0, #0x0
- ldr r0, [r5, #0xc]
- bl FUN_0202881C
- bl FUN_020287A4
- add r1, r0, #0x0
- add r0, r6, #0x0
- bl FUN_0202A988
- ldr r0, [r5, #0xc]
- bl SavArray_PlayerParty_get
- add r1, r4, #0x0
- bl Party_UpdatePokerus
- ldr r0, [r5, #0xc]
- bl SavArray_Flags_get
- add r6, r0, #0x0
- bl FUN_0205F594
- cmp r0, r4
- ble _0204B244
- sub r0, r0, r4
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- b _0204B246
-_0204B244:
- mov r1, #0x0
-_0204B246:
- add r0, r6, #0x0
- bl FUN_0205F5A4
- lsl r1, r4, #0x10
- ldr r0, [r5, #0xc]
- lsr r1, r1, #0x10
- bl FUN_0205F618
- ldr r0, [r5, #0xc]
- bl FUN_0205F668
- ldr r0, [r5, #0xc]
- bl FUN_0206007C
- ldr r0, [r5, #0xc]
- bl FUN_02029AFC
- bl FUN_02029C08
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_0204B270
-FUN_0204B270: ; 0x0204B270
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- add r6, r2, #0x0
- bl FUN_0204B3D0
- ldr r0, [r5, #0xc]
- add r1, r4, #0x0
- bl FUN_0202A9D0
- add r0, r5, #0x0
- bl FUN_0204B33C
- add r2, r0, #0x0
- ldr r0, [r5, #0xc]
- add r1, r4, #0x0
- bl FUN_02025B60
- ldr r0, [r5, #0xc]
- bl FUN_02022504
- ldr r2, [r6, #0x4]
- add r1, r4, #0x0
- bl FUN_0202B3C4
- pop {r4-r6, pc}
-
- thumb_func_start Script_GetTimeOfDay
-Script_GetTimeOfDay: ; 0x0204B2A4
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- ldr r0, [r0, #0x14]
- bl GF_RTC_GetTimeOfDayByHour
- pop {r3, pc}
-
- thumb_func_start Script_GetMonth
-Script_GetMonth: ; 0x0204B2B4
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- ldr r0, [r0, #0x8]
- pop {r3, pc}
-
- thumb_func_start Script_GetDay
-Script_GetDay: ; 0x0204B2C0
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- ldr r0, [r0, #0xc]
- pop {r3, pc}
-
- thumb_func_start Script_GetWeekday
-Script_GetWeekday: ; 0x0204B2CC
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- ldr r0, [r0, #0x10]
- pop {r3, pc}
-
- thumb_func_start Script_GetHour
-Script_GetHour: ; 0x0204B2D8
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- ldr r0, [r0, #0x14]
- pop {r3, pc}
-
- thumb_func_start Script_GetMinute
-Script_GetMinute: ; 0x0204B2E4
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- ldr r0, [r0, #0x18]
- pop {r3, pc}
-
- thumb_func_start Script_SavRTC_x24toDateTime
-Script_SavRTC_x24toDateTime: ; 0x0204B2F0
- push {r3-r5, lr}
- ldr r0, [r0, #0xc]
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl Sav2_SysInfo_RTC_get
- add r3, r0, #0x0
- ldr r2, [r3, #0x24]
- ldr r3, [r3, #0x28]
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl RTC_ConvertSecondToDateTime
- pop {r3-r5, pc}
-
- thumb_func_start Script_SavRTC_x2CtoDateTime
-Script_SavRTC_x2CtoDateTime: ; 0x0204B30C
- push {r3-r5, lr}
- ldr r0, [r0, #0xc]
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl Sav2_SysInfo_RTC_get
- add r3, r0, #0x0
- ldr r2, [r3, #0x2c]
- ldr r3, [r3, #0x30]
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl RTC_ConvertSecondToDateTime
- pop {r3-r5, pc}
-
- thumb_func_start Script_SavRTC_DateTimeTox2C
-Script_SavRTC_DateTimeTox2C: ; 0x0204B328
- push {r4, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- add r4, r0, #0x0
- bl GF_RTC_DateTimeToSec
- str r0, [r4, #0x2c]
- str r1, [r4, #0x30]
- pop {r4, pc}
-
- thumb_func_start FUN_0204B33C
-FUN_0204B33C: ; 0x0204B33C
- push {r3, lr}
- ldr r0, [r0, #0xc]
- bl Sav2_SysInfo_RTC_get
- bl FUN_02023874
- pop {r3, pc}
- .balign 4
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);
+}
diff --git a/include/sav_system_info.h b/include/sav_system_info.h
index 696cfe07..bded91f7 100644
--- a/include/sav_system_info.h
+++ b/include/sav_system_info.h
@@ -3,6 +3,8 @@
#include "RTC_api.h"
+struct SaveBlock2;
+
struct UnkSaveStruct_0202376C_sub
{
/* 0x00 */ u32 field_00;
diff --git a/include/unk_0204B0A0.h b/include/unk_0204B0A0.h
new file mode 100644
index 00000000..8d37e354
--- /dev/null
+++ b/include/unk_0204B0A0.h
@@ -0,0 +1,25 @@
+#ifndef POKEDIAMOND_UNK_0204B0A0_H
+#define POKEDIAMOND_UNK_0204B0A0_H
+
+#include "RTC_api.h"
+#include "RTC_convert.h"
+#include "sav_system_info.h"
+#include "script.h"
+
+void FUN_0204B0F8(struct UnkSavStruct80* unk);
+void FUN_0204B130(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date);
+void FUN_0204B158(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date, struct RTCTime* time);
+void FUN_0204B1DC(struct UnkSavStruct80* unk, s32 a1);
+void FUN_0204B270(struct UnkSavStruct80* unk, s32 a1, struct RTCTime* time);
+u32 Script_GetTimeOfDay(struct UnkSavStruct80* unk);
+u32 Script_GetMonth(struct UnkSavStruct80* unk);
+u32 Script_GetDay(struct UnkSavStruct80* unk);
+RTCWeek Script_GetWeekday(struct UnkSavStruct80* unk);
+u32 Script_GetHour(struct UnkSavStruct80* unk);
+u32 Script_GetMinute(struct UnkSavStruct80* unk);
+void Script_SavRTC_x24toDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time);
+void Script_SavRTC_x2CtoDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time);
+void Script_SavRTC_DateTimeTox2C(struct UnkSavStruct80* unk);
+BOOL FUN_0204B33C(struct UnkSavStruct80* unk);
+
+#endif