mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
5670 lines
101 KiB
ArmAsm
5670 lines
101 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_022F05B4.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start ov29_022F05B4
|
|
ov29_022F05B4: ; 0x022F05B4
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r1
|
|
cmp r2, #0
|
|
bne _022F05D4
|
|
bl ov29_022F0518
|
|
mov r0, r4
|
|
bl ov29_022F0518
|
|
ldmia sp!, {r4, pc}
|
|
_022F05D4:
|
|
bl ov29_022F04F0
|
|
mov r0, r4
|
|
bl ov29_022F04F0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_022F05B4
|
|
|
|
arm_func_start ov29_022F05E4
|
|
ov29_022F05E4: ; 0x022F05E4
|
|
stmdb sp!, {r3, lr}
|
|
bl ov29_022F0AE0
|
|
bl ov29_0234D668
|
|
bl ov29_0234D838
|
|
mov r0, #0x20
|
|
mov r1, #0x62
|
|
bl ov29_022EA370
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F05E4
|
|
|
|
arm_func_start ov29_022F0604
|
|
ov29_022F0604: ; 0x022F0604
|
|
stmdb sp!, {r3, lr}
|
|
mov r3, #0
|
|
str r3, [sp]
|
|
bl ov29_022F0984
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F0604
|
|
|
|
arm_func_start ov29_022F0618
|
|
ov29_022F0618: ; 0x022F0618
|
|
stmdb sp!, {r3, lr}
|
|
mov ip, #0
|
|
str ip, [sp]
|
|
bl ov29_022F0984
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F0618
|
|
|
|
arm_func_start ov29_022F062C
|
|
ov29_022F062C: ; 0x022F062C
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
mov r4, #1
|
|
str r4, [sp]
|
|
bl ov29_022F0984
|
|
mov r4, r0
|
|
bl ov29_022F0AE0
|
|
mov r0, r4
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
arm_func_end ov29_022F062C
|
|
|
|
arm_func_start ov29_022F0654
|
|
ov29_022F0654: ; 0x022F0654
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
add r0, r4, #4
|
|
add r1, r1, #4
|
|
bl GetDirectionTowardsPosition
|
|
mov r1, r0
|
|
mov r0, r4
|
|
and r1, r1, #0xff
|
|
bl ov29_022FA360
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_022F0654
|
|
|
|
arm_func_start ov29_022F067C
|
|
ov29_022F067C: ; 0x022F067C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x24
|
|
mov r7, r0
|
|
mov r6, r2
|
|
cmp r1, #0
|
|
bne _022F06F4
|
|
mov r5, #0
|
|
ldr r8, _022F077C ; =DUNGEON_PTR
|
|
mov r4, r5
|
|
add sb, sp, #0x10
|
|
_022F06A4:
|
|
ldr r0, [r8]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr sl, [r0, #0xa84]
|
|
#else
|
|
ldr sl, [r0, #0xb28]
|
|
#endif
|
|
mov r0, sl
|
|
bl EntityIsValid__022F0590
|
|
cmp r0, #0
|
|
strne sl, [sb, r5, lsl #2]
|
|
add r4, r4, #1
|
|
addne r5, r5, #1
|
|
cmp r4, #4
|
|
blt _022F06A4
|
|
cmp r5, #4
|
|
addlt r0, sp, #0x10
|
|
movlt r1, #0
|
|
strlt r1, [r0, r5, lsl #2]
|
|
blt _022F0700
|
|
moveq r0, #0
|
|
streq r0, [sp, #0x20]
|
|
b _022F0700
|
|
_022F06F4:
|
|
mov r0, #0
|
|
str r1, [sp, #0x10]
|
|
str r0, [sp, #0x14]
|
|
_022F0700:
|
|
mov r2, #0
|
|
mov r4, #1
|
|
strb r4, [sp, #8]
|
|
strh r2, [sp, #0xa]
|
|
strh r6, [sp, #0xc]
|
|
strb r4, [sp, #0xe]
|
|
strb r2, [sp, #0xf]
|
|
add r1, sp, #8
|
|
add r3, sp, #0x10
|
|
mov r0, r7
|
|
stmia sp, {r2, r4}
|
|
bl ov29_02322DDC
|
|
mov r0, r4
|
|
bl AnimationDelayOrSomething
|
|
mov r3, #0
|
|
add r0, sp, #0x10
|
|
add r2, sp, #8
|
|
mov r1, r7
|
|
str r3, [sp]
|
|
bl ExecuteMoveEffect
|
|
bl ov29_022E81F8
|
|
mov r0, #0xa
|
|
bl ov29_0234BA54
|
|
mov r0, #0
|
|
bl ov29_0234B1A4
|
|
bl GetLeader
|
|
mov r1, r4
|
|
mov r2, r1
|
|
bl TryPointCameraToMonster
|
|
add sp, sp, #0x24
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_022F077C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F067C
|
|
|
|
arm_func_start ov29_022F0780
|
|
ov29_022F0780: ; 0x022F0780
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #4
|
|
mov r4, r0
|
|
bl ov29_0234D668
|
|
bl GetMessageLogPreprocessorArgs
|
|
mov r2, #0
|
|
mov r1, r0
|
|
mov ip, #1
|
|
mov r0, r4
|
|
mov r3, r2
|
|
str ip, [sp]
|
|
bl ov29_0234D690
|
|
bl ov29_0234D650
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, pc}
|
|
arm_func_end ov29_022F0780
|
|
|
|
arm_func_start ov29_022F07BC
|
|
ov29_022F07BC: ; 0x022F07BC
|
|
stmdb sp!, {r3, lr}
|
|
rsb r0, r0, #0
|
|
bl AddMoneyCarried
|
|
ldr r0, _022F07D4 ; =0x00001308
|
|
bl PlaySeByIdVolumeWrapper
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022F07D4: .word 0x00001308
|
|
arm_func_end ov29_022F07BC
|
|
|
|
arm_func_start ov29_022F07D8
|
|
ov29_022F07D8: ; 0x022F07D8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r5, _022F0844 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
mov r6, #0
|
|
_022F07E8:
|
|
ldr r0, [r5]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xad4]
|
|
#else
|
|
ldr r7, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__022F0590
|
|
cmp r0, #0
|
|
beq _022F082C
|
|
mov r0, r7
|
|
bl IsSecretBazaarNpc
|
|
cmp r0, #0
|
|
beq _022F082C
|
|
mov r0, r7
|
|
mov r1, r4
|
|
bl ov29_022FA360
|
|
mov r0, r7
|
|
bl UpdateAiTargetPos
|
|
_022F082C:
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
cmp r6, #0x14
|
|
blt _022F07E8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022F0844: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F07D8
|
|
|
|
arm_func_start ov29_022F0848
|
|
ov29_022F0848: ; 0x022F0848
|
|
ldr ip, _022F0858 ; =ov29_022EA428
|
|
mov r0, #0
|
|
mov r1, r0
|
|
bx ip
|
|
.align 2, 0
|
|
_022F0858: .word ov29_022EA428
|
|
arm_func_end ov29_022F0848
|
|
|
|
arm_func_start ov29_022F085C
|
|
ov29_022F085C: ; 0x022F085C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #8
|
|
mov r8, r1
|
|
mov r1, #1
|
|
mov r1, r1, lsl r8
|
|
str r1, [sp, #4]
|
|
mov r1, r1, lsl #8
|
|
mov fp, r0
|
|
mov r0, #0x100
|
|
str r1, [sp]
|
|
bl sub_02001AB0
|
|
ldr r1, _022F0980 ; =DUNGEON_PTR
|
|
mov r0, #0x400
|
|
ldr r2, [r1]
|
|
mov r1, #0
|
|
add r5, r2, #0x1e0
|
|
bl MemAlloc
|
|
mov r6, r0
|
|
mov r4, #0
|
|
_022F08A8:
|
|
add r3, r5, r4, lsl #2
|
|
add r2, r6, r4, lsl #2
|
|
mov r1, #4
|
|
_022F08B4:
|
|
ldrb r0, [r3], #1
|
|
subs r1, r1, #1
|
|
strb r0, [r2], #1
|
|
bne _022F08B4
|
|
add r4, r4, #1
|
|
cmp r4, #0x100
|
|
blt _022F08A8
|
|
mov r4, #0
|
|
b _022F0964
|
|
_022F08D8:
|
|
mov r0, #0x25
|
|
mov r7, r4, lsl #8
|
|
bl AdvanceFrame
|
|
ldr r0, [sp]
|
|
mov sl, #0
|
|
sub sb, r0, r4, lsl #8
|
|
_022F08F0:
|
|
add r1, r6, sl, lsl #2
|
|
ldrb r0, [r6, sl, lsl #2]
|
|
ldrb r3, [r1, #1]
|
|
ldrb r2, [r1, #2]
|
|
mul r0, sb, r0
|
|
add r1, fp, sl, lsl #2
|
|
mul ip, sb, r3
|
|
mul r2, sb, r2
|
|
ldrb lr, [r1, #1]
|
|
ldrb r3, [r1, #2]
|
|
ldrb r1, [fp, sl, lsl #2]
|
|
mla ip, r7, lr, ip
|
|
mla r2, r7, r3, r2
|
|
mla r0, r7, r1, r0
|
|
mov r0, r0, asr #8
|
|
mov r0, r0, asr r8
|
|
mov r3, ip, asr #8
|
|
mov r1, r2, asr #8
|
|
mov r3, r3, asr r8
|
|
strb r0, [r5, sl, lsl #2]
|
|
add r2, r5, sl, lsl #2
|
|
add sl, sl, #1
|
|
strb r3, [r2, #1]
|
|
mov r0, r1, asr r8
|
|
strb r0, [r2, #2]
|
|
cmp sl, #0x100
|
|
blt _022F08F0
|
|
bl ov29_022DE608
|
|
add r4, r4, #1
|
|
_022F0964:
|
|
ldr r0, [sp, #4]
|
|
cmp r4, r0
|
|
blt _022F08D8
|
|
mov r0, r6
|
|
bl MemFree
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F0980: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F085C
|
|
|
|
arm_func_start ov29_022F0984
|
|
ov29_022F0984: ; 0x022F0984
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x1c
|
|
mov r6, r1
|
|
ldr r4, [r6, #0xb4]
|
|
mov r7, r0
|
|
ldrsh r1, [r4, #2]
|
|
add r0, sp, #0xc
|
|
mov r5, r3
|
|
bl InitPortraitDungeon
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
bne _022F09E0
|
|
mov r0, r6
|
|
bl ov29_022F9C4C
|
|
cmp r0, #0
|
|
bne _022F09E0
|
|
mov r1, r6
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrsh r0, [r4, #0xc]
|
|
bl SetMessageLogPreprocessorArgsSpeakerId0x30000
|
|
b _022F09F4
|
|
_022F09E0:
|
|
ldrsh r1, [r4, #2]
|
|
mov r0, #1
|
|
bl SetMessageLogPreprocessorArgsStringToName
|
|
ldrsh r0, [r4, #2]
|
|
bl SetMessageLogPreprocessorArgsSpeakerId
|
|
_022F09F4:
|
|
cmp r5, #0
|
|
beq _022F0A6C
|
|
mov r1, #1
|
|
add r0, sp, #4
|
|
mov r2, r5
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0234D860
|
|
ldrb r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
beq _022F0A28
|
|
ldr r0, _022F0AA0 ; =ov29_022F0AA4
|
|
bl ov29_0234D878
|
|
_022F0A28:
|
|
add r0, sp, #0xc
|
|
bl ov29_0234D65C
|
|
bl GetMessageLogPreprocessorArgs
|
|
mov r1, r0
|
|
mov ip, #0
|
|
add r2, sp, #4
|
|
mov r0, r7
|
|
mov r3, #1
|
|
str ip, [sp]
|
|
bl ov29_0234D690
|
|
bl ov29_0234D650
|
|
bl ov29_0234D88C
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
b _022F0A98
|
|
_022F0A6C:
|
|
add r0, sp, #0xc
|
|
bl ov29_0234D65C
|
|
bl GetMessageLogPreprocessorArgs
|
|
mov r1, r0
|
|
mov r3, #1
|
|
mov r0, r7
|
|
mov r2, #0
|
|
str r3, [sp]
|
|
bl ov29_0234D690
|
|
bl ov29_0234D650
|
|
mov r0, #1
|
|
_022F0A98:
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022F0AA0: .word ov29_022F0AA4
|
|
arm_func_end ov29_022F0984
|
|
|
|
arm_func_start ov29_022F0AA4
|
|
ov29_022F0AA4: ; 0x022F0AA4
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _022F0AD4 ; =ov29_023535A4
|
|
mvn r0, #1
|
|
ldrsb r1, [r1]
|
|
cmp r1, r0
|
|
ldmneia sp!, {r3, pc}
|
|
ldr r0, _022F0AD8 ; =ov29_023526A8
|
|
ldr r1, _022F0ADC ; =ov29_022F0B10
|
|
bl CreateTextBox
|
|
ldr r1, _022F0AD4 ; =ov29_023535A4
|
|
strb r0, [r1]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022F0AD4: .word ov29_023535A4
|
|
_022F0AD8: .word ov29_023526A8
|
|
_022F0ADC: .word ov29_022F0B10
|
|
arm_func_end ov29_022F0AA4
|
|
|
|
arm_func_start ov29_022F0AE0
|
|
ov29_022F0AE0: ; 0x022F0AE0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _022F0B0C ; =ov29_023535A4
|
|
mvn r1, #1
|
|
ldrsb r0, [r0]
|
|
cmp r0, r1
|
|
ldmeqia sp!, {r3, pc}
|
|
bl CloseTextBox
|
|
ldr r0, _022F0B0C ; =ov29_023535A4
|
|
mvn r1, #1
|
|
strb r1, [r0]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022F0B0C: .word ov29_023535A4
|
|
arm_func_end ov29_022F0AE0
|
|
|
|
arm_func_start ov29_022F0B10
|
|
ov29_022F0B10: ; 0x022F0B10
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #0xd4
|
|
mov r4, r0
|
|
bl sub_02027B1C
|
|
add r0, sp, #4
|
|
bl InitPreprocessorArgs
|
|
bl GetMoneyCarried
|
|
str r0, [sp, #0x28]
|
|
add r1, sp, #4
|
|
str r1, [sp]
|
|
ldr r2, _022F0B84 ; =ov29_023526B8
|
|
add r0, sp, #0x54
|
|
mov r1, #0x80
|
|
mov r3, #0x400
|
|
bl PreprocessString
|
|
mov r1, #4
|
|
#ifdef JAPAN
|
|
mov r0, r4
|
|
mov r2, r1
|
|
rsb r3, r1, #0x430
|
|
#else
|
|
ldr r3, _022F0B88 ; =0x00000225
|
|
mov r0, r4
|
|
mov r2, r1
|
|
#endif
|
|
bl sub_02026268
|
|
mov r0, r4
|
|
mov r1, #0xa
|
|
mov r2, #0x14
|
|
add r3, sp, #0x54
|
|
bl DrawTextInWindow
|
|
mov r0, r4
|
|
bl UpdateWindow
|
|
add sp, sp, #0xd4
|
|
ldmia sp!, {r3, r4, pc}
|
|
.align 2, 0
|
|
_022F0B84: .word ov29_023526B8
|
|
#ifndef JAPAN
|
|
_022F0B88: .word 0x00000225
|
|
#endif
|
|
arm_func_end ov29_022F0B10
|
|
|
|
arm_func_start GetLeaderAction
|
|
GetLeaderAction: ; 0x022F0B8C
|
|
stmdb sp!, {r3, lr}
|
|
bl GetLeaderMonster
|
|
add r0, r0, #0x4a
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end GetLeaderAction
|
|
|
|
arm_func_start GetLeaderActionId
|
|
GetLeaderActionId: ; 0x022F0B9C
|
|
stmdb sp!, {r3, lr}
|
|
bl GetLeaderMonster
|
|
ldrh r0, [r0, #0x4a]
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end GetLeaderActionId
|
|
|
|
arm_func_start GetEntityTouchscreenArea
|
|
GetEntityTouchscreenArea: ; 0x022F0BAC
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r3, r0
|
|
mov r6, r1
|
|
add r0, sp, #0
|
|
add r1, r3, #0x2c
|
|
mov r2, #3
|
|
ldrsh r4, [r3, #0x48]
|
|
ldrsh r5, [r3, #0x4a]
|
|
bl sub_0201CF90
|
|
ldrsh r0, [sp]
|
|
add r0, r4, r0
|
|
sub r0, r0, #0xc
|
|
str r0, [r6, #8]
|
|
ldrsh r0, [sp, #2]
|
|
add r0, r5, r0
|
|
sub r0, r0, #0xc
|
|
str r0, [r6]
|
|
ldrsh r0, [sp]
|
|
add r0, r4, r0
|
|
add r0, r0, #0xc
|
|
str r0, [r6, #0xc]
|
|
ldrsh r0, [sp, #2]
|
|
add r0, r5, r0
|
|
add r0, r0, #0xc
|
|
str r0, [r6, #4]
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
arm_func_end GetEntityTouchscreenArea
|
|
|
|
arm_func_start ov29_022F0C1C
|
|
ov29_022F0C1C: ; 0x022F0C1C
|
|
stmdb sp!, {r3, lr}
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldr r1, [r0, #0xb4]
|
|
mov r2, #0
|
|
bl ov29_022F3B98
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F0C1C
|
|
|
|
arm_func_start ov29_022F0C3C
|
|
ov29_022F0C3C: ; 0x022F0C3C
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #8
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
beq _022F0C90
|
|
cmp r1, #0
|
|
beq _022F0C74
|
|
add r3, sp, #0
|
|
mov r2, #4
|
|
_022F0C60:
|
|
ldrh r0, [r1], #2
|
|
subs r2, r2, #1
|
|
strh r0, [r3], #2
|
|
bne _022F0C60
|
|
b _022F0C80
|
|
_022F0C74:
|
|
add r0, sp, #0
|
|
mov r1, #0x160
|
|
bl InitMove
|
|
_022F0C80:
|
|
ldr r1, [r4, #0xb4]
|
|
add r2, sp, #0
|
|
mov r0, r4
|
|
bl ov29_022F3B98
|
|
_022F0C90:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_022F0C3C
|
|
|
|
arm_func_start ov29_022F0C98
|
|
ov29_022F0C98: ; 0x022F0C98
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
bl GetTopScreenOption
|
|
mov r7, r0
|
|
mov r0, #4
|
|
mov r1, #0x2f
|
|
mov r8, #0
|
|
bl ov29_022EA370
|
|
mov r0, r8
|
|
mov r1, r0
|
|
bl ov29_022E0DD8
|
|
mov r0, #2
|
|
mov r1, r8
|
|
bl ov29_022E0DD8
|
|
mov r0, #3
|
|
mov r1, r8
|
|
bl ov29_022E0DD8
|
|
mov r0, #4
|
|
mov r1, r8
|
|
bl ov29_022E0DD8
|
|
ldr r1, _022F0EC8 ; =DUNGEON_PTR
|
|
ldr r2, _022F0ECC ; =ov29_0237CFBB
|
|
ldr r1, [r1]
|
|
mov r0, #1
|
|
strb r0, [r2]
|
|
add r1, r1, #0x1a000
|
|
#ifdef JAPAN
|
|
strb r0, [r1, #0x1a5]
|
|
#else
|
|
strb r0, [r1, #0x249]
|
|
#endif
|
|
bl ov29_0234B1A4
|
|
mov r0, #1
|
|
bl ov29_02338F58
|
|
cmp sl, #0
|
|
bne _022F0D24
|
|
bl GetBottomScreenOption
|
|
cmp r0, #0
|
|
bne _022F0D44
|
|
_022F0D24:
|
|
mov r0, #0
|
|
mov r1, r0
|
|
bl ov29_02339D7C
|
|
cmp sl, #0
|
|
beq _022F0D44
|
|
mov r0, #0xc
|
|
mov r1, #0
|
|
bl ov29_022EA428
|
|
_022F0D44:
|
|
bl ov29_023391C0
|
|
mov sb, r0
|
|
mov r0, #0
|
|
mov r1, r0
|
|
bl ov29_02339190
|
|
bl UpdateMinimap
|
|
mov r0, #4
|
|
mov r1, #0x2f
|
|
bl ov29_022EA370
|
|
ldr r4, _022F0ED0 ; =ov29_0237C6A4
|
|
ldr r5, _022F0ECC ; =ov29_0237CFBB
|
|
ldr r6, _022F0ED4 ; =ov29_0237C694
|
|
mov fp, #0x2f
|
|
_022F0D78:
|
|
mov r0, fp
|
|
bl AdvanceFrame
|
|
ldrh r3, [r6, #2]
|
|
tst r3, #6
|
|
beq _022F0D98
|
|
ldr r0, _022F0ED8 ; =0x00003F03
|
|
bl PlaySeByIdVolumeWrapper
|
|
b _022F0E30
|
|
_022F0D98:
|
|
ldrb r0, [r5]
|
|
cmp r0, #0
|
|
bne _022F0DDC
|
|
ldrh r2, [r4]
|
|
mov r1, #0
|
|
tst r2, #0x40
|
|
beq _022F0DBC
|
|
tst r2, #2
|
|
movne r1, #1
|
|
_022F0DBC:
|
|
cmp r1, #0
|
|
movne r8, #1
|
|
cmp r8, #0
|
|
beq _022F0DE0
|
|
tst r2, #4
|
|
beq _022F0DE0
|
|
bl ov29_022E0C4C
|
|
b _022F0E30
|
|
_022F0DDC:
|
|
mov r8, #0
|
|
_022F0DE0:
|
|
tst r3, #1
|
|
bne _022F0E18
|
|
tst r3, #0x400
|
|
bne _022F0E18
|
|
cmp r0, #0
|
|
beq _022F0D78
|
|
ldrh r1, [r4]
|
|
mov r2, #0
|
|
tst r1, #0x40
|
|
beq _022F0E10
|
|
tst r1, #2
|
|
movne r2, #1
|
|
_022F0E10:
|
|
cmp r2, #0
|
|
beq _022F0D78
|
|
_022F0E18:
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
strb r0, [r5]
|
|
bl UpdateMinimap
|
|
b _022F0D78
|
|
_022F0E30:
|
|
cmp sl, #0
|
|
bne _022F0E44
|
|
bl GetBottomScreenOption
|
|
cmp r0, #0
|
|
bne _022F0E64
|
|
_022F0E44:
|
|
mov r0, #0
|
|
mov r1, r0
|
|
bl ov29_0233A0E8
|
|
cmp sl, #0
|
|
beq _022F0E64
|
|
mov r0, #0xb
|
|
mov r1, #0
|
|
bl ov29_022EA428
|
|
_022F0E64:
|
|
mov r0, sb
|
|
mov r1, #0
|
|
bl ov29_02339190
|
|
mov r0, #0
|
|
bl ov29_02338F58
|
|
ldr r1, _022F0EC8 ; =DUNGEON_PTR
|
|
mov r0, r7
|
|
ldr r1, [r1]
|
|
mov r2, #0
|
|
add r1, r1, #0x1a000
|
|
#ifdef JAPAN
|
|
strb r2, [r1, #0x1a5]
|
|
#else
|
|
strb r2, [r1, #0x249]
|
|
#endif
|
|
bl SetTopScreenOption
|
|
ldr r0, _022F0ECC ; =ov29_0237CFBB
|
|
mov r1, #1
|
|
strb r1, [r0]
|
|
bl UpdateMinimap
|
|
mov r0, #0
|
|
bl ov29_022E0DF0
|
|
mov r0, #0x2f
|
|
bl AdvanceFrame
|
|
mov r0, #0x2f
|
|
bl AdvanceFrame
|
|
bl sub_02006B70
|
|
bl ov29_022E0B44
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F0EC8: .word DUNGEON_PTR
|
|
_022F0ECC: .word ov29_0237CFBB
|
|
_022F0ED0: .word ov29_0237C6A4
|
|
_022F0ED4: .word ov29_0237C694
|
|
_022F0ED8: .word 0x00003F03
|
|
arm_func_end ov29_022F0C98
|
|
|
|
arm_func_start SetLeaderAction
|
|
SetLeaderAction: ; 0x022F0EDC
|
|
#ifdef JAPAN
|
|
#define SET_LEADER_ACTION_OFFSET -4
|
|
#define SET_LEADER_ACTION_DATA_OFFSET -0x2C1
|
|
#else
|
|
#define SET_LEADER_ACTION_OFFSET 0
|
|
#define SET_LEADER_ACTION_DATA_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xdc
|
|
ldr r1, _022F1DDC ; =DUNGEON_PTR
|
|
add r0, sp, #0xb6
|
|
ldr r2, [r1]
|
|
mov r1, #5
|
|
#ifdef JAPAN
|
|
add r2, r2, #0x178
|
|
#else
|
|
add r2, r2, #0x21c
|
|
#endif
|
|
add r5, r2, #0x1a000
|
|
mov r2, #3
|
|
str r2, [sp, #0x68]
|
|
mov r2, #0
|
|
str r2, [sp, #0x64]
|
|
bl MemZero
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
strh r1, [r0, #0x1c]
|
|
bl GetLeader
|
|
mov r1, #1
|
|
mov r2, r1
|
|
bl TryPointCameraToMonster
|
|
#ifndef JAPAN
|
|
bl GetLeader
|
|
bl SetDecoyAiTracker
|
|
#endif
|
|
bl GetLeader
|
|
bl ov29_022FF3F4
|
|
cmp r0, #0
|
|
beq _022F0F58
|
|
mov r0, #0x3c
|
|
mov r1, #0x10
|
|
bl ov29_022EA370
|
|
b _022F2B34
|
|
_022F0F58:
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x78e]
|
|
bl ov29_02339CD4
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #5]
|
|
cmp r0, #0
|
|
beq _022F1000
|
|
mov r0, #0
|
|
strb r0, [r1, #5]
|
|
bl IsGoldenChamber
|
|
cmp r0, #0
|
|
beq _022F0FAC
|
|
bl ov29_0234A980
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #8]
|
|
cmp r0, #0
|
|
bne _022F2B34
|
|
_022F0FAC:
|
|
bl GetLeader
|
|
mov r1, #1
|
|
bl ShouldMonsterRunAwayAndShowEffect
|
|
cmp r0, #0
|
|
bne _022F1000
|
|
mov r0, #0xa
|
|
bl ov29_0234BA54
|
|
mov r0, #1
|
|
bl ResetLeaderActionFields
|
|
bl ov29_022F2FE4
|
|
mov r0, #0
|
|
bl ov29_0233A248
|
|
bl GetLeader
|
|
mov r1, #0
|
|
bl StairsMenuAfterStep
|
|
bl ov29_022E0B44
|
|
bl sub_02006B70
|
|
bl GetLeaderMonster
|
|
ldrh r0, [r0, #0x4a]
|
|
cmp r0, #0
|
|
bne _022F2B34
|
|
_022F1000:
|
|
mov r0, #1
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl ov29_022FA2F0
|
|
ldr r1, _022F1DE0 ; =DIRECTIONS_XY
|
|
ldrsh r0, [r1, #0x12]
|
|
str r0, [sp, #8]
|
|
ldrsh r0, [r1, #0x10]
|
|
str r0, [sp, #4]
|
|
_022F1024:
|
|
bl GetLeader
|
|
ldr r1, _022F1DDC ; =DUNGEON_PTR
|
|
mov r6, r0
|
|
ldr r0, [r1]
|
|
ldr sb, [r6, #0xb4]
|
|
ldrb r0, [r0, #0x78b]
|
|
cmp r0, #0
|
|
beq _022F1064
|
|
bl ShouldLeaderKeepRunning
|
|
cmp r0, #0
|
|
movne r0, #2
|
|
strneh r0, [sb, #0x4a]
|
|
movne r0, #0
|
|
strneb r0, [sb, #0x4e]
|
|
bne _022F2B34
|
|
bl ov29_022F2FE4
|
|
_022F1064:
|
|
ldr r1, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r2, #0
|
|
strb r2, [r1, #2]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
strb r2, [r1, #1]
|
|
ldr r0, [r0]
|
|
ldr r0, [r0, #0x614]
|
|
cmp r0, #0
|
|
strltb r2, [sp, #0xb6]
|
|
strltb r2, [sp, #0xb7]
|
|
strltb r2, [sp, #0xb8]
|
|
strltb r2, [sp, #0xba]
|
|
blt _022F10AC
|
|
mov r0, #1
|
|
strb r0, [sp, #0xb6]
|
|
strb r2, [sp, #0xb7]
|
|
strb r2, [sp, #0xb8]
|
|
strb r2, [sp, #0xba]
|
|
_022F10AC:
|
|
mov r0, #0
|
|
str r0, [sp, #0x6c]
|
|
bl SetLeaderActionFields
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r1, #0
|
|
strb r1, [r0]
|
|
strb r1, [r0, #3]
|
|
sub r0, sp, #4
|
|
str r0, [sp, #0x70]
|
|
ldr r0, _022F1DE8 ; =0x00000BA3
|
|
mvn r4, #0
|
|
sub r0, r0, #1
|
|
str r0, [sp, #0x88]
|
|
ldr r0, _022F1DE8 ; =0x00000BA3
|
|
#ifdef JAPAN
|
|
sub r0, r0, #3
|
|
#else
|
|
sub r0, r0, #2
|
|
#endif
|
|
str r0, [sp, #0x84]
|
|
ldr r0, _022F1DE8 ; =0x00000BA3
|
|
sub r0, r0, #5
|
|
str r0, [sp, #0x80]
|
|
ldr r0, _022F1DE8 ; =0x00000BA3
|
|
sub r0, r0, #4
|
|
str r0, [sp, #0x7c]
|
|
add r0, sb, #0x100
|
|
str r0, [sp, #0x8c]
|
|
_022F110C:
|
|
mov r7, #0
|
|
mov r0, r7
|
|
str r0, [sp, #0x4c]
|
|
str r0, [sp, #0x48]
|
|
str r0, [sp, #0x2c]
|
|
ldrb r0, [sp, #0xb6]
|
|
cmp r0, #0
|
|
bne _022F2970
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrsh r0, [r0, #4]
|
|
add r1, r0, #1
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
strh r1, [r0, #4]
|
|
ldrb r0, [r5, #0x35]
|
|
cmp r0, #0
|
|
movne r0, r7
|
|
strne r0, [sp, #0x6c]
|
|
ldreq r0, [sp, #0x6c]
|
|
addeq r0, r0, #1
|
|
streq r0, [sp, #0x6c]
|
|
ldr r0, [sp, #0x68]
|
|
cmp r0, #0
|
|
beq _022F117C
|
|
subs r0, r0, #1
|
|
str r0, [sp, #0x68]
|
|
bne _022F117C
|
|
mov r0, #0
|
|
bl ov29_023055B0
|
|
_022F117C:
|
|
mov r0, r6
|
|
bl ov29_022F2B74
|
|
ldr r0, _022F1DEC ; =ov29_0237C6A4
|
|
mov r8, #0
|
|
ldrh r1, [r0]
|
|
tst r1, #0x40
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and sl, r0, #0xff
|
|
tst r1, #0x10
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
str r0, [sp, #0x58]
|
|
tst r1, #0x20
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
tst r1, #0x200
|
|
str r0, [sp, #0x54]
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
str r0, [sp, #0x50]
|
|
mov r0, r8
|
|
str r0, [sp, #0x5c]
|
|
bl ov29_022E0C3C
|
|
cmp r0, #0
|
|
beq _022F1208
|
|
cmp sl, #0
|
|
bne _022F1200
|
|
mov r0, r8
|
|
bl ov29_022E0C2C
|
|
_022F1200:
|
|
mov sl, #0
|
|
b _022F1228
|
|
_022F1208:
|
|
mov r0, r8
|
|
bl ov29_022E0C2C
|
|
ldr r0, _022F1DEC ; =ov29_0237C6A4
|
|
ldrh r0, [r0]
|
|
tst r0, #0x100
|
|
movne r0, #1
|
|
moveq r0, r8
|
|
and sl, r0, #0xff
|
|
_022F1228:
|
|
ldr r0, [sp, #0x50]
|
|
cmp r0, #0
|
|
beq _022F1268
|
|
mov r0, r6
|
|
add r1, sp, #0xae
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
ldrsh r1, [r6, #4]
|
|
ldrsh r0, [sp, #0xae]
|
|
cmp r1, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xb0]
|
|
cmpeq r1, r0
|
|
moveq r0, #0
|
|
streq r0, [sp, #0x50]
|
|
_022F1268:
|
|
ldr r0, _022F1DEC ; =ov29_0237C6A4
|
|
mov r1, #0
|
|
ldrh r0, [r0]
|
|
tst r0, #0x80
|
|
beq _022F1284
|
|
tst r0, #0x1000
|
|
movne r1, #1
|
|
_022F1284:
|
|
cmp r1, #0
|
|
beq _022F12E0
|
|
mov r0, r6
|
|
add r1, sp, #0xae
|
|
mov r2, #0x66
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
mov r0, r6
|
|
add r1, sp, #0xaa
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
ldrsh r2, [r6, #4]
|
|
ldrsh r0, [sp, #0xae]
|
|
cmp r2, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xb0]
|
|
cmpeq r1, r0
|
|
ldreqsh r0, [sp, #0xaa]
|
|
cmpeq r2, r0
|
|
ldreqsh r0, [sp, #0xac]
|
|
cmpeq r1, r0
|
|
moveq r8, #1
|
|
_022F12E0:
|
|
ldr r0, [sp, #0x54]
|
|
cmp r0, #0
|
|
beq _022F1344
|
|
mov r0, r6
|
|
add r1, sp, #0xae
|
|
mov r2, #0x66
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
mov r0, r6
|
|
add r1, sp, #0xaa
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
ldrsh r2, [r6, #4]
|
|
ldrsh r0, [sp, #0xae]
|
|
cmp r2, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xb0]
|
|
cmpeq r1, r0
|
|
ldreqsh r0, [sp, #0xaa]
|
|
cmpeq r2, r0
|
|
ldreqsh r0, [sp, #0xac]
|
|
cmpeq r1, r0
|
|
moveq r0, #1
|
|
streq r0, [sp, #0x5c]
|
|
_022F1344:
|
|
cmp r8, #0
|
|
bne _022F1364
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #1
|
|
beq _022F13B0
|
|
tst r0, #2
|
|
beq _022F13B0
|
|
_022F1364:
|
|
ldr r0, [sp, #0x8c]
|
|
ldrh r1, [r0, #0x46 + SET_LEADER_ACTION_OFFSET]
|
|
ldr r0, [sp, #0x70]
|
|
strh r1, [r0]
|
|
ldr r0, [sp, #0x8c]
|
|
ldrh r1, [r0, #0x48 + SET_LEADER_ACTION_OFFSET]
|
|
ldr r0, [sp, #0x70]
|
|
strh r1, [r0, #2]
|
|
ldr r0, [r0]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
beq _022F13B0
|
|
mov r0, #1
|
|
bl SetLeaderActionFields
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x78e]
|
|
b _022F2970
|
|
_022F13B0:
|
|
mov r0, #0
|
|
strh r4, [sp, #0xb2]
|
|
strh r4, [sp, #0xb4]
|
|
str r0, [sp, #0x34]
|
|
str r0, [sp, #0x30]
|
|
str r0, [sp, #0x38]
|
|
mov fp, r0
|
|
mov r8, r0
|
|
str r0, [sp, #0x60]
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #2]
|
|
cmp r0, #0
|
|
bne _022F1440
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
beq _022F1408
|
|
mov r8, #1
|
|
bl GetEquippedThrowableItem
|
|
cmp r0, #0
|
|
movge r0, r8
|
|
strge r0, [sp, #0x60]
|
|
b _022F1440
|
|
_022F1408:
|
|
ldr r0, _022F1DEC ; =ov29_0237C6A4
|
|
mov r1, r8
|
|
ldrh r0, [r0]
|
|
tst r0, #0x80
|
|
beq _022F1424
|
|
tst r0, #2
|
|
movne r1, #1
|
|
_022F1424:
|
|
cmp r1, #0
|
|
movne r8, #2
|
|
bne _022F1440
|
|
cmp sl, #0
|
|
ldreq r0, [sp, #0x50]
|
|
cmpeq r0, #0
|
|
movne r8, #3
|
|
_022F1440:
|
|
cmp r8, #0
|
|
beq _022F16F4
|
|
cmp r8, #1
|
|
mov r0, r6
|
|
add r1, sp, #0xa6
|
|
mov r3, #0
|
|
bne _022F1468
|
|
mov r2, #0x65
|
|
bl ov29_022F3EA0
|
|
b _022F1470
|
|
_022F1468:
|
|
mov r2, #0x64
|
|
bl ov29_022F3EA0
|
|
_022F1470:
|
|
mov r7, r0
|
|
cmp r7, #0
|
|
blt _022F16F4
|
|
ldrsh r1, [r6, #4]
|
|
ldrsh r0, [sp, #0xa6]
|
|
cmp r1, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xa8]
|
|
cmpeq r1, r0
|
|
beq _022F16F4
|
|
mov r0, r6
|
|
add r1, sp, #0xa6
|
|
bl ov29_022F426C
|
|
cmp r0, #0
|
|
bne _022F16F4
|
|
ldrh r0, [sp, #0xa8]
|
|
ldrh r1, [sp, #0xa6]
|
|
mov r3, #0
|
|
strh r0, [sp, #0x94]
|
|
strh r0, [sp, #0xa4]
|
|
add r0, r7, #4
|
|
strh r1, [sp, #0xa2]
|
|
strh r1, [sp, #0x92]
|
|
mov r0, r0, lsl #0x1d
|
|
ldr r1, _022F1DE0 ; =DIRECTIONS_XY
|
|
mov ip, r0, lsr #0x1b
|
|
ldrsh r1, [r1, ip]
|
|
ldrsh r2, [sp, #0xa2]
|
|
ldr ip, _022F1DE0 ; =DIRECTIONS_XY
|
|
add r0, ip, r0, lsr #27
|
|
add r1, r2, r1
|
|
strh r1, [sp, #0xa2]
|
|
ldrsh r0, [r0, #2]
|
|
ldrsh ip, [sp, #0xa4]
|
|
ldrsh r2, [r6, #4]
|
|
ldrsh r1, [sp, #0xa2]
|
|
add r0, ip, r0
|
|
strh r0, [sp, #0xa4]
|
|
cmp r2, r1
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xa4]
|
|
cmpeq r1, r0
|
|
ldrh r1, [sp, #0x92]
|
|
ldrh r0, [sp, #0x94]
|
|
moveq r3, #1
|
|
cmp r8, #2
|
|
strh r1, [sp, #0xb2]
|
|
strh r0, [sp, #0xb4]
|
|
beq _022F1548
|
|
ldr r0, [sp, #0x60]
|
|
cmp r0, #0
|
|
beq _022F15C0
|
|
cmp r3, #0
|
|
bne _022F15C0
|
|
_022F1548:
|
|
add r0, sp, #0xa6
|
|
bl PositionHasMonster
|
|
cmp r0, #0
|
|
beq _022F16F4
|
|
ldr r1, [sp, #0x60]
|
|
ldr r0, [r0, #0xb4]
|
|
cmp r1, #1
|
|
bne _022F1584
|
|
bl ov29_022F2B3C
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x38]
|
|
moveq r0, #0
|
|
streq r0, [sp, #0x38]
|
|
b _022F16F4
|
|
_022F1584:
|
|
cmp r1, #2
|
|
bne _022F15A8
|
|
bl ov29_022F2B3C
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x38]
|
|
moveq r0, #0
|
|
streq r0, [sp, #0x38]
|
|
b _022F16F4
|
|
_022F15A8:
|
|
cmp r8, #2
|
|
moveq r0, #0
|
|
streq r0, [sp, #0x30]
|
|
moveq fp, #1
|
|
streq r0, [sp, #0x34]
|
|
b _022F16F4
|
|
_022F15C0:
|
|
ldrsh r1, [r6, #4]
|
|
ldrsh r0, [sp, #0xa2]
|
|
cmp r1, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xa4]
|
|
cmpeq r1, r0
|
|
bne _022F16F4
|
|
add r0, sp, #0xa6
|
|
bl PositionHasMonster
|
|
str r0, [sp, #0x74]
|
|
cmp r0, #0
|
|
beq _022F16A4
|
|
cmp r8, #1
|
|
ldr r0, [r0, #0xb4]
|
|
bne _022F166C
|
|
mov r1, #0
|
|
str r1, [sp, #0x30]
|
|
mov fp, r1
|
|
bl ov29_022F2B3C
|
|
cmp r0, #0
|
|
beq _022F163C
|
|
ldr r0, [sp, #0x60]
|
|
cmp r0, #1
|
|
mov r0, #1
|
|
streq r0, [sp, #0x38]
|
|
strne r0, [sp, #0x30]
|
|
movne r0, fp
|
|
strne r0, [sp, #0x38]
|
|
mov r0, #0
|
|
str r0, [sp, #0x34]
|
|
b _022F1698
|
|
_022F163C:
|
|
mov r1, fp
|
|
str r1, [sp, #0x38]
|
|
ldr r0, [sp, #0x74]
|
|
mov r1, #1
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
mov r0, #1
|
|
strne r0, [sp, #0x30]
|
|
movne r0, fp
|
|
strne r0, [sp, #0x34]
|
|
streq r0, [sp, #0x34]
|
|
b _022F1698
|
|
_022F166C:
|
|
cmp r8, #3
|
|
bne _022F1698
|
|
bl ov29_022F2B3C
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x30]
|
|
moveq r0, #0
|
|
mov fp, #0
|
|
streq r0, [sp, #0x30]
|
|
mov r0, fp
|
|
str r0, [sp, #0x34]
|
|
_022F1698:
|
|
and r0, r7, #7
|
|
strb r0, [sb, #0x4c]
|
|
b _022F16F4
|
|
_022F16A4:
|
|
ldrsh r1, [r6, #4]
|
|
ldr r0, [sp, #4]
|
|
ldrsh r2, [r6, #6]
|
|
add r0, r1, r0
|
|
ldr r1, [sp, #8]
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldrh r0, [r0]
|
|
tst r0, #0x2000
|
|
beq _022F16F4
|
|
mov r0, #4
|
|
strb r0, [sb, #0x4c]
|
|
mov r0, #1
|
|
str r0, [sp, #0x4c]
|
|
mov r0, r6
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
mov r0, r6
|
|
mov r2, #4
|
|
bl ChangeMonsterAnimation
|
|
_022F16F4:
|
|
bl GetDPadAttackOption
|
|
cmp r0, #0
|
|
moveq r1, #0
|
|
beq _022F17E0
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #2]
|
|
cmp r0, #0
|
|
movne r1, #0
|
|
bne _022F17E0
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
and r0, r0, #0xf0
|
|
mov r0, r0, lsl #0x10
|
|
movs r0, r0, lsr #0x10
|
|
cmpeq r0, #0
|
|
moveq r1, #0
|
|
beq _022F17E0
|
|
cmp r0, #0x50
|
|
moveq r1, #3
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0x60
|
|
moveq r1, #5
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0x90
|
|
moveq r1, #1
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0xa0
|
|
moveq r1, #7
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0x40
|
|
moveq r1, #4
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0x80
|
|
moveq r1, #0
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0x10
|
|
moveq r1, #2
|
|
streq r1, [sp, #0x20]
|
|
cmp r0, #0x20
|
|
moveq r0, #6
|
|
streq r0, [sp, #0x20]
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #1]
|
|
cmp r0, #0
|
|
beq _022F17B8
|
|
ldr r0, [sp, #0x20]
|
|
tst r0, #1
|
|
moveq r1, #0
|
|
beq _022F17E0
|
|
_022F17B8:
|
|
ldr r0, [sp, #0x20]
|
|
ldrb r8, [sb, #0x4c]
|
|
and r1, r0, #7
|
|
mov r0, r6
|
|
strb r1, [sb, #0x4c]
|
|
bl ov29_022F87C0
|
|
cmp r0, #0
|
|
moveq r1, #0
|
|
streqb r8, [sb, #0x4c]
|
|
movne r1, #1
|
|
_022F17E0:
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #2]
|
|
cmp r0, #0
|
|
bne _022F1884
|
|
cmp r1, #0
|
|
beq _022F1884
|
|
ldr r0, [sp, #0x64]
|
|
cmp r0, #0
|
|
bne _022F18B4
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #2
|
|
beq _022F1868
|
|
mov r0, r6
|
|
bl ov29_022F87C0
|
|
cmp r0, #0
|
|
beq _022F1838
|
|
mov r0, r6
|
|
mov r1, sb
|
|
bl ov29_022F37D0
|
|
cmp r0, #0
|
|
beq _022F1844
|
|
_022F1838:
|
|
mov r0, #0
|
|
str r0, [sp, #0x48]
|
|
b _022F18B4
|
|
_022F1844:
|
|
mov r0, #1
|
|
str r0, [sp, #0x48]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
mov r0, #1
|
|
str r0, [sp, #0x2c]
|
|
mov r0, #0
|
|
strb r0, [r1, #0x78c]
|
|
b _022F18B4
|
|
_022F1868:
|
|
mov r0, #1
|
|
str r0, [sp, #0x48]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
mov r0, #0
|
|
strb r0, [r1, #0x78c]
|
|
b _022F18B4
|
|
_022F1884:
|
|
cmp r0, #0
|
|
bne _022F18A0
|
|
ldr r0, [sp, #0x5c]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x48]
|
|
bne _022F18B4
|
|
_022F18A0:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
strne r0, [sp, #0x48]
|
|
_022F18B4:
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
mov r0, #0
|
|
str r0, [sp, #0x64]
|
|
cmpeq fp, #0
|
|
ldreq r0, [sp, #0x38]
|
|
cmpeq r0, #0
|
|
beq _022F19DC
|
|
ldrsh r0, [sp, #0xb2]
|
|
ldrsh r1, [sp, #0xb4]
|
|
bl GetTileSafe
|
|
str r0, [sp, #0x78]
|
|
mov r0, #7
|
|
bl PlaySeVolumeWrapper
|
|
ldr r0, [sp, #0x38]
|
|
cmp r0, #0
|
|
beq _022F198C
|
|
ldrsh r1, [sp, #0xb2]
|
|
ldrsh r0, [r6, #4]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
ldrsh r1, [sp, #0xb4]
|
|
ldrsh r0, [r6, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r0, asr #0x10
|
|
ldr r0, [sp, #0x78]
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
beq _022F19DC
|
|
ldr r0, [sp, #0x60]
|
|
cmp r0, #2
|
|
bne _022F1968
|
|
add r0, r6, #4
|
|
add r1, sp, #0xb2
|
|
bl GetDirectionTowardsPosition
|
|
strb r0, [sb, #0x4c]
|
|
ldrsh r0, [sp, #0xb2]
|
|
strh r0, [sb, #0x5a]
|
|
ldrsh r0, [sp, #0xb4]
|
|
strh r0, [sb, #0x5c]
|
|
b _022F19DC
|
|
_022F1968:
|
|
cmp r8, #0
|
|
cmpne r1, #0
|
|
cmpne r8, r1
|
|
bne _022F19DC
|
|
add r0, r6, #4
|
|
add r1, sp, #0xb2
|
|
bl GetDirectionTowardsPosition
|
|
strb r0, [sb, #0x4c]
|
|
b _022F19DC
|
|
_022F198C:
|
|
ldrsh r1, [sp, #0xb2]
|
|
ldrsh r0, [r6, #4]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #1
|
|
bgt _022F19DC
|
|
ldrsh r1, [sp, #0xb4]
|
|
ldrsh r0, [r6, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #1
|
|
bgt _022F19DC
|
|
ldr r0, [sp, #0x78]
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
beq _022F19DC
|
|
add r0, r6, #4
|
|
add r1, sp, #0xb2
|
|
bl GetDirectionTowardsPosition
|
|
strb r0, [sb, #0x4c]
|
|
_022F19DC:
|
|
ldr r0, [sp, #0x48]
|
|
cmp r0, #0
|
|
ldreq r0, [sp, #0x34]
|
|
cmpeq r0, #0
|
|
ldreq r0, [sp, #0x30]
|
|
cmpeq r0, #0
|
|
cmpeq fp, #0
|
|
beq _022F1CC0
|
|
ldr r0, [sp, #0x2c]
|
|
cmp r0, #0
|
|
bne _022F1A64
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #2
|
|
beq _022F1A64
|
|
ldr r0, [sp, #0x8c]
|
|
ldrh r1, [r0, #0x46 + SET_LEADER_ACTION_OFFSET]
|
|
ldr r0, [sp, #0x70]
|
|
strh r1, [r0]
|
|
ldr r0, [sp, #0x8c]
|
|
ldrh r1, [r0, #0x48 + SET_LEADER_ACTION_OFFSET]
|
|
ldr r0, [sp, #0x70]
|
|
strh r1, [r0, #2]
|
|
ldr r0, [r0]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
beq _022F1CE0
|
|
mov r0, #1
|
|
bl SetLeaderActionFields
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x78e]
|
|
b _022F2970
|
|
_022F1A64:
|
|
mov r0, r6
|
|
mov r1, #1
|
|
bl ShouldMonsterRunAwayAndShowEffect
|
|
cmp r0, #0
|
|
beq _022F1AA0
|
|
ldr r1, _022F1DF4 ; =0x00000B9A
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, #1
|
|
bl SetLeaderActionFields
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x78e]
|
|
b _022F2970
|
|
_022F1AA0:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #0x200
|
|
cmpeq fp, #0
|
|
beq _022F1C48
|
|
mov r4, #0
|
|
mov r1, r4
|
|
mov r2, #1
|
|
b _022F1AF4
|
|
_022F1AC4:
|
|
add r0, sb, r4, lsl #3
|
|
ldrb r0, [r0, #0x124 + SET_LEADER_ACTION_OFFSET]
|
|
tst r0, #1
|
|
movne r0, r2
|
|
moveq r0, r1
|
|
tst r0, #0xff
|
|
beq _022F1AF0
|
|
add r0, sb, r4, lsl #3
|
|
ldrb r0, [r0, #0x124 + SET_LEADER_ACTION_OFFSET]
|
|
tst r0, #8
|
|
bne _022F1AFC
|
|
_022F1AF0:
|
|
add r4, r4, #1
|
|
_022F1AF4:
|
|
cmp r4, #4
|
|
blt _022F1AC4
|
|
_022F1AFC:
|
|
cmp r4, #4
|
|
bne _022F1B20
|
|
ldr r1, _022F1DF8 ; =0x00000B9B
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
cmp fp, #0
|
|
beq _022F2970
|
|
bl sub_02006B70
|
|
b _022F2970
|
|
_022F1B20:
|
|
mov r3, #0
|
|
mov r1, r3
|
|
mov r2, #1
|
|
b _022F1B5C
|
|
_022F1B30:
|
|
add r0, sb, r3, lsl #3
|
|
ldrb r0, [r0, #0x124 + SET_LEADER_ACTION_OFFSET]
|
|
tst r0, #1
|
|
movne r0, r2
|
|
moveq r0, r1
|
|
tst r0, #0xff
|
|
addne r0, sb, r3, lsl #3
|
|
ldrneb r0, [r0, #0x12a + SET_LEADER_ACTION_OFFSET]
|
|
cmpne r0, #0
|
|
bne _022F1B64
|
|
add r3, r3, #1
|
|
_022F1B5C:
|
|
cmp r3, #4
|
|
blt _022F1B30
|
|
_022F1B64:
|
|
cmp r3, #4
|
|
bne _022F1B9C
|
|
bl GetCheckDirectionOption
|
|
cmp r0, #0
|
|
beq _022F1B8C
|
|
mov r0, r6
|
|
mov r1, #0
|
|
bl ov29_022F0C3C
|
|
cmp r0, #0
|
|
beq _022F2970
|
|
_022F1B8C:
|
|
add r0, sb, #0x4a
|
|
mov r1, #0x17
|
|
bl SetMonsterActionFields
|
|
b _022F2970
|
|
_022F1B9C:
|
|
mov r7, r4
|
|
mov r1, #0
|
|
b _022F1BD8
|
|
_022F1BA8:
|
|
cmp r7, r4
|
|
beq _022F1BC0
|
|
add r0, sb, r7, lsl #3
|
|
ldrb r0, [r0, #0x124 + SET_LEADER_ACTION_OFFSET]
|
|
tst r0, #2
|
|
beq _022F1BE0
|
|
_022F1BC0:
|
|
add r0, sb, r7, lsl #3
|
|
ldrb r0, [r0, #0x12a + SET_LEADER_ACTION_OFFSET]
|
|
cmp r0, #0
|
|
movne r1, #1
|
|
bne _022F1BE0
|
|
add r7, r7, #1
|
|
_022F1BD8:
|
|
cmp r7, #4
|
|
blt _022F1BA8
|
|
_022F1BE0:
|
|
cmp r1, #0
|
|
bne _022F1C04
|
|
ldr r1, _022F1DFC ; =0x00000B9C
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
cmp fp, #0
|
|
beq _022F2970
|
|
bl sub_02006B70
|
|
b _022F2970
|
|
_022F1C04:
|
|
bl GetCheckDirectionOption
|
|
cmp r0, #0
|
|
beq _022F1C28
|
|
add r1, sb, #0x124 + SET_LEADER_ACTION_OFFSET
|
|
mov r0, r6
|
|
add r1, r1, r7, lsl #3
|
|
bl ov29_022F0C3C
|
|
cmp r0, #0
|
|
beq _022F2970
|
|
_022F1C28:
|
|
mov r0, r6
|
|
bl GetTeamMemberIndex
|
|
mov r2, r4, lsl #0x10
|
|
mov r1, r0
|
|
add r0, sb, #0x4a
|
|
mov r2, r2, asr #0x10
|
|
bl SetActionUseMovePlayer
|
|
b _022F2970
|
|
_022F1C48:
|
|
ldr r0, [sp, #0x34]
|
|
cmp r0, #0
|
|
beq _022F1C74
|
|
mov r0, r6
|
|
mov r1, sb
|
|
bl ov29_022F37D0
|
|
cmp r0, #0
|
|
beq _022F1CE0
|
|
mov r0, #1
|
|
str r0, [sp, #0x64]
|
|
b _022F2970
|
|
_022F1C74:
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
bne _022F1C9C
|
|
mov r0, r6
|
|
mov r1, sb
|
|
bl ov29_022F37D0
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x64]
|
|
bne _022F2970
|
|
_022F1C9C:
|
|
mov r0, r6
|
|
mov r1, sb
|
|
bl ov29_022F3AFC
|
|
cmp r0, #0
|
|
bne _022F2970
|
|
add r0, sb, #0x4a
|
|
mov r1, #0x32
|
|
bl SetMonsterActionFields
|
|
b _022F2970
|
|
_022F1CC0:
|
|
ldr r0, [sp, #0x4c]
|
|
cmp r0, #0
|
|
beq _022F1CE0
|
|
mov r0, r6
|
|
mov r1, sb
|
|
bl ov29_022F3AFC
|
|
cmp r0, #0
|
|
bne _022F2970
|
|
_022F1CE0:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #0x400
|
|
beq _022F1D10
|
|
mov r0, #0
|
|
mov r1, #1
|
|
strb r1, [sp, #0xb6]
|
|
strb r0, [sp, #0xb7]
|
|
strb r0, [sp, #0xb8]
|
|
strb r0, [sp, #0xb9]
|
|
strb r0, [sp, #0xba]
|
|
b _022F2970
|
|
_022F1D10:
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
beq _022F1D84
|
|
mov r0, r6
|
|
add r1, sp, #0xcc
|
|
bl GetEntityTouchscreenArea
|
|
ldr r0, [sp, #0xd4]
|
|
ldr r1, [sp, #0xcc]
|
|
ldr r2, [sp, #0xd8]
|
|
ldr r3, [sp, #0xd0]
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r2, r2, lsl #0x10
|
|
mov r3, r3, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, asr #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r3, r3, asr #0x10
|
|
bl CheckTouchscreenArea
|
|
cmp r0, #0
|
|
beq _022F1D84
|
|
mov r0, #0
|
|
mov r1, #1
|
|
strb r1, [sp, #0xb6]
|
|
strb r0, [sp, #0xb7]
|
|
strb r0, [sp, #0xb8]
|
|
strb r0, [sp, #0xb9]
|
|
strb r0, [sp, #0xba]
|
|
b _022F2970
|
|
_022F1D84:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0, #6]
|
|
tst r0, #2
|
|
beq _022F1DB0
|
|
mov r1, #1
|
|
mov r0, #0
|
|
strb r1, [sp, #0xb6]
|
|
strb r0, [sp, #0xb7]
|
|
strb r0, [sp, #0xb8]
|
|
strb r1, [sp, #0xb9]
|
|
b _022F2970
|
|
_022F1DB0:
|
|
ldr r1, [sp, #0x6c]
|
|
ldr r0, _022F1E00 ; =0x00000708
|
|
cmp r1, r0
|
|
blt _022F1E04
|
|
mov r1, #1
|
|
mov r0, #0
|
|
strb r1, [sp, #0xb6]
|
|
strb r1, [sp, #0xb7]
|
|
strb r0, [sp, #0xb8]
|
|
strb r0, [sp, #0xb9]
|
|
b _022F2970
|
|
.align 2, 0
|
|
_022F1DDC: .word DUNGEON_PTR
|
|
_022F1DE0: .word DIRECTIONS_XY
|
|
_022F1DE4: .word ov29_0237C9A4
|
|
_022F1DE8: .word 0x00000BA3 + SET_LEADER_ACTION_DATA_OFFSET
|
|
_022F1DEC: .word ov29_0237C6A4
|
|
_022F1DF0: .word ov29_0237C694
|
|
_022F1DF4: .word 0x00000B9A + SET_LEADER_ACTION_DATA_OFFSET
|
|
_022F1DF8: .word 0x00000B9B + SET_LEADER_ACTION_DATA_OFFSET
|
|
_022F1DFC: .word 0x00000B9C + SET_LEADER_ACTION_DATA_OFFSET
|
|
_022F1E00: .word 0x00000708
|
|
_022F1E04:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #0x800
|
|
bne _022F1E3C
|
|
tst r0, #8
|
|
cmpeq sl, #0
|
|
bne _022F1E3C
|
|
ldrb r0, [r5, #0x35]
|
|
cmp r0, #0
|
|
beq _022F1E3C
|
|
bl HideTileGrid
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r1, #0
|
|
strb r1, [r0, #2]
|
|
_022F1E3C:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #0x200
|
|
beq _022F1E90
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #2
|
|
beq _022F1E90
|
|
bl IsTextLogOnTopScreen
|
|
mov r0, #4
|
|
bl PlaySeVolumeWrapper
|
|
mov r0, #0
|
|
mov r1, #1
|
|
bl OpenMessageLog
|
|
bl IsTextLogOnTopScreen
|
|
cmp r0, #0
|
|
beq _022F1E88
|
|
bl ov29_0234BB38
|
|
bl ov29_022E81F8
|
|
_022F1E88:
|
|
bl ov29_022E0B44
|
|
bl sub_02006B70
|
|
_022F1E90:
|
|
mov r0, #0
|
|
str r0, [sp, #0x44]
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #0x100
|
|
beq _022F1ECC
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #1]
|
|
cmp r0, #0
|
|
ldreq r0, _022F1DE4 ; =ov29_0237C9A4
|
|
moveq r1, #0
|
|
streqh r1, [r0, #4]
|
|
mov r1, #1
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
b _022F1ED4
|
|
_022F1ECC:
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r1, #0
|
|
_022F1ED4:
|
|
strb r1, [r0, #1]
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
mov r8, #0
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #0x800
|
|
bne _022F1EF4
|
|
tst r0, #8
|
|
beq _022F1EF8
|
|
_022F1EF4:
|
|
mov r8, #1
|
|
_022F1EF8:
|
|
cmp sl, #0
|
|
beq _022F1F68
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #2]
|
|
cmp r0, #0
|
|
bne _022F1F68
|
|
mov r0, r6
|
|
add r1, sp, #0xbc
|
|
bl GetEntityTouchscreenArea
|
|
ldr r0, _022F1DEC ; =ov29_0237C6A4
|
|
ldrh r0, [r0]
|
|
tst r0, #0x100
|
|
beq _022F1F68
|
|
ldr r0, [sp, #0xc4]
|
|
ldr r1, [sp, #0xbc]
|
|
ldr r2, [sp, #0xc8]
|
|
ldr r3, [sp, #0xc0]
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r2, r2, lsl #0x10
|
|
mov r3, r3, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, asr #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r3, r3, asr #0x10
|
|
bl CheckTouchscreenArea
|
|
cmp r0, #0
|
|
movne r8, #1
|
|
_022F1F68:
|
|
cmp r8, #0
|
|
beq _022F20B8
|
|
ldr r0, [r6, #0xb4]
|
|
str r0, [sp, #0x10]
|
|
ldrb r0, [r0, #0xf1]
|
|
cmp r0, #2
|
|
beq _022F2098
|
|
mov r0, r6
|
|
mov r1, #1
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
bne _022F2098
|
|
mov fp, #0
|
|
b _022F2090
|
|
_022F1FA0:
|
|
mov r0, #0
|
|
str r0, [sp, #0x18]
|
|
ldr r0, [sp, #0x10]
|
|
ldrb r1, [r0, #0x4c]
|
|
mov r0, #1
|
|
str r0, [sp, #0x1c]
|
|
add r8, r1, #1
|
|
b _022F204C
|
|
_022F1FC0:
|
|
and r8, r8, #7
|
|
ldr r1, _022F1DE0 ; =DIRECTIONS_XY
|
|
mov r2, r8, lsl #2
|
|
ldrsh r3, [r1, r2]
|
|
ldr r2, _022F1DE0 ; =DIRECTIONS_XY
|
|
ldrsh r0, [r6, #4]
|
|
add r2, r2, r8, lsl #2
|
|
ldrsh r1, [r6, #6]
|
|
ldrsh r2, [r2, #2]
|
|
add r0, r0, r3
|
|
add r1, r1, r2
|
|
bl GetTile
|
|
ldr r1, [r0, #0xc]
|
|
cmp r1, #0
|
|
beq _022F203C
|
|
ldr r0, [r1]
|
|
cmp r0, #1
|
|
bne _022F203C
|
|
ldr r0, [r1, #0xb4]
|
|
str r0, [sp, #0xc]
|
|
mov r0, r6
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
beq _022F203C
|
|
cmp fp, #0
|
|
ldreq r0, [sp, #0xc]
|
|
ldreqb r0, [r0, #6]
|
|
cmpeq r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x18]
|
|
bne _022F2058
|
|
_022F203C:
|
|
ldr r0, [sp, #0x1c]
|
|
add r8, r8, #1
|
|
add r0, r0, #1
|
|
str r0, [sp, #0x1c]
|
|
_022F204C:
|
|
ldr r0, [sp, #0x1c]
|
|
cmp r0, #8
|
|
blt _022F1FC0
|
|
_022F2058:
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
beq _022F208C
|
|
and r2, r8, #7
|
|
ldr r1, [r6, #0xb4]
|
|
mov r0, r6
|
|
strb r2, [r1, #0x4c]
|
|
bl GetIdleAnimationId
|
|
mov r2, r8
|
|
mov r1, r0
|
|
mov r0, r6
|
|
bl ChangeMonsterAnimation
|
|
b _022F2098
|
|
_022F208C:
|
|
add fp, fp, #1
|
|
_022F2090:
|
|
cmp fp, #1
|
|
blt _022F1FA0
|
|
_022F2098:
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r1, #1
|
|
strb r1, [r0, #2]
|
|
ldrb r0, [sb, #0x4c]
|
|
strb r0, [r5, #0x36]
|
|
mov r0, #0xff
|
|
strb r0, [r5, #0x37]
|
|
bl ov29_022E0B44
|
|
_022F20B8:
|
|
ldr r0, [sp, #0x38]
|
|
cmp r0, #0
|
|
bne _022F20E4
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #0x200
|
|
beq _022F20EC
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #0x100
|
|
beq _022F20EC
|
|
_022F20E4:
|
|
mov r0, #1
|
|
str r0, [sp, #0x44]
|
|
_022F20EC:
|
|
ldr r0, [sp, #0x44]
|
|
cmp r0, #0
|
|
beq _022F2118
|
|
mov r0, r6
|
|
bl MonsterHasEmbargoStatus
|
|
cmp r0, #0
|
|
beq _022F2118
|
|
mov r0, r6
|
|
bl LogItemBlockedByEmbargo
|
|
mov r0, #0
|
|
str r0, [sp, #0x44]
|
|
_022F2118:
|
|
ldr r0, [sp, #0x44]
|
|
cmp r0, #0
|
|
beq _022F2180
|
|
bl GetEquippedThrowableItem
|
|
movs fp, r0
|
|
bmi _022F2180
|
|
mov r8, #1
|
|
bl GetCheckDirectionOption
|
|
cmp r0, #0
|
|
beq _022F2150
|
|
mov r0, r6
|
|
bl ov29_022F0C1C
|
|
cmp r0, #0
|
|
moveq r8, #0
|
|
_022F2150:
|
|
cmp r8, #0
|
|
beq _022F2970
|
|
mov r0, #0xb
|
|
bl SetLeaderActionFields
|
|
add r0, fp, #1
|
|
strb r0, [sb, #0x4e]
|
|
mov r0, #0
|
|
strh r0, [sb, #0x50]
|
|
strh r0, [sb, #0x52]
|
|
ldrh r0, [sb, #0x4a]
|
|
cmp r0, #0
|
|
bne _022F2970
|
|
_022F2180:
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x19a]
|
|
#else
|
|
ldrb r0, [r0, #0x23e]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _022F21B4
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #4
|
|
beq _022F21B4
|
|
mov r0, #0
|
|
bl ov29_022F0C98
|
|
mov sl, #0
|
|
_022F21B4:
|
|
strh r4, [sp, #0xb2]
|
|
strh r4, [sp, #0xb4]
|
|
mov r0, #0
|
|
str r0, [sp, #0x3c]
|
|
str r0, [sp, #0x40]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r1, r0, #0x100
|
|
ldrsh r3, [r1, #0xd8]
|
|
cmp r3, #0
|
|
blt _022F2210
|
|
ldrsh r2, [r6, #4]
|
|
cmp r2, r3
|
|
ldreqsh r1, [r1, #0xda]
|
|
ldreqsh r2, [r6, #6]
|
|
cmpeq r2, r1
|
|
moveq r7, r4
|
|
beq _022F23C4
|
|
add r1, r0, #0x1d8
|
|
mov r0, r6
|
|
bl ov29_022F40B8
|
|
mov r7, r0
|
|
b _022F23C4
|
|
_022F2210:
|
|
ldr r1, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r1, [r1, #2]
|
|
cmp r1, #0
|
|
bne _022F2324
|
|
ldr r1, [sp, #0x58]
|
|
cmp r1, #0
|
|
cmpeq sl, #0
|
|
ldreq r1, [sp, #0x50]
|
|
cmpeq r1, #0
|
|
beq _022F2324
|
|
cmp sl, #0
|
|
beq _022F225C
|
|
mov r0, r6
|
|
add r1, sp, #0x9e
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
mov r7, r0
|
|
b _022F22A8
|
|
_022F225C:
|
|
ldr r0, [sp, #0x58]
|
|
cmp r0, #0
|
|
beq _022F2284
|
|
mov r0, r6
|
|
add r1, sp, #0x9e
|
|
mov r2, #0x66
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
mov r7, r0
|
|
b _022F22A8
|
|
_022F2284:
|
|
ldr r0, [sp, #0x50]
|
|
cmp r0, #0
|
|
beq _022F22A8
|
|
mov r0, r6
|
|
add r1, sp, #0x9e
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
mov r7, r0
|
|
_022F22A8:
|
|
cmp r7, #0
|
|
blt _022F23C4
|
|
ldrsh r1, [r6, #4]
|
|
ldrsh r0, [sp, #0x9e]
|
|
cmp r1, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0xa0]
|
|
cmpeq r1, r0
|
|
beq _022F231C
|
|
mov r0, r6
|
|
add r1, sp, #0x9e
|
|
bl ov29_022F426C
|
|
cmp r0, #0
|
|
beq _022F23C4
|
|
mov r0, r6
|
|
add r1, sp, #0x9e
|
|
bl ov29_022F40B8
|
|
ldr r1, [sp, #0x50]
|
|
mov r7, r0
|
|
mov r0, #1
|
|
str r0, [sp, #0x40]
|
|
cmp r1, #0
|
|
ldrh r1, [sp, #0x9e]
|
|
ldrh r0, [sp, #0xa0]
|
|
strh r1, [sp, #0xb2]
|
|
strh r0, [sp, #0xb4]
|
|
movne r0, #1
|
|
strne r0, [sp, #0x3c]
|
|
b _022F23C4
|
|
_022F231C:
|
|
ldrb r7, [sb, #0x4c]
|
|
b _022F23C4
|
|
_022F2324:
|
|
ldrb r0, [r0, #0x78c]
|
|
cmp r0, #0
|
|
beq _022F234C
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #1]
|
|
cmp r0, #0
|
|
ldreq r0, _022F1DF0 ; =ov29_0237C694
|
|
ldreqh r1, [r0, #2]
|
|
moveq r2, r1
|
|
beq _022F2368
|
|
_022F234C:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r1, [r0]
|
|
ldrb r0, [r5, #0x35]
|
|
cmp r0, #0
|
|
ldrne r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrneh r2, [r0, #2]
|
|
moveq r2, r1
|
|
_022F2368:
|
|
and r0, r1, #0xf0
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r0, lsr #0x10
|
|
mov r7, r4
|
|
cmp r1, #0x50
|
|
moveq r7, #3
|
|
and r0, r2, #0xf0
|
|
cmp r1, #0x60
|
|
moveq r7, #5
|
|
mov r0, r0, lsl #0x10
|
|
cmp r1, #0x90
|
|
moveq r7, #1
|
|
cmp r1, #0xa0
|
|
mov r2, r0, lsr #0x10
|
|
moveq r7, #7
|
|
cmp r2, #0x40
|
|
moveq r7, #4
|
|
cmp r2, #0x80
|
|
moveq r7, #0
|
|
cmp r2, #0x10
|
|
moveq r7, #2
|
|
cmp r2, #0x20
|
|
moveq r7, #6
|
|
_022F23C4:
|
|
ldr r0, [sp, #0x5c]
|
|
cmp r0, #0
|
|
bne _022F243C
|
|
ldr r0, [sp, #0x54]
|
|
cmp r0, #0
|
|
beq _022F243C
|
|
mov r0, r6
|
|
add r1, sp, #0x9a
|
|
mov r2, #2
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
movs r7, r0
|
|
bmi _022F243C
|
|
ldrsh r1, [r6, #4]
|
|
ldrsh r0, [sp, #0x9a]
|
|
cmp r1, r0
|
|
ldreqsh r1, [r6, #6]
|
|
ldreqsh r0, [sp, #0x9c]
|
|
cmpeq r1, r0
|
|
beq _022F243C
|
|
strb r7, [sb, #0x4c]
|
|
mov r0, #1
|
|
str r0, [sp, #0x3c]
|
|
ldrb r0, [r5, #0x35]
|
|
cmp r0, #0
|
|
beq _022F243C
|
|
bl HideTileGrid
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r1, #0
|
|
strb r1, [r0, #2]
|
|
_022F243C:
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
cmp sl, #0
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xdc]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xde]
|
|
ldrne r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrneb r0, [r0, #2]
|
|
cmpne r0, #0
|
|
beq _022F248C
|
|
mov r0, r6
|
|
add r1, sp, #0x96
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
mov r7, r0
|
|
strb r7, [r5, #0x36]
|
|
_022F248C:
|
|
cmp r7, #0
|
|
blt _022F2944
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #1]
|
|
cmp r0, #0
|
|
beq _022F24AC
|
|
tst r7, #1
|
|
beq _022F2964
|
|
_022F24AC:
|
|
ldrb r0, [sb, #0x4c]
|
|
cmp r0, r7
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
str r0, [sp, #0x28]
|
|
and r0, r7, #7
|
|
strb r0, [sb, #0x4c]
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
ldrb r0, [r0, #2]
|
|
cmp r0, #0
|
|
beq _022F251C
|
|
mov r0, r6
|
|
strb r7, [r5, #0x36]
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
mov r2, r7
|
|
mov r0, r6
|
|
bl ChangeMonsterAnimation
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xd8]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xda]
|
|
b _022F2964
|
|
_022F251C:
|
|
mov r8, #0
|
|
mov r0, r8
|
|
str r0, [sp, #0x24]
|
|
add r1, sp, #0x90
|
|
bl GetPressedButtons
|
|
ldr fp, [r6, #0xb4]
|
|
ldr r1, _022F1DE0 ; =DIRECTIONS_XY
|
|
ldrb r3, [fp, #0x4c]
|
|
ldrsh r2, [r6, #4]
|
|
ldrsh r0, [r6, #6]
|
|
mov sl, r3, lsl #2
|
|
ldrsh r1, [r1, sl]
|
|
ldr sl, _022F1DE0 ; =DIRECTIONS_XY
|
|
add r3, sl, r3, lsl #2
|
|
add r1, r2, r1
|
|
ldrsh r3, [r3, #2]
|
|
mov r1, r1, lsl #0x10
|
|
add r2, r0, r3
|
|
mov r0, r1, asr #0x10
|
|
mov r1, r2, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
bl GetTile
|
|
ldr r0, [r0, #0xc]
|
|
str r0, [sp, #0x14]
|
|
cmp r0, #0
|
|
moveq r0, r8
|
|
beq _022F2748
|
|
ldr r0, [r0]
|
|
cmp r0, #1
|
|
movne r0, r8
|
|
bne _022F2748
|
|
ldr r0, [sp, #0x14]
|
|
ldr sl, [r0, #0xb4]
|
|
ldrb r0, [sl, #6]
|
|
cmp r0, #0
|
|
ldrneb r0, [sl, #9]
|
|
cmpne r0, #1
|
|
cmpne r0, #2
|
|
beq _022F25D8
|
|
mov r0, sl
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
bne _022F25D8
|
|
ldrb r0, [sl, #0xbc]
|
|
cmp r0, #7
|
|
movne r0, r8
|
|
bne _022F2748
|
|
_022F25D8:
|
|
mov r0, fp
|
|
bl ov29_022F35E0
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _022F2748
|
|
mov r0, sl
|
|
bl ov29_022F35E0
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _022F2748
|
|
ldrb r0, [fp, #0xd0]
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
beq _022F2748
|
|
ldrb r0, [sl, #0xd0]
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
beq _022F2748
|
|
ldrb r0, [sl, #0xbd]
|
|
cmp r0, #0
|
|
cmpne r0, #2
|
|
cmpne r0, #4
|
|
movne r0, #0
|
|
bne _022F2748
|
|
ldrb r0, [fp, #0xbd]
|
|
cmp r0, #0
|
|
cmpne r0, #2
|
|
cmpne r0, #4
|
|
movne r0, #0
|
|
bne _022F2748
|
|
ldr r0, [sp, #0x14]
|
|
mov r1, #0
|
|
bl IsChargingAnyTwoTurnMove
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _022F2748
|
|
ldrb r1, [fp, #0x4c]
|
|
mov r0, r6
|
|
bl ov29_0230105C
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _022F2748
|
|
ldr r0, [sp, #0x14]
|
|
add r1, r6, #4
|
|
bl ov29_022FF958
|
|
cmp r0, #0
|
|
beq _022F26B8
|
|
mov r0, #0
|
|
ldr r1, _022F1DE8 ; =0x00000BA3
|
|
mov r2, #1
|
|
mov r3, r0
|
|
str r0, [sp]
|
|
bl YesNoMenu
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
beq _022F2748
|
|
_022F26B8:
|
|
add r0, fp, #0x4a
|
|
mov r1, #2
|
|
bl SetMonsterActionFields
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
mov r1, #2
|
|
ldrh r0, [r0]
|
|
tst r0, #2
|
|
movne r0, #0
|
|
moveq r0, #1
|
|
strb r0, [fp, #0x4e]
|
|
ldrh r2, [fp]
|
|
add r0, sl, #0x4a
|
|
orr r2, r2, #0x8000
|
|
strh r2, [fp]
|
|
bl SetMonsterActionFields
|
|
mov r0, #0
|
|
strb r0, [sl, #0x4e]
|
|
ldrb r1, [fp, #0x4c]
|
|
add r2, sl, #0x100
|
|
mov r0, #1
|
|
add r1, r1, #4
|
|
and r1, r1, #7
|
|
strb r1, [sl, #0x4c]
|
|
ldrh r1, [sl]
|
|
orr r1, r1, #0x8000
|
|
strh r1, [sl]
|
|
ldr r1, [sp, #0x14]
|
|
ldrsh r1, [r1, #4]
|
|
strh r1, [r2, #0x7e + SET_LEADER_ACTION_OFFSET]
|
|
ldr r1, [sp, #0x14]
|
|
ldrsh r1, [r1, #6]
|
|
strh r1, [r2, #0x80 + SET_LEADER_ACTION_OFFSET]
|
|
ldr r1, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r2, [r1]
|
|
mov r1, r0
|
|
strb r1, [r2, #0x10]
|
|
_022F2748:
|
|
cmp r0, #0
|
|
bne _022F2970
|
|
ldrb r0, [sb, #0xc4]
|
|
cmp r0, #2
|
|
ldreq r0, [sp, #0x7c]
|
|
streq r0, [sp, #0x24]
|
|
orreq r0, r8, #1
|
|
andeq r8, r0, #0xff
|
|
beq _022F27C8
|
|
cmp r0, #7
|
|
ldreq r0, [sp, #0x80]
|
|
streq r0, [sp, #0x24]
|
|
orreq r0, r8, #1
|
|
andeq r8, r0, #0xff
|
|
beq _022F27C8
|
|
cmp r0, #5
|
|
#ifdef JAPAN
|
|
ldreq r0, [sp, #0x84]
|
|
#else
|
|
moveq r0, #0xba0
|
|
#endif
|
|
streq r0, [sp, #0x24]
|
|
orreq r0, r8, #1
|
|
andeq r8, r0, #0xff
|
|
beq _022F27C8
|
|
cmp r0, #3
|
|
#ifdef JAPAN
|
|
moveq r0, #0x8e0
|
|
#else
|
|
ldreq r0, [sp, #0x84]
|
|
#endif
|
|
streq r0, [sp, #0x24]
|
|
orreq r0, r8, #1
|
|
andeq r8, r0, #0xff
|
|
beq _022F27C8
|
|
cmp r0, #4
|
|
ldreq r0, [sp, #0x88]
|
|
streq r0, [sp, #0x24]
|
|
orreq r0, r8, #1
|
|
andeq r8, r0, #0xff
|
|
_022F27C8:
|
|
mov r0, r6
|
|
mov r1, r7
|
|
bl CanMonsterMoveInDirection
|
|
cmp r0, #0
|
|
orreq r0, r8, #2
|
|
andeq r8, r0, #0xff
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
beq _022F2804
|
|
mov r0, r6
|
|
bl GetIdleAnimationId
|
|
mov r2, r7
|
|
mov r1, r0
|
|
mov r0, r6
|
|
bl ChangeMonsterAnimation
|
|
_022F2804:
|
|
tst r8, #2
|
|
bne _022F2910
|
|
tst r8, #1
|
|
beq _022F2864
|
|
ldr r0, [sp, #0x24]
|
|
cmp r0, #0
|
|
beq _022F282C
|
|
ldr r1, [sp, #0x24]
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022F282C:
|
|
mov r0, #1
|
|
bl SetLeaderActionFields
|
|
ldr r1, _022F1DDC ; =DUNGEON_PTR
|
|
mov r3, #1
|
|
ldr r0, [r1]
|
|
sub r2, r3, #2
|
|
strb r3, [r0, #0x78e]
|
|
ldr r0, [r1]
|
|
add r0, r0, #0x100
|
|
strh r2, [r0, #0xd8]
|
|
ldr r0, [r1]
|
|
add r0, r0, #0x100
|
|
strh r2, [r0, #0xda]
|
|
b _022F2970
|
|
_022F2864:
|
|
mov r0, #2
|
|
bl SetLeaderActionFields
|
|
ldr r0, [sp, #0x40]
|
|
cmp r0, #0
|
|
beq _022F289C
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldrh r2, [sp, #0xb2]
|
|
ldr r1, [r0]
|
|
mov r0, #7
|
|
add r1, r1, #0x100
|
|
strh r2, [r1, #0xd8]
|
|
ldrh r2, [sp, #0xb4]
|
|
strh r2, [r1, #0xda]
|
|
bl PlaySeVolumeWrapper
|
|
_022F289C:
|
|
ldr r0, _022F1DF0 ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #2
|
|
ldreq r0, [sp, #0x3c]
|
|
cmpeq r0, #0
|
|
beq _022F2904
|
|
add r0, sb, #0x100
|
|
ldrh r1, [r0, #0x46 + SET_LEADER_ACTION_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + SET_LEADER_ACTION_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
beq _022F2904
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0xd0]
|
|
cmp r0, #2
|
|
ldrne r0, _022F1DDC ; =DUNGEON_PTR
|
|
movne r1, #1
|
|
ldrne r0, [r0]
|
|
strneb r1, [r0, #0x78b]
|
|
mov r0, #0
|
|
strb r0, [sb, #0x4e]
|
|
b _022F2970
|
|
_022F2904:
|
|
mov r0, #1
|
|
strb r0, [sb, #0x4e]
|
|
b _022F2970
|
|
_022F2910:
|
|
tst r8, #1
|
|
beq _022F2920
|
|
mov r0, #0x23
|
|
bl ov29_022EA3B4
|
|
_022F2920:
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xd8]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xda]
|
|
b _022F2964
|
|
_022F2944:
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xd8]
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x100
|
|
strh r4, [r0, #0xda]
|
|
_022F2964:
|
|
mov r0, #0xf
|
|
bl AdvanceFrame
|
|
b _022F110C
|
|
_022F2970:
|
|
ldrb r0, [r5, #0x35]
|
|
cmp r0, #0
|
|
beq _022F2980
|
|
bl HideTileGrid
|
|
_022F2980:
|
|
ldrh r0, [sb, #0x4a]
|
|
cmp r0, #0x2d
|
|
cmpne r0, #0x13
|
|
bne _022F29B0
|
|
mov r0, r6
|
|
bl ov29_022F59C4
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _022F2B34
|
|
mov r0, #0
|
|
bl SetLeaderActionFields
|
|
b _022F1024
|
|
_022F29B0:
|
|
ldrb r0, [sp, #0xb6]
|
|
cmp r0, #0
|
|
bne _022F2A00
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x78c]
|
|
ldrh r0, [sb, #0x4a]
|
|
cmp r0, #0
|
|
beq _022F29F4
|
|
mov r0, r6
|
|
bl ov29_022EB944
|
|
cmp r0, #0
|
|
bne _022F2B34
|
|
mov r0, #0xf
|
|
bl AdvanceFrame
|
|
b _022F2B34
|
|
_022F29F4:
|
|
mov r0, #0xf
|
|
bl AdvanceFrame
|
|
b _022F1024
|
|
_022F2A00:
|
|
mov r0, #0xf
|
|
bl AdvanceFrame
|
|
bl ov29_02346E5C
|
|
mov r0, #0
|
|
bl ov29_0233A248
|
|
mov r0, #1
|
|
mov r1, #0
|
|
bl ov29_022EA428
|
|
ldrb r0, [sp, #0xb9]
|
|
cmp r0, #0
|
|
beq _022F2A70
|
|
bl GetLeader
|
|
mov r1, #1
|
|
bl ShouldMonsterRunAwayAndShowEffect
|
|
cmp r0, #0
|
|
bne _022F2A70
|
|
mov r0, #4
|
|
bl PlaySeVolumeWrapper
|
|
ldrb r0, [sp, #0xb7]
|
|
ldrb r1, [sp, #0xb8]
|
|
mov r2, #1
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bl OpenMenu
|
|
bl sub_02006B70
|
|
b _022F2A9C
|
|
_022F2A70:
|
|
mov r0, #4
|
|
bl PlaySeVolumeWrapper
|
|
ldrb r0, [sp, #0xb7]
|
|
ldrb r1, [sp, #0xb8]
|
|
mov r2, #0
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bl OpenMenu
|
|
bl sub_02006B70
|
|
_022F2A9C:
|
|
bl ov29_022E0B44
|
|
#ifdef EUROPE
|
|
bl ov29_022F2FE4
|
|
#endif
|
|
ldr r0, _022F1DE4 ; =ov29_0237C9A4
|
|
mov r1, #0
|
|
strb r1, [r0, #2]
|
|
strb r1, [r5, #0x35]
|
|
bl HideTileGrid
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
bne _022F2B34
|
|
ldrh r0, [sb, #0x4a]
|
|
cmp r0, #0
|
|
beq _022F2B18
|
|
cmp r0, #0x2b
|
|
bne _022F2AEC
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r2, #1
|
|
ldr r1, [r0]
|
|
strb r2, [r1, #8]
|
|
ldr r0, [r0]
|
|
strb r2, [r0, #7]
|
|
_022F2AEC:
|
|
ldrh r0, [sb, #0x4a]
|
|
cmp r0, #0x2e
|
|
bne _022F2B34
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
mov r3, #1
|
|
ldr r2, [r0]
|
|
mov r1, #0
|
|
strb r3, [r2, #8]
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #7]
|
|
b _022F2B34
|
|
_022F2B18:
|
|
mov r0, #0xf
|
|
bl AdvanceFrame
|
|
ldr r0, _022F1DDC ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #8]
|
|
cmp r0, #0
|
|
beq _022F1024
|
|
_022F2B34:
|
|
add sp, sp, #0xdc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end SetLeaderAction
|
|
|
|
arm_func_start ov29_022F2B3C
|
|
ov29_022F2B3C: ; 0x022F2B3C
|
|
ldrb r1, [r0, #6]
|
|
cmp r1, #0
|
|
beq _022F2B6C
|
|
ldrb r1, [r0, #8]
|
|
cmp r1, #0
|
|
ldreqb r1, [r0, #9]
|
|
cmpeq r1, #0
|
|
bne _022F2B6C
|
|
ldrb r0, [r0, #0xbc]
|
|
cmp r0, #7
|
|
movne r0, #1
|
|
bxne lr
|
|
_022F2B6C:
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end ov29_022F2B3C
|
|
|
|
arm_func_start ov29_022F2B74
|
|
ov29_022F2B74: ; 0x022F2B74
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x18
|
|
ldr r1, _022F2FBC ; =DUNGEON_PTR
|
|
ldr r8, _022F2FC0 ; =ov29_0237C9A4
|
|
ldr r1, [r1]
|
|
ldrb r2, [r8, #1]
|
|
#ifdef JAPAN
|
|
add r1, r1, #0x178
|
|
#else
|
|
add r1, r1, #0x21c
|
|
#endif
|
|
str r0, [sp]
|
|
cmp r2, #0
|
|
add r5, r1, #0x1a000
|
|
beq _022F2D58
|
|
ldr r0, _022F2FC4 ; =0x0000013F
|
|
mov r6, #0x400
|
|
rsb r6, r6, #0
|
|
add r0, r0, #0x9c
|
|
mov r4, #0
|
|
str r0, [sp, #8]
|
|
add r7, r6, #0x200
|
|
_022F2BBC:
|
|
ldr r0, _022F2FC8 ; =ov29_023526D8
|
|
mov r1, #6
|
|
ldrh r2, [sp, #0x10]
|
|
mla r0, r4, r1, r0
|
|
bic r1, r2, #0x100
|
|
strh r1, [sp, #0x10]
|
|
ldrh r2, [sp, #0x10]
|
|
ldrb r1, [r0, #5]
|
|
bic r2, r2, #0x200
|
|
strh r2, [sp, #0x10]
|
|
cmp r1, #0
|
|
ldrh r1, [sp, #0x10]
|
|
movne r2, #0x10
|
|
moveq r2, #0
|
|
bic r1, r1, #0xc00
|
|
strh r1, [sp, #0x10]
|
|
ldrh r1, [sp, #0x10]
|
|
orr r1, r1, #0x400
|
|
strh r1, [sp, #0x10]
|
|
ldrh r1, [sp, #0x10]
|
|
bic r1, r1, #0x1000
|
|
strh r1, [sp, #0x10]
|
|
ldrh r1, [sp, #0x10]
|
|
bic r1, r1, #0x2000
|
|
strh r1, [sp, #0x10]
|
|
ldrh r1, [sp, #0x10]
|
|
orr r1, r1, #0x2000
|
|
strh r1, [sp, #0x10]
|
|
ldrh r1, [sp, #0x10]
|
|
bic r1, r1, #0xc000
|
|
strh r1, [sp, #0x10]
|
|
ldrb r1, [r0, #4]
|
|
cmp r1, #0
|
|
movne r1, #8
|
|
moveq r1, #0
|
|
add r1, r1, r2
|
|
ldrh r3, [sp, #0x12]
|
|
mov sb, r1, lsl #0x1b
|
|
ldrh r1, [sp, #0x16]
|
|
ldrh r2, [sp, #0x14]
|
|
bic r3, r3, #0x3e00
|
|
bic r1, r1, #1
|
|
and r2, r2, r6
|
|
strh r3, [sp, #0x12]
|
|
strh r1, [sp, #0x16]
|
|
strh r2, [sp, #0x14]
|
|
ldrh r1, [sp, #0x12]
|
|
ldrh r3, [sp, #0x14]
|
|
ldrh r2, [sp, #0x16]
|
|
orr r1, r1, sb, lsr #18
|
|
strh r1, [sp, #0x12]
|
|
ldr r1, [sp, #8]
|
|
ldrsh fp, [r0]
|
|
orr r1, r3, r1
|
|
strh r1, [sp, #0x14]
|
|
bic r1, r2, #2
|
|
strh r1, [sp, #0x16]
|
|
ldrh r1, [sp, #0x14]
|
|
ldrh r2, [sp, #0x12]
|
|
ldrsh sb, [r0, #2]
|
|
bic r1, r1, #0xc00
|
|
bic r2, r2, #0xc000
|
|
strh r1, [sp, #0x14]
|
|
strh r2, [sp, #0x12]
|
|
ldrh r2, [sp, #0x14]
|
|
ldrh r0, [sp, #0x12]
|
|
ldrh r1, [sp, #0x16]
|
|
orr r2, r2, #0x800
|
|
strh r2, [sp, #0x14]
|
|
ldrh r2, [sp, #0x14]
|
|
and sl, r0, r7
|
|
ldr r0, _022F2FCC ; =0xFFFF000F
|
|
bic r2, r2, #0xf000
|
|
strh r2, [sp, #0x14]
|
|
ldrsh ip, [r8, #4]
|
|
and r3, r1, r0
|
|
ldr r0, _022F2FD0 ; =_020AFC4C
|
|
add ip, ip, ip, lsr #31
|
|
strh r3, [sp, #0x16]
|
|
mov r3, ip, asr #1
|
|
and r3, r3, #7
|
|
add r3, r3, #0xa
|
|
strh sl, [sp, #0x12]
|
|
mul sl, fp, r3
|
|
mul r3, sb, r3
|
|
add sb, sl, #0x7c
|
|
and sl, sb, r6, lsr #23
|
|
ldrh fp, [sp, #0x12]
|
|
add r3, r3, #0x62
|
|
ldrh sb, [sp, #0x16]
|
|
mov r3, r3, lsl #0x14
|
|
orr sl, fp, sl
|
|
orr r3, sb, r3, lsr #16
|
|
ldr r0, [r0]
|
|
ldr r2, _022F2FC4 ; =0x0000013F
|
|
add r1, sp, #0x10
|
|
strh sl, [sp, #0x12]
|
|
strh r3, [sp, #0x16]
|
|
bl sub_0201B9F8
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _022F2BBC
|
|
b _022F2F7C
|
|
_022F2D58:
|
|
ldrb r0, [r5, #0x35]
|
|
cmp r0, #0
|
|
beq _022F2F7C
|
|
ldrb r3, [r5, #0x36]
|
|
cmp r3, #0
|
|
blt _022F2F7C
|
|
cmp r3, #8
|
|
bge _022F2F7C
|
|
ldrb r0, [r8, #3]
|
|
ldr r2, _022F2FC0 ; =ov29_0237C9A4
|
|
cmp r0, #0
|
|
ldrneb r0, [r8]
|
|
ldrsh r2, [r2, #4]
|
|
cmpne r0, #0
|
|
mov r0, #0xc
|
|
mul r1, r3, r0
|
|
add r2, r2, r2, lsr #31
|
|
ldr r0, _022F2FD4 ; =ov29_023526F0
|
|
mov r2, r2, asr #1
|
|
and r2, r2, #7
|
|
ldr r3, _022F2FD8 ; =ov29_023526F2
|
|
add r7, r2, #0xa
|
|
ldrsh r4, [r0, r1]
|
|
ldrsh r2, [r3, r1]
|
|
movne sl, #3
|
|
moveq sl, #1
|
|
mul r3, r2, r7
|
|
mul r6, r4, r7
|
|
add r7, r6, #0x7c
|
|
cmp sl, #0
|
|
add r8, r3, #0x62
|
|
mov r6, #0
|
|
ble _022F2F7C
|
|
ldr r3, _022F2FDC ; =ov29_023526F4
|
|
mov r4, #0x400
|
|
ldr r2, _022F2FE0 ; =0x000003FF
|
|
ldr r3, [r3, r1]
|
|
add sb, r0, r1
|
|
sub r0, r2, #0x2c0
|
|
rsb r4, r4, #0
|
|
str r0, [sp, #4]
|
|
add r0, r4, #0x200
|
|
and fp, r3, r2
|
|
str r0, [sp, #0xc]
|
|
b _022F2F74
|
|
_022F2E0C:
|
|
ldrh r1, [sp, #0x10]
|
|
ldrb r0, [sb, #9]
|
|
ldrh r3, [sp, #0x12]
|
|
bic r1, r1, #0x100
|
|
strh r1, [sp, #0x10]
|
|
cmp r0, #0
|
|
ldrh r0, [sp, #0x10]
|
|
movne r1, #0x10
|
|
ldrh r2, [sp, #0x14]
|
|
bic r0, r0, #0x200
|
|
strh r0, [sp, #0x10]
|
|
ldrh r0, [sp, #0x10]
|
|
bic r3, r3, #0x3e00
|
|
strh r3, [sp, #0x12]
|
|
bic r0, r0, #0xc00
|
|
strh r0, [sp, #0x10]
|
|
ldrh r0, [sp, #0x10]
|
|
and r2, r2, r4
|
|
strh r2, [sp, #0x14]
|
|
orr r0, r0, #0x400
|
|
strh r0, [sp, #0x10]
|
|
ldrh r0, [sp, #0x10]
|
|
moveq r1, #0
|
|
ldrh r3, [sp, #0x12]
|
|
bic r0, r0, #0x1000
|
|
strh r0, [sp, #0x10]
|
|
ldrh r0, [sp, #0x10]
|
|
ldrh r2, [sp, #0x14]
|
|
bic r0, r0, #0x2000
|
|
strh r0, [sp, #0x10]
|
|
ldrh r0, [sp, #0x10]
|
|
orr r0, r0, #0x2000
|
|
strh r0, [sp, #0x10]
|
|
ldrh r0, [sp, #0x10]
|
|
bic r0, r0, #0xc000
|
|
strh r0, [sp, #0x10]
|
|
ldrb r0, [sb, #8]
|
|
cmp r0, #0
|
|
movne r0, #8
|
|
moveq r0, #0
|
|
add r0, r0, r1
|
|
ldrh r1, [sp, #0x16]
|
|
mov r0, r0, lsl #0x1b
|
|
orr r0, r3, r0, lsr #18
|
|
bic r1, r1, #1
|
|
strh r1, [sp, #0x16]
|
|
strh r0, [sp, #0x12]
|
|
orr r0, r2, fp
|
|
ldrh r2, [sp, #0x12]
|
|
ldrh r1, [sp, #0x16]
|
|
strh r0, [sp, #0x14]
|
|
bic r2, r2, #0xc000
|
|
bic r0, r1, #2
|
|
ldrh r1, [sp, #0x14]
|
|
strh r2, [sp, #0x12]
|
|
strh r0, [sp, #0x16]
|
|
bic r1, r1, #0xc00
|
|
strh r1, [sp, #0x14]
|
|
ldrh r1, [sp, #0x14]
|
|
ldrh r3, [sp, #0x12]
|
|
ldrh r2, [sp, #0x16]
|
|
orr r1, r1, #0x800
|
|
strh r1, [sp, #0x14]
|
|
ldr r1, [sp, #0xc]
|
|
and r0, r7, r4, lsr #23
|
|
and r1, r3, r1
|
|
strh r1, [sp, #0x12]
|
|
ldr r1, _022F2FCC ; =0xFFFF000F
|
|
ldrh r3, [sp, #0x14]
|
|
and r1, r2, r1
|
|
ldrh r2, [sp, #0x12]
|
|
strh r1, [sp, #0x16]
|
|
bic r3, r3, #0xf000
|
|
orr r0, r2, r0
|
|
strh r0, [sp, #0x12]
|
|
ldrh r1, [sp, #0x16]
|
|
mov r0, r8, lsl #0x14
|
|
ldr r2, [sp, #4]
|
|
orr r0, r1, r0, lsr #16
|
|
strh r0, [sp, #0x16]
|
|
ldr r0, _022F2FD0 ; =_020AFC4C
|
|
add r1, sp, #0x10
|
|
ldr r0, [r0]
|
|
strh r3, [sp, #0x14]
|
|
bl sub_0201B9F8
|
|
ldrsh r1, [sb]
|
|
ldrsh r0, [sb, #2]
|
|
add r6, r6, #1
|
|
add r7, r7, r1, lsl #2
|
|
add r8, r8, r0, lsl #2
|
|
_022F2F74:
|
|
cmp r6, sl
|
|
blt _022F2E0C
|
|
_022F2F7C:
|
|
ldr r0, _022F2FC0 ; =ov29_0237C9A4
|
|
ldrb r1, [r0, #2]
|
|
cmp r1, #0
|
|
ldrneb r2, [r5, #0x36]
|
|
ldrneb r1, [r5, #0x37]
|
|
cmpne r1, r2
|
|
beq _022F2FB4
|
|
strb r2, [r5, #0x37]
|
|
ldrb r3, [r0, #2]
|
|
ldr r0, [sp]
|
|
ldrb r1, [r5, #0x36]
|
|
add r0, r0, #4
|
|
mov r2, #0
|
|
bl DrawTileGrid
|
|
_022F2FB4:
|
|
add sp, sp, #0x18
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F2FBC: .word DUNGEON_PTR
|
|
_022F2FC0: .word ov29_0237C9A4
|
|
_022F2FC4: .word 0x0000013F
|
|
_022F2FC8: .word ov29_023526D8
|
|
_022F2FCC: .word 0xFFFF000F
|
|
_022F2FD0: .word _020AFC4C
|
|
_022F2FD4: .word ov29_023526F0
|
|
_022F2FD8: .word ov29_023526F2
|
|
_022F2FDC: .word ov29_023526F4
|
|
_022F2FE0: .word 0x000003FF
|
|
arm_func_end ov29_022F2B74
|
|
|
|
arm_func_start ov29_022F2FE4
|
|
ov29_022F2FE4: ; 0x022F2FE4
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r1, _022F3084 ; =DUNGEON_PTR
|
|
ldr r2, _022F3088 ; =ov29_0237C694
|
|
ldr r6, [r1]
|
|
mov r4, #0
|
|
ldrb r5, [r6, #0x78c]
|
|
ldrb r0, [r6, #0x78b]
|
|
ldrh r7, [r2]
|
|
sub r3, r4, #1
|
|
orr r0, r5, r0
|
|
strb r0, [r6, #0x78c]
|
|
ldr r0, [r1]
|
|
and r5, r7, #0xf0
|
|
strb r4, [r0, #0x78b]
|
|
ldr r0, [r1]
|
|
mov r8, #0x54
|
|
add r0, r0, #0x100
|
|
strh r3, [r0, #0xd8]
|
|
ldr r0, [r1]
|
|
ldr r7, _022F3088 ; =ov29_0237C694
|
|
add r0, r0, #0x100
|
|
strh r3, [r0, #0xda]
|
|
ldrh r0, [r2]
|
|
ldr r6, _022F3084 ; =DUNGEON_PTR
|
|
tst r0, #0x100
|
|
movne r4, #1
|
|
b _022F3070
|
|
_022F3050:
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldrh r0, [r7]
|
|
and r0, r0, #0xf0
|
|
tst r5, r0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
mov r0, r8
|
|
bl AdvanceFrame
|
|
_022F3070:
|
|
ldr r0, [r6]
|
|
ldrb r0, [r0, #0x78c]
|
|
cmp r0, #0
|
|
bne _022F3050
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022F3084: .word DUNGEON_PTR
|
|
_022F3088: .word ov29_0237C694
|
|
arm_func_end ov29_022F2FE4
|
|
|
|
arm_func_start ShouldLeaderKeepRunning
|
|
ShouldLeaderKeepRunning: ; 0x022F308C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x68
|
|
ldr r0, _022F35D4 ; =DUNGEON_PTR
|
|
ldr r5, [r0]
|
|
bl GetLeader
|
|
mov r4, r0
|
|
ldrsh sl, [r4, #4]
|
|
ldrsh sb, [r4, #6]
|
|
ldr r2, [r4, #0xb4]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
ldrb r7, [r2, #0x4c]
|
|
bl GetTile
|
|
ldrb r1, [r5, #0x78b]
|
|
ldr r3, _022F35D8 ; =DIRECTIONS_XY
|
|
mov r5, r7, lsl #2
|
|
ldr r2, _022F35DC ; =DIRECTIONS_XY + 2
|
|
ldrsh r6, [r3, r5]
|
|
mov r8, r0
|
|
cmp r1, #0
|
|
ldrsh r5, [r2, r5]
|
|
moveq r0, #0
|
|
beq _022F35CC
|
|
ldr r0, [r8, #0x10]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
add r1, sp, #0x4c
|
|
mov r0, r4
|
|
strh sl, [sp, #0x4c]
|
|
strh sb, [sp, #0x4e]
|
|
bl ov29_022FFA94
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
mov r0, r4
|
|
mov r1, r7
|
|
bl ov29_02300FCC
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _022F35CC
|
|
ldrb r0, [r8, #7]
|
|
str r0, [sp, #0x10]
|
|
cmp r0, #0xff
|
|
bne _022F3160
|
|
add r0, sl, r6
|
|
add r1, sb, r5
|
|
bl GetTile
|
|
ldrb r0, [r0, #7]
|
|
cmp r0, #0xff
|
|
beq _022F3170
|
|
mov r0, #0
|
|
b _022F35CC
|
|
_022F3160:
|
|
ldrh r0, [r8]
|
|
tst r0, #8
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
_022F3170:
|
|
mvn r6, #0
|
|
ldr r5, _022F35D8 ; =DIRECTIONS_XY
|
|
b _022F31C4
|
|
_022F317C:
|
|
add r0, r7, r6
|
|
mov r0, r0, lsl #0x1d
|
|
mov r1, r0, lsr #0x1b
|
|
add r0, r5, r0, lsr #27
|
|
ldrsh r2, [r5, r1]
|
|
ldrsh r1, [r0, #2]
|
|
add r0, sl, r2
|
|
add r1, sb, r1
|
|
bl GetTile
|
|
ldr r1, [r0, #0xc]
|
|
cmp r1, #0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
ldrh r0, [r0]
|
|
tst r0, #0x200
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
add r6, r6, #1
|
|
_022F31C4:
|
|
cmp r6, #1
|
|
ble _022F317C
|
|
add r1, r7, #4
|
|
add r0, r7, #5
|
|
mov r1, r1, lsl #0x1d
|
|
mov r0, r0, lsl #0x1d
|
|
add r2, r7, #3
|
|
mov r2, r2, lsl #0x1d
|
|
ldr r6, _022F35D8 ; =DIRECTIONS_XY
|
|
mov r5, r1, lsr #0x1b
|
|
mov fp, r0, lsr #0x1b
|
|
ldrsh r1, [r6, r5]
|
|
ldr r8, _022F35DC ; =DIRECTIONS_XY + 2
|
|
mov r3, r2, lsr #0x1b
|
|
add r1, sl, r1
|
|
ldrsh r2, [r6, r3]
|
|
ldrsh r0, [r6, fp]
|
|
ldrsh r6, [r8, r3]
|
|
add r2, sl, r2
|
|
ldrsh r5, [r8, r5]
|
|
ldrsh r3, [r8, fp]
|
|
add r8, sl, r0
|
|
add r0, sb, r5
|
|
str r1, [sp, #8]
|
|
str r0, [sp, #4]
|
|
ldr r0, [sp, #8]
|
|
add r6, sb, r6
|
|
str r0, [sp, #0x60]
|
|
ldr r0, [sp, #4]
|
|
add r1, sb, r3
|
|
str r0, [sp, #0x54]
|
|
and r0, r7, #1
|
|
str r2, [sp, #0x5c]
|
|
str r8, [sp, #0x64]
|
|
str r6, [sp, #0x50]
|
|
str r1, [sp, #0x58]
|
|
str r0, [sp]
|
|
mvn r5, #0
|
|
b _022F33E4
|
|
_022F3260:
|
|
add r8, sl, r5
|
|
mov r0, r8, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mvn r6, #0
|
|
str r0, [sp, #0x14]
|
|
b _022F33D8
|
|
_022F3278:
|
|
add fp, sb, r6
|
|
mov r0, r8
|
|
mov r1, fp
|
|
bl GetTile
|
|
ldr r1, [r0, #0x10]
|
|
str r0, [sp, #0xc]
|
|
cmp r1, #0
|
|
beq _022F32DC
|
|
mov r0, #0
|
|
b _022F32C0
|
|
_022F32A0:
|
|
add r2, sp, #0x5c
|
|
ldr r2, [r2, r0, lsl #2]
|
|
cmp r8, r2
|
|
addeq r2, sp, #0x50
|
|
ldreq r2, [r2, r0, lsl #2]
|
|
cmpeq fp, r2
|
|
beq _022F32C8
|
|
add r0, r0, #1
|
|
_022F32C0:
|
|
cmp r0, #3
|
|
blt _022F32A0
|
|
_022F32C8:
|
|
cmp r0, #3
|
|
ldreq r0, [r1]
|
|
cmpeq r0, #3
|
|
moveq r0, #0
|
|
beq _022F35CC
|
|
_022F32DC:
|
|
ldr r0, [sp]
|
|
cmp r0, #0
|
|
beq _022F3324
|
|
cmp r1, #0
|
|
beq _022F3368
|
|
ldr r0, [r1]
|
|
cmp r0, #2
|
|
bne _022F3368
|
|
ldrb r0, [r1, #0x20]
|
|
cmp r0, #0
|
|
ldreq r0, _022F35D4 ; =DUNGEON_PTR
|
|
ldreq r0, [r0]
|
|
addeq r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
ldreqb r0, [r0, #0x1a0]
|
|
#else
|
|
ldreqb r0, [r0, #0x244]
|
|
#endif
|
|
cmpeq r0, #0
|
|
beq _022F3368
|
|
mov r0, #0
|
|
b _022F35CC
|
|
_022F3324:
|
|
cmp r5, #0
|
|
cmpne r6, #0
|
|
bne _022F3368
|
|
cmp r1, #0
|
|
beq _022F3368
|
|
ldr r0, [r1]
|
|
cmp r0, #2
|
|
bne _022F3368
|
|
ldrb r0, [r1, #0x20]
|
|
cmp r0, #0
|
|
ldreq r0, _022F35D4 ; =DUNGEON_PTR
|
|
ldreq r0, [r0]
|
|
addeq r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
ldreqb r0, [r0, #0x1a0]
|
|
#else
|
|
ldreqb r0, [r0, #0x244]
|
|
#endif
|
|
cmpeq r0, #0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
_022F3368:
|
|
cmp r5, #0
|
|
cmpne r6, #0
|
|
bne _022F33D4
|
|
cmp r5, #0
|
|
cmpeq r6, #0
|
|
beq _022F33D4
|
|
ldr r0, [sp, #8]
|
|
cmp r0, r8
|
|
ldreq r0, [sp, #4]
|
|
cmpeq r0, fp
|
|
beq _022F33D4
|
|
ldr r0, [sp, #0x14]
|
|
add r1, sp, #0x48
|
|
strh r0, [sp, #0x48]
|
|
mov r0, r4
|
|
strh fp, [sp, #0x4a]
|
|
bl ov29_022FFA94
|
|
cmp r0, #0
|
|
bne _022F33D4
|
|
ldr r0, [sp, #0x10]
|
|
cmp r0, #0xff
|
|
ldrne r0, [sp, #0xc]
|
|
ldrneb r1, [r0, #7]
|
|
ldrne r0, [sp, #0x10]
|
|
cmpne r0, r1
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
_022F33D4:
|
|
add r6, r6, #1
|
|
_022F33D8:
|
|
cmp r6, #1
|
|
ble _022F3278
|
|
add r5, r5, #1
|
|
_022F33E4:
|
|
cmp r5, #1
|
|
ble _022F3260
|
|
ldr r0, [sp]
|
|
cmp r0, #0
|
|
bne _022F35C8
|
|
cmp r7, #0
|
|
cmpne r7, #4
|
|
bne _022F34E8
|
|
sub r3, sl, #1
|
|
sub r2, sb, #1
|
|
add r1, sp, #0x44
|
|
mov r0, r4
|
|
strh r3, [sp, #0x44]
|
|
strh r2, [sp, #0x46]
|
|
bl ov29_022FFA94
|
|
mov r5, r0
|
|
sub r2, sl, #1
|
|
add r1, sp, #0x40
|
|
mov r0, r4
|
|
strh r2, [sp, #0x40]
|
|
strh sb, [sp, #0x42]
|
|
bl ov29_022FFA94
|
|
mov r6, r0
|
|
sub r3, sl, #1
|
|
add r2, sb, #1
|
|
add r1, sp, #0x3c
|
|
mov r0, r4
|
|
strh r3, [sp, #0x3c]
|
|
strh r2, [sp, #0x3e]
|
|
bl ov29_022FFA94
|
|
cmp r6, #0
|
|
bne _022F3474
|
|
cmp r5, r6
|
|
cmpeq r6, r0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
_022F3474:
|
|
add r3, sl, #1
|
|
sub r2, sb, #1
|
|
add r1, sp, #0x38
|
|
mov r0, r4
|
|
strh r3, [sp, #0x38]
|
|
strh r2, [sp, #0x3a]
|
|
bl ov29_022FFA94
|
|
mov r5, r0
|
|
add r2, sl, #1
|
|
add r1, sp, #0x34
|
|
mov r0, r4
|
|
strh r2, [sp, #0x34]
|
|
strh sb, [sp, #0x36]
|
|
bl ov29_022FFA94
|
|
mov r6, r0
|
|
add r3, sl, #1
|
|
add r2, sb, #1
|
|
add r1, sp, #0x30
|
|
mov r0, r4
|
|
strh r3, [sp, #0x30]
|
|
strh r2, [sp, #0x32]
|
|
bl ov29_022FFA94
|
|
cmp r6, #0
|
|
bne _022F35C8
|
|
cmp r5, r6
|
|
cmpeq r6, r0
|
|
beq _022F35C8
|
|
mov r0, #0
|
|
b _022F35CC
|
|
_022F34E8:
|
|
sub r3, sl, #1
|
|
sub r2, sb, #1
|
|
add r1, sp, #0x2c
|
|
mov r0, r4
|
|
strh r3, [sp, #0x2c]
|
|
strh r2, [sp, #0x2e]
|
|
bl ov29_022FFA94
|
|
mov r5, r0
|
|
sub r2, sb, #1
|
|
add r1, sp, #0x28
|
|
mov r0, r4
|
|
strh sl, [sp, #0x28]
|
|
strh r2, [sp, #0x2a]
|
|
bl ov29_022FFA94
|
|
mov r6, r0
|
|
add r3, sl, #1
|
|
sub r2, sb, #1
|
|
add r1, sp, #0x24
|
|
mov r0, r4
|
|
strh r3, [sp, #0x24]
|
|
strh r2, [sp, #0x26]
|
|
bl ov29_022FFA94
|
|
cmp r6, #0
|
|
bne _022F3558
|
|
cmp r5, r6
|
|
cmpeq r6, r0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
_022F3558:
|
|
sub r3, sl, #1
|
|
add r2, sb, #1
|
|
add r1, sp, #0x20
|
|
mov r0, r4
|
|
strh r3, [sp, #0x20]
|
|
strh r2, [sp, #0x22]
|
|
bl ov29_022FFA94
|
|
mov r5, r0
|
|
add r2, sb, #1
|
|
add r1, sp, #0x1c
|
|
mov r0, r4
|
|
strh sl, [sp, #0x1c]
|
|
strh r2, [sp, #0x1e]
|
|
bl ov29_022FFA94
|
|
mov r6, r0
|
|
add r3, sl, #1
|
|
add r2, sb, #1
|
|
add r1, sp, #0x18
|
|
mov r0, r4
|
|
strh r3, [sp, #0x18]
|
|
strh r2, [sp, #0x1a]
|
|
bl ov29_022FFA94
|
|
cmp r6, #0
|
|
bne _022F35C8
|
|
cmp r5, r6
|
|
cmpeq r6, r0
|
|
movne r0, #0
|
|
bne _022F35CC
|
|
_022F35C8:
|
|
mov r0, #1
|
|
_022F35CC:
|
|
add sp, sp, #0x68
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F35D4: .word DUNGEON_PTR
|
|
_022F35D8: .word DIRECTIONS_XY
|
|
_022F35DC: .word DIRECTIONS_XY + 2
|
|
arm_func_end ShouldLeaderKeepRunning
|
|
|
|
arm_func_start ov29_022F35E0
|
|
ov29_022F35E0: ; 0x022F35E0
|
|
ldrb r0, [r0, #0xc4]
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
bxeq lr
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
bxeq lr
|
|
cmp r0, #7
|
|
moveq r0, #0
|
|
bxeq lr
|
|
cmp r0, #5
|
|
moveq r0, #0
|
|
bxeq lr
|
|
cmp r0, #3
|
|
moveq r0, #0
|
|
bxeq lr
|
|
cmp r0, #4
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end ov29_022F35E0
|
|
|
|
arm_func_start CheckLeaderTile
|
|
CheckLeaderTile: ; 0x022F3634
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
bl GetLeader
|
|
movs r4, r0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
mov r0, r4
|
|
bl GetTileAtEntity
|
|
mov r5, r0
|
|
mov r0, r4
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrne r0, [r4, #0xb4]
|
|
ldrneb r0, [r0, #0xef]
|
|
cmpne r0, #3
|
|
beq _022F3698
|
|
mov r0, r4
|
|
mov r1, #0x10
|
|
bl HasHeldItem
|
|
cmp r0, #0
|
|
bne _022F3698
|
|
add r0, r4, #4
|
|
bl ov29_02337D68
|
|
_022F3698:
|
|
ldrh r0, [r5]
|
|
tst r0, #0x200
|
|
ldrne r0, _022F37CC ; =DUNGEON_PTR
|
|
movne r1, #1
|
|
ldrne r0, [r0]
|
|
strneb r1, [r0, #5]
|
|
ldr r5, [r5, #0x10]
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r0, [r5]
|
|
cmp r0, #6
|
|
addls pc, pc, r0, lsl #2
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022F36CC: ; jump table
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc} ; case 0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc} ; case 1
|
|
b _022F36E8 ; case 2
|
|
b _022F3778 ; case 3
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc} ; case 4
|
|
b _022F37C0 ; case 5
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc} ; case 6
|
|
_022F36E8:
|
|
mov r0, r5
|
|
bl GetTrapInfo
|
|
mov r6, r0
|
|
mov r7, #0
|
|
mov r0, r4
|
|
mov r1, #0x13
|
|
mov r8, r7
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _022F372C
|
|
ldrb r0, [r5, #0x20]
|
|
cmp r0, #0
|
|
bne _022F372C
|
|
mov r0, #1
|
|
strb r0, [r5, #0x20]
|
|
bl UpdateTrapsVisibility
|
|
mov r8, #1
|
|
_022F372C:
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
moveq r7, #1
|
|
beq _022F3750
|
|
cmp r0, #1
|
|
moveq r7, #0
|
|
beq _022F3750
|
|
cmp r0, #2
|
|
moveq r7, #1
|
|
_022F3750:
|
|
cmp r7, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
cmp r8, #0
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
mov r0, r4
|
|
add r1, r4, #4
|
|
mov r2, #0
|
|
mov r3, #1
|
|
bl TryTriggerTrap
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022F3778:
|
|
mov r0, r5
|
|
bl GetItemInfo
|
|
ldrb r0, [r0]
|
|
tst r0, #2
|
|
bne _022F37A0
|
|
add r0, r4, #4
|
|
mov r1, #1
|
|
bl TryLeaderItemPickUp
|
|
#ifdef EUROPE
|
|
mov r0, #0
|
|
#endif
|
|
bl ov29_022FB920
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022F37A0:
|
|
mov r0, r4
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
ldreq r0, _022F37CC ; =DUNGEON_PTR
|
|
moveq r1, #4
|
|
ldreq r0, [r0]
|
|
streq r1, [r0, #0x614]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022F37C0:
|
|
mov r0, #1
|
|
bl HiddenStairsTrigger
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022F37CC: .word DUNGEON_PTR
|
|
arm_func_end CheckLeaderTile
|
|
|
|
arm_func_start ov29_022F37D0
|
|
ov29_022F37D0: ; 0x022F37D0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r4, r1
|
|
bl ov29_022F87C0
|
|
movs r5, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r0, [r5]
|
|
cmp r0, #1
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
bl ov29_023009CC
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r1, [r5, #0xb4]
|
|
mov r6, #1
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
beq _022F3850
|
|
ldrb r0, [r1, #0xbc]
|
|
cmp r0, #7
|
|
cmpne r0, #0x10
|
|
cmpne r0, #0x11
|
|
cmpne r0, #0x12
|
|
cmpne r0, #0x13
|
|
cmpne r0, #0x14
|
|
ldrneb r0, [r1, #9]
|
|
cmpne r0, #1
|
|
movne r6, #0
|
|
b _022F3874
|
|
_022F3850:
|
|
mov r2, #0
|
|
mov r0, r7
|
|
mov r1, r5
|
|
mov r3, r2
|
|
bl GetTreatmentBetweenMonsters
|
|
cmp r0, #1
|
|
movne r0, r6
|
|
moveq r0, #0
|
|
and r6, r0, #0xff
|
|
_022F3874:
|
|
cmp r6, #0
|
|
beq _022F3888
|
|
add r0, r4, #0x4a
|
|
mov r1, #0x13
|
|
bl SetMonsterActionFields
|
|
_022F3888:
|
|
mov r0, r6
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ov29_022F37D0
|
|
|
|
arm_func_start ov29_022F3890
|
|
ov29_022F3890: ; 0x022F3890
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
bl GetLeaderMonster
|
|
mov r4, r0
|
|
cmp r5, #0
|
|
beq _022F38D0
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #4
|
|
bne _022F38D0
|
|
ldrb r0, [r4, #0x4c]
|
|
add r1, r0, #4
|
|
and r0, r1, #0xff
|
|
and r0, r0, #7
|
|
strb r0, [r4, #0x4c]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_022F38D0:
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #2
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
mov sb, r0
|
|
mov r8, #0
|
|
mov r7, #1
|
|
b _022F3928
|
|
_022F38F4:
|
|
cmp r5, #0
|
|
movne r0, r7
|
|
bne _022F390C
|
|
mov r0, r6
|
|
mov r1, sb
|
|
bl CanMonsterMoveInDirection
|
|
_022F390C:
|
|
cmp r0, #0
|
|
andne r0, sb, #7
|
|
strneb r0, [r4, #0x4c]
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
add r0, sb, #1
|
|
and sb, r0, #7
|
|
add r8, r8, #1
|
|
_022F3928:
|
|
cmp r8, #8
|
|
blt _022F38F4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end ov29_022F3890
|
|
|
|
arm_func_start ChangeLeader
|
|
ChangeLeader: ; 0x022F3934
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r0, _022F3AE4 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldr r6, [r0, #0xc8]
|
|
bl GetLeader
|
|
ldr sb, [r6, #0xb4]
|
|
mov fp, r0
|
|
ldrb r0, [sb, #7]
|
|
ldr sl, [fp, #0xb4]
|
|
cmp r0, #0
|
|
beq _022F3970
|
|
ldr r1, _022F3AE8 ; =0x00000BA4
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopup
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_022F3970:
|
|
mov r0, #2
|
|
bl CheckTeamItemsFlags
|
|
cmp r0, #0
|
|
bne _022F398C
|
|
bl ov29_022F670C
|
|
cmp r0, #0
|
|
beq _022F399C
|
|
_022F398C:
|
|
ldr r1, _022F3AEC ; =0x00000BA5
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopup
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_022F399C:
|
|
ldr r0, _022F3AE4 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #0x790]
|
|
cmp r0, #0
|
|
beq _022F39C0
|
|
ldr r1, _022F3AF0 ; =0x00000BA6
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopup
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_022F39C0:
|
|
mov r5, #0
|
|
strb r5, [r1, #0x799]
|
|
mov r0, #1
|
|
strb r0, [sb, #7]
|
|
strb r5, [sl, #7]
|
|
mvn r4, #0
|
|
_022F39D8:
|
|
mov r0, r5
|
|
bl GetActiveTeamMember
|
|
mov r7, r0
|
|
ldrb r0, [r7]
|
|
mov r8, r4
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F3A40
|
|
ldrsh r0, [r7, #8]
|
|
bl ov29_022F9C34
|
|
cmp r0, #0
|
|
ldrsh r0, [sb, #0xc]
|
|
ldreqsh r8, [r7, #8]
|
|
cmp r5, r0
|
|
bne _022F3A38
|
|
mov r0, #1
|
|
strb r0, [r7, #1]
|
|
cmp r8, r4
|
|
beq _022F3A40
|
|
mov r0, r8
|
|
bl TryAddMonsterToActiveTeam
|
|
b _022F3A40
|
|
_022F3A38:
|
|
mov r0, #0
|
|
strb r0, [r7, #1]
|
|
_022F3A40:
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
cmp r5, #4
|
|
blt _022F39D8
|
|
ldr r0, _022F3AF4 ; =LEADER_PTR
|
|
mov r1, #0
|
|
str r1, [r0]
|
|
add r3, sl, #0x4a
|
|
add r2, sb, #0x4a
|
|
mov r1, #0xa
|
|
_022F3A6C:
|
|
ldrh r0, [r3], #2
|
|
subs r1, r1, #1
|
|
strh r0, [r2], #2
|
|
bne _022F3A6C
|
|
mov r0, r6
|
|
mov r1, #1
|
|
bl PointCameraToMonster
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
mov r0, fp
|
|
bl PlayQuestionMarkEffect
|
|
bl GetLeader
|
|
bl PlayExclamationPointEffect__022E47D4
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r6
|
|
ldr r1, _022F3AF8 ; =0x00000BA7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, #0
|
|
bl ov29_022F62CC
|
|
mov r0, fp
|
|
mov r1, #0
|
|
strh r1, [sb, #0x68]
|
|
strh r1, [sl, #0x68]
|
|
bl ov29_022F9EA0
|
|
mov r0, r6
|
|
bl ov29_022F9EA0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define CHANGE_LEADER_OFFSET -0x2C1
|
|
#else
|
|
#define CHANGE_LEADER_OFFSET 0
|
|
#endif
|
|
_022F3AE4: .word DUNGEON_PTR
|
|
_022F3AE8: .word 0x00000BA4 + CHANGE_LEADER_OFFSET
|
|
_022F3AEC: .word 0x00000BA5 + CHANGE_LEADER_OFFSET
|
|
_022F3AF0: .word 0x00000BA6 + CHANGE_LEADER_OFFSET
|
|
_022F3AF4: .word LEADER_PTR
|
|
_022F3AF8: .word 0x00000BA7 + CHANGE_LEADER_OFFSET
|
|
arm_func_end ChangeLeader
|
|
|
|
arm_func_start ov29_022F3AFC
|
|
ov29_022F3AFC: ; 0x022F3AFC
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
bl ov29_022F89AC
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldrh r0, [r0]
|
|
tst r0, #0x2000
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
bl ov29_023491B8
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl ov29_023009CC
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl ov29_022E28D4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r4
|
|
bl ov29_023009CC
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
add r0, r5, #0x4a
|
|
mov r1, #0x42
|
|
bl SetMonsterActionFields
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end ov29_022F3AFC
|
|
|
|
arm_func_start ov29_022F3B8C
|
|
ov29_022F3B8C: ; 0x022F3B8C
|
|
ldr ip, _022F3B94 ; =ResetTriggerFlags
|
|
bx ip
|
|
.align 2, 0
|
|
_022F3B94: .word ResetTriggerFlags
|
|
arm_func_end ov29_022F3B8C
|
|
|
|
arm_func_start ov29_022F3B98
|
|
ov29_022F3B98: ; 0x022F3B98
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc
|
|
mov r4, #0
|
|
str r4, [sp, #4]
|
|
mov sl, r0
|
|
mov sb, r1
|
|
mov r8, r2
|
|
mov fp, r4
|
|
str r4, [sp]
|
|
bl GetCheckDirectionOption
|
|
cmp r0, #0
|
|
moveq r0, r4
|
|
beq _022F3E88
|
|
cmp r8, #0
|
|
ldrb r5, [sl, #0xb0]
|
|
beq _022F3C4C
|
|
mov r6, r4
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, r6
|
|
bl GetEntityMoveTargetAndRange
|
|
and r0, r0, #0xf0
|
|
mov r1, r0, lsl #0x10
|
|
mov r7, r1, asr #0x10
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, r4
|
|
bl GetEntityMoveTargetAndRange
|
|
cmp r7, #0
|
|
cmpne r7, #0x10
|
|
cmpne r7, #0x40
|
|
cmpne r7, #0x50
|
|
cmpne r7, #0x80
|
|
and r0, r0, #0xf
|
|
cmpne r7, #0x90
|
|
beq _022F3C3C
|
|
cmp r0, #4
|
|
bne _022F3C40
|
|
ldrh r0, [r8, #4]
|
|
cmp r0, #0x80
|
|
beq _022F3C40
|
|
_022F3C3C:
|
|
mov r6, #1
|
|
_022F3C40:
|
|
cmp r6, #0
|
|
moveq r0, #1
|
|
beq _022F3E88
|
|
_022F3C4C:
|
|
bl ov29_022F2FE4
|
|
ldr r1, _022F3E90 ; =ov29_0237C9A4
|
|
mov r2, #0
|
|
strb r2, [r1, #1]
|
|
mov r0, #1
|
|
strh r2, [r1, #4]
|
|
bl ov29_0234B4CC
|
|
mov r0, #0
|
|
bl ov29_0234B1A4
|
|
ldr r0, _022F3E94 ; =0x00000BA8
|
|
bl ov29_0234FC50
|
|
bl ov29_022E0B44
|
|
ldr r6, _022F3E90 ; =ov29_0237C9A4
|
|
mvn r8, #0
|
|
_022F3C84:
|
|
mov r0, #0x62
|
|
bl AdvanceFrame
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
beq _022F3CAC
|
|
mov r0, sl
|
|
bl ov29_022F2B74
|
|
ldrsh r0, [r6, #4]
|
|
add r0, r0, #1
|
|
strh r0, [r6, #4]
|
|
_022F3CAC:
|
|
ldr r0, _022F3E98 ; =ov29_0237C6A4
|
|
mov r1, #0
|
|
ldrh r0, [r0]
|
|
tst r0, #0x40
|
|
beq _022F3CC8
|
|
tst r0, #2
|
|
movne r1, #1
|
|
_022F3CC8:
|
|
cmp r1, #0
|
|
beq _022F3D10
|
|
add r1, sp, #8
|
|
mov r0, sl
|
|
mov r2, #0x64
|
|
mov r3, #0
|
|
bl ov29_022F3EA0
|
|
ldrsh r2, [sl, #4]
|
|
ldrsh r1, [sp, #8]
|
|
mov r7, r0
|
|
cmp r2, r1
|
|
ldreqsh r1, [sl, #6]
|
|
ldreqsh r0, [sp, #0xa]
|
|
cmpeq r1, r0
|
|
movne r0, #1
|
|
moveq r4, #1
|
|
strne r0, [sp, #4]
|
|
b _022F3DE0
|
|
_022F3D10:
|
|
ldr r0, _022F3E9C ; =ov29_0237C694
|
|
ldrh r0, [r0]
|
|
tst r0, #0x100
|
|
and r0, r0, #0xf0
|
|
mov r0, r0, lsl #0x10
|
|
movne r1, #1
|
|
mov r0, r0, lsr #0x10
|
|
strneb r1, [r6, #1]
|
|
bne _022F3D4C
|
|
mov r1, #0
|
|
strb r1, [r6, #1]
|
|
strh r1, [r6, #4]
|
|
ldr r1, _022F3E9C ; =ov29_0237C694
|
|
ldrh r1, [r1, #2]
|
|
and r0, r0, r1
|
|
_022F3D4C:
|
|
mov r7, r8
|
|
cmp r0, #0x50
|
|
moveq r7, #3
|
|
cmp r0, #0x60
|
|
moveq r7, #5
|
|
cmp r0, #0x90
|
|
moveq r7, #1
|
|
cmp r0, #0xa0
|
|
moveq r7, #7
|
|
cmp r0, #0x40
|
|
moveq r7, #4
|
|
cmp r0, #0x80
|
|
moveq r7, #0
|
|
cmp r0, #0x10
|
|
moveq r7, #2
|
|
cmp r0, #0x20
|
|
ldrb r0, [r6, #1]
|
|
moveq r7, #6
|
|
cmp r0, #0
|
|
beq _022F3DB0
|
|
cmp r7, #0
|
|
blt _022F3DC0
|
|
tst r7, #1
|
|
bne _022F3DE0
|
|
b _022F3DC0
|
|
_022F3DB0:
|
|
cmp r7, #0
|
|
blt _022F3DC0
|
|
tst r7, #1
|
|
beq _022F3DE0
|
|
_022F3DC0:
|
|
ldr r0, _022F3E9C ; =ov29_0237C694
|
|
ldrh r0, [r0, #2]
|
|
tst r0, #2
|
|
movne r4, #1
|
|
bne _022F3DE0
|
|
tst r0, #1
|
|
beq _022F3C84
|
|
mov fp, #1
|
|
_022F3DE0:
|
|
bl ov29_0234FCA8
|
|
cmp r0, #0
|
|
beq _022F3DFC
|
|
mov r0, #0x62
|
|
bl AdvanceFrame
|
|
mov r0, #0x62
|
|
bl AdvanceFrame
|
|
_022F3DFC:
|
|
cmp r4, #0
|
|
bne _022F3E5C
|
|
ldr r0, [sp, #4]
|
|
cmp r0, #0
|
|
bne _022F3E28
|
|
mvn r0, #0
|
|
cmp r7, r0
|
|
beq _022F3E24
|
|
cmp fp, #0
|
|
beq _022F3E28
|
|
_022F3E24:
|
|
ldrb r7, [sb, #0x4c]
|
|
_022F3E28:
|
|
and r1, r7, #7
|
|
mov r0, sl
|
|
strb r1, [sb, #0x4c]
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
mov r0, sl
|
|
mov r2, r7
|
|
bl ChangeMonsterAnimation
|
|
mov r0, #0x62
|
|
bl AdvanceFrame
|
|
mov r0, #1
|
|
str r0, [sp]
|
|
b _022F3E68
|
|
_022F3E5C:
|
|
mov r0, #1
|
|
strb r5, [sb, #0x4c]
|
|
bl PlaySeVolumeWrapper
|
|
_022F3E68:
|
|
ldr r1, _022F3E90 ; =ov29_0237C9A4
|
|
mov r0, #0
|
|
strb r0, [r1, #1]
|
|
strh r0, [r1, #4]
|
|
bl ov29_0234B4CC
|
|
bl ov29_022E0B44
|
|
bl sub_02006B70
|
|
ldr r0, [sp]
|
|
_022F3E88:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F3E90: .word ov29_0237C9A4
|
|
#ifdef JAPAN
|
|
_022F3E94: .word 0x000008E7
|
|
#else
|
|
_022F3E94: .word 0x00000BA8
|
|
#endif
|
|
_022F3E98: .word ov29_0237C6A4
|
|
_022F3E9C: .word ov29_0237C694
|
|
arm_func_end ov29_022F3B98
|
|
|
|
arm_func_start ov29_022F3EA0
|
|
ov29_022F3EA0: ; 0x022F3EA0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #8
|
|
mov r5, r0
|
|
mov sb, r1
|
|
mov r4, r3
|
|
cmp r2, #0x64
|
|
mov r6, #0
|
|
add r0, sp, #0
|
|
bne _022F3ECC
|
|
bl ov29_022E0C64
|
|
b _022F3EE0
|
|
_022F3ECC:
|
|
cmp r2, #0x65
|
|
bne _022F3EDC
|
|
bl ov29_022E0C80
|
|
b _022F3EE0
|
|
_022F3EDC:
|
|
bl ov29_022E0C9C
|
|
_022F3EE0:
|
|
ldr r1, _022F40AC ; =DUNGEON_PTR
|
|
ldr r0, _022F40B0 ; =0x0001A224
|
|
ldr r7, [r1]
|
|
ldr r2, [sp]
|
|
ldrsh r0, [r7, r0]
|
|
mov r1, #0x18
|
|
add r0, r2, r0
|
|
bl _s32_div_f
|
|
ldr r1, _022F40B4 ; =0x0001A226
|
|
ldr r3, [sp, #4]
|
|
ldrsh r2, [r7, r1]
|
|
mov r7, r0
|
|
mov r1, #0x18
|
|
add r0, r3, r2
|
|
bl _s32_div_f
|
|
mov r8, r0
|
|
strh r7, [sb]
|
|
strh r8, [sb, #2]
|
|
ldrsh r1, [sb]
|
|
ldrsh r0, [r5, #4]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #2
|
|
ble _022F3F58
|
|
ldrsh r1, [sb, #2]
|
|
ldrsh r0, [r5, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #2
|
|
bgt _022F3F5C
|
|
_022F3F58:
|
|
mov r6, #1
|
|
_022F3F5C:
|
|
mov r0, sb
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
cmpeq r6, #0
|
|
beq _022F40A0
|
|
ldrsh r0, [r5, #4]
|
|
mvn r6, #0
|
|
cmp r0, r7
|
|
ldreqsh r1, [r5, #6]
|
|
cmpeq r1, r8
|
|
moveq r6, #0
|
|
cmp r0, r7
|
|
bne _022F3F9C
|
|
ldrsh r1, [r5, #6]
|
|
cmp r1, r8
|
|
movlt r6, #0
|
|
_022F3F9C:
|
|
cmp r0, r7
|
|
ldrltsh r1, [r5, #6]
|
|
cmplt r1, r8
|
|
movlt r6, #1
|
|
cmp r0, r7
|
|
bge _022F3FC0
|
|
ldrsh r1, [r5, #6]
|
|
cmp r1, r8
|
|
moveq r6, #2
|
|
_022F3FC0:
|
|
cmp r0, r7
|
|
bge _022F3FD4
|
|
ldrsh r1, [r5, #6]
|
|
cmp r1, r8
|
|
movgt r6, #3
|
|
_022F3FD4:
|
|
cmp r0, r7
|
|
bne _022F3FE8
|
|
ldrsh r1, [r5, #6]
|
|
cmp r1, r8
|
|
movgt r6, #4
|
|
_022F3FE8:
|
|
cmp r0, r7
|
|
ldrgtsh r1, [r5, #6]
|
|
cmpgt r1, r8
|
|
movgt r6, #5
|
|
cmp r0, r7
|
|
ble _022F400C
|
|
ldrsh r1, [r5, #6]
|
|
cmp r1, r8
|
|
moveq r6, #6
|
|
_022F400C:
|
|
cmp r0, r7
|
|
ble _022F4020
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r8
|
|
movlt r6, #7
|
|
_022F4020:
|
|
cmp r6, #0
|
|
movlt r0, r6
|
|
blt _022F40A4
|
|
cmp r4, #0
|
|
beq _022F4098
|
|
mov r0, r5
|
|
mov r1, r6
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
movne r0, r6
|
|
bne _022F40A4
|
|
tst r6, #1
|
|
moveq r0, r6
|
|
beq _022F40A4
|
|
sub r1, r6, #1
|
|
mov r0, r5
|
|
and r1, r1, #7
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
subne r0, r6, #1
|
|
andne r0, r0, #7
|
|
bne _022F40A4
|
|
add r1, r6, #1
|
|
mov r0, r5
|
|
and r1, r1, #7
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
addne r0, r6, #1
|
|
andne r0, r0, #7
|
|
bne _022F40A4
|
|
_022F4098:
|
|
mov r0, r6
|
|
b _022F40A4
|
|
_022F40A0:
|
|
mvn r0, #0
|
|
_022F40A4:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022F40AC: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_022F40B0: .word 0x0001A180
|
|
_022F40B4: .word 0x0001A182
|
|
#else
|
|
_022F40B0: .word 0x0001A224
|
|
_022F40B4: .word 0x0001A226
|
|
#endif
|
|
arm_func_end ov29_022F3EA0
|
|
|
|
arm_func_start ov29_022F40B8
|
|
ov29_022F40B8: ; 0x022F40B8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #8
|
|
mov sb, r1
|
|
ldrsh r2, [sb]
|
|
mov sl, r0
|
|
cmp r2, #0
|
|
movlt r0, #0
|
|
blt _022F425C
|
|
ldrsh r0, [sb, #2]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
blt _022F425C
|
|
add r0, sl, #4
|
|
bl GetDirectionTowardsPosition
|
|
mov r5, r0
|
|
mov r0, sl
|
|
mov r1, r5
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
movne r0, r5
|
|
bne _022F425C
|
|
tst r5, #1
|
|
beq _022F4218
|
|
ldrsh r1, [sl, #4]
|
|
ldrsh r0, [sb]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
ldrsh r2, [sl, #6]
|
|
ldrsh r1, [sb, #2]
|
|
mov r6, r0
|
|
sub r0, r2, r1
|
|
bl abs
|
|
mov r7, r0
|
|
cmp r6, r7
|
|
movgt r1, #1
|
|
ldr r0, _022F4264 ; =ov29_023526C8
|
|
movle r1, #0
|
|
add r0, r0, r1, lsl #3
|
|
ldrb r0, [r5, r0]
|
|
cmp r0, #0
|
|
bne _022F4178
|
|
sub r1, r5, #1
|
|
add r0, r5, #1
|
|
and r1, r1, #7
|
|
and r0, r0, #7
|
|
str r1, [sp]
|
|
str r0, [sp, #4]
|
|
b _022F4190
|
|
_022F4178:
|
|
add r1, r5, #1
|
|
sub r0, r5, #1
|
|
and r1, r1, #7
|
|
and r0, r0, #7
|
|
str r1, [sp]
|
|
str r0, [sp, #4]
|
|
_022F4190:
|
|
mov r4, #0
|
|
b _022F420C
|
|
_022F4198:
|
|
add r0, sp, #0
|
|
ldr r8, [r0, r4, lsl #2]
|
|
ldr r0, _022F4268 ; =DIRECTIONS_XY
|
|
mov r1, r8, lsl #2
|
|
ldrsh r1, [r0, r1]
|
|
ldrsh r2, [sl, #4]
|
|
ldrsh r0, [sb]
|
|
add r1, r2, r1
|
|
sub r0, r1, r0
|
|
bl abs
|
|
ldr r1, _022F4268 ; =DIRECTIONS_XY
|
|
ldrsh r3, [sl, #6]
|
|
add r1, r1, r8, lsl #2
|
|
ldrsh r2, [r1, #2]
|
|
mov fp, r0
|
|
ldrsh r1, [sb, #2]
|
|
add r0, r3, r2
|
|
sub r0, r0, r1
|
|
bl abs
|
|
cmp fp, r6
|
|
cmple r0, r7
|
|
bgt _022F4208
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
movne r0, r8
|
|
bne _022F425C
|
|
_022F4208:
|
|
add r4, r4, #1
|
|
_022F420C:
|
|
cmp r4, #2
|
|
blt _022F4198
|
|
b _022F4258
|
|
_022F4218:
|
|
sub r1, r5, #1
|
|
mov r0, sl
|
|
and r1, r1, #7
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
subne r0, r5, #1
|
|
andne r0, r0, #7
|
|
bne _022F425C
|
|
add r1, r5, #1
|
|
mov r0, sl
|
|
and r1, r1, #7
|
|
bl CanMonsterMoveOrSwapWithAllyInDirection
|
|
cmp r0, #0
|
|
addne r0, r5, #1
|
|
andne r0, r0, #7
|
|
bne _022F425C
|
|
_022F4258:
|
|
mov r0, r5
|
|
_022F425C:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F4264: .word ov29_023526C8
|
|
_022F4268: .word DIRECTIONS_XY
|
|
arm_func_end ov29_022F40B8
|
|
|
|
arm_func_start ov29_022F426C
|
|
ov29_022F426C: ; 0x022F426C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
bl GetTileSafe
|
|
ldr r1, _022F42D4 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
ldr r0, [r1]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x19a]
|
|
#else
|
|
ldrb r0, [r0, #0x23e]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl ov29_022FF958
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldr r0, [r4, #0xc]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022F42D4: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F426C
|
|
|
|
arm_func_start GetPlayerGender
|
|
GetPlayerGender: ; 0x022F42D8
|
|
stmdb sp!, {r3, lr}
|
|
bl GetHero
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrsh r0, [r0, #4]
|
|
bl GetMonsterGenderVeneer
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end GetPlayerGender
|
|
|
|
arm_func_start ov29_022F42F8
|
|
ov29_022F42F8: ; 0x022F42F8
|
|
cmp r0, #0
|
|
moveq r1, #0
|
|
beq _022F4318
|
|
ldr r1, [r0]
|
|
cmp r1, #0
|
|
movne r1, #1
|
|
moveq r1, #0
|
|
and r1, r1, #0xff
|
|
_022F4318:
|
|
cmp r1, #0
|
|
ldrne r0, [r0, #0xb4]
|
|
ldrneb r0, [r0, #7]
|
|
cmpne r0, #0
|
|
bxeq lr
|
|
ldr r0, _022F434C ; =DUNGEON_PTR
|
|
mov r3, #0
|
|
ldr r2, [r0]
|
|
sub r1, r3, #1
|
|
strb r3, [r2, #5]
|
|
ldr r0, [r0]
|
|
str r1, [r0, #0x614]
|
|
bx lr
|
|
.align 2, 0
|
|
_022F434C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F42F8
|
|
|
|
arm_func_start ov29_022F4350
|
|
ov29_022F4350: ; 0x022F4350
|
|
ldr r2, [r0, #0xb4]
|
|
mov r3, #1
|
|
ldr ip, _022F436C ; =TryLeaderItemPickUp
|
|
add r0, r0, #4
|
|
mov r1, #0
|
|
strb r3, [r2, #0x4e]
|
|
bx ip
|
|
.align 2, 0
|
|
_022F436C: .word TryLeaderItemPickUp
|
|
arm_func_end ov29_022F4350
|
|
|
|
arm_func_start ov29_022F4370
|
|
ov29_022F4370: ; 0x022F4370
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r5, r1
|
|
mov r1, #0
|
|
mov r2, #0xfe
|
|
mov r6, r0
|
|
bl GetItemToUse
|
|
mov sb, #0
|
|
mov lr, #1
|
|
mov r4, r0
|
|
mov ip, sb
|
|
mov fp, sb
|
|
mov r2, lr
|
|
ldr r1, _022F44D4 ; =BAG_ITEMS_PTR_MIRROR
|
|
mov r0, #6
|
|
b _022F441C
|
|
_022F43AC:
|
|
mul r7, sb, r0
|
|
ldr r3, [r1]
|
|
ldr r8, [r3, #0x384]
|
|
ldrb sl, [r8, r7]
|
|
tst sl, #1
|
|
movne r3, lr
|
|
moveq r3, ip
|
|
tst r3, #0xff
|
|
beq _022F4418
|
|
ldrb r3, [r8, r7]
|
|
tst r3, #0x10
|
|
beq _022F4418
|
|
tst sl, #8
|
|
movne r3, r2
|
|
moveq r3, fp
|
|
tst r3, #0xff
|
|
beq _022F440C
|
|
add r1, r8, r7
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F44D8 ; =0x00000BA9
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_022F440C:
|
|
ldrb r3, [r8, r7]
|
|
bic r3, r3, #0x10
|
|
strb r3, [r8, r7]
|
|
_022F4418:
|
|
add sb, sb, #1
|
|
_022F441C:
|
|
cmp sb, #0x32
|
|
blt _022F43AC
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r0, _022F44DC ; =0x00003F07
|
|
bl PlaySeByIdIfNotSilence
|
|
cmp r5, #0
|
|
beq _022F4494
|
|
ldrb r0, [r4]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4468
|
|
ldr r1, _022F44E0 ; =0x00000BAA
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F4494
|
|
_022F4468:
|
|
ldrsh r0, [r4, #4]
|
|
bl GetItemCategoryVeneer
|
|
cmp r0, #0
|
|
bne _022F4488
|
|
ldr r1, _022F44E4 ; =0x00000BAB
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F4494
|
|
_022F4488:
|
|
ldr r1, _022F44E8 ; =0x00000BAC
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022F4494:
|
|
ldrb r0, [r4]
|
|
orr r0, r0, #0x10
|
|
strb r0, [r4]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
cmpne r5, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F44EC ; =0x00000BAE
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_022F4370_OFFSET -0x2C1
|
|
#else
|
|
#define OV29_022F4370_OFFSET 0
|
|
#endif
|
|
_022F44D4: .word BAG_ITEMS_PTR_MIRROR
|
|
_022F44D8: .word 0x00000BA9 + OV29_022F4370_OFFSET
|
|
_022F44DC: .word 0x00003F07
|
|
_022F44E0: .word 0x00000BAA + OV29_022F4370_OFFSET
|
|
_022F44E4: .word 0x00000BAB + OV29_022F4370_OFFSET
|
|
_022F44E8: .word 0x00000BAC + OV29_022F4370_OFFSET
|
|
_022F44EC: .word 0x00000BAE + OV29_022F4370_OFFSET
|
|
arm_func_end ov29_022F4370
|
|
|
|
arm_func_start ov29_022F44F0
|
|
ov29_022F44F0: ; 0x022F44F0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r8, #0
|
|
mov r7, #1
|
|
mov sl, r0
|
|
mov sb, r1
|
|
mov r6, r8
|
|
mov fp, r7
|
|
ldr r5, _022F45BC ; =BAG_ITEMS_PTR_MIRROR
|
|
mov r4, #6
|
|
b _022F45B0
|
|
_022F4518:
|
|
mul r2, r8, r4
|
|
ldr r0, [r5]
|
|
ldr r3, [r0, #0x384]
|
|
ldrb r1, [r3, r2]
|
|
tst r1, #1
|
|
movne r0, r7
|
|
moveq r0, r6
|
|
tst r0, #0xff
|
|
beq _022F45AC
|
|
ldrb r0, [r3, r2]
|
|
tst r0, #0x10
|
|
beq _022F45AC
|
|
tst r1, #8
|
|
movne r0, fp
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4578
|
|
add r1, r3, r2
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F45C0 ; =0x00000BA9
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_022F4578:
|
|
ldrb ip, [r3, r2]
|
|
mov r0, #0
|
|
add r1, r3, r2
|
|
bic ip, ip, #0x10
|
|
strb ip, [r3, r2]
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r0, _022F45C4 ; =0x00003F07
|
|
bl PlaySeByIdIfNotSilence
|
|
cmp sb, #0
|
|
beq _022F45AC
|
|
ldr r1, _022F45C8 ; =0x00000BAD
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022F45AC:
|
|
add r8, r8, #1
|
|
_022F45B0:
|
|
cmp r8, #0x32
|
|
blt _022F4518
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F45BC: .word BAG_ITEMS_PTR_MIRROR
|
|
#ifdef JAPAN
|
|
_022F45C0: .word 0x000008E8
|
|
_022F45C4: .word 0x00003F07
|
|
_022F45C8: .word 0x000008EC
|
|
#else
|
|
_022F45C0: .word 0x00000BA9
|
|
_022F45C4: .word 0x00003F07
|
|
_022F45C8: .word 0x00000BAD
|
|
#endif
|
|
arm_func_end ov29_022F44F0
|
|
|
|
arm_func_start HandleHeldItemSwaps
|
|
HandleHeldItemSwaps: ; 0x022F45CC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x14
|
|
mov sl, r0
|
|
mov r1, #1
|
|
bl ov29_022EB568
|
|
mov r4, r0
|
|
ldr r8, [sl, #0xb4]
|
|
mov r0, sl
|
|
mov r1, #0
|
|
mov r2, #2
|
|
ldr sb, [r4, #0xb4]
|
|
bl GetItemToUse
|
|
ldrb r1, [r8, #0x4e]
|
|
mov r5, r0
|
|
mov r0, r5
|
|
cmp r1, #0x80
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
and r6, r1, #0xff
|
|
bl GetItemIndex
|
|
mov r7, r0
|
|
cmp r6, #0
|
|
bne _022F4668
|
|
ldrb r0, [r5]
|
|
tst r0, #0x10
|
|
beq _022F4668
|
|
ldrb r0, [r5]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4668
|
|
mov r1, r5
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
#ifdef JAPAN
|
|
ldr r1, _022F5EB8 ; =0x000008EF
|
|
mov r0, sl
|
|
#else
|
|
mov r0, sl
|
|
mov r1, #0xbb0
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F48B8
|
|
_022F4668:
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r0, [sb, #0x62]
|
|
tst r0, #1
|
|
movne r1, #1
|
|
moveq r1, #0
|
|
tst r1, #0xff
|
|
beq _022F47CC
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F46C0
|
|
add r1, sb, #0x62
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F48C0 ; =0x00000BAF
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F48B8
|
|
_022F46C0:
|
|
ldrh r0, [sb, #0x62]
|
|
cmp r6, #0
|
|
add r1, sp, #0xc
|
|
strh r0, [sp, #0xc]
|
|
ldrh r2, [sb, #0x64]
|
|
ldrb r0, [sp, #0xc]
|
|
ldrb r3, [sp, #0xd]
|
|
strh r2, [sp, #0xe]
|
|
ldrh r6, [sb, #0x66]
|
|
bic r2, r0, #0x10
|
|
strh r6, [sp, #0x10]
|
|
ldrh r0, [r5]
|
|
strh r0, [sp, #6]
|
|
ldrh r6, [r5, #2]
|
|
ldrb r0, [sp, #6]
|
|
strh r6, [sp, #8]
|
|
ldrh r5, [r5, #4]
|
|
bic r0, r0, #0x10
|
|
strh r5, [sp, #0xa]
|
|
strb r3, [sp, #7]
|
|
strb r2, [sp, #0xc]
|
|
strb r0, [sp, #6]
|
|
beq _022F472C
|
|
add r0, sl, #4
|
|
mov r2, #1
|
|
bl SpawnItem
|
|
b _022F4734
|
|
_022F472C:
|
|
mov r0, r1
|
|
bl RemoveHolderForItemInBag
|
|
_022F4734:
|
|
ldrh r0, [sp, #6]
|
|
cmp r7, #0
|
|
strh r0, [sb, #0x62]
|
|
ldrh r0, [sp, #8]
|
|
strh r0, [sb, #0x64]
|
|
ldrh r0, [sp, #0xa]
|
|
strh r0, [sb, #0x66]
|
|
blt _022F4770
|
|
ldrb r0, [r8, #0x54]
|
|
bl ov29_022EB594
|
|
mov r2, r0
|
|
add r1, sp, #6
|
|
mov r0, r7
|
|
bl SetHolderForItemInBag
|
|
b _022F4778
|
|
_022F4770:
|
|
mov r0, sb
|
|
bl AddHeldItemToBag
|
|
_022F4778:
|
|
add r1, sp, #6
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
add r1, sp, #0xc
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r0, _022F48C4 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
ldr r1, _022F48C8 ; =0x00000BB2
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldrb r0, [sp, #6]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4878
|
|
ldr r1, _022F48CC ; =0x00000BAE
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F4878
|
|
_022F47CC:
|
|
ldrh r0, [r5]
|
|
cmp r7, #0
|
|
strh r0, [sp]
|
|
ldrh r1, [r5, #2]
|
|
ldrb r0, [sp]
|
|
strh r1, [sp, #2]
|
|
ldrh r1, [r5, #4]
|
|
bic r0, r0, #0x10
|
|
strb r0, [sp]
|
|
ldrh r0, [sp]
|
|
strh r1, [sp, #4]
|
|
strh r0, [sb, #0x62]
|
|
ldrh r0, [sp, #2]
|
|
strh r0, [sb, #0x64]
|
|
ldrh r0, [sp, #4]
|
|
strh r0, [sb, #0x66]
|
|
blt _022F482C
|
|
ldrb r0, [r8, #0x54]
|
|
bl ov29_022EB594
|
|
mov r2, r0
|
|
mov r0, r7
|
|
add r1, sb, #0x62
|
|
bl SetHolderForItemInBag
|
|
b _022F4834
|
|
_022F482C:
|
|
mov r0, sb
|
|
bl AddHeldItemToBag
|
|
_022F4834:
|
|
add r1, sp, #0
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r0, _022F48C4 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
ldr r1, _022F48D0 ; =0x00000BB3
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldrb r0, [sp]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4878
|
|
ldr r1, _022F48CC ; =0x00000BAE
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022F4878:
|
|
mov r0, r4
|
|
bl ov29_022F9EA0
|
|
mov r0, sl
|
|
mov r1, r4
|
|
bl ov29_02321164
|
|
ldrb r0, [sb, #7]
|
|
ldr r1, _022F48D4 ; =DUNGEON_PTR
|
|
cmp r0, #0
|
|
ldreqh r0, [sb]
|
|
orreq r0, r0, #0x4000
|
|
streqh r0, [sb]
|
|
ldr r1, [r1]
|
|
mov r0, sl
|
|
add r1, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x20]
|
|
#else
|
|
ldrb r1, [r1, #0xc4]
|
|
#endif
|
|
bl TryTriggerMonsterHouse
|
|
_022F48B8:
|
|
add sp, sp, #0x14
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_022F45CC_OFFSET -0x2C1
|
|
#else
|
|
#define OV29_022F45CC_OFFSET 0
|
|
#endif
|
|
#ifdef JAPAN
|
|
_022F5EB8: .word 0x000008EF
|
|
#endif
|
|
_022F48C0: .word 0x00000BAF + OV29_022F45CC_OFFSET
|
|
_022F48C4: .word 0x00001317
|
|
_022F48C8: .word 0x00000BB2 + OV29_022F45CC_OFFSET
|
|
_022F48CC: .word 0x00000BAE + OV29_022F45CC_OFFSET
|
|
_022F48D0: .word 0x00000BB3 + OV29_022F45CC_OFFSET
|
|
_022F48D4: .word DUNGEON_PTR
|
|
arm_func_end HandleHeldItemSwaps
|
|
|
|
arm_func_start ov29_022F48D8
|
|
ov29_022F48D8: ; 0x022F48D8
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
mov r1, #0
|
|
mov r6, r0
|
|
bl ov29_022EB568
|
|
mov r4, r0
|
|
ldr r5, [r4, #0xb4]
|
|
ldrb r0, [r5, #0x62]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
mov r0, #0
|
|
beq _022F4928
|
|
add r1, r5, #0x62
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F49D0 ; =0x00000BAE
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F49C8
|
|
_022F4928:
|
|
ldrh r2, [r5, #0x62]
|
|
add r1, sp, #0
|
|
strh r2, [sp]
|
|
ldrh r3, [r5, #0x64]
|
|
ldrb r2, [sp]
|
|
strh r3, [sp, #2]
|
|
ldrh r3, [r5, #0x66]
|
|
bic r2, r2, #0x10
|
|
strh r3, [sp, #4]
|
|
strb r2, [sp]
|
|
bl PrepareItemForPrinting__02345728
|
|
mov r0, #0
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
add r0, r5, #0x62
|
|
bl ItemZInit
|
|
add r0, sp, #0
|
|
bl RemoveHolderForItemInBag
|
|
ldr r0, _022F49D4 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
ldr r1, _022F49D8 ; =0x00000BB5
|
|
mov r0, r6
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r4
|
|
bl ov29_022F9EA0
|
|
mov r1, r4
|
|
mov r0, r6
|
|
bl ov29_02321164
|
|
ldrb r0, [r5, #7]
|
|
ldr r1, _022F49DC ; =DUNGEON_PTR
|
|
cmp r0, #0
|
|
ldreqh r0, [r5]
|
|
orreq r0, r0, #0x4000
|
|
streqh r0, [r5]
|
|
ldr r1, [r1]
|
|
mov r0, r6
|
|
add r1, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x20]
|
|
#else
|
|
ldrb r1, [r1, #0xc4]
|
|
#endif
|
|
bl TryTriggerMonsterHouse
|
|
_022F49C8:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022F49D0: .word 0x000008ED
|
|
_022F49D4: .word 0x00001317
|
|
_022F49D8: .word 0x000008F4
|
|
#else
|
|
_022F49D0: .word 0x00000BAE
|
|
_022F49D4: .word 0x00001317
|
|
_022F49D8: .word 0x00000BB5
|
|
#endif
|
|
_022F49DC: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F48D8
|
|
|
|
arm_func_start ov29_022F49E0
|
|
ov29_022F49E0: ; 0x022F49E0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #8
|
|
mov r1, #0
|
|
mov r7, r0
|
|
bl ov29_022EB568
|
|
mov r4, r0
|
|
ldr r5, [r4, #0xb4]
|
|
ldr r2, _022F4BC8 ; =0x00001565
|
|
mov r0, r7
|
|
mov r1, #1
|
|
bl GetItemToUse
|
|
ldrb r1, [r5, #0x62]
|
|
mov r6, r0
|
|
tst r1, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4A44
|
|
add r1, r5, #0x62
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F4BCC ; =0x00000BAE
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F4BC0
|
|
_022F4A44:
|
|
ldrb r0, [r6]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4A84
|
|
ldrb r0, [r6]
|
|
tst r0, #0x10
|
|
beq _022F4A84
|
|
mov r1, r6
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F4BCC ; =0x00000BAE
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F4BC0
|
|
_022F4A84:
|
|
ldrb r2, [r5, #0x62]
|
|
add r1, r5, #0x62
|
|
mov r0, #0
|
|
bic r2, r2, #0x10
|
|
strb r2, [r5, #0x62]
|
|
ldrb r2, [r6]
|
|
bic r2, r2, #0x10
|
|
strb r2, [r6]
|
|
bl PrepareItemForPrinting__02345728
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrh r3, [r5, #0x62]
|
|
ldrh r2, [r5, #0x64]
|
|
ldrh r1, [r5, #0x66]
|
|
ldrb r0, [r5, #6]
|
|
strh r3, [sp]
|
|
strh r2, [sp, #2]
|
|
strh r1, [sp, #4]
|
|
cmp r0, #0
|
|
bne _022F4AF0
|
|
add r0, r5, #0x62
|
|
bl RemoveEquivItemNoHole
|
|
_022F4AF0:
|
|
ldrh r0, [r6]
|
|
strh r0, [r5, #0x62]
|
|
ldrh r0, [r6, #2]
|
|
strh r0, [r5, #0x64]
|
|
ldrh r0, [r6, #4]
|
|
strh r0, [r5, #0x66]
|
|
ldrb r0, [r5, #6]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
strneb r0, [r5, #0x63]
|
|
bne _022F4B24
|
|
mov r0, r5
|
|
bl AddHeldItemToBag
|
|
_022F4B24:
|
|
ldrh r2, [sp]
|
|
ldrh r0, [sp, #2]
|
|
ldrh r1, [sp, #4]
|
|
strh r2, [r6]
|
|
strh r0, [r6, #2]
|
|
mov r0, r6
|
|
strh r1, [r6, #4]
|
|
bl ov29_02346FB8
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
strltb r0, [r6, #1]
|
|
blt _022F4B70
|
|
#ifdef JAPAN
|
|
ldr r1, _022F4BD0 ; =DUNGEON_PTR
|
|
mov r2, #0x23c
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x3f4
|
|
add r1, r1, #0x400
|
|
mla r0, r2, r0, r1
|
|
#else
|
|
ldr r2, _022F4BD0 ; =DUNGEON_PTR
|
|
add r1, r0, r0, lsl #3
|
|
ldr r0, [r2]
|
|
add r0, r0, #0x3f4
|
|
add r0, r0, #0x400
|
|
add r0, r0, r1, lsl #6
|
|
#endif
|
|
bl AddHeldItemToBag
|
|
_022F4B70:
|
|
bl RemoveEmptyItemsInBagWrapper
|
|
ldr r0, _022F4BD4 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
ldr r1, _022F4BD8 ; =0x00000BB6
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r7
|
|
mov r1, r4
|
|
bl ov29_02321164
|
|
ldrb r0, [r5, #7]
|
|
ldr r1, _022F4BD0 ; =DUNGEON_PTR
|
|
cmp r0, #0
|
|
ldreqh r0, [r5]
|
|
orreq r0, r0, #0x4000
|
|
streqh r0, [r5]
|
|
ldr r1, [r1]
|
|
mov r0, r7
|
|
add r1, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x20]
|
|
#else
|
|
ldrb r1, [r1, #0xc4]
|
|
#endif
|
|
bl TryTriggerMonsterHouse
|
|
_022F4BC0:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022F4BC8: .word 0x00001565
|
|
#ifdef JAPAN
|
|
_022F4BCC: .word 0x000008ED
|
|
_022F4BD0: .word DUNGEON_PTR
|
|
_022F4BD4: .word 0x00001317
|
|
_022F4BD8: .word 0x000008F5
|
|
#else
|
|
_022F4BCC: .word 0x00000BAE
|
|
_022F4BD0: .word DUNGEON_PTR
|
|
_022F4BD4: .word 0x00001317
|
|
_022F4BD8: .word 0x00000BB6
|
|
#endif
|
|
arm_func_end ov29_022F49E0
|
|
|
|
arm_func_start ov29_022F4BDC
|
|
ov29_022F4BDC: ; 0x022F4BDC
|
|
stmdb sp!, {r3, lr}
|
|
mov r1, #0
|
|
bl ov29_022EB568
|
|
ldr r0, [r0, #0xb4]
|
|
mov r1, #1
|
|
#ifdef JAPAN
|
|
strb r1, [r0, #0x108]
|
|
#else
|
|
strb r1, [r0, #0x109]
|
|
#endif
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F4BDC
|
|
|
|
arm_func_start ov29_022F4BF8
|
|
ov29_022F4BF8: ; 0x022F4BF8
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
mov r1, #0
|
|
mov r2, #4
|
|
ldr r6, [r5, #0xb4]
|
|
bl GetItemToUse
|
|
mov r4, r0
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldrb r1, [r6, #0x4e]
|
|
cmp r1, #0x80
|
|
bne _022F4C3C
|
|
ldr r1, _022F4D94 ; =0x00000BB7
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4C3C:
|
|
cmp r1, #0x33
|
|
bhs _022F4C78
|
|
ldrb r0, [r4]
|
|
tst r0, #0x10
|
|
beq _022F4C78
|
|
ldrb r0, [r4]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4C78
|
|
ldr r1, _022F4D98 ; =0x00000BAE
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4C78:
|
|
cmp r1, #0x81
|
|
bne _022F4CA8
|
|
ldrb r0, [r4]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4CA8
|
|
ldr r1, _022F4D98 ; =0x00000BAE
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4CA8:
|
|
ldrsh r0, [r5, #4]
|
|
ldrsh r1, [r5, #6]
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x200
|
|
beq _022F4CD0
|
|
ldr r1, _022F4D9C ; =0x00000BB8
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4CD0:
|
|
and r1, r1, #3
|
|
cmp r1, #1
|
|
beq _022F4CEC
|
|
ldr r1, _022F4D9C ; =0x00000BB8
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4CEC:
|
|
ldr r0, [r0, #0x10]
|
|
cmp r0, #0
|
|
beq _022F4D08
|
|
ldr r1, _022F4D9C ; =0x00000BB8
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4D08:
|
|
ldrb r2, [r4]
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bic r2, r2, #0x10
|
|
strb r2, [r4]
|
|
bl PrepareItemForPrinting__02345728
|
|
mov r1, r4
|
|
add r0, r5, #4
|
|
mov r2, #1
|
|
bl SpawnItem
|
|
cmp r0, #0
|
|
bne _022F4D48
|
|
ldr r1, _022F4D9C ; =0x00000BB8
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F4D48:
|
|
mov r0, r4
|
|
bl ItemZInit
|
|
bl RemoveEmptyItemsInBagWrapper
|
|
ldr r0, _022F4DA0 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r1, _022F4DA4 ; =0x00000BB9
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, r5
|
|
ldr r1, _022F4DA8 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x20]
|
|
#else
|
|
ldrb r1, [r1, #0xc4]
|
|
#endif
|
|
bl TryTriggerMonsterHouse
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_022F4BF8_OFFSET -0x2C1
|
|
#else
|
|
#define OV29_022F4BF8_OFFSET 0
|
|
#endif
|
|
_022F4D94: .word 0x00000BB7 + OV29_022F4BF8_OFFSET
|
|
_022F4D98: .word 0x00000BAE + OV29_022F4BF8_OFFSET
|
|
_022F4D9C: .word 0x00000BB8 + OV29_022F4BF8_OFFSET
|
|
_022F4DA0: .word 0x00001317
|
|
_022F4DA4: .word 0x00000BB9 + OV29_022F4BF8_OFFSET
|
|
_022F4DA8: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F4BF8
|
|
|
|
arm_func_start ov29_022F4DAC
|
|
ov29_022F4DAC: ; 0x022F4DAC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #0xc
|
|
mov r8, r0
|
|
ldr r6, [r8, #0xb4]
|
|
mov r1, #0
|
|
mov r2, #5
|
|
bl GetItemToUse
|
|
mov r4, r0
|
|
mov r0, r8
|
|
mov r1, #1
|
|
mov r2, #6
|
|
bl GetItemToUse
|
|
ldrb r1, [r6, #0x4e]
|
|
mov r7, r0
|
|
cmp r1, #0x80
|
|
beq _022F4DFC
|
|
ldr r1, _022F503C ; =0x00000BBA
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F5034
|
|
_022F4DFC:
|
|
ldrb r1, [r6, #0x54]
|
|
cmp r1, #0x33
|
|
bhs _022F4E48
|
|
ldrb r0, [r7]
|
|
tst r0, #0x10
|
|
beq _022F4E48
|
|
ldrb r0, [r7]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4E48
|
|
mov r1, r7
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r1, _022F5040 ; =0x00000BAE
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F5034
|
|
_022F4E48:
|
|
cmp r1, #0x81
|
|
bne _022F4E84
|
|
ldrb r0, [r7]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F4E84
|
|
mov r1, r7
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
#ifdef JAPAN
|
|
mov r0, r8
|
|
mov r1, #0x8f0
|
|
#else
|
|
ldr r1, _022F5044 ; =0x00000BB1
|
|
mov r0, r8
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F5034
|
|
_022F4E84:
|
|
ldrsh r0, [r8, #4]
|
|
ldrsh r1, [r8, #6]
|
|
bl GetTile
|
|
ldr r0, [r0, #0x10]
|
|
cmp r0, #0
|
|
ldrne r0, [r0]
|
|
cmpne r0, #3
|
|
beq _022F4EB4
|
|
ldr r1, _022F5048 ; =0x00000BBB
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F5034
|
|
_022F4EB4:
|
|
mov r0, r4
|
|
bl ov29_02348D3C
|
|
ldrh r1, [r4]
|
|
mov r5, r0
|
|
add r0, r6, #0x50
|
|
strh r1, [sp]
|
|
ldrh r2, [r4, #2]
|
|
ldrb r1, [sp]
|
|
mov ip, #0
|
|
strh r2, [sp, #2]
|
|
ldrh r2, [r4, #4]
|
|
bic r3, r1, #0x10
|
|
mov r1, #1
|
|
strh r2, [sp, #4]
|
|
ldrh r2, [r7]
|
|
strh r2, [sp, #6]
|
|
ldrh lr, [r7, #2]
|
|
ldrb r2, [sp, #6]
|
|
ldrb r4, [sp, #7]
|
|
strh lr, [sp, #8]
|
|
ldrh lr, [r7, #4]
|
|
bic r2, r2, #0x10
|
|
strh lr, [sp, #0xa]
|
|
strb ip, [sp, #7]
|
|
strb r3, [sp]
|
|
strb r2, [sp, #6]
|
|
bl RemoveGroundItem
|
|
mov r0, r7
|
|
bl RemoveEquivItemNoHole
|
|
ldrb r0, [r7, #1]
|
|
cmp r0, #0
|
|
beq _022F4F3C
|
|
mov r0, r7
|
|
bl ItemZInit
|
|
_022F4F3C:
|
|
add r1, sp, #6
|
|
add r0, r6, #0x50
|
|
mov r2, #1
|
|
bl SpawnItem
|
|
cmp r0, #0
|
|
bne _022F4F68
|
|
ldr r1, _022F504C ; =0x00000BBC
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
bl RemoveEmptyItemsInBagWrapper
|
|
b _022F5034
|
|
_022F4F68:
|
|
strb r4, [sp, #1]
|
|
ldrb r0, [r6, #0x54]
|
|
cmp r0, #0x81
|
|
bne _022F4F94
|
|
ldrh r0, [sp]
|
|
strh r0, [r6, #0x62]
|
|
ldrh r0, [sp, #2]
|
|
strh r0, [r6, #0x64]
|
|
ldrh r0, [sp, #4]
|
|
strh r0, [r6, #0x66]
|
|
b _022F4FDC
|
|
_022F4F94:
|
|
mov r0, r7
|
|
bl ov29_02346FB8
|
|
cmp r0, #0
|
|
blt _022F4FD0
|
|
#ifdef JAPAN
|
|
ldr r2, _022F5050 ; =DUNGEON_PTR
|
|
mov r1, #0x23c
|
|
ldr r3, [r2]
|
|
ldrh r2, [sp]
|
|
mla r1, r0, r1, r3
|
|
add r0, r1, #0x800
|
|
strh r2, [r0, #0x56]
|
|
#else
|
|
ldr r1, _022F5050 ; =DUNGEON_PTR
|
|
add r0, r0, r0, lsl #3
|
|
ldr r2, [r1]
|
|
ldrh r1, [sp]
|
|
add r0, r2, r0, lsl #6
|
|
add r0, r0, #0x800
|
|
strh r1, [r0, #0x56]
|
|
#endif
|
|
ldrh r1, [sp, #2]
|
|
strh r1, [r0, #0x58]
|
|
ldrh r1, [sp, #4]
|
|
strh r1, [r0, #0x5a]
|
|
_022F4FD0:
|
|
add r0, sp, #0
|
|
mov r1, r4
|
|
bl AddItemToBag
|
|
_022F4FDC:
|
|
bl RemoveEmptyItemsInBagWrapper
|
|
add r1, sp, #6
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
add r1, sp, #0
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
ldr r0, _022F5054 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
ldr r1, _022F5058 ; =0x00000BBD
|
|
mov r0, r8
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldr r1, _022F5050 ; =DUNGEON_PTR
|
|
mov r0, r8
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x20]
|
|
#else
|
|
ldrb r1, [r1, #0xc4]
|
|
#endif
|
|
bl TryTriggerMonsterHouse
|
|
add r0, sp, #0
|
|
mov r1, r5
|
|
bl ov29_02348ECC
|
|
cmp r0, #0
|
|
_022F5034:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_022F4DAC_OFFSET -0x2C1
|
|
#else
|
|
#define OV29_022F4DAC_OFFSET 0
|
|
#endif
|
|
_022F503C: .word 0x00000BBA + OV29_022F4DAC_OFFSET
|
|
_022F5040: .word 0x00000BAE + OV29_022F4DAC_OFFSET
|
|
#ifndef JAPAN
|
|
_022F5044: .word 0x00000BB1
|
|
#endif
|
|
_022F5048: .word 0x00000BBB + OV29_022F4DAC_OFFSET
|
|
_022F504C: .word 0x00000BBC + OV29_022F4DAC_OFFSET
|
|
_022F5050: .word DUNGEON_PTR
|
|
_022F5054: .word 0x00001317
|
|
_022F5058: .word 0x00000BBD + OV29_022F4DAC_OFFSET
|
|
arm_func_end ov29_022F4DAC
|
|
|
|
arm_func_start ov29_022F505C
|
|
ov29_022F505C: ; 0x022F505C
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0xc
|
|
mov r7, r0
|
|
ldrsh r0, [r7, #4]
|
|
ldrsh r1, [r7, #6]
|
|
ldr r5, [r7, #0xb4]
|
|
bl GetTile
|
|
mov r4, r0
|
|
mov r0, r7
|
|
mov r1, #0
|
|
mov r2, #7
|
|
bl GetItemToUse
|
|
mov r6, r0
|
|
mov r1, r6
|
|
mov r0, #0
|
|
bl PrepareItemForPrinting__02345728
|
|
ldrb r1, [r5, #0x4e]
|
|
cmp r1, #0x33
|
|
bhs _022F50E8
|
|
ldrb r0, [r6]
|
|
tst r0, #0x10
|
|
beq _022F50E8
|
|
ldrb r0, [r6]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F50E8
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
#ifdef JAPAN
|
|
mov r0, r7
|
|
mov r1, #0x8f0
|
|
#else
|
|
ldr r1, _022F5274 ; =0x00000BB1
|
|
mov r0, r7
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F526C
|
|
_022F50E8:
|
|
cmp r1, #0x81
|
|
bne _022F5118
|
|
ldrb r0, [r6]
|
|
tst r0, #8
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F5118
|
|
#ifdef JAPAN
|
|
ldr r1, _022F686C ; =0x000008EF
|
|
mov r0, r7
|
|
#else
|
|
mov r0, r7
|
|
mov r1, #0xbb0
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F526C
|
|
_022F5118:
|
|
ldr r0, [r4, #0x10]
|
|
cmp r0, #0
|
|
ldrne r1, [r0]
|
|
cmpne r1, #3
|
|
beq _022F513C
|
|
ldr r1, _022F5278 ; =0x00000BBB
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022F526C
|
|
_022F513C:
|
|
bl GetItemInfo
|
|
mov r4, r0
|
|
mov r1, r4
|
|
mov r0, #1
|
|
bl PrepareItemForPrinting__02345728
|
|
ldrh r2, [r6]
|
|
add r0, r7, #4
|
|
mov r1, #1
|
|
strh r2, [sp]
|
|
ldrh r3, [r6, #2]
|
|
ldrb r2, [sp]
|
|
strh r3, [sp, #2]
|
|
ldrh ip, [r6, #4]
|
|
bic r3, r2, #0x10
|
|
strh ip, [sp, #4]
|
|
ldrh r2, [r4]
|
|
strh r2, [sp, #6]
|
|
ldrh ip, [r4, #2]
|
|
ldrb r2, [sp, #6]
|
|
strh ip, [sp, #8]
|
|
ldrh r4, [r4, #4]
|
|
bic r2, r2, #0x10
|
|
strh r4, [sp, #0xa]
|
|
strb r3, [sp]
|
|
strb r2, [sp, #6]
|
|
bl RemoveGroundItem
|
|
mov r0, r6
|
|
bl RemoveEquivItemNoHole
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
beq _022F51C0
|
|
mov r0, r6
|
|
bl ItemZInit
|
|
_022F51C0:
|
|
add r1, sp, #0
|
|
add r0, r7, #4
|
|
mov r2, #1
|
|
bl SpawnItem
|
|
cmp r0, #0
|
|
bne _022F51EC
|
|
ldr r1, _022F527C ; =0x00000BBC
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
bl RemoveEmptyItemsInBagWrapper
|
|
b _022F526C
|
|
_022F51EC:
|
|
add r0, sp, #6
|
|
bl ov29_02348D3C
|
|
ldrb r1, [r5, #0x4e]
|
|
mov r4, r0
|
|
add r0, sp, #6
|
|
cmp r1, #0x81
|
|
bne _022F5228
|
|
ldrh r1, [sp, #6]
|
|
strh r1, [r5, #0x62]
|
|
ldrh r1, [sp, #8]
|
|
strh r1, [r5, #0x64]
|
|
ldrh r1, [sp, #0xa]
|
|
strh r1, [r5, #0x66]
|
|
bl AddItemToBagNoHeld
|
|
b _022F522C
|
|
_022F5228:
|
|
bl AddItemToBagNoHeld
|
|
_022F522C:
|
|
bl RemoveEmptyItemsInBagWrapper
|
|
ldr r0, _022F5280 ; =0x00001317
|
|
bl PlaySeByIdIfNotSilence
|
|
ldr r1, _022F5284 ; =0x00000BBD
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldr r1, _022F5288 ; =DUNGEON_PTR
|
|
mov r0, r7
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x20]
|
|
#else
|
|
ldrb r1, [r1, #0xc4]
|
|
#endif
|
|
bl TryTriggerMonsterHouse
|
|
add r0, sp, #6
|
|
mov r1, r4
|
|
bl ov29_02348ECC
|
|
cmp r0, #0
|
|
_022F526C:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_022F505C_OFFSET -0x2C1
|
|
#else
|
|
#define OV29_022F505C_OFFSET 0
|
|
#endif
|
|
#ifdef JAPAN
|
|
_022F686C: .word 0x000008EF
|
|
#else
|
|
_022F5274: .word 0x00000BB1
|
|
#endif
|
|
_022F5278: .word 0x00000BBB + OV29_022F505C_OFFSET
|
|
_022F527C: .word 0x00000BBC + OV29_022F505C_OFFSET
|
|
_022F5280: .word 0x00001317
|
|
_022F5284: .word 0x00000BBD + OV29_022F505C_OFFSET
|
|
_022F5288: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F505C
|