pmd-sky/asm/overlay_29_022F7388.s
2025-03-27 23:54:14 -04:00

2950 lines
54 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 PopulateActiveMonsterPtrs
#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 DetermineMonsterShadow
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 ; =DIRECTIONS_XY + 2
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 DIRECTIONS_XY + 2
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 ; =DIRECTIONS_XY + 2
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 DIRECTIONS_XY + 2
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 ; =DIRECTIONS_XY + 2
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 ; =DIRECTIONS_XY + 2
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 DIRECTIONS_XY + 2
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 ; =DIRECTIONS_XY + 2
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 DIRECTIONS_XY + 2
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 ; =DIRECTIONS_XY + 2
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 DIRECTIONS_XY + 2
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