From ec362491e1e7e2ba6d46eed0034485966fdcc58c Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Mon, 17 Aug 2026 01:06:05 -0700 Subject: [PATCH] Decomp six menu and text-box setters Decompile from asm: SetSimpleMenuField0x1AC 0x0202BA0C CloseAdvancedMenu 0x0202BC44 IsAdvancedMenuActive2 0x0202BCBC SetAdvancedTextBoxField0x1C4 0x020307A4 SetAdvancedTextBoxField0x1C2 0x0203083C SetAdvancedTextBoxState5 0x0203088C struct unk_0202AAA8 gains fields at 0x1AC, 0x1BC, 0x1C2, 0x1C3 and 0x1C4. The filler that stood between 0x1A8 and 0x1B0 is split to expose 0x1AC; nothing after it moves. CloseAdvancedMenu differs from the simple- and parent-menu versions: it frees only the window contents, not the pointer at 0x198 those two free first. That is what the target does and is not an omission here. IsAdvancedMenuActive2 tests the same states as IsSimpleMenuActive, 7 and 8, and like it binds the state to a local so the field is loaded once. SetAdvancedTextBoxField0x1C2 stores a constant 1 rather than an argument, so it takes only the window id. 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_0202B568.inc | 13 -- asm/include/main_0202BA20.inc | 12 ++ asm/include/main_0202BC60.inc | 3 + asm/include/main_0202BCDC.inc | 2 + asm/include/main_0202F190.inc | 6 - asm/include/main_020307B8.inc | 3 + asm/include/main_02030850.inc | 7 ++ asm/include/main_020308A0.inc | 8 ++ asm/main_0202B568.s | 229 ---------------------------------- asm/main_0202BA20.s | 162 ++++++++++++++++++++++++ asm/main_0202BC60.s | 31 +++++ asm/main_0202BCDC.s | 16 +++ asm/main_0202F190.s | 214 ------------------------------- asm/main_020307B8.s | 46 +++++++ asm/main_02030850.s | 23 ++++ asm/main_020308A0.s | 130 +++++++++++++++++++ include/main_0202AAA8.h | 9 +- include/main_0202BA0C.h | 6 + include/main_0202BC44.h | 6 + include/main_0202BCBC.h | 6 + include/main_020307A4.h | 6 + include/main_0203083C.h | 6 + include/main_0203088C.h | 6 + main.lsf | 12 ++ src/main_0202BA0C.c | 10 ++ src/main_0202BC44.c | 9 ++ src/main_0202BCBC.c | 12 ++ src/main_020307A4.c | 10 ++ src/main_0203083C.c | 10 ++ src/main_0203088C.c | 10 ++ 30 files changed, 560 insertions(+), 463 deletions(-) create mode 100644 asm/include/main_0202BA20.inc create mode 100644 asm/include/main_0202BC60.inc create mode 100644 asm/include/main_0202BCDC.inc create mode 100644 asm/include/main_020307B8.inc create mode 100644 asm/include/main_02030850.inc create mode 100644 asm/include/main_020308A0.inc create mode 100644 asm/main_0202BA20.s create mode 100644 asm/main_0202BC60.s create mode 100644 asm/main_0202BCDC.s create mode 100644 asm/main_020307B8.s create mode 100644 asm/main_02030850.s create mode 100644 asm/main_020308A0.s create mode 100644 include/main_0202BA0C.h create mode 100644 include/main_0202BC44.h create mode 100644 include/main_0202BCBC.h create mode 100644 include/main_020307A4.h create mode 100644 include/main_0203083C.h create mode 100644 include/main_0203088C.h create mode 100644 src/main_0202BA0C.c create mode 100644 src/main_0202BC44.c create mode 100644 src/main_0202BCBC.c create mode 100644 src/main_020307A4.c create mode 100644 src/main_0203083C.c create mode 100644 src/main_0203088C.c diff --git a/asm/include/main_0202B568.inc b/asm/include/main_0202B568.inc index e1bd5c0e..3efde11c 100644 --- a/asm/include/main_0202B568.inc +++ b/asm/include/main_0202B568.inc @@ -1,7 +1,4 @@ #pragma once -.public ADVANCED_MENU_DEFAULT_WINDOW_PARAMS -.public CalcMenuHeightDiv8__02031AA4 -.public DeleteWindow .public GetMaxItemsOnPage .public GetNumItemsOnPage .public GetPageItemYOffset @@ -9,24 +6,15 @@ .public GetSelectedMenuItemIdx .public GetTotalNumMenuItems .public GetWindowContents -.public GetWindowRectangle -.public InitWindowInput .public IsMenuOptionActive -.public MemAlloc -.public MemFree -.public NewWindowScreenCheck .public PlayWindowInputSound -.public UpdateAdvancedMenu .public UpdateWindow .public sub_020263C8 -.public sub_020265A8 .public sub_02027B1C .public sub_0202810C .public sub_0202812C -.public sub_0202830C .public sub_02028948 .public sub_0202A03C -.public sub_02031A5C .public sub_02031C74 .public sub_02031C84 .public sub_02031C98 @@ -35,5 +23,4 @@ .public sub_020323F8 .public sub_0203250C .public sub_02032684 -.public sub_02032984 .public sub_02033758 diff --git a/asm/include/main_0202BA20.inc b/asm/include/main_0202BA20.inc new file mode 100644 index 00000000..c5833b4d --- /dev/null +++ b/asm/include/main_0202BA20.inc @@ -0,0 +1,12 @@ +#pragma once +.public ADVANCED_MENU_DEFAULT_WINDOW_PARAMS +.public CalcMenuHeightDiv8__02031AA4 +.public GetWindowContents +.public GetWindowRectangle +.public InitWindowInput +.public MemAlloc +.public NewWindowScreenCheck +.public UpdateAdvancedMenu +.public sub_020265A8 +.public sub_02031A5C +.public sub_02032984 diff --git a/asm/include/main_0202BC60.inc b/asm/include/main_0202BC60.inc new file mode 100644 index 00000000..75b2597d --- /dev/null +++ b/asm/include/main_0202BC60.inc @@ -0,0 +1,3 @@ +#pragma once +.public GetWindowContents +.public sub_0202830C diff --git a/asm/include/main_0202BCDC.inc b/asm/include/main_0202BCDC.inc new file mode 100644 index 00000000..30543a07 --- /dev/null +++ b/asm/include/main_0202BCDC.inc @@ -0,0 +1,2 @@ +#pragma once +.public GetWindowContents diff --git a/asm/include/main_0202F190.inc b/asm/include/main_0202F190.inc index 7833ba78..b46d832b 100644 --- a/asm/include/main_0202F190.inc +++ b/asm/include/main_0202F190.inc @@ -8,8 +8,6 @@ .public DeleteWindow .public DrawTextInWindow .public GetPressedButtons -.public GetSelectedItemOnPage -.public GetSelectedMenuItemIdx .public GetWindowContents .public GetWindowRectangle .public InitPortraitParams @@ -54,8 +52,4 @@ .public sub_0202812C .public sub_0202836C .public sub_02028770 -.public sub_020288DC -.public sub_020289B8 -.public sub_02028A08 -.public sub_02032984 .public sub_02048240 diff --git a/asm/include/main_020307B8.inc b/asm/include/main_020307B8.inc new file mode 100644 index 00000000..bc3bf7bb --- /dev/null +++ b/asm/include/main_020307B8.inc @@ -0,0 +1,3 @@ +#pragma once +.public GetWindowContents +.public sub_02032984 diff --git a/asm/include/main_02030850.inc b/asm/include/main_02030850.inc new file mode 100644 index 00000000..af77516a --- /dev/null +++ b/asm/include/main_02030850.inc @@ -0,0 +1,7 @@ +#pragma once +.public DeleteWindow +.public GetWindowContents +.public MemFree +.public sub_0202812C +.public sub_0202836C +.public sub_020288DC diff --git a/asm/include/main_020308A0.inc b/asm/include/main_020308A0.inc new file mode 100644 index 00000000..3c7c1302 --- /dev/null +++ b/asm/include/main_020308A0.inc @@ -0,0 +1,8 @@ +#pragma once +.public DeleteWindow +.public GetSelectedItemOnPage +.public GetSelectedMenuItemIdx +.public GetWindowContents +.public MemFree +.public sub_020289B8 +.public sub_02028A08 diff --git a/asm/main_0202B568.s b/asm/main_0202B568.s index acc3e272..9f929512 100644 --- a/asm/main_0202B568.s +++ b/asm/main_0202B568.s @@ -344,232 +344,3 @@ _0202B9F4: bl UpdateWindow ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} arm_func_end sub_0202B934 - - arm_func_start SetSimpleMenuField0x1AC -SetSimpleMenuField0x1AC: ; 0x0202BA0C - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - str r4, [r0, #0x1ac] - ldmia sp!, {r4, pc} - arm_func_end SetSimpleMenuField0x1AC - - arm_func_start CreateAdvancedMenu -CreateAdvancedMenu: ; 0x0202BA20 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x28 - sub sp, sp, #0x400 - mov r6, r0 - mov sl, r1 - mov r0, #0x1b0 - mov r1, #8 - mov sb, r2 - mov r8, r3 - bl MemAlloc - mov r5, r0 - cmp r6, #0 - ldreq r0, _0202BBE8 ; =ADVANCED_MENU_DEFAULT_WINDOW_PARAMS - add r4, sp, #0x18 - ldmeqia r0, {r0, r1, r2, r3} - stmeqia r4, {r0, r1, r2, r3} - ldmneia r6, {r0, r1, r2, r3} - stmneia r4, {r0, r1, r2, r3} - ldrne r0, _0202BBEC ; =UpdateAdvancedMenu - orr sl, sl, #0x8000 - strne r0, [sp, #0x18] - ldrb r0, [sp, #0x1e] - orreq sl, sl, #0x300000 - str r5, [sp, #0x24] - cmp r0, #0 - bne _0202BADC - mov r7, #0 - mov r6, r7 - add r4, sp, #0x28 - b _0202BABC -_0202BA98: - mov r0, r4 - mov r1, r6 - blx r8 - cmp r0, #0 - beq _0202BAB8 - bl sub_020265A8 - cmp r0, r7 - movgt r7, r0 -_0202BAB8: - add r6, r6, #1 -_0202BABC: - ldr r0, [sp, #0x448] - cmp r6, r0 - blt _0202BA98 - mov r0, sl - mov r1, sb - add r2, r7, #0x10 - bl sub_02031A5C - strb r0, [sp, #0x1e] -_0202BADC: - ldrb r0, [sp, #0x1f] - add r2, sp, #0x400 - add r3, sp, #0x400 - cmp r0, #0 - add r2, r2, #0x48 - bne _0202BB0C - add r3, r3, #0x4c - mov r0, sl - mov r1, sb - bl CalcMenuHeightDiv8__02031AA4 - strb r0, [sp, #0x1f] - b _0202BB1C -_0202BB0C: - add r3, r3, #0x4c - mov r0, sl - mov r1, sb - bl CalcMenuHeightDiv8__02031AA4 -_0202BB1C: - tst sl, #0x200000 - ldrneb r1, [sp, #0x1c] - ldrneb r0, [sp, #0x1e] - subne r0, r1, r0 - strneb r0, [sp, #0x1c] - tst sl, #0x100000 - ldrneb r1, [sp, #0x1d] - ldrneb r0, [sp, #0x1f] - subne r0, r1, r0 - strneb r0, [sp, #0x1d] - ldr r0, _0202BBEC ; =UpdateAdvancedMenu - cmp sb, #0 - str r0, [r5] - str sl, [r5, #0xfc] - beq _0202BB78 - add r6, r5, #0x100 - mov r4, #9 -_0202BB60: - ldmia sb!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r4, r4, #1 - bne _0202BB60 - ldmia sb, {r0, r1} - stmia r6, {r0, r1} -_0202BB78: - mov r2, #0 - str r2, [r5, #0x18c] - str r8, [r5, #0x198] - str r2, [r5, #0x1a4] - str r2, [r5, #0x19c] - strb r2, [r5, #0x1a0] - strb r2, [r5, #0x1a1] - str r2, [r5, #0x1a8] - add r0, sp, #0x18 - mov r1, #3 - str r2, [r5, #0x1ac] - bl NewWindowScreenCheck - add r1, sp, #8 - mov r6, r0 - bl GetWindowRectangle - ldr r0, [sp, #0x448] - add r3, sp, #8 - str r0, [sp] - ldr r4, [sp, #0x44c] - mov r1, sl - add r0, r5, #4 - add r2, r5, #0x100 - str r4, [sp, #4] - bl InitWindowInput - mov r0, r6 - add sp, sp, #0x28 - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0202BBE8: .word ADVANCED_MENU_DEFAULT_WINDOW_PARAMS -_0202BBEC: .word UpdateAdvancedMenu - arm_func_end CreateAdvancedMenu - - arm_func_start ResumeAdvancedMenu -ResumeAdvancedMenu: ; 0x0202BBF0 - stmdb sp!, {r3, lr} - bl GetWindowContents - mov r1, #1 - str r1, [r0, #0x19c] - mov r1, #0 - strb r1, [r0, #0x1a0] - strb r1, [r0, #0x1a1] - str r1, [r0, #0x1a4] - 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 ResumeAdvancedMenu - - arm_func_start sub_0202BC28 -sub_0202BC28: ; 0x0202BC28 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r1, [r0, #0x19c] - cmp r1, #3 - moveq r1, #2 - streq r1, [r0, #0x19c] - ldmia sp!, {r3, pc} - arm_func_end sub_0202BC28 - - arm_func_start CloseAdvancedMenu -CloseAdvancedMenu: ; 0x0202BC44 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetWindowContents - bl MemFree - mov r0, r4 - bl DeleteWindow - ldmia sp!, {r4, pc} - arm_func_end CloseAdvancedMenu - - arm_func_start sub_0202BC60 -sub_0202BC60: ; 0x0202BC60 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetWindowContents - mov r4, r0 - ldr r0, [r4, #0x19c] - cmp r0, #3 - cmpne r0, #4 - cmpne r0, #0xa - cmpne r0, #8 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, #1 - strb r0, [r4, #0x1a0] - mov r2, #0 - strb r0, [r4, #0x1a1] - mov r0, r5 - sub r1, r2, #5 - str r2, [r4, #0x1a4] - bl sub_0202830C - mov r0, #6 - str r0, [r4, #0x19c] - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0202BC60 - - arm_func_start IsAdvancedMenuActive2 -IsAdvancedMenuActive2: ; 0x0202BCBC - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r0, [r0, #0x19c] - cmp r0, #7 - cmpne r0, #8 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsAdvancedMenuActive2 - - arm_func_start IsAdvancedMenuActive -IsAdvancedMenuActive: ; 0x0202BCDC - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r0, [r0, #0x1a0] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end IsAdvancedMenuActive diff --git a/asm/main_0202BA20.s b/asm/main_0202BA20.s new file mode 100644 index 00000000..73d40e17 --- /dev/null +++ b/asm/main_0202BA20.s @@ -0,0 +1,162 @@ + .include "asm/macros.inc" + .include "main_0202BA20.inc" + + .text + + arm_func_start CreateAdvancedMenu +CreateAdvancedMenu: ; 0x0202BA20 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x28 + sub sp, sp, #0x400 + mov r6, r0 + mov sl, r1 + mov r0, #0x1b0 + mov r1, #8 + mov sb, r2 + mov r8, r3 + bl MemAlloc + mov r5, r0 + cmp r6, #0 + ldreq r0, _0202BBE8 ; =ADVANCED_MENU_DEFAULT_WINDOW_PARAMS + add r4, sp, #0x18 + ldmeqia r0, {r0, r1, r2, r3} + stmeqia r4, {r0, r1, r2, r3} + ldmneia r6, {r0, r1, r2, r3} + stmneia r4, {r0, r1, r2, r3} + ldrne r0, _0202BBEC ; =UpdateAdvancedMenu + orr sl, sl, #0x8000 + strne r0, [sp, #0x18] + ldrb r0, [sp, #0x1e] + orreq sl, sl, #0x300000 + str r5, [sp, #0x24] + cmp r0, #0 + bne _0202BADC + mov r7, #0 + mov r6, r7 + add r4, sp, #0x28 + b _0202BABC +_0202BA98: + mov r0, r4 + mov r1, r6 + blx r8 + cmp r0, #0 + beq _0202BAB8 + bl sub_020265A8 + cmp r0, r7 + movgt r7, r0 +_0202BAB8: + add r6, r6, #1 +_0202BABC: + ldr r0, [sp, #0x448] + cmp r6, r0 + blt _0202BA98 + mov r0, sl + mov r1, sb + add r2, r7, #0x10 + bl sub_02031A5C + strb r0, [sp, #0x1e] +_0202BADC: + ldrb r0, [sp, #0x1f] + add r2, sp, #0x400 + add r3, sp, #0x400 + cmp r0, #0 + add r2, r2, #0x48 + bne _0202BB0C + add r3, r3, #0x4c + mov r0, sl + mov r1, sb + bl CalcMenuHeightDiv8__02031AA4 + strb r0, [sp, #0x1f] + b _0202BB1C +_0202BB0C: + add r3, r3, #0x4c + mov r0, sl + mov r1, sb + bl CalcMenuHeightDiv8__02031AA4 +_0202BB1C: + tst sl, #0x200000 + ldrneb r1, [sp, #0x1c] + ldrneb r0, [sp, #0x1e] + subne r0, r1, r0 + strneb r0, [sp, #0x1c] + tst sl, #0x100000 + ldrneb r1, [sp, #0x1d] + ldrneb r0, [sp, #0x1f] + subne r0, r1, r0 + strneb r0, [sp, #0x1d] + ldr r0, _0202BBEC ; =UpdateAdvancedMenu + cmp sb, #0 + str r0, [r5] + str sl, [r5, #0xfc] + beq _0202BB78 + add r6, r5, #0x100 + mov r4, #9 +_0202BB60: + ldmia sb!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r4, r4, #1 + bne _0202BB60 + ldmia sb, {r0, r1} + stmia r6, {r0, r1} +_0202BB78: + mov r2, #0 + str r2, [r5, #0x18c] + str r8, [r5, #0x198] + str r2, [r5, #0x1a4] + str r2, [r5, #0x19c] + strb r2, [r5, #0x1a0] + strb r2, [r5, #0x1a1] + str r2, [r5, #0x1a8] + add r0, sp, #0x18 + mov r1, #3 + str r2, [r5, #0x1ac] + bl NewWindowScreenCheck + add r1, sp, #8 + mov r6, r0 + bl GetWindowRectangle + ldr r0, [sp, #0x448] + add r3, sp, #8 + str r0, [sp] + ldr r4, [sp, #0x44c] + mov r1, sl + add r0, r5, #4 + add r2, r5, #0x100 + str r4, [sp, #4] + bl InitWindowInput + mov r0, r6 + add sp, sp, #0x28 + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0202BBE8: .word ADVANCED_MENU_DEFAULT_WINDOW_PARAMS +_0202BBEC: .word UpdateAdvancedMenu + arm_func_end CreateAdvancedMenu + + arm_func_start ResumeAdvancedMenu +ResumeAdvancedMenu: ; 0x0202BBF0 + stmdb sp!, {r3, lr} + bl GetWindowContents + mov r1, #1 + str r1, [r0, #0x19c] + mov r1, #0 + strb r1, [r0, #0x1a0] + strb r1, [r0, #0x1a1] + str r1, [r0, #0x1a4] + 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 ResumeAdvancedMenu + + arm_func_start sub_0202BC28 +sub_0202BC28: ; 0x0202BC28 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r1, [r0, #0x19c] + cmp r1, #3 + moveq r1, #2 + streq r1, [r0, #0x19c] + ldmia sp!, {r3, pc} + arm_func_end sub_0202BC28 diff --git a/asm/main_0202BC60.s b/asm/main_0202BC60.s new file mode 100644 index 00000000..bec60be2 --- /dev/null +++ b/asm/main_0202BC60.s @@ -0,0 +1,31 @@ + .include "asm/macros.inc" + .include "main_0202BC60.inc" + + .text + + arm_func_start sub_0202BC60 +sub_0202BC60: ; 0x0202BC60 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetWindowContents + mov r4, r0 + ldr r0, [r4, #0x19c] + cmp r0, #3 + cmpne r0, #4 + cmpne r0, #0xa + cmpne r0, #8 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, #1 + strb r0, [r4, #0x1a0] + mov r2, #0 + strb r0, [r4, #0x1a1] + mov r0, r5 + sub r1, r2, #5 + str r2, [r4, #0x1a4] + bl sub_0202830C + mov r0, #6 + str r0, [r4, #0x19c] + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0202BC60 diff --git a/asm/main_0202BCDC.s b/asm/main_0202BCDC.s new file mode 100644 index 00000000..37c20839 --- /dev/null +++ b/asm/main_0202BCDC.s @@ -0,0 +1,16 @@ + .include "asm/macros.inc" + .include "main_0202BCDC.inc" + + .text + + arm_func_start IsAdvancedMenuActive +IsAdvancedMenuActive: ; 0x0202BCDC + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r0, [r0, #0x1a0] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end IsAdvancedMenuActive diff --git a/asm/main_0202F190.s b/asm/main_0202F190.s index f0a4c03f..2a4ec088 100644 --- a/asm/main_0202F190.s +++ b/asm/main_0202F190.s @@ -1695,217 +1695,3 @@ SetAdvancedTextBoxPartialMenu: ; 0x0203077C str r1, [r0, #0x104] ldmia sp!, {r4, pc} arm_func_end SetAdvancedTextBoxPartialMenu - - arm_func_start SetAdvancedTextBoxField0x1C4 -SetAdvancedTextBoxField0x1C4: ; 0x020307A4 - stmdb sp!, {r4, lr} - mov r4, r1 - bl GetWindowContents - strb r4, [r0, #0x1c4] - ldmia sp!, {r4, pc} - arm_func_end SetAdvancedTextBoxField0x1C4 - - arm_func_start sub_020307B8 -sub_020307B8: ; 0x020307B8 - stmdb sp!, {r3, lr} - bl GetWindowContents - mov r1, #1 - str r1, [r0, #0x1bc] - mov r1, #0 - strb r1, [r0, #0x1c0] - strb r1, [r0, #0x1c1] - ldr r1, [r0, #0x104] - bic r1, r1, #0x800000 - str r1, [r0, #0x104] - add r0, r0, #4 - bl sub_02032984 - ldmia sp!, {r3, pc} - arm_func_end sub_020307B8 - - arm_func_start sub_020307EC -sub_020307EC: ; 0x020307EC - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetWindowContents - mov r4, r0 - mov r0, r5 - bl GetWindowContents - ldr r0, [r0, #0x1bc] - cmp r0, #7 - moveq r0, #1 - movne r0, #0 - tst r0, #0xff - beq _02030828 - mov r0, r5 - bl sub_020307B8 - ldmia sp!, {r3, r4, r5, pc} -_02030828: - ldr r0, [r4, #0x1bc] - cmp r0, #6 - moveq r0, #0 - streq r0, [r4, #0x1bc] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_020307EC - - arm_func_start SetAdvancedTextBoxField0x1C2 -SetAdvancedTextBoxField0x1C2: ; 0x0203083C - stmdb sp!, {r3, lr} - bl GetWindowContents - mov r1, #1 - strb r1, [r0, #0x1c2] - ldmia sp!, {r3, pc} - arm_func_end SetAdvancedTextBoxField0x1C2 - - arm_func_start CloseAdvancedTextBox2 -CloseAdvancedTextBox2: ; 0x02030850 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl sub_0202836C - mov r0, r5 - bl sub_020288DC - mov r0, r5 - bl sub_0202812C - mov r0, r5 - bl GetWindowContents - mov r4, r0 - mov r0, r5 - bl DeleteWindow - mov r0, r4 - bl MemFree - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CloseAdvancedTextBox2 - - arm_func_start SetAdvancedTextBoxState5 -SetAdvancedTextBoxState5: ; 0x0203088C - stmdb sp!, {r3, lr} - bl GetWindowContents - mov r1, #5 - str r1, [r0, #0x1bc] - ldmia sp!, {r3, pc} - arm_func_end SetAdvancedTextBoxState5 - - arm_func_start CloseAdvancedTextBox -CloseAdvancedTextBox: ; 0x020308A0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetWindowContents - mov r4, r0 - mov r0, r5 - bl DeleteWindow - mov r0, r4 - bl MemFree - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CloseAdvancedTextBox - - arm_func_start IsAdvancedTextBoxActive -IsAdvancedTextBoxActive: ; 0x020308C4 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldr r0, [r0, #0x1bc] - cmp r0, #6 - cmpne r0, #7 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end IsAdvancedTextBoxActive - -#ifndef JAPAN - arm_func_start sub_020308E4 -sub_020308E4: ; 0x020308E4 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r1, [r0, #0x1c0] - cmp r1, #0 - ldrneb r0, [r0, #0x1c1] - cmpne r0, #0 - movne r0, #1 - moveq r0, #0 - ldmia sp!, {r3, pc} - arm_func_end sub_020308E4 -#endif - - arm_func_start sub_02030908 -sub_02030908: ; 0x02030908 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r1, [r0, #0x1c0] - cmp r1, #0 - beq _02030938 - ldrb r1, [r0, #0x1c1] - cmp r1, #0 - mvnne r0, #0 - ldmneia sp!, {r3, pc} - add r0, r0, #4 - bl GetSelectedItemOnPage - ldmia sp!, {r3, pc} -_02030938: - mvn r0, #0 - ldmia sp!, {r3, pc} - arm_func_end sub_02030908 - - arm_func_start GetDigitInputResult -GetDigitInputResult: ; 0x02030940 - stmdb sp!, {r3, lr} - bl GetWindowContents - ldrb r1, [r0, #0x1c0] - cmp r1, #0 - beq _02030970 - ldrb r1, [r0, #0x1c1] - cmp r1, #0 - mvnne r0, #0 - ldmneia sp!, {r3, pc} - add r0, r0, #4 - bl GetSelectedMenuItemIdx - ldmia sp!, {r3, pc} -_02030970: - mvn r0, #0 - ldmia sp!, {r3, pc} - arm_func_end GetDigitInputResult - - arm_func_start sub_02030978 -sub_02030978: ; 0x02030978 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl GetWindowContents - mov r1, r0 - strh r5, [r1, #0xfc] - strh r4, [r1, #0xfe] - mov r0, r7 - mov r2, r6 - mov r3, r5 - add r1, r1, #4 - str r4, [sp] - bl sub_020289B8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_02030978 - - arm_func_start sub_020309B8 -sub_020309B8: ; 0x020309B8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xc - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - bl GetWindowContents - mov r1, r0 - strh r6, [r1, #0xfc] - ldr r4, [sp, #0x28] - strh r5, [r1, #0xfe] - add ip, r1, #0x100 - ldr lr, [sp, #0x2c] - strh r4, [ip] - strh lr, [ip, #2] - str r5, [sp] - mov r0, r8 - add r1, r1, #4 - mov r2, r7 - mov r3, r6 - stmib sp, {r4, lr} - bl sub_02028A08 - add sp, sp, #0xc - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - arm_func_end sub_020309B8 diff --git a/asm/main_020307B8.s b/asm/main_020307B8.s new file mode 100644 index 00000000..0ac2c021 --- /dev/null +++ b/asm/main_020307B8.s @@ -0,0 +1,46 @@ + .include "asm/macros.inc" + .include "main_020307B8.inc" + + .text + + arm_func_start sub_020307B8 +sub_020307B8: ; 0x020307B8 + stmdb sp!, {r3, lr} + bl GetWindowContents + mov r1, #1 + str r1, [r0, #0x1bc] + mov r1, #0 + strb r1, [r0, #0x1c0] + strb r1, [r0, #0x1c1] + ldr r1, [r0, #0x104] + bic r1, r1, #0x800000 + str r1, [r0, #0x104] + add r0, r0, #4 + bl sub_02032984 + ldmia sp!, {r3, pc} + arm_func_end sub_020307B8 + + arm_func_start sub_020307EC +sub_020307EC: ; 0x020307EC + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetWindowContents + mov r4, r0 + mov r0, r5 + bl GetWindowContents + ldr r0, [r0, #0x1bc] + cmp r0, #7 + moveq r0, #1 + movne r0, #0 + tst r0, #0xff + beq _02030828 + mov r0, r5 + bl sub_020307B8 + ldmia sp!, {r3, r4, r5, pc} +_02030828: + ldr r0, [r4, #0x1bc] + cmp r0, #6 + moveq r0, #0 + streq r0, [r4, #0x1bc] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_020307EC diff --git a/asm/main_02030850.s b/asm/main_02030850.s new file mode 100644 index 00000000..814a2631 --- /dev/null +++ b/asm/main_02030850.s @@ -0,0 +1,23 @@ + .include "asm/macros.inc" + .include "main_02030850.inc" + + .text + + arm_func_start CloseAdvancedTextBox2 +CloseAdvancedTextBox2: ; 0x02030850 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl sub_0202836C + mov r0, r5 + bl sub_020288DC + mov r0, r5 + bl sub_0202812C + mov r0, r5 + bl GetWindowContents + mov r4, r0 + mov r0, r5 + bl DeleteWindow + mov r0, r4 + bl MemFree + ldmia sp!, {r3, r4, r5, pc} + arm_func_end CloseAdvancedTextBox2 diff --git a/asm/main_020308A0.s b/asm/main_020308A0.s new file mode 100644 index 00000000..885dfa3d --- /dev/null +++ b/asm/main_020308A0.s @@ -0,0 +1,130 @@ + .include "asm/macros.inc" + .include "main_020308A0.inc" + + .text + + arm_func_start CloseAdvancedTextBox +CloseAdvancedTextBox: ; 0x020308A0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetWindowContents + mov r4, r0 + mov r0, r5 + bl DeleteWindow + mov r0, r4 + bl MemFree + ldmia sp!, {r3, r4, r5, pc} + arm_func_end CloseAdvancedTextBox + + arm_func_start IsAdvancedTextBoxActive +IsAdvancedTextBoxActive: ; 0x020308C4 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldr r0, [r0, #0x1bc] + cmp r0, #6 + cmpne r0, #7 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r3, pc} + arm_func_end IsAdvancedTextBoxActive + +#ifndef JAPAN + arm_func_start sub_020308E4 +sub_020308E4: ; 0x020308E4 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r1, [r0, #0x1c0] + cmp r1, #0 + ldrneb r0, [r0, #0x1c1] + cmpne r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r3, pc} + arm_func_end sub_020308E4 +#endif + + arm_func_start sub_02030908 +sub_02030908: ; 0x02030908 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r1, [r0, #0x1c0] + cmp r1, #0 + beq _02030938 + ldrb r1, [r0, #0x1c1] + cmp r1, #0 + mvnne r0, #0 + ldmneia sp!, {r3, pc} + add r0, r0, #4 + bl GetSelectedItemOnPage + ldmia sp!, {r3, pc} +_02030938: + mvn r0, #0 + ldmia sp!, {r3, pc} + arm_func_end sub_02030908 + + arm_func_start GetDigitInputResult +GetDigitInputResult: ; 0x02030940 + stmdb sp!, {r3, lr} + bl GetWindowContents + ldrb r1, [r0, #0x1c0] + cmp r1, #0 + beq _02030970 + ldrb r1, [r0, #0x1c1] + cmp r1, #0 + mvnne r0, #0 + ldmneia sp!, {r3, pc} + add r0, r0, #4 + bl GetSelectedMenuItemIdx + ldmia sp!, {r3, pc} +_02030970: + mvn r0, #0 + ldmia sp!, {r3, pc} + arm_func_end GetDigitInputResult + + arm_func_start sub_02030978 +sub_02030978: ; 0x02030978 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl GetWindowContents + mov r1, r0 + strh r5, [r1, #0xfc] + strh r4, [r1, #0xfe] + mov r0, r7 + mov r2, r6 + mov r3, r5 + add r1, r1, #4 + str r4, [sp] + bl sub_020289B8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_02030978 + + arm_func_start sub_020309B8 +sub_020309B8: ; 0x020309B8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0xc + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl GetWindowContents + mov r1, r0 + strh r6, [r1, #0xfc] + ldr r4, [sp, #0x28] + strh r5, [r1, #0xfe] + add ip, r1, #0x100 + ldr lr, [sp, #0x2c] + strh r4, [ip] + strh lr, [ip, #2] + str r5, [sp] + mov r0, r8 + add r1, r1, #4 + mov r2, r7 + mov r3, r6 + stmib sp, {r4, lr} + bl sub_02028A08 + add sp, sp, #0xc + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + arm_func_end sub_020309B8 diff --git a/include/main_0202AAA8.h b/include/main_0202AAA8.h index 2330131f..d15ff7fd 100644 --- a/include/main_0202AAA8.h +++ b/include/main_0202AAA8.h @@ -11,8 +11,15 @@ struct unk_0202AAA8 { s32 field_0x19C; u8 field_0x1A0; s32 field_0x1A4; - u8 field_0x1A8[8]; + u8 field_0x1A8[4]; + s32 field_0x1AC; s32 field_0x1B0; + u8 field_0x1B4[8]; + s32 field_0x1BC; + u8 field_0x1C0[2]; + u8 field_0x1C2; + u8 field_0x1C3; + u8 field_0x1C4; }; void *GetWindowContents(s32 window_id); diff --git a/include/main_0202BA0C.h b/include/main_0202BA0C.h new file mode 100644 index 00000000..f49079e8 --- /dev/null +++ b/include/main_0202BA0C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0202BA0C_H +#define PMDSKY_MAIN_0202BA0C_H + +void SetSimpleMenuField0x1AC(s32 window_id, s32 value); + +#endif diff --git a/include/main_0202BC44.h b/include/main_0202BC44.h new file mode 100644 index 00000000..c04c5a49 --- /dev/null +++ b/include/main_0202BC44.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0202BC44_H +#define PMDSKY_MAIN_0202BC44_H + +void CloseAdvancedMenu(s32 window_id); + +#endif diff --git a/include/main_0202BCBC.h b/include/main_0202BCBC.h new file mode 100644 index 00000000..f603e338 --- /dev/null +++ b/include/main_0202BCBC.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0202BCBC_H +#define PMDSKY_MAIN_0202BCBC_H + +u32 IsAdvancedMenuActive2(s32 window_id); + +#endif diff --git a/include/main_020307A4.h b/include/main_020307A4.h new file mode 100644 index 00000000..55d39db2 --- /dev/null +++ b/include/main_020307A4.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_020307A4_H +#define PMDSKY_MAIN_020307A4_H + +void SetAdvancedTextBoxField0x1C4(s32 window_id, u8 value); + +#endif diff --git a/include/main_0203083C.h b/include/main_0203083C.h new file mode 100644 index 00000000..aa703d49 --- /dev/null +++ b/include/main_0203083C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0203083C_H +#define PMDSKY_MAIN_0203083C_H + +void SetAdvancedTextBoxField0x1C2(s32 window_id); + +#endif diff --git a/include/main_0203088C.h b/include/main_0203088C.h new file mode 100644 index 00000000..3bcb3294 --- /dev/null +++ b/include/main_0203088C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_0203088C_H +#define PMDSKY_MAIN_0203088C_H + +void SetAdvancedTextBoxState5(s32 window_id); + +#endif diff --git a/main.lsf b/main.lsf index c9d0dce7..c80b49f2 100644 --- a/main.lsf +++ b/main.lsf @@ -156,12 +156,24 @@ Static main Object asm/main_0202B530.o Object src/main_0202B558.o Object asm/main_0202B568.o + Object src/main_0202BA0C.o + Object asm/main_0202BA20.o + Object src/main_0202BC44.o + Object asm/main_0202BC60.o + Object src/main_0202BCBC.o + Object asm/main_0202BCDC.o Object src/main_0202BCFC.o Object asm/main_0202BD10.o Object src/main_0202C748.o Object asm/main_0202C75C.o Object src/main_0202F180.o Object asm/main_0202F190.o + Object src/main_020307A4.o + Object asm/main_020307B8.o + Object src/main_0203083C.o + Object asm/main_02030850.o + Object src/main_0203088C.o + Object asm/main_020308A0.o Object src/main_02030A18.o Object asm/main_02030A2C.o Object src/main_02030A40.o diff --git a/src/main_0202BA0C.c b/src/main_0202BA0C.c new file mode 100644 index 00000000..0313aa14 --- /dev/null +++ b/src/main_0202BA0C.c @@ -0,0 +1,10 @@ +#include "main_0202BA0C.h" +#include "main_0202AAA8.h" +#include "main_02001188.h" + +void SetSimpleMenuField0x1AC(s32 window_id, s32 value) +{ + struct unk_0202AAA8 *w = GetWindowContents(window_id); + + w->field_0x1AC = value; +} diff --git a/src/main_0202BC44.c b/src/main_0202BC44.c new file mode 100644 index 00000000..d603c5ff --- /dev/null +++ b/src/main_0202BC44.c @@ -0,0 +1,9 @@ +#include "main_0202BC44.h" +#include "main_0202AAA8.h" +#include "main_02001188.h" + +void CloseAdvancedMenu(s32 window_id) +{ + MemFree(GetWindowContents(window_id)); + DeleteWindow(window_id); +} diff --git a/src/main_0202BCBC.c b/src/main_0202BCBC.c new file mode 100644 index 00000000..e5652a91 --- /dev/null +++ b/src/main_0202BCBC.c @@ -0,0 +1,12 @@ +#include "main_0202BCBC.h" +#include "main_0202AAA8.h" +#include "main_02001188.h" + +u32 IsAdvancedMenuActive2(s32 window_id) +{ + struct unk_0202AAA8 *w = GetWindowContents(window_id); + + s32 state = w->field_0x19C; + + return state != 7 && state != 8; +} diff --git a/src/main_020307A4.c b/src/main_020307A4.c new file mode 100644 index 00000000..f8d4afda --- /dev/null +++ b/src/main_020307A4.c @@ -0,0 +1,10 @@ +#include "main_020307A4.h" +#include "main_0202AAA8.h" +#include "main_02001188.h" + +void SetAdvancedTextBoxField0x1C4(s32 window_id, u8 value) +{ + struct unk_0202AAA8 *w = GetWindowContents(window_id); + + w->field_0x1C4 = value; +} diff --git a/src/main_0203083C.c b/src/main_0203083C.c new file mode 100644 index 00000000..3d943cbb --- /dev/null +++ b/src/main_0203083C.c @@ -0,0 +1,10 @@ +#include "main_0203083C.h" +#include "main_0202AAA8.h" +#include "main_02001188.h" + +void SetAdvancedTextBoxField0x1C2(s32 window_id) +{ + struct unk_0202AAA8 *w = GetWindowContents(window_id); + + w->field_0x1C2 = 1; +} diff --git a/src/main_0203088C.c b/src/main_0203088C.c new file mode 100644 index 00000000..19e5b168 --- /dev/null +++ b/src/main_0203088C.c @@ -0,0 +1,10 @@ +#include "main_0203088C.h" +#include "main_0202AAA8.h" +#include "main_02001188.h" + +void SetAdvancedTextBoxState5(s32 window_id) +{ + struct unk_0202AAA8 *w = GetWindowContents(window_id); + + w->field_0x1BC = 5; +}