Decomp four allocation, keyboard and area-name accessors

Decompile from asm:

  AllocUnkBagStruct        0x02042B98
  FreeUnkBagStruct         0x02042BBC
  SetAreaNameBoxState3     0x0202FD3C
  GetKeyboardStringResult  0x0203755C

AllocUnkBagStruct and FreeUnkBagStruct manage the pointer at offset 8 of
UNK_STORAGE_STRUCT_0XC, the field the selection accessors in the previous commit
read. The allocation is 0xC8 bytes, which is 0x32 words -- the same count
ClearBagSelectedItemTable zeroes and the same inventory size the bag walkers
use.

MemAlloc is still asm and has no owning header, so its prototype is provisional
and declared beside the caller, matching the signature overlay_31_02382820.c
already uses. That is now a second declaration of it; both should collapse into
one header when MemAlloc lands.

SetAreaNameBoxState3 writes a word at 0xA0 of the window contents, so the filler
before 0x198 in struct unk_0202AAA8 is split to expose it. Nothing after it
moves.

GetKeyboardStringResult reads through the unnamed pointer _020AFDF0, which keeps
its placeholder name, into a word at 0xF8 of whatever it points at.

GetWindow was looked at and deliberately left in asm. It indexes WINDOW_LIST
with a stride of 0xE0, so its argument is an index, but overlay_31_02382820.c
declares it as taking a struct Window * and passes one. Landing it correctly
means retyping that caller, and struct Window there describes only its first 7
bytes, so the two disagree about more than this function.

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:49:58 -07:00
parent 80c33c3540
commit 2472ad54f7
18 changed files with 7760 additions and 7675 deletions

View File

@@ -1,38 +1,21 @@
#pragma once
.public ADVANCED_TEXT_BOX_DEFAULT_WINDOW_PARAMS
.public ALERT_BOX_DEFAULT_WINDOW_PARAMS
.public AREA_NAME_BOX_DEFAULT_WINDOW_PARAMS
.public AnalyzeText
.public AppendStandardStringToMission
.public CONTROLS_CHART_DEFAULT_WINDOW_PARAMS
.public DeleteWindow
.public DrawTextInWindow
.public GetPressedButtons
.public GetWindowContents
.public GetWindowRectangle
.public InitPortraitParams
.public InitWindowInput
.public IsValidPortrait
.public LoadPortrait
.public MemAlloc
.public MemFree
.public MemZero
.public MemcpySimple
.public NewWindowScreenCheck
.public PORTRAIT_BOX_DEFAULT_WINDOW_PARAMS
.public PreprocessString
.public PreprocessStringFromId
.public TEXT_BOX_DEFAULT_WINDOW_PARAMS
.public UpdateAdvancedTextBox
.public UpdateWindow
.public UpdateAreaNameBox
.public _0209AF6C
.public _s32_div_f
.public sub_01FF9128
.public sub_01FF929C
.public sub_02020B60
.public sub_02020BC4
.public sub_02025D50
.public sub_02025E84
.public sub_0202613C
.public sub_02026184
.public sub_02026194

View File

@@ -0,0 +1,32 @@
#pragma once
.public ADVANCED_TEXT_BOX_DEFAULT_WINDOW_PARAMS
.public ALERT_BOX_DEFAULT_WINDOW_PARAMS
.public AnalyzeText
.public AppendStandardStringToMission
.public CONTROLS_CHART_DEFAULT_WINDOW_PARAMS
.public DeleteWindow
.public DrawTextInWindow
.public GetWindowContents
.public GetWindowRectangle
.public InitWindowInput
.public MemAlloc
.public MemFree
.public MemZero
.public NewWindowScreenCheck
.public PreprocessString
.public UpdateAdvancedTextBox
.public UpdateWindow
.public _s32_div_f
.public sub_01FF9128
.public sub_01FF929C
.public sub_02020B60
.public sub_02020BC4
.public sub_02025D50
.public sub_02025E84
.public sub_0202613C
.public sub_02026194
.public sub_020261D4
.public sub_02027B1C
.public sub_0202810C
.public sub_0202812C
.public sub_0202836C

View File

