pmd-sky/asm/main_0200CAFC.s
2026-01-13 16:03:33 -06:00

1792 lines
31 KiB
ArmAsm

.include "asm/macros.inc"
.include "main_0200CAFC.inc"
.text
arm_func_start BulkItemToItem
BulkItemToItem: ; 0x0200CFF0
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
ldrsh r1, [r4]
mov r5, r0
cmp r1, #0
beq _0200D098
mov r0, #1
strb r0, [r5]
ldrsh r1, [r4]
mov r0, #0
strh r1, [r5, #4]
strb r0, [r5, #1]
ldrsh r0, [r5, #4]
bl IsThrownItem
cmp r0, #0
ldrneh r0, [r4, #2]
strneh r0, [r5, #2]
ldmneia sp!, {r3, r4, r5, pc}
ldrsh r0, [r5, #4]
bl GetItemCategory
cmp r0, #0xe
bgt _0200D078
subs r1, r0, #6
addpl pc, pc, r1, lsl #2
b _0200D08C
_0200D054: ; jump table
b _0200D080 ; case 0
b _0200D08C ; case 1
b _0200D08C ; case 2
b _0200D08C ; case 3
b _0200D08C ; case 4
b _0200D08C ; case 5
b _0200D080 ; case 6
b _0200D080 ; case 7
b _0200D080 ; case 8
_0200D078:
cmp r0, #0xbb
bne _0200D08C
_0200D080:
ldrh r0, [r4, #2]
strh r0, [r5, #2]
ldmia sp!, {r3, r4, r5, pc}
_0200D08C:
mov r0, #0
strh r0, [r5, #2]
ldmia sp!, {r3, r4, r5, pc}
_0200D098:
bl ItemZInit
ldmia sp!, {r3, r4, r5, pc}
arm_func_end BulkItemToItem
arm_func_start ItemToBulkItem
ItemToBulkItem: ; 0x0200D0A0
ldrb r2, [r1]
tst r2, #1
movne r2, #1
moveq r2, #0
tst r2, #0xff
ldrnesh r2, [r1, #4]
strneh r2, [r0]
ldrneh r1, [r1, #2]
moveq r1, #0
streqh r1, [r0]
strh r1, [r0, #2]
bx lr
arm_func_end ItemToBulkItem
arm_func_start GetDisplayedBuyPrice
GetDisplayedBuyPrice: ; 0x0200D0D0
stmdb sp!, {r4, lr}
mov r4, r0
ldrsh r1, [r4, #4]
cmp r1, #0xb7
bne _0200D0EC
bl sub_0200D8AC
ldmia sp!, {r4, pc}
_0200D0EC:
mov r0, r1
bl IsThrownItem
cmp r0, #0
ldrsh r0, [r4, #4]
beq _0200D110
bl GetItemBuyPrice
ldrh r1, [r4, #2]
mul r0, r1, r0
ldmia sp!, {r4, pc}
_0200D110:
bl GetItemBuyPrice
ldmia sp!, {r4, pc}
arm_func_end GetDisplayedBuyPrice
arm_func_start GetDisplayedSellPrice
GetDisplayedSellPrice: ; 0x0200D118
stmdb sp!, {r4, lr}
mov r4, r0
ldrsh r1, [r4, #4]
cmp r1, #0xb7
bne _0200D134
bl sub_0200D8AC
ldmia sp!, {r4, pc}
_0200D134:
mov r0, r1
bl IsThrownItem
cmp r0, #0
ldrsh r0, [r4, #4]
beq _0200D158
bl GetItemSellPrice
ldrh r1, [r4, #2]
mul r0, r1, r0
ldmia sp!, {r4, pc}
_0200D158:
bl GetItemSellPrice
ldmia sp!, {r4, pc}
arm_func_end GetDisplayedSellPrice
arm_func_start GetActualBuyPrice
GetActualBuyPrice: ; 0x0200D160
stmdb sp!, {r4, lr}
mov r4, r0
ldrsh r0, [r4, #4]
bl IsShoppableItem
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldrsh r0, [r4, #4]
bl IsThrownItem
cmp r0, #0
ldrsh r0, [r4, #4]
beq _0200D1A0
bl GetItemBuyPrice
ldrh r1, [r4, #2]
mul r0, r1, r0
ldmia sp!, {r4, pc}
_0200D1A0:
bl GetItemBuyPrice
ldmia sp!, {r4, pc}
arm_func_end GetActualBuyPrice
arm_func_start GetActualSellPrice
GetActualSellPrice: ; 0x0200D1A8
stmdb sp!, {r4, lr}
mov r4, r0
ldrsh r0, [r4, #4]
bl IsShoppableItem
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldrsh r0, [r4, #4]
bl IsThrownItem
cmp r0, #0
ldrsh r0, [r4, #4]
beq _0200D1E8
bl GetItemSellPrice
ldrh r1, [r4, #2]
mul r0, r1, r0
ldmia sp!, {r4, pc}
_0200D1E8:
bl GetItemSellPrice
ldmia sp!, {r4, pc}
arm_func_end GetActualSellPrice
arm_func_start sub_0200D1F0
sub_0200D1F0: ; 0x0200D1F0
ldr ip, _0200D1F8 ; =sub_0200EB64
bx ip
.align 2, 0
_0200D1F8: .word sub_0200EB64
arm_func_end sub_0200D1F0
arm_func_start sub_0200D1FC
sub_0200D1FC: ; 0x0200D1FC
ldr ip, _0200D204 ; =GetItemPaletteId
bx ip
.align 2, 0
_0200D204: .word GetItemPaletteId
arm_func_end sub_0200D1FC
arm_func_start sub_0200D208
sub_0200D208: ; 0x0200D208
ldr ip, _0200D210 ; =GetItemActionName
bx ip
.align 2, 0
_0200D210: .word GetItemActionName
arm_func_end sub_0200D208
arm_func_start sub_0200D214
sub_0200D214: ; 0x0200D214
stmdb sp!, {r4, r5, r6, lr}
sub sp, sp, #0x58
mov r5, r1
mov r6, r0
mov r0, r5
mov r4, r2
bl GetItemName
mov r1, r0
add r0, sp, #6
mov r2, #0x50
bl strncpy
mov r2, #0
mov r1, r5
add r0, sp, #0
mov r3, r2
bl InitItem
mov r1, #1
strh r1, [sp, #2]
mov r0, r6
mov r3, r4
add r1, sp, #6
add r2, sp, #0
bl sub_0200D688
add sp, sp, #0x58
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_0200D214
arm_func_start FindItemInInventory
FindItemInInventory: ; 0x0200D278
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _0200D30C ; =BAG_ITEMS_PTR_MIRROR
mov r5, #0
ldr r6, [r1]
mov r3, r5
mov ip, #1
mov r1, #6
b _0200D2D0
_0200D298:
mul lr, r5, r1
ldr r4, [r6, #0x384]
ldrb r2, [r4, lr]
add r4, r4, lr
tst r2, #1
movne r2, ip
moveq r2, r3
tst r2, #0xff
beq _0200D2CC
ldrsh r2, [r4, #4]
cmp r0, r2
moveq r0, r5
ldmeqia sp!, {r4, r5, r6, pc}
_0200D2CC:
add r5, r5, #1
_0200D2D0:
cmp r5, #0x32
blt _0200D298
mov r2, #0
b _0200D2FC
_0200D2E0:
add r1, r6, r2, lsl #1
add r1, r1, #0x300
ldrsh r1, [r1, #0x8a]
cmp r0, r1
addeq r0, r2, #0x8000
ldmeqia sp!, {r4, r5, r6, pc}
add r2, r2, #1
_0200D2FC:
cmp r2, #0x3e8
blt _0200D2E0
mvn r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_0200D30C: .word BAG_ITEMS_PTR_MIRROR
arm_func_end FindItemInInventory
arm_func_start sub_0200D310
sub_0200D310: ; 0x0200D310
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xa0
mov sb, r1
mov sl, r0
ldrsh r0, [sb, #4]
mov r8, r2
mov r7, r3
mov r4, #0
bl GetItemCategory
mov r5, r4
mov r6, r0
cmp r8, #0
ldrneb r0, [r8, #8]
mov fp, r5
cmpne r0, #0
ldrsh r0, [sb, #4]
movne r4, #1
bl GetItemName
mov r2, r0
cmp r6, #0
bne _0200D3B4
cmp r4, #0
add r0, sp, #0x50
beq _0200D394
cmp r7, #0
ldrh r3, [sb, #2]
beq _0200D388
ldr r1, _0200D60C ; =_02097F34
bl SprintfStatic__0200D634
b _0200D4F8
_0200D388:
ldr r1, _0200D610 ; =_02097F50
bl SprintfStatic__0200D634
b _0200D4F8
_0200D394:
cmp r7, #0
beq _0200D3A8
ldr r1, _0200D614 ; =_02097F58
bl SprintfStatic__0200D634
b _0200D4F8
_0200D3A8:
ldr r1, _0200D618 ; =_02097F68
bl SprintfStatic__0200D634
b _0200D4F8
_0200D3B4:
cmp r6, #1
bne _0200D40C
cmp r4, #0
add r0, sp, #0x50
beq _0200D3EC
cmp r7, #0
ldrh r3, [sb, #2]
beq _0200D3E0
ldr r1, _0200D60C ; =_02097F34
bl SprintfStatic__0200D634
b _0200D4F8
_0200D3E0:
ldr r1, _0200D610 ; =_02097F50
bl SprintfStatic__0200D634
b _0200D4F8
_0200D3EC:
cmp r7, #0
beq _0200D400
ldr r1, _0200D614 ; =_02097F58
bl SprintfStatic__0200D634
b _0200D4F8
_0200D400:
ldr r1, _0200D618 ; =_02097F68
bl SprintfStatic__0200D634
b _0200D4F8
_0200D40C:
add r0, r6, #0xf4
and r0, r0, #0xff
cmp r0, #2
bhi _0200D440
cmp r7, #0
add r0, sp, #0x50
beq _0200D434
ldr r1, _0200D61C ; =_02097F6C
bl SprintfStatic__0200D634
b _0200D4F8
_0200D434:
mov r1, r2
bl strcpy
b _0200D4F8
_0200D440:
ldrsh r0, [sb, #4]
cmp r0, #0xb7
bne _0200D4AC
mov r0, sb
bl sub_0200D8AC
mov r1, r0
add r0, sp, #0
bl sub_020238E0
cmp r7, #0
add r0, sp, #0x50
add r2, sp, #0
beq _0200D47C
ldr r1, _0200D620 ; =_02097F7C
bl SprintfStatic__0200D634
b _0200D484
_0200D47C:
ldr r1, _0200D624 ; =_02097F90
bl SprintfStatic__0200D634
_0200D484:
cmp r7, #0
add r0, sp, #0x50
add r2, sp, #0
beq _0200D4A0
ldr r1, _0200D620 ; =_02097F7C
bl SprintfStatic__0200D634
b _0200D4F8
_0200D4A0:
ldr r1, _0200D624 ; =_02097F90
bl SprintfStatic__0200D634
b _0200D4F8
_0200D4AC:
cmp r6, #0xf
add r0, sp, #0x50
bne _0200D4D8
cmp r7, #0
beq _0200D4CC
ldr r1, _0200D628 ; =_02097F9C
bl SprintfStatic__0200D634
b _0200D4F8
_0200D4CC:
mov r1, r2
bl strcpy
b _0200D4F8
_0200D4D8:
cmp r7, #0
beq _0200D4EC
ldr r1, _0200D614 ; =_02097F58
bl SprintfStatic__0200D634
b _0200D4F8
_0200D4EC:
mov r1, r2
mov r2, #0x50
bl strncpy
_0200D4F8:
ldrb r0, [sb]
tst r0, #8
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _0200D538
ldr r1, _0200D62C ; =_02097FAC
add r2, sp, #0x50
mov r0, sl
bl SprintfStatic__0200D634
add r0, sp, #0x50
mov r1, sl
mov r2, #0x50
bl strncpy
mov fp, #1
b _0200D564
_0200D538:
ldrb r0, [sp, #0xc8]
cmp r0, #0
beq _0200D564
ldr r1, _0200D630 ; =_02097FB8
add r2, sp, #0x50
mov r0, sl
bl SprintfStatic__0200D634
add r0, sp, #0x50
mov r1, sl
mov r2, #0x50
bl strncpy
_0200D564:
cmp r8, #0
bne _0200D580
add r1, sp, #0x50
mov r0, sl
mov r2, #0x50
bl strncpy
b _0200D600
_0200D580:
ldrb r0, [r8, #4]
cmp r0, #0
beq _0200D5AC
ldrb r0, [sb]
tst r0, #0x10
beq _0200D5AC
cmp fp, #0
movne r0, #0x35
strneb r0, [sp, #0x54]
moveq r0, #0x32
streqb r0, [sp, #0x54]
_0200D5AC:
ldr r0, [r8]
add r1, sp, #0x50
cmp r0, #1
cmpne r0, #3
bne _0200D5F0
ldrb r0, [sb]
tst r0, #2
mov r0, sl
beq _0200D5E4
mov r2, sb
mov r3, r8
bl sub_0200D688
mov r5, #1
b _0200D600
_0200D5E4:
mov r2, #0x50
bl strncpy
b _0200D600
_0200D5F0:
mov r0, sl
mov r2, sb
mov r3, r8
bl sub_0200D688
_0200D600:
mov r0, r5
add sp, sp, #0xa0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0200D60C: .word _02097F34
_0200D610: .word _02097F50
_0200D614: .word _02097F58
_0200D618: .word _02097F68
_0200D61C: .word _02097F6C
_0200D620: .word _02097F7C
_0200D624: .word _02097F90
_0200D628: .word _02097F9C
_0200D62C: .word _02097FAC
_0200D630: .word _02097FB8
arm_func_end sub_0200D310
arm_func_start SprintfStatic__0200D634
SprintfStatic__0200D634: ; 0x0200D634
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, lr}
add r2, sp, #0xc
bic r2, r2, #3
ldr r1, [sp, #0xc]
add r2, r2, #4
bl vsprintf
ldmia sp!, {r3, lr}
add sp, sp, #0x10
bx lr
arm_func_end SprintfStatic__0200D634
arm_func_start sub_0200D65C
sub_0200D65C: ; 0x0200D65C
stmdb sp!, {r3, lr}
mov r3, #0
str r3, [sp]
bl sub_0200D310
ldmia sp!, {r3, pc}
arm_func_end sub_0200D65C
arm_func_start sub_0200D670
sub_0200D670: ; 0x0200D670
stmdb sp!, {r3, lr}
mov ip, #0
mov r3, #1
str ip, [sp]
bl sub_0200D310
ldmia sp!, {r3, pc}
arm_func_end sub_0200D670
arm_func_start sub_0200D688
sub_0200D688: ; 0x0200D688
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #0x2c
movs r4, r3
mov r6, r0
mov r5, r1
bne _0200D6AC
mov r2, #0x50
bl strncpy
b _0200D75C
_0200D6AC:
ldr r0, [r4]
cmp r0, #4
addls pc, pc, r0, lsl #2
b _0200D6E8
_0200D6BC: ; jump table
b _0200D6E8 ; case 0
b _0200D6D0 ; case 1
b _0200D6D0 ; case 2
b _0200D6DC ; case 3
b _0200D6DC ; case 4
_0200D6D0:
mov r0, r2
bl GetDisplayedBuyPrice
b _0200D6EC
_0200D6DC:
mov r0, r2
bl GetDisplayedSellPrice
b _0200D6EC
_0200D6E8:
mov r0, #0
_0200D6EC:
cmp r0, #0
bne _0200D708
mov r0, r6
mov r1, r5
mov r2, #0x50
bl strncpy
b _0200D75C
_0200D708:
ldrsh r1, [r4, #6]
cmp r1, #0
add r1, sp, #4
beq _0200D740
mov r2, #1
bl sub_0200D76C
add r0, sp, #4
str r0, [sp]
ldrsh r3, [r4, #6]
ldr r1, _0200D764 ; =_02097FC4
mov r0, r6
mov r2, r5
bl SprintfStatic__0200D634
b _0200D75C
_0200D740:
mov r2, #0
bl sub_0200D76C
ldr r1, _0200D768 ; =_02097FE4
add r3, sp, #4
mov r0, r6
mov r2, r5
bl SprintfStatic__0200D634
_0200D75C:
add sp, sp, #0x2c
ldmia sp!, {r3, r4, r5, r6, pc}
.align 2, 0
_0200D764: .word _02097FC4
_0200D768: .word _02097FE4
arm_func_end sub_0200D688
arm_func_start sub_0200D76C
sub_0200D76C: ; 0x0200D76C
#ifdef JAPAN
stmdb sp!, {r4, r5, r6, lr}
ldr r3, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
mov lr, #0
ldr r4, [r3, #4]
mov ip, lr
mov r3, lr
_0200D784:
ldr r5, _0200D818 ; =_02094D0C
mov r6, #0
ldr r5, [r5, r3, lsl #2]
b _0200D79C
_0200D794:
sub r0, r0, r5
add r6, r6, #1
_0200D79C:
cmp r0, r5
bge _0200D794
cmp r6, #9
movgt r6, #9
cmp r6, #0
beq _0200D7D8
ldrb r5, [r4, r6, lsl #1]
add r6, r4, r6, lsl #1
add ip, ip, #1
strb r5, [r1]
ldrb r5, [r6, #1]
mov lr, #1
strb r5, [r1, #1]
add r1, r1, #2
b _0200D80C
_0200D7D8:
cmp lr, #0
beq _0200D800
ldrb r5, [r4, r6, lsl #1]
add r6, r4, r6, lsl #1
add ip, ip, #1
strb r5, [r1]
ldrb r5, [r6, #1]
strb r5, [r1, #1]
add r1, r1, #2
b _0200D80C
_0200D800:
cmp r2, #0
movne r5, #0x7f
strneb r5, [r1], #1
_0200D80C:
add r3, r3, #1
cmp r3, #5
blt _0200D784
ldr r2, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
mov r3, #0
ldr r2, [r2, #4]
ldrb r4, [r2, r0, lsl #1]
add r2, r2, r0, lsl #1
add r0, ip, #1
strb r4, [r1]
ldrb r2, [r2, #1]
strb r2, [r1, #1]
strb r3, [r1, #2]
ldmia sp!, {r4, r5, r6, pc}
#else
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr r3, _0200D814 ; =BAG_ITEMS_PTR_MIRROR
mov ip, #0
ldr lr, [r3, #4]
ldr r8, _0200D818 ; =_02094D0C
mov r3, ip
mov sl, ip
mov r7, #9
mov r4, #0x7f
mov r6, #1
mov sb, ip
_0200D798:
mov r5, sb
ldr fp, [r8, sl, lsl #2]
b _0200D7AC
_0200D7A4:
sub r0, r0, fp
add r5, r5, #1
_0200D7AC:
cmp r0, fp
bge _0200D7A4
cmp r5, #9
movgt r5, r7
cmp r5, #0
ldrneb r5, [lr, r5]
movne ip, r6
addne r3, r3, #1
strneb r5, [r1], #1
bne _0200D7F0
cmp ip, #0
ldrneb r5, [lr, r5]
addne r3, r3, #1
strneb r5, [r1], #1
bne _0200D7F0
cmp r2, #0
strneb r4, [r1], #1
_0200D7F0:
add sl, sl, #1
cmp sl, #5
blt _0200D798
ldrb ip, [lr, r0]
mov r2, #0
add r0, r3, #1
strb ip, [r1]
strb r2, [r1, #1]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
#endif
.align 2, 0
_0200D814: .word BAG_ITEMS_PTR_MIRROR
_0200D818: .word _02094D0C
arm_func_end sub_0200D76C
arm_func_start ItemZInit
ItemZInit: ; 0x0200D81C
mov r1, #0
strh r1, [r0, #4]
strh r1, [r0, #2]
strb r1, [r0]
strb r1, [r0, #1]
bx lr
arm_func_end ItemZInit
arm_func_start AreItemsEquivalent
AreItemsEquivalent: ; 0x0200D834
ldrb ip, [r0]
ldrb r3, [r1]
and ip, ip, r2
and r2, r3, r2
cmp ip, r2
movne r0, #0
bxne lr
ldrb r3, [r0, #1]
ldrb r2, [r1, #1]
cmp r3, r2
movne r0, #0
bxne lr
ldrh r3, [r0, #2]
ldrh r2, [r1, #2]
cmp r3, r2
movne r0, #0
bxne lr
ldrsh r2, [r0, #4]
ldrsh r0, [r1, #4]
cmp r2, r0
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
bx lr
arm_func_end AreItemsEquivalent
arm_func_start sub_0200D894
sub_0200D894: ; 0x0200D894
mov r1, #0
strb r1, [r0, #1]
ldrb r1, [r0]
bic r1, r1, #0x18
strb r1, [r0]
bx lr
arm_func_end sub_0200D894
arm_func_start sub_0200D8AC
sub_0200D8AC: ; 0x0200D8AC
stmdb sp!, {r3, lr}
ldrb r1, [r0]
ldrh r2, [r0, #2]
ldr r0, _0200D8DC ; =MONEY_QUANTITY_TABLE
tst r1, #0x20
ldr r0, [r0, r2, lsl #2]
ldmeqia sp!, {r3, pc}
ldr r1, _0200D8E0 ; =0x00000133
mov r0, r0, lsl #8
bl MultiplyByFixedPoint
mov r0, r0, asr #8
ldmia sp!, {r3, pc}
.align 2, 0
_0200D8DC: .word MONEY_QUANTITY_TABLE
_0200D8E0: .word 0x00000133
arm_func_end sub_0200D8AC
arm_func_start sub_0200D8E4
sub_0200D8E4: ; 0x0200D8E4
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
bl GetItemCategory
cmp r0, #0xf
bne _0200D950
mov r5, #0
ldr r4, _0200D958 ; =_02094D20
b _0200D940
_0200D904:
mov r0, r7
bl GetExclusiveItemType
cmp r6, r0
bne _0200D93C
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
mov r0, r7
bl GetExclusiveItemType
add r1, r4, r5, lsl #2
ldrsh r1, [r1, #2]
cmp r1, r0
moveq r0, r7
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
_0200D93C:
add r5, r5, #1
_0200D940:
mov r0, r5, lsl #2
ldrsh r6, [r4, r0]
cmp r6, #0
bne _0200D904
_0200D950:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
.align 2, 0
_0200D958: .word _02094D20
arm_func_end sub_0200D8E4
arm_func_start WriteItemsToSave
WriteItemsToSave: ; 0x0200D95C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x10
mov r3, r0
mov r2, r1
add r0, sp, #0
mov r1, r3
bl sub_02050990
mov r8, #0
ldr r6, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
mov fp, r8
mov r4, #6
mov r5, #0x12c
_0200D98C:
mul sl, r8, r5
mov r7, fp
_0200D994:
ldr r1, [r6]
add r0, sp, #0
add r1, r1, sl
mla sb, r7, r4, r1
mov r1, sb
mov r2, #8
bl CopyBitsTo
add r0, sp, #0
add r1, sb, #2
mov r2, #0xb
bl CopyBitsTo
add r0, sp, #0
add r1, sb, #4
mov r2, #0xb
bl CopyBitsTo
add r1, sb, #1
add r0, sp, #0
mov r2, #3
bl CopyBitsTo
add r7, r7, #1
cmp r7, #0x32
blt _0200D994
add r8, r8, #1
cmp r8, #3
blt _0200D98C
ldr r4, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
mov r7, #0
add r6, sp, #0
mov r5, #0xb
_0200DA08:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x8a
add r1, r1, #0x300
mov r2, r5
add r1, r1, r7, lsl #1
bl CopyBitsTo
add r7, r7, #1
cmp r7, #0x3e8
blt _0200DA08
ldr r4, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
mov r7, #0
add r6, sp, #0
mov r5, #0xb
_0200DA40:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x5a
add r1, r1, #0xb00
mov r2, r5
add r1, r1, r7, lsl #1
bl CopyBitsTo
add r7, r7, #1
cmp r7, #0x3e8
blt _0200DA40
mov sb, #0
mov r5, #0xb
ldr r4, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r6, sp, #0
mov fp, r5
mov r7, sb
_0200DA80:
mov sl, r7
_0200DA84:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x330
add r1, r1, #0x1000
add r1, r1, sb, lsl #5
add r8, r1, sl, lsl #2
mov r1, r8
mov r2, r5
bl CopyBitsTo
add r1, r8, #2
mov r0, r6
mov r2, fp
bl CopyBitsTo
add sl, sl, #1
cmp sl, #8
blt _0200DA84
mov sl, #0
_0200DAC8:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x374
add r1, r1, #0x1000
add r1, r1, sb, lsl #4
add r8, r1, sl, lsl #2
mov r1, r8
mov r2, #0xb
bl CopyBitsTo
add r1, r8, #2
mov r0, r6
mov r2, #0xb
bl CopyBitsTo
add sl, sl, #1
cmp sl, #4
blt _0200DAC8
add sb, sb, #1
cmp sb, #2
blt _0200DA80
ldr r4, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
mov r7, #0
add r6, sp, #0
mov r5, #0x18
_0200DB24:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x394
add r1, r1, #0x1000
mov r2, r5
add r1, r1, r7, lsl #2
bl CopyBitsTo
add r7, r7, #1
cmp r7, #3
blt _0200DB24
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x18
add r1, r1, #0x3a0
add r1, r1, #0x1000
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0xc
add r1, r1, #0x3a4
add r1, r1, #0x1000
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0xc
add r1, r1, #0xa6
add r1, r1, #0x1300
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #8
add r1, r1, #0x3a8
add r1, r1, #0x1000
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #8
add r1, r1, #0xaa
add r1, r1, #0x1300
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x10
add r1, r1, #0x3ac
add r1, r1, #0x1000
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x10
add r1, r1, #0x3b0
add r1, r1, #0x1000
bl CopyBitsTo
ldr r1, _0200DC40 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x10
add r1, r1, #0xb2
add r1, r1, #0x1300
bl CopyBitsTo
add r0, sp, #0
bl sub_020509BC
ldr r0, [sp, #8]
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0200DC40: .word BAG_ITEMS_PTR_MIRROR
arm_func_end WriteItemsToSave
arm_func_start ReadItemsFromSave
ReadItemsFromSave: ; 0x0200DC44
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x10
mov r3, r0
mov r2, r1
add r0, sp, #0
mov r1, r3
bl sub_02050974
mov r8, #0
ldr r6, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
mov fp, r8
mov r4, #6
mov r5, #0x12c
_0200DC74:
mul sl, r8, r5
mov r7, fp
_0200DC7C:
ldr r1, [r6]
add r0, sp, #0
add r1, r1, sl
mla sb, r7, r4, r1
mov r1, sb
mov r2, #8
bl CopyBitsFrom
add r0, sp, #0
add r1, sb, #2
mov r2, #0xb
bl CopyBitsFrom
add r0, sp, #0
add r1, sb, #4
mov r2, #0xb
bl CopyBitsFrom
add r1, sb, #1
add r0, sp, #0
mov r2, #3
bl CopyBitsFrom
add r7, r7, #1
cmp r7, #0x32
blt _0200DC7C
add r8, r8, #1
cmp r8, #3
blt _0200DC74
ldr r4, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
mov r7, #0
add r6, sp, #0
mov r5, #0xb
_0200DCF0:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x8a
add r1, r1, #0x300
mov r2, r5
add r1, r1, r7, lsl #1
bl CopyBitsFrom
add r7, r7, #1
cmp r7, #0x3e8
blt _0200DCF0
ldr r4, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
mov r7, #0
add r6, sp, #0
mov r5, #0xb
_0200DD28:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x5a
add r1, r1, #0xb00
mov r2, r5
add r1, r1, r7, lsl #1
bl CopyBitsFrom
add r7, r7, #1
cmp r7, #0x3e8
blt _0200DD28
mov sb, #0
mov r5, #0xb
ldr r4, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r6, sp, #0
mov fp, r5
mov r7, sb
_0200DD68:
mov sl, r7
_0200DD6C:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x330
add r1, r1, #0x1000
add r1, r1, sb, lsl #5
add r8, r1, sl, lsl #2
mov r1, r8
mov r2, r5
bl CopyBitsFrom
add r1, r8, #2
mov r0, r6
mov r2, fp
bl CopyBitsFrom
add sl, sl, #1
cmp sl, #8
blt _0200DD6C
mov sl, #0
_0200DDB0:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x374
add r1, r1, #0x1000
add r1, r1, sb, lsl #4
add r8, r1, sl, lsl #2
mov r1, r8
mov r2, #0xb
bl CopyBitsFrom
add r1, r8, #2
mov r0, r6
mov r2, #0xb
bl CopyBitsFrom
add sl, sl, #1
cmp sl, #4
blt _0200DDB0
add sb, sb, #1
cmp sb, #2
blt _0200DD68
ldr r4, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
mov r7, #0
add r6, sp, #0
mov r5, #0x18
_0200DE0C:
ldr r1, [r4]
mov r0, r6
add r1, r1, #0x394
add r1, r1, #0x1000
mov r2, r5
add r1, r1, r7, lsl #2
bl CopyBitsFrom
add r7, r7, #1
cmp r7, #3
blt _0200DE0C
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x18
add r1, r1, #0x3a0
add r1, r1, #0x1000
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0xc
add r1, r1, #0x3a4
add r1, r1, #0x1000
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0xc
add r1, r1, #0xa6
add r1, r1, #0x1300
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #8
add r1, r1, #0x3a8
add r1, r1, #0x1000
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #8
add r1, r1, #0xaa
add r1, r1, #0x1300
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x10
add r1, r1, #0x3ac
add r1, r1, #0x1000
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x10
add r1, r1, #0x3b0
add r1, r1, #0x1000
bl CopyBitsFrom
ldr r1, _0200DF28 ; =BAG_ITEMS_PTR_MIRROR
add r0, sp, #0
ldr r1, [r1]
mov r2, #0x10
add r1, r1, #0xb2
add r1, r1, #0x1300
bl CopyBitsFrom
add r0, sp, #0
bl sub_020509BC
ldr r0, [sp, #8]
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0200DF28: .word BAG_ITEMS_PTR_MIRROR
arm_func_end ReadItemsFromSave
arm_func_start sub_0200DF2C
sub_0200DF2C: ; 0x0200DF2C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
mov r2, #8
bl CopyBitsFrom
mov r0, r5
add r1, r4, #2
mov r2, #0xb
bl CopyBitsFrom
mov r0, r5
add r1, r4, #4
mov r2, #0xb
bl CopyBitsFrom
mov r0, r5
add r1, r4, #1
mov r2, #3
bl CopyBitsFrom
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_0200DF2C
arm_func_start sub_0200DF74
sub_0200DF74: ; 0x0200DF74
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
mov r2, #8
bl CopyBitsTo
mov r0, r5
add r1, r4, #2
mov r2, #0xb
bl CopyBitsTo
mov r0, r5
add r1, r4, #4
mov r2, #0xb
bl CopyBitsTo
mov r0, r5
add r1, r4, #1
mov r2, #3
bl CopyBitsTo
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_0200DF74
arm_func_start sub_0200DFBC
sub_0200DFBC: ; 0x0200DFBC
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
mov r2, #0xa
bl CopyBitsFrom
mov r0, r5
add r1, r4, #2
mov r2, #0xa
bl CopyBitsFrom
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_0200DFBC
arm_func_start sub_0200DFE4
sub_0200DFE4: ; 0x0200DFE4
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
mov r2, #0xa
bl CopyBitsTo
mov r0, r5
add r1, r4, #2
mov r2, #0xa
bl CopyBitsTo
ldmia sp!, {r3, r4, r5, pc}
arm_func_end sub_0200DFE4
arm_func_start IsItemAvailableInDungeonGroup
IsItemAvailableInDungeonGroup: ; 0x0200E00C
stmdb sp!, {r4, lr}
mov r4, r1
bl GetDungeonGroup
cmp r0, #0x64
movhs r0, #0
ldmhsia sp!, {r4, pc}
ldr r2, _0200E050 ; =AVAILABLE_ITEMS_IN_GROUP_TABLE
mov r1, r4, asr #2
add r0, r2, r0, lsl #7
add r1, r4, r1, lsr #29
ldrb r0, [r0, r1, asr #3]
and r1, r4, #7
mov r2, #1
tst r0, r2, lsl r1
moveq r2, #0
and r0, r2, #0xff
ldmia sp!, {r4, pc}
.align 2, 0
_0200E050: .word AVAILABLE_ITEMS_IN_GROUP_TABLE
arm_func_end IsItemAvailableInDungeonGroup
arm_func_start GetItemIdFromList
GetItemIdFromList: ; 0x0200E054
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r6, r0
mov r5, r1
mov r0, #0x2f8
mov r1, #0
mov r4, r2
bl MemAlloc
mov r8, r0
mov r0, #0x2f8
mov r1, #0
bl MemAlloc
cmp r6, #0
mov r7, r0
ldreq r0, _0200E1F0 ; =ITEM_TABLES_PTRS_1
subne r1, r6, #1
ldreq r2, [r0]
ldrne r0, _0200E1F0 ; =ITEM_TABLES_PTRS_1
ldr r3, _0200E1F4 ; =0xFFFF8AD0
ldrne r2, [r0, r1, lsl #2]
mov r0, #0
mov r1, r0
mov ip, r0
rsb r6, r3, #0
b _0200E0F8
_0200E0B4:
mov sb, r0, lsl #1
ldrh lr, [r2, sb]
cmp lr, r6
blo _0200E0E8
add lr, lr, r3
b _0200E0DC
_0200E0CC:
mov sb, r1, lsl #1
strh ip, [r8, sb]
add r1, r1, #1
sub lr, lr, #1
_0200E0DC:
cmp lr, #0
bne _0200E0CC
b _0200E0F4
_0200E0E8:
mov sb, r1, lsl #1
strh lr, [r8, sb]
add r1, r1, #1
_0200E0F4:
add r0, r0, #1
_0200E0F8:
cmp r1, #0x17c
blt _0200E0B4
mov r2, #0
mov r3, r2
_0200E108:
mov r1, r2, lsl #1
ldrh r0, [r8, r1]
add r3, r3, #1
cmp r3, #0x10
strh r0, [r7, r1]
add r2, r2, #1
blt _0200E108
mov r3, #0
_0200E128:
mov r0, r2, lsl #1
ldrh r1, [r8, r0]
add r0, r7, r3, lsl #1
add r3, r3, #1
strh r1, [r0, #0x20]
cmp r3, #0x16c
add r2, r2, #1
blt _0200E128
mov r6, #0x10
mov r1, #0
b _0200E174
_0200E154:
mov r0, r1, lsl #1
ldrsh r0, [r7, r0]
cmp r0, #0
beq _0200E170
cmp r0, r5
andge r6, r1, #0xff
bge _0200E17C
_0200E170:
add r1, r1, #1
_0200E174:
cmp r1, #0x10
blt _0200E154
_0200E17C:
cmp r6, #0x10
mov r5, #0x55
beq _0200E1D8
mov sb, #0
b _0200E1D0
_0200E190:
add r0, r7, sb, lsl #1
ldrsh r0, [r0, #0x20]
cmp r0, #0
beq _0200E1CC
mov r0, sb, lsl #0x10
mov r0, r0, asr #0x10
bl GetItemCategory
cmp r6, r0
bne _0200E1CC
add r0, r7, sb, lsl #1
ldrsh r0, [r0, #0x20]
cmp r0, r4
movge r0, sb, lsl #0x10
movge r5, r0, asr #0x10
bge _0200E1D8
_0200E1CC:
add sb, sb, #1
_0200E1D0:
cmp sb, #0x16c
blt _0200E190
_0200E1D8:
mov r0, r7
bl MemFree
mov r0, r8
bl MemFree
mov r0, r5
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
.align 2, 0
_0200E1F0: .word ITEM_TABLES_PTRS_1
_0200E1F4: .word 0xFFFF8AD0
arm_func_end GetItemIdFromList
arm_func_start NormalizeTreasureBox
NormalizeTreasureBox: ; 0x0200E1F8
sub r1, r0, #0x16c
mov r1, r1, lsl #0x10
mov r1, r1, asr #0x10
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
cmp r1, #2
movls r0, #0x16c
bxls lr
ldr r1, _0200E39C ; =0xFFFFFE91
add r2, r0, r1
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
rsbls r0, r1, #0
bxls lr
sub r2, r1, #3
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
rsbls r0, r1, #3
bxls lr
sub r2, r1, #6
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
addls r0, r1, #0x2e4
bxls lr
sub r2, r0, #0x178
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
movls r0, #0x178
bxls lr
sub r2, r1, #0xc
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
rsbls r0, r1, #0xc
bxls lr
sub r2, r1, #0xf
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
rsbls r0, r1, #0xf
bxls lr
sub r2, r1, #0x12
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
addls r0, r1, #0x2f0
bxls lr
sub r2, r0, #0x184
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
movls r0, #0x184
bxls lr
sub r2, r1, #0x18
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
rsbls r0, r1, #0x18
bxls lr
sub r2, r1, #0x1b
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
rsbls r0, r1, #0x1b
bxls lr
sub r2, r1, #0x1e
add r2, r0, r2
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #2
addls r0, r1, #0x2fc
bx lr
.align 2, 0
_0200E39C: .word 0xFFFFFE91
arm_func_end NormalizeTreasureBox
arm_func_start SortItemList
SortItemList: ; 0x0200E3A0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #8
mov sl, r0
mov sb, r1
mov r6, #0
b _0200E4E8
_0200E3B8:
mov r0, #6
mul r1, r6, r0
ldrb r0, [sl, r1]
add r8, sl, r1
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _0200E4E4
ldrsh r0, [r8, #4]
bl IsThrownItem
cmp r0, #0
beq _0200E4E4
ldrb r0, [r8, #1]
cmp r0, #0
bne _0200E4E4
ldrb r0, [r8]
tst r0, #2
bne _0200E4E4
add r7, r6, #1
mov fp, #1
mov r5, #0x63
mov r4, #6
b _0200E4DC
_0200E418:
ldrh r1, [r8, #2]
mla r0, r7, r4, sl
cmp r1, #0x63
beq _0200E4E4
ldrb r1, [r0]
tst r1, #1
movne r1, fp
moveq r1, #0
tst r1, #0xff
beq _0200E4D8
ldrb r1, [r0, #1]
cmp r1, #0
bne _0200E4D8
ldrb r1, [r0]
tst r1, #2
ldreqsh r2, [r0, #4]
ldreqsh r1, [r8, #4]
cmpeq r2, r1
bne _0200E4D8
ldrh r2, [r8, #2]
ldrh r1, [r0, #2]
add r1, r2, r1
strh r1, [r8, #2]
ldrb r1, [r8]
tst r1, #8
movne r1, #1
moveq r1, #0
tst r1, #0xff
beq _0200E4A4
ldrb r1, [r0]
tst r1, #8
movne r1, #1
moveq r1, #0
tst r1, #0xff
bne _0200E4BC
_0200E4A4:
ldrb r1, [r8]
bic r1, r1, #8
strb r1, [r8]
ldrb r1, [r0]
bic r1, r1, #8
strb r1, [r0]
_0200E4BC:
ldrh r1, [r8, #2]
cmp r1, #0x63
subhi r1, r1, #0x63
strhih r1, [r0, #2]
strhih r5, [r8, #2]
bhi _0200E4D8
bl ItemZInit
_0200E4D8:
add r7, r7, #1
_0200E4DC:
cmp r7, sb
blt _0200E418
_0200E4E4:
add r6, r6, #1
_0200E4E8:
cmp r6, sb
blt _0200E3B8
mov r0, sl
mov r1, sb
bl RemoveEmptyItems
mov r7, #0
b _0200E5F4
_0200E504:
mov r0, #6
mul r1, r7, r0
ldrb r0, [sl, r1]
add r6, sl, r1
mvn r4, #0
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _0200E5F0
ldrsh r0, [r6, #4]
bl sub_0200EB64
mov fp, r0
add r8, r7, #1
b _0200E588
_0200E540:
mov r0, #6
mul r1, r8, r0
ldrb r0, [sl, r1]
add r5, sl, r1
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _0200E584
ldrsh r0, [r5, #4]
bl sub_0200EB64
cmp fp, r0
ble _0200E584
ldrsh r0, [r5, #4]
mov r4, r8
bl sub_0200EB64
mov fp, r0
_0200E584:
add r8, r8, #1
_0200E588:
cmp r8, sb
blt _0200E540
mvn r0, #0
cmp r4, r0
beq _0200E5F0
mov r0, #6
mul r3, r4, r0
ldrh r1, [r6]
ldrh r2, [r6, #2]
ldrh r5, [r6, #4]
ldrh r0, [sl, r3]
add r4, sl, r3
strh r1, [sp]
strh r0, [r6]
ldrh r1, [r4, #2]
strh r2, [sp, #2]
ldrh r0, [sp]
strh r1, [r6, #2]
ldrh r2, [r4, #4]
strh r5, [sp, #4]
ldrh r1, [sp, #2]
strh r2, [r6, #4]
strh r0, [sl, r3]
ldrh r0, [sp, #4]
strh r1, [r4, #2]
strh r0, [r4, #4]
_0200E5F0:
add r7, r7, #1
_0200E5F4:
cmp r7, sb
blt _0200E504
mov r0, sl
mov r1, sb
bl RemoveEmptyItems
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
arm_func_end SortItemList
arm_func_start RemoveEmptyItems
RemoveEmptyItems: ; 0x0200E610
stmdb sp!, {r4, r5, r6, lr}
mov r6, r1
mov r1, #0
mov r2, r1
mov r3, #1
b _0200E6CC
_0200E628:
ldrb r4, [r0]
tst r4, #1
movne r4, r3
moveq r4, r2
tst r4, #0xff
bne _0200E6C4
mov r5, r0
mov r4, r1
add r0, r0, #6
add r1, r1, #1
mov r3, #0
mov ip, #1
b _0200E69C
_0200E65C:
ldrb r2, [r0]
tst r2, #1
movne r2, ip
moveq r2, r3
tst r2, #0xff
beq _0200E694
ldrh r2, [r0]
mov lr, r5
add r4, r4, #1
strh r2, [r5], #6
ldrh r2, [r0, #2]
strh r2, [lr, #2]
ldrh r2, [r0, #4]
strh r2, [lr, #4]
_0200E694:
add r1, r1, #1
add r0, r0, #6
_0200E69C:
cmp r1, r6
blt _0200E65C
b _0200E6B8
_0200E6A8:
mov r0, r5
bl ItemZInit
add r5, r5, #6
add r4, r4, #1
_0200E6B8:
cmp r4, r6
blt _0200E6A8
ldmia sp!, {r4, r5, r6, pc}
_0200E6C4:
add r1, r1, #1
add r0, r0, #6
_0200E6CC:
cmp r1, r6
blt _0200E628
ldmia sp!, {r4, r5, r6, pc}
arm_func_end RemoveEmptyItems