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 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-08-17 01:06:05 -07:00
parent 363d3edb85
commit ec362491e1
30 changed files with 560 additions and 463 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,3 @@
#pragma once
.public GetWindowContents
.public sub_0202830C

View File

@@ -0,0 +1,2 @@
#pragma once
.public GetWindowContents

View File

@@ -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

View File

@@ -0,0 +1,3 @@
#pragma once
.public GetWindowContents
.public sub_02032984

View File

@@ -0,0 +1,7 @@
#pragma once
.public DeleteWindow
.public GetWindowContents
.public MemFree
.public sub_0202812C
.public sub_0202836C
.public sub_020288DC

View File

@@ -0,0 +1,8 @@
#pragma once
.public DeleteWindow
.public GetSelectedItemOnPage
.public GetSelectedMenuItemIdx
.public GetWindowContents
.public MemFree
.public sub_020289B8
.public sub_02028A08

View File

@@ -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

162
asm/main_0202BA20.s Normal file
View File

@@ -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

31
asm/main_0202BC60.s Normal file
View File

@@ -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

16
asm/main_0202BCDC.s Normal file
View File

@@ -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

View File

@@ -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

46
asm/main_020307B8.s Normal file
View File

@@ -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

23
asm/main_02030850.s Normal file
View File

@@ -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

130
asm/main_020308A0.s Normal file
View File

@@ -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

View File

@@ -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);

6
include/main_0202BA0C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0202BA0C_H
#define PMDSKY_MAIN_0202BA0C_H
void SetSimpleMenuField0x1AC(s32 window_id, s32 value);
#endif

6
include/main_0202BC44.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0202BC44_H
#define PMDSKY_MAIN_0202BC44_H
void CloseAdvancedMenu(s32 window_id);
#endif

6
include/main_0202BCBC.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0202BCBC_H
#define PMDSKY_MAIN_0202BCBC_H
u32 IsAdvancedMenuActive2(s32 window_id);
#endif

6
include/main_020307A4.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_020307A4_H
#define PMDSKY_MAIN_020307A4_H
void SetAdvancedTextBoxField0x1C4(s32 window_id, u8 value);
#endif

6
include/main_0203083C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0203083C_H
#define PMDSKY_MAIN_0203083C_H
void SetAdvancedTextBoxField0x1C2(s32 window_id);
#endif

6
include/main_0203088C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0203088C_H
#define PMDSKY_MAIN_0203088C_H
void SetAdvancedTextBoxState5(s32 window_id);
#endif

View File

@@ -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

10
src/main_0202BA0C.c Normal file
View File

@@ -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;
}

9
src/main_0202BC44.c Normal file
View File

@@ -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);
}

12
src/main_0202BCBC.c Normal file
View File

@@ -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;
}

10
src/main_020307A4.c Normal file
View File

@@ -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;
}

10
src/main_0203083C.c Normal file
View File

@@ -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;
}

10
src/main_0203088C.c Normal file
View File

@@ -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;
}