From f7fbcd80ba3fd6c596c1804ece821feca3f9e519 Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Mon, 17 Aug 2026 01:16:24 -0700 Subject: [PATCH] Decomp six collection-menu setters; add a second window-contents view Decompile from asm: SetCollectionMenuField0x1BC 0x0202C5E0 SetCollectionMenuField0x1C8 0x0202C794 SetCollectionMenuField0x1A0 0x0202C7A8 SetCollectionMenuField0x1A4 0x0202C7BC SetCollectionMenuVoidFn 0x0202C7D0 SetCollectionMenuField0x1B2 0x0202D0D8 These reach the same buffer as the parent, simple and advanced menu accessors, through the same GetWindowContents, but they do not share its layout: this set writes a word at 0x1A0 where CheckParentMenuField0x1A0 reads a byte there, and a byte at 0x1B2 which falls inside the word the advanced text box uses at 0x1B0. So they are given their own view, struct unk_0202C5E0, named for the lowest-addressed function that takes it, rather than forcing one struct to describe both. GetWindowContents returns void *, so each menu type casting the buffer to its own layout is consistent with what the target does; a single merged struct would have to assert that the two layouts agree, which the stores show they do not. Two of the offsets are inferred from the store width alone and nothing else: 0x1A8 is written with a word and the function is named VoidFn, so it is typed void *, but the target would look the same for any pointer or 32-bit value. No comments are added to any pmd-sky file. Authored by Claude (Opus 5) under human direction. Confirmed by a matching build: build/pmdsky.us/pmdsky.us.nds: OK. Co-Authored-By: Claude Opus 5 --- asm/include/main_0202BD10.inc | 5 - asm/include/main_0202C5F4.inc | 10 + asm/include/main_0202C75C.inc | 69 - asm/include/main_0202C7E4.inc | 28 + asm/include/main_0202D0EC.inc | 68 + asm/main_0202BD10.s | 123 -- asm/main_0202C5F4.s | 118 ++ asm/main_0202C75C.s | 3134 --------------------------------- asm/main_0202C7E4.s | 648 +++++++ asm/main_0202D0EC.s | 2449 ++++++++++++++++++++++++++ include/main_0202C5E0.h | 24 + include/main_0202C794.h | 9 + include/main_0202D0D8.h | 6 + main.lsf | 6 + src/main_0202C5E0.c | 8 + src/main_0202C794.c | 30 + src/main_0202D0D8.c | 9 + 17 files changed, 3413 insertions(+), 3331 deletions(-) create mode 100644 asm/include/main_0202C5F4.inc create mode 100644 asm/include/main_0202C7E4.inc create mode 100644 asm/include/main_0202D0EC.inc create mode 100644 asm/main_0202C5F4.s create mode 100644 asm/main_0202C7E4.s create mode 100644 asm/main_0202D0EC.s create mode 100644 include/main_0202C5E0.h create mode 100644 include/main_0202C794.h create mode 100644 include/main_0202D0D8.h create mode 100644 src/main_0202C5E0.c create mode 100644 src/main_0202C794.c create mode 100644 src/main_0202D0D8.c diff --git a/asm/include/main_0202BD10.inc b/asm/include/main_0202BD10.inc index 5014368a..603b4995 100644 --- a/asm/include/main_0202BD10.inc +++ b/asm/include/main_0202BD10.inc @@ -1,18 +1,15 @@ #pragma once .public COLLECTION_MENU_DEFAULT_WINDOW_PARAMS .public CalcMenuHeightDiv8__02031AA4 -.public DeleteWindow .public GetNumItemsOnPage .public GetPageItemYOffset .public GetPageStart .public GetSelectedMenuItemIdx -.public GetWindow .public GetWindowContents .public GetWindowRectangle .public InitWindowInput .public IsMenuOptionActive .public MemAlloc -.public MemFree .public NewWindowScreenCheck .public PlayWindowInputSound .public UpdateCollectionMenu @@ -34,6 +31,4 @@ .public sub_020323F8 .public sub_0203250C .public sub_02032684 -.public sub_0203271C -.public sub_02032984 .public sub_02033758 diff --git a/asm/include/main_0202C5F4.inc b/asm/include/main_0202C5F4.inc new file mode 100644 index 00000000..7bd0dd94 --- /dev/null +++ b/asm/include/main_0202C5F4.inc @@ -0,0 +1,10 @@ +#pragma once +.public DeleteWindow +.public GetSelectedMenuItemIdx +.public GetWindow +.public GetWindowContents +.public GetWindowRectangle +.public InitWindowInput +.public MemFree +.public sub_0203271C +.public sub_02032984 diff --git a/asm/include/main_0202C75C.inc b/asm/include/main_0202C75C.inc index 488da4b1..a3b1494d 100644 --- a/asm/include/main_0202C75C.inc +++ b/asm/include/main_0202C75C.inc @@ -1,72 +1,3 @@ #pragma once -.public CalcMenuHeightDiv8__02031AA4 -.public DEBUG_MENU_DEFAULT_WINDOW_PARAMS -.public DIALOGUE_BOX_DEFAULT_WINDOW_PARAMS -.public DeleteWindow -.public DrawTextInWindow -.public GetCurrentPage -.public GetNumItemsOnPage -.public GetPageItemYOffset -.public GetPageStart -.public GetSelectedItemOnPage .public GetSelectedMenuItemIdx -.public GetStringFromFileVeneer .public GetWindowContents -.public GetWindowRectangle -.public InitPreprocessorArgs -.public InitWindowInput -.public IsEmptyString -.public IsMenuOptionActive -.public MemAlloc -.public MemFree -.public NewWindowScreenCheck -.public OPTIONS_MENU_DEFAULT_WINDOW_PARAMS -.public PlayWindowInputSound -.public PreprocessString -.public PreprocessStringFromId -.public SCROLL_BOX_DEFAULT_WINDOW_PARAMS -.public UpdateDialogueBox -.public UpdateWindow -.public _0209AEE0 -.public _0209AEEC -.public _0209AEF4 -.public _0209AEFC -.public _0209AF04 -.public strcpy -.public sub_02006C8C -.public sub_02021F44 -.public sub_0202202C -.public sub_02025D90 -.public sub_02025E84 -.public sub_0202614C -.public sub_02026174 -.public sub_02026194 -.public sub_020261D4 -.public sub_020261F4 -.public sub_02026204 -.public sub_02026358 -.public sub_020263C8 -.public sub_02026428 -.public sub_020265A8 -.public sub_02027B1C -.public sub_0202810C -.public sub_0202812C -.public sub_0202830C -.public sub_02028354 -.public sub_020287C4 -.public sub_02028948 -.public sub_0202A03C -.public sub_02031914 -.public sub_02031A5C -.public sub_02031C74 -.public sub_02031C84 -.public sub_02031C98 -.public sub_02032070 -.public sub_020320A8 -.public sub_020320C0 -.public sub_020320EC -.public sub_02032160 -.public sub_020323F8 -.public sub_020324C4 -.public sub_02032684 -.public sub_02033758 diff --git a/asm/include/main_0202C7E4.inc b/asm/include/main_0202C7E4.inc new file mode 100644 index 00000000..615ed95d --- /dev/null +++ b/asm/include/main_0202C7E4.inc @@ -0,0 +1,28 @@ +#pragma once +.public GetNumItemsOnPage +.public GetPageItemYOffset +.public GetPageStart +.public GetSelectedMenuItemIdx +.public GetWindowContents +.public IsMenuOptionActive +.public PlayWindowInputSound +.public UpdateWindow +.public sub_02025D90 +.public sub_02026358 +.public sub_02026428 +.public sub_02027B1C +.public sub_0202810C +.public sub_0202812C +.public sub_02028354 +.public sub_020287C4 +.public sub_02028948 +.public sub_0202A03C +.public sub_02031C74 +.public sub_02031C84 +.public sub_02031C98 +.public sub_02032070 +.public sub_02032160 +.public sub_020323F8 +.public sub_020324C4 +.public sub_02032684 +.public sub_02033758 diff --git a/asm/include/main_0202D0EC.inc b/asm/include/main_0202D0EC.inc new file mode 100644 index 00000000..d0ecc46f --- /dev/null +++ b/asm/include/main_0202D0EC.inc @@ -0,0 +1,68 @@ +#pragma once +.public CalcMenuHeightDiv8__02031AA4 +.public DEBUG_MENU_DEFAULT_WINDOW_PARAMS +.public DIALOGUE_BOX_DEFAULT_WINDOW_PARAMS +.public DeleteWindow +.public DrawTextInWindow +.public GetCurrentPage +.public GetNumItemsOnPage +.public GetPageItemYOffset +.public GetPageStart +.public GetSelectedItemOnPage +.public GetSelectedMenuItemIdx +.public GetStringFromFileVeneer +.public GetWindowContents +.public GetWindowRectangle +.public InitPreprocessorArgs +.public InitWindowInput +.public IsEmptyString +.public IsMenuOptionActive +.public MemAlloc +.public MemFree +.public NewWindowScreenCheck +.public OPTIONS_MENU_DEFAULT_WINDOW_PARAMS +.public PlayWindowInputSound +.public PreprocessString +.public PreprocessStringFromId +.public SCROLL_BOX_DEFAULT_WINDOW_PARAMS +.public UpdateDialogueBox +.public UpdateWindow +.public _0209AEE0 +.public _0209AEEC +.public _0209AEF4 +.public _0209AEFC +.public _0209AF04 +.public strcpy +.public sub_02006C8C +.public sub_02021F44 +.public sub_0202202C +.public sub_02025D90 +.public sub_02025E84 +.public sub_0202614C +.public sub_02026174 +.public sub_02026194 +.public sub_020261D4 +.public sub_020261F4 +.public sub_02026204 +.public sub_020263C8 +.public sub_020265A8 +.public sub_02027B1C +.public sub_0202810C +.public sub_0202812C +.public sub_0202830C +.public sub_020287C4 +.public sub_02028948 +.public sub_0202A03C +.public sub_02031914 +.public sub_02031A5C +.public sub_02031C74 +.public sub_02031C84 +.public sub_02031C98 +.public sub_02032070 +.public sub_020320A8 +.public sub_020320C0 +.public sub_020320EC +.public sub_02032160 +.public sub_020323F8 +.public sub_02032684 +.public sub_02033758 diff --git a/asm/main_0202BD10.s b/asm/main_0202BD10.s index d950f0f4..adfa6dbd 100644 --- a/asm/main_0202BD10.s +++ b/asm/main_0202BD10.s @@ -640,126 +640,3 @@ _0202C5D4: .word 0x10008004 _0202C5D8: .word UpdateCollectionMenu _0202C5DC: .word COLLECTION_MENU_DEFAULT_WINDOW_PARAMS arm_func_end CreateCollectionMenu - - arm_func_start SetCollectionMenuField0x1BC -SetCollectionMenuField0x1BC: ; 0x0202C5E0 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - str r4, [r0, #0x1bc] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuField0x1BC - - arm_func_start SetCollectionMenuWidth -SetCollectionMenuWidth: ; 0x0202C5F4 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindow - ldr r1, [r0, #0xc] - str r4, [r1, #0x1c0] - ldrb r0, [r0, #6] - mov r0, r0, lsl #3 - sub r0, r0, #1 - cmp r4, r0 - strgt r0, [r1, #0x1c0] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuWidth - - arm_func_start sub_0202C620 -sub_0202C620: ; 0x0202C620 - stmdb sp!, {r3, lr} - bl GetWindowContents - mov r1, #1 - str r1, [r0, #0x1ac] - mov r1, #0 - strb r1, [r0, #0x1b0] - strb r1, [r0, #0x1b1] - ldr r1, [r0, #0xfc] - bic r1, r1, #0x800000 - str r1, [r0, #0xfc] - add r0, r0, #4 - bl sub_02032984 - ldmia sp!, {r3, pc} - arm_func_end sub_0202C620 - - arm_func_start sub_0202C654 -sub_0202C654: ; 0x0202C654 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x18 - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - bl GetWindowContents - mov r4, r0 - mov r0, #1 - str r0, [r4, #0x1ac] - mov r0, #0 - strb r0, [r4, #0x1b0] - strb r0, [r4, #0x1b1] - cmp r5, #0 - bne _0202C6A4 - mov r0, r8 - bl GetWindowContents - add r0, r0, #4 - bl GetSelectedMenuItemIdx - str r0, [r4, #0x100] -_0202C6A4: - add r1, sp, #8 - mov r0, r8 - bl GetWindowRectangle - str r7, [sp] - str r6, [sp, #4] - ldr r1, [r4, #0xfc] - add r3, sp, #8 - add r0, r4, #4 - add r2, r4, #0x100 - bl InitWindowInput - add sp, sp, #0x18 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end sub_0202C654 - - arm_func_start sub_0202C6D4 -sub_0202C6D4: ; 0x0202C6D4 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - mov r1, r4 - add r0, r0, #4 - bl sub_0203271C - ldmia sp!, {r4, pc} - arm_func_end sub_0202C6D4 - - arm_func_start sub_0202C6F0 -sub_0202C6F0: ; 0x0202C6F0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, r2 - bl GetWindowContents - str r5, [r0, #0x1b4] - str r4, [r0, #0x1b8] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0202C6F0 - - arm_func_start CloseCollectionMenu -CloseCollectionMenu: ; 0x0202C70C - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetWindowContents - bl MemFree - mov r0, r4 - bl DeleteWindow - ldmia sp!, {r4, pc} - arm_func_end CloseCollectionMenu - - arm_func_start IsCollectionMenuActive -IsCollectionMenuActive: ; 0x0202C728 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r0, [r0, #0x1ac] - cmp r0, #6 - cmpne r0, #7 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsCollectionMenuActive diff --git a/asm/main_0202C5F4.s b/asm/main_0202C5F4.s new file mode 100644 index 00000000..afabe46b --- /dev/null +++ b/asm/main_0202C5F4.s @@ -0,0 +1,118 @@ + .include "asm/macros.inc" + .include "main_0202C5F4.inc" + + .text + + arm_func_start SetCollectionMenuWidth +SetCollectionMenuWidth: ; 0x0202C5F4 + stmdb sp!, {r4, lr} + mov r4, r1 + bl GetWindow + ldr r1, [r0, #0xc] + str r4, [r1, #0x1c0] + ldrb r0, [r0, #6] + mov r0, r0, lsl #3 + sub r0, r0, #1 + cmp r4, r0 + strgt r0, [r1, #0x1c0] + ldmia sp!, {r4, pc} + arm_func_end SetCollectionMenuWidth + + arm_func_start sub_0202C620 +sub_0202C620: ; 0x0202C620 + stmdb sp!, {r3, lr} + bl GetWindowContents + mov r1, #1 + str r1, [r0, #0x1ac] + mov r1, #0 + strb r1, [r0, #0x1b0] + strb r1, [r0, #0x1b1] + ldr r1, [r0, #0xfc] + bic r1, r1, #0x800000 + str r1, [r0, #0xfc] + add r0, r0, #4 + bl sub_02032984 + ldmia sp!, {r3, pc} + arm_func_end sub_0202C620 + + arm_func_start sub_0202C654 +sub_0202C654: ; 0x0202C654 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x18 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl GetWindowContents + mov r4, r0 + mov r0, #1 + str r0, [r4, #0x1ac] + mov r0, #0 + strb r0, [r4, #0x1b0] + strb r0, [r4, #0x1b1] + cmp r5, #0 + bne _0202C6A4 + mov r0, r8 + bl GetWindowContents + add r0, r0, #4 + bl GetSelectedMenuItemIdx + str r0, [r4, #0x100] +_0202C6A4: + add r1, sp, #8 + mov r0, r8 + bl GetWindowRectangle + str r7, [sp] + str r6, [sp, #4] + ldr r1, [r4, #0xfc] + add r3, sp, #8 + add r0, r4, #4 + add r2, r4, #0x100 + bl InitWindowInput + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + arm_func_end sub_0202C654 + + arm_func_start sub_0202C6D4 +sub_0202C6D4: ; 0x0202C6D4 + stmdb sp!, {r4, lr} + mov r4, r1 + bl GetWindowContents + mov r1, r4 + add r0, r0, #4 + bl sub_0203271C + ldmia sp!, {r4, pc} + arm_func_end sub_0202C6D4 + + arm_func_start sub_0202C6F0 +sub_0202C6F0: ; 0x0202C6F0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r4, r2 + bl GetWindowContents + str r5, [r0, #0x1b4] + str r4, [r0, #0x1b8] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0202C6F0 + + arm_func_start CloseCollectionMenu +CloseCollectionMenu: ; 0x0202C70C + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetWindowContents + bl MemFree + mov r0, r4 + bl DeleteWindow + ldmia sp!, {r4, pc} + arm_func_end CloseCollectionMenu + + arm_func_start IsCollectionMenuActive +IsCollectionMenuActive: ; 0x0202C728 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r0, [r0, #0x1ac] + cmp r0, #6 + cmpne r0, #7 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsCollectionMenuActive diff --git a/asm/main_0202C75C.s b/asm/main_0202C75C.s index 3b43ef88..02d26f3a 100644 --- a/asm/main_0202C75C.s +++ b/asm/main_0202C75C.s @@ -21,3137 +21,3 @@ _0202C78C: mvn r0, #0 ldmia sp!, {r3, pc} arm_func_end sub_0202C75C - - arm_func_start SetCollectionMenuField0x1C8 -SetCollectionMenuField0x1C8: ; 0x0202C794 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - strb r4, [r0, #0x1c8] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuField0x1C8 - - arm_func_start SetCollectionMenuField0x1A0 -SetCollectionMenuField0x1A0: ; 0x0202C7A8 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - str r4, [r0, #0x1a0] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuField0x1A0 - - arm_func_start SetCollectionMenuField0x1A4 -SetCollectionMenuField0x1A4: ; 0x0202C7BC - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - str r4, [r0, #0x1a4] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuField0x1A4 - - arm_func_start SetCollectionMenuVoidFn -SetCollectionMenuVoidFn: ; 0x0202C7D0 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - str r4, [r0, #0x1a8] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuVoidFn - - arm_func_start sub_0202C7E4 -sub_0202C7E4: ; 0x0202C7E4 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r1, [r0, #0x1ac] - cmp r1, #3 - moveq r1, #2 - streq r1, [r0, #0x1ac] - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r3, pc} - arm_func_end sub_0202C7E4 - - arm_func_start UpdateCollectionMenu -UpdateCollectionMenu: ; 0x0202C808 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - mov r4, r0 - ldrsb r0, [r4, #0x10] - ldr r5, [r4, #0xc] - bl sub_02028354 - cmp r0, #3 - moveq r1, #1 - movne r1, #0 - ldr r0, [r5, #0x1ac] - and fp, r1, #0xff - cmp r0, #0xa - addls pc, pc, r0, lsl #2 - b _0202CE40 -_0202C840: ; jump table - b _0202C86C ; case 0 - b _0202C884 ; case 1 - b _0202C8C0 ; case 2 - b _0202C918 ; case 3 - b _0202CDC8 ; case 4 - b _0202CE0C ; case 5 - b _0202CE40 ; case 6 - b _0202CE40 ; case 7 - b _0202CCA4 ; case 8 - b _0202CD14 ; case 9 - b _0202CD74 ; case 10 -_0202C86C: - ldrsb r0, [r4, #0x10] - bl sub_0202810C - cmp r0, #0 - beq _0202CE40 - mov r0, #2 - str r0, [r5, #0x1ac] -_0202C884: - ldr r0, [r5, #0x1ac] - cmp r0, #1 - bne _0202C8C0 - ldrb r0, [r5, #0x1c6] - cmp r0, #0 - beq _0202C8A4 - mov r0, r4 - bl sub_0202CEA0 -_0202C8A4: - ldrb r0, [r4, #8] - bl sub_020287C4 - ldrsb r0, [r4, #0x10] - bl UpdateWindow - mov r0, #2 - str r0, [r5, #0x1ac] - b _0202CE40 -_0202C8C0: - mov r0, r4 - bl sub_0202CEA0 - ldr r0, [r5, #0xfc] - tst r0, #0x800000 - beq _0202C8F8 - mov r0, #7 - str r0, [r5, #0x1ac] - mov r1, #1 - mov r0, #0 - strb r1, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - sub r0, r0, #4 - str r0, [r4, #0xb8] - b _0202CE40 -_0202C8F8: - mov r1, #3 - mov r0, #0 - str r1, [r5, #0x1ac] - strb r0, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - sub r0, r0, #1 - str r0, [r4, #0xb8] - b _0202CE40 -_0202C918: - add r1, sp, #8 - add r2, sp, #0xc - add r0, r5, #4 - mov r3, #1 - bl sub_02031C98 - ldr r1, [sp, #8] - mov r6, #0 - cmp r1, #0 - movne r6, #1 - mov r8, r0 - cmp r1, #0 - bne _0202CA70 - ldr r0, [r5, #0xfc] - tst r0, #1 - beq _0202CA70 - mov r3, #0 - str r3, [sp] - ldr r2, _0202CE9C ; =0x00000408 - add r1, sp, #0xc - add r0, r5, #4 - str r3, [sp, #4] - bl sub_02032160 - movs r7, r0 - bmi _0202CA70 - ldrb r0, [r5, #0x1b2] - cmp r0, #0 - beq _0202C994 - add r0, r5, #4 - bl GetSelectedMenuItemIdx - cmp r7, r0 - bne _0202CA54 -_0202C994: - ldr r0, [r5, #0x19c] - cmp r0, #0 - ldrne r0, [sp, #8] - orrne r0, r0, #4 - orrne r0, r0, #0x400 - strne r0, [sp, #8] - bne _0202CA60 - ldr r1, [sp, #8] - add r0, r5, #4 - orr r1, r1, #1 - str r1, [sp, #8] - ldr r8, [r5, #0xc] - ldr sb, [r5, #0x10] - bl GetPageStart - mov r1, r0 - add r0, r5, #4 - sub r1, r7, r1 - bl GetPageItemYOffset - ldr r1, [r5, #4] - add sl, r1, r0 - add r0, r5, #4 - bl GetPageStart - sub r0, r7, r0 - add r1, r0, #1 - add r0, r5, #4 - bl GetPageItemYOffset - ldr r2, [r5, #4] - mov r1, #6 - str r1, [r5, #0xdc] - sub r1, r1, #7 - str r1, [r5, #0xe0] - mov r1, #0 - str r1, [r5, #0xe4] - ldr r1, [r5, #0xc] - add r0, r2, r0 - sub r1, r8, r1 - str r1, [r5, #0xf0] - ldr r1, [r5, #0xc] - sub r0, r0, #2 - sub r1, sb, r1 - str r1, [r5, #0xf4] - ldr r1, [r5, #4] - sub r1, sl, r1 - str r1, [r5, #0xe8] - ldr r1, [r5, #4] - sub r0, r0, r1 - str r0, [r5, #0xec] - b _0202CA60 -_0202CA54: - add r0, r5, #4 - mov r1, #3 - bl PlayWindowInputSound -_0202CA60: - mov r1, r7 - add r0, r5, #4 - bl sub_02032684 - mov r8, #1 -_0202CA70: - ldr r0, [sp, #8] - cmp r0, #0 - bne _0202CA90 - add r1, sp, #8 - add r2, sp, #0xc - add r0, r5, #4 - bl sub_02033758 - orr r8, r8, r0 -_0202CA90: - add r0, r5, #4 - bl GetSelectedMenuItemIdx - mov r2, r0 - ldr r1, [sp, #8] - add r0, r5, #4 - mov r3, #0 - bl sub_020323F8 - orrs r0, r8, r0 - ldreqb r0, [r5, #0x1c4] - cmpeq r0, #0 - beq _0202CACC - mov r1, #0 - mov r0, r4 - strb r1, [r5, #0x1c4] - bl sub_0202CEA0 -_0202CACC: - ldr r0, [sp, #8] - tst r0, #1 - beq _0202CB44 - cmp r6, #0 - add r0, r5, #4 - beq _0202CAEC - bl sub_020324C4 - b _0202CAF0 -_0202CAEC: - bl IsMenuOptionActive -_0202CAF0: - cmp r0, #0 - beq _0202CB34 - ldr r0, [r5, #0xfc] - tst r0, #0x80000000 - bne _0202CB10 - add r0, r5, #4 - mov r1, #0 - bl PlayWindowInputSound -_0202CB10: - mov r1, #1 - mov r0, #0 - strb r1, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - sub r0, r0, #4 - str r0, [r4, #0xb8] - mov r0, #4 - str r0, [r5, #0x1ac] - b _0202CC94 -_0202CB34: - add r0, r5, #4 - mov r1, #2 - bl PlayWindowInputSound - b _0202CC94 -_0202CB44: - tst r0, #2 - beq _0202CB94 - add r0, r5, #4 - mov r1, #1 - bl PlayWindowInputSound - ldr r1, [r5, #0x1a0] - cmp r1, #0 - beq _0202CB74 - ldrsb r0, [r4, #0x10] - blx r1 - cmp r0, #0 - bne _0202CE40 -_0202CB74: - mov r0, #1 - strb r0, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - sub r0, r0, #6 - str r0, [r4, #0xb8] - mov r0, #4 - str r0, [r5, #0x1ac] - b _0202CC94 -_0202CB94: - tst r0, #0x1000 - beq _0202CBE8 - ldr r1, [r5, #0xfc] - tst r1, #0x2000 - beq _0202CBE8 - ldr r0, [r5, #0x174] - cmp r0, #0 - beq _0202CBC0 - add r0, r5, #4 - mov r1, #5 - bl PlayWindowInputSound -_0202CBC0: - mov r1, #1 - mov r0, #0 - strb r1, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - strb r1, [r5, #0x1c7] - sub r0, r0, #4 - str r0, [r4, #0xb8] - mov r0, #8 - str r0, [r5, #0x1ac] - b _0202CC94 -_0202CBE8: - tst r0, #0x2000 - beq _0202CC30 - ldr r1, [r5, #0xfc] - tst r1, #0x4000 - beq _0202CC30 - add r0, r5, #4 - mov r1, #0 - bl PlayWindowInputSound - mov r1, #1 - mov r0, #0 - strb r1, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - strb r1, [r5, #0x1c7] - sub r0, r0, #4 - str r0, [r4, #0xb8] - mov r0, #9 - str r0, [r5, #0x1ac] - b _0202CC94 -_0202CC30: - tst r0, #0x200 - ldrne r1, [r5, #0x18c] - cmpne r1, #0 - beq _0202CC74 - add r0, r5, #4 - mov r1, #5 - bl PlayWindowInputSound - mov r1, #1 - mov r0, #0 - strb r1, [r5, #0x1b0] - strb r0, [r5, #0x1b1] - strb r1, [r5, #0x1c7] - sub r0, r0, #4 - str r0, [r4, #0xb8] - mov r0, #0xa - str r0, [r5, #0x1ac] - b _0202CC94 -_0202CC74: - ldr r1, [r5, #0x19c] - cmp r1, #0 - beq _0202CC94 - blx r1 - cmp r0, #0 - beq _0202CC94 - mov r0, r4 - bl sub_0202CEA0 -_0202CC94: - ldrsb r0, [r4, #0x10] - add r1, r5, #4 - bl sub_02028948 - b _0202CE40 -_0202CCA4: - add r0, r5, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202CE40 - ldrb r0, [r5, #0x1c7] - cmp r0, #0 - movne r0, #0 - strneb r0, [r5, #0x1c7] - movne r0, #1 - strneb r0, [r5, #0x1c6] - ldr r0, [r5, #0x174] - cmp r0, #0 - beq _0202CD04 - ldrb r0, [r5, #0x1c6] - cmp r0, #0 - beq _0202CCEC - mov r0, r4 - bl sub_0202CEA0 -_0202CCEC: - mov r0, #0 - ldr r3, [r5, #0x174] - mov r1, r0 - mov r2, r0 - blx r3 - b _0202CE40 -_0202CD04: - mov r0, #1 - strb r0, [r5, #0x1c5] - str r0, [r5, #0x1ac] - b _0202CE40 -_0202CD14: - add r0, r5, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202CE40 - ldrb r0, [r5, #0x1c7] - cmp r0, #0 - movne r0, #0 - strneb r0, [r5, #0x1c7] - movne r0, #1 - strneb r0, [r5, #0x1c6] - ldr r0, [r5, #0x17c] - cmp r0, #0 - beq _0202CE40 - ldrb r0, [r5, #0x1c6] - cmp r0, #0 - beq _0202CD5C - mov r0, r4 - bl sub_0202CEA0 -_0202CD5C: - mov r0, #0 - ldr r3, [r5, #0x17c] - mov r1, r0 - mov r2, r0 - blx r3 - b _0202CE40 -_0202CD74: - add r0, r5, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202CE40 - ldrb r0, [r5, #0x1c7] - cmp r0, #0 - movne r0, #0 - strneb r0, [r5, #0x1c7] - movne r0, #1 - strneb r0, [r5, #0x1c6] - ldr r0, [r5, #0x18c] - cmp r0, #0 - beq _0202CE40 - ldrb r0, [r5, #0x1c6] - cmp r0, #0 - beq _0202CDBC - mov r0, r4 - bl sub_0202CEA0 -_0202CDBC: - ldr r0, [r5, #0x18c] - blx r0 - b _0202CE40 -_0202CDC8: - add r0, r5, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202CE40 - ldrb r0, [r5, #0x1b1] - cmp r0, #0 - bne _0202CE04 - ldr r0, [r5, #0xfc] - tst r0, #0x400000 - beq _0202CE04 - mov r0, r4 - bl sub_0202CEA0 - mov r0, #7 - str r0, [r5, #0x1ac] - b _0202CE40 -_0202CE04: - mov r0, #5 - str r0, [r5, #0x1ac] -_0202CE0C: - ldrsb r0, [r4, #0x10] - bl sub_0202812C - cmp r0, #0 - beq _0202CE40 - ldrb r0, [r5, #0x1b1] - cmp r0, #0 - mvnne r0, #4 - mvneq r0, #3 - str r0, [r4, #0xb8] - mov r0, #6 - str r0, [r5, #0x1ac] - mov r0, #1 - strb r0, [r5, #0x1c6] -_0202CE40: - mov r0, #0 - strb r0, [r5, #0x1c6] - cmp fp, #0 - beq _0202CE6C - ldr r0, [r5, #0x1ac] - cmp r0, #1 - bne _0202CE6C - mov r0, r4 - bl sub_0202CEA0 - mov r0, #1 - strb r0, [r5, #0x1c6] -_0202CE6C: - ldr r0, [r5, #0x1a8] - cmp r0, #0 - ldrne r0, [r5, #0x1ac] - cmpne r0, #8 - cmpne r0, #9 - beq _0202CE94 - add r0, r5, #4 - bl GetSelectedMenuItemIdx - ldr r1, [r5, #0x1a8] - blx r1 -_0202CE94: - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202CE9C: .word 0x00000408 - arm_func_end UpdateCollectionMenu - - arm_func_start sub_0202CEA0 -sub_0202CEA0: ; 0x0202CEA0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x410 - mov r5, r0 - ldr r6, [r5, #0xc] - add r0, r6, #4 - bl GetPageStart - mov r7, r0 - add r0, r6, #4 - bl GetNumItemsOnPage - ldr r1, [r6, #0xfc] - mov r8, r0 - tst r1, #0x200 - ldrne r0, [r6, #0x160] - addne r4, r0, r7 - ldrsb r0, [r5, #0x10] - moveq r4, #0 - bl sub_02027B1C - mov sb, #0 - mov fp, #0x42 - b _0202D020 -_0202CEF0: - ldr r3, [r6, #0x198] - add r0, sp, #0x10 - mov r1, r7 - add r2, sp, #0xc - blx r3 - mov sl, r0 - cmp r4, #0 - mov r1, #0 - beq _0202CF24 - ldrb r0, [r4] - add r4, r4, #1 - tst r0, #2 - movne r1, #1 -_0202CF24: - cmp sl, #0 - beq _0202CFF4 - cmp r1, #0 - add r0, r6, #4 - mov r1, sb - beq _0202CF6C - bl GetPageItemYOffset - str fp, [sp] - mov r2, r0 - ldr r0, [r6, #0x1b4] - mov r3, sl - str r0, [sp, #4] - ldr r0, [r6, #0x1b8] - str r0, [sp, #8] - ldrsb r0, [r5, #0x10] - ldr r1, [r6, #0x1bc] - bl sub_02026428 - b _0202CF94 -_0202CF6C: - bl GetPageItemYOffset - mov r2, r0 - ldr r0, [r6, #0x1b4] - mov r3, sl - str r0, [sp] - ldr r0, [r6, #0x1b8] - str r0, [sp, #4] - ldrsb r0, [r5, #0x10] - ldr r1, [r6, #0x1bc] - bl sub_02026358 -_0202CF94: - ldr r0, [sp, #0xc] - cmp r0, #0 - ble _0202D018 - ldr r1, [r6, #0x104] - mov sl, #0xc - cmp r1, #0 - ble _0202CFBC - ldr r0, [r6, #0xfc] - tst r0, #0x400 - subne sl, r1, #2 -_0202CFBC: - add r0, r6, #4 - mov r1, sb - bl GetPageItemYOffset - str sl, [sp] - mov r1, #0x24 - str r1, [sp, #4] - mov r2, r0 - ldr sl, [r6, #0x1bc] - ldr r3, [r6, #0x1c0] - ldrsb r0, [r5, #0x10] - sub r1, sl, #4 - sub r3, r3, sl - bl sub_02025D90 - b _0202D018 -_0202CFF4: - ldrb r0, [r6, #0x1c8] - cmp r0, #0 - beq _0202D018 - str sb, [r6, #0xc4] - ldr r0, [r6, #0xc0] - cmp r0, sb - subge r0, sb, #1 - strge r0, [r6, #0xc0] - b _0202D028 -_0202D018: - add sb, sb, #1 - add r7, r7, #1 -_0202D020: - cmp sb, r8 - blt _0202CEF0 -_0202D028: - ldr r4, [r6, #0x1a4] - cmp r4, #0 - beq _0202D04C - ldrsb r0, [r5, #0x10] - mov r3, sb - add r1, r6, #4 - sub r2, r7, sb - blx r4 - b _0202D058 -_0202D04C: - ldrsb r1, [r5, #0x10] - add r0, r6, #4 - bl sub_0202A03C -_0202D058: - ldrsb r0, [r5, #0x10] - bl UpdateWindow - add sp, sp, #0x410 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_0202CEA0 - - arm_func_start sub_0202D068 -sub_0202D068: ; 0x0202D068 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - str r4, [r0, #0x18c] - ldmia sp!, {r4, pc} - arm_func_end sub_0202D068 - - arm_func_start sub_0202D07C -sub_0202D07C: ; 0x0202D07C - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - ldr r1, [r0, #0xfc] - ands r2, r1, #0x10000000 - cmpne r4, #0 - beq _0202D0B0 - eor r1, r1, #0x10000000 - str r1, [r0, #0xfc] - add r0, r0, #4 - mov r1, #0x10000000 - bl sub_02031C84 - ldmia sp!, {r4, pc} -_0202D0B0: - cmp r2, #0 - cmpeq r4, #0 - ldmneia sp!, {r4, pc} - ldr r2, [r0, #0xfc] - mov r1, #0x10000000 - orr r2, r2, #0x10000000 - str r2, [r0, #0xfc] - add r0, r0, #4 - bl sub_02031C74 - ldmia sp!, {r4, pc} - arm_func_end sub_0202D07C - - arm_func_start SetCollectionMenuField0x1B2 -SetCollectionMenuField0x1B2: ; 0x0202D0D8 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - strb r4, [r0, #0x1b2] - ldmia sp!, {r4, pc} - arm_func_end SetCollectionMenuField0x1B2 - - arm_func_start sub_0202D0EC -sub_0202D0EC: ; 0x0202D0EC - stmdb sp!, {r3, r4, r5, lr} - bl GetWindowContents - mov r5, r0 - add r0, r5, #4 - bl GetSelectedItemOnPage - mov r4, r0 - add r0, r5, #4 - bl GetPageStart - add r0, r4, r0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0202D0EC - - arm_func_start IsCollectionMenuState3 -IsCollectionMenuState3: ; 0x0202D114 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r0, [r0, #0x1ac] - cmp r0, #3 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end IsCollectionMenuState3 - - arm_func_start sub_0202D134 -sub_0202D134: ; 0x0202D134 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetWindowContents - mov r4, r0 - mov r0, #1 - mov r2, #0 - strb r0, [r4, #0x1b0] - mov r0, r5 - sub r1, r2, #4 - strb r2, [r4, #0x1b1] - bl sub_0202830C - mov r0, #4 - str r0, [r4, #0x1ac] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0202D134 - - arm_func_start sub_0202D16C -sub_0202D16C: ; 0x0202D16C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - bl GetWindowContents - mov r4, r0 - cmp r5, #0 - ldr r0, [r4, #0xfc] - beq _0202D1BC - tst r0, #0x10000000 - ldmeqia sp!, {r3, r4, r5, pc} - bic r2, r0, #0x10000000 - add r0, r4, #4 - mov r1, #0x8000000 - str r2, [r4, #0xfc] - bl sub_02031C84 - add r0, r4, #4 - mov r1, #0x10000000 - bl sub_02031C84 - mov r0, #1 - strb r0, [r4, #0x1c4] - ldmia sp!, {r3, r4, r5, pc} -_0202D1BC: - tst r0, #0x10000000 - ldmneia sp!, {r3, r4, r5, pc} - orr r2, r0, #0x10000000 - add r0, r4, #4 - mov r1, #0x8000000 - str r2, [r4, #0xfc] - bl sub_02031C74 - add r0, r4, #4 - mov r1, #0x10000000 - bl sub_02031C74 - mov r0, #1 - strb r0, [r4, #0x1c4] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0202D16C - - arm_func_start CreateOptionsMenu -CreateOptionsMenu: ; 0x0202D1F0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x12c - mov r5, r1 - orr r5, r5, #4 - mov r1, #0 - str r1, [sp, #8] - tst r5, #0x8000 - mov sl, r3 - mov r4, r2 - mov r6, r0 - ldr r8, [sp, #0x154] - orrne r5, r5, #0x20000 - mov r2, sl - ldr r1, [sp, #8] - b _0202D238 -_0202D22C: - add r1, r1, #1 - str r1, [sp, #8] - add r2, r2, #0xc -_0202D238: - ldrh r0, [r2] - cmp r0, #0 - bne _0202D22C - ldr r1, [sp, #8] - mov r0, #0x10c - add r1, r1, #1 - mul r0, r1, r0 - mov r1, #8 - bl MemAlloc - mov fp, r0 - mov r7, fp - and sb, r5, #0x20 - b _0202D300 -_0202D26C: - mov r0, r7 - bl GetStringFromFileVeneer - ldr r0, [sl, #8] - str r0, [r7, #0x100] - ldr r0, [sl, #8] - cmp r0, #0 - beq _0202D2C4 - ldr r1, [r7, #0x100] - mov r2, #0 - b _0202D298 -_0202D294: - add r2, r2, #1 -_0202D298: - ldrh r0, [r1], #2 - cmp r0, #0 - bne _0202D294 - ldr r0, [sl, #4] - cmp r0, #0 - streq r2, [r7, #0x104] - beq _0202D2CC - cmp r0, r2 - movle r2, r0 - str r2, [r7, #0x104] - b _0202D2CC -_0202D2C4: - ldr r0, [sl, #4] - str r0, [r7, #0x104] -_0202D2CC: - cmp sb, #0 - beq _0202D2EC - ldr r1, [r8] - ldr r0, [r7, #0x104] - cmp r1, r0 - movge r1, #0 - str r1, [r7, #0x108] - b _0202D2F4 -_0202D2EC: - mov r0, #0 - str r0, [r7, #0x108] -_0202D2F4: - add sl, sl, #0xc - add r7, r7, #0x10c - add r8, r8, #4 -_0202D300: - ldrh r1, [sl] - cmp r1, #0 - bne _0202D26C - mov r2, #0 - strb r2, [r7] - str r2, [r7, #0x100] - str r2, [r7, #0x104] - mov r0, #0x1b8 - mov r1, #8 - str r2, [r7, #0x108] - bl MemAlloc - cmp r6, #0 - mov r7, r0 - addne sb, sp, #0x1c - ldmneia r6, {r0, r1, r2, r3} - stmneia sb, {r0, r1, r2, r3} - ldrne r0, _0202D528 ; =UpdateOptionsMenu - mov r8, fp - strne r0, [sp, #0x1c] - bne _0202D364 - ldr r0, _0202D52C ; =OPTIONS_MENU_DEFAULT_WINDOW_PARAMS - add r6, sp, #0x1c - ldmia r0, {r0, r1, r2, r3} - stmia r6, {r0, r1, r2, r3} - orr r5, r5, #0x300000 -_0202D364: - mov r6, #0 - mov sb, r6 - str r7, [sp, #0x28] - b _0202D3CC -_0202D374: - mov r0, r8 - bl sub_020265A8 - cmp r0, r6 - ldr sl, [r8, #0x100] - movgt r6, r0 - cmp sl, #0 - beq _0202D3C0 - b _0202D3B0 -_0202D394: - ldrh r1, [sl], #2 - add r0, sp, #0x2c - bl GetStringFromFileVeneer - add r0, sp, #0x2c - bl sub_020265A8 - cmp r0, sb - movgt sb, r0 -_0202D3B0: - ldrh r0, [sl] - cmp r0, #0 - bne _0202D394 - b _0202D3C8 -_0202D3C0: - cmp sb, #0x30 - movlt sb, #0x30 -_0202D3C8: - add r8, r8, #0x10c -_0202D3CC: - mov r0, r8 - bl IsEmptyString - cmp r0, #0 - beq _0202D374 - ldrb r0, [sp, #0x22] - cmp r0, #0 - bne _0202D400 - add r2, r6, sb - mov r0, r5 - mov r1, r4 - add r2, r2, #0x34 - bl sub_02031A5C - strb r0, [sp, #0x22] -_0202D400: - str r6, [r7, #0x1a8] - add r0, sb, #4 - str r0, [r7, #0x1ac] - ldr r0, [r7, #0x1a8] - add r2, sp, #8 - add r1, r0, #0x15 - str r1, [r7, #0x1b0] - ldr r0, [r7, #0x1ac] - add r3, sp, #0x150 - add r0, r1, r0 - add r0, r0, #0xe - str r0, [r7, #0x1b4] - ldr r0, [sp, #0x150] - cmp r0, #0 - ldreq r0, [sp, #8] - streq r0, [sp, #0x150] - ldrb r0, [sp, #0x23] - cmp r0, #0 - mov r0, r5 - bne _0202D460 - mov r1, r4 - bl CalcMenuHeightDiv8__02031AA4 - strb r0, [sp, #0x23] - b _0202D468 -_0202D460: - mov r1, r4 - bl CalcMenuHeightDiv8__02031AA4 -_0202D468: - tst r5, #0x200000 - ldrneb r1, [sp, #0x20] - ldrneb r0, [sp, #0x22] - subne r0, r1, r0 - strneb r0, [sp, #0x20] - tst r5, #0x100000 - ldrneb r1, [sp, #0x21] - ldrneb r0, [sp, #0x23] - subne r0, r1, r0 - strneb r0, [sp, #0x21] - ldr r0, _0202D528 ; =UpdateOptionsMenu - cmp r4, #0 - str r0, [r7] - str r5, [r7, #0xfc] - beq _0202D4C4 - add r8, r7, #0x100 - mov r6, #9 -_0202D4AC: - ldmia r4!, {r0, r1, r2, r3} - stmia r8!, {r0, r1, r2, r3} - subs r6, r6, #1 - bne _0202D4AC - ldmia r4, {r0, r1} - stmia r8, {r0, r1} -_0202D4C4: - ldr r0, [sp, #0x154] - str fp, [r7, #0x198] - str r0, [r7, #0x19c] - mov r2, #0 - str r2, [r7, #0x1a0] - strb r2, [r7, #0x1a4] - add r0, sp, #0x1c - mov r1, #3 - strb r2, [r7, #0x1a5] - bl NewWindowScreenCheck - add r1, sp, #0xc - mov r6, r0 - bl GetWindowRectangle - ldr r0, [sp, #8] - add r3, sp, #0xc - str r0, [sp] - ldr r4, [sp, #0x150] - mov r1, r5 - add r0, r7, #4 - add r2, r7, #0x100 - str r4, [sp, #4] - bl InitWindowInput - mov r0, r6 - add sp, sp, #0x12c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202D528: .word UpdateOptionsMenu -_0202D52C: .word OPTIONS_MENU_DEFAULT_WINDOW_PARAMS - arm_func_end CreateOptionsMenu - - arm_func_start CloseOptionsMenu -CloseOptionsMenu: ; 0x0202D530 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetWindowContents - mov r4, r0 - ldr r0, [r4, #0x198] - bl MemFree - mov r0, r4 - bl MemFree - mov r0, r5 - bl DeleteWindow - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CloseOptionsMenu - - arm_func_start IsOptionsMenuActive -IsOptionsMenuActive: ; 0x0202D55C - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r0, [r0, #0x1a0] - cmp r0, #6 - cmpne r0, #7 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsOptionsMenuActive - - arm_func_start CheckOptionsMenuField0x1A4 -CheckOptionsMenuField0x1A4: ; 0x0202D57C - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r0, [r0, #0x1a4] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end CheckOptionsMenuField0x1A4 - - arm_func_start sub_0202D59C -sub_0202D59C: ; 0x0202D59C - stmdb sp!, {r3, lr} - bl GetWindowContents - add r0, r0, #4 - bl GetSelectedItemOnPage - ldmia sp!, {r3, pc} - arm_func_end sub_0202D59C - - arm_func_start GetOptionsMenuStates -GetOptionsMenuStates: ; 0x0202D5B0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - bl GetWindowContents - ldr r4, [r0, #0x198] - b _0202D5D0 -_0202D5C4: - ldr r0, [r4, #0x108] - add r4, r4, #0x10c - str r0, [r5], #4 -_0202D5D0: - mov r0, r4 - bl IsEmptyString - cmp r0, #0 - beq _0202D5C4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end GetOptionsMenuStates - - arm_func_start GetOptionsMenuResult -GetOptionsMenuResult: ; 0x0202D5E4 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r1, [r0, #0x1a4] - cmp r1, #0 - beq _0202D610 - ldrb r0, [r0, #0x1a5] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} -_0202D610: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end GetOptionsMenuResult - - arm_func_start UpdateOptionsMenu -UpdateOptionsMenu: ; 0x0202D618 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x30 - mov r7, r0 - ldr r4, [r7, #0xc] - ldr r0, [r4, #0x1a0] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0202DA5C -_0202D638: ; jump table - b _0202D650 ; case 0 - b _0202D668 ; case 1 - b _0202D690 ; case 2 - b _0202D6E8 ; case 3 - b _0202D9EC ; case 4 - b _0202DA30 ; case 5 -_0202D650: - ldrsb r0, [r7, #0x10] - bl sub_0202810C - cmp r0, #0 - beq _0202DA5C - mov r0, #2 - str r0, [r4, #0x1a0] -_0202D668: - ldr r0, [r4, #0x1a0] - cmp r0, #1 - bne _0202D690 - ldrb r0, [r7, #8] - bl sub_020287C4 - ldrsb r0, [r7, #0x10] - bl UpdateWindow - mov r0, #2 - str r0, [r4, #0x1a0] - b _0202DA5C -_0202D690: - mov r0, r7 - bl sub_0202DA64 - ldr r0, [r4, #0xfc] - tst r0, #0x800000 - beq _0202D6C8 - mov r0, #7 - str r0, [r4, #0x1a0] - mov r1, #1 - mov r0, #0 - strb r1, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #4 - str r0, [r7, #0xb8] - b _0202DA5C -_0202D6C8: - mov r1, #3 - mov r0, #0 - str r1, [r4, #0x1a0] - strb r0, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #1 - str r0, [r7, #0xb8] - b _0202DA5C -_0202D6E8: - add r1, sp, #8 - add r2, sp, #0xc - add r0, r4, #4 - mov r3, #1 - bl sub_02031C98 - ldr r1, [sp, #8] - mov r5, r0 - cmp r1, #0 - bne _0202D760 - ldr r3, [r4, #0x1b0] - add r1, sp, #0xc - add r0, r3, #0xe - str r0, [sp] - mov r6, #0 - add r0, r4, #4 - mov r2, #2 - str r6, [sp, #4] - bl sub_02032160 - movs r6, r0 - bmi _0202D760 - mov r1, r6 - add r0, r4, #4 - bl sub_02032684 - ldr r0, [sp, #8] - mov r1, r6 - orr r2, r0, #0x40 - add r0, r4, #4 - str r2, [sp, #8] - bl sub_020320A8 - mov r5, #1 -_0202D760: - ldr r0, [sp, #8] - cmp r0, #0 - bne _0202D7C0 - ldr r3, [r4, #0x1b4] - add r1, sp, #0xc - add r0, r3, #0xe - str r0, [sp] - mov r6, #0 - add r0, r4, #4 - mov r2, #2 - str r6, [sp, #4] - bl sub_02032160 - movs r6, r0 - bmi _0202D7C0 - mov r1, r6 - add r0, r4, #4 - bl sub_02032684 - ldr r1, [sp, #8] - add r0, r4, #4 - orr r2, r1, #0x80 - add r1, r6, #0x3e8 - str r2, [sp, #8] - bl sub_020320A8 - mov r5, #1 -_0202D7C0: - ldr r0, [sp, #8] - cmp r0, #0 - bne _0202D7E0 - add r1, sp, #8 - add r2, sp, #0xc - add r0, r4, #4 - bl sub_02033758 - orr r5, r5, r0 -_0202D7E0: - add r0, r4, #4 - bl GetSelectedMenuItemIdx - ldr r2, [r4, #0xfc] - ldr r3, [r4, #0x198] - mov r1, #0x10c - mla r6, r0, r1, r3 - tst r2, #0x200 - ldrne r1, [r4, #0x160] - ldrneb r0, [r1, r0] - moveq r0, #0 - and r0, r0, #0xff - tst r0, #1 - bne _0202D8E8 - ldr r0, [sp, #8] - tst r0, #0x40 - beq _0202D878 - ldr r0, [r6, #0x108] - cmp r0, #0 - add r0, r4, #4 - ble _0202D86C - mov r1, #3 - bl PlayWindowInputSound - ldr r0, [sp, #8] - tst r0, #8 - ldr r0, [r6, #0x108] - beq _0202D85C - subs r0, r0, #0xa - str r0, [r6, #0x108] - movmi r0, #0 - strmi r0, [r6, #0x108] - b _0202D864 -_0202D85C: - sub r0, r0, #1 - str r0, [r6, #0x108] -_0202D864: - mov r5, #1 - b _0202D900 -_0202D86C: - mov r1, #2 - bl PlayWindowInputSound - b _0202D900 -_0202D878: - tst r0, #0x80 - beq _0202D900 - ldr r0, [r6, #0x104] - ldr r1, [r6, #0x108] - sub r0, r0, #1 - cmp r1, r0 - add r0, r4, #4 - bge _0202D8DC - mov r1, #3 - bl PlayWindowInputSound - ldr r0, [sp, #8] - tst r0, #8 - ldr r0, [r6, #0x108] - beq _0202D8CC - add r1, r0, #0xa - str r1, [r6, #0x108] - ldr r0, [r6, #0x104] - sub r0, r0, #1 - cmp r1, r0 - strgt r0, [r6, #0x108] - b _0202D8D4 -_0202D8CC: - add r0, r0, #1 - str r0, [r6, #0x108] -_0202D8D4: - mov r5, #1 - b _0202D900 -_0202D8DC: - mov r1, #2 - bl PlayWindowInputSound - b _0202D900 -_0202D8E8: - ldr r0, [sp, #8] - tst r0, #0xc0 - beq _0202D900 - add r0, r4, #4 - mov r1, #2 - bl PlayWindowInputSound -_0202D900: - cmp r5, #0 - beq _0202D910 - mov r0, r7 - bl sub_0202DA64 -_0202D910: - add r0, r4, #4 - bl GetSelectedMenuItemIdx - mov r2, r0 - ldr r1, [r4, #0x198] - mov r0, #0x10c - mla r0, r2, r0, r1 - ldr r1, [sp, #8] - ldr r3, [r0, #0x108] - add r0, r4, #4 - bl sub_020323F8 - ldr r0, [sp, #8] - tst r0, #1 - beq _0202D9AC - add r0, r4, #4 - bl IsMenuOptionActive - cmp r0, #0 - beq _0202D9DC - ldr r5, [r4, #0x198] - ldr r6, [r4, #0x19c] - b _0202D96C -_0202D960: - ldr r0, [r5, #0x108] - add r5, r5, #0x10c - str r0, [r6], #4 -_0202D96C: - mov r0, r5 - bl IsEmptyString - cmp r0, #0 - beq _0202D960 - add r0, r4, #4 - mov r1, #0 - bl PlayWindowInputSound - mov r1, #1 - mov r0, #0 - strb r1, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #4 - str r0, [r7, #0xb8] - mov r0, #4 - str r0, [r4, #0x1a0] - b _0202D9DC -_0202D9AC: - tst r0, #2 - beq _0202D9DC - add r0, r4, #4 - mov r1, #1 - bl PlayWindowInputSound - mov r0, #1 - strb r0, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #6 - str r0, [r7, #0xb8] - mov r0, #4 - str r0, [r4, #0x1a0] -_0202D9DC: - ldrsb r0, [r7, #0x10] - add r1, r4, #4 - bl sub_02028948 - b _0202DA5C -_0202D9EC: - add r0, r4, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202DA5C - ldrb r0, [r4, #0x1a5] - cmp r0, #0 - bne _0202DA28 - ldr r0, [r4, #0xfc] - tst r0, #0x400000 - beq _0202DA28 - mov r0, r7 - bl sub_0202DA64 - mov r0, #7 - str r0, [r4, #0x1a0] - b _0202DA5C -_0202DA28: - mov r0, #5 - str r0, [r4, #0x1a0] -_0202DA30: - ldrsb r0, [r7, #0x10] - bl sub_0202812C - cmp r0, #0 - beq _0202DA5C - ldrb r0, [r4, #0x1a5] - cmp r0, #0 - mvnne r0, #4 - mvneq r0, #3 - str r0, [r7, #0xb8] - mov r0, #6 - str r0, [r4, #0x1a0] -_0202DA5C: - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end UpdateOptionsMenu - - arm_func_start sub_0202DA64 -sub_0202DA64: ; 0x0202DA64 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x160 - mov sl, r0 - ldr r4, [sl, #0xc] - add r0, r4, #4 - bl GetPageStart - mov r5, r0 - add r0, r4, #4 - bl GetNumItemsOnPage - ldr r2, [r4, #0xfc] - str r0, [sp, #0xc] - tst r2, #0x200 - ldrne r0, [r4, #0x160] - ldr r3, [r4, #0x198] - addne sb, r0, r5 - mov r1, #0x10c - add r0, r4, #4 - mla r6, r5, r1, r3 - moveq sb, #0 - bl sub_020320C0 - mov fp, r0 - ldrsb r0, [sl, #0x10] - bl sub_02027B1C - ldr r0, [sp, #0xc] - mov r7, #0 - cmp r0, #0 - ble _0202DC1C - b _0202DC10 -_0202DAD4: - add r0, r4, #4 - mov r1, r7 - bl GetPageItemYOffset - mov r8, r0 - mov r0, #1 - cmp sb, #0 - mov r1, #0 - str r0, [sp, #8] - beq _0202DB14 - ldrb r0, [sb] - add sb, sb, #1 - tst r0, #2 - movne r1, #1 - tst r0, #1 - movne r0, #0 - strne r0, [sp, #8] -_0202DB14: - cmp r1, #0 - movne r0, #0x42 - moveq r0, #0x44 - and r0, r0, #0xff - str r0, [sp, #4] - str r0, [sp] - ldrsb r0, [sl, #0x10] - mov r1, #0xd - mov r2, r8 - mov r3, r6 - bl sub_020263C8 - ldr r2, [r6, #0x100] - add r0, sp, #0x60 - cmp r2, #0 - ldr r1, [r6, #0x108] - beq _0202DB64 - mov r1, r1, lsl #1 - ldrh r1, [r2, r1] - bl GetStringFromFileVeneer - b _0202DB80 -_0202DB64: - str r1, [sp, #0x34] - add r1, sp, #0x10 - str r1, [sp] - ldr r2, _0202DC38 ; =_0209AEE0 - ldr r3, _0202DC3C ; =0x0000C402 - mov r1, #0x100 - bl PreprocessString -_0202DB80: - add r0, sp, #0x60 - bl sub_020265A8 - ldr r1, [sp, #4] - mov ip, r0 - str r1, [sp] - ldr r3, [r4, #0x1ac] - ldr r1, [r4, #0x1b0] - sub r3, r3, ip - add r3, r3, r3, lsr #31 - add r1, r1, r3, asr #1 - ldrsb r0, [sl, #0x10] - mov r2, r8 - add r1, r1, #0xe - add r3, sp, #0x60 - bl sub_020263C8 - ldr r0, [sp, #8] - cmp r0, #0 - beq _0202DC04 - cmp r5, fp - ldreq r3, _0202DC40 ; =_0209AEEC - ldrsb r0, [sl, #0x10] - ldrne r3, _0202DC44 ; =_0209AEF4 - ldr r1, [r4, #0x1b0] - mov r2, r8 - bl DrawTextInWindow - add r0, r5, #0x3e8 - cmp r0, fp - ldreq r3, _0202DC48 ; =_0209AEFC - ldrsb r0, [sl, #0x10] - ldrne r3, _0202DC4C ; =_0209AF04 - ldr r1, [r4, #0x1b4] - mov r2, r8 - bl DrawTextInWindow -_0202DC04: - add r7, r7, #1 - add r5, r5, #1 - add r6, r6, #0x10c -_0202DC10: - ldr r0, [sp, #0xc] - cmp r7, r0 - blt _0202DAD4 -_0202DC1C: - ldrsb r1, [sl, #0x10] - add r0, r4, #4 - bl sub_0202A03C - ldrsb r0, [sl, #0x10] - bl UpdateWindow - add sp, sp, #0x160 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202DC38: .word _0209AEE0 -_0202DC3C: .word 0x0000C402 -_0202DC40: .word _0209AEEC -_0202DC44: .word _0209AEF4 -_0202DC48: .word _0209AEFC -_0202DC4C: .word _0209AF04 - arm_func_end sub_0202DA64 - - arm_func_start CreateDebugMenu -CreateDebugMenu: ; 0x0202DC50 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - mov r7, r3 - mov r5, r1 - mov sl, r2 - mov r8, r0 - mov r1, r7 - mov r2, #0 - b _0202DC7C -_0202DC74: - add r1, r1, #2 - add r2, r2, #1 -_0202DC7C: - ldrh r0, [r1] - cmp r0, #0 - bne _0202DC74 - add r0, r2, #1 - add r0, r0, r0, lsl #8 - mov r1, #8 - bl MemAlloc - mov r4, r0 - mov r6, r4 - b _0202DCB8 -_0202DCA4: - mov r0, r6 - bl GetStringFromFileVeneer - add r0, r6, #1 - add r7, r7, #2 - add r6, r0, #0x100 -_0202DCB8: - ldrh r1, [r7] - cmp r1, #0 - bne _0202DCA4 - mov r0, #0 - strb r0, [r6] - ldr r2, [sp, #0x58] - mov r0, #0x3b4 - mov r1, #8 - str r2, [sp, #0xc] - bl MemAlloc - mov r1, #0 - cmp r8, #0 - addne fp, sp, #0x10 - mov r7, r0 - str r1, [sp, #8] - ldmneia r8, {r0, r1, r2, r3} - stmneia fp, {r0, r1, r2, r3} - ldrne r0, _0202DEE8 ; =UpdateDebugMenu - mov sb, r4 - orr r5, r5, #4 - ldr r6, [sp, #0x5c] - strne r0, [sp, #0x10] - bne _0202DD28 - ldr r0, _0202DEEC ; =DEBUG_MENU_DEFAULT_WINDOW_PARAMS - add r8, sp, #0x10 - ldmia r0, {r0, r1, r2, r3} - stmia r8, {r0, r1, r2, r3} - orr r5, r5, #0x300000 -_0202DD28: - str r7, [sp, #0x1c] - mov r8, #0 - b _0202DD4C -_0202DD34: - mov r0, sb - bl sub_020265A8 - cmp r0, r8 - movgt r8, r0 - add r0, sb, #1 - add sb, r0, #0x100 -_0202DD4C: - mov r0, sb - bl IsEmptyString - cmp r0, #0 - beq _0202DD34 - ldrb r0, [sp, #0x16] - cmp r0, #0 - bne _0202DD7C - mov r0, r5 - mov r1, sl - add r2, r8, #0x40 - bl sub_02031A5C - strb r0, [sp, #0x16] -_0202DD7C: - str r8, [r7, #0x1a8] - mov sb, r4 - and r8, r5, #0x20 - mov fp, #0 - b _0202DDB8 -_0202DD90: - cmp r8, #0 - ldrneb r0, [r6] - add r6, r6, #1 - strneb r0, [sb, #0x100] - streqb fp, [sb, #0x100] - ldr r1, [sp, #8] - add r0, sb, #1 - add r1, r1, #1 - str r1, [sp, #8] - add sb, r0, #0x100 -_0202DDB8: - mov r0, sb - bl IsEmptyString - cmp r0, #0 - beq _0202DD90 - ldrb r0, [sp, #0x17] - add r2, sp, #8 - add r3, sp, #0xc - cmp r0, #0 - mov r0, r5 - bne _0202DDF0 - mov r1, sl - bl CalcMenuHeightDiv8__02031AA4 - strb r0, [sp, #0x17] - b _0202DDF8 -_0202DDF0: - mov r1, sl - bl CalcMenuHeightDiv8__02031AA4 -_0202DDF8: - tst r5, #0x200000 - ldrneb r1, [sp, #0x14] - ldrneb r0, [sp, #0x16] - subne r0, r1, r0 - strneb r0, [sp, #0x14] - tst r5, #0x100000 - ldrneb r1, [sp, #0x15] - ldrneb r0, [sp, #0x17] - subne r0, r1, r0 - strneb r0, [sp, #0x15] - ldr r0, _0202DEE8 ; =UpdateDebugMenu - cmp sl, #0 - str r0, [r7] - str r5, [r7, #0xfc] - beq _0202DE54 - add r8, r7, #0x100 - mov r6, #9 -_0202DE3C: - ldmia sl!, {r0, r1, r2, r3} - stmia r8!, {r0, r1, r2, r3} - subs r6, r6, #1 - bne _0202DE3C - ldmia sl, {r0, r1} - stmia r8, {r0, r1} -_0202DE54: - ldr r0, [sp, #0x5c] - str r4, [r7, #0x198] - str r0, [r7, #0x19c] - mov r2, #0 - str r2, [r7, #0x1a0] - strb r2, [r7, #0x1a4] -#ifdef JAPAN - add r0, r7, #0x1ac - mov r1, #0x3bc -#else - ldr r1, _0202DEF0 ; =0x00003C65 - add r0, r7, #0x1ac -#endif - strb r2, [r7, #0x1a5] - bl GetStringFromFileVeneer - ldr r1, _0202DEF4 ; =0x00003C66 - add r0, r7, #0x2ac - bl GetStringFromFileVeneer - add r0, r7, #0x1ac - bl sub_020265A8 - str r0, [r7, #0x3ac] - add r0, r7, #0x2ac - bl sub_020265A8 - str r0, [r7, #0x3b0] - add r0, sp, #0x10 - mov r1, #3 - bl NewWindowScreenCheck - add r1, sp, #0x20 - mov r6, r0 - bl GetWindowRectangle - ldr r2, [sp, #8] - mov r1, r5 - str r2, [sp] - ldr r4, [sp, #0xc] - add r0, r7, #4 - add r2, r7, #0x100 - add r3, sp, #0x20 - str r4, [sp, #4] - bl InitWindowInput - mov r0, r6 - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202DEE8: .word UpdateDebugMenu -_0202DEEC: .word DEBUG_MENU_DEFAULT_WINDOW_PARAMS -#if defined(EUROPE) -_0202DEF0: .word 0x00003C67 -_0202DEF4: .word 0x00003C68 -#elif defined(JAPAN) -_0202DEF4: .word 0x000003BD -#else -_0202DEF0: .word 0x00003C65 -_0202DEF4: .word 0x00003C66 -#endif - arm_func_end CreateDebugMenu - - arm_func_start CloseDebugMenu -CloseDebugMenu: ; 0x0202DEF8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetWindowContents - mov r4, r0 - ldr r0, [r4, #0x198] - bl MemFree - mov r0, r4 - bl MemFree - mov r0, r5 - bl DeleteWindow - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CloseDebugMenu - - arm_func_start IsDebugMenuActive -IsDebugMenuActive: ; 0x0202DF24 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r0, [r0, #0x1a0] - cmp r0, #6 - cmpne r0, #7 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsDebugMenuActive - - arm_func_start CheckDebugMenuField0x1A4 -CheckDebugMenuField0x1A4: ; 0x0202DF44 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r0, [r0, #0x1a4] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end CheckDebugMenuField0x1A4 - - arm_func_start sub_0202DF64 -sub_0202DF64: ; 0x0202DF64 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r1, [r0, #0x1a4] - cmp r1, #0 - beq _0202DF90 - ldrb r0, [r0, #0x1a5] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} -_0202DF90: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end sub_0202DF64 - - arm_func_start UpdateDebugMenu -UpdateDebugMenu: ; 0x0202DF98 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x30 - mov r7, r0 - ldr r4, [r7, #0xc] - ldr r0, [r4, #0x1a0] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0202E294 -_0202DFB8: ; jump table - b _0202DFD0 ; case 0 - b _0202DFE8 ; case 1 - b _0202E010 ; case 2 - b _0202E068 ; case 3 - b _0202E224 ; case 4 - b _0202E268 ; case 5 -_0202DFD0: - ldrsb r0, [r7, #0x10] - bl sub_0202810C - cmp r0, #0 - beq _0202E294 - mov r0, #2 - str r0, [r4, #0x1a0] -_0202DFE8: - ldr r0, [r4, #0x1a0] - cmp r0, #1 - bne _0202E010 - ldrb r0, [r7, #8] - bl sub_020287C4 - ldrsb r0, [r7, #0x10] - bl UpdateWindow - mov r0, #2 - str r0, [r4, #0x1a0] - b _0202E294 -_0202E010: - mov r0, r7 - bl sub_0202E29C - ldr r0, [r4, #0xfc] - tst r0, #0x800000 - beq _0202E048 - mov r0, #7 - str r0, [r4, #0x1a0] - mov r1, #1 - mov r0, #0 - strb r1, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #4 - str r0, [r7, #0xb8] - b _0202E294 -_0202E048: - mov r1, #3 - mov r0, #0 - str r1, [r4, #0x1a0] - strb r0, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #1 - str r0, [r7, #0xb8] - b _0202E294 -_0202E068: - add r1, sp, #8 - add r2, sp, #0xc - add r0, r4, #4 - mov r3, #1 - bl sub_02031C98 - ldr r1, [sp, #8] - mov r5, r0 - cmp r1, #0 - bne _0202E0CC - mov r3, #0 - add r1, sp, #0xc - str r3, [sp] - mov r6, #1 - add r0, r4, #4 - mov r2, #2 - str r6, [sp, #4] - bl sub_02032160 - movs r1, r0 - bmi _0202E0CC - add r0, r4, #4 - bl sub_02032684 - ldr r0, [sp, #8] - mov r5, r6 - orr r0, r0, #0x2000 - str r0, [sp, #8] -_0202E0CC: - ldr r0, [sp, #8] - cmp r0, #0 - bne _0202E0EC - add r1, sp, #8 - add r2, sp, #0xc - add r0, r4, #4 - bl sub_02033758 - orr r5, r5, r0 -_0202E0EC: - add r0, r4, #4 - bl GetSelectedMenuItemIdx - ldr r1, [r4, #0xfc] - ldr r3, [r4, #0x198] - tst r1, #0x200 - ldrne r1, [r4, #0x160] - add r2, r0, r0, lsl #8 - ldrneb r1, [r1, r0] - ldr r0, [sp, #8] - add r6, r3, r2 - moveq r1, #0 - and r1, r1, #0xff - tst r0, #0x2200 - beq _0202E15C - tst r1, #1 - add r0, r4, #4 - bne _0202E154 - mov r1, #3 - bl PlayWindowInputSound - ldrb r0, [r6, #0x100] - mov r5, #1 - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - strb r0, [r6, #0x100] - b _0202E15C -_0202E154: - mov r1, #2 - bl PlayWindowInputSound -_0202E15C: - cmp r5, #0 - beq _0202E16C - mov r0, r7 - bl sub_0202E29C -_0202E16C: - ldr r0, [sp, #8] - tst r0, #1 - beq _0202E1E4 - add r0, r4, #4 - bl IsMenuOptionActive - cmp r0, #0 - beq _0202E214 - ldr r5, [r4, #0x198] - ldr r6, [r4, #0x19c] - b _0202E1A4 -_0202E194: - ldrb r1, [r5, #0x100] - add r0, r5, #1 - add r5, r0, #0x100 - strb r1, [r6], #1 -_0202E1A4: - mov r0, r5 - bl IsEmptyString - cmp r0, #0 - beq _0202E194 - add r0, r4, #4 - mov r1, #0 - bl PlayWindowInputSound - mov r1, #1 - mov r0, #0 - strb r1, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #4 - str r0, [r7, #0xb8] - mov r0, #4 - str r0, [r4, #0x1a0] - b _0202E214 -_0202E1E4: - tst r0, #2 - beq _0202E214 - add r0, r4, #4 - mov r1, #1 - bl PlayWindowInputSound - mov r0, #1 - strb r0, [r4, #0x1a4] - strb r0, [r4, #0x1a5] - sub r0, r0, #6 - str r0, [r7, #0xb8] - mov r0, #4 - str r0, [r4, #0x1a0] -_0202E214: - ldrsb r0, [r7, #0x10] - add r1, r4, #4 - bl sub_02028948 - b _0202E294 -_0202E224: - add r0, r4, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202E294 - ldrb r0, [r4, #0x1a5] - cmp r0, #0 - bne _0202E260 - ldr r0, [r4, #0xfc] - tst r0, #0x400000 - beq _0202E260 - mov r0, r7 - bl sub_0202E29C - mov r0, #7 - str r0, [r4, #0x1a0] - b _0202E294 -_0202E260: - mov r0, #5 - str r0, [r4, #0x1a0] -_0202E268: - ldrsb r0, [r7, #0x10] - bl sub_0202812C - cmp r0, #0 - beq _0202E294 - ldrb r0, [r4, #0x1a5] - cmp r0, #0 - mvnne r0, #4 - mvneq r0, #3 - str r0, [r7, #0xb8] - mov r0, #6 - str r0, [r4, #0x1a0] -_0202E294: - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end UpdateDebugMenu - - arm_func_start sub_0202E29C -sub_0202E29C: ; 0x0202E29C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - mov sl, r0 - ldr r4, [sl, #0xc] - add r0, r4, #4 - bl GetPageStart - mov r7, r0 - add r0, r4, #4 - bl GetNumItemsOnPage - ldr r1, [r4, #0xfc] - mov r5, r0 - tst r1, #0x200 - ldrne r0, [r4, #0x160] - ldr r3, [r4, #0x198] - addne r8, r0, r7 - add r2, r7, r7, lsl #8 - ldrsb r0, [sl, #0x10] - add r6, r3, r2 - moveq r8, #0 - bl sub_02027B1C - cmp r5, #0 - mov r7, #0 - ble _0202E3B0 - add r0, r4, #0x1ac - str r0, [sp, #8] - b _0202E3A8 -_0202E304: - add r0, r4, #4 - mov r1, r7 - bl GetPageItemYOffset - str r0, [sp, #4] - ldrb r0, [r6, #0x100] - mov r1, #0 - cmp r0, #0 - movne sb, #1 - moveq sb, #0 - cmp r8, #0 - beq _0202E340 - ldrb r0, [r8] - add r8, r8, #1 - tst r0, #2 - movne r1, #1 -_0202E340: - cmp r1, #0 - movne r0, #0x42 - moveq r0, #0x44 - and fp, r0, #0xff - str fp, [sp] - ldrsb r0, [sl, #0x10] - ldr r2, [sp, #4] - mov r1, #0xd - mov r3, r6 - bl sub_020263C8 - str fp, [sp] - add r3, r4, sb, lsl #2 - ldr fp, [r3, #0x3ac] - ldr r3, [sp, #8] - ldr r1, [r4, #0x1a8] - add r3, r3, sb, lsl #8 - rsb sb, fp, #0x30 - ldrsb r0, [sl, #0x10] - ldr r2, [sp, #4] - add r1, r1, #0xd - add sb, sb, sb, lsr #31 - add r1, r1, sb, asr #1 - bl sub_020263C8 - add r0, r6, #1 - add r7, r7, #1 - add r6, r0, #0x100 -_0202E3A8: - cmp r7, r5 - blt _0202E304 -_0202E3B0: - ldrsb r1, [sl, #0x10] - add r0, r4, #4 - bl sub_0202A03C - ldrsb r0, [sl, #0x10] - bl UpdateWindow - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end sub_0202E29C - - arm_func_start CreateScrollBoxSingle -CreateScrollBoxSingle: ; 0x0202E3CC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - mov r8, r0 - mov r7, r1 - ldr r0, _0202E508 ; =0x00001D6C - mov r1, #8 - mov r6, r2 - mov r5, r3 - bl MemAlloc - mov r4, r0 - cmp r8, #0 - ldreq r0, _0202E50C ; =SCROLL_BOX_DEFAULT_WINDOW_PARAMS - add ip, sp, #0 - ldmeqia r0, {r0, r1, r2, r3} - stmeqia ip, {r0, r1, r2, r3} - ldmneia r8, {r0, r1, r2, r3} - stmneia ip, {r0, r1, r2, r3} - ldrne r0, _0202E510 ; =UpdateScrollBox - ldr r1, _0202E510 ; =UpdateScrollBox - strne r0, [sp] - ldr r0, _0202E514 ; =0x0D0C8012 - str r4, [sp, #0xc] - orr r0, r7, r0 - str r1, [r4] - bic r0, r0, #1 - str r0, [r4, #0xfc] - cmp r6, #0 - beq _0202E45C - add ip, r4, #0x100 - mov r7, #9 -_0202E444: - ldmia r6!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - subs r7, r7, #1 - bne _0202E444 - ldmia r6, {r0, r1} - stmia ip, {r0, r1} -_0202E45C: - ldr r7, [sp, #0x28] - add r0, r4, #0x100 - strh r5, [r0, #0xa0] - cmp r7, #0 - beq _0202E48C - add r6, r4, #0x1a8 - mov r5, #5 -_0202E478: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r5, r5, #1 - bne _0202E478 - b _0202E494 -_0202E48C: - add r0, r4, #0x1a8 - bl InitPreprocessorArgs -_0202E494: - mov r0, #1 - ldr r7, [sp, #0x30] - ldrh r1, [sp, #0x2c] - str r0, [r4, #0x198] - mov r0, #0 - str r0, [r4, #0x19c] - add r0, r4, #0x200 - strh r1, [r0, #0xe8] - cmp r7, #0 - beq _0202E4D8 - add r6, r4, #0x2f0 - mov r5, #5 -_0202E4C4: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r5, r5, #1 - bne _0202E4C4 - b _0202E4E0 -_0202E4D8: - add r0, r4, #0x2f0 - bl InitPreprocessorArgs -_0202E4E0: - mov r3, #0 - str r3, [r4, #0x430] - add r2, r4, #0x1000 - str r3, [r2, #0x464] - add r0, sp, #0 - mov r1, #3 - strb r3, [r2, #0x468] - bl NewWindowScreenCheck - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0202E508: .word 0x00001D6C -_0202E50C: .word SCROLL_BOX_DEFAULT_WINDOW_PARAMS -_0202E510: .word UpdateScrollBox -_0202E514: .word 0x0D0C8012 - arm_func_end CreateScrollBoxSingle - - arm_func_start CreateScrollBoxMulti -CreateScrollBoxMulti: ; 0x0202E518 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - mov r6, r0 - mov r5, r2 - ldr r2, [sp, #0x44] - mov sl, r1 - ldr r0, _0202E6A0 ; =0x00001D6C - mov r1, #8 - mov sb, r3 - ldr r8, [sp, #0x38] - ldr r7, [sp, #0x3c] - ldr fp, [sp, #0x40] - str r2, [sp, #0x44] - bl MemAlloc - cmp r6, #0 - mov r4, r0 - ldreq r0, _0202E6A4 ; =SCROLL_BOX_DEFAULT_WINDOW_PARAMS - addeq r6, sp, #0 - ldmeqia r0, {r0, r1, r2, r3} - stmeqia r6, {r0, r1, r2, r3} - addne ip, sp, #0 - ldmneia r6, {r0, r1, r2, r3} - stmneia ip, {r0, r1, r2, r3} - ldrne r0, _0202E6A8 ; =UpdateScrollBox - ldr r1, _0202E6A8 ; =UpdateScrollBox - strne r0, [sp] - ldr r0, _0202E6AC ; =0x0D0C8012 - str r4, [sp, #0xc] - orr r0, sl, r0 - str r1, [r4] - bic r0, r0, #1 - str r0, [r4, #0xfc] - cmp r5, #0 - beq _0202E5C0 - add sl, r4, #0x100 - mov r6, #9 -_0202E5A8: - ldmia r5!, {r0, r1, r2, r3} - stmia sl!, {r0, r1, r2, r3} - subs r6, r6, #1 - bne _0202E5A8 - ldmia r5, {r0, r1} - stmia sl, {r0, r1} -_0202E5C0: - str sb, [r4, #0x198] - mov r6, #0 - str r6, [r4, #0x19c] - b _0202E670 -_0202E5D0: - mov r0, #0x50 - mul r5, r6, r0 - mov r1, r6, lsl #1 - add r0, r4, r6, lsl #1 - ldrh r1, [r8, r1] - add r0, r0, #0x100 - adds sl, r7, r5 - strh r1, [r0, #0xa0] - beq _0202E614 - add r0, r4, r5 - add lr, r0, #0x1a8 - mov ip, #5 -_0202E600: - ldmia sl!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0202E600 - b _0202E620 -_0202E614: - add r0, r4, #0x1a8 - add r0, r0, r5 - bl InitPreprocessorArgs -_0202E620: - mov r0, r6, lsl #1 - ldrh r1, [fp, r0] - add r0, r4, r6, lsl #1 - add r0, r0, #0x200 - strh r1, [r0, #0xe8] - ldr r0, [sp, #0x44] - adds sl, r0, r5 - beq _0202E660 - add r0, r4, r5 - add ip, r0, #0x2f0 - mov r5, #5 -_0202E64C: - ldmia sl!, {r0, r1, r2, r3} - stmia ip!, {r0, r1, r2, r3} - subs r5, r5, #1 - bne _0202E64C - b _0202E66C -_0202E660: - add r0, r4, #0x2f0 - add r0, r0, r5 - bl InitPreprocessorArgs -_0202E66C: - add r6, r6, #1 -_0202E670: - cmp r6, sb - blt _0202E5D0 - mov r3, #0 - str r3, [r4, #0x430] - add r2, r4, #0x1000 - str r3, [r2, #0x464] - add r0, sp, #0 - mov r1, #3 - strb r3, [r2, #0x468] - bl NewWindowScreenCheck - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202E6A0: .word 0x00001D6C -_0202E6A4: .word SCROLL_BOX_DEFAULT_WINDOW_PARAMS -_0202E6A8: .word UpdateScrollBox -_0202E6AC: .word 0x0D0C8012 - arm_func_end CreateScrollBoxMulti - - arm_func_start SetScrollBoxState7 -SetScrollBoxState7: ; 0x0202E6B0 - stmdb sp!, {r3, lr} - bl GetWindowContents - add r0, r0, #0x1000 - mov r1, #7 - str r1, [r0, #0x464] - ldmia sp!, {r3, pc} - arm_func_end SetScrollBoxState7 - - arm_func_start CloseScrollBox -CloseScrollBox: ; 0x0202E6C8 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetWindowContents - bl MemFree - mov r0, r4 - bl DeleteWindow - ldmia sp!, {r4, pc} - arm_func_end CloseScrollBox - - arm_func_start IsScrollBoxActive -IsScrollBoxActive: ; 0x0202E6E4 - stmdb sp!, {r3, lr} - bl GetWindowContents - add r0, r0, #0x1000 - ldr r0, [r0, #0x464] - cmp r0, #8 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end IsScrollBoxActive - - arm_func_start UpdateScrollBox -UpdateScrollBox: ; 0x0202E708 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x6c - mov r4, r0 - ldr r5, [r4, #0xc] - add r0, r5, #0x1000 - ldr r0, [r0, #0x464] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0202EE74 -_0202E72C: ; jump table - b _0202E74C ; case 0 - b _0202E768 ; case 1 - b _0202E768 ; case 2 - b _0202E768 ; case 3 - b _0202E998 ; case 4 - b _0202E9C0 ; case 5 - b _0202EE38 ; case 6 - b _0202EE54 ; case 7 -_0202E74C: - ldrsb r0, [r4, #0x10] - bl sub_0202810C - cmp r0, #0 - beq _0202EE74 - add r0, r5, #0x1000 - mov r1, #1 - str r1, [r0, #0x464] -_0202E768: - add r0, r5, #0x1000 - ldr r0, [r0, #0x464] - cmp r0, #1 - beq _0202E788 - add r0, r5, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202EE74 -_0202E788: - add r0, r5, #0x34 - ldr r2, [r5, #0x430] - ldr r1, _0202EE7C ; =0x0000040C - add r0, r0, #0x400 - add r3, r5, #0x16c - mla r6, r2, r1, r0 - cmp r2, #0 - add r7, r3, #0x1800 - mov r8, #0 - bne _0202E850 - ldr sl, [r5, #0x19c] - add r0, r5, sl, lsl #1 - add r0, r0, #0x100 - ldrh r2, [r0, #0xa0] - cmp r2, #0 - addeq r0, r5, #0x1000 - streqb r8, [r0, #0x56c] - beq _0202E7F0 - add r1, r5, #0x1a8 - mov r0, #0x50 - mla sb, sl, r0, r1 - mov r1, #0x400 - add r0, r3, #0x1400 - add r3, r1, #4 - str sb, [sp] - bl PreprocessStringFromId -_0202E7F0: - ldr r2, [r5, #0x19c] - mov r0, #0x50 - mla r1, r2, r0, r5 - add r0, r5, #0x6c - add fp, r1, #0x2f0 - add sl, r0, #0x1400 - mov sb, #5 -_0202E80C: - ldmia fp!, {r0, r1, r2, r3} - stmia sl!, {r0, r1, r2, r3} - subs sb, sb, #1 - bne _0202E80C - ldr r0, [r5, #0x19c] - add r1, r5, #0x1000 - add r0, r5, r0, lsl #1 - add r0, r0, #0x200 - ldrh r0, [r0, #0xe8] - strh r0, [r6] - ldr r0, [r1, #0x464] - cmp r0, #1 - moveq r0, #0 - streq r0, [r6, #4] - subeq r0, r0, #1 - streq r0, [r6, #8] - b _0202E85C -_0202E850: - add r0, r3, #0x1400 - add r1, r6, #0xc - bl strcpy -_0202E85C: - ldr r0, [r5, #0xfc] - ldr r1, _0202EE80 ; =0x000001AF - orr r0, r0, #0x800 - str r0, [r5, #0xfc] - add r0, r5, #0x100 - strh r1, [r0, #8] - mov r0, #0x10 - add r3, r5, #0x16c - str r0, [r5, #0x10c] - add r0, r3, #0x1400 - str r0, [r5, #0x148] - ldrh sb, [r6] - add r0, r5, #0x1000 - add r2, r5, #0x6c - str sb, [r0, #0x4a0] - add r0, r2, #0x1400 - str r0, [sp] - ldrh r2, [r6] - mov r1, #0x400 - add r0, r3, #0x1800 - add r3, r1, #4 - bl PreprocessStringFromId - add r0, r5, #0xc4 - add sb, r0, #0x1400 - b _0202E8E0 -_0202E8C0: - add r0, r5, r8, lsl #2 - add r2, r0, #0x1000 - add r1, sb, r8, lsl #2 - mov r0, r7 - str r7, [r2, #0x4e4] - add r8, r8, #1 - bl sub_02021F44 - mov r7, r0 -_0202E8E0: - cmp r7, #0 - bne _0202E8C0 - add r0, r5, #0x1000 - str r8, [r0, #0x4bc] - ldr r1, [r0, #0x464] - cmp r1, #3 - ldreq r1, [r6, #4] - movne r1, #0 - str r1, [r0, #0x4c0] - ldr r1, [r5, #0xfc] - add r0, r5, #0x1000 - orr r1, r1, #8 - str r1, [r5, #0xfc] - ldr r0, [r0, #0x4bc] - add r1, sp, #0x38 - cmp r0, #1 - ldrle r0, [r5, #0xfc] - eorle r0, r0, #8 - strle r0, [r5, #0xfc] - ldrsb r0, [r4, #0x10] - bl GetWindowRectangle - ldr r0, [r5, #0x430] - add r3, sp, #0x38 - cmp r0, #0 - mov r0, #1 - bne _0202E974 - ldr r1, [r5, #0x198] - add r2, r5, #0x100 - str r1, [sp] - str r0, [sp, #4] - ldr r1, [r5, #0xfc] - add r0, r5, #4 - bl InitWindowInput - ldr r1, [r5, #0x19c] - add r0, r5, #4 - bl sub_02032684 - b _0202E98C -_0202E974: - str r0, [sp] - str r0, [sp, #4] - ldr r1, [r5, #0xfc] - add r0, r5, #4 - add r2, r5, #0x100 - bl InitWindowInput -_0202E98C: - add r0, r5, #0x1000 - mov r1, #4 - str r1, [r0, #0x464] -_0202E998: - mov r0, r4 - bl sub_0202EE88 - mov r1, #0 - add r0, r5, #0x1000 - mov r2, #5 - str r2, [r0, #0x464] - strb r1, [r0, #0x468] - sub r0, r1, #1 - str r0, [r4, #0xb8] - b _0202EE74 -_0202E9C0: - add r0, r5, #0x34 - add r8, r0, #0x400 - ldr r7, [r5, #0x430] - ldr r6, _0202EE7C ; =0x0000040C - add r1, sp, #0x14 - add r2, sp, #0x48 - add r0, r5, #4 - mov r3, #1 - mla r6, r7, r6, r8 - bl sub_02031C98 - mov r7, r0 - add r0, r5, #4 - bl GetCurrentPage - mov fp, r0 - add r2, r5, #0x1000 - mov r0, #0 - mov r1, #0x13 - ldr r8, [r2, #0x4c0] - bl sub_02031914 - add r1, r5, #0x1000 - ldr r1, [r1, #0x4bc] - mov sb, r0 - cmp r1, #1 - ble _0202EA70 - tst sb, #0x10 - beq _0202EA48 - add r0, r5, #4 - mov r1, #4 - bl PlayWindowInputSound - subs r8, r8, #1 - addmi r0, r5, #0x1000 - ldrmi r0, [r0, #0x4bc] - submi r8, r0, #1 - b _0202EA70 -_0202EA48: - tst sb, #0x20 - beq _0202EA70 - add r0, r5, #4 - mov r1, #4 - bl PlayWindowInputSound - add r0, r5, #0x1000 - ldr r0, [r0, #0x4bc] - add r8, r8, #1 - cmp r8, r0 - movge r8, #0 -_0202EA70: - ldr r0, [r5, #0x430] - cmp r0, #0 - bne _0202EA98 - ldr r0, [r5, #0x19c] - cmp r0, fp - strne fp, [r5, #0x19c] - addne r0, r5, #0x1000 - movne r1, #1 - strne r1, [r0, #0x464] - bne _0202EB54 -_0202EA98: - add r0, r5, #0x1000 - ldr r1, [r0, #0x4c0] - cmp r1, r8 - beq _0202EAC0 - str r8, [r0, #0x4c0] - str r8, [r6, #4] - mvn r0, #0 - str r0, [r6, #8] - mov r7, #1 - b _0202EB54 -_0202EAC0: - ldr r2, [r0, #0x504] - cmp r2, #0 - ble _0202EB54 - ldr r0, [sp, #0x14] - tst r0, #0x2000 - beq _0202EB10 - ldr r0, [r6, #8] - cmp r0, #0 - sublt r0, r2, #1 - strlt r0, [r6, #8] - blt _0202EAFC - mvneq r0, #0 - streq r0, [r6, #8] - subne r0, r0, #1 - strne r0, [r6, #8] -_0202EAFC: - add r0, r5, #4 - mov r1, #3 - bl PlayWindowInputSound - mov r7, #1 - b _0202EB54 -_0202EB10: - tst r0, #0x1000 - beq _0202EB54 - ldr r1, [r6, #8] - cmp r1, #0 - movlt r0, #0 - strlt r0, [r6, #8] - blt _0202EB44 - sub r0, r2, #1 - cmp r1, r0 - mvnge r0, #0 - strge r0, [r6, #8] - addlt r0, r1, #1 - strlt r0, [r6, #8] -_0202EB44: - add r0, r5, #4 - mov r1, #3 - bl PlayWindowInputSound - mov r7, #1 -_0202EB54: - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _0202ECC4 - ldrsb r0, [r4, #0x10] - mvn r2, #0 - add r1, sp, #0x28 - str r2, [sp, #8] - bl GetWindowRectangle - add r0, r5, #0x108 - add r0, r0, #0x1400 - str r0, [sp, #0xc] - add r0, r5, #0x1000 - mov sl, #0 - str r0, [sp, #0x10] - b _0202EC08 -_0202EB90: - ldr r0, [sp, #0xc] - mov r1, #0x18 - mla r2, sl, r1, r0 - ldr r1, [sp, #0x28] - ldr r0, [r2, #8] - ldr r3, [sp, #0x30] - add r0, r0, r1 - str r0, [sp, #0x18] - ldr ip, [r2, #0x10] - add r0, sp, #0x48 - add r1, ip, r1 - str r1, [sp, #0x1c] - ldr ip, [r2, #4] - ldr r1, _0202EE84 ; =0x00000408 - add ip, ip, r3 - str ip, [sp, #0x20] - ldr ip, [r2, #0xc] - add r2, sp, #0x18 - add r3, ip, r3 - str r3, [sp, #0x24] - bl sub_02006C8C - cmp r0, #0 - beq _0202EC04 - add r0, r5, #4 - mov r1, #0 - str sl, [sp, #8] - bl sub_020320EC - mov r7, #1 - b _0202EC18 -_0202EC04: - add sl, sl, #1 -_0202EC08: - ldr r0, [sp, #0x10] - ldr r0, [r0, #0x504] - cmp sl, r0 - blt _0202EB90 -_0202EC18: - ldr r0, [sp, #8] - cmp r0, #0 - strge sl, [r6, #8] - orrge sb, sb, #1 - bge _0202EC7C - add r1, sp, #0x14 - add r2, sp, #0x48 - add r0, r5, #4 - bl sub_02033758 - add r1, r5, #0x1000 - ldr r1, [r1, #0x4bc] - orr r7, r7, r0 - cmp r1, #1 - ble _0202EC7C - ldr r0, [sp, #0x14] - tst r0, #0x40000 - beq _0202EC68 - subs r8, r8, #1 - submi r8, r1, #1 - b _0202EC7C -_0202EC68: - tst r0, #0x80000 - beq _0202EC7C - add r8, r8, #1 - cmp r8, r1 - movge r8, #0 -_0202EC7C: - ldr r0, [r5, #0x430] - cmp r0, #0 - bne _0202ECA4 - ldr r0, [r5, #0x19c] - cmp r0, fp - strne fp, [r5, #0x19c] - addne r0, r5, #0x1000 - movne r1, #1 - strne r1, [r0, #0x464] - bne _0202ECC4 -_0202ECA4: - add r0, r5, #0x1000 - ldr r1, [r0, #0x4c0] - cmp r1, r8 - strne r8, [r0, #0x4c0] - strne r8, [r6, #4] - mvnne r0, #0 - strne r0, [r6, #8] - movne r7, #1 -_0202ECC4: - cmp r7, #0 - beq _0202ECD4 - mov r0, r4 - bl sub_0202EE88 -_0202ECD4: -#ifdef JAPAN - ldr r0, [r6, #8] - cmp r0, #0 - blt _0202EDC8 - tst sb, #1 - beq _0202EDC8 - add r1, r5, #0x108 - add r2, r1, #0x1400 - mov r1, #0x18 - mla r7, r0, r1, r2 - ldr sb, [r5, #0x430] - mov r8, #0 - ldr r1, _0202EE7C ; =0x0000040C - b _0202F078 -_0202F05C: - mla r2, r8, r1, r5 - add r2, r2, #0x400 - ldrh r3, [r7, #2] - ldrh r2, [r2, #0x34] - cmp r3, r2 - beq _0202F080 - add r8, r8, #1 -_0202F078: - cmp r8, sb - blt _0202F05C -_0202F080: - cmp sb, #3 - bge _0202EDBC - ldrh r1, [r7, #2] - cmp r1, #0 - addne r0, r5, r0 -#else - add r0, r5, #0x1000 - ldr r0, [r0, #0x464] - cmp r0, #5 - bne _0202EE28 - ldr r1, [r6, #8] - mov r0, #0 - mov r7, r0 - cmp r1, #0 - blt _0202EDC8 - tst sb, #1 - beq _0202EDC8 - add r2, r5, #0x108 - add r3, r2, #0x1400 - mov r2, #0x18 - mla r8, r1, r2, r3 - ldr sl, [r5, #0x430] - mov r7, #1 - ldr r2, _0202EE7C ; =0x0000040C - b _0202ED3C -_0202ED20: - mla r3, r0, r2, r5 - add r3, r3, #0x400 - ldrh sb, [r8, #2] - ldrh r3, [r3, #0x34] - cmp sb, r3 - beq _0202ED44 - add r0, r0, #1 -_0202ED3C: - cmp r0, sl - blt _0202ED20 -_0202ED44: - cmp sl, #3 - bge _0202EDBC - ldrh r0, [r8, #2] - cmp r0, #0 - addne r0, r5, r1 -#endif - addne r0, r0, #0x1000 - ldrneb r0, [r0, #0x568] - cmpne r0, #0 - beq _0202EDBC - add r0, r5, #4 - mov r1, #0 - bl PlayWindowInputSound - ldr r0, [r5, #0x430] - add r2, r6, #0x18 - add r0, r0, #1 - str r0, [r5, #0x430] - mov r3, #0 -#ifdef JAPAN - ldrh r8, [r7, #2] - add r0, r6, #0x400 - mov r1, r7 - strh r8, [r0, #0xc] -#else - ldrh sb, [r8, #2] - add r0, r6, #0x400 - mov r1, r8 - strh sb, [r0, #0xc] -#endif - str r3, [r6, #0x410] - sub r3, r3, #1 - add r0, r2, #0x400 - str r3, [r6, #0x414] - bl sub_0202202C - add r0, r5, #0x1000 - mov r1, #2 - str r1, [r0, #0x464] - b _0202EDC8 -_0202EDBC: - add r0, r5, #4 - mov r1, #2 - bl PlayWindowInputSound -_0202EDC8: -#ifdef JAPAN - add r0, r5, #0x1000 - ldr r0, [r0, #0x464] - cmp r0, #5 -#else - cmp r7, #0 -#endif - bne _0202EE28 - ldr r0, [sp, #0x14] - tst r0, #2 - beq _0202EE28 - add r0, r5, #4 - mov r1, #1 - bl PlayWindowInputSound - ldr r0, [r5, #0x430] - cmp r0, #0 - ble _0202EE0C - sub r0, r0, #1 - str r0, [r5, #0x430] - add r0, r5, #0x1000 - mov r1, #3 - str r1, [r0, #0x464] - b _0202EE28 -_0202EE0C: - mov r1, #1 - add r0, r5, #0x1000 - strb r1, [r0, #0x468] - sub r1, r1, #6 - str r1, [r4, #0xb8] - mov r1, #6 - str r1, [r0, #0x464] -_0202EE28: - ldrsb r0, [r4, #0x10] - add r1, r5, #4 - bl sub_02028948 - b _0202EE74 -_0202EE38: - add r0, r5, #4 - bl sub_02032070 - cmp r0, #0 - bne _0202EE74 - add r0, r5, #0x1000 - mov r1, #7 - str r1, [r0, #0x464] -_0202EE54: - ldrsb r0, [r4, #0x10] - bl sub_0202812C - cmp r0, #0 - mvnne r0, #4 - strne r0, [r4, #0xb8] - addne r0, r5, #0x1000 - movne r1, #8 - strne r1, [r0, #0x464] -_0202EE74: - add sp, sp, #0x6c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202EE7C: .word 0x0000040C -#ifdef JAPAN -_0202EE80: .word 0x000003B7 -#else -_0202EE80: .word 0x000001AF -#endif -_0202EE84: .word 0x00000408 - arm_func_end UpdateScrollBox - - arm_func_start sub_0202EE88 -sub_0202EE88: ; 0x0202EE88 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x124 - mov sl, r0 - ldr r5, [sl, #0xc] - ldrsb r0, [sl, #0x10] - add r1, r5, #0x34 - ldr r4, [r5, #0x430] - ldr r2, _0202F0A4 ; =0x0000040C - add r1, r1, #0x400 - add r3, r5, #0x1000 - mla r6, r4, r2, r1 - ldr r4, [r3, #0x4c0] - bl sub_02027B1C - ldrsb r1, [sl, #0x10] - add r0, sp, #8 - bl sub_02025E84 - add r0, r5, #4 - mov r1, #0 - bl GetPageItemYOffset - mov r2, r0 - add r0, sp, #8 - mov r1, #4 - bl sub_0202614C - add r0, r5, r4, lsl #2 - add r0, r0, #0x1000 - ldr r2, [r0, #0x4e4] - ldr r1, _0202F0A8 ; =0x0000C406 - add r0, sp, #8 - bl sub_02026194 - add r0, sp, #8 - bl sub_02026204 - add r1, r5, #0x108 - add r0, sp, #8 - add r1, r1, #0x1400 - bl sub_020261F4 - add r1, r5, #0x1000 - str r0, [r1, #0x504] - ldr r0, [r5, #0x430] - cmp r0, #3 - bge _0202EFA0 - mov r8, #0 - mov r0, #1 - mov lr, r8 - ldr sb, _0202F0A4 ; =0x0000040C - mov ip, #0x18 - b _0202EF90 -_0202EF40: - mla r2, r8, ip, r5 - add r3, r2, #0x1500 - mov r4, r0 - mov r2, lr - ldrh r3, [r3, #0xa] - ldr r7, [r5, #0x430] - b _0202EF78 -_0202EF5C: - mla fp, r2, sb, r5 - add fp, fp, #0x400 - ldrh fp, [fp, #0x34] - cmp r3, fp - moveq r4, #0 - beq _0202EF80 - add r2, r2, #1 -_0202EF78: - cmp r2, r7 - blt _0202EF5C -_0202EF80: - add r2, r5, r8 - add r2, r2, #0x1000 - strb r4, [r2, #0x568] - add r8, r8, #1 -_0202EF90: - ldr r3, [r1, #0x504] - cmp r8, r3 - blt _0202EF40 - b _0202EFC8 -_0202EFA0: - mov r4, #0 - mov r2, r4 - b _0202EFBC -_0202EFAC: - add r0, r5, r4 - add r0, r0, #0x1000 - strb r2, [r0, #0x568] - add r4, r4, #1 -_0202EFBC: - ldr r3, [r1, #0x504] - cmp r4, r3 - blt _0202EFAC -_0202EFC8: - add r0, r5, #0x108 - cmp r3, #0 - add r7, r0, #0x1400 - mov r8, #0 - ble _0202F088 - add r4, r5, #0x1000 - mov fp, #0x2e - b _0202F07C -_0202EFE8: - add r0, r5, r8 - add r0, r0, #0x1000 - ldrb r0, [r0, #0x568] - ldrsb r1, [sl, #0x10] - cmp r0, #0 - movne sb, #0x4c - add r0, sp, #8 - moveq sb, #0x57 - bl sub_02025E84 - add r0, sp, #8 - ldmib r7, {r1, r2} - bl sub_0202614C - ldr r1, _0202F0AC ; =0x0000C506 - ldr r2, [r7, #0x14] - add r0, sp, #8 - bl sub_02026194 - mov r1, sb - add r0, sp, #8 - bl sub_02026174 - add r0, sp, #8 - bl sub_02026204 - ldr r0, [r6, #8] - cmp r0, r8 - bne _0202F074 - ldr r0, [r7, #0xc] - ldr r1, [r7, #4] - cmp r1, r0 - bge _0202F074 - sub r3, r0, r1 - ldr r2, [r7, #8] - ldr r0, [r7, #0x10] - sub r0, r0, r2 - stmia sp, {r0, fp} - ldrsb r0, [sl, #0x10] - bl sub_02025D90 -_0202F074: - add r8, r8, #1 - add r7, r7, #0x18 -_0202F07C: - ldr r0, [r4, #0x504] - cmp r8, r0 - blt _0202EFE8 -_0202F088: - ldrsb r1, [sl, #0x10] - add r0, r5, #4 - bl sub_0202A03C - ldrsb r0, [sl, #0x10] - bl UpdateWindow - add sp, sp, #0x124 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0202F0A4: .word 0x0000040C -_0202F0A8: .word 0x0000C406 -_0202F0AC: .word 0x0000C506 - arm_func_end sub_0202EE88 - - arm_func_start CreateDialogueBox -CreateDialogueBox: ; 0x0202F0B0 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0x10 - mov r6, r0 - ldr r0, _0202F13C ; =0x00000528 - mov r1, #8 - bl MemAlloc - mov r4, r0 - cmp r6, #0 - ldreq r0, _0202F140 ; =DIALOGUE_BOX_DEFAULT_WINDOW_PARAMS - add r5, sp, #0 - ldmeqia r0, {r0, r1, r2, r3} - stmeqia r5, {r0, r1, r2, r3} - ldmneia r6, {r0, r1, r2, r3} - stmneia r5, {r0, r1, r2, r3} - ldrne r0, _0202F144 ; =UpdateDialogueBox - ldr r1, _0202F144 ; =UpdateDialogueBox - strne r0, [sp] - str r4, [sp, #0xc] - str r1, [r4] - mov r2, #1 - add r0, sp, #0 - mov r1, #3 - strb r2, [r4, #0xa] - bl NewWindowScreenCheck - mov r5, r0 - mov r1, r5 - add r0, r4, #0xc - bl sub_02025E84 - mov r1, #0 - str r1, [r4, #4] - strb r1, [r4, #8] - mov r0, r5 - strb r1, [r4, #9] - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0202F13C: .word 0x00000528 -_0202F140: .word DIALOGUE_BOX_DEFAULT_WINDOW_PARAMS -_0202F144: .word UpdateDialogueBox - arm_func_end CreateDialogueBox - - arm_func_start CloseDialogueBox -CloseDialogueBox: ; 0x0202F148 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetWindowContents - mov r0, r4 - bl GetWindowContents - bl MemFree - mov r0, r4 - bl DeleteWindow - ldmia sp!, {r4, pc} - arm_func_end CloseDialogueBox - - arm_func_start sub_0202F16C -sub_0202F16C: ; 0x0202F16C - stmdb sp!, {r3, lr} - bl GetWindowContents - add r0, r0, #0xc - bl sub_020261D4 - ldmia sp!, {r3, pc} - arm_func_end sub_0202F16C diff --git a/asm/main_0202C7E4.s b/asm/main_0202C7E4.s new file mode 100644 index 00000000..9d1785f6 --- /dev/null +++ b/asm/main_0202C7E4.s @@ -0,0 +1,648 @@ + .include "asm/macros.inc" + .include "main_0202C7E4.inc" + + .text + + arm_func_start sub_0202C7E4 +sub_0202C7E4: ; 0x0202C7E4 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r1, [r0, #0x1ac] + cmp r1, #3 + moveq r1, #2 + streq r1, [r0, #0x1ac] + moveq r0, #1 + movne r0, #0 + ldmia sp!, {r3, pc} + arm_func_end sub_0202C7E4 + + arm_func_start UpdateCollectionMenu +UpdateCollectionMenu: ; 0x0202C808 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x30 + mov r4, r0 + ldrsb r0, [r4, #0x10] + ldr r5, [r4, #0xc] + bl sub_02028354 + cmp r0, #3 + moveq r1, #1 + movne r1, #0 + ldr r0, [r5, #0x1ac] + and fp, r1, #0xff + cmp r0, #0xa + addls pc, pc, r0, lsl #2 + b _0202CE40 +_0202C840: ; jump table + b _0202C86C ; case 0 + b _0202C884 ; case 1 + b _0202C8C0 ; case 2 + b _0202C918 ; case 3 + b _0202CDC8 ; case 4 + b _0202CE0C ; case 5 + b _0202CE40 ; case 6 + b _0202CE40 ; case 7 + b _0202CCA4 ; case 8 + b _0202CD14 ; case 9 + b _0202CD74 ; case 10 +_0202C86C: + ldrsb r0, [r4, #0x10] + bl sub_0202810C + cmp r0, #0 + beq _0202CE40 + mov r0, #2 + str r0, [r5, #0x1ac] +_0202C884: + ldr r0, [r5, #0x1ac] + cmp r0, #1 + bne _0202C8C0 + ldrb r0, [r5, #0x1c6] + cmp r0, #0 + beq _0202C8A4 + mov r0, r4 + bl sub_0202CEA0 +_0202C8A4: + ldrb r0, [r4, #8] + bl sub_020287C4 + ldrsb r0, [r4, #0x10] + bl UpdateWindow + mov r0, #2 + str r0, [r5, #0x1ac] + b _0202CE40 +_0202C8C0: + mov r0, r4 + bl sub_0202CEA0 + ldr r0, [r5, #0xfc] + tst r0, #0x800000 + beq _0202C8F8 + mov r0, #7 + str r0, [r5, #0x1ac] + mov r1, #1 + mov r0, #0 + strb r1, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + sub r0, r0, #4 + str r0, [r4, #0xb8] + b _0202CE40 +_0202C8F8: + mov r1, #3 + mov r0, #0 + str r1, [r5, #0x1ac] + strb r0, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + sub r0, r0, #1 + str r0, [r4, #0xb8] + b _0202CE40 +_0202C918: + add r1, sp, #8 + add r2, sp, #0xc + add r0, r5, #4 + mov r3, #1 + bl sub_02031C98 + ldr r1, [sp, #8] + mov r6, #0 + cmp r1, #0 + movne r6, #1 + mov r8, r0 + cmp r1, #0 + bne _0202CA70 + ldr r0, [r5, #0xfc] + tst r0, #1 + beq _0202CA70 + mov r3, #0 + str r3, [sp] + ldr r2, _0202CE9C ; =0x00000408 + add r1, sp, #0xc + add r0, r5, #4 + str r3, [sp, #4] + bl sub_02032160 + movs r7, r0 + bmi _0202CA70 + ldrb r0, [r5, #0x1b2] + cmp r0, #0 + beq _0202C994 + add r0, r5, #4 + bl GetSelectedMenuItemIdx + cmp r7, r0 + bne _0202CA54 +_0202C994: + ldr r0, [r5, #0x19c] + cmp r0, #0 + ldrne r0, [sp, #8] + orrne r0, r0, #4 + orrne r0, r0, #0x400 + strne r0, [sp, #8] + bne _0202CA60 + ldr r1, [sp, #8] + add r0, r5, #4 + orr r1, r1, #1 + str r1, [sp, #8] + ldr r8, [r5, #0xc] + ldr sb, [r5, #0x10] + bl GetPageStart + mov r1, r0 + add r0, r5, #4 + sub r1, r7, r1 + bl GetPageItemYOffset + ldr r1, [r5, #4] + add sl, r1, r0 + add r0, r5, #4 + bl GetPageStart + sub r0, r7, r0 + add r1, r0, #1 + add r0, r5, #4 + bl GetPageItemYOffset + ldr r2, [r5, #4] + mov r1, #6 + str r1, [r5, #0xdc] + sub r1, r1, #7 + str r1, [r5, #0xe0] + mov r1, #0 + str r1, [r5, #0xe4] + ldr r1, [r5, #0xc] + add r0, r2, r0 + sub r1, r8, r1 + str r1, [r5, #0xf0] + ldr r1, [r5, #0xc] + sub r0, r0, #2 + sub r1, sb, r1 + str r1, [r5, #0xf4] + ldr r1, [r5, #4] + sub r1, sl, r1 + str r1, [r5, #0xe8] + ldr r1, [r5, #4] + sub r0, r0, r1 + str r0, [r5, #0xec] + b _0202CA60 +_0202CA54: + add r0, r5, #4 + mov r1, #3 + bl PlayWindowInputSound +_0202CA60: + mov r1, r7 + add r0, r5, #4 + bl sub_02032684 + mov r8, #1 +_0202CA70: + ldr r0, [sp, #8] + cmp r0, #0 + bne _0202CA90 + add r1, sp, #8 + add r2, sp, #0xc + add r0, r5, #4 + bl sub_02033758 + orr r8, r8, r0 +_0202CA90: + add r0, r5, #4 + bl GetSelectedMenuItemIdx + mov r2, r0 + ldr r1, [sp, #8] + add r0, r5, #4 + mov r3, #0 + bl sub_020323F8 + orrs r0, r8, r0 + ldreqb r0, [r5, #0x1c4] + cmpeq r0, #0 + beq _0202CACC + mov r1, #0 + mov r0, r4 + strb r1, [r5, #0x1c4] + bl sub_0202CEA0 +_0202CACC: + ldr r0, [sp, #8] + tst r0, #1 + beq _0202CB44 + cmp r6, #0 + add r0, r5, #4 + beq _0202CAEC + bl sub_020324C4 + b _0202CAF0 +_0202CAEC: + bl IsMenuOptionActive +_0202CAF0: + cmp r0, #0 + beq _0202CB34 + ldr r0, [r5, #0xfc] + tst r0, #0x80000000 + bne _0202CB10 + add r0, r5, #4 + mov r1, #0 + bl PlayWindowInputSound +_0202CB10: + mov r1, #1 + mov r0, #0 + strb r1, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + sub r0, r0, #4 + str r0, [r4, #0xb8] + mov r0, #4 + str r0, [r5, #0x1ac] + b _0202CC94 +_0202CB34: + add r0, r5, #4 + mov r1, #2 + bl PlayWindowInputSound + b _0202CC94 +_0202CB44: + tst r0, #2 + beq _0202CB94 + add r0, r5, #4 + mov r1, #1 + bl PlayWindowInputSound + ldr r1, [r5, #0x1a0] + cmp r1, #0 + beq _0202CB74 + ldrsb r0, [r4, #0x10] + blx r1 + cmp r0, #0 + bne _0202CE40 +_0202CB74: + mov r0, #1 + strb r0, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + sub r0, r0, #6 + str r0, [r4, #0xb8] + mov r0, #4 + str r0, [r5, #0x1ac] + b _0202CC94 +_0202CB94: + tst r0, #0x1000 + beq _0202CBE8 + ldr r1, [r5, #0xfc] + tst r1, #0x2000 + beq _0202CBE8 + ldr r0, [r5, #0x174] + cmp r0, #0 + beq _0202CBC0 + add r0, r5, #4 + mov r1, #5 + bl PlayWindowInputSound +_0202CBC0: + mov r1, #1 + mov r0, #0 + strb r1, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + strb r1, [r5, #0x1c7] + sub r0, r0, #4 + str r0, [r4, #0xb8] + mov r0, #8 + str r0, [r5, #0x1ac] + b _0202CC94 +_0202CBE8: + tst r0, #0x2000 + beq _0202CC30 + ldr r1, [r5, #0xfc] + tst r1, #0x4000 + beq _0202CC30 + add r0, r5, #4 + mov r1, #0 + bl PlayWindowInputSound + mov r1, #1 + mov r0, #0 + strb r1, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + strb r1, [r5, #0x1c7] + sub r0, r0, #4 + str r0, [r4, #0xb8] + mov r0, #9 + str r0, [r5, #0x1ac] + b _0202CC94 +_0202CC30: + tst r0, #0x200 + ldrne r1, [r5, #0x18c] + cmpne r1, #0 + beq _0202CC74 + add r0, r5, #4 + mov r1, #5 + bl PlayWindowInputSound + mov r1, #1 + mov r0, #0 + strb r1, [r5, #0x1b0] + strb r0, [r5, #0x1b1] + strb r1, [r5, #0x1c7] + sub r0, r0, #4 + str r0, [r4, #0xb8] + mov r0, #0xa + str r0, [r5, #0x1ac] + b _0202CC94 +_0202CC74: + ldr r1, [r5, #0x19c] + cmp r1, #0 + beq _0202CC94 + blx r1 + cmp r0, #0 + beq _0202CC94 + mov r0, r4 + bl sub_0202CEA0 +_0202CC94: + ldrsb r0, [r4, #0x10] + add r1, r5, #4 + bl sub_02028948 + b _0202CE40 +_0202CCA4: + add r0, r5, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202CE40 + ldrb r0, [r5, #0x1c7] + cmp r0, #0 + movne r0, #0 + strneb r0, [r5, #0x1c7] + movne r0, #1 + strneb r0, [r5, #0x1c6] + ldr r0, [r5, #0x174] + cmp r0, #0 + beq _0202CD04 + ldrb r0, [r5, #0x1c6] + cmp r0, #0 + beq _0202CCEC + mov r0, r4 + bl sub_0202CEA0 +_0202CCEC: + mov r0, #0 + ldr r3, [r5, #0x174] + mov r1, r0 + mov r2, r0 + blx r3 + b _0202CE40 +_0202CD04: + mov r0, #1 + strb r0, [r5, #0x1c5] + str r0, [r5, #0x1ac] + b _0202CE40 +_0202CD14: + add r0, r5, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202CE40 + ldrb r0, [r5, #0x1c7] + cmp r0, #0 + movne r0, #0 + strneb r0, [r5, #0x1c7] + movne r0, #1 + strneb r0, [r5, #0x1c6] + ldr r0, [r5, #0x17c] + cmp r0, #0 + beq _0202CE40 + ldrb r0, [r5, #0x1c6] + cmp r0, #0 + beq _0202CD5C + mov r0, r4 + bl sub_0202CEA0 +_0202CD5C: + mov r0, #0 + ldr r3, [r5, #0x17c] + mov r1, r0 + mov r2, r0 + blx r3 + b _0202CE40 +_0202CD74: + add r0, r5, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202CE40 + ldrb r0, [r5, #0x1c7] + cmp r0, #0 + movne r0, #0 + strneb r0, [r5, #0x1c7] + movne r0, #1 + strneb r0, [r5, #0x1c6] + ldr r0, [r5, #0x18c] + cmp r0, #0 + beq _0202CE40 + ldrb r0, [r5, #0x1c6] + cmp r0, #0 + beq _0202CDBC + mov r0, r4 + bl sub_0202CEA0 +_0202CDBC: + ldr r0, [r5, #0x18c] + blx r0 + b _0202CE40 +_0202CDC8: + add r0, r5, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202CE40 + ldrb r0, [r5, #0x1b1] + cmp r0, #0 + bne _0202CE04 + ldr r0, [r5, #0xfc] + tst r0, #0x400000 + beq _0202CE04 + mov r0, r4 + bl sub_0202CEA0 + mov r0, #7 + str r0, [r5, #0x1ac] + b _0202CE40 +_0202CE04: + mov r0, #5 + str r0, [r5, #0x1ac] +_0202CE0C: + ldrsb r0, [r4, #0x10] + bl sub_0202812C + cmp r0, #0 + beq _0202CE40 + ldrb r0, [r5, #0x1b1] + cmp r0, #0 + mvnne r0, #4 + mvneq r0, #3 + str r0, [r4, #0xb8] + mov r0, #6 + str r0, [r5, #0x1ac] + mov r0, #1 + strb r0, [r5, #0x1c6] +_0202CE40: + mov r0, #0 + strb r0, [r5, #0x1c6] + cmp fp, #0 + beq _0202CE6C + ldr r0, [r5, #0x1ac] + cmp r0, #1 + bne _0202CE6C + mov r0, r4 + bl sub_0202CEA0 + mov r0, #1 + strb r0, [r5, #0x1c6] +_0202CE6C: + ldr r0, [r5, #0x1a8] + cmp r0, #0 + ldrne r0, [r5, #0x1ac] + cmpne r0, #8 + cmpne r0, #9 + beq _0202CE94 + add r0, r5, #4 + bl GetSelectedMenuItemIdx + ldr r1, [r5, #0x1a8] + blx r1 +_0202CE94: + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202CE9C: .word 0x00000408 + arm_func_end UpdateCollectionMenu + + arm_func_start sub_0202CEA0 +sub_0202CEA0: ; 0x0202CEA0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x410 + mov r5, r0 + ldr r6, [r5, #0xc] + add r0, r6, #4 + bl GetPageStart + mov r7, r0 + add r0, r6, #4 + bl GetNumItemsOnPage + ldr r1, [r6, #0xfc] + mov r8, r0 + tst r1, #0x200 + ldrne r0, [r6, #0x160] + addne r4, r0, r7 + ldrsb r0, [r5, #0x10] + moveq r4, #0 + bl sub_02027B1C + mov sb, #0 + mov fp, #0x42 + b _0202D020 +_0202CEF0: + ldr r3, [r6, #0x198] + add r0, sp, #0x10 + mov r1, r7 + add r2, sp, #0xc + blx r3 + mov sl, r0 + cmp r4, #0 + mov r1, #0 + beq _0202CF24 + ldrb r0, [r4] + add r4, r4, #1 + tst r0, #2 + movne r1, #1 +_0202CF24: + cmp sl, #0 + beq _0202CFF4 + cmp r1, #0 + add r0, r6, #4 + mov r1, sb + beq _0202CF6C + bl GetPageItemYOffset + str fp, [sp] + mov r2, r0 + ldr r0, [r6, #0x1b4] + mov r3, sl + str r0, [sp, #4] + ldr r0, [r6, #0x1b8] + str r0, [sp, #8] + ldrsb r0, [r5, #0x10] + ldr r1, [r6, #0x1bc] + bl sub_02026428 + b _0202CF94 +_0202CF6C: + bl GetPageItemYOffset + mov r2, r0 + ldr r0, [r6, #0x1b4] + mov r3, sl + str r0, [sp] + ldr r0, [r6, #0x1b8] + str r0, [sp, #4] + ldrsb r0, [r5, #0x10] + ldr r1, [r6, #0x1bc] + bl sub_02026358 +_0202CF94: + ldr r0, [sp, #0xc] + cmp r0, #0 + ble _0202D018 + ldr r1, [r6, #0x104] + mov sl, #0xc + cmp r1, #0 + ble _0202CFBC + ldr r0, [r6, #0xfc] + tst r0, #0x400 + subne sl, r1, #2 +_0202CFBC: + add r0, r6, #4 + mov r1, sb + bl GetPageItemYOffset + str sl, [sp] + mov r1, #0x24 + str r1, [sp, #4] + mov r2, r0 + ldr sl, [r6, #0x1bc] + ldr r3, [r6, #0x1c0] + ldrsb r0, [r5, #0x10] + sub r1, sl, #4 + sub r3, r3, sl + bl sub_02025D90 + b _0202D018 +_0202CFF4: + ldrb r0, [r6, #0x1c8] + cmp r0, #0 + beq _0202D018 + str sb, [r6, #0xc4] + ldr r0, [r6, #0xc0] + cmp r0, sb + subge r0, sb, #1 + strge r0, [r6, #0xc0] + b _0202D028 +_0202D018: + add sb, sb, #1 + add r7, r7, #1 +_0202D020: + cmp sb, r8 + blt _0202CEF0 +_0202D028: + ldr r4, [r6, #0x1a4] + cmp r4, #0 + beq _0202D04C + ldrsb r0, [r5, #0x10] + mov r3, sb + add r1, r6, #4 + sub r2, r7, sb + blx r4 + b _0202D058 +_0202D04C: + ldrsb r1, [r5, #0x10] + add r0, r6, #4 + bl sub_0202A03C +_0202D058: + ldrsb r0, [r5, #0x10] + bl UpdateWindow + add sp, sp, #0x410 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_0202CEA0 + + arm_func_start sub_0202D068 +sub_0202D068: ; 0x0202D068 + stmdb sp!, {r4, lr} + mov r4, r1 + bl GetWindowContents + str r4, [r0, #0x18c] + ldmia sp!, {r4, pc} + arm_func_end sub_0202D068 + + arm_func_start sub_0202D07C +sub_0202D07C: ; 0x0202D07C + stmdb sp!, {r4, lr} + mov r4, r1 + bl GetWindowContents + ldr r1, [r0, #0xfc] + ands r2, r1, #0x10000000 + cmpne r4, #0 + beq _0202D0B0 + eor r1, r1, #0x10000000 + str r1, [r0, #0xfc] + add r0, r0, #4 + mov r1, #0x10000000 + bl sub_02031C84 + ldmia sp!, {r4, pc} +_0202D0B0: + cmp r2, #0 + cmpeq r4, #0 + ldmneia sp!, {r4, pc} + ldr r2, [r0, #0xfc] + mov r1, #0x10000000 + orr r2, r2, #0x10000000 + str r2, [r0, #0xfc] + add r0, r0, #4 + bl sub_02031C74 + ldmia sp!, {r4, pc} + arm_func_end sub_0202D07C diff --git a/asm/main_0202D0EC.s b/asm/main_0202D0EC.s new file mode 100644 index 00000000..46fd7513 --- /dev/null +++ b/asm/main_0202D0EC.s @@ -0,0 +1,2449 @@ + .include "asm/macros.inc" + .include "main_0202D0EC.inc" + + .text + + arm_func_start sub_0202D0EC +sub_0202D0EC: ; 0x0202D0EC + stmdb sp!, {r3, r4, r5, lr} + bl GetWindowContents + mov r5, r0 + add r0, r5, #4 + bl GetSelectedItemOnPage + mov r4, r0 + add r0, r5, #4 + bl GetPageStart + add r0, r4, r0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0202D0EC + + arm_func_start IsCollectionMenuState3 +IsCollectionMenuState3: ; 0x0202D114 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r0, [r0, #0x1ac] + cmp r0, #3 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end IsCollectionMenuState3 + + arm_func_start sub_0202D134 +sub_0202D134: ; 0x0202D134 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetWindowContents + mov r4, r0 + mov r0, #1 + mov r2, #0 + strb r0, [r4, #0x1b0] + mov r0, r5 + sub r1, r2, #4 + strb r2, [r4, #0x1b1] + bl sub_0202830C + mov r0, #4 + str r0, [r4, #0x1ac] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0202D134 + + arm_func_start sub_0202D16C +sub_0202D16C: ; 0x0202D16C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + bl GetWindowContents + mov r4, r0 + cmp r5, #0 + ldr r0, [r4, #0xfc] + beq _0202D1BC + tst r0, #0x10000000 + ldmeqia sp!, {r3, r4, r5, pc} + bic r2, r0, #0x10000000 + add r0, r4, #4 + mov r1, #0x8000000 + str r2, [r4, #0xfc] + bl sub_02031C84 + add r0, r4, #4 + mov r1, #0x10000000 + bl sub_02031C84 + mov r0, #1 + strb r0, [r4, #0x1c4] + ldmia sp!, {r3, r4, r5, pc} +_0202D1BC: + tst r0, #0x10000000 + ldmneia sp!, {r3, r4, r5, pc} + orr r2, r0, #0x10000000 + add r0, r4, #4 + mov r1, #0x8000000 + str r2, [r4, #0xfc] + bl sub_02031C74 + add r0, r4, #4 + mov r1, #0x10000000 + bl sub_02031C74 + mov r0, #1 + strb r0, [r4, #0x1c4] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0202D16C + + arm_func_start CreateOptionsMenu +CreateOptionsMenu: ; 0x0202D1F0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x12c + mov r5, r1 + orr r5, r5, #4 + mov r1, #0 + str r1, [sp, #8] + tst r5, #0x8000 + mov sl, r3 + mov r4, r2 + mov r6, r0 + ldr r8, [sp, #0x154] + orrne r5, r5, #0x20000 + mov r2, sl + ldr r1, [sp, #8] + b _0202D238 +_0202D22C: + add r1, r1, #1 + str r1, [sp, #8] + add r2, r2, #0xc +_0202D238: + ldrh r0, [r2] + cmp r0, #0 + bne _0202D22C + ldr r1, [sp, #8] + mov r0, #0x10c + add r1, r1, #1 + mul r0, r1, r0 + mov r1, #8 + bl MemAlloc + mov fp, r0 + mov r7, fp + and sb, r5, #0x20 + b _0202D300 +_0202D26C: + mov r0, r7 + bl GetStringFromFileVeneer + ldr r0, [sl, #8] + str r0, [r7, #0x100] + ldr r0, [sl, #8] + cmp r0, #0 + beq _0202D2C4 + ldr r1, [r7, #0x100] + mov r2, #0 + b _0202D298 +_0202D294: + add r2, r2, #1 +_0202D298: + ldrh r0, [r1], #2 + cmp r0, #0 + bne _0202D294 + ldr r0, [sl, #4] + cmp r0, #0 + streq r2, [r7, #0x104] + beq _0202D2CC + cmp r0, r2 + movle r2, r0 + str r2, [r7, #0x104] + b _0202D2CC +_0202D2C4: + ldr r0, [sl, #4] + str r0, [r7, #0x104] +_0202D2CC: + cmp sb, #0 + beq _0202D2EC + ldr r1, [r8] + ldr r0, [r7, #0x104] + cmp r1, r0 + movge r1, #0 + str r1, [r7, #0x108] + b _0202D2F4 +_0202D2EC: + mov r0, #0 + str r0, [r7, #0x108] +_0202D2F4: + add sl, sl, #0xc + add r7, r7, #0x10c + add r8, r8, #4 +_0202D300: + ldrh r1, [sl] + cmp r1, #0 + bne _0202D26C + mov r2, #0 + strb r2, [r7] + str r2, [r7, #0x100] + str r2, [r7, #0x104] + mov r0, #0x1b8 + mov r1, #8 + str r2, [r7, #0x108] + bl MemAlloc + cmp r6, #0 + mov r7, r0 + addne sb, sp, #0x1c + ldmneia r6, {r0, r1, r2, r3} + stmneia sb, {r0, r1, r2, r3} + ldrne r0, _0202D528 ; =UpdateOptionsMenu + mov r8, fp + strne r0, [sp, #0x1c] + bne _0202D364 + ldr r0, _0202D52C ; =OPTIONS_MENU_DEFAULT_WINDOW_PARAMS + add r6, sp, #0x1c + ldmia r0, {r0, r1, r2, r3} + stmia r6, {r0, r1, r2, r3} + orr r5, r5, #0x300000 +_0202D364: + mov r6, #0 + mov sb, r6 + str r7, [sp, #0x28] + b _0202D3CC +_0202D374: + mov r0, r8 + bl sub_020265A8 + cmp r0, r6 + ldr sl, [r8, #0x100] + movgt r6, r0 + cmp sl, #0 + beq _0202D3C0 + b _0202D3B0 +_0202D394: + ldrh r1, [sl], #2 + add r0, sp, #0x2c + bl GetStringFromFileVeneer + add r0, sp, #0x2c + bl sub_020265A8 + cmp r0, sb + movgt sb, r0 +_0202D3B0: + ldrh r0, [sl] + cmp r0, #0 + bne _0202D394 + b _0202D3C8 +_0202D3C0: + cmp sb, #0x30 + movlt sb, #0x30 +_0202D3C8: + add r8, r8, #0x10c +_0202D3CC: + mov r0, r8 + bl IsEmptyString + cmp r0, #0 + beq _0202D374 + ldrb r0, [sp, #0x22] + cmp r0, #0 + bne _0202D400 + add r2, r6, sb + mov r0, r5 + mov r1, r4 + add r2, r2, #0x34 + bl sub_02031A5C + strb r0, [sp, #0x22] +_0202D400: + str r6, [r7, #0x1a8] + add r0, sb, #4 + str r0, [r7, #0x1ac] + ldr r0, [r7, #0x1a8] + add r2, sp, #8 + add r1, r0, #0x15 + str r1, [r7, #0x1b0] + ldr r0, [r7, #0x1ac] + add r3, sp, #0x150 + add r0, r1, r0 + add r0, r0, #0xe + str r0, [r7, #0x1b4] + ldr r0, [sp, #0x150] + cmp r0, #0 + ldreq r0, [sp, #8] + streq r0, [sp, #0x150] + ldrb r0, [sp, #0x23] + cmp r0, #0 + mov r0, r5 + bne _0202D460 + mov r1, r4 + bl CalcMenuHeightDiv8__02031AA4 + strb r0, [sp, #0x23] + b _0202D468 +_0202D460: + mov r1, r4 + bl CalcMenuHeightDiv8__02031AA4 +_0202D468: + tst r5, #0x200000 + ldrneb r1, [sp, #0x20] + ldrneb r0, [sp, #0x22] + subne r0, r1, r0 + strneb r0, [sp, #0x20] + tst r5, #0x100000 + ldrneb r1, [sp, #0x21] + ldrneb r0, [sp, #0x23] + subne r0, r1, r0 + strneb r0, [sp, #0x21] + ldr r0, _0202D528 ; =UpdateOptionsMenu + cmp r4, #0 + str r0, [r7] + str r5, [r7, #0xfc] + beq _0202D4C4 + add r8, r7, #0x100 + mov r6, #9 +_0202D4AC: + ldmia r4!, {r0, r1, r2, r3} + stmia r8!, {r0, r1, r2, r3} + subs r6, r6, #1 + bne _0202D4AC + ldmia r4, {r0, r1} + stmia r8, {r0, r1} +_0202D4C4: + ldr r0, [sp, #0x154] + str fp, [r7, #0x198] + str r0, [r7, #0x19c] + mov r2, #0 + str r2, [r7, #0x1a0] + strb r2, [r7, #0x1a4] + add r0, sp, #0x1c + mov r1, #3 + strb r2, [r7, #0x1a5] + bl NewWindowScreenCheck + add r1, sp, #0xc + mov r6, r0 + bl GetWindowRectangle + ldr r0, [sp, #8] + add r3, sp, #0xc + str r0, [sp] + ldr r4, [sp, #0x150] + mov r1, r5 + add r0, r7, #4 + add r2, r7, #0x100 + str r4, [sp, #4] + bl InitWindowInput + mov r0, r6 + add sp, sp, #0x12c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202D528: .word UpdateOptionsMenu +_0202D52C: .word OPTIONS_MENU_DEFAULT_WINDOW_PARAMS + arm_func_end CreateOptionsMenu + + arm_func_start CloseOptionsMenu +CloseOptionsMenu: ; 0x0202D530 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetWindowContents + mov r4, r0 + ldr r0, [r4, #0x198] + bl MemFree + mov r0, r4 + bl MemFree + mov r0, r5 + bl DeleteWindow + ldmia sp!, {r3, r4, r5, pc} + arm_func_end CloseOptionsMenu + + arm_func_start IsOptionsMenuActive +IsOptionsMenuActive: ; 0x0202D55C + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r0, [r0, #0x1a0] + cmp r0, #6 + cmpne r0, #7 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsOptionsMenuActive + + arm_func_start CheckOptionsMenuField0x1A4 +CheckOptionsMenuField0x1A4: ; 0x0202D57C + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r0, [r0, #0x1a4] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end CheckOptionsMenuField0x1A4 + + arm_func_start sub_0202D59C +sub_0202D59C: ; 0x0202D59C + stmdb sp!, {r3, lr} + bl GetWindowContents + add r0, r0, #4 + bl GetSelectedItemOnPage + ldmia sp!, {r3, pc} + arm_func_end sub_0202D59C + + arm_func_start GetOptionsMenuStates +GetOptionsMenuStates: ; 0x0202D5B0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + bl GetWindowContents + ldr r4, [r0, #0x198] + b _0202D5D0 +_0202D5C4: + ldr r0, [r4, #0x108] + add r4, r4, #0x10c + str r0, [r5], #4 +_0202D5D0: + mov r0, r4 + bl IsEmptyString + cmp r0, #0 + beq _0202D5C4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end GetOptionsMenuStates + + arm_func_start GetOptionsMenuResult +GetOptionsMenuResult: ; 0x0202D5E4 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r1, [r0, #0x1a4] + cmp r1, #0 + beq _0202D610 + ldrb r0, [r0, #0x1a5] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} +_0202D610: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end GetOptionsMenuResult + + arm_func_start UpdateOptionsMenu +UpdateOptionsMenu: ; 0x0202D618 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x30 + mov r7, r0 + ldr r4, [r7, #0xc] + ldr r0, [r4, #0x1a0] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0202DA5C +_0202D638: ; jump table + b _0202D650 ; case 0 + b _0202D668 ; case 1 + b _0202D690 ; case 2 + b _0202D6E8 ; case 3 + b _0202D9EC ; case 4 + b _0202DA30 ; case 5 +_0202D650: + ldrsb r0, [r7, #0x10] + bl sub_0202810C + cmp r0, #0 + beq _0202DA5C + mov r0, #2 + str r0, [r4, #0x1a0] +_0202D668: + ldr r0, [r4, #0x1a0] + cmp r0, #1 + bne _0202D690 + ldrb r0, [r7, #8] + bl sub_020287C4 + ldrsb r0, [r7, #0x10] + bl UpdateWindow + mov r0, #2 + str r0, [r4, #0x1a0] + b _0202DA5C +_0202D690: + mov r0, r7 + bl sub_0202DA64 + ldr r0, [r4, #0xfc] + tst r0, #0x800000 + beq _0202D6C8 + mov r0, #7 + str r0, [r4, #0x1a0] + mov r1, #1 + mov r0, #0 + strb r1, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #4 + str r0, [r7, #0xb8] + b _0202DA5C +_0202D6C8: + mov r1, #3 + mov r0, #0 + str r1, [r4, #0x1a0] + strb r0, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #1 + str r0, [r7, #0xb8] + b _0202DA5C +_0202D6E8: + add r1, sp, #8 + add r2, sp, #0xc + add r0, r4, #4 + mov r3, #1 + bl sub_02031C98 + ldr r1, [sp, #8] + mov r5, r0 + cmp r1, #0 + bne _0202D760 + ldr r3, [r4, #0x1b0] + add r1, sp, #0xc + add r0, r3, #0xe + str r0, [sp] + mov r6, #0 + add r0, r4, #4 + mov r2, #2 + str r6, [sp, #4] + bl sub_02032160 + movs r6, r0 + bmi _0202D760 + mov r1, r6 + add r0, r4, #4 + bl sub_02032684 + ldr r0, [sp, #8] + mov r1, r6 + orr r2, r0, #0x40 + add r0, r4, #4 + str r2, [sp, #8] + bl sub_020320A8 + mov r5, #1 +_0202D760: + ldr r0, [sp, #8] + cmp r0, #0 + bne _0202D7C0 + ldr r3, [r4, #0x1b4] + add r1, sp, #0xc + add r0, r3, #0xe + str r0, [sp] + mov r6, #0 + add r0, r4, #4 + mov r2, #2 + str r6, [sp, #4] + bl sub_02032160 + movs r6, r0 + bmi _0202D7C0 + mov r1, r6 + add r0, r4, #4 + bl sub_02032684 + ldr r1, [sp, #8] + add r0, r4, #4 + orr r2, r1, #0x80 + add r1, r6, #0x3e8 + str r2, [sp, #8] + bl sub_020320A8 + mov r5, #1 +_0202D7C0: + ldr r0, [sp, #8] + cmp r0, #0 + bne _0202D7E0 + add r1, sp, #8 + add r2, sp, #0xc + add r0, r4, #4 + bl sub_02033758 + orr r5, r5, r0 +_0202D7E0: + add r0, r4, #4 + bl GetSelectedMenuItemIdx + ldr r2, [r4, #0xfc] + ldr r3, [r4, #0x198] + mov r1, #0x10c + mla r6, r0, r1, r3 + tst r2, #0x200 + ldrne r1, [r4, #0x160] + ldrneb r0, [r1, r0] + moveq r0, #0 + and r0, r0, #0xff + tst r0, #1 + bne _0202D8E8 + ldr r0, [sp, #8] + tst r0, #0x40 + beq _0202D878 + ldr r0, [r6, #0x108] + cmp r0, #0 + add r0, r4, #4 + ble _0202D86C + mov r1, #3 + bl PlayWindowInputSound + ldr r0, [sp, #8] + tst r0, #8 + ldr r0, [r6, #0x108] + beq _0202D85C + subs r0, r0, #0xa + str r0, [r6, #0x108] + movmi r0, #0 + strmi r0, [r6, #0x108] + b _0202D864 +_0202D85C: + sub r0, r0, #1 + str r0, [r6, #0x108] +_0202D864: + mov r5, #1 + b _0202D900 +_0202D86C: + mov r1, #2 + bl PlayWindowInputSound + b _0202D900 +_0202D878: + tst r0, #0x80 + beq _0202D900 + ldr r0, [r6, #0x104] + ldr r1, [r6, #0x108] + sub r0, r0, #1 + cmp r1, r0 + add r0, r4, #4 + bge _0202D8DC + mov r1, #3 + bl PlayWindowInputSound + ldr r0, [sp, #8] + tst r0, #8 + ldr r0, [r6, #0x108] + beq _0202D8CC + add r1, r0, #0xa + str r1, [r6, #0x108] + ldr r0, [r6, #0x104] + sub r0, r0, #1 + cmp r1, r0 + strgt r0, [r6, #0x108] + b _0202D8D4 +_0202D8CC: + add r0, r0, #1 + str r0, [r6, #0x108] +_0202D8D4: + mov r5, #1 + b _0202D900 +_0202D8DC: + mov r1, #2 + bl PlayWindowInputSound + b _0202D900 +_0202D8E8: + ldr r0, [sp, #8] + tst r0, #0xc0 + beq _0202D900 + add r0, r4, #4 + mov r1, #2 + bl PlayWindowInputSound +_0202D900: + cmp r5, #0 + beq _0202D910 + mov r0, r7 + bl sub_0202DA64 +_0202D910: + add r0, r4, #4 + bl GetSelectedMenuItemIdx + mov r2, r0 + ldr r1, [r4, #0x198] + mov r0, #0x10c + mla r0, r2, r0, r1 + ldr r1, [sp, #8] + ldr r3, [r0, #0x108] + add r0, r4, #4 + bl sub_020323F8 + ldr r0, [sp, #8] + tst r0, #1 + beq _0202D9AC + add r0, r4, #4 + bl IsMenuOptionActive + cmp r0, #0 + beq _0202D9DC + ldr r5, [r4, #0x198] + ldr r6, [r4, #0x19c] + b _0202D96C +_0202D960: + ldr r0, [r5, #0x108] + add r5, r5, #0x10c + str r0, [r6], #4 +_0202D96C: + mov r0, r5 + bl IsEmptyString + cmp r0, #0 + beq _0202D960 + add r0, r4, #4 + mov r1, #0 + bl PlayWindowInputSound + mov r1, #1 + mov r0, #0 + strb r1, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #4 + str r0, [r7, #0xb8] + mov r0, #4 + str r0, [r4, #0x1a0] + b _0202D9DC +_0202D9AC: + tst r0, #2 + beq _0202D9DC + add r0, r4, #4 + mov r1, #1 + bl PlayWindowInputSound + mov r0, #1 + strb r0, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #6 + str r0, [r7, #0xb8] + mov r0, #4 + str r0, [r4, #0x1a0] +_0202D9DC: + ldrsb r0, [r7, #0x10] + add r1, r4, #4 + bl sub_02028948 + b _0202DA5C +_0202D9EC: + add r0, r4, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202DA5C + ldrb r0, [r4, #0x1a5] + cmp r0, #0 + bne _0202DA28 + ldr r0, [r4, #0xfc] + tst r0, #0x400000 + beq _0202DA28 + mov r0, r7 + bl sub_0202DA64 + mov r0, #7 + str r0, [r4, #0x1a0] + b _0202DA5C +_0202DA28: + mov r0, #5 + str r0, [r4, #0x1a0] +_0202DA30: + ldrsb r0, [r7, #0x10] + bl sub_0202812C + cmp r0, #0 + beq _0202DA5C + ldrb r0, [r4, #0x1a5] + cmp r0, #0 + mvnne r0, #4 + mvneq r0, #3 + str r0, [r7, #0xb8] + mov r0, #6 + str r0, [r4, #0x1a0] +_0202DA5C: + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end UpdateOptionsMenu + + arm_func_start sub_0202DA64 +sub_0202DA64: ; 0x0202DA64 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x160 + mov sl, r0 + ldr r4, [sl, #0xc] + add r0, r4, #4 + bl GetPageStart + mov r5, r0 + add r0, r4, #4 + bl GetNumItemsOnPage + ldr r2, [r4, #0xfc] + str r0, [sp, #0xc] + tst r2, #0x200 + ldrne r0, [r4, #0x160] + ldr r3, [r4, #0x198] + addne sb, r0, r5 + mov r1, #0x10c + add r0, r4, #4 + mla r6, r5, r1, r3 + moveq sb, #0 + bl sub_020320C0 + mov fp, r0 + ldrsb r0, [sl, #0x10] + bl sub_02027B1C + ldr r0, [sp, #0xc] + mov r7, #0 + cmp r0, #0 + ble _0202DC1C + b _0202DC10 +_0202DAD4: + add r0, r4, #4 + mov r1, r7 + bl GetPageItemYOffset + mov r8, r0 + mov r0, #1 + cmp sb, #0 + mov r1, #0 + str r0, [sp, #8] + beq _0202DB14 + ldrb r0, [sb] + add sb, sb, #1 + tst r0, #2 + movne r1, #1 + tst r0, #1 + movne r0, #0 + strne r0, [sp, #8] +_0202DB14: + cmp r1, #0 + movne r0, #0x42 + moveq r0, #0x44 + and r0, r0, #0xff + str r0, [sp, #4] + str r0, [sp] + ldrsb r0, [sl, #0x10] + mov r1, #0xd + mov r2, r8 + mov r3, r6 + bl sub_020263C8 + ldr r2, [r6, #0x100] + add r0, sp, #0x60 + cmp r2, #0 + ldr r1, [r6, #0x108] + beq _0202DB64 + mov r1, r1, lsl #1 + ldrh r1, [r2, r1] + bl GetStringFromFileVeneer + b _0202DB80 +_0202DB64: + str r1, [sp, #0x34] + add r1, sp, #0x10 + str r1, [sp] + ldr r2, _0202DC38 ; =_0209AEE0 + ldr r3, _0202DC3C ; =0x0000C402 + mov r1, #0x100 + bl PreprocessString +_0202DB80: + add r0, sp, #0x60 + bl sub_020265A8 + ldr r1, [sp, #4] + mov ip, r0 + str r1, [sp] + ldr r3, [r4, #0x1ac] + ldr r1, [r4, #0x1b0] + sub r3, r3, ip + add r3, r3, r3, lsr #31 + add r1, r1, r3, asr #1 + ldrsb r0, [sl, #0x10] + mov r2, r8 + add r1, r1, #0xe + add r3, sp, #0x60 + bl sub_020263C8 + ldr r0, [sp, #8] + cmp r0, #0 + beq _0202DC04 + cmp r5, fp + ldreq r3, _0202DC40 ; =_0209AEEC + ldrsb r0, [sl, #0x10] + ldrne r3, _0202DC44 ; =_0209AEF4 + ldr r1, [r4, #0x1b0] + mov r2, r8 + bl DrawTextInWindow + add r0, r5, #0x3e8 + cmp r0, fp + ldreq r3, _0202DC48 ; =_0209AEFC + ldrsb r0, [sl, #0x10] + ldrne r3, _0202DC4C ; =_0209AF04 + ldr r1, [r4, #0x1b4] + mov r2, r8 + bl DrawTextInWindow +_0202DC04: + add r7, r7, #1 + add r5, r5, #1 + add r6, r6, #0x10c +_0202DC10: + ldr r0, [sp, #0xc] + cmp r7, r0 + blt _0202DAD4 +_0202DC1C: + ldrsb r1, [sl, #0x10] + add r0, r4, #4 + bl sub_0202A03C + ldrsb r0, [sl, #0x10] + bl UpdateWindow + add sp, sp, #0x160 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202DC38: .word _0209AEE0 +_0202DC3C: .word 0x0000C402 +_0202DC40: .word _0209AEEC +_0202DC44: .word _0209AEF4 +_0202DC48: .word _0209AEFC +_0202DC4C: .word _0209AF04 + arm_func_end sub_0202DA64 + + arm_func_start CreateDebugMenu +CreateDebugMenu: ; 0x0202DC50 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x30 + mov r7, r3 + mov r5, r1 + mov sl, r2 + mov r8, r0 + mov r1, r7 + mov r2, #0 + b _0202DC7C +_0202DC74: + add r1, r1, #2 + add r2, r2, #1 +_0202DC7C: + ldrh r0, [r1] + cmp r0, #0 + bne _0202DC74 + add r0, r2, #1 + add r0, r0, r0, lsl #8 + mov r1, #8 + bl MemAlloc + mov r4, r0 + mov r6, r4 + b _0202DCB8 +_0202DCA4: + mov r0, r6 + bl GetStringFromFileVeneer + add r0, r6, #1 + add r7, r7, #2 + add r6, r0, #0x100 +_0202DCB8: + ldrh r1, [r7] + cmp r1, #0 + bne _0202DCA4 + mov r0, #0 + strb r0, [r6] + ldr r2, [sp, #0x58] + mov r0, #0x3b4 + mov r1, #8 + str r2, [sp, #0xc] + bl MemAlloc + mov r1, #0 + cmp r8, #0 + addne fp, sp, #0x10 + mov r7, r0 + str r1, [sp, #8] + ldmneia r8, {r0, r1, r2, r3} + stmneia fp, {r0, r1, r2, r3} + ldrne r0, _0202DEE8 ; =UpdateDebugMenu + mov sb, r4 + orr r5, r5, #4 + ldr r6, [sp, #0x5c] + strne r0, [sp, #0x10] + bne _0202DD28 + ldr r0, _0202DEEC ; =DEBUG_MENU_DEFAULT_WINDOW_PARAMS + add r8, sp, #0x10 + ldmia r0, {r0, r1, r2, r3} + stmia r8, {r0, r1, r2, r3} + orr r5, r5, #0x300000 +_0202DD28: + str r7, [sp, #0x1c] + mov r8, #0 + b _0202DD4C +_0202DD34: + mov r0, sb + bl sub_020265A8 + cmp r0, r8 + movgt r8, r0 + add r0, sb, #1 + add sb, r0, #0x100 +_0202DD4C: + mov r0, sb + bl IsEmptyString + cmp r0, #0 + beq _0202DD34 + ldrb r0, [sp, #0x16] + cmp r0, #0 + bne _0202DD7C + mov r0, r5 + mov r1, sl + add r2, r8, #0x40 + bl sub_02031A5C + strb r0, [sp, #0x16] +_0202DD7C: + str r8, [r7, #0x1a8] + mov sb, r4 + and r8, r5, #0x20 + mov fp, #0 + b _0202DDB8 +_0202DD90: + cmp r8, #0 + ldrneb r0, [r6] + add r6, r6, #1 + strneb r0, [sb, #0x100] + streqb fp, [sb, #0x100] + ldr r1, [sp, #8] + add r0, sb, #1 + add r1, r1, #1 + str r1, [sp, #8] + add sb, r0, #0x100 +_0202DDB8: + mov r0, sb + bl IsEmptyString + cmp r0, #0 + beq _0202DD90 + ldrb r0, [sp, #0x17] + add r2, sp, #8 + add r3, sp, #0xc + cmp r0, #0 + mov r0, r5 + bne _0202DDF0 + mov r1, sl + bl CalcMenuHeightDiv8__02031AA4 + strb r0, [sp, #0x17] + b _0202DDF8 +_0202DDF0: + mov r1, sl + bl CalcMenuHeightDiv8__02031AA4 +_0202DDF8: + tst r5, #0x200000 + ldrneb r1, [sp, #0x14] + ldrneb r0, [sp, #0x16] + subne r0, r1, r0 + strneb r0, [sp, #0x14] + tst r5, #0x100000 + ldrneb r1, [sp, #0x15] + ldrneb r0, [sp, #0x17] + subne r0, r1, r0 + strneb r0, [sp, #0x15] + ldr r0, _0202DEE8 ; =UpdateDebugMenu + cmp sl, #0 + str r0, [r7] + str r5, [r7, #0xfc] + beq _0202DE54 + add r8, r7, #0x100 + mov r6, #9 +_0202DE3C: + ldmia sl!, {r0, r1, r2, r3} + stmia r8!, {r0, r1, r2, r3} + subs r6, r6, #1 + bne _0202DE3C + ldmia sl, {r0, r1} + stmia r8, {r0, r1} +_0202DE54: + ldr r0, [sp, #0x5c] + str r4, [r7, #0x198] + str r0, [r7, #0x19c] + mov r2, #0 + str r2, [r7, #0x1a0] + strb r2, [r7, #0x1a4] +#ifdef JAPAN + add r0, r7, #0x1ac + mov r1, #0x3bc +#else + ldr r1, _0202DEF0 ; =0x00003C65 + add r0, r7, #0x1ac +#endif + strb r2, [r7, #0x1a5] + bl GetStringFromFileVeneer + ldr r1, _0202DEF4 ; =0x00003C66 + add r0, r7, #0x2ac + bl GetStringFromFileVeneer + add r0, r7, #0x1ac + bl sub_020265A8 + str r0, [r7, #0x3ac] + add r0, r7, #0x2ac + bl sub_020265A8 + str r0, [r7, #0x3b0] + add r0, sp, #0x10 + mov r1, #3 + bl NewWindowScreenCheck + add r1, sp, #0x20 + mov r6, r0 + bl GetWindowRectangle + ldr r2, [sp, #8] + mov r1, r5 + str r2, [sp] + ldr r4, [sp, #0xc] + add r0, r7, #4 + add r2, r7, #0x100 + add r3, sp, #0x20 + str r4, [sp, #4] + bl InitWindowInput + mov r0, r6 + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202DEE8: .word UpdateDebugMenu +_0202DEEC: .word DEBUG_MENU_DEFAULT_WINDOW_PARAMS +#if defined(EUROPE) +_0202DEF0: .word 0x00003C67 +_0202DEF4: .word 0x00003C68 +#elif defined(JAPAN) +_0202DEF4: .word 0x000003BD +#else +_0202DEF0: .word 0x00003C65 +_0202DEF4: .word 0x00003C66 +#endif + arm_func_end CreateDebugMenu + + arm_func_start CloseDebugMenu +CloseDebugMenu: ; 0x0202DEF8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetWindowContents + mov r4, r0 + ldr r0, [r4, #0x198] + bl MemFree + mov r0, r4 + bl MemFree + mov r0, r5 + bl DeleteWindow + ldmia sp!, {r3, r4, r5, pc} + arm_func_end CloseDebugMenu + + arm_func_start IsDebugMenuActive +IsDebugMenuActive: ; 0x0202DF24 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r0, [r0, #0x1a0] + cmp r0, #6 + cmpne r0, #7 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsDebugMenuActive + + arm_func_start CheckDebugMenuField0x1A4 +CheckDebugMenuField0x1A4: ; 0x0202DF44 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r0, [r0, #0x1a4] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end CheckDebugMenuField0x1A4 + + arm_func_start sub_0202DF64 +sub_0202DF64: ; 0x0202DF64 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r1, [r0, #0x1a4] + cmp r1, #0 + beq _0202DF90 + ldrb r0, [r0, #0x1a5] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} +_0202DF90: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end sub_0202DF64 + + arm_func_start UpdateDebugMenu +UpdateDebugMenu: ; 0x0202DF98 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x30 + mov r7, r0 + ldr r4, [r7, #0xc] + ldr r0, [r4, #0x1a0] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0202E294 +_0202DFB8: ; jump table + b _0202DFD0 ; case 0 + b _0202DFE8 ; case 1 + b _0202E010 ; case 2 + b _0202E068 ; case 3 + b _0202E224 ; case 4 + b _0202E268 ; case 5 +_0202DFD0: + ldrsb r0, [r7, #0x10] + bl sub_0202810C + cmp r0, #0 + beq _0202E294 + mov r0, #2 + str r0, [r4, #0x1a0] +_0202DFE8: + ldr r0, [r4, #0x1a0] + cmp r0, #1 + bne _0202E010 + ldrb r0, [r7, #8] + bl sub_020287C4 + ldrsb r0, [r7, #0x10] + bl UpdateWindow + mov r0, #2 + str r0, [r4, #0x1a0] + b _0202E294 +_0202E010: + mov r0, r7 + bl sub_0202E29C + ldr r0, [r4, #0xfc] + tst r0, #0x800000 + beq _0202E048 + mov r0, #7 + str r0, [r4, #0x1a0] + mov r1, #1 + mov r0, #0 + strb r1, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #4 + str r0, [r7, #0xb8] + b _0202E294 +_0202E048: + mov r1, #3 + mov r0, #0 + str r1, [r4, #0x1a0] + strb r0, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #1 + str r0, [r7, #0xb8] + b _0202E294 +_0202E068: + add r1, sp, #8 + add r2, sp, #0xc + add r0, r4, #4 + mov r3, #1 + bl sub_02031C98 + ldr r1, [sp, #8] + mov r5, r0 + cmp r1, #0 + bne _0202E0CC + mov r3, #0 + add r1, sp, #0xc + str r3, [sp] + mov r6, #1 + add r0, r4, #4 + mov r2, #2 + str r6, [sp, #4] + bl sub_02032160 + movs r1, r0 + bmi _0202E0CC + add r0, r4, #4 + bl sub_02032684 + ldr r0, [sp, #8] + mov r5, r6 + orr r0, r0, #0x2000 + str r0, [sp, #8] +_0202E0CC: + ldr r0, [sp, #8] + cmp r0, #0 + bne _0202E0EC + add r1, sp, #8 + add r2, sp, #0xc + add r0, r4, #4 + bl sub_02033758 + orr r5, r5, r0 +_0202E0EC: + add r0, r4, #4 + bl GetSelectedMenuItemIdx + ldr r1, [r4, #0xfc] + ldr r3, [r4, #0x198] + tst r1, #0x200 + ldrne r1, [r4, #0x160] + add r2, r0, r0, lsl #8 + ldrneb r1, [r1, r0] + ldr r0, [sp, #8] + add r6, r3, r2 + moveq r1, #0 + and r1, r1, #0xff + tst r0, #0x2200 + beq _0202E15C + tst r1, #1 + add r0, r4, #4 + bne _0202E154 + mov r1, #3 + bl PlayWindowInputSound + ldrb r0, [r6, #0x100] + mov r5, #1 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + strb r0, [r6, #0x100] + b _0202E15C +_0202E154: + mov r1, #2 + bl PlayWindowInputSound +_0202E15C: + cmp r5, #0 + beq _0202E16C + mov r0, r7 + bl sub_0202E29C +_0202E16C: + ldr r0, [sp, #8] + tst r0, #1 + beq _0202E1E4 + add r0, r4, #4 + bl IsMenuOptionActive + cmp r0, #0 + beq _0202E214 + ldr r5, [r4, #0x198] + ldr r6, [r4, #0x19c] + b _0202E1A4 +_0202E194: + ldrb r1, [r5, #0x100] + add r0, r5, #1 + add r5, r0, #0x100 + strb r1, [r6], #1 +_0202E1A4: + mov r0, r5 + bl IsEmptyString + cmp r0, #0 + beq _0202E194 + add r0, r4, #4 + mov r1, #0 + bl PlayWindowInputSound + mov r1, #1 + mov r0, #0 + strb r1, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #4 + str r0, [r7, #0xb8] + mov r0, #4 + str r0, [r4, #0x1a0] + b _0202E214 +_0202E1E4: + tst r0, #2 + beq _0202E214 + add r0, r4, #4 + mov r1, #1 + bl PlayWindowInputSound + mov r0, #1 + strb r0, [r4, #0x1a4] + strb r0, [r4, #0x1a5] + sub r0, r0, #6 + str r0, [r7, #0xb8] + mov r0, #4 + str r0, [r4, #0x1a0] +_0202E214: + ldrsb r0, [r7, #0x10] + add r1, r4, #4 + bl sub_02028948 + b _0202E294 +_0202E224: + add r0, r4, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202E294 + ldrb r0, [r4, #0x1a5] + cmp r0, #0 + bne _0202E260 + ldr r0, [r4, #0xfc] + tst r0, #0x400000 + beq _0202E260 + mov r0, r7 + bl sub_0202E29C + mov r0, #7 + str r0, [r4, #0x1a0] + b _0202E294 +_0202E260: + mov r0, #5 + str r0, [r4, #0x1a0] +_0202E268: + ldrsb r0, [r7, #0x10] + bl sub_0202812C + cmp r0, #0 + beq _0202E294 + ldrb r0, [r4, #0x1a5] + cmp r0, #0 + mvnne r0, #4 + mvneq r0, #3 + str r0, [r7, #0xb8] + mov r0, #6 + str r0, [r4, #0x1a0] +_0202E294: + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end UpdateDebugMenu + + arm_func_start sub_0202E29C +sub_0202E29C: ; 0x0202E29C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + ldr r4, [sl, #0xc] + add r0, r4, #4 + bl GetPageStart + mov r7, r0 + add r0, r4, #4 + bl GetNumItemsOnPage + ldr r1, [r4, #0xfc] + mov r5, r0 + tst r1, #0x200 + ldrne r0, [r4, #0x160] + ldr r3, [r4, #0x198] + addne r8, r0, r7 + add r2, r7, r7, lsl #8 + ldrsb r0, [sl, #0x10] + add r6, r3, r2 + moveq r8, #0 + bl sub_02027B1C + cmp r5, #0 + mov r7, #0 + ble _0202E3B0 + add r0, r4, #0x1ac + str r0, [sp, #8] + b _0202E3A8 +_0202E304: + add r0, r4, #4 + mov r1, r7 + bl GetPageItemYOffset + str r0, [sp, #4] + ldrb r0, [r6, #0x100] + mov r1, #0 + cmp r0, #0 + movne sb, #1 + moveq sb, #0 + cmp r8, #0 + beq _0202E340 + ldrb r0, [r8] + add r8, r8, #1 + tst r0, #2 + movne r1, #1 +_0202E340: + cmp r1, #0 + movne r0, #0x42 + moveq r0, #0x44 + and fp, r0, #0xff + str fp, [sp] + ldrsb r0, [sl, #0x10] + ldr r2, [sp, #4] + mov r1, #0xd + mov r3, r6 + bl sub_020263C8 + str fp, [sp] + add r3, r4, sb, lsl #2 + ldr fp, [r3, #0x3ac] + ldr r3, [sp, #8] + ldr r1, [r4, #0x1a8] + add r3, r3, sb, lsl #8 + rsb sb, fp, #0x30 + ldrsb r0, [sl, #0x10] + ldr r2, [sp, #4] + add r1, r1, #0xd + add sb, sb, sb, lsr #31 + add r1, r1, sb, asr #1 + bl sub_020263C8 + add r0, r6, #1 + add r7, r7, #1 + add r6, r0, #0x100 +_0202E3A8: + cmp r7, r5 + blt _0202E304 +_0202E3B0: + ldrsb r1, [sl, #0x10] + add r0, r4, #4 + bl sub_0202A03C + ldrsb r0, [sl, #0x10] + bl UpdateWindow + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end sub_0202E29C + + arm_func_start CreateScrollBoxSingle +CreateScrollBoxSingle: ; 0x0202E3CC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r8, r0 + mov r7, r1 + ldr r0, _0202E508 ; =0x00001D6C + mov r1, #8 + mov r6, r2 + mov r5, r3 + bl MemAlloc + mov r4, r0 + cmp r8, #0 + ldreq r0, _0202E50C ; =SCROLL_BOX_DEFAULT_WINDOW_PARAMS + add ip, sp, #0 + ldmeqia r0, {r0, r1, r2, r3} + stmeqia ip, {r0, r1, r2, r3} + ldmneia r8, {r0, r1, r2, r3} + stmneia ip, {r0, r1, r2, r3} + ldrne r0, _0202E510 ; =UpdateScrollBox + ldr r1, _0202E510 ; =UpdateScrollBox + strne r0, [sp] + ldr r0, _0202E514 ; =0x0D0C8012 + str r4, [sp, #0xc] + orr r0, r7, r0 + str r1, [r4] + bic r0, r0, #1 + str r0, [r4, #0xfc] + cmp r6, #0 + beq _0202E45C + add ip, r4, #0x100 + mov r7, #9 +_0202E444: + ldmia r6!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + subs r7, r7, #1 + bne _0202E444 + ldmia r6, {r0, r1} + stmia ip, {r0, r1} +_0202E45C: + ldr r7, [sp, #0x28] + add r0, r4, #0x100 + strh r5, [r0, #0xa0] + cmp r7, #0 + beq _0202E48C + add r6, r4, #0x1a8 + mov r5, #5 +_0202E478: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _0202E478 + b _0202E494 +_0202E48C: + add r0, r4, #0x1a8 + bl InitPreprocessorArgs +_0202E494: + mov r0, #1 + ldr r7, [sp, #0x30] + ldrh r1, [sp, #0x2c] + str r0, [r4, #0x198] + mov r0, #0 + str r0, [r4, #0x19c] + add r0, r4, #0x200 + strh r1, [r0, #0xe8] + cmp r7, #0 + beq _0202E4D8 + add r6, r4, #0x2f0 + mov r5, #5 +_0202E4C4: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _0202E4C4 + b _0202E4E0 +_0202E4D8: + add r0, r4, #0x2f0 + bl InitPreprocessorArgs +_0202E4E0: + mov r3, #0 + str r3, [r4, #0x430] + add r2, r4, #0x1000 + str r3, [r2, #0x464] + add r0, sp, #0 + mov r1, #3 + strb r3, [r2, #0x468] + bl NewWindowScreenCheck + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0202E508: .word 0x00001D6C +_0202E50C: .word SCROLL_BOX_DEFAULT_WINDOW_PARAMS +_0202E510: .word UpdateScrollBox +_0202E514: .word 0x0D0C8012 + arm_func_end CreateScrollBoxSingle + + arm_func_start CreateScrollBoxMulti +CreateScrollBoxMulti: ; 0x0202E518 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + mov r6, r0 + mov r5, r2 + ldr r2, [sp, #0x44] + mov sl, r1 + ldr r0, _0202E6A0 ; =0x00001D6C + mov r1, #8 + mov sb, r3 + ldr r8, [sp, #0x38] + ldr r7, [sp, #0x3c] + ldr fp, [sp, #0x40] + str r2, [sp, #0x44] + bl MemAlloc + cmp r6, #0 + mov r4, r0 + ldreq r0, _0202E6A4 ; =SCROLL_BOX_DEFAULT_WINDOW_PARAMS + addeq r6, sp, #0 + ldmeqia r0, {r0, r1, r2, r3} + stmeqia r6, {r0, r1, r2, r3} + addne ip, sp, #0 + ldmneia r6, {r0, r1, r2, r3} + stmneia ip, {r0, r1, r2, r3} + ldrne r0, _0202E6A8 ; =UpdateScrollBox + ldr r1, _0202E6A8 ; =UpdateScrollBox + strne r0, [sp] + ldr r0, _0202E6AC ; =0x0D0C8012 + str r4, [sp, #0xc] + orr r0, sl, r0 + str r1, [r4] + bic r0, r0, #1 + str r0, [r4, #0xfc] + cmp r5, #0 + beq _0202E5C0 + add sl, r4, #0x100 + mov r6, #9 +_0202E5A8: + ldmia r5!, {r0, r1, r2, r3} + stmia sl!, {r0, r1, r2, r3} + subs r6, r6, #1 + bne _0202E5A8 + ldmia r5, {r0, r1} + stmia sl, {r0, r1} +_0202E5C0: + str sb, [r4, #0x198] + mov r6, #0 + str r6, [r4, #0x19c] + b _0202E670 +_0202E5D0: + mov r0, #0x50 + mul r5, r6, r0 + mov r1, r6, lsl #1 + add r0, r4, r6, lsl #1 + ldrh r1, [r8, r1] + add r0, r0, #0x100 + adds sl, r7, r5 + strh r1, [r0, #0xa0] + beq _0202E614 + add r0, r4, r5 + add lr, r0, #0x1a8 + mov ip, #5 +_0202E600: + ldmia sl!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _0202E600 + b _0202E620 +_0202E614: + add r0, r4, #0x1a8 + add r0, r0, r5 + bl InitPreprocessorArgs +_0202E620: + mov r0, r6, lsl #1 + ldrh r1, [fp, r0] + add r0, r4, r6, lsl #1 + add r0, r0, #0x200 + strh r1, [r0, #0xe8] + ldr r0, [sp, #0x44] + adds sl, r0, r5 + beq _0202E660 + add r0, r4, r5 + add ip, r0, #0x2f0 + mov r5, #5 +_0202E64C: + ldmia sl!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _0202E64C + b _0202E66C +_0202E660: + add r0, r4, #0x2f0 + add r0, r0, r5 + bl InitPreprocessorArgs +_0202E66C: + add r6, r6, #1 +_0202E670: + cmp r6, sb + blt _0202E5D0 + mov r3, #0 + str r3, [r4, #0x430] + add r2, r4, #0x1000 + str r3, [r2, #0x464] + add r0, sp, #0 + mov r1, #3 + strb r3, [r2, #0x468] + bl NewWindowScreenCheck + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202E6A0: .word 0x00001D6C +_0202E6A4: .word SCROLL_BOX_DEFAULT_WINDOW_PARAMS +_0202E6A8: .word UpdateScrollBox +_0202E6AC: .word 0x0D0C8012 + arm_func_end CreateScrollBoxMulti + + arm_func_start SetScrollBoxState7 +SetScrollBoxState7: ; 0x0202E6B0 + stmdb sp!, {r3, lr} + bl GetWindowContents + add r0, r0, #0x1000 + mov r1, #7 + str r1, [r0, #0x464] + ldmia sp!, {r3, pc} + arm_func_end SetScrollBoxState7 + + arm_func_start CloseScrollBox +CloseScrollBox: ; 0x0202E6C8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetWindowContents + bl MemFree + mov r0, r4 + bl DeleteWindow + ldmia sp!, {r4, pc} + arm_func_end CloseScrollBox + + arm_func_start IsScrollBoxActive +IsScrollBoxActive: ; 0x0202E6E4 + stmdb sp!, {r3, lr} + bl GetWindowContents + add r0, r0, #0x1000 + ldr r0, [r0, #0x464] + cmp r0, #8 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end IsScrollBoxActive + + arm_func_start UpdateScrollBox +UpdateScrollBox: ; 0x0202E708 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x6c + mov r4, r0 + ldr r5, [r4, #0xc] + add r0, r5, #0x1000 + ldr r0, [r0, #0x464] + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _0202EE74 +_0202E72C: ; jump table + b _0202E74C ; case 0 + b _0202E768 ; case 1 + b _0202E768 ; case 2 + b _0202E768 ; case 3 + b _0202E998 ; case 4 + b _0202E9C0 ; case 5 + b _0202EE38 ; case 6 + b _0202EE54 ; case 7 +_0202E74C: + ldrsb r0, [r4, #0x10] + bl sub_0202810C + cmp r0, #0 + beq _0202EE74 + add r0, r5, #0x1000 + mov r1, #1 + str r1, [r0, #0x464] +_0202E768: + add r0, r5, #0x1000 + ldr r0, [r0, #0x464] + cmp r0, #1 + beq _0202E788 + add r0, r5, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202EE74 +_0202E788: + add r0, r5, #0x34 + ldr r2, [r5, #0x430] + ldr r1, _0202EE7C ; =0x0000040C + add r0, r0, #0x400 + add r3, r5, #0x16c + mla r6, r2, r1, r0 + cmp r2, #0 + add r7, r3, #0x1800 + mov r8, #0 + bne _0202E850 + ldr sl, [r5, #0x19c] + add r0, r5, sl, lsl #1 + add r0, r0, #0x100 + ldrh r2, [r0, #0xa0] + cmp r2, #0 + addeq r0, r5, #0x1000 + streqb r8, [r0, #0x56c] + beq _0202E7F0 + add r1, r5, #0x1a8 + mov r0, #0x50 + mla sb, sl, r0, r1 + mov r1, #0x400 + add r0, r3, #0x1400 + add r3, r1, #4 + str sb, [sp] + bl PreprocessStringFromId +_0202E7F0: + ldr r2, [r5, #0x19c] + mov r0, #0x50 + mla r1, r2, r0, r5 + add r0, r5, #0x6c + add fp, r1, #0x2f0 + add sl, r0, #0x1400 + mov sb, #5 +_0202E80C: + ldmia fp!, {r0, r1, r2, r3} + stmia sl!, {r0, r1, r2, r3} + subs sb, sb, #1 + bne _0202E80C + ldr r0, [r5, #0x19c] + add r1, r5, #0x1000 + add r0, r5, r0, lsl #1 + add r0, r0, #0x200 + ldrh r0, [r0, #0xe8] + strh r0, [r6] + ldr r0, [r1, #0x464] + cmp r0, #1 + moveq r0, #0 + streq r0, [r6, #4] + subeq r0, r0, #1 + streq r0, [r6, #8] + b _0202E85C +_0202E850: + add r0, r3, #0x1400 + add r1, r6, #0xc + bl strcpy +_0202E85C: + ldr r0, [r5, #0xfc] + ldr r1, _0202EE80 ; =0x000001AF + orr r0, r0, #0x800 + str r0, [r5, #0xfc] + add r0, r5, #0x100 + strh r1, [r0, #8] + mov r0, #0x10 + add r3, r5, #0x16c + str r0, [r5, #0x10c] + add r0, r3, #0x1400 + str r0, [r5, #0x148] + ldrh sb, [r6] + add r0, r5, #0x1000 + add r2, r5, #0x6c + str sb, [r0, #0x4a0] + add r0, r2, #0x1400 + str r0, [sp] + ldrh r2, [r6] + mov r1, #0x400 + add r0, r3, #0x1800 + add r3, r1, #4 + bl PreprocessStringFromId + add r0, r5, #0xc4 + add sb, r0, #0x1400 + b _0202E8E0 +_0202E8C0: + add r0, r5, r8, lsl #2 + add r2, r0, #0x1000 + add r1, sb, r8, lsl #2 + mov r0, r7 + str r7, [r2, #0x4e4] + add r8, r8, #1 + bl sub_02021F44 + mov r7, r0 +_0202E8E0: + cmp r7, #0 + bne _0202E8C0 + add r0, r5, #0x1000 + str r8, [r0, #0x4bc] + ldr r1, [r0, #0x464] + cmp r1, #3 + ldreq r1, [r6, #4] + movne r1, #0 + str r1, [r0, #0x4c0] + ldr r1, [r5, #0xfc] + add r0, r5, #0x1000 + orr r1, r1, #8 + str r1, [r5, #0xfc] + ldr r0, [r0, #0x4bc] + add r1, sp, #0x38 + cmp r0, #1 + ldrle r0, [r5, #0xfc] + eorle r0, r0, #8 + strle r0, [r5, #0xfc] + ldrsb r0, [r4, #0x10] + bl GetWindowRectangle + ldr r0, [r5, #0x430] + add r3, sp, #0x38 + cmp r0, #0 + mov r0, #1 + bne _0202E974 + ldr r1, [r5, #0x198] + add r2, r5, #0x100 + str r1, [sp] + str r0, [sp, #4] + ldr r1, [r5, #0xfc] + add r0, r5, #4 + bl InitWindowInput + ldr r1, [r5, #0x19c] + add r0, r5, #4 + bl sub_02032684 + b _0202E98C +_0202E974: + str r0, [sp] + str r0, [sp, #4] + ldr r1, [r5, #0xfc] + add r0, r5, #4 + add r2, r5, #0x100 + bl InitWindowInput +_0202E98C: + add r0, r5, #0x1000 + mov r1, #4 + str r1, [r0, #0x464] +_0202E998: + mov r0, r4 + bl sub_0202EE88 + mov r1, #0 + add r0, r5, #0x1000 + mov r2, #5 + str r2, [r0, #0x464] + strb r1, [r0, #0x468] + sub r0, r1, #1 + str r0, [r4, #0xb8] + b _0202EE74 +_0202E9C0: + add r0, r5, #0x34 + add r8, r0, #0x400 + ldr r7, [r5, #0x430] + ldr r6, _0202EE7C ; =0x0000040C + add r1, sp, #0x14 + add r2, sp, #0x48 + add r0, r5, #4 + mov r3, #1 + mla r6, r7, r6, r8 + bl sub_02031C98 + mov r7, r0 + add r0, r5, #4 + bl GetCurrentPage + mov fp, r0 + add r2, r5, #0x1000 + mov r0, #0 + mov r1, #0x13 + ldr r8, [r2, #0x4c0] + bl sub_02031914 + add r1, r5, #0x1000 + ldr r1, [r1, #0x4bc] + mov sb, r0 + cmp r1, #1 + ble _0202EA70 + tst sb, #0x10 + beq _0202EA48 + add r0, r5, #4 + mov r1, #4 + bl PlayWindowInputSound + subs r8, r8, #1 + addmi r0, r5, #0x1000 + ldrmi r0, [r0, #0x4bc] + submi r8, r0, #1 + b _0202EA70 +_0202EA48: + tst sb, #0x20 + beq _0202EA70 + add r0, r5, #4 + mov r1, #4 + bl PlayWindowInputSound + add r0, r5, #0x1000 + ldr r0, [r0, #0x4bc] + add r8, r8, #1 + cmp r8, r0 + movge r8, #0 +_0202EA70: + ldr r0, [r5, #0x430] + cmp r0, #0 + bne _0202EA98 + ldr r0, [r5, #0x19c] + cmp r0, fp + strne fp, [r5, #0x19c] + addne r0, r5, #0x1000 + movne r1, #1 + strne r1, [r0, #0x464] + bne _0202EB54 +_0202EA98: + add r0, r5, #0x1000 + ldr r1, [r0, #0x4c0] + cmp r1, r8 + beq _0202EAC0 + str r8, [r0, #0x4c0] + str r8, [r6, #4] + mvn r0, #0 + str r0, [r6, #8] + mov r7, #1 + b _0202EB54 +_0202EAC0: + ldr r2, [r0, #0x504] + cmp r2, #0 + ble _0202EB54 + ldr r0, [sp, #0x14] + tst r0, #0x2000 + beq _0202EB10 + ldr r0, [r6, #8] + cmp r0, #0 + sublt r0, r2, #1 + strlt r0, [r6, #8] + blt _0202EAFC + mvneq r0, #0 + streq r0, [r6, #8] + subne r0, r0, #1 + strne r0, [r6, #8] +_0202EAFC: + add r0, r5, #4 + mov r1, #3 + bl PlayWindowInputSound + mov r7, #1 + b _0202EB54 +_0202EB10: + tst r0, #0x1000 + beq _0202EB54 + ldr r1, [r6, #8] + cmp r1, #0 + movlt r0, #0 + strlt r0, [r6, #8] + blt _0202EB44 + sub r0, r2, #1 + cmp r1, r0 + mvnge r0, #0 + strge r0, [r6, #8] + addlt r0, r1, #1 + strlt r0, [r6, #8] +_0202EB44: + add r0, r5, #4 + mov r1, #3 + bl PlayWindowInputSound + mov r7, #1 +_0202EB54: + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _0202ECC4 + ldrsb r0, [r4, #0x10] + mvn r2, #0 + add r1, sp, #0x28 + str r2, [sp, #8] + bl GetWindowRectangle + add r0, r5, #0x108 + add r0, r0, #0x1400 + str r0, [sp, #0xc] + add r0, r5, #0x1000 + mov sl, #0 + str r0, [sp, #0x10] + b _0202EC08 +_0202EB90: + ldr r0, [sp, #0xc] + mov r1, #0x18 + mla r2, sl, r1, r0 + ldr r1, [sp, #0x28] + ldr r0, [r2, #8] + ldr r3, [sp, #0x30] + add r0, r0, r1 + str r0, [sp, #0x18] + ldr ip, [r2, #0x10] + add r0, sp, #0x48 + add r1, ip, r1 + str r1, [sp, #0x1c] + ldr ip, [r2, #4] + ldr r1, _0202EE84 ; =0x00000408 + add ip, ip, r3 + str ip, [sp, #0x20] + ldr ip, [r2, #0xc] + add r2, sp, #0x18 + add r3, ip, r3 + str r3, [sp, #0x24] + bl sub_02006C8C + cmp r0, #0 + beq _0202EC04 + add r0, r5, #4 + mov r1, #0 + str sl, [sp, #8] + bl sub_020320EC + mov r7, #1 + b _0202EC18 +_0202EC04: + add sl, sl, #1 +_0202EC08: + ldr r0, [sp, #0x10] + ldr r0, [r0, #0x504] + cmp sl, r0 + blt _0202EB90 +_0202EC18: + ldr r0, [sp, #8] + cmp r0, #0 + strge sl, [r6, #8] + orrge sb, sb, #1 + bge _0202EC7C + add r1, sp, #0x14 + add r2, sp, #0x48 + add r0, r5, #4 + bl sub_02033758 + add r1, r5, #0x1000 + ldr r1, [r1, #0x4bc] + orr r7, r7, r0 + cmp r1, #1 + ble _0202EC7C + ldr r0, [sp, #0x14] + tst r0, #0x40000 + beq _0202EC68 + subs r8, r8, #1 + submi r8, r1, #1 + b _0202EC7C +_0202EC68: + tst r0, #0x80000 + beq _0202EC7C + add r8, r8, #1 + cmp r8, r1 + movge r8, #0 +_0202EC7C: + ldr r0, [r5, #0x430] + cmp r0, #0 + bne _0202ECA4 + ldr r0, [r5, #0x19c] + cmp r0, fp + strne fp, [r5, #0x19c] + addne r0, r5, #0x1000 + movne r1, #1 + strne r1, [r0, #0x464] + bne _0202ECC4 +_0202ECA4: + add r0, r5, #0x1000 + ldr r1, [r0, #0x4c0] + cmp r1, r8 + strne r8, [r0, #0x4c0] + strne r8, [r6, #4] + mvnne r0, #0 + strne r0, [r6, #8] + movne r7, #1 +_0202ECC4: + cmp r7, #0 + beq _0202ECD4 + mov r0, r4 + bl sub_0202EE88 +_0202ECD4: +#ifdef JAPAN + ldr r0, [r6, #8] + cmp r0, #0 + blt _0202EDC8 + tst sb, #1 + beq _0202EDC8 + add r1, r5, #0x108 + add r2, r1, #0x1400 + mov r1, #0x18 + mla r7, r0, r1, r2 + ldr sb, [r5, #0x430] + mov r8, #0 + ldr r1, _0202EE7C ; =0x0000040C + b _0202F078 +_0202F05C: + mla r2, r8, r1, r5 + add r2, r2, #0x400 + ldrh r3, [r7, #2] + ldrh r2, [r2, #0x34] + cmp r3, r2 + beq _0202F080 + add r8, r8, #1 +_0202F078: + cmp r8, sb + blt _0202F05C +_0202F080: + cmp sb, #3 + bge _0202EDBC + ldrh r1, [r7, #2] + cmp r1, #0 + addne r0, r5, r0 +#else + add r0, r5, #0x1000 + ldr r0, [r0, #0x464] + cmp r0, #5 + bne _0202EE28 + ldr r1, [r6, #8] + mov r0, #0 + mov r7, r0 + cmp r1, #0 + blt _0202EDC8 + tst sb, #1 + beq _0202EDC8 + add r2, r5, #0x108 + add r3, r2, #0x1400 + mov r2, #0x18 + mla r8, r1, r2, r3 + ldr sl, [r5, #0x430] + mov r7, #1 + ldr r2, _0202EE7C ; =0x0000040C + b _0202ED3C +_0202ED20: + mla r3, r0, r2, r5 + add r3, r3, #0x400 + ldrh sb, [r8, #2] + ldrh r3, [r3, #0x34] + cmp sb, r3 + beq _0202ED44 + add r0, r0, #1 +_0202ED3C: + cmp r0, sl + blt _0202ED20 +_0202ED44: + cmp sl, #3 + bge _0202EDBC + ldrh r0, [r8, #2] + cmp r0, #0 + addne r0, r5, r1 +#endif + addne r0, r0, #0x1000 + ldrneb r0, [r0, #0x568] + cmpne r0, #0 + beq _0202EDBC + add r0, r5, #4 + mov r1, #0 + bl PlayWindowInputSound + ldr r0, [r5, #0x430] + add r2, r6, #0x18 + add r0, r0, #1 + str r0, [r5, #0x430] + mov r3, #0 +#ifdef JAPAN + ldrh r8, [r7, #2] + add r0, r6, #0x400 + mov r1, r7 + strh r8, [r0, #0xc] +#else + ldrh sb, [r8, #2] + add r0, r6, #0x400 + mov r1, r8 + strh sb, [r0, #0xc] +#endif + str r3, [r6, #0x410] + sub r3, r3, #1 + add r0, r2, #0x400 + str r3, [r6, #0x414] + bl sub_0202202C + add r0, r5, #0x1000 + mov r1, #2 + str r1, [r0, #0x464] + b _0202EDC8 +_0202EDBC: + add r0, r5, #4 + mov r1, #2 + bl PlayWindowInputSound +_0202EDC8: +#ifdef JAPAN + add r0, r5, #0x1000 + ldr r0, [r0, #0x464] + cmp r0, #5 +#else + cmp r7, #0 +#endif + bne _0202EE28 + ldr r0, [sp, #0x14] + tst r0, #2 + beq _0202EE28 + add r0, r5, #4 + mov r1, #1 + bl PlayWindowInputSound + ldr r0, [r5, #0x430] + cmp r0, #0 + ble _0202EE0C + sub r0, r0, #1 + str r0, [r5, #0x430] + add r0, r5, #0x1000 + mov r1, #3 + str r1, [r0, #0x464] + b _0202EE28 +_0202EE0C: + mov r1, #1 + add r0, r5, #0x1000 + strb r1, [r0, #0x468] + sub r1, r1, #6 + str r1, [r4, #0xb8] + mov r1, #6 + str r1, [r0, #0x464] +_0202EE28: + ldrsb r0, [r4, #0x10] + add r1, r5, #4 + bl sub_02028948 + b _0202EE74 +_0202EE38: + add r0, r5, #4 + bl sub_02032070 + cmp r0, #0 + bne _0202EE74 + add r0, r5, #0x1000 + mov r1, #7 + str r1, [r0, #0x464] +_0202EE54: + ldrsb r0, [r4, #0x10] + bl sub_0202812C + cmp r0, #0 + mvnne r0, #4 + strne r0, [r4, #0xb8] + addne r0, r5, #0x1000 + movne r1, #8 + strne r1, [r0, #0x464] +_0202EE74: + add sp, sp, #0x6c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202EE7C: .word 0x0000040C +#ifdef JAPAN +_0202EE80: .word 0x000003B7 +#else +_0202EE80: .word 0x000001AF +#endif +_0202EE84: .word 0x00000408 + arm_func_end UpdateScrollBox + + arm_func_start sub_0202EE88 +sub_0202EE88: ; 0x0202EE88 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x124 + mov sl, r0 + ldr r5, [sl, #0xc] + ldrsb r0, [sl, #0x10] + add r1, r5, #0x34 + ldr r4, [r5, #0x430] + ldr r2, _0202F0A4 ; =0x0000040C + add r1, r1, #0x400 + add r3, r5, #0x1000 + mla r6, r4, r2, r1 + ldr r4, [r3, #0x4c0] + bl sub_02027B1C + ldrsb r1, [sl, #0x10] + add r0, sp, #8 + bl sub_02025E84 + add r0, r5, #4 + mov r1, #0 + bl GetPageItemYOffset + mov r2, r0 + add r0, sp, #8 + mov r1, #4 + bl sub_0202614C + add r0, r5, r4, lsl #2 + add r0, r0, #0x1000 + ldr r2, [r0, #0x4e4] + ldr r1, _0202F0A8 ; =0x0000C406 + add r0, sp, #8 + bl sub_02026194 + add r0, sp, #8 + bl sub_02026204 + add r1, r5, #0x108 + add r0, sp, #8 + add r1, r1, #0x1400 + bl sub_020261F4 + add r1, r5, #0x1000 + str r0, [r1, #0x504] + ldr r0, [r5, #0x430] + cmp r0, #3 + bge _0202EFA0 + mov r8, #0 + mov r0, #1 + mov lr, r8 + ldr sb, _0202F0A4 ; =0x0000040C + mov ip, #0x18 + b _0202EF90 +_0202EF40: + mla r2, r8, ip, r5 + add r3, r2, #0x1500 + mov r4, r0 + mov r2, lr + ldrh r3, [r3, #0xa] + ldr r7, [r5, #0x430] + b _0202EF78 +_0202EF5C: + mla fp, r2, sb, r5 + add fp, fp, #0x400 + ldrh fp, [fp, #0x34] + cmp r3, fp + moveq r4, #0 + beq _0202EF80 + add r2, r2, #1 +_0202EF78: + cmp r2, r7 + blt _0202EF5C +_0202EF80: + add r2, r5, r8 + add r2, r2, #0x1000 + strb r4, [r2, #0x568] + add r8, r8, #1 +_0202EF90: + ldr r3, [r1, #0x504] + cmp r8, r3 + blt _0202EF40 + b _0202EFC8 +_0202EFA0: + mov r4, #0 + mov r2, r4 + b _0202EFBC +_0202EFAC: + add r0, r5, r4 + add r0, r0, #0x1000 + strb r2, [r0, #0x568] + add r4, r4, #1 +_0202EFBC: + ldr r3, [r1, #0x504] + cmp r4, r3 + blt _0202EFAC +_0202EFC8: + add r0, r5, #0x108 + cmp r3, #0 + add r7, r0, #0x1400 + mov r8, #0 + ble _0202F088 + add r4, r5, #0x1000 + mov fp, #0x2e + b _0202F07C +_0202EFE8: + add r0, r5, r8 + add r0, r0, #0x1000 + ldrb r0, [r0, #0x568] + ldrsb r1, [sl, #0x10] + cmp r0, #0 + movne sb, #0x4c + add r0, sp, #8 + moveq sb, #0x57 + bl sub_02025E84 + add r0, sp, #8 + ldmib r7, {r1, r2} + bl sub_0202614C + ldr r1, _0202F0AC ; =0x0000C506 + ldr r2, [r7, #0x14] + add r0, sp, #8 + bl sub_02026194 + mov r1, sb + add r0, sp, #8 + bl sub_02026174 + add r0, sp, #8 + bl sub_02026204 + ldr r0, [r6, #8] + cmp r0, r8 + bne _0202F074 + ldr r0, [r7, #0xc] + ldr r1, [r7, #4] + cmp r1, r0 + bge _0202F074 + sub r3, r0, r1 + ldr r2, [r7, #8] + ldr r0, [r7, #0x10] + sub r0, r0, r2 + stmia sp, {r0, fp} + ldrsb r0, [sl, #0x10] + bl sub_02025D90 +_0202F074: + add r8, r8, #1 + add r7, r7, #0x18 +_0202F07C: + ldr r0, [r4, #0x504] + cmp r8, r0 + blt _0202EFE8 +_0202F088: + ldrsb r1, [sl, #0x10] + add r0, r5, #4 + bl sub_0202A03C + ldrsb r0, [sl, #0x10] + bl UpdateWindow + add sp, sp, #0x124 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0202F0A4: .word 0x0000040C +_0202F0A8: .word 0x0000C406 +_0202F0AC: .word 0x0000C506 + arm_func_end sub_0202EE88 + + arm_func_start CreateDialogueBox +CreateDialogueBox: ; 0x0202F0B0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r0, _0202F13C ; =0x00000528 + mov r1, #8 + bl MemAlloc + mov r4, r0 + cmp r6, #0 + ldreq r0, _0202F140 ; =DIALOGUE_BOX_DEFAULT_WINDOW_PARAMS + add r5, sp, #0 + ldmeqia r0, {r0, r1, r2, r3} + stmeqia r5, {r0, r1, r2, r3} + ldmneia r6, {r0, r1, r2, r3} + stmneia r5, {r0, r1, r2, r3} + ldrne r0, _0202F144 ; =UpdateDialogueBox + ldr r1, _0202F144 ; =UpdateDialogueBox + strne r0, [sp] + str r4, [sp, #0xc] + str r1, [r4] + mov r2, #1 + add r0, sp, #0 + mov r1, #3 + strb r2, [r4, #0xa] + bl NewWindowScreenCheck + mov r5, r0 + mov r1, r5 + add r0, r4, #0xc + bl sub_02025E84 + mov r1, #0 + str r1, [r4, #4] + strb r1, [r4, #8] + mov r0, r5 + strb r1, [r4, #9] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0202F13C: .word 0x00000528 +_0202F140: .word DIALOGUE_BOX_DEFAULT_WINDOW_PARAMS +_0202F144: .word UpdateDialogueBox + arm_func_end CreateDialogueBox + + arm_func_start CloseDialogueBox +CloseDialogueBox: ; 0x0202F148 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetWindowContents + mov r0, r4 + bl GetWindowContents + bl MemFree + mov r0, r4 + bl DeleteWindow + ldmia sp!, {r4, pc} + arm_func_end CloseDialogueBox + + arm_func_start sub_0202F16C +sub_0202F16C: ; 0x0202F16C + stmdb sp!, {r3, lr} + bl GetWindowContents + add r0, r0, #0xc + bl sub_020261D4 + ldmia sp!, {r3, pc} + arm_func_end sub_0202F16C diff --git a/include/main_0202C5E0.h b/include/main_0202C5E0.h new file mode 100644 index 00000000..089b74d7 --- /dev/null +++ b/include/main_0202C5E0.h @@ -0,0 +1,24 @@ +#ifndef PMDSKY_MAIN_0202C5E0_H +#define PMDSKY_MAIN_0202C5E0_H + +#include "util.h" +#include "main_0202AAA8.h" + +struct unk_0202C5E0 { + u8 field_0x0[0x1A0]; + s32 field_0x1A0; + s32 field_0x1A4; + void *field_0x1A8; + u8 field_0x1AC[6]; + u8 field_0x1B2; + u8 field_0x1B3; + u8 field_0x1B4[8]; + s32 field_0x1BC; + u8 field_0x1C0[8]; + u8 field_0x1C8; +}; + + +void SetCollectionMenuField0x1BC(s32 window_id, s32 value); + +#endif diff --git a/include/main_0202C794.h b/include/main_0202C794.h new file mode 100644 index 00000000..ea2bd35c --- /dev/null +++ b/include/main_0202C794.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_MAIN_0202C794_H +#define PMDSKY_MAIN_0202C794_H + +void SetCollectionMenuField0x1C8(s32 window_id, u8 value); +void SetCollectionMenuField0x1A0(s32 window_id, s32 value); +void SetCollectionMenuField0x1A4(s32 window_id, s32 value); +void SetCollectionMenuVoidFn(s32 window_id, void* fn); + +#endif diff --git a/include/main_0202D0D8.h b/include/main_0202D0D8.h new file mode 100644 index 00000000..808a081a --- /dev/null +++ b/include/main_0202D0D8.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0202D0D8_H +#define PMDSKY_MAIN_0202D0D8_H + +void SetCollectionMenuField0x1B2(s32 window_id, u8 value); + +#endif diff --git a/main.lsf b/main.lsf index c80b49f2..67eb34a5 100644 --- a/main.lsf +++ b/main.lsf @@ -164,8 +164,14 @@ Static main Object asm/main_0202BCDC.o Object src/main_0202BCFC.o Object asm/main_0202BD10.o + Object src/main_0202C5E0.o + Object asm/main_0202C5F4.o Object src/main_0202C748.o Object asm/main_0202C75C.o + Object src/main_0202C794.o + Object asm/main_0202C7E4.o + Object src/main_0202D0D8.o + Object asm/main_0202D0EC.o Object src/main_0202F180.o Object asm/main_0202F190.o Object src/main_020307A4.o diff --git a/src/main_0202C5E0.c b/src/main_0202C5E0.c new file mode 100644 index 00000000..c035e698 --- /dev/null +++ b/src/main_0202C5E0.c @@ -0,0 +1,8 @@ +#include "main_0202C5E0.h" + +void SetCollectionMenuField0x1BC(s32 window_id, s32 value) +{ + struct unk_0202C5E0 *w = GetWindowContents(window_id); + + w->field_0x1BC = value; +} diff --git a/src/main_0202C794.c b/src/main_0202C794.c new file mode 100644 index 00000000..da227d1d --- /dev/null +++ b/src/main_0202C794.c @@ -0,0 +1,30 @@ +#include "main_0202C794.h" +#include "main_0202C5E0.h" + +void SetCollectionMenuField0x1C8(s32 window_id, u8 value) +{ + struct unk_0202C5E0 *w = GetWindowContents(window_id); + + w->field_0x1C8 = value; +} + +void SetCollectionMenuField0x1A0(s32 window_id, s32 value) +{ + struct unk_0202C5E0 *w = GetWindowContents(window_id); + + w->field_0x1A0 = value; +} + +void SetCollectionMenuField0x1A4(s32 window_id, s32 value) +{ + struct unk_0202C5E0 *w = GetWindowContents(window_id); + + w->field_0x1A4 = value; +} + +void SetCollectionMenuVoidFn(s32 window_id, void* fn) +{ + struct unk_0202C5E0 *w = GetWindowContents(window_id); + + w->field_0x1A8 = fn; +} diff --git a/src/main_0202D0D8.c b/src/main_0202D0D8.c new file mode 100644 index 00000000..cbf11195 --- /dev/null +++ b/src/main_0202D0D8.c @@ -0,0 +1,9 @@ +#include "main_0202D0D8.h" +#include "main_0202C5E0.h" + +void SetCollectionMenuField0x1B2(s32 window_id, u8 value) +{ + struct unk_0202C5E0 *w = GetWindowContents(window_id); + + w->field_0x1B2 = value; +}