mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-26 00:26:19 -05:00
3607 lines
65 KiB
ArmAsm
3607 lines
65 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_02300108.inc"
|
|
|
|
.text
|
|
|
|
#ifndef JAPAN
|
|
arm_func_start GetMonsterDisplayNameType
|
|
GetMonsterDisplayNameType: ; 0x02300108
|
|
ldr r1, _02300160 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x1a000
|
|
ldrb r2, [r1, #0x23e]
|
|
cmp r2, #0
|
|
ldreqb r2, [r1, #0x245]
|
|
cmpeq r2, #0
|
|
bne _0230013C
|
|
ldrb r1, [r1, #0x244]
|
|
cmp r1, #0
|
|
ldreqb r1, [r0, #0xef]
|
|
cmpeq r1, #1
|
|
bne _0230014C
|
|
_0230013C:
|
|
ldrb r1, [r0, #6]
|
|
cmp r1, #0
|
|
movne r0, #1
|
|
bxne lr
|
|
_0230014C:
|
|
ldrb r0, [r0, #0xd8]
|
|
cmp r0, #2
|
|
moveq r0, #2
|
|
movne r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_02300160: .word DUNGEON_PTR
|
|
arm_func_end GetMonsterDisplayNameType
|
|
#endif
|
|
|
|
arm_func_start GetMonsterName
|
|
GetMonsterName: ; 0x02300164
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r4, lr}
|
|
ldr r2, _02301678 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
ldr r0, [r2]
|
|
add r0, r0, #0x1a000
|
|
ldrb r2, [r0, #0x19a]
|
|
cmp r2, #0
|
|
ldreqb r2, [r0, #0x1a1]
|
|
cmpeq r2, #0
|
|
bne _02301574
|
|
ldrb r0, [r0, #0x1a0]
|
|
cmp r0, #0
|
|
ldreqb r0, [r1, #0xef]
|
|
cmpeq r0, #1
|
|
bne _02300190
|
|
_02301574:
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
beq _02300190
|
|
ldr r1, _02300274 ; =0x00000C34
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
ldmia sp!, {r4, pc}
|
|
_02300190:
|
|
ldrb r0, [r1, #0xd8]
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
bl GetMonsterDisplayNameType
|
|
cmp r0, #1
|
|
bne _02300190
|
|
ldr r1, _02300274 ; =0x00000C34
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02300190:
|
|
#endif
|
|
cmp r0, #2
|
|
bne _023001A8
|
|
ldr r1, _02300278 ; =0x00000C32
|
|
#ifdef JAPAN
|
|
mov r0, r4
|
|
bl CopyStringFromId
|
|
ldmia sp!, {r4, pc}
|
|
_023001A8:
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
beq _0230025C
|
|
ldrb r0, [r1, #0xbc]
|
|
#else
|
|
mov r0, r5
|
|
bl CopyStringFromId
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_023001A8:
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
beq _0230025C
|
|
ldrb r0, [r4, #0xbc]
|
|
#endif
|
|
cmp r0, #0xb
|
|
bne _023001DC
|
|
mov r0, #0
|
|
bl GetExplorerMazeMonster
|
|
mov r1, r0
|
|
#ifdef JAPAN
|
|
mov r0, r4
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r4, pc}
|
|
#else
|
|
mov r0, r5
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
#endif
|
|
_023001DC:
|
|
cmp r0, #0xc
|
|
bne _02300200
|
|
mov r0, #1
|
|
bl GetExplorerMazeMonster
|
|
mov r1, r0
|
|
#ifdef JAPAN
|
|
mov r0, r4
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r4, pc}
|
|
#else
|
|
mov r0, r5
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
#endif
|
|
_02300200:
|
|
cmp r0, #0xd
|
|
bne _02300224
|
|
mov r0, #2
|
|
bl GetExplorerMazeMonster
|
|
mov r1, r0
|
|
#ifdef JAPAN
|
|
mov r0, r4
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r4, pc}
|
|
#else
|
|
mov r0, r5
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
#endif
|
|
_02300224:
|
|
cmp r0, #0xe
|
|
bne _02300248
|
|
mov r0, #3
|
|
bl GetExplorerMazeMonster
|
|
mov r1, r0
|
|
#ifdef JAPAN
|
|
mov r0, r4
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r4, pc}
|
|
_02300248:
|
|
ldrsh r1, [r1, #4]
|
|
mov r0, r4
|
|
mov r2, #0x4e
|
|
bl GetNameWithGender
|
|
ldmia sp!, {r4, pc}
|
|
_0230025C:
|
|
ldrsh r0, [r1, #0xc]
|
|
bl GetActiveTeamMember
|
|
mov r1, r0
|
|
mov r0, r4
|
|
bl sub_020585B4
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02301678: .word DUNGEON_PTR
|
|
_02300274: .word 0x00000973
|
|
_02300278: .word 0x00000971
|
|
#else
|
|
mov r0, r5
|
|
mov r2, #0x4e
|
|
bl sub_02056084
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02300248:
|
|
ldrsh r1, [r4, #4]
|
|
mov r0, r5
|
|
mov r2, #0x4e
|
|
bl GetNameWithGender
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0230025C:
|
|
ldrsh r0, [r4, #0xc]
|
|
bl GetActiveTeamMember
|
|
mov r1, r0
|
|
mov r0, r5
|
|
bl sub_020585B4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02300274: .word 0x00000C34
|
|
_02300278: .word 0x00000C32
|
|
#endif
|
|
arm_func_end GetMonsterName
|
|
|
|
arm_func_start ov29_0230027C
|
|
ov29_0230027C: ; 0x0230027C
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #0x100
|
|
ldrb r2, [r1, #0xd8]
|
|
mov r4, r0
|
|
cmp r2, #2
|
|
bne _023002B4
|
|
ldr r1, _023002C0 ; =0x00000C32
|
|
add r0, sp, #0
|
|
bl CopyStringFromId
|
|
ldr r1, _023002C4 ; =ov29_023527C0
|
|
add r2, sp, #0
|
|
mov r0, r4
|
|
bl SprintfStatic
|
|
b _023002B8
|
|
_023002B4:
|
|
bl GetMonsterName
|
|
_023002B8:
|
|
add sp, sp, #0x100
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_023002C0: .word 0x00000971
|
|
#else
|
|
_023002C0: .word 0x00000C32
|
|
#endif
|
|
_023002C4: .word ov29_023527C0
|
|
arm_func_end ov29_0230027C
|
|
|
|
arm_func_start SprintfStatic
|
|
SprintfStatic: ; 0x023002C8
|
|
stmdb sp!, {r0, r1, r2, r3}
|
|
stmdb sp!, {r3, lr}
|
|
add r2, sp, #0xc
|
|
bic r2, r2, #3
|
|
ldr r1, [sp, #0xc]
|
|
add r2, r2, #4
|
|
bl vsprintf
|
|
ldmia sp!, {r3, lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
arm_func_end SprintfStatic
|
|
|
|
arm_func_start ov29_023002F0
|
|
ov29_023002F0: ; 0x023002F0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrb r3, [r1, #0xd8]
|
|
mov r5, r0
|
|
mov r4, r2
|
|
cmp r3, #2
|
|
bne _02300328
|
|
ldr r0, _02300350 ; =0x00000C33
|
|
bl StringFromId
|
|
mov r3, r0
|
|
ldr r1, _02300354 ; =ov29_023527D0
|
|
mov r0, r5
|
|
mov r2, r4
|
|
bl SprintfStatic
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02300328:
|
|
ldrb r3, [r1, #6]
|
|
cmp r3, #0
|
|
beq _02300344
|
|
ldrsh r1, [r1, #4]
|
|
mov r2, #0x4e
|
|
bl GetName
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02300344:
|
|
ldrsh r1, [r1, #0xc]
|
|
bl sub_02058534
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02300350: .word 0x00000972
|
|
#else
|
|
_02300350: .word 0x00000C33
|
|
#endif
|
|
_02300354: .word ov29_023527D0
|
|
arm_func_end ov29_023002F0
|
|
|
|
arm_func_start ov29_02300358
|
|
ov29_02300358: ; 0x02300358
|
|
stmdb sp!, {r4, lr}
|
|
ldr r2, _02300400 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
ldr r0, [r2]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
ldrb r2, [r0, #0x19a]
|
|
cmp r2, #0
|
|
ldreqb r0, [r0, #0x1a1]
|
|
#else
|
|
ldrb r2, [r0, #0x23e]
|
|
cmp r2, #0
|
|
ldreqb r0, [r0, #0x245]
|
|
#endif
|
|
cmpeq r0, #0
|
|
bne _0230038C
|
|
ldrb r0, [r1, #0xef]
|
|
cmp r0, #1
|
|
bne _023003B0
|
|
_0230038C:
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
beq _023003B0
|
|
ldr r0, _02300404 ; =0x00000C35
|
|
bl StringFromId
|
|
mov r1, r0
|
|
mov r0, r4
|
|
bl strcpy
|
|
ldmia sp!, {r4, pc}
|
|
_023003B0:
|
|
ldrb r0, [r1, #0xd8]
|
|
cmp r0, #2
|
|
bne _023003D4
|
|
ldr r0, _02300408 ; =0x00000C33
|
|
bl StringFromId
|
|
mov r1, r0
|
|
mov r0, r4
|
|
bl strcpy
|
|
ldmia sp!, {r4, pc}
|
|
_023003D4:
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
beq _023003F0
|
|
ldrsh r1, [r1, #4]
|
|
mov r0, r4
|
|
bl GetNameRaw
|
|
ldmia sp!, {r4, pc}
|
|
_023003F0:
|
|
ldrsh r1, [r1, #0xc]
|
|
mov r0, r4
|
|
bl sub_0205858C
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_02300400: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_02300404: .word 0x00000974
|
|
_02300408: .word 0x00000972
|
|
#else
|
|
_02300404: .word 0x00000C35
|
|
_02300408: .word 0x00000C33
|
|
#endif
|
|
arm_func_end ov29_02300358
|
|
|
|
arm_func_start ov29_0230040C
|
|
ov29_0230040C: ; 0x0230040C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r5, r2
|
|
bl sub_02024FB8
|
|
ldrsh r1, [sp, #0x18]
|
|
mov r4, r0
|
|
cmp r1, #0
|
|
beq _02300448
|
|
cmp r1, #1
|
|
beq _02300454
|
|
cmp r1, #2
|
|
beq _02300488
|
|
b _02300490
|
|
_02300448:
|
|
mov r1, r5
|
|
bl GetMonsterName
|
|
b _02300490
|
|
_02300454:
|
|
#ifdef JAPAN
|
|
ldrsh r1, [r5, #4]
|
|
#else
|
|
mov r0, r5
|
|
bl GetMonsterDisplayNameType
|
|
cmp r0, #0
|
|
bne _02300478
|
|
ldrsh r1, [r5, #4]
|
|
mov r0, r4
|
|
#endif
|
|
mov r2, #0x6a
|
|
bl GetNameWithGender
|
|
b _02300490
|
|
#ifndef JAPAN
|
|
_02300478:
|
|
mov r0, r4
|
|
mov r1, r5
|
|
bl GetMonsterName
|
|
b _02300490
|
|
#endif
|
|
_02300488:
|
|
mov r1, r5
|
|
bl ov29_02300358
|
|
_02300490:
|
|
cmp r7, #0
|
|
addne r0, r7, r6, lsl #2
|
|
strne r4, [r0, #0x38]
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl ov29_0234B0B4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ov29_0230040C
|
|
|
|
arm_func_start IsMonsterDrowsy
|
|
IsMonsterDrowsy: ; 0x023004B0
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xbd]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end IsMonsterDrowsy
|
|
|
|
arm_func_start MonsterHasNonvolatileNonsleepStatus
|
|
MonsterHasNonvolatileNonsleepStatus: ; 0x023004E4
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xbf]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterHasNonvolatileNonsleepStatus
|
|
|
|
arm_func_start MonsterHasImmobilizingStatus
|
|
MonsterHasImmobilizingStatus: ; 0x02300500
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xc4]
|
|
cmp r0, #3
|
|
cmpne r0, #5
|
|
cmpne r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
bx lr
|
|
arm_func_end MonsterHasImmobilizingStatus
|
|
|
|
arm_func_start MonsterHasAttackInterferingStatus
|
|
MonsterHasAttackInterferingStatus: ; 0x02300520
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xd0]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterHasAttackInterferingStatus
|
|
|
|
arm_func_start MonsterHasSkillInterferingStatus
|
|
MonsterHasSkillInterferingStatus: ; 0x0230053C
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xd8]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #2
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #5
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #6
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterHasSkillInterferingStatus
|
|
|
|
arm_func_start MonsterHasLeechSeedStatus
|
|
MonsterHasLeechSeedStatus: ; 0x02300588
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xe0]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterHasLeechSeedStatus
|
|
|
|
arm_func_start MonsterHasWhifferStatus
|
|
MonsterHasWhifferStatus: ; 0x023005A4
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xec]
|
|
cmp r0, #2
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterHasWhifferStatus
|
|
|
|
arm_func_start IsMonsterVisuallyImpaired
|
|
IsMonsterVisuallyImpaired: ; 0x023005C0
|
|
stmdb sp!, {r4, lr}
|
|
ldr r4, [r0, #0xb4]
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, pc}
|
|
ldrb r0, [r4, #0xf1]
|
|
cmp r0, #2
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, pc}
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end IsMonsterVisuallyImpaired
|
|
|
|
arm_func_start IsMonsterMuzzled
|
|
IsMonsterMuzzled: ; 0x023005FC
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xf3]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end IsMonsterMuzzled
|
|
|
|
arm_func_start MonsterHasMiracleEyeStatus
|
|
MonsterHasMiracleEyeStatus: ; 0x02300618
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xf5]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterHasMiracleEyeStatus
|
|
|
|
arm_func_start MonsterHasNegativeStatus
|
|
MonsterHasNegativeStatus: ; 0x02300634
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r4, [r6, #0xb4]
|
|
mov r5, r1
|
|
bl IsMonsterDrowsy
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasNonvolatileNonsleepStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasImmobilizingStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasAttackInterferingStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasSkillInterferingStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasLeechSeedStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasWhifferStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl IsMonsterVisuallyImpaired
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl IsMonsterMuzzled
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl MonsterHasMiracleEyeStatus
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldrb r0, [r4, #0xfe]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x105]
|
|
#else
|
|
ldrb r0, [r4, #0x106]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov ip, #0
|
|
#ifdef JAPAN
|
|
add r3, r4, #0x120
|
|
#else
|
|
add r3, r4, #0x124
|
|
#endif
|
|
mov r1, ip
|
|
mov r2, #1
|
|
b _02300770
|
|
_02300740:
|
|
ldrb r0, [r3, ip, lsl #3]
|
|
add lr, r3, ip, lsl #3
|
|
tst r0, #1
|
|
movne r0, r2
|
|
moveq r0, r1
|
|
tst r0, #0xff
|
|
beq _0230076C
|
|
ldrh r0, [lr, #2]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
_0230076C:
|
|
add ip, ip, #1
|
|
_02300770:
|
|
cmp ip, #4
|
|
blt _02300740
|
|
mov r1, #0
|
|
b _02300798
|
|
_02300780:
|
|
add r0, r4, r1
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x115]
|
|
#else
|
|
ldrb r0, [r0, #0x119]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
add r1, r1, #1
|
|
_02300798:
|
|
cmp r1, #5
|
|
blt _02300780
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end MonsterHasNegativeStatus
|
|
|
|
arm_func_start IsMonsterSleeping
|
|
IsMonsterSleeping: ; 0x023007A8
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xbd]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #5
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end IsMonsterSleeping
|
|
|
|
arm_func_start ov29_023007DC
|
|
ov29_023007DC: ; 0x023007DC
|
|
ldr r3, [r0, #0xb4]
|
|
ldr r0, _02300814 ; =0x000003E7
|
|
ldrsh r2, [r3, #0x12]
|
|
ldrsh r1, [r3, #0x16]
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r3, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r0, #1
|
|
movgt r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_02300814: .word 0x000003E7
|
|
arm_func_end ov29_023007DC
|
|
|
|
arm_func_start CheckVariousStatuses2
|
|
CheckVariousStatuses2: ; 0x02300818
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
cmp r1, #0
|
|
ldr r4, [r5, #0xb4]
|
|
beq _02300840
|
|
mov r1, #1
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02300840:
|
|
ldrb r0, [r4, #0xbd]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #5
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #7
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl CheckVariousStatuses
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #6
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x104]
|
|
#else
|
|
ldrb r0, [r4, #0x105]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end CheckVariousStatuses2
|
|
|
|
arm_func_start ov29_023008DC
|
|
ov29_023008DC: ; 0x023008DC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
cmp r1, #0
|
|
ldr r4, [r5, #0xb4]
|
|
beq _02300904
|
|
mov r1, #1
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02300904:
|
|
ldrb r0, [r4, #0xbd]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #5
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #7
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl ov29_02300D00
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #6
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x104]
|
|
#else
|
|
ldrb r0, [r4, #0x105]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_023008DC
|
|
|
|
arm_func_start ov29_023009A0
|
|
ov29_023009A0: ; 0x023009A0
|
|
stmdb sp!, {r4, lr}
|
|
mov r1, #0
|
|
mov r4, r0
|
|
bl IsChargingAnyTwoTurnMove
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, pc}
|
|
mov r0, r4
|
|
mov r1, #0
|
|
bl CheckVariousStatuses2
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_023009A0
|
|
|
|
arm_func_start ov29_023009CC
|
|
ov29_023009CC: ; 0x023009CC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r4, [r5, #0xb4]
|
|
mov r1, #0
|
|
bl IsChargingAnyTwoTurnMove
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xbd]
|
|
cmp r0, #4
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #3
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xf3]
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r3, [r4, #0xc4]
|
|
cmp r3, #6
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r3, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r2, [r4, #0xd0]
|
|
cmp r2, #2
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #0xbd]
|
|
cmp r1, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xef]
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r1, #5
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r2, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r3, #3
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r3, #4
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xf1]
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xd8]
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, #1
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #7
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #3
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_023009CC
|
|
|
|
arm_func_start ov29_02300B04
|
|
ov29_02300B04: ; 0x02300B04
|
|
ldr r1, [r0, #0xb4]
|
|
ldrb r0, [r1, #0xbd]
|
|
cmp r0, #1
|
|
cmpne r0, #5
|
|
cmpne r0, #3
|
|
beq _02300B30
|
|
ldrb r0, [r1, #0xc4]
|
|
add r0, r0, #0xff
|
|
and r0, r0, #0xff
|
|
cmp r0, #6
|
|
bhi _02300B38
|
|
_02300B30:
|
|
mov r0, #0
|
|
bx lr
|
|
_02300B38:
|
|
mov r0, #1
|
|
bx lr
|
|
arm_func_end ov29_02300B04
|
|
|
|
arm_func_start CheckVariousConditions
|
|
CheckVariousConditions: ; 0x02300B40
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r4, [r5, #0xb4]
|
|
ldrb r0, [r4, #0xbc]
|
|
cmp r0, #7
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r4
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0
|
|
bne _02300B90
|
|
mov r0, r5
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02300B90:
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl CheckVariousStatuses2
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl CheckVariousStatuses
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl IsChargingAnyTwoTurnMove
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end CheckVariousConditions
|
|
|
|
arm_func_start ov29_02300BF8
|
|
ov29_02300BF8: ; 0x02300BF8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r4, [r5, #0xb4]
|
|
ldrb r0, [r4, #0xbc]
|
|
cmp r0, #7
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r4
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0
|
|
bne _02300C48
|
|
mov r0, r5
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02300C48:
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl ov29_023008DC
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl ov29_02300D00
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl IsChargingAnyTwoTurnMove
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_02300BF8
|
|
|
|
arm_func_start CheckVariousStatuses
|
|
CheckVariousStatuses: ; 0x02300CB0
|
|
ldr r1, [r0, #0xb4]
|
|
ldrb r0, [r1, #0xbd]
|
|
cmp r0, #2
|
|
cmpne r0, #4
|
|
cmpne r0, #0
|
|
movne r0, #1
|
|
bxne lr
|
|
ldrb r0, [r1, #0xc4]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #6
|
|
moveq r0, #1
|
|
bxeq lr
|
|
ldrb r0, [r1, #0xd2]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end CheckVariousStatuses
|
|
|
|
arm_func_start ov29_02300D00
|
|
ov29_02300D00: ; 0x02300D00
|
|
ldr r1, [r0, #0xb4]
|
|
ldrb r0, [r1, #0xbd]
|
|
cmp r0, #2
|
|
cmpne r0, #4
|
|
cmpne r0, #0
|
|
movne r0, #1
|
|
bxne lr
|
|
ldrb r0, [r1, #0xc4]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
cmp r0, #6
|
|
moveq r0, #1
|
|
bxeq lr
|
|
ldrb r0, [r1, #0xd2]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end ov29_02300D00
|
|
|
|
arm_func_start ov29_02300D50
|
|
ov29_02300D50: ; 0x02300D50
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, [r0, #0xb4]
|
|
ldrb r3, [r1, #0xc4]
|
|
cmp r3, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r3, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrb r2, [r1, #0xd0]
|
|
cmp r2, #7
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r2, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrb r1, [r1, #0xbf]
|
|
cmp r1, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r3, #6
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r2, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
bl CheckVariousStatuses
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_02300D50
|
|
|
|
arm_func_start ov29_02300DC0
|
|
ov29_02300DC0: ; 0x02300DC0
|
|
ldr ip, _02300DC8 ; =ov29_02300D50
|
|
bx ip
|
|
.align 2, 0
|
|
_02300DC8: .word ov29_02300D50
|
|
arm_func_end ov29_02300DC0
|
|
|
|
arm_func_start ov29_02300DCC
|
|
ov29_02300DCC: ; 0x02300DCC
|
|
stmdb sp!, {r3, lr}
|
|
cmp r1, #0
|
|
ldr r2, [r0, #0xb4]
|
|
bne _02300DF4
|
|
ldrb r1, [r2, #0xbd]
|
|
cmp r1, #2
|
|
cmpne r1, #4
|
|
cmpne r1, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, pc}
|
|
_02300DF4:
|
|
ldrb r1, [r2, #0xc4]
|
|
cmp r1, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r1, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r1, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r1, #6
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrb r1, [r2, #0xd0]
|
|
cmp r1, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r1, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
cmp r1, #7
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrb r1, [r2, #0xbf]
|
|
cmp r1, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_02300DCC
|
|
|
|
arm_func_start CanMonsterMoveInDirection
|
|
CanMonsterMoveInDirection: ; 0x02300E78
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r2, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrsh r1, [r2, #2]
|
|
bl GetMobilityTypeCheckSlipAndFloating
|
|
ldr r2, _02300F24 ; =DIRECTIONS_XY
|
|
mov ip, r5, lsl #2
|
|
ldr r1, _02300F28 ; =ov29_0235171E
|
|
ldrsh r3, [r2, ip]
|
|
ldrsh lr, [r6, #4]
|
|
mov r4, r0
|
|
ldrsh r2, [r6, #6]
|
|
ldrsh r1, [r1, ip]
|
|
add r0, lr, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x10
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
#ifdef JAPAN
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _02302330
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r4, #3
|
|
beq _02302330
|
|
mov r0, r6
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r4, #3
|
|
bne _02302330
|
|
mov r0, r6
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #2
|
|
bne _02302330
|
|
mov r0, r6
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _02302330
|
|
tst r5, #1
|
|
movne r4, #2
|
|
moveq r4, #3
|
|
_02302330:
|
|
#else
|
|
mov r0, r6
|
|
mov r1, r4
|
|
and r2, r5, #0xff
|
|
bl GetDirectionalMobilityType
|
|
mov r4, r0
|
|
#endif
|
|
ldrsh r0, [r6, #4]
|
|
ldrsh r1, [r6, #6]
|
|
bl GetTile
|
|
add r0, r0, r4
|
|
ldr r1, _02300F2C ; =ov29_02352798
|
|
and r2, r5, #7
|
|
ldrb r1, [r1, r2]
|
|
ldrb r0, [r0, #8]
|
|
tst r1, r0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02300F24: .word DIRECTIONS_XY
|
|
_02300F28: .word ov29_0235171E
|
|
_02300F2C: .word ov29_02352798
|
|
arm_func_end CanMonsterMoveInDirection
|
|
|
|
#ifndef JAPAN
|
|
arm_func_start GetDirectionalMobilityType
|
|
GetDirectionalMobilityType: ; 0x02300F30
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _02300FC4
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r5, #3
|
|
beq _02300FC4
|
|
mov r0, r6
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r5, #3
|
|
bne _02300FC4
|
|
cmp r5, #3
|
|
beq _02300F98
|
|
mov r0, r6
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r5, #2
|
|
bne _02300FC4
|
|
_02300F98:
|
|
mov r0, r6
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _02300FC4
|
|
cmp r4, #0xff
|
|
moveq r5, #3
|
|
beq _02300FC4
|
|
tst r4, #1
|
|
movne r5, #2
|
|
moveq r5, #3
|
|
_02300FC4:
|
|
mov r0, r5
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end GetDirectionalMobilityType
|
|
#endif
|
|
|
|
arm_func_start ov29_02300FCC
|
|
ov29_02300FCC: ; 0x02300FCC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
ldr r1, _02301050 ; =DIRECTIONS_XY
|
|
mov ip, r4, lsl #2
|
|
ldr r0, _02301054 ; =ov29_0235171E
|
|
ldrsh r3, [r1, ip]
|
|
ldrsh lr, [r5, #4]
|
|
ldrsh r1, [r0, ip]
|
|
ldrsh r2, [r5, #6]
|
|
add r0, lr, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x10
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrsh r0, [r5, #4]
|
|
ldrsh r1, [r5, #6]
|
|
bl GetTile
|
|
ldr r1, _02301058 ; =ov29_02352790
|
|
and r2, r4, #7
|
|
ldrb r1, [r1, r2]
|
|
ldrb r0, [r0, #8]
|
|
tst r1, r0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02301050: .word DIRECTIONS_XY
|
|
_02301054: .word ov29_0235171E
|
|
_02301058: .word ov29_02352790
|
|
arm_func_end ov29_02300FCC
|
|
|
|
arm_func_start ov29_0230105C
|
|
ov29_0230105C: ; 0x0230105C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r2, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrsh r1, [r2, #2]
|
|
bl GetMobilityTypeCheckSlipAndFloating
|
|
ldr r2, _0230110C ; =DIRECTIONS_XY
|
|
mov ip, r5, lsl #2
|
|
ldr r1, _02301110 ; =ov29_0235171E
|
|
ldrsh r3, [r2, ip]
|
|
ldrsh lr, [r6, #4]
|
|
mov r4, r0
|
|
ldrsh r2, [r6, #6]
|
|
ldrsh r1, [r1, ip]
|
|
add r0, lr, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x10
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
ldrne r0, [r0]
|
|
cmpne r0, #1
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
#ifdef JAPAN
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _023024DC_JP
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r4, #3
|
|
beq _023024DC_JP
|
|
mov r0, r6
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r4, #3
|
|
bne _023024DC_JP
|
|
mov r0, r6
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #2
|
|
bne _023024DC_JP
|
|
mov r0, r6
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _023024DC_JP
|
|
tst r5, #1
|
|
movne r4, #2
|
|
moveq r4, #3
|
|
_023024DC_JP:
|
|
#else
|
|
mov r0, r6
|
|
mov r1, r4
|
|
and r2, r5, #0xff
|
|
bl GetDirectionalMobilityType
|
|
mov r4, r0
|
|
#endif
|
|
ldrsh r0, [r6, #4]
|
|
ldrsh r1, [r6, #6]
|
|
bl GetTile
|
|
add r0, r0, r4
|
|
ldr r1, _02301114 ; =ov29_02352788
|
|
and r2, r5, #7
|
|
ldrb r1, [r1, r2]
|
|
ldrb r0, [r0, #8]
|
|
tst r1, r0
|
|
#ifdef JAPAN
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
#else
|
|
moveq r0, #0
|
|
movne r0, #1
|
|
#endif
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0230110C: .word DIRECTIONS_XY
|
|
_02301110: .word ov29_0235171E
|
|
_02301114: .word ov29_02352788
|
|
arm_func_end ov29_0230105C
|
|
|
|
arm_func_start IsMonsterCornered
|
|
IsMonsterCornered: ; 0x02301118
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, #0
|
|
b _02301148
|
|
_02301128:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl ov29_02301158
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
add r0, r4, #1
|
|
and r4, r0, #0xff
|
|
_02301148:
|
|
cmp r4, #8
|
|
blo _02301128
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end IsMonsterCornered
|
|
|
|
arm_func_start ov29_02301158
|
|
ov29_02301158: ; 0x02301158
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r2, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrsh r1, [r2, #2]
|
|
bl GetMobilityTypeCheckSlipAndFloating
|
|
ldr r2, _02301228 ; =DIRECTIONS_XY
|
|
mov ip, r5, lsl #2
|
|
ldr r1, _0230122C ; =ov29_0235171E
|
|
ldrsh r3, [r2, ip]
|
|
ldrsh lr, [r6, #4]
|
|
mov r4, r0
|
|
ldrsh r2, [r6, #6]
|
|
ldrsh r1, [r1, ip]
|
|
add r0, lr, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x10
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldr r1, [r0, #0xc]
|
|
cmp r1, #0
|
|
beq _023011E0
|
|
ldr r0, [r1]
|
|
cmp r0, #1
|
|
bne _023011E0
|
|
mov r0, r6
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl GetTreatmentBetweenMonsters
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
_023011E0:
|
|
#ifdef JAPAN
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _02302654
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r4, #3
|
|
beq _02302654
|
|
mov r0, r6
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r4, #3
|
|
bne _02302654
|
|
mov r0, r6
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #2
|
|
bne _02302654
|
|
mov r0, r6
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _02302654
|
|
tst r5, #1
|
|
movne r4, #2
|
|
moveq r4, #3
|
|
_02302654:
|
|
#else
|
|
mov r0, r6
|
|
mov r1, r4
|
|
and r2, r5, #0xff
|
|
bl GetDirectionalMobilityType
|
|
mov r4, r0
|
|
#endif
|
|
ldrsh r0, [r6, #4]
|
|
ldrsh r1, [r6, #6]
|
|
bl GetTile
|
|
add r0, r0, r4
|
|
ldr r1, _02301230 ; =ov29_02352780
|
|
and r2, r5, #7
|
|
ldrb r1, [r1, r2]
|
|
ldrb r0, [r0, #8]
|
|
tst r1, r0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02301228: .word DIRECTIONS_XY
|
|
_0230122C: .word ov29_0235171E
|
|
_02301230: .word ov29_02352780
|
|
arm_func_end ov29_02301158
|
|
|
|
arm_func_start CanAttackInDirection
|
|
CanAttackInDirection: ; 0x02301234
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r2, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrsh r1, [r2, #2]
|
|
bl GetMobilityTypeCheckSlipAndFloating
|
|
mov r4, r0
|
|
ldr r1, _023012EC ; =DIRECTIONS_XY
|
|
mov ip, r5, lsl #2
|
|
cmp r4, #1
|
|
ldr r0, _023012F0 ; =ov29_0235171E
|
|
ldrsh r3, [r1, ip]
|
|
ldrsh lr, [r6, #4]
|
|
ldrsh r1, [r0, ip]
|
|
ldrsh r2, [r6, #6]
|
|
add r0, lr, r3
|
|
movls r4, #2
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldrh r1, [r0]
|
|
tst r1, #0x10
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
ldrne r0, [r0]
|
|
cmpne r0, #1
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
#ifdef JAPAN
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _02302778
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r4, #3
|
|
beq _02302778
|
|
mov r0, r6
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r4, #3
|
|
bne _02302778
|
|
mov r0, r6
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #2
|
|
bne _02302778
|
|
mov r0, r6
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _02302778
|
|
tst r5, #1
|
|
movne r4, #2
|
|
moveq r4, #3
|
|
_02302778:
|
|
#else
|
|
mov r0, r6
|
|
mov r1, r4
|
|
and r2, r5, #0xff
|
|
bl GetDirectionalMobilityType
|
|
mov r4, r0
|
|
#endif
|
|
ldrsh r0, [r6, #4]
|
|
ldrsh r1, [r6, #6]
|
|
bl GetTile
|
|
add r0, r0, r4
|
|
ldr r1, _023012F4 ; =ov29_02352778
|
|
and r2, r5, #7
|
|
ldrb r1, [r1, r2]
|
|
ldrb r0, [r0, #8]
|
|
tst r1, r0
|
|
#ifdef JAPAN
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
#else
|
|
moveq r0, #0
|
|
movne r0, #1
|
|
#endif
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023012EC: .word DIRECTIONS_XY
|
|
_023012F0: .word ov29_0235171E
|
|
_023012F4: .word ov29_02352778
|
|
arm_func_end CanAttackInDirection
|
|
|
|
arm_func_start CanAiMonsterMoveInDirection
|
|
CanAiMonsterMoveInDirection: ; 0x023012F8
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r8, r0
|
|
ldr r3, [r8, #0xb4]
|
|
mov r7, r1
|
|
ldrsh r1, [r3, #2]
|
|
mov r6, r2
|
|
bl GetMobilityTypeCheckSlipAndFloating
|
|
mov r1, #0
|
|
strb r1, [r6]
|
|
ldr r2, _02301484 ; =DIRECTIONS_XY
|
|
mov r4, r7, lsl #2
|
|
ldr r1, _02301488 ; =ov29_0235171E
|
|
ldrsh r3, [r2, r4]
|
|
ldrsh ip, [r8, #4]
|
|
mov r5, r0
|
|
ldrsh r2, [r8, #6]
|
|
ldrsh r1, [r1, r4]
|
|
add r0, ip, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
mov r4, r0
|
|
ldrh r0, [r4]
|
|
tst r0, #0x10
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
tst r0, #0x40
|
|
beq _02301390
|
|
ldr r0, _0230148C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x793]
|
|
cmp r0, #0
|
|
bne _02301390
|
|
mov r0, r8
|
|
mov r1, #0xf
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_02301390:
|
|
ldr r0, [r4, #0x10]
|
|
cmp r0, #0
|
|
beq _023013E4
|
|
mov r0, r8
|
|
mov r1, #0xe
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _023013E4
|
|
ldr r1, [r4, #0x10]
|
|
ldr r0, [r1]
|
|
cmp r0, #2
|
|
bne _023013E4
|
|
ldrb r0, [r1, #0x20]
|
|
cmp r0, #0
|
|
bne _023013DC
|
|
ldr r0, [r8, #0xb4]
|
|
ldrb r0, [r0, #0xf1]
|
|
cmp r0, #3
|
|
bne _023013E4
|
|
_023013DC:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_023013E4:
|
|
ldrh r0, [r4]
|
|
and r0, r0, #3
|
|
cmp r0, #2
|
|
bne _0230142C
|
|
ldr r0, _0230148C ; =DUNGEON_PTR
|
|
ldr r1, _02301490 ; =SECONDARY_TERRAIN_TYPES
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
ldrb r0, [r1, r0]
|
|
cmp r0, #1
|
|
bne _0230142C
|
|
mov r0, r8
|
|
mov r1, #0x14
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_0230142C:
|
|
#ifdef JAPAN
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _0230295C
|
|
ldr r0, [r8, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r5, #3
|
|
beq _0230295C
|
|
mov r0, r8
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r5, #3
|
|
bne _0230295C
|
|
mov r0, r8
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r5, #2
|
|
bne _0230295C
|
|
mov r0, r8
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _0230295C
|
|
tst r7, #1
|
|
movne r5, #2
|
|
moveq r5, #3
|
|
_0230295C:
|
|
#else
|
|
mov r0, r8
|
|
mov r1, r5
|
|
and r2, r7, #0xff
|
|
bl GetDirectionalMobilityType
|
|
mov r5, r0
|
|
#endif
|
|
ldrsh r0, [r8, #4]
|
|
ldrsh r1, [r8, #6]
|
|
bl GetTile
|
|
add r0, r0, r5
|
|
ldr r1, _02301494 ; =ov29_02352770
|
|
and r2, r7, #7
|
|
ldrb r1, [r1, r2]
|
|
ldrb r0, [r0, #8]
|
|
tst r1, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r0, [r4, #0xc]
|
|
cmp r0, #0
|
|
mov r0, #1
|
|
strneb r0, [r6]
|
|
movne r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_02301484: .word DIRECTIONS_XY
|
|
_02301488: .word ov29_0235171E
|
|
_0230148C: .word DUNGEON_PTR
|
|
_02301490: .word SECONDARY_TERRAIN_TYPES
|
|
_02301494: .word ov29_02352770
|
|
arm_func_end CanAiMonsterMoveInDirection
|
|
|
|
arm_func_start ov29_02301498
|
|
ov29_02301498: ; 0x02301498
|
|
#ifdef JAPAN
|
|
#define OV29_02301498_OFFSET -4
|
|
#else
|
|
#define OV29_02301498_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r1, [r5, #0xb4]
|
|
ldrsh r1, [r1, #2]
|
|
bl GetMobilityTypeCheckSlipAndFloating
|
|
#ifdef JAPAN
|
|
mov r4, r0
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _02302A30_JP
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #0xef]
|
|
cmp r0, #3
|
|
moveq r4, #3
|
|
beq _02302A30_JP
|
|
mov r0, r5
|
|
mov r1, #0x10
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r4, #3
|
|
bne _02302A30_JP
|
|
mov r0, r5
|
|
mov r1, #0xc
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #2
|
|
bne _02302A30_JP
|
|
mov r0, r5
|
|
mov r1, #0xd
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #3
|
|
_02302A30_JP:
|
|
#else
|
|
mov r1, r0
|
|
mov r0, r5
|
|
mov r2, #0xff
|
|
bl GetDirectionalMobilityType
|
|
mov r4, r0
|
|
#endif
|
|
cmp r4, #3
|
|
bne _023014FC
|
|
ldr r4, [r5, #0xb4]
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
add r1, r4, #0x200
|
|
ldrsh r2, [r1, #0x12 + OV29_02301498_OFFSET]
|
|
add r0, r2, r0
|
|
strh r0, [r1, #0x12 + OV29_02301498_OFFSET]
|
|
ldrsh r0, [r1, #0x12 + OV29_02301498_OFFSET]
|
|
cmp r0, #0xc8
|
|
mov r0, #0
|
|
strgeh r0, [r1, #0x12 + OV29_02301498_OFFSET]
|
|
movge r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_023014FC:
|
|
ldr r0, _0230158C ; =DUNGEON_PTR
|
|
ldr r1, _02301590 ; =SECONDARY_TERRAIN_TYPES
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
ldrb r0, [r1, r0]
|
|
cmp r0, #1
|
|
cmpeq r4, #1
|
|
bne _02301534
|
|
mov r0, r5
|
|
mov r1, #0x14
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r4, #0
|
|
_02301534:
|
|
ldrsh r0, [r5, #4]
|
|
ldrsh r1, [r5, #6]
|
|
bl GetTile
|
|
add r0, r0, r4
|
|
ldrb r0, [r0, #8]
|
|
cmp r0, #0x54
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #0x51
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #0x45
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #0x15
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #0x55
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0230158C: .word DUNGEON_PTR
|
|
_02301590: .word SECONDARY_TERRAIN_TYPES
|
|
arm_func_end ov29_02301498
|
|
|
|
arm_func_start ov29_02301594
|
|
ov29_02301594: ; 0x02301594
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r1
|
|
mov r1, #3
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
cmpne r4, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_02301594
|
|
|
|
arm_func_start ShouldMonsterRunAway
|
|
ShouldMonsterRunAway: ; 0x023015B8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r4, [r5, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x103]
|
|
cmp r0, #0
|
|
ldrneb r0, [r4, #0x104]
|
|
#else
|
|
ldrb r0, [r4, #0x104]
|
|
cmp r0, #0
|
|
ldrneb r0, [r4, #0x105]
|
|
#endif
|
|
cmpne r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0
|
|
bne _0230169C
|
|
mov r0, r5
|
|
mov r1, #0x2b
|
|
bl AbilityIsActive
|
|
cmp r0, #0
|
|
beq _02301644
|
|
ldrsh r2, [r4, #0x12]
|
|
ldrsh r1, [r4, #0x16]
|
|
ldr r0, _023016A4 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
ldrsh r1, [r4, #0x10]
|
|
add r0, r2, r2, lsr #31
|
|
cmp r1, r0, asr #1
|
|
movlt r0, #1
|
|
movge r0, #0
|
|
tst r0, #0xff
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_02301644:
|
|
mov r0, r5
|
|
mov r1, #0xa
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, #6
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
beq _0230169C
|
|
ldrsh r2, [r4, #0x12]
|
|
ldrsh r1, [r4, #0x16]
|
|
ldr r0, _023016A4 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
ldrsh r1, [r4, #0x10]
|
|
add r0, r2, r2, lsr #31
|
|
cmp r1, r0, asr #1
|
|
movle r0, #1
|
|
ldmleia sp!, {r3, r4, r5, pc}
|
|
_0230169C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_023016A4: .word 0x000003E7
|
|
arm_func_end ShouldMonsterRunAway
|
|
|
|
arm_func_start ShouldMonsterRunAwayVariation
|
|
ShouldMonsterRunAwayVariation: ; 0x023016A8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl ov29_023016D8
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ShouldMonsterRunAwayVariation
|
|
|
|
arm_func_start ov29_023016D8
|
|
ov29_023016D8: ; 0x023016D8
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r4, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrb r1, [r4, #7]
|
|
cmp r1, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
mov r1, #0x2b
|
|
bl AbilityIsActive
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldrsh r2, [r4, #0x12]
|
|
ldrsh r1, [r4, #0x16]
|
|
ldr r0, _02301758 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
ldrsh r1, [r4, #0x10]
|
|
add r0, r2, r2, lsr #31
|
|
cmp r1, r0, asr #1
|
|
movle r1, #1
|
|
movgt r1, #0
|
|
and r2, r1, #0xff
|
|
mov r0, r4
|
|
mov r1, #4
|
|
bl UpdateStateFlags
|
|
cmp r5, #0
|
|
cmpne r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl ov29_022E62A8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_02301758: .word 0x000003E7
|
|
arm_func_end ov29_023016D8
|
|
|
|
arm_func_start GetTreatmentBetweenMonsters
|
|
GetTreatmentBetweenMonsters: ; 0x0230175C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r4, [r0, #0xb4]
|
|
ldr r5, [r1, #0xb4]
|
|
cmp r0, r1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #9]
|
|
cmp r1, #1
|
|
ldrneb r1, [r5, #9]
|
|
cmpne r1, #1
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #0xbc]
|
|
cmp r1, #7
|
|
ldrneb r1, [r5, #0xbc]
|
|
cmpne r1, #7
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r3, #0
|
|
beq _023017C4
|
|
ldrb r1, [r4, #6]
|
|
cmp r1, #0
|
|
ldreqb r1, [r5, #0xc4]
|
|
cmpeq r1, #6
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_023017C4:
|
|
cmp r2, #0
|
|
ldreqb r1, [r5, #0xef]
|
|
cmpeq r1, #1
|
|
bne _023017E4
|
|
bl CanSeeInvisibleMonsters
|
|
cmp r0, #0
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_023017E4:
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x10b]
|
|
#else
|
|
ldrb r0, [r4, #0x10c]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _02301804
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0
|
|
movne r1, #0
|
|
moveq r1, #1
|
|
b _02301810
|
|
_02301804:
|
|
cmp r0, #1
|
|
moveq r1, #2
|
|
movne r1, #3
|
|
_02301810:
|
|
ldrb r0, [r4, #9]
|
|
cmp r0, #0
|
|
beq _02301828
|
|
cmp r0, #3
|
|
moveq r2, #1
|
|
b _02301844
|
|
_02301828:
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
movne r2, #1
|
|
moveq r2, #0
|
|
cmp r0, #0
|
|
ldrneb r0, [r4, #8]
|
|
cmpne r0, #0
|
|
_02301844:
|
|
ldrb r0, [r5, #9]
|
|
movne r2, #0
|
|
cmp r0, #0
|
|
beq _02301860
|
|
cmp r0, #3
|
|
moveq r3, #1
|
|
b _0230187C
|
|
_02301860:
|
|
ldrb r0, [r5, #6]
|
|
cmp r0, #0
|
|
movne r3, #1
|
|
moveq r3, #0
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #8]
|
|
cmpne r0, #0
|
|
_0230187C:
|
|
ldrb r0, [r5, #0xd8]
|
|
movne r3, #0
|
|
cmp r0, #2
|
|
ldr r0, _023018A8 ; =ov29_023527A0
|
|
moveq r4, #1
|
|
add r0, r0, r1, lsl #3
|
|
add r0, r0, r2, lsl #2
|
|
movne r4, #0
|
|
add r0, r0, r3, lsl #1
|
|
ldrb r0, [r4, r0]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_023018A8: .word ov29_023527A0
|
|
arm_func_end GetTreatmentBetweenMonsters
|
|
|
|
arm_func_start ov29_023018AC
|
|
ov29_023018AC: ; 0x023018AC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r4, [r0, #0xb4]
|
|
ldr r5, [r1, #0xb4]
|
|
ldrb r0, [r4, #0xbc]
|
|
cmp r0, #7
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r4
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
movne r0, #2
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r4, #9]
|
|
cmp r0, #0
|
|
#ifndef JAPAN
|
|
cmpne r0, #3
|
|
#endif
|
|
movne r0, #2
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r5, #0xbc]
|
|
cmp r0, #7
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
movne r0, #2
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r5, #9]
|
|
cmp r0, #0
|
|
#ifndef JAPAN
|
|
cmpne r0, #3
|
|
#endif
|
|
movne r0, #2
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #6]
|
|
ldrb r0, [r5, #6]
|
|
cmp r1, r0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
#ifdef JAPAN
|
|
and r0, r0, #0xff
|
|
#endif
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_023018AC
|
|
|
|
arm_func_start SafeguardIsActive
|
|
SafeguardIsActive: ; 0x02301940
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
ldr r3, [r4, #0xb4]
|
|
mov r5, r0
|
|
ldrb r0, [r3, #0xd5]
|
|
cmp r0, #2
|
|
bne _02301988
|
|
cmp r2, #0
|
|
beq _02301980
|
|
mov r0, #0
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02301990 ; =0x00000C36
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02301980:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02301988:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02301990: .word 0x00000975
|
|
#else
|
|
_02301990: .word 0x00000C36
|
|
#endif
|
|
arm_func_end SafeguardIsActive
|
|
|
|
arm_func_start LeafGuardIsActive
|
|
LeafGuardIsActive: ; 0x02301994
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r1
|
|
mov r6, r0
|
|
mov r0, r5
|
|
mov r4, r2
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
bne _02301A00
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x7b
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02301A0C
|
|
cmp r0, #0
|
|
beq _02301A00
|
|
cmp r4, #0
|
|
beq _023019F8
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02301A08 ; =0x00000C37
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023019F8:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_02301A00:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02301A08: .word 0x00000976
|
|
#else
|
|
_02301A08: .word 0x00000C37
|
|
#endif
|
|
arm_func_end LeafGuardIsActive
|
|
|
|
arm_func_start DefenderAbilityIsActive__02301A0C
|
|
DefenderAbilityIsActive__02301A0C: ; 0x02301A0C
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
cmp r6, r5
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
cmp r7, r6
|
|
#endif
|
|
beq _02301A50
|
|
bl IsMonster__02301A60
|
|
cmp r0, #0
|
|
#ifdef JAPAN
|
|
beq _02301A50
|
|
mov r0, r6
|
|
#else
|
|
cmpne r4, #0
|
|
beq _02301A50
|
|
mov r0, r7
|
|
#endif
|
|
mov r1, #0x53
|
|
bl AbilityIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
#ifdef JAPAN
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
_02301A50:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl AbilityIsActive
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
#else
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02301A50:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl AbilityIsActive
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
#endif
|
|
arm_func_end DefenderAbilityIsActive__02301A0C
|
|
|
|
arm_func_start IsMonster__02301A60
|
|
IsMonster__02301A60: ; 0x02301A60
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldr r0, [r0]
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end IsMonster__02301A60
|
|
|
|
arm_func_start ov29_02301A84
|
|
ov29_02301A84: ; 0x02301A84
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #8
|
|
mov r4, r1
|
|
mov r5, r0
|
|
mov r0, r4
|
|
mov sb, r2
|
|
bl GetApparentWeather
|
|
ldr r6, _02301B24 ; =EXCL_ITEM_EFFECTS_WEATHER_NO_STATUS
|
|
mov r7, r0
|
|
ldrb r0, [r6, r7]
|
|
mov r8, #0
|
|
cmp r0, #0
|
|
beq _02301B18
|
|
ldrb r1, [r6, r7]
|
|
mov r0, r4
|
|
bl ExclusiveItemEffectIsActive__022FFF28
|
|
cmp r0, #0
|
|
beq _02301B18
|
|
cmp sb, #0
|
|
ldrb r6, [r6, r7]
|
|
beq _02301B14
|
|
mov r0, r8
|
|
mov r1, r4
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
add r2, sp, #0
|
|
mov r0, r4
|
|
mov r1, r6
|
|
bl GetExclusiveItemWithEffectFromBag
|
|
add r1, sp, #0
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
ldr r2, _02301B28 ; =0x00000C39
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02301B14:
|
|
mov r8, #1
|
|
_02301B18:
|
|
mov r0, r8
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_02301B24: .word EXCL_ITEM_EFFECTS_WEATHER_NO_STATUS
|
|
#ifdef JAPAN
|
|
_02301B28: .word 0x00000978
|
|
#else
|
|
_02301B28: .word 0x00000C39
|
|
#endif
|
|
arm_func_end ov29_02301A84
|
|
|
|
arm_func_start IsProtectedFromStatDrops
|
|
IsProtectedFromStatDrops: ; 0x02301B2C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r0, #0
|
|
mov r5, r2
|
|
mov r6, r1
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, r6
|
|
bl MistIsActive
|
|
movs r4, r0
|
|
beq _02301BB0
|
|
cmp r5, #0
|
|
beq _02301BA8
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r4, #1
|
|
bne _02301B8C
|
|
ldr r2, _02301C20 ; =0x00000C38
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _02301BA8
|
|
_02301B8C:
|
|
cmp r4, #2
|
|
bne _02301BA8
|
|
ldr r2, _02301C24 ; =0x00000C39
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r3, #0x26
|
|
bl ov29_02314DC4
|
|
_02301BA8:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02301BB0:
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0xf
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02301A0C
|
|
cmp r0, #0
|
|
bne _02301BE8
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r2, #0x18
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__02301A0C
|
|
cmp r0, #0
|
|
beq _02301C18
|
|
_02301BE8:
|
|
cmp r5, #0
|
|
beq _02301C10
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _02301C28 ; =0x00000C3A
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_02301C10:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02301C18:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_02301C20: .word 0x00000977
|
|
_02301C24: .word 0x00000978
|
|
_02301C28: .word 0x00000979
|
|
#else
|
|
_02301C20: .word 0x00000C38
|
|
_02301C24: .word 0x00000C39
|
|
_02301C28: .word 0x00000C3A
|
|
#endif
|
|
arm_func_end IsProtectedFromStatDrops
|
|
|
|
arm_func_start ov29_02301C2C
|
|
ov29_02301C2C: ; 0x02301C2C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
ldr r8, [sl, #0xb4]
|
|
mov sb, r1
|
|
ldrb r0, [r8, #0xbd]
|
|
cmp r0, #1
|
|
cmpne r0, #5
|
|
cmpne r0, #3
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov r6, #0
|
|
#ifdef JAPAN
|
|
add r5, r8, #0x120
|
|
#else
|
|
add r5, r8, #0x124
|
|
#endif
|
|
mov fp, r6
|
|
mov r4, #1
|
|
b _02301CCC
|
|
_02301C68:
|
|
ldrb r1, [r5, r6, lsl #3]
|
|
add r7, r5, r6, lsl #3
|
|
tst r1, #1
|
|
movne r0, r4
|
|
moveq r0, fp
|
|
tst r0, #0xff
|
|
beq _02301CC8
|
|
ldrb r0, [r8, #7]
|
|
cmp r0, #0
|
|
bne _02301C98
|
|
tst r1, #4
|
|
beq _02301CC8
|
|
_02301C98:
|
|
mov r0, sl
|
|
mov r1, r7
|
|
mov r2, #1
|
|
bl ov29_02324BE8
|
|
cmp r0, #0
|
|
ldrneb r0, [r7, #6]
|
|
cmpne r0, #0
|
|
beq _02301CC8
|
|
ldrh r0, [r7, #4]
|
|
cmp r0, sb
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_02301CC8:
|
|
add r6, r6, #1
|
|
_02301CCC:
|
|
cmp r6, #4
|
|
blt _02301C68
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end ov29_02301C2C
|
|
|
|
arm_func_start NoGastroAcidStatus
|
|
NoGastroAcidStatus: ; 0x02301CDC
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl IsMonster__02301A60
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r0, [r4, #0xb4]
|
|
ldrb r0, [r0, #0xd8]
|
|
cmp r0, #4
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end NoGastroAcidStatus
|
|
|
|
arm_func_start AbilityIsActive
|
|
AbilityIsActive: ; 0x02301D10
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl IsMonster__02301A60
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r4, #0
|
|
ldr r1, [r5, #0xb4]
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r0, [r1, #0x60]
|
|
cmp r0, r4
|
|
bne _02301D58
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl NoGastroAcidStatus
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02301D58:
|
|
ldrb r0, [r1, #0x61]
|
|
cmp r0, r4
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl NoGastroAcidStatus
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end AbilityIsActive
|
|
|
|
arm_func_start AbilityIsActiveVeneer
|
|
AbilityIsActiveVeneer: ; 0x02301D78
|
|
ldr ip, _02301D80 ; =AbilityIsActive
|
|
bx ip
|
|
.align 2, 0
|
|
_02301D80: .word AbilityIsActive
|
|
arm_func_end AbilityIsActiveVeneer
|
|
|
|
arm_func_start OtherMonsterAbilityIsActive
|
|
OtherMonsterAbilityIsActive: ; 0x02301D84
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r7, #0
|
|
ldr r6, _02301E14 ; =DUNGEON_PTR
|
|
b _02303354
|
|
_023032F4:
|
|
ldr r0, [r6]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r8, [r0, #0xad4]
|
|
mov r0, r8
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
cmpne r5, r8
|
|
beq _02303348
|
|
mov r0, r5
|
|
mov r1, r8
|
|
bl ov29_022FAFD4
|
|
cmp r0, #0
|
|
beq _02303348
|
|
mov r0, r5
|
|
mov r1, r8
|
|
mov r2, r4
|
|
bl DefenderAbilityIsActive__02301A0C
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_02303348:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
_02303354:
|
|
cmp r7, #0x14
|
|
blt _023032F4
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, #0
|
|
mov r4, #1
|
|
ldr r8, _02301E14 ; =DUNGEON_PTR
|
|
b _02301E04
|
|
_02301DA0:
|
|
ldr r0, [r8]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr sb, [r0, #0xb78]
|
|
mov r0, sb
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
cmpne r7, sb
|
|
beq _02301DF8
|
|
mov r0, r7
|
|
mov r1, sb
|
|
bl ov29_022FAFD4
|
|
cmp r0, #0
|
|
beq _02301DF8
|
|
mov r0, r7
|
|
mov r1, sb
|
|
mov r2, r6
|
|
mov r3, r4
|
|
bl DefenderAbilityIsActive__02301A0C
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_02301DF8:
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
_02301E04:
|
|
cmp r5, #0x14
|
|
blt _02301DA0
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
#endif
|
|
.align 2, 0
|
|
_02301E14: .word DUNGEON_PTR
|
|
arm_func_end OtherMonsterAbilityIsActive
|
|
|
|
arm_func_start LevitateIsActive
|
|
LevitateIsActive: ; 0x02301E18
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl GravityIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, pc}
|
|
mov r0, r4
|
|
mov r1, #0x37
|
|
bl AbilityIsActive
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end LevitateIsActive
|
|
|
|
arm_func_start MonsterIsType
|
|
MonsterIsType: ; 0x02301E50
|
|
cmp r1, #0
|
|
ldr r2, [r0, #0xb4]
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldrb r0, [r2, #0x5e]
|
|
cmp r0, r1
|
|
moveq r0, #1
|
|
bxeq lr
|
|
ldrb r0, [r2, #0x5f]
|
|
cmp r0, r1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end MonsterIsType
|
|
|
|
arm_func_start IsTypeAffectedByGravity
|
|
IsTypeAffectedByGravity: ; 0x02301E88
|
|
stmdb sp!, {r3, lr}
|
|
cmp r1, #0xa
|
|
bne _02301EA4
|
|
bl GravityIsActive
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
_02301EA4:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end IsTypeAffectedByGravity
|
|
|
|
arm_func_start HasTypeAffectedByGravity
|
|
HasTypeAffectedByGravity: ; 0x02301EAC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r3, [r0, #0xb4]
|
|
cmp r1, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
ldrb r2, [r3, #0x5e]
|
|
cmp r2, r1
|
|
bne _02301ED4
|
|
bl IsTypeAffectedByGravity
|
|
ldmia sp!, {r3, pc}
|
|
_02301ED4:
|
|
ldrb r2, [r3, #0x5f]
|
|
cmp r2, r1
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
bl IsTypeAffectedByGravity
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end HasTypeAffectedByGravity
|
|
|
|
arm_func_start CanSeeInvisibleMonsters
|
|
CanSeeInvisibleMonsters: ; 0x02301EEC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, [r0, #0xb4]
|
|
ldrb r1, [r1, #0xf1]
|
|
cmp r1, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
mov r1, #0x21
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end CanSeeInvisibleMonsters
|
|
|
|
arm_func_start ov29_02301F20
|
|
ov29_02301F20: ; 0x02301F20
|
|
ldr r2, [r0, #0xb4]
|
|
ldrb r0, [r2, #7]
|
|
cmp r0, #0
|
|
beq _02301F38
|
|
cmp r1, #1
|
|
b _02301F40
|
|
_02301F38:
|
|
ldrb r0, [r2, #0xa8]
|
|
cmp r0, r1
|
|
_02301F40:
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end ov29_02301F20
|
|
|
|
arm_func_start HasDropeyeStatus
|
|
HasDropeyeStatus: ; 0x02301F50
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
beq _02301F78
|
|
ldr r0, [r4, #0xb4]
|
|
ldrb r0, [r0, #0xf1]
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, pc}
|
|
_02301F78:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end HasDropeyeStatus
|
|
|
|
arm_func_start IqSkillIsEnabled
|
|
IqSkillIsEnabled: ; 0x02301F80
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0xb4]
|
|
ldrb r0, [r2, #6]
|
|
cmp r0, #0
|
|
bne _02301FAC
|
|
ldr r0, _02301FB8 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x12]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
_02301FAC:
|
|
add r0, r2, #0x9c
|
|
bl IqSkillFlagTest
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_02301FB8: .word DUNGEON_PTR
|
|
arm_func_end IqSkillIsEnabled
|
|
|
|
arm_func_start UpdateIqSkills
|
|
UpdateIqSkills: ; 0x02301FBC
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r4, r0
|
|
ldrb r0, [r4, #6]
|
|
mov r6, #0
|
|
cmp r0, #0
|
|
str r6, [r4, #0x9c]
|
|
beq _02302118
|
|
str r6, [r4, #0xa0]
|
|
str r6, [r4, #0xa4]
|
|
b _0230202C
|
|
_02301FE4:
|
|
ldrsh r0, [r4, #2]
|
|
and r1, r6, #0xff
|
|
bl GetSpeciesIqSkill
|
|
mov r5, r0
|
|
cmp r5, #0xff
|
|
beq _02302034
|
|
ldrsh r0, [r4, #0xe]
|
|
mov r1, r5
|
|
bl CanLearnIqSkill
|
|
cmp r0, #0
|
|
beq _02302028
|
|
mov r1, r5
|
|
add r0, r4, #0x90
|
|
bl EnableIqSkill
|
|
mov r1, r5
|
|
add r0, r4, #0x9c
|
|
bl EnableIqSkill
|
|
_02302028:
|
|
add r6, r6, #1
|
|
_0230202C:
|
|
cmp r6, #0x19
|
|
blt _02301FE4
|
|
_02302034:
|
|
ldr r0, _023021E8 ; =MIN_IQ_EXCLUSIVE_MOVE_USER
|
|
ldrsh r1, [r4, #0xe]
|
|
ldrsh r0, [r0]
|
|
cmp r1, r0
|
|
bge _02302068
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x17
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _02302068
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x17
|
|
bl DisableIqSkill
|
|
_02302068:
|
|
mov r0, r4
|
|
bl ov29_022FBDE0
|
|
cmp r0, #0
|
|
bne _0230208C
|
|
ldr r0, _023021EC ; =MIN_IQ_ITEM_MASTER
|
|
ldrsh r1, [r4, #0xe]
|
|
ldrsh r0, [r0]
|
|
cmp r1, r0
|
|
bge _023020AC
|
|
_0230208C:
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x16
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _023020AC
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x16
|
|
bl DisableIqSkill
|
|
_023020AC:
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x15
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _023020CC
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x15
|
|
bl DisableIqSkill
|
|
_023020CC:
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x14
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _023020EC
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x14
|
|
bl DisableIqSkill
|
|
_023020EC:
|
|
add r0, r4, #0x9c
|
|
mov r1, #0xb
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _0230210C
|
|
add r0, r4, #0x9c
|
|
mov r1, #0xb
|
|
bl DisableIqSkill
|
|
_0230210C:
|
|
mov r0, #2
|
|
strb r0, [r4, #0xa8]
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_02302118:
|
|
str r6, [r4, #0xa0]
|
|
str r6, [r4, #0xa4]
|
|
b _02302174
|
|
_02302124:
|
|
ldrsh r0, [r4, #2]
|
|
and r1, r6, #0xff
|
|
bl GetSpeciesIqSkill
|
|
mov r5, r0
|
|
cmp r5, #0xff
|
|
beq _0230217C
|
|
ldrsh r0, [r4, #0xe]
|
|
mov r1, r5
|
|
bl CanLearnIqSkill
|
|
cmp r0, #0
|
|
beq _02302170
|
|
mov r1, r5
|
|
add r0, r4, #0x90
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _02302170
|
|
mov r1, r5
|
|
add r0, r4, #0x9c
|
|
bl EnableIqSkill
|
|
_02302170:
|
|
add r6, r6, #1
|
|
_02302174:
|
|
cmp r6, #0x19
|
|
blt _02302124
|
|
_0230217C:
|
|
mov r0, #3
|
|
bl GetPerformanceFlagWithChecks
|
|
cmp r0, #0
|
|
beq _023021A4
|
|
add r0, r4, #0x90
|
|
mov r1, #0x18
|
|
bl EnableIqSkill
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x18
|
|
bl EnableIqSkill
|
|
_023021A4:
|
|
add r0, r4, #0x90
|
|
mov r1, #0x38
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
beq _023021C4
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x38
|
|
bl EnableIqSkill
|
|
_023021C4:
|
|
add r0, r4, #0x90
|
|
mov r1, #0x39
|
|
bl IqSkillFlagTest
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
add r0, r4, #0x9c
|
|
mov r1, #0x39
|
|
bl EnableIqSkill
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_023021E8: .word MIN_IQ_EXCLUSIVE_MOVE_USER
|
|
_023021EC: .word MIN_IQ_ITEM_MASTER
|
|
arm_func_end UpdateIqSkills
|
|
|
|
arm_func_start ov29_023021F0
|
|
ov29_023021F0: ; 0x023021F0
|
|
ldr ip, _023021FC ; =UpdateIqSkills
|
|
ldr r0, [r0, #0xb4]
|
|
bx ip
|
|
.align 2, 0
|
|
_023021FC: .word UpdateIqSkills
|
|
arm_func_end ov29_023021F0
|
|
|
|
arm_func_start ov29_02302200
|
|
ov29_02302200: ; 0x02302200
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, r0
|
|
ldr r0, [r4, #0xb4]
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r6, #0
|
|
ldr r5, _02302278 ; =DUNGEON_PTR
|
|
b _02302268
|
|
_02302228:
|
|
ldr r1, [r5]
|
|
mov r0, r4
|
|
add r1, r1, r6, lsl #2
|
|
add r1, r1, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r1, #0xa84]
|
|
#else
|
|
ldr r7, [r1, #0xb28]
|
|
#endif
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
cmpne r4, r7
|
|
beq _02302264
|
|
mov r0, r4
|
|
mov r1, r7
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02302264:
|
|
add r6, r6, #1
|
|
_02302268:
|
|
cmp r6, #4
|
|
blt _02302228
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_02302278: .word DUNGEON_PTR
|
|
arm_func_end ov29_02302200
|
|
|
|
arm_func_start GetMoveTypeForMonster
|
|
GetMoveTypeForMonster: ; 0x0230227C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r5, r0
|
|
ldrh r0, [r4, #4]
|
|
bl IsRegularAttackOrProjectile
|
|
cmp r0, #0
|
|
bne _023022C0
|
|
mov r0, r5
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
beq _023022C0
|
|
mov r0, r5
|
|
mov r1, #0x6b
|
|
bl AbilityIsActive
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_023022C0:
|
|
ldrh r1, [r4, #4]
|
|
cmp r1, #0x144
|
|
ldreq r0, [r5, #0xb4]
|
|
ldreqb r0, [r0, #0x46]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, _02302318 ; =0x000001D7
|
|
cmp r1, r0
|
|
bne _023022F4
|
|
mov r0, r5
|
|
bl GetEntityNaturalGiftInfo
|
|
cmp r0, #0
|
|
ldrneb r0, [r0, #2]
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_023022F4:
|
|
ldrh r0, [r4, #4]
|
|
cmp r0, #0x1f
|
|
bne _0230230C
|
|
mov r0, r5
|
|
bl GetEntityWeatherBallType
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_0230230C:
|
|
mov r0, r4
|
|
bl GetMoveType
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_02302318: .word 0x000001D7
|
|
arm_func_end GetMoveTypeForMonster
|
|
|
|
arm_func_start GetMovePower
|
|
GetMovePower: ; 0x0230231C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldrh r2, [r1, #4]
|
|
mov r5, r0
|
|
ldrb r4, [r1, #7]
|
|
cmp r2, #0x144
|
|
ldreq r0, [r5, #0xb4]
|
|
ldreqsh r0, [r0, #0x44]
|
|
addeq r0, r4, r0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r1
|
|
bl GetMoveBasePower
|
|
add r4, r4, r0
|
|
mov r0, r5
|
|
mov r1, #0x2b
|
|
bl ItemIsActive__022FF898
|
|
cmp r0, #0
|
|
movne r4, r4, lsl #1
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end GetMovePower
|
|
|
|
arm_func_start MonsterCanThrowItems
|
|
MonsterCanThrowItems: ; 0x02302368
|
|
stmdb sp!, {r3, lr}
|
|
ldrsh r0, [r0, #2]
|
|
bl CanThrowItems
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end MonsterCanThrowItems
|
|
|
|
arm_func_start ov29_02302388
|
|
ov29_02302388: ; 0x02302388
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl EntityIsValid__023000E4
|
|
cmp r0, #0
|
|
ldrne r0, [r4, #0xb4]
|
|
ldrneb r1, [r0, #0xbc]
|
|
cmpne r1, #7
|
|
beq _023023B8
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, pc}
|
|
_023023B8:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_02302388
|
|
|
|
arm_func_start UpdateStateFlags
|
|
UpdateStateFlags: ; 0x023023C0
|
|
#ifdef JAPAN
|
|
#define UPDATE_STATE_FLAGS_OFFSET -4
|
|
#else
|
|
#define UPDATE_STATE_FLAGS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, lr}
|
|
add r3, r0, #0x100
|
|
ldrh ip, [r3, #0x58 + UPDATE_STATE_FLAGS_OFFSET]
|
|
tst ip, r1
|
|
ldrneh ip, [r3, #0x5a + UPDATE_STATE_FLAGS_OFFSET]
|
|
ldreqh lr, [r3, #0x5a + UPDATE_STATE_FLAGS_OFFSET]
|
|
orrne ip, ip, r1
|
|
mvneq ip, r1
|
|
andeq ip, lr, ip
|
|
cmp r2, #0
|
|
add r2, r0, #0x100
|
|
strh ip, [r3, #0x5a + UPDATE_STATE_FLAGS_OFFSET]
|
|
ldrneh r3, [r2, #0x58 + UPDATE_STATE_FLAGS_OFFSET]
|
|
ldreqh ip, [r2, #0x58 + UPDATE_STATE_FLAGS_OFFSET]
|
|
add r0, r0, #0x100
|
|
orrne r3, r3, r1
|
|
mvneq r3, r1
|
|
andeq r3, ip, r3
|
|
strh r3, [r2, #0x58 + UPDATE_STATE_FLAGS_OFFSET]
|
|
ldrh r2, [r0, #0x5a + UPDATE_STATE_FLAGS_OFFSET]
|
|
tst r2, r1
|
|
bne _02302428
|
|
ldrh r0, [r0, #0x58 + UPDATE_STATE_FLAGS_OFFSET]
|
|
tst r0, r1
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, pc}
|
|
_02302428:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end UpdateStateFlags
|
|
|
|
arm_func_start IsProtectedFromNegativeStatus
|
|
IsProtectedFromNegativeStatus: ; 0x02302430
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl LeafGuardIsActive
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
bne _023024D4
|
|
mov r0, r5
|
|
mov r1, #0x59
|
|
bl ExclusiveItemEffectIsActive__022FFF28
|
|
cmp r0, #0
|
|
beq _023024B4
|
|
cmp r4, #0
|
|
beq _023024AC
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
add r2, sp, #0
|
|
mov r0, r5
|
|
mov r1, #0x59
|
|
bl GetExclusiveItemWithEffectFromBag
|
|
add r1, sp, #0
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
ldr r2, _023024DC ; =0x00000C39
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_023024AC:
|
|
mov r0, #1
|
|
b _023024D4
|
|
_023024B4:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
bl ov29_02301A84
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
_023024D4:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_023024DC: .word 0x00000978
|
|
#else
|
|
_023024DC: .word 0x00000C39
|
|
#endif
|
|
arm_func_end IsProtectedFromNegativeStatus
|
|
|
|
arm_func_start ov29_023024E0
|
|
ov29_023024E0: ; 0x023024E0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r1, #7
|
|
mov r5, r0
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
bne _02302534
|
|
cmp r4, #0
|
|
beq _02302518
|
|
mov r0, r5
|
|
mov r1, #1
|
|
bl IsBlinded
|
|
cmp r0, #0
|
|
bne _0230252C
|
|
_02302518:
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #0xd0]
|
|
cmp r0, #2
|
|
cmpne r0, #4
|
|
bne _02302534
|
|
_0230252C:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_02302534:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_023024E0
|
|
|
|
arm_func_start AddExpSpecial
|
|
AddExpSpecial: ; 0x0230253C
|
|
#ifdef JAPAN
|
|
#define ADD_EXP_SPECIAL_OFFSET -4
|
|
#else
|
|
#define ADD_EXP_SPECIAL_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r1
|
|
ldr r5, [r7, #0xb4]
|
|
mov r6, r2
|
|
mov r0, r5
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldrb r0, [r5, #0xa]
|
|
cmp r0, #0x64
|
|
bne _02302580
|
|
cmp r6, #0
|
|
ldrgt r0, _023026B4 ; =DUNGEON_PTR
|
|
movgt r1, #1
|
|
ldrgt r0, [r0]
|
|
strgtb r1, [r0, #0xf]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_02302580:
|
|
ldr r2, [r5, #0x20]
|
|
mov r0, r7
|
|
mov r1, #0x1c
|
|
add r4, r2, r6
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _023025C0
|
|
ldr r0, _023026B8 ; =EXP_ELITE_EXP_BOOST
|
|
mov r1, #0x64
|
|
ldrsh r0, [r0]
|
|
mov r0, r0, lsl #8
|
|
bl _s32_div_f
|
|
mov r1, r0
|
|
mov r0, r6, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
add r4, r4, r0, asr #8
|
|
_023025C0:
|
|
mov r0, r7
|
|
mov r1, #0x43
|
|
bl ItemIsActive__023026CC
|
|
cmp r0, #0
|
|
beq _023025F8
|
|
ldr r0, _023026BC ; =WONDER_CHEST_EXP_BOOST
|
|
mov r1, #0x64
|
|
ldrsh r0, [r0]
|
|
mov r0, r0, lsl #8
|
|
bl _s32_div_f
|
|
mov r1, r0
|
|
mov r0, r6, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
add r4, r4, r0, asr #8
|
|
_023025F8:
|
|
mov r0, r7
|
|
mov r1, #0x42
|
|
bl ItemIsActive__023026CC
|
|
cmp r0, #0
|
|
beq _02302630
|
|
ldr r0, _023026C0 ; =MIRACLE_CHEST_EXP_BOOST
|
|
mov r1, #0x64
|
|
ldrsh r0, [r0]
|
|
mov r0, r0, lsl #8
|
|
bl _s32_div_f
|
|
mov r1, r0
|
|
mov r0, r6, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
add r4, r4, r0, asr #8
|
|
_02302630:
|
|
ldr r1, [r7, #0xb4]
|
|
ldrb r0, [r1, #6]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _02302650
|
|
add r0, r1, #0x228 + ADD_EXP_SPECIAL_OFFSET
|
|
mov r1, #0x4f
|
|
bl ExclusiveItemEffectFlagTest
|
|
_02302650:
|
|
cmp r0, #0
|
|
beq _0230267C
|
|
ldr r0, _023026C4 ; =EXCLUSIVE_ITEM_EXP_BOOST
|
|
mov r1, #0x64
|
|
ldrsh r0, [r0]
|
|
mov r0, r0, lsl #8
|
|
bl _s32_div_f
|
|
mov r1, r0
|
|
mov r0, r6, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
add r4, r4, r0, asr #8
|
|
_0230267C:
|
|
ldr r0, _023026C8 ; =0x0098967F
|
|
cmp r4, r0
|
|
movge r4, r0
|
|
ldr r0, [r5, #0x20]
|
|
subs r2, r4, r0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r1, [r5, #0x214 + ADD_EXP_SPECIAL_OFFSET]
|
|
ldr r0, _023026B4 ; =DUNGEON_PTR
|
|
add r1, r1, r2
|
|
str r1, [r5, #0x214 + ADD_EXP_SPECIAL_OFFSET]
|
|
ldr r0, [r0]
|
|
mov r1, #1
|
|
strb r1, [r0, #0xf]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_023026B4: .word DUNGEON_PTR
|
|
_023026B8: .word EXP_ELITE_EXP_BOOST
|
|
_023026BC: .word WONDER_CHEST_EXP_BOOST
|
|
_023026C0: .word MIRACLE_CHEST_EXP_BOOST
|
|
_023026C4: .word EXCLUSIVE_ITEM_EXP_BOOST
|
|
_023026C8: .word 0x0098967F
|
|
arm_func_end AddExpSpecial
|
|
|
|
arm_func_start ItemIsActive__023026CC
|
|
ItemIsActive__023026CC: ; 0x023026CC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r1
|
|
mov r1, #0x6f
|
|
mov r5, r0
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl HasHeldItem
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ItemIsActive__023026CC
|
|
|
|
arm_func_start EnemyEvolution
|
|
EnemyEvolution: ; 0x023026FC
|
|
#ifdef JAPAN
|
|
#define ENEMY_EVOLUTION_OFFSET -4
|
|
#else
|
|
#define ENEMY_EVOLUTION_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x168
|
|
mov sl, r0
|
|
bl sub_02025888
|
|
ldr r0, _02302A28 ; =DUNGEON_PTR
|
|
ldr r2, [r0]
|
|
ldrb r1, [r2, #0xf]
|
|
ldrb r0, [r2, #0x748]
|
|
cmp r1, #0
|
|
str r0, [sp, #8]
|
|
beq _02302A20
|
|
mov r0, #0
|
|
strb r0, [r2, #0xf]
|
|
bl GetForcedLossReason
|
|
cmp r0, #0
|
|
bne _02302A20
|
|
mov r0, sl
|
|
bl EntityIsValid__02302A38
|
|
cmp r0, #0
|
|
bne _02302758
|
|
add r0, sp, #0xb0
|
|
bl ov29_022E2470
|
|
add sl, sp, #0xb0
|
|
_02302758:
|
|
ldr r0, _02302A2C ; =ov29_023527F8
|
|
mov r4, #0
|
|
ldr r3, [r0]
|
|
ldr r2, [r0, #4]
|
|
ldr r1, [r0, #8]
|
|
ldr r0, [r0, #0xc]
|
|
str r3, [sp, #0x14]
|
|
str r2, [sp, #0x18]
|
|
str r1, [sp, #0xc]
|
|
str r0, [sp, #0x10]
|
|
_02302780:
|
|
ldr r0, _02302A28 ; =DUNGEON_PTR
|
|
ldr r3, [sp, #0x14]
|
|
ldr r0, [r0]
|
|
ldr r2, [sp, #0x18]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r5, [r0, #0xad4]
|
|
#else
|
|
ldr r5, [r0, #0xb78]
|
|
#endif
|
|
ldr r1, [sp, #0xc]
|
|
ldr r0, [sp, #0x10]
|
|
mov r6, #0
|
|
str r6, [sp, #4]
|
|
str r3, [sp, #0x24]
|
|
str r2, [sp, #0x28]
|
|
str r1, [sp, #0x1c]
|
|
str r0, [sp, #0x20]
|
|
cmp r5, #0
|
|
beq _02302A14
|
|
mov r0, r5
|
|
bl EntityIsValid__02302A38
|
|
cmp r0, #0
|
|
ldrne sb, [r5, #0xb4]
|
|
ldrnesh r0, [sb, #0x10]
|
|
cmpne r0, #0
|
|
beq _02302A14
|
|
ldrb r0, [sb, #0x102]
|
|
cmp r0, #0
|
|
movne r0, r6
|
|
strneb r0, [sb, #0x102]
|
|
bne _02302A08
|
|
ldr fp, [sb, #0x214 + ENEMY_EVOLUTION_OFFSET]
|
|
cmp fp, #0
|
|
beq _023028C4
|
|
ldrb r0, [sb, #7]
|
|
cmp r0, #0
|
|
beq _02302818
|
|
ldrb r1, [sb, #0xa]
|
|
add r0, sp, #0x54
|
|
bl GetUnlockedTacticFlags
|
|
_02302818:
|
|
ldrsh r2, [sb, #0x12]
|
|
ldrsh r0, [sb, #0x16]
|
|
ldrb r7, [sb, #0x1a]
|
|
ldr r1, _02302A30 ; =0x000003E7
|
|
add r0, r2, r0
|
|
ldrb r3, [sb, #0x1b]
|
|
ldrb r2, [sb, #0x1c]
|
|
str r0, [sp, #4]
|
|
cmp r0, r1
|
|
strgt r1, [sp, #4]
|
|
ldrb r1, [sb, #0x1d]
|
|
ldrb r0, [sb, #0xa]
|
|
str r7, [sp, #0x24]
|
|
str r3, [sp, #0x28]
|
|
str r2, [sp, #0x1c]
|
|
str r1, [sp, #0x20]
|
|
cmp r0, #0x64
|
|
beq _023028C4
|
|
ldr r0, [sp, #8]
|
|
bl IsExpEnabledInDungeon
|
|
cmp r0, #0
|
|
beq _023028C4
|
|
ldr r0, [sb, #0x20]
|
|
mov r1, fp
|
|
add r2, r0, fp
|
|
mov r0, #0
|
|
str r2, [sb, #0x20]
|
|
bl ov29_0234B09C
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
str r1, [sp]
|
|
mov r2, sb
|
|
mov r3, r1
|
|
bl ov29_0230040C
|
|
mov r0, sl
|
|
ldr r1, _02302A34 ; =0x00000F1F
|
|
bl LogMessageByIdWithPopup
|
|
mov r0, sl
|
|
mov r1, r5
|
|
mov r2, #1
|
|
mov r3, r2
|
|
bl LevelUp
|
|
orr r6, r6, r0
|
|
_023028C4:
|
|
ldrb r0, [sb, #0x153 + ENEMY_EVOLUTION_OFFSET]
|
|
cmp r0, #0
|
|
beq _02302968
|
|
ldrsh r0, [sb, #2]
|
|
mov r2, #0
|
|
add r1, sp, #0x2c
|
|
mov r3, r2
|
|
bl GetEvolutions
|
|
movs r6, r0
|
|
beq _02302964
|
|
bl DungeonRandInt
|
|
mov r8, r0
|
|
mov r7, #0
|
|
b _0230293C
|
|
_023028FC:
|
|
mov r1, r8, lsl #1
|
|
add r0, sp, #0x2c
|
|
ldrsh r0, [r0, r1]
|
|
bl IsOnMonsterSpawnList
|
|
cmp r0, #0
|
|
beq _0230292C
|
|
mov r1, r8, lsl #1
|
|
add r0, sp, #0x2c
|
|
ldrsh r0, [r0, r1]
|
|
bl DungeonGetSpriteIndex
|
|
cmp r0, #0
|
|
bne _02302944
|
|
_0230292C:
|
|
add r8, r8, #1
|
|
cmp r8, r6
|
|
movge r8, #0
|
|
add r7, r7, #1
|
|
_0230293C:
|
|
cmp r7, r6
|
|
blt _023028FC
|
|
_02302944:
|
|
cmp r7, r6
|
|
bge _02302964
|
|
add r0, sp, #0x2c
|
|
mov r1, r8, lsl #1
|
|
ldrsh r2, [r0, r1]
|
|
mov r0, sl
|
|
mov r1, r5
|
|
bl EvolveMonster
|
|
_02302964:
|
|
mov r6, #0
|
|
_02302968:
|
|
cmp r6, #0
|
|
beq _023029EC
|
|
ldrb r0, [sb, #6]
|
|
cmp r0, #0
|
|
bne _023029EC
|
|
ldrsh r2, [sb, #0x12]
|
|
ldrsh r1, [sb, #0x16]
|
|
ldr r0, _02302A30 ; =0x000003E7
|
|
ldr r3, [sp, #0x28]
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
ldr r0, [sp, #4]
|
|
sub r0, r1, r0
|
|
str r0, [sp, #0x84]
|
|
ldrb r2, [sb, #0x1a]
|
|
ldr r1, [sp, #0x24]
|
|
ldr r0, [sp, #0x1c]
|
|
sub r1, r2, r1
|
|
str r1, [sp, #0x88]
|
|
ldrb r1, [sb, #0x1c]
|
|
ldr r2, [sp, #0x20]
|
|
sub r0, r1, r0
|
|
str r0, [sp, #0x8c]
|
|
ldrb r6, [sb, #0x1b]
|
|
add r1, sp, #0x60
|
|
mov r0, r5
|
|
sub r3, r6, r3
|
|
str r3, [sp, #0x90]
|
|
ldrb r3, [sb, #0x1d]
|
|
sub r2, r3, r2
|
|
str r2, [sp, #0x94]
|
|
bl ov29_02302CC8
|
|
_023029EC:
|
|
cmp fp, #0
|
|
beq _02302A08
|
|
add r2, sp, #0x54
|
|
mov r0, sl
|
|
mov r1, r5
|
|
mov r3, #1
|
|
bl ov29_02302C04
|
|
_02302A08:
|
|
mov r0, #0
|
|
str r0, [sb, #0x214 + ENEMY_EVOLUTION_OFFSET]
|
|
strb r0, [sb, #0x153 + ENEMY_EVOLUTION_OFFSET]
|
|
_02302A14:
|
|
add r4, r4, #1
|
|
cmp r4, #0x14
|
|
blt _02302780
|
|
_02302A20:
|
|
add sp, sp, #0x168
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_02302A28: .word DUNGEON_PTR
|
|
_02302A2C: .word ov29_023527F8
|
|
_02302A30: .word 0x000003E7
|
|
#ifdef JAPAN
|
|
_02302A34: .word 0x00002486
|
|
#else
|
|
_02302A34: .word 0x00000F1F
|
|
#endif
|
|
arm_func_end EnemyEvolution
|