mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-26 00:26:19 -05:00
1965 lines
36 KiB
ArmAsm
1965 lines
36 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_022E0378.inc"
|
|
|
|
.text
|
|
|
|
; https://decomp.me/scratch/Cgi9a
|
|
arm_func_start ov29_022E0378
|
|
ov29_022E0378: ; 0x022E0378
|
|
ldr r1, _022E03A8 ; =ov29_0237CFC0
|
|
ldrb r1, [r1]
|
|
cmp r1, #0
|
|
movne r0, #1
|
|
bxne lr
|
|
ldr r1, _022E03AC ; =SECONDARY_TERRAIN_TYPES
|
|
ldrb r0, [r1, r0]
|
|
cmp r0, #2
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
.align 2, 0
|
|
_022E03A8: .word ov29_0237CFC0
|
|
_022E03AC: .word SECONDARY_TERRAIN_TYPES
|
|
arm_func_end ov29_022E0378
|
|
|
|
arm_func_start GetFloorType
|
|
GetFloorType: ; 0x022E03B0
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _022E0430 ; =DUNGEON_PTR
|
|
ldr r2, [r0]
|
|
add r0, r2, #0x700
|
|
ldrsb r0, [r0, #0x98]
|
|
cmp r0, #2
|
|
ldreqb r1, [r2, #0x751]
|
|
ldreqb r0, [r2, #0x749]
|
|
cmpeq r1, r0
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, pc}
|
|
add r0, r2, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x36]
|
|
#else
|
|
ldrb r0, [r0, #0xda]
|
|
#endif
|
|
cmp r0, #0
|
|
beq _022E03F8
|
|
cmp r0, #0x6e
|
|
movlo r0, #1
|
|
blo _022E041C
|
|
_022E03F8:
|
|
bl FixedRoomIsSubstituteRoom
|
|
cmp r0, #0
|
|
bne _022E0410
|
|
bl IsJirachiChallengeFloor
|
|
cmp r0, #0
|
|
beq _022E0418
|
|
_022E0410:
|
|
mov r0, #1
|
|
b _022E041C
|
|
_022E0418:
|
|
mov r0, #0
|
|
_022E041C:
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0430: .word DUNGEON_PTR
|
|
arm_func_end GetFloorType
|
|
|
|
arm_func_start ov29_022E0434
|
|
ov29_022E0434: ; 0x022E0434
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r7, #0
|
|
ldr r4, _022E0618 ; =DUNGEON_PTR
|
|
mov r5, r7
|
|
mov r6, #1
|
|
mov fp, r7
|
|
_022E044C:
|
|
ldr r0, [r4]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r8, [r0, #0xa94]
|
|
#else
|
|
ldr r8, [r0, #0xb38]
|
|
#endif
|
|
mov r0, r8
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E04B4
|
|
ldr sl, [r8, #0xb4]
|
|
mov sb, r6
|
|
ldrb r0, [sl, #9]
|
|
cmp r0, #1
|
|
mov r0, sl
|
|
moveq sb, r5
|
|
bl IsExperienceLocked
|
|
cmp r0, #0
|
|
ldrb r0, [sl, #0xbc]
|
|
movne sb, fp
|
|
cmp r0, #7
|
|
moveq sb, #0
|
|
cmp sb, #0
|
|
beq _022E04B4
|
|
ldr r1, _022E061C ; =0x00000246
|
|
mov r0, r8
|
|
mov r2, r8
|
|
bl HandleFaint
|
|
_022E04B4:
|
|
add r7, r7, #1
|
|
cmp r7, #0x10
|
|
blt _022E044C
|
|
#ifdef JAPAN
|
|
mov r6, #0
|
|
_022E04C4:
|
|
ldr r0, _022E0618 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r4, [r0, #0xa84]
|
|
mov r0, r4
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E1C2C
|
|
mov r0, #0
|
|
mov r3, #1
|
|
strb r0, [r4, #0x22]
|
|
strb r3, [r4, #0x20]
|
|
ldr r5, [r4, #0xb4]
|
|
rsb r0, r3, #0x3e8
|
|
ldrsh r2, [r5, #0x12]
|
|
ldrsh r1, [r5, #0x16]
|
|
ldr r3, _022E0618 ; =DUNGEON_PTR
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
strh r1, [r5, #0x10]
|
|
add r2, r5, #0x100
|
|
ldrh r0, [r2, #0x46]
|
|
mov r1, #0
|
|
strh r0, [r2, #0x42]
|
|
ldrh r4, [r2, #0x48]
|
|
mov r0, r5
|
|
strh r4, [r2, #0x44]
|
|
ldr r2, [r3]
|
|
strb r1, [r2, #0x78d]
|
|
bl SubInitMonster
|
|
ldrsh r0, [r5, #2]
|
|
mov r4, #0
|
|
add r8, r5, #0x120
|
|
strh r0, [r5, #4]
|
|
strb r4, [r5, #0x105]
|
|
mov r5, r4
|
|
mov r7, #1
|
|
_022E1BF8:
|
|
ldrb r0, [r8, r4, lsl #3]
|
|
add sb, r8, r4, lsl #3
|
|
tst r0, #1
|
|
movne r0, r7
|
|
moveq r0, r5
|
|
tst r0, #0xff
|
|
beq _022E1C20
|
|
mov r0, sb
|
|
bl GetMaxPpWrapper
|
|
strb r0, [sb, #6]
|
|
_022E1C20:
|
|
add r4, r4, #1
|
|
cmp r4, #4
|
|
blt _022E1BF8
|
|
_022E1C2C:
|
|
add r6, r6, #1
|
|
cmp r6, #4
|
|
#else
|
|
mov r8, #0
|
|
_022E04C4:
|
|
ldr r0, _022E0618 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r8, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r6, [r0, #0xb28]
|
|
mov r0, r6
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E05A0
|
|
mov r0, #0
|
|
mov r3, #1
|
|
strb r0, [r6, #0x22]
|
|
strb r3, [r6, #0x20]
|
|
ldr r4, [r6, #0xb4]
|
|
rsb r0, r3, #0x3e8
|
|
ldrsh r2, [r4, #0x12]
|
|
ldrsh r1, [r4, #0x16]
|
|
ldr r3, _022E0618 ; =DUNGEON_PTR
|
|
add r1, r2, r1
|
|
cmp r1, r0
|
|
movgt r1, r0
|
|
strh r1, [r4, #0x10]
|
|
add r2, r4, #0x100
|
|
ldrh r0, [r2, #0x4a]
|
|
mov r1, #0
|
|
strh r0, [r2, #0x46]
|
|
ldrh r5, [r2, #0x4c]
|
|
mov r0, r4
|
|
strh r5, [r2, #0x48]
|
|
ldr r2, [r3]
|
|
strb r1, [r2, #0x78d]
|
|
bl SubInitMonster
|
|
ldrsh r0, [r4, #2]
|
|
mov r5, #0
|
|
mov sb, r5
|
|
strh r0, [r4, #4]
|
|
strb r5, [r4, #0x106]
|
|
str r5, [r4, #0x188]
|
|
add r4, r4, #0x124
|
|
mov sl, #1
|
|
_022E0564:
|
|
ldrb r0, [r4, r5, lsl #3]
|
|
add r7, r4, r5, lsl #3
|
|
tst r0, #1
|
|
movne r0, sl
|
|
moveq r0, sb
|
|
tst r0, #0xff
|
|
beq _022E058C
|
|
mov r0, r7
|
|
bl GetMaxPpWrapper
|
|
strb r0, [r7, #6]
|
|
_022E058C:
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _022E0564
|
|
mov r0, r6
|
|
bl CalcSpeedStageWrapper
|
|
_022E05A0:
|
|
add r8, r8, #1
|
|
cmp r8, #4
|
|
#endif
|
|
blt _022E04C4
|
|
mov r8, #0
|
|
mov r4, #5
|
|
mov r5, r8
|
|
_022E05B8:
|
|
mov r6, r5
|
|
_022E05BC:
|
|
mov r0, r6
|
|
mov r1, r8
|
|
bl GetTileSafe
|
|
ldr r7, [r0, #0x10]
|
|
mov r0, r7
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E05FC
|
|
ldr r0, [r7]
|
|
cmp r0, #2
|
|
bne _022E05FC
|
|
mov r0, r7
|
|
bl GetTrapInfo
|
|
ldrb r1, [r0]
|
|
cmp r1, #0x20
|
|
streqb r4, [r0]
|
|
_022E05FC:
|
|
add r6, r6, #1
|
|
cmp r6, #0x38
|
|
blt _022E05BC
|
|
add r8, r8, #1
|
|
cmp r8, #0x20
|
|
blt _022E05B8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_022E0618: .word DUNGEON_PTR
|
|
_022E061C: .word 0x00000246
|
|
arm_func_end ov29_022E0434
|
|
|
|
arm_func_start TryForcedLoss
|
|
TryForcedLoss: ; 0x022E0620
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r5, r0
|
|
mov r6, #0
|
|
bl ov29_0234B034
|
|
cmp r5, #0
|
|
bne _022E0648
|
|
bl IsFloorOver
|
|
cmp r0, #0
|
|
movne r0, r6
|
|
ldmneia sp!, {r4, r5, r6, pc}
|
|
_022E0648:
|
|
bl GetForcedLossReason
|
|
cmp r0, #1
|
|
bne _022E06C8
|
|
bl GetLeader
|
|
mov r4, r0
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E07F8
|
|
cmp r5, #0
|
|
bne _022E0698
|
|
ldr r1, _022E0800 ; =DUNGEON_PTR
|
|
mov r0, #0
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x248
|
|
add r1, r1, #0x400
|
|
bl ov29_0234B0B4
|
|
#ifdef JAPAN
|
|
ldr r1, _022E1E90 ; =0x00000881
|
|
mov r0, #0
|
|
#else
|
|
mov r0, #0
|
|
mov r1, #0xb70
|
|
#endif
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
_022E0698:
|
|
ldr r0, _022E0800 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x75f]
|
|
cmp r0, #0
|
|
beq _022E06B0
|
|
bl ov29_022E0A18
|
|
_022E06B0:
|
|
ldr r1, _022E0804 ; =0x0000025E
|
|
mov r0, r4
|
|
mov r2, r4
|
|
bl HandleFaint
|
|
mov r6, #1
|
|
b _022E07F8
|
|
_022E06C8:
|
|
bl GetForcedLossReason
|
|
cmp r0, #2
|
|
bne _022E0738
|
|
bl GetLeader
|
|
mov r4, r0
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E07F8
|
|
cmp r5, #0
|
|
bne _022E0718
|
|
ldr r1, _022E0800 ; =DUNGEON_PTR
|
|
mov r0, #0
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x248
|
|
add r1, r1, #0x400
|
|
bl ov29_0234B0B4
|
|
ldr r1, _022E0808 ; =0x00000B71
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
_022E0718:
|
|
mov r0, r4
|
|
bl ov29_022E68BC
|
|
ldr r1, _022E080C ; =0x00000261
|
|
mov r0, r4
|
|
mov r2, r4
|
|
bl HandleFaint
|
|
mov r6, #1
|
|
b _022E07F8
|
|
_022E0738:
|
|
bl GetForcedLossReason
|
|
cmp r0, #3
|
|
bne _022E07BC
|
|
bl GetLeader
|
|
mov r4, r0
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E07F8
|
|
ldr r0, _022E0800 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #0x75f]
|
|
cmp r0, #0
|
|
beq _022E0774
|
|
bl ov29_022E0A18
|
|
b _022E07A4
|
|
_022E0774:
|
|
cmp r5, #0
|
|
bne _022E079C
|
|
add r0, r1, #0x248
|
|
add r1, r0, #0x400
|
|
mov r0, #0
|
|
bl ov29_0234B0B4
|
|
ldr r1, _022E0810 ; =0x00000B72
|
|
mov r0, #0
|
|
mov r2, #1
|
|
bl DisplayMessage2
|
|
_022E079C:
|
|
mov r0, r4
|
|
bl ov29_022E68BC
|
|
_022E07A4:
|
|
ldr r1, _022E0814 ; =0x00000266
|
|
mov r0, r4
|
|
mov r2, r4
|
|
bl HandleFaint
|
|
mov r6, #1
|
|
b _022E07F8
|
|
_022E07BC:
|
|
bl GetForcedLossReason
|
|
cmp r0, #4
|
|
bne _022E07F8
|
|
bl GetLeader
|
|
mov r4, r0
|
|
bl EntityIsValid__022E0354
|
|
cmp r0, #0
|
|
beq _022E07F8
|
|
mov r0, r4
|
|
bl ov29_022E68BC
|
|
ldr r1, _022E0818 ; =0x00000265
|
|
mov r0, r4
|
|
mov r2, r4
|
|
bl HandleFaint
|
|
mov r6, #1
|
|
_022E07F8:
|
|
mov r0, r6
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_022E0800: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
#define TRY_FORCED_LOSS_OFFSET -0x2EF
|
|
_022E1E90: .word 0x00000881
|
|
#else
|
|
#define TRY_FORCED_LOSS_OFFSET 0
|
|
#endif
|
|
_022E0804: .word 0x0000025E
|
|
_022E0808: .word 0x00000B71 + TRY_FORCED_LOSS_OFFSET
|
|
_022E080C: .word 0x00000261
|
|
_022E0810: .word 0x00000B72 + TRY_FORCED_LOSS_OFFSET
|
|
_022E0814: .word 0x00000266
|
|
_022E0818: .word 0x00000265
|
|
arm_func_end TryForcedLoss
|
|
|
|
arm_func_start ov29_022E081C
|
|
ov29_022E081C: ; 0x022E081C
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _022E0860 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl GetMaxItemsAllowed
|
|
cmp r0, #0
|
|
bne _022E083C
|
|
bl RemoveAllItems
|
|
_022E083C:
|
|
ldr r0, _022E0860 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl IsMoneyAllowed
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, pc}
|
|
mov r0, #0
|
|
bl SetMoneyCarried
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0860: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E081C
|
|
|
|
arm_func_start IsBossFight
|
|
IsBossFight: ; 0x022E0864
|
|
cmp r0, #0
|
|
beq _022E0878
|
|
cmp r0, #0x51
|
|
movlo r0, #1
|
|
bxlo lr
|
|
_022E0878:
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end IsBossFight
|
|
|
|
arm_func_start IsCurrentFixedRoomBossFight
|
|
IsCurrentFixedRoomBossFight: ; 0x022E0880
|
|
ldr r0, _022E0898 ; =DUNGEON_PTR
|
|
ldr ip, _022E089C ; =IsBossFight
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x36]
|
|
#else
|
|
ldrb r0, [r0, #0xda]
|
|
#endif
|
|
bx ip
|
|
.align 2, 0
|
|
_022E0898: .word DUNGEON_PTR
|
|
_022E089C: .word IsBossFight
|
|
arm_func_end IsCurrentFixedRoomBossFight
|
|
|
|
arm_func_start IsMarowakTrainingMaze
|
|
IsMarowakTrainingMaze: ; 0x022E08A0
|
|
ldr r0, _022E08C8 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
cmp r0, #0xb4
|
|
blo _022E08C0
|
|
cmp r0, #0xbe
|
|
movls r0, #1
|
|
bxls lr
|
|
_022E08C0:
|
|
mov r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_022E08C8: .word DUNGEON_PTR
|
|
arm_func_end IsMarowakTrainingMaze
|
|
|
|
arm_func_start FixedRoomIsSubstituteRoom
|
|
FixedRoomIsSubstituteRoom: ; 0x022E08CC
|
|
ldr r0, _022E08F0 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x36]
|
|
#else
|
|
ldrb r0, [r0, #0xda]
|
|
#endif
|
|
cmp r0, #0x6e
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
.align 2, 0
|
|
_022E08F0: .word DUNGEON_PTR
|
|
arm_func_end FixedRoomIsSubstituteRoom
|
|
|
|
arm_func_start ov29_022E08F4
|
|
ov29_022E08F4: ; 0x022E08F4
|
|
ldr r0, _022E0924 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
bxeq lr
|
|
add r0, r0, #0x700
|
|
ldrsb r0, [r0, #0x98]
|
|
cmp r0, #3
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0924: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E08F4
|
|
|
|
arm_func_start StoryRestrictionsEnabled
|
|
StoryRestrictionsEnabled: ; 0x022E0928
|
|
ldr r0, _022E0958 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #0x75c]
|
|
cmp r0, #0
|
|
beq _022E0948
|
|
ldrb r0, [r1, #0x75e]
|
|
cmp r0, #0
|
|
beq _022E0950
|
|
_022E0948:
|
|
mov r0, #1
|
|
bx lr
|
|
_022E0950:
|
|
mov r0, #0
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0958: .word DUNGEON_PTR
|
|
arm_func_end StoryRestrictionsEnabled
|
|
|
|
arm_func_start GetScenarioBalanceVeneer
|
|
GetScenarioBalanceVeneer: ; 0x022E095C
|
|
ldr ip, _022E0964 ; =GetScenarioBalance
|
|
bx ip
|
|
.align 2, 0
|
|
_022E0964: .word GetScenarioBalance
|
|
arm_func_end GetScenarioBalanceVeneer
|
|
|
|
arm_func_start FadeToBlack
|
|
FadeToBlack: ; 0x022E0968
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0
|
|
bl ov29_0233A248
|
|
bl ov29_022E0DFC
|
|
mov r0, #2
|
|
mov r1, #0x1000
|
|
mov r2, #0
|
|
bl StartFadeDungeonWrapper
|
|
mov r0, #2
|
|
mov r1, #0x1000
|
|
mov r2, #1
|
|
bl StartFadeDungeonWrapper
|
|
mov r0, #0
|
|
bl ov29_0234C738
|
|
bl ov29_022E0E44
|
|
mov r0, #1
|
|
bl ov29_0233A248
|
|
bl ov29_022DE854
|
|
bl ov29_022DE15C
|
|
bl ov29_022E8778
|
|
mov r0, #2
|
|
mov r1, #0x4f
|
|
bl ov29_022EA370
|
|
mov r0, #1
|
|
bl ov29_022E34B0
|
|
mov r1, #1
|
|
ldr r0, _022E09E4 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
strb r1, [r0, #0x1a9]
|
|
#else
|
|
strb r1, [r0, #0x24d]
|
|
#endif
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E09E4: .word DUNGEON_PTR
|
|
arm_func_end FadeToBlack
|
|
|
|
arm_func_start ov29_022E09E8
|
|
ov29_022E09E8: ; 0x022E09E8
|
|
ldr r2, _022E0A00 ; =DUNGEON_PTR
|
|
ldr r3, [r2]
|
|
str r0, [r3, #0x18]
|
|
ldr r0, [r2]
|
|
strb r1, [r0, #8]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0A00: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E09E8
|
|
|
|
arm_func_start ov29_022E0A04
|
|
ov29_022E0A04: ; 0x022E0A04
|
|
ldr r0, _022E0A14 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldr r0, [r0, #0x18]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0A14: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E0A04
|
|
|
|
arm_func_start ov29_022E0A18
|
|
ov29_022E0A18: ; 0x022E0A18
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0
|
|
bl AnimationDelayOrSomething
|
|
mov r0, #0
|
|
bl ov29_0234B1A4
|
|
mov r0, #0
|
|
bl ov29_022E8BFC
|
|
mov r0, #0
|
|
bl SetMinimapDataE447
|
|
ldr r0, _022E0A60 ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x1a000
|
|
#ifdef JAPAN
|
|
strb r1, [r0, #0x1a9]
|
|
#else
|
|
strb r1, [r0, #0x24d]
|
|
#endif
|
|
bl FadeToBlack
|
|
mov r0, #0
|
|
bl ov29_022E9FD0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0A60: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E0A18
|
|
|
|
arm_func_start ov29_022E0A64
|
|
ov29_022E0A64: ; 0x022E0A64
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _022E0B34 ; =ov29_0237C694
|
|
mov r0, #0
|
|
bl GetHeldButtons
|
|
ldr r1, _022E0B38 ; =ov29_0237C696
|
|
mov r0, #0
|
|
bl GetPressedButtons
|
|
ldr r1, _022E0B3C ; =ov29_0237C698
|
|
mov r0, #0
|
|
bl sub_020063F4
|
|
ldr r0, _022E0B40 ; =ov29_0237C694
|
|
mov r1, #0
|
|
strh r1, [r0, #8]
|
|
ldrh r1, [r0]
|
|
tst r1, #2
|
|
ldrsh r1, [r0, #0xa]
|
|
beq _022E0AB8
|
|
cmp r1, #0x64
|
|
addlt r1, r1, #1
|
|
strlth r1, [r0, #0xa]
|
|
b _022E0ADC
|
|
_022E0AB8:
|
|
cmp r1, #2
|
|
blt _022E0AD0
|
|
cmp r1, #0xc
|
|
ldrlth r1, [r0, #8]
|
|
orrlt r1, r1, #2
|
|
strlth r1, [r0, #8]
|
|
_022E0AD0:
|
|
ldr r0, _022E0B40 ; =ov29_0237C694
|
|
mov r1, #0
|
|
strh r1, [r0, #0xa]
|
|
_022E0ADC:
|
|
ldr r0, _022E0B40 ; =ov29_0237C694
|
|
ldrh r1, [r0]
|
|
tst r1, #0x100
|
|
ldrsh r1, [r0, #0xc]
|
|
beq _022E0B00
|
|
cmp r1, #0x64
|
|
addlt r1, r1, #1
|
|
strlth r1, [r0, #0xc]
|
|
b _022E0B24
|
|
_022E0B00:
|
|
cmp r1, #2
|
|
blt _022E0B18
|
|
cmp r1, #0xc
|
|
ldrlth r1, [r0, #8]
|
|
orrlt r1, r1, #0x100
|
|
strlth r1, [r0, #8]
|
|
_022E0B18:
|
|
ldr r0, _022E0B40 ; =ov29_0237C694
|
|
mov r1, #0
|
|
strh r1, [r0, #0xc]
|
|
_022E0B24:
|
|
ldr r0, _022E0B40 ; =ov29_0237C694
|
|
ldrh r1, [r0, #8]
|
|
strh r1, [r0, #6]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0B34: .word ov29_0237C694
|
|
_022E0B38: .word ov29_0237C696
|
|
_022E0B3C: .word ov29_0237C698
|
|
_022E0B40: .word ov29_0237C694
|
|
arm_func_end ov29_022E0A64
|
|
|
|
arm_func_start ov29_022E0B44
|
|
ov29_022E0B44: ; 0x022E0B44
|
|
ldr r1, _022E0B58 ; =0x000003E7
|
|
ldr r0, _022E0B5C ; =ov29_0237C694
|
|
strh r1, [r0, #0xa]
|
|
strh r1, [r0, #0xc]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0B58: .word 0x000003E7
|
|
_022E0B5C: .word ov29_0237C694
|
|
arm_func_end ov29_022E0B44
|
|
|
|
arm_func_start ov29_022E0B60
|
|
ov29_022E0B60: ; 0x022E0B60
|
|
stmdb sp!, {r3, lr}
|
|
bl sub_0204AE80
|
|
cmp r0, #0
|
|
beq _022E0C18
|
|
ldr r0, _022E0C24 ; =ov29_0237C6A4
|
|
bl GetReleasedStylus
|
|
ldr r0, _022E0C28 ; =ov29_0237C6A4
|
|
ldrb r1, [r0, #0x2c]
|
|
cmp r1, #0
|
|
beq _022E0B98
|
|
ldrh r1, [r0]
|
|
tst r1, #0x40
|
|
moveq r1, #0
|
|
streqb r1, [r0, #0x2c]
|
|
_022E0B98:
|
|
ldr r0, _022E0C28 ; =ov29_0237C6A4
|
|
mov r2, #0
|
|
ldrh r3, [r0]
|
|
strh r2, [r0, #0x24]
|
|
tst r3, #0x80
|
|
beq _022E0BD0
|
|
ldrh r1, [r0, #0x24]
|
|
tst r3, #0x1000
|
|
orr r1, r1, #0x80
|
|
strh r1, [r0, #0x24]
|
|
str r2, [r0, #0x28]
|
|
movne r1, #1
|
|
strneb r1, [r0, #0x26]
|
|
ldmia sp!, {r3, pc}
|
|
_022E0BD0:
|
|
tst r3, #0x40
|
|
beq _022E0C0C
|
|
ldr r1, [r0, #0x28]
|
|
cmp r1, #3
|
|
bls _022E0C00
|
|
ldrh r1, [r0, #0x24]
|
|
tst r3, #0x1000
|
|
orr r1, r1, #0x40
|
|
strh r1, [r0, #0x24]
|
|
movne r1, #1
|
|
strneb r1, [r0, #0x26]
|
|
ldmia sp!, {r3, pc}
|
|
_022E0C00:
|
|
add r1, r1, #1
|
|
str r1, [r0, #0x28]
|
|
ldmia sp!, {r3, pc}
|
|
_022E0C0C:
|
|
strb r2, [r0, #0x26]
|
|
str r2, [r0, #0x28]
|
|
ldmia sp!, {r3, pc}
|
|
_022E0C18:
|
|
ldr r0, _022E0C24 ; =ov29_0237C6A4
|
|
bl sub_02006BFC
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0C24: .word ov29_0237C6A4
|
|
_022E0C28: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0B60
|
|
|
|
arm_func_start ov29_022E0C2C
|
|
ov29_022E0C2C: ; 0x022E0C2C
|
|
ldr r1, _022E0C38 ; =ov29_0237C6A4
|
|
strb r0, [r1, #0x2c]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0C38: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0C2C
|
|
|
|
arm_func_start ov29_022E0C3C
|
|
ov29_022E0C3C: ; 0x022E0C3C
|
|
ldr r0, _022E0C48 ; =ov29_0237C6A4
|
|
ldrb r0, [r0, #0x2c]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0C48: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0C3C
|
|
|
|
arm_func_start ov29_022E0C4C
|
|
ov29_022E0C4C: ; 0x022E0C4C
|
|
stmdb sp!, {r3, lr}
|
|
bl sub_02006564
|
|
ldr r0, _022E0C60 ; =ov29_0237C6A4
|
|
bl sub_02006BFC
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0C60: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0C4C
|
|
|
|
arm_func_start ov29_022E0C64
|
|
ov29_022E0C64: ; 0x022E0C64
|
|
ldr r1, _022E0C7C ; =ov29_0237C6A4
|
|
ldr r2, [r1, #4]
|
|
ldr r1, [r1, #8]
|
|
str r2, [r0]
|
|
str r1, [r0, #4]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0C7C: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0C64
|
|
|
|
arm_func_start ov29_022E0C80
|
|
ov29_022E0C80: ; 0x022E0C80
|
|
ldr r1, _022E0C98 ; =ov29_0237C6A4
|
|
ldr r2, [r1, #0xc]
|
|
ldr r1, [r1, #0x10]
|
|
str r2, [r0]
|
|
str r1, [r0, #4]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0C98: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0C80
|
|
|
|
arm_func_start ov29_022E0C9C
|
|
ov29_022E0C9C: ; 0x022E0C9C
|
|
ldr r1, _022E0CB4 ; =ov29_0237C6A4
|
|
ldr r2, [r1, #0x14]
|
|
ldr r1, [r1, #0x18]
|
|
str r2, [r0]
|
|
str r1, [r0, #4]
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0CB4: .word ov29_0237C6A4
|
|
arm_func_end ov29_022E0C9C
|
|
|
|
arm_func_start CheckTouchscreenArea
|
|
CheckTouchscreenArea: ; 0x022E0CB8
|
|
stmdb sp!, {r3, lr}
|
|
ldr lr, _022E0CF8 ; =ov29_0237C6B8
|
|
ldr ip, [lr]
|
|
cmp r0, ip
|
|
bgt _022E0CE8
|
|
cmp r2, ip
|
|
blt _022E0CE8
|
|
ldr r0, [lr, #4]
|
|
cmp r1, r0
|
|
bgt _022E0CE8
|
|
cmp r3, r0
|
|
bge _022E0CF0
|
|
_022E0CE8:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
_022E0CF0:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E0CF8: .word ov29_0237C6B8
|
|
arm_func_end CheckTouchscreenArea
|
|
|
|
arm_func_start ov29_022E0CFC
|
|
ov29_022E0CFC: ; 0x022E0CFC
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0
|
|
bl sub_020091CC
|
|
mov r0, #1
|
|
bl sub_020091CC
|
|
bl ov29_022E0E8C
|
|
mov r0, #0
|
|
mov r2, r0
|
|
mov r1, #1
|
|
bl sub_02009454
|
|
mov r0, #1
|
|
mov r1, #2
|
|
mov r2, #0
|
|
bl sub_02009454
|
|
mov r0, #2
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_02009454
|
|
mov r0, #3
|
|
mov r1, #2
|
|
mov r2, #0
|
|
bl sub_02009454
|
|
mov r0, #4
|
|
mov r1, #2
|
|
mov r2, #0
|
|
bl sub_02009454
|
|
mov r0, #0x40
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020094C4
|
|
mov r0, #0
|
|
mov r1, #2
|
|
mov r2, #1
|
|
bl sub_02009454
|
|
mov r0, #1
|
|
mov r1, #2
|
|
mov r2, r0
|
|
bl sub_02009454
|
|
mov r0, #2
|
|
mov r1, r0
|
|
mov r2, #1
|
|
bl sub_02009454
|
|
mov r0, #3
|
|
mov r1, #2
|
|
mov r2, #1
|
|
bl sub_02009454
|
|
mov r0, #4
|
|
mov r1, #2
|
|
mov r2, #1
|
|
bl sub_02009454
|
|
mov r0, #0x40
|
|
mov r1, r0
|
|
mov r2, #1
|
|
bl sub_020094C4
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022E0CFC
|
|
|
|
arm_func_start ov29_022E0DD8
|
|
ov29_022E0DD8: ; 0x022E0DD8
|
|
ldr ip, _022E0DE0 ; =sub_02009194
|
|
bx ip
|
|
.align 2, 0
|
|
_022E0DE0: .word sub_02009194
|
|
arm_func_end ov29_022E0DD8
|
|
|
|
arm_func_start ov29_022E0DE4
|
|
ov29_022E0DE4: ; 0x022E0DE4
|
|
ldr ip, _022E0DEC ; =sub_020091B0
|
|
bx ip
|
|
.align 2, 0
|
|
_022E0DEC: .word sub_020091B0
|
|
arm_func_end ov29_022E0DE4
|
|
|
|
arm_func_start ov29_022E0DF0
|
|
ov29_022E0DF0: ; 0x022E0DF0
|
|
ldr ip, _022E0DF8 ; =sub_020091CC
|
|
bx ip
|
|
.align 2, 0
|
|
_022E0DF8: .word sub_020091CC
|
|
arm_func_end ov29_022E0DF0
|
|
|
|
arm_func_start ov29_022E0DFC
|
|
ov29_022E0DFC: ; 0x022E0DFC
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl sub_020090A0
|
|
mov r0, #1
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
mov r0, #2
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
mov r0, #3
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022E0DFC
|
|
|
|
arm_func_start ov29_022E0E44
|
|
ov29_022E0E44: ; 0x022E0E44
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0
|
|
mov r2, r0
|
|
mov r1, #1
|
|
bl sub_020090A0
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mov r0, #1
|
|
bl sub_020090A0
|
|
mov r0, #2
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
mov r0, #3
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022E0E44
|
|
|
|
arm_func_start ov29_022E0E8C
|
|
ov29_022E0E8C: ; 0x022E0E8C
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0
|
|
mov r2, r0
|
|
mov r1, #1
|
|
bl sub_020090A0
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mov r0, #1
|
|
bl sub_020090A0
|
|
mov r0, #2
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
mov r0, #3
|
|
mov r1, r0
|
|
mov r2, #0
|
|
bl sub_020090A0
|
|
mov r0, #0
|
|
mov r1, r0
|
|
mov r2, #1
|
|
bl sub_020090A0
|
|
mov r0, #1
|
|
mov r1, r0
|
|
mov r2, r0
|
|
bl sub_020090A0
|
|
mov r0, #2
|
|
mov r1, r0
|
|
mov r2, #1
|
|
bl sub_020090A0
|
|
mov r0, #3
|
|
mov r1, r0
|
|
mov r2, #1
|
|
bl sub_020090A0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end ov29_022E0E8C
|
|
|
|
arm_func_start ov29_022E0F14
|
|
ov29_022E0F14: ; 0x022E0F14
|
|
ldr ip, _022E0F28 ; =sub_02008F3C
|
|
mov r2, r0, lsl #0x14
|
|
mov r0, r1
|
|
mov r1, r2, asr #0x10
|
|
bx ip
|
|
.align 2, 0
|
|
_022E0F28: .word sub_02008F3C
|
|
arm_func_end ov29_022E0F14
|
|
|
|
arm_func_start ov29_022E0F2C
|
|
ov29_022E0F2C: ; 0x022E0F2C
|
|
ldr r3, _022E0F64 ; =_020AFC4C
|
|
mov r2, #0x70
|
|
ldr ip, [r3]
|
|
ldr r3, _022E0F68 ; =_020AFC28
|
|
mla r2, r1, r2, ip
|
|
ldrh r1, [r2, #0xc]
|
|
ldr ip, [r2, #0x64]
|
|
mov r2, r1, lsr #0x1f
|
|
rsb r1, r2, r1, lsl #30
|
|
add r1, r2, r1, ror #30
|
|
mov r1, r1, lsl #1
|
|
ldrsh r1, [r3, r1]
|
|
smlabb r0, r0, r1, ip
|
|
bx lr
|
|
.align 2, 0
|
|
_022E0F64: .word _020AFC4C
|
|
_022E0F68: .word _020AFC28
|
|
arm_func_end ov29_022E0F2C
|
|
|
|
arm_func_start ov29_022E0F6C
|
|
ov29_022E0F6C: ; 0x022E0F6C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #0x74
|
|
ldr r3, _022E11D0 ; =ov29_023510E0
|
|
add r2, sp, #0x28
|
|
mov r1, #0x16
|
|
_022E0F80:
|
|
ldrh r0, [r3], #2
|
|
subs r1, r1, #1
|
|
strh r0, [r2], #2
|
|
bne _022E0F80
|
|
ldr r1, _022E11D4 ; =0x000003E5
|
|
add r2, sp, #8
|
|
mov r0, #4
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, [sp, #8]
|
|
add r0, sp, #0x14
|
|
bl HandleSir0Translation
|
|
mov r0, #0xb0
|
|
str r0, [sp]
|
|
mov r0, #0xff
|
|
str r0, [sp, #4]
|
|
ldr r1, [sp, #0x14]
|
|
add r0, sp, #0x54
|
|
mov r2, #1
|
|
mov r3, #0x20
|
|
bl sub_0201F598
|
|
ldr r0, _022E11D8 ; =_020AFC4C
|
|
add r1, sp, #0x54
|
|
ldr r0, [r0]
|
|
mov r2, #0
|
|
bl sub_0201B43C
|
|
add r0, sp, #8
|
|
bl UnloadFile
|
|
ldr r1, _022E11DC ; =0x000003E3
|
|
mov r0, #4
|
|
add r2, sp, #8
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, [sp, #8]
|
|
add r0, sp, #0x10
|
|
bl HandleSir0Translation
|
|
ldr r1, [sp, #0x10]
|
|
mov r0, #0x1d0
|
|
add r1, r1, #4
|
|
str r1, [sp, #0x10]
|
|
mov r1, #0
|
|
bl ov29_022E0F2C
|
|
mov r7, #0
|
|
add r6, sp, #0x28
|
|
mov r5, r7
|
|
mov r4, #0xb
|
|
_022E1038:
|
|
mov r0, r7, lsl #2
|
|
add r1, r6, r7, lsl #2
|
|
ldrsh r0, [r6, r0]
|
|
ldrsh r8, [r1, #2]
|
|
mov r1, r5
|
|
bl ov29_022E0F2C
|
|
ldr r1, [sp, #0x10]
|
|
mov r3, r4
|
|
mov r2, r8, lsl #1
|
|
bl CopyAndInterleaveWrapper
|
|
mov r0, r8, asr #1
|
|
add r0, r8, r0, lsr #30
|
|
add r7, r7, #1
|
|
ldr r1, [sp, #0x10]
|
|
mov r0, r0, asr #2
|
|
add r0, r1, r0, lsl #2
|
|
str r0, [sp, #0x10]
|
|
cmp r7, #0xb
|
|
blo _022E1038
|
|
add r0, sp, #8
|
|
bl UnloadFile
|
|
ldr r1, _022E11E0 ; =0x000003E7
|
|
add r2, sp, #8
|
|
mov r0, #4
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, [sp, #8]
|
|
add r0, sp, #0x18
|
|
bl HandleSir0Translation
|
|
mov r2, #0
|
|
str r2, [sp]
|
|
mov r0, #0xff
|
|
str r0, [sp, #4]
|
|
ldr r1, [sp, #0x18]
|
|
add r0, sp, #0x64
|
|
mov r3, #0x10
|
|
bl sub_0201F598
|
|
ldr r0, _022E11D8 ; =_020AFC4C
|
|
add r1, sp, #0x64
|
|
ldr r0, [r0]
|
|
mov r2, #0xc
|
|
add r0, r0, #0x70
|
|
bl sub_0201B43C
|
|
add r0, sp, #8
|
|
bl UnloadFile
|
|
ldr r1, _022E11E4 ; =0x000003E6
|
|
mov r0, #4
|
|
add r2, sp, #8
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, [sp, #8]
|
|
add r0, sp, #0x1c
|
|
bl HandleSir0Translation
|
|
ldr r1, [sp, #0x1c]
|
|
mov r0, #0x70
|
|
add r1, r1, #4
|
|
str r1, [sp, #0x1c]
|
|
mov r1, #1
|
|
bl ov29_022E0F2C
|
|
ldr r1, [sp, #0x1c]
|
|
mov r2, #0x80
|
|
bl Memcpy32
|
|
add r0, sp, #8
|
|
bl UnloadFile
|
|
ldr r2, _022E11E8 ; =ov29_02353544
|
|
mov r0, #4
|
|
mov r1, #0x3e4
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, _022E11EC ; =ov29_02353540
|
|
ldr r0, _022E11F0 ; =ov29_02353540
|
|
ldr r1, [r1, #4]
|
|
bl HandleSir0Translation
|
|
add r0, sp, #0x20
|
|
mov r1, #4
|
|
#ifdef JAPAN
|
|
mov r2, #0x3f4
|
|
#else
|
|
mov r2, #0x400
|
|
#endif
|
|
mov r3, #0
|
|
bl LoadWteFromFileDirectory
|
|
mov r6, #0
|
|
mov r5, r6
|
|
ldr r4, _022E11F4 ; =_020AFC70
|
|
b _022E11A8
|
|
_022E1180:
|
|
ldr r0, [r4]
|
|
ldr r1, [r1, #0x18]
|
|
mov r2, r5
|
|
mov r3, r6
|
|
add r0, r0, #0xcc
|
|
add r1, r1, r6, lsl #2
|
|
bl sub_0201E380
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
_022E11A8:
|
|
ldr r1, [sp, #0x24]
|
|
ldrsh r0, [r1, #0x1c]
|
|
cmp r6, r0
|
|
blt _022E1180
|
|
add r0, sp, #0x20
|
|
bl UnloadWte
|
|
bl LoadTextureUi
|
|
bl ov29_02335774
|
|
add sp, sp, #0x74
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E11D0: .word ov29_023510E0
|
|
_022E11D4: .word 0x000003E5
|
|
_022E11D8: .word _020AFC4C
|
|
_022E11DC: .word 0x000003E3
|
|
_022E11E0: .word 0x000003E7
|
|
_022E11E4: .word 0x000003E6
|
|
_022E11E8: .word ov29_02353544
|
|
_022E11EC: .word ov29_02353540
|
|
_022E11F0: .word ov29_02353540
|
|
_022E11F4: .word _020AFC70
|
|
arm_func_end ov29_022E0F6C
|
|
|
|
arm_func_start ov29_022E11F8
|
|
ov29_022E11F8: ; 0x022E11F8
|
|
stmdb sp!, {r3, r4, lr}
|
|
sub sp, sp, #0xc
|
|
ldr r1, _022E12EC ; =0x00000409
|
|
add r2, sp, #4
|
|
mov r0, #4
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, [sp, #4]
|
|
add r0, sp, #0
|
|
bl HandleSir0Translation
|
|
ldr lr, [sp]
|
|
mov r4, #0
|
|
ldr ip, _022E12F0 ; =ov29_0237C6D4
|
|
b _022E1254
|
|
_022E1230:
|
|
ldr r0, [lr, #8]
|
|
add r2, ip, r4, lsl #2
|
|
add r3, r0, r4, lsl #2
|
|
mov r1, #4
|
|
_022E1240:
|
|
ldrb r0, [r3], #1
|
|
subs r1, r1, #1
|
|
strb r0, [r2], #1
|
|
bne _022E1240
|
|
add r4, r4, #1
|
|
_022E1254:
|
|
ldr r0, [lr, #0xc]
|
|
cmp r4, r0
|
|
blt _022E1230
|
|
ldr r1, [lr, #4]
|
|
mov r0, #0x120
|
|
mul r4, r1, r0
|
|
bl IsCurrentTilesetBackground
|
|
cmp r0, #0
|
|
bne _022E1298
|
|
mov r0, #0x5000
|
|
mov r1, #1
|
|
mov r2, #0
|
|
bl GetBgRegionArea
|
|
ldr r1, [sp]
|
|
mov r2, r4
|
|
ldr r1, [r1]
|
|
bl Memcpy32
|
|
_022E1298:
|
|
mov r1, #0
|
|
mov r2, r1
|
|
mov r0, #0x5e00
|
|
bl GetBgRegionArea
|
|
mov r1, #0
|
|
mov r2, #0x20
|
|
bl Memset32
|
|
mov r1, #0
|
|
ldr r0, _022E12F4 ; =0x00005E20
|
|
mov r2, r1
|
|
bl GetBgRegionArea
|
|
ldr r1, [sp]
|
|
mov r2, #0x240
|
|
ldr r1, [r1]
|
|
add r1, r1, #0xc20
|
|
add r1, r1, #0x1000
|
|
bl Memcpy32
|
|
add r0, sp, #4
|
|
bl UnloadFile
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r3, r4, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022E12EC: .word 0x000003FD
|
|
#else
|
|
_022E12EC: .word 0x00000409
|
|
#endif
|
|
_022E12F0: .word ov29_0237C6D4
|
|
_022E12F4: .word 0x00005E20
|
|
arm_func_end ov29_022E11F8
|
|
|
|
arm_func_start ov29_022E12F8
|
|
ov29_022E12F8: ; 0x022E12F8
|
|
ldr ip, _022E1300 ; =ov29_022E11F8
|
|
bx ip
|
|
.align 2, 0
|
|
_022E1300: .word ov29_022E11F8
|
|
arm_func_end ov29_022E12F8
|
|
|
|
arm_func_start ov29_022E1304
|
|
ov29_022E1304: ; 0x022E1304
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x24
|
|
bl ov29_022E150C
|
|
ldr r1, _022E14EC ; =0x000003FE
|
|
add r2, sp, #8
|
|
mov r0, #4
|
|
mov r3, #0
|
|
bl DirectoryFileMngr_OpenDirectoryFile
|
|
ldr r1, [sp, #8]
|
|
add r0, sp, #0x10
|
|
bl HandleSir0Translation
|
|
ldr sb, [sp, #0x10]
|
|
ldr r4, _022E14F0 ; =_020AFC4C
|
|
mov r8, #0
|
|
mov r7, #0xd0
|
|
mov r6, #0xff
|
|
add r5, sp, #0x14
|
|
mov fp, #1
|
|
_022E134C:
|
|
str r7, [sp]
|
|
str r6, [sp, #4]
|
|
ldr r1, [sb, #8]
|
|
mov r0, r5
|
|
mov r2, fp
|
|
mov r3, #0x10
|
|
add r1, r1, r8, lsl #6
|
|
bl sub_0201F598
|
|
mov r1, r8, lsl #0x10
|
|
mov r2, r1, lsr #0x10
|
|
ldr r0, [r4]
|
|
mov r1, r5
|
|
bl sub_0201B43C
|
|
add r8, r8, #1
|
|
cmp r8, #0x10
|
|
blt _022E134C
|
|
ldr r4, [sp, #0x10]
|
|
mov r0, #0x110
|
|
mov r1, #0
|
|
bl ov29_022E0F2C
|
|
ldmia r4, {r1, r2}
|
|
mov r2, r2, lsl #8
|
|
mov r3, #0xd
|
|
bl CopyAndInterleaveWrapper
|
|
add r0, sp, #8
|
|
bl UnloadFile
|
|
bl ov29_022E11F8
|
|
mov r5, #0
|
|
ldr r2, _022E14F4 ; =ov10_022C4D54
|
|
ldr fp, _022E14F8 ; =DUNGEON_PTR
|
|
ldr r8, _022E14FC ; =0x00011EC8
|
|
mov r6, #0x280
|
|
mov r3, r5
|
|
mov sb, #0x12
|
|
_022E13D4:
|
|
mul r7, r5, sb
|
|
mov r0, r5, lsl #1
|
|
ldrsh r1, [r2, r0]
|
|
mov r4, r3
|
|
_022E13E4:
|
|
ldr ip, [fp]
|
|
orr r0, r6, r1, lsl #12
|
|
add ip, r7, ip
|
|
add ip, ip, r4, lsl #1
|
|
add r4, r4, #1
|
|
strh r0, [ip, r8]
|
|
cmp r4, #9
|
|
add r6, r6, #1
|
|
blt _022E13E4
|
|
add r5, r5, #1
|
|
cmp r5, #0x22
|
|
blt _022E13D4
|
|
orr r0, r6, #0xf000
|
|
mov r0, r0, lsl #0x10
|
|
mov r3, r0, lsr #0x10
|
|
ldr r1, _022E14F8 ; =DUNGEON_PTR
|
|
ldr r0, _022E1500 ; =0x00012A92
|
|
mov r4, #0
|
|
_022E142C:
|
|
ldr r2, [r1]
|
|
add r2, r2, r4, lsl #1
|
|
add r4, r4, #1
|
|
strh r3, [r2, r0]
|
|
cmp r4, #9
|
|
blt _022E142C
|
|
#ifdef JAPAN
|
|
ldr r2, _022E1504 ; =0x0000F2F0
|
|
ldr r1, _022E14F8 ; =DUNGEON_PTR
|
|
mov r7, #0x2f0
|
|
mov r3, #0
|
|
_022E2AE4:
|
|
ldr r0, [r1]
|
|
add r0, r0, r3, lsl #1
|
|
add r0, r0, #0x12000
|
|
add r3, r3, #1
|
|
strh r2, [r0, #0x88]
|
|
cmp r3, #9
|
|
blt _022E2AE4
|
|
ldr r2, _022E14F4 ; =ov10_022C4D54
|
|
ldr lr, _022E14F8 ; =DUNGEON_PTR
|
|
add r7, r7, #1
|
|
mov r8, #1
|
|
mov r4, #0x1a
|
|
mov r5, #0x19
|
|
mov r3, #0
|
|
mov ip, #0x12
|
|
_022E1490:
|
|
cmp r8, #1
|
|
moveq sl, r5
|
|
beq _022E2B34
|
|
cmp r8, #2
|
|
moveq sl, r4
|
|
_022E2B34:
|
|
mul r6, r8, ip
|
|
mov r0, sl, lsl #1
|
|
ldrsh r1, [r2, r0]
|
|
mov sb, r3
|
|
_022E2B44:
|
|
ldr fp, [lr]
|
|
orr r0, r7, r1, lsl #12
|
|
add fp, r6, fp
|
|
add fp, fp, sb, lsl #1
|
|
add fp, fp, #0x12000
|
|
strh r0, [fp, #0x88]
|
|
add sb, sb, #1
|
|
cmp sb, #9
|
|
add r7, r7, #1
|
|
blt _022E2B44
|
|
add r8, r8, #1
|
|
cmp r8, #3
|
|
#else
|
|
ldr r3, _022E1504 ; =0x0000F2F0
|
|
ldr r1, _022E14F8 ; =DUNGEON_PTR
|
|
ldr r0, _022E1508 ; =0x0001212C
|
|
mov r6, #0x2f0
|
|
mov r4, #0
|
|
_022E1458:
|
|
ldr r2, [r1]
|
|
add r2, r2, r4, lsl #1
|
|
add r4, r4, #1
|
|
strh r3, [r2, r0]
|
|
cmp r4, #9
|
|
blt _022E1458
|
|
ldr r2, _022E14F4 ; =ov10_022C4D54
|
|
ldr ip, _022E14F8 ; =DUNGEON_PTR
|
|
ldr sb, _022E1508 ; =0x0001212C
|
|
add r6, r6, #1
|
|
mov r7, #1
|
|
mov r3, #0x1a
|
|
mov r4, #0x19
|
|
mov fp, #0x12
|
|
_022E1490:
|
|
cmp r7, #1
|
|
moveq sl, r4
|
|
beq _022E14A4
|
|
cmp r7, #2
|
|
moveq sl, r3
|
|
_022E14A4:
|
|
mul r5, r7, fp
|
|
mov r0, sl, lsl #1
|
|
ldrsh r1, [r2, r0]
|
|
mov r8, #0
|
|
_022E14B4:
|
|
ldr lr, [ip]
|
|
orr r0, r6, r1, lsl #12
|
|
add lr, r5, lr
|
|
add lr, lr, r8, lsl #1
|
|
strh r0, [lr, sb]
|
|
add r8, r8, #1
|
|
cmp r8, #9
|
|
add r6, r6, #1
|
|
blt _022E14B4
|
|
add r7, r7, #1
|
|
cmp r7, #3
|
|
#endif
|
|
blt _022E1490
|
|
add sp, sp, #0x24
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_022E14EC: .word 0x000003F2
|
|
#else
|
|
_022E14EC: .word 0x000003FE
|
|
#endif
|
|
_022E14F0: .word _020AFC4C
|
|
_022E14F4: .word ov10_022C4D54
|
|
_022E14F8: .word DUNGEON_PTR
|
|
#ifdef JAPAN
|
|
_022E14FC: .word 0x00011E24
|
|
_022E1500: .word 0x000129EE
|
|
_022E1504: .word 0x0000F2F0
|
|
#else
|
|
_022E14FC: .word 0x00011EC8
|
|
_022E1500: .word 0x00012A92
|
|
_022E1504: .word 0x0000F2F0
|
|
_022E1508: .word 0x0001212C
|
|
#endif
|
|
arm_func_end ov29_022E1304
|
|
|
|
arm_func_start ov29_022E150C
|
|
ov29_022E150C: ; 0x022E150C
|
|
ldr r0, _022E154C ; =DUNGEON_PTR
|
|
mov r3, #0
|
|
_022E1514:
|
|
ldr r1, [r0]
|
|
and r2, r3, #0xff
|
|
add r1, r1, r3, lsl #2
|
|
strb r2, [r1, #0x1e0]
|
|
ldr r1, [r0]
|
|
add r1, r1, r3, lsl #2
|
|
strb r2, [r1, #0x1e1]
|
|
ldr r1, [r0]
|
|
add r1, r1, r3, lsl #2
|
|
add r3, r3, #1
|
|
strb r2, [r1, #0x1e2]
|
|
cmp r3, #0x100
|
|
blt _022E1514
|
|
bx lr
|
|
.align 2, 0
|
|
_022E154C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E150C
|
|
|
|
arm_func_start ov29_022E1550
|
|
ov29_022E1550: ; 0x022E1550
|
|
#ifdef JAPAN
|
|
#define OV29_022E1550_OFFSET -0xA4
|
|
#else
|
|
#define OV29_022E1550_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, lr}
|
|
bl GetFloorType
|
|
cmp r0, #0
|
|
bne _022E1590
|
|
ldr r0, _022E15C4 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
ldrb r0, [r0, #0x748]
|
|
bl DungeonGoesUp
|
|
cmp r0, #0
|
|
ldr r0, _022E15C4 ; =DUNGEON_PTR
|
|
movne r1, #0x1c
|
|
ldr r0, [r0]
|
|
moveq r1, #0x1b
|
|
add r0, r0, #0x4000
|
|
strh r1, [r0, #0xd8 + OV29_022E1550_OFFSET]
|
|
ldmia sp!, {r3, pc}
|
|
_022E1590:
|
|
cmp r0, #1
|
|
ldrne r0, _022E15C4 ; =DUNGEON_PTR
|
|
movne r1, #0x1d
|
|
ldrne r0, [r0]
|
|
addne r0, r0, #0x4000
|
|
strneh r1, [r0, #0xd8 + OV29_022E1550_OFFSET]
|
|
ldmneia sp!, {r3, pc}
|
|
ldr r0, _022E15C4 ; =DUNGEON_PTR
|
|
mov r1, #6
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x4000
|
|
strh r1, [r0, #0xd8 + OV29_022E1550_OFFSET]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E15C4: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E1550
|
|
|
|
arm_func_start ov29_022E15C8
|
|
ov29_022E15C8: ; 0x022E15C8
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _022E15FC ; =ov29_02353540
|
|
ldr r0, [r0, #4]
|
|
cmp r0, #0
|
|
beq _022E15E4
|
|
ldr r0, _022E1600 ; =ov29_02353544
|
|
bl UnloadFile
|
|
_022E15E4:
|
|
bl ov29_02335760
|
|
bl ov29_02335804
|
|
ldr r0, _022E15FC ; =ov29_02353540
|
|
mov r1, #0
|
|
str r1, [r0]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_022E15FC: .word ov29_02353540
|
|
_022E1600: .word ov29_02353544
|
|
arm_func_end ov29_022E15C8
|
|
|
|
arm_func_start ov29_022E1604
|
|
ov29_022E1604: ; 0x022E1604
|
|
bx lr
|
|
arm_func_end ov29_022E1604
|
|
|
|
arm_func_start GetTrapInfo
|
|
GetTrapInfo: ; 0x022E1608
|
|
ldr r0, [r0, #0xb4]
|
|
bx lr
|
|
arm_func_end GetTrapInfo
|
|
|
|
arm_func_start GetItemInfo
|
|
GetItemInfo: ; 0x022E1610
|
|
ldr r0, [r0, #0xb4]
|
|
bx lr
|
|
arm_func_end GetItemInfo
|
|
|
|
arm_func_start ov29_022E1618
|
|
ov29_022E1618: ; 0x022E1618
|
|
ldr r0, [r0, #0xb4]
|
|
bx lr
|
|
arm_func_end ov29_022E1618
|
|
|
|
arm_func_start ov29_022E1620
|
|
ov29_022E1620: ; 0x022E1620
|
|
ldr r0, [r0, #0xb4]
|
|
bx lr
|
|
arm_func_end ov29_022E1620
|
|
|
|
arm_func_start GetTileAtEntity
|
|
GetTileAtEntity: ; 0x022E1628
|
|
ldr ip, _022E163C ; =GetTileSafe
|
|
mov r1, r0
|
|
ldrsh r0, [r1, #4]
|
|
ldrsh r1, [r1, #6]
|
|
bx ip
|
|
.align 2, 0
|
|
_022E163C: .word GetTileSafe
|
|
arm_func_end GetTileAtEntity
|
|
|
|
arm_func_start ov29_022E1640
|
|
ov29_022E1640: ; 0x022E1640
|
|
#ifdef JAPAN
|
|
#define OV29_022E1640_OFFSET -0xA4
|
|
#else
|
|
#define OV29_022E1640_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r6, #0
|
|
ldr r4, _022E1848 ; =DUNGEON_PTR
|
|
mov r5, r6
|
|
mov r8, r6
|
|
mov r7, #0xb8
|
|
_022E1658:
|
|
ldr r2, [r4]
|
|
add r0, r2, #0x1cc + OV29_022E1640_OFFSET
|
|
add r0, r0, #0x12c00
|
|
mla r1, r6, r7, r0
|
|
add r0, r2, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
str r1, [r0, #0xb28 + OV29_022E1640_OFFSET]
|
|
ldr r0, [r4]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb28 + OV29_022E1640_OFFSET]
|
|
str r5, [r0]
|
|
ldr r0, [r4]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb28 + OV29_022E1640_OFFSET]
|
|
add r0, r0, #0x2c
|
|
bl InitAnimationControlWithSet__0201C0CC
|
|
ldr r0, [r4]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb28 + OV29_022E1640_OFFSET]
|
|
add r6, r6, #1
|
|
strh r8, [r0, #0xa8]
|
|
cmp r6, #4
|
|
blt _022E1658
|
|
ldr r0, _022E184C ; =ov29_0237C754
|
|
mov r7, #0
|
|
_022E16C8:
|
|
strb r7, [r0, r8]
|
|
add r8, r8, #1
|
|
cmp r8, #0x48
|
|
blt _022E16C8
|
|
mov r5, #0
|
|
ldr r4, _022E1848 ; =DUNGEON_PTR
|
|
mov r6, r5
|
|
mov r8, #0xb8
|
|
_022E16E8:
|
|
ldr r2, [r4]
|
|
add r0, r2, #0xac + OV29_022E1640_OFFSET
|
|
add r0, r0, #0x13000
|
|
mla r1, r7, r8, r0
|
|
add r0, r2, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
str r1, [r0, #0xb38 + OV29_022E1640_OFFSET]
|
|
ldr r0, [r4]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb38 + OV29_022E1640_OFFSET]
|
|
str r5, [r0]
|
|
ldr r0, [r4]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb38 + OV29_022E1640_OFFSET]
|
|
add r0, r0, #0x2c
|
|
bl InitAnimationControlWithSet__0201C0CC
|
|
ldr r0, [r4]
|
|
add r0, r0, r7, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xb38 + OV29_022E1640_OFFSET]
|
|
add r7, r7, #1
|
|
strh r6, [r0, #0xa8]
|
|
cmp r7, #0x10
|
|
blt _022E16E8
|
|
ldr r0, _022E1850 ; =ov29_0237C79C
|
|
mov r3, #0
|
|
_022E1758:
|
|
strb r3, [r0, r6]
|
|
add r6, r6, #1
|
|
cmp r6, #0xae
|
|
blt _022E1758
|
|
ldr r2, _022E1848 ; =DUNGEON_PTR
|
|
mov r0, #0
|
|
_022E1770:
|
|
ldr r1, [r2]
|
|
add r1, r1, r3, lsl #2
|
|
add r1, r1, #0x12000
|
|
add r3, r3, #1
|
|
str r0, [r1, #0xb78 + OV29_022E1640_OFFSET]
|
|
cmp r3, #0x14
|
|
blt _022E1770
|
|
ldr r4, _022E1848 ; =DUNGEON_PTR
|
|
mov r1, #0
|
|
mov r3, #0xb8
|
|
_022E1798:
|
|
ldr r6, [r4]
|
|
#ifdef JAPAN
|
|
add r2, r6, #0x388
|
|
add r2, r2, #0x13800
|
|
#else
|
|
add r2, r6, #0x2c
|
|
add r2, r2, #0x13c00
|
|
#endif
|
|
mla r5, r0, r3, r2
|
|
add r2, r6, r0, lsl #2
|
|
add r2, r2, #0x12000
|
|
str r5, [r2, #0xbc8 + OV29_022E1640_OFFSET]
|
|
ldr r2, [r4]
|
|
add r2, r2, r0, lsl #2
|
|
add r2, r2, #0x12000
|
|
ldr r2, [r2, #0xbc8 + OV29_022E1640_OFFSET]
|
|
add r0, r0, #1
|
|
str r1, [r2]
|
|
cmp r0, #0x40
|
|
blt _022E1798
|
|
ldr r4, _022E1848 ; =DUNGEON_PTR
|
|
mov r0, #0
|
|
mov r3, #0xb8
|
|
_022E17E0:
|
|
ldr r6, [r4]
|
|
add r2, r6, #0x22c + OV29_022E1640_OFFSET
|
|
add r2, r2, #0x16800
|
|
mla r5, r1, r3, r2
|
|
add r2, r6, r1, lsl #2
|
|
add r2, r2, #0x12000
|
|
str r5, [r2, #0xcc8 + OV29_022E1640_OFFSET]
|
|
ldr r2, [r4]
|
|
add r2, r2, r1, lsl #2
|
|
add r2, r2, #0x12000
|
|
ldr r2, [r2, #0xcc8 + OV29_022E1640_OFFSET]
|
|
add r1, r1, #1
|
|
str r0, [r2]
|
|
cmp r1, #0x40
|
|
blt _022E17E0
|
|
ldr r2, _022E1848 ; =DUNGEON_PTR
|
|
ldr r4, [r2]
|
|
#ifdef JAPAN
|
|
add r1, r4, #0x388
|
|
add r3, r1, #0x19400
|
|
#else
|
|
add r1, r4, #0x2c
|
|
add r3, r1, #0x19800
|
|
#endif
|
|
add r1, r4, #0x12000
|
|
str r3, [r1, #0xdc8 + OV29_022E1640_OFFSET]
|
|
ldr r1, [r2]
|
|
add r1, r1, #0x12000
|
|
ldr r1, [r1, #0xdc8 + OV29_022E1640_OFFSET]
|
|
str r0, [r1]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E1848: .word DUNGEON_PTR
|
|
_022E184C: .word ov29_0237C754
|
|
_022E1850: .word ov29_0237C79C
|
|
arm_func_end ov29_022E1640
|
|
|
|
arm_func_start ov29_022E1854
|
|
ov29_022E1854: ; 0x022E1854
|
|
#ifdef JAPAN
|
|
#define OV29_022E1854_OFFSET -0xA4
|
|
#else
|
|
#define OV29_022E1854_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0xc
|
|
ldr r4, _022E1A18 ; =DUNGEON_PTR
|
|
ldr r0, [r4]
|
|
add r0, r0, #0x1a000
|
|
ldrb r1, [r0, #0x23e + OV29_022E1854_OFFSET]
|
|
ldrb r8, [r0, #0x245 + OV29_022E1854_OFFSET]
|
|
cmp r1, #0
|
|
beq _022E1900
|
|
mov r6, #0
|
|
add r8, sp, #4
|
|
mov r7, r6
|
|
_022E1884:
|
|
ldr r0, [r4]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r5, [r0, #0xb78 + OV29_022E1854_OFFSET]
|
|
mov r0, r5
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
beq _022E18F0
|
|
ldr r0, [r4]
|
|
add r0, r0, #0x1a000
|
|
ldr r0, [r0, #0x22c + OV29_022E1854_OFFSET]
|
|
cmp r5, r0
|
|
mov r0, r5
|
|
bne _022E18C4
|
|
bl ov29_02303F18
|
|
b _022E18F0
|
|
_022E18C4:
|
|
ldr sb, [r5, #0xb4]
|
|
bl ov29_023046E8
|
|
mov r0, r8
|
|
mov r1, r5
|
|
bl ov29_022E3A40
|
|
str r7, [sp]
|
|
ldrsh r1, [sb, #4]
|
|
ldr r0, [sb, #0xb0]
|
|
ldr r2, [sp, #4]
|
|
ldr r3, [sp, #8]
|
|
bl ov29_022DD7D8
|
|
_022E18F0:
|
|
add r6, r6, #1
|
|
cmp r6, #0x14
|
|
blt _022E1884
|
|
b _022E1A10
|
|
_022E1900:
|
|
mov r5, #0
|
|
mov r6, r5
|
|
_022E1908:
|
|
ldr r0, [r4]
|
|
add r0, r0, r6, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r7, [r0, #0xb28 + OV29_022E1854_OFFSET]
|
|
mov r0, r7
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
beq _022E196C
|
|
ldr r0, [r7]
|
|
cmp r0, #1
|
|
bne _022E196C
|
|
mov r0, r7
|
|
bl ov29_02303F18
|
|
ldr r0, [r7, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0x161]
|
|
#else
|
|
ldrb r0, [r0, #0x165]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _022E196C
|
|
mov r2, r6, lsl #0x10
|
|
mov r0, r7
|
|
mov r1, r5
|
|
mov r2, r2, asr #0x10
|
|
bl ov29_022E8270
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
_022E196C:
|
|
add r6, r6, #1
|
|
cmp r6, #4
|
|
blt _022E1908
|
|
ldr r4, _022E1A18 ; =DUNGEON_PTR
|
|
mov r5, #0
|
|
_022E1980:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r6, [r0, #0xb38 + OV29_022E1854_OFFSET]
|
|
mov r0, r6
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
beq _022E19A8
|
|
mov r0, r6
|
|
bl ov29_02303F18
|
|
_022E19A8:
|
|
add r5, r5, #1
|
|
cmp r5, #0x10
|
|
blt _022E1980
|
|
mov sb, #0
|
|
mov r7, sb
|
|
mov r6, #1
|
|
mov r5, #0xff
|
|
ldr r4, _022E1A18 ; =DUNGEON_PTR
|
|
b _022E19F0
|
|
_022E19CC:
|
|
add r0, r1, sb, lsl #2
|
|
str r7, [sp]
|
|
add r0, r0, #0x12000
|
|
ldr r0, [r0, #0xbc8 + OV29_022E1854_OFFSET]
|
|
mov r1, r8
|
|
mov r2, r6
|
|
mov r3, r5
|
|
bl ov29_023457C8
|
|
add sb, sb, #1
|
|
_022E19F0:
|
|
ldr r1, [r4]
|
|
add r0, r1, #0x3f00
|
|
ldrsh r0, [r0, #0xc0 + OV29_022E1854_OFFSET]
|
|
cmp sb, r0
|
|
blt _022E19CC
|
|
cmp r8, #0
|
|
beq _022E1A10
|
|
bl ov29_022ED9D0
|
|
_022E1A10:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022E1A18: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E1854
|