mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
1792 lines
31 KiB
ArmAsm
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
|