mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-20 01:25:24 -05:00
Decomp seventeen storage-selection accessors
Decompile from asm, all reaching UNK_STORAGE_STRUCT_0X14: sub_02043148 sub_0204329C sub_020433E0 ClearStorageSelectedItemTable sub_0204316C sub_02043380 sub_02043400 CountSelectedStorageItems sub_02043218 sub_02043398 sub_02043434 GetFirstSelectedStorageItemIndex sub_0204322C sub_020433C0 sub_02043468 sub_0204323C sub_02043254 struct unk_020AFEE0 was introduced two dozen commits ago holding only the pointer at 0x8 and filler before it. Its first eight bytes are now split into what these functions read: halfwords at 0x0 and 0x2 and a pointer at 0x4, with a word at 0x10 added past the existing end. Nothing that already used field_0x8 moves. The object behind that pointer is new, and its size is derived rather than guessed. Its s16 array at 0x4 is bounded by 0x3e8 in three separate loops, which is 1000 entries and ends at 0x7D3; the signed byte the collection-menu wrappers read sits at 0x7D4, immediately after it. Two further fields at 0x910 and 0x18BC come from sub_020430F4. Filling the gaps brings the struct to exactly 0x18C0, which is the size in upstream's own name for its allocator, InitUnkStorageStruct0x18c0. That agreement is the reason the layout is worth trusting; the field names remain placeholders because nothing here establishes meaning. Fourteen of the seventeen matched on the first candidate. The other three are loops whose index and pointer landed in swapped registers, with every instruction otherwise correct, and all three were closed by reordering the local declarations -- the same effect recorded in the previous two commits. All orderings were enumerated rather than guessed: two locals for sub_02043254 and GetFirstSelectedStorageItemIndex, three for CountSelectedStorageItems. Eight callees remain asm and their prototypes are provisional, declared in the shared header rather than repeated per file. None of them was declared anywhere else in the tree. Two are typed from evidence rather than convention: IsCollectionMenuActive and IsCollectionMenuState3 return bool8 because both callers mask with and r0, r0, #0xff. sub_020430F4 was attempted and is not included. It reaches the same struct and its two extra fields are what sized it, but it stands at 495 after correcting sub_0202C654 to the four arguments the target passes -- the fourth is a zero in r3 that the first reading missed. Left in asm rather than landed as a near-match. 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:
@@ -1,47 +1,30 @@
|
||||
#pragma once
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public CloseCollectionMenu
|
||||
.public CloseTextBox
|
||||
.public ConvertStorageItemAtIdxToItem
|
||||
.public CountNbOfItemsInStorage
|
||||
.public CountNbOfValidItemsInStorage
|
||||
.public CountNbOfValidItemsInTimeDarknessInStorage
|
||||
.public CountSelectedStorageItems
|
||||
.public CreateCollectionMenu
|
||||
.public CreateTextBox
|
||||
.public GetCurrentBagCapacity
|
||||
.public GetNbItemsInBag
|
||||
.public GetWindowIdSelectedMenuItemIdx
|
||||
.public IsCollectionMenuActive
|
||||
.public IsCollectionMenuState3
|
||||
.public IsStorageFull
|
||||
.public IsTextboxState3
|
||||
.public MaybeGetColoredFormattedItemName
|
||||
.public MemAlloc
|
||||
.public MemFree
|
||||
.public PlaySeVolumeWrapper
|
||||
.public SetCollectionMenuVoidFn
|
||||
.public SortItemsInBag
|
||||
.public UNK_STORAGE_STRUCT_0X14
|
||||
.public UNK_STORAGE_STRUCT_0XC
|
||||
.public _0209CA3C
|
||||
.public _0209CA48
|
||||
.public _0209CA58
|
||||
.public sub_02010044
|
||||
.public sub_0202C620
|
||||
.public sub_0202C654
|
||||
.public sub_0202C75C
|
||||
.public sub_0202D068
|
||||
.public sub_0202D134
|
||||
.public sub_0202D16C
|
||||
.public sub_02043148
|
||||
.public sub_020432B4
|
||||
.public sub_02043468
|
||||
.public sub_0204357C
|
||||
.public sub_02043BFC
|
||||
.public sub_020440F8
|
||||
.public sub_020441BC
|
||||
.public sub_02044210
|
||||
.public sub_0204426C
|
||||
.public sub_020442CC
|
||||
.public sub_02044308
|
||||
.public sub_0204440C
|
||||
.public sub_02044474
|
||||
.public sub_020444B0
|
||||
.public sub_020445C8
|
||||
|
||||
8
asm/include/main_0204317C.inc
Normal file
8
asm/include/main_0204317C.inc
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
.public CloseCollectionMenu
|
||||
.public CloseTextBox
|
||||
.public MemFree
|
||||
.public UNK_STORAGE_STRUCT_0X14
|
||||
.public sub_020442CC
|
||||
.public sub_02044474
|
||||
.public sub_020445C8
|
||||
8
asm/include/main_020432B4.inc
Normal file
8
asm/include/main_020432B4.inc
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
.public ConvertStorageItemAtIdxToItem
|
||||
.public CountNbOfItemsInStorage
|
||||
.public CountNbOfValidItemsInStorage
|
||||
.public CountNbOfValidItemsInTimeDarknessInStorage
|
||||
.public MaybeGetColoredFormattedItemName
|
||||
.public UNK_STORAGE_STRUCT_0X14
|
||||
.public _0209CA3C
|
||||
@@ -393,377 +393,3 @@ sub_020430F4: ; 0x020430F4
|
||||
.align 2, 0
|
||||
_02043144: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_020430F4
|
||||
|
||||
arm_func_start sub_02043148
|
||||
sub_02043148: ; 0x02043148
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r1, _02043168 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r1, [r1, #4]
|
||||
add r0, r1, r0, lsl #1
|
||||
ldrsh r0, [r0, #4]
|
||||
bl sub_02010044
|
||||
bl sub_020444B0
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02043168: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043148
|
||||
|
||||
arm_func_start sub_0204316C
|
||||
sub_0204316C: ; 0x0204316C
|
||||
cmp r0, #0
|
||||
movne r0, #5
|
||||
moveq r0, #7
|
||||
bx lr
|
||||
arm_func_end sub_0204316C
|
||||
|
||||
arm_func_start FreeUnkStorageStruct0x18c0
|
||||
FreeUnkStorageStruct0x18c0: ; 0x0204317C
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl sub_02044474
|
||||
bl sub_020442CC
|
||||
bl sub_020445C8
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r1, [r0, #4]
|
||||
ldr r0, [r1]
|
||||
cmp r0, #6
|
||||
bne _020431BC
|
||||
add r0, r1, #0x700
|
||||
ldrsb r0, [r0, #0xd5]
|
||||
bl CloseTextBox
|
||||
_020431BC:
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mvn r1, #1
|
||||
ldr r0, [r0, #4]
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd6]
|
||||
cmp r0, r1
|
||||
beq _020431DC
|
||||
bl CloseTextBox
|
||||
_020431DC:
|
||||
ldr r1, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r1, #4]
|
||||
ldr r2, [r0]
|
||||
add r0, r0, #0x700
|
||||
str r2, [r1, #0xc]
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bl CloseCollectionMenu
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
bl MemFree
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r1, #0
|
||||
str r1, [r0, #4]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02043214: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end FreeUnkStorageStruct0x18c0
|
||||
|
||||
arm_func_start sub_02043218
|
||||
sub_02043218: ; 0x02043218
|
||||
ldr r0, _02043228 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r1, #0
|
||||
strh r1, [r0, #2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02043228: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043218
|
||||
|
||||
arm_func_start sub_0204322C
|
||||
sub_0204322C: ; 0x0204322C
|
||||
ldr r1, _02043238 ; =UNK_STORAGE_STRUCT_0X14
|
||||
strh r0, [r1, #2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02043238: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_0204322C
|
||||
|
||||
arm_func_start sub_0204323C
|
||||
sub_0204323C: ; 0x0204323C
|
||||
stmdb sp!, {r3, lr}
|
||||
bl sub_02043254
|
||||
ldr r1, _02043250 ; =UNK_STORAGE_STRUCT_0X14
|
||||
strh r0, [r1, #2]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02043250: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_0204323C
|
||||
|
||||
arm_func_start sub_02043254
|
||||
sub_02043254: ; 0x02043254
|
||||
ldr r1, _02043298 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r3, #0
|
||||
ldr ip, [r1, #4]
|
||||
mvn r1, #0
|
||||
b _02043278
|
||||
_02043268:
|
||||
cmp r0, r2
|
||||
moveq r0, r3
|
||||
bxeq lr
|
||||
add r3, r3, #1
|
||||
_02043278:
|
||||
cmp r3, #0x3e8
|
||||
bge _02043290
|
||||
add r2, ip, r3, lsl #1
|
||||
ldrsh r2, [r2, #4]
|
||||
cmp r2, r1
|
||||
bne _02043268
|
||||
_02043290:
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02043298: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043254
|
||||
|
||||
arm_func_start sub_0204329C
|
||||
sub_0204329C: ; 0x0204329C
|
||||
ldr r1, _020432B0 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r1, [r1, #4]
|
||||
add r0, r1, r0, lsl #1
|
||||
ldrsh r0, [r0, #4]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020432B0: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_0204329C
|
||||
|
||||
arm_func_start sub_020432B4
|
||||
sub_020432B4: ; 0x020432B4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #8
|
||||
ldr r3, _02043318 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r5, r0
|
||||
ldr r0, [r3, #4]
|
||||
mov r4, r2
|
||||
add r0, r0, r1, lsl #1
|
||||
ldrsh r6, [r0, #4]
|
||||
add r1, sp, #0
|
||||
mov r0, r6
|
||||
bl ConvertStorageItemAtIdxToItem
|
||||
ldr r2, _0204331C ; =_0209CA3C
|
||||
add r1, sp, #0
|
||||
mov r0, r5
|
||||
bl MaybeGetColoredFormattedItemName
|
||||
ldr r0, _02043318 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #8]
|
||||
ldrb r0, [r0, r6]
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
str r0, [r4]
|
||||
mov r0, r5
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_02043318: .word UNK_STORAGE_STRUCT_0X14
|
||||
_0204331C: .word _0209CA3C
|
||||
arm_func_end sub_020432B4
|
||||
|
||||
arm_func_start sub_02043320
|
||||
sub_02043320: ; 0x02043320
|
||||
stmdb sp!, {r3, lr}
|
||||
cmp r0, #7
|
||||
bne _02043344
|
||||
bl CountNbOfValidItemsInTimeDarknessInStorage
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
_02043344:
|
||||
sub r0, r0, #5
|
||||
cmp r0, #1
|
||||
bhi _02043368
|
||||
bl CountNbOfValidItemsInStorage
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
_02043368:
|
||||
bl CountNbOfItemsInStorage
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end sub_02043320
|
||||
|
||||
arm_func_start sub_02043380
|
||||
sub_02043380: ; 0x02043380
|
||||
stmdb sp!, {r3, lr}
|
||||
cmp r0, #8
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl IsStorageFull
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end sub_02043380
|
||||
|
||||
arm_func_start sub_02043398
|
||||
sub_02043398: ; 0x02043398
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _020433BC ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bl sub_0202D134
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_020433BC: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043398
|
||||
|
||||
arm_func_start sub_020433C0
|
||||
sub_020433C0: ; 0x020433C0
|
||||
ldr r0, _020433D8 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr ip, _020433DC ; =sub_0202C620
|
||||
ldr r0, [r0, #4]
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_020433D8: .word UNK_STORAGE_STRUCT_0X14
|
||||
_020433DC: .word sub_0202C620
|
||||
arm_func_end sub_020433C0
|
||||
|
||||
arm_func_start sub_020433E0
|
||||
sub_020433E0: ; 0x020433E0
|
||||
ldr r0, _020433FC ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020433FC: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_020433E0
|
||||
|
||||
arm_func_start sub_02043400
|
||||
sub_02043400: ; 0x02043400
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _02043430 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
addne r0, r0, #0x700
|
||||
ldrnesb r0, [r0, #0xd4]
|
||||
mvnne r1, #1
|
||||
cmpne r0, r1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl IsCollectionMenuActive
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02043430: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043400
|
||||
|
||||
arm_func_start sub_02043434
|
||||
sub_02043434: ; 0x02043434
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _02043464 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
addne r0, r0, #0x700
|
||||
ldrnesb r0, [r0, #0xd4]
|
||||
mvnne r1, #1
|
||||
cmpne r0, r1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl IsCollectionMenuState3
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02043464: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043434
|
||||
|
||||
arm_func_start sub_02043468
|
||||
sub_02043468: ; 0x02043468
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _020434D0 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bl IsCollectionMenuActive
|
||||
cmp r0, #0
|
||||
beq _020434A0
|
||||
ldr r0, _020434D0 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bl GetWindowIdSelectedMenuItemIdx
|
||||
b _020434B4
|
||||
_020434A0:
|
||||
ldr r0, _020434D0 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bl sub_0202C75C
|
||||
_020434B4:
|
||||
cmp r0, #0
|
||||
ldrge r1, _020434D0 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mvnlt r0, #0
|
||||
ldrge r1, [r1, #4]
|
||||
addge r0, r1, r0, lsl #1
|
||||
ldrgesh r0, [r0, #4]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_020434D0: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end sub_02043468
|
||||
|
||||
arm_func_start ClearStorageSelectedItemTable
|
||||
ClearStorageSelectedItemTable: ; 0x020434D4
|
||||
mov r3, #0
|
||||
ldr r0, _020434F8 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r2, r3
|
||||
_020434E0:
|
||||
ldr r1, [r0, #8]
|
||||
strb r2, [r1, r3]
|
||||
add r3, r3, #1
|
||||
cmp r3, #0x3e8
|
||||
blt _020434E0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_020434F8: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end ClearStorageSelectedItemTable
|
||||
|
||||
arm_func_start CountSelectedStorageItems
|
||||
CountSelectedStorageItems: ; 0x020434FC
|
||||
ldr r1, _02043528 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r0, #0
|
||||
ldr r3, [r1, #8]
|
||||
mov r2, r0
|
||||
_0204350C:
|
||||
ldrb r1, [r3, r2]
|
||||
add r2, r2, #1
|
||||
tst r1, #1
|
||||
addne r0, r0, #1
|
||||
cmp r2, #0x3e8
|
||||
blt _0204350C
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02043528: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end CountSelectedStorageItems
|
||||
|
||||
arm_func_start GetFirstSelectedStorageItemIndex
|
||||
GetFirstSelectedStorageItemIndex: ; 0x0204352C
|
||||
ldr r0, _02043564 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r1, #0
|
||||
ldr r2, [r0, #8]
|
||||
b _02043554
|
||||
_0204353C:
|
||||
ldrb r0, [r2, r1]
|
||||
tst r0, #1
|
||||
movne r0, r1, lsl #0x10
|
||||
movne r0, r0, asr #0x10
|
||||
bxne lr
|
||||
add r1, r1, #1
|
||||
_02043554:
|
||||
cmp r1, #0x3e8
|
||||
blt _0204353C
|
||||
mvn r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_02043564: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end GetFirstSelectedStorageItemIndex
|
||||
|
||||
50
asm/main_0204317C.s
Normal file
50
asm/main_0204317C.s
Normal file
@@ -0,0 +1,50 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_0204317C.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start FreeUnkStorageStruct0x18c0
|
||||
FreeUnkStorageStruct0x18c0: ; 0x0204317C
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl sub_02044474
|
||||
bl sub_020442CC
|
||||
bl sub_020445C8
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r1, [r0, #4]
|
||||
ldr r0, [r1]
|
||||
cmp r0, #6
|
||||
bne _020431BC
|
||||
add r0, r1, #0x700
|
||||
ldrsb r0, [r0, #0xd5]
|
||||
bl CloseTextBox
|
||||
_020431BC:
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mvn r1, #1
|
||||
ldr r0, [r0, #4]
|
||||
add r0, r0, #0x700
|
||||
ldrsb r0, [r0, #0xd6]
|
||||
cmp r0, r1
|
||||
beq _020431DC
|
||||
bl CloseTextBox
|
||||
_020431DC:
|
||||
ldr r1, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r1, #4]
|
||||
ldr r2, [r0]
|
||||
add r0, r0, #0x700
|
||||
str r2, [r1, #0xc]
|
||||
ldrsb r0, [r0, #0xd4]
|
||||
bl CloseCollectionMenu
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #4]
|
||||
bl MemFree
|
||||
ldr r0, _02043214 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r1, #0
|
||||
str r1, [r0, #4]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02043214: .word UNK_STORAGE_STRUCT_0X14
|
||||
arm_func_end FreeUnkStorageStruct0x18c0
|
||||
66
asm/main_020432B4.s
Normal file
66
asm/main_020432B4.s
Normal file
@@ -0,0 +1,66 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_020432B4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_020432B4
|
||||
sub_020432B4: ; 0x020432B4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #8
|
||||
ldr r3, _02043318 ; =UNK_STORAGE_STRUCT_0X14
|
||||
mov r5, r0
|
||||
ldr r0, [r3, #4]
|
||||
mov r4, r2
|
||||
add r0, r0, r1, lsl #1
|
||||
ldrsh r6, [r0, #4]
|
||||
add r1, sp, #0
|
||||
mov r0, r6
|
||||
bl ConvertStorageItemAtIdxToItem
|
||||
ldr r2, _0204331C ; =_0209CA3C
|
||||
add r1, sp, #0
|
||||
mov r0, r5
|
||||
bl MaybeGetColoredFormattedItemName
|
||||
ldr r0, _02043318 ; =UNK_STORAGE_STRUCT_0X14
|
||||
ldr r0, [r0, #8]
|
||||
ldrb r0, [r0, r6]
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
str r0, [r4]
|
||||
mov r0, r5
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_02043318: .word UNK_STORAGE_STRUCT_0X14
|
||||
_0204331C: .word _0209CA3C
|
||||
arm_func_end sub_020432B4
|
||||
|
||||
arm_func_start sub_02043320
|
||||
sub_02043320: ; 0x02043320
|
||||
stmdb sp!, {r3, lr}
|
||||
cmp r0, #7
|
||||
bne _02043344
|
||||
bl CountNbOfValidItemsInTimeDarknessInStorage
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
_02043344:
|
||||
sub r0, r0, #5
|
||||
cmp r0, #1
|
||||
bhi _02043368
|
||||
bl CountNbOfValidItemsInStorage
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
_02043368:
|
||||
bl CountNbOfItemsInStorage
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end sub_02043320
|
||||
@@ -8,15 +8,38 @@ struct unk_020AFED4 {
|
||||
s32 *field_0x8;
|
||||
};
|
||||
|
||||
struct unk_02043148 {
|
||||
u8 field_0x0[4];
|
||||
s16 field_0x4[1000];
|
||||
s8 field_0x7D4;
|
||||
u8 field_0x7D5[0x13B];
|
||||
s16 field_0x910;
|
||||
u8 field_0x912[0xFAA];
|
||||
u32 field_0x18BC;
|
||||
};
|
||||
|
||||
struct unk_020AFEE0 {
|
||||
u8 field_0x0[8];
|
||||
u16 field_0x0;
|
||||
u16 field_0x2;
|
||||
struct unk_02043148 *field_0x4;
|
||||
u8 *field_0x8;
|
||||
u8 field_0xC[4];
|
||||
u32 field_0x10;
|
||||
};
|
||||
|
||||
extern struct unk_020AFED4 UNK_STORAGE_STRUCT_0XC;
|
||||
extern struct unk_020AFEE0 UNK_STORAGE_STRUCT_0X14;
|
||||
|
||||
|
||||
void sub_02010044(s16 a);
|
||||
void sub_020444B0(void);
|
||||
s32 IsStorageFull(s32 a);
|
||||
void sub_0202D134(s8 a);
|
||||
s32 sub_0202C620(s8 a);
|
||||
bool8 IsCollectionMenuActive(s8 a);
|
||||
bool8 IsCollectionMenuState3(s8 a);
|
||||
s32 sub_0202C75C(s8 a);
|
||||
|
||||
void ClearBagSelectedItemTable(void);
|
||||
|
||||
#endif
|
||||
|
||||
10
include/main_02043148.h
Normal file
10
include/main_02043148.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef PMDSKY_MAIN_02043148_H
|
||||
#define PMDSKY_MAIN_02043148_H
|
||||
|
||||
#include "util.h"
|
||||
#include "main_02042AF8.h"
|
||||
|
||||
void sub_02043148(s32 index);
|
||||
s32 sub_0204316C(s32 a);
|
||||
|
||||
#endif
|
||||
13
include/main_02043218.h
Normal file
13
include/main_02043218.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef PMDSKY_MAIN_02043218_H
|
||||
#define PMDSKY_MAIN_02043218_H
|
||||
|
||||
#include "util.h"
|
||||
#include "main_02042AF8.h"
|
||||
|
||||
void sub_02043218(void);
|
||||
void sub_0204322C(u16 value);
|
||||
void sub_0204323C(s16 value);
|
||||
s32 sub_02043254(s16 value);
|
||||
s16 sub_0204329C(s32 index);
|
||||
|
||||
#endif
|
||||
18
include/main_02043380.h
Normal file
18
include/main_02043380.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef PMDSKY_MAIN_02043380_H
|
||||
#define PMDSKY_MAIN_02043380_H
|
||||
|
||||
#include "util.h"
|
||||
#include "main_02042AF8.h"
|
||||
|
||||
s32 sub_02043380(s32 a);
|
||||
void sub_02043398(void);
|
||||
s32 sub_020433C0(void);
|
||||
bool8 sub_020433E0(void);
|
||||
bool8 sub_02043400(void);
|
||||
bool8 sub_02043434(void);
|
||||
s16 sub_02043468(void);
|
||||
void ClearStorageSelectedItemTable(void);
|
||||
s32 CountSelectedStorageItems(void);
|
||||
s16 GetFirstSelectedStorageItemIndex(void);
|
||||
|
||||
#endif
|
||||
5
main.lsf
5
main.lsf
@@ -214,6 +214,11 @@ Static main
|
||||
Object asm/main_02042B20.o
|
||||
Object src/main_02042B84.o
|
||||
Object asm/main_02042BE0.o
|
||||
Object src/main_02043148.o
|
||||
Object asm/main_0204317C.o
|
||||
Object src/main_02043218.o
|
||||
Object asm/main_020432B4.o
|
||||
Object src/main_02043380.o
|
||||
Object src/main_02043568.o
|
||||
Object asm/main_0204357C.o
|
||||
Object src/main_020484A0.o
|
||||
|
||||
13
src/main_02043148.c
Normal file
13
src/main_02043148.c
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "main_02043148.h"
|
||||
#include "main_02042AF8.h"
|
||||
|
||||
void sub_02043148(s32 index)
|
||||
{
|
||||
sub_02010044(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x4[index]);
|
||||
sub_020444B0();
|
||||
}
|
||||
|
||||
s32 sub_0204316C(s32 a)
|
||||
{
|
||||
return a != 0 ? 5 : 7;
|
||||
}
|
||||
35
src/main_02043218.c
Normal file
35
src/main_02043218.c
Normal file
@@ -0,0 +1,35 @@
|
||||
#include "main_02043218.h"
|
||||
#include "main_02042AF8.h"
|
||||
|
||||
void sub_02043218(void)
|
||||
{
|
||||
UNK_STORAGE_STRUCT_0X14.field_0x2 = 0;
|
||||
}
|
||||
|
||||
void sub_0204322C(u16 value)
|
||||
{
|
||||
UNK_STORAGE_STRUCT_0X14.field_0x2 = value;
|
||||
}
|
||||
|
||||
void sub_0204323C(s16 value)
|
||||
{
|
||||
UNK_STORAGE_STRUCT_0X14.field_0x2 = sub_02043254(value);
|
||||
}
|
||||
|
||||
s32 sub_02043254(s16 value)
|
||||
{
|
||||
s32 i;
|
||||
struct unk_02043148 *contents = UNK_STORAGE_STRUCT_0X14.field_0x4;
|
||||
|
||||
for (i = 0; i < 1000 && contents->field_0x4[i] != -1; i++) {
|
||||
if (value == contents->field_0x4[i]) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 sub_0204329C(s32 index)
|
||||
{
|
||||
return UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x4[index];
|
||||
}
|
||||
102
src/main_02043380.c
Normal file
102
src/main_02043380.c
Normal file
@@ -0,0 +1,102 @@
|
||||
#include "main_02043380.h"
|
||||
#include "main_02042AF8.h"
|
||||
#include "main_0202C748.h"
|
||||
|
||||
s32 sub_02043380(s32 a)
|
||||
{
|
||||
if (a == 8) {
|
||||
return 0;
|
||||
}
|
||||
return IsStorageFull(a);
|
||||
}
|
||||
|
||||
void sub_02043398(void)
|
||||
{
|
||||
struct unk_02043148 *contents = UNK_STORAGE_STRUCT_0X14.field_0x4;
|
||||
|
||||
if (contents == NULL) {
|
||||
return;
|
||||
}
|
||||
sub_0202D134(contents->field_0x7D4);
|
||||
}
|
||||
|
||||
s32 sub_020433C0(void)
|
||||
{
|
||||
return sub_0202C620(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D4);
|
||||
}
|
||||
|
||||
bool8 sub_020433E0(void)
|
||||
{
|
||||
return UNK_STORAGE_STRUCT_0X14.field_0x4 != NULL;
|
||||
}
|
||||
|
||||
bool8 sub_02043400(void)
|
||||
{
|
||||
struct unk_02043148 *contents = UNK_STORAGE_STRUCT_0X14.field_0x4;
|
||||
|
||||
if (contents == NULL || contents->field_0x7D4 == -2) {
|
||||
return 0;
|
||||
}
|
||||
return IsCollectionMenuActive(contents->field_0x7D4);
|
||||
}
|
||||
|
||||
bool8 sub_02043434(void)
|
||||
{
|
||||
struct unk_02043148 *contents = UNK_STORAGE_STRUCT_0X14.field_0x4;
|
||||
|
||||
if (contents == NULL || contents->field_0x7D4 == -2) {
|
||||
return 0;
|
||||
}
|
||||
return IsCollectionMenuState3(contents->field_0x7D4);
|
||||
}
|
||||
|
||||
s16 sub_02043468(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
if (IsCollectionMenuActive(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D4)) {
|
||||
index = GetWindowIdSelectedMenuItemIdx(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D4);
|
||||
} else {
|
||||
index = sub_0202C75C(UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x7D4);
|
||||
}
|
||||
if (index < 0) {
|
||||
return -1;
|
||||
}
|
||||
return UNK_STORAGE_STRUCT_0X14.field_0x4->field_0x4[index];
|
||||
}
|
||||
|
||||
void ClearStorageSelectedItemTable(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
UNK_STORAGE_STRUCT_0X14.field_0x8[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
s32 CountSelectedStorageItems(void)
|
||||
{
|
||||
s32 count = 0;
|
||||
s32 i;
|
||||
u8 *table = UNK_STORAGE_STRUCT_0X14.field_0x8;
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
if (table[i] & 1) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
s16 GetFirstSelectedStorageItemIndex(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 *table = UNK_STORAGE_STRUCT_0X14.field_0x8;
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
if (table[i] & 1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
Reference in New Issue
Block a user