mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
873 lines
16 KiB
ArmAsm
873 lines
16 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_02344B1C.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start ov29_02344B1C
|
|
ov29_02344B1C: ; 0x02344B1C
|
|
ldr r0, _02344B2C ; =ov29_023537B0
|
|
mov r1, #1
|
|
strb r1, [r0]
|
|
bx lr
|
|
.align 2, 0
|
|
_02344B2C: .word ov29_023537B0
|
|
arm_func_end ov29_02344B1C
|
|
|
|
arm_func_start ov29_02344B30
|
|
ov29_02344B30: ; 0x02344B30
|
|
ldr r0, _02344B40 ; =ov29_023537B0
|
|
mov r1, #0
|
|
strb r1, [r0]
|
|
bx lr
|
|
.align 2, 0
|
|
_02344B40: .word ov29_023537B0
|
|
arm_func_end ov29_02344B30
|
|
|
|
arm_func_start PrepareItemForPrinting__02345728
|
|
PrepareItemForPrinting__02345728: ; 0x02344B44
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
orr r1, r5, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02344B6C ; =ov29_023531BC
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl SubstitutePlaceholderItemTags
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02344B6C: .word ov29_023531BC
|
|
arm_func_end PrepareItemForPrinting__02345728
|
|
|
|
arm_func_start PrepareItemForPrinting__02345754
|
|
PrepareItemForPrinting__02345754: ; 0x02344B70
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
orr r1, r5, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02344B98 ; =ov29_023531A4
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl SubstitutePlaceholderItemTags
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02344B98: .word ov29_023531A4
|
|
arm_func_end PrepareItemForPrinting__02345754
|
|
|
|
arm_func_start ov29_02344B9C
|
|
ov29_02344B9C: ; 0x02344B9C
|
|
ldr ip, _02344BA4 ; =SetPreprocessorArgsIdVal
|
|
bx ip
|
|
.align 2, 0
|
|
_02344BA4: .word SetPreprocessorArgsIdVal
|
|
arm_func_end ov29_02344B9C
|
|
|
|
arm_func_start PrepareItemForPrinting2
|
|
PrepareItemForPrinting2: ; 0x02344BA8
|
|
stmdb sp!, {r3, lr}
|
|
add r3, r0, r1, lsl #2
|
|
orr ip, r1, #0x40000
|
|
mov r0, r1
|
|
mov r1, r2
|
|
ldr r2, _02344BCC ; =ov29_023531BC
|
|
str ip, [r3, #0x10]
|
|
bl SubstitutePlaceholderItemTags
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02344BCC: .word ov29_023531BC
|
|
arm_func_end PrepareItemForPrinting2
|
|
|
|
arm_func_start GenerateStandardItem
|
|
GenerateStandardItem: ; 0x02344BD0
|
|
ldr ip, _02344BE0 ; =GenerateItem
|
|
mov r3, r2
|
|
mov r2, #0
|
|
bx ip
|
|
.align 2, 0
|
|
_02344BE0: .word GenerateItem
|
|
arm_func_end GenerateStandardItem
|
|
|
|
arm_func_start GenerateCleanItem
|
|
GenerateCleanItem: ; 0x02344BE4
|
|
ldr ip, _02344BF4 ; =GenerateItem
|
|
mov r2, #0
|
|
mov r3, #2
|
|
bx ip
|
|
.align 2, 0
|
|
_02344BF4: .word GenerateItem
|
|
arm_func_end GenerateCleanItem
|
|
|
|
arm_func_start ov29_02344BF8
|
|
ov29_02344BF8: ; 0x02344BF8
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #0x48
|
|
ldr r3, _02344C48 ; =ov29_023531CC
|
|
add r2, sp, #0
|
|
mov r4, r0
|
|
mov r1, #0x24
|
|
_02344C10:
|
|
ldrh r0, [r3], #2
|
|
subs r1, r1, #1
|
|
strh r0, [r2], #2
|
|
bne _02344C10
|
|
bl DungeonRand16Bit
|
|
mov r1, #0xc
|
|
bl _s32_div_f
|
|
add r2, sp, #0
|
|
mov r0, #6
|
|
smlabb r0, r1, r0, r2
|
|
mov r1, r4, lsl #1
|
|
ldrsh r0, [r1, r0]
|
|
add sp, sp, #0x48
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02344C48: .word ov29_023531CC
|
|
arm_func_end ov29_02344BF8
|
|
|
|
arm_func_start ov29_02344C4C
|
|
ov29_02344C4C: ; 0x02344C4C
|
|
#ifdef JAPAN
|
|
#define OV29_02344C4C_OFFSET -0xA4
|
|
#else
|
|
#define OV29_02344C4C_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x20
|
|
mov sb, #0
|
|
str sb, [sp, #8]
|
|
mov r8, sb
|
|
bl IsDestinationFloorWithItem
|
|
cmp r0, #0
|
|
ldr r1, _02344E7C ; =DUNGEON_PTR
|
|
ldr r0, _02344E80 ; =0x0002C9E8
|
|
ldr r1, [r1]
|
|
movne sb, #1
|
|
ldrsh r0, [r1, r0]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #8]
|
|
mov r0, #0x38
|
|
bl DungeonRandInt
|
|
mov r6, r0
|
|
mov r0, #0x20
|
|
bl DungeonRandInt
|
|
ldr r1, _02344E7C ; =DUNGEON_PTR
|
|
mov r5, #0
|
|
ldr r1, [r1]
|
|
ldr r2, _02344E84 ; =ov29_023531A0
|
|
add r1, r1, #0x3f00
|
|
strh r5, [r1, #0xc0 + OV29_02344C4C_OFFSET]
|
|
ldrh r3, [r2]
|
|
ldrh r1, [r2, #2]
|
|
mov r7, r0
|
|
strh r3, [sp, #0x10]
|
|
strh r1, [sp, #0x12]
|
|
_02344CC8:
|
|
add r7, r7, #1
|
|
cmp r7, #0x20
|
|
moveq r7, #0
|
|
mov r0, r7, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r4, #0
|
|
str r0, [sp, #0xc]
|
|
_02344CE4:
|
|
add r6, r6, #1
|
|
cmp r6, #0x38
|
|
mov r0, #0
|
|
moveq r6, #0
|
|
str r0, [sp, #4]
|
|
mov r0, r6
|
|
mov r1, r7
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x200
|
|
bne _02344E40
|
|
ldrh r1, [r0, #2]
|
|
tst r1, #2
|
|
beq _02344E40
|
|
ldr r1, [sp, #0xc]
|
|
strh r6, [sp, #0x1a]
|
|
strh r1, [sp, #0x1c]
|
|
ldrh r0, [r0]
|
|
tst r0, #0x20
|
|
movne r0, #1
|
|
strne r0, [sp]
|
|
movne sl, r0
|
|
bne _02344D80
|
|
tst r0, #3
|
|
moveq r0, #0
|
|
streq r0, [sp]
|
|
moveq sl, #3
|
|
beq _02344D80
|
|
tst r0, #0x40
|
|
mov r0, #0
|
|
strne r0, [sp]
|
|
movne sl, #2
|
|
bne _02344D80
|
|
cmp sb, #0
|
|
cmpeq r8, #0
|
|
str r0, [sp]
|
|
mov sl, r0
|
|
addeq r8, r8, #1
|
|
beq _02344E40
|
|
_02344D80:
|
|
cmp sl, #0
|
|
bne _02344DB0
|
|
cmp sb, #0
|
|
beq _02344DB0
|
|
cmp r8, #0
|
|
bne _02344DB0
|
|
bl GetItemToRetrieve
|
|
mov fp, r0
|
|
mov r0, #2
|
|
mov sb, #0
|
|
str r0, [sp, #4]
|
|
b _02344DEC
|
|
_02344DB0:
|
|
cmp sl, #0
|
|
bne _02344DE0
|
|
ldr r0, [sp, #8]
|
|
cmp r0, #0
|
|
beq _02344DE0
|
|
ldr r0, _02344E7C ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
mov r0, #0
|
|
str r0, [sp, #8]
|
|
ldr r0, _02344E80 ; =0x0002C9E8
|
|
ldrsh fp, [r1, r0]
|
|
b _02344DEC
|
|
_02344DE0:
|
|
mov r0, sl
|
|
bl GetItemIdToSpawn
|
|
mov fp, r0
|
|
_02344DEC:
|
|
mov r0, fp
|
|
bl IsShoppableItem
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
streq r0, [sp]
|
|
ldr r3, [sp, #4]
|
|
mov r1, fp
|
|
add r0, sp, #0x14
|
|
mov r2, #0
|
|
bl GenerateItem
|
|
ldr r0, [sp]
|
|
add r1, sp, #0x14
|
|
cmp r0, #0
|
|
ldrneb r0, [sp, #0x14]
|
|
mov r2, #1
|
|
orrne r0, r0, #2
|
|
strneb r0, [sp, #0x14]
|
|
add r0, sp, #0x1a
|
|
bl SpawnItem
|
|
cmp sl, #0
|
|
addeq r8, r8, #1
|
|
_02344E40:
|
|
add r4, r4, #1
|
|
cmp r4, #0x38
|
|
blt _02344CE4
|
|
add r5, r5, #1
|
|
cmp r5, #0x20
|
|
blt _02344CC8
|
|
ldr r0, _02344E7C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x3f00
|
|
ldrsh r2, [r0, #0xc0 + OV29_02344C4C_OFFSET]
|
|
ldrsh r1, [r0, #0xc2 + OV29_02344C4C_OFFSET]
|
|
add r1, r2, r1
|
|
strh r1, [r0, #0xc0 + OV29_02344C4C_OFFSET]
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02344E7C: .word DUNGEON_PTR
|
|
_02344E80: .word 0x0002C9E8 + OV29_02344C4C_OFFSET
|
|
_02344E84: .word ov29_023531A0
|
|
arm_func_end ov29_02344C4C
|
|
|
|
arm_func_start ov29_02344E88
|
|
ov29_02344E88: ; 0x02344E88
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc
|
|
mov r4, r0
|
|
mov r0, #2
|
|
bl DungeonRngSetSecondary
|
|
ldrsh r0, [r4]
|
|
ldrsh r1, [r4, #2]
|
|
bl DungeonRandRange
|
|
mov r8, r0
|
|
cmp r8, #0
|
|
ble _02344FF8
|
|
mov r4, #0
|
|
mov r1, r4
|
|
mov r0, #0x1c00
|
|
bl MemAlloc
|
|
mov sl, r0
|
|
mov sb, r4
|
|
mov r6, r4
|
|
_02344ED0:
|
|
mov r0, sb, lsl #0x10
|
|
mov r7, r6
|
|
mov r5, r0, asr #0x10
|
|
_02344EDC:
|
|
mov r0, r7
|
|
mov r1, sb
|
|
bl GetTile
|
|
ldrb r1, [r0, #7]
|
|
cmp r1, #0xff
|
|
beq _02344F2C
|
|
ldrh r1, [r0]
|
|
tst r1, #0x200
|
|
bne _02344F2C
|
|
tst r1, #1
|
|
beq _02344F2C
|
|
ldr r1, [r0, #0xc]
|
|
cmp r1, #0
|
|
ldreq r0, [r0, #0x10]
|
|
cmpeq r0, #0
|
|
moveq r1, r4, lsl #2
|
|
addeq r0, sl, r4, lsl #2
|
|
streqh r7, [sl, r1]
|
|
streqh r5, [r0, #2]
|
|
addeq r4, r4, #1
|
|
_02344F2C:
|
|
add r7, r7, #1
|
|
cmp r7, #0x38
|
|
blt _02344EDC
|
|
add sb, sb, #1
|
|
cmp sb, #0x20
|
|
blt _02344ED0
|
|
sub r6, r4, #1
|
|
mov r5, #0
|
|
b _02344F9C
|
|
_02344F50:
|
|
mov r0, r4
|
|
bl DungeonRandInt
|
|
mov fp, r5, lsl #2
|
|
add r1, sl, r5, lsl #2
|
|
mov sb, r0, lsl #2
|
|
ldrh r7, [sl, fp]
|
|
ldrh r3, [r1, #2]
|
|
ldrh r2, [sl, sb]
|
|
strh r7, [sp]
|
|
strh r3, [sp, #2]
|
|
strh r2, [sl, fp]
|
|
add r7, sl, r0, lsl #2
|
|
ldrh r3, [r7, #2]
|
|
ldrh r2, [sp]
|
|
ldrh r0, [sp, #2]
|
|
strh r3, [r1, #2]
|
|
strh r2, [sl, sb]
|
|
strh r0, [r7, #2]
|
|
add r5, r5, #1
|
|
_02344F9C:
|
|
cmp r5, r6
|
|
blt _02344F50
|
|
mov sb, #0
|
|
add r7, sp, #4
|
|
mov r6, #0xb7
|
|
mov r5, sb
|
|
mov r4, #2
|
|
mov fp, #1
|
|
b _02344FE8
|
|
_02344FC0:
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, r5
|
|
mov r3, r4
|
|
bl GenerateItem
|
|
mov r1, r7
|
|
mov r2, fp
|
|
add r0, sl, sb, lsl #2
|
|
bl SpawnItem
|
|
add sb, sb, #1
|
|
_02344FE8:
|
|
cmp sb, r8
|
|
blt _02344FC0
|
|
mov r0, sl
|
|
bl MemFree
|
|
_02344FF8:
|
|
bl DungeonRngSetPrimary
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end ov29_02344E88
|
|
|
|
arm_func_start ov29_02345004
|
|
ov29_02345004: ; 0x02345004
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldrb r0, [r5]
|
|
mov r4, #0
|
|
tst r0, #0x80
|
|
bicne r0, r0, #0x80
|
|
strneb r0, [r5]
|
|
mov r0, r5
|
|
movne r4, #1
|
|
bl AddItemToBagNoHeld
|
|
cmp r0, #0
|
|
beq _02345050
|
|
cmp r4, #0
|
|
ldrneb r0, [r5]
|
|
orrne r0, r0, #0x80
|
|
strneb r0, [r5]
|
|
#ifdef EUROPE
|
|
mov r0, #0
|
|
#endif
|
|
bl ov29_022FB920
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02345050:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_02345004
|
|
|
|
arm_func_start TryLeaderItemPickUp
|
|
TryLeaderItemPickUp: ; 0x02345058
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x198
|
|
mov sl, r0
|
|
mov sb, r1
|
|
bl GetLeader
|
|
mov r4, r0
|
|
ldrsh r0, [sl]
|
|
ldrsh r1, [sl, #2]
|
|
ldr r7, [r4, #0xb4]
|
|
bl GetTile
|
|
ldr r0, [r0, #0x10]
|
|
cmp r0, #0
|
|
beq _02345508
|
|
ldr r1, [r0]
|
|
cmp r1, #3
|
|
bne _02345508
|
|
bl GetItemInfo
|
|
ldrb r1, [r7, #0x4e]
|
|
mov r5, r0
|
|
mov r0, r4
|
|
cmp r1, #0
|
|
bne _02345108
|
|
mov r1, r5
|
|
mov r2, sb
|
|
bl ov29_02348DD8
|
|
cmp r0, #0
|
|
bne _02345508
|
|
cmp sb, #0
|
|
beq _02345508
|
|
mov r0, #0
|
|
mov r1, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r1, r5
|
|
mov r0, #0
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _02345514 ; =0x00000BD2
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _02345508
|
|
_02345108:
|
|
mov r1, #1
|
|
bl ShouldMonsterRunAwayAndShowEffect
|
|
cmp r0, #0
|
|
beq _0234515C
|
|
cmp sb, #0
|
|
beq _02345508
|
|
mov r0, #0
|
|
mov r1, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r1, r5
|
|
mov r0, #0
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _02345518 ; =0x00000BD3
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _02345508
|
|
_0234515C:
|
|
ldrsh r0, [r5, #4]
|
|
bl GetItemCategoryVeneer
|
|
cmp r0, #6
|
|
bne _023451EC
|
|
mov r0, r4
|
|
mov r1, #0x1b
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r5]
|
|
orrne r0, r0, #0x20
|
|
strneb r0, [r5]
|
|
mov r0, r5
|
|
bl sub_0200D8AC
|
|
mov r6, r0
|
|
ldr r0, _0234551C ; =0x00001308
|
|
bl PlaySeByIdIfNotSilence
|
|
mov r0, #0x62
|
|
bl AdvanceFrame
|
|
mov r0, r6
|
|
bl AddMoneyCarried
|
|
mov r0, #0
|
|
mov r1, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r0, #0
|
|
mov r1, r5
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
ldr r1, _02345520 ; =0x00000BD6
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldrsh r0, [r5, #4]
|
|
bl DisplayItemTip
|
|
b _02345508
|
|
_023451EC:
|
|
ldr r0, _02345524 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x75b]
|
|
cmp r0, #0
|
|
beq _02345238
|
|
mov r8, #0
|
|
add r6, sp, #0
|
|
add fp, sp, #0xcc
|
|
_0234520C:
|
|
mov r0, r8, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
bl GetItemAtIdx
|
|
str r0, [r6, r8, lsl #2]
|
|
str r8, [fp, r8, lsl #2]
|
|
add r8, r8, #1
|
|
cmp r8, #0x32
|
|
blt _0234520C
|
|
bl GetCurrentBagCapacity
|
|
mov r6, r0
|
|
b _0234524C
|
|
_02345238:
|
|
add r1, r7, #0x62
|
|
mvn r0, #0
|
|
str r1, [sp]
|
|
str r0, [sp, #0xcc]
|
|
mov r6, #1
|
|
_0234524C:
|
|
ldrsh ip, [r5, #4]
|
|
cmp ip, #0xb
|
|
bge _02345378
|
|
ldrb r0, [r5]
|
|
tst r0, #2
|
|
bne _02345378
|
|
mvn r8, #0
|
|
mov fp, r8
|
|
mov lr, #0
|
|
and r0, r0, #8
|
|
b _023452D8
|
|
_02345278:
|
|
add r1, sp, #0
|
|
ldr r1, [r1, lr, lsl #2]
|
|
ldrb r1, [r1]
|
|
tst r1, #1
|
|
movne r1, #1
|
|
moveq r1, #0
|
|
tst r1, #0xff
|
|
beq _023452D4
|
|
add r1, sp, #0
|
|
ldr r3, [r1, lr, lsl #2]
|
|
ldrb r2, [r3]
|
|
tst r2, #2
|
|
ldreqsh r1, [r3, #4]
|
|
cmpeq ip, r1
|
|
andeq r1, r2, #8
|
|
cmpeq r0, r1
|
|
bne _023452D4
|
|
ldrh r1, [r3, #2]
|
|
cmp r1, #0x63
|
|
beq _023452D4
|
|
cmp fp, r1
|
|
movlt fp, r1
|
|
movlt r8, lr
|
|
_023452D4:
|
|
add lr, lr, #1
|
|
_023452D8:
|
|
cmp lr, r6
|
|
blt _02345278
|
|
mvn r0, #0
|
|
cmp r8, r0
|
|
beq _02345378
|
|
add r1, sp, #0
|
|
ldr r2, [r1, r8, lsl #2]
|
|
ldrh r0, [r5, #2]
|
|
ldrh r1, [r2, #2]
|
|
add r0, r1, r0
|
|
cmp r0, #0x63
|
|
movge r0, #0x63
|
|
strh r0, [r2, #2]
|
|
bl ov29_02347040
|
|
mov r0, #0
|
|
mov r1, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r1, r5
|
|
mov r0, #0
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
ldr r0, _02345528 ; =0x00001304
|
|
bl PlaySeByIdIfNotSilence
|
|
add r0, sp, #0xcc
|
|
ldr r0, [r0, r8, lsl #2]
|
|
cmp r0, #0
|
|
bge _02345360
|
|
ldr r1, _0234552C ; =0x00000BD4
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _0234536C
|
|
_02345360:
|
|
ldr r1, _02345530 ; =0x00000BD5
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_0234536C:
|
|
ldrsh r0, [r5, #4]
|
|
bl DisplayItemTip
|
|
b _02345508
|
|
_02345378:
|
|
mov r8, #0
|
|
add r3, sp, #0
|
|
mov r0, r8
|
|
mov r1, #1
|
|
b _023453AC
|
|
_0234538C:
|
|
ldr r2, [r3, r8, lsl #2]
|
|
ldrb r2, [r2]
|
|
tst r2, #1
|
|
movne r2, r1
|
|
moveq r2, r0
|
|
tst r2, #0xff
|
|
beq _023453B4
|
|
add r8, r8, #1
|
|
_023453AC:
|
|
cmp r8, r6
|
|
blt _0234538C
|
|
_023453B4:
|
|
mov r0, r4
|
|
mov r1, r5
|
|
mov r2, sb
|
|
bl ov29_02348DD8
|
|
cmp r0, #0
|
|
bne _02345508
|
|
cmp r8, r6
|
|
bne _02345418
|
|
cmp sb, #0
|
|
beq _02345508
|
|
mov r0, #0
|
|
mov r1, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r1, r5
|
|
mov r0, #0
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _02345514 ; =0x00000BD2
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _02345508
|
|
_02345418:
|
|
ldr r0, _02345528 ; =0x00001304
|
|
bl PlaySeByIdIfNotSilence
|
|
add r0, sp, #0xcc
|
|
ldr r0, [r0, r8, lsl #2]
|
|
cmp r0, #0
|
|
bge _02345480
|
|
ldrh r2, [r5]
|
|
mov r0, #0
|
|
mov r1, #0x40000
|
|
strh r2, [r7, #0x62]
|
|
ldrh r2, [r5, #2]
|
|
strh r2, [r7, #0x64]
|
|
ldrh r2, [r5, #4]
|
|
strh r2, [r7, #0x66]
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r1, r5
|
|
mov r0, #0
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
ldr r1, _0234552C ; =0x00000BD4
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _02345500
|
|
_02345480:
|
|
mov r0, r5
|
|
bl ov29_02348D3C
|
|
mov r6, r0
|
|
mov r0, r5
|
|
bl ov29_02345004
|
|
cmp r0, #0
|
|
mov r0, #0
|
|
beq _023454BC
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _02345534 ; =0x00000BD7
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _02345500
|
|
_023454BC:
|
|
mov r1, #0x40000
|
|
bl SetPreprocessorArgsIdVal
|
|
ldr r2, _02345510 ; =ov29_023531BC
|
|
mov r1, r5
|
|
mov r0, #0
|
|
bl SubstitutePlaceholderItemTags
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl RemoveGroundItem
|
|
ldr r1, _02345530 ; =0x00000BD5
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r5
|
|
mov r1, r6
|
|
bl ov29_02348ECC
|
|
cmp r0, #0
|
|
bne _02345508
|
|
_02345500:
|
|
ldrsh r0, [r5, #4]
|
|
bl DisplayItemTip
|
|
_02345508:
|
|
add sp, sp, #0x198
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define TRY_LEADER_ITEM_PICK_UP_OFFSET -0x2C1
|
|
#else
|
|
#define TRY_LEADER_ITEM_PICK_UP_OFFSET 0
|
|
#endif
|
|
_02345510: .word ov29_023531BC
|
|
_02345514: .word 0x00000BD2 + TRY_LEADER_ITEM_PICK_UP_OFFSET
|
|
_02345518: .word 0x00000BD3 + TRY_LEADER_ITEM_PICK_UP_OFFSET
|
|
_0234551C: .word 0x00001308
|
|
_02345520: .word 0x00000BD6 + TRY_LEADER_ITEM_PICK_UP_OFFSET
|
|
_02345524: .word DUNGEON_PTR
|
|
_02345528: .word 0x00001304
|
|
_0234552C: .word 0x00000BD4 + TRY_LEADER_ITEM_PICK_UP_OFFSET
|
|
_02345530: .word 0x00000BD5 + TRY_LEADER_ITEM_PICK_UP_OFFSET
|
|
_02345534: .word 0x00000BD7 + TRY_LEADER_ITEM_PICK_UP_OFFSET
|
|
arm_func_end TryLeaderItemPickUp
|
|
|
|
arm_func_start SpawnItem
|
|
SpawnItem: ; 0x02345538
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
bl SpawnItemEntity
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldrh r0, [r6]
|
|
ldr r1, [r4, #0xb4]
|
|
strh r0, [r1]
|
|
ldrh r0, [r6, #2]
|
|
strh r0, [r1, #2]
|
|
ldrh r0, [r6, #4]
|
|
strh r0, [r1, #4]
|
|
ldr r1, [r4, #0xb4]
|
|
ldrb r0, [r1]
|
|
bic r0, r0, #0x10
|
|
strb r0, [r1]
|
|
ldr r1, [r4, #0xb4]
|
|
ldrb r0, [r1]
|
|
bic r0, r0, #0x20
|
|
strb r0, [r1]
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
beq _023455A8
|
|
mov r0, r6
|
|
bl RemoveEquivItemNoHole
|
|
_023455A8:
|
|
mov r0, #1
|
|
strb r0, [r4, #0x20]
|
|
ldrsh r0, [r7]
|
|
ldrsh r1, [r7, #2]
|
|
bl GetTileSafe
|
|
ldr r1, _02345690 ; =ov29_023537B0
|
|
str r4, [r0, #0x10]
|
|
ldrb r1, [r1]
|
|
cmp r1, #0
|
|
bne _0234563C
|
|
ldrh r0, [r0]
|
|
tst r0, #0x20
|
|
beq _0234563C
|
|
ldrsh r0, [r6, #4]
|
|
bl IsShoppableItem
|
|
cmp r0, #0
|
|
beq _0234563C
|
|
ldrb r0, [r6]
|
|
tst r0, #2
|
|
beq _02345620
|
|
cmp r5, #0
|
|
beq _0234563C
|
|
mov r0, r6
|
|
bl GetActualBuyPrice
|
|
ldr r1, _02345694 ; =DUNGEON_PTR
|
|
ldr r2, [r1]
|
|
ldr r1, [r2, #0x7bc]
|
|
add r0, r1, r0
|
|
str r0, [r2, #0x7bc]
|
|
b _0234563C
|
|
_02345620:
|
|
mov r0, r6
|
|
bl GetActualSellPrice
|
|
ldr r1, _02345694 ; =DUNGEON_PTR
|
|
ldr r2, [r1]
|
|
ldr r1, [r2, #0x7c0]
|
|
add r0, r1, r0
|
|
str r0, [r2, #0x7c0]
|
|
_0234563C:
|
|
mov r4, #0
|
|
ldr r5, _02345694 ; =DUNGEON_PTR
|
|
mov r6, r4
|
|
_02345648:
|
|
ldr r0, [r5]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xb24]
|
|
#else
|
|
ldr r0, [r0, #0xbc8]
|
|
#endif
|
|
bl EntityIsValid__02345698
|
|
cmp r0, #0
|
|
addne r4, r6, #1
|
|
add r6, r6, #1
|
|
cmp r6, #0x40
|
|
blt _02345648
|
|
ldr r0, _02345694 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x3f00
|
|
#ifdef JAPAN
|
|
strh r4, [r0, #0x1c]
|
|
#else
|
|
strh r4, [r0, #0xc0]
|
|
#endif
|
|
bl RemoveEmptyItemsInBag
|
|
#ifdef EUROPE
|
|
mov r0, #0
|
|
#endif
|
|
bl ov29_022FB920
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02345690: .word ov29_023537B0
|
|
_02345694: .word DUNGEON_PTR
|
|
arm_func_end SpawnItem
|