mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-26 00:13:13 -05:00
7191 lines
131 KiB
ArmAsm
7191 lines
131 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_022F7388.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start DungeonGetSpriteIndex
|
|
DungeonGetSpriteIndex: ; 0x022F7388
|
|
#ifdef JAPAN
|
|
ldr r1, _022F73A0 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r0, r1, r0, lsl #1
|
|
add r0, r0, #0x19800
|
|
ldrsh r0, [r0, #0x70]
|
|
#else
|
|
ldr r2, _022F73A0 ; =DUNGEON_PTR
|
|
ldr r1, _022F73A4 ; =0x00019914
|
|
ldr r2, [r2]
|
|
add r0, r2, r0, lsl #1
|
|
ldrsh r0, [r0, r1]
|
|
#endif
|
|
bx lr
|
|
.align 2, 0
|
|
_022F73A0: .word DUNGEON_PTR
|
|
#ifndef JAPAN
|
|
_022F73A4: .word 0x00019914
|
|
#endif
|
|
arm_func_end DungeonGetSpriteIndex
|
|
|
|
arm_func_start JoinedAtRangeCheck2Veneer
|
|
JoinedAtRangeCheck2Veneer: ; 0x022F73A8
|
|
ldr ip, _022F73B0 ; =JoinedAtRangeCheck2
|
|
bx ip
|
|
.align 2, 0
|
|
_022F73B0: .word JoinedAtRangeCheck2
|
|
arm_func_end JoinedAtRangeCheck2Veneer
|
|
|
|
arm_func_start FloorNumberIsEven
|
|
FloorNumberIsEven: ; 0x022F73B4
|
|
ldr r0, _022F73E8 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #0x748]
|
|
cmp r0, #0x5b
|
|
ldreqb r0, [r1, #0x749]
|
|
cmpeq r0, #0xa
|
|
moveq r0, #0
|
|
bxeq lr
|
|
ldrb r0, [r1, #0x749]
|
|
tst r0, #1
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_022F73E8: .word DUNGEON_PTR
|
|
arm_func_end FloorNumberIsEven
|
|
|
|
arm_func_start GetKecleonIdToSpawnByFloor
|
|
GetKecleonIdToSpawnByFloor: ; 0x022F73EC
|
|
stmdb sp!, {r3, lr}
|
|
bl FloorNumberIsEven
|
|
cmp r0, #0
|
|
ldrne r0, _022F7404 ; =0x000003D7
|
|
ldreq r0, _022F7408 ; =0x0000017F
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022F7404: .word 0x000003D7
|
|
_022F7408: .word 0x0000017F
|
|
arm_func_end GetKecleonIdToSpawnByFloor
|
|
|
|
arm_func_start StoreSpriteFileIndexBothGenders
|
|
StoreSpriteFileIndexBothGenders: ; 0x022F740C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r2, _022F74D0 ; =DUNGEON_PTR
|
|
mov r7, r0
|
|
ldr r2, [r2]
|
|
mov r6, r1
|
|
#ifdef JAPAN
|
|
add r1, r2, #0x870
|
|
add r5, r1, #0x19000
|
|
#else
|
|
add r1, r2, #0x114
|
|
add r5, r1, #0x19800
|
|
#endif
|
|
bl GetSpriteIndex__020526EC
|
|
mov r4, r0
|
|
mov r1, r7, lsl #1
|
|
mov r0, r7
|
|
strh r6, [r5, r1]
|
|
bl GetMonsterGender
|
|
cmp r0, #3
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
cmp r7, #0x258
|
|
bge _022F7490
|
|
add r6, r7, #0x258
|
|
mov r1, r6, lsl #0x10
|
|
mov r0, r7
|
|
mov r1, r1, asr #0x10
|
|
bl GendersEqualNotGenderless
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r6, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
bl GetSpriteIndex__020526EC
|
|
cmp r4, r0
|
|
moveq r0, r7, lsl #1
|
|
ldreqsh r1, [r5, r0]
|
|
moveq r0, r6, lsl #1
|
|
streqh r1, [r5, r0]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_022F7490:
|
|
sub r6, r7, #0x258
|
|
mov r1, r6, lsl #0x10
|
|
mov r0, r7
|
|
mov r1, r1, asr #0x10
|
|
bl GendersEqualNotGenderless
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r6, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
bl GetSpriteIndex__020526EC
|
|
cmp r4, r0
|
|
moveq r0, r7, lsl #1
|
|
ldreqsh r1, [r5, r0]
|
|
moveq r0, r6, lsl #1
|
|
streqh r1, [r5, r0]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022F74D0: .word DUNGEON_PTR
|
|
arm_func_end StoreSpriteFileIndexBothGenders
|
|
|
|
arm_func_start LoadMonsterSpriteInner
|
|
LoadMonsterSpriteInner: ; 0x022F74D4
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr r1, _022F75C4 ; =DUNGEON_PTR
|
|
mov r6, r0
|
|
#ifdef JAPAN
|
|
ldr r1, [r1]
|
|
add r1, r1, r6, lsl #1
|
|
add r1, r1, #0x19800
|
|
ldrsh r1, [r1, #0x70]
|
|
#else
|
|
ldr r2, [r1]
|
|
ldr r1, _022F75C8 ; =0x00019914
|
|
add r2, r2, r6, lsl #1
|
|
ldrsh r1, [r2, r1]
|
|
#endif
|
|
cmp r1, #0
|
|
bne _022F75BC
|
|
bl GetSpriteIndex__020526EC
|
|
mov r4, r0
|
|
mov r0, r6
|
|
bl IsShaymin
|
|
cmp r0, #0
|
|
beq _022F756C
|
|
mov r0, r6
|
|
bl IsShaymin
|
|
cmp r0, #0
|
|
mov r0, r6
|
|
movne r5, #0
|
|
bl GetSpriteFileSize
|
|
mov r1, #0
|
|
bl MemAlloc
|
|
ldr r2, _022F75CC ; =ov29_0237C9B0
|
|
mov r1, #1
|
|
str r0, [r2, r5, lsl #2]
|
|
str r1, [sp]
|
|
ldr r0, _022F75D0 ; =WAN_TABLE
|
|
ldr r3, [r2, r5, lsl #2]
|
|
ldr r0, [r0]
|
|
mov r2, r4
|
|
mov r1, #0
|
|
bl LoadWanTableEntryFromPackUseProvidedMemory
|
|
mov r1, r0
|
|
mov r0, r6
|
|
bl StoreSpriteFileIndexBothGenders
|
|
b _022F7598
|
|
_022F756C:
|
|
mov r1, #1
|
|
ldr r0, _022F75D0 ; =WAN_TABLE
|
|
str r1, [sp]
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
mov r2, r4
|
|
mov r3, r1
|
|
bl LoadWanTableEntryFromPack
|
|
mov r1, r0
|
|
mov r0, r6
|
|
bl StoreSpriteFileIndexBothGenders
|
|
_022F7598:
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl DirectoryFileMngr_GetDirectoryFileSize
|
|
ldr r1, _022F75C4 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x2c000
|
|
#ifdef JAPAN
|
|
ldr r2, [r1, #0xa68]
|
|
add r0, r2, r0
|
|
str r0, [r1, #0xa68]
|
|
#else
|
|
ldr r2, [r1, #0xb0c]
|
|
add r0, r2, r0
|
|
str r0, [r1, #0xb0c]
|
|
#endif
|
|
_022F75BC:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022F75C4: .word DUNGEON_PTR
|
|
#ifndef JAPAN
|
|
_022F75C8: .word 0x00019914
|
|
#endif
|
|
_022F75CC: .word ov29_0237C9B0
|
|
_022F75D0: .word WAN_TABLE
|
|
arm_func_end LoadMonsterSpriteInner
|
|
|
|
arm_func_start SwapMonsterWanFileIndex
|
|
SwapMonsterWanFileIndex: ; 0x022F75D4
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
ldr r2, _022F764C ; =DUNGEON_PTR
|
|
mov r5, r1
|
|
ldr r1, [r2]
|
|
mov r6, r0
|
|
#ifdef JAPAN
|
|
add r1, r1, #0x870
|
|
mov r0, r5
|
|
add r4, r1, #0x19000
|
|
#else
|
|
add r1, r1, #0x114
|
|
mov r0, r5
|
|
add r4, r1, #0x19800
|
|
#endif
|
|
bl GetSpriteIndex__020526EC
|
|
mov r1, #1
|
|
str r1, [sp]
|
|
mov r1, r6, lsl #1
|
|
ldr r2, _022F7650 ; =WAN_TABLE
|
|
mov r3, r0
|
|
ldrsh r1, [r4, r1]
|
|
ldr r0, [r2]
|
|
mov r2, #0
|
|
bl ReplaceWanFromBinFile
|
|
mov r1, r0
|
|
mov r0, r5
|
|
bl StoreSpriteFileIndexBothGenders
|
|
mov r3, r6, lsl #1
|
|
ldrsh r2, [r4, r3]
|
|
mov r1, r5, lsl #1
|
|
mov r0, #0
|
|
strh r2, [r4, r1]
|
|
strh r0, [r4, r3]
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022F764C: .word DUNGEON_PTR
|
|
_022F7650: .word WAN_TABLE
|
|
arm_func_end SwapMonsterWanFileIndex
|
|
|
|
arm_func_start LoadMonsterSprite
|
|
LoadMonsterSprite: ; 0x022F7654
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
cmp r1, #0
|
|
bne _022F769C
|
|
ldr r0, _022F7748 ; =0xFFFFFE5E
|
|
add r0, r4, r0
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
cmp r0, #3
|
|
bhi _022F769C
|
|
ldr r0, _022F774C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x3d00
|
|
ldrsh r0, [r0, #0x96]
|
|
#else
|
|
add r0, r0, #0x3e00
|
|
ldrsh r0, [r0, #0x3a]
|
|
#endif
|
|
bl LoadMonsterSpriteInner
|
|
ldmia sp!, {r4, pc}
|
|
_022F769C:
|
|
mov r0, r4
|
|
bl LoadMonsterSpriteInner
|
|
ldr r1, _022F7750 ; =0x0000017B
|
|
cmp r4, r1
|
|
cmpne r4, #0x17c
|
|
addne r0, r1, #2
|
|
cmpne r4, r0
|
|
addne r0, r1, #3
|
|
cmpne r4, r0
|
|
beq _022F76E4
|
|
ldr r0, _022F7754 ; =0xFFFFFC2D
|
|
add r0, r4, r0
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
cmp r0, #3
|
|
bhi _022F7704
|
|
_022F76E4:
|
|
ldr r0, _022F7750 ; =0x0000017B
|
|
bl LoadMonsterSpriteInner
|
|
mov r0, #0x17c
|
|
bl LoadMonsterSpriteInner
|
|
ldr r0, _022F7758 ; =0x0000017D
|
|
bl LoadMonsterSpriteInner
|
|
ldr r0, _022F775C ; =0x0000017E
|
|
bl LoadMonsterSpriteInner
|
|
_022F7704:
|
|
cmp r4, #0x1cc
|
|
ldrne r0, _022F7760 ; =0x000001CD
|
|
cmpne r4, r0
|
|
beq _022F7734
|
|
ldr r0, _022F7764 ; =0xFFFFFBDC
|
|
add r0, r4, r0
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
cmp r0, #1
|
|
ldmhiia sp!, {r4, pc}
|
|
_022F7734:
|
|
mov r0, #0x1cc
|
|
bl LoadMonsterSpriteInner
|
|
ldr r0, _022F7760 ; =0x000001CD
|
|
bl LoadMonsterSpriteInner
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022F7748: .word 0xFFFFFE5E
|
|
_022F774C: .word DUNGEON_PTR
|
|
_022F7750: .word 0x0000017B
|
|
_022F7754: .word 0xFFFFFC2D
|
|
_022F7758: .word 0x0000017D
|
|
_022F775C: .word 0x0000017E
|
|
_022F7760: .word 0x000001CD
|
|
_022F7764: .word 0xFFFFFBDC
|
|
arm_func_end LoadMonsterSprite
|
|
|
|
arm_func_start DeleteMonsterSpriteFile
|
|
DeleteMonsterSpriteFile: ; 0x022F7768
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r1, _022F77F4 ; =DUNGEON_PTR
|
|
mov r5, r0
|
|
#ifdef JAPAN
|
|
ldr r0, [r1]
|
|
add r0, r0, r5, lsl #1
|
|
add r0, r0, #0x19800
|
|
ldrsh r1, [r0, #0x70]
|
|
#else
|
|
ldr r1, [r1]
|
|
ldr r0, _022F77F8 ; =0x00019914
|
|
add r1, r1, r5, lsl #1
|
|
ldrsh r1, [r1, r0]
|
|
#endif
|
|
cmp r1, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, _022F77FC ; =WAN_TABLE
|
|
ldr r0, [r0]
|
|
bl DeleteWanTableEntryVeneer
|
|
#ifdef JAPAN
|
|
ldr r1, _022F77F4 ; =DUNGEON_PTR
|
|
mov r2, #0
|
|
ldr r1, [r1]
|
|
mov r0, r5
|
|
add r1, r1, r5, lsl #1
|
|
add r1, r1, #0x19800
|
|
strh r2, [r1, #0x70]
|
|
#else
|
|
ldr r0, _022F77F4 ; =DUNGEON_PTR
|
|
ldr r1, _022F77F8 ; =0x00019914
|
|
ldr r2, [r0]
|
|
mov r3, #0
|
|
add r2, r2, r5, lsl #1
|
|
mov r0, r5
|
|
strh r3, [r2, r1]
|
|
#endif
|
|
bl IsShaymin
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl IsShaymin
|
|
cmp r0, #0
|
|
ldr r0, _022F7800 ; =ov29_0237C9B0
|
|
movne r4, #0
|
|
ldr r0, [r0, r4, lsl #2]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
bl MemFree
|
|
ldr r0, _022F7800 ; =ov29_0237C9B0
|
|
mov r1, #0
|
|
str r1, [r0, r4, lsl #2]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F77F4: .word DUNGEON_PTR
|
|
#ifndef JAPAN
|
|
_022F77F8: .word 0x00019914
|
|
#endif
|
|
_022F77FC: .word WAN_TABLE
|
|
_022F7800: .word ov29_0237C9B0
|
|
arm_func_end DeleteMonsterSpriteFile
|
|
|
|
arm_func_start DeleteAllMonsterSpriteFiles
|
|
DeleteAllMonsterSpriteFiles: ; 0x022F7804
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r4, _022F7830 ; =0x00000483
|
|
mov r5, #0
|
|
_022F7810:
|
|
mov r0, r5
|
|
bl DeleteMonsterSpriteFile
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
cmp r4, r0, asr #16
|
|
mov r5, r0, asr #0x10
|
|
bgt _022F7810
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F7830: .word 0x00000483
|
|
arm_func_end DeleteAllMonsterSpriteFiles
|
|
|
|
arm_func_start ov29_022F7834
|
|
ov29_022F7834: ; 0x022F7834
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r4, #0
|
|
mov r5, r0
|
|
mov r8, r4
|
|
mov r6, r4
|
|
mov r7, #1
|
|
_022F784C:
|
|
mov r0, r8
|
|
bl GetActiveTeamMember
|
|
ldrb r0, [r0]
|
|
tst r0, #1
|
|
movne r0, r7
|
|
moveq r0, r6
|
|
tst r0, #0xff
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
addne r4, r4, #1
|
|
cmp r8, #4
|
|
blt _022F784C
|
|
cmp r4, #4
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
tst r0, #0xff
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
mov r7, #0
|
|
mov r8, r7
|
|
mov r4, r7
|
|
mov r6, #1
|
|
_022F78A8:
|
|
mov r0, r8
|
|
bl GetActiveTeamMember
|
|
ldrb r1, [r0]
|
|
tst r1, #1
|
|
movne r1, r6
|
|
moveq r1, r4
|
|
tst r1, #0xff
|
|
beq _022F78D4
|
|
ldrsh r0, [r0, #0xc]
|
|
bl GetBodySize
|
|
add r7, r7, r0
|
|
_022F78D4:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022F78A8
|
|
ldrsh r0, [r5, #4]
|
|
bl GetBodySize
|
|
add r0, r7, r0
|
|
cmp r0, #6
|
|
movgt r0, #1
|
|
movle r0, #0
|
|
tst r0, #0xff
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
arm_func_end ov29_022F7834
|
|
|
|
arm_func_start ov29_022F7910
|
|
ov29_022F7910: ; 0x022F7910
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x54
|
|
mov sl, r0
|
|
ldrb r0, [sl]
|
|
mov r5, #0
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, r5
|
|
tst r0, #0xff
|
|
ldrnesh r0, [sl, #4]
|
|
cmpne r0, #0
|
|
moveq r0, #0
|
|
beq _022F7BCC
|
|
ldrb r0, [sl, #2]
|
|
cmp r0, #0xfa
|
|
movne r0, #0
|
|
bne _022F7BCC
|
|
b _022F7AA4
|
|
_022F7958:
|
|
mov r0, sl
|
|
bl ov29_022F7834
|
|
cmp r0, #0
|
|
beq _022F7AA0
|
|
ldrsh r1, [sl, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldr r1, _022F7BD4 ; =0x00000C0D
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
mov sb, #0
|
|
mov r7, sb
|
|
bl StoryRestrictionsEnabled
|
|
cmp r0, #0
|
|
movne sb, #1
|
|
mov r8, #0
|
|
mov fp, #1
|
|
add r4, sp, #0x44
|
|
_022F79A4:
|
|
mov r0, r8
|
|
bl GetActiveTeamMember
|
|
mov r6, r0
|
|
ldrb r0, [r6]
|
|
tst r0, #1
|
|
movne r0, fp
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022F7A14
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
bne _022F7A14
|
|
cmp sb, #0
|
|
beq _022F7A0C
|
|
ldrb r0, [r6, #3]
|
|
cmp r0, #0xd6
|
|
moveq r1, #1
|
|
movne r1, #0
|
|
tst r1, #0xff
|
|
bne _022F7A14
|
|
bl JoinedAtRangeCheck2
|
|
cmp r0, #0
|
|
bne _022F7A14
|
|
_022F7A0C:
|
|
str r6, [r4, r7, lsl #2]
|
|
add r7, r7, #1
|
|
_022F7A14:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022F79A4
|
|
cmp r7, #0
|
|
beq _022F7AAC
|
|
add r0, sp, #0x44
|
|
mov r1, r7
|
|
bl ov29_0234EF24
|
|
movs r4, r0
|
|
beq _022F7AA4
|
|
add r0, sp, #4
|
|
mov r1, r4
|
|
bl sub_020585B4
|
|
add r1, sp, #4
|
|
mov r0, #1
|
|
bl ov29_0234B0B4
|
|
mov r0, #0
|
|
mov r3, #1
|
|
ldr r1, _022F7BD8 ; =0x00000C0E
|
|
mov r2, r0
|
|
str r3, [sp]
|
|
bl YesNoMenu
|
|
cmp r0, #1
|
|
bne _022F7AA4
|
|
ldr r1, _022F7BDC ; =0x00000C0F
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
ldrsh r0, [r4, #8]
|
|
bl sub_020566C4
|
|
mov r0, #0
|
|
strb r0, [r4]
|
|
b _022F7AA4
|
|
_022F7AA0:
|
|
mov r5, #1
|
|
_022F7AA4:
|
|
cmp r5, #0
|
|
beq _022F7958
|
|
_022F7AAC:
|
|
cmp r5, #0
|
|
bne _022F7AD8
|
|
ldrsh r1, [sl, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldr r1, _022F7BE0 ; =0x00000C0C
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
mov r0, #0
|
|
b _022F7BCC
|
|
_022F7AD8:
|
|
mov r4, #0
|
|
mov r6, r4
|
|
mov r7, #1
|
|
b _022F7BA4
|
|
_022F7AE8:
|
|
mov r0, r4
|
|
bl GetActiveTeamMember
|
|
mov r5, r0
|
|
ldrb r0, [r5]
|
|
tst r0, #1
|
|
movne r0, r7
|
|
moveq r0, r6
|
|
tst r0, #0xff
|
|
bne _022F7B98
|
|
ldr r2, _022F7BE4 ; =0x000055AA
|
|
mov r0, r5
|
|
mov r1, sl
|
|
mov r3, r4
|
|
bl sub_02053250
|
|
ldr r0, _022F7BE8 ; =TEAM_MEMBER_TABLE_PTR
|
|
mov r1, r4, lsl #1
|
|
ldr r0, [r0]
|
|
mvn r3, #0
|
|
add r0, r0, #0x9000
|
|
ldr r2, [r0, #0x870]
|
|
ldr r0, _022F7BEC ; =IQ_SKILLS
|
|
strh r3, [r2, r1]
|
|
ldrb r2, [r5]
|
|
ldr r1, [r0, #0x20]
|
|
orr r0, r2, #1
|
|
strb r0, [r5]
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r1
|
|
bge _022F7B70
|
|
strh r1, [r5, #6]
|
|
ldrsh r1, [r5, #0xc]
|
|
ldrsh r2, [r5, #6]
|
|
add r0, r5, #0x4c
|
|
bl EnableAllLearnableIqSkills
|
|
_022F7B70:
|
|
ldrb r1, [r5]
|
|
add r0, r5, #0x3e
|
|
orr r1, r1, #2
|
|
strb r1, [r5]
|
|
strh r4, [r5, #0xa]
|
|
bl ItemZInit
|
|
ldrsh r1, [sl, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
b _022F7BAC
|
|
_022F7B98:
|
|
add r0, r4, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r4, r0, asr #0x10
|
|
_022F7BA4:
|
|
cmp r4, #4
|
|
blt _022F7AE8
|
|
_022F7BAC:
|
|
ldrsh r1, [sl, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldr r1, _022F7BF0 ; =0x00000C12
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
mov r0, #1
|
|
_022F7BCC:
|
|
add sp, sp, #0x54
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define OV29_022F7910_OFFSET -0x2C1
|
|
#else
|
|
#define OV29_022F7910_OFFSET 0
|
|
#endif
|
|
_022F7BD4: .word 0x00000C0D + OV29_022F7910_OFFSET
|
|
_022F7BD8: .word 0x00000C0E + OV29_022F7910_OFFSET
|
|
_022F7BDC: .word 0x00000C0F + OV29_022F7910_OFFSET
|
|
_022F7BE0: .word 0x00000C0C + OV29_022F7910_OFFSET
|
|
_022F7BE4: .word 0x000055AA
|
|
_022F7BE8: .word TEAM_MEMBER_TABLE_PTR
|
|
_022F7BEC: .word IQ_SKILLS
|
|
_022F7BF0: .word 0x00000C12 + OV29_022F7910_OFFSET
|
|
arm_func_end ov29_022F7910
|
|
|
|
arm_func_start ov29_022F7BF4
|
|
ov29_022F7BF4: ; 0x022F7BF4
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r6, r0
|
|
ldrb r0, [r6]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
ldrnesh r0, [r6, #4]
|
|
cmpne r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r0, _022F7E18 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl IsRecruitingAllowed
|
|
cmp r0, #0
|
|
ldrne r0, _022F7E18 ; =DUNGEON_PTR
|
|
ldrne r0, [r0]
|
|
ldrneb r0, [r0, #0x759]
|
|
cmpne r0, #0
|
|
bne _022F7C7C
|
|
ldrb r0, [r6, #2]
|
|
cmp r0, #0xd9
|
|
blo _022F7C5C
|
|
cmp r0, #0xe4
|
|
blo _022F7C7C
|
|
_022F7C5C:
|
|
ldrsh r1, [r6, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldr r1, _022F7E1C ; =0x00000C0B
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
b _022F7E10
|
|
_022F7C7C:
|
|
mov r0, r6
|
|
bl ov29_022F7834
|
|
cmp r0, #0
|
|
beq _022F7CD4
|
|
ldrsh r1, [r6, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldrb r0, [r6, #2]
|
|
cmp r0, #0xd9
|
|
blo _022F7CC0
|
|
cmp r0, #0xe4
|
|
bhs _022F7CC0
|
|
#ifdef JAPAN
|
|
ldr r1, _022F93E0 ; =0x0000094F
|
|
mov r0, #0
|
|
#else
|
|
mov r0, #0
|
|
mov r1, #0xc10
|
|
#endif
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
b _022F7E10
|
|
_022F7CC0:
|
|
ldr r1, _022F7E20 ; =0x00000C0A
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
b _022F7E10
|
|
_022F7CD4:
|
|
mov r4, #0
|
|
mov r7, r4
|
|
mov r8, #1
|
|
b _022F7DC4
|
|
_022F7CE4:
|
|
mov r0, r4
|
|
bl GetActiveTeamMember
|
|
mov r5, r0
|
|
ldrb r0, [r5]
|
|
tst r0, #1
|
|
movne r0, r8
|
|
moveq r0, r7
|
|
tst r0, #0xff
|
|
bne _022F7DB8
|
|
ldr r2, _022F7E24 ; =0x000055AA
|
|
mov r0, r5
|
|
mov r1, r6
|
|
mov r3, r4
|
|
bl sub_02053250
|
|
ldr r0, _022F7E28 ; =TEAM_MEMBER_TABLE_PTR
|
|
mov r1, r4, lsl #1
|
|
ldr r0, [r0]
|
|
mvn r3, #0
|
|
add r0, r0, #0x9000
|
|
ldr r2, [r0, #0x870]
|
|
ldr r0, _022F7E2C ; =IQ_SKILLS
|
|
strh r3, [r2, r1]
|
|
ldrb r2, [r5]
|
|
ldr r1, [r0, #0x20]
|
|
orr r0, r2, #1
|
|
strb r0, [r5]
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r1
|
|
bge _022F7D6C
|
|
strh r1, [r5, #6]
|
|
ldrsh r1, [r5, #0xc]
|
|
ldrsh r2, [r5, #6]
|
|
add r0, r5, #0x4c
|
|
bl EnableAllLearnableIqSkills
|
|
_022F7D6C:
|
|
ldrb r1, [r5]
|
|
add r0, r5, #0x3e
|
|
orr r1, r1, #2
|
|
strb r1, [r5]
|
|
strh r4, [r5, #0xa]
|
|
bl ItemZInit
|
|
ldrsh r1, [r6, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldrb r0, [r6, #2]
|
|
cmp r0, #0xd9
|
|
blo _022F7DA4
|
|
cmp r0, #0xe4
|
|
blo _022F7E10
|
|
_022F7DA4:
|
|
#ifdef JAPAN
|
|
mov r0, #0
|
|
mov r1, #0x950
|
|
#else
|
|
ldr r1, _022F7E30 ; =0x00000C11
|
|
mov r0, #0
|
|
#endif
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
b _022F7E10
|
|
_022F7DB8:
|
|
add r0, r4, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r4, r0, asr #0x10
|
|
_022F7DC4:
|
|
cmp r4, #4
|
|
blt _022F7CE4
|
|
ldrsh r1, [r6, #4]
|
|
mov r0, #0
|
|
bl ov29_0234B06C
|
|
ldrb r0, [r6, #2]
|
|
cmp r0, #0xd9
|
|
blo _022F7E00
|
|
cmp r0, #0xe4
|
|
bhs _022F7E00
|
|
#ifdef JAPAN
|
|
ldr r1, _022F93E0 ; =0x0000094F
|
|
mov r0, #0
|
|
#else
|
|
mov r0, #0
|
|
mov r1, #0xc10
|
|
#endif
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
b _022F7E10
|
|
_022F7E00:
|
|
ldr r1, _022F7E20 ; =0x00000C0A
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
_022F7E10:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022F7E18: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_022F7E1C: .word 0x0000094A
|
|
_022F93E0: .word 0x0000094F
|
|
_022F7E20: .word 0x00000949
|
|
#else
|
|
_022F7E1C: .word 0x00000C0B
|
|
_022F7E20: .word 0x00000C0A
|
|
#endif
|
|
_022F7E24: .word 0x000055AA
|
|
_022F7E28: .word TEAM_MEMBER_TABLE_PTR
|
|
_022F7E2C: .word IQ_SKILLS
|
|
#ifndef JAPAN
|
|
_022F7E30: .word 0x00000C11
|
|
#endif
|
|
arm_func_end ov29_022F7BF4
|
|
|
|
arm_func_start ov29_022F7E34
|
|
ov29_022F7E34: ; 0x022F7E34
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, #0
|
|
mov r6, r8
|
|
mov r7, #1
|
|
mov r4, r8
|
|
mov r5, r8
|
|
_022F7E4C:
|
|
mov r0, r8
|
|
bl GetActiveTeamMember
|
|
mov sb, r0
|
|
ldrb r0, [sb]
|
|
tst r0, #1
|
|
movne r0, r7
|
|
moveq r0, r6
|
|
tst r0, #0xff
|
|
beq _022F7E94
|
|
ldrsh r0, [sb, #8]
|
|
bl CheckTeamMemberIdx
|
|
cmp r0, #0
|
|
strneb r5, [sb]
|
|
bne _022F7E94
|
|
ldrsh r0, [sb, #8]
|
|
bl sub_02056228
|
|
cmp r0, #0
|
|
strneb r4, [sb]
|
|
_022F7E94:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022F7E4C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end ov29_022F7E34
|
|
|
|
arm_func_start ov29_022F7EAC
|
|
ov29_022F7EAC: ; 0x022F7EAC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
bl GetLeader
|
|
ldr r1, _022F7F04 ; =DUNGEON_PTR
|
|
mov r2, #0
|
|
ldr r5, [r1]
|
|
movs r4, r0
|
|
strb r2, [r5, #0x78b]
|
|
strb r2, [r5, #0x78c]
|
|
strb r2, [r5, #0x78e]
|
|
str r2, [r5, #0xcc]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
bl GetTileAtEntity
|
|
ldrh r0, [r0]
|
|
tst r0, #0x20
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
strb r0, [r5, #0x7c8]
|
|
and r1, r0, #0xff
|
|
add r0, r4, #4
|
|
strb r1, [r5, #0x7c9]
|
|
bl DiscoverMinimap
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F7F04: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F7EAC
|
|
|
|
arm_func_start ov29_022F7F08
|
|
ov29_022F7F08: ; 0x022F7F08
|
|
stmdb sp!, {r3, lr}
|
|
ldrb r0, [r0, #7]
|
|
cmp r0, #0
|
|
beq _022F7F28
|
|
bl GetForcedLossReason
|
|
cmp r0, #1
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
_022F7F28:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F7F08
|
|
|
|
#ifdef EUROPE
|
|
arm_func_start EuFaintCheck
|
|
EuFaintCheck: ; 0x022F88E8
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
cmp r1, #0
|
|
beq _022F8900
|
|
mov r0, #1
|
|
bl ov29_0234B010
|
|
_022F8900:
|
|
cmp r4, #0
|
|
bne _022F892C
|
|
bl UpdateMapSurveyorFlag
|
|
cmp r0, #0
|
|
beq _022F892C
|
|
bl GetMinimapDataE447
|
|
cmp r0, #0
|
|
beq _022F892C
|
|
mov r0, #1
|
|
bl ov29_02339F88
|
|
bl UpdateMinimap
|
|
_022F892C:
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end EuFaintCheck
|
|
#endif
|
|
|
|
arm_func_start HandleFaint
|
|
HandleFaint: ; 0x022F7F30
|
|
#ifdef JAPAN
|
|
#define HANDLE_FAINT_OFFSET -0xA4
|
|
#else
|
|
#define HANDLE_FAINT_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xbc
|
|
mov sl, r0
|
|
#ifdef EUROPE
|
|
ldr r7, [sl, #0xb4]
|
|
mov r8, r2
|
|
mov sb, r1
|
|
#else
|
|
mov r8, r2
|
|
mov sb, r1
|
|
ldr r7, [sl, #0xb4]
|
|
#endif
|
|
bl GetTileAtEntity
|
|
mov r4, r0
|
|
cmp r8, #0
|
|
#ifdef EUROPE
|
|
ldrb r5, [r7, #6]
|
|
#endif
|
|
bne _022F7F64
|
|
add r0, sp, #4
|
|
bl ov29_022E2470
|
|
add r8, sp, #4
|
|
_022F7F64:
|
|
ldr r0, [r4, #0xc]
|
|
cmp r0, sl
|
|
moveq r0, #0
|
|
streq r0, [r4, #0xc]
|
|
ldrsh r0, [sl, #4]
|
|
ldrsh r1, [sl, #6]
|
|
bl DrawMinimapTile
|
|
#ifdef EUROPE
|
|
mov r4, #0
|
|
mov fp, r4
|
|
_022F7F8C:
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r4, lsl #2
|
|
#else
|
|
mov r5, #0
|
|
ldr fp, _022F85D0 ; =DUNGEON_PTR
|
|
mov r4, r5
|
|
_022F7F8C:
|
|
ldr r0, [fp]
|
|
add r0, r0, r5, lsl #2
|
|
#endif
|
|
add r0, r0, #0x12000
|
|
ldr r6, [r0, #0xb78 + HANDLE_FAINT_OFFSET]
|
|
cmp r6, #0
|
|
beq _022F7FC4
|
|
mov r0, r6
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F7FC4
|
|
ldr r1, [r6, #0xb4]
|
|
ldr r0, [r1, #0x84]
|
|
cmp r0, sl
|
|
#ifdef EUROPE
|
|
streq fp, [r1, #0x84]
|
|
_022F7FC4:
|
|
add r4, r4, #1
|
|
cmp r4, #0x14
|
|
#else
|
|
streq r4, [r1, #0x84]
|
|
_022F7FC4:
|
|
add r5, r5, #1
|
|
cmp r5, #0x14
|
|
#endif
|
|
blt _022F7F8C
|
|
ldrb r0, [r7, #0xd8]
|
|
cmp r0, #2
|
|
ldreq r0, _022F85D0 ; =DUNGEON_PTR
|
|
moveq r1, #0
|
|
ldreq r0, [r0]
|
|
addeq r0, r0, #0x3000
|
|
streqb r1, [r0, #0xe38 + HANDLE_FAINT_OFFSET]
|
|
ldrb r0, [r7, #0xc4]
|
|
add r0, r0, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _022F8008
|
|
ldr r0, [r7, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
_022F8008:
|
|
mov r0, sl
|
|
bl ov29_023159D4
|
|
mov r1, #0
|
|
strb r1, [sl, #0x22]
|
|
ldr r0, _022F85D4 ; =LEADER_PTR
|
|
strb r1, [sl, #0x20]
|
|
str r1, [r0]
|
|
ldrb r0, [r7, #7]
|
|
cmp r0, #0
|
|
bne _022F8098
|
|
ldrb r0, [r7, #0x48]
|
|
bl JoinedAtRangeCheck2
|
|
cmp r0, #0
|
|
beq _022F8098
|
|
bl StoryRestrictionsEnabled
|
|
cmp r0, #0
|
|
beq _022F8098
|
|
mov r0, #1
|
|
bl SetForcedLossReason
|
|
mov r2, #0
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
strh r2, [r7, #0x10]
|
|
ldr r0, [r0]
|
|
mov r1, sl
|
|
add r0, r0, #0x248
|
|
add r0, r0, #0x400
|
|
bl ov29_022E2A78
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
#ifdef EUROPE
|
|
mov r1, #0
|
|
#endif
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x75f]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
#ifdef JAPAN
|
|
streqb r0, [r7, #0x161]
|
|
#else
|
|
streqb r0, [r7, #0x165]
|
|
#endif
|
|
#ifdef EUROPE
|
|
mov r0, r5
|
|
bl EuFaintCheck
|
|
#else
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
#endif
|
|
b _022F85C8
|
|
_022F8098:
|
|
ldrb r0, [r7, #7]
|
|
cmp r0, #0
|
|
beq _022F83B4
|
|
mov r0, #0
|
|
bl ov29_0234B1A4
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x75f]
|
|
cmp r0, #0
|
|
bne _022F80F4
|
|
bl GetForcedLossReason
|
|
cmp r0, #1
|
|
mov r0, #1
|
|
streqb r0, [sl, #0x20]
|
|
#ifdef JAPAN
|
|
strneb r0, [r7, #0x161]
|
|
#else
|
|
strneb r0, [r7, #0x165]
|
|
#endif
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
mov r0, #0x3c
|
|
mov r1, #0x49
|
|
bl ov29_022EA370
|
|
mov r0, #0
|
|
mov r1, r0
|
|
bl OpenMessageLog
|
|
_022F80F4:
|
|
#ifdef EUROPE
|
|
ldr r2, _022F85D0 ; =ov29_0235353
|
|
ldr r3, [r2]
|
|
ldrb r0, [r3, #0xa]
|
|
#else
|
|
ldr r1, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r2, [r1]
|
|
ldrb r0, [r2, #0xa]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _022F825C
|
|
mov r4, #0
|
|
bl IsOutlawOrChallengeRequestFloor
|
|
cmp r0, #0
|
|
bne _022F8234
|
|
bl GetForcedLossReason
|
|
cmp r0, #4
|
|
beq _022F8234
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
#ifdef EUROPE
|
|
ldr r0, [r0]
|
|
ldrb r1, [r0, #0x790]
|
|
cmp r1, #0
|
|
bne _022F8234
|
|
ldr r2, _022F85D8 ; =0x0000025B
|
|
cmp sb, r2
|
|
addne r1, r2, #6
|
|
cmpne sb, r1
|
|
addne r1, r2, #0xb
|
|
cmpne sb, r1
|
|
addne r1, r2, #2
|
|
cmpne sb, r1
|
|
beq _022F8234
|
|
add r1, r0, #0x4000
|
|
ldrb r1, [r1, #0xca]
|
|
cmp r1, #0
|
|
bne _022F8234
|
|
add r0, r0, #0x700
|
|
ldrsb r1, [r0, #0x9b]
|
|
cmp r1, #0
|
|
#else
|
|
ldr r2, [r0]
|
|
ldrb r0, [r2, #0x790]
|
|
cmp r0, #0
|
|
bne _022F8234
|
|
ldr r1, _022F85D8 ; =0x0000025B
|
|
cmp sb, r1
|
|
addne r0, r1, #6
|
|
cmpne sb, r0
|
|
addne r0, r1, #0xb
|
|
cmpne sb, r0
|
|
addne r0, r1, #2
|
|
cmpne sb, r0
|
|
beq _022F8234
|
|
add r0, r2, #0x4000
|
|
ldrb r0, [r0, #0xca + HANDLE_FAINT_OFFSET]
|
|
cmp r0, #0
|
|
bne _022F8234
|
|
add r0, r2, #0x700
|
|
#ifdef JAPAN
|
|
ldrsb r1, [r0, #0x9b]
|
|
cmp r1, #0
|
|
#else
|
|
ldrsb r2, [r0, #0x9b]
|
|
cmp r2, #0
|
|
#endif
|
|
#endif
|
|
blt _022F8234
|
|
ldrsb r0, [r0, #0x98]
|
|
cmp r0, #3
|
|
cmpne r0, #2
|
|
beq _022F8234
|
|
#ifdef NORTH_AMERICA
|
|
cmp r2, #0
|
|
#else
|
|
cmp r1, #0
|
|
#endif
|
|
ble _022F8220
|
|
mov r0, r4
|
|
mov r3, #1
|
|
ldr r1, _022F85DC ; =0x00000C13
|
|
mov r2, r0
|
|
str r3, [sp]
|
|
bl YesNoMenu
|
|
cmp r0, #1
|
|
bne _022F8208
|
|
ldr r1, _022F85E0 ; =0x00000C14
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl DisplayMessage
|
|
#ifdef EUROPE
|
|
ldr r2, _022F85D0 ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r3, [r2]
|
|
mov r0, r5
|
|
strb r1, [r3, #8]
|
|
ldr r3, [r2]
|
|
strb r1, [r3, #0xa]
|
|
ldr r3, [r2]
|
|
strb r1, [r3, #0x758]
|
|
ldr r3, [r2]
|
|
add r2, r3, #0x700
|
|
ldrsb r2, [r2, #0x9b]
|
|
sub r2, r2, #1
|
|
strb r2, [r3, #0x79b]
|
|
bl EuFaintCheck
|
|
#else
|
|
ldr r1, _022F85D0 ; =DUNGEON_PTR
|
|
mov r0, #1
|
|
ldr r2, [r1]
|
|
strb r0, [r2, #8]
|
|
ldr r2, [r1]
|
|
strb r0, [r2, #0xa]
|
|
ldr r2, [r1]
|
|
strb r0, [r2, #0x758]
|
|
ldr r2, [r1]
|
|
add r1, r2, #0x700
|
|
ldrsb r1, [r1, #0x9b]
|
|
sub r1, r1, #1
|
|
strb r1, [r2, #0x79b]
|
|
bl ov29_0234B010
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
#endif
|
|
b _022F85C8
|
|
_022F8208:
|
|
cmp r0, #2
|
|
bne _022F8240
|
|
mov r0, r7
|
|
bl ov29_022F7F08
|
|
mov r4, r0
|
|
b _022F8240
|
|
_022F8220:
|
|
#if defined(EUROPE)
|
|
rsb r1, r2, #0xe70
|
|
#elif defined(JAPAN)
|
|
ldr r1, _022F9BA4 ; =0x00000954
|
|
#else
|
|
rsb r1, r1, #0xe70
|
|
#endif
|
|
mov r0, r4
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
b _022F8240
|
|
_022F8234:
|
|
mov r0, r7
|
|
bl ov29_022F7F08
|
|
mov r4, r0
|
|
_022F8240:
|
|
mov r0, #1
|
|
bl ov29_0234B010
|
|
cmp r4, #0
|
|
beq _022F8284
|
|
mov r0, sl
|
|
bl ov29_022E68BC
|
|
b _022F8284
|
|
_022F825C:
|
|
#ifdef EUROPE
|
|
mov r1, #1
|
|
strb r1, [r3, #8]
|
|
ldr r3, [r2]
|
|
mov r0, r5
|
|
strb r1, [r3, #0xa]
|
|
ldr r2, [r2]
|
|
strb r1, [r2, #0x758]
|
|
bl EuFaintCheck
|
|
#else
|
|
mov r0, #1
|
|
strb r0, [r2, #8]
|
|
ldr r2, [r1]
|
|
strb r0, [r2, #0xa]
|
|
ldr r1, [r1]
|
|
strb r0, [r1, #0x758]
|
|
bl ov29_0234B010
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
#endif
|
|
b _022F85C8
|
|
_022F8284:
|
|
ldr r0, _022F85E4 ; =0x00000266
|
|
cmp sb, r0
|
|
bne _022F82B4
|
|
ldr r1, _022F85D0 ; =DUNGEON_PTR
|
|
mov r0, sb
|
|
ldr r2, [r1]
|
|
mov r1, r8
|
|
add r3, r2, #0x248
|
|
mov r2, sl
|
|
add r3, r3, #0x400
|
|
bl ov29_022ECDE4
|
|
b _022F82C8
|
|
_022F82B4:
|
|
mov r0, sb
|
|
mov r1, r8
|
|
mov r2, sl
|
|
mov r3, #0
|
|
bl ov29_022ECDE4
|
|
_022F82C8:
|
|
ldr r0, _022F85E8 ; =0x0000025E
|
|
cmp sb, r0
|
|
bne _022F83B4
|
|
#ifdef EUROPE
|
|
mov r6, #0
|
|
mov r4, r6
|
|
ldr fp, _022F85D0 ; =DUNGEON_PTR
|
|
b _022F8328
|
|
_022F82E4:
|
|
ldr r0, [fp]
|
|
#else
|
|
mov r5, #0
|
|
mov r4, r5
|
|
ldr r6, _022F85D0 ; =DUNGEON_PTR
|
|
b _022F8328
|
|
_022F82E4:
|
|
ldr r0, [r6]
|
|
#endif
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r8, [r0, #0xb28 + HANDLE_FAINT_OFFSET]
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F8324
|
|
#ifdef EUROPE
|
|
ldr r6, [r8, #0xb4]
|
|
ldrsh r0, [r6, #0x10]
|
|
cmp r0, #0
|
|
bne _022F8324
|
|
ldrb r0, [r6, #0x48]
|
|
#else
|
|
ldr r5, [r8, #0xb4]
|
|
ldrsh r0, [r5, #0x10]
|
|
cmp r0, #0
|
|
bne _022F8324
|
|
ldrb r0, [r5, #0x48]
|
|
#endif
|
|
bl JoinedAtRangeCheck2
|
|
cmp r0, #0
|
|
bne _022F8330
|
|
_022F8324:
|
|
add r4, r4, #1
|
|
_022F8328:
|
|
cmp r4, #4
|
|
blt _022F82E4
|
|
_022F8330:
|
|
#ifdef EUROPE
|
|
cmp r6, #0
|
|
beq _022F83B4
|
|
ldrsh r0, [r6, #0xc]
|
|
bl GetActiveTeamMember
|
|
mov r4, r0
|
|
ldrsh r0, [r6, #0xc]
|
|
mov r1, r6
|
|
#else
|
|
cmp r5, #0
|
|
beq _022F83B4
|
|
ldrsh r0, [r5, #0xc]
|
|
bl GetActiveTeamMember
|
|
mov r4, r0
|
|
ldrsh r0, [r5, #0xc]
|
|
mov r1, r5
|
|
#endif
|
|
bl ov29_022FE048
|
|
ldrsh r0, [r4, #8]
|
|
bl IsMonsterIdInNormalRange
|
|
cmp r0, #0
|
|
beq _022F83A8
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl IsLevelResetDungeon
|
|
cmp r0, #0
|
|
bne _022F83A8
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x700
|
|
ldrsb r0, [r0, #0x98]
|
|
cmp r0, #3
|
|
beq _022F83A8
|
|
#ifdef EUROPE
|
|
ldrsh r0, [r6, #0xc]
|
|
#else
|
|
ldrsh r0, [r5, #0xc]
|
|
#endif
|
|
mvn r1, #0
|
|
bl sub_02058674
|
|
ldrsh r0, [r4, #8]
|
|
mov r1, r4
|
|
bl sub_0205349C
|
|
_022F83A8:
|
|
ldrb r0, [r4]
|
|
orr r0, r0, #8
|
|
strb r0, [r4]
|
|
_022F83B4:
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl ov29_022E1C0C
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
ldrne r0, _022F85D8 ; =0x0000025B
|
|
cmpne sb, r0
|
|
beq _022F83F4
|
|
ldrb r0, [r7, #0xbc]
|
|
bl ov29_022EFAE8
|
|
cmp r0, #0
|
|
beq _022F83F4
|
|
mov r0, #1
|
|
bl SetMissionTargetEnemyDefeated
|
|
mov r0, #1
|
|
bl ov29_02349688
|
|
_022F83F4:
|
|
ldrb r0, [r7, #0x48]
|
|
cmp r0, #0xfa
|
|
bne _022F8428
|
|
mov r0, #2
|
|
bl SetForcedLossReason
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
mov r1, sl
|
|
ldr r0, [r0]
|
|
mov r2, #0
|
|
add r0, r0, #0x248
|
|
add r0, r0, #0x400
|
|
bl ov29_022E2A78
|
|
b _022F8460
|
|
_022F8428:
|
|
cmp r0, #0xe3
|
|
beq _022F8460
|
|
bl JoinedAtRangeCheck
|
|
cmp r0, #0
|
|
beq _022F8460
|
|
mov r0, #3
|
|
bl SetForcedLossReason
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
mov r1, sl
|
|
ldr r0, [r0]
|
|
mov r2, #0
|
|
add r0, r0, #0x248
|
|
add r0, r0, #0x400
|
|
bl ov29_022E2A78
|
|
_022F8460:
|
|
bl GetLeader
|
|
cmp r0, #0
|
|
ldrne r0, _022F85D8 ; =0x0000025B
|
|
cmpne sb, r0
|
|
beq _022F84AC
|
|
ldrb r0, [r7, #7]
|
|
cmp r0, #0
|
|
bne _022F84AC
|
|
bl GetForcedLossReason
|
|
cmp r0, #0
|
|
bne _022F84AC
|
|
ldr r0, _022F85EC ; =0x00000233
|
|
ldrb r1, [r7, #0xbc]
|
|
cmp sb, r0
|
|
moveq r2, #1
|
|
movne r2, #0
|
|
mov r0, sl
|
|
and r2, r2, #0xff
|
|
bl ov29_022EF7C4
|
|
_022F84AC:
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
bne _022F8594
|
|
ldrsh r0, [r7, #0xc]
|
|
bl GetActiveTeamMember
|
|
mov r4, r0
|
|
ldrsh r0, [r7, #0xc]
|
|
mov r1, r7
|
|
bl ov29_022FE048
|
|
ldrsh r0, [r4, #8]
|
|
bl IsMonsterIdInNormalRange
|
|
cmp r0, #0
|
|
beq _022F856C
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl IsLevelResetDungeon
|
|
cmp r0, #0
|
|
bne _022F8528
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x700
|
|
ldrsb r0, [r0, #0x98]
|
|
cmp r0, #3
|
|
beq _022F8528
|
|
ldrsh r0, [r7, #0xc]
|
|
mvn r1, #0
|
|
bl sub_02058674
|
|
ldrsh r0, [r4, #8]
|
|
mov r1, r4
|
|
bl sub_0205349C
|
|
_022F8528:
|
|
ldrb r0, [r7, #7]
|
|
#ifdef EUROPE
|
|
mov r6, #0
|
|
cmp r0, #0
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
movne r6, #1
|
|
#else
|
|
mov r5, #0
|
|
cmp r0, #0
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
movne r5, #1
|
|
#endif
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x75c]
|
|
cmp r0, #0
|
|
bne _022F855C
|
|
ldrb r0, [r7, #0x48]
|
|
bl JoinedAtRangeCheck2
|
|
cmp r0, #0
|
|
#ifdef EUROPE
|
|
movne r6, #1
|
|
_022F855C:
|
|
cmp r6, #0
|
|
#else
|
|
movne r5, #1
|
|
_022F855C:
|
|
cmp r5, #0
|
|
#endif
|
|
bne _022F856C
|
|
ldrsh r0, [r4, #8]
|
|
bl sub_020566C4
|
|
_022F856C:
|
|
ldrb r0, [r7, #7]
|
|
cmp r0, #0
|
|
ldrneb r0, [r4]
|
|
orrne r0, r0, #8
|
|
strneb r0, [r4]
|
|
bne _022F8594
|
|
add r0, r7, #0x62
|
|
bl RemoveHolderForItemInBag
|
|
mov r0, #0
|
|
strb r0, [r4]
|
|
_022F8594:
|
|
ldr r0, [r7, #0xb0]
|
|
bl ov29_022DDB68
|
|
ldr r0, _022F85D0 ; =DUNGEON_PTR
|
|
ldr r1, _022F85D4 ; =LEADER_PTR
|
|
mov r2, #0
|
|
ldr r0, [r0]
|
|
str r2, [r1]
|
|
mov r1, #1
|
|
strb r1, [r0, #0xe]
|
|
str r2, [sl]
|
|
bl ov29_022E2978
|
|
#ifdef EUROPE
|
|
mov r0, r5
|
|
mov r1, #0
|
|
bl EuFaintCheck
|
|
#else
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
#endif
|
|
_022F85C8:
|
|
add sp, sp, #0xbc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F85D0: .word DUNGEON_PTR
|
|
_022F85D4: .word LEADER_PTR
|
|
_022F85D8: .word 0x0000025B
|
|
#ifdef JAPAN
|
|
_022F85DC: .word 0x00000952
|
|
_022F85E0: .word 0x00000953
|
|
_022F9BA4: .word 0x00000954
|
|
#else
|
|
_022F85DC: .word 0x00000C13
|
|
_022F85E0: .word 0x00000C14
|
|
#endif
|
|
_022F85E4: .word 0x00000266
|
|
_022F85E8: .word 0x0000025E
|
|
_022F85EC: .word 0x00000233
|
|
arm_func_end HandleFaint
|
|
|
|
arm_func_start MoveMonsterToPos
|
|
MoveMonsterToPos: ; 0x022F85F0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov r8, r1
|
|
mov r7, r2
|
|
mov sb, r0
|
|
mov r0, r8
|
|
mov r1, r7
|
|
mov r6, r3
|
|
bl GetTileSafe
|
|
ldr r5, [sb, #0xb4]
|
|
mov r4, r0
|
|
ldrb r0, [r5, #0xc4]
|
|
add r0, r0, #0xfd
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _022F8634
|
|
ldr r0, [r5, #0xb4]
|
|
bl FreeOtherWrappedMonsters
|
|
_022F8634:
|
|
ldrb r0, [r5, #0xc4]
|
|
cmp r0, #7
|
|
cmpne r0, #5
|
|
cmpne r0, #2
|
|
bne _022F8658
|
|
mov r0, sb
|
|
mov r1, sb
|
|
mov r2, #1
|
|
bl EndFrozenClassStatus
|
|
_022F8658:
|
|
ldrsh r1, [sb, #4]
|
|
cmp r8, r1
|
|
ldreqsh r0, [sb, #6]
|
|
cmpeq r7, r0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
cmp r1, #0
|
|
ldrgesh r2, [sb, #6]
|
|
cmpge r2, #0
|
|
blt _022F8690
|
|
mov r0, sb
|
|
bl ov29_02337EC0
|
|
ldrsh r0, [sb, #4]
|
|
ldrsh r1, [sb, #6]
|
|
bl DrawMinimapTile
|
|
_022F8690:
|
|
ldrsh r2, [sb, #4]
|
|
mov r0, r8, lsl #0x10
|
|
mov r1, r7, lsl #0x10
|
|
strh r2, [sb, #8]
|
|
ldrsh r2, [sb, #6]
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, asr #0x10
|
|
strh r2, [sb, #0xa]
|
|
strh r0, [sb, #4]
|
|
strh r1, [sb, #6]
|
|
ldrb r2, [r5, #7]
|
|
cmp r2, #0
|
|
beq _022F86C8
|
|
bl ov29_02338F24
|
|
_022F86C8:
|
|
str sb, [r4, #0xc]
|
|
ldrb r0, [r5, #7]
|
|
cmp r0, #0
|
|
beq _022F86FC
|
|
mov r0, r8, lsl #0x10
|
|
mov r1, r7, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, asr #0x10
|
|
bl ov29_02338F24
|
|
ldr r0, _022F87BC ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #5]
|
|
_022F86FC:
|
|
mov r0, r8
|
|
mov r1, r7
|
|
bl DrawMinimapTile
|
|
cmp r6, #0
|
|
beq _022F871C
|
|
cmp r6, #1
|
|
beq _022F8768
|
|
b _022F87A8
|
|
_022F871C:
|
|
ldrh r0, [r5, #0x72]
|
|
strh r0, [r5, #0x76]
|
|
ldrh r0, [r5, #0x74]
|
|
strh r0, [r5, #0x78]
|
|
ldrh r0, [r5, #0x6e]
|
|
strh r0, [r5, #0x72]
|
|
ldrh r0, [r5, #0x70]
|
|
strh r0, [r5, #0x74]
|
|
ldrh r0, [r5, #0x6a]
|
|
strh r0, [r5, #0x6e]
|
|
ldrh r0, [r5, #0x6c]
|
|
strh r0, [r5, #0x70]
|
|
ldrb r0, [r5, #0xef]
|
|
cmp r0, #1
|
|
ldrneh r0, [sb, #8]
|
|
strneh r0, [r5, #0x6a]
|
|
ldrneh r0, [sb, #0xa]
|
|
strneh r0, [r5, #0x6c]
|
|
b _022F87A8
|
|
_022F8768:
|
|
ldrh r0, [sb, #4]
|
|
strh r0, [r5, #0x6a]
|
|
ldrh r0, [sb, #6]
|
|
strh r0, [r5, #0x6c]
|
|
ldrh r0, [r5, #0x6a]
|
|
strh r0, [r5, #0x6e]
|
|
ldrh r0, [r5, #0x6c]
|
|
strh r0, [r5, #0x70]
|
|
ldrh r0, [r5, #0x6e]
|
|
strh r0, [r5, #0x72]
|
|
ldrh r0, [r5, #0x70]
|
|
strh r0, [r5, #0x74]
|
|
ldrh r0, [r5, #0x72]
|
|
strh r0, [r5, #0x76]
|
|
ldrh r0, [r5, #0x74]
|
|
strh r0, [r5, #0x78]
|
|
_022F87A8:
|
|
ldrb r1, [r4, #7]
|
|
mov r0, sb
|
|
strb r1, [sb, #0x25]
|
|
bl ov29_02304BAC
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022F87BC: .word DUNGEON_PTR
|
|
arm_func_end MoveMonsterToPos
|
|
|
|
arm_func_start ov29_022F87C0
|
|
ov29_022F87C0: ; 0x022F87C0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r0
|
|
ldr r5, [r4, #0xb4]
|
|
ldrb r1, [r5, #0x4c]
|
|
bl CanAttackInDirection
|
|
cmp r0, #0
|
|
beq _022F8820
|
|
ldrb r2, [r5, #0x4c]
|
|
ldr r1, _022F8828 ; =DIRECTIONS_XY
|
|
ldr r0, _022F882C ; =ov29_0235171E
|
|
mov ip, r2, lsl #2
|
|
ldrsh lr, [r4, #4]
|
|
ldrsh r3, [r1, ip]
|
|
ldrsh r2, [r4, #6]
|
|
ldrsh r1, [r0, ip]
|
|
add r0, lr, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, #0
|
|
beq _022F8820
|
|
ldr r1, [r0]
|
|
cmp r1, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_022F8820:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F8828: .word DIRECTIONS_XY
|
|
_022F882C: .word ov29_0235171E
|
|
arm_func_end ov29_022F87C0
|
|
|
|
arm_func_start ov29_022F8830
|
|
ov29_022F8830: ; 0x022F8830
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, r0
|
|
ldr r5, [r4, #0xb4]
|
|
ldr r0, _022F88B8 ; =DIRECTIONS_XY
|
|
ldrb r2, [r5, #0x4c]
|
|
ldrsh r3, [r4, #4]
|
|
ldr r1, _022F88BC ; =ov29_0235171E
|
|
mov r2, r2, lsl #2
|
|
ldrsh r0, [r0, r2]
|
|
add r0, r3, r0
|
|
strh r0, [sp]
|
|
ldrb r2, [r5, #0x4c]
|
|
ldrsh r3, [r4, #6]
|
|
ldrsh r0, [sp]
|
|
mov r2, r2, lsl #2
|
|
ldrsh r1, [r1, r2]
|
|
add r1, r3, r1
|
|
strh r1, [sp, #2]
|
|
ldrsh r1, [sp, #2]
|
|
bl GetTile
|
|
mov r5, r0
|
|
add r1, sp, #0
|
|
mov r0, r4
|
|
bl ov29_022FFB90
|
|
cmp r0, #0
|
|
bne _022F88B0
|
|
ldr r0, [r5, #0xc]
|
|
cmp r0, #0
|
|
beq _022F88B0
|
|
ldr r1, [r0]
|
|
cmp r1, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_022F88B0:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F88B8: .word DIRECTIONS_XY
|
|
_022F88BC: .word ov29_0235171E
|
|
arm_func_end ov29_022F8830
|
|
|
|
arm_func_start ov29_022F88C0
|
|
ov29_022F88C0: ; 0x022F88C0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r4, [r5, #0xb4]
|
|
ldr r0, _022F89A4 ; =DIRECTIONS_XY
|
|
ldrb r2, [r4, #0x4c]
|
|
ldrsh r3, [r5, #4]
|
|
ldr r1, _022F89A8 ; =ov29_0235171E
|
|
mov r2, r2, lsl #2
|
|
ldrsh r0, [r0, r2]
|
|
add r0, r3, r0
|
|
strh r0, [sp]
|
|
ldrb r2, [r4, #0x4c]
|
|
ldrsh r3, [r5, #6]
|
|
ldrsh r0, [sp]
|
|
mov r2, r2, lsl #2
|
|
ldrsh r1, [r1, r2]
|
|
add r1, r3, r1
|
|
strh r1, [sp, #2]
|
|
ldrsh r1, [sp, #2]
|
|
bl GetTile
|
|
add r1, sp, #0
|
|
mov r0, r5
|
|
bl ov29_022FFB90
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #0x4c]
|
|
ldr r0, _022F89A4 ; =DIRECTIONS_XY
|
|
ldrsh r2, [r5, #4]
|
|
mov r1, r1, lsl #2
|
|
ldrsh r0, [r0, r1]
|
|
ldr r1, _022F89A8 ; =ov29_0235171E
|
|
add r0, r2, r0, lsl #1
|
|
strh r0, [sp]
|
|
ldrb r2, [r4, #0x4c]
|
|
ldrsh r3, [r5, #6]
|
|
ldrsh r0, [sp]
|
|
mov r2, r2, lsl #2
|
|
ldrsh r1, [r1, r2]
|
|
add r1, r3, r1, lsl #1
|
|
strh r1, [sp, #2]
|
|
ldrsh r1, [sp, #2]
|
|
bl GetTile
|
|
mov r4, r0
|
|
add r1, sp, #0
|
|
mov r0, r5
|
|
bl ov29_022FFB90
|
|
cmp r0, #0
|
|
bne _022F899C
|
|
ldr r0, [r4, #0xc]
|
|
cmp r0, #0
|
|
beq _022F899C
|
|
ldr r1, [r0]
|
|
cmp r1, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_022F899C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F89A4: .word DIRECTIONS_XY
|
|
_022F89A8: .word ov29_0235171E
|
|
arm_func_end ov29_022F88C0
|
|
|
|
arm_func_start ov29_022F89AC
|
|
ov29_022F89AC: ; 0x022F89AC
|
|
stmdb sp!, {r3, lr}
|
|
mov r1, r0
|
|
add r0, sp, #0
|
|
bl ov29_022F8FF8
|
|
ldrsh r0, [sp]
|
|
ldrsh r1, [sp, #2]
|
|
bl GetTile
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F89AC
|
|
|
|
arm_func_start CreateMonsterSummaryFromMonster
|
|
CreateMonsterSummaryFromMonster: ; 0x022F89CC
|
|
#ifdef JAPAN
|
|
#define CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET -4
|
|
#else
|
|
#define CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
ldr r5, [r6, #0xb4]
|
|
mov r7, r0
|
|
mov r1, r5
|
|
add r0, r7, #2
|
|
bl GetMonsterName
|
|
ldrsh r1, [r5, #2]
|
|
ldr r0, _022F8FF0 ; =0x000003E7
|
|
mov r3, #0
|
|
strh r1, [r7]
|
|
ldrsh r1, [r5, #0x10]
|
|
str r1, [r7, #0x24]
|
|
ldrsh r2, [r5, #0x12]
|
|
ldrsh r1, [r5, #0x16]
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
str r1, [r7, #0x28]
|
|
ldrb r0, [r5, #0xa]
|
|
str r0, [r7, #0x2c]
|
|
ldr r0, [r5, #0x20]
|
|
str r0, [r7, #0x30]
|
|
_022F8A28:
|
|
add r2, r5, r3
|
|
ldrb r0, [r2, #0x1a]
|
|
add r1, r7, r3
|
|
add r3, r3, #1
|
|
strb r0, [r1, #0x34]
|
|
ldrb r0, [r2, #0x1c]
|
|
cmp r3, #2
|
|
strb r0, [r1, #0x36]
|
|
ldrb r0, [r2, #0x5e]
|
|
strb r0, [r1, #0x16]
|
|
ldrb r0, [r2, #0x60]
|
|
strb r0, [r1, #0x18]
|
|
blt _022F8A28
|
|
ldrb r0, [r5, #7]
|
|
mov r1, #0
|
|
strb r0, [r7, #0x38]
|
|
strb r1, [r7, #0x39]
|
|
strb r1, [r7, #0x3a]
|
|
strb r1, [r7, #0x3b]
|
|
strb r1, [r7, #0x3c]
|
|
ldrb r0, [r5, #0xd8]
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
streqb r0, [r7, #0x45]
|
|
strneb r1, [r7, #0x45]
|
|
mov r0, r6
|
|
mov r1, #0x6f
|
|
bl AbilityIsActiveVeneer
|
|
str r0, [sp]
|
|
ldrsh r1, [r5, #2]
|
|
ldrsh r3, [r5, #0xe]
|
|
mov r0, r7
|
|
add r2, r5, #0x62
|
|
bl GetStatBoostsForMonsterSummary
|
|
ldrb r2, [r5, #0xa8]
|
|
mov r1, #0
|
|
add r0, r5, #0x90
|
|
strb r2, [r7, #0x54]
|
|
ldrh r2, [r5, #0x62]
|
|
add r4, r7, #0x48
|
|
ldr r3, _022F8FF4 ; =DUNGEON_PTR
|
|
strh r2, [r7, #0x1c]
|
|
ldrh r2, [r5, #0x64]
|
|
strh r2, [r7, #0x1e]
|
|
ldrh r2, [r5, #0x66]
|
|
strh r2, [r7, #0x20]
|
|
ldrsh r2, [r5, #0xe]
|
|
strh r2, [r7, #0x3e]
|
|
ldrb r2, [r5, #0x48]
|
|
strb r2, [r7, #0x1a]
|
|
ldrb r2, [r5, #0x49]
|
|
strb r2, [r7, #0x1b]
|
|
strb r1, [r7, #0x42]
|
|
strb r1, [r7, #0x43]
|
|
ldmia r0, {r0, r1, r2}
|
|
stmia r4, {r0, r1, r2}
|
|
ldr r0, [r3]
|
|
ldrb r0, [r0, #0x75a]
|
|
cmp r0, #0
|
|
moveq r0, #3
|
|
beq _022F8B24
|
|
mov r0, r5
|
|
bl ov29_022F9B8C
|
|
_022F8B24:
|
|
strb r0, [r7, #0x44]
|
|
ldrsh r2, [r5, #0x12]
|
|
ldrsh r1, [r5, #0x16]
|
|
ldr r0, _022F8FF0 ; =0x000003E7
|
|
mov r4, #0
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
add r0, r2, r0, lsr #30
|
|
ldrsh r1, [r5, #0x10]
|
|
sub r2, sp, #4
|
|
cmp r1, r0, asr #2
|
|
movle r0, #6
|
|
strleb r0, [r7, #0x58]
|
|
ldr r0, _022F8FF4 ; =DUNGEON_PTR
|
|
addle r4, r4, #1
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x78d]
|
|
cmp r0, #0
|
|
addne r0, r7, r4
|
|
movne r1, #0xb
|
|
strneb r1, [r0, #0x58]
|
|
add r0, r5, #0x100
|
|
ldrh r1, [r0, #0x46 + CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET]
|
|
addne r4, r4, #1
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
bne _022F8BC4
|
|
ldrb r0, [r5, #7]
|
|
cmp r0, #0
|
|
movne r1, #0x13
|
|
add r0, r7, r4
|
|
moveq r1, #0x42
|
|
strb r1, [r0, #0x58]
|
|
add r4, r4, #1
|
|
_022F8BC4:
|
|
ldr r0, [r6, #0xb4]
|
|
ldr r0, [r0, #0x110 + CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET]
|
|
cmp r0, #1
|
|
addgt r0, r7, r4
|
|
movgt r1, #0x1b
|
|
strgtb r1, [r0, #0x58]
|
|
ldr r0, [r6, #0xb4]
|
|
addgt r4, r4, #1
|
|
ldr r0, [r0, #0x110 + CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET]
|
|
cmp r0, #1
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x29
|
|
strltb r1, [r0, #0x58]
|
|
ldr r0, [r5, #0x34]
|
|
addlt r4, r4, #1
|
|
cmp r0, #0x100
|
|
ldrge r0, [r5, #0x38]
|
|
cmpge r0, #0x100
|
|
ldrge r0, [r5, #0x3c]
|
|
cmpge r0, #0x100
|
|
ldrge r0, [r5, #0x40]
|
|
cmpge r0, #0x100
|
|
ldrgesh r0, [r5, #0x24]
|
|
cmpge r0, #0xa
|
|
ldrgesh r0, [r5, #0x26]
|
|
cmpge r0, #0xa
|
|
ldrgesh r0, [r5, #0x28]
|
|
cmpge r0, #0xa
|
|
ldrgesh r0, [r5, #0x2a]
|
|
cmpge r0, #0xa
|
|
ldrgesh r0, [r5, #0x2c]
|
|
cmpge r0, #0xa
|
|
ldrgesh r0, [r5, #0x2e]
|
|
cmpge r0, #0xa
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x3b
|
|
strltb r1, [r0, #0x58]
|
|
ldr r0, [r5, #0x34]
|
|
addlt r4, r4, #1
|
|
cmp r0, #0x100
|
|
ldrle r0, [r5, #0x38]
|
|
cmple r0, #0x100
|
|
ldrle r0, [r5, #0x3c]
|
|
cmple r0, #0x100
|
|
ldrle r0, [r5, #0x40]
|
|
cmple r0, #0x100
|
|
ldrlesh r0, [r5, #0x24]
|
|
cmple r0, #0xa
|
|
ldrlesh r0, [r5, #0x26]
|
|
cmple r0, #0xa
|
|
ldrlesh r0, [r5, #0x28]
|
|
cmple r0, #0xa
|
|
ldrlesh r0, [r5, #0x2a]
|
|
cmple r0, #0xa
|
|
ldrlesh r0, [r5, #0x2c]
|
|
cmple r0, #0xa
|
|
ldrlesh r0, [r5, #0x2e]
|
|
cmple r0, #0xa
|
|
addgt r0, r7, r4
|
|
movgt r1, #0x45
|
|
strgtb r1, [r0, #0x58]
|
|
ldrb r1, [r5, #0xbd]
|
|
addgt r4, r4, #1
|
|
cmp r1, #0
|
|
beq _022F8CD8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8CD8:
|
|
ldrb r1, [r5, #0xbf]
|
|
cmp r1, #0
|
|
beq _022F8CF8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #6
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8CF8:
|
|
ldrb r1, [r5, #0xc4]
|
|
cmp r1, #0
|
|
beq _022F8D18
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0xb
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8D18:
|
|
ldrb r1, [r5, #0xd0]
|
|
cmp r1, #0
|
|
beq _022F8D38
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x13
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8D38:
|
|
ldrb r1, [r5, #0xd2]
|
|
cmp r1, #0
|
|
beq _022F8D58
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x1b
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8D58:
|
|
ldrb r1, [r5, #0xd5]
|
|
cmp r1, #0
|
|
beq _022F8D78
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x29
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8D78:
|
|
ldrb r1, [r5, #0xd8]
|
|
cmp r1, #0
|
|
beq _022F8D98
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x3b
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8D98:
|
|
ldrb r1, [r5, #0xe0]
|
|
cmp r1, #0
|
|
beq _022F8DB8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x42
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8DB8:
|
|
ldrb r1, [r5, #0xec]
|
|
cmp r1, #0
|
|
beq _022F8DD8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x45
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8DD8:
|
|
ldrb r1, [r5, #0xee]
|
|
cmp r1, #0
|
|
beq _022F8DF8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x4a
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8DF8:
|
|
ldrb r1, [r5, #0xef]
|
|
cmp r1, #0
|
|
beq _022F8E18
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x4d
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8E18:
|
|
ldrb r1, [r5, #0xf1]
|
|
cmp r1, #0
|
|
beq _022F8E38
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x52
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8E38:
|
|
ldrb r1, [r5, #0xf3]
|
|
cmp r1, #0
|
|
beq _022F8E58
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x57
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8E58:
|
|
ldrb r1, [r5, #0xf5]
|
|
cmp r1, #0
|
|
beq _022F8E78
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x59
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8E78:
|
|
ldrb r1, [r5, #0xf7]
|
|
cmp r1, #0
|
|
beq _022F8E98
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
addlt r1, r1, #0x5b
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8E98:
|
|
ldrb r0, [r5, #0x11e + CREATE_MONSTER_SUMMARY_FROM_MONSTER_OFFSET]
|
|
cmp r0, #0
|
|
beq _022F8EB8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x5d
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8EB8:
|
|
ldrb r0, [r5, #0xf9]
|
|
cmp r0, #0
|
|
beq _022F8ED8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x5e
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8ED8:
|
|
ldrb r0, [r5, #0xfa]
|
|
cmp r0, #0
|
|
beq _022F8EF8
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x5f
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8EF8:
|
|
ldrb r0, [r5, #0xfd]
|
|
cmp r0, #0
|
|
beq _022F8F18
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x60
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8F18:
|
|
ldrb r0, [r5, #0xfe]
|
|
cmp r0, #0
|
|
beq _022F8F38
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x61
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8F38:
|
|
mov r0, r6
|
|
bl ShouldMonsterRunAway
|
|
cmp r0, #0
|
|
beq _022F8F5C
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x62
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8F5C:
|
|
#ifdef JAPAN
|
|
ldrb r0, [r5, #0x105]
|
|
#else
|
|
ldrb r0, [r5, #0x106]
|
|
#endif
|
|
cmp r0, #0
|
|
beq _022F8F7C
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x63
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8F7C:
|
|
mov r0, r6
|
|
mov r1, #0
|
|
bl GetNumberOfAttacks
|
|
cmp r0, #2
|
|
blt _022F8FA4
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x64
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8FA4:
|
|
ldrb r0, [r5, #0xfb]
|
|
cmp r0, #0
|
|
beq _022F8FC4
|
|
cmp r4, #0x1e
|
|
addlt r0, r7, r4
|
|
movlt r1, #0x65
|
|
strltb r1, [r0, #0x58]
|
|
addlt r4, r4, #1
|
|
_022F8FC4:
|
|
mov r1, #0
|
|
b _022F8FD8
|
|
_022F8FCC:
|
|
add r0, r7, r4
|
|
strb r1, [r0, #0x58]
|
|
add r4, r4, #1
|
|
_022F8FD8:
|
|
cmp r4, #0x1e
|
|
blt _022F8FCC
|
|
add r0, r7, r4
|
|
mov r1, #0
|
|
strb r1, [r0, #0x58]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022F8FF0: .word 0x000003E7
|
|
_022F8FF4: .word DUNGEON_PTR
|
|
arm_func_end CreateMonsterSummaryFromMonster
|
|
|
|
arm_func_start ov29_022F8FF8
|
|
ov29_022F8FF8: ; 0x022F8FF8
|
|
stmdb sp!, {r4, lr}
|
|
ldr r2, [r1, #0xb4]
|
|
ldr ip, _022F9050 ; =DIRECTIONS_XY
|
|
ldrb lr, [r2, #0x4c]
|
|
ldrsh r4, [r1, #4]
|
|
ldr r3, _022F9054 ; =ov29_0235171E
|
|
mov lr, lr, lsl #2
|
|
ldrsh ip, [ip, lr]
|
|
add r4, r4, ip
|
|
strh r4, [r0]
|
|
ldrb ip, [r2, #0x4c]
|
|
ldrsh lr, [r1, #6]
|
|
mov r1, ip, lsl #2
|
|
ldrsh r1, [r3, r1]
|
|
add r1, lr, r1
|
|
strh r1, [r0, #2]
|
|
ldrb r0, [r2, #0x4c]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022F9050: .word DIRECTIONS_XY
|
|
_022F9054: .word ov29_0235171E
|
|
arm_func_end ov29_022F8FF8
|
|
|
|
arm_func_start ov29_022F9058
|
|
ov29_022F9058: ; 0x022F9058
|
|
#ifdef JAPAN
|
|
#define OV29_022F9058_OFFSET -4
|
|
#else
|
|
#define OV29_022F9058_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
ldr r4, [r1, #0xb4]
|
|
mov r5, r0
|
|
ldrsh r0, [r4, #2]
|
|
strh r0, [r5]
|
|
ldrh r0, [r1, #4]
|
|
strh r0, [r5, #2]
|
|
ldrh r0, [r1, #6]
|
|
strh r0, [r5, #4]
|
|
ldrb r0, [r4, #0x100]
|
|
cmp r0, #0
|
|
ldrnesh r0, [r4, #0x14]
|
|
ldreqsh r0, [r4, #0x12]
|
|
strh r0, [r5, #6]
|
|
ldrb r1, [r4, #0xa]
|
|
add r0, sp, #0
|
|
strh r1, [r5, #0xc]
|
|
ldrsh r1, [r4, #2]
|
|
ldrb r2, [r4, #0xa]
|
|
bl GetLvlUpEntry
|
|
ldr r0, [sp]
|
|
add r3, r4, #0x124 + OV29_022F9058_OFFSET
|
|
str r0, [r5, #0x10]
|
|
ldrb r0, [r4, #0x1a]
|
|
add r2, r5, #0x22
|
|
mov r1, #0x11
|
|
strb r0, [r5, #8]
|
|
ldrb r0, [r4, #0x1b]
|
|
strb r0, [r5, #9]
|
|
ldrb r0, [r4, #0x1c]
|
|
strb r0, [r5, #0xa]
|
|
ldrb r0, [r4, #0x1d]
|
|
strb r0, [r5, #0xb]
|
|
ldrh r0, [r4, #0x62]
|
|
strh r0, [r5, #0x1c]
|
|
ldrh r0, [r4, #0x64]
|
|
strh r0, [r5, #0x1e]
|
|
ldrh r0, [r4, #0x66]
|
|
strh r0, [r5, #0x20]
|
|
_022F90F8:
|
|
ldrh r0, [r3], #2
|
|
subs r1, r1, #1
|
|
strh r0, [r2], #2
|
|
bne _022F90F8
|
|
add r0, r4, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_022F9058_OFFSET]
|
|
strh r1, [r5, #0x14]
|
|
ldrh r1, [r0, #0x48 + OV29_022F9058_OFFSET]
|
|
strh r1, [r5, #0x16]
|
|
ldrh r1, [r0, #0x4a + OV29_022F9058_OFFSET]
|
|
strh r1, [r5, #0x18]
|
|
ldrh r0, [r0, #0x4c + OV29_022F9058_OFFSET]
|
|
strh r0, [r5, #0x1a]
|
|
ldrh r0, [r4, #0x44]
|
|
strh r0, [r5, #0x44]
|
|
ldrh r0, [r4, #0x46]
|
|
strh r0, [r5, #0x46]
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
arm_func_end ov29_022F9058
|
|
|
|
arm_func_start UpdateAiTargetPos
|
|
UpdateAiTargetPos: ; 0x022F9144
|
|
stmdb sp!, {r3, lr}
|
|
ldr lr, [r0, #0xb4]
|
|
ldr r2, _022F918C ; =DIRECTIONS_XY
|
|
ldrb r3, [lr, #0x4c]
|
|
ldrsh ip, [r0, #4]
|
|
add r1, lr, #0x100
|
|
mov r3, r3, lsl #2
|
|
ldrsh r3, [r2, r3]
|
|
ldr r2, _022F9190 ; =ov29_0235171E
|
|
add r3, ip, r3
|
|
#ifdef JAPAN
|
|
strh r3, [r1, #0x7a]
|
|
#else
|
|
strh r3, [r1, #0x7e]
|
|
#endif
|
|
ldrb r3, [lr, #0x4c]
|
|
ldrsh ip, [r0, #6]
|
|
mov r0, r3, lsl #2
|
|
ldrsh r0, [r2, r0]
|
|
add r0, ip, r0
|
|
#ifdef JAPAN
|
|
strh r0, [r1, #0x7c]
|
|
#else
|
|
strh r0, [r1, #0x80]
|
|
#endif
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022F918C: .word DIRECTIONS_XY
|
|
_022F9190: .word ov29_0235171E
|
|
arm_func_end UpdateAiTargetPos
|
|
|
|
arm_func_start SetMonsterTypeAndAbility
|
|
SetMonsterTypeAndAbility: ; 0x022F9194
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r1, #0x25
|
|
ldr r4, [r5, #0xb4]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _022F91D8
|
|
mov r0, r5
|
|
bl GetApparentWeather
|
|
mov r1, #6
|
|
mul r2, r0, r1
|
|
ldr r1, _022F9234 ; =CASTFORM_WEATHER_ATTRIBUTE_TABLE
|
|
mov r0, #0
|
|
ldrb r1, [r1, r2]
|
|
strb r1, [r4, #0x5e]
|
|
strb r0, [r4, #0x5f]
|
|
b _022F91FC
|
|
_022F91D8:
|
|
mov r5, #0
|
|
_022F91DC:
|
|
ldrsh r0, [r4, #2]
|
|
mov r1, r5
|
|
bl GetType
|
|
add r1, r4, r5
|
|
add r5, r5, #1
|
|
strb r0, [r1, #0x5e]
|
|
cmp r5, #2
|
|
blt _022F91DC
|
|
_022F91FC:
|
|
mov r5, #0
|
|
_022F9200:
|
|
ldrsh r0, [r4, #2]
|
|
mov r1, r5
|
|
bl GetAbility
|
|
add r1, r4, r5
|
|
add r5, r5, #1
|
|
strb r0, [r1, #0x60]
|
|
cmp r5, #2
|
|
blt _022F9200
|
|
ldr r0, _022F9238 ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0xe]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022F9234: .word CASTFORM_WEATHER_ATTRIBUTE_TABLE
|
|
_022F9238: .word DUNGEON_PTR
|
|
arm_func_end SetMonsterTypeAndAbility
|
|
|
|
arm_func_start TryActivateSlowStart
|
|
TryActivateSlowStart: ; 0x022F923C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, #0
|
|
mov r7, #1
|
|
ldr r5, _022F92D0 ; =0x00000C17
|
|
ldr r4, _022F92D4 ; =DUNGEON_PTR
|
|
mov r6, sb
|
|
mov fp, r7
|
|
mov r8, #0x5e
|
|
_022F925C:
|
|
ldr r0, [r4]
|
|
add r0, r0, sb, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr sl, [r0, #0xad4]
|
|
#else
|
|
ldr sl, [r0, #0xb78]
|
|
#endif
|
|
mov r0, sl
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F92C0
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _022F92C0
|
|
mov r0, r7
|
|
mov r1, sl
|
|
mov r2, r6
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, sl
|
|
mov r1, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, sl
|
|
mov r1, sl
|
|
mov r2, fp
|
|
mov r3, #0
|
|
bl LowerSpeed
|
|
_022F92C0:
|
|
add sb, sb, #1
|
|
cmp sb, #0x14
|
|
blt _022F925C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022F92D0: .word 0x00000956
|
|
#else
|
|
_022F92D0: .word 0x00000C17
|
|
#endif
|
|
_022F92D4: .word DUNGEON_PTR
|
|
arm_func_end TryActivateSlowStart
|
|
|
|
arm_func_start TryActivateArtificialWeatherAbilities
|
|
TryActivateArtificialWeatherAbilities: ; 0x022F92D8
|
|
#ifdef JAPAN
|
|
#define TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET -0xA4
|
|
#else
|
|
#define TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
bl IsSecretFloor
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r4, _022F9404 ; =DUNGEON_PTR
|
|
ldr r1, [r4]
|
|
ldrb r0, [r1, #0xe]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
mov sb, #0
|
|
strb sb, [r1, #0xe]
|
|
ldr r0, [r4]
|
|
mov r5, #1
|
|
add r0, r0, #0xc000
|
|
strb sb, [r0, #0xd5d + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
|
|
mov r6, r5
|
|
mov r7, r5
|
|
mov r8, r5
|
|
mov fp, r5
|
|
_022F9324:
|
|
ldr r0, [r4]
|
|
add r0, r0, sb, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr sl, [r0, #0xb78 + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
|
|
mov r0, sl
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F93F4
|
|
mov r0, sl
|
|
mov r1, #4
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldrne r0, [r4]
|
|
#ifdef JAPAN
|
|
addne r0, r0, #0xcc00
|
|
strneh r8, [r0, #0xae]
|
|
#else
|
|
addne r0, r0, #0xcd00
|
|
strneh r8, [r0, #0x52]
|
|
#endif
|
|
bne _022F93C0
|
|
mov r0, sl
|
|
mov r1, #0x1c
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldrne r0, [r4]
|
|
#ifdef JAPAN
|
|
addne r0, r0, #0xcc00
|
|
strneh r7, [r0, #0xaa]
|
|
#else
|
|
addne r0, r0, #0xcd00
|
|
strneh r7, [r0, #0x4e]
|
|
#endif
|
|
bne _022F93C0
|
|
mov r0, sl
|
|
mov r1, #0x31
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldrne r0, [r4]
|
|
#ifdef JAPAN
|
|
addne r0, r0, #0xcc00
|
|
strneh r6, [r0, #0xa8]
|
|
#else
|
|
addne r0, r0, #0xcd00
|
|
strneh r6, [r0, #0x4c]
|
|
#endif
|
|
bne _022F93C0
|
|
mov r0, sl
|
|
mov r1, #0x78
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldrne r0, [r4]
|
|
#ifdef JAPAN
|
|
addne r0, r0, #0xcc00
|
|
strneh r5, [r0, #0xb0]
|
|
#else
|
|
addne r0, r0, #0xcd00
|
|
strneh r5, [r0, #0x54]
|
|
#endif
|
|
_022F93C0:
|
|
mov r0, sl
|
|
mov r1, #8
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _022F93E8
|
|
mov r0, sl
|
|
mov r1, #0x2d
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _022F93F4
|
|
_022F93E8:
|
|
ldr r0, [r4]
|
|
add r0, r0, #0xc000
|
|
strb fp, [r0, #0xd5d + TRY_ACTIVATE_ARTIFICIAL_WEATHER_ABILITIES_OFFSET]
|
|
_022F93F4:
|
|
add sb, sb, #1
|
|
cmp sb, #0x14
|
|
blt _022F9324
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022F9404: .word DUNGEON_PTR
|
|
arm_func_end TryActivateArtificialWeatherAbilities
|
|
|
|
arm_func_start GetMonsterApparentId
|
|
GetMonsterApparentId: ; 0x022F9408
|
|
stmdb sp!, {r4, lr}
|
|
movs r4, r0
|
|
beq _022F94A8
|
|
ldr r2, _022F94E0 ; =0x0000017B
|
|
cmp r1, r2
|
|
blt _022F945C
|
|
add r2, r2, #3
|
|
cmp r1, r2
|
|
bgt _022F945C
|
|
mov r1, #0x25
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldreq r0, _022F94E0 ; =0x0000017B
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r0, r4
|
|
bl GetApparentWeather
|
|
mov r1, #6
|
|
mul r1, r0, r1
|
|
ldr r0, _022F94E4 ; =ov10_022C4C6E
|
|
ldrsh r0, [r0, r1]
|
|
ldmia sp!, {r4, pc}
|
|
_022F945C:
|
|
ldr r0, _022F94E8 ; =0x000003D3
|
|
cmp r1, r0
|
|
blt _022F94D8
|
|
add r0, r0, #3
|
|
cmp r1, r0
|
|
bgt _022F94D8
|
|
mov r0, r4
|
|
mov r1, #0x25
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldreq r0, _022F94E8 ; =0x000003D3
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r0, r4
|
|
bl GetApparentWeather
|
|
mov r1, #6
|
|
mul r1, r0, r1
|
|
ldr r0, _022F94EC ; =ov10_022C4C70
|
|
ldrsh r0, [r0, r1]
|
|
ldmia sp!, {r4, pc}
|
|
_022F94A8:
|
|
ldr r0, _022F94E0 ; =0x0000017B
|
|
cmp r1, r0
|
|
blt _022F94C0
|
|
add r2, r0, #3
|
|
cmp r1, r2
|
|
ldmleia sp!, {r4, pc}
|
|
_022F94C0:
|
|
ldr r0, _022F94E8 ; =0x000003D3
|
|
cmp r1, r0
|
|
blt _022F94D8
|
|
add r2, r0, #3
|
|
cmp r1, r2
|
|
ldmleia sp!, {r4, pc}
|
|
_022F94D8:
|
|
mov r0, r1
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022F94E0: .word 0x0000017B
|
|
_022F94E4: .word ov10_022C4C6E
|
|
_022F94E8: .word 0x000003D3
|
|
_022F94EC: .word ov10_022C4C70
|
|
arm_func_end GetMonsterApparentId
|
|
|
|
arm_func_start TryActivateTraceAndColorChange
|
|
TryActivateTraceAndColorChange: ; 0x022F94F0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov sb, r0
|
|
mov r8, r1
|
|
mov r7, r2
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
cmpne sb, r8
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r5, [sb, #0xb4]
|
|
ldr r6, [r8, #0xb4]
|
|
ldrb r0, [r5, #0xbc]
|
|
bl IsSecretBazaarNpcBehavior
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldrb r0, [r6, #0x60]
|
|
mvn r4, #0
|
|
cmp r0, #0x28
|
|
ldrb r0, [r6, #0x61]
|
|
moveq r4, #0
|
|
cmp r0, #0x28
|
|
moveq r4, #1
|
|
cmp r4, #0
|
|
blt _022F95FC
|
|
ldrb r1, [r5, #0x60]
|
|
ldrb r2, [r5, #0x61]
|
|
mov r0, #0
|
|
cmp r1, #0
|
|
strneb r1, [sp]
|
|
addne r0, r0, #1
|
|
cmp r2, #0
|
|
addne r1, sp, #0
|
|
strneb r2, [r1, r0]
|
|
addne r0, r0, #1
|
|
cmp r0, #0
|
|
mvneq r0, #0
|
|
beq _022F95A0
|
|
cmp r0, #1
|
|
moveq r0, #0
|
|
beq _022F95A0
|
|
bl DungeonRandInt
|
|
_022F95A0:
|
|
cmp r0, #0
|
|
blt _022F95FC
|
|
add r1, sp, #0
|
|
ldrb r3, [r1, r0]
|
|
ldr r1, _022F96BC ; =DUNGEON_PTR
|
|
add r2, r6, r4
|
|
strb r3, [r2, #0x60]
|
|
mov r0, #0
|
|
ldr r3, [r1]
|
|
mov r4, #1
|
|
mov r1, r8
|
|
mov r2, r0
|
|
strb r4, [r3, #0xe]
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _022F96C0 ; =0x00000C18
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r8
|
|
bl ov29_022E6260
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl TryEndStatusWithAbility
|
|
_022F95FC:
|
|
#ifdef JAPAN
|
|
ldrb r0, [r6, #0x160]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r3, #0
|
|
#else
|
|
ldrb r0, [r6, #0x164]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r4, #0
|
|
#endif
|
|
mov r0, sb
|
|
mov r1, r8
|
|
mov r2, #0x3b
|
|
#ifdef JAPAN
|
|
strb r3, [r6, #0x160]
|
|
#else
|
|
mov r3, #1
|
|
strb r4, [r6, #0x164]
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, sb
|
|
mov r1, r7
|
|
bl GetMoveTypeForMonster
|
|
ldrh r1, [r7, #4]
|
|
mov r4, r0
|
|
cmp r1, #0x1f
|
|
bne _022F9658
|
|
mov r0, sb
|
|
bl GetApparentWeather
|
|
ldr r1, _022F96C4 ; =WEATHER_BALL_TYPE_TABLE
|
|
ldrb r4, [r1, r0]
|
|
_022F9658:
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r8
|
|
mov r1, r4
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, #0
|
|
strb r4, [r6, #0x5e]
|
|
strb r0, [r6, #0x5f]
|
|
mov r3, #1
|
|
mov r1, r8
|
|
mov r2, r0
|
|
strb r3, [r6, #0xff]
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrb r1, [r6, #0x5e]
|
|
mov r0, #0
|
|
bl ov29_0234B084
|
|
ldr r2, _022F96C8 ; =0x00000C19
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
mov r0, r8
|
|
bl ov29_022E647C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022F96BC: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_022F96C0: .word 0x00000957
|
|
_022F96C4: .word WEATHER_BALL_TYPE_TABLE
|
|
_022F96C8: .word 0x00000958
|
|
#else
|
|
_022F96C0: .word 0x00000C18
|
|
_022F96C4: .word WEATHER_BALL_TYPE_TABLE
|
|
_022F96C8: .word 0x00000C19
|
|
#endif
|
|
arm_func_end TryActivateTraceAndColorChange
|
|
|
|
arm_func_start DefenderAbilityIsActive__022F96CC
|
|
DefenderAbilityIsActive__022F96CC: ; 0x022F96CC
|
|
#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 _022F9710
|
|
bl IsMonster__022F9720
|
|
cmp r0, #0
|
|
#ifdef JAPAN
|
|
beq _022F9710
|
|
mov r0, r6
|
|
#else
|
|
cmpne r4, #0
|
|
beq _022F9710
|
|
mov r0, r7
|
|
#endif
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
#ifdef JAPAN
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
_022F9710:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl AbilityIsActiveVeneer
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
#else
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_022F9710:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl AbilityIsActiveVeneer
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
#endif
|
|
arm_func_end DefenderAbilityIsActive__022F96CC
|
|
|
|
arm_func_start IsMonster__022F9720
|
|
IsMonster__022F9720: ; 0x022F9720
|
|
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__022F9720
|
|
|
|
arm_func_start TryActivateConversion2
|
|
TryActivateConversion2: ; 0x022F9744
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r4, r2
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r6
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
cmpne r7, r6
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r5, [r6, #0xb4]
|
|
mov r0, r6
|
|
bl Conversion2IsActive
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r4
|
|
bl GetMoveTypeForMonster
|
|
bl GetConversion2ConvertToType
|
|
movs r4, r0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r6
|
|
bl ov29_02307CE0
|
|
mov r0, r6
|
|
strb r4, [r5, #0x5e]
|
|
mov r1, #0
|
|
strb r1, [r5, #0x5f]
|
|
bl ov29_022E4160
|
|
mov r0, #0
|
|
mov r1, r6
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_0234B084
|
|
mov r0, r7
|
|
mov r1, r6
|
|
ldr r2, _022F97EC ; =0x00000C16
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022F97EC: .word 0x00000955
|
|
#else
|
|
_022F97EC: .word 0x00000C16
|
|
#endif
|
|
arm_func_end TryActivateConversion2
|
|
|
|
arm_func_start TryActivateTruant
|
|
TryActivateTruant: ; 0x022F97F0
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #8
|
|
mov r4, r0
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F9838
|
|
mov r0, r4
|
|
mov r1, #0x2a
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _022F9838
|
|
mov r2, #0
|
|
str r2, [sp]
|
|
mov r0, r4
|
|
mov r1, r4
|
|
mov r3, #1
|
|
str r2, [sp, #4]
|
|
bl TryInflictPausedStatus
|
|
_022F9838:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end TryActivateTruant
|
|
|
|
arm_func_start ov29_022F9840
|
|
ov29_022F9840: ; 0x022F9840
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, #0
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, [r5]
|
|
cmp r0, #1
|
|
bne _022F987C
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, r4
|
|
and r4, r0, #0xff
|
|
_022F987C:
|
|
bl sub_0204AEF0
|
|
cmp r0, #0
|
|
moveq r4, #0
|
|
cmp r4, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
bl ShouldDisplayEntityWrapper
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
mov r1, #1
|
|
mov r0, r5
|
|
mov r2, r1
|
|
bl TryPointCameraToMonster
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_022F9840
|
|
|
|
arm_func_start TryPointCameraToMonster
|
|
TryPointCameraToMonster: ; 0x022F98B4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r0, [r6]
|
|
cmp r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r0, _022F9968 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0x188]
|
|
#else
|
|
ldr r0, [r0, #0x22c]
|
|
#endif
|
|
cmp r0, r6
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
cmp r5, #0
|
|
beq _022F9928
|
|
mov r0, #1
|
|
bl AnimationDelayOrSomething
|
|
mov r7, #0x34
|
|
ldr r5, _022F9968 ; =DUNGEON_PTR
|
|
b _022F9918
|
|
_022F9910:
|
|
mov r0, r7
|
|
bl AdvanceFrame
|
|
_022F9918:
|
|
ldr r0, [r5]
|
|
ldrsh r0, [r0, #0x1c]
|
|
cmp r0, #0x3c
|
|
blt _022F9910
|
|
_022F9928:
|
|
mov r0, #4
|
|
mov r1, #0x44
|
|
bl ov29_022EA370
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl PointCameraToMonster
|
|
cmp r4, #0
|
|
beq _022F9950
|
|
add r0, r6, #4
|
|
bl DiscoverMinimap
|
|
_022F9950:
|
|
ldr r0, _022F9968 ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
strh r1, [r0, #0x1c]
|
|
bl ov29_022E81F8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022F9968: .word DUNGEON_PTR
|
|
arm_func_end TryPointCameraToMonster
|
|
|
|
arm_func_start ov29_022F996C
|
|
ov29_022F996C: ; 0x022F996C
|
|
bx lr
|
|
arm_func_end ov29_022F996C
|
|
|
|
arm_func_start ov29_022F9970
|
|
ov29_022F9970: ; 0x022F9970
|
|
#ifdef JAPAN
|
|
#define OV29_022F9970_OFFSET -0xA4
|
|
#else
|
|
#define OV29_022F9970_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r4, #0
|
|
ldr r6, _022F99E8 ; =DUNGEON_PTR
|
|
b _022F99DC
|
|
_022F9980:
|
|
ldr r0, [r6]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r5, [r0, #0xb78 + OV29_022F9970_OFFSET]
|
|
mov r0, r5
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F99D8
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #0xd8]
|
|
cmp r0, #3
|
|
bne _022F99D8
|
|
ldr r1, _022F99E8 ; =DUNGEON_PTR
|
|
ldr r0, [r1]
|
|
add r0, r0, #0x19000
|
|
str r5, [r0, #0x904 + OV29_022F9970_OFFSET]
|
|
ldr r2, [r5, #0xb4]
|
|
ldr r0, [r1]
|
|
ldr r1, [r2, #0xb0]
|
|
add r0, r0, #0x19000
|
|
str r1, [r0, #0x90c + OV29_022F9970_OFFSET]
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_022F99D8:
|
|
add r4, r4, #1
|
|
_022F99DC:
|
|
cmp r4, #0x14
|
|
blt _022F9980
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022F99E8: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F9970
|
|
|
|
arm_func_start ov29_022F99EC
|
|
ov29_022F99EC: ; 0x022F99EC
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #0x40
|
|
mov r4, #0
|
|
ldr r6, _022F9A70 ; =DUNGEON_PTR
|
|
mov r5, r4
|
|
add r7, sp, #0
|
|
_022F9A04:
|
|
ldr r0, [r6]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r8, [r0, #0xa94]
|
|
#else
|
|
ldr r8, [r0, #0xb38]
|
|
#endif
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022F9A40
|
|
ldr r0, [r8, #0xb4]
|
|
ldrb r0, [r0, #0xbc]
|
|
cmp r0, #0xb
|
|
blo _022F9A40
|
|
cmp r0, #0xe
|
|
strls r8, [r7, r4, lsl #2]
|
|
addls r4, r4, #1
|
|
_022F9A40:
|
|
add r5, r5, #1
|
|
cmp r5, #0x10
|
|
blt _022F9A04
|
|
cmp r4, #0
|
|
movle r0, #0
|
|
ble _022F9A68
|
|
mov r0, r4
|
|
bl DungeonRandInt
|
|
add r1, sp, #0
|
|
ldr r0, [r1, r0, lsl #2]
|
|
_022F9A68:
|
|
add sp, sp, #0x40
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022F9A70: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F99EC
|
|
|
|
arm_func_start RestorePpAllMovesSetFlags
|
|
RestorePpAllMovesSetFlags: ; 0x022F9A74
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldr r0, [r0, #0xb4]
|
|
mov r7, #0
|
|
#ifdef JAPAN
|
|
add r6, r0, #0x120
|
|
#else
|
|
add r6, r0, #0x124
|
|
#endif
|
|
mov r4, r7
|
|
mov r5, #1
|
|
_022F9A8C:
|
|
ldrb r0, [r6, r7, lsl #3]
|
|
add r8, r6, r7, lsl #3
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, r4
|
|
tst r0, #0xff
|
|
beq _022F9AE4
|
|
ldrh r1, [r8, #2]
|
|
mov r0, r8
|
|
bic r1, r1, #8
|
|
strh r1, [r8, #2]
|
|
ldrh r1, [r8, #2]
|
|
bic r1, r1, #0x10
|
|
strh r1, [r8, #2]
|
|
ldrh r1, [r8, #2]
|
|
bic r1, r1, #0x40
|
|
strh r1, [r8, #2]
|
|
ldrh r1, [r8, #2]
|
|
orr r1, r1, #4
|
|
strh r1, [r8, #2]
|
|
bl GetMaxPpWrapper
|
|
strb r0, [r8, #6]
|
|
_022F9AE4:
|
|
add r7, r7, #1
|
|
cmp r7, #4
|
|
blt _022F9A8C
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
arm_func_end RestorePpAllMovesSetFlags
|
|
|
|
arm_func_start ov29_022F9AF4
|
|
ov29_022F9AF4: ; 0x022F9AF4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov sb, r0
|
|
ldr r1, [sb, #0xb4]
|
|
mov r5, #0
|
|
ldrb r8, [r1, #6]
|
|
bl ov29_022F87C0
|
|
cmp r0, #0
|
|
moveq r0, r5
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mvn r7, #0
|
|
mov r4, r7
|
|
_022F9B20:
|
|
mov r6, r4
|
|
_022F9B24:
|
|
ldrsh r0, [sb, #4]
|
|
ldrsh r1, [sb, #6]
|
|
add r0, r0, r6
|
|
add r1, r1, r7
|
|
bl GetTileSafe
|
|
ldr r1, [r0, #0xc]
|
|
cmp r1, #0
|
|
beq _022F9B60
|
|
ldr r0, [r1]
|
|
cmp r0, #1
|
|
bne _022F9B60
|
|
ldr r0, [r1, #0xb4]
|
|
ldrb r0, [r0, #6]
|
|
cmp r8, r0
|
|
addne r5, r5, #1
|
|
_022F9B60:
|
|
add r6, r6, #1
|
|
cmp r6, #1
|
|
ble _022F9B24
|
|
add r7, r7, #1
|
|
cmp r7, #1
|
|
ble _022F9B20
|
|
cmp r5, #2
|
|
movge r0, #1
|
|
movlt r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end ov29_022F9AF4
|
|
|
|
arm_func_start ov29_022F9B8C
|
|
ov29_022F9B8C: ; 0x022F9B8C
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #0x4c
|
|
mov r2, #0
|
|
mov r1, #1
|
|
mov r4, r0
|
|
strb r2, [sp, #4]
|
|
strb r1, [sp, #5]
|
|
str r2, [sp]
|
|
ldrsh r1, [r4, #2]
|
|
add r0, sp, #8
|
|
add r3, sp, #4
|
|
bl sub_02052E2C
|
|
ldrsh r0, [r4, #2]
|
|
mov r1, #0
|
|
mov r2, #6
|
|
strh r0, [sp, #0xc]
|
|
ldrb r0, [r4, #0xa]
|
|
strb r0, [sp, #9]
|
|
ldrsh r0, [r4, #0xe]
|
|
strh r0, [sp, #0x10]
|
|
ldrb r0, [r4, #0x1a]
|
|
strb r0, [sp, #0x14]
|
|
ldrb r0, [r4, #0x1c]
|
|
strb r0, [sp, #0x16]
|
|
ldrb r0, [r4, #0x48]
|
|
strb r0, [sp, #0xa]
|
|
ldrb r0, [r4, #0x49]
|
|
strb r0, [sp, #0xb]
|
|
add r0, sp, #8
|
|
_022F9C00:
|
|
mla lr, r1, r2, r0
|
|
add r3, r4, r1, lsl #3
|
|
#ifdef JAPAN
|
|
ldrb ip, [r3, #0x120]
|
|
#else
|
|
ldrb ip, [r3, #0x124]
|
|
#endif
|
|
add r3, r3, #0x100
|
|
add r1, r1, #1
|
|
strb ip, [lr, #0x22]
|
|
#ifdef JAPAN
|
|
ldrh r3, [r3, #0x24]
|
|
#else
|
|
ldrh r3, [r3, #0x28]
|
|
#endif
|
|
cmp r1, #4
|
|
strh r3, [lr, #0x24]
|
|
blt _022F9C00
|
|
bl GetMonsterEvoStatus
|
|
add sp, sp, #0x4c
|
|
ldmia sp!, {r3, r4, pc}
|
|
arm_func_end ov29_022F9B8C
|
|
|
|
arm_func_start ov29_022F9C34
|
|
ov29_022F9C34: ; 0x022F9C34
|
|
ldr ip, _022F9C3C ; =sub_02056228
|
|
bx ip
|
|
.align 2, 0
|
|
_022F9C3C: .word sub_02056228
|
|
arm_func_end ov29_022F9C34
|
|
|
|
arm_func_start CheckTeamMemberIdxVeneer
|
|
CheckTeamMemberIdxVeneer: ; 0x022F9C40
|
|
ldr ip, _022F9C48 ; =CheckTeamMemberIdx
|
|
bx ip
|
|
.align 2, 0
|
|
_022F9C48: .word CheckTeamMemberIdx
|
|
arm_func_end CheckTeamMemberIdxVeneer
|
|
|
|
arm_func_start ov29_022F9C4C
|
|
ov29_022F9C4C: ; 0x022F9C4C
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, [r0, #0xb4]
|
|
ldrsh r0, [r0, #0xc]
|
|
bl GetActiveTeamMember
|
|
ldrsh r0, [r0, #8]
|
|
bl CheckTeamMemberIdx
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022F9C4C
|
|
|
|
arm_func_start IsMonsterIdInNormalRangeVeneer
|
|
IsMonsterIdInNormalRangeVeneer: ; 0x022F9C68
|
|
ldr ip, _022F9C70 ; =IsMonsterIdInNormalRange
|
|
bx ip
|
|
.align 2, 0
|
|
_022F9C70: .word IsMonsterIdInNormalRange
|
|
arm_func_end IsMonsterIdInNormalRangeVeneer
|
|
|
|
arm_func_start ov29_022F9C74
|
|
ov29_022F9C74: ; 0x022F9C74
|
|
#ifdef JAPAN
|
|
#define OV29_022F9C74_OFFSET -4
|
|
#else
|
|
#define OV29_022F9C74_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #0xc
|
|
mov r6, r0
|
|
bl EntityIsValid__022F7364
|
|
#ifndef JAPAN
|
|
cmp r0, #0
|
|
beq _022F9E80
|
|
ldr r5, [r6, #0xb4]
|
|
ldrb r0, [r5, #0x103]
|
|
#endif
|
|
cmp r0, #0
|
|
beq _022F9E78
|
|
mov r0, r6
|
|
bl GetTileAtEntity
|
|
ldrh r0, [r0]
|
|
and r0, r0, #3
|
|
cmp r0, #2
|
|
bne _022F9D50
|
|
ldr r0, _022F9E88 ; =DUNGEON_PTR
|
|
ldr r1, _022F9E8C ; =SECONDARY_TERRAIN_TYPES
|
|
ldr r0, [r0]
|
|
#ifdef JAPAN
|
|
ldr r4, [r6, #0xb4]
|
|
add r0, r0, #0x4000
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
add r0, r0, #0x4000
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
ldrb r0, [r1, r0]
|
|
cmp r0, #1
|
|
bne _022F9D34
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0xc4]
|
|
#else
|
|
ldrb r0, [r5, #0xc4]
|
|
#endif
|
|
cmp r0, #1
|
|
bne _022F9CF0
|
|
mov r0, r6
|
|
mov r1, r6
|
|
mov r2, #1
|
|
bl EndFrozenClassStatus
|
|
_022F9CF0:
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r4, #2]
|
|
bl GetMobilityType
|
|
cmp r0, #4
|
|
ldrnesh r1, [r4, #2]
|
|
#else
|
|
ldrsh r0, [r5, #2]
|
|
bl GetMobilityType
|
|
cmp r0, #4
|
|
ldrnesh r1, [r5, #2]
|
|
#endif
|
|
ldrne r0, _022F9E90 ; =0x00000115
|
|
cmpne r1, r0
|
|
cmpne r1, #0x92
|
|
#ifdef JAPAN
|
|
ldrneb r0, [r4, #0xbf]
|
|
#else
|
|
ldrneb r0, [r5, #0xbf]
|
|
#endif
|
|
cmpne r0, #1
|
|
beq _022F9E78
|
|
mov r3, #0
|
|
mov r0, r6
|
|
mov r1, r6
|
|
mov r2, #1
|
|
str r3, [sp]
|
|
bl TryInflictBurnStatus
|
|
b _022F9E78
|
|
_022F9D34:
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0xbf]
|
|
#else
|
|
ldrb r0, [r5, #0xbf]
|
|
#endif
|
|
cmp r0, #1
|
|
bne _022F9E78
|
|
mov r0, r6
|
|
mov r1, r6
|
|
bl EndBurnClassStatus
|
|
b _022F9E78
|
|
_022F9D50:
|
|
cmp r0, #0
|
|
bne _022F9E78
|
|
#ifdef JAPAN
|
|
ldr r5, [r6, #0xb4]
|
|
#endif
|
|
ldrb r0, [r5, #7]
|
|
cmp r0, #0
|
|
beq _022F9E78
|
|
add r0, r5, #0x100
|
|
ldrh r1, [r0, #0x48 + OV29_022F9C74_OFFSET]
|
|
ldrh r4, [r0, #0x46 + OV29_022F9C74_OFFSET]
|
|
sub r3, sp, #4
|
|
strh r1, [sp, #0xa]
|
|
mov r0, r1
|
|
strh r4, [r3]
|
|
strh r0, [r3, #2]
|
|
ldr r1, _022F9E94 ; =BELLY_DRAIN_IN_WALLS_INT
|
|
ldr r0, [r3]
|
|
ldrh r2, [r1]
|
|
strh r4, [sp, #8]
|
|
strh r2, [r3]
|
|
ldrh r1, [r1, #2]
|
|
strh r1, [r3, #2]
|
|
ldr r1, [r3]
|
|
bl SubFixedPoint
|
|
strh r0, [sp, #4]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #6]
|
|
ldrh r1, [sp, #4]
|
|
add r0, r5, #0x100
|
|
ldrh r3, [sp, #6]
|
|
strh r1, [r0, #0x46 + OV29_022F9C74_OFFSET]
|
|
ldrh r2, [sp, #8]
|
|
strh r3, [r0, #0x48 + OV29_022F9C74_OFFSET]
|
|
sub r0, sp, #4
|
|
ldrh r1, [sp, #0xa]
|
|
strh r2, [r0]
|
|
mov r4, #0
|
|
strh r1, [r0, #2]
|
|
ldr r0, [r0]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0x14
|
|
blt _022F9E18
|
|
add r0, r5, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_022F9C74_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_022F9C74_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0x14
|
|
ldrlt r4, _022F9E98 ; =0x00000C1A
|
|
_022F9E18:
|
|
ldrh r1, [sp, #8]
|
|
ldrh r0, [sp, #0xa]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0xa
|
|
blt _022F9E64
|
|
add r0, r5, #0x100
|
|
ldrh r1, [r0, #0x46 + OV29_022F9C74_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + OV29_022F9C74_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0xa
|
|
ldrlt r4, _022F9E9C ; =0x00000C1B
|
|
_022F9E64:
|
|
cmp r4, #0
|
|
beq _022F9E78
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022F9E78:
|
|
#ifndef JAPAN
|
|
mov r0, #0
|
|
strb r0, [r5, #0x103]
|
|
_022F9E80:
|
|
#endif
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022F9E88: .word DUNGEON_PTR
|
|
_022F9E8C: .word SECONDARY_TERRAIN_TYPES
|
|
_022F9E90: .word 0x00000115
|
|
_022F9E94: .word BELLY_DRAIN_IN_WALLS_INT
|
|
#ifdef JAPAN
|
|
_022F9E98: .word 0x00000959
|
|
_022F9E9C: .word 0x0000095A
|
|
#else
|
|
_022F9E98: .word 0x00000C1A
|
|
_022F9E9C: .word 0x00000C1B
|
|
#endif
|
|
arm_func_end ov29_022F9C74
|
|
|
|
arm_func_start ov29_022F9EA0
|
|
ov29_022F9EA0: ; 0x022F9EA0
|
|
#ifdef JAPAN
|
|
#define OV29_022F9EA0_OFFSET -4
|
|
#else
|
|
#define OV29_022F9EA0_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0xc
|
|
mov r5, r0
|
|
mov r1, #0x6f
|
|
ldr r4, [r5, #0xb4]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _022F9FEC
|
|
ldrb r0, [r4, #7]
|
|
cmp r0, #0
|
|
bne _022F9FBC
|
|
mov r0, r5
|
|
mov r1, #0x11
|
|
bl HasHeldItem
|
|
cmp r0, #0
|
|
bne _022F9EF4
|
|
mov r0, r5
|
|
mov r1, #0x32
|
|
bl HasHeldItem
|
|
cmp r0, #0
|
|
beq _022F9F60
|
|
_022F9EF4:
|
|
mov r0, #0xa
|
|
bl sub_02050FF8
|
|
add r1, r4, #0x100
|
|
ldrh r2, [r1, #0x46 + OV29_022F9EA0_OFFSET]
|
|
sub r3, sp, #4
|
|
strh r0, [sp, #8]
|
|
strh r2, [r3]
|
|
ldrh r1, [r1, #0x48 + OV29_022F9EA0_OFFSET]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #0xa]
|
|
strh r1, [r3, #2]
|
|
ldrh r2, [sp, #8]
|
|
ldr r0, [r3]
|
|
ldrh r1, [sp, #0xa]
|
|
strh r2, [r3]
|
|
strh r1, [r3, #2]
|
|
ldr r1, [r3]
|
|
bl SubFixedPoint
|
|
strh r0, [sp, #4]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #6]
|
|
ldrh r2, [sp, #4]
|
|
add r0, r4, #0x100
|
|
ldrh r1, [sp, #6]
|
|
strh r2, [r0, #0x46 + OV29_022F9EA0_OFFSET]
|
|
strh r1, [r0, #0x48 + OV29_022F9EA0_OFFSET]
|
|
b _022F9F9C
|
|
_022F9F60:
|
|
mov r0, r5
|
|
mov r1, #0x22
|
|
bl HasHeldItem
|
|
cmp r0, #0
|
|
beq _022F9F9C
|
|
mov r0, #0
|
|
bl sub_02050FF8
|
|
strh r0, [sp]
|
|
mov r0, r0, lsr #0x10
|
|
strh r0, [sp, #2]
|
|
ldrh r2, [sp]
|
|
add r0, r4, #0x100
|
|
ldrh r1, [sp, #2]
|
|
strh r2, [r0, #0x46 + OV29_022F9EA0_OFFSET]
|
|
strh r1, [r0, #0x48 + OV29_022F9EA0_OFFSET]
|
|
_022F9F9C:
|
|
ldr r0, _022FA028 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x78d]
|
|
cmp r0, #0
|
|
beq _022F9FEC
|
|
mov r0, r5
|
|
bl UpdateStatusIconFlags
|
|
b _022F9FEC
|
|
_022F9FBC:
|
|
ldrsh r1, [r4, #0x66]
|
|
ldrsh r0, [r4, #0x68]
|
|
cmp r0, r1
|
|
beq _022F9FEC
|
|
cmp r1, #0x18
|
|
cmpne r0, #0x18
|
|
cmpne r1, #0xe
|
|
cmpne r0, #0xe
|
|
bne _022F9FEC
|
|
mov r0, #1
|
|
bl UpdateCamera
|
|
bl UpdateMinimap
|
|
_022F9FEC:
|
|
ldrsh r1, [r4, #0x68]
|
|
ldrsh r0, [r4, #0x66]
|
|
cmp r1, r0
|
|
beq _022FA000
|
|
bl ov29_02307DD0
|
|
_022FA000:
|
|
ldrb r0, [r4, #0x62]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
ldrnesh r0, [r4, #0x66]
|
|
moveq r0, #0
|
|
strh r0, [r4, #0x68]
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, pc}
|
|
.align 2, 0
|
|
_022FA028: .word DUNGEON_PTR
|
|
arm_func_end ov29_022F9EA0
|
|
|
|
arm_func_start ov29_022FA02C
|
|
ov29_022FA02C: ; 0x022FA02C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x90
|
|
mov sl, r0
|
|
mov r3, r1
|
|
ldrsh r1, [sl, #2]
|
|
mov sb, r2
|
|
add r0, sp, #4
|
|
mov r2, r3
|
|
bl GetLearnableIqSkills
|
|
mov r6, r0
|
|
ldrsh r1, [sl, #2]
|
|
ldrsh r2, [sl, #0xe]
|
|
add r0, sp, #0x49
|
|
bl GetLearnableIqSkills
|
|
mov r7, r0
|
|
bl ov29_0234B034
|
|
mov r1, #0
|
|
mov r2, sl
|
|
mov r3, r1
|
|
str r1, [sp]
|
|
bl ov29_0230040C
|
|
mov r8, #1
|
|
add r5, sp, #4
|
|
mov r4, r8
|
|
mov fp, #0
|
|
_022FA090:
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mov r3, r1
|
|
b _022FA0B4
|
|
_022FA0A0:
|
|
ldrb r0, [r5, r3]
|
|
cmp r0, r8
|
|
moveq r1, r4
|
|
beq _022FA0BC
|
|
add r3, r3, #1
|
|
_022FA0B4:
|
|
cmp r3, r6
|
|
blt _022FA0A0
|
|
_022FA0BC:
|
|
mov r3, fp
|
|
b _022FA0DC
|
|
_022FA0C4:
|
|
add r0, r5, r3
|
|
ldrb r0, [r0, #0x45]
|
|
cmp r8, r0
|
|
moveq r2, #1
|
|
beq _022FA0E4
|
|
add r3, r3, #1
|
|
_022FA0DC:
|
|
cmp r3, r7
|
|
blt _022FA0C4
|
|
_022FA0E4:
|
|
cmp r1, r2
|
|
beq _022FA12C
|
|
add r0, sl, #0x90
|
|
and r1, r8, #0xff
|
|
bl EnableIqSkill
|
|
add r0, sl, #0x9c
|
|
and r1, r8, #0xff
|
|
bl EnableIqSkill
|
|
cmp sb, #0
|
|
bne _022FA12C
|
|
mov r0, #4
|
|
bl sub_02017C50
|
|
mov r0, #0
|
|
and r1, r8, #0xff
|
|
bl ov29_0234B084
|
|
ldr r1, _022FA140 ; =0x00000C1C
|
|
mov r0, #0
|
|
bl LogMessageByIdWithPopup
|
|
_022FA12C:
|
|
add r8, r8, #1
|
|
cmp r8, #0x45
|
|
blt _022FA090
|
|
add sp, sp, #0x90
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022FA140: .word 0x0000095B
|
|
#else
|
|
_022FA140: .word 0x00000C1C
|
|
#endif
|
|
arm_func_end ov29_022FA02C
|
|
|
|
arm_func_start BoostIQ
|
|
BoostIQ: ; 0x022FA144
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
ldr r5, [r7, #0xb4]
|
|
ldr r0, _022FA1CC ; =0x000003E7
|
|
ldrsh r4, [r5, #0xe]
|
|
mov r6, r2
|
|
add r1, r4, r1
|
|
strh r1, [r5, #0xe]
|
|
ldrsh r1, [r5, #0xe]
|
|
cmp r1, r0
|
|
strgth r0, [r5, #0xe]
|
|
cmp r6, #0
|
|
bne _022FA1B0
|
|
mov r0, #0
|
|
mov r1, r7
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldrsh r0, [r5, #0xe]
|
|
cmp r4, r0
|
|
bne _022FA1A4
|
|
ldr r1, _022FA1D0 ; =0x00000C27
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
b _022FA1B0
|
|
_022FA1A4:
|
|
ldr r1, _022FA1D4 ; =0x00000C26
|
|
mov r0, r7
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022FA1B0:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, r6
|
|
bl ov29_022FA02C
|
|
mov r0, r7
|
|
bl ov29_023021F0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022FA1CC: .word 0x000003E7
|
|
#ifdef JAPAN
|
|
_022FA1D0: .word 0x00000966
|
|
_022FA1D4: .word 0x00000965
|
|
#else
|
|
_022FA1D0: .word 0x00000C27
|
|
_022FA1D4: .word 0x00000C26
|
|
#endif
|
|
arm_func_end BoostIQ
|
|
|
|
arm_func_start ov29_022FA1D8
|
|
ov29_022FA1D8: ; 0x022FA1D8
|
|
#ifdef JAPAN
|
|
#define OV29_022FA1D8_OFFSET -4
|
|
#else
|
|
#define OV29_022FA1D8_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
ldr r4, [r6, #0xb4]
|
|
mov r5, r1
|
|
ldrb r1, [r4, #7]
|
|
cmp r1, #0
|
|
beq _022FA210
|
|
ldrsh r1, [r6, #4]
|
|
add r0, r4, #0x100
|
|
strh r1, [r0, #0x7e + OV29_022FA1D8_OFFSET]
|
|
ldrsh r1, [r6, #6]
|
|
add r1, r1, #1
|
|
strh r1, [r0, #0x80 + OV29_022FA1D8_OFFSET]
|
|
b _022FA27C
|
|
_022FA210:
|
|
ldrb r1, [r4, #0x16a + OV29_022FA1D8_OFFSET]
|
|
cmp r1, #0xff
|
|
beq _022FA274
|
|
ldrsh r1, [r4, #2]
|
|
add r0, r4, #0x4a
|
|
bl SetActionPassTurnOrWalk
|
|
ldrb r2, [r4, #0x16a + OV29_022FA1D8_OFFSET]
|
|
ldr r1, _022FA2E8 ; =DIRECTIONS_XY
|
|
add r0, r4, #0x100
|
|
strb r2, [r4, #0x4c]
|
|
mov r2, r2, lsl #2
|
|
ldrsh r3, [r1, r2]
|
|
ldrsh ip, [r6, #4]
|
|
ldr r2, _022FA2EC ; =ov29_0235171E
|
|
mov r1, #0xff
|
|
add r3, ip, r3
|
|
strh r3, [r0, #0x7e + OV29_022FA1D8_OFFSET]
|
|
ldrb r3, [r4, #0x4c]
|
|
ldrsh ip, [r6, #6]
|
|
mov r3, r3, lsl #2
|
|
ldrsh r2, [r2, r3]
|
|
add r2, ip, r2
|
|
strh r2, [r0, #0x80 + OV29_022FA1D8_OFFSET]
|
|
strb r1, [r4, #0x16a + OV29_022FA1D8_OFFSET]
|
|
b _022FA27C
|
|
_022FA274:
|
|
mov r1, r2
|
|
bl AiMovement
|
|
_022FA27C:
|
|
add r0, r4, #0x100
|
|
ldrsh r1, [r0, #0x7e + OV29_022FA1D8_OFFSET]
|
|
cmp r1, #0
|
|
ldreqsh r0, [r0, #0x80 + OV29_022FA1D8_OFFSET]
|
|
cmpeq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, #1
|
|
bl CheckVariousStatuses2
|
|
cmp r0, #0
|
|
beq _022FA2B8
|
|
mov r0, r6
|
|
bl CheckVariousStatuses
|
|
cmp r0, #0
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
_022FA2B8:
|
|
add r1, r4, #0x7e + OV29_022FA1D8_OFFSET
|
|
add r0, r6, #4
|
|
add r1, r1, #0x100
|
|
bl GetDirectionTowardsPosition
|
|
mov r1, r0
|
|
and r0, r1, #7
|
|
strb r0, [r4, #0x4c]
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
bl ov29_02304A48
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022FA2E8: .word DIRECTIONS_XY
|
|
_022FA2EC: .word ov29_0235171E
|
|
arm_func_end ov29_022FA1D8
|
|
|
|
arm_func_start ov29_022FA2F0
|
|
ov29_022FA2F0: ; 0x022FA2F0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr sb, _022FA35C ; =DUNGEON_PTR
|
|
mov r8, r0
|
|
mov r7, r1
|
|
mov r6, r2
|
|
mov r5, #0
|
|
_022FA308:
|
|
ldr r0, [sb]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r4, [r0, #0xad4]
|
|
#else
|
|
ldr r4, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r4
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FA34C
|
|
cmp r7, #0
|
|
ldrne r0, [r4, #0xb4]
|
|
ldrneb r0, [r0, #0xbc]
|
|
cmpne r0, #7
|
|
bne _022FA34C
|
|
mov r0, r4
|
|
mov r1, r8
|
|
mov r2, r6
|
|
bl ov29_022FA1D8
|
|
_022FA34C:
|
|
add r5, r5, #1
|
|
cmp r5, #0x14
|
|
blt _022FA308
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022FA35C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FA2F0
|
|
|
|
arm_func_start ov29_022FA360
|
|
ov29_022FA360: ; 0x022FA360
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
ldr r4, [r6, #0xb4]
|
|
and r1, r5, #7
|
|
mov r0, r6
|
|
strb r1, [r4, #0x4c]
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
ldrb r2, [r4, #0x4c]
|
|
mov r0, r6
|
|
bl ChangeMonsterAnimation
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end ov29_022FA360
|
|
|
|
arm_func_start ov29_022FA3A0
|
|
ov29_022FA3A0: ; 0x022FA3A0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r1, r4
|
|
add r0, r5, #4
|
|
bl GetDirectionTowardsPosition
|
|
and r1, r0, #0xff
|
|
mov r0, r5
|
|
bl ov29_022FA360
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_022FA3A0
|
|
|
|
arm_func_start ov29_022FA3D4
|
|
ov29_022FA3D4: ; 0x022FA3D4
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r1, _022FA414 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
ldr r0, [r1]
|
|
mov r6, #0
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x284
|
|
#else
|
|
add r0, r0, #0x328
|
|
#endif
|
|
add r5, r0, #0x12800
|
|
_022FA3F0:
|
|
ldr r0, [r5, r6, lsl #2]
|
|
mov r1, r4
|
|
bl ov29_022FA3A0
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
cmp r6, #4
|
|
blt _022FA3F0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022FA414: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FA3D4
|
|
|
|
arm_func_start ov29_022FA418
|
|
ov29_022FA418: ; 0x022FA418
|
|
stmdb sp!, {r3, lr}
|
|
bl IsFullFloorFixedRoom
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
bl ov29_022EF938
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022FA418
|
|
|
|
arm_func_start ShouldMonsterHeadToStairs
|
|
ShouldMonsterHeadToStairs: ; 0x022FA430
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov sl, r0
|
|
bl GetStairsRoom
|
|
mov r5, r0
|
|
ldrsh r0, [sl, #4]
|
|
ldrsh r1, [sl, #6]
|
|
bl GetTile
|
|
ldrb r0, [r0, #7]
|
|
cmp r5, r0
|
|
bne _022FA514
|
|
ldr r1, _022FA51C ; =DUNGEON_PTR
|
|
add r0, sl, #4
|
|
ldr r1, [r1]
|
|
#ifdef JAPAN
|
|
add r1, r1, #0xc40
|
|
add r1, r1, #0xc000
|
|
#else
|
|
add r1, r1, #0xe4
|
|
add r1, r1, #0xcc00
|
|
#endif
|
|
bl GetChebyshevDistance
|
|
ldr r7, _022FA520 ; =0x00002710
|
|
ldr r4, _022FA51C ; =DUNGEON_PTR
|
|
mov r6, r0
|
|
mov r8, #0
|
|
_022FA480:
|
|
ldr r0, [r4]
|
|
add r0, r0, r8, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr sb, [r0, #0xad4]
|
|
#else
|
|
ldr sb, [r0, #0xb78]
|
|
#endif
|
|
mov r0, sb
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FA4E8
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl ov29_023018AC
|
|
cmp r0, #1
|
|
bne _022FA4E8
|
|
ldrsh r0, [sb, #4]
|
|
ldrsh r1, [sb, #6]
|
|
bl GetTile
|
|
ldrb r0, [r0, #7]
|
|
cmp r5, r0
|
|
bne _022FA4E8
|
|
ldr r1, [r4]
|
|
add r0, sb, #4
|
|
#ifdef JAPAN
|
|
add r1, r1, #0xc40
|
|
add r1, r1, #0xc000
|
|
#else
|
|
add r1, r1, #0xe4
|
|
add r1, r1, #0xcc00
|
|
#endif
|
|
bl GetChebyshevDistance
|
|
cmp r0, r7
|
|
movlt r7, r0
|
|
_022FA4E8:
|
|
add r8, r8, #1
|
|
cmp r8, #0x14
|
|
blt _022FA480
|
|
ldr r0, _022FA520 ; =0x00002710
|
|
cmp r7, r0
|
|
beq _022FA50C
|
|
beq _022FA514
|
|
cmp r7, r6
|
|
ble _022FA514
|
|
_022FA50C:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
_022FA514:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_022FA51C: .word DUNGEON_PTR
|
|
_022FA520: .word 0x00002710
|
|
arm_func_end ShouldMonsterHeadToStairs
|
|
|
|
arm_func_start ov29_022FA524
|
|
ov29_022FA524: ; 0x022FA524
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r4, _022FA570 ; =DUNGEON_PTR
|
|
mov r5, #0
|
|
_022FA530:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r6, [r0, #0xad4]
|
|
#else
|
|
ldr r6, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r6
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FA560
|
|
ldr r1, [r6, #0xb4]
|
|
mov r0, r6
|
|
ldrb r1, [r1, #0x4c]
|
|
bl ov29_02304A48
|
|
_022FA560:
|
|
add r5, r5, #1
|
|
cmp r5, #0x14
|
|
blt _022FA530
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022FA570: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FA524
|
|
|
|
arm_func_start ov29_022FA574
|
|
ov29_022FA574: ; 0x022FA574
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, [r5, #0xb4]
|
|
mov r1, r4
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x120
|
|
#else
|
|
add r0, r0, #0x124
|
|
#endif
|
|
bl sub_0201405C
|
|
cmp r0, #0
|
|
bne _022FA5B4
|
|
ldr r1, _022FA5E4 ; =0x00000C1D
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_022FA5B4:
|
|
cmp r0, #1
|
|
bne _022FA5CC
|
|
ldr r1, _022FA5E8 ; =0x00000C1E
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_022FA5CC:
|
|
cmp r0, #2
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
ldr r1, _022FA5EC ; =0x00000C1F
|
|
mov r0, r5
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022FA5E4: .word 0x0000095C
|
|
_022FA5E8: .word 0x0000095D
|
|
_022FA5EC: .word 0x0000095E
|
|
#else
|
|
_022FA5E4: .word 0x00000C1D
|
|
_022FA5E8: .word 0x00000C1E
|
|
_022FA5EC: .word 0x00000C1F
|
|
#endif
|
|
arm_func_end ov29_022FA574
|
|
|
|
arm_func_start MewSpawnCheck
|
|
MewSpawnCheck: ; 0x022FA5F0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl CanMonsterSpawn
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
cmp r5, #0x97
|
|
bne _022FA63C
|
|
ldr r0, _022FA644 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x3000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xd95]
|
|
#else
|
|
ldrb r0, [r0, #0xe39]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
cmp r4, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_022FA63C:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022FA644: .word DUNGEON_PTR
|
|
arm_func_end MewSpawnCheck
|
|
|
|
arm_func_start ov29_022FA648
|
|
ov29_022FA648: ; 0x022FA648
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r7, #0
|
|
mov r6, #1
|
|
mov fp, r6
|
|
mov r5, r7
|
|
_022FA65C:
|
|
ldr r0, _022FA74C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r8, [r0, #0xa84]
|
|
#else
|
|
ldr r8, [r0, #0xb28]
|
|
#endif
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FA730
|
|
ldr sl, [r8, #0xb4]
|
|
ldrb r1, [sl, #7]
|
|
ldrsh r0, [sl, #0xc]
|
|
cmp r1, #0
|
|
beq _022FA6C4
|
|
#ifdef JAPAN
|
|
strb r6, [sl, #0x161]
|
|
#else
|
|
strb r6, [sl, #0x165]
|
|
#endif
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
bl ov29_022E0A04
|
|
cmp r0, #1
|
|
mov r0, r8
|
|
bne _022FA6B8
|
|
bl ov29_022E68D8
|
|
b _022FA6BC
|
|
_022FA6B8:
|
|
bl ov29_022E68BC
|
|
_022FA6BC:
|
|
strb r5, [r8, #0x20]
|
|
b _022FA730
|
|
_022FA6C4:
|
|
cmp r0, #0
|
|
blt _022FA730
|
|
mov sb, #0
|
|
bl GetActiveTeamMember
|
|
mov r4, r0
|
|
bl ov29_022E0A04
|
|
cmp r0, #0
|
|
movne sb, #1
|
|
bne _022FA70C
|
|
ldrsh r0, [r4, #8]
|
|
bl CheckTeamMemberIdx
|
|
cmp r0, #0
|
|
movne sb, #1
|
|
bne _022FA70C
|
|
ldrsh r0, [r4, #8]
|
|
bl IsMonsterIdInNormalRange
|
|
cmp r0, #0
|
|
movne sb, #1
|
|
_022FA70C:
|
|
cmp sb, #0
|
|
beq _022FA730
|
|
#ifdef JAPAN
|
|
strb fp, [sl, #0x161]
|
|
#else
|
|
strb fp, [sl, #0x165]
|
|
#endif
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
mov r0, r8
|
|
bl ov29_022E68BC
|
|
mov r0, #0
|
|
strb r0, [r8, #0x20]
|
|
_022FA730:
|
|
add r7, r7, #1
|
|
cmp r7, #4
|
|
blt _022FA65C
|
|
mov r0, #0x1e
|
|
mov r1, #0x4a
|
|
bl ov29_022EA370
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022FA74C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FA648
|
|
|
|
arm_func_start ov29_022FA750
|
|
ov29_022FA750: ; 0x022FA750
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov r6, #0
|
|
ldr r4, _022FA7D8 ; =DUNGEON_PTR
|
|
mov r5, r6
|
|
_022FA760:
|
|
ldr r0, [r4]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r8, [r0, #0xad4]
|
|
#else
|
|
ldr r8, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FA7C8
|
|
ldr sb, [r8, #0xb4]
|
|
mov r7, r5
|
|
_022FA788:
|
|
ldr r0, [r4]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr sl, [r0, #0xad4]
|
|
#else
|
|
ldr sl, [r0, #0xb78]
|
|
#endif
|
|
mov r0, sl
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
cmpne r8, sl
|
|
beq _022FA7BC
|
|
ldrh r1, [sb, #0x80]
|
|
ldrh r0, [sl, #0x26]
|
|
cmp r1, r0
|
|
streq sl, [sb, #0x84]
|
|
_022FA7BC:
|
|
add r7, r7, #1
|
|
cmp r7, #0x14
|
|
blt _022FA788
|
|
_022FA7C8:
|
|
add r6, r6, #1
|
|
cmp r6, #0x14
|
|
blt _022FA760
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_022FA7D8: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FA750
|
|
|
|
arm_func_start TryEndStatusWithAbility
|
|
TryEndStatusWithAbility: ; 0x022FA7DC
|
|
stmdb sp!, {r3, r4, r5, r6, lr}
|
|
sub sp, sp, #4
|
|
mov r5, r1
|
|
mov r2, #0x16
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
mov r6, r0
|
|
ldr r4, [r5, #0xb4]
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA81C
|
|
ldrb r0, [r4, #0xbf]
|
|
cmp r0, #4
|
|
bne _022FA81C
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndBurnClassStatus
|
|
_022FA81C:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x40
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA850
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #2
|
|
bne _022FA850
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndCringeClassStatus
|
|
_022FA850:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x42
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA884
|
|
ldrb r0, [r4, #0xbf]
|
|
cmp r0, #1
|
|
bne _022FA884
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndBurnClassStatus
|
|
_022FA884:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x29
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA8B8
|
|
ldrb r0, [r4, #0xd0]
|
|
cmp r0, #7
|
|
bne _022FA8B8
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndCringeClassStatus
|
|
_022FA8B8:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x36
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
bne _022FA8F0
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x49
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA924
|
|
_022FA8F0:
|
|
mov r0, r5
|
|
bl IsMonsterSleeping
|
|
cmp r0, #0
|
|
bne _022FA90C
|
|
ldrb r0, [r4, #0xbd]
|
|
cmp r0, #4
|
|
bne _022FA924
|
|
_022FA90C:
|
|
mov r3, #1
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0
|
|
str r3, [sp]
|
|
bl EndSleepClassStatus
|
|
_022FA924:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x41
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA95C
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #1
|
|
bne _022FA95C
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #1
|
|
bl EndFrozenClassStatus
|
|
_022FA95C:
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #0x45
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__022F96CC
|
|
cmp r0, #0
|
|
beq _022FA998
|
|
ldrb r0, [r4, #0xbf]
|
|
add r0, r0, #0xfe
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _022FA998
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndBurnClassStatus
|
|
_022FA998:
|
|
mov r0, r5
|
|
mov r1, #0x25
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _022FA9CC
|
|
mov r0, #0
|
|
strb r0, [r4, #0xff]
|
|
ldrb r0, [r4, #0xd5]
|
|
cmp r0, #0xc
|
|
bne _022FA9CC
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl EndReflectClassStatus
|
|
_022FA9CC:
|
|
mov r0, r5
|
|
mov r1, #0x2b
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _022FA9FC
|
|
ldrb r0, [r4, #0xc4]
|
|
cmp r0, #2
|
|
bne _022FA9FC
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, #1
|
|
bl EndFrozenClassStatus
|
|
_022FA9FC:
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, pc}
|
|
arm_func_end TryEndStatusWithAbility
|
|
|
|
arm_func_start ov29_022FAA04
|
|
ov29_022FAA04: ; 0x022FAA04
|
|
#ifdef JAPAN
|
|
#define OV29_022FAA04_OFFSET -4
|
|
#else
|
|
#define OV29_022FAA04_OFFSET 0
|
|
#endif
|
|
ldr ip, [r0, #0xb4]
|
|
mov r3, #0
|
|
_022FAA0C:
|
|
add r2, ip, r3, lsl #3
|
|
ldrb r0, [r2, #0x124 + OV29_022FAA04_OFFSET]
|
|
add r3, r3, #1
|
|
cmp r3, #4
|
|
bic r0, r0, #0x10
|
|
strb r0, [r2, #0x124 + OV29_022FAA04_OFFSET]
|
|
blt _022FAA0C
|
|
ldrb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
|
|
bic r0, r0, #0x10
|
|
strb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
|
|
ldrh r0, [r1, #4]
|
|
cmp r0, #0x160
|
|
ldreqb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
|
|
orreq r0, r0, #0x10
|
|
streqb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
|
|
ldrneb r0, [r1]
|
|
orrne r0, r0, #0x10
|
|
strneb r0, [r1]
|
|
bx lr
|
|
arm_func_end ov29_022FAA04
|
|
|
|
arm_func_start ov29_022FAA58
|
|
ov29_022FAA58: ; 0x022FAA58
|
|
#ifdef JAPAN
|
|
#define OV29_022FAA58_OFFSET -4
|
|
#else
|
|
#define OV29_022FAA58_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x14
|
|
ldr r1, _022FAC90 ; =DUNGEON_PTR
|
|
mov sl, r0
|
|
ldr r0, [r1]
|
|
mov r6, #0
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x284
|
|
#else
|
|
add r0, r0, #0x328
|
|
#endif
|
|
add r4, r0, #0x12800
|
|
_022FAA78:
|
|
ldr r5, [r4, r6, lsl #2]
|
|
mov r0, r5
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FAB98
|
|
mov r0, r5
|
|
mov r1, #0x37
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _022FAB98
|
|
ldr sb, [r5, #0xb4]
|
|
mov r8, #0
|
|
mov r7, r8
|
|
add fp, sb, #0x124 + OV29_022FAA58_OFFSET
|
|
_022FAAB0:
|
|
ldrb r1, [fp, r7, lsl #3]
|
|
add r0, fp, r7, lsl #3
|
|
str r0, [sp]
|
|
tst r1, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022FAB00
|
|
ldr r0, [sp]
|
|
bl GetMaxPpWrapper
|
|
ldr r1, [sp]
|
|
ldrb r1, [r1, #6]
|
|
cmp r1, r0
|
|
beq _022FAB00
|
|
add r0, r8, #1
|
|
mov r1, r0, lsl #0x10
|
|
mov r2, r8, lsl #1
|
|
add r0, sp, #4
|
|
strh r7, [r0, r2]
|
|
mov r8, r1, asr #0x10
|
|
_022FAB00:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
cmp r7, #4
|
|
blt _022FAAB0
|
|
cmp r8, #0
|
|
ble _022FAB4C
|
|
mov r0, r8
|
|
bl DungeonRandInt
|
|
mov r0, r0, lsl #0x10
|
|
add r1, sp, #4
|
|
mov r0, r0, asr #0xf
|
|
ldrsh r0, [r1, r0]
|
|
add r1, sb, #0x124 + OV29_022FAA58_OFFSET
|
|
add r1, r1, r0, lsl #3
|
|
ldrb r0, [r1, #6]
|
|
add r0, r0, #1
|
|
strb r0, [r1, #6]
|
|
b _022FAB54
|
|
_022FAB4C:
|
|
mov r0, #0
|
|
b _022FAB58
|
|
_022FAB54:
|
|
mov r0, #1
|
|
_022FAB58:
|
|
cmp r0, #0
|
|
beq _022FAB98
|
|
mov r0, r5
|
|
bl ShowPpRestoreEffect
|
|
cmp sl, #0
|
|
bne _022FAB98
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, #1
|
|
mov r1, #0x37
|
|
bl ov29_0234B084
|
|
#ifdef JAPAN
|
|
ldr r1, _022FC21C ; =0x0000095F
|
|
mov r0, r5
|
|
#else
|
|
mov r0, r5
|
|
mov r1, #0xc20
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022FAB98:
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
cmp r6, #4
|
|
blt _022FAA78
|
|
mov r8, #0
|
|
mov fp, r8
|
|
_022FABB4:
|
|
ldr sb, [r4, r8, lsl #2]
|
|
mov r0, sb
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FAC74
|
|
ldr r6, [sb, #0xb4]
|
|
mov r7, fp
|
|
add r5, r6, #0x124 + OV29_022FAA58_OFFSET
|
|
b _022FABFC
|
|
_022FABD8:
|
|
add r0, r5, r7, lsl #3
|
|
bl GetMaxPp
|
|
add r1, r6, r7, lsl #3
|
|
ldrb r1, [r1, #0x12a + OV29_022FAA58_OFFSET]
|
|
cmp r1, r0
|
|
blt _022FAC04
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
_022FABFC:
|
|
cmp r7, #4
|
|
blt _022FABD8
|
|
_022FAC04:
|
|
cmp r7, #4
|
|
beq _022FAC74
|
|
mov r0, sb
|
|
mov r1, #0x47
|
|
bl ExclusiveItemEffectIsActive__022FAC98
|
|
cmp r0, #0
|
|
beq _022FAC74
|
|
mov r0, #0
|
|
mov r1, sb
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r0, sb
|
|
mov r1, #0x47
|
|
add r2, sp, #0xc
|
|
bl GetExclusiveItemWithEffectFromBag
|
|
mov r0, #1
|
|
add r1, sp, #0xc
|
|
bl ov29_02344B44
|
|
cmp sl, #0
|
|
bne _022FAC60
|
|
ldr r1, _022FAC94 ; =0x00000C23
|
|
mov r0, sb
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022FAC60:
|
|
mov r0, sb
|
|
mov r1, sb
|
|
mov r2, #1
|
|
mov r3, sl
|
|
bl RestoreAllMovePP
|
|
_022FAC74:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022FABB4
|
|
add sp, sp, #0x14
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022FAC90: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_022FC21C: .word 0x0000095F
|
|
_022FAC94: .word 0x00000962
|
|
#else
|
|
_022FAC94: .word 0x00000C23
|
|
#endif
|
|
arm_func_end ov29_022FAA58
|
|
|
|
arm_func_start ExclusiveItemEffectIsActive__022FAC98
|
|
ExclusiveItemEffectIsActive__022FAC98: ; 0x022FAC98
|
|
stmdb sp!, {r3, lr}
|
|
ldr r2, [r0, #0xb4]
|
|
ldrb r0, [r2, #6]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
#ifdef JAPAN
|
|
add r0, r2, #0x224
|
|
#else
|
|
add r0, r2, #0x228
|
|
#endif
|
|
bl ExclusiveItemEffectFlagTest
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ExclusiveItemEffectIsActive__022FAC98
|
|
|
|
arm_func_start ov29_022FACBC
|
|
ov29_022FACBC: ; 0x022FACBC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #4
|
|
ldr r1, _022FAD44 ; =DUNGEON_PTR
|
|
mov sb, r0
|
|
ldr r0, [r1]
|
|
mov r8, #0
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x284
|
|
#else
|
|
add r0, r0, #0x328
|
|
#endif
|
|
ldr r5, _022FAD48 ; =0x000003E7
|
|
add r7, r0, #0x12800
|
|
mov r4, r8
|
|
mov r6, #0x48
|
|
_022FACE8:
|
|
ldr sl, [r7, r8, lsl #2]
|
|
mov r0, sl
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FAD28
|
|
mov r0, sl
|
|
mov r1, r6
|
|
bl ExclusiveItemEffectIsActive__022FAC98
|
|
cmp r0, #0
|
|
beq _022FAD28
|
|
mov r0, sl
|
|
mov r1, sl
|
|
mov r2, r5
|
|
mov r3, r4
|
|
str sb, [sp]
|
|
bl TryIncreaseHp
|
|
_022FAD28:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022FACE8
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_022FAD44: .word DUNGEON_PTR
|
|
_022FAD48: .word 0x000003E7
|
|
arm_func_end ov29_022FACBC
|
|
|
|
arm_func_start ov29_022FAD4C
|
|
ov29_022FAD4C: ; 0x022FAD4C
|
|
#ifdef JAPAN
|
|
#define OV29_022FAD4C_OFFSET -0xA4
|
|
#else
|
|
#define OV29_022FAD4C_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r1, _022FAF00 ; =DUNGEON_PTR
|
|
mov r8, #0
|
|
ldr r1, [r1]
|
|
sub r3, r8, #1
|
|
add r2, r1, #0xcc00
|
|
ldrsh r4, [r2, #0xe4 + OV29_022FAD4C_OFFSET]
|
|
add r1, r1, #0x328 + OV29_022FAD4C_OFFSET
|
|
add r5, r1, #0x12800
|
|
cmp r4, r3
|
|
ldreqsh r1, [r2, #0xe6 + OV29_022FAD4C_OFFSET]
|
|
mov sb, r0
|
|
moveq r0, r3
|
|
cmpeq r1, r0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r7, #0
|
|
mov r4, #0x1a
|
|
b _022FADE4
|
|
_022FAD94:
|
|
ldr r6, [r5, r7, lsl #2]
|
|
mov r0, r6
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FADD8
|
|
ldr r0, [r6, #0xb4]
|
|
ldrb r0, [r0, #0x48]
|
|
cmp r0, #0xd9
|
|
blo _022FADC0
|
|
cmp r0, #0xe4
|
|
blo _022FADD8
|
|
_022FADC0:
|
|
mov r0, r6
|
|
mov r1, r4
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r8, #1
|
|
bne _022FADEC
|
|
_022FADD8:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
_022FADE4:
|
|
cmp r7, #4
|
|
blt _022FAD94
|
|
_022FADEC:
|
|
cmp r8, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
bl GetFloorType
|
|
cmp r0, #0
|
|
bne _022FAEEC
|
|
cmp sb, #0
|
|
bne _022FAE14
|
|
#ifdef JAPAN
|
|
mov r0, r6
|
|
mov r1, #0x960
|
|
#else
|
|
ldr r1, _022FAF04 ; =0x00000C21
|
|
mov r0, r6
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_022FAE14:
|
|
bl GetLeader
|
|
mov r5, r0
|
|
add r0, sp, #0
|
|
add r1, sp, #2
|
|
mov r4, #0
|
|
bl GetStairsSpawnPosition
|
|
ldrsh r1, [sp]
|
|
ldrsh r3, [r5, #4]
|
|
ldrsh r2, [sp, #2]
|
|
cmp r3, r1
|
|
ldreqsh r0, [r5, #6]
|
|
cmpeq r0, r2
|
|
cmp r3, r1
|
|
bne _022FAE58
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r2
|
|
movlt r4, #0
|
|
_022FAE58:
|
|
cmp r3, r1
|
|
ldrltsh r0, [r5, #6]
|
|
cmplt r0, r2
|
|
movlt r4, #1
|
|
cmp r3, r1
|
|
bge _022FAE7C
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r2
|
|
moveq r4, #2
|
|
_022FAE7C:
|
|
cmp r3, r1
|
|
bge _022FAE90
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r2
|
|
movgt r4, #3
|
|
_022FAE90:
|
|
cmp r3, r1
|
|
bne _022FAEA4
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r2
|
|
movgt r4, #4
|
|
_022FAEA4:
|
|
cmp r3, r1
|
|
ldrgtsh r0, [r5, #6]
|
|
cmpgt r0, r2
|
|
movgt r4, #5
|
|
cmp r3, r1
|
|
ble _022FAEC8
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r2
|
|
moveq r4, #6
|
|
_022FAEC8:
|
|
cmp r3, r1
|
|
ble _022FAEDC
|
|
ldrsh r0, [r5, #6]
|
|
cmp r0, r2
|
|
movlt r4, #7
|
|
_022FAEDC:
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl ov29_022E6928
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_022FAEEC:
|
|
bl GetFloorType
|
|
cmp r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
bl GetFloorType
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022FAF00: .word DUNGEON_PTR
|
|
#ifndef JAPAN
|
|
_022FAF04: .word 0x00000C21
|
|
#endif
|
|
arm_func_end ov29_022FAD4C
|
|
|
|
arm_func_start ov29_022FAF08
|
|
ov29_022FAF08: ; 0x022FAF08
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r1, _022FAFC8 ; =DUNGEON_PTR
|
|
mov r6, r0
|
|
ldr r0, [r1]
|
|
mov r5, #0
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x284
|
|
#else
|
|
add r0, r0, #0x328
|
|
#endif
|
|
add r8, r0, #0x12800
|
|
bl IsCurrentFixedRoomBossFight
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov sb, r5
|
|
mov r7, #0x36
|
|
b _022FAF74
|
|
_022FAF3C:
|
|
ldr r4, [r8, sb, lsl #2]
|
|
mov r0, r4
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FAF68
|
|
mov r0, r4
|
|
mov r1, r7
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r5, #1
|
|
bne _022FAF7C
|
|
_022FAF68:
|
|
add r0, sb, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov sb, r0, asr #0x10
|
|
_022FAF74:
|
|
cmp sb, #4
|
|
blt _022FAF3C
|
|
_022FAF7C:
|
|
cmp r5, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r1, _022FAFC8 ; =DUNGEON_PTR
|
|
ldr r0, _022FAFCC ; =0x00012AF8
|
|
ldr r1, [r1]
|
|
ldrsh r1, [r1, r0]
|
|
cmp r1, #0
|
|
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
cmp r6, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, #0
|
|
bl ov29_0234B09C
|
|
ldr r1, _022FAFD0 ; =0x00000C22
|
|
mov r0, r4
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
mov r0, #0x78
|
|
mov r1, #0xa
|
|
bl ov29_022EA370
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022FAFC8: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_022FAFCC: .word 0x00012A54
|
|
_022FAFD0: .word 0x00000961
|
|
#else
|
|
_022FAFCC: .word 0x00012AF8
|
|
_022FAFD0: .word 0x00000C22
|
|
#endif
|
|
arm_func_end ov29_022FAF08
|
|
|
|
arm_func_start ov29_022FAFD4
|
|
ov29_022FAFD4: ; 0x022FAFD4
|
|
stmdb sp!, {r3, lr}
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl GetTreatmentBetweenMonsters
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022FAFD4
|
|
|
|
arm_func_start GetTeamMemberWithIqSkill
|
|
GetTeamMemberWithIqSkill: ; 0x022FAFF8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r1, _022FB060 ; =DUNGEON_PTR
|
|
mov r4, #0
|
|
ldr r1, [r1]
|
|
mov r5, r0
|
|
#ifdef JAPAN
|
|
add r0, r1, #0x284
|
|
#else
|
|
add r0, r1, #0x328
|
|
#endif
|
|
mov r7, r4
|
|
add r6, r0, #0x12800
|
|
b _022FB050
|
|
_022FB01C:
|
|
ldr r0, [r6, r7, lsl #2]
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FB044
|
|
ldr r0, [r6, r7, lsl #2]
|
|
mov r1, r5
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrne r4, [r6, r7, lsl #2]
|
|
bne _022FB058
|
|
_022FB044:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
_022FB050:
|
|
cmp r7, #4
|
|
blt _022FB01C
|
|
_022FB058:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022FB060: .word DUNGEON_PTR
|
|
arm_func_end GetTeamMemberWithIqSkill
|
|
|
|
arm_func_start TeamMemberHasEnabledIqSkill
|
|
TeamMemberHasEnabledIqSkill: ; 0x022FB064
|
|
stmdb sp!, {r3, lr}
|
|
bl GetTeamMemberWithIqSkill
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end TeamMemberHasEnabledIqSkill
|
|
|
|
arm_func_start TeamLeaderIqSkillIsEnabled
|
|
TeamLeaderIqSkillIsEnabled: ; 0x022FB080
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl GetLeader
|
|
mov r1, r4
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end TeamLeaderIqSkillIsEnabled
|
|
|
|
arm_func_start CountMovesOutOfPp
|
|
CountMovesOutOfPp: ; 0x022FB0A8
|
|
stmdb sp!, {r3, lr}
|
|
ldr ip, [r0, #0xb4]
|
|
mov r0, #0
|
|
mov lr, r0
|
|
mov r2, r0
|
|
mov r3, #1
|
|
_022FB0C0:
|
|
add r1, ip, lr, lsl #3
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x120]
|
|
#else
|
|
ldrb r1, [r1, #0x124]
|
|
#endif
|
|
tst r1, #1
|
|
movne r1, r3
|
|
moveq r1, r2
|
|
tst r1, #0xff
|
|
beq _022FB0F4
|
|
add r1, ip, lr, lsl #3
|
|
#ifdef JAPAN
|
|
ldrb r1, [r1, #0x126]
|
|
#else
|
|
ldrb r1, [r1, #0x12a]
|
|
#endif
|
|
cmp r1, #0
|
|
addeq r0, r0, #1
|
|
moveq r0, r0, lsl #0x10
|
|
moveq r0, r0, asr #0x10
|
|
_022FB0F4:
|
|
add r1, lr, #1
|
|
mov r1, r1, lsl #0x10
|
|
mov lr, r1, asr #0x10
|
|
cmp lr, #4
|
|
blt _022FB0C0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end CountMovesOutOfPp
|
|
|
|
arm_func_start HasSuperEffectiveMoveAgainstUser
|
|
HasSuperEffectiveMoveAgainstUser: ; 0x022FB10C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sb, r1
|
|
ldr r6, [sb, #0xb4]
|
|
mov r7, #0
|
|
mov sl, r0
|
|
mov r8, r2
|
|
#ifdef JAPAN
|
|
add r4, r6, #0x120
|
|
#else
|
|
add r4, r6, #0x124
|
|
#endif
|
|
mov fp, r7
|
|
mov r5, #1
|
|
b _022FB198
|
|
_022FB134:
|
|
add r0, r6, r7, lsl #3
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x120]
|
|
#else
|
|
ldrb r0, [r0, #0x124]
|
|
#endif
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, fp
|
|
tst r0, #0xff
|
|
beq _022FB18C
|
|
cmp r8, #0
|
|
beq _022FB168
|
|
add r0, r4, r7, lsl #3
|
|
bl HasMaxGinsengBoost99
|
|
cmp r0, #0
|
|
beq _022FB18C
|
|
_022FB168:
|
|
add r0, r4, r7, lsl #3
|
|
bl GetMoveType
|
|
mov r2, r0
|
|
mov r0, sb
|
|
mov r1, sl
|
|
bl GetTypeMatchupBothTypes
|
|
cmp r0, #3
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_022FB18C:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
_022FB198:
|
|
cmp r7, #4
|
|
blt _022FB134
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end HasSuperEffectiveMoveAgainstUser
|
|
|
|
arm_func_start ov29_022FB1A8
|
|
ov29_022FB1A8: ; 0x022FB1A8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, #0
|
|
ldr r6, [r0, #0xb4]
|
|
mov r4, r7
|
|
mov r5, #1
|
|
b _022FB204
|
|
_022FB1C0:
|
|
add r0, r6, r7, lsl #3
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x120]
|
|
#else
|
|
ldrb r0, [r0, #0x124]
|
|
#endif
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, r4
|
|
tst r0, #0xff
|
|
beq _022FB1F8
|
|
add r0, r6, r7, lsl #3
|
|
add r0, r0, #0x100
|
|
#ifdef JAPAN
|
|
ldrh r0, [r0, #0x24]
|
|
#else
|
|
ldrh r0, [r0, #0x28]
|
|
#endif
|
|
bl IsOneHitKoMove
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_022FB1F8:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
_022FB204:
|
|
cmp r7, #4
|
|
blt _022FB1C0
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ov29_022FB1A8
|
|
|
|
arm_func_start TryEatItem
|
|
TryEatItem: ; 0x022FB214
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x74
|
|
mov sl, r0
|
|
mov sb, r1
|
|
mov r5, #0
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FB244
|
|
mov r0, sb
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
bne _022FB24C
|
|
_022FB244:
|
|
mov r0, #0
|
|
b _022FB508
|
|
_022FB24C:
|
|
ldr r4, [sb, #0xb4]
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
ldrsh r0, [r4, #0x66]
|
|
beq _022FB31C
|
|
cmp r0, #0
|
|
beq _022FB504
|
|
ldrsh r0, [r4, #0x66]
|
|
bl ShouldTryEatItem
|
|
cmp r0, #0
|
|
beq _022FB504
|
|
mov r0, sl
|
|
add r1, r4, #0x62
|
|
bl CanMonsterUseItem
|
|
cmp r0, #0
|
|
beq _022FB504
|
|
mov r0, r5
|
|
mov r1, sl
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, sb
|
|
mov r0, #1
|
|
mov r2, r5
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, r4, #0x62
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
ldr r2, _022FB510 ; =0x00000C24
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldrh r2, [r4, #0x62]
|
|
mov r0, sl
|
|
add r1, r4, #0x62
|
|
strh r2, [sp, #8]
|
|
ldrh r2, [r4, #0x64]
|
|
strh r2, [sp, #0xa]
|
|
ldrh r2, [r4, #0x66]
|
|
strh r2, [sp, #0xc]
|
|
bl ov29_0230F9A4
|
|
add r0, r4, #0x62
|
|
bl ItemZInit
|
|
mov r0, r5
|
|
str sl, [sp]
|
|
add r1, sp, #8
|
|
str r1, [sp, #4]
|
|
mov r3, sb
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl ApplyItemEffect
|
|
mov r5, #1
|
|
b _022FB504
|
|
_022FB31C:
|
|
bl ShouldTryEatItem
|
|
cmp r0, #0
|
|
beq _022FB3D4
|
|
mov r0, sl
|
|
add r1, r4, #0x62
|
|
bl CanMonsterUseItem
|
|
cmp r0, #0
|
|
beq _022FB504
|
|
mov r0, r5
|
|
mov r1, sl
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, sb
|
|
mov r0, #1
|
|
mov r2, r5
|
|
bl SubstitutePlaceholderStringTags
|
|
add r1, r4, #0x62
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
ldr r2, _022FB510 ; =0x00000C24
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldrh r2, [r4, #0x62]
|
|
mov r0, sl
|
|
add r1, r4, #0x62
|
|
strh r2, [sp, #8]
|
|
ldrh r2, [r4, #0x64]
|
|
strh r2, [sp, #0xa]
|
|
ldrh r2, [r4, #0x66]
|
|
strh r2, [sp, #0xc]
|
|
bl ov29_0230F9A4
|
|
add r0, r4, #0x62
|
|
bl RemoveEquivItem
|
|
add r0, r4, #0x62
|
|
bl ItemZInit
|
|
mov r0, r5
|
|
str sl, [sp]
|
|
add r1, sp, #8
|
|
str r1, [sp, #4]
|
|
mov r3, sb
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl ApplyItemEffect
|
|
mov r5, #1
|
|
b _022FB504
|
|
_022FB3D4:
|
|
bl GetNbItemsInBag
|
|
mov r7, r0
|
|
mov r6, r5
|
|
add r4, sp, #0xe
|
|
b _022FB3F8
|
|
_022FB3E8:
|
|
mov r0, r7
|
|
bl RandInt
|
|
strb r0, [r4, r6]
|
|
add r6, r6, #1
|
|
_022FB3F8:
|
|
cmp r6, r7
|
|
blt _022FB3E8
|
|
add r0, sp, #0xe
|
|
mov r1, #0
|
|
add r0, r0, r7
|
|
b _022FB418
|
|
_022FB410:
|
|
strb r1, [r0, r1]
|
|
add r1, r1, #1
|
|
_022FB418:
|
|
cmp r1, r7
|
|
blt _022FB410
|
|
mov r8, #0
|
|
add r4, sp, #0xe
|
|
ldr fp, _022FB514 ; =BAG_ITEMS_PTR_MIRROR
|
|
b _022FB4FC
|
|
_022FB430:
|
|
ldrb r1, [r4, r8]
|
|
ldr r3, [fp]
|
|
mov r0, #6
|
|
smulbb r2, r1, r0
|
|
ldr r1, [r3, #0x384]
|
|
ldrb r0, [r1, r2]
|
|
add r6, r1, r2
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
beq _022FB4F8
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
bne _022FB4F8
|
|
ldrsh r0, [r6, #4]
|
|
bl ShouldTryEatItem
|
|
cmp r0, #0
|
|
beq _022FB4F8
|
|
mov r0, sl
|
|
mov r1, r6
|
|
bl CanMonsterUseItem
|
|
cmp r0, #0
|
|
beq _022FB504
|
|
mov r0, #0
|
|
mov r1, sl
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, sb
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r6
|
|
mov r0, #1
|
|
bl ov29_02344B44
|
|
mov r0, sl
|
|
mov r1, sb
|
|
ldr r2, _022FB518 ; =0x00000C25
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
str sl, [sp]
|
|
mov r3, sb
|
|
str r6, [sp, #4]
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl ApplyItemEffect
|
|
mov r0, r6
|
|
bl RemoveEquivItem
|
|
mov r5, #1
|
|
b _022FB504
|
|
_022FB4F8:
|
|
add r8, r8, #1
|
|
_022FB4FC:
|
|
cmp r8, r7, lsl #1
|
|
blt _022FB430
|
|
_022FB504:
|
|
mov r0, r5
|
|
_022FB508:
|
|
add sp, sp, #0x74
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022FB510: .word 0x00000963
|
|
_022FB514: .word BAG_ITEMS_PTR_MIRROR
|
|
_022FB518: .word 0x00000964
|
|
#else
|
|
_022FB510: .word 0x00000C24
|
|
_022FB514: .word BAG_ITEMS_PTR_MIRROR
|
|
_022FB518: .word 0x00000C25
|
|
#endif
|
|
arm_func_end TryEatItem
|
|
|
|
arm_func_start ov29_022FB51C
|
|
ov29_022FB51C: ; 0x022FB51C
|
|
stmdb sp!, {r3, lr}
|
|
bl GetScenarioBalance
|
|
cmp r0, #2
|
|
movhs r0, #1
|
|
movlo r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022FB51C
|
|
|
|
#ifndef JAPAN
|
|
arm_func_start SetDecoyAiTracker
|
|
SetDecoyAiTracker: ; 0x022FB538
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r6, r0
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r5, [r6, #0xb4]
|
|
mov r4, #0
|
|
ldr r7, _022FB5E8 ; =DUNGEON_PTR
|
|
strb r4, [r5, #0x10c]
|
|
ldr r0, [r7]
|
|
add r0, r0, #0x3000
|
|
ldrb r0, [r0, #0xe38]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
b _022FB5DC
|
|
_022FB574:
|
|
ldr r0, [r7]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r8, [r0, #0xb78]
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
cmpne r8, r6
|
|
beq _022FB5D8
|
|
ldr r0, [r8, #0xb4]
|
|
ldrb r0, [r0, #0xd8]
|
|
cmp r0, #2
|
|
bne _022FB5D8
|
|
mov r0, r6
|
|
mov r1, r8
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
beq _022FB5D8
|
|
ldr r0, [r8, #0xb4]
|
|
ldrb r0, [r0, #0xd9]
|
|
cmp r0, #0
|
|
movne r0, #2
|
|
moveq r0, #1
|
|
strb r0, [r5, #0x10c]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022FB5D8:
|
|
add r4, r4, #1
|
|
_022FB5DC:
|
|
cmp r4, #0x14
|
|
blt _022FB574
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022FB5E8: .word DUNGEON_PTR
|
|
arm_func_end SetDecoyAiTracker
|
|
#endif
|
|
|
|
arm_func_start CheckSpawnThreshold
|
|
CheckSpawnThreshold: ; 0x022FB5EC
|
|
stmdb sp!, {r4, lr}
|
|
bl GetSpawnThreshold
|
|
mov r4, r0
|
|
bl GetScenarioBalanceVeneer
|
|
cmp r4, r0
|
|
movls r0, #1
|
|
movhi r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end CheckSpawnThreshold
|
|
|
|
arm_func_start HasLowHealth
|
|
HasLowHealth: ; 0x022FB610
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r0, [r4]
|
|
cmp r0, #1
|
|
movne r0, #0
|
|
ldmneia sp!, {r4, pc}
|
|
ldr r3, [r4, #0xb4]
|
|
ldr r0, _022FB674 ; =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
|
|
movlt r0, #1
|
|
movge r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022FB674: .word 0x000003E7
|
|
arm_func_end HasLowHealth
|
|
|
|
arm_func_start AreEntitiesAdjacent
|
|
AreEntitiesAdjacent: ; 0x022FB678
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, #0
|
|
ldr r4, _022FB6E0 ; =DIRECTIONS_XY
|
|
b _022FB6D0
|
|
_022FB690:
|
|
mov r1, r5, lsl #2
|
|
add r0, r4, r5, lsl #2
|
|
ldrsh r3, [r4, r1]
|
|
ldrsh ip, [r7, #4]
|
|
ldrsh r1, [r0, #2]
|
|
ldrsh r2, [r7, #6]
|
|
add r0, ip, r3
|
|
add r1, r2, r1
|
|
bl GetTile
|
|
ldr r0, [r0, #0xc]
|
|
cmp r0, r6
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
_022FB6D0:
|
|
cmp r5, #8
|
|
blt _022FB690
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022FB6E0: .word DIRECTIONS_XY
|
|
arm_func_end AreEntitiesAdjacent
|
|
|
|
arm_func_start ov29_022FB6E4
|
|
ov29_022FB6E4: ; 0x022FB6E4
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl IsMonster__022F9720
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r0, [r4, #0xb4]
|
|
ldrb r0, [r0, #0x48]
|
|
cmp r0, #0xd6
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_022FB6E4
|
|
|
|
arm_func_start ov29_022FB718
|
|
ov29_022FB718: ; 0x022FB718
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr sb, [sl, #0xb4]
|
|
mov r1, #0
|
|
mov r0, sl
|
|
strh r1, [sb, #0x16]
|
|
bl Conversion2IsActive
|
|
mov r6, r0
|
|
mov r0, sl
|
|
mov r1, #0x38
|
|
ldr r4, [sl, #0xb4]
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrne r0, _022FB834 ; =_020A1870
|
|
mov r8, #0
|
|
ldrnesh r1, [r4, #0x16]
|
|
ldrnesh r0, [r0]
|
|
#ifdef JAPAN
|
|
add r5, r4, #0x120
|
|
#else
|
|
add r5, r4, #0x124
|
|
#endif
|
|
mov fp, r8
|
|
addne r0, r1, r0
|
|
strneh r0, [r4, #0x16]
|
|
mov r4, #1
|
|
_022FB77C:
|
|
ldrb r0, [r5, r8, lsl #3]
|
|
add r7, r5, r8, lsl #3
|
|
tst r0, #1
|
|
movne r0, r4
|
|
moveq r0, fp
|
|
tst r0, #0xff
|
|
beq _022FB7C0
|
|
ldrh r2, [r7, #2]
|
|
mov r0, sl
|
|
mov r1, #0x39
|
|
bic r2, r2, #0x100
|
|
strh r2, [r7, #2]
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneh r0, [r7, #2]
|
|
orrne r0, r0, #0x100
|
|
strneh r0, [r7, #2]
|
|
_022FB7C0:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022FB77C
|
|
mov r0, sl
|
|
bl ov29_02348100
|
|
cmp r6, #2
|
|
bne _022FB7FC
|
|
mov r0, sl
|
|
bl Conversion2IsActive
|
|
cmp r0, #0
|
|
bne _022FB7FC
|
|
mov r0, sl
|
|
bl ov29_02307CE0
|
|
_022FB7FC:
|
|
ldrsh r1, [sb, #0x12]
|
|
ldrsh r0, [sb, #0x16]
|
|
ldr r2, _022FB838 ; =0x000003E7
|
|
add r1, r1, r0
|
|
cmp r1, r2
|
|
ldrsh r0, [sb, #0x10]
|
|
movle r2, r1
|
|
cmp r0, r2
|
|
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
ldr r0, _022FB838 ; =0x000003E7
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
strh r1, [sb, #0x10]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022FB834: .word _020A1870
|
|
_022FB838: .word 0x000003E7
|
|
arm_func_end ov29_022FB718
|
|
|
|
arm_func_start ov29_022FB83C
|
|
ov29_022FB83C: ; 0x022FB83C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov sl, r0
|
|
mov sb, r1
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldr r8, [sl, #0xb4]
|
|
mov r7, #0
|
|
#ifdef JAPAN
|
|
add r6, r8, #0x120
|
|
#else
|
|
add r6, r8, #0x124
|
|
#endif
|
|
mov r4, r7
|
|
mov r5, #1
|
|
_022FB868:
|
|
ldrb r0, [r6, r7, lsl #3]
|
|
mov r1, r7, lsl #3
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, r4
|
|
tst r0, #0xff
|
|
beq _022FB88C
|
|
add r0, r6, r1
|
|
bl GetMoveBasePp
|
|
_022FB88C:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
cmp r7, #4
|
|
blt _022FB868
|
|
mov r0, sl
|
|
bl ov29_022FB718
|
|
cmp sb, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
ldrsh r2, [r8, #0x12]
|
|
ldrsh r1, [r8, #0x16]
|
|
ldr r0, _022FB91C ; =0x000003E7
|
|
mov sb, #0
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
strh r1, [r8, #0x10]
|
|
#ifdef JAPAN
|
|
add r6, r8, #0x120
|
|
#else
|
|
add r6, r8, #0x124
|
|
#endif
|
|
mov r4, sb
|
|
mov r5, #1
|
|
_022FB8DC:
|
|
ldrb r0, [r6, sb, lsl #3]
|
|
add r7, r6, sb, lsl #3
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, r4
|
|
tst r0, #0xff
|
|
beq _022FB904
|
|
mov r0, r7
|
|
bl GetMaxPp
|
|
strb r0, [r7, #6]
|
|
_022FB904:
|
|
add r0, sb, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov sb, r0, asr #0x10
|
|
cmp sb, #4
|
|
blt _022FB8DC
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_022FB91C: .word 0x000003E7
|
|
arm_func_end ov29_022FB83C
|
|
|
|
arm_func_start ov29_022FB920
|
|
ov29_022FB920: ; 0x022FB920
|
|
#ifdef EUROPE
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
ldr r5, _022FB980 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
mov r6, #0
|
|
_022FC33C_EU:
|
|
ldr r0, [r5]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb28]
|
|
bl ov29_022FB718
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
cmp r6, #4
|
|
blt _022FC33C_EU
|
|
bl UpdateMapSurveyorFlag
|
|
cmp r0, #0
|
|
cmpne r4, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
bl UpdateMinimap
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r4, _022FB980 ; =DUNGEON_PTR
|
|
mov r5, #0
|
|
_022FB92C:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xa84]
|
|
#else
|
|
ldr r0, [r0, #0xb28]
|
|
#endif
|
|
bl ov29_022FB718
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
cmp r5, #4
|
|
blt _022FB92C
|
|
mov r0, #0x41
|
|
bl TeamMemberHasEnabledIqSkill
|
|
cmp r0, #0
|
|
ldrne r0, _022FB980 ; =DUNGEON_PTR
|
|
movne r1, #1
|
|
ldreq r0, _022FB980 ; =DUNGEON_PTR
|
|
moveq r1, #0
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
strb r1, [r0, #0x19d]
|
|
#else
|
|
strb r1, [r0, #0x241]
|
|
#endif
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
#endif
|
|
.align 2, 0
|
|
_022FB980: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FB920
|
|
|
|
arm_func_start ov29_022FB984
|
|
ov29_022FB984: ; 0x022FB984
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end ov29_022FB984
|
|
|
|
arm_func_start ov29_022FB98C
|
|
ov29_022FB98C: ; 0x022FB98C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r2, #1
|
|
ldr r0, _022FB9B8 ; =0x0000270F
|
|
mov r4, r1
|
|
sub r3, r2, #2
|
|
bl DisplayAnimatedNumbers
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl ov29_022E576C
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022FB9B8: .word 0x0000270F
|
|
arm_func_end ov29_022FB98C
|
|
|
|
arm_func_start ov29_022FB9BC
|
|
ov29_022FB9BC: ; 0x022FB9BC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #0xbc]
|
|
bl IsSecretBazaarNpcBehavior
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022FB9BC
|
|
|
|
arm_func_start ov29_022FB9E0
|
|
ov29_022FB9E0: ; 0x022FB9E0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
bl IsMonster__022F9720
|
|
cmp r0, #0
|
|
beq _022FBA4C
|
|
ldr r1, [r5, #0xb4]
|
|
mov r0, #0
|
|
#ifdef JAPAN
|
|
add ip, r1, #0x120
|
|
#else
|
|
add ip, r1, #0x124
|
|
#endif
|
|
mov r2, r0
|
|
mov r3, #1
|
|
b _022FBA44
|
|
_022FBA10:
|
|
ldrb r1, [ip, r0, lsl #3]
|
|
add lr, ip, r0, lsl #3
|
|
tst r1, #1
|
|
movne r1, r3
|
|
moveq r1, r2
|
|
tst r1, #0xff
|
|
beq _022FBA38
|
|
ldrh r1, [lr, #4]
|
|
cmp r1, r4
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
_022FBA38:
|
|
add r0, r0, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
_022FBA44:
|
|
cmp r0, #4
|
|
blt _022FBA10
|
|
_022FBA4C:
|
|
mvn r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ov29_022FB9E0
|
|
|
|
arm_func_start ov29_022FBA54
|
|
ov29_022FBA54: ; 0x022FBA54
|
|
stmdb sp!, {r3, lr}
|
|
bl ov29_022FB9E0
|
|
cmp r0, #0
|
|
movge r0, #1
|
|
movlt r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022FBA54
|
|
|
|
arm_func_start ov29_022FBA70
|
|
ov29_022FBA70: ; 0x022FBA70
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl IsMonster__022F9720
|
|
cmp r0, #0
|
|
beq _022FBAAC
|
|
ldr r0, [r4, #0xb4]
|
|
ldrb r0, [r0, #0x48]
|
|
cmp r0, #0xfa
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, pc}
|
|
cmp r0, #0xd9
|
|
blo _022FBAAC
|
|
cmp r0, #0xe4
|
|
movlo r0, #1
|
|
ldmloia sp!, {r4, pc}
|
|
_022FBAAC:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_022FBA70
|
|
|
|
arm_func_start ov29_022FBAB4
|
|
ov29_022FBAB4: ; 0x022FBAB4
|
|
ldr r2, [r0, #0xb4]
|
|
cmp r2, #0
|
|
addne r0, r2, #0x100
|
|
movne r1, #0
|
|
#ifdef JAPAN
|
|
strneh r1, [r0, #0x8e]
|
|
strne r1, [r2, #0x188]
|
|
#else
|
|
strneh r1, [r0, #0x92]
|
|
strne r1, [r2, #0x18c]
|
|
#endif
|
|
bx lr
|
|
arm_func_end ov29_022FBAB4
|
|
|
|
arm_func_start IsSpecialStoryAlly
|
|
IsSpecialStoryAlly: ; 0x022FBAD0
|
|
ldrb r0, [r0, #0x48]
|
|
cmp r0, #0xd9
|
|
blo _022FBAE8
|
|
cmp r0, #0xe4
|
|
movlo r0, #1
|
|
bxlo lr
|
|
_022FBAE8:
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end IsSpecialStoryAlly
|
|
|
|
arm_func_start IsExperienceLocked
|
|
IsExperienceLocked: ; 0x022FBAF0
|
|
stmdb sp!, {r3, lr}
|
|
ldrb r1, [r0, #0x48]
|
|
cmp r1, #0xfa
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
bl IsSpecialStoryAlly
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end IsExperienceLocked
|
|
|
|
arm_func_start ov29_022FBB1C
|
|
ov29_022FBB1C: ; 0x022FBB1C
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r4, _022FBBE4 ; =DUNGEON_PTR
|
|
#else
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #4
|
|
ldr r4, _022FBBE4 ; =DUNGEON_PTR
|
|
ldr sl, _022FBBE8 ; =0x00019914
|
|
#endif
|
|
mov r7, #0
|
|
add r6, sp, #0
|
|
mov r5, #3
|
|
_022FBB38:
|
|
ldr r0, [r4]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r8, [r0, #0xad4]
|
|
#else
|
|
ldr r8, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r8
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FBBD0
|
|
ldr sb, [r8, #0xb4]
|
|
ldr r2, [r4]
|
|
ldrsh r1, [sb, #4]
|
|
add r0, r8, #0x2c
|
|
add r1, r2, r1, lsl #1
|
|
#ifdef JAPAN
|
|
add r1, r1, #0x19800
|
|
ldrsh r1, [r1, #0x70]
|
|
#else
|
|
ldrsh r1, [r1, sl]
|
|
#endif
|
|
strh r1, [r8, #0xa8]
|
|
bl InitAnimationControlWithSet__0201C0CC
|
|
ldrsh r1, [r8, #0xa8]
|
|
add r0, r8, #0x2c
|
|
bl SetSpriteIdForAnimationControl
|
|
mov r0, r8
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
mov r0, r8
|
|
bl ov29_02304830
|
|
ldrh r0, [r8, #4]
|
|
mov r2, r6
|
|
mov r3, r5
|
|
strh r0, [sp]
|
|
ldrh r0, [r8, #6]
|
|
strh r0, [sp, #2]
|
|
ldr r0, [sb, #0xb0]
|
|
ldrsh r1, [sb, #4]
|
|
bl ov29_022DDA54
|
|
ldrsh r0, [r8, #4]
|
|
ldrsh r1, [r8, #6]
|
|
bl GetTileSafe
|
|
ldrb r0, [r0, #7]
|
|
strb r0, [r8, #0x25]
|
|
_022FBBD0:
|
|
add r7, r7, #1
|
|
cmp r7, #0x14
|
|
blt _022FBB38
|
|
#ifdef JAPAN
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
#else
|
|
add sp, sp, #4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
#endif
|
|
.align 2, 0
|
|
_022FBBE4: .word DUNGEON_PTR
|
|
#ifndef JAPAN
|
|
_022FBBE8: .word 0x00019914
|
|
#endif
|
|
arm_func_end ov29_022FBB1C
|
|
|
|
arm_func_start ov29_022FBBEC
|
|
ov29_022FBBEC: ; 0x022FBBEC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r5, r0
|
|
mov r4, #0
|
|
ldr r6, _022FBC48 ; =DUNGEON_PTR
|
|
b _022FBC38
|
|
_022FBC00:
|
|
ldr r0, [r6]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xad4]
|
|
#else
|
|
ldr r7, [r0, #0xb78]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FBC34
|
|
ldr r0, [r7, #0xb4]
|
|
ldrb r0, [r0, #0xbc]
|
|
cmp r5, r0
|
|
moveq r0, r7
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_022FBC34:
|
|
add r4, r4, #1
|
|
_022FBC38:
|
|
cmp r4, #0x14
|
|
blt _022FBC00
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022FBC48: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBBEC
|
|
|
|
arm_func_start ov29_022FBC4C
|
|
ov29_022FBC4C: ; 0x022FBC4C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, #0
|
|
ldr r4, _022FBC90 ; =DUNGEON_PTR
|
|
b _022FBC80
|
|
_022FBC5C:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xa84]
|
|
#else
|
|
ldr r0, [r0, #0xb28]
|
|
#endif
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
add r5, r5, #1
|
|
_022FBC80:
|
|
cmp r5, #4
|
|
blt _022FBC5C
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022FBC90: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBC4C
|
|
|
|
arm_func_start ov29_022FBC94
|
|
ov29_022FBC94: ; 0x022FBC94
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
bl GetBodySize
|
|
ldr r6, _022FBD04 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
mov r5, #0
|
|
_022FBCA8:
|
|
ldr r0, [r6]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xa84]
|
|
#else
|
|
ldr r0, [r0, #0xb28]
|
|
#endif
|
|
bl EntityIsValid__022F7364
|
|
cmp r0, #0
|
|
beq _022FBCE4
|
|
ldr r0, [r6]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xa84]
|
|
#else
|
|
ldr r0, [r0, #0xb28]
|
|
#endif
|
|
ldr r0, [r0, #0xb4]
|
|
ldrsh r0, [r0, #2]
|
|
bl GetBodySize
|
|
add r4, r4, r0
|
|
_022FBCE4:
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _022FBCA8
|
|
cmp r4, #6
|
|
movle r0, #1
|
|
movgt r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022FBD04: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBC94
|
|
|
|
#ifndef JAPAN
|
|
arm_func_start ov29_022FBD08
|
|
ov29_022FBD08: ; 0x022FBD08
|
|
ldr r0, _022FBD20 ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x3000
|
|
str r1, [r0, #0xe1c]
|
|
bx lr
|
|
.align 2, 0
|
|
_022FBD20: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBD08
|
|
|
|
arm_func_start ov29_022FBD24
|
|
ov29_022FBD24: ; 0x022FBD24
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl IsMonster__022F9720
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r0, _022FBD7C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x1cc
|
|
add r3, r0, #0x3c00
|
|
ldr r2, [r3, #0x50]
|
|
cmp r2, #0x14
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r1, [r4, #0xb4]
|
|
mov r0, #1
|
|
ldr r1, [r1, #0xb0]
|
|
str r1, [r3, r2, lsl #2]
|
|
ldr r1, [r3, #0x50]
|
|
add r1, r1, #1
|
|
str r1, [r3, #0x50]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022FBD7C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBD24
|
|
|
|
arm_func_start ov29_022FBD80
|
|
ov29_022FBD80: ; 0x022FBD80
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl IsMonster__022F9720
|
|
cmp r0, #0
|
|
beq _022FBDD4
|
|
ldr r0, _022FBDDC ; =DUNGEON_PTR
|
|
ldr r1, [r4, #0xb4]
|
|
ldr r0, [r0]
|
|
ldr r2, [r1, #0xb0]
|
|
add r0, r0, #0x1cc
|
|
add r1, r0, #0x3c00
|
|
ldr ip, [r1, #0x50]
|
|
mov r3, #0
|
|
b _022FBDCC
|
|
_022FBDB8:
|
|
ldr r0, [r1, r3, lsl #2]
|
|
cmp r2, r0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, pc}
|
|
add r3, r3, #1
|
|
_022FBDCC:
|
|
cmp r3, ip
|
|
blt _022FBDB8
|
|
_022FBDD4:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022FBDDC: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBD80
|
|
#endif
|
|
|
|
arm_func_start ov29_022FBDE0
|
|
ov29_022FBDE0: ; 0x022FBDE0
|
|
ldr ip, _022FBDEC ; =ov29_022EFAE8
|
|
ldrb r0, [r0, #0xbc]
|
|
bx ip
|
|
.align 2, 0
|
|
_022FBDEC: .word ov29_022EFAE8
|
|
arm_func_end ov29_022FBDE0
|
|
|
|
arm_func_start ov29_022FBDF0
|
|
ov29_022FBDF0: ; 0x022FBDF0
|
|
ldr r0, [r0, #0xb4]
|
|
ldr ip, _022FBE00 ; =IsSecretBazaarNpcBehavior
|
|
ldrb r0, [r0, #0xbc]
|
|
bx ip
|
|
.align 2, 0
|
|
_022FBE00: .word IsSecretBazaarNpcBehavior
|
|
arm_func_end ov29_022FBDF0
|
|
|
|
arm_func_start ov29_022FBE04
|
|
ov29_022FBE04: ; 0x022FBE04
|
|
stmdb sp!, {r3, lr}
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
bne _022FBE4C
|
|
ldr r0, _022FBE54 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl GetTurnLimit
|
|
ldr r1, _022FBE54 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x700
|
|
ldrsh r1, [r1, #0x84]
|
|
cmp r1, r0
|
|
bne _022FBE4C
|
|
bl IsFullFloorFixedRoom
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, pc}
|
|
_022FBE4C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022FBE54: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBE04
|
|
|
|
arm_func_start InitOtherMonsterData
|
|
InitOtherMonsterData: ; 0x022FBE58
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, r0
|
|
ldr ip, [r4, #0xb4]
|
|
mov r6, #1
|
|
strb r6, [ip, #0x100]
|
|
ldrsh r5, [ip, #0x12]
|
|
ldrsh r3, [ip, #0x16]
|
|
ldr r7, _022FBF04 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
|
|
mov r0, #0xc
|
|
add r5, r5, r3
|
|
smlabb r3, r1, r0, r7
|
|
rsb lr, r6, #0x3e8
|
|
cmp r5, lr
|
|
movgt r5, lr
|
|
strh r5, [ip, #0x14]
|
|
mov r0, #0
|
|
strh r0, [ip, #0x16]
|
|
strh r0, [ip, #0x18]
|
|
ldrsh r5, [r3, #2]
|
|
add lr, ip, #0x100
|
|
add r0, ip, #0x90
|
|
strh r5, [ip, #0x12]
|
|
ldrsh r5, [r3, #2]
|
|
strh r5, [ip, #0x10]
|
|
ldrb r5, [r3, #6]
|
|
strb r5, [ip, #0x1a]
|
|
ldrb r5, [r3, #7]
|
|
strb r5, [ip, #0x1b]
|
|
ldrb r5, [r3, #8]
|
|
strb r5, [ip, #0x1c]
|
|
ldrb r3, [r3, #9]
|
|
strb r3, [ip, #0x1d]
|
|
#ifdef JAPAN
|
|
strh r1, [lr, #0x64]
|
|
strb r2, [ip, #0x166]
|
|
#else
|
|
strh r1, [lr, #0x68]
|
|
strb r2, [ip, #0x16a]
|
|
#endif
|
|
ldrsh r1, [ip, #2]
|
|
ldrsh r2, [ip, #0xe]
|
|
bl EnableAllLearnableIqSkills
|
|
mov r0, r4
|
|
bl ov29_023021F0
|
|
mov r0, r4
|
|
mov r1, #1
|
|
bl ov29_022FB83C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022FBF04: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
|
|
arm_func_end InitOtherMonsterData
|
|
|
|
arm_func_start ov29_022FBF08
|
|
ov29_022FBF08: ; 0x022FBF08
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _022FBF2C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldr r0, [r0, #0x7cc]
|
|
sub r0, r0, #1
|
|
cmp r0, #1
|
|
ldmhiia sp!, {r3, pc}
|
|
bl LoadWazaP2
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022FBF2C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBF08
|
|
|
|
arm_func_start ov29_022FBF30
|
|
ov29_022FBF30: ; 0x022FBF30
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _022FBF54 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldr r0, [r0, #0x7cc]
|
|
sub r0, r0, #1
|
|
cmp r0, #1
|
|
ldmhiia sp!, {r3, pc}
|
|
bl UnloadCurrentWazaP
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022FBF54: .word DUNGEON_PTR
|
|
arm_func_end ov29_022FBF30
|
|
|
|
arm_func_start InitEnemySpawnStats
|
|
InitEnemySpawnStats: ; 0x022FBF58
|
|
#ifdef JAPAN
|
|
#define INIT_ENEMY_SPAWN_STATS_OFFSET -0x50
|
|
#else
|
|
#define INIT_ENEMY_SPAWN_STATS_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x218
|
|
ldr r1, _022FC230 ; =DUNGEON_PTR
|
|
mov r0, #0
|
|
ldr r1, [r1]
|
|
add r1, r1, #0xf4 + INIT_ENEMY_SPAWN_STATS_OFFSET
|
|
add r5, r1, #0x3400
|
|
bl DungeonRngSetSecondary
|
|
bl ov29_022FBF08
|
|
add r0, sp, #0x16
|
|
mov r1, #0
|
|
bl ov29_022E7BE8
|
|
mov r4, r0
|
|
mov r6, #0
|
|
b _022FC028
|
|
_022FBF94:
|
|
add r0, sp, #0x16
|
|
add r7, r0, r6, lsl #3
|
|
mov r0, r7
|
|
bl GetMonsterIdFromSpawnEntry
|
|
strh r0, [r5]
|
|
mov r0, r7
|
|
bl GetMonsterLevelFromSpawnEntry
|
|
strh r0, [r5, #2]
|
|
ldrsh r1, [r5]
|
|
ldrsh r2, [r5, #2]
|
|
add r0, r5, #4
|
|
bl GetMonsterMoves
|
|
ldrh r0, [r5, #4]
|
|
cmp r0, #0
|
|
moveq r0, #0x170
|
|
streqh r0, [r5, #4]
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
bl GetMaxHpAtLevel
|
|
strh r0, [r5, #0xc]
|
|
mov r7, #0
|
|
_022FBFE8:
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
mov r2, r7
|
|
add r8, r5, r7
|
|
bl GetOffensiveStatAtLevel
|
|
strb r0, [r8, #0xe]
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
mov r2, r7
|
|
bl GetDefensiveStatAtLevel
|
|
add r7, r7, #1
|
|
strb r0, [r8, #0x10]
|
|
cmp r7, #2
|
|
blt _022FBFE8
|
|
add r5, r5, #0x12
|
|
add r6, r6, #1
|
|
_022FC028:
|
|
cmp r6, r4
|
|
blt _022FBF94
|
|
mov r0, #0
|
|
b _022FC040
|
|
_022FC038:
|
|
strh r0, [r5], #0x12
|
|
add r6, r6, #1
|
|
_022FC040:
|
|
cmp r6, #0x40
|
|
blt _022FC038
|
|
cmp r4, #0x40
|
|
bge _022FC0A8
|
|
bl IsDestinationFloorWithFixedRoom
|
|
cmp r0, #0
|
|
bne _022FC0A8
|
|
bl IsDestinationFloorWithMonster
|
|
cmp r0, #0
|
|
beq _022FC0A8
|
|
mov r0, #0xa
|
|
bl IsCurrentMissionType
|
|
cmp r0, #0
|
|
bne _022FC088
|
|
mov r0, #9
|
|
bl IsCurrentMissionType
|
|
cmp r0, #0
|
|
beq _022FC0A8
|
|
_022FC088:
|
|
add r0, sp, #8
|
|
bl GetOutlawSpawnData
|
|
add r0, sp, #0x16
|
|
ldrsh r1, [sp, #0xc]
|
|
ldrsh r2, [sp, #8]
|
|
add r0, r0, r4, lsl #3
|
|
bl SetMonsterLevelAndId
|
|
add r4, r4, #1
|
|
_022FC0A8:
|
|
cmp r4, #0x40
|
|
bge _022FC0E0
|
|
ldr r0, _022FC230 ; =DUNGEON_PTR
|
|
ldr r2, [r0]
|
|
add r0, r2, #0x700
|
|
ldrsh r1, [r0, #0xa8]
|
|
cmp r1, #0
|
|
beq _022FC0E0
|
|
ldrb r1, [r2, #0x7aa]
|
|
ldrsh r2, [r0, #0xa8]
|
|
add r3, sp, #0x16
|
|
add r0, r3, r4, lsl #3
|
|
bl SetMonsterLevelAndId
|
|
add r4, r4, #1
|
|
_022FC0E0:
|
|
mov r2, #0
|
|
ldr r1, _022FC230 ; =DUNGEON_PTR
|
|
mov sl, r2
|
|
_022FC0EC:
|
|
ldr r0, [r1]
|
|
add r0, r0, r2
|
|
add r0, r0, #0x3000
|
|
add r2, r2, #1
|
|
strb sl, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
|
|
cmp r2, #0x258
|
|
blt _022FC0EC
|
|
mvn r0, #0
|
|
mov r5, #1
|
|
str r0, [sp]
|
|
b _022FC1E8
|
|
_022FC118:
|
|
ldr r6, [sp]
|
|
mov r8, #0
|
|
mov r7, r6
|
|
b _022FC194
|
|
_022FC128:
|
|
add r0, sp, #0x16
|
|
add sb, r0, r8, lsl #3
|
|
mov r0, sb
|
|
bl GetMonsterIdFromSpawnEntry
|
|
mov fp, r0
|
|
mov r0, sb
|
|
bl GetMonsterLevelFromSpawnEntry
|
|
str r0, [sp, #4]
|
|
mov r0, fp
|
|
mov r1, #0x258
|
|
bl _s32_div_f
|
|
ldr r0, _022FC230 ; =DUNGEON_PTR
|
|
mov r1, r1, lsl #0x10
|
|
ldr r0, [r0]
|
|
mov sb, r1, asr #0x10
|
|
add r0, r0, r1, asr #16
|
|
add r0, r0, #0x3000
|
|
ldrb r0, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
|
|
cmp r0, #0
|
|
bne _022FC190
|
|
ldr r1, [sp, #4]
|
|
mov r0, sb
|
|
bl GetExp
|
|
cmp r7, r0
|
|
movlt r7, r0
|
|
movlt r6, sb
|
|
_022FC190:
|
|
add r8, r8, #1
|
|
_022FC194:
|
|
cmp r8, r4
|
|
blt _022FC128
|
|
cmp r6, #0
|
|
blt _022FC1F0
|
|
cmp r5, #0x100
|
|
ble _022FC1C8
|
|
ldr r0, _022FC230 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r6
|
|
add r1, r0, #0x3000
|
|
mov r0, #1
|
|
strb r0, [r1, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
|
|
b _022FC1E4
|
|
_022FC1C8:
|
|
ldr r0, _022FC230 ; =DUNGEON_PTR
|
|
rsb r1, r5, #0x100
|
|
ldr r0, [r0]
|
|
add r5, r5, #2
|
|
add r0, r0, r6
|
|
add r0, r0, #0x3000
|
|
strb r1, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
|
|
_022FC1E4:
|
|
add sl, sl, #1
|
|
_022FC1E8:
|
|
cmp sl, r4
|
|
blt _022FC118
|
|
_022FC1F0:
|
|
ldr r1, _022FC230 ; =DUNGEON_PTR
|
|
mov r4, #0
|
|
mov r2, #1
|
|
_022FC1FC:
|
|
ldr r0, [r1]
|
|
add r0, r0, r4
|
|
add r0, r0, #0x3000
|
|
ldrb r3, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
|
|
add r4, r4, #1
|
|
cmp r3, #0
|
|
streqb r2, [r0, #0xb74 + INIT_ENEMY_SPAWN_STATS_OFFSET]
|
|
cmp r4, #0x258
|
|
blt _022FC1FC
|
|
bl ov29_022FBF30
|
|
bl DungeonRngSetPrimary
|
|
add sp, sp, #0x218
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022FC230: .word DUNGEON_PTR
|
|
arm_func_end InitEnemySpawnStats
|
|
|
|
arm_func_start InitEnemyStatsAndMoves
|
|
InitEnemyStatsAndMoves: ; 0x022FC234
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #8
|
|
mov sl, r0
|
|
ldrsh r0, [sp, #0x30]
|
|
mov sb, r1
|
|
mov r1, #0x258
|
|
mov r8, r2
|
|
mov r7, r3
|
|
ldr r6, [sp, #0x34]
|
|
bl _s32_div_f
|
|
mov r0, r1, lsl #0x10
|
|
ldr r2, _022FC464 ; =DUNGEON_PTR
|
|
mov r4, r0, asr #0x10
|
|
ldr r1, [r2]
|
|
mov fp, #0
|
|
#ifdef JAPAN
|
|
add r0, r1, #0xa4
|
|
#else
|
|
add r0, r1, #0xf4
|
|
#endif
|
|
add r5, r0, #0x3400
|
|
mov r3, r5
|
|
mov r0, #0x12
|
|
b _022FC314
|
|
_022FC284:
|
|
mul r2, fp, r0
|
|
ldrsh r1, [r3, r2]
|
|
add r5, r3, r2
|
|
cmp r1, #0
|
|
beq _022FC31C
|
|
cmp r1, r4
|
|
ldreqsh r1, [r5, #2]
|
|
cmpeq r1, r6
|
|
bne _022FC310
|
|
mov r1, r4
|
|
mov r2, r6
|
|
add r0, r5, #4
|
|
bl GetMonsterMoves
|
|
mov r4, #0
|
|
_022FC2BC:
|
|
add r0, r5, r4, lsl #1
|
|
ldrh r1, [r0, #4]
|
|
add r0, sl, r4, lsl #3
|
|
bl InitMoveCheckId
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _022FC2BC
|
|
ldrsh r0, [r5, #0xc]
|
|
mov r2, #0
|
|
strh r0, [sb]
|
|
_022FC2E4:
|
|
add r1, r5, r2
|
|
ldrb r0, [r1, #0xe]
|
|
strb r0, [r8, r2]
|
|
ldrb r0, [r1, #0x10]
|
|
strb r0, [r7, r2]
|
|
add r2, r2, #1
|
|
cmp r2, #2
|
|
blt _022FC2E4
|
|
mov r0, #0
|
|
strb r0, [sl, #0x20]
|
|
b _022FC45C
|
|
_022FC310:
|
|
add fp, fp, #1
|
|
_022FC314:
|
|
cmp fp, #0x40
|
|
blt _022FC284
|
|
_022FC31C:
|
|
cmp fp, #0x40
|
|
bne _022FC3A4
|
|
add r0, sp, #0
|
|
mov r1, r4
|
|
mov r2, r6
|
|
bl GetMonsterMoves
|
|
mov r5, #0
|
|
add fp, sp, #0
|
|
_022FC33C:
|
|
mov r0, r5, lsl #1
|
|
ldrh r1, [fp, r0]
|
|
add r0, sl, r5, lsl #3
|
|
bl InitMoveCheckId
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _022FC33C
|
|
mov r0, r4
|
|
mov r1, r6
|
|
bl GetMaxHpAtLevel
|
|
strh r0, [sb]
|
|
mov r5, #0
|
|
_022FC36C:
|
|
mov r0, r4
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl GetOffensiveStatAtLevel
|
|
strb r0, [r8, r5]
|
|
mov r0, r4
|
|
mov r1, r6
|
|
mov r2, r5
|
|
bl GetDefensiveStatAtLevel
|
|
strb r0, [r7, r5]
|
|
add r5, r5, #1
|
|
cmp r5, #2
|
|
blt _022FC36C
|
|
b _022FC454
|
|
_022FC3A4:
|
|
strh r4, [r5]
|
|
mov r1, r4
|
|
mov r2, r6
|
|
strh r6, [r5, #2]
|
|
add r0, r5, #4
|
|
bl GetMonsterMoves
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
bl GetMaxHpAtLevel
|
|
strh r0, [r5, #0xc]
|
|
mov r6, #0
|
|
_022FC3D0:
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
mov r2, r6
|
|
add r4, r5, r6
|
|
bl GetOffensiveStatAtLevel
|
|
strb r0, [r4, #0xe]
|
|
ldrsh r0, [r5]
|
|
ldrsh r1, [r5, #2]
|
|
mov r2, r6
|
|
bl GetDefensiveStatAtLevel
|
|
add r6, r6, #1
|
|
strb r0, [r4, #0x10]
|
|
cmp r6, #2
|
|
blt _022FC3D0
|
|
mov r4, #0
|
|
_022FC40C:
|
|
add r0, r5, r4, lsl #1
|
|
ldrh r1, [r0, #4]
|
|
add r0, sl, r4, lsl #3
|
|
bl InitMoveCheckId
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _022FC40C
|
|
ldrsh r0, [r5, #0xc]
|
|
mov r2, #0
|
|
strh r0, [sb]
|
|
_022FC434:
|
|
add r1, r5, r2
|
|
ldrb r0, [r1, #0xe]
|
|
strb r0, [r8, r2]
|
|
ldrb r0, [r1, #0x10]
|
|
strb r0, [r7, r2]
|
|
add r2, r2, #1
|
|
cmp r2, #2
|
|
blt _022FC434
|
|
_022FC454:
|
|
mov r0, #0
|
|
strb r0, [sl, #0x20]
|
|
_022FC45C:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022FC464: .word DUNGEON_PTR
|
|
arm_func_end InitEnemyStatsAndMoves
|
|
|
|
arm_func_start ov29_022FC468
|
|
ov29_022FC468: ; 0x022FC468
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r4, [sp, #0x24]
|
|
mov sb, r0
|
|
cmp r4, #0xb
|
|
mov r0, #0
|
|
cmp r4, #0xc
|
|
moveq r0, #1
|
|
cmp r4, #0xd
|
|
moveq r0, #2
|
|
cmp r4, #0xe
|
|
moveq r0, #3
|
|
mov r8, r1
|
|
mov r7, r2
|
|
mov r6, r3
|
|
ldr r5, [sp, #0x20]
|
|
bl GetExplorerMazeMonster
|
|
mov r4, r0
|
|
mov r0, sb
|
|
add r1, r4, #0x22
|
|
bl GroundToDungeonMoveset
|
|
ldrsh r0, [r4, #0xa]
|
|
mov r2, #0
|
|
strh r0, [r8]
|
|
_022FC4C4:
|
|
add r1, r4, r2
|
|
ldrb r0, [r1, #0xc]
|
|
strb r0, [r7, r2]
|
|
ldrb r0, [r1, #0xe]
|
|
strb r0, [r6, r2]
|
|
add r2, r2, #1
|
|
cmp r2, #2
|
|
blt _022FC4C4
|
|
ldrsh r1, [r4, #8]
|
|
ldr r0, _022FC508 ; =IQ_SKILLS
|
|
ldr r0, [r0, #0x20]
|
|
strh r1, [r5]
|
|
cmp r1, r0
|
|
strlth r0, [r5]
|
|
mov r0, #0
|
|
strb r0, [sb, #0x20]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022FC508: .word IQ_SKILLS
|
|
arm_func_end ov29_022FC468
|
|
|
|
arm_func_start SpawnTeam
|
|
SpawnTeam: ; 0x022FC50C
|
|
#ifdef JAPAN
|
|
#define SPAWN_TEAM_OFFSET -0xA4
|
|
#else
|
|
#define SPAWN_TEAM_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x44
|
|
mov sl, r0
|
|
mov r0, #0
|
|
bl DungeonRngSetSecondary
|
|
ldr r0, _022FC98C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r1, r0, #0xcc00
|
|
ldrsh r0, [r1, #0xe0 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r1, [r1, #0xe2 + SPAWN_TEAM_OFFSET]
|
|
bl GetTile
|
|
ldrb fp, [r0, #7]
|
|
mov r4, #0
|
|
_022FC540:
|
|
mov r0, r4
|
|
bl GetActiveTeamMember
|
|
add r1, r4, #1
|
|
mov r1, r1, lsl #0x10
|
|
strh r4, [r0, #0xa]
|
|
mov r4, r1, asr #0x10
|
|
cmp r4, #4
|
|
blt _022FC540
|
|
mov r7, #0
|
|
mov r6, #1
|
|
mov r8, r7
|
|
mov r5, r7
|
|
mov sb, r6
|
|
add r4, sp, #0x34
|
|
_022FC578:
|
|
mov r0, r8
|
|
bl GetActiveTeamMember
|
|
ldrb r1, [r0]
|
|
tst r1, #1
|
|
movne r2, r6
|
|
moveq r2, r5
|
|
tst r2, #0xff
|
|
beq _022FC5B0
|
|
tst r1, #2
|
|
movne r1, sb
|
|
moveq r1, #0
|
|
tst r1, #0xff
|
|
strne r0, [r4, r7, lsl #2]
|
|
addne r7, r7, #1
|
|
_022FC5B0:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
blt _022FC578
|
|
mov r1, #0
|
|
add r0, sp, #0x34
|
|
b _022FC5D8
|
|
_022FC5D0:
|
|
str r1, [r0, r7, lsl #2]
|
|
add r7, r7, #1
|
|
_022FC5D8:
|
|
cmp r7, #4
|
|
blt _022FC5D0
|
|
mov r8, #0
|
|
mov r7, r8
|
|
mov r3, r8
|
|
mov r4, #1
|
|
mov r2, r8
|
|
add r5, sp, #0x34
|
|
add r1, sp, #0x24
|
|
_022FC5FC:
|
|
ldr r6, [r5, r7, lsl #2]
|
|
cmp r6, #0
|
|
beq _022FC628
|
|
ldrb r0, [r6, #1]
|
|
cmp r0, #0
|
|
movne r0, r4
|
|
moveq r0, r3
|
|
tst r0, #0xff
|
|
strne r6, [r1, r8, lsl #2]
|
|
strne r2, [r5, r7, lsl #2]
|
|
addne r8, r8, #1
|
|
_022FC628:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
cmp r7, #4
|
|
blt _022FC5FC
|
|
ldr r0, _022FC98C ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x75c]
|
|
cmp r0, #0
|
|
bne _022FC698
|
|
mov r7, #0
|
|
mov r4, r7
|
|
add r5, sp, #0x34
|
|
add sb, sp, #0x24
|
|
_022FC660:
|
|
ldr r6, [r5, r7, lsl #2]
|
|
cmp r6, #0
|
|
beq _022FC684
|
|
ldrb r0, [r6, #3]
|
|
bl JoinedAtRangeCheck2Veneer
|
|
cmp r0, #0
|
|
strne r6, [sb, r8, lsl #2]
|
|
strne r4, [r5, r7, lsl #2]
|
|
addne r8, r8, #1
|
|
_022FC684:
|
|
add r0, r7, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r7, r0, asr #0x10
|
|
cmp r7, #4
|
|
blt _022FC660
|
|
_022FC698:
|
|
mov r4, #0
|
|
mov r2, r4
|
|
add r1, sp, #0x24
|
|
add r3, sp, #0x34
|
|
_022FC6A8:
|
|
ldr r0, [r3, r4, lsl #2]
|
|
cmp r0, #0
|
|
strne r0, [r1, r8, lsl #2]
|
|
add r0, r4, #1
|
|
mov r0, r0, lsl #0x10
|
|
strne r2, [r3, r4, lsl #2]
|
|
mov r4, r0, asr #0x10
|
|
addne r8, r8, #1
|
|
cmp r4, #4
|
|
blt _022FC6A8
|
|
mov r1, #0
|
|
add r0, sp, #0x24
|
|
b _022FC6E4
|
|
_022FC6DC:
|
|
str r1, [r0, r8, lsl #2]
|
|
add r8, r8, #1
|
|
_022FC6E4:
|
|
cmp r8, #4
|
|
blt _022FC6DC
|
|
mov sb, #0
|
|
_022FC6F0:
|
|
add r0, sp, #0x24
|
|
ldr r5, [r0, sb, lsl #2]
|
|
mov r6, #0
|
|
cmp r5, #0
|
|
beq _022FC8BC
|
|
ldrsh r1, [r5, #0xc]
|
|
sub r0, r1, #0x17c
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
cmp r0, #2
|
|
ldrls r0, _022FC990 ; =0x0000017B
|
|
strlsh r0, [r5, #0xc]
|
|
bls _022FC74C
|
|
sub r0, r1, #0x3d4
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
cmp r0, #2
|
|
ldrls r0, _022FC994 ; =0x000003D3
|
|
strlsh r0, [r5, #0xc]
|
|
_022FC74C:
|
|
mov r4, #0
|
|
_022FC750:
|
|
ldr r0, _022FC998 ; =ov29_02351E28
|
|
mov r1, r4, lsl #2
|
|
ldrh r1, [r0, r1]
|
|
add r0, r0, r4, lsl #2
|
|
ldrh r0, [r0, #2]
|
|
strh r1, [sp, #0x1e]
|
|
ldrsh r8, [sp, #0x1e]
|
|
strh r0, [sp, #0x20]
|
|
cmp r8, #0x63
|
|
beq _022FC808
|
|
ldr r0, _022FC98C ; =DUNGEON_PTR
|
|
ldrsh r7, [sp, #0x20]
|
|
ldr r0, [r0]
|
|
add r0, r0, #0xcc00
|
|
ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
|
|
add r1, r7, r1
|
|
add r0, r8, r2
|
|
bl GetTile
|
|
mov r1, r0
|
|
ldrb r0, [r1, #7]
|
|
cmp r0, fp
|
|
bne _022FC800
|
|
ldrsh r0, [r5, #0xc]
|
|
bl IsInvalidSpawnTile
|
|
cmp r0, #0
|
|
bne _022FC800
|
|
ldr r0, _022FC98C ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r2, [r0]
|
|
mov r0, #1
|
|
str r1, [sp]
|
|
stmib sp, {r0, r1, sl}
|
|
str r1, [sp, #0x10]
|
|
add r0, r2, #0xcc00
|
|
ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r0, [r5, #0xc]
|
|
mov r3, r5
|
|
add r1, r8, r1
|
|
add r2, r7, r2
|
|
bl InitTeamMember
|
|
mov r6, #1
|
|
b _022FC808
|
|
_022FC800:
|
|
add r4, r4, #1
|
|
b _022FC750
|
|
_022FC808:
|
|
cmp r6, #0
|
|
bne _022FC8BC
|
|
ldr r8, _022FC998 ; =ov29_02351E28
|
|
mov r7, #0
|
|
_022FC818:
|
|
mov r0, r7, lsl #2
|
|
ldrh r1, [r8, r0]
|
|
add r0, r8, r7, lsl #2
|
|
ldrh r0, [r0, #2]
|
|
strh r1, [sp, #0x14]
|
|
ldrsh r6, [sp, #0x14]
|
|
strh r0, [sp, #0x16]
|
|
cmp r6, #0x63
|
|
beq _022FC8BC
|
|
ldr r0, _022FC98C ; =DUNGEON_PTR
|
|
ldrsh r4, [sp, #0x16]
|
|
ldr r0, [r0]
|
|
add r0, r0, #0xcc00
|
|
ldrsh r1, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r2, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
|
|
add r1, r4, r1
|
|
add r0, r6, r2
|
|
bl GetTile
|
|
mov r1, r0
|
|
ldrsh r0, [r5, #0xc]
|
|
bl IsInvalidSpawnTile
|
|
cmp r0, #0
|
|
bne _022FC8B4
|
|
ldr r0, _022FC98C ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
ldr r2, [r0]
|
|
mov r0, #1
|
|
str r1, [sp]
|
|
stmib sp, {r0, r1, sl}
|
|
str r1, [sp, #0x10]
|
|
add r0, r2, #0xcc00
|
|
ldrsh r1, [r0, #0xe0 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r2, [r0, #0xe2 + SPAWN_TEAM_OFFSET]
|
|
ldrsh r0, [r5, #0xc]
|
|
mov r3, r5
|
|
add r1, r6, r1
|
|
add r2, r4, r2
|
|
bl InitTeamMember
|
|
b _022FC8BC
|
|
_022FC8B4:
|
|
add r7, r7, #1
|
|
b _022FC818
|
|
_022FC8BC:
|
|
add r0, sb, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov sb, r0, asr #0x10
|
|
cmp sb, #4
|
|
blt _022FC6F0
|
|
bl ov29_022FCD04
|
|
mov r2, #0
|
|
#ifdef JAPAN
|
|
mov sb, r2
|
|
#else
|
|
mov r8, r2
|
|
#endif
|
|
add r1, sp, #0x18
|
|
_022FC8E0:
|
|
add r0, r2, #1
|
|
mov r0, r0, lsl #0x10
|
|
#ifdef JAPAN
|
|
strb sb, [r1, r2]
|
|
#else
|
|
strb r8, [r1, r2]
|
|
#endif
|
|
mov r2, r0, asr #0x10
|
|
cmp r2, #5
|
|
blt _022FC8E0
|
|
#ifdef JAPAN
|
|
ldr r5, _022FC98C ; =DUNGEON_PTR
|
|
mov r7, #0
|
|
mov r8, #1
|
|
add r6, sp, #0x18
|
|
mov r4, #0x23c
|
|
_022FC908:
|
|
ldr r0, [r5]
|
|
add r0, r0, sb, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xa84]
|
|
#else
|
|
ldr r4, _022FC98C ; =DUNGEON_PTR
|
|
mov r6, #0
|
|
mov r7, #1
|
|
add r5, sp, #0x18
|
|
_022FC908:
|
|
ldr r0, [r4]
|
|
add r0, r0, r8, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb28]
|
|
#endif
|
|
bl EntityIsValid__022FC99C
|
|
cmp r0, #0
|
|
beq _022FC964
|
|
#ifdef JAPAN
|
|
mul r1, sb, r4
|
|
ldr r0, [r5]
|
|
add r0, r0, #0x56
|
|
add r2, r0, #0x800
|
|
ldrb r0, [r2, r1]
|
|
add r2, r2, r1
|
|
tst r0, #1
|
|
movne r0, r8
|
|
moveq r0, r7
|
|
#else
|
|
ldr r0, [r4]
|
|
add r1, r8, r8, lsl #3
|
|
add r0, r0, #0x56
|
|
add r2, r0, #0x800
|
|
ldrb r0, [r2, r1, lsl #6]
|
|
add r2, r2, r1, lsl #6
|
|
tst r0, #1
|
|
movne r0, r7
|
|
moveq r0, r6
|
|
#endif
|
|
tst r0, #0xff
|
|
ldrneb r1, [r2, #1]
|
|
cmpne r1, #0
|
|
#ifdef JAPAN
|
|
addne r0, sb, #1
|
|
andne r0, r0, #0xff
|
|
strneb r0, [r6, r1]
|
|
strneb r0, [r2, #1]
|
|
_022FC964:
|
|
add r0, sb, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov sb, r0, asr #0x10
|
|
cmp sb, #4
|
|
#else
|
|
addne r0, r8, #1
|
|
andne r0, r0, #0xff
|
|
strneb r0, [r5, r1]
|
|
strneb r0, [r2, #1]
|
|
_022FC964:
|
|
add r0, r8, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r8, r0, asr #0x10
|
|
cmp r8, #4
|
|
#endif
|
|
blt _022FC908
|
|
add r0, sp, #0x18
|
|
bl sub_0200F9B4
|
|
bl DungeonRngSetPrimary
|
|
add sp, sp, #0x44
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022FC98C: .word DUNGEON_PTR
|
|
_022FC990: .word 0x0000017B
|
|
_022FC994: .word 0x000003D3
|
|
_022FC998: .word ov29_02351E28
|
|
arm_func_end SpawnTeam
|