summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/DGT_hash2.s2
-rw-r--r--arm9/asm/RTC_convert.s344
-rw-r--r--arm9/asm/scrcmd.s18
-rw-r--r--arm9/asm/unk_02011744.s229
-rw-r--r--arm9/asm/unk_0202376C.s220
-rw-r--r--arm9/asm/unk_02025954.s2
-rw-r--r--arm9/asm/unk_020281E0.s2
-rw-r--r--arm9/asm/unk_02028980.s6
-rw-r--r--arm9/asm/unk_02029FB0.s10
-rw-r--r--arm9/asm/unk_0202B374.s2
-rw-r--r--arm9/asm/unk_0202BE98.s4
-rw-r--r--arm9/asm/unk_0202F150.s2
-rw-r--r--arm9/asm/unk_02034FE4.s2
-rw-r--r--arm9/asm/unk_02035068.s2
-rw-r--r--arm9/asm/unk_020377F0.s10
-rw-r--r--arm9/asm/unk_020476CC.s8
-rw-r--r--arm9/asm/unk_020484A8.s4
-rw-r--r--arm9/asm/unk_0204B0A0.s64
-rw-r--r--arm9/asm/unk_0204B9EC.s4
-rw-r--r--arm9/asm/unk_02064E90.s4
-rw-r--r--arm9/asm/unk_0207FD00.s2
-rw-r--r--arm9/asm/unk_02080C38.s2
-rw-r--r--arm9/global.inc56
-rw-r--r--arm9/lib/include/RTC_api.h34
-rw-r--r--arm9/lib/include/RTC_convert.h12
-rw-r--r--arm9/lib/src/RTC_convert.c164
-rw-r--r--arm9/modules/05/asm/mod05_021DB44C.s4
-rw-r--r--arm9/modules/05/asm/module_05.s4
-rw-r--r--arm9/modules/06/asm/module_06.s16
-rw-r--r--arm9/modules/11/asm/module_11_thumb1.s2
-rw-r--r--arm9/modules/21/asm/module_21.s4
-rw-r--r--arm9/modules/25/asm/module_25.s4
-rw-r--r--arm9/modules/40/asm/module_40.s4
-rw-r--r--arm9/modules/45/asm/module_45.s2
-rw-r--r--arm9/modules/52/asm/module_52.s18
-rw-r--r--arm9/modules/83/asm/module_83.s6
-rw-r--r--arm9/src/main.c12
-rw-r--r--arm9/src/pokemon.c11
-rw-r--r--arm9/src/sav_system_info.c122
-rw-r--r--arm9/src/save_arrays.c6
-rw-r--r--include/pokemon.h2
-rw-r--r--include/proto.h3
-rw-r--r--include/sav_system_info.h48
44 files changed, 658 insertions, 821 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 60a43ce5..39d2ed1e 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -84,7 +84,7 @@ Static arm9
Object unk_02022504.o
Object save.o
Object save_arrays.o
- Object unk_0202376C.o
+ Object sav_system_info.o
Object player_data.o
Object unk_02023AC4.o
Object unk_02023C40.o
diff --git a/arm9/asm/DGT_hash2.s b/arm9/asm/DGT_hash2.s
index 1c89ebf9..f309204e 100644
--- a/arm9/asm/DGT_hash2.s
+++ b/arm9/asm/DGT_hash2.s
@@ -10,7 +10,7 @@ Unk_02106A00: ; 0x02106A00
.global Unk_02106A04
Unk_02106A04: ; 0x02106A04
.byte 0x14, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.text
diff --git a/arm9/asm/RTC_convert.s b/arm9/asm/RTC_convert.s
deleted file mode 100644
index 37e8cd0e..00000000
--- a/arm9/asm/RTC_convert.s
+++ /dev/null
@@ -1,344 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern UNK_02106A1C
- .extern UNK_02106A20
-
- .section .data
-
- .global UNK_02106A1C
-UNK_02106A1C: ; 0x02106A1C
- .word 0
-
- .global UNK_02106A20
-UNK_02106A20: ; 0x02106A20
- .word 0 ; Jan
- .word 31 ; Feb
- .word 59 ; Mar
- .word 90 ; Apr
- .word 120 ; May
- .word 151 ; Jun
- .word 181 ; Jul
- .word 212 ; Aug
- .word 243 ; Sep
- .word 273 ; Oct
- .word 304 ; Nov
- .word 334 ; Dec
-
- .text
-
- arm_func_start RTC_GetDayOfWeek
-RTC_GetDayOfWeek: ; 0x020D6248
- stmdb sp!, {r4-r6,lr}
- ldr r1, [r0, #0x4]
- ldr r2, [r0, #0x0]
- sub r3, r1, #0x2
- cmp r3, #0x1
- add lr, r2, #0x7d0
- ldr r4, _020D630C ; =0x51EB851F
- sublt lr, lr, #0x1
- ldr r12, [r0, #0x8]
- smull r0, r2, r4, lr
- addlt r3, r3, #0xc
- mov r1, #0x1a
- mul r0, r3, r1
- smull r1, r3, r4, lr
- ldr r5, _020D6310 ; =0x66666667
- sub r0, r0, #0x2
- smull r4, r1, r5, r0
- mov r4, lr, lsr #0x1f
- mov r2, r2, asr #0x5
- mov r3, r3, asr #0x5
- add r3, r4, r3
- ldr r5, _020D6314 ; =0x00000064
- add r2, r4, r2
- smull r2, r4, r5, r2
- sub r2, lr, r2
- mov r1, r1, asr #0x2
- mov r0, r0, lsr #0x1f
- add r1, r0, r1
- mov r4, r2, asr #0x1
- add r0, r12, r1
- add r1, r2, r4, lsr #0x1e
- add r2, r2, r0
- mov r6, r3, asr #0x1
- add r0, r3, r6, lsr #0x1e
- add r1, r2, r1, asr #0x2
- add r1, r1, r0, asr #0x2
- mov r0, #0x5
- mla r4, r3, r0, r1
- ldr r3, _020D6318 ; =0x92492493
- mov r1, r4, lsr #0x1f
- smull r2, r0, r3, r4
- add r0, r4, r0
- mov r0, r0, asr #0x2
- ldr r2, _020D631C ; =0x00000007
- add r0, r1, r0
- smull r0, r1, r2, r0
- sub r0, r4, r0
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D630C: .word 0x51EB851F
-_020D6310: .word 0x66666667
-_020D6314: .word 0x00000064
-_020D6318: .word 0x92492493
-_020D631C: .word 0x00000007
-
- arm_func_start RTC_ConvertSecondToDateTime
-RTC_ConvertSecondToDateTime: ; 0x020D6320
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r2
- mov r12, #0x0
- mov r4, r3
- subs r2, r5, r12
- sbcs r2, r4, r12
- mov r7, r0
- mov r6, r1
- movlt r5, r12
- movlt r4, r12
- blt _020D6364
- ldr r1, _020D63B0 ; =0xBC19137F
- subs r0, r1, r5
- sbcs r0, r12, r4
- movlt r5, r1
- movlt r4, r12
-_020D6364:
- ldr r2, _020D63B4 ; =0x00015180
- mov r0, r5
- mov r1, r4
- mov r3, #0x0
- bl _ll_mod
- mov r1, r0
- mov r0, r6
- bl RTCi_ConvertSecondToTime
- ldr r2, _020D63B4 ; =0x00015180
- mov r0, r5
- mov r1, r4
- mov r3, #0x0
- bl _ll_sdiv
- mov r1, r0
- mov r0, r7
- bl RTC_ConvertDayToDate
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020D63B0: .word 0xBC19137F
-_020D63B4: .word 0x00015180
-
- arm_func_start RTCi_ConvertSecondToTime
-RTCi_ConvertSecondToTime: ; 0x020D63B8
- stmdb sp!, {r4-r6,lr}
- ldr r2, _020D6448 ; =0x0001517F
- cmp r1, #0x0
- movlt r1, #0x0
- cmp r1, r2
- ldr ip, _020D644C ; =0x88888889
- movgt r1, r2
- smull r2, r3, r12, r1
- smull r2, lr, r12, r1
- ldr r5, _020D6450 ; =0x91A2B3C5
- add r3, r1, r3
- smull r4, r2, r5, r1
- mov r5, r1, lsr #0x1f
- mov r3, r3, asr #0x5
- add r3, r5, r3
- smull r4, r6, r12, r3
- add lr, r1, lr
- mov lr, lr, asr #0x5
- add r6, r3, r6
- add r2, r1, r2
- ldr r4, _020D6454 ; =0x0000003C
- add lr, r5, lr
- smull r12, lr, r4, lr
- sub lr, r1, r12
- mov r2, r2, asr #0xb
- mov r6, r6, asr #0x5
- mov r1, r3, lsr #0x1f
- add r6, r1, r6
- smull r1, r12, r4, r6
- str lr, [r0, #0x8]
- sub r6, r3, r1
- str r6, [r0, #0x4]
- add r2, r5, r2
- str r2, [r0, #0x0]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D6448: .word 0x0001517F
-_020D644C: .word 0x88888889
-_020D6450: .word 0x91A2B3C5
-_020D6454: .word 0x0000003C
-
- arm_func_start RTC_ConvertDayToDate
-RTC_ConvertDayToDate: ; 0x020D6458
- stmdb sp!, {r4,lr}
- ldr r2, _020D6560 ; =0x00008EAC
- cmp r1, #0x0
- movlt r1, #0x0
- cmp r1, r2
- movgt r1, r2
- ldr r3, _020D6564 ; =0x92492493
- add lr, r1, #0x6
- smull r2, r4, r3, lr
- add r4, lr, r4
- mov r4, r4, asr #0x2
- mov r2, lr, lsr #0x1f
- ldr ip, _020D6568 ; =0x00000007
- add r4, r2, r4
- smull r2, r3, r12, r4
- sub r4, lr, r2
- ldr r2, _020D656C ; =0x0000016D
- ldr r3, _020D6570 ; =0x0000016E
- str r4, [r0, #0xc]
- mov lr, #0x0
-_020D64A8:
- ands r12, lr, #0x3
- moveq r12, r3
- movne r12, r2
- mov r4, r1
- subs r1, r1, r12
- movmi r1, r4
- bmi _020D64D0
- add lr, lr, #0x1
- cmp lr, #0x63
- blo _020D64A8
-_020D64D0:
- ldr r2, _020D656C ; =0x0000016D
- str lr, [r0, #0x0]
- cmp r1, r2
- movgt r1, r2
- ands r2, lr, #0x3
- bne _020D6518
- cmp r1, #0x3c
- bge _020D6514
- cmp r1, #0x1f
- movlt r2, #0x1
- subge r1, r1, #0x1f
- movge r2, #0x2
- str r2, [r0, #0x4]
- add r1, r1, #0x1
- str r1, [r0, #0x8]
- ldmia sp!, {r4,lr}
- bx lr
-_020D6514:
- sub r1, r1, #0x1
-_020D6518:
- ldr r3, _020D6574 ; =UNK_02106A20
- mov r4, #0xb
-_020D6520:
- ldr r2, [r3, r4, lsl #0x2]
- mov r12, r4, lsl #0x2
- cmp r1, r2
- blt _020D6550
- add r2, r4, #0x1
- str r2, [r0, #0x4]
- ldr r2, [r3, r12]
- sub r1, r1, r2
- add r1, r1, #0x1
- str r1, [r0, #0x8]
- ldmia sp!, {r4,lr}
- bx lr
-_020D6550:
- subs r4, r4, #0x1
- bpl _020D6520
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020D6560: .word 0x00008EAC
-_020D6564: .word 0x92492493
-_020D6568: .word 0x00000007
-_020D656C: .word 0x0000016D
-_020D6570: .word 0x0000016E
-_020D6574: .word UNK_02106A20
-
- arm_func_start RTC_ConvertDateTimeToSecond
-RTC_ConvertDateTimeToSecond: ; 0x020D6578
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- bl RTC_ConvertDateToDay
- mov r4, r0
- mvn r0, #0x0
- cmp r4, r0
- addeq sp, sp, #0x4
- moveq r1, r0
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- mov r0, r5
- bl RTCi_ConvertTimeToSecond
- mvn r2, #0x0
- cmp r0, r2
- moveq r1, r2
- beq _020D65DC
- ldr r1, _020D65EC ; =0x00015180
- mov r2, #0x0
- umull r12, r3, r4, r1
- mla r3, r4, r2, r3
- mov r2, r4, asr #0x1f
- mla r3, r2, r1, r3
- adds r2, r0, r12
- adc r1, r3, r0, asr #0x1f
-_020D65DC:
- mov r0, r2
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020D65EC: .word 0x00015180
-
- arm_func_start RTCi_ConvertTimeToSecond
-RTCi_ConvertTimeToSecond: ; 0x020D65F0
- ldr r3, [r0, #0x4]
- ldr r2, [r0, #0x0]
- mov r1, #0x3c
- mla r3, r2, r1, r3
- ldr r0, [r0, #0x8]
- mla r0, r3, r1, r0
- bx lr
-
- arm_func_start RTC_ConvertDateToDay
-RTC_ConvertDateToDay: ; 0x020D660C
- ldr r3, [r0, #0x0]
- cmp r3, #0x64
- bhs _020D665C
- ldr r2, [r0, #0x4]
- cmp r2, #0x1
- blo _020D665C
- cmp r2, #0xc
- bhi _020D665C
- ldr r1, [r0, #0x8]
- cmp r1, #0x1
- blo _020D665C
- cmp r1, #0x1f
- bhi _020D665C
- ldr r0, [r0, #0xc]
- cmp r0, #0x7
- bge _020D665C
- cmp r2, #0x1
- blo _020D665C
- cmp r2, #0xc
- bls _020D6664
-_020D665C:
- mvn r0, #0x0
- bx lr
-_020D6664:
- ldr r0, _020D6698 ; =UNK_02106A1C
- sub r1, r1, #0x1
- ldr r0, [r0, r2, lsl #0x2]
- cmp r2, #0x3
- add r2, r1, r0
- blo _020D6684
- ands r0, r3, #0x3
- addeq r2, r2, #0x1
-_020D6684:
- ldr r0, _020D669C ; =0x0000016D
- add r1, r3, #0x3
- mla r0, r3, r0, r2
- add r0, r0, r1, lsr #0x2
- bx lr
- .balign 4
-_020D6698: .word UNK_02106A1C
-_020D669C: .word 0x0000016D
diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s
index 62f32eeb..9e33ba2c 100644
--- a/arm9/asm/scrcmd.s
+++ b/arm9/asm/scrcmd.s
@@ -8801,7 +8801,7 @@ FUN_0203DF84: ; 0x0203DF84
add r4, #0x80
add r5, r0, #0x0
ldr r0, [r4, #0x0]
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -10138,7 +10138,7 @@ FUN_0203EA68: ; 0x0203EA68
bl GetVarPointer
add r4, r0, #0x0
add r0, sp, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
ldr r0, [sp, #0xc]
strh r0, [r4, #0x0]
mov r0, #0x0
@@ -10890,7 +10890,7 @@ FUN_0203F058: ; 0x0203F058
add r4, #0x80
add r5, r0, #0x0
ldr r0, [r4, #0x0]
- bl FUN_0204B2D8
+ bl Script_GetHour
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -11409,19 +11409,19 @@ FUN_0203F484: ; 0x0203F484
ldr r5, [r5, #0x0]
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02023788
+ bl Sav2_SysInfo_get
add r7, r0, #0x0
- bl FUN_02023818
+ bl Sav2_SysInfo_GetBirthMonth
add r6, r0, #0x0
add r0, r5, #0x0
- bl FUN_0204B2B4
+ bl Script_GetMonth
cmp r6, r0
bne _0203F4CE
add r0, r7, #0x0
- bl FUN_0202381C
+ bl Sav2_SysInfo_GetBirthDay
add r6, r0, #0x0
add r0, r5, #0x0
- bl FUN_0204B2C0
+ bl Script_GetDay
cmp r6, r0
bne _0203F4CE
mov r0, #0x1
@@ -12239,7 +12239,7 @@ FUN_0203FB4C: ; 0x0203FB4C
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02023788
+ bl Sav2_SysInfo_get
mov r1, #0x1
bl FUN_02023828
mov r0, #0x0
diff --git a/arm9/asm/unk_02011744.s b/arm9/asm/unk_02011744.s
index d8202d2d..0f9f871b 100644
--- a/arm9/asm/unk_02011744.s
+++ b/arm9/asm/unk_02011744.s
@@ -7,16 +7,23 @@
.global UNK_020ED398
UNK_020ED398: ; 0x020ED398
- .byte 0x08
-
- .global UNK_020ED399
-UNK_020ED399: ; 0x020ED399
- .byte 0x08, 0x08, 0x04, 0x04, 0x08, 0x04, 0x04, 0x04, 0x02, 0x04, 0x01, 0x02, 0x04, 0x02, 0x02, 0x02
- .byte 0x01, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01
+ .byte 0x08, 0x08
+ .byte 0x08, 0x04
+ .byte 0x04, 0x08
+ .byte 0x04, 0x04
+ .byte 0x04, 0x02
+ .byte 0x04, 0x01
+ .byte 0x02, 0x04
+ .byte 0x02, 0x02
+ .byte 0x02, 0x01
+ .byte 0x01, 0x04
+ .byte 0x01, 0x02
+ .byte 0x01, 0x01
.global UNK_020ED3B0
UNK_020ED3B0: ; 0x020ED3B0
- .byte 0x47, 0x01, 0x00, 0x00, 0xEF, 0x01, 0x00, 0x00
+ .word 0x00000147
+ .word 0x000001EF
.global UNK_020ED3B8
UNK_020ED3B8: ; 0x020ED3B8
@@ -44,37 +51,49 @@ UNK_020ED438: ; 0x020ED438
.byte 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.byte 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
- .global UNK_020ED498
-UNK_020ED498: ; 0x020ED498
- .byte 0x17, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00
-
- .global UNK_020ED4A4
-UNK_020ED4A4: ; 0x020ED4A4
- .byte 0x63, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_020ED4B2
-UNK_020ED4B2: ; 0x020ED4B2
- .byte 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3B, 0x00, 0x5A, 0x00, 0x78, 0x00, 0x97, 0x00, 0xB5, 0x00
- .byte 0xD4, 0x00, 0xF3, 0x00, 0x11, 0x01, 0x30, 0x01, 0x4E, 0x01
-
- .global UNK_020ED4CC
-UNK_020ED4CC: ; 0x020ED4CC
- .byte 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
- .byte 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03
+ .global sMaxTime
+sMaxTime: ; 0x020ED498
+ ; 23:59:59
+ .word 23, 59, 59
+
+ .global sMaxDate
+sMaxDate: ; 0x020ED4A4
+ ; 31 December, 2099
+ .word 99, 12, 31, 0
+
+ .global sGF_DaysPerMonth
+sGF_DaysPerMonth: ; 0x020ED4B2
+ .short 0
+ .short 31
+ .short 59
+ .short 90
+ .short 120
+ .short 151
+ .short 181
+ .short 212
+ .short 243
+ .short 273
+ .short 304
+ .short 334
+
+ .global sTimeOfDayByHour
+sTimeOfDayByHour: ; 0x020ED4CC
+ ; 00:00 - 03:59
+ .byte 0x04, 0x04, 0x04, 0x04
+ ; 04:00 - 09:59
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ; 10:00 - 16:59
+ .byte 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
+ ; 17:00 - 19:59
+ .byte 0x02, 0x02, 0x02
+ ; 20:00 - 23:59
+ .byte 0x03, 0x03, 0x03, 0x03
.section .bss
- .global UNK_021C4808
-UNK_021C4808: ; 0x021C4808
- .space 0x10
-
- .global UNK_021C4818
-UNK_021C4818: ; 0x021C4818
- .space 0x10
-
- .global UNK_021C4828
-UNK_021C4828: ; 0x021C4828
- .space 0x28
+ .global sGFRTCWork
+sGFRTCWork: ; 0x021C4808
+ .space 0x48
.text
@@ -748,7 +767,7 @@ FUN_02011BF4: ; 0x02011BF4
ldr r1, _02011C9C ; =UNK_020ED398
str r0, [r4, #0x0]
ldr r0, [r5, #0x0]
- ldr r6, _02011CA0 ; =UNK_020ED399
+ ldr r6, _02011CA0 ; =UNK_020ED398 + 1
str r0, [r4, #0x4]
ldr r0, [r4, #0x8]
ldr r2, [r5, #0x8]
@@ -787,7 +806,7 @@ _02011C5C:
ldr r0, [r4, #0x8]
ldr r2, [r5, #0x0]
lsl r1, r0, #0x1
- ldr r0, _02011CA0 ; =UNK_020ED399
+ ldr r0, _02011CA0 ; =UNK_020ED398 + 1
ldrb r0, [r0, r1]
add r0, r2, r0
str r0, [r5, #0x0]
@@ -818,7 +837,7 @@ _02011C96:
pop {r4-r6, pc}
nop
_02011C9C: .word UNK_020ED398
-_02011CA0: .word UNK_020ED399
+_02011CA0: .word UNK_020ED398 + 1
thumb_func_start FUN_02011CA4
FUN_02011CA4: ; 0x02011CA4
@@ -963,7 +982,7 @@ FUN_02011DA0: ; 0x02011DA0
ldr r0, _02011E44 ; =UNK_020ED398
ldrb r0, [r0, r1]
str r0, [sp, #0x10]
- ldr r0, _02011E48 ; =UNK_020ED399
+ ldr r0, _02011E48 ; =UNK_020ED398 + 1
ldrb r0, [r0, r1]
ldr r1, [sp, #0x10]
add r4, r1, #0x0
@@ -1034,7 +1053,7 @@ _02011E1A:
pop {r4-r7, pc}
.balign 4
_02011E44: .word UNK_020ED398
-_02011E48: .word UNK_020ED399
+_02011E48: .word UNK_020ED398 + 1
_02011E4C: .word 0x04001000
_02011E50: .word 0x00300010
_02011E54: .word 0x0000FFFF
@@ -2028,11 +2047,11 @@ FUN_02012560: ; 0x02012560
.balign 4
_02012598: .word UNK_020ED3C8
- thumb_func_start FUN_0201259C
-FUN_0201259C: ; 0x0201259C
+ thumb_func_start GF_InitRTCWork
+GF_InitRTCWork: ; 0x0201259C
push {r3, lr}
bl RTC_Init
- ldr r3, _020125CC ; =UNK_021C4808
+ ldr r3, _020125CC ; =sGFRTCWork
mov r0, #0x0
add r2, r3, #0x0
add r1, r0, #0x0
@@ -2045,21 +2064,21 @@ FUN_0201259C: ; 0x0201259C
stmia r2!, {r0-r1}
stmia r2!, {r0-r1}
stmia r2!, {r0-r1}
- ldr r1, _020125D0 ; =UNK_021C4808
+ ldr r1, _020125D0 ; =sGFRTCWork
str r0, [r1, #0x0]
str r0, [r1, #0x4]
str r0, [r1, #0x8]
add r0, r3, #0x0
- bl FUN_02012634
+ bl GF_RTC_GetDateTime
pop {r3, pc}
.balign 4
-_020125CC: .word UNK_021C4808
-_020125D0: .word UNK_021C4808
+_020125CC: .word sGFRTCWork
+_020125D0: .word sGFRTCWork
- thumb_func_start FUN_020125D4
-FUN_020125D4: ; 0x020125D4
+ thumb_func_start GF_RTC_UpdateOnFrame
+GF_RTC_UpdateOnFrame: ; 0x020125D4
push {r3, lr}
- ldr r0, _020125F4 ; =UNK_021C4808
+ ldr r0, _020125F4 ; =sGFRTCWork
ldr r1, [r0, #0x4]
cmp r1, #0x0
bne _020125F2
@@ -2070,16 +2089,16 @@ FUN_020125D4: ; 0x020125D4
ble _020125F2
mov r1, #0x0
str r1, [r0, #0x8]
- ldr r0, _020125F8 ; =UNK_021C4808
- bl FUN_02012634
+ ldr r0, _020125F8 ; =sGFRTCWork
+ bl GF_RTC_GetDateTime
_020125F2:
pop {r3, pc}
.balign 4
-_020125F4: .word UNK_021C4808
-_020125F8: .word UNK_021C4808
+_020125F4: .word sGFRTCWork
+_020125F8: .word sGFRTCWork
- thumb_func_start FUN_020125FC
-FUN_020125FC: ; 0x020125FC
+ thumb_func_start GF_RTC_GetDateTime_Callback
+GF_RTC_GetDateTime_Callback: ; 0x020125FC
push {r4, lr}
add r4, r1, #0x0
str r0, [r4, #0xc]
@@ -2109,15 +2128,15 @@ _0201260A:
str r0, [r4, #0x4]
pop {r4, pc}
- thumb_func_start FUN_02012634
-FUN_02012634: ; 0x02012634
+ thumb_func_start GF_RTC_GetDateTime
+GF_RTC_GetDateTime: ; 0x02012634
push {r4, lr}
add r4, r0, #0x0
mov r0, #0x1
str r0, [r4, #0x4]
add r0, r4, #0x0
add r1, r4, #0x0
- ldr r2, _02012658 ; =FUN_020125FC
+ ldr r2, _02012658 ; =GF_RTC_GetDateTime_Callback
add r0, #0x2c
add r1, #0x3c
add r3, r4, #0x0
@@ -2129,24 +2148,24 @@ FUN_02012634: ; 0x02012634
_02012656:
pop {r4, pc}
.balign 4
-_02012658: .word FUN_020125FC
+_02012658: .word GF_RTC_GetDateTime_Callback
- thumb_func_start FUN_0201265C
-FUN_0201265C: ; 0x0201265C
+ thumb_func_start GF_RTC_CopyDateTime
+GF_RTC_CopyDateTime: ; 0x0201265C
push {r3-r5, lr}
add r5, r0, #0x0
- ldr r0, _02012684 ; =UNK_021C4808
+ ldr r0, _02012684 ; =sGFRTCWork
add r4, r1, #0x0
ldr r0, [r0, #0x0]
cmp r0, #0x1
beq _0201266E
bl ErrorHandling
_0201266E:
- ldr r2, _02012688 ; =UNK_021C4818
+ ldr r2, _02012688 ; =sGFRTCWork + 16
ldmia r2!, {r0-r1}
stmia r5!, {r0-r1}
ldmia r2!, {r0-r1}
- ldr r2, _0201268C ; =UNK_021C4828
+ ldr r2, _0201268C ; =sGFRTCWork + 32
stmia r5!, {r0-r1}
ldmia r2!, {r0-r1}
stmia r4!, {r0-r1}
@@ -2154,54 +2173,54 @@ _0201266E:
str r0, [r4, #0x0]
pop {r3-r5, pc}
.balign 4
-_02012684: .word UNK_021C4808
-_02012688: .word UNK_021C4818
-_0201268C: .word UNK_021C4828
+_02012684: .word sGFRTCWork
+_02012688: .word sGFRTCWork + 16
+_0201268C: .word sGFRTCWork + 32
- thumb_func_start FUN_02012690
-FUN_02012690: ; 0x02012690
+ thumb_func_start GF_RTC_CopyTime
+GF_RTC_CopyTime: ; 0x02012690
push {r4, lr}
add r4, r0, #0x0
- ldr r0, _020126AC ; =UNK_021C4808
+ ldr r0, _020126AC ; =sGFRTCWork
ldr r0, [r0, #0x0]
cmp r0, #0x1
beq _020126A0
bl ErrorHandling
_020126A0:
- ldr r2, _020126B0 ; =UNK_021C4828
+ ldr r2, _020126B0 ; =sGFRTCWork + 32
ldmia r2!, {r0-r1}
stmia r4!, {r0-r1}
ldr r0, [r2, #0x0]
str r0, [r4, #0x0]
pop {r4, pc}
.balign 4
-_020126AC: .word UNK_021C4808
-_020126B0: .word UNK_021C4828
+_020126AC: .word sGFRTCWork
+_020126B0: .word sGFRTCWork + 32
- thumb_func_start FUN_020126B4
-FUN_020126B4: ; 0x020126B4
+ thumb_func_start GF_RTC_CopyDate
+GF_RTC_CopyDate: ; 0x020126B4
push {r4, lr}
add r4, r0, #0x0
- ldr r0, _020126D0 ; =UNK_021C4808
+ ldr r0, _020126D0 ; =sGFRTCWork
ldr r0, [r0, #0x0]
cmp r0, #0x1
beq _020126C4
bl ErrorHandling
_020126C4:
- ldr r2, _020126D4 ; =UNK_021C4818
+ ldr r2, _020126D4 ; =sGFRTCWork + 16
ldmia r2!, {r0-r1}
stmia r4!, {r0-r1}
ldmia r2!, {r0-r1}
stmia r4!, {r0-r1}
pop {r4, pc}
.balign 4
-_020126D0: .word UNK_021C4808
-_020126D4: .word UNK_021C4818
+_020126D0: .word sGFRTCWork
+_020126D4: .word sGFRTCWork + 16
- thumb_func_start FUN_020126D8
-FUN_020126D8: ; 0x020126D8
+ thumb_func_start GF_RTC_TimeToSec
+GF_RTC_TimeToSec: ; 0x020126D8
push {r3-r4}
- ldr r4, _020126F8 ; =UNK_021C4828
+ ldr r4, _020126F8 ; =sGFRTCWork + 32
mov r0, #0x3c
ldr r1, [r4, #0x4]
ldr r3, [r4, #0x8]
@@ -2216,18 +2235,18 @@ FUN_020126D8: ; 0x020126D8
pop {r3-r4}
bx lr
nop
-_020126F8: .word UNK_021C4828
+_020126F8: .word sGFRTCWork + 32
- thumb_func_start FUN_020126FC
-FUN_020126FC: ; 0x020126FC
+ thumb_func_start GF_RTC_DateTimeToSec
+GF_RTC_DateTimeToSec: ; 0x020126FC
ldr r3, _02012704 ; =RTC_ConvertDateTimeToSecond
- ldr r0, _02012708 ; =UNK_021C4818
- ldr r1, _0201270C ; =UNK_021C4828
+ ldr r0, _02012708 ; =sGFRTCWork + 16
+ ldr r1, _0201270C ; =sGFRTCWork + 32
bx r3
.balign 4
_02012704: .word RTC_ConvertDateTimeToSecond
-_02012708: .word UNK_021C4818
-_0201270C: .word UNK_021C4828
+_02012708: .word sGFRTCWork + 16
+_0201270C: .word sGFRTCWork + 32
thumb_func_start FUN_02012710
FUN_02012710: ; 0x02012710
@@ -2235,7 +2254,7 @@ FUN_02012710: ; 0x02012710
sub sp, #0x10
add r5, r0, #0x0
ldr r2, [r5, #0x4]
- ldr r0, _02012778 ; =UNK_020ED4B2
+ ldr r0, _02012778 ; =sGF_DaysPerMonth - 2
lsl r1, r2, #0x1
ldrh r0, [r0, r1]
ldr r3, [r5, #0x8]
@@ -2283,12 +2302,12 @@ _02012752:
add sp, #0x10
pop {r4-r6, pc}
.balign 4
-_02012778: .word UNK_020ED4B2
+_02012778: .word sGF_DaysPerMonth - 2
thumb_func_start IsNighttime
IsNighttime: ; 0x0201277C
push {r3, lr}
- bl FUN_02012794
+ bl GF_RTC_GetTimeOfDay
cmp r0, #0x3
beq _0201278A
cmp r0, #0x4
@@ -2301,19 +2320,19 @@ _0201278E:
pop {r3, pc}
.balign 4
- thumb_func_start FUN_02012794
-FUN_02012794: ; 0x02012794
+ thumb_func_start GF_RTC_GetTimeOfDay
+GF_RTC_GetTimeOfDay: ; 0x02012794
push {lr}
sub sp, #0xc
add r0, sp, #0x0
- bl FUN_02012690
+ bl GF_RTC_CopyTime
ldr r0, [sp, #0x0]
- bl FUN_020127A8
+ bl GF_RTC_GetTimeOfDayByHour
add sp, #0xc
pop {pc}
- thumb_func_start FUN_020127A8
-FUN_020127A8: ; 0x020127A8
+ thumb_func_start GF_RTC_GetTimeOfDayByHour
+GF_RTC_GetTimeOfDayByHour: ; 0x020127A8
push {r4, lr}
add r4, r0, #0x0
bmi _020127B2
@@ -2322,18 +2341,18 @@ FUN_020127A8: ; 0x020127A8
_020127B2:
bl ErrorHandling
_020127B6:
- ldr r0, _020127BC ; =UNK_020ED4CC
+ ldr r0, _020127BC ; =sTimeOfDayByHour
ldrb r0, [r0, r4]
pop {r4, pc}
.balign 4
-_020127BC: .word UNK_020ED4CC
+_020127BC: .word sTimeOfDayByHour
thumb_func_start FUN_020127C0
FUN_020127C0: ; 0x020127C0
push {r4-r7, lr}
sub sp, #0x24
add r6, r3, #0x0
- ldr r3, _0201282C ; =UNK_020ED4A4
+ ldr r3, _0201282C ; =sMaxDate
add r4, r0, #0x0
add r7, r1, #0x0
add r5, r2, #0x0
@@ -2343,7 +2362,7 @@ FUN_020127C0: ; 0x020127C0
stmia r2!, {r0-r1}
ldmia r3!, {r0-r1}
stmia r2!, {r0-r1}
- ldr r3, _02012830 ; =UNK_020ED498
+ ldr r3, _02012830 ; =sMaxTime
add r2, sp, #0x8
ldmia r3!, {r0-r1}
str r2, [sp, #0x4]
@@ -2384,8 +2403,8 @@ _02012818:
add sp, #0x24
pop {r4-r7, pc}
nop
-_0201282C: .word UNK_020ED4A4
-_02012830: .word UNK_020ED498
+_0201282C: .word sMaxDate
+_02012830: .word sMaxTime
_02012834: .word 0xBC19137F
thumb_func_start ListMenu_ctor
diff --git a/arm9/asm/unk_0202376C.s b/arm9/asm/unk_0202376C.s
deleted file mode 100644
index ef333080..00000000
--- a/arm9/asm/unk_0202376C.s
+++ /dev/null
@@ -1,220 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_0202376C
-FUN_0202376C: ; 0x0202376C
- mov r0, #0x5c
- bx lr
-
- thumb_func_start FUN_02023770
-FUN_02023770: ; 0x02023770
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x0
- add r1, r4, #0x0
- mov r2, #0x5c
- bl MIi_CpuClearFast
- add r4, #0x10
- add r0, r4, #0x0
- bl FUN_02023840
- pop {r4, pc}
-
- thumb_func_start FUN_02023788
-FUN_02023788: ; 0x02023788
- ldr r3, _02023790 ; =SavArray_get
- mov r1, #0x0
- bx r3
- nop
-_02023790: .word SavArray_get
-
- thumb_func_start FUN_02023794
-FUN_02023794: ; 0x02023794
- push {r3, lr}
- bl FUN_02023788
- add r0, #0x10
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_020237A0
-FUN_020237A0: ; 0x020237A0
- push {r4, lr}
- sub sp, #0x50
- add r4, r0, #0x0
- bl OS_GetOwnerRtcOffset
- str r0, [r4, #0x0]
- add r0, r4, #0x0
- add r0, #0x8
- str r1, [r4, #0x4]
- bl OS_GetMacAddress
- add r0, sp, #0x0
- bl OS_GetOwnerInfo
- add r0, sp, #0x0
- ldrb r1, [r0, #0x2]
- strb r1, [r4, #0xe]
- ldrb r0, [r0, #0x3]
- strb r0, [r4, #0xf]
- add sp, #0x50
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020237CC
-FUN_020237CC: ; 0x020237CC
- push {r4, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- add r0, sp, #0x0
- bl OS_GetMacAddress
- mov r2, #0x0
- add r3, sp, #0x0
-_020237DC:
- add r0, r4, r2
- ldrb r1, [r3, #0x0]
- ldrb r0, [r0, #0x8]
- cmp r1, r0
- beq _020237EC
- add sp, #0x8
- mov r0, #0x0
- pop {r4, pc}
-_020237EC:
- add r2, r2, #0x1
- add r3, r3, #0x1
- cmp r2, #0x6
- blt _020237DC
- mov r0, #0x1
- add sp, #0x8
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020237FC
-FUN_020237FC: ; 0x020237FC
- push {r4, lr}
- add r4, r0, #0x0
- bl OS_GetOwnerRtcOffset
- ldr r3, [r4, #0x0]
- ldr r2, [r4, #0x4]
- eor r0, r3
- eor r1, r2
- orr r0, r1
- bne _02023814
- mov r0, #0x1
- pop {r4, pc}
-_02023814:
- mov r0, #0x0
- pop {r4, pc}
-
- thumb_func_start FUN_02023818
-FUN_02023818: ; 0x02023818
- ldrb r0, [r0, #0xe]
- bx lr
-
- thumb_func_start FUN_0202381C
-FUN_0202381C: ; 0x0202381C
- ldrb r0, [r0, #0xf]
- bx lr
-
- thumb_func_start FUN_02023820
-FUN_02023820: ; 0x02023820
- add r0, #0x48
- ldrb r0, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023828
-FUN_02023828: ; 0x02023828
- add r0, #0x48
- strb r1, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023830
-FUN_02023830: ; 0x02023830
- ldr r0, [r0, #0x4c]
- bx lr
-
- thumb_func_start FUN_02023834
-FUN_02023834: ; 0x02023834
- ldr r2, [r0, #0x4c]
- cmp r2, #0x0
- bne _0202383C
- str r1, [r0, #0x4c]
-_0202383C:
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023840
-FUN_02023840: ; 0x02023840
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x1
- add r1, r4, #0x0
- str r0, [r4, #0x0]
- add r0, r4, #0x4
- add r1, #0x14
- bl FUN_0201265C
- add r0, r4, #0x4
- bl RTC_ConvertDateToDay
- add r1, r4, #0x0
- str r0, [r4, #0x20]
- add r0, r4, #0x4
- add r1, #0x14
- bl RTC_ConvertDateTimeToSecond
- str r0, [r4, #0x24]
- str r1, [r4, #0x28]
- mov r0, #0x0
- str r0, [r4, #0x2c]
- str r0, [r4, #0x30]
- str r0, [r4, #0x34]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02023874
-FUN_02023874: ; 0x02023874
- ldr r0, [r0, #0x34]
- cmp r0, #0x0
- beq _0202387E
- mov r0, #0x1
- bx lr
-_0202387E:
- mov r0, #0x0
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023884
-FUN_02023884: ; 0x02023884
- mov r2, #0x5a
- ldr r3, [r0, #0x34]
- lsl r2, r2, #0x4
- cmp r3, r2
- bls _02023890
- str r2, [r0, #0x34]
-_02023890:
- ldr r2, [r0, #0x34]
- cmp r2, r1
- bhs _0202389C
- mov r1, #0x0
- str r1, [r0, #0x34]
- bx lr
-_0202389C:
- sub r1, r2, r1
- str r1, [r0, #0x34]
- bx lr
- .balign 4
-
- thumb_func_start FUN_020238A4
-FUN_020238A4: ; 0x020238A4
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x5a
- lsl r0, r0, #0x4
- add r1, r4, #0x0
- str r0, [r4, #0x34]
- add r0, r4, #0x4
- add r1, #0x14
- bl FUN_0201265C
- add r0, r4, #0x4
- bl RTC_ConvertDateToDay
- str r0, [r4, #0x20]
- pop {r4, pc}
- .balign 4
diff --git a/arm9/asm/unk_02025954.s b/arm9/asm/unk_02025954.s
index 8495ddab..bb8ebe4f 100644
--- a/arm9/asm/unk_02025954.s
+++ b/arm9/asm/unk_02025954.s
@@ -60,7 +60,7 @@ FUN_0202597C: ; 0x0202597C
add r4, r0, #0x0
add r0, sp, #0xc
add r1, sp, #0x0
- bl FUN_0201265C
+ bl GF_RTC_CopyDateTime
ldr r0, _020259D8 ; =gMain
ldr r6, [sp, #0xc]
ldr r1, [sp, #0x8]
diff --git a/arm9/asm/unk_020281E0.s b/arm9/asm/unk_020281E0.s
index b0f0a5f2..e1a5729d 100644
--- a/arm9/asm/unk_020281E0.s
+++ b/arm9/asm/unk_020281E0.s
@@ -560,7 +560,7 @@ FUN_020285D0: ; 0x020285D0
add r5, r0, #0x0
add r4, r1, #0x0
add r0, sp, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
mov r0, #0x30
add r2, r4, #0x0
mul r2, r0
diff --git a/arm9/asm/unk_02028980.s b/arm9/asm/unk_02028980.s
index 6c44488d..ad0b1145 100644
--- a/arm9/asm/unk_02028980.s
+++ b/arm9/asm/unk_02028980.s
@@ -83,7 +83,7 @@ FUN_020289B0: ; 0x020289B0
pop {r3-r7, pc}
_020289C0:
add r0, sp, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
ldr r0, [r7, #0x0]
lsl r1, r0, #0x15
lsr r3, r1, #0x1c
@@ -145,7 +145,7 @@ FUN_02028A20: ; 0x02028A20
pop {r4, pc}
_02028A30:
add r0, sp, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
ldr r0, [r4, #0x0]
lsl r0, r0, #0x19
lsr r0, r0, #0x19
@@ -942,7 +942,7 @@ FUN_02028FA4: ; 0x02028FA4
bl AllocFromHeap
add r4, r0, #0x0
add r0, sp, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
ldr r2, [r4, #0x0]
mov r0, #0x7f
bic r2, r0
diff --git a/arm9/asm/unk_02029FB0.s b/arm9/asm/unk_02029FB0.s
index c6053422..da0a42d2 100644
--- a/arm9/asm/unk_02029FB0.s
+++ b/arm9/asm/unk_02029FB0.s
@@ -5,11 +5,11 @@
.global UNK_020EEA7C
UNK_020EEA7C: ; 0x020EEA7C
- .byte 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00
- .byte 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00
- .byte 0x0A, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x14, 0x00, 0x1E, 0x00
- .byte 0x23, 0x00, 0x28, 0x00, 0xF4, 0x01, 0x10, 0x27, 0x1E, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x05, 0x00
- .byte 0x01, 0x00, 0x01, 0x00, 0x05, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00
+ .short 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0002
+ .short 0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0007, 0x0007, 0x0007
+ .short 0x000A, 0x000A, 0x000B, 0x000B, 0x000B, 0x000B, 0x0014, 0x001E
+ .short 0x0023, 0x0028, 0x01F4, 0x2710, 0x001E, 0x001E, 0x0002, 0x0005
+ .short 0x0001, 0x0001, 0x0005, 0x0003, 0x0001, 0x0001
.section .data
diff --git a/arm9/asm/unk_0202B374.s b/arm9/asm/unk_0202B374.s
index 3a911598..67c01b0a 100644
--- a/arm9/asm/unk_0202B374.s
+++ b/arm9/asm/unk_0202B374.s
@@ -170,7 +170,7 @@ FUN_0202B470: ; 0x0202B470
add r0, sp, #0x0
add r4, r1, #0x0
add r6, r2, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
ldr r0, [sp, #0x8]
ldr r3, [sp, #0x4]
lsl r0, r0, #0x18
diff --git a/arm9/asm/unk_0202BE98.s b/arm9/asm/unk_0202BE98.s
index 8e7a28c2..2b1b2f16 100644
--- a/arm9/asm/unk_0202BE98.s
+++ b/arm9/asm/unk_0202BE98.s
@@ -149,7 +149,7 @@ FUN_0202BF90: ; 0x0202BF90
add r1, r5, r0
ldr r0, _0202BFCC ; =0x00000588
str r4, [r1, r0]
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
lsl r2, r6, #0x3
add r3, r5, r2
ldr r2, _0202BFD0 ; =0x000005D8
@@ -223,7 +223,7 @@ FUN_0202C028: ; 0x0202C028
push {r4-r6, lr}
add r5, r0, #0x0
add r4, r1, #0x0
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
ldr r1, _0202C058 ; =0x00000588
mov r3, #0x0
add r6, r5, #0x0
diff --git a/arm9/asm/unk_0202F150.s b/arm9/asm/unk_0202F150.s
index 22bf52e9..a4efe28d 100644
--- a/arm9/asm/unk_0202F150.s
+++ b/arm9/asm/unk_0202F150.s
@@ -4278,7 +4278,7 @@ FUN_020312BC: ; 0x020312BC
add r4, r0, #0x0
add r0, sp, #0x10
add r1, sp, #0x4
- bl FUN_0201265C
+ bl GF_RTC_CopyDateTime
ldr r0, _02031340 ; =gMain
ldr r6, [sp, #0x10]
mov r5, #0x0
diff --git a/arm9/asm/unk_02034FE4.s b/arm9/asm/unk_02034FE4.s
index 56a67b6f..2d66b396 100644
--- a/arm9/asm/unk_02034FE4.s
+++ b/arm9/asm/unk_02034FE4.s
@@ -133,7 +133,7 @@ FUN_02034FE4: ; 0x02034FE4
cmp r4, #0x18
blt _0203505C
ldr r0, [r7, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
add r6, r0, #0x0
add r0, r6, #0x4
bl FUN_02012710
diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s
index da71c049..9e1896cf 100644
--- a/arm9/asm/unk_02035068.s
+++ b/arm9/asm/unk_02035068.s
@@ -1677,7 +1677,7 @@ FUN_02035D34: ; 0x02035D34
ldr r0, [sp, #0x4]
str r0, [r4, #0x4]
add r0, r5, #0x0
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
str r0, [r4, #0x8]
add r0, r7, #0x0
mov r1, #0x0
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index 26f6442d..730ffea9 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -1572,7 +1572,7 @@ _02038288:
mov r0, #0x1
str r0, [r4, #0x58]
add r0, r5, #0x0
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
cmp r0, #0x4
bhi _020382C8
add r0, r0, r0
@@ -2120,7 +2120,7 @@ FUN_020386E0: ; 0x020386E0
bl FUN_0202ABBC
str r0, [r4, #0x0]
ldr r0, [r5, #0xc]
- bl FUN_02023788
+ bl Sav2_SysInfo_get
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
mov r1, #0x2
@@ -2199,7 +2199,7 @@ FUN_02038790: ; 0x02038790
bl FUN_0202A8E4
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
- bl FUN_02023788
+ bl Sav2_SysInfo_get
str r0, [r4, #0x8]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -2407,7 +2407,7 @@ _02038956:
ldr r0, [r4, #0xc]
bl Sav2_PlayerData_GetCoinsAddr
str r0, [sp, #0x0]
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
str r0, [sp, #0x4]
ldr r0, [sp, #0x0]
add r6, r1, #0x0
@@ -2469,7 +2469,7 @@ FUN_020389CC: ; 0x020389CC
bl Sav2_PlayerData_GetCoinsAddr
bl CheckCoins
str r0, [r4, #0x0]
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
str r0, [r4, #0x4]
str r1, [r4, #0x8]
ldr r0, [r5, #0xc]
diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s
index 2d2d2b2d..dc4d1c28 100644
--- a/arm9/asm/unk_020476CC.s
+++ b/arm9/asm/unk_020476CC.s
@@ -239,7 +239,7 @@ FUN_02047814: ; 0x02047814
ldr r1, [r4, r1]
bl FUN_02024F44
add r0, r5, #0x0
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
mov r1, #0x16
lsl r1, r1, #0x4
str r0, [r4, r1]
@@ -530,7 +530,7 @@ FUN_02047A78: ; 0x02047A78
lsl r1, r1, #0x2
str r0, [r5, r1]
add r0, r4, #0x0
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
mov r1, #0x16
lsl r1, r1, #0x4
str r0, [r5, r1]
@@ -724,7 +724,7 @@ _02047C98:
lsl r1, r1, #0x2
str r0, [r6, r1]
ldr r0, [sp, #0x0]
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
mov r1, #0x16
lsl r1, r1, #0x4
str r0, [r6, r1]
@@ -908,7 +908,7 @@ _02047E2C:
lsl r1, r1, #0x2
str r0, [r5, r1]
ldr r0, [sp, #0x0]
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
mov r1, #0x16
lsl r1, r1, #0x4
str r0, [r5, r1]
diff --git a/arm9/asm/unk_020484A8.s b/arm9/asm/unk_020484A8.s
index db9ea9af..a50964b1 100644
--- a/arm9/asm/unk_020484A8.s
+++ b/arm9/asm/unk_020484A8.s
@@ -44,7 +44,7 @@ _020484CC:
bl SavArray_PlayerParty_get
add r6, r0, #0x0
add r0, sp, #0x4
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
add r0, r4, #0x0
add r1, r6, #0x0
add r2, sp, #0x4
@@ -305,7 +305,7 @@ FUN_02048694: ; 0x02048694
cmp r0, #0x0
bne _0204871E
add r0, r4, #0x0
- bl FUN_0204B328
+ bl Script_SavRTC_DateTimeTox2C
_0204871E:
ldr r0, [r4, #0xc]
bl SavArray_PlayerParty_get
diff --git a/arm9/asm/unk_0204B0A0.s b/arm9/asm/unk_0204B0A0.s
index 4b658c2b..f2e46ab6 100644
--- a/arm9/asm/unk_0204B0A0.s
+++ b/arm9/asm/unk_0204B0A0.s
@@ -9,14 +9,14 @@ FUN_0204B0F8: ; 0x0204B0F8
sub sp, #0x1c
add r5, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02023794
+ 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 FUN_0201265C
+ bl GF_RTC_CopyDateTime
add r0, r5, #0x0
add r1, r4, #0x0
add r2, sp, #0xc
@@ -202,62 +202,62 @@ FUN_0204B270: ; 0x0204B270
bl FUN_0202B3C4
pop {r4-r6, pc}
- thumb_func_start FUN_0204B2A4
-FUN_0204B2A4: ; 0x0204B2A4
+ thumb_func_start Script_GetTimeOfDay
+Script_GetTimeOfDay: ; 0x0204B2A4
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
ldr r0, [r0, #0x14]
- bl FUN_020127A8
+ bl GF_RTC_GetTimeOfDayByHour
pop {r3, pc}
- thumb_func_start FUN_0204B2B4
-FUN_0204B2B4: ; 0x0204B2B4
+ thumb_func_start Script_GetMonth
+Script_GetMonth: ; 0x0204B2B4
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
ldr r0, [r0, #0x8]
pop {r3, pc}
- thumb_func_start FUN_0204B2C0
-FUN_0204B2C0: ; 0x0204B2C0
+ thumb_func_start Script_GetDay
+Script_GetDay: ; 0x0204B2C0
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
ldr r0, [r0, #0xc]
pop {r3, pc}
- thumb_func_start FUN_0204B2CC
-FUN_0204B2CC: ; 0x0204B2CC
+ thumb_func_start Script_GetWeekday
+Script_GetWeekday: ; 0x0204B2CC
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
ldr r0, [r0, #0x10]
pop {r3, pc}
- thumb_func_start FUN_0204B2D8
-FUN_0204B2D8: ; 0x0204B2D8
+ thumb_func_start Script_GetHour
+Script_GetHour: ; 0x0204B2D8
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
ldr r0, [r0, #0x14]
pop {r3, pc}
- thumb_func_start FUN_0204B2E4
-FUN_0204B2E4: ; 0x0204B2E4
+ thumb_func_start Script_GetMinute
+Script_GetMinute: ; 0x0204B2E4
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
ldr r0, [r0, #0x18]
pop {r3, pc}
- thumb_func_start FUN_0204B2F0
-FUN_0204B2F0: ; 0x0204B2F0
+ 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 FUN_02023794
+ bl Sav2_SysInfo_RTC_get
add r3, r0, #0x0
ldr r2, [r3, #0x24]
ldr r3, [r3, #0x28]
@@ -266,13 +266,13 @@ FUN_0204B2F0: ; 0x0204B2F0
bl RTC_ConvertSecondToDateTime
pop {r3-r5, pc}
- thumb_func_start FUN_0204B30C
-FUN_0204B30C: ; 0x0204B30C
+ 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 FUN_02023794
+ bl Sav2_SysInfo_RTC_get
add r3, r0, #0x0
ldr r2, [r3, #0x2c]
ldr r3, [r3, #0x30]
@@ -281,13 +281,13 @@ FUN_0204B30C: ; 0x0204B30C
bl RTC_ConvertSecondToDateTime
pop {r3-r5, pc}
- thumb_func_start FUN_0204B328
-FUN_0204B328: ; 0x0204B328
+ thumb_func_start Script_SavRTC_DateTimeTox2C
+Script_SavRTC_DateTimeTox2C: ; 0x0204B328
push {r4, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
add r4, r0, #0x0
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
str r0, [r4, #0x2c]
str r1, [r4, #0x30]
pop {r4, pc}
@@ -296,7 +296,7 @@ FUN_0204B328: ; 0x0204B328
FUN_0204B33C: ; 0x0204B33C
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
bl FUN_02023874
pop {r3, pc}
.balign 4
diff --git a/arm9/asm/unk_0204B9EC.s b/arm9/asm/unk_0204B9EC.s
index e781dc81..04b6134b 100644
--- a/arm9/asm/unk_0204B9EC.s
+++ b/arm9/asm/unk_0204B9EC.s
@@ -22,7 +22,7 @@ FUN_0204B9EC: ; 0x0204B9EC
bl FUN_0204BB20
ldr r0, _0204BA14 ; =UNK_021C5A1C
bl FUN_0204BBC4
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
ldr r2, _0204BA18 ; =UNK_021C5A1C
str r0, [r2, #0x40]
str r1, [r2, #0x44]
@@ -38,7 +38,7 @@ FUN_0204BA1C: ; 0x0204BA1C
ldr r4, _0204BA60 ; =UNK_021C5A1C
bl FUN_02029FC8
add r5, r0, #0x0
- bl FUN_020126FC
+ bl GF_RTC_DateTimeToSec
add r3, r1, #0x0
ldr r1, _0204BA64 ; =UNK_021C5A1C
add r2, r0, #0x0
diff --git a/arm9/asm/unk_02064E90.s b/arm9/asm/unk_02064E90.s
index 319e816e..27f1c143 100644
--- a/arm9/asm/unk_02064E90.s
+++ b/arm9/asm/unk_02064E90.s
@@ -76,11 +76,11 @@ FUN_02064E90: ; 0x02064E90
add r0, r6, #0x0
add r1, sp, #0x90
add r2, sp, #0x74
- bl FUN_0204B2F0
+ bl Script_SavRTC_x24toDateTime
add r0, r6, #0x0
add r1, sp, #0x80
add r2, sp, #0x74
- bl FUN_0204B30C
+ bl Script_SavRTC_x2CtoDateTime
ldr r0, [r6, #0xc]
bl SavArray_Flags_get
bl FUN_0205ED0C
diff --git a/arm9/asm/unk_0207FD00.s b/arm9/asm/unk_0207FD00.s
index 38a42358..294b8bfc 100644
--- a/arm9/asm/unk_0207FD00.s
+++ b/arm9/asm/unk_0207FD00.s
@@ -1745,7 +1745,7 @@ FUN_02080B30: ; 0x02080B30
add r5, r0, #0x0
add r0, sp, #0x0
add r4, r2, #0x0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
cmp r4, #0x0
add r2, sp, #0x24
bne _02080B76
diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s
index b41f5319..ed311aef 100644
--- a/arm9/asm/unk_02080C38.s
+++ b/arm9/asm/unk_02080C38.s
@@ -3764,7 +3764,7 @@ _02082858: .word 0x00000127
thumb_func_start FUN_0208285C
FUN_0208285C: ; 0x0208285C
push {r4, lr}
- bl FUN_020126D8
+ bl GF_RTC_TimeToSec
add r4, r0, #0x0
bl GetLCRNGSeed
add r0, #0xa
diff --git a/arm9/global.inc b/arm9/global.inc
index 64c64dc1..29501049 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -798,17 +798,17 @@
.extern FUN_020124B4
.extern FUN_02012530
.extern FUN_02012560
-.extern FUN_0201259C
-.extern FUN_020125D4
-.extern FUN_0201265C
-.extern FUN_02012690
-.extern FUN_020126B4
-.extern FUN_020126D8
-.extern FUN_020126FC
+.extern GF_InitRTCWork
+.extern GF_RTC_UpdateOnFrame
+.extern GF_RTC_CopyDateTime
+.extern GF_RTC_CopyTime
+.extern GF_RTC_CopyDate
+.extern GF_RTC_TimeToSec
+.extern GF_RTC_DateTimeToSec
.extern FUN_02012710
.extern IsNighttime
-.extern FUN_02012794
-.extern FUN_020127A8
+.extern GF_RTC_GetTimeOfDay
+.extern GF_RTC_GetTimeOfDayByHour
.extern FUN_020127C0
.extern ListMenu_ctor
.extern ListMenu_dtor
@@ -1453,20 +1453,20 @@
.extern FUN_0202287C
.extern WriteSaveFileToFlash
.extern ReadSaveFileFromFlash
-.extern FUN_0202376C
-.extern FUN_02023770
-.extern FUN_02023788
-.extern FUN_02023794
-.extern FUN_020237A0
-.extern FUN_020237CC
-.extern FUN_020237FC
-.extern FUN_02023818
-.extern FUN_0202381C
+.extern Sav2_SysInfo_sizeof
+.extern Sav2_SysInfo_init
+.extern Sav2_SysInfo_get
+.extern Sav2_SysInfo_RTC_get
+.extern Sav2_SysInfo_InitFromSystem
+.extern Sav2_SysInfo_MacAddressIsMine
+.extern Sav2_SysInfo_RTCOffsetIsMine
+.extern Sav2_SysInfo_GetBirthMonth
+.extern Sav2_SysInfo_GetBirthDay
.extern FUN_02023820
.extern FUN_02023828
.extern FUN_02023830
.extern FUN_02023834
-.extern FUN_02023840
+.extern Sav2_SysInfo_RTC_init
.extern FUN_02023874
.extern FUN_02023884
.extern FUN_020238A4
@@ -3547,15 +3547,15 @@
.extern FUN_0204B090
.extern FUN_0204B0E8
.extern FUN_0204B0F8
-.extern FUN_0204B2A4
-.extern FUN_0204B2B4
-.extern FUN_0204B2C0
-.extern FUN_0204B2CC
-.extern FUN_0204B2D8
-.extern FUN_0204B2E4
-.extern FUN_0204B2F0
-.extern FUN_0204B30C
-.extern FUN_0204B328
+.extern Script_GetTimeOfDay
+.extern Script_GetMonth
+.extern Script_GetDay
+.extern Script_GetWeekday
+.extern Script_GetHour
+.extern Script_GetMinute
+.extern Script_SavRTC_x24toDateTime
+.extern Script_SavRTC_x2CtoDateTime
+.extern Script_SavRTC_DateTimeTox2C
.extern FUN_0204B33C
.extern FUN_0204B388
.extern FUN_0204B3B8
diff --git a/arm9/lib/include/RTC_api.h b/arm9/lib/include/RTC_api.h
new file mode 100644
index 00000000..d2577cdf
--- /dev/null
+++ b/arm9/lib/include/RTC_api.h
@@ -0,0 +1,34 @@
+#ifndef NITRO_RTC_API_H_
+#define NITRO_RTC_API_H_
+
+typedef enum RTCWeek
+{
+ RTC_WEEK_SUNDAY = 0,
+ RTC_WEEK_MONDAY,
+ RTC_WEEK_TUESDAY,
+ RTC_WEEK_WEDNESDAY,
+ RTC_WEEK_THURSDAY,
+ RTC_WEEK_FRIDAY,
+ RTC_WEEK_SATURDAY,
+ RTC_WEEK_MAX
+}
+ RTCWeek;
+
+typedef struct RTCDate
+{
+ u32 year;
+ u32 month;
+ u32 day;
+ RTCWeek week;
+}
+ RTCDate;
+
+typedef struct RTCTime
+{
+ u32 hour;
+ u32 minute;
+ u32 second;
+}
+ RTCTime;
+
+#endif //NITRO_RTC_API_H_
diff --git a/arm9/lib/include/RTC_convert.h b/arm9/lib/include/RTC_convert.h
new file mode 100644
index 00000000..a75928b9
--- /dev/null
+++ b/arm9/lib/include/RTC_convert.h
@@ -0,0 +1,12 @@
+#ifndef NITRO_RTC_CONVERT_H_
+#define NITRO_RTC_CONVERT_H_
+
+s32 RTC_ConvertDateToDay(const RTCDate * date);
+s32 RTCi_ConvertTimeToSecond(const RTCTime * time);
+s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time);
+void RTC_ConvertDayToDate(RTCDate * date, s32 day);
+void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec);
+void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec);
+RTCWeek RTC_GetDayOfWeek(RTCDate * date);
+
+#endif //NITRO_RTC_CONVERT_H_
diff --git a/arm9/lib/src/RTC_convert.c b/arm9/lib/src/RTC_convert.c
new file mode 100644
index 00000000..af5574dc
--- /dev/null
+++ b/arm9/lib/src/RTC_convert.c
@@ -0,0 +1,164 @@
+#include "global.h"
+#include "RTC_api.h"
+#include "RTC_convert.h"
+
+static s32 sDayOfYear[12] = {
+ 0, // Jan
+ 31, // Feb
+ 59, // Mar
+ 90, // Apr
+ 120, // May
+ 151, // Jun
+ 181, // Jul
+ 212, // Aug
+ 243, // Sep
+ 273, // Oct
+ 304, // Nov
+ 334, // Dec
+};
+
+static inline BOOL RTCi_IsLeapYear(u32 year)
+{
+ return !((year & 0x03));
+}
+
+s32 RTC_ConvertDateToDay(const RTCDate * date)
+{
+ if (date->year >= 100
+ || date->month < 1
+ || date->month > 12
+ || date->day < 1
+ || date->day > 31
+ || date->week >= RTC_WEEK_MAX
+ || date->month < 1 // can't be
+ || date->month > 12 // too sure
+ )
+ return -1;
+ s32 dayNum = (s32)(date->day - 1);
+ dayNum += sDayOfYear[date->month - 1];
+ if (date->month >= 3 && RTCi_IsLeapYear(date->year))
+ dayNum++;
+ dayNum += date->year * 365;
+ dayNum += (date->year + 3) / 4;
+ return dayNum;
+}
+
+s32 RTCi_ConvertTimeToSecond(const RTCTime * time)
+{
+ return (time->hour * 60 + time->minute) * 60 + time->second;
+}
+
+s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time)
+{
+ s32 day = RTC_ConvertDateToDay(date);
+ if (day == -1)
+ return -1;
+ s32 second = RTCi_ConvertTimeToSecond(time);
+ if (second == -1)
+ return -1;
+ return ((s64)day) * (60 * 60 * 24) + second;
+}
+
+void RTC_ConvertDayToDate(RTCDate * date, s32 day)
+{
+ u32 year;
+ s32 month;
+
+ if (day < 0)
+ {
+ day = 0;
+ }
+ if (day > 36524) // max number of days that can be recorded
+ {
+ day = 36524;
+ }
+ date->week = (RTCWeek)((day + 6) % 7);
+ for (year = 0; year < 99; year++)
+ {
+ s32 prev = day;
+ day -= (RTCi_IsLeapYear(year)) ? 366 : 365;
+ if (day < 0)
+ {
+ day = prev;
+ break;
+ }
+ }
+ if (day > 365)
+ {
+ day = 365;
+ }
+ date->year = year;
+ if (RTCi_IsLeapYear(year))
+ {
+ if (day < 31 + 29)
+ {
+ if (day < 31)
+ {
+ month = 1;
+ }
+ else
+ {
+ month = 2;
+ day -= 31;
+ }
+ date->month = (u32)month;
+ date->day = (u32)(day + 1);
+ return;
+ }
+ else
+ {
+ day--;
+ }
+ }
+ for (month = 11; month >= 0; month--)
+ {
+ if (day >= sDayOfYear[month])
+ {
+ date->month = (u32)(month + 1);
+ date->day = (u32)(day - sDayOfYear[month] + 1);
+ return;
+ }
+ }
+ // Internal Error.
+}
+
+void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec)
+{
+ if (sec < 0)
+ sec = 0;
+ if (sec > 86399)
+ sec = 86399;
+ time->second = (u32)(sec % 60);
+ sec /= 60;
+ time->minute = (u32)(sec % 60);
+ sec /= 60;
+ time->hour = (u32)sec;
+}
+
+void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec)
+{
+ if (sec < 0)
+ sec = 0;
+ else if (sec > 3155759999)
+ sec = 3155759999;
+ RTCi_ConvertSecondToTime(time, (s32)(sec % 86400));
+ RTC_ConvertDayToDate(date, (s32)(sec / 86400));
+}
+
+RTCWeek RTC_GetDayOfWeek(RTCDate * date)
+{
+ int cent;
+ int year = (int)(2000 + date->year);
+ int month = (int)date->month;
+ int day = (int)date->day;
+
+ month -= 2;
+ if (month < 1)
+ {
+ month += 12;
+ --year;
+ }
+ cent = year / 100;
+ year %= 100;
+ return (RTCWeek)(((26 * month - 2) / 10 + day + year + year / 4 + cent / 4 + 5 * cent) % 7);
+}
diff --git a/arm9/modules/05/asm/mod05_021DB44C.s b/arm9/modules/05/asm/mod05_021DB44C.s
index 75d5fd9c..b606312e 100644
--- a/arm9/modules/05/asm/mod05_021DB44C.s
+++ b/arm9/modules/05/asm/mod05_021DB44C.s
@@ -25,7 +25,7 @@ _021DB45A:
str r0, [r4]
mov r0, #0
str r0, [r4, #8]
- bl FUN_020126D8
+ bl GF_RTC_TimeToSec
lsr r1, r0, #0x1f
add r1, r0, r1
asr r3, r1, #1
@@ -79,7 +79,7 @@ MOD05_021DB4D0: ; 0x021DB4D0
bne _021DB4DA
bl ErrorHandling
_021DB4DA:
- bl FUN_020126D8
+ bl GF_RTC_TimeToSec
lsr r1, r0, #0x1f
add r1, r0, r1
asr r0, r1, #1
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index a993374a..daf46f68 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -16198,10 +16198,10 @@ MOD05_021ED320: ; 0x021ED320
MOD05_021ED334: ; 0x021ED334
push {r3, r4, r5, lr}
add r4, r0, #0
- bl FUN_0204B2C0
+ bl Script_GetDay
add r5, r0, #0
add r0, r4, #0
- bl FUN_0204B2B4
+ bl Script_GetMonth
mov r1, #0x64
mul r1, r0
add r0, r4, #0
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index 5d47188a..fd961cc0 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -4718,7 +4718,7 @@ MOD06_0223B944: ; 0x0223B944
add r5, r0, #0
add r4, r1, #0
add r6, r2, #0
- bl FUN_02012794
+ bl GF_RTC_GetTimeOfDay
sub r1, r0, #1
cmp r1, #1
bhi _0223B960
@@ -31114,7 +31114,7 @@ MOD06_0224891C: ; 0x0224891C
bl Sav2_PlayerData_GetOptionsAddr
str r0, [r4, #0x14]
add r0, r6, #0
- bl FUN_0204B2A4
+ bl Script_GetTimeOfDay
cmp r0, #1
bhi _02248996
mov r0, #0
@@ -31562,16 +31562,16 @@ MOD06_02248D00: ; 0x02248D00
push {r3, r4, r5, r6, lr}
sub sp, #0xc
add r4, r0, #0
- bl FUN_0204B2CC
+ bl Script_GetWeekday
add r0, r0, #6
mov r1, #7
bl _s32_div_f
add r0, r4, #0
add r5, r1, #0
- bl FUN_0204B2D8
+ bl Script_GetHour
add r6, r0, #0
add r0, r4, #0
- bl FUN_0204B2E4
+ bl Script_GetMinute
mov r1, #0xf
bl _s32_div_f
add r6, #0x13
@@ -32021,7 +32021,7 @@ _0224905E: ; jump table
_02249066:
bl ErrorHandling
_0224906A:
- bl FUN_02012794
+ bl GF_RTC_GetTimeOfDay
cmp r0, #0
beq _02249078
cmp r0, #1
@@ -32282,7 +32282,7 @@ MOD06_02249230: ; 0x02249230
pop {r3, r4, r5, r6, r7, pc}
_02249244:
add r0, sp, #0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
ldr r0, [sp, #4]
cmp r0, #0
bne _02249254
@@ -32465,7 +32465,7 @@ MOD06_02249388: ; 0x02249388
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x10
add r5, r1, #0
- bl FUN_02012794
+ bl GF_RTC_GetTimeOfDay
ldr r1, [r5]
add r4, r0, #0
cmp r1, #0
diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s
index 891ecf6a..b5cc45b0 100644
--- a/arm9/modules/11/asm/module_11_thumb1.s
+++ b/arm9/modules/11/asm/module_11_thumb1.s
@@ -676,7 +676,7 @@ MOD11_0222DB50: ; 0x0222DB50
str r0, [r4, r1]
add r0, sp, #0x20
add r1, sp, #0x14
- bl FUN_0201265C
+ bl GF_RTC_CopyDateTime
ldr r0, _0222DF10 ; =gMain
ldr r6, [sp, #0x24]
ldr r5, [r0, #0x2c]
diff --git a/arm9/modules/21/asm/module_21.s b/arm9/modules/21/asm/module_21.s
index 787a729f..ad12a682 100644
--- a/arm9/modules/21/asm/module_21.s
+++ b/arm9/modules/21/asm/module_21.s
@@ -61,7 +61,7 @@ MOD21_0225489C: ; 0x0225489C
add r0, r5, #0
str r1, [r5, #0x20]
add r0, #0x14
- bl FUN_02012690
+ bl GF_RTC_CopyTime
ldr r0, [r5, #0x14]
cmp r0, #0x18
blo _022548D6
@@ -256,7 +256,7 @@ _02254A0A:
strb r0, [r4, #5]
add r0, r4, #0
add r0, #0x14
- bl FUN_02012690
+ bl GF_RTC_CopyTime
ldrb r1, [r4, #5]
ldr r0, [r4, #0x18]
cmp r1, r0
diff --git a/arm9/modules/25/asm/module_25.s b/arm9/modules/25/asm/module_25.s
index 84129725..481c98c2 100644
--- a/arm9/modules/25/asm/module_25.s
+++ b/arm9/modules/25/asm/module_25.s
@@ -61,7 +61,7 @@ MOD25_0225489C: ; 0x0225489C
add r0, r5, #0
str r1, [r5, #0x20]
add r0, #0x14
- bl FUN_02012690
+ bl GF_RTC_CopyTime
ldr r0, [r5, #0x14]
cmp r0, #0x18
blo _022548D6
@@ -256,7 +256,7 @@ _02254A0A:
strb r0, [r4, #5]
add r0, r4, #0
add r0, #0x14
- bl FUN_02012690
+ bl GF_RTC_CopyTime
ldrb r1, [r4, #5]
ldr r0, [r4, #0x18]
cmp r1, r0
diff --git a/arm9/modules/40/asm/module_40.s b/arm9/modules/40/asm/module_40.s
index 409892d9..90fc4ebd 100644
--- a/arm9/modules/40/asm/module_40.s
+++ b/arm9/modules/40/asm/module_40.s
@@ -121,7 +121,7 @@ MOD40_02254940: ; 0x02254940
sub sp, #0xc
add r4, r0, #0
add r0, sp, #0
- bl FUN_02012690
+ bl GF_RTC_CopyTime
ldr r0, [sp]
cmp r0, #0x18
blo _0225495A
@@ -625,7 +625,7 @@ MOD40_02254CE8: ; 0x02254CE8
bne _02254CFE
add r0, r4, #0
add r0, #0x20
- bl FUN_02012690
+ bl GF_RTC_CopyTime
mov r0, #1
str r0, [r4, #0x30]
_02254CFE:
diff --git a/arm9/modules/45/asm/module_45.s b/arm9/modules/45/asm/module_45.s
index 182774aa..e3115193 100644
--- a/arm9/modules/45/asm/module_45.s
+++ b/arm9/modules/45/asm/module_45.s
@@ -48,7 +48,7 @@ MOD45_0225489C: ; 0x0225489C
add r4, r1, #0
add r0, sp, #4
add r6, r2, #0
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
add r0, r4, #0
bl MOD20_02252C3C
add r1, r5, #0
diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s
index 55bb6ed3..829ee276 100644
--- a/arm9/modules/52/asm/module_52.s
+++ b/arm9/modules/52/asm/module_52.s
@@ -109,7 +109,7 @@ MOD52_021D7594: ; 0x021D7594
bl OverlayManager_GetField18
ldr r4, [r0, #8]
add r0, r4, #0
- bl FUN_02023788
+ bl Sav2_SysInfo_get
add r5, r0, #0
mov r0, #0x4d
add r1, r4, #0
@@ -118,19 +118,19 @@ MOD52_021D7594: ; 0x021D7594
mov r1, #0
bl FUN_02024F9C
add r0, r5, #0
- bl FUN_020237CC
+ bl Sav2_SysInfo_MacAddressIsMine
cmp r0, #0
beq _021D75C8
add r0, r5, #0
- bl FUN_020237FC
+ bl Sav2_SysInfo_RTCOffsetIsMine
cmp r0, #0
bne _021D75D8
_021D75C8:
add r0, r4, #0
- bl FUN_02023794
+ bl Sav2_SysInfo_RTC_get
bl FUN_020238A4
add r0, r5, #0
- bl FUN_020237A0
+ bl Sav2_SysInfo_InitFromSystem
_021D75D8:
add r0, r4, #0
bl Sav2_PlayerData_GetIGTAddr
@@ -162,11 +162,11 @@ MOD52_021D7604: ; 0x021D7604
str r0, [sp]
add r0, r5, #0
add r6, r2, #0
- bl FUN_02023788
- bl FUN_020237A0
+ bl Sav2_SysInfo_get
+ bl Sav2_SysInfo_InitFromSystem
add r0, r5, #0
- bl FUN_02023794
- bl FUN_02023840
+ bl Sav2_SysInfo_RTC_get
+ bl Sav2_SysInfo_RTC_init
add r0, r5, #0
bl FUN_0202881C
add r4, r0, #0
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index d16c0493..c21879dd 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -1240,7 +1240,7 @@ MOD83_0222DF40: ; 0x0222DF40
str r0, [r5, #0x34]
_0222DF60:
ldr r0, [r5, #4]
- bl FUN_02023788
+ bl Sav2_SysInfo_get
bl FUN_02023820
cmp r0, #1
bne _0222DF72
@@ -3436,7 +3436,7 @@ MOD83_0222F074: ; 0x0222F074
add r0, #8
strb r1, [r4, r0]
add r0, sp, #8
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
add r0, sp, #8
bl RTC_ConvertDateToDay
mov r1, #0xd5
@@ -4970,7 +4970,7 @@ _0222FD12:
strb r0, [r5, r1]
_0222FD2C:
add r0, sp, #8
- bl FUN_020126B4
+ bl GF_RTC_CopyDate
add r0, sp, #8
bl RTC_ConvertDateToDay
mov r1, #0xd5
diff --git a/arm9/src/main.c b/arm9/src/main.c
index e1c8fb38..4f3b583c 100644
--- a/arm9/src/main.c
+++ b/arm9/src/main.c
@@ -27,7 +27,7 @@ extern BOOL FUN_0202FB80(void);
extern void InitSystemForTheGame(void);
extern void InitGraphicMemory(void);
extern void FUN_02022294(void);
-extern void FUN_0201259C(void);
+extern void GF_InitRTCWork(void);
extern void FUN_02002C14(void);
extern void FUN_02002C50(int, int);
extern struct SaveBlock2 * SaveBlock2_new(void);
@@ -40,7 +40,7 @@ extern void FUN_02089D90(int);
extern void FUN_0200A2AC(void);
extern void FUN_02015E30(void);
extern void FUN_0201B5CC(void *);
-extern void FUN_020125D4(void);
+extern void GF_RTC_UpdateOnFrame(void);
extern void FUN_02015E60(void);
extern void FUN_020222C4(void);
extern void FUN_0200A318(void);
@@ -64,7 +64,7 @@ THUMB_FUNC void NitroMain(void)
PM_GetBackLight((PMBackLightSwitch *)SDK_STATIC_BSS_START, NULL);
FUN_02022294();
- FUN_0201259C();
+ GF_InitRTCWork();
FUN_02000DF4();
FUN_02002C14();
FUN_02002C50(0, 3);
@@ -125,7 +125,7 @@ THUMB_FUNC void NitroMain(void)
gMain.unk2C++;
}
}
- FUN_020125D4();
+ GF_RTC_UpdateOnFrame();
FUN_02015E60();
FUN_020222C4();
FUN_0201B5CC(gMain.unk24);
@@ -262,7 +262,7 @@ THUMB_FUNC void FUN_02000F4C(u32 arg0, u32 arg1)
DoSoftReset(arg0);
}
-extern void FUN_0201265C(struct Unk21C4818 *, struct Unk21C4828 *);
+extern void GF_RTC_CopyDateTime(struct Unk21C4818 *, struct Unk21C4828 *);
extern void SetMTRNGSeed(u32);
extern void SetLCRNGSeed(u32);
@@ -270,7 +270,7 @@ THUMB_FUNC void InitializeMainRNG(void)
{
struct Unk21C4818 spC;
struct Unk21C4828 sp0;
- FUN_0201265C(&spC, &sp0);
+ GF_RTC_CopyDateTime(&spC, &sp0);
{
u32 r4 = gMain.unk2C;
u32 r5 = ((sp0.unk4 + sp0.unk8) << 24) + (spC.unk0 + ((256 * spC.unk4 * spC.unk8) << 16) + (sp0.unk0 << 16));
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index 3db6796a..97be796b 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -2,6 +2,7 @@
#define IN_POKEMON_C
#include "proto.h"
#include "party.h"
+#include "player_data.h"
#include "pokemon.h"
#include "filesystem.h"
#include "heap.h"
@@ -41,7 +42,7 @@ BOOL FUN_02069E7C(struct BoxPokemon * boxmon);
BOOL FUN_02069E9C(struct BoxPokemon * boxmon);
void FUN_02069ECC(struct BoxPokemon * boxmon);
void LoadWotbl_HandleAlternateForme(int species, int forme, u16 * wotbl);
-void FUN_0206A054(struct BoxPokemon * boxmon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5);
+void FUN_0206A054(struct BoxPokemon * boxmon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id);
BOOL MonHasMove(struct Pokemon * pokemon, u16 move);
BOOL FUN_0206A144(struct BoxPokemon * boxmon, u32 a1);
BOOL FUN_0206A16C(u16 species, int forme, u32 a2);
@@ -3321,10 +3322,10 @@ void FUN_02069FB0(u32 r7, u32 r5, u32 r4, u32 r6, u32 sp18, u32 sp1C, u32 sp20)
}
}
-void FUN_0206A014(struct Pokemon * pokemon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5)
+void FUN_0206A014(struct Pokemon * pokemon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id)
{
u32 hp;
- FUN_0206A054(&pokemon->box, a1, pokeball, a3, encounterType, a5);
+ FUN_0206A054(&pokemon->box, a1, pokeball, a3, encounterType, heap_id);
if (pokeball == ITEM_HEAL_BALL)
{
hp = GetMonData(pokemon, MON_DATA_MAXHP, NULL);
@@ -3334,9 +3335,9 @@ void FUN_0206A014(struct Pokemon * pokemon, u32 a1, u32 pokeball, u32 a3, u32 en
}
}
-void FUN_0206A054(struct BoxPokemon * boxmon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5)
+void FUN_0206A054(struct BoxPokemon * boxmon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id)
{
- FUN_020808AC(boxmon, (int)a1, 0, (int)a3, (int)a5);
+ FUN_020808AC(boxmon, a1, 0, a3, heap_id);
SetBoxMonData(boxmon, MON_DATA_GAME_VERSION, (void *)&gGameVersion);
SetBoxMonData(boxmon, MON_DATA_POKEBALL, &pokeball);
SetBoxMonData(boxmon, MON_DATA_ENCOUNTER_TYPE, &encounterType);
diff --git a/arm9/src/sav_system_info.c b/arm9/src/sav_system_info.c
new file mode 100644
index 00000000..6b532b8d
--- /dev/null
+++ b/arm9/src/sav_system_info.c
@@ -0,0 +1,122 @@
+#include "global.h"
+#include "save_block_2.h"
+#include "MI_memory.h"
+#include "OS_ownerInfo.h"
+#include "RTC_api.h"
+#include "RTC_convert.h"
+#include "sav_system_info.h"
+
+#pragma thumb on
+
+extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *);
+
+u32 Sav2_SysInfo_sizeof(void)
+{
+ return sizeof(struct SavSysInfo);
+}
+
+void Sav2_SysInfo_init(struct SavSysInfo * unk)
+{
+ MI_CpuClearFast(unk, sizeof(struct SavSysInfo));
+ Sav2_SysInfo_RTC_init(&unk->rtcInfo);
+}
+
+struct SavSysInfo * Sav2_SysInfo_get(struct SaveBlock2 * sav2)
+{
+ return (struct SavSysInfo *)SavArray_get(sav2, 0);
+}
+
+struct UnkSaveStruct_0202376C_sub * Sav2_SysInfo_RTC_get(struct SaveBlock2 * sav2)
+{
+ return &Sav2_SysInfo_get(sav2)->rtcInfo;
+}
+
+void Sav2_SysInfo_InitFromSystem(struct SavSysInfo * unk)
+{
+ OSOwnerInfo info;
+ unk->rtcOffset = OS_GetOwnerRtcOffset();
+ OS_GetMacAddress(unk->macAddr);
+ OS_GetOwnerInfo(&info);
+ unk->birthMonth = info.birthday.month;
+ unk->birthDay = info.birthday.day;
+}
+
+BOOL Sav2_SysInfo_MacAddressIsMine(struct SavSysInfo * unk)
+{
+ u8 macAddr[6];
+ OS_GetMacAddress(macAddr);
+ for (int i = 0; i < 6; i++)
+ {
+ if (macAddr[i] != unk->macAddr[i])
+ return FALSE;
+ }
+ return TRUE;
+}
+
+BOOL Sav2_SysInfo_RTCOffsetIsMine(struct SavSysInfo * unk)
+{
+ return OS_GetOwnerRtcOffset() == unk->rtcOffset;
+}
+
+u8 Sav2_SysInfo_GetBirthMonth(struct SavSysInfo * unk)
+{
+ return unk->birthMonth;
+}
+
+u8 Sav2_SysInfo_GetBirthDay(struct SavSysInfo * unk)
+{
+ return unk->birthDay;
+}
+
+u8 FUN_02023820(struct SavSysInfo * unk)
+{
+ return unk->field_48;
+}
+
+void FUN_02023828(struct SavSysInfo * unk, u8 val)
+{
+ unk->field_48 = val;
+}
+
+u32 FUN_02023830(struct SavSysInfo * unk)
+{
+ return unk->field_4C;
+}
+
+void FUN_02023834(struct SavSysInfo * unk, u32 val)
+{
+ if (unk->field_4C == 0)
+ unk->field_4C = val;
+}
+
+void Sav2_SysInfo_RTC_init(struct UnkSaveStruct_0202376C_sub * sub)
+{
+ sub->field_00 = 1;
+ GF_RTC_CopyDateTime(&sub->date, &sub->time);
+ sub->daysSinceNitroEpoch = RTC_ConvertDateToDay(&sub->date);
+ sub->secondsSinceNitroEpoch = RTC_ConvertDateTimeToSecond(&sub->date, &sub->time);
+ sub->field_2C = 0;
+ sub->field_34 = 0;
+}
+
+BOOL FUN_02023874(struct UnkSaveStruct_0202376C_sub * sub)
+{
+ return sub->field_34 != 0;
+}
+
+void FUN_02023884(struct UnkSaveStruct_0202376C_sub * sub, u32 a1)
+{
+ if (sub->field_34 > 1440)
+ sub->field_34 = 1440;
+ if (sub->field_34 < a1)
+ sub->field_34 = 0;
+ else
+ sub->field_34 -= a1;
+}
+
+void FUN_020238A4(struct UnkSaveStruct_0202376C_sub * sub)
+{
+ sub->field_34 = 1440;
+ GF_RTC_CopyDateTime(&sub->date, &sub->time);
+ sub->daysSinceNitroEpoch = RTC_ConvertDateToDay(&sub->date);
+}
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index abd09b1c..58e1ff4c 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -7,7 +7,7 @@
extern u32 FUN_0202B034(void);
extern u32 FUN_0202AC20(void);
-extern u32 FUN_0202376C(void);
+extern u32 Sav2_SysInfo_sizeof(void);
extern u32 FUN_0204BE14(void);
extern u32 FUN_02034D7C(void);
extern u32 FUN_02023D64(void);
@@ -40,7 +40,7 @@ extern u32 FUN_02013B28(void);
extern u32 PCStorage_sizeof(void);
extern void FUN_0202B03C(void *);
extern void FUN_0202AC28(void *);
-extern void FUN_02023770(void *);
+extern void Sav2_SysInfo_init(void *);
extern void FUN_0204BE18(void *);
extern void FUN_02034D98(void *);
extern void FUN_02024378(void *);
@@ -78,7 +78,7 @@ const struct SaveChunkHeader UNK_020EE6E0[] = {
};
const struct SaveChunkHeader UNK_020EE700[] = {
- { 0, 0, (SAVSIZEFN)FUN_0202376C, (SAVINITFN)FUN_02023770 },
+ { 0, 0, (SAVSIZEFN)Sav2_SysInfo_sizeof, (SAVINITFN)Sav2_SysInfo_init },
{ 1, 0, (SAVSIZEFN)Sav2_PlayerData_sizeof, (SAVINITFN)Sav2_PlayerData_init },
{ 2, 0, (SAVSIZEFN)SavArray_Party_sizeof, (SAVINITFN)SavArray_Party_init },
{ 3, 0, (SAVSIZEFN)Sav2_Bag_sizeof, (SAVINITFN)Sav2_Bag_init },
diff --git a/include/pokemon.h b/include/pokemon.h
index ed62c18e..b76bf145 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -294,7 +294,7 @@ BOOL FUN_02069E74(struct Pokemon * pokemon);
BOOL FUN_02069E94(struct Pokemon * pokemon);
void FUN_02069EC4(struct Pokemon * pokemon);
void FUN_02069FB0(u32 r7, u32 r5, u32 r4, u32 r6, u32 sp18, u32 sp1C, u32 sp20);
-void FUN_0206A014(struct Pokemon * pokemon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5);
+void FUN_0206A014(struct Pokemon * pokemon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id);
void FUN_0206A094(struct Pokemon * pokemon, u32 a1, u32 a2);
BOOL FUN_0206A13C(struct Pokemon * pokemon, u32 a1);
void FUN_0206A1C4(struct Pokemon * pokemon);
diff --git a/include/proto.h b/include/proto.h
index fb2f8a78..67a295ac 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -5,6 +5,7 @@
#include "pokemon.h" // for struct definitions
#include "string16.h" // for struct definitions
+#include "player_data.h" // for struct definitions
int FUN_0206AE00(int x);
u32 GetItemAttr(u16 item, u32 a1, u32 a2);
@@ -15,7 +16,7 @@ int FUN_02005F14(int);
void FUN_02005E80(int);
void FUN_02005E90(int, int, int, int);
void FUN_020056AC(int, int, int, int, int);
-void FUN_020808AC(struct BoxPokemon *, int, int, int, int);
+void FUN_020808AC(struct BoxPokemon *, struct PlayerData *, int, u32, u32);
void StringExpandPlaceholders(u32 *, struct String *, struct String *);
#endif //POKEDIAMOND_PROTO_H
diff --git a/include/sav_system_info.h b/include/sav_system_info.h
new file mode 100644
index 00000000..696cfe07
--- /dev/null
+++ b/include/sav_system_info.h
@@ -0,0 +1,48 @@
+#ifndef POKEDIAMOND_SAV_SYSTEM_INFO_H
+#define POKEDIAMOND_SAV_SYSTEM_INFO_H
+
+#include "RTC_api.h"
+
+struct UnkSaveStruct_0202376C_sub
+{
+ /* 0x00 */ u32 field_00;
+ /* 0x04 */ RTCDate date;
+ /* 0x14 */ RTCTime time;
+ /* 0x20 */ s32 daysSinceNitroEpoch;
+ /* 0x24 */ s64 secondsSinceNitroEpoch;
+ /* 0x2C */ s64 field_2C;
+ /* 0x34 */ u32 field_34;
+};
+
+struct SavSysInfo
+{
+ /* 0x00 */ s64 rtcOffset;
+ /* 0x08 */ u8 macAddr[6];
+ /* 0x0E */ u8 birthMonth;
+ /* 0x0F */ u8 birthDay;
+ /* 0x10 */ struct UnkSaveStruct_0202376C_sub rtcInfo;
+ /* 0x48 */ u8 field_48;
+ u8 filler_49[3];
+ /* 0x4C */ u32 field_4C;
+ u8 padding_50[12];
+};
+
+u32 Sav2_SysInfo_sizeof(void);
+void Sav2_SysInfo_init(struct SavSysInfo * unk);
+struct SavSysInfo * Sav2_SysInfo_get(struct SaveBlock2 * sav2);
+struct UnkSaveStruct_0202376C_sub * Sav2_SysInfo_RTC_get(struct SaveBlock2 * sav2);
+void Sav2_SysInfo_InitFromSystem(struct SavSysInfo * unk);
+BOOL Sav2_SysInfo_MacAddressIsMine(struct SavSysInfo * unk);
+BOOL Sav2_SysInfo_RTCOffsetIsMine(struct SavSysInfo * unk);
+u8 Sav2_SysInfo_GetBirthMonth(struct SavSysInfo * unk);
+u8 Sav2_SysInfo_GetBirthDay(struct SavSysInfo * unk);
+u8 FUN_02023820(struct SavSysInfo * unk);
+void FUN_02023828(struct SavSysInfo * unk, u8 val);
+u32 FUN_02023830(struct SavSysInfo * unk);
+void FUN_02023834(struct SavSysInfo * unk, u32 val);
+void Sav2_SysInfo_RTC_init(struct UnkSaveStruct_0202376C_sub * sub);
+BOOL FUN_02023874(struct UnkSaveStruct_0202376C_sub * sub);
+void FUN_02023884(struct UnkSaveStruct_0202376C_sub * sub, u32 a1);
+void FUN_020238A4(struct UnkSaveStruct_0202376C_sub * sub);
+
+#endif //POKEDIAMOND_SAV_SYSTEM_INFO_H