summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2021-05-22 19:33:17 -0400
committerGitHub <noreply@github.com>2021-05-22 19:33:17 -0400
commit121208bd6db271ae766a614da82fa00498bb7856 (patch)
tree7ab7010abde683379b2cb6e63ded0dbbf4ab4388
parent1e7dcfbf615f387c3b4a8a7577ff36dd57922f60 (diff)
parent0d0f5b70b03e271d05cd30ccacddd55d75c4e530 (diff)
Merge pull request #382 from PikalaxALT/pikalax_work
list_menu_items
-rw-r--r--.github/workflows/build.yml14
-rw-r--r--arm9/arm9.lsf4
-rw-r--r--arm9/asm/gf_rtc.s410
-rw-r--r--arm9/asm/unk_02011744.s1810
-rw-r--r--arm9/asm/unk_02012004.s787
-rw-r--r--arm9/asm/unk_02012944.s471
-rw-r--r--arm9/lib/src/RTC_internal.c2
-rw-r--r--arm9/src/error_message_reset.c2
-rw-r--r--arm9/src/game_init.c2
-rw-r--r--arm9/src/list_menu.c76
-rw-r--r--arm9/src/list_menu_items.c92
-rw-r--r--arm9/src/main.c2
-rw-r--r--arm9/src/scrcmd.c6
-rw-r--r--arm9/src/text.c20
-rw-r--r--arm9/src/text_02054590.c4
-rw-r--r--arm9/src/unk_02022504.c2
-rw-r--r--arm9/src/unk_02025484.c4
-rw-r--r--include/list_menu.h22
-rw-r--r--include/list_menu_items.h21
-rw-r--r--include/scrcmd.h1
-rw-r--r--include/text.h14
-rw-r--r--include/text_02054590.h5
-rw-r--r--include/unk_02022504.h2
-rw-r--r--include/unk_02025484.h2
24 files changed, 1884 insertions, 1891 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 74303ad6..af5b3cfd 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -19,7 +19,7 @@ jobs:
run: |
sudo apt update
sudo ACCEPT_EULA=Y apt -y --fix-missing --allow-downgrades upgrade
- sudo apt -y --allow-downgrades install g++-8-multilib linux-libc-dev binutils-arm-none-eabi
+ sudo apt -y --allow-downgrades install g++-8-multilib linux-libc-dev binutils-arm-none-eabi p7zip-full
sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport
@@ -31,14 +31,14 @@ jobs:
run: |
mkdir -p ~/download
cd ~/download
- wget http://private.martmists.com/mwccarm.zip
- wget http://private.martmists.com/nitro.tar.gz
+ wget https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip
+ wget https://cdn.discordapp.com/attachments/698589325620936736/722822401963851797/NitroSDK-3_2-060901.7z
unzip mwccarm.zip
mv mwccarm $GITHUB_WORKSPACE/tools
- tar xzf nitro.tar.gz
- mv tools/bin $GITHUB_WORKSPACE/tools
- mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7
- mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9
+ 7z x NitroSDK-3_2-060901.7z
+ mv NitroSDK-3_2-060901/tools/bin $GITHUB_WORKSPACE/tools
+ mv NitroSDK-3_2-060901/include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7
+ mv NitroSDK-3_2-060901/include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9
working-directory: ~
- name: Build Diamond
run: make diamond
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 24908839..0be7bc5a 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -36,6 +36,10 @@ Static arm9
Object unk_0200E850.o
Object unk_0201137C.o
Object unk_02011744.o
+ Object unk_02012004.o
+ Object gf_rtc.o
+ Object list_menu_items.o
+ Object unk_02012944.o
Object unk_02012CC8.o
Object mail_message.o
Object unk_020139D8.o
diff --git a/arm9/asm/gf_rtc.s b/arm9/asm/gf_rtc.s
new file mode 100644
index 00000000..a73a4801
--- /dev/null
+++ b/arm9/asm/gf_rtc.s
@@ -0,0 +1,410 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .rodata
+
+ .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 sGFRTCWork
+sGFRTCWork: ; 0x021C4808
+ .space 0x48
+
+ .text
+
+ thumb_func_start GF_InitRTCWork
+GF_InitRTCWork: ; 0x0201259C
+ push {r3, lr}
+ bl RTC_Init
+ ldr r3, _020125CC ; =sGFRTCWork
+ mov r0, #0x0
+ add r2, r3, #0x0
+ add r1, r0, #0x0
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ stmia r2!, {r0-r1}
+ ldr r1, _020125D0 ; =sGFRTCWork
+ str r0, [r1, #0x0]
+ str r0, [r1, #0x4]
+ str r0, [r1, #0x8]
+ add r0, r3, #0x0
+ bl GF_RTC_GetDateTime
+ pop {r3, pc}
+ .balign 4
+_020125CC: .word sGFRTCWork
+_020125D0: .word sGFRTCWork
+
+ thumb_func_start GF_RTC_UpdateOnFrame
+GF_RTC_UpdateOnFrame: ; 0x020125D4
+ push {r3, lr}
+ ldr r0, _020125F4 ; =sGFRTCWork
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ bne _020125F2
+ ldr r1, [r0, #0x8]
+ add r1, r1, #0x1
+ str r1, [r0, #0x8]
+ cmp r1, #0xa
+ ble _020125F2
+ mov r1, #0x0
+ str r1, [r0, #0x8]
+ ldr r0, _020125F8 ; =sGFRTCWork
+ bl GF_RTC_GetDateTime
+_020125F2:
+ pop {r3, pc}
+ .balign 4
+_020125F4: .word sGFRTCWork
+_020125F8: .word sGFRTCWork
+
+ thumb_func_start GF_RTC_GetDateTime_Callback
+GF_RTC_GetDateTime_Callback: ; 0x020125FC
+ push {r4, lr}
+ add r4, r1, #0x0
+ str r0, [r4, #0xc]
+ cmp r0, #0x0
+ beq _0201260A
+ bl ErrorHandling
+_0201260A:
+ add r3, r4, #0x0
+ mov r0, #0x1
+ add r2, r4, #0x0
+ add r3, #0x2c
+ str r0, [r4, #0x0]
+ ldmia r3!, {r0-r1}
+ add r2, #0x10
+ stmia r2!, {r0-r1}
+ ldmia r3!, {r0-r1}
+ stmia r2!, {r0-r1}
+ add r3, r4, #0x0
+ add r3, #0x3c
+ add r2, r4, #0x0
+ ldmia r3!, {r0-r1}
+ add r2, #0x20
+ stmia r2!, {r0-r1}
+ ldr r0, [r3, #0x0]
+ str r0, [r2, #0x0]
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ pop {r4, pc}
+
+ 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 ; =GF_RTC_GetDateTime_Callback
+ add r0, #0x2c
+ add r1, #0x3c
+ add r3, r4, #0x0
+ bl RTC_GetDateTimeAsync
+ str r0, [r4, #0xc]
+ cmp r0, #0x0
+ beq _02012656
+ bl ErrorHandling
+_02012656:
+ pop {r4, pc}
+ .balign 4
+_02012658: .word GF_RTC_GetDateTime_Callback
+
+ thumb_func_start GF_RTC_CopyDateTime
+GF_RTC_CopyDateTime: ; 0x0201265C
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ ldr r0, _02012684 ; =sGFRTCWork
+ add r4, r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ beq _0201266E
+ bl ErrorHandling
+_0201266E:
+ ldr r2, _02012688 ; =sGFRTCWork + 16
+ ldmia r2!, {r0-r1}
+ stmia r5!, {r0-r1}
+ ldmia r2!, {r0-r1}
+ ldr r2, _0201268C ; =sGFRTCWork + 32
+ stmia r5!, {r0-r1}
+ ldmia r2!, {r0-r1}
+ stmia r4!, {r0-r1}
+ ldr r0, [r2, #0x0]
+ str r0, [r4, #0x0]
+ pop {r3-r5, pc}
+ .balign 4
+_02012684: .word sGFRTCWork
+_02012688: .word sGFRTCWork + 16
+_0201268C: .word sGFRTCWork + 32
+
+ thumb_func_start GF_RTC_CopyTime
+GF_RTC_CopyTime: ; 0x02012690
+ push {r4, lr}
+ add r4, r0, #0x0
+ ldr r0, _020126AC ; =sGFRTCWork
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ beq _020126A0
+ bl ErrorHandling
+_020126A0:
+ 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 sGFRTCWork
+_020126B0: .word sGFRTCWork + 32
+
+ thumb_func_start GF_RTC_CopyDate
+GF_RTC_CopyDate: ; 0x020126B4
+ push {r4, lr}
+ add r4, r0, #0x0
+ ldr r0, _020126D0 ; =sGFRTCWork
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ beq _020126C4
+ bl ErrorHandling
+_020126C4:
+ 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 sGFRTCWork
+_020126D4: .word sGFRTCWork + 16
+
+ thumb_func_start GF_RTC_TimeToSec
+GF_RTC_TimeToSec: ; 0x020126D8
+ push {r3-r4}
+ ldr r4, _020126F8 ; =sGFRTCWork + 32
+ mov r0, #0x3c
+ ldr r1, [r4, #0x4]
+ ldr r3, [r4, #0x8]
+ add r2, r1, #0x0
+ mul r2, r0
+ mov r0, #0xe1
+ ldr r1, [r4, #0x0]
+ lsl r0, r0, #0x4
+ mul r0, r1
+ add r0, r2, r0
+ add r0, r3, r0
+ pop {r3-r4}
+ bx lr
+ nop
+_020126F8: .word sGFRTCWork + 32
+
+ thumb_func_start GF_RTC_DateTimeToSec
+GF_RTC_DateTimeToSec: ; 0x020126FC
+ ldr r3, _02012704 ; =RTC_ConvertDateTimeToSecond
+ ldr r0, _02012708 ; =sGFRTCWork + 16
+ ldr r1, _0201270C ; =sGFRTCWork + 32
+ bx r3
+ .balign 4
+_02012704: .word RTC_ConvertDateTimeToSecond
+_02012708: .word sGFRTCWork + 16
+_0201270C: .word sGFRTCWork + 32
+
+ thumb_func_start FUN_02012710
+FUN_02012710: ; 0x02012710
+ push {r4-r6, lr}
+ sub sp, #0x10
+ add r5, r0, #0x0
+ ldr r2, [r5, #0x4]
+ ldr r0, _02012778 ; =sGF_DaysPerMonth - 2
+ lsl r1, r2, #0x1
+ ldrh r0, [r0, r1]
+ ldr r3, [r5, #0x8]
+ add r4, r3, r0
+ cmp r2, #0x3
+ blo _02012752
+ ldr r6, [r5, #0x0]
+ mov r0, #0x1e
+ lsr r2, r6, #0x1f
+ lsl r1, r6, #0x1e
+ sub r1, r1, r2
+ ror r1, r0
+ add r0, r2, r1
+ bne _02012742
+ add r0, r6, #0x0
+ mov r1, #0x64
+ bl _s32_div_f
+ cmp r1, #0x0
+ bne _02012750
+_02012742:
+ mov r1, #0x19
+ add r0, r6, #0x0
+ lsl r1, r1, #0x4
+ bl _s32_div_f
+ cmp r1, #0x0
+ bne _02012752
+_02012750:
+ add r4, r4, #0x1
+_02012752:
+ add r6, r5, #0x0
+ add r3, sp, #0x0
+ add r2, r3, #0x0
+ ldmia r6!, {r0-r1}
+ stmia r3!, {r0-r1}
+ ldmia r6!, {r0-r1}
+ stmia r3!, {r0-r1}
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ add r0, r2, #0x0
+ bl RTC_ConvertDateToDay
+ add r0, r5, #0x0
+ bl RTC_ConvertDateToDay
+ add r0, r4, #0x0
+ add sp, #0x10
+ pop {r4-r6, pc}
+ .balign 4
+_02012778: .word sGF_DaysPerMonth - 2
+
+ thumb_func_start IsNighttime
+IsNighttime: ; 0x0201277C
+ push {r3, lr}
+ bl GF_RTC_GetTimeOfDay
+ cmp r0, #0x3
+ beq _0201278A
+ cmp r0, #0x4
+ bne _0201278E
+_0201278A:
+ mov r0, #0x1
+ pop {r3, pc}
+_0201278E:
+ mov r0, #0x0
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start GF_RTC_GetTimeOfDay
+GF_RTC_GetTimeOfDay: ; 0x02012794
+ push {lr}
+ sub sp, #0xc
+ add r0, sp, #0x0
+ bl GF_RTC_CopyTime
+ ldr r0, [sp, #0x0]
+ bl GF_RTC_GetTimeOfDayByHour
+ add sp, #0xc
+ pop {pc}
+
+ thumb_func_start GF_RTC_GetTimeOfDayByHour
+GF_RTC_GetTimeOfDayByHour: ; 0x020127A8
+ push {r4, lr}
+ add r4, r0, #0x0
+ bmi _020127B2
+ cmp r4, #0x18
+ blt _020127B6
+_020127B2:
+ bl ErrorHandling
+_020127B6:
+ ldr r0, _020127BC ; =sTimeOfDayByHour
+ ldrb r0, [r0, r4]
+ pop {r4, pc}
+ .balign 4
+_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 ; =sMaxDate
+ add r4, r0, #0x0
+ add r7, r1, #0x0
+ add r5, r2, #0x0
+ add r2, sp, #0x14
+ ldmia r3!, {r0-r1}
+ str r2, [sp, #0x0]
+ stmia r2!, {r0-r1}
+ ldmia r3!, {r0-r1}
+ stmia r2!, {r0-r1}
+ ldr r3, _02012830 ; =sMaxTime
+ add r2, sp, #0x8
+ ldmia r3!, {r0-r1}
+ str r2, [sp, #0x4]
+ stmia r2!, {r0-r1}
+ ldr r0, [r3, #0x0]
+ ldr r1, [sp, #0x4]
+ str r0, [r2, #0x0]
+ ldr r0, [sp, #0x0]
+ bl RTC_ConvertDateTimeToSecond
+ add r2, r1, #0x0
+ add r3, r0, #0x0
+ mov r1, #0x0
+ ldr r0, _02012834 ; =0xBC19137F
+ eor r1, r2
+ eor r0, r3
+ orr r0, r1
+ beq _02012804
+ bl ErrorHandling
+_02012804:
+ sub r0, r4, r5
+ mov r12, r7
+ mov r0, r12
+ sbc r0, r6
+ bge _02012818
+ sub r0, r5, r4
+ sbc r6, r7
+ add sp, #0x24
+ add r1, r6, #0x0
+ pop {r4-r7, pc}
+_02012818:
+ ldr r0, _02012834 ; =0xBC19137F
+ mov r1, #0x0
+ sub r0, r0, r4
+ sbc r1, r7
+ add r0, r5, r0
+ adc r6, r1
+ add r1, r6, #0x0
+ add sp, #0x24
+ pop {r4-r7, pc}
+ nop
+_0201282C: .word sMaxDate
+_02012830: .word sMaxTime
+_02012834: .word 0xBC19137F
diff --git a/arm9/asm/unk_02011744.s b/arm9/asm/unk_02011744.s
index 98fd8b7e..40ddf1ab 100644
--- a/arm9/asm/unk_02011744.s
+++ b/arm9/asm/unk_02011744.s
@@ -20,81 +20,6 @@ UNK_020ED398: ; 0x020ED398
.byte 0x01, 0x02
.byte 0x01, 0x01
- .global UNK_020ED3B0
-UNK_020ED3B0: ; 0x020ED3B0
- .word 0x00000147
- .word 0x000001EF
-
- .global UNK_020ED3B8
-UNK_020ED3B8: ; 0x020ED3B8
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00
-
- .global UNK_020ED3C8
-UNK_020ED3C8: ; 0x020ED3C8
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00
-
- .global UNK_020ED3D8
-UNK_020ED3D8: ; 0x020ED3D8
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
- .byte 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
- .byte 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
- .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_020ED438
-UNK_020ED438: ; 0x020ED438
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
- .byte 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
- .byte 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
- .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 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 sGFRTCWork
-sGFRTCWork: ; 0x021C4808
- .space 0x48
-
.text
thumb_func_start FUN_02011744
@@ -1296,1738 +1221,3 @@ FUN_02011FF4: ; 0x02011FF4
str r0, [r1, #0xc]
bx lr
.balign 4
-
- thumb_func_start FUN_02012004
-FUN_02012004: ; 0x02012004
- push {r3-r7, lr}
- sub sp, #0x8
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x24]
- ldr r6, [sp, #0x20]
- str r1, [sp, #0x4]
- add r5, r2, #0x0
- add r4, r3, #0x0
- str r0, [sp, #0x24]
- mov r7, #0x0
-_02012018:
- ldr r1, [r4, #0x0]
- ldr r0, [sp, #0x4]
- ldr r2, [r5, #0x0]
- add r0, r0, r1
- ldr r1, [sp, #0x0]
- add r1, r1, r2
- add r2, r6, #0x0
- bl memcpy
- ldr r1, [r5, #0x0]
- ldr r0, [sp, #0x24]
- add r7, r7, #0x1
- add r0, r1, r0
- str r0, [r5, #0x0]
- ldr r0, [r4, #0x0]
- add r0, r0, r6
- str r0, [r4, #0x0]
- cmp r7, #0x8
- blt _02012018
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02012044
-FUN_02012044: ; 0x02012044
- push {r4-r6, lr}
- add r5, r3, #0x0
- bl AllocAndReadWholeNarcMemberByIdPair
- add r4, r0, #0x0
- bne _02012054
- bl ErrorHandling
-_02012054:
- add r0, r4, #0x0
- add r1, r5, #0x0
- bl FUN_020B0088
- add r6, r0, #0x0
- cmp r5, #0x0
- bne _02012066
- bl ErrorHandling
-_02012066:
- cmp r6, #0x0
- bne _0201206E
- bl ErrorHandling
-_0201206E:
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02012078
-FUN_02012078: ; 0x02012078
- push {r4-r7, lr}
- sub sp, #0x2c
- ldr r4, [sp, #0x40]
- str r0, [sp, #0x8]
- add r6, r0, r2
- ldrh r0, [r4, #0x2]
- str r1, [sp, #0xc]
- add r5, r3, #0x0
- cmp r0, r6
- bge _02012090
- bl ErrorHandling
-_02012090:
- ldr r0, [sp, #0xc]
- ldrh r1, [r4, #0x0]
- add r0, r0, r5
- str r0, [sp, #0x14]
- cmp r1, r0
- bge _020120A0
- bl ErrorHandling
-_020120A0:
- ldr r0, [r4, #0x14]
- str r0, [sp, #0x20]
- ldr r0, [sp, #0x44]
- str r0, [sp, #0x1c]
- ldrh r0, [r4, #0x2]
- lsl r7, r0, #0x2
- ldr r0, [sp, #0xc]
- add r1, r0, #0x0
- mul r1, r7
- ldr r0, [sp, #0x8]
- str r1, [sp, #0x18]
- lsl r1, r0, #0x2
- ldr r0, [sp, #0x18]
- str r1, [sp, #0x10]
- add r0, r1, r0
- str r0, [sp, #0x28]
- mov r0, #0x0
- str r0, [sp, #0x24]
- ldr r1, [sp, #0xc]
- ldr r0, [sp, #0x14]
- cmp r1, r0
- bge _0201210A
-_020120CC:
- ldr r4, [sp, #0x8]
- add r0, r4, #0x0
- cmp r0, r6
- bge _020120F8
- ldr r0, [sp, #0x18]
- lsl r1, r0, #0x3
- ldr r0, [sp, #0x10]
- add r5, r0, r1
-_020120DC:
- str r5, [sp, #0x28]
- mov r0, #0x4
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x20]
- ldr r1, [sp, #0x1c]
- add r2, sp, #0x28
- add r3, sp, #0x24
- str r7, [sp, #0x4]
- bl FUN_02012004
- add r4, r4, #0x1
- add r5, r5, #0x4
- cmp r4, r6
- blt _020120DC
-_020120F8:
- ldr r0, [sp, #0x18]
- add r0, r0, r7
- str r0, [sp, #0x18]
- ldr r0, [sp, #0xc]
- add r1, r0, #0x1
- ldr r0, [sp, #0x14]
- str r1, [sp, #0xc]
- cmp r1, r0
- blt _020120CC
-_0201210A:
- add sp, #0x2c
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02012110
-FUN_02012110: ; 0x02012110
- push {r4-r5}
- sub sp, #0x8
- ldr r2, _02012148 ; =UNK_020ED3B0
- add r1, sp, #0x0
- ldr r3, [r2, #0x0]
- ldr r2, [r2, #0x4]
- str r3, [sp, #0x0]
- str r2, [sp, #0x4]
- ldr r2, _0201214C ; =0x000001EF
- mov r5, #0x0
- add r3, r2, #0x0
-_02012126:
- ldr r4, [r1, #0x0]
- cmp r4, r3
- beq _02012140
- cmp r4, r0
- bne _02012138
- add sp, #0x8
- mov r0, #0x1
- pop {r4-r5}
- bx lr
-_02012138:
- add r5, r5, #0x1
- add r1, r1, #0x4
- cmp r5, r2
- blt _02012126
-_02012140:
- mov r0, #0x0
- add sp, #0x8
- pop {r4-r5}
- bx lr
- .balign 4
-_02012148: .word UNK_020ED3B0
-_0201214C: .word 0x000001EF
-
- thumb_func_start FUN_02012150
-FUN_02012150: ; 0x02012150
- push {r3-r4, lr}
- sub sp, #0xc
- add r4, r3, #0x0
- mov r3, #0x0
- str r3, [sp, #0x8]
- add r3, sp, #0x8
- bl FUN_02012044
- ldr r0, [sp, #0x8]
- ldr r0, [r0, #0x14]
- bl FUN_02008A74
- ldr r0, [sp, #0x34]
- bl FUN_02012110
- ldr r1, [sp, #0x30]
- cmp r1, #0x2
- bne _02012184
- cmp r0, #0x1
- bne _02012184
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0x28]
- ldr r0, [r0, #0x14]
- ldr r2, [sp, #0x2c]
- bl FUN_02008904
-_02012184:
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0x18]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x24]
- ldr r2, [sp, #0x1c]
- str r0, [sp, #0x4]
- ldr r3, [sp, #0x20]
- add r0, r4, #0x0
- bl FUN_02012078
- add sp, #0xc
- pop {r3-r4, pc}
-
- thumb_func_start FUN_0201219C
-FUN_0201219C: ; 0x0201219C
- push {r4-r7, lr}
- sub sp, #0x24
- add r7, r1, #0x0
- add r5, r2, #0x0
- ldr r2, [sp, #0x3c]
- ldr r1, [sp, #0x40]
- add r6, r0, #0x0
- mul r1, r2
- add r0, r5, #0x0
- lsl r1, r1, #0x5
- str r3, [sp, #0x20]
- bl AllocFromHeap
- add r4, r0, #0x0
- ldr r0, [sp, #0x38]
- ldr r3, [sp, #0x20]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x3c]
- add r1, r7, #0x0
- str r0, [sp, #0x4]
- ldr r0, [sp, #0x40]
- add r2, r5, #0x0
- str r0, [sp, #0x8]
- ldr r0, [sp, #0x44]
- str r4, [sp, #0xc]
- str r0, [sp, #0x10]
- ldr r0, [sp, #0x48]
- str r0, [sp, #0x14]
- ldr r0, [sp, #0x4c]
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x50]
- str r0, [sp, #0x1c]
- add r0, r6, #0x0
- bl FUN_02012150
- add r0, r4, #0x0
- add sp, #0x24
- pop {r4-r7, pc}
-
- thumb_func_start FUN_020121E8
-FUN_020121E8: ; 0x020121E8
- push {r3-r7, lr}
- sub sp, #0x30
- str r3, [sp, #0x8]
- ldr r3, [sp, #0x48]
- str r3, [sp, #0x48]
- mov r3, #0x0
- str r3, [sp, #0x2c]
- bl AllocAndReadWholeNarcMemberByIdPair
- str r0, [sp, #0x20]
- cmp r0, #0x0
- bne _02012204
- bl ErrorHandling
-_02012204:
- ldr r0, [sp, #0x20]
- add r1, sp, #0x2c
- bl FUN_020B0088
- cmp r0, #0x0
- bne _02012214
- bl ErrorHandling
-_02012214:
- ldr r1, [sp, #0x4c]
- ldr r0, [sp, #0x8]
- add r6, r0, r1
- ldr r0, [sp, #0x2c]
- ldrh r0, [r0, #0x2]
- cmp r0, r6
- bge _02012226
- bl ErrorHandling
-_02012226:
- ldr r1, [sp, #0x50]
- ldr r0, [sp, #0x48]
- add r0, r0, r1
- str r0, [sp, #0x10]
- ldr r0, [sp, #0x2c]
- ldrh r1, [r0, #0x0]
- ldr r0, [sp, #0x10]
- cmp r1, r0
- bge _0201223C
- bl ErrorHandling
-_0201223C:
- ldr r0, [sp, #0x2c]
- ldr r0, [r0, #0x14]
- str r0, [sp, #0x1c]
- bl FUN_02008A74
- ldr r0, [sp, #0x54]
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x2c]
- ldrh r0, [r0, #0x2]
- lsl r7, r0, #0x2
- ldr r0, [sp, #0x48]
- add r1, r0, #0x0
- mul r1, r7
- ldr r0, [sp, #0x8]
- str r1, [sp, #0x14]
- lsl r1, r0, #0x2
- ldr r0, [sp, #0x14]
- str r1, [sp, #0xc]
- add r0, r1, r0
- str r0, [sp, #0x28]
- mov r0, #0x0
- str r0, [sp, #0x24]
- ldr r1, [sp, #0x48]
- ldr r0, [sp, #0x10]
- cmp r1, r0
- bge _020122AE
-_02012270:
- ldr r4, [sp, #0x8]
- add r0, r4, #0x0
- cmp r0, r6
- bge _0201229C
- ldr r0, [sp, #0x14]
- lsl r1, r0, #0x3
- ldr r0, [sp, #0xc]
- add r5, r0, r1
-_02012280:
- str r5, [sp, #0x28]
- mov r0, #0x4
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #0x18]
- add r2, sp, #0x28
- add r3, sp, #0x24
- str r7, [sp, #0x4]
- bl FUN_02012004
- add r4, r4, #0x1
- add r5, r5, #0x4
- cmp r4, r6
- blt _02012280
-_0201229C:
- ldr r0, [sp, #0x14]
- add r0, r0, r7
- str r0, [sp, #0x14]
- ldr r0, [sp, #0x48]
- add r1, r0, #0x1
- ldr r0, [sp, #0x10]
- str r1, [sp, #0x48]
- cmp r1, r0
- blt _02012270
-_020122AE:
- ldr r0, [sp, #0x20]
- bl FreeToHeap
- add sp, #0x30
- pop {r3-r7, pc}
-
- thumb_func_start FUN_020122B8
-FUN_020122B8: ; 0x020122B8
- push {r4-r7, lr}
- sub sp, #0x14
- add r7, r1, #0x0
- add r5, r2, #0x0
- ldr r2, [sp, #0x2c]
- ldr r1, [sp, #0x30]
- add r6, r0, #0x0
- mul r1, r2
- add r0, r5, #0x0
- lsl r1, r1, #0x5
- str r3, [sp, #0x10]
- bl AllocFromHeap
- add r4, r0, #0x0
- ldr r0, [sp, #0x28]
- ldr r3, [sp, #0x10]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x2c]
- add r1, r7, #0x0
- str r0, [sp, #0x4]
- ldr r0, [sp, #0x30]
- add r2, r5, #0x0
- str r0, [sp, #0x8]
- add r0, r6, #0x0
- str r4, [sp, #0xc]
- bl FUN_020121E8
- add r0, r4, #0x0
- add sp, #0x14
- pop {r4-r7, pc}
-
- thumb_func_start FUN_020122F4
-FUN_020122F4: ; 0x020122F4
- push {r3-r7, lr}
- sub sp, #0x20
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x44]
- ldr r1, [sp, #0x38]
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x48]
- str r2, [sp, #0x4]
- str r0, [sp, #0x14]
- add r0, r2, #0x0
- add r7, r0, r1
- ldr r1, [sp, #0x3c]
- add r0, r3, #0x0
- add r0, r0, r1
- add r1, r3, #0x0
- str r3, [sp, #0x8]
- ldr r5, [sp, #0x40]
- str r0, [sp, #0x10]
- cmp r1, r0
- bge _0201236C
- add r0, r3, #0x0
- lsl r0, r0, #0x5
- str r0, [sp, #0xc]
- add r0, r2, #0x0
- lsl r0, r0, #0x5
- str r0, [sp, #0x1c]
-_02012328:
- ldr r6, [sp, #0x4]
- add r0, r6, #0x0
- cmp r0, r7
- bge _0201235A
- ldr r1, [sp, #0x0]
- ldr r0, [sp, #0xc]
- add r2, r1, #0x0
- mul r2, r0
- ldr r0, [sp, #0x1c]
- add r4, r0, r2
-_0201233C:
- ldr r1, [r5, #0x0]
- ldr r0, [sp, #0x14]
- mov r2, #0x20
- add r0, r0, r1
- ldr r1, [sp, #0x18]
- add r1, r1, r4
- bl memcpy
- ldr r0, [r5, #0x0]
- add r6, r6, #0x1
- add r0, #0x20
- str r0, [r5, #0x0]
- add r4, #0x20
- cmp r6, r7
- blt _0201233C
-_0201235A:
- ldr r0, [sp, #0xc]
- add r0, #0x20
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x8]
- add r1, r0, #0x1
- ldr r0, [sp, #0x10]
- str r1, [sp, #0x8]
- cmp r1, r0
- blt _02012328
-_0201236C:
- add sp, #0x20
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02012370
-FUN_02012370: ; 0x02012370
- push {r3-r4, lr}
- sub sp, #0x14
- add r4, r2, #0x0
- ldr r2, [r4, #0x8]
- str r2, [sp, #0x0]
- ldr r2, [r4, #0xc]
- str r2, [sp, #0x4]
- ldr r2, [sp, #0x20]
- str r3, [sp, #0x8]
- str r2, [sp, #0xc]
- ldr r2, [sp, #0x24]
- str r2, [sp, #0x10]
- ldr r2, [r4, #0x0]
- ldr r3, [r4, #0x4]
- bl FUN_020122F4
- add sp, #0x14
- pop {r3-r4, pc}
-
- thumb_func_start FUN_02012394
-FUN_02012394: ; 0x02012394
- push {r4-r7, lr}
- sub sp, #0x7c
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x9c]
- mov r12, r3
- add r5, r2, #0x0
- ldr r6, [sp, #0x94]
- ldr r7, [sp, #0x98]
- ldr r3, _020123FC ; =UNK_020ED3D8
- str r1, [sp, #0x10]
- str r0, [sp, #0x9c]
- add r2, sp, #0x1c
- mov r4, #0xc
-_020123AE:
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- sub r4, r4, #0x1
- bne _020123AE
- mov r0, #0x0
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x90]
- ldr r1, [sp, #0x10]
- str r0, [sp, #0x0]
- str r6, [sp, #0x4]
- ldr r0, [sp, #0xc]
- add r2, r5, #0x0
- mov r3, r12
- str r7, [sp, #0x8]
- bl FUN_020122B8
- str r0, [sp, #0x14]
- mov r4, #0x0
- add r5, sp, #0x1c
-_020123D4:
- ldr r0, [sp, #0x14]
- add r1, r7, #0x0
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x9c]
- add r2, r5, #0x0
- str r0, [sp, #0x4]
- add r0, r6, #0x0
- add r3, sp, #0x18
- bl FUN_02012370
- add r4, r4, #0x1
- add r5, #0x10
- cmp r4, #0x6
- blt _020123D4
- ldr r0, [sp, #0x14]
- bl FreeToHeap
- add sp, #0x7c
- pop {r4-r7, pc}
- nop
-_020123FC: .word UNK_020ED3D8
-
- thumb_func_start FUN_02012400
-FUN_02012400: ; 0x02012400
- push {r4, lr}
- sub sp, #0x10
- ldr r4, [r3, #0x4]
- str r4, [sp, #0x0]
- ldr r4, [r3, #0x8]
- str r4, [sp, #0x4]
- ldr r4, [r3, #0xc]
- str r4, [sp, #0x8]
- ldr r4, [sp, #0x18]
- str r4, [sp, #0xc]
- ldr r3, [r3, #0x0]
- bl FUN_02012394
- add sp, #0x10
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02012420
-FUN_02012420: ; 0x02012420
- push {r4-r7, lr}
- sub sp, #0x14
- ldr r4, _02012448 ; =UNK_020ED3B8
- add r5, r3, #0x0
- add r3, sp, #0x4
- add r7, r0, #0x0
- mov r12, r1
- add r6, r3, #0x0
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- add r0, r7, #0x0
- mov r1, r12
- add r3, r6, #0x0
- str r5, [sp, #0x0]
- bl FUN_02012400
- add sp, #0x14
- pop {r4-r7, pc}
- .balign 4
-_02012448: .word UNK_020ED3B8
-
- thumb_func_start FUN_0201244C
-FUN_0201244C: ; 0x0201244C
- push {r3-r7, lr}
- add r6, r1, #0x0
- mov r1, #0x32
- add r7, r2, #0x0
- add r5, r0, #0x0
- add r0, r7, #0x0
- lsl r1, r1, #0x6
- bl AllocFromHeap
- add r4, r0, #0x0
- add r0, r5, #0x0
- add r1, r6, #0x0
- add r2, r7, #0x0
- add r3, r4, #0x0
- bl FUN_02012420
- add r0, r4, #0x0
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02012470
-FUN_02012470: ; 0x02012470
- push {r3-r7, lr}
- add r7, r2, #0x0
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r0, r7, #0x0
- mov r1, #0x20
- bl AllocFromHeap
- add r4, r0, #0x0
- add r0, r5, #0x0
- add r1, r6, #0x0
- add r2, r7, #0x0
- bl AllocAndReadWholeNarcMemberByIdPair
- add r1, sp, #0x0
- add r5, r0, #0x0
- bl FUN_020B0138
- cmp r0, #0x1
- beq _0201249C
- bl ErrorHandling
-_0201249C:
- ldr r0, [sp, #0x0]
- add r1, r4, #0x0
- ldr r0, [r0, #0xc]
- mov r2, #0x20
- bl MIi_CpuCopy16
- add r0, r5, #0x0
- bl FreeToHeap
- add r0, r4, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020124B4
-FUN_020124B4: ; 0x020124B4
- push {r4-r7, lr}
- sub sp, #0x8c
- str r0, [sp, #0x1c]
- ldr r0, [sp, #0xac]
- mov r12, r3
- add r5, r2, #0x0
- ldr r6, [sp, #0xa4]
- ldr r7, [sp, #0xa8]
- ldr r3, _0201252C ; =UNK_020ED438
- str r1, [sp, #0x20]
- str r0, [sp, #0xac]
- add r2, sp, #0x2c
- mov r4, #0xc
-_020124CE:
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- sub r4, r4, #0x1
- bne _020124CE
- mov r0, #0x0
- str r0, [sp, #0x28]
- ldr r0, [sp, #0xa0]
- ldr r1, [sp, #0x20]
- str r0, [sp, #0x0]
- str r6, [sp, #0x4]
- ldr r0, [sp, #0xb0]
- str r7, [sp, #0x8]
- str r0, [sp, #0xc]
- ldr r0, [sp, #0xb4]
- add r2, r5, #0x0
- str r0, [sp, #0x10]
- ldr r0, [sp, #0xb8]
- mov r3, r12
- str r0, [sp, #0x14]
- ldr r0, [sp, #0xbc]
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x1c]
- bl FUN_0201219C
- str r0, [sp, #0x24]
- mov r4, #0x0
- add r5, sp, #0x2c
-_02012504:
- ldr r0, [sp, #0x24]
- add r1, r7, #0x0
- str r0, [sp, #0x0]
- ldr r0, [sp, #0xac]
- add r2, r5, #0x0
- str r0, [sp, #0x4]
- add r0, r6, #0x0
- add r3, sp, #0x28
- bl FUN_02012370
- add r4, r4, #0x1
- add r5, #0x10
- cmp r4, #0x6
- blt _02012504
- ldr r0, [sp, #0x24]
- bl FreeToHeap
- add sp, #0x8c
- pop {r4-r7, pc}
- nop
-_0201252C: .word UNK_020ED438
-
- thumb_func_start FUN_02012530
-FUN_02012530: ; 0x02012530
- push {r4, lr}
- sub sp, #0x20
- ldr r4, [r3, #0x4]
- str r4, [sp, #0x0]
- ldr r4, [r3, #0x8]
- str r4, [sp, #0x4]
- ldr r4, [r3, #0xc]
- str r4, [sp, #0x8]
- ldr r4, [sp, #0x28]
- str r4, [sp, #0xc]
- ldr r4, [sp, #0x2c]
- str r4, [sp, #0x10]
- ldr r4, [sp, #0x30]
- str r4, [sp, #0x14]
- ldr r4, [sp, #0x34]
- str r4, [sp, #0x18]
- ldr r4, [sp, #0x38]
- str r4, [sp, #0x1c]
- ldr r3, [r3, #0x0]
- bl FUN_020124B4
- add sp, #0x20
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02012560
-FUN_02012560: ; 0x02012560
- push {r4-r7, lr}
- sub sp, #0x24
- ldr r4, _02012598 ; =UNK_020ED3C8
- add r5, r3, #0x0
- add r3, sp, #0x14
- add r7, r0, #0x0
- mov r12, r1
- add r6, r3, #0x0
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- ldr r0, [sp, #0x38]
- str r5, [sp, #0x0]
- str r0, [sp, #0x4]
- ldr r0, [sp, #0x3c]
- mov r1, r12
- str r0, [sp, #0x8]
- ldr r0, [sp, #0x40]
- add r3, r6, #0x0
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x44]
- str r0, [sp, #0x10]
- add r0, r7, #0x0
- bl FUN_02012530
- add sp, #0x24
- pop {r4-r7, pc}
- .balign 4
-_02012598: .word UNK_020ED3C8
-
- thumb_func_start GF_InitRTCWork
-GF_InitRTCWork: ; 0x0201259C
- push {r3, lr}
- bl RTC_Init
- ldr r3, _020125CC ; =sGFRTCWork
- mov r0, #0x0
- add r2, r3, #0x0
- add r1, r0, #0x0
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- stmia r2!, {r0-r1}
- ldr r1, _020125D0 ; =sGFRTCWork
- str r0, [r1, #0x0]
- str r0, [r1, #0x4]
- str r0, [r1, #0x8]
- add r0, r3, #0x0
- bl GF_RTC_GetDateTime
- pop {r3, pc}
- .balign 4
-_020125CC: .word sGFRTCWork
-_020125D0: .word sGFRTCWork
-
- thumb_func_start GF_RTC_UpdateOnFrame
-GF_RTC_UpdateOnFrame: ; 0x020125D4
- push {r3, lr}
- ldr r0, _020125F4 ; =sGFRTCWork
- ldr r1, [r0, #0x4]
- cmp r1, #0x0
- bne _020125F2
- ldr r1, [r0, #0x8]
- add r1, r1, #0x1
- str r1, [r0, #0x8]
- cmp r1, #0xa
- ble _020125F2
- mov r1, #0x0
- str r1, [r0, #0x8]
- ldr r0, _020125F8 ; =sGFRTCWork
- bl GF_RTC_GetDateTime
-_020125F2:
- pop {r3, pc}
- .balign 4
-_020125F4: .word sGFRTCWork
-_020125F8: .word sGFRTCWork
-
- thumb_func_start GF_RTC_GetDateTime_Callback
-GF_RTC_GetDateTime_Callback: ; 0x020125FC
- push {r4, lr}
- add r4, r1, #0x0
- str r0, [r4, #0xc]
- cmp r0, #0x0
- beq _0201260A
- bl ErrorHandling
-_0201260A:
- add r3, r4, #0x0
- mov r0, #0x1
- add r2, r4, #0x0
- add r3, #0x2c
- str r0, [r4, #0x0]
- ldmia r3!, {r0-r1}
- add r2, #0x10
- stmia r2!, {r0-r1}
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- add r3, r4, #0x0
- add r3, #0x3c
- add r2, r4, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x20
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- mov r0, #0x0
- str r0, [r4, #0x4]
- pop {r4, pc}
-
- 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 ; =GF_RTC_GetDateTime_Callback
- add r0, #0x2c
- add r1, #0x3c
- add r3, r4, #0x0
- bl RTC_GetDateTimeAsync
- str r0, [r4, #0xc]
- cmp r0, #0x0
- beq _02012656
- bl ErrorHandling
-_02012656:
- pop {r4, pc}
- .balign 4
-_02012658: .word GF_RTC_GetDateTime_Callback
-
- thumb_func_start GF_RTC_CopyDateTime
-GF_RTC_CopyDateTime: ; 0x0201265C
- push {r3-r5, lr}
- add r5, r0, #0x0
- ldr r0, _02012684 ; =sGFRTCWork
- add r4, r1, #0x0
- ldr r0, [r0, #0x0]
- cmp r0, #0x1
- beq _0201266E
- bl ErrorHandling
-_0201266E:
- ldr r2, _02012688 ; =sGFRTCWork + 16
- ldmia r2!, {r0-r1}
- stmia r5!, {r0-r1}
- ldmia r2!, {r0-r1}
- ldr r2, _0201268C ; =sGFRTCWork + 32
- stmia r5!, {r0-r1}
- ldmia r2!, {r0-r1}
- stmia r4!, {r0-r1}
- ldr r0, [r2, #0x0]
- str r0, [r4, #0x0]
- pop {r3-r5, pc}
- .balign 4
-_02012684: .word sGFRTCWork
-_02012688: .word sGFRTCWork + 16
-_0201268C: .word sGFRTCWork + 32
-
- thumb_func_start GF_RTC_CopyTime
-GF_RTC_CopyTime: ; 0x02012690
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, _020126AC ; =sGFRTCWork
- ldr r0, [r0, #0x0]
- cmp r0, #0x1
- beq _020126A0
- bl ErrorHandling
-_020126A0:
- 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 sGFRTCWork
-_020126B0: .word sGFRTCWork + 32
-
- thumb_func_start GF_RTC_CopyDate
-GF_RTC_CopyDate: ; 0x020126B4
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, _020126D0 ; =sGFRTCWork
- ldr r0, [r0, #0x0]
- cmp r0, #0x1
- beq _020126C4
- bl ErrorHandling
-_020126C4:
- 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 sGFRTCWork
-_020126D4: .word sGFRTCWork + 16
-
- thumb_func_start GF_RTC_TimeToSec
-GF_RTC_TimeToSec: ; 0x020126D8
- push {r3-r4}
- ldr r4, _020126F8 ; =sGFRTCWork + 32
- mov r0, #0x3c
- ldr r1, [r4, #0x4]
- ldr r3, [r4, #0x8]
- add r2, r1, #0x0
- mul r2, r0
- mov r0, #0xe1
- ldr r1, [r4, #0x0]
- lsl r0, r0, #0x4
- mul r0, r1
- add r0, r2, r0
- add r0, r3, r0
- pop {r3-r4}
- bx lr
- nop
-_020126F8: .word sGFRTCWork + 32
-
- thumb_func_start GF_RTC_DateTimeToSec
-GF_RTC_DateTimeToSec: ; 0x020126FC
- ldr r3, _02012704 ; =RTC_ConvertDateTimeToSecond
- ldr r0, _02012708 ; =sGFRTCWork + 16
- ldr r1, _0201270C ; =sGFRTCWork + 32
- bx r3
- .balign 4
-_02012704: .word RTC_ConvertDateTimeToSecond
-_02012708: .word sGFRTCWork + 16
-_0201270C: .word sGFRTCWork + 32
-
- thumb_func_start FUN_02012710
-FUN_02012710: ; 0x02012710
- push {r4-r6, lr}
- sub sp, #0x10
- add r5, r0, #0x0
- ldr r2, [r5, #0x4]
- ldr r0, _02012778 ; =sGF_DaysPerMonth - 2
- lsl r1, r2, #0x1
- ldrh r0, [r0, r1]
- ldr r3, [r5, #0x8]
- add r4, r3, r0
- cmp r2, #0x3
- blo _02012752
- ldr r6, [r5, #0x0]
- mov r0, #0x1e
- lsr r2, r6, #0x1f
- lsl r1, r6, #0x1e
- sub r1, r1, r2
- ror r1, r0
- add r0, r2, r1
- bne _02012742
- add r0, r6, #0x0
- mov r1, #0x64
- bl _s32_div_f
- cmp r1, #0x0
- bne _02012750
-_02012742:
- mov r1, #0x19
- add r0, r6, #0x0
- lsl r1, r1, #0x4
- bl _s32_div_f
- cmp r1, #0x0
- bne _02012752
-_02012750:
- add r4, r4, #0x1
-_02012752:
- add r6, r5, #0x0
- add r3, sp, #0x0
- add r2, r3, #0x0
- ldmia r6!, {r0-r1}
- stmia r3!, {r0-r1}
- ldmia r6!, {r0-r1}
- stmia r3!, {r0-r1}
- mov r0, #0x1
- str r0, [sp, #0x4]
- str r0, [sp, #0x8]
- add r0, r2, #0x0
- bl RTC_ConvertDateToDay
- add r0, r5, #0x0
- bl RTC_ConvertDateToDay
- add r0, r4, #0x0
- add sp, #0x10
- pop {r4-r6, pc}
- .balign 4
-_02012778: .word sGF_DaysPerMonth - 2
-
- thumb_func_start IsNighttime
-IsNighttime: ; 0x0201277C
- push {r3, lr}
- bl GF_RTC_GetTimeOfDay
- cmp r0, #0x3
- beq _0201278A
- cmp r0, #0x4
- bne _0201278E
-_0201278A:
- mov r0, #0x1
- pop {r3, pc}
-_0201278E:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start GF_RTC_GetTimeOfDay
-GF_RTC_GetTimeOfDay: ; 0x02012794
- push {lr}
- sub sp, #0xc
- add r0, sp, #0x0
- bl GF_RTC_CopyTime
- ldr r0, [sp, #0x0]
- bl GF_RTC_GetTimeOfDayByHour
- add sp, #0xc
- pop {pc}
-
- thumb_func_start GF_RTC_GetTimeOfDayByHour
-GF_RTC_GetTimeOfDayByHour: ; 0x020127A8
- push {r4, lr}
- add r4, r0, #0x0
- bmi _020127B2
- cmp r4, #0x18
- blt _020127B6
-_020127B2:
- bl ErrorHandling
-_020127B6:
- ldr r0, _020127BC ; =sTimeOfDayByHour
- ldrb r0, [r0, r4]
- pop {r4, pc}
- .balign 4
-_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 ; =sMaxDate
- add r4, r0, #0x0
- add r7, r1, #0x0
- add r5, r2, #0x0
- add r2, sp, #0x14
- ldmia r3!, {r0-r1}
- str r2, [sp, #0x0]
- stmia r2!, {r0-r1}
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldr r3, _02012830 ; =sMaxTime
- add r2, sp, #0x8
- ldmia r3!, {r0-r1}
- str r2, [sp, #0x4]
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- ldr r1, [sp, #0x4]
- str r0, [r2, #0x0]
- ldr r0, [sp, #0x0]
- bl RTC_ConvertDateTimeToSecond
- add r2, r1, #0x0
- add r3, r0, #0x0
- mov r1, #0x0
- ldr r0, _02012834 ; =0xBC19137F
- eor r1, r2
- eor r0, r3
- orr r0, r1
- beq _02012804
- bl ErrorHandling
-_02012804:
- sub r0, r4, r5
- mov r12, r7
- mov r0, r12
- sbc r0, r6
- bge _02012818
- sub r0, r5, r4
- sbc r6, r7
- add sp, #0x24
- add r1, r6, #0x0
- pop {r4-r7, pc}
-_02012818:
- ldr r0, _02012834 ; =0xBC19137F
- mov r1, #0x0
- sub r0, r0, r4
- sbc r1, r7
- add r0, r5, r0
- adc r6, r1
- add r1, r6, #0x0
- add sp, #0x24
- pop {r4-r7, pc}
- nop
-_0201282C: .word sMaxDate
-_02012830: .word sMaxTime
-_02012834: .word 0xBC19137F
-
- thumb_func_start ListMenuItems_ctor
-ListMenuItems_ctor: ; 0x02012838
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- add r1, r5, #0x1
- add r0, r4, #0x0
- lsl r1, r1, #0x3
- bl AllocFromHeap
- cmp r0, #0x0
- beq _0201286E
- mov r2, #0x0
- cmp r5, #0x0
- bls _02012862
- add r3, r0, #0x0
- add r1, r2, #0x0
-_02012856:
- str r1, [r3, #0x0]
- str r1, [r3, #0x4]
- add r2, r2, #0x1
- add r3, #0x8
- cmp r2, r5
- blo _02012856
-_02012862:
- mov r1, #0x0
- lsl r2, r2, #0x3
- mvn r1, r1
- str r1, [r0, r2]
- add r1, r0, r2
- str r4, [r1, #0x4]
-_0201286E:
- pop {r3-r5, pc}
-
- thumb_func_start ListMenuItems_dtor
-ListMenuItems_dtor: ; 0x02012870
- push {r4, lr}
- add r4, r0, #0x0
- bl ListMenuItems_DestroyMenuStrings
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r4, pc}
-
- thumb_func_start ListMenuItems_AppendFromMsgData
-ListMenuItems_AppendFromMsgData: ; 0x02012880
- push {r3-r7, lr}
- add r6, r1, #0x0
- add r1, sp, #0x0
- add r7, r2, #0x0
- add r5, r3, #0x0
- bl ListMenuItems_NewItem
- add r4, r0, #0x0
- beq _0201289E
- add r0, r6, #0x0
- add r1, r7, #0x0
- bl NewString_ReadMsgData
- str r0, [r4, #0x0]
- str r5, [r4, #0x4]
-_0201289E:
- pop {r3-r7, pc}
-
- thumb_func_start ListMenuItems_AddItem
-ListMenuItems_AddItem: ; 0x020128A0
- push {r3-r6, lr}
- sub sp, #0x4
- add r6, r1, #0x0
- add r1, sp, #0x0
- add r5, r2, #0x0
- bl ListMenuItems_NewItem
- add r4, r0, #0x0
- beq _020128BE
- ldr r1, [sp, #0x0]
- add r0, r6, #0x0
- bl StringDup
- str r0, [r4, #0x0]
- str r5, [r4, #0x4]
-_020128BE:
- add sp, #0x4
- pop {r3-r6, pc}
- .balign 4
-
- thumb_func_start ListMenuItems_CopyItem
-ListMenuItems_CopyItem: ; 0x020128C4
- push {r3-r4, lr}
- sub sp, #0x4
- add r4, r1, #0x0
- add r1, sp, #0x0
- bl ListMenuItems_NewItem
- cmp r0, #0x0
- beq _020128DC
- ldr r1, [r4, #0x0]
- str r1, [r0, #0x0]
- ldr r1, [r4, #0x4]
- str r1, [r0, #0x4]
-_020128DC:
- add sp, #0x4
- pop {r3-r4, pc}
-
- thumb_func_start ListMenuItems_NewItem
-ListMenuItems_NewItem: ; 0x020128E0
- push {r4, lr}
- ldr r3, [r0, #0x0]
- cmp r3, #0x0
- beq _02012900
- mov r2, #0x0
- mvn r2, r2
-_020128EC:
- cmp r3, r2
- bne _020128F8
- bl ErrorHandling
- mov r0, #0x0
- pop {r4, pc}
-_020128F8:
- add r0, #0x8
- ldr r3, [r0, #0x0]
- cmp r3, #0x0
- bne _020128EC
-_02012900:
- mov r2, #0x0
- mvn r2, r2
- add r4, r0, #0x0
- cmp r3, r2
- beq _02012912
-_0201290A:
- add r0, #0x8
- ldr r3, [r0, #0x0]
- cmp r3, r2
- bne _0201290A
-_02012912:
- ldr r0, [r0, #0x4]
- str r0, [r1, #0x0]
- add r0, r4, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start ListMenuItems_DestroyMenuStrings
-ListMenuItems_DestroyMenuStrings: ; 0x0201291C
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r0, #0x0
- ldr r1, [r5, #0x0]
- mvn r0, r0
- cmp r1, r0
- beq _02012942
- mov r4, #0x0
- add r6, r0, #0x0
-_0201292E:
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- beq _02012942
- bl String_dtor
- str r4, [r5, #0x0]
- add r5, #0x8
- ldr r0, [r5, #0x0]
- cmp r0, r6
- bne _0201292E
-_02012942:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02012944
-FUN_02012944: ; 0x02012944
- push {r3-r5, lr}
- add r5, r1, #0x0
- mov r1, #0xc
- add r4, r2, #0x0
- bl AllocFromHeap
- mov r1, #0x0
- strb r1, [r0, #0x0]
- strb r1, [r0, #0x1]
- strb r1, [r0, #0x2]
- strb r1, [r0, #0x3]
- strb r1, [r0, #0x4]
- strb r1, [r0, #0x5]
- strb r1, [r0, #0x6]
- strb r1, [r0, #0x7]
- strb r1, [r0, #0x8]
- strb r1, [r0, #0x9]
- strb r1, [r0, #0xa]
- strb r1, [r0, #0xb]
- mov r1, #0x1
- strb r1, [r0, #0x9]
- str r5, [r0, #0x0]
- str r4, [r0, #0x4]
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02012974
-FUN_02012974: ; 0x02012974
- push {r4, lr}
- add r4, r0, #0x0
- bne _0201297E
- bl ErrorHandling
-_0201297E:
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02012988
-FUN_02012988: ; 0x02012988
- push {r4, lr}
- add r4, r0, #0x0
- bne _02012992
- bl ErrorHandling
-_02012992:
- ldrb r0, [r4, #0x8]
- lsl r0, r0, #0x2
- ldr r0, [r4, r0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0201299C
-FUN_0201299C: ; 0x0201299C
- push {r4, lr}
- add r4, r0, #0x0
- bne _020129A6
- bl ErrorHandling
-_020129A6:
- ldrb r1, [r4, #0x8]
- mov r0, #0x1
- eor r0, r1
- lsl r0, r0, #0x2
- ldr r0, [r4, r0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020129B4
-FUN_020129B4: ; 0x020129B4
- cmp r0, #0x0
- beq _020129C6
- ldrb r1, [r0, #0x9]
- cmp r1, #0x0
- beq _020129C6
- ldrb r2, [r0, #0x8]
- mov r1, #0x1
- eor r1, r2
- strb r1, [r0, #0x8]
-_020129C6:
- bx lr
-
- thumb_func_start FUN_020129C8
-FUN_020129C8: ; 0x020129C8
- push {r3, lr}
- mov r0, #0x0
- bl MI_StopDma
- mov r0, #0x0
- bl MI_WaitDma
- pop {r3, pc}
-
- thumb_func_start FUN_020129D8
-FUN_020129D8: ; 0x020129D8
- push {r4-r6, lr}
- add r6, r0, #0x0
- add r5, r1, #0x0
- add r4, r2, #0x0
- cmp r3, #0x1
- bne _020129F2
- mov r0, #0x0
- add r1, r6, #0x0
- add r2, r5, #0x0
- add r3, r4, #0x0
- bl MI_HBlankDmaCopy32
- pop {r4-r6, pc}
-_020129F2:
- mov r0, #0x0
- add r1, r6, #0x0
- add r2, r5, #0x0
- add r3, r4, #0x0
- bl MI_HBlankDmaCopy16
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02012A00
-FUN_02012A00: ; 0x02012A00
- push {r3-r5, lr}
- ldr r1, _02012A2C ; =0x0000079C
- add r5, r0, #0x0
- bl AllocFromHeap
- ldr r2, _02012A2C ; =0x0000079C
- mov r1, #0x0
- add r4, r0, #0x0
- bl memset
- mov r2, #0x3
- lsl r2, r2, #0x8
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r4, r2
- bl FUN_02012944
- mov r1, #0x6
- lsl r1, r1, #0x8
- str r0, [r4, r1]
- add r0, r4, #0x0
- pop {r3-r5, pc}
- .balign 4
-_02012A2C: .word 0x0000079C
-
- thumb_func_start FUN_02012A30
-FUN_02012A30: ; 0x02012A30
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- add r6, r2, #0x0
- add r7, r3, #0x0
- cmp r5, #0x0
- bne _02012A42
- bl ErrorHandling
-_02012A42:
- ldr r0, _02012AB0 ; =0x00000604
- ldr r0, [r5, r0]
- cmp r0, #0x0
- beq _02012A4E
- bl ErrorHandling
-_02012A4E:
- ldr r0, _02012AB4 ; =0x0000078C
- mov r2, #0x0
- strb r4, [r5, r0]
- add r1, r0, #0x1
- strb r6, [r5, r1]
- add r1, r0, #0x0
- add r1, #0xc
- strh r2, [r5, r1]
- add r2, sp, #0x8
- mov r1, #0x14
- ldrsh r2, [r2, r1]
- add r1, r0, #0x0
- add r1, #0xe
- strh r2, [r5, r1]
- add r1, r0, #0x4
- ldr r2, [sp, #0x20]
- add r0, #0x8
- str r2, [r5, r1]
- ldr r1, [sp, #0x24]
- ldr r3, [sp, #0x18]
- str r1, [r5, r0]
- ldr r0, _02012AB8 ; =0x0000060C
- mov r1, #0xc0
- add r0, r5, r0
- add r2, r7, #0x0
- bl FUN_02012B88
- ldr r0, _02012ABC ; =FUN_02012BE4
- ldr r2, [sp, #0x28]
- add r1, r5, #0x0
- bl FUN_0200CA44
- ldr r1, _02012AB0 ; =0x00000604
- mov r2, #0x3
- str r0, [r5, r1]
- ldr r0, _02012AC0 ; =0x00000794
- add r1, r5, #0x0
- ldr r0, [r5, r0]
- lsl r2, r2, #0x8
- bl MIi_CpuClear32
- ldr r0, _02012AC0 ; =0x00000794
- mov r2, #0x3
- lsl r2, r2, #0x8
- ldr r0, [r5, r0]
- add r1, r5, r2
- bl MIi_CpuClear32
- pop {r3-r7, pc}
- .balign 4
-_02012AB0: .word 0x00000604
-_02012AB4: .word 0x0000078C
-_02012AB8: .word 0x0000060C
-_02012ABC: .word FUN_02012BE4
-_02012AC0: .word 0x00000794
-
- thumb_func_start FUN_02012AC4
-FUN_02012AC4: ; 0x02012AC4
- push {r4, lr}
- add r4, r0, #0x0
- bne _02012ACE
- bl ErrorHandling
-_02012ACE:
- ldr r0, _02012AF8 ; =0x00000604
- ldr r0, [r4, r0]
- cmp r0, #0x0
- beq _02012AF4
- bl FUN_0200CAB4
- ldr r0, _02012AF8 ; =0x00000604
- mov r1, #0x0
- str r1, [r4, r0]
- sub r0, r0, #0x4
- ldr r0, [r4, r0]
- bl FUN_02012988
- ldr r1, _02012AFC ; =0x00000794
- mov r2, #0x3
- ldr r1, [r4, r1]
- lsl r2, r2, #0x8
- bl memset
-_02012AF4:
- pop {r4, pc}
- nop
-_02012AF8: .word 0x00000604
-_02012AFC: .word 0x00000794
-
- thumb_func_start FUN_02012B00
-FUN_02012B00: ; 0x02012B00
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02012AC4
- bl FUN_02012C90
- mov r0, #0x6
- lsl r0, r0, #0x8
- ldr r0, [r4, r0]
- bl FUN_02012974
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02012B20
-FUN_02012B20: ; 0x02012B20
- mov r1, #0x6
- lsl r1, r1, #0x8
- ldr r3, _02012B2C ; =FUN_02012988
- ldr r0, [r0, r1]
- bx r3
- nop
-_02012B2C: .word FUN_02012988
-
- thumb_func_start FUN_02012B30
-FUN_02012B30: ; 0x02012B30
- push {r4, lr}
- add r4, r0, #0x0
- beq _02012B5E
- ldr r0, _02012B60 ; =0x00000604
- ldr r1, [r4, r0]
- cmp r1, #0x0
- beq _02012B5E
- sub r0, r0, #0x4
- ldr r0, [r4, r0]
- bl FUN_020129B4
- mov r0, #0x6
- lsl r0, r0, #0x8
- ldr r0, [r4, r0]
- bl FUN_02012988
- add r1, r0, #0x0
- ldr r0, _02012B64 ; =0x00000794
- mov r2, #0x3
- ldr r0, [r4, r0]
- lsl r2, r2, #0x8
- bl MIi_CpuClear32
-_02012B5E:
- pop {r4, pc}
- .balign 4
-_02012B60: .word 0x00000604
-_02012B64: .word 0x00000794
-
- thumb_func_start FUN_02012B68
-FUN_02012B68: ; 0x02012B68
- push {r4, lr}
- add r4, r0, #0x0
- beq _02012B80
- ldr r0, _02012B84 ; =0x00000604
- ldr r0, [r4, r0]
- cmp r0, #0x0
- beq _02012B80
- bl FUN_02012C90
- add r0, r4, #0x0
- bl FUN_02012C98
-_02012B80:
- pop {r4, pc}
- nop
-_02012B84: .word 0x00000604
-
- thumb_func_start FUN_02012B88
-FUN_02012B88: ; 0x02012B88
- push {r4-r7, lr}
- sub sp, #0xc
- mov r4, #0x0
- add r7, r1, #0x0
- add r5, r0, #0x0
- add r6, r4, #0x0
- str r2, [sp, #0x0]
- cmp r7, #0x0
- bls _02012BD6
- asr r0, r3, #0x1f
- str r3, [sp, #0x4]
- str r0, [sp, #0x8]
-_02012BA0:
- asr r0, r4, #0x4
- lsl r1, r0, #0x2
- ldr r0, _02012BDC ; =UNK_020FFA38
- ldr r2, [sp, #0x4]
- ldrsh r0, [r0, r1]
- ldr r3, [sp, #0x8]
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- lsl r2, r2, #0xa
- add r0, r0, r2
- ldr r2, _02012BE0 ; =0x00000000
- adc r1, r2
- lsl r1, r1, #0x14
- lsr r0, r0, #0xc
- orr r0, r1
- asr r0, r0, #0xc
- strh r0, [r5, #0x0]
- ldr r0, [sp, #0x0]
- add r6, r6, #0x1
- add r0, r4, r0
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- add r5, r5, #0x2
- cmp r6, r7
- blo _02012BA0
-_02012BD6:
- add sp, #0xc
- pop {r4-r7, pc}
- nop
-_02012BDC: .word UNK_020FFA38
-_02012BE0: .word 0x00000000
-
- thumb_func_start FUN_02012BE4
-FUN_02012BE4: ; 0x02012BE4
- push {r3-r7, lr}
- mov r0, #0x6
- add r6, r1, #0x0
- lsl r0, r0, #0x8
- ldr r0, [r6, r0]
- bl FUN_02012988
- add r5, r0, #0x0
- ldr r0, _02012C80 ; =0x00000798
- mov r1, #0x64
- ldrsh r0, [r6, r0]
- bl _s32_div_f
- lsl r0, r0, #0x18
- lsr r3, r0, #0x18
- ldr r0, _02012C84 ; =0x0000078C
- ldrb r4, [r6, r0]
- add r0, r0, #0x1
- ldrb r0, [r6, r0]
- cmp r4, r0
- bgt _02012C4C
- lsl r0, r4, #0x2
- add r5, r5, r0
-_02012C12:
- ldr r2, [r5, #0x0]
- lsl r0, r2, #0x10
- asr r7, r0, #0x10
- lsl r0, r3, #0x1
- add r1, r6, r0
- ldr r0, _02012C88 ; =0x0000060C
- ldrsh r0, [r1, r0]
- add r0, r7, r0
- lsl r0, r0, #0x10
- asr r1, r0, #0x10
- lsr r0, r2, #0x10
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r1, r1, #0x10
- lsl r0, r0, #0x10
- lsr r1, r1, #0x10
- orr r0, r1
- stmia r5!, {r0}
- add r0, r3, #0x1
- mov r1, #0xc0
- bl _s32_div_f
- lsl r0, r1, #0x18
- lsr r3, r0, #0x18
- ldr r0, _02012C8C ; =0x0000078D
- add r4, r4, #0x1
- ldrb r0, [r6, r0]
- cmp r4, r0
- ble _02012C12
-_02012C4C:
- ldr r1, _02012C80 ; =0x00000798
- add r0, r1, #0x2
- ldrsh r2, [r6, r1]
- ldrsh r0, [r6, r0]
- add r4, r6, r1
- add r0, r2, r0
- strh r0, [r4, #0x0]
- ldrsh r0, [r6, r1]
- mov r1, #0x4b
- lsl r1, r1, #0x8
- cmp r0, r1
- blt _02012C70
- mov r0, #0x0
- ldrsh r0, [r4, r0]
- bl _s32_div_f
- strh r1, [r4, #0x0]
- pop {r3-r7, pc}
-_02012C70:
- cmp r0, #0x0
- bge _02012C7C
- mov r0, #0x0
- ldrsh r0, [r4, r0]
- add r0, r0, r1
- strh r0, [r4, #0x0]
-_02012C7C:
- pop {r3-r7, pc}
- nop
-_02012C80: .word 0x00000798
-_02012C84: .word 0x0000078C
-_02012C88: .word 0x0000060C
-_02012C8C: .word 0x0000078D
-
- thumb_func_start FUN_02012C90
-FUN_02012C90: ; 0x02012C90
- ldr r3, _02012C94 ; =FUN_020129C8
- bx r3
- .balign 4
-_02012C94: .word FUN_020129C8
-
- thumb_func_start FUN_02012C98
-FUN_02012C98: ; 0x02012C98
- push {r3-r5, lr}
- add r4, r0, #0x0
- bne _02012CA2
- bl ErrorHandling
-_02012CA2:
- mov r0, #0x6
- lsl r0, r0, #0x8
- ldr r0, [r4, r0]
- bl FUN_0201299C
- mov r1, #0x3
- lsl r1, r1, #0x8
- add r5, r0, #0x0
- bl DC_FlushRange
- mov r1, #0x79
- lsl r1, r1, #0x4
- ldr r1, [r4, r1]
- add r0, r5, #0x0
- mov r2, #0x4
- mov r3, #0x1
- bl FUN_020129D8
- pop {r3-r5, pc}
diff --git a/arm9/asm/unk_02012004.s b/arm9/asm/unk_02012004.s
new file mode 100644
index 00000000..042302c6
--- /dev/null
+++ b/arm9/asm/unk_02012004.s
@@ -0,0 +1,787 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .rodata
+
+ .global UNK_020ED3B0
+UNK_020ED3B0: ; 0x020ED3B0
+ .word 0x00000147
+ .word 0x000001EF
+
+ .global UNK_020ED3B8
+UNK_020ED3B8: ; 0x020ED3B8
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00
+
+ .global UNK_020ED3C8
+UNK_020ED3C8: ; 0x020ED3C8
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00
+
+ .global UNK_020ED3D8
+UNK_020ED3D8: ; 0x020ED3D8
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
+ .byte 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+ .byte 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
+ .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_020ED438
+UNK_020ED438: ; 0x020ED438
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
+ .byte 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+ .byte 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
+ .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
+
+ .text
+
+ thumb_func_start FUN_02012004
+FUN_02012004: ; 0x02012004
+ push {r3-r7, lr}
+ sub sp, #0x8
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x24]
+ ldr r6, [sp, #0x20]
+ str r1, [sp, #0x4]
+ add r5, r2, #0x0
+ add r4, r3, #0x0
+ str r0, [sp, #0x24]
+ mov r7, #0x0
+_02012018:
+ ldr r1, [r4, #0x0]
+ ldr r0, [sp, #0x4]
+ ldr r2, [r5, #0x0]
+ add r0, r0, r1
+ ldr r1, [sp, #0x0]
+ add r1, r1, r2
+ add r2, r6, #0x0
+ bl memcpy
+ ldr r1, [r5, #0x0]
+ ldr r0, [sp, #0x24]
+ add r7, r7, #0x1
+ add r0, r1, r0
+ str r0, [r5, #0x0]
+ ldr r0, [r4, #0x0]
+ add r0, r0, r6
+ str r0, [r4, #0x0]
+ cmp r7, #0x8
+ blt _02012018
+ add sp, #0x8
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012044
+FUN_02012044: ; 0x02012044
+ push {r4-r6, lr}
+ add r5, r3, #0x0
+ bl AllocAndReadWholeNarcMemberByIdPair
+ add r4, r0, #0x0
+ bne _02012054
+ bl ErrorHandling
+_02012054:
+ add r0, r4, #0x0
+ add r1, r5, #0x0
+ bl FUN_020B0088
+ add r6, r0, #0x0
+ cmp r5, #0x0
+ bne _02012066
+ bl ErrorHandling
+_02012066:
+ cmp r6, #0x0
+ bne _0201206E
+ bl ErrorHandling
+_0201206E:
+ add r0, r4, #0x0
+ bl FreeToHeap
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012078
+FUN_02012078: ; 0x02012078
+ push {r4-r7, lr}
+ sub sp, #0x2c
+ ldr r4, [sp, #0x40]
+ str r0, [sp, #0x8]
+ add r6, r0, r2
+ ldrh r0, [r4, #0x2]
+ str r1, [sp, #0xc]
+ add r5, r3, #0x0
+ cmp r0, r6
+ bge _02012090
+ bl ErrorHandling
+_02012090:
+ ldr r0, [sp, #0xc]
+ ldrh r1, [r4, #0x0]
+ add r0, r0, r5
+ str r0, [sp, #0x14]
+ cmp r1, r0
+ bge _020120A0
+ bl ErrorHandling
+_020120A0:
+ ldr r0, [r4, #0x14]
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x44]
+ str r0, [sp, #0x1c]
+ ldrh r0, [r4, #0x2]
+ lsl r7, r0, #0x2
+ ldr r0, [sp, #0xc]
+ add r1, r0, #0x0
+ mul r1, r7
+ ldr r0, [sp, #0x8]
+ str r1, [sp, #0x18]
+ lsl r1, r0, #0x2
+ ldr r0, [sp, #0x18]
+ str r1, [sp, #0x10]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+ mov r0, #0x0
+ str r0, [sp, #0x24]
+ ldr r1, [sp, #0xc]
+ ldr r0, [sp, #0x14]
+ cmp r1, r0
+ bge _0201210A
+_020120CC:
+ ldr r4, [sp, #0x8]
+ add r0, r4, #0x0
+ cmp r0, r6
+ bge _020120F8
+ ldr r0, [sp, #0x18]
+ lsl r1, r0, #0x3
+ ldr r0, [sp, #0x10]
+ add r5, r0, r1
+_020120DC:
+ str r5, [sp, #0x28]
+ mov r0, #0x4
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x20]
+ ldr r1, [sp, #0x1c]
+ add r2, sp, #0x28
+ add r3, sp, #0x24
+ str r7, [sp, #0x4]
+ bl FUN_02012004
+ add r4, r4, #0x1
+ add r5, r5, #0x4
+ cmp r4, r6
+ blt _020120DC
+_020120F8:
+ ldr r0, [sp, #0x18]
+ add r0, r0, r7
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0xc]
+ add r1, r0, #0x1
+ ldr r0, [sp, #0x14]
+ str r1, [sp, #0xc]
+ cmp r1, r0
+ blt _020120CC
+_0201210A:
+ add sp, #0x2c
+ pop {r4-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012110
+FUN_02012110: ; 0x02012110
+ push {r4-r5}
+ sub sp, #0x8
+ ldr r2, _02012148 ; =UNK_020ED3B0
+ add r1, sp, #0x0
+ ldr r3, [r2, #0x0]
+ ldr r2, [r2, #0x4]
+ str r3, [sp, #0x0]
+ str r2, [sp, #0x4]
+ ldr r2, _0201214C ; =0x000001EF
+ mov r5, #0x0
+ add r3, r2, #0x0
+_02012126:
+ ldr r4, [r1, #0x0]
+ cmp r4, r3
+ beq _02012140
+ cmp r4, r0
+ bne _02012138
+ add sp, #0x8
+ mov r0, #0x1
+ pop {r4-r5}
+ bx lr
+_02012138:
+ add r5, r5, #0x1
+ add r1, r1, #0x4
+ cmp r5, r2
+ blt _02012126
+_02012140:
+ mov r0, #0x0
+ add sp, #0x8
+ pop {r4-r5}
+ bx lr
+ .balign 4
+_02012148: .word UNK_020ED3B0
+_0201214C: .word 0x000001EF
+
+ thumb_func_start FUN_02012150
+FUN_02012150: ; 0x02012150
+ push {r3-r4, lr}
+ sub sp, #0xc
+ add r4, r3, #0x0
+ mov r3, #0x0
+ str r3, [sp, #0x8]
+ add r3, sp, #0x8
+ bl FUN_02012044
+ ldr r0, [sp, #0x8]
+ ldr r0, [r0, #0x14]
+ bl FUN_02008A74
+ ldr r0, [sp, #0x34]
+ bl FUN_02012110
+ ldr r1, [sp, #0x30]
+ cmp r1, #0x2
+ bne _02012184
+ cmp r0, #0x1
+ bne _02012184
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0x28]
+ ldr r0, [r0, #0x14]
+ ldr r2, [sp, #0x2c]
+ bl FUN_02008904
+_02012184:
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0x18]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x24]
+ ldr r2, [sp, #0x1c]
+ str r0, [sp, #0x4]
+ ldr r3, [sp, #0x20]
+ add r0, r4, #0x0
+ bl FUN_02012078
+ add sp, #0xc
+ pop {r3-r4, pc}
+
+ thumb_func_start FUN_0201219C
+FUN_0201219C: ; 0x0201219C
+ push {r4-r7, lr}
+ sub sp, #0x24
+ add r7, r1, #0x0
+ add r5, r2, #0x0
+ ldr r2, [sp, #0x3c]
+ ldr r1, [sp, #0x40]
+ add r6, r0, #0x0
+ mul r1, r2
+ add r0, r5, #0x0
+ lsl r1, r1, #0x5
+ str r3, [sp, #0x20]
+ bl AllocFromHeap
+ add r4, r0, #0x0
+ ldr r0, [sp, #0x38]
+ ldr r3, [sp, #0x20]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x3c]
+ add r1, r7, #0x0
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x40]
+ add r2, r5, #0x0
+ str r0, [sp, #0x8]
+ ldr r0, [sp, #0x44]
+ str r4, [sp, #0xc]
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x48]
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x4c]
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x50]
+ str r0, [sp, #0x1c]
+ add r0, r6, #0x0
+ bl FUN_02012150
+ add r0, r4, #0x0
+ add sp, #0x24
+ pop {r4-r7, pc}
+
+ thumb_func_start FUN_020121E8
+FUN_020121E8: ; 0x020121E8
+ push {r3-r7, lr}
+ sub sp, #0x30
+ str r3, [sp, #0x8]
+ ldr r3, [sp, #0x48]
+ str r3, [sp, #0x48]
+ mov r3, #0x0
+ str r3, [sp, #0x2c]
+ bl AllocAndReadWholeNarcMemberByIdPair
+ str r0, [sp, #0x20]
+ cmp r0, #0x0
+ bne _02012204
+ bl ErrorHandling
+_02012204:
+ ldr r0, [sp, #0x20]
+ add r1, sp, #0x2c
+ bl FUN_020B0088
+ cmp r0, #0x0
+ bne _02012214
+ bl ErrorHandling
+_02012214:
+ ldr r1, [sp, #0x4c]
+ ldr r0, [sp, #0x8]
+ add r6, r0, r1
+ ldr r0, [sp, #0x2c]
+ ldrh r0, [r0, #0x2]
+ cmp r0, r6
+ bge _02012226
+ bl ErrorHandling
+_02012226:
+ ldr r1, [sp, #0x50]
+ ldr r0, [sp, #0x48]
+ add r0, r0, r1
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x2c]
+ ldrh r1, [r0, #0x0]
+ ldr r0, [sp, #0x10]
+ cmp r1, r0
+ bge _0201223C
+ bl ErrorHandling
+_0201223C:
+ ldr r0, [sp, #0x2c]
+ ldr r0, [r0, #0x14]
+ str r0, [sp, #0x1c]
+ bl FUN_02008A74
+ ldr r0, [sp, #0x54]
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x2c]
+ ldrh r0, [r0, #0x2]
+ lsl r7, r0, #0x2
+ ldr r0, [sp, #0x48]
+ add r1, r0, #0x0
+ mul r1, r7
+ ldr r0, [sp, #0x8]
+ str r1, [sp, #0x14]
+ lsl r1, r0, #0x2
+ ldr r0, [sp, #0x14]
+ str r1, [sp, #0xc]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+ mov r0, #0x0
+ str r0, [sp, #0x24]
+ ldr r1, [sp, #0x48]
+ ldr r0, [sp, #0x10]
+ cmp r1, r0
+ bge _020122AE
+_02012270:
+ ldr r4, [sp, #0x8]
+ add r0, r4, #0x0
+ cmp r0, r6
+ bge _0201229C
+ ldr r0, [sp, #0x14]
+ lsl r1, r0, #0x3
+ ldr r0, [sp, #0xc]
+ add r5, r0, r1
+_02012280:
+ str r5, [sp, #0x28]
+ mov r0, #0x4
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x1c]
+ ldr r1, [sp, #0x18]
+ add r2, sp, #0x28
+ add r3, sp, #0x24
+ str r7, [sp, #0x4]
+ bl FUN_02012004
+ add r4, r4, #0x1
+ add r5, r5, #0x4
+ cmp r4, r6
+ blt _02012280
+_0201229C:
+ ldr r0, [sp, #0x14]
+ add r0, r0, r7
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x48]
+ add r1, r0, #0x1
+ ldr r0, [sp, #0x10]
+ str r1, [sp, #0x48]
+ cmp r1, r0
+ blt _02012270
+_020122AE:
+ ldr r0, [sp, #0x20]
+ bl FreeToHeap
+ add sp, #0x30
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_020122B8
+FUN_020122B8: ; 0x020122B8
+ push {r4-r7, lr}
+ sub sp, #0x14
+ add r7, r1, #0x0
+ add r5, r2, #0x0
+ ldr r2, [sp, #0x2c]
+ ldr r1, [sp, #0x30]
+ add r6, r0, #0x0
+ mul r1, r2
+ add r0, r5, #0x0
+ lsl r1, r1, #0x5
+ str r3, [sp, #0x10]
+ bl AllocFromHeap
+ add r4, r0, #0x0
+ ldr r0, [sp, #0x28]
+ ldr r3, [sp, #0x10]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x2c]
+ add r1, r7, #0x0
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x30]
+ add r2, r5, #0x0
+ str r0, [sp, #0x8]
+ add r0, r6, #0x0
+ str r4, [sp, #0xc]
+ bl FUN_020121E8
+ add r0, r4, #0x0
+ add sp, #0x14
+ pop {r4-r7, pc}
+
+ thumb_func_start FUN_020122F4
+FUN_020122F4: ; 0x020122F4
+ push {r3-r7, lr}
+ sub sp, #0x20
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x44]
+ ldr r1, [sp, #0x38]
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x48]
+ str r2, [sp, #0x4]
+ str r0, [sp, #0x14]
+ add r0, r2, #0x0
+ add r7, r0, r1
+ ldr r1, [sp, #0x3c]
+ add r0, r3, #0x0
+ add r0, r0, r1
+ add r1, r3, #0x0
+ str r3, [sp, #0x8]
+ ldr r5, [sp, #0x40]
+ str r0, [sp, #0x10]
+ cmp r1, r0
+ bge _0201236C
+ add r0, r3, #0x0
+ lsl r0, r0, #0x5
+ str r0, [sp, #0xc]
+ add r0, r2, #0x0
+ lsl r0, r0, #0x5
+ str r0, [sp, #0x1c]
+_02012328:
+ ldr r6, [sp, #0x4]
+ add r0, r6, #0x0
+ cmp r0, r7
+ bge _0201235A
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0xc]
+ add r2, r1, #0x0
+ mul r2, r0
+ ldr r0, [sp, #0x1c]
+ add r4, r0, r2
+_0201233C:
+ ldr r1, [r5, #0x0]
+ ldr r0, [sp, #0x14]
+ mov r2, #0x20
+ add r0, r0, r1
+ ldr r1, [sp, #0x18]
+ add r1, r1, r4
+ bl memcpy
+ ldr r0, [r5, #0x0]
+ add r6, r6, #0x1
+ add r0, #0x20
+ str r0, [r5, #0x0]
+ add r4, #0x20
+ cmp r6, r7
+ blt _0201233C
+_0201235A:
+ ldr r0, [sp, #0xc]
+ add r0, #0x20
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x8]
+ add r1, r0, #0x1
+ ldr r0, [sp, #0x10]
+ str r1, [sp, #0x8]
+ cmp r1, r0
+ blt _02012328
+_0201236C:
+ add sp, #0x20
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02012370
+FUN_02012370: ; 0x02012370
+ push {r3-r4, lr}
+ sub sp, #0x14
+ add r4, r2, #0x0
+ ldr r2, [r4, #0x8]
+ str r2, [sp, #0x0]
+ ldr r2, [r4, #0xc]
+ str r2, [sp, #0x4]
+ ldr r2, [sp, #0x20]
+ str r3, [sp, #0x8]
+ str r2, [sp, #0xc]
+ ldr r2, [sp, #0x24]
+ str r2, [sp, #0x10]
+ ldr r2, [r4, #0x0]
+ ldr r3, [r4, #0x4]
+ bl FUN_020122F4
+ add sp, #0x14
+ pop {r3-r4, pc}
+
+ thumb_func_start FUN_02012394
+FUN_02012394: ; 0x02012394
+ push {r4-r7, lr}
+ sub sp, #0x7c
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x9c]
+ mov r12, r3
+ add r5, r2, #0x0
+ ldr r6, [sp, #0x94]
+ ldr r7, [sp, #0x98]
+ ldr r3, _020123FC ; =UNK_020ED3D8
+ str r1, [sp, #0x10]
+ str r0, [sp, #0x9c]
+ add r2, sp, #0x1c
+ mov r4, #0xc
+_020123AE:
+ ldmia r3!, {r0-r1}
+ stmia r2!, {r0-r1}
+ sub r4, r4, #0x1
+ bne _020123AE
+ mov r0, #0x0
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x90]
+ ldr r1, [sp, #0x10]
+ str r0, [sp, #0x0]
+ str r6, [sp, #0x4]
+ ldr r0, [sp, #0xc]
+ add r2, r5, #0x0
+ mov r3, r12
+ str r7, [sp, #0x8]
+ bl FUN_020122B8
+ str r0, [sp, #0x14]
+ mov r4, #0x0
+ add r5, sp, #0x1c
+_020123D4:
+ ldr r0, [sp, #0x14]
+ add r1, r7, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x9c]
+ add r2, r5, #0x0
+ str r0, [sp, #0x4]
+ add r0, r6, #0x0
+ add r3, sp, #0x18
+ bl FUN_02012370
+ add r4, r4, #0x1
+ add r5, #0x10
+ cmp r4, #0x6
+ blt _020123D4
+ ldr r0, [sp, #0x14]
+ bl FreeToHeap
+ add sp, #0x7c
+ pop {r4-r7, pc}
+ nop
+_020123FC: .word UNK_020ED3D8
+
+ thumb_func_start FUN_02012400
+FUN_02012400: ; 0x02012400
+ push {r4, lr}
+ sub sp, #0x10
+ ldr r4, [r3, #0x4]
+ str r4, [sp, #0x0]
+ ldr r4, [r3, #0x8]
+ str r4, [sp, #0x4]
+ ldr r4, [r3, #0xc]
+ str r4, [sp, #0x8]
+ ldr r4, [sp, #0x18]
+ str r4, [sp, #0xc]
+ ldr r3, [r3, #0x0]
+ bl FUN_02012394
+ add sp, #0x10
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012420
+FUN_02012420: ; 0x02012420
+ push {r4-r7, lr}
+ sub sp, #0x14
+ ldr r4, _02012448 ; =UNK_020ED3B8
+ add r5, r3, #0x0
+ add r3, sp, #0x4
+ add r7, r0, #0x0
+ mov r12, r1
+ add r6, r3, #0x0
+ ldmia r4!, {r0-r1}
+ stmia r3!, {r0-r1}
+ ldmia r4!, {r0-r1}
+ stmia r3!, {r0-r1}
+ add r0, r7, #0x0
+ mov r1, r12
+ add r3, r6, #0x0
+ str r5, [sp, #0x0]
+ bl FUN_02012400
+ add sp, #0x14
+ pop {r4-r7, pc}
+ .balign 4
+_02012448: .word UNK_020ED3B8
+
+ thumb_func_start FUN_0201244C
+FUN_0201244C: ; 0x0201244C
+ push {r3-r7, lr}
+ add r6, r1, #0x0
+ mov r1, #0x32
+ add r7, r2, #0x0
+ add r5, r0, #0x0
+ add r0, r7, #0x0
+ lsl r1, r1, #0x6
+ bl AllocFromHeap
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ add r2, r7, #0x0
+ add r3, r4, #0x0
+ bl FUN_02012420
+ add r0, r4, #0x0
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02012470
+FUN_02012470: ; 0x02012470
+ push {r3-r7, lr}
+ add r7, r2, #0x0
+ add r5, r0, #0x0
+ add r6, r1, #0x0
+ add r0, r7, #0x0
+ mov r1, #0x20
+ bl AllocFromHeap
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ add r2, r7, #0x0
+ bl AllocAndReadWholeNarcMemberByIdPair
+ add r1, sp, #0x0
+ add r5, r0, #0x0
+ bl FUN_020B0138
+ cmp r0, #0x1
+ beq _0201249C
+ bl ErrorHandling
+_0201249C:
+ ldr r0, [sp, #0x0]
+ add r1, r4, #0x0
+ ldr r0, [r0, #0xc]
+ mov r2, #0x20
+ bl MIi_CpuCopy16
+ add r0, r5, #0x0
+ bl FreeToHeap
+ add r0, r4, #0x0
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_020124B4
+FUN_020124B4: ; 0x020124B4
+ push {r4-r7, lr}
+ sub sp, #0x8c
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0xac]
+ mov r12, r3
+ add r5, r2, #0x0
+ ldr r6, [sp, #0xa4]
+ ldr r7, [sp, #0xa8]
+ ldr r3, _0201252C ; =UNK_020ED438
+ str r1, [sp, #0x20]
+ str r0, [sp, #0xac]
+ add r2, sp, #0x2c
+ mov r4, #0xc
+_020124CE:
+ ldmia r3!, {r0-r1}
+ stmia r2!, {r0-r1}
+ sub r4, r4, #0x1
+ bne _020124CE
+ mov r0, #0x0
+ str r0, [sp, #0x28]
+ ldr r0, [sp, #0xa0]
+ ldr r1, [sp, #0x20]
+ str r0, [sp, #0x0]
+ str r6, [sp, #0x4]
+ ldr r0, [sp, #0xb0]
+ str r7, [sp, #0x8]
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0xb4]
+ add r2, r5, #0x0
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0xb8]
+ mov r3, r12
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0xbc]
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x1c]
+ bl FUN_0201219C
+ str r0, [sp, #0x24]
+ mov r4, #0x0
+ add r5, sp, #0x2c
+_02012504:
+ ldr r0, [sp, #0x24]
+ add r1, r7, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0xac]
+ add r2, r5, #0x0
+ str r0, [sp, #0x4]
+ add r0, r6, #0x0
+ add r3, sp, #0x28
+ bl FUN_02012370
+ add r4, r4, #0x1
+ add r5, #0x10
+ cmp r4, #0x6
+ blt _02012504
+ ldr r0, [sp, #0x24]
+ bl FreeToHeap
+ add sp, #0x8c
+ pop {r4-r7, pc}
+ nop
+_0201252C: .word UNK_020ED438
+
+ thumb_func_start FUN_02012530
+FUN_02012530: ; 0x02012530
+ push {r4, lr}
+ sub sp, #0x20
+ ldr r4, [r3, #0x4]
+ str r4, [sp, #0x0]
+ ldr r4, [r3, #0x8]
+ str r4, [sp, #0x4]
+ ldr r4, [r3, #0xc]
+ str r4, [sp, #0x8]
+ ldr r4, [sp, #0x28]
+ str r4, [sp, #0xc]
+ ldr r4, [sp, #0x2c]
+ str r4, [sp, #0x10]
+ ldr r4, [sp, #0x30]
+ str r4, [sp, #0x14]
+ ldr r4, [sp, #0x34]
+ str r4, [sp, #0x18]
+ ldr r4, [sp, #0x38]
+ str r4, [sp, #0x1c]
+ ldr r3, [r3, #0x0]
+ bl FUN_020124B4
+ add sp, #0x20
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012560
+FUN_02012560: ; 0x02012560
+ push {r4-r7, lr}
+ sub sp, #0x24
+ ldr r4, _02012598 ; =UNK_020ED3C8
+ add r5, r3, #0x0
+ add r3, sp, #0x14
+ add r7, r0, #0x0
+ mov r12, r1
+ add r6, r3, #0x0
+ ldmia r4!, {r0-r1}
+ stmia r3!, {r0-r1}
+ ldmia r4!, {r0-r1}
+ stmia r3!, {r0-r1}
+ ldr r0, [sp, #0x38]
+ str r5, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x3c]
+ mov r1, r12
+ str r0, [sp, #0x8]
+ ldr r0, [sp, #0x40]
+ add r3, r6, #0x0
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x44]
+ str r0, [sp, #0x10]
+ add r0, r7, #0x0
+ bl FUN_02012530
+ add sp, #0x24
+ pop {r4-r7, pc}
+ .balign 4
+_02012598: .word UNK_020ED3C8
diff --git a/arm9/asm/unk_02012944.s b/arm9/asm/unk_02012944.s
new file mode 100644
index 00000000..03ccc1ea
--- /dev/null
+++ b/arm9/asm/unk_02012944.s
@@ -0,0 +1,471 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ thumb_func_start FUN_02012944
+FUN_02012944: ; 0x02012944
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ mov r1, #0xc
+ add r4, r2, #0x0
+ bl AllocFromHeap
+ mov r1, #0x0
+ strb r1, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ strb r1, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ strb r1, [r0, #0x4]
+ strb r1, [r0, #0x5]
+ strb r1, [r0, #0x6]
+ strb r1, [r0, #0x7]
+ strb r1, [r0, #0x8]
+ strb r1, [r0, #0x9]
+ strb r1, [r0, #0xa]
+ strb r1, [r0, #0xb]
+ mov r1, #0x1
+ strb r1, [r0, #0x9]
+ str r5, [r0, #0x0]
+ str r4, [r0, #0x4]
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02012974
+FUN_02012974: ; 0x02012974
+ push {r4, lr}
+ add r4, r0, #0x0
+ bne _0201297E
+ bl ErrorHandling
+_0201297E:
+ add r0, r4, #0x0
+ bl FreeToHeap
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012988
+FUN_02012988: ; 0x02012988
+ push {r4, lr}
+ add r4, r0, #0x0
+ bne _02012992
+ bl ErrorHandling
+_02012992:
+ ldrb r0, [r4, #0x8]
+ lsl r0, r0, #0x2
+ ldr r0, [r4, r0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_0201299C
+FUN_0201299C: ; 0x0201299C
+ push {r4, lr}
+ add r4, r0, #0x0
+ bne _020129A6
+ bl ErrorHandling
+_020129A6:
+ ldrb r1, [r4, #0x8]
+ mov r0, #0x1
+ eor r0, r1
+ lsl r0, r0, #0x2
+ ldr r0, [r4, r0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_020129B4
+FUN_020129B4: ; 0x020129B4
+ cmp r0, #0x0
+ beq _020129C6
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _020129C6
+ ldrb r2, [r0, #0x8]
+ mov r1, #0x1
+ eor r1, r2
+ strb r1, [r0, #0x8]
+_020129C6:
+ bx lr
+
+ thumb_func_start FUN_020129C8
+FUN_020129C8: ; 0x020129C8
+ push {r3, lr}
+ mov r0, #0x0
+ bl MI_StopDma
+ mov r0, #0x0
+ bl MI_WaitDma
+ pop {r3, pc}
+
+ thumb_func_start FUN_020129D8
+FUN_020129D8: ; 0x020129D8
+ push {r4-r6, lr}
+ add r6, r0, #0x0
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ cmp r3, #0x1
+ bne _020129F2
+ mov r0, #0x0
+ add r1, r6, #0x0
+ add r2, r5, #0x0
+ add r3, r4, #0x0
+ bl MI_HBlankDmaCopy32
+ pop {r4-r6, pc}
+_020129F2:
+ mov r0, #0x0
+ add r1, r6, #0x0
+ add r2, r5, #0x0
+ add r3, r4, #0x0
+ bl MI_HBlankDmaCopy16
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02012A00
+FUN_02012A00: ; 0x02012A00
+ push {r3-r5, lr}
+ ldr r1, _02012A2C ; =0x0000079C
+ add r5, r0, #0x0
+ bl AllocFromHeap
+ ldr r2, _02012A2C ; =0x0000079C
+ mov r1, #0x0
+ add r4, r0, #0x0
+ bl memset
+ mov r2, #0x3
+ lsl r2, r2, #0x8
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ add r2, r4, r2
+ bl FUN_02012944
+ mov r1, #0x6
+ lsl r1, r1, #0x8
+ str r0, [r4, r1]
+ add r0, r4, #0x0
+ pop {r3-r5, pc}
+ .balign 4
+_02012A2C: .word 0x0000079C
+
+ thumb_func_start FUN_02012A30
+FUN_02012A30: ; 0x02012A30
+ push {r3-r7, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ add r6, r2, #0x0
+ add r7, r3, #0x0
+ cmp r5, #0x0
+ bne _02012A42
+ bl ErrorHandling
+_02012A42:
+ ldr r0, _02012AB0 ; =0x00000604
+ ldr r0, [r5, r0]
+ cmp r0, #0x0
+ beq _02012A4E
+ bl ErrorHandling
+_02012A4E:
+ ldr r0, _02012AB4 ; =0x0000078C
+ mov r2, #0x0
+ strb r4, [r5, r0]
+ add r1, r0, #0x1
+ strb r6, [r5, r1]
+ add r1, r0, #0x0
+ add r1, #0xc
+ strh r2, [r5, r1]
+ add r2, sp, #0x8
+ mov r1, #0x14
+ ldrsh r2, [r2, r1]
+ add r1, r0, #0x0
+ add r1, #0xe
+ strh r2, [r5, r1]
+ add r1, r0, #0x4
+ ldr r2, [sp, #0x20]
+ add r0, #0x8
+ str r2, [r5, r1]
+ ldr r1, [sp, #0x24]
+ ldr r3, [sp, #0x18]
+ str r1, [r5, r0]
+ ldr r0, _02012AB8 ; =0x0000060C
+ mov r1, #0xc0
+ add r0, r5, r0
+ add r2, r7, #0x0
+ bl FUN_02012B88
+ ldr r0, _02012ABC ; =FUN_02012BE4
+ ldr r2, [sp, #0x28]
+ add r1, r5, #0x0
+ bl FUN_0200CA44
+ ldr r1, _02012AB0 ; =0x00000604
+ mov r2, #0x3
+ str r0, [r5, r1]
+ ldr r0, _02012AC0 ; =0x00000794
+ add r1, r5, #0x0
+ ldr r0, [r5, r0]
+ lsl r2, r2, #0x8
+ bl MIi_CpuClear32
+ ldr r0, _02012AC0 ; =0x00000794
+ mov r2, #0x3
+ lsl r2, r2, #0x8
+ ldr r0, [r5, r0]
+ add r1, r5, r2
+ bl MIi_CpuClear32
+ pop {r3-r7, pc}
+ .balign 4
+_02012AB0: .word 0x00000604
+_02012AB4: .word 0x0000078C
+_02012AB8: .word 0x0000060C
+_02012ABC: .word FUN_02012BE4
+_02012AC0: .word 0x00000794
+
+ thumb_func_start FUN_02012AC4
+FUN_02012AC4: ; 0x02012AC4
+ push {r4, lr}
+ add r4, r0, #0x0
+ bne _02012ACE
+ bl ErrorHandling
+_02012ACE:
+ ldr r0, _02012AF8 ; =0x00000604
+ ldr r0, [r4, r0]
+ cmp r0, #0x0
+ beq _02012AF4
+ bl FUN_0200CAB4
+ ldr r0, _02012AF8 ; =0x00000604
+ mov r1, #0x0
+ str r1, [r4, r0]
+ sub r0, r0, #0x4
+ ldr r0, [r4, r0]
+ bl FUN_02012988
+ ldr r1, _02012AFC ; =0x00000794
+ mov r2, #0x3
+ ldr r1, [r4, r1]
+ lsl r2, r2, #0x8
+ bl memset
+_02012AF4:
+ pop {r4, pc}
+ nop
+_02012AF8: .word 0x00000604
+_02012AFC: .word 0x00000794
+
+ thumb_func_start FUN_02012B00
+FUN_02012B00: ; 0x02012B00
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02012AC4
+ bl FUN_02012C90
+ mov r0, #0x6
+ lsl r0, r0, #0x8
+ ldr r0, [r4, r0]
+ bl FUN_02012974
+ add r0, r4, #0x0
+ bl FreeToHeap
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02012B20
+FUN_02012B20: ; 0x02012B20
+ mov r1, #0x6
+ lsl r1, r1, #0x8
+ ldr r3, _02012B2C ; =FUN_02012988
+ ldr r0, [r0, r1]
+ bx r3
+ nop
+_02012B2C: .word FUN_02012988
+
+ thumb_func_start FUN_02012B30
+FUN_02012B30: ; 0x02012B30
+ push {r4, lr}
+ add r4, r0, #0x0
+ beq _02012B5E
+ ldr r0, _02012B60 ; =0x00000604
+ ldr r1, [r4, r0]
+ cmp r1, #0x0
+ beq _02012B5E
+ sub r0, r0, #0x4
+ ldr r0, [r4, r0]
+ bl FUN_020129B4
+ mov r0, #0x6
+ lsl r0, r0, #0x8
+ ldr r0, [r4, r0]
+ bl FUN_02012988
+ add r1, r0, #0x0
+ ldr r0, _02012B64 ; =0x00000794
+ mov r2, #0x3
+ ldr r0, [r4, r0]
+ lsl r2, r2, #0x8
+ bl MIi_CpuClear32
+_02012B5E:
+ pop {r4, pc}
+ .balign 4
+_02012B60: .word 0x00000604
+_02012B64: .word 0x00000794
+
+ thumb_func_start FUN_02012B68
+FUN_02012B68: ; 0x02012B68
+ push {r4, lr}
+ add r4, r0, #0x0
+ beq _02012B80
+ ldr r0, _02012B84 ; =0x00000604
+ ldr r0, [r4, r0]
+ cmp r0, #0x0
+ beq _02012B80
+ bl FUN_02012C90
+ add r0, r4, #0x0
+ bl FUN_02012C98
+_02012B80:
+ pop {r4, pc}
+ nop
+_02012B84: .word 0x00000604
+
+ thumb_func_start FUN_02012B88
+FUN_02012B88: ; 0x02012B88
+ push {r4-r7, lr}
+ sub sp, #0xc
+ mov r4, #0x0
+ add r7, r1, #0x0
+ add r5, r0, #0x0
+ add r6, r4, #0x0
+ str r2, [sp, #0x0]
+ cmp r7, #0x0
+ bls _02012BD6
+ asr r0, r3, #0x1f
+ str r3, [sp, #0x4]
+ str r0, [sp, #0x8]
+_02012BA0:
+ asr r0, r4, #0x4
+ lsl r1, r0, #0x2
+ ldr r0, _02012BDC ; =UNK_020FFA38
+ ldr r2, [sp, #0x4]
+ ldrsh r0, [r0, r1]
+ ldr r3, [sp, #0x8]
+ asr r1, r0, #0x1f
+ bl _ll_mul
+ mov r2, #0x2
+ lsl r2, r2, #0xa
+ add r0, r0, r2
+ ldr r2, _02012BE0 ; =0x00000000
+ adc r1, r2
+ lsl r1, r1, #0x14
+ lsr r0, r0, #0xc
+ orr r0, r1
+ asr r0, r0, #0xc
+ strh r0, [r5, #0x0]
+ ldr r0, [sp, #0x0]
+ add r6, r6, #0x1
+ add r0, r4, r0
+ lsl r0, r0, #0x10
+ lsr r4, r0, #0x10
+ add r5, r5, #0x2
+ cmp r6, r7
+ blo _02012BA0
+_02012BD6:
+ add sp, #0xc
+ pop {r4-r7, pc}
+ nop
+_02012BDC: .word UNK_020FFA38
+_02012BE0: .word 0x00000000
+
+ thumb_func_start FUN_02012BE4
+FUN_02012BE4: ; 0x02012BE4
+ push {r3-r7, lr}
+ mov r0, #0x6
+ add r6, r1, #0x0
+ lsl r0, r0, #0x8
+ ldr r0, [r6, r0]
+ bl FUN_02012988
+ add r5, r0, #0x0
+ ldr r0, _02012C80 ; =0x00000798
+ mov r1, #0x64
+ ldrsh r0, [r6, r0]
+ bl _s32_div_f
+ lsl r0, r0, #0x18
+ lsr r3, r0, #0x18
+ ldr r0, _02012C84 ; =0x0000078C
+ ldrb r4, [r6, r0]
+ add r0, r0, #0x1
+ ldrb r0, [r6, r0]
+ cmp r4, r0
+ bgt _02012C4C
+ lsl r0, r4, #0x2
+ add r5, r5, r0
+_02012C12:
+ ldr r2, [r5, #0x0]
+ lsl r0, r2, #0x10
+ asr r7, r0, #0x10
+ lsl r0, r3, #0x1
+ add r1, r6, r0
+ ldr r0, _02012C88 ; =0x0000060C
+ ldrsh r0, [r1, r0]
+ add r0, r7, r0
+ lsl r0, r0, #0x10
+ asr r1, r0, #0x10
+ lsr r0, r2, #0x10
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ lsl r1, r1, #0x10
+ lsl r0, r0, #0x10
+ lsr r1, r1, #0x10
+ orr r0, r1
+ stmia r5!, {r0}
+ add r0, r3, #0x1
+ mov r1, #0xc0
+ bl _s32_div_f
+ lsl r0, r1, #0x18
+ lsr r3, r0, #0x18
+ ldr r0, _02012C8C ; =0x0000078D
+ add r4, r4, #0x1
+ ldrb r0, [r6, r0]
+ cmp r4, r0
+ ble _02012C12
+_02012C4C:
+ ldr r1, _02012C80 ; =0x00000798
+ add r0, r1, #0x2
+ ldrsh r2, [r6, r1]
+ ldrsh r0, [r6, r0]
+ add r4, r6, r1
+ add r0, r2, r0
+ strh r0, [r4, #0x0]
+ ldrsh r0, [r6, r1]
+ mov r1, #0x4b
+ lsl r1, r1, #0x8
+ cmp r0, r1
+ blt _02012C70
+ mov r0, #0x0
+ ldrsh r0, [r4, r0]
+ bl _s32_div_f
+ strh r1, [r4, #0x0]
+ pop {r3-r7, pc}
+_02012C70:
+ cmp r0, #0x0
+ bge _02012C7C
+ mov r0, #0x0
+ ldrsh r0, [r4, r0]
+ add r0, r0, r1
+ strh r0, [r4, #0x0]
+_02012C7C:
+ pop {r3-r7, pc}
+ nop
+_02012C80: .word 0x00000798
+_02012C84: .word 0x0000078C
+_02012C88: .word 0x0000060C
+_02012C8C: .word 0x0000078D
+
+ thumb_func_start FUN_02012C90
+FUN_02012C90: ; 0x02012C90
+ ldr r3, _02012C94 ; =FUN_020129C8
+ bx r3
+ .balign 4
+_02012C94: .word FUN_020129C8
+
+ thumb_func_start FUN_02012C98
+FUN_02012C98: ; 0x02012C98
+ push {r3-r5, lr}
+ add r4, r0, #0x0
+ bne _02012CA2
+ bl ErrorHandling
+_02012CA2:
+ mov r0, #0x6
+ lsl r0, r0, #0x8
+ ldr r0, [r4, r0]
+ bl FUN_0201299C
+ mov r1, #0x3
+ lsl r1, r1, #0x8
+ add r5, r0, #0x0
+ bl DC_FlushRange
+ mov r1, #0x79
+ lsl r1, r1, #0x4
+ ldr r1, [r4, r1]
+ add r0, r5, #0x0
+ mov r2, #0x4
+ mov r3, #0x1
+ bl FUN_020129D8
+ pop {r3-r5, pc}
diff --git a/arm9/lib/src/RTC_internal.c b/arm9/lib/src/RTC_internal.c
index c7a5f2aa..e3a132ab 100644
--- a/arm9/lib/src/RTC_internal.c
+++ b/arm9/lib/src/RTC_internal.c
@@ -27,5 +27,5 @@ ARM_FUNC BOOL RTCi_WriteRawStatus2Async(void)
ARM_FUNC static BOOL RtcSendPxiCommand(u8 command)
{
s32 data = command << 8 & 0x7f00;
- return PXI_SendWordByFifo(PXI_FIFO_TAG_RTC, data, FALSE) >= 0;
+ return PXI_SendWordByFifo(PXI_FIFO_TAG_RTC, (u32)data, FALSE) >= 0;
}
diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c
index 426ba876..80c7ada8 100644
--- a/arm9/src/error_message_reset.c
+++ b/arm9/src/error_message_reset.c
@@ -102,7 +102,7 @@ THUMB_FUNC void PrintErrorMessageAndReset()
ReadMsgDataIntoString(msg_data, 3, str);
- AddTextPrinterParameterized(&buf, 0, (const u16 *)str, 0, 0, 0, NULL); // wtf
+ AddTextPrinterParameterized(&buf, 0, str, 0, 0, 0, NULL);
String_dtor(str);
GX_BothDispOn();
diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c
index f52a6659..12d18629 100644
--- a/arm9/src/game_init.c
+++ b/arm9/src/game_init.c
@@ -141,7 +141,7 @@ void FUN_02015FC8(void)
{
csum++;
}
- FUN_020166C8((u32 *)UNK_020EDB10, 4, 92, (int)csum);
+ FUN_020166C8((u32 *)UNK_020EDB10, 4, 92, csum);
}
void InitSystemForTheGame(void)
diff --git a/arm9/src/list_menu.c b/arm9/src/list_menu.c
index 5ae5a5b4..033d06f9 100644
--- a/arm9/src/list_menu.c
+++ b/arm9/src/list_menu.c
@@ -60,7 +60,7 @@ THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list)
list->unk_33 = 0;
if (gMain.newKeys & REG_PAD_KEYINPUT_A_MASK) {
- return list->template.items[list->cursorPos + list->itemsAbove].index;
+ return list->template.items[list->cursorPos + list->itemsAbove].value;
}
else if (gMain.newKeys & REG_PAD_KEYINPUT_B_MASK) {
return LIST_CANCEL;
@@ -86,23 +86,23 @@ THUMB_FUNC s32 ListMenu_ProcessInput(struct ListMenu * list)
rightButton = FALSE;
break;
case LIST_MULTIPLE_SCROLL_DPAD:
- leftButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_LEFT_MASK;
- rightButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_RIGHT_MASK;
+ leftButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_LEFT_MASK);
+ rightButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_RIGHT_MASK);
break;
case LIST_MULTIPLE_SCROLL_L_R:
- leftButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_L_MASK;
- rightButton = gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_R_MASK;
+ leftButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_L_MASK);
+ rightButton = (u16)(gMain.newAndRepeatedKeys & REG_PAD_KEYINPUT_R_MASK);
break;
}
if (leftButton)
{
- if (!ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE))
+ if (!ListMenuChangeSelection(list, TRUE, (u8)list->template.maxShowed, FALSE))
list->unk_33 = 3;
return LIST_NOTHING_CHOSEN;
}
else if (rightButton)
{
- if (!ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE))
+ if (!ListMenuChangeSelection(list, TRUE, (u8)list->template.maxShowed, TRUE))
list->unk_33 = 4;
return LIST_NOTHING_CHOSEN;
}
@@ -142,11 +142,11 @@ THUMB_FUNC s32 ListMenuTestInputInternal(struct ListMenu * list, const struct Li
if (input == REG_PAD_KEYINPUT_UP_MASK)
{
- ListMenuChangeSelection(list, updateFlag, 1, FALSE);
+ ListMenuChangeSelection(list, (u8)updateFlag, 1, FALSE);
}
else if (input == REG_PAD_KEYINPUT_DOWN_MASK)
{
- ListMenuChangeSelection(list, updateFlag, 1, TRUE);
+ ListMenuChangeSelection(list, (u8)updateFlag, 1, TRUE);
}
if (newCursorPos != NULL)
{
@@ -174,7 +174,7 @@ THUMB_FUNC void ListMenuOverrideSetColors(struct ListMenu * list, u8 cursorPal,
THUMB_FUNC void ListMenuGetCurrentItemArrayId(struct ListMenu * list, u16 * index_p)
{
- *index_p = list->cursorPos + list->itemsAbove;
+ *index_p = (u16)(list->cursorPos + list->itemsAbove);
}
THUMB_FUNC void ListMenuGetScrollAndRow(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p)
@@ -192,7 +192,7 @@ THUMB_FUNC u8 ListMenuGetUnk33(struct ListMenu * list)
THUMB_FUNC s32 ListMenuGetValueByArrayId(struct ListMenu * list, s32 index)
{
- return list->template.items[index].index;
+ return list->template.items[index].value;
}
THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr)
@@ -218,7 +218,7 @@ THUMB_FUNC s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr)
case 8:
return (s32)list->template.upText_Y;
case 9:
- return GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding;
+ return GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding;
case 10:
return (s32)list->template.cursorPal;
case 11:
@@ -314,7 +314,7 @@ THUMB_FUNC void ListMenuGetItemStr(struct ListMenu * list, struct ListMenuItem *
list->template.items = items;
}
-THUMB_FUNC void ListMenuPrint(struct ListMenu * list, const u16 * str, u8 x, u8 y)
+THUMB_FUNC void ListMenuPrint(struct ListMenu * list, struct String * str, u8 x, u8 y)
{
if (str != NULL)
{
@@ -333,17 +333,17 @@ THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16
{
s32 i;
u8 x, y;
- u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding;
+ u8 yMultiplier = (u8)(GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding);
for (i = 0; i < count; i++)
{
- if (list->template.items[startIndex].index != LIST_HEADER)
+ if (list->template.items[startIndex].value != LIST_HEADER)
x = list->template.item_X;
else
x = list->template.header_X;
- y = (yOffset + i) * yMultiplier + list->template.upText_Y;
+ y = (u8)((yOffset + i) * yMultiplier + list->template.upText_Y);
if (list->template.itemPrintFunc != NULL)
- list->template.itemPrintFunc(list, list->template.items[startIndex].index, y);
+ list->template.itemPrintFunc(list, list->template.items[startIndex].value, y);
ListMenuPrint(list, list->template.items[startIndex].text, x, y);
startIndex++;
}
@@ -351,9 +351,9 @@ THUMB_FUNC void ListMenuPrintEntries(struct ListMenu * list, u16 startIndex, u16
THUMB_FUNC void ListMenuDrawCursor(struct ListMenu * list)
{
- u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding;
+ u8 yMultiplier = (u8)(GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding);
u8 x = list->template.cursor_X;
- u8 y = list->itemsAbove * yMultiplier + list->template.upText_Y;
+ u8 y = (u8)(list->itemsAbove * yMultiplier + list->template.upText_Y);
switch (list->template.cursorKind)
{
case 0:
@@ -371,13 +371,13 @@ THUMB_FUNC void ListMenuErasePrintedCursor(struct ListMenu * list, u16 itemsAbov
switch (list->template.cursorKind)
{
case 0:
- u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding;
+ u8 yMultiplier = (u8)(GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding);
u8 width = 8;
u8 height = 16;
FillWindowPixelRect(list->template.window,
list->template.fillValue,
list->template.cursor_X,
- itemsAbove * yMultiplier + list->template.upText_Y,
+ (u16)(itemsAbove * yMultiplier + list->template.upText_Y),
width,
height);
break;
@@ -402,14 +402,14 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis
if (list->template.maxShowed == 1)
newRow = 0;
else
- newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1;
+ newRow = (u16)(list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1);
if (cursorPos == 0)
{
while (itemsAbove != 0)
{
itemsAbove--;
- if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
+ if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER)
{
list->itemsAbove = itemsAbove;
return 1;
@@ -422,14 +422,14 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis
while (itemsAbove > newRow)
{
itemsAbove--;
- if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
+ if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER)
{
list->itemsAbove = itemsAbove;
return 1;
}
}
list->itemsAbove = newRow;
- list->cursorPos = cursorPos - 1;
+ list->cursorPos = (u16)(cursorPos - 1);
}
}
else
@@ -437,14 +437,14 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis
if (list->template.maxShowed == 1)
newRow = 0;
else
- newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2));
+ newRow = (u16)((list->template.maxShowed / 2) + (list->template.maxShowed % 2));
if (cursorPos == list->template.totalItems - list->template.maxShowed)
{
while (itemsAbove < list->template.maxShowed - 1)
{
itemsAbove++;
- if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
+ if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER)
{
list->itemsAbove = itemsAbove;
return 1;
@@ -457,14 +457,14 @@ THUMB_FUNC u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *lis
while (itemsAbove < newRow)
{
itemsAbove++;
- if (list->template.items[cursorPos + itemsAbove].index != LIST_HEADER)
+ if (list->template.items[cursorPos + itemsAbove].value != LIST_HEADER)
{
list->itemsAbove = itemsAbove;
return 1;
}
}
list->itemsAbove = newRow;
- list->cursorPos = cursorPos + 1;
+ list->cursorPos = (u16)(cursorPos + 1);
}
}
return 2;
@@ -479,33 +479,33 @@ THUMB_FUNC void ListMenuScroll(struct ListMenu * list, u8 count, u8 movingDown)
}
else
{
- u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.itemVerticalPadding;
+ u8 yMultiplier = (u8)(GetFontAttribute((u8)list->template.fontId, 1) + list->template.itemVerticalPadding);
if (!movingDown)
{
u16 y, width, height;
- ScrollWindow(list->template.window, 1, count * yMultiplier, (list->template.fillValue << 4) | list->template.fillValue);
+ ScrollWindow(list->template.window, 1, (u8)(count * yMultiplier), (u8)((list->template.fillValue << 4) | list->template.fillValue));
ListMenuPrintEntries(list, list->cursorPos, 0, count);
- y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y;
+ y = (u16)((list->template.maxShowed * yMultiplier) + list->template.upText_Y);
width = GetWindowWidth(list->template.window);
height = GetWindowHeight(list->template.window);
FillWindowPixelRect(list->template.window,
list->template.fillValue,
- 0, y, width * 8, height * 8 - y);
+ 0, y, (u16)(width * 8), (u16)(height * 8 - y));
}
else
{
u32 width;
- ScrollWindow(list->template.window, 0, count * yMultiplier, (list->template.fillValue << 4) | list->template.fillValue);
- ListMenuPrintEntries(list, list->cursorPos + (list->template.maxShowed - count), list->template.maxShowed - count, count);
+ ScrollWindow(list->template.window, 0, (u8)(count * yMultiplier), (u8)((list->template.fillValue << 4) | list->template.fillValue));
+ ListMenuPrintEntries(list, (u16)(list->cursorPos + (list->template.maxShowed - count)), (u16)(list->template.maxShowed - count), count);
width = GetWindowWidth(list->template.window);
FillWindowPixelRect(list->template.window,
list->template.fillValue,
- 0, 0, width * 8, list->template.upText_Y);
+ 0, 0, (u16)(width * 8), list->template.upText_Y);
}
}
}
@@ -529,7 +529,7 @@ THUMB_FUNC BOOL ListMenuChangeSelection(struct ListMenu * list, u8 updateCursorA
break;
cursorCount++;
}
- while (list->template.items[list->cursorPos + list->itemsAbove].index == LIST_HEADER);
+ while (list->template.items[list->cursorPos + list->itemsAbove].value == LIST_HEADER);
}
if (updateCursorAndCallCallback)
@@ -562,7 +562,7 @@ THUMB_FUNC void ListMenuCallSelectionChangedCallback(struct ListMenu * list, u8
{
if (list->template.moveCursorFunc != NULL)
{
- list->template.moveCursorFunc(list, list->template.items[list->cursorPos + list->itemsAbove].index, onInit);
+ list->template.moveCursorFunc(list, list->template.items[list->cursorPos + list->itemsAbove].value, onInit);
}
}
diff --git a/arm9/src/list_menu_items.c b/arm9/src/list_menu_items.c
new file mode 100644
index 00000000..3aa5b0a0
--- /dev/null
+++ b/arm9/src/list_menu_items.c
@@ -0,0 +1,92 @@
+#include "global.h"
+#include "list_menu_items.h"
+#include "msgdata.h"
+#include "heap.h"
+
+void ListMenuItems_DestroyMenuStrings(struct ListMenuItem * items);
+
+THUMB_FUNC struct ListMenuItem * ListMenuItems_ctor(u32 count, u32 heap_id)
+{
+ s32 i;
+ struct ListMenuItem * ret = AllocFromHeap(heap_id, (count + 1) * sizeof(struct ListMenuItem));
+ if (ret != NULL)
+ {
+ for (i = 0; i < count; i++)
+ {
+ ret[i].text = NULL;
+ ret[i].value = 0;
+ }
+ ret[i].text = (struct String *)-1u;
+ ret[i].value = (s32)heap_id;
+ }
+ return ret;
+}
+
+THUMB_FUNC void ListMenuItems_dtor(struct ListMenuItem * items)
+{
+ ListMenuItems_DestroyMenuStrings(items);
+ FreeToHeap(items);
+}
+
+THUMB_FUNC void ListMenuItems_AppendFromMsgData(struct ListMenuItem * items, struct MsgData * msgData, u32 msgNo, s32 value)
+{
+ u32 heap_id;
+ struct ListMenuItem * newItem = ListMenuItems_SeekEnd(items, &heap_id);
+ if (newItem != NULL)
+ {
+ newItem->text = NewString_ReadMsgData(msgData, msgNo);
+ newItem->value = value;
+ }
+}
+
+THUMB_FUNC void ListMenuItems_AddItem(struct ListMenuItem * items, struct String * str, s32 value)
+{
+ u32 heap_id;
+ struct ListMenuItem * newItem = ListMenuItems_SeekEnd(items, &heap_id);
+ if (newItem != NULL)
+ {
+ newItem->text = StringDup(str, heap_id);
+ newItem->value = value;
+ }
+}
+
+THUMB_FUNC void ListMenuItems_CopyItem(struct ListMenuItem * items, struct ListMenuItem * src)
+{
+ u32 heap_id;
+ struct ListMenuItem * newItem = ListMenuItems_SeekEnd(items, &heap_id);
+ if (newItem != NULL)
+ {
+ newItem->text = src->text;
+ newItem->value = src->value;
+ }
+}
+
+THUMB_FUNC struct ListMenuItem * ListMenuItems_SeekEnd(struct ListMenuItem * items, u32 * heap_id_p)
+{
+ struct ListMenuItem * ret;
+ for (; items->text != NULL; items++)
+ {
+ if (items->text == (struct String *)-1u)
+ {
+ GF_ASSERT(0);
+ return NULL;
+ }
+ }
+ ret = items;
+ for (; items->text != (struct String *)-1u; items++)
+ ;
+ *heap_id_p = (u32)items->value;
+ return ret;
+}
+
+THUMB_FUNC void ListMenuItems_DestroyMenuStrings(struct ListMenuItem * items)
+{
+ s32 i;
+ for (i = 0; items[i].text != (struct String *)-1u; i++)
+ {
+ if (items[i].text == NULL)
+ break;
+ String_dtor(items[i].text);
+ items[i].text = NULL;
+ }
+}
diff --git a/arm9/src/main.c b/arm9/src/main.c
index 4879cb4c..c05fa1f3 100644
--- a/arm9/src/main.c
+++ b/arm9/src/main.c
@@ -24,7 +24,7 @@ FS_EXTERN_OVERLAY(MODULE_63);
s32 UNK_02016FA4;
PMBackLightSwitch gBacklightTop;
-struct UnkStruct_02016FA8 UNK_02016FA8;;
+struct UnkStruct_02016FA8 UNK_02016FA8;
extern void InitSystemForTheGame(void);
extern void InitGraphicMemory(void);
diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c
index 00ccd34d..5503f5f3 100644
--- a/arm9/src/scrcmd.c
+++ b/arm9/src/scrcmd.c
@@ -34,9 +34,9 @@ extern u32 FUN_02058510(u32 param0, u32 param1);
extern void MOD05_021E8128(u32 param0, u8 type, u16 map);
extern void MOD05_021E8130(u32 param0, u32 param1);
extern void MOD05_021E8158(struct UnkSavStruct80 *unk80);
-extern u32 MOD05_021E8140(u32 param0);
+extern struct Window * MOD05_021E8140(u32 param0);
extern BOOL MOD05_021E8148(u32 param0);
-extern u8 FUN_02054658(u32 param0, struct String *str, struct Options *opt, u32 param3);
+extern u8 FUN_02054658(struct Window * param0, struct String *str, struct Options *opt, u32 param3);
extern void MOD05_021E8144(u32 param0);
extern void FUN_0200CB00(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5);
extern u32 Std_CreateYesNoMenu(u32 param0, u8 **param1, u32 param2, u32 param3, u32 param4);
@@ -893,7 +893,7 @@ THUMB_FUNC BOOL ScrCmd_CreateMessageBox(struct ScriptContext* ctx)
MOD05_021E8158(unk80);
ReadMsgDataIntoString(ctx->msgData, msg, *unk1);
StringExpandPlaceholders(*unk3, *unk2, *unk1);
- AddTextPrinterParameterized(MOD05_021E8140(unk80->unk60), 1, (u16 *)*unk2, 0, 0, 0, NULL);
+ AddTextPrinterParameterized(MOD05_021E8140(unk80->unk60), 1, *unk2, 0, 0, 0, NULL);
return TRUE;
}
diff --git a/arm9/src/text.c b/arm9/src/text.c
index b21acf88..5078f229 100644
--- a/arm9/src/text.c
+++ b/arm9/src/text.c
@@ -9,7 +9,7 @@
const struct FontInfo *gFonts = NULL;
u16 UNK_021C5734[0x100];
-u32 UNK_021C5714[8];
+BOOL UNK_021C5714[8];
u16 UNK_021C570E;
u16 UNK_021C5710;
u16 UNK_021C5712;
@@ -95,12 +95,12 @@ THUMB_FUNC void FUN_0201BD7C(u32 param0)
FUN_0201BCFC(param0);
}
-THUMB_FUNC u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, struct String *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
printerTemplate.window = window;
- printerTemplate.currentChar = str;
+ printerTemplate.currentChar.wrapped = str;
printerTemplate.fontId = fontId;
printerTemplate.x = (u8)x;
printerTemplate.y = (u8)y;
@@ -118,12 +118,12 @@ THUMB_FUNC u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, co
return AddTextPrinter(&printerTemplate, speed, callback);
}
-THUMB_FUNC u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, struct String *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
printerTemplate.window = window;
- printerTemplate.currentChar = str;
+ printerTemplate.currentChar.wrapped = str;
printerTemplate.fontId = fontId;
printerTemplate.x = (u8)x;
printerTemplate.y = (u8)y;
@@ -141,12 +141,12 @@ THUMB_FUNC u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, c
return AddTextPrinter(&printerTemplate, speed, callback);
}
-THUMB_FUNC u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16))
+THUMB_FUNC u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, struct String *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16))
{
struct TextPrinterTemplate printerTemplate;
printerTemplate.window = window;
- printerTemplate.currentChar = str;
+ printerTemplate.currentChar.wrapped = str;
printerTemplate.fontId = (u8)fontId;
printerTemplate.x = (u8)x;
printerTemplate.y = (u8)y;
@@ -184,13 +184,13 @@ THUMB_FUNC u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 s
}
printer->printerTemplate = *printerTemplate;
- printer->printerTemplate.currentChar = String_c_str((struct String *)printer->printerTemplate.currentChar); //TODO clean up
+ printer->printerTemplate.currentChar.raw = String_c_str(printer->printerTemplate.currentChar.wrapped);
printer->callback = callback;
UNK_021C570C = 0;
FUN_0201C1A8(printer);
if (speed != 0xff && speed != 0)
{
- printer->textSpeedBottom += 0xff;
+ printer->textSpeedBottom--;
printer->textSpeedTop = 1;
printer->minLetterSpacing = FUN_0201BCC8(RunTextPrinter, printer, 1);
return printer->minLetterSpacing;
@@ -345,7 +345,7 @@ THUMB_FUNC void FUN_0201C1EC(struct TextPrinter *printer, u32 param1, u32 param2
printer->Unk2C = FUN_0201C1B0();
}
u16 * r6 = printer->Unk2C + param3 * 24 * 8;
- u16 r2 = (GetWindowWidth(window) - 3) * 8;
+ u16 r2 = (u16)((GetWindowWidth(window) - 3) * 8);
BlitBitmapRectToWindow(window, r6, 0, 0, 24, 32, r2, 0, 24, 32);
}
diff --git a/arm9/src/text_02054590.c b/arm9/src/text_02054590.c
index e2765c6f..b7c4f91c 100644
--- a/arm9/src/text_02054590.c
+++ b/arm9/src/text_02054590.c
@@ -53,7 +53,7 @@ THUMB_FUNC void FUN_0205464C(struct Window *param0)
FillWindowPixelBuffer(param0, 15);
}
-THUMB_FUNC u16 FUN_02054658(struct Window * window, const u16 *str, struct Options *options, u8 param3)
+THUMB_FUNC u16 FUN_02054658(struct Window * window, struct String *str, struct Options *options, u8 param3)
{
FUN_02002B60(param3);
FUN_02002B7C(0);
@@ -61,7 +61,7 @@ THUMB_FUNC u16 FUN_02054658(struct Window * window, const u16 *str, struct Optio
return AddTextPrinterParameterized(window, 1, str, 0, 0, (u32)Options_GetTextFrameDelay(options), NULL);
}
-THUMB_FUNC u16 DrawFieldMessage(struct Window * window, const u16 *str, u8 fontId, u32 speed, u8 a4, u32 a5)
+THUMB_FUNC u16 DrawFieldMessage(struct Window * window, struct String *str, u8 fontId, u32 speed, u8 a4, u32 a5)
{
FUN_02002B60(a4);
FUN_02002B7C(a5);
diff --git a/arm9/src/unk_02022504.c b/arm9/src/unk_02022504.c
index 0267a87c..7f50815b 100644
--- a/arm9/src/unk_02022504.c
+++ b/arm9/src/unk_02022504.c
@@ -26,7 +26,7 @@ THUMB_FUNC u8 *LoadHallOfFame(struct SaveBlock2 *sav2, u32 heap_id, int *ret_p)
return ReadSaveFileFromFlash(sav2, heap_id, 0, ret_p);
}
-THUMB_FUNC s32 *SaveHallOfFame(struct SaveBlock2 *sav2, u8 *data)
+THUMB_FUNC s32 SaveHallOfFame(struct SaveBlock2 *sav2, u8 *data)
{
return WriteSaveFileToFlash(sav2, 0, data);
}
diff --git a/arm9/src/unk_02025484.c b/arm9/src/unk_02025484.c
index 733ac23a..96da04c9 100644
--- a/arm9/src/unk_02025484.c
+++ b/arm9/src/unk_02025484.c
@@ -3,14 +3,14 @@
#include "error_handling.h"
#include "unk_02025484.h"
-THUMB_FUNC void FUN_02025484(struct unk_2025484 *r0, u32 r1)
+THUMB_FUNC void FUN_02025484(struct unk_2025484 *r0)
{
MI_CpuFill8(r0, 0, sizeof(struct unk_2025484));
}
THUMB_FUNC u32 *FUN_02025490(struct unk_2025484 *r0, u32 r1)
{
- FUN_02025484(r0, r1);
+ FUN_02025484(r0);
r0->unk0 = r1;
return &r0->unk4;
}
diff --git a/include/list_menu.h b/include/list_menu.h
index 3f60c6f2..a02e1273 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -2,6 +2,7 @@
#define POKEDIAMOND_LIST_MENU_H
#include "list_menu_cursor.h"
+#include "list_menu_items.h"
#define LIST_HEADER -3
#define LIST_CANCEL -2
@@ -13,12 +14,6 @@
struct ListMenu;
-struct ListMenuItem
-{
- const u16 * text;
- s32 index;
-};
-
// TODO: Document remaining fields.
// A lot of these are named based on similar fields in gen 3.
@@ -74,5 +69,20 @@ struct ListMenu * ListMenuInit(const struct ListMenuTemplate * template, u16 cur
s32 ListMenu_ProcessInput(struct ListMenu * list);
void DestroyListMenu(struct ListMenu * list, u16 * cursorPos, u16 * itemsAbove);
void RedrawListMenu(struct ListMenu * list);
+s32 ListMenuTestInputInternal(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 updateFlag, u16 input, u16 *newCursorPos, u16 *newItemsAbove);
+s32 ListMenuTestInput(struct ListMenu * list, const struct ListMenuTemplate * template, u16 cursorPos, u16 itemsAbove, u16 input, u16 *newCursorPos, u16 *newItemsAbove);
+void ListMenuOverrideSetColors(struct ListMenu * list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
+void ListMenuGetCurrentItemArrayId(struct ListMenu * list, u16 * index_p);
+void ListMenuGetScrollAndRow(struct ListMenu * list, u16 * cursorPos_p, u16 * itemsAbove_p);
+u8 ListMenuGetUnk33(struct ListMenu * list);
+s32 ListMenuGetValueByArrayId(struct ListMenu * list, s32 index);
+s32 ListMenuGetTemplateField(struct ListMenu * list, u32 attr);
+void ListMenuSetTemplateField(struct ListMenu * list, u32 attr, s32 value);
+void ListMenuGetItemStr(struct ListMenu * list, struct ListMenuItem * items);
+void ListMenuPrint(struct ListMenu * list, struct String * str, u8 x, u8 y);
+void ListMenuErasePrintedCursor(struct ListMenu * list, u16 itemsAbove);
+u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, u8 movingDown);
+void ListMenuScroll(struct ListMenu * list, u8 count, u8 movingDown);
+void ListMenuCopyToVram(struct ListMenu * list);
#endif // POKEDIAMOND_LIST_MENU_H
diff --git a/include/list_menu_items.h b/include/list_menu_items.h
new file mode 100644
index 00000000..ec96d480
--- /dev/null
+++ b/include/list_menu_items.h
@@ -0,0 +1,21 @@
+#ifndef POKEDIAMOND_LIST_MENU_ITEMS_H
+#define POKEDIAMOND_LIST_MENU_ITEMS_H
+
+#include "string16.h"
+#include "msgdata.h"
+
+struct ListMenuItem
+{
+ struct String * text;
+ s32 value;
+};
+
+struct ListMenuItem * ListMenuItems_ctor(u32 count, u32 heap_id);
+void ListMenuItems_dtor(struct ListMenuItem * items);
+void ListMenuItems_AppendFromMsgData(struct ListMenuItem * items, struct MsgData * msgData, u32 msgNo, s32 value);
+void ListMenuItems_AddItem(struct ListMenuItem * items, struct String * str, s32 value);
+void ListMenuItems_CopyItem(struct ListMenuItem * items, struct ListMenuItem * src);
+struct ListMenuItem * ListMenuItems_SeekEnd(struct ListMenuItem * items, u32 * heap_id_p);
+void ListMenuItems_DestroyMenuStrings(struct ListMenuItem * items);
+
+#endif // POKEDIAMOND_LIST_MENU_ITEMS_H
diff --git a/include/scrcmd.h b/include/scrcmd.h
index 226bbb8c..a1906e2d 100644
--- a/include/scrcmd.h
+++ b/include/scrcmd.h
@@ -161,6 +161,7 @@ BOOL ScrCmd_Unk0054(struct ScriptContext *ctx);
BOOL FUN_02041464(struct ScriptContext *ctx);
BOOL ScrCmd_Unk0055(struct ScriptContext* ctx);
BOOL ScrCmd_Unk0056(struct ScriptContext* ctx);
+BOOL ScrCmd_Unk0057(struct ScriptContext* ctx);
BOOL ScrCmd_Unk0058(struct ScriptContext* ctx);
BOOL ScrCmd_Unk0049(struct ScriptContext* ctx);
BOOL ScrCmd_Unk004A(struct ScriptContext* ctx);
diff --git a/include/text.h b/include/text.h
index 57185a05..514e8ba7 100644
--- a/include/text.h
+++ b/include/text.h
@@ -16,9 +16,15 @@
#define CHAR_8 0x00AA
#define CHAR_9 0x00AB
+union StrbufForPrint
+{
+ struct String * wrapped;
+ const u16 * raw;
+};
+
struct TextPrinterTemplate
{
- const u16* currentChar; // 0
+ union StrbufForPrint currentChar; // 0
struct Window * window; // 4
u8 padding[1]; // 8
u8 fontId; // 9
@@ -76,9 +82,9 @@ BOOL FUN_0201BD44(u32 param0);
void FUN_0201BD5C(void);
u8 FUN_0201BD70(u32 param0);
void FUN_0201BD7C(u32 param0);
-u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16));
-u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16));
-u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, const u16 *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16));
+u16 AddTextPrinterParameterized(struct Window * window, u8 fontId, struct String *str, u32 x, u32 y, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16));
+u16 AddTextPrinterParameterized2(struct Window * window, u8 fontId, struct String *str, u32 x, u32 y, u32 speed, u32 colors, u8 (*callback)(struct TextPrinterTemplate *, u16));
+u16 AddTextPrinterParameterized3(struct Window * window, u32 fontId, struct String *str, u32 x, u32 y, u32 speed, u32 colors, u32 letterSpacing, u32 lineSpacing, u8 (*callback)(struct TextPrinterTemplate *, u16));
u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, u8 (*callback)(struct TextPrinterTemplate *, u16));
void RunTextPrinter(u32 param0, struct TextPrinter *printer);
u32 RenderFont(struct TextPrinter *printer);
diff --git a/include/text_02054590.h b/include/text_02054590.h
index b1ee055a..32dca79a 100644
--- a/include/text_02054590.h
+++ b/include/text_02054590.h
@@ -4,13 +4,14 @@
#include "global.h"
#include "options.h"
#include "window.h"
+#include "string16.h"
void FUN_02054590(u32 param0, u32 param1);
void FUN_020545B8(u32 param0, u32 param1, u32 param2);
void FUN_02054608(struct Window *param0, struct Options *options);
void FUN_0205464C(struct Window *param0);
-u16 FUN_02054658(struct Window * window, const u16 *str, struct Options *options, u8 param3);
-u16 DrawFieldMessage(struct Window * window, const u16 *str, u8 fontId, u32 speed, u8 a4, u32 a5);
+u16 FUN_02054658(struct Window * window, struct String *str, struct Options *options, u8 param3);
+u16 DrawFieldMessage(struct Window * window, struct String *str, u8 fontId, u32 speed, u8 a4, u32 a5);
u8 FUN_020546C8(u32 param0);
void FUN_020546E0(u32 param0, u32 param1, u32 param2, u32 param3);
void FUN_02054744(struct Window *param0, u32 param1, u32 param2);
diff --git a/include/unk_02022504.h b/include/unk_02022504.h
index aa541f85..62e4def1 100644
--- a/include/unk_02022504.h
+++ b/include/unk_02022504.h
@@ -9,6 +9,6 @@ struct PCStorage *GetStoragePCPointer(struct SaveBlock2 *sav2);
void *FUN_0202251C(struct SaveBlock2 *sav2);
void *FUN_02022528(struct SaveBlock2 *sav2);
u8 *LoadHallOfFame(struct SaveBlock2 *sav2, u32 heap_id, int *ret_p);
-s32 *SaveHallOfFame(struct SaveBlock2 *sav2, u8 *data);
+s32 SaveHallOfFame(struct SaveBlock2 *sav2, u8 *data);
#endif //POKEDIAMOND_UNK_02022504_H
diff --git a/include/unk_02025484.h b/include/unk_02025484.h
index 0412dda1..d2feccb3 100644
--- a/include/unk_02025484.h
+++ b/include/unk_02025484.h
@@ -9,7 +9,7 @@ struct unk_2025484
u8 padding[0x1C];
};
-void FUN_02025484(struct unk_2025484 *r0, u32 r1);
+void FUN_02025484(struct unk_2025484 *r0);
u32 *FUN_02025490(struct unk_2025484 *r0, u32 r1);
u32 *FUN_020254A0(struct unk_2025484 *r0, u32 r1);
u32 FUN_020254B4(struct unk_2025484 *r0);