@@ -1,4 +1,65 @@
#pragma once
.public CheckDebugMenuField0x1A4
.public CheckOptionsMenuField0x1A4
.public CheckParentMenuField0x1A0
.public CloseDebugMenu
.public CloseDialogueBox
.public CloseOptionsMenu
.public CloseParentMenu
.public ClosePortraitBox
.public CloseSimpleMenu
.public CloseTextBox
.public CopyFrameTypeOption
.public CopyOrInitPreprocessorArgs
.public CreateDebugMenu
.public CreateDialogueBox
.public CreateOptionsMenu
.public CreateParentMenuFromStringIds
.public CreatePortraitBox
.public CreateSimpleMenu
.public CreateSimpleMenuFromStringIds
.public CreateTextBox
.public Debug_GetDebugFlag
.public Debug_GetLogFlag
.public Debug_SetDebugFlag
.public Debug_SetLogFlag
.public FreeActiveMenu
.public GetHeldButtons
.public GetOptions
.public GetOptionsMenuResult
.public GetOptionsMenuStates
.public GetPressedButtons
.public GetSimpleMenuResult__0202AEA4
.public GetSimpleMenuResult__0202B870
.public GetWindow
.public HidePortraitBox
.public InitMenu
.public InitPortraitParams
.public IsDebugMenuActive
.public IsDialogueBoxActive
.public IsOptionsMenuActive
.public IsParentMenuActive
.public IsSimpleMenuActive
.public IsValidPortrait
.public LoadOverlay
.public MENU_CONTROL_PTR
.public MemAlloc
.public MemFree
.public MemZero
.public MemcpySimple
.public NULL_OVERLAY_LOAD_ENTRY
.public OverlayIsLoaded
.public OverlayLoadEntriesEqual
.public PlaySeVolumeWrapper
.public SetFrameTypeOption
.public SetNotifyNote
.public SetOptions
.public SetSimpleMenuField0x1AC
.public ShowDialogueBox
.public ShowPortraitInPortraitBox
.public ShowStringIdInDialogueBox
.public ShowStringInDialogueBox
.public StrcpySimple
.public _0209B09C
.public _0209B0EC
.public _0209B0FC
@@ -15,195 +76,30 @@
.public _0209B244
.public _0209B254
.public _0209B264
.public _0209B288
.public _0209B28C
.public _0209B298
.public _0209B2B8
.public _0209B2C4
.public _0209B2D0
.public _0209B2DC
.public _0209B2E0
.public _0209B2E1
.public _0209B2E2
.public _0209B2E3
.public _0209B2EC
.public _0209B2FC
.public _0209B30C
.public _0209B31C
.public _0209B32C
.public _0209B32E
.public _0209B3B4
.public _0209B3B6
.public _0209B48C
.public _0209B4A4
.public _0209B4AC
.public _0209B4B8
.public _0209B4C0
.public _0209B4C4
.public _0209B4D4
.public _0209B4E4
.public _0209B4FC
.public _0209B50C
.public _0209C29C_JP
.public _0209C29D_JP
.public _0209C29E_JP
.public _0209C5C0
.public _0209C5D0
.public _0209C5E0
.public _0209C604
.public _0209C618
.public _0209C628
.public _0209C638
.public _0209C648
.public _0209C658
.public _0209C668
.public _0209C678
.public _0209C688
.public _0209C6B8
.public _0209C70C
.public _0209C764
.public _0209C798
.public _0209C7B8
.public _020AFDBC
.public _020AFDD0
.public _020AFDD8
.public _020AFDE0
.public _020AFDE8
.public _020AFDF0
.public _020AFE40
.public _020AFE58
.public _020AFE5C
.public _020B12A0_JP
.public _022AADF8
.public _s32_div_f
.public AppendStandardStringToMission
.public CheckDebugMenuField0x1A4
.public CheckOptionsMenuField0x1A4
.public CheckParentMenuField0x1A0
.public CloseAdvancedMenu
.public CloseAdvancedTextBox
.public CloseDebugMenu
.public CloseDialogueBox
.public CloseOptionsMenu
.public CloseParentMenu
.public ClosePortraitBox
.public CloseSimpleMenu
.public CloseTeamSelectionMenu
.public CloseTextBox
.public CopyFrameTypeOption
.public CopyOrInitPreprocessorArgs
.public CreateAdvancedMenu
.public CreateAdvancedTextBox
.public CreateDebugMenu
.public CreateDialogueBox
.public CreateOptionsMenu
.public CreateParentMenuFromStringIds
.public CreatePortraitBox
.public CreateSimpleMenu
.public CreateSimpleMenuFromStringIds
.public CreateTeamSelectionMenu
.public CreateTextBox
.public Debug_GetDebugFlag
.public Debug_GetLogFlag
.public Debug_Print0
.public Debug_SetDebugFlag
.public Debug_SetLogFlag
.public DrawTextInWindow
.public FemaleToMaleForm
.public FreeActiveMenu
.public GetActiveRosterIndex
.public GetActiveTeamMember
.public GetAdvancedMenuResult
.public GetAppointedLeaderMemberIdx
.public GetDexNumber
.public GetDigitInputResult
.public GetEvolutionPossibilities
.public GetHeldButtons
.public GetHero
.public GetHeroMemberIdx
.public GetItemMoveId16
.public GetKeyM2NSwitch
.public GetMainCharacter1MemberIdx
.public GetMainCharacter2MemberIdx
.public GetMainCharacter3MemberIdx
.public GetNameString
.public GetOptions
.public GetOptionsMenuResult
.public GetOptionsMenuStates
.public GetPartner
.public GetPartnerMemberIdx
.public GetPressedButtons
.public GetSimpleMenuResult__0202AEA4
.public GetSimpleMenuResult__0202B870
.public GetStringFromFileVeneer
.public GetTeamMember
.public GetType
.public GetWindow
.public HidePortraitBox
.public InitMenu
.public InitPortraitParams
.public IsAdvancedMenuActive2
.public IsAdvancedTextBoxActive
.public IsDebugMenuActive
.public IsDialogueBoxActive
.public IsMainCharacter
.public IsMovesetValidInTimeDarkness
.public IsOptionsMenuActive
.public IsParentMenuActive
.public IsShaymin
.public IsSimpleMenuActive
.public IsTeamSelectionMenuActive
.public IsTeamSelectionMenuState3
.public IsTextboxState3
.public IsValidPortrait
.public IsValidTeamMember
.public KEYBOARD_STRING_IDS
.public LoadOverlay
.public MemAlloc
.public MemcpySimple
.public MemFree
.public MemZero
.public MENU_CONTROL_PTR
.public NULL_OVERLAY_LOAD_ENTRY
.public ov11_0230D71C
.public OverlayIsLoaded
.public OverlayLoadEntriesEqual
.public PlaySeVolumeWrapper
.public PreprocessStringFromId
.public ReturnScriptMenuResultZero
.public SaveScriptVariableValueBytes
.public SetAdvancedTextBoxField0x1C2
.public SetAdvancedTextBoxState5
.public SetFrameTypeOption
.public SetMainTeamName
.public SetNotifyNote
.public SetOptions
.public SetSimpleMenuField0x1AC
.public ShowDialogueBox
.public ShowPortraitInPortraitBox
.public ShowStringIdInDialogueBox
.public ShowStringInDialogueBox
.public sprintf
.public strcpy
.public StrcpySimple
.public StrncpySimple
.public StrncpySimpleNoPadSafe
.public sub_020063F4
.public sub_0202065C
.public sub_0202372C
.public sub_02024B94
.public sub_020251F0
.public sub_02025C7C
.public sub_02025D50
.public sub_020264F8
.public sub_020265A8
.public sub_02027180
.public sub_02027B1C
.public sub_0202810C
.public sub_0202812C
.public sub_020282F4
.public sub_02028354
.public sub_0202836C
.public sub_020288FC
.public sub_0202A2A4
.public sub_0202D59C
@@ -214,34 +110,18 @@
.public sub_0202F334
.public sub_0202F3F8
.public sub_0202F954
.public sub_020309B8
.public sub_0203111C
.public sub_0203115C
.public sub_0203117C
.public sub_020311D4
.public sub_020311E8
.public sub_02031220
.public sub_02031888
.public sub_0203189C
.public sub_020318D0
.public sub_02031914
.public sub_02034840
.public sub_0203C784
.public sub_0203C9A0
.public sub_02037C78
.public sub_02037CA8
.public sub_02037CD8
.public sub_02037F58
.public sub_020383FC
.public sub_020384B0
.public sub_02038904
.public sub_02038A54
.public sub_02038ADC
.public sub_02038B80
.public sub_0203935C
.public sub_02048078
.public sub_0204964C
.public sub_0204DA1C
.public sub_0204E210
.public sub_0204E3C8
.public sub_02052FF8
.public sub_02053D1C
.public sub_02054F18
.public sub_02056410
.public sub_02056460
.public sub_020564B0
.public sub_02056F60
.public sub_020584F8
.public sub_02059B08
.public TEAM_MEMBER_TABLE_PTR
.public UpdateWindow
.public vsprintf

View File

@@ -0,0 +1,173 @@
#pragma once
.public AppendStandardStringToMission
.public CloseAdvancedMenu
.public CloseAdvancedTextBox
.public CloseDialogueBox
.public CloseSimpleMenu
.public CloseTeamSelectionMenu
.public CloseTextBox
.public CreateAdvancedMenu
.public CreateAdvancedTextBox
.public CreateDialogueBox
.public CreateSimpleMenuFromStringIds
.public CreateTeamSelectionMenu
.public CreateTextBox
.public Debug_Print0
.public DrawTextInWindow
.public FemaleToMaleForm
.public GetActiveRosterIndex
.public GetActiveTeamMember
.public GetAdvancedMenuResult
.public GetAppointedLeaderMemberIdx
.public GetDexNumber
.public GetDigitInputResult
.public GetEvolutionPossibilities
.public GetHero
.public GetHeroMemberIdx
.public GetItemMoveId16
.public GetKeyM2NSwitch
.public GetKeyboardStatus
.public GetKeyboardStringResult
.public GetMainCharacter1MemberIdx
.public GetMainCharacter2MemberIdx
.public GetMainCharacter3MemberIdx
.public GetNameString
.public GetPartner
.public GetPartnerMemberIdx
.public GetPressedButtons
.public GetSimpleMenuResult__0202B870
.public GetStringFromFileVeneer
.public GetTeamMember
.public GetType
.public GetWindow
.public IsAdvancedMenuActive2
.public IsAdvancedTextBoxActive
.public IsDialogueBoxActive
.public IsMainCharacter
.public IsMovesetValidInTimeDarkness
.public IsShaymin
.public IsSimpleMenuActive
.public IsTeamSelectionMenuActive
.public IsTeamSelectionMenuState3
.public IsTextboxState3
.public IsValidTeamMember
.public KEYBOARD_STRING_IDS
.public MemAlloc
.public MemFree
.public MemZero
.public MemcpySimple
.public PlaySeVolumeWrapper
.public PreprocessStringFromId
.public ReturnScriptMenuResultZero
.public SaveScriptVariableValueBytes
.public SetAdvancedTextBoxField0x1C2
.public SetAdvancedTextBoxState5
.public SetMainTeamName
.public ShowKeyboard
.public ShowStringIdInDialogueBox
.public StrcpySimple
.public StrncpySimple
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public UpdateWindow
.public _0209B288
.public _0209B28C
.public _0209B2C4
.public _0209B2D0
.public _0209B2DC
.public _0209B2E0
.public _0209B2E1
.public _0209B2E2
.public _0209B2E3
.public _0209B2EC
.public _0209B2FC
.public _0209B30C
.public _0209B31C
.public _0209B32C
.public _0209B32E
.public _0209B3B4
.public _0209B3B6
.public _0209B48C
.public _0209B4A4
.public _0209B4AC
.public _0209B4B8
.public _0209B4C0
.public _0209B4C4
.public _0209B4D4
.public _0209B4E4
.public _0209B4FC
.public _0209B50C
.public _0209C29C_JP
.public _0209C29D_JP
.public _0209C29E_JP
.public _0209C5C0
.public _0209C5D0
.public _0209C5E0
.public _0209C604
.public _0209C618
.public _0209C628
.public _0209C638
.public _0209C648
.public _0209C658
.public _0209C668
.public _0209C678
.public _0209C688
.public _0209C6B8
.public _0209C70C
.public _0209C764
.public _0209C798
.public _0209C7B8
.public _020AFDF0
.public _020AFE40
.public _020AFE58
.public _020AFE5C
.public _020B12A0_JP
.public _022AADF8
.public _s32_div_f
.public ov11_0230D71C
.public sprintf
.public strcpy
.public sub_020063F4
.public sub_0202065C
.public sub_0202372C
.public sub_02024B94
.public sub_020251F0
.public sub_02025C7C
.public sub_02025D50
.public sub_020264F8
.public sub_020265A8
.public sub_02027B1C
.public sub_0202810C
.public sub_0202812C
.public sub_02028354
.public sub_0202836C
.public sub_0202A2A4
.public sub_0202F2C4
.public sub_0202F954
.public sub_020309B8
.public sub_0203111C
.public sub_0203115C
.public sub_0203117C
.public sub_020311D4
.public sub_020311E8
.public sub_02031220
.public sub_02031888
.public sub_0203189C
.public sub_020318D0
.public sub_02031914
.public sub_02037468
.public sub_0203C784
.public sub_0203C9A0
.public sub_0204DA1C
.public sub_0204E210
.public sub_0204E3C8
.public sub_02052FF8
.public sub_02053D1C
.public sub_02054F18
.public sub_02056410
.public sub_02056460
.public sub_020564B0
.public sub_02056F60
.public sub_020584F8
.public sub_02059B08
.public vsprintf

