pmd-sky/asm/overlay_10_022C2588.s
2025-11-14 00:01:31 -05:00

2139 lines
37 KiB
ArmAsm

.include "asm/macros.inc"
.include "overlay_10_022C2588.inc"
.text
arm_func_start ov10_022C2588
ov10_022C2588: ; 0x022C2588
stmdb sp!, {r3, r4, lr}
sub sp, sp, #0xc
mov r4, r0
cmp r1, #0xaa
addlt r0, r1, #0xfe
addlt r0, r0, #0x100
addge r0, r1, #0xe2
addge r0, r0, #0x200
mov r0, r0, lsl #0x10
mov r3, r2
mov r1, r0, lsr #0x10
add r2, sp, #4
mov r0, #4
bl DirectoryFileMngr_OpenDirectoryFile
ldr r1, [sp, #4]
add r0, sp, #0
bl HandleSir0Translation
ldr r2, [sp]
mov r0, r4
mov r1, #0
bl DecompressAtFromMemoryPointerVeneer
add r0, sp, #4
bl UnloadFile
add sp, sp, #0xc
ldmia sp!, {r3, r4, pc}
arm_func_end ov10_022C2588
arm_func_start ov10_022C25EC
ov10_022C25EC: ; 0x022C25EC
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r0
cmp r1, #0xaa
addlt r0, r1, #0x2a8
addge r0, r1, #0x31c
mov r0, r0, lsl #0x10
mov r3, r2
mov r1, r0, lsr #0x10
mov r2, r4
mov r0, #4
bl DirectoryFileMngr_OpenDirectoryFile
ldr r1, [r4]
add r0, sp, #0
bl HandleSir0Translation
ldr r0, [sp]
str r0, [r4, #8]
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
arm_func_end ov10_022C25EC
arm_func_start ov10_022C2638
ov10_022C2638: ; 0x022C2638
stmdb sp!, {r4, lr}
mov r4, r0
bl UnloadFile
mov r0, r4
mov r1, #0xc
bl MemZero
ldmia sp!, {r4, pc}
arm_func_end ov10_022C2638
arm_func_start ov10_022C2654
ov10_022C2654: ; 0x022C2654
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r0
cmp r1, #0xaa
movlt r0, r1, lsl #0x10
addge r0, r1, #0x2a8
movge r0, r0, lsl #0x10
mov r3, r2
mov r1, r0, lsr #0x10
mov r2, r4
mov r0, #4
bl DirectoryFileMngr_OpenDirectoryFile
ldr r1, [r4]
add r0, sp, #0
bl HandleSir0Translation
ldr r0, [sp]
str r0, [r4, #8]
add sp, sp, #4
ldmia sp!, {r3, r4, pc}
arm_func_end ov10_022C2654
arm_func_start ov10_022C26A0
ov10_022C26A0: ; 0x022C26A0
stmdb sp!, {r4, lr}
mov r4, r0
bl UnloadFile
mov r0, r4
mov r1, #0xc
bl MemZero
ldmia sp!, {r4, pc}
arm_func_end ov10_022C26A0
arm_func_start InitTilesetBuffer
InitTilesetBuffer: ; 0x022C26BC
stmdb sp!, {r3, r4, lr}
sub sp, sp, #0xc
mov r4, r0
cmp r1, #0xaa
addlt r0, r1, #0x154
addge r0, r1, #0xc5
addge r0, r0, #0x200
mov r0, r0, lsl #0x10
mov r3, r2
mov r1, r0, lsr #0x10
add r2, sp, #4
mov r0, #4
bl DirectoryFileMngr_OpenDirectoryFile
ldr r1, [sp, #4]
add r0, sp, #0
bl HandleSir0Translation
ldr r2, [sp]
ldr r1, _022C271C ; =0x00001C20
mov r0, r4
bl DecompressAtNormalVeneer
add r0, sp, #4
bl UnloadFile
add sp, sp, #0xc
ldmia sp!, {r3, r4, pc}
.align 2, 0
_022C271C: .word 0x00001C20
arm_func_end InitTilesetBuffer
arm_func_start ov10_022C2720
ov10_022C2720: ; 0x022C2720
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #0xc
mov r5, r1
mov r6, r0
mov r0, r5
mov r4, r2
bl IsBackgroundTileset
cmp r0, #0
mov r0, r5
bne _022C2788
bl ov10_022C27CC
mov r1, r0
add r2, sp, #4
mov r3, r4
mov r0, #4
bl DirectoryFileMngr_OpenDirectoryFile
ldr r1, [sp, #4]
add r0, sp, #0
bl HandleSir0Translation
ldr r2, [sp]
mov r0, r6
mov r1, #0x930
bl DecompressAtNormalVeneer
add r0, sp, #4
bl UnloadFile
b _022C27C4
_022C2788:
bl ov10_022C27CC
mov r1, r0
add r2, sp, #4
mov r3, r4
mov r0, #4
bl DirectoryFileMngr_OpenDirectoryFile
ldr r1, [sp, #4]
add r0, sp, #0
bl HandleSir0Translation
ldr r2, [sp]
mov r0, r6
mov r1, #0x800
bl DecompressAtNormalVeneer
add r0, sp, #4
bl UnloadFile
_022C27C4:
add sp, sp, #0xc
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end ov10_022C2720
arm_func_start ov10_022C27CC
ov10_022C27CC: ; 0x022C27CC
cmp r0, #0xaa
addlt r0, r0, #0xaa
addge r0, r0, #0xff
addge r0, r0, #0x200
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bx lr
arm_func_end ov10_022C27CC
arm_func_start ov10_022C27E8
ov10_022C27E8: ; 0x022C27E8
stmdb sp!, {r3, lr}
ldr lr, [r2, r3, lsl #2]
ldr ip, _022C2834 ; =ov10_022DC224
ldrh lr, [lr]
str lr, [r0]
ldr r0, [r2, r3, lsl #2]
ldrh r0, [r0, #2]
str r0, [r1]
ldr r0, [r2, r3, lsl #2]
add r0, r0, #6
str r0, [ip, #4]
ldr r0, [r1]
cmp r0, #0x3e
movgt r0, #0x3e
strgt r0, [r1]
ldr r0, _022C2834 ; =ov10_022DC224
mov r1, #0
strh r1, [r0, #2]
ldmia sp!, {r3, pc}
.align 2, 0
_022C2834: .word ov10_022DC224
arm_func_end ov10_022C27E8
arm_func_start ov10_022C2838
ov10_022C2838: ; 0x022C2838
ldr r0, _022C2884 ; =ov10_022DC224
ldrh r1, [r0, #2]
cmp r1, #0
subne r1, r1, #1
bne _022C2868
ldr r3, [r0, #4]
ldrh r2, [r3]
add r1, r3, #2
add r1, r1, #2
strh r2, [r0]
str r1, [r0, #4]
ldrh r1, [r3, #2]
_022C2868:
strh r1, [r0, #2]
ldrh r1, [r0]
ldr r0, _022C2888 ; =0x00000FFF
and r0, r1, r0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bx lr
.align 2, 0
_022C2884: .word ov10_022DC224
_022C2888: .word 0x00000FFF
arm_func_end ov10_022C2838
arm_func_start MainGame
MainGame: ; 0x022C288C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x29c
mov r4, r0
mov r0, #0
mov r1, #0x2c
bl LoadScriptVariableValue
mov sb, r0
mov r6, #0
bl sub_02017A68
mov r0, #0x10
bl sub_02017ACC
bl sub_0204E1E4
cmp r4, #0
bne _022C28D0
bl InitEventFlagScriptVars
mov sb, r6
b _022C2984
_022C28D0:
cmp sb, #6
bne _022C2978
cmp r4, #2
bne _022C2938
mov r0, #7
bl sub_0205BA70
mov r4, r0
mov r2, #0xa
mov r0, r6
mov r1, #0x2c
bl SaveScriptVariableValue
mov r0, r4, lsl #0x18
mov r0, r0, asr #0x18
bl sub_0205B7C8
mov r0, #0xf
bl LoadOverlay
mov r0, #9
bl ExplorersOfSkyMain
mov r0, #0xf
bl UnloadOverlay
mov r2, #6
mov r0, r6
mov r1, #0x2c
bl SaveScriptVariableValue
mov sb, #7
b _022C2984
_022C2938:
cmp r4, #3
bne _022C2984
mov sb, #0xa
mov r2, sb
mov r0, r6
mov r1, #0x2c
bl SaveScriptVariableValue
mov r0, r6
bl sub_0205B7C8
mov r0, #0xf
bl LoadOverlay
mov r0, sb
bl ExplorersOfSkyMain
mov r0, #0xf
bl UnloadOverlay
b _022C2984
_022C2978:
cmp sb, #0
cmpne sb, #0xa
movne sb, #1
_022C2984:
cmp sb, #0xf
bne _022C29C8
bl GetGameMode
mov r4, r0
bl sub_0204E760
bl GetDungeonModeSpecial
cmp r4, #5
cmpne r0, #3
beq _022C29C0
mov r0, #0xd
bl LoadOverlay
mov r0, #0xf
bl GroundMainLoop
mov r0, #0xd
bl UnloadOverlay
_022C29C0:
mov sb, #0x10
b _022C2984
_022C29C8:
cmp sb, #7
moveq r5, #0
beq _022C2CF8
cmp sb, #6
moveq r5, #2
beq _022C2CF8
cmp sb, #0xa
bne _022C2B0C
bl sub_020587C8
bl sub_02057CE8
bl CleanStickyItemsInBag
mov r8, #0
ldr r5, _022C3118 ; =BAG_ITEMS_PTR_MIRROR
mov fp, r8
mov sl, #1
mov r4, #6
_022C2A08:
mul r1, r8, r4
ldr r0, [r5]
ldr r2, [r0, #0x384]
ldrb r0, [r2, r1]
add r7, r2, r1
tst r0, #1
movne r0, sl
moveq r0, fp
tst r0, #0xff
beq _022C2A5C
mov r0, r7
bl IsLosableItem
cmp r0, #0
beq _022C2A54
ldrb r0, [r7, #1]
bl sub_020582E0
mov r0, r7
bl ItemZInit
b _022C2A5C
_022C2A54:
mov r0, r7
bl RemoveHolderForItemInBag
_022C2A5C:
add r8, r8, #1
cmp r8, #0x32
blt _022C2A08
bl RemoveEmptyItemsInBag
mov r8, #0
mov r7, #1
ldr r5, _022C311C ; =TEAM_MEMBER_TABLE_PTR
mov sl, r8
mov fp, r7
mov r4, #0x68
_022C2A84:
mul r1, r8, r4
ldr r0, [r5]
add r0, r0, #0x9000
ldr r0, [r0, #0x84c]
ldrb r2, [r0, r1]
add r1, r0, r1
tst r2, #1
movne r0, r7
moveq r0, sl
tst r0, #0xff
beq _022C2AE4
tst r2, #2
movne r0, fp
moveq r0, #0
tst r0, #0xff
beq _022C2AE4
ldrb r0, [r1, #0x3e]
tst r0, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _022C2AE4
add r0, r1, #0x3e
bl ItemZInit
_022C2AE4:
add r8, r8, #1
cmp r8, #4
blt _022C2A84
mov r0, #0
bl SetMoneyCarried
bl sub_0204AFD0
cmp r0, #0
beq _022C2C64
bl sub_0205F504
b _022C2C64
_022C2B0C:
cmp sb, #0xb
bne _022C2C64
add r0, sp, #8
mov r7, #0
bl sub_0204F244
bl GetGameMode
cmp r0, #2
beq _022C2B38
bl GetGameMode
cmp r0, #3
bne _022C2B60
_022C2B38:
bl sub_0204F050
mov r5, r0
bl GetDungeonMode
mov r4, r0
mov r0, r5
bl IsNoLossPenaltyDungeon
cmp r0, #0
cmpne r4, #2
cmpne r4, #3
movne r7, #1
_022C2B60:
cmp r7, #0
bne _022C2C54
ldrb r0, [sp, #0x64]
cmp r0, #0xb4
blo _022C2B7C
cmp r0, #0xbe
bls _022C2C54
_022C2B7C:
ldrsh r1, [sp, #0x62]
ldr r0, _022C3120 ; =0x00000265
cmp r1, r0
beq _022C2C54
mov r7, #0
ldr r5, _022C3118 ; =BAG_ITEMS_PTR_MIRROR
mov fp, r7
mov sl, #1
mov r4, #6
_022C2BA0:
mul r8, r7, r4
ldr r0, [r5]
ldr r1, [r0, #0x384]
ldrb r0, [r1, r8]
add r2, r1, r8
tst r0, #1
movne r0, sl
moveq r0, fp
tst r0, #0xff
beq _022C2C34
ldrsh r0, [r2, #4]
cmp r0, #0xb7
bne _022C2BF0
ldrb r0, [r2, #1]
bl sub_020582E0
ldr r0, [r5]
ldr r0, [r0, #0x384]
add r0, r0, r8
bl ItemZInit
b _022C2C34
_022C2BF0:
add r0, r1, r8
bl IsLosableItem
cmp r0, #0
beq _022C2C34
mov r0, #0x64
bl RandInt
cmp r0, #0x32
bge _022C2C34
ldr r0, [r5]
ldr r0, [r0, #0x384]
add r0, r0, r8
ldrb r0, [r0, #1]
bl sub_020582E0
ldr r0, [r5]
ldr r0, [r0, #0x384]
add r0, r0, r8
bl ItemZInit
_022C2C34:
add r7, r7, #1
cmp r7, #0x32
blt _022C2BA0
bl RemoveEmptyItemsInBag
bl GetMoneyCarried
add r0, r0, r0, lsr #31
mov r0, r0, asr #1
bl SetMoneyCarried
_022C2C54:
bl sub_0204AFD0
cmp r0, #0
beq _022C2C64
bl sub_0205F504
_022C2C64:
mov r0, #0xd
bl LoadOverlay
mov r0, sb
bl GroundMainLoop
mov r5, r0
mov r0, #0xd
bl UnloadOverlay
cmp r5, #9
bne _022C2CB8
mov r8, #0xd
mov r7, #2
mov r4, r8
_022C2C94:
mov r0, r8
bl LoadOverlay
mov r0, r7
bl GroundMainLoop
mov r5, r0
mov r0, r4
bl UnloadOverlay
cmp r5, #9
beq _022C2C94
_022C2CB8:
cmp r5, #0xa
bne _022C2CD0
mov r0, #0x10
bl sub_02017ACC
mov r6, #1
b _022C310C
_022C2CD0:
cmp r5, #0xb
bne _022C2CEC
mov r0, #1
bl sub_02048C0C
mov r0, #0x10
bl sub_02017ACC
b _022C310C
_022C2CEC:
cmp r5, #4
moveq sb, #0xf
beq _022C2984
_022C2CF8:
add r0, sp, #0xf0
mov r1, #0x1ac
bl MemZero
mov r7, #0
strb r7, [sp, #0x101]
strb r7, [sp, #0xff]
add sl, sp, #0x10c
add fp, sp, #0xf0
mov r4, r7
_022C2D1C:
mov r0, #0x44
mul r8, r7, r0
mov r2, r0
mov r1, #0
add r0, sl, r8
bl MemsetSimple
add r0, fp, r8
strb r4, [r0, #0x1c]
add r7, r7, #1
strh r4, [r0, #0x20]
cmp r7, #2
blt _022C2D1C
cmp r5, #5
bne _022C2D74
bl sub_0204E7B8
add r0, sp, #0xf0
bl sub_0204E790
ldrsb r1, [sp, #0xfd]
ldrsh r2, [sp, #0xf2]
ldr r0, _022C3124 ; =ov10_022DC094
bl Debug_Print0
b _022C2EF0
_022C2D74:
cmp r5, #0
bne _022C2E48
bl sub_02048CB8
ldr r1, _022C3128 ; =0x000F1207
cmp r0, r1
bne _022C2E18
ldr r0, _022C312C ; =_020B0A5C
mov r2, #1
mov r1, #0
ldr r0, [r0]
strb r2, [sp, #0x101]
strb r2, [sp, #0xf4]
strb r1, [sp, #0xfd]
ldrsh r0, [r0, #4]
cmp r0, #0
streqb r1, [sp, #0xff]
beq _022C2DC4
add r0, sp, #0x10c
strb r2, [sp, #0xff]
bl sub_0205BBFC
_022C2DC4:
add r0, sp, #2
bl sub_0205BC94
ldrsh r0, [sp, #6]
cmp r0, #0
bne _022C2DEC
mov r1, #0
add r0, sp, #0x194
strb r1, [sp, #0x100]
bl ItemZInit
b _022C2E20
_022C2DEC:
ldrh r3, [sp, #2]
add r0, sp, #0x100
ldrh r2, [sp, #4]
ldrh r1, [sp, #6]
mov r4, #1
strh r3, [r0, #0x94]
strb r4, [sp, #0x100]
strh r2, [r0, #0x96]
strh r1, [r0, #0x98]
strb r4, [sp, #0x194]
b _022C2E20
_022C2E18:
mov r5, #1
mov sb, #0xa
_022C2E20:
ldr r0, _022C312C ; =_020B0A5C
mov r1, #0
ldr r0, [r0]
mov r2, #0x44
bl MemsetSimple
ldr r0, _022C312C ; =_020B0A5C
mov r1, #0
ldr r0, [r0]
strh r1, [r0, #4]
b _022C2EF0
_022C2E48:
cmp r5, #2
bne _022C2EF0
bl sub_02048BFC
cmp r0, #2
bne _022C2E88
mov r1, #1
mov r0, #0
strb r1, [sp, #0xf4]
strb r0, [sp, #0x101]
bl sub_02048CB8
ldr r1, _022C3128 ; =0x000F1207
cmp r0, r1
moveq r5, #2
movne r5, #1
movne sb, #0xa
b _022C2E8C
_022C2E88:
mov r5, #3
_022C2E8C:
cmp r5, #3
bne _022C2EE4
bl sub_0204E6FC
and r0, r0, #0xff
cmp r0, #1
mov r5, #1
mov sb, #0xa
bhi _022C2EF0
bl sub_0204E770
cmp r0, #0xff
beq _022C2EF0
bl DoesNotSaveWhenEntering
cmp r0, #0
beq _022C2ED8
bl sub_02048BFC
cmp r0, #2
moveq r5, #3
moveq sb, #6
b _022C2EF0
_022C2ED8:
mov r5, #7
mov sb, #9
b _022C2EF0
_022C2EE4:
cmp r5, #1
moveq r5, #1
moveq sb, #0xa
_022C2EF0:
cmp r5, #5
cmpne r5, #0
beq _022C2F08
sub r0, r5, #2
cmp r0, #1
bhi _022C3100
_022C2F08:
cmp r5, #5
mov r4, #1
bne _022C3014
add r0, sp, #0
bl sub_0204F1B4
cmp r0, #0
beq _022C2F5C
ldrsb r0, [sp]
bl sub_0205B77C
ldrsb r1, [r0, #0xac]
cmp r1, #1
subgt r1, r1, #1
movle r1, #0
strb r1, [r0, #0xac]
mov r0, #0xf
bl LoadOverlay
mov r0, #8
bl ExplorersOfSkyMain
mov r0, #0xf
bl UnloadOverlay
b _022C2F84
_022C2F5C:
bl sub_0204E770
bl DoesNotSaveWhenEntering
cmp r0, #0
bne _022C2F84
mov r0, #0xf
bl LoadOverlay
mov r0, #7
bl ExplorersOfSkyMain
mov r0, #0xf
bl UnloadOverlay
_022C2F84:
mov r0, #0xb
bl Debug_GetDebugFlag
cmp r0, #0
beq _022C3014
mov r0, #0xf
bl LoadOverlay
mov r0, #0xd
bl ExplorersOfSkyMain
mov r5, r0
mov r0, #0xf
bl UnloadOverlay
cmp r5, #6
mov r4, #0
addls pc, pc, r5, lsl #2
b _022C2FFC
_022C2FC0: ; jump table
b _022C2FFC ; case 0
b _022C2FFC ; case 1
b _022C2FFC ; case 2
b _022C2FDC ; case 3
b _022C2FFC ; case 4
b _022C2FE4 ; case 5
b _022C2FF0 ; case 6
_022C2FDC:
mov r4, #1
b _022C3004
_022C2FE4:
mov r0, #2
str r0, [sp, #0x1a0]
b _022C3004
_022C2FF0:
mov r0, #1
str r0, [sp, #0x1a0]
b _022C3004
_022C2FFC:
mvn r0, #0
str r0, [sp, #0x1a0]
_022C3004:
cmp r4, #0
bne _022C3014
add r0, sp, #0x1b0
bl sub_0200C4CC
_022C3014:
cmp r4, #0
beq _022C304C
ldrsb r1, [sp, #0xfe]
ldr r0, _022C3130 ; =ov10_022DC0B8
bl Debug_Print0
mov r0, #0xe
bl LoadOverlay
add r0, sp, #0xf0
mov r1, #1
bl RunDungeonMode
mov r0, #0xe
bl UnloadOverlay
mov r0, #0
bl sub_0204E8EC
_022C304C:
ldr r1, [sp, #0x1a0]
ldr r0, _022C3134 ; =ov10_022DC0D4
bl Debug_Print0
ldr r1, [sp, #0x1a0]
cmp r1, #3
moveq r6, #1
beq _022C310C
mvn r0, #1
cmp r1, r0
moveq r6, #1
beq _022C310C
add r0, r1, #1
cmp r0, #6
addls pc, pc, r0, lsl #2
b _022C30D0
_022C3088: ; jump table
b _022C30C0 ; case 0
b _022C30D0 ; case 1
b _022C30A4 ; case 2
b _022C30B8 ; case 3
b _022C30D0 ; case 4
b _022C30AC ; case 5
b _022C30C8 ; case 6
_022C30A4:
mov sb, #8
b _022C30D4
_022C30AC:
mov sb, #8
bl IncrementNbFriendRescues
b _022C30D4
_022C30B8:
mov sb, #9
b _022C30D4
_022C30C0:
mov sb, #0xb
b _022C30D4
_022C30C8:
mov sb, #0xa
b _022C30D4
_022C30D0:
mov sb, #0xa
_022C30D4:
cmp sb, #8
cmpne sb, #9
cmpne sb, #0xb
bne _022C30F4
add r0, sp, #0x1b0
mov r1, #1
bl sub_0204F1F0
b _022C3100
_022C30F4:
mov r0, #0
mov r1, r0
bl sub_0204F1F0
_022C3100:
mov r0, #0
bl sub_0204E8EC
b _022C2984
_022C310C:
mov r0, r6
add sp, sp, #0x29c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022C3118: .word BAG_ITEMS_PTR_MIRROR
_022C311C: .word TEAM_MEMBER_TABLE_PTR
_022C3120: .word 0x00000265
_022C3124: .word ov10_022DC094
_022C3128: .word 0x000F1207
_022C312C: .word _020B0A5C
_022C3130: .word ov10_022DC0B8
_022C3134: .word ov10_022DC0D4
arm_func_end MainGame
arm_func_start ov10_022C3138
ov10_022C3138: ; 0x022C3138
stmdb sp!, {r3, lr}
mov r0, #0x44
mov r1, #6
bl MemAlloc
ldr r2, _022C31A0 ; =ov10_022DC218
mov r1, #0x44
str r0, [r2]
bl MemZero
ldr r0, _022C31A0 ; =ov10_022DC218
mov r2, #1
ldr r1, [r0]
mov r3, #0
strb r2, [r1, #0x38]
ldr r1, [r0]
mov r2, #0x14000
str r3, [r1, #0x40]
ldr r1, [r0]
str r3, [r1, #0x3c]
ldr r1, [r0]
str r2, [r1, #0x2c]
ldr r2, [r0]
ldr r1, [r2, #0x2c]
str r1, [r2, #0x30]
ldr r0, [r0]
str r3, [r0, #0x34]
ldmia sp!, {r3, pc}
.align 2, 0
_022C31A0: .word ov10_022DC218
arm_func_end ov10_022C3138
arm_func_start ov10_022C31A4
ov10_022C31A4: ; 0x022C31A4
stmdb sp!, {r3, lr}
ldr r0, _022C3200 ; =ov10_022DC218
ldr r0, [r0]
cmp r0, #0
ldrneb r1, [r0, #0x38]
cmpne r1, #0
ldmeqia sp!, {r3, pc}
ldr r2, _022C3204 ; =0x00000401
mov r1, #4
mov r3, #0xf
bl LoadWteFromFileDirectory
ldr r0, _022C3200 ; =ov10_022DC218
mov r1, #0
ldr r0, [r0]
mov r3, r1
ldr r0, [r0, #4]
mov r2, #0x1d
bl ProcessWte
ldr r0, _022C3200 ; =ov10_022DC218
mov r1, #0
ldr r0, [r0]
strb r1, [r0, #0x38]
ldmia sp!, {r3, pc}
.align 2, 0
_022C3200: .word ov10_022DC218
#ifdef JAPAN
_022C3204: .word 0x000003F5
#else
_022C3204: .word 0x00000401
#endif
arm_func_end ov10_022C31A4
arm_func_start ov10_022C3208
ov10_022C3208: ; 0x022C3208
stmdb sp!, {r4, lr}
ldr ip, _022C3288 ; =ov10_022DC218
ldr lr, [sp, #8]
ldr r4, [ip]
mov lr, lr, lsl #8
str lr, [r4, #8]
ldr r4, [ip]
mov lr, #0
str lr, [r4, #0xc]
ldr lr, [r1]
ldr r4, [ip]
ldr r1, [r1, #4]
str lr, [r4, #0x10]
str r1, [r4, #0x14]
ldr r1, [r0, #4]
ldr r0, [r0]
str r0, [r4, #0x20]
str r1, [r4, #0x24]
ldr r0, [r4, #0x20]
str r0, [r4, #0x18]
str r1, [r4, #0x1c]
str r3, [r4, #0x28]
ldr r0, [ip]
str r2, [r0, #0x2c]
ldr r1, [ip]
ldr r0, [r1, #0x2c]
str r0, [r1, #0x30]
ldr r1, [ip]
ldr r0, [r1, #0x34]
add r0, r0, #1
str r0, [r1, #0x34]
ldmia sp!, {r4, pc}
.align 2, 0
_022C3288: .word ov10_022DC218
arm_func_end ov10_022C3208
arm_func_start ov10_022C328C
ov10_022C328C: ; 0x022C328C
stmdb sp!, {lr}
sub sp, sp, #0xc
ldr ip, _022C331C ; =ov10_022DC0F0
ldr r3, _022C3320 ; =ov10_022DC218
ldr lr, [ip, #8]
ldr ip, [ip, #4]
str lr, [sp, #8]
str ip, [sp, #4]
ldr ip, [r0]
ldr r3, [r3]
mov ip, ip, lsl #8
str ip, [sp, #4]
ldr r0, [r0, #4]
mov lr, r1
mov r1, r0, lsl #8
str r1, [sp, #8]
ldr r0, [r3, #0x34]
cmp r0, #0
streq ip, [r3, #0x20]
streq r1, [r3, #0x24]
ldr r0, _022C3320 ; =ov10_022DC218
add r1, sp, #4
ldr r0, [r0]
mov r3, lr, lsl #8
str r2, [sp]
ldr r2, [r0, #0x30]
add r0, r0, #0x20
bl ov10_022C3208
ldr r0, _022C3320 ; =ov10_022DC218
mov r2, #1
ldr r1, [r0]
str r2, [r1, #0x40]
ldr r0, [r0]
str r2, [r0, #0x3c]
add sp, sp, #0xc
ldmia sp!, {pc}
.align 2, 0
_022C331C: .word ov10_022DC0F0
_022C3320: .word ov10_022DC218
arm_func_end ov10_022C328C
arm_func_start ov10_022C3324
ov10_022C3324: ; 0x022C3324
stmdb sp!, {r3, lr}
ldr r1, _022C3374 ; =ov10_022DC218
mov r3, #0x14000
ldr r1, [r1]
str r0, [sp]
ldr r2, [r1, #0x30]
add r0, r1, #0x20
add r1, r1, #0x20
bl ov10_022C3208
ldr r0, _022C3374 ; =ov10_022DC218
mov r2, #2
ldr r1, [r0]
mov r3, #1
str r2, [r1, #0x40]
ldr r2, [r0]
mov r1, #0
str r3, [r2, #0x3c]
ldr r0, [r0]
str r1, [r0, #0x34]
ldmia sp!, {r3, pc}
.align 2, 0
_022C3374: .word ov10_022DC218
arm_func_end ov10_022C3324
arm_func_start ov10_022C3378
ov10_022C3378: ; 0x022C3378
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #8
ldr r0, _022C34EC ; =ov10_022DC218
ldr r6, [r0]
ldr r0, [r6, #0x3c]
cmp r0, #0
moveq r0, #0
beq _022C34E4
ldr r0, [r6, #8]
ldr r7, [r6, #0xc]
mov r4, #1
cmp r0, r7
bne _022C33EC
ldr r0, [r6, #0x40]
cmp r0, #2
moveq r0, #0
streq r0, [r6, #0x3c]
moveq r4, #3
beq _022C33CC
cmp r0, #1
moveq r4, #2
_022C33CC:
ldr r0, _022C34EC ; =ov10_022DC218
ldr r2, [r0]
ldr r1, [r2, #0x10]
ldr r0, [r2, #0x14]
str r1, [sp]
str r0, [sp, #4]
ldr r0, [r2, #0x28]
b _022C34C4
_022C33EC:
sub r5, r0, r7
ldr r1, [r6, #0x18]
mov r0, r5
bl MultiplyByFixedPoint
mov r8, r0
ldr r1, [r6, #0x10]
mov r0, r7
bl MultiplyByFixedPoint
ldr r1, _022C34EC ; =ov10_022DC218
add r0, r8, r0
ldr r1, [r1]
str r0, [sp]
ldr r1, [r1, #8]
bl sub_02001AB0
ldr r1, _022C34EC ; =ov10_022DC218
str r0, [sp]
ldr r1, [r1]
mov r0, r5
ldr r1, [r1, #0x1c]
bl MultiplyByFixedPoint
ldr r1, _022C34EC ; =ov10_022DC218
mov r6, r0
ldr r1, [r1]
mov r0, r7
ldr r1, [r1, #0x14]
bl MultiplyByFixedPoint
add r0, r6, r0
str r0, [sp, #4]
ldr r1, _022C34EC ; =ov10_022DC218
ldr r1, [r1]
ldr r1, [r1, #8]
bl sub_02001AB0
str r0, [sp, #4]
mov r0, r5
ldr r1, _022C34EC ; =ov10_022DC218
ldr r1, [r1]
ldr r1, [r1, #0x2c]
bl MultiplyByFixedPoint
mov r5, r0
mov r0, r7
ldr r1, _022C34EC ; =ov10_022DC218
ldr r1, [r1]
ldr r1, [r1, #0x28]
bl MultiplyByFixedPoint
add r0, r5, r0
ldr r1, _022C34EC ; =ov10_022DC218
ldr r1, [r1]
ldr r1, [r1, #8]
bl sub_02001AB0
ldr r1, _022C34EC ; =ov10_022DC218
ldr r2, [r1]
ldr r1, [r2, #0xc]
add r1, r1, #0x100
str r1, [r2, #0xc]
_022C34C4:
ldr r1, _022C34EC ; =ov10_022DC218
ldr r2, [sp]
ldr r3, [r1]
ldr r1, [sp, #4]
str r2, [r3, #0x20]
str r1, [r3, #0x24]
str r0, [r3, #0x30]
mov r0, r4
_022C34E4:
add sp, sp, #8
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_022C34EC: .word ov10_022DC218
arm_func_end ov10_022C3378
arm_func_start ov10_022C34F0
ov10_022C34F0: ; 0x022C34F0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x80
ldr r0, _022C388C ; =ov10_022DC218
ldr r1, [r0]
cmp r1, #0
beq _022C3884
ldr r0, [r1, #0x3c]
cmp r0, #0
beq _022C3520
ldr r0, [r1, #0x40]
cmp r0, #2
beq _022C352C
_022C3520:
ldr r0, [r1, #0x40]
cmp r0, #1
bne _022C3884
_022C352C:
ldr r0, _022C388C ; =ov10_022DC218
mov r1, #0x3000
ldr r4, [r0]
ldr r2, [r4, #0x20]
ldr r0, [r4, #0x24]
mov r3, r2, asr #8
mov r2, r0, asr #8
ldr r0, [r4, #0x30]
mov r4, r3, lsl #0x10
mov r5, r2, lsl #0x10
bl sub_02001AB0
mov r1, r0
mov r0, #0x3000
bl MultiplyByFixedPoint
mov r2, #0x140
mov r1, r0, asr #7
add r0, r0, r1, lsr #24
mov r1, r0, asr #8
rsb r0, r1, #0
mov r0, r0, lsl #0x10
mov r3, r0, asr #0x10
mov r0, r1, lsl #0x10
mov r1, r0, asr #0x10
mov r0, r2
rsb r0, r0, #0
strh r0, [sp, #0x10]
strh r0, [sp, #0x12]
strh r2, [sp, #0x14]
strh r0, [sp, #0x16]
strh r0, [sp, #0x18]
strh r2, [sp, #0x1a]
strh r2, [sp, #0x1c]
strh r2, [sp, #0x1e]
strh r0, [sp, #0x60]
strh r0, [sp, #0x68]
strh r3, [sp, #0x62]
strh r3, [sp, #0x64]
strh r3, [sp, #0x66]
strh r1, [sp, #0x6a]
strh r3, [sp, #0x6c]
strh r1, [sp, #0x6e]
strh r1, [sp, #0x70]
strh r3, [sp, #0x72]
strh r2, [sp, #0x74]
strh r2, [sp, #0x7c]
strh r3, [sp, #0x76]
strh r1, [sp, #0x78]
strh r1, [sp, #0x7a]
strh r1, [sp, #0x7e]
mov r2, #0
add r0, sp, #0x10
add r6, sp, #0x18
_022C35FC:
mov r8, r2, lsl #2
ldrsh r7, [r0, r8]
ldrsh r3, [r6, r8]
add r1, r0, r2, lsl #2
add r7, r7, r4, asr #16
add r3, r3, r4, asr #16
strh r7, [r0, r8]
add r7, r6, r2, lsl #2
strh r3, [r6, r8]
ldrsh r8, [r1, #2]
ldrsh r3, [r7, #2]
add r2, r2, #1
add r8, r8, r5, asr #16
add r3, r3, r5, asr #16
strh r8, [r1, #2]
strh r3, [r7, #2]
cmp r2, #2
blt _022C35FC
mov r2, #0
add r0, sp, #0x60
add r6, sp, #0x70
_022C3650:
mov r8, r2, lsl #2
ldrsh r7, [r0, r8]
ldrsh r3, [r6, r8]
add r1, r0, r2, lsl #2
add r7, r7, r4, asr #16
add r3, r3, r4, asr #16
strh r7, [r0, r8]
add r7, r6, r2, lsl #2
strh r3, [r6, r8]
ldrsh r8, [r1, #2]
ldrsh r3, [r7, #2]
add r2, r2, #1
add r8, r8, r5, asr #16
add r3, r3, r5, asr #16
strh r8, [r1, #2]
strh r3, [r7, #2]
cmp r2, #4
blt _022C3650
add r0, sp, #0x20
bl InitRender3dElement64
mov r0, #5
strb r0, [sp, #0x5c]
mov r2, #0
ldr r0, _022C388C ; =ov10_022DC218
str r2, [sp]
ldr r1, [r0]
add r0, sp, #0x20
ldr r1, [r1, #4]
mov r3, #0x1d
bl sub_0201E774
mov r7, #0
mov r6, #4
ldrsh r0, [sp, #0x12]
ldrsh r4, [sp, #0x10]
ldrsh r3, [sp, #0x14]
strh r0, [sp, #0x22]
mov r0, #0xff
ldrsh r2, [sp, #0x16]
ldrsh r1, [sp, #0x60]
ldrsh r5, [sp, #0x62]
ldrsh fp, [sp, #0x74]
strh r4, [sp, #0x20]
ldrsh r4, [sp, #0x76]
strb r0, [sp, #0x4f]
mov r0, #0x30
strh r0, [sp, #0x4a]
mov r0, #0x22
strb r0, [sp, #0x5e]
add r0, sp, #0x20
strh r3, [sp, #0x24]
strh r7, [sp, #0x36]
strh r7, [sp, #0x38]
strh r6, [sp, #0x3a]
strh r6, [sp, #0x3c]
strh r2, [sp, #0x26]
strh r1, [sp, #0x28]
strh r5, [sp, #0x2a]
strh fp, [sp, #0x2c]
strh r4, [sp, #0x2e]
bl ov10_022C38D4
add r0, sp, #0x20
bl sub_0201F2A0
ldrsh r6, [sp, #0x68]
ldrsh r7, [sp, #0x6a]
ldrsh r0, [sp, #0x7c]
str r0, [sp, #0xc]
ldrsh r0, [sp, #0x7e]
str r0, [sp, #8]
strh r6, [sp, #0x20]
strh r7, [sp, #0x22]
ldr r0, [sp, #0xc]
ldrsh r1, [sp, #0x1a]
strh r0, [sp, #0x24]
ldr r0, [sp, #8]
ldrsh r2, [sp, #0x18]
strh r0, [sp, #0x26]
ldrsh r0, [sp, #0x1c]
strh r1, [sp, #0x2a]
ldrsh r1, [sp, #0x1e]
strh r0, [sp, #0x2c]
add r0, sp, #0x20
strh r2, [sp, #0x28]
strh r1, [sp, #0x2e]
bl ov10_022C38D4
add r0, sp, #0x20
bl sub_0201F2A0
ldrsh r0, [sp, #0x60]
strh r5, [sp, #0x22]
strh r6, [sp, #0x28]
ldrsh r5, [sp, #0x64]
ldrsh r6, [sp, #0x66]
strh r0, [sp, #0x20]
ldrsh r0, [sp, #0x6c]
strh r7, [sp, #0x2a]
strh r5, [sp, #0x24]
strh r6, [sp, #0x26]
str r0, [sp, #4]
ldr r1, [sp, #4]
ldrsh r8, [sp, #0x6e]
add r0, sp, #0x20
strh r1, [sp, #0x2c]
strh r8, [sp, #0x2e]
bl ov10_022C38D4
add r0, sp, #0x20
bl sub_0201F2A0
ldrsh r7, [sp, #0x72]
ldrsh sb, [sp, #0x78]
ldrsh sl, [sp, #0x7a]
ldrsh r1, [sp, #0x70]
strh r7, [sp, #0x22]
strh fp, [sp, #0x24]
strh r4, [sp, #0x26]
strh sb, [sp, #0x28]
strh sl, [sp, #0x2a]
strh r1, [sp, #0x20]
ldr r1, [sp, #0xc]
add r0, sp, #0x20
strh r1, [sp, #0x2c]
ldr r1, [sp, #8]
strh r1, [sp, #0x2e]
bl ov10_022C38D4
add r0, sp, #0x20
bl sub_0201F2A0
ldrsh r1, [sp, #0x70]
strh r5, [sp, #0x20]
strh r6, [sp, #0x22]
strh r7, [sp, #0x26]
strh r1, [sp, #0x24]
ldr r1, [sp, #4]
mov r3, #0
mov r2, #0x60
add r0, sp, #0x20
strh r1, [sp, #0x28]
strh r8, [sp, #0x2a]
strh sb, [sp, #0x2c]
strh sl, [sp, #0x2e]
strh r3, [sp, #0x36]
strh r3, [sp, #0x38]
strh r2, [sp, #0x3a]
strh r2, [sp, #0x3c]
bl sub_0201F2A0
_022C3884:
add sp, sp, #0x80
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022C388C: .word ov10_022DC218
arm_func_end ov10_022C34F0
arm_func_start ov10_022C3890
ov10_022C3890: ; 0x022C3890
stmdb sp!, {r3, lr}
ldr r0, _022C38D0 ; =ov10_022DC218
ldr r0, [r0]
cmp r0, #0
ldmeqia sp!, {r3, pc}
ldr r1, [r0]
cmp r1, #0
beq _022C38B4
bl UnloadWte
_022C38B4:
ldr r0, _022C38D0 ; =ov10_022DC218
ldr r0, [r0]
bl MemFree
ldr r0, _022C38D0 ; =ov10_022DC218
mov r1, #0
str r1, [r0]
ldmia sp!, {r3, pc}
.align 2, 0
_022C38D0: .word ov10_022DC218
arm_func_end ov10_022C3890
arm_func_start ov10_022C38D4
ov10_022C38D4: ; 0x022C38D4
stmdb sp!, {r4, lr}
mov r4, #0
mvn lr, #0xf
mov ip, #0x110
mov r1, #0xd0
_022C38E8:
mov r3, r4, lsl #2
ldrsh r2, [r0, r3]
cmp r2, lr
strlth lr, [r0, r3]
mov r3, r4, lsl #2
ldrsh r2, [r0, r3]
cmp r2, #0x110
strgth ip, [r0, r3]
add r3, r0, r4, lsl #2
ldrsh r2, [r3, #2]
cmp r2, lr
strlth lr, [r3, #2]
add r3, r0, r4, lsl #2
ldrsh r2, [r3, #2]
add r4, r4, #1
cmp r2, #0xd0
strgth r1, [r3, #2]
cmp r4, #4
blt _022C38E8
ldmia sp!, {r4, pc}
arm_func_end ov10_022C38D4
arm_func_start ov10_022C3938
ov10_022C3938: ; 0x022C3938
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x6c
ldr r4, _022C3E80 ; =ov10_022DC0FC
str r1, [sp, #0x10]
ldr r5, [r4, #0xc]
ldr r6, [r4, #8]
str r3, [sp, #0x18]
ldr r3, [sp, #0x90]
str r0, [sp, #0xc]
str r2, [sp, #0x14]
mov r4, #0
str r4, [sp, #0x60]
ldr r1, _022C3E84 ; =ov10_022DC114
add r0, sp, #0x64
str r6, [sp, #0x64]
mov r2, #6
str r5, [sp, #0x68]
str r3, [sp, #0x90]
ldr r4, [sp, #0x94]
ldr sl, [sp, #0x9c]
ldr sb, [sp, #0xa0]
ldr r8, [sp, #0xa4]
bl LoadFileFromRom
ldr r1, [sp, #0x64]
add r0, sp, #0x60
bl HandleSir0Translation
ldrb r5, [r4]
ldr r6, [sp, #0x60]
cmp r5, #0xb4
movhs r5, #0
mov r0, r5
bl GetDungeonGroup
ldrb r3, [r4, #1]
mov r4, r0
add r0, sp, #0x5d
add r1, sp, #0x5c
mov r2, r5
bl ov10_022C42F4
ldrb r2, [sp, #0x5d]
mov r1, r5
ldmia r6, {r0, r3}
ldr r5, [r0, r4, lsl #2]
mov r0, r2, lsl #2
ldrsh r0, [r5, r0]
add r7, r5, r2, lsl #2
ldrb fp, [sp, #0x5c]
ldrb r5, [r3, r0, lsl #2]
ldr r0, _022C3E88 ; =ov10_022DC130
mov r3, r4
str fp, [sp]
str r7, [sp, #4]
str r5, [sp, #8]
bl Debug_Print0
ldrb r0, [sp, #0x5c]
cmp r0, #1
bls _022C3A64
ldrb r0, [sp, #0x5d]
b _022C3A48
_022C3A20:
and r0, r0, #0xff
sub r0, r0, #1
strb r0, [sp, #0x5d]
ldr r2, [r6]
and r1, r0, #0xff
ldr r2, [r2, r4, lsl #2]
mov r1, r1, lsl #2
ldrsh r1, [r2, r1]
ldr r2, [r6, #4]
ldrb r5, [r2, r1, lsl #2]
_022C3A48:
and r1, r0, #0xff
cmp r1, #1
bls _022C3A64
cmp r5, #0xaa
blt _022C3A64
cmp r5, #0xc7
blt _022C3A20
_022C3A64:
add r0, sp, #0x64
bl UnloadFile
mov r0, #0x930
mov r1, #0x10
bl MemAlloc
str r0, [sp, #0x38]
mov r1, r5, lsl #0x10
ldr r0, [sp, #0x14]
mov r1, r1, asr #0x10
mov r2, #0x10
bl ov10_022C2588
mov r1, r5, lsl #0x10
ldr r0, [sp, #0xc]
mov r1, r1, asr #0x10
mov r2, #0x10
bl ov10_022C25EC
mov r1, r5, lsl #0x10
ldr r0, [sp, #0x18]
mov r1, r1, asr #0x10
mov r2, #0x10
bl InitTilesetBuffer
mov r1, r5, lsl #0x10
ldr r0, [sp, #0x38]
mov r1, r1, asr #0x10
mov r2, #0x10
bl ov10_022C2720
mov r6, #0
b _022C3E54
_022C3AD4:
mov r0, r5
bl TilesetSecondaryTerrainIsChasm
cmp r0, #0
sub r0, r6, #1
str r0, [sp, #0x20]
mul r1, r6, sl
ldr r0, [sp, #0x90]
movne r7, #3
add r0, r0, r1, lsl #1
str r0, [sp, #0x58]
ldr r0, [sp, #0x38]
mov r4, #0
add r0, r0, r6, lsl #6
str r0, [sp, #0x40]
mov r0, #0xff
bic r0, r0, #1
str r0, [sp, #0x48]
mov r0, #0xff
bic r0, r0, #1
str r0, [sp, #0x4c]
mov r0, #0xff
bic r0, r0, #1
str r0, [sp, #0x50]
mov r0, r4
orr r0, r0, #1
moveq r7, #0
str r0, [sp, #0x54]
b _022C3E48
_022C3B44:
str r8, [sp]
mov r0, r4
mov r1, r6
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
str r0, [sp, #0x3c]
cmp r5, #0xaa
blt _022C3B88
cmp r4, #0x20
cmplt r6, #0x20
ldrlt r0, [sp, #0x40]
movlt r1, r4, lsl #1
ldrlth r2, [r1, r0]
movge r2, r7
b _022C3E38
_022C3B88:
str r8, [sp]
str r7, [sp, #4]
mov r0, r4
add r1, r6, #1
mov r2, sl
mov r3, sb
bl ov10_022C434C
str r8, [sp]
str r0, [sp, #0x44]
str r7, [sp, #4]
add r0, r4, #1
add r1, r6, #1
mov r2, sl
mov r3, sb
bl ov10_022C434C
str r8, [sp]
str r0, [sp, #0x34]
add r0, r4, #1
mov r1, r6
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
str r8, [sp]
str r0, [sp, #0x30]
ldr r1, [sp, #0x20]
add r0, r4, #1
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
str r8, [sp]
str r0, [sp, #0x2c]
ldr r1, [sp, #0x20]
mov r0, r4
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
str r0, [sp, #0x28]
sub r0, r4, #1
str r8, [sp]
ldr r1, [sp, #0x20]
str r0, [sp, #0x1c]
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
str r0, [sp, #0x24]
str r8, [sp]
ldr r0, [sp, #0x1c]
mov r1, r6
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
mov fp, r0
str r8, [sp]
ldr r0, [sp, #0x1c]
add r1, r6, #1
mov r2, sl
mov r3, sb
str r7, [sp, #4]
bl ov10_022C434C
ldr r1, [sp, #0x3c]
cmp r1, #1
bne _022C3CF8
ldr r1, [sp, #0x44]
ldr r2, [sp, #0x34]
cmp r1, #0
mov r1, #0xff
ldreq r1, [sp, #0x48]
cmp r2, #0
ldr r2, [sp, #0x30]
biceq r1, r1, #2
cmp r2, #0
ldr r2, [sp, #0x2c]
biceq r1, r1, #4
cmp r2, #0
ldr r2, [sp, #0x28]
biceq r1, r1, #8
cmp r2, #0
ldr r2, [sp, #0x24]
biceq r1, r1, #0x10
cmp r2, #0
biceq r1, r1, #0x20
cmp fp, #0
biceq r1, r1, #0x40
cmp r0, #0
biceq r1, r1, #0x80
orr r1, r1, #0x200
b _022C3E2C
_022C3CF8:
cmp r1, #2
bne _022C3D64
ldr r1, [sp, #0x44]
ldr r2, [sp, #0x34]
cmp r1, #2
mov r1, #0xff
ldrne r1, [sp, #0x4c]
cmp r2, #2
ldr r2, [sp, #0x30]
bicne r1, r1, #2
cmp r2, #2
ldr r2, [sp, #0x2c]
bicne r1, r1, #4
cmp r2, #2
ldr r2, [sp, #0x28]
bicne r1, r1, #8
cmp r2, #2
ldr r2, [sp, #0x24]
bicne r1, r1, #0x10
cmp r2, #2
bicne r1, r1, #0x20
cmp fp, #2
bicne r1, r1, #0x40
cmp r0, #2
bicne r1, r1, #0x80
orr r1, r1, #0x100
b _022C3E2C
_022C3D64:
cmp r1, #3
bne _022C3DD0
ldr r1, [sp, #0x44]
ldr r2, [sp, #0x34]
cmp r1, #3
mov r1, #0xff
ldrne r1, [sp, #0x50]
cmp r2, #3
ldr r2, [sp, #0x30]
bicne r1, r1, #2
cmp r2, #3
ldr r2, [sp, #0x2c]
bicne r1, r1, #4
cmp r2, #3
ldr r2, [sp, #0x28]
bicne r1, r1, #8
cmp r2, #3
ldr r2, [sp, #0x24]
bicne r1, r1, #0x10
cmp r2, #3
bicne r1, r1, #0x20
cmp fp, #3
bicne r1, r1, #0x40
cmp r0, #3
bicne r1, r1, #0x80
orr r1, r1, #0x100
b _022C3E2C
_022C3DD0:
ldr r1, [sp, #0x44]
ldr r2, [sp, #0x34]
cmp r1, #0
mov r1, #0
ldreq r1, [sp, #0x54]
cmp r2, #0
ldr r2, [sp, #0x30]
orreq r1, r1, #2
cmp r2, #0
ldr r2, [sp, #0x2c]
orreq r1, r1, #4
cmp r2, #0
ldr r2, [sp, #0x28]
orreq r1, r1, #8
cmp r2, #0
ldr r2, [sp, #0x24]
orreq r1, r1, #0x10
cmp r2, #0
orreq r1, r1, #0x20
cmp fp, #0
orreq r1, r1, #0x40
cmp r0, #0
orreq r1, r1, #0x80
_022C3E2C:
ldr r0, [sp, #0x38]
add r1, r1, r1, lsl #1
ldrb r2, [r0, r1]
_022C3E38:
ldr r0, [sp, #0x58]
mov r1, r4, lsl #1
strh r2, [r1, r0]
add r4, r4, #1
_022C3E48:
cmp r4, sl
blt _022C3B44
add r6, r6, #1
_022C3E54:
cmp r6, sb
blt _022C3AD4
ldr r0, [sp, #0x38]
bl MemFree
mov r1, r5, lsl #0x10
ldr r0, [sp, #0x10]
mov r1, r1, asr #0x10
mov r2, #0x10
bl ov10_022C2654
add sp, sp, #0x6c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022C3E80: .word ov10_022DC0FC
_022C3E84: .word ov10_022DC114
_022C3E88: .word ov10_022DC130
arm_func_end ov10_022C3938
arm_func_start ov10_022C3E8C
ov10_022C3E8C: ; 0x022C3E8C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x28
ldr r4, _022C42E8 ; =ov10_022DC0FC
mov r8, r1
ldr r5, [r4, #4]
ldr r6, [r4]
mov sb, r0
mov sl, r2
mov r4, #0
str r5, [sp, #0x24]
ldr r1, _022C42EC ; =ov10_022DC114
add r0, sp, #0x20
str r6, [sp, #0x20]
mov r2, #6
mov fp, r3
str r4, [sp, #0x10]
ldr r5, [sp, #0x50]
bl LoadFileFromRom
ldr r1, [sp, #0x20]
add r0, sp, #0x10
bl HandleSir0Translation
ldrb r0, [r5]
ldr r6, [sp, #0x10]
bl GetDungeonGroup
mov r7, r0
ldrb r2, [r5]
ldrb r3, [r5, #1]
add r0, sp, #0xd
add r1, sp, #0xc
bl ov10_022C42F4
ldr r2, [r6]
ldrb r1, [sp, #0xd]
ldr r2, [r2, r7, lsl #2]
ldr r0, [r6, #4]
mov r1, r1, lsl #2
ldrsh r1, [r2, r1]
add r0, r0, r1, lsl #2
ldrb r5, [r0, #1]
cmp r5, #0
beq _022C42D4
ldr r1, _022C42E8 ; =ov10_022DC0FC
add r0, sp, #0x18
ldr r3, [r1, #0x14]
ldr r2, [r1, #0x10]
ldr r1, _022C42F0 ; =ov10_022DC190
str r2, [sp, #0x18]
mov r2, #0xf
str r3, [sp, #0x1c]
bl LoadFileFromRom
ldr r1, [sp, #0x18]
add r0, sp, #0x14
bl HandleSir0Translation
ldr r2, [sp, #0x14]
mov r3, r5
mov r0, sl
mov r1, fp
bl ov10_022C27E8
ldr r0, [fp]
mov r3, #0
str r0, [sp, #4]
add r5, r0, #0xa
ldr r4, [sl]
mov r0, r3
mov r1, r3
b _022C3FB8
_022C3F90:
mul r6, r3, r8
mov r2, r1
b _022C3FAC
_022C3F9C:
add r7, r2, r6
mov r7, r7, lsl #1
strh r0, [sb, r7]
add r2, r2, #1
_022C3FAC:
cmp r2, r8
blt _022C3F9C
add r3, r3, #1
_022C3FB8:
cmp r3, r5
blt _022C3F90
mov r6, #5
b _022C4238
_022C3FC8:
mul r0, r6, r8
str r0, [sp]
add r0, r4, #5
mov r7, #5
str r0, [sp, #8]
b _022C4228
_022C3FE0:
bl ov10_022C2838
ldr r1, [sp]
cmp r7, #0
add r1, r7, r1
and r0, r0, #0xff
add r1, sb, r1, lsl #1
cmpge r6, #0
blt _022C4224
cmp r7, r8
cmplt r6, r5
bge _022C4224
cmp r0, #0x10
blo _022C402C
ldrh r2, [r1]
bic r2, r2, #3
strh r2, [r1]
ldrh r2, [r1]
orr r2, r2, #1
strh r2, [r1]
_022C402C:
cmp r0, #0x43
bgt _022C4084
bge _022C4144
cmp r0, #0xf
addls pc, pc, r0, lsl #2
b _022C4224
_022C4044: ; jump table
b _022C409C ; case 0
b _022C40B8 ; case 1
b _022C40D4 ; case 2
b _022C4224 ; case 3
b _022C409C ; case 4
b _022C40F0 ; case 5
b _022C410C ; case 6
b _022C4224 ; case 7
b _022C4144 ; case 8
b _022C409C ; case 9
b _022C4128 ; case 10
b _022C4188 ; case 11
b _022C41A8 ; case 12
b _022C41D4 ; case 13
b _022C420C ; case 14
b _022C4224 ; case 15
_022C4084:
cmp r0, #0x44
bgt _022C4094
beq _022C4160
b _022C4224
_022C4094:
cmp r0, #0x45
b _022C4224
_022C409C:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #1
strh r0, [r1]
b _022C4224
_022C40B8:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
bic r0, r0, #0x100
strh r0, [r1]
b _022C4224
_022C40D4:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #0x10
strh r0, [r1]
b _022C4224
_022C40F0:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #2
strh r0, [r1]
b _022C4224
_022C410C:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #3
strh r0, [r1]
b _022C4224
_022C4128:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #0x13
strh r0, [r1]
b _022C4224
_022C4144:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #1
strh r0, [r1]
b _022C4224
_022C4160:
ldrh r0, [r1]
orr r0, r0, #0x800
strh r0, [r1]
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #1
strh r0, [r1]
b _022C4224
_022C4188:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #1
orr r0, r0, #0x800
strh r0, [r1]
b _022C4224
_022C41A8:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #1
orr r0, r0, #0x1000
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #0x810
strh r0, [r1]
b _022C4224
_022C41D4:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #1
orr r0, r0, #0x1000
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #0x810
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #0x2000
strh r0, [r1]
b _022C4224
_022C420C:
ldrh r0, [r1]
bic r0, r0, #3
strh r0, [r1]
ldrh r0, [r1]
orr r0, r0, #0x10
strh r0, [r1]
_022C4224:
add r7, r7, #1
_022C4228:
ldr r0, [sp, #8]
cmp r7, r0
blt _022C3FE0
add r6, r6, #1
_022C4238:
ldr r0, [sp, #4]
add r2, r0, #5
cmp r6, r2
blt _022C3FC8
mov r6, #0
add r1, r4, #5
mov lr, #0x100
b _022C42AC
_022C4258:
mul r3, r6, r8
mov r7, #0
b _022C42A0
_022C4264:
cmp r7, #5
add r0, r7, r3
blt _022C4288
cmp r7, r1
bge _022C4288
cmp r6, #5
blt _022C4288
cmp r6, r2
blt _022C429C
_022C4288:
mov r0, r0, lsl #1
strh lr, [sb, r0]
ldrh ip, [sb, r0]
orr ip, ip, #0x10
strh ip, [sb, r0]
_022C429C:
add r7, r7, #1
_022C42A0:
cmp r7, r8
blt _022C4264
add r6, r6, #1
_022C42AC:
cmp r6, r5
blt _022C4258
add r0, sp, #0x18
bl UnloadFile
add r0, r4, #0xa
str r0, [sl]
ldr r0, [sp, #4]
mov r4, #1
add r0, r0, #0xa
str r0, [fp]
_022C42D4:
add r0, sp, #0x20
bl UnloadFile
mov r0, r4
add sp, sp, #0x28
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022C42E8: .word ov10_022DC0FC
_022C42EC: .word ov10_022DC114
_022C42F0: .word ov10_022DC190
arm_func_end ov10_022C3E8C
arm_func_start ov10_022C42F4
ov10_022C42F4: ; 0x022C42F4
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r5, r2
mov r7, r0
mov r4, r3
mov r0, r5
mov r6, r1
bl GetNbFloors
cmp r4, r0
movgt r4, r0
mov r0, r5
bl GetNbPrecedingFloors
add r4, r4, r0
mov r0, r5
bl GetNbFloorsDungeonGroup
cmp r4, #1
movlt r4, #1
blt _022C4340
cmp r4, r0
movgt r4, r0
_022C4340:
strb r4, [r7]
strb r0, [r6]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov10_022C42F4