diff options
author | Revo <projectrevotpp@hotmail.com> | 2021-05-22 19:33:17 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-22 19:33:17 -0400 |
commit | 121208bd6db271ae766a614da82fa00498bb7856 (patch) | |
tree | 7ab7010abde683379b2cb6e63ded0dbbf4ab4388 | |
parent | 1e7dcfbf615f387c3b4a8a7577ff36dd57922f60 (diff) | |
parent | 0d0f5b70b03e271d05cd30ccacddd55d75c4e530 (diff) |
Merge pull request #382 from PikalaxALT/pikalax_work
list_menu_items
-rw-r--r-- | .github/workflows/build.yml | 14 | ||||
-rw-r--r-- | arm9/arm9.lsf | 4 | ||||
-rw-r--r-- | arm9/asm/gf_rtc.s | 410 | ||||
-rw-r--r-- | arm9/asm/unk_02011744.s | 1810 | ||||
-rw-r--r-- | arm9/asm/unk_02012004.s | 787 | ||||
-rw-r--r-- | arm9/asm/unk_02012944.s | 471 | ||||
-rw-r--r-- | arm9/lib/src/RTC_internal.c | 2 | ||||
-rw-r--r-- | arm9/src/error_message_reset.c | 2 | ||||
-rw-r--r-- | arm9/src/game_init.c | 2 | ||||
-rw-r--r-- | arm9/src/list_menu.c | 76 | ||||
-rw-r--r-- | arm9/src/list_menu_items.c | 92 | ||||
-rw-r--r-- | arm9/src/main.c | 2 | ||||
-rw-r--r-- | arm9/src/scrcmd.c | 6 | ||||
-rw-r--r-- | arm9/src/text.c | 20 | ||||
-rw-r--r-- | arm9/src/text_02054590.c | 4 | ||||
-rw-r--r-- | arm9/src/unk_02022504.c | 2 | ||||
-rw-r--r-- | arm9/src/unk_02025484.c | 4 | ||||
-rw-r--r-- | include/list_menu.h | 22 | ||||
-rw-r--r-- | include/list_menu_items.h | 21 | ||||
-rw-r--r-- | include/scrcmd.h | 1 | ||||
-rw-r--r-- | include/text.h | 14 | ||||
-rw-r--r-- | include/text_02054590.h | 5 | ||||
-rw-r--r-- | include/unk_02022504.h | 2 | ||||
-rw-r--r-- | include/unk_02025484.h | 2 |
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); |