mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-23 10:46:34 -05:00
Decomp GetItemAtIdx and RemoveEmptyItemsInBag
Decompile from asm: GetItemAtIdx 0x0200F340 RemoveEmptyItemsInBag 0x0200F370 GetItemAtIdx returns a pointer into the active inventory, or null for a negative index. Its index parameter is s16, not s32: struct item is 6 bytes, and at 16-bit width the compiler folds the index scaling and the base into a single smlabb, which is what the target emits. An s32 index produces a separate multiply and add, at score 1100. RemoveEmptyItemsInBag tail-calls RemoveEmptyItems over the active inventory with INVENTORY_SIZE, which is already 50 in item.h and matches the 0x32 immediate. RemoveEmptyItems is still asm and was not declared anywhere in the tree, so its prototype is provisional and declared here. 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:
@@ -5,5 +5,3 @@
|
||||
.public IsStorableItem
|
||||
.public IsThrownItem
|
||||
.public ItemZInit
|
||||
.public RemoveEmptyItems
|
||||
.public sub_020582E0
|
||||
|
||||
6
asm/include/main_0200F390.inc
Normal file
6
asm/include/main_0200F390.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
.public AreItemsEquivalent
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public ItemZInit
|
||||
.public RemoveEmptyItems
|
||||
.public sub_020582E0
|
||||
@@ -446,351 +446,3 @@ _0200F334:
|
||||
.align 2, 0
|
||||
_0200F344: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end CopyItemAtIdx
|
||||
|
||||
arm_func_start GetItemAtIdx
|
||||
GetItemAtIdx: ; 0x0200F348
|
||||
cmp r0, #0
|
||||
movlt r0, #0
|
||||
bxlt lr
|
||||
ldr r2, _0200F36C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
ldr r2, [r2, #0x384]
|
||||
smlabb r0, r0, r1, r2
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200F36C: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end GetItemAtIdx
|
||||
|
||||
arm_func_start RemoveEmptyItemsInBag
|
||||
RemoveEmptyItemsInBag: ; 0x0200F370
|
||||
ldr r0, _0200F388 ; =BAG_ITEMS_PTR_MIRROR
|
||||
ldr ip, _0200F38C ; =RemoveEmptyItems
|
||||
ldr r0, [r0]
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0, #0x384]
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200F388: .word BAG_ITEMS_PTR_MIRROR
|
||||
_0200F38C: .word RemoveEmptyItems
|
||||
arm_func_end RemoveEmptyItemsInBag
|
||||
|
||||
arm_func_start RemoveItemNoHole
|
||||
RemoveItemNoHole: ; 0x0200F390
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, _0200F400 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
smulbb r1, r0, r1
|
||||
ldr r2, [r2, #0x384]
|
||||
ldrb r0, [r2, r1]
|
||||
add r4, r2, r1
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200F3F8
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F3D4
|
||||
bl sub_020582E0
|
||||
_0200F3D4:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F400 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200F3F8:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F400: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItemNoHole
|
||||
|
||||
arm_func_start RemoveItem
|
||||
RemoveItem: ; 0x0200F404
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, _0200F450 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
smulbb r1, r0, r1
|
||||
ldr r2, [r2, #0x384]
|
||||
ldrb r0, [r2, r1]
|
||||
add r4, r2, r1
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
ldrneb r0, [r4, #1]
|
||||
cmpne r0, #0
|
||||
beq _0200F444
|
||||
bl sub_020582E0
|
||||
_0200F444:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F450: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItem
|
||||
|
||||
arm_func_start RemoveHeldItemNoHole
|
||||
RemoveHeldItemNoHole: ; 0x0200F454
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
movs r5, r0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r4, #0
|
||||
ldr r0, [r0]
|
||||
mov r6, r4
|
||||
ldr r8, [r0, #0x384]
|
||||
mov r7, #1
|
||||
_0200F478:
|
||||
ldrb r0, [r8]
|
||||
tst r0, #1
|
||||
movne r0, r7
|
||||
moveq r0, r6
|
||||
tst r0, #0xff
|
||||
beq _0200F4A8
|
||||
ldrb r0, [r8, #1]
|
||||
cmp r0, r5
|
||||
bne _0200F4A8
|
||||
bl sub_020582E0
|
||||
mov r0, r8
|
||||
bl ItemZInit
|
||||
_0200F4A8:
|
||||
add r4, r4, #1
|
||||
cmp r4, #0x32
|
||||
add r8, r8, #6
|
||||
blt _0200F478
|
||||
ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
_0200F4D0: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveHeldItemNoHole
|
||||
|
||||
arm_func_start RemoveItemByIdAndStackNoHole
|
||||
RemoveItemByIdAndStackNoHole: ; 0x0200F4D4
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r1, _0200F554 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r3, #0
|
||||
ldr r1, [r1]
|
||||
ldr r4, [r1, #0x384]
|
||||
b _0200F544
|
||||
_0200F4EC:
|
||||
ldrsh r2, [r4, #4]
|
||||
ldrsh r1, [r0]
|
||||
cmp r2, r1
|
||||
ldreqh r2, [r4, #2]
|
||||
ldreqh r1, [r0, #2]
|
||||
cmpeq r2, r1
|
||||
bne _0200F53C
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F518
|
||||
bl sub_020582E0
|
||||
_0200F518:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F554 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200F53C:
|
||||
add r3, r3, #1
|
||||
add r4, r4, #6
|
||||
_0200F544:
|
||||
cmp r3, #0x32
|
||||
blt _0200F4EC
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F554: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItemByIdAndStackNoHole
|
||||
|
||||
arm_func_start RemoveEquivItem
|
||||
RemoveEquivItem: ; 0x0200F558
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
ldr r1, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r5, r0
|
||||
ldr r0, [r1]
|
||||
mov r4, #0
|
||||
ldr sb, [r0, #0x384]
|
||||
mov r7, r4
|
||||
mov r8, #1
|
||||
mov r6, #0xb
|
||||
b _0200F5EC
|
||||
_0200F580:
|
||||
ldrb r0, [sb]
|
||||
tst r0, #1
|
||||
movne r0, r8
|
||||
moveq r0, r7
|
||||
tst r0, #0xff
|
||||
beq _0200F5E4
|
||||
mov r0, sb
|
||||
mov r1, r5
|
||||
mov r2, r6
|
||||
bl AreItemsEquivalent
|
||||
cmp r0, #0
|
||||
beq _0200F5E4
|
||||
ldrb r0, [sb, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F5C0
|
||||
bl sub_020582E0
|
||||
_0200F5C0:
|
||||
mov r0, sb
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_0200F5E4:
|
||||
add r4, r4, #1
|
||||
add sb, sb, #6
|
||||
_0200F5EC:
|
||||
cmp r4, #0x32
|
||||
blt _0200F580
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0200F5FC: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveEquivItem
|
||||
|
||||
arm_func_start RemoveEquivItemNoHole
|
||||
RemoveEquivItemNoHole: ; 0x0200F600
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
ldr r1, _0200F690 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r5, r0
|
||||
ldr r0, [r1]
|
||||
mov r4, #0
|
||||
ldr sb, [r0, #0x384]
|
||||
mov r7, r4
|
||||
mov r8, #1
|
||||
mov r6, #0xb
|
||||
b _0200F680
|
||||
_0200F628:
|
||||
ldrb r0, [sb]
|
||||
tst r0, #1
|
||||
movne r0, r8
|
||||
moveq r0, r7
|
||||
tst r0, #0xff
|
||||
beq _0200F678
|
||||
mov r0, sb
|
||||
mov r1, r5
|
||||
mov r2, r6
|
||||
bl AreItemsEquivalent
|
||||
cmp r0, #0
|
||||
beq _0200F678
|
||||
ldrb r0, [sb, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F668
|
||||
bl sub_020582E0
|
||||
_0200F668:
|
||||
mov r0, sb
|
||||
bl ItemZInit
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_0200F678:
|
||||
add r4, r4, #1
|
||||
add sb, sb, #6
|
||||
_0200F680:
|
||||
cmp r4, #0x32
|
||||
blt _0200F628
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0200F690: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveEquivItemNoHole
|
||||
|
||||
arm_func_start DecrementStackItem
|
||||
DecrementStackItem: ; 0x0200F694
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
ldr r1, _0200F714 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r6, r0
|
||||
ldr r0, [r1]
|
||||
mov r5, #0
|
||||
ldr r4, [r0, #0x384]
|
||||
mov r8, r5
|
||||
mov sb, #1
|
||||
mov r7, #0xb
|
||||
b _0200F704
|
||||
_0200F6BC:
|
||||
ldrb r0, [r4]
|
||||
tst r0, #1
|
||||
movne r0, sb
|
||||
moveq r0, r8
|
||||
tst r0, #0xff
|
||||
beq _0200F6FC
|
||||
mov r0, r4
|
||||
mov r1, r6
|
||||
mov r2, r7
|
||||
bl AreItemsEquivalent
|
||||
cmp r0, #0
|
||||
ldrneh r1, [r4, #2]
|
||||
movne r0, #1
|
||||
subne r1, r1, #1
|
||||
strneh r1, [r4, #2]
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_0200F6FC:
|
||||
add r5, r5, #1
|
||||
add r4, r4, #6
|
||||
_0200F704:
|
||||
cmp r5, #0x32
|
||||
blt _0200F6BC
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0200F714: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end DecrementStackItem
|
||||
|
||||
arm_func_start RemoveItemNoHoleCheck
|
||||
RemoveItemNoHoleCheck: ; 0x0200F718
|
||||
stmdb sp!, {r4, lr}
|
||||
mvn r1, #0
|
||||
cmp r0, r1
|
||||
beq _0200F78C
|
||||
ldr r2, _0200F794 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
smulbb r1, r0, r1
|
||||
ldr r2, [r2, #0x384]
|
||||
ldrb r0, [r2, r1]
|
||||
add r4, r2, r1
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200F78C
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F768
|
||||
bl sub_020582E0
|
||||
_0200F768:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F794 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200F78C:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F794: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItemNoHoleCheck
|
||||
|
||||
324
asm/main_0200F390.s
Normal file
324
asm/main_0200F390.s
Normal file
@@ -0,0 +1,324 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "main_0200F390.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start RemoveItemNoHole
|
||||
RemoveItemNoHole: ; 0x0200F390
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, _0200F400 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
smulbb r1, r0, r1
|
||||
ldr r2, [r2, #0x384]
|
||||
ldrb r0, [r2, r1]
|
||||
add r4, r2, r1
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200F3F8
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F3D4
|
||||
bl sub_020582E0
|
||||
_0200F3D4:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F400 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200F3F8:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F400: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItemNoHole
|
||||
|
||||
arm_func_start RemoveItem
|
||||
RemoveItem: ; 0x0200F404
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, _0200F450 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
smulbb r1, r0, r1
|
||||
ldr r2, [r2, #0x384]
|
||||
ldrb r0, [r2, r1]
|
||||
add r4, r2, r1
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
ldrneb r0, [r4, #1]
|
||||
cmpne r0, #0
|
||||
beq _0200F444
|
||||
bl sub_020582E0
|
||||
_0200F444:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F450: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItem
|
||||
|
||||
arm_func_start RemoveHeldItemNoHole
|
||||
RemoveHeldItemNoHole: ; 0x0200F454
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
movs r5, r0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r4, #0
|
||||
ldr r0, [r0]
|
||||
mov r6, r4
|
||||
ldr r8, [r0, #0x384]
|
||||
mov r7, #1
|
||||
_0200F478:
|
||||
ldrb r0, [r8]
|
||||
tst r0, #1
|
||||
movne r0, r7
|
||||
moveq r0, r6
|
||||
tst r0, #0xff
|
||||
beq _0200F4A8
|
||||
ldrb r0, [r8, #1]
|
||||
cmp r0, r5
|
||||
bne _0200F4A8
|
||||
bl sub_020582E0
|
||||
mov r0, r8
|
||||
bl ItemZInit
|
||||
_0200F4A8:
|
||||
add r4, r4, #1
|
||||
cmp r4, #0x32
|
||||
add r8, r8, #6
|
||||
blt _0200F478
|
||||
ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
_0200F4D0: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveHeldItemNoHole
|
||||
|
||||
arm_func_start RemoveItemByIdAndStackNoHole
|
||||
RemoveItemByIdAndStackNoHole: ; 0x0200F4D4
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r1, _0200F554 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r3, #0
|
||||
ldr r1, [r1]
|
||||
ldr r4, [r1, #0x384]
|
||||
b _0200F544
|
||||
_0200F4EC:
|
||||
ldrsh r2, [r4, #4]
|
||||
ldrsh r1, [r0]
|
||||
cmp r2, r1
|
||||
ldreqh r2, [r4, #2]
|
||||
ldreqh r1, [r0, #2]
|
||||
cmpeq r2, r1
|
||||
bne _0200F53C
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F518
|
||||
bl sub_020582E0
|
||||
_0200F518:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F554 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200F53C:
|
||||
add r3, r3, #1
|
||||
add r4, r4, #6
|
||||
_0200F544:
|
||||
cmp r3, #0x32
|
||||
blt _0200F4EC
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F554: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItemByIdAndStackNoHole
|
||||
|
||||
arm_func_start RemoveEquivItem
|
||||
RemoveEquivItem: ; 0x0200F558
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
ldr r1, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r5, r0
|
||||
ldr r0, [r1]
|
||||
mov r4, #0
|
||||
ldr sb, [r0, #0x384]
|
||||
mov r7, r4
|
||||
mov r8, #1
|
||||
mov r6, #0xb
|
||||
b _0200F5EC
|
||||
_0200F580:
|
||||
ldrb r0, [sb]
|
||||
tst r0, #1
|
||||
movne r0, r8
|
||||
moveq r0, r7
|
||||
tst r0, #0xff
|
||||
beq _0200F5E4
|
||||
mov r0, sb
|
||||
mov r1, r5
|
||||
mov r2, r6
|
||||
bl AreItemsEquivalent
|
||||
cmp r0, #0
|
||||
beq _0200F5E4
|
||||
ldrb r0, [sb, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F5C0
|
||||
bl sub_020582E0
|
||||
_0200F5C0:
|
||||
mov r0, sb
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_0200F5E4:
|
||||
add r4, r4, #1
|
||||
add sb, sb, #6
|
||||
_0200F5EC:
|
||||
cmp r4, #0x32
|
||||
blt _0200F580
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0200F5FC: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveEquivItem
|
||||
|
||||
arm_func_start RemoveEquivItemNoHole
|
||||
RemoveEquivItemNoHole: ; 0x0200F600
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
ldr r1, _0200F690 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r5, r0
|
||||
ldr r0, [r1]
|
||||
mov r4, #0
|
||||
ldr sb, [r0, #0x384]
|
||||
mov r7, r4
|
||||
mov r8, #1
|
||||
mov r6, #0xb
|
||||
b _0200F680
|
||||
_0200F628:
|
||||
ldrb r0, [sb]
|
||||
tst r0, #1
|
||||
movne r0, r8
|
||||
moveq r0, r7
|
||||
tst r0, #0xff
|
||||
beq _0200F678
|
||||
mov r0, sb
|
||||
mov r1, r5
|
||||
mov r2, r6
|
||||
bl AreItemsEquivalent
|
||||
cmp r0, #0
|
||||
beq _0200F678
|
||||
ldrb r0, [sb, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F668
|
||||
bl sub_020582E0
|
||||
_0200F668:
|
||||
mov r0, sb
|
||||
bl ItemZInit
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_0200F678:
|
||||
add r4, r4, #1
|
||||
add sb, sb, #6
|
||||
_0200F680:
|
||||
cmp r4, #0x32
|
||||
blt _0200F628
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0200F690: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveEquivItemNoHole
|
||||
|
||||
arm_func_start DecrementStackItem
|
||||
DecrementStackItem: ; 0x0200F694
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
ldr r1, _0200F714 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r6, r0
|
||||
ldr r0, [r1]
|
||||
mov r5, #0
|
||||
ldr r4, [r0, #0x384]
|
||||
mov r8, r5
|
||||
mov sb, #1
|
||||
mov r7, #0xb
|
||||
b _0200F704
|
||||
_0200F6BC:
|
||||
ldrb r0, [r4]
|
||||
tst r0, #1
|
||||
movne r0, sb
|
||||
moveq r0, r8
|
||||
tst r0, #0xff
|
||||
beq _0200F6FC
|
||||
mov r0, r4
|
||||
mov r1, r6
|
||||
mov r2, r7
|
||||
bl AreItemsEquivalent
|
||||
cmp r0, #0
|
||||
ldrneh r1, [r4, #2]
|
||||
movne r0, #1
|
||||
subne r1, r1, #1
|
||||
strneh r1, [r4, #2]
|
||||
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
_0200F6FC:
|
||||
add r5, r5, #1
|
||||
add r4, r4, #6
|
||||
_0200F704:
|
||||
cmp r5, #0x32
|
||||
blt _0200F6BC
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0200F714: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end DecrementStackItem
|
||||
|
||||
arm_func_start RemoveItemNoHoleCheck
|
||||
RemoveItemNoHoleCheck: ; 0x0200F718
|
||||
stmdb sp!, {r4, lr}
|
||||
mvn r1, #0
|
||||
cmp r0, r1
|
||||
beq _0200F78C
|
||||
ldr r2, _0200F794 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #6
|
||||
ldr r2, [r2]
|
||||
smulbb r1, r0, r1
|
||||
ldr r2, [r2, #0x384]
|
||||
ldrb r0, [r2, r1]
|
||||
add r4, r2, r1
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200F78C
|
||||
ldrb r0, [r4, #1]
|
||||
cmp r0, #0
|
||||
beq _0200F768
|
||||
bl sub_020582E0
|
||||
_0200F768:
|
||||
mov r0, r4
|
||||
bl ItemZInit
|
||||
ldr r0, _0200F794 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x32
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0, #0x384]
|
||||
bl RemoveEmptyItems
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200F78C:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0200F794: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RemoveItemNoHoleCheck
|
||||
7
include/main_0200F370.h
Normal file
7
include/main_0200F370.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#ifndef PMDSKY_MAIN_0200F370_H
|
||||
#define PMDSKY_MAIN_0200F370_H
|
||||
|
||||
struct item* GetItemAtIdx(s16 idx);
|
||||
u32 RemoveEmptyItemsInBag(void);
|
||||
|
||||
#endif
|
||||
2
main.lsf
2
main.lsf
@@ -71,6 +71,8 @@ Static main
|
||||
Object src/main_0200ECFC.o
|
||||
Object src/main_0200EDC0.o
|
||||
Object asm/main_0200EDFC.o
|
||||
Object src/main_0200F370.o
|
||||
Object asm/main_0200F390.o
|
||||
Object src/main_0200F798.o
|
||||
Object asm/main_0200F7A8.o
|
||||
Object src/main_0200F874.o
|
||||
|
||||
18
src/main_0200F370.c
Normal file
18
src/main_0200F370.c
Normal file
@@ -0,0 +1,18 @@
|
||||
#include "main_0200F370.h"
|
||||
#include "item.h"
|
||||
|
||||
extern struct bag_items *BAG_ITEMS_PTR_MIRROR;
|
||||
u32 RemoveEmptyItems(struct item *items, s32 count);
|
||||
|
||||
struct item* GetItemAtIdx(s16 idx)
|
||||
{
|
||||
if (idx < 0) {
|
||||
return NULL;
|
||||
}
|
||||
return &BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[idx];
|
||||
}
|
||||
|
||||
u32 RemoveEmptyItemsInBag(void)
|
||||
{
|
||||
return RemoveEmptyItems(BAG_ITEMS_PTR_MIRROR->bag_items->bag_items, INVENTORY_SIZE);
|
||||
}
|
||||
Reference in New Issue
Block a user