View File

@@ -1,6 +1,5 @@
#pragma once
.public BAG_ITEMS_PTR_MIRROR
.public ClearBagSelectedItemTable
.public CloseCollectionMenu
.public CloseTextBox
.public ConvertStorageItemAtIdxToItem

View File

@@ -910,788 +910,3 @@ _0202FD30: .word 0x0000C402
_0202FD34: .word UpdateAreaNameBox
_0202FD38: .word AREA_NAME_BOX_DEFAULT_WINDOW_PARAMS
arm_func_end CreateAreaNameBox
arm_func_start SetAreaNameBoxState3
SetAreaNameBoxState3: ; 0x0202FD3C
stmdb sp!, {r3, lr}
bl GetWindowContents
mov r1, #3
str r1, [r0, #0xa0]
ldmia sp!, {r3, pc}
arm_func_end SetAreaNameBoxState3
arm_func_start CloseAreaNameBox
CloseAreaNameBox: ; 0x0202FD50
stmdb sp!, {r4, lr}
mov r4, r0
bl GetWindowContents
bl MemFree
mov r0, r4
bl DeleteWindow
ldmia sp!, {r4, pc}
arm_func_end CloseAreaNameBox
arm_func_start IsAreaNameBoxActive
IsAreaNameBoxActive: ; 0x0202FD6C
stmdb sp!, {r3, lr}
bl GetWindowContents
ldr r0, [r0, #0xa0]
cmp r0, #2
cmpne r0, #4
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, pc}
arm_func_end IsAreaNameBoxActive
arm_func_start UpdateAreaNameBox
UpdateAreaNameBox: ; 0x0202FD8C
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
ldr r4, [r5, #0xc]
ldr r0, [r4, #0xa0]
cmp r0, #3
addls pc, pc, r0, lsl #2
ldmia sp!, {r4, r5, r6, pc}
_0202FDA8: ; jump table
b _0202FDB8 ; case 0
b _0202FDD0 ; case 1
ldmia sp!, {r4, r5, r6, pc} ; case 2
b _0202FE0C ; case 3
_0202FDB8:
ldrsb r0, [r5, #0x10]
bl sub_0202810C
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
mov r0, #1
str r0, [r4, #0xa0]
_0202FDD0:
ldrsb r0, [r5, #0x10]
ldr r6, [r5, #0xc]
bl sub_02027B1C
ldrsb r0, [r5, #0x10]
ldr r1, [r6, #0x1b0]
ldr r2, [r6, #0x1ac]
add r3, r6, #0xac
bl DrawTextInWindow
ldrsb r0, [r5, #0x10]
bl UpdateWindow
mov r0, #2
str r0, [r4, #0xa0]
sub r0, r0, #3
str r0, [r5, #0xb8]
ldmia sp!, {r4, r5, r6, pc}
_0202FE0C:
ldrsb r0, [r5, #0x10]
bl sub_0202812C
cmp r0, #0
mvnne r0, #4
strne r0, [r5, #0xb8]
movne r0, #4
strne r0, [r4, #0xa0]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end UpdateAreaNameBox
arm_func_start CreateControlsChart
CreateControlsChart: ; 0x0202FE2C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #0x10
mov r7, r0
mov r5, r1
mov r0, #0xa8
mov r1, #8
mov r4, r2
mov r6, r3
bl MemAlloc
mov ip, r0
cmp r7, #0
ldreq r0, _0202FECC ; =CONTROLS_CHART_DEFAULT_WINDOW_PARAMS
strh r6, [ip, #0xa4]
add lr, sp, #0
ldmeqia r0, {r0, r1, r2, r3}
stmeqia lr, {r0, r1, r2, r3}
ldmneia r7, {r0, r1, r2, r3}
stmneia lr, {r0, r1, r2, r3}
ldrne r0, _0202FED0 ; =UpdateControlsChart
str ip, [sp, #0xc]
strne r0, [sp]
ldr r0, _0202FED0 ; =UpdateControlsChart
cmp r4, #0
stmia ip, {r0, r5}
beq _0202FEB0
add lr, ip, #8
mov r5, #9
_0202FE98:
ldmia r4!, {r0, r1, r2, r3}
stmia lr!, {r0, r1, r2, r3}
subs r5, r5, #1
bne _0202FE98
ldmia r4, {r0, r1}
stmia lr, {r0, r1}
_0202FEB0:
mov r2, #0
add r0, sp, #0
mov r1, #3
str r2, [ip, #0xa0]
bl NewWindowScreenCheck
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_0202FECC: .word CONTROLS_CHART_DEFAULT_WINDOW_PARAMS
_0202FED0: .word UpdateControlsChart
arm_func_end CreateControlsChart
arm_func_start CloseControlsChart
CloseControlsChart: ; 0x0202FED4
stmdb sp!, {r4, lr}
mov r4, r0
bl GetWindowContents
bl MemFree
mov r0, r4
bl DeleteWindow
ldmia sp!, {r4, pc}
arm_func_end CloseControlsChart
arm_func_start IsControlsChartActive
IsControlsChartActive: ; 0x0202FEF0
stmdb sp!, {r3, lr}
bl GetWindowContents
ldr r0, [r0, #0xa0]
cmp r0, #2
cmpne r0, #4
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, pc}
arm_func_end IsControlsChartActive
arm_func_start UpdateControlsChart
UpdateControlsChart: ; 0x0202FF10
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
ldr r4, [r5, #0xc]
ldr r0, [r4, #0xa0]
cmp r0, #3
addls pc, pc, r0, lsl #2
ldmia sp!, {r4, r5, r6, pc}
_0202FF2C: ; jump table
b _0202FF3C ; case 0
b _0202FF54 ; case 1
ldmia sp!, {r4, r5, r6, pc} ; case 2
b _0202FF90 ; case 3
_0202FF3C:
ldrsb r0, [r5, #0x10]
bl sub_0202810C
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
mov r0, #1
str r0, [r4, #0xa0]
_0202FF54:
ldrsb r0, [r5, #0x10]
ldr r6, [r5, #0xc]
bl sub_02027B1C
ldrsb r0, [r5, #0x10]
ldrh r3, [r6, #0xa4]
mov r1, #4
mov r2, #2
bl AppendStandardStringToMission
ldrsb r0, [r5, #0x10]
bl UpdateWindow
mov r0, #2
str r0, [r4, #0xa0]
sub r0, r0, #3
str r0, [r5, #0xb8]
ldmia sp!, {r4, r5, r6, pc}
_0202FF90:
ldrsb r0, [r5, #0x10]
bl sub_0202812C
cmp r0, #0
mvnne r0, #4
strne r0, [r5, #0xb8]
movne r0, #4
strne r0, [r4, #0xa0]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end UpdateControlsChart
arm_func_start CreateAlertBox
CreateAlertBox: ; 0x0202FFB0
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x10
mov r5, r0
mov r0, #0x650
mov r1, #8
bl MemAlloc
mov r1, #0x650
mov r4, r0
bl MemZero
cmp r5, #0
ldreq r0, _0203003C ; =ALERT_BOX_DEFAULT_WINDOW_PARAMS
add ip, sp, #0
ldmeqia r0, {r0, r1, r2, r3}
stmeqia ip, {r0, r1, r2, r3}
ldmneia r5, {r0, r1, r2, r3}
stmneia ip, {r0, r1, r2, r3}
ldrne r0, _02030040 ; =UpdateAlertBox
str r4, [sp, #0xc]
strne r0, [sp]
add r0, sp, #0
mov r1, #3
bl NewWindowScreenCheck
strb r0, [r4]
ldrsb r1, [r4]
add r0, r4, #8
bl sub_02025E84
mov r1, #0
str r1, [r4, #4]
add r0, r4, #0x600
strh r1, [r0, #0x44]
strh r1, [r0, #0x46]
strh r1, [r0, #0x48]
ldrsb r0, [r4]
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0203003C: .word ALERT_BOX_DEFAULT_WINDOW_PARAMS
_02030040: .word UpdateAlertBox
arm_func_end CreateAlertBox
arm_func_start CloseAlertBox
CloseAlertBox: ; 0x02030044
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl GetWindowContents
mov r4, r0
ldrsb r0, [r4]
bl sub_0202836C
add r0, r4, #8
bl sub_0202613C
mov r0, r5
bl GetWindowContents
bl MemFree
mov r0, r5
bl DeleteWindow
ldmia sp!, {r3, r4, r5, pc}
arm_func_end CloseAlertBox
arm_func_start sub_0203007C
sub_0203007C: ; 0x0203007C
add r0, r0, #0x600
ldrsh r1, [r0, #0x44]
add r1, r1, #1
strh r1, [r0, #0x44]
ldrsh r1, [r0, #0x44]
cmp r1, #4
movge r1, #0
strgeh r1, [r0, #0x44]
bx lr
arm_func_end sub_0203007C
arm_func_start sub_020300A0
sub_020300A0: ; 0x020300A0
add r0, r0, #0x600
ldrsh r0, [r0, #0x44]
add r0, r0, #1
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
cmp r0, #4
movge r0, #0
bx lr
arm_func_end sub_020300A0
arm_func_start sub_020300C0
sub_020300C0: ; 0x020300C0
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #8
mov r5, r0
add ip, sp, #0
str r1, [sp]
mov r1, ip
add r0, r5, #0xc
mov r4, r3
str r2, [sp, #4]
bl sub_02020B60
ldr r1, _02030108 ; =0x0000C402
mov r2, r4
add r0, r5, #0xc
bl sub_02020BC4
add r0, r5, #0xc
bl AnalyzeText
add sp, sp, #8
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02030108: .word 0x0000C402
arm_func_end sub_020300C0
arm_func_start AddMessageToAlertBox
AddMessageToAlertBox: ; 0x0203010C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r1
mov r6, r2
mov r5, r3
bl GetWindowContents
mov r4, r0
ldr r0, [r4, #4]
cmp r0, #2
cmpne r0, #3
beq _02030144
add r0, r4, #8
bl sub_0202613C
mov r0, #1
str r0, [r4, #4]
_02030144:
mov r0, r4
bl sub_020300A0
add r1, r4, #0x600
ldrsh r2, [r1, #0x46]
cmp r2, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
str r5, [sp]
ldrsh r1, [r1, #0x44]
add r0, r4, #0x29
add r2, r0, #0x100
mov r0, #0x148
smlabb r0, r1, r0, r2
mov r2, r6
mov r3, r7
mov r1, #0x140
bl PreprocessString
add r1, r4, #0x600
add r0, r4, #0x29
ldrsh r1, [r1, #0x44]
add r2, r0, #0x100
mov r0, #0x148
smlabb r2, r1, r0, r2
mov r1, r7
add r0, r4, #8
bl sub_02026194
add r1, r4, #0x600
ldrsh r0, [r1, #0x44]
mov r2, #0x148
mov r6, #0
smlabb r0, r0, r2, r4
add r0, r0, #0x200
strh r7, [r0, #0x6a]
ldrsh r5, [r1, #0x44]
ldrb r3, [sp, #0x18]
mov r0, r4
smlabb r5, r5, r2, r4
str r6, [r5, #0x124]
ldrsh r1, [r1, #0x44]
smlabb r1, r1, r2, r4
strb r3, [r1, #0x128]
bl sub_0203007C
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end AddMessageToAlertBox
arm_func_start IsAlertBoxActive
IsAlertBoxActive: ; 0x020301F4
stmdb sp!, {r3, lr}
bl GetWindowContents
ldr r0, [r0, #4]
cmp r0, #3
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end IsAlertBoxActive
arm_func_start sub_02030214
sub_02030214: ; 0x02030214
stmdb sp!, {r4, lr}
bl GetWindowContents
mov r4, r0
ldr r0, [r4, #4]
cmp r0, #5
addls pc, pc, r0, lsl #2
b _02030260
_02030230: ; jump table
b _02030260 ; case 0
b _02030248 ; case 1
b _02030254 ; case 2
b _02030254 ; case 3
ldmia sp!, {r4, pc} ; case 4
ldmia sp!, {r4, pc} ; case 5
_02030248:
mov r0, #5
str r0, [r4, #4]
ldmia sp!, {r4, pc}
_02030254:
mov r0, #4
str r0, [r4, #4]
ldmia sp!, {r4, pc}
_02030260:
add r0, r4, #8
bl sub_0202613C
mov r0, #0
str r0, [r4, #4]
ldmia sp!, {r4, pc}
arm_func_end sub_02030214
arm_func_start UpdateAlertBox
UpdateAlertBox: ; 0x02030274
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r5, r0
ldr r4, [r5, #0xc]
ldr r0, [r4, #4]
cmp r0, #5
addls pc, pc, r0, lsl #2
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_02030290: ; jump table
b _020302A8 ; case 0
b _020302C8 ; case 1
b _020302E0 ; case 2
b _02030438 ; case 3
b _0203056C ; case 4
b _02030588 ; case 5
_020302A8:
add r0, r4, #8
bl sub_020261D4
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #1
str r0, [r4, #4]
sub r0, r0, #2
str r0, [r5, #0xb8]
_020302C8:
ldrsb r0, [r5, #0x10]
bl sub_0202810C
cmp r0, #0
movne r0, #2
strne r0, [r4, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_020302E0:
ldrsb r0, [r5, #0x10]
bl GetWindowContents
add r0, r0, #0x600
ldrsh r1, [r0, #0x46]
ldrsh r0, [r0, #0x44]
cmp r1, r0
movne r0, #1
moveq r0, #0
tst r0, #0xff
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrsb r4, [r5, #0x10]
mov r0, r4
bl GetWindowContents
mov r6, r0
add r3, r6, #0x600
ldr r1, [r6, #0x20]
ldrsh r2, [r3, #0x4a]
mov r1, r1, lsl #0x10
ldr r5, [r6, #0x10]
mov r8, r1, asr #0x10
mla r1, r2, r8, r5
ldr r2, [r6, #0xc]
mov r7, r1, lsl #0x10
mov r2, r2, lsl #0x10
ldrsh r3, [r3, #0x46]
mov r1, #0x148
add r5, r6, #0x124
smulbb r3, r3, r1
ldr r1, [r5, r3]
add r5, r5, r3
cmp r1, #1
mov r1, r2, asr #0x10
mov r7, r7, asr #0x10
bne _02030388
mov r5, #0x17
mov r0, r4
add r2, r7, r8
mov r1, #0
mov r3, #0xe0
str r5, [sp]
bl sub_02025D50
b _020303C4
_02030388:
mov r2, r7
add r3, r5, #5
bl sub_020300C0
ldrb r0, [r5, #4]
cmp r0, #0
beq _020303C4
cmp r7, r8
blt _020303C4
mov r5, #0x17
mov r0, r4
sub r2, r7, #2
mov r1, #0
mov r3, #0xe0
str r5, [sp]
bl sub_02025D50
_020303C4:
mov r0, r4
bl UpdateWindow
add r0, r6, #0x600
ldrsh r1, [r0, #0x46]
strh r1, [r0, #0x48]
ldrsh r1, [r0, #0x46]
add r1, r1, #1
strh r1, [r0, #0x46]
ldrsh r1, [r0, #0x46]
cmp r1, #4
movge r1, #0
strgeh r1, [r0, #0x46]
add r0, r6, #0x600
ldrsh r1, [r0, #0x4a]
cmp r1, #3
movge r1, #3
strge r1, [r6, #4]
movge r1, #0
strgeh r1, [r0, #0x4c]
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r1, [r6, #0xa0]
ldr r0, [r6, #0x10]
add r2, r1, r8
mov r1, r8
sub r0, r2, r0
bl _s32_div_f
add r1, r6, #0x600
strh r0, [r1, #0x4a]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_02030438:
ldrsb r5, [r5, #0x10]
mov r0, r5
bl GetWindowContents
mov r7, r0
add r3, r7, #0x600
ldr r1, [r7, #0x20]
ldrsh r2, [r3, #0x4a]
mov r1, r1, lsl #0x10
ldr r6, [r7, #0x10]
mov r8, r1, asr #0x10
ldr r1, [r7, #0xc]
mla r6, r2, r8, r6
ldrsh sb, [r3, #0x4c]
mov r2, r1, lsl #0x10
ldrsh ip, [r3, #0x48]
mov r1, #0x148
add r3, sb, r6
mov r3, r3, lsl #0x10
smulbb r6, ip, r1
add sb, r7, #0x124
ldr r1, [sb, r6]
add r6, sb, r6
cmp r1, #1
mov r1, r2, asr #0x10
mov sb, r3, asr #0x10
bne _020304C0
mov r6, #0x17
mov r0, r5
add r2, sb, r8
mov r1, #0
mov r3, #0xe0
str r6, [sp]
bl sub_02025D50
b _020304FC
_020304C0:
mov r2, sb
add r3, r6, #5
bl sub_020300C0
ldrb r0, [r6, #4]
cmp r0, #0
beq _020304FC
cmp sb, r8
blt _020304FC
mov r6, #0x17
mov r0, r5
sub r2, sb, #2
mov r1, #0
mov r3, #0xe0
str r6, [sp]
bl sub_02025D50
_020304FC:
add r0, r7, #0x600
ldrsh r0, [r0, #0x4c]
add r0, r0, r8
cmp r0, #1
mov r0, r5
bne _02030528
bl sub_01FF9128
add r0, r7, #0x600
ldrsh r1, [r0, #0x4c]
sub r1, r1, #1
b _02030538
_02030528:
bl sub_01FF929C
add r0, r7, #0x600
ldrsh r1, [r0, #0x4c]
sub r1, r1, #2
_02030538:
strh r1, [r0, #0x4c]
add r0, r7, #0x600
ldrsh r2, [r0, #0x4c]
rsb r1, r8, #0
cmp r2, r1
movle r1, #3
strleh r1, [r0, #0x4a]
movle r0, #1
movgt r0, #0
cmp r0, #0
movne r0, #2
strne r0, [r4, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0203056C:
ldrsb r0, [r5, #0x10]
bl sub_0202836C
ldrsb r0, [r5, #0x10]
bl sub_02027B1C
mov r0, #5
str r0, [r4, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_02030588:
ldrsb r0, [r5, #0x10]
bl sub_0202812C
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r1, #0
add r0, r4, #8
str r1, [r4, #4]
bl sub_0202613C
mvn r0, #5
str r0, [r5, #0xb8]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
arm_func_end UpdateAlertBox
arm_func_start CreateAdvancedTextBox
CreateAdvancedTextBox: ; 0x020305B4
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r3
ldr ip, [sp, #0x14]
ldr r3, [sp, #0x10]
str ip, [sp]
bl CreateAdvancedTextBoxInternal
add r1, r0, #0x100
str r4, [r0, #0x1a4]
ldrsb r0, [r1, #0xa0]
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
arm_func_end CreateAdvancedTextBox
arm_func_start CreateAdvancedTextBoxWithArg
CreateAdvancedTextBoxWithArg: ; 0x020305E4
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r3
ldr ip, [sp, #0x18]
ldr r3, [sp, #0x14]
str ip, [sp]
bl CreateAdvancedTextBoxInternal
ldr r2, [sp, #0x10]
str r4, [r0, #0x1a8]
add r1, r0, #0x100
str r2, [r0, #0x1ac]
ldrsb r0, [r1, #0xa0]
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
arm_func_end CreateAdvancedTextBoxWithArg
arm_func_start CreateAdvancedTextBoxInternal
CreateAdvancedTextBoxInternal: ; 0x0203061C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x28
mov r8, r0
mov r7, r1
mov r0, #0x1c8
mov r1, #8
mov r6, r2
mov r5, r3
bl MemAlloc
mov r4, r0
mov r0, #0
str r0, [r4, #0x1a4]
str r0, [r4, #0x1a8]
str r0, [r4, #0x1ac]
str r0, [r4, #0x1b8]
mov r0, #1
cmp r8, #0
strb r0, [r4, #0x1c4]
addne ip, sp, #0x18
ldmneia r8, {r0, r1, r2, r3}
stmneia ip, {r0, r1, r2, r3}
ldrne r0, _02030774 ; =UpdateAdvancedTextBox
strne r0, [sp, #0x18]
bne _02030690
ldr r0, _02030778 ; =ADVANCED_TEXT_BOX_DEFAULT_WINDOW_PARAMS
add r8, sp, #0x18
ldmia r0, {r0, r1, r2, r3}
stmia r8, {r0, r1, r2, r3}
orr r7, r7, #0x300000
_02030690:
tst r7, #0x200000
ldrneb r1, [sp, #0x1c]
ldrneb r0, [sp, #0x1e]
str r4, [sp, #0x24]
subne r0, r1, r0
strneb r0, [sp, #0x1c]
tst r7, #0x100000
ldrneb r1, [sp, #0x1d]
ldrneb r0, [sp, #0x1f]
subne r0, r1, r0
strneb r0, [sp, #0x1d]
ldr r0, _02030774 ; =UpdateAdvancedTextBox
cmp r6, #0
str r0, [r4]
str r7, [r4, #0x104]
beq _020306F0
add ip, r4, #0x108
mov r8, #9
_020306D8:
ldmia r6!, {r0, r1, r2, r3}
stmia ip!, {r0, r1, r2, r3}
subs r8, r8, #1
bne _020306D8
ldmia r6, {r0, r1}
stmia ip, {r0, r1}
_020306F0:
mov r2, #0
str r2, [r4, #0x1bc]
strb r2, [r4, #0x1c0]
strb r2, [r4, #0x1c1]
strb r2, [r4, #0x1c2]
str r2, [r4, #0x1b0]
str r2, [r4, #0x1b4]
add r0, sp, #0x18
mov r1, #3
strb r2, [r4, #0x1c3]
bl NewWindowScreenCheck
add r1, sp, #8
strb r0, [r4, #0x1a0]
bl GetWindowRectangle
mov r1, #0x100
strh r1, [r4, #0xfc]
tst r7, #0x8000
moveq r5, #0
streq r5, [sp, #0x40]
strh r1, [r4, #0xfe]
add r0, r4, #0x100
strh r1, [r0]
strh r1, [r0, #2]
ldr r6, [sp, #0x40]
add r3, sp, #8
mov r1, r7
add r0, r4, #4
add r2, r4, #0x108
stmia sp, {r5, r6}
bl InitWindowInput
mov r0, r4
add sp, sp, #0x28
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_02030774: .word UpdateAdvancedTextBox
_02030778: .word ADVANCED_TEXT_BOX_DEFAULT_WINDOW_PARAMS
arm_func_end CreateAdvancedTextBoxInternal
arm_func_start SetAdvancedTextBoxPartialMenu
SetAdvancedTextBoxPartialMenu: ; 0x0203077C
stmdb sp!, {r4, lr}
mov r4, r1
bl GetWindowContents
strb r4, [r0, #0x1c3]
ldr r1, [r0, #0x104]
tst r4, #0xff
orrne r1, r1, #0x400000
biceq r1, r1, #0x400000
str r1, [r0, #0x104]
ldmia sp!, {r4, pc}
arm_func_end SetAdvancedTextBoxPartialMenu

780
asm/main_0202FD50.s Normal file
View File

@@ -0,0 +1,780 @@
.include "asm/macros.inc"
.include "main_0202FD50.inc"
.text
arm_func_start CloseAreaNameBox
CloseAreaNameBox: ; 0x0202FD50
stmdb sp!, {r4, lr}
mov r4, r0
bl GetWindowContents
bl MemFree
mov r0, r4
bl DeleteWindow
ldmia sp!, {r4, pc}
arm_func_end CloseAreaNameBox
arm_func_start IsAreaNameBoxActive
IsAreaNameBoxActive: ; 0x0202FD6C
stmdb sp!, {r3, lr}
bl GetWindowContents
ldr r0, [r0, #0xa0]
cmp r0, #2
cmpne r0, #4
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, pc}
arm_func_end IsAreaNameBoxActive
arm_func_start UpdateAreaNameBox
UpdateAreaNameBox: ; 0x0202FD8C
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
ldr r4, [r5, #0xc]
ldr r0, [r4, #0xa0]
cmp r0, #3
addls pc, pc, r0, lsl #2
ldmia sp!, {r4, r5, r6, pc}
_0202FDA8: ; jump table
b _0202FDB8 ; case 0
b _0202FDD0 ; case 1
ldmia sp!, {r4, r5, r6, pc} ; case 2
b _0202FE0C ; case 3
_0202FDB8:
ldrsb r0, [r5, #0x10]
bl sub_0202810C
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
mov r0, #1
str r0, [r4, #0xa0]
_0202FDD0:
ldrsb r0, [r5, #0x10]
ldr r6, [r5, #0xc]
bl sub_02027B1C
ldrsb r0, [r5, #0x10]
ldr r1, [r6, #0x1b0]
ldr r2, [r6, #0x1ac]
add r3, r6, #0xac
bl DrawTextInWindow
ldrsb r0, [r5, #0x10]
bl UpdateWindow
mov r0, #2
str r0, [r4, #0xa0]
sub r0, r0, #3
str r0, [r5, #0xb8]
ldmia sp!, {r4, r5, r6, pc}
_0202FE0C:
ldrsb r0, [r5, #0x10]
bl sub_0202812C
cmp r0, #0
mvnne r0, #4
strne r0, [r5, #0xb8]
movne r0, #4
strne r0, [r4, #0xa0]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end UpdateAreaNameBox
arm_func_start CreateControlsChart
CreateControlsChart: ; 0x0202FE2C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #0x10
mov r7, r0
mov r5, r1
mov r0, #0xa8
mov r1, #8
mov r4, r2
mov r6, r3
bl MemAlloc
mov ip, r0
cmp r7, #0
ldreq r0, _0202FECC ; =CONTROLS_CHART_DEFAULT_WINDOW_PARAMS
strh r6, [ip, #0xa4]
add lr, sp, #0
ldmeqia r0, {r0, r1, r2, r3}
stmeqia lr, {r0, r1, r2, r3}
ldmneia r7, {r0, r1, r2, r3}
stmneia lr, {r0, r1, r2, r3}
ldrne r0, _0202FED0 ; =UpdateControlsChart
str ip, [sp, #0xc]
strne r0, [sp]
ldr r0, _0202FED0 ; =UpdateControlsChart
cmp r4, #0
stmia ip, {r0, r5}
beq _0202FEB0
add lr, ip, #8
mov r5, #9
_0202FE98:
ldmia r4!, {r0, r1, r2, r3}
stmia lr!, {r0, r1, r2, r3}
subs r5, r5, #1
bne _0202FE98
ldmia r4, {r0, r1}
stmia lr, {r0, r1}
_0202FEB0:
mov r2, #0
add r0, sp, #0
mov r1, #3
str r2, [ip, #0xa0]
bl NewWindowScreenCheck
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_0202FECC: .word CONTROLS_CHART_DEFAULT_WINDOW_PARAMS
_0202FED0: .word UpdateControlsChart
arm_func_end CreateControlsChart
arm_func_start CloseControlsChart
CloseControlsChart: ; 0x0202FED4
stmdb sp!, {r4, lr}
mov r4, r0
bl GetWindowContents
bl MemFree
mov r0, r4
bl DeleteWindow
ldmia sp!, {r4, pc}
arm_func_end CloseControlsChart
arm_func_start IsControlsChartActive
IsControlsChartActive: ; 0x0202FEF0
stmdb sp!, {r3, lr}
bl GetWindowContents
ldr r0, [r0, #0xa0]
cmp r0, #2
cmpne r0, #4
movne r0, #1
moveq r0, #0
ldmia sp!, {r3, pc}
arm_func_end IsControlsChartActive
arm_func_start UpdateControlsChart
UpdateControlsChart: ; 0x0202FF10
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
ldr r4, [r5, #0xc]
ldr r0, [r4, #0xa0]
cmp r0, #3
addls pc, pc, r0, lsl #2
ldmia sp!, {r4, r5, r6, pc}
_0202FF2C: ; jump table
b _0202FF3C ; case 0
b _0202FF54 ; case 1
ldmia sp!, {r4, r5, r6, pc} ; case 2
b _0202FF90 ; case 3
_0202FF3C:
ldrsb r0, [r5, #0x10]
bl sub_0202810C
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
mov r0, #1
str r0, [r4, #0xa0]
_0202FF54:
ldrsb r0, [r5, #0x10]
ldr r6, [r5, #0xc]
bl sub_02027B1C
ldrsb r0, [r5, #0x10]
ldrh r3, [r6, #0xa4]
mov r1, #4
mov r2, #2
bl AppendStandardStringToMission
ldrsb r0, [r5, #0x10]
bl UpdateWindow
mov r0, #2
str r0, [r4, #0xa0]
sub r0, r0, #3
str r0, [r5, #0xb8]
ldmia sp!, {r4, r5, r6, pc}
_0202FF90:
ldrsb r0, [r5, #0x10]
bl sub_0202812C
cmp r0, #0
mvnne r0, #4
strne r0, [r5, #0xb8]
movne r0, #4
strne r0, [r4, #0xa0]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end UpdateControlsChart
arm_func_start CreateAlertBox
CreateAlertBox: ; 0x0202FFB0
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x10
mov r5, r0
mov r0, #0x650
mov r1, #8
bl MemAlloc
mov r1, #0x650
mov r4, r0
bl MemZero
cmp r5, #0
ldreq r0, _0203003C ; =ALERT_BOX_DEFAULT_WINDOW_PARAMS
add ip, sp, #0
ldmeqia r0, {r0, r1, r2, r3}
stmeqia ip, {r0, r1, r2, r3}
ldmneia r5, {r0, r1, r2, r3}
stmneia ip, {r0, r1, r2, r3}
ldrne r0, _02030040 ; =UpdateAlertBox
str r4, [sp, #0xc]
strne r0, [sp]
add r0, sp, #0
mov r1, #3
bl NewWindowScreenCheck
strb r0, [r4]
ldrsb r1, [r4]
add r0, r4, #8
bl sub_02025E84
mov r1, #0
str r1, [r4, #4]
add r0, r4, #0x600
strh r1, [r0, #0x44]
strh r1, [r0, #0x46]
strh r1, [r0, #0x48]
ldrsb r0, [r4]
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_0203003C: .word ALERT_BOX_DEFAULT_WINDOW_PARAMS
_02030040: .word UpdateAlertBox
arm_func_end CreateAlertBox
arm_func_start CloseAlertBox
CloseAlertBox: ; 0x02030044
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl GetWindowContents
mov r4, r0
ldrsb r0, [r4]
bl sub_0202836C
add r0, r4, #8
bl sub_0202613C
mov r0, r5
bl GetWindowContents
bl MemFree
mov r0, r5
bl DeleteWindow
ldmia sp!, {r3, r4, r5, pc}
arm_func_end CloseAlertBox
arm_func_start sub_0203007C
sub_0203007C: ; 0x0203007C
add r0, r0, #0x600
ldrsh r1, [r0, #0x44]
add r1, r1, #1
strh r1, [r0, #0x44]
ldrsh r1, [r0, #0x44]
cmp r1, #4
movge r1, #0
strgeh r1, [r0, #0x44]
bx lr
arm_func_end sub_0203007C
arm_func_start sub_020300A0
sub_020300A0: ; 0x020300A0
add r0, r0, #0x600
ldrsh r0, [r0, #0x44]
add r0, r0, #1
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
cmp r0, #4
movge r0, #0
bx lr
arm_func_end sub_020300A0
arm_func_start sub_020300C0
sub_020300C0: ; 0x020300C0
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #8
mov r5, r0
add ip, sp, #0
str r1, [sp]
mov r1, ip
add r0, r5, #0xc
mov r4, r3
str r2, [sp, #4]
bl sub_02020B60
ldr r1, _02030108 ; =0x0000C402
mov r2, r4
add r0, r5, #0xc
bl sub_02020BC4
add r0, r5, #0xc
bl AnalyzeText
add sp, sp, #8
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_02030108: .word 0x0000C402
arm_func_end sub_020300C0
arm_func_start AddMessageToAlertBox
AddMessageToAlertBox: ; 0x0203010C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r1
mov r6, r2
mov r5, r3
bl GetWindowContents
mov r4, r0
ldr r0, [r4, #4]
cmp r0, #2
cmpne r0, #3
beq _02030144
add r0, r4, #8
bl sub_0202613C
mov r0, #1
str r0, [r4, #4]
_02030144:
mov r0, r4
bl sub_020300A0
add r1, r4, #0x600
ldrsh r2, [r1, #0x46]
cmp r2, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
str r5, [sp]
ldrsh r1, [r1, #0x44]
add r0, r4, #0x29
add r2, r0, #0x100
mov r0, #0x148
smlabb r0, r1, r0, r2
mov r2, r6
mov r3, r7
mov r1, #0x140
bl PreprocessString
add r1, r4, #0x600
add r0, r4, #0x29
ldrsh r1, [r1, #0x44]
add r2, r0, #0x100
mov r0, #0x148
smlabb r2, r1, r0, r2
mov r1, r7
add r0, r4, #8
bl sub_02026194
add r1, r4, #0x600
ldrsh r0, [r1, #0x44]
mov r2, #0x148
mov r6, #0
smlabb r0, r0, r2, r4
add r0, r0, #0x200
strh r7, [r0, #0x6a]
ldrsh r5, [r1, #0x44]
ldrb r3, [sp, #0x18]
mov r0, r4
smlabb r5, r5, r2, r4
str r6, [r5, #0x124]
ldrsh r1, [r1, #0x44]
smlabb r1, r1, r2, r4
strb r3, [r1, #0x128]
bl sub_0203007C
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end AddMessageToAlertBox
arm_func_start IsAlertBoxActive
IsAlertBoxActive: ; 0x020301F4
stmdb sp!, {r3, lr}
bl GetWindowContents
ldr r0, [r0, #4]
cmp r0, #3
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
arm_func_end IsAlertBoxActive
arm_func_start sub_02030214
sub_02030214: ; 0x02030214
stmdb sp!, {r4, lr}
bl GetWindowContents
mov r4, r0
ldr r0, [r4, #4]
cmp r0, #5
addls pc, pc, r0, lsl #2
b _02030260
_02030230: ; jump table
b _02030260 ; case 0
b _02030248 ; case 1
b _02030254 ; case 2
b _02030254 ; case 3
ldmia sp!, {r4, pc} ; case 4
ldmia sp!, {r4, pc} ; case 5
_02030248:
mov r0, #5
str r0, [r4, #4]
ldmia sp!, {r4, pc}
_02030254:
mov r0, #4
str r0, [r4, #4]
ldmia sp!, {r4, pc}
_02030260:
add r0, r4, #8
bl sub_0202613C
mov r0, #0
str r0, [r4, #4]
ldmia sp!, {r4, pc}
arm_func_end sub_02030214
arm_func_start UpdateAlertBox
UpdateAlertBox: ; 0x02030274
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r5, r0
ldr r4, [r5, #0xc]
ldr r0, [r4, #4]
cmp r0, #5
addls pc, pc, r0, lsl #2
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_02030290: ; jump table
b _020302A8 ; case 0
b _020302C8 ; case 1
b _020302E0 ; case 2
b _02030438 ; case 3
b _0203056C ; case 4
b _02030588 ; case 5
_020302A8:
add r0, r4, #8
bl sub_020261D4
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, #1
str r0, [r4, #4]
sub r0, r0, #2
str r0, [r5, #0xb8]
_020302C8:
ldrsb r0, [r5, #0x10]
bl sub_0202810C
cmp r0, #0
movne r0, #2
strne r0, [r4, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_020302E0:
ldrsb r0, [r5, #0x10]
bl GetWindowContents
add r0, r0, #0x600
ldrsh r1, [r0, #0x46]
ldrsh r0, [r0, #0x44]
cmp r1, r0
movne r0, #1
moveq r0, #0
tst r0, #0xff
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrsb r4, [r5, #0x10]
mov r0, r4
bl GetWindowContents
mov r6, r0
add r3, r6, #0x600
ldr r1, [r6, #0x20]
ldrsh r2, [r3, #0x4a]
mov r1, r1, lsl #0x10
ldr r5, [r6, #0x10]
mov r8, r1, asr #0x10
mla r1, r2, r8, r5
ldr r2, [r6, #0xc]
mov r7, r1, lsl #0x10
mov r2, r2, lsl #0x10
ldrsh r3, [r3, #0x46]
mov r1, #0x148
add r5, r6, #0x124
smulbb r3, r3, r1
ldr r1, [r5, r3]
add r5, r5, r3
cmp r1, #1
mov r1, r2, asr #0x10
mov r7, r7, asr #0x10
bne _02030388
mov r5, #0x17
mov r0, r4
add r2, r7, r8
mov r1, #0
mov r3, #0xe0
str r5, [sp]
bl sub_02025D50
b _020303C4
_02030388:
mov r2, r7
add r3, r5, #5
bl sub_020300C0
ldrb r0, [r5, #4]
cmp r0, #0
beq _020303C4
cmp r7, r8
blt _020303C4
mov r5, #0x17
mov r0, r4
sub r2, r7, #2
mov r1, #0
mov r3, #0xe0
str r5, [sp]
bl sub_02025D50
_020303C4:
mov r0, r4
bl UpdateWindow
add r0, r6, #0x600
ldrsh r1, [r0, #0x46]
strh r1, [r0, #0x48]
ldrsh r1, [r0, #0x46]
add r1, r1, #1
strh r1, [r0, #0x46]
ldrsh r1, [r0, #0x46]
cmp r1, #4
movge r1, #0
strgeh r1, [r0, #0x46]
add r0, r6, #0x600
ldrsh r1, [r0, #0x4a]
cmp r1, #3
movge r1, #3
strge r1, [r6, #4]
movge r1, #0
strgeh r1, [r0, #0x4c]
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r1, [r6, #0xa0]
ldr r0, [r6, #0x10]
add r2, r1, r8
mov r1, r8
sub r0, r2, r0
bl _s32_div_f
add r1, r6, #0x600
strh r0, [r1, #0x4a]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_02030438:
ldrsb r5, [r5, #0x10]
mov r0, r5
bl GetWindowContents
mov r7, r0
add r3, r7, #0x600
ldr r1, [r7, #0x20]
ldrsh r2, [r3, #0x4a]
mov r1, r1, lsl #0x10
ldr r6, [r7, #0x10]
mov r8, r1, asr #0x10
ldr r1, [r7, #0xc]
mla r6, r2, r8, r6
ldrsh sb, [r3, #0x4c]
mov r2, r1, lsl #0x10
ldrsh ip, [r3, #0x48]
mov r1, #0x148
add r3, sb, r6
mov r3, r3, lsl #0x10
smulbb r6, ip, r1
add sb, r7, #0x124
ldr r1, [sb, r6]
add r6, sb, r6
cmp r1, #1
mov r1, r2, asr #0x10
mov sb, r3, asr #0x10
bne _020304C0
mov r6, #0x17
mov r0, r5
add r2, sb, r8
mov r1, #0
mov r3, #0xe0
str r6, [sp]
bl sub_02025D50
b _020304FC
_020304C0:
mov r2, sb
add r3, r6, #5
bl sub_020300C0
ldrb r0, [r6, #4]
cmp r0, #0
beq _020304FC
cmp sb, r8
blt _020304FC
mov r6, #0x17
mov r0, r5
sub r2, sb, #2
mov r1, #0
mov r3, #0xe0
str r6, [sp]
bl sub_02025D50
_020304FC:
add r0, r7, #0x600
ldrsh r0, [r0, #0x4c]
add r0, r0, r8
cmp r0, #1
mov r0, r5
bne _02030528
bl sub_01FF9128
add r0, r7, #0x600
ldrsh r1, [r0, #0x4c]
sub r1, r1, #1
b _02030538
_02030528:
bl sub_01FF929C
add r0, r7, #0x600
ldrsh r1, [r0, #0x4c]
sub r1, r1, #2
_02030538:
strh r1, [r0, #0x4c]
add r0, r7, #0x600
ldrsh r2, [r0, #0x4c]
rsb r1, r8, #0
cmp r2, r1
movle r1, #3
strleh r1, [r0, #0x4a]
movle r0, #1
movgt r0, #0
cmp r0, #0
movne r0, #2
strne r0, [r4, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_0203056C:
ldrsb r0, [r5, #0x10]
bl sub_0202836C
ldrsb r0, [r5, #0x10]
bl sub_02027B1C
mov r0, #5
str r0, [r4, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_02030588:
ldrsb r0, [r5, #0x10]
bl sub_0202812C
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r1, #0
add r0, r4, #8
str r1, [r4, #4]
bl sub_0202613C
mvn r0, #5
str r0, [r5, #0xb8]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
arm_func_end UpdateAlertBox
arm_func_start CreateAdvancedTextBox
CreateAdvancedTextBox: ; 0x020305B4
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r3
ldr ip, [sp, #0x14]
ldr r3, [sp, #0x10]
str ip, [sp]
bl CreateAdvancedTextBoxInternal
add r1, r0, #0x100
str r4, [r0, #0x1a4]
ldrsb r0, [r1, #0xa0]
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
arm_func_end CreateAdvancedTextBox
arm_func_start CreateAdvancedTextBoxWithArg
CreateAdvancedTextBoxWithArg: ; 0x020305E4
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r3
ldr ip, [sp, #0x18]
ldr r3, [sp, #0x14]
str ip, [sp]
bl CreateAdvancedTextBoxInternal
ldr r2, [sp, #0x10]
str r4, [r0, #0x1a8]
add r1, r0, #0x100
str r2, [r0, #0x1ac]
ldrsb r0, [r1, #0xa0]
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
arm_func_end CreateAdvancedTextBoxWithArg
arm_func_start CreateAdvancedTextBoxInternal
CreateAdvancedTextBoxInternal: ; 0x0203061C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x28
mov r8, r0
mov r7, r1
mov r0, #0x1c8
mov r1, #8
mov r6, r2
mov r5, r3
bl MemAlloc
mov r4, r0
mov r0, #0
str r0, [r4, #0x1a4]
str r0, [r4, #0x1a8]
str r0, [r4, #0x1ac]
str r0, [r4, #0x1b8]
mov r0, #1
cmp r8, #0
strb r0, [r4, #0x1c4]
addne ip, sp, #0x18
ldmneia r8, {r0, r1, r2, r3}
stmneia ip, {r0, r1, r2, r3}
ldrne r0, _02030774 ; =UpdateAdvancedTextBox
strne r0, [sp, #0x18]
bne _02030690
ldr r0, _02030778 ; =ADVANCED_TEXT_BOX_DEFAULT_WINDOW_PARAMS
add r8, sp, #0x18
ldmia r0, {r0, r1, r2, r3}
stmia r8, {r0, r1, r2, r3}
orr r7, r7, #0x300000
_02030690:
tst r7, #0x200000
ldrneb r1, [sp, #0x1c]
ldrneb r0, [sp, #0x1e]
str r4, [sp, #0x24]
subne r0, r1, r0
strneb r0, [sp, #0x1c]
tst r7, #0x100000
ldrneb r1, [sp, #0x1d]
ldrneb r0, [sp, #0x1f]
subne r0, r1, r0
strneb r0, [sp, #0x1d]
ldr r0, _02030774 ; =UpdateAdvancedTextBox
cmp r6, #0
str r0, [r4]
str r7, [r4, #0x104]
beq _020306F0
add ip, r4, #0x108
mov r8, #9
_020306D8:
ldmia r6!, {r0, r1, r2, r3}
stmia ip!, {r0, r1, r2, r3}
subs r8, r8, #1
bne _020306D8
ldmia r6, {r0, r1}
stmia ip, {r0, r1}
_020306F0:
mov r2, #0
str r2, [r4, #0x1bc]
strb r2, [r4, #0x1c0]
strb r2, [r4, #0x1c1]
strb r2, [r4, #0x1c2]
str r2, [r4, #0x1b0]
str r2, [r4, #0x1b4]
add r0, sp, #0x18
mov r1, #3
strb r2, [r4, #0x1c3]
bl NewWindowScreenCheck
add r1, sp, #8
strb r0, [r4, #0x1a0]
bl GetWindowRectangle
mov r1, #0x100
strh r1, [r4, #0xfc]
tst r7, #0x8000
moveq r5, #0
streq r5, [sp, #0x40]
strh r1, [r4, #0xfe]
add r0, r4, #0x100
strh r1, [r0]
strh r1, [r0, #2]
ldr r6, [sp, #0x40]
add r3, sp, #8
mov r1, r7
add r0, r4, #4
add r2, r4, #0x108
stmia sp, {r5, r6}
bl InitWindowInput
mov r0, r4
add sp, sp, #0x28
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_02030774: .word UpdateAdvancedTextBox
_02030778: .word ADVANCED_TEXT_BOX_DEFAULT_WINDOW_PARAMS
arm_func_end CreateAdvancedTextBoxInternal
arm_func_start SetAdvancedTextBoxPartialMenu
SetAdvancedTextBoxPartialMenu: ; 0x0203077C
stmdb sp!, {r4, lr}
mov r4, r1
bl GetWindowContents
strb r4, [r0, #0x1c3]
ldr r1, [r0, #0x104]
tst r4, #0xff
orrne r1, r1, #0x400000
biceq r1, r1, #0x400000
str r1, [r0, #0x104]
ldmia sp!, {r4, pc}
arm_func_end SetAdvancedTextBoxPartialMenu

File diff suppressed because it is too large Load Diff

6642
asm/main_02037570.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,36 +1,8 @@
.include "asm/macros.inc"
.include "main_02042B98.inc"
.include "main_02042BE0.inc"
.text
arm_func_start AllocUnkBagStruct
AllocUnkBagStruct: ; 0x02042B98
stmdb sp!, {r3, lr}
mov r0, #0xc8
mov r1, #8
bl MemAlloc
ldr r1, _02042BB8 ; =UNK_STORAGE_STRUCT_0XC
str r0, [r1, #8]
bl ClearBagSelectedItemTable
ldmia sp!, {r3, pc}
.align 2, 0
_02042BB8: .word UNK_STORAGE_STRUCT_0XC
arm_func_end AllocUnkBagStruct
arm_func_start FreeUnkBagStruct
FreeUnkBagStruct: ; 0x02042BBC
stmdb sp!, {r3, lr}
ldr r0, _02042BDC ; =UNK_STORAGE_STRUCT_0XC
ldr r0, [r0, #8]
bl MemFree
ldr r0, _02042BDC ; =UNK_STORAGE_STRUCT_0XC
mov r1, #0
str r1, [r0, #8]
ldmia sp!, {r3, pc}
.align 2, 0
_02042BDC: .word UNK_STORAGE_STRUCT_0XC
arm_func_end FreeUnkBagStruct
arm_func_start sub_02042BE0
sub_02042BE0: ; 0x02042BE0
stmdb sp!, {r3, r4, r5, r6, r7, lr}

View File

@@ -6,7 +6,9 @@
struct unk_0202AAA8 {
u8 field_0x0[8];
u8 field_0x8;
u8 field_0x9[0x18F];
u8 field_0x9[0x97];
s32 field_0xA0;
u8 field_0xA4[0xF4];
void *field_0x198;
s32 field_0x19C;
u8 field_0x1A0;

6
include/main_0202FD3C.h Normal file
View File

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

6
include/main_0203755C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0203755C_H
#define PMDSKY_MAIN_0203755C_H
s32 GetKeyboardStringResult(void);
#endif

View File

@@ -2,5 +2,7 @@
#define PMDSKY_MAIN_02042B84_H
s32 IsBagItemIndexSelected(s32 idx);
void AllocUnkBagStruct(void);
void FreeUnkBagStruct(void);
#endif

View File

@@ -174,6 +174,8 @@ Static main
Object asm/main_0202D0EC.o
Object src/main_0202F180.o
Object asm/main_0202F190.o
Object src/main_0202FD3C.o
Object asm/main_0202FD50.o
Object src/main_020307A4.o
Object asm/main_020307B8.o
Object src/main_0203083C.o
@@ -189,12 +191,14 @@ Static main
Object asm/main_020325AC.o
Object src/main_020348E4.o
Object asm/main_02034974.o
Object src/main_0203755C.o
Object asm/main_02037570.o
Object src/main_0203C760.o
Object asm/main_0203C774.o
Object src/main_02042AF8.o
Object asm/main_02042B20.o
Object src/main_02042B84.o
Object asm/main_02042B98.o
Object asm/main_02042BE0.o
Object src/main_02043568.o
Object asm/main_0204357C.o
Object src/main_020484A0.o

9
src/main_0202FD3C.c Normal file
View File

@@ -0,0 +1,9 @@
#include "main_0202FD3C.h"
#include "main_0202AAA8.h"
void SetAreaNameBoxState3(s32 window_id)
{
struct unk_0202AAA8 *w = GetWindowContents(window_id);
w->field_0xA0 = 3;
}

13
src/main_0203755C.c Normal file
View File

@@ -0,0 +1,13 @@
#include "main_0203755C.h"
struct unk_020AFDF0 {
u8 field_0x0[0xF8];
s32 field_0xF8;
};
extern struct unk_020AFDF0 *_020AFDF0;
s32 GetKeyboardStringResult(void)
{
return _020AFDF0->field_0xF8;
}

View File

@@ -1,7 +1,22 @@
#include "main_02042B84.h"
#include "main_02042AF8.h"
#include "main_02001188.h"
void *MemAlloc(u32 size, u32 nmemb);
s32 IsBagItemIndexSelected(s32 idx)
{
return UNK_STORAGE_STRUCT_0XC.field_0x8[idx];
}
void AllocUnkBagStruct(void)
{
UNK_STORAGE_STRUCT_0XC.field_0x8 = MemAlloc(0xC8, 8);
ClearBagSelectedItemTable();
}
void FreeUnkBagStruct(void)
{
MemFree(UNK_STORAGE_STRUCT_0XC.field_0x8);
UNK_STORAGE_STRUCT_0XC.field_0x8 = 0;
}