pokediamond/arm9/asm/unk_020647A4.s

691 lines
14 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global UNK_020F7D4C
UNK_020F7D4C: ; 0x020F7D4C
.byte 0x02, 0x01, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00
.byte 0x02, 0x01, 0x00, 0x00, 0xF6, 0x01, 0x00, 0x00
.global UNK_020F7D64
UNK_020F7D64: ; 0x020F7D64
.byte 0x00, 0x80, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2C, 0x00
.global UNK_020F7D70
UNK_020F7D70: ; 0x020F7D70
.byte 0x00, 0x00, 0x01, 0x00
.global UNK_020F7D74
UNK_020F7D74: ; 0x020F7D74
.byte 0x00, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00
.global UNK_020F7D80
UNK_020F7D80: ; 0x020F7D80
.byte 0x00, 0x00, 0x00, 0x00
.global UNK_020F7D84
UNK_020F7D84: ; 0x020F7D84
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x12, 0x00, 0x00, 0x00
.byte 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00
.byte 0x00, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x0F, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.text
thumb_func_start sub_020647A4
sub_020647A4: ; 0x020647A4
push {r3-r7, lr}
sub sp, #0x30
add r4, r0, #0x0
bl FieldSystem_GetSaveData
bl sub_02024ED8
mov r1, #0x7
bl sub_020254A0
ldrh r1, [r0, #0x2]
ldrh r0, [r0, #0x0]
ldr r3, _0206485C ; =UNK_020F7D70
mov r7, #0x18
add r2, r1, #0x0
mul r2, r7
add r6, r3, r2
lsl r0, r0, #0x2
ldr r5, [r6, r0]
ldr r0, [r6, #0x14]
cmp r0, #0x0
beq _0206480A
ldr r3, _02064860 ; =UNK_020F7D64
add r2, sp, #0x24
ldmia r3!, {r0-r1}
mov r12, r2
stmia r2!, {r0-r1}
ldr r0, [r3, #0x0]
add r7, #0xea
str r0, [r2, #0x0]
str r5, [sp, #0x28]
mov r0, #0x0
str r0, [sp, #0x0]
ldr r0, [r4, #0x4c]
add r2, r7, #0x0
str r0, [sp, #0x4]
add r0, r4, #0x0
add r0, #0xa0
ldr r0, [r0, #0x0]
ldr r1, [r4, #0x2c]
mov r3, r12
bl ov05_021E7FBC
add r0, r4, #0x0
add r0, #0xa0
ldr r0, [r0, #0x0]
ldr r1, _02064864 ; =0x00000102
bl ov05_021E7ED8
str r0, [sp, #0x14]
b _0206482C
_0206480A:
ldr r0, _02064868 ; =UNK_020F7D4C
add r1, sp, #0xc
ldr r2, [r0, #0x8]
ldr r0, [r0, #0xc]
str r2, [sp, #0xc]
str r0, [sp, #0x10]
mov r0, #0x0
str r0, [sp, #0x0]
add r0, r4, #0x0
mov r2, #0x2
add r3, sp, #0x14
bl sub_0204AA5C
cmp r0, #0x0
bne _0206482C
bl GF_AssertFail
_0206482C:
ldr r1, [sp, #0x14]
add r0, sp, #0x18
bl ov05_021E7EA0
ldr r0, [sp, #0x14]
add r1, sp, #0x18
str r5, [sp, #0x1c]
bl ov05_021E7EB0
mov r0, #0x2
str r0, [sp, #0x0]
str r5, [sp, #0x4]
add r4, #0x9c
ldr r0, [r4, #0x0]
mov r3, #0x3
str r0, [sp, #0x8]
ldr r1, [r6, #0x8]
ldr r2, [r6, #0xc]
mov r0, #0x0
bl ov05_021F44D8
add sp, #0x30
pop {r3-r7, pc}
nop
_0206485C: .word UNK_020F7D70
_02064860: .word UNK_020F7D64
_02064864: .word 0x00000102
_02064868: .word UNK_020F7D4C
thumb_func_start sub_0206486C
sub_0206486C: ; 0x0206486C
push {r3-r5, lr}
add r4, r0, #0x0
bl FieldSystem_GetSaveData
bl sub_02024ED8
add r5, r0, #0x0
mov r1, #0x7
bl sub_02025490
add r0, r5, #0x0
mov r1, #0x7
bl sub_020254A0
mov r3, #0x1
str r3, [r0, #0x4]
mov r2, #0x0
str r2, [r0, #0x8]
ldr r4, [r4, #0x1c]
ldr r5, _020649A8 ; =0x00000123
ldr r1, [r4, #0x0]
cmp r1, r5
bgt _020648C4
bge _020648D6
add r5, r1, #0x0
sub r5, #0xb0
cmp r5, #0x9
bhi _020649A0
add r5, r5, r5
add r5, pc
ldrh r5, [r5, #0x6]
lsl r5, r5, #0x10
asr r5, r5, #0x10
add pc, r5
_020648B0: ; jump table (using 16-bit offset)
.short _02064910 - _020648B0 - 2; case 0
.short _020649A0 - _020648B0 - 2; case 1
.short _02064928 - _020648B0 - 2; case 2
.short _020649A0 - _020648B0 - 2; case 3
.short _02064940 - _020648B0 - 2; case 4
.short _020649A0 - _020648B0 - 2; case 5
.short _02064958 - _020648B0 - 2; case 6
.short _020649A0 - _020648B0 - 2; case 7
.short _02064970 - _020648B0 - 2; case 8
.short _02064988 - _020648B0 - 2; case 9
_020648C4:
ldr r2, _020649AC ; =0x00000125
cmp r1, r2
bgt _020648CE
beq _020648E8
b _020649A0
_020648CE:
add r2, r2, #0x1
cmp r1, r2
beq _020648FC
b _020649A0
_020648D6:
ldr r1, [r4, #0xc]
cmp r1, #0x1a
bne _020648E0
strh r2, [r0, #0x0]
b _020648E2
_020648E0:
strh r3, [r0, #0x0]
_020648E2:
mov r1, #0x0
strh r1, [r0, #0x2]
pop {r3-r5, pc}
_020648E8:
ldr r1, [r4, #0xc]
cmp r1, #0x30
bne _020648F2
mov r1, #0x0
b _020648F4
_020648F2:
mov r1, #0x1
_020648F4:
strh r1, [r0, #0x0]
mov r1, #0x1
strh r1, [r0, #0x2]
pop {r3-r5, pc}
_020648FC:
ldr r1, [r4, #0xc]
cmp r1, #0xf
bne _02064906
mov r1, #0x0
b _02064908
_02064906:
mov r1, #0x1
_02064908:
strh r1, [r0, #0x0]
mov r1, #0x2
strh r1, [r0, #0x2]
pop {r3-r5, pc}
_02064910:
ldr r1, [r4, #0xc]
cmp r1, #0xf
bne _0206491A
strh r2, [r0, #0x0]
b _0206491E
_0206491A:
strh r3, [r0, #0x0]
str r2, [r0, #0x4]
_0206491E:
mov r1, #0x3
strh r1, [r0, #0x2]
mov r1, #0x1
str r1, [r0, #0x8]
pop {r3-r5, pc}
_02064928:
ldr r1, [r4, #0xc]
cmp r1, #0xf
bne _02064932
strh r2, [r0, #0x0]
b _02064936
_02064932:
strh r3, [r0, #0x0]
str r2, [r0, #0x4]
_02064936:
mov r1, #0x4
strh r1, [r0, #0x2]
mov r1, #0x1
str r1, [r0, #0x8]
pop {r3-r5, pc}
_02064940:
ldr r1, [r4, #0xc]
cmp r1, #0xf
bne _0206494A
strh r2, [r0, #0x0]
b _0206494E
_0206494A:
strh r3, [r0, #0x0]
str r2, [r0, #0x4]
_0206494E:
mov r1, #0x5
strh r1, [r0, #0x2]
mov r1, #0x1
str r1, [r0, #0x8]
pop {r3-r5, pc}
_02064958:
ldr r1, [r4, #0xc]
cmp r1, #0xf
bne _02064962
strh r2, [r0, #0x0]
b _02064966
_02064962:
strh r3, [r0, #0x0]
str r2, [r0, #0x4]
_02064966:
mov r1, #0x6
strh r1, [r0, #0x2]
mov r1, #0x1
str r1, [r0, #0x8]
pop {r3-r5, pc}
_02064970:
ldr r1, [r4, #0xc]
cmp r1, #0x17
bne _0206497A
strh r2, [r0, #0x0]
b _0206497E
_0206497A:
strh r3, [r0, #0x0]
str r2, [r0, #0x4]
_0206497E:
mov r1, #0x7
strh r1, [r0, #0x2]
mov r1, #0x1
str r1, [r0, #0x8]
pop {r3-r5, pc}
_02064988:
ldr r1, [r4, #0xc]
cmp r1, #0x12
bne _02064992
strh r2, [r0, #0x0]
b _02064996
_02064992:
strh r3, [r0, #0x0]
str r2, [r0, #0x4]
_02064996:
mov r1, #0x8
strh r1, [r0, #0x2]
mov r1, #0x1
str r1, [r0, #0x8]
pop {r3-r5, pc}
_020649A0:
bl GF_AssertFail
pop {r3-r5, pc}
nop
_020649A8: .word 0x00000123
_020649AC: .word 0x00000125
thumb_func_start sub_020649B0
sub_020649B0: ; 0x020649B0
push {r3, lr}
bl FieldSystem_GetSaveData
bl sub_02024ED8
mov r1, #0x7
bl sub_020254A0
ldr r0, [r0, #0x4]
cmp r0, #0x0
beq _020649CA
mov r0, #0x1
b _020649CC
_020649CA:
mov r0, #0x0
_020649CC:
lsl r0, r0, #0x18
lsr r0, r0, #0x18
pop {r3, pc}
.balign 4
thumb_func_start sub_020649D4
sub_020649D4: ; 0x020649D4
push {r3-r5, lr}
add r5, r0, #0x0
bl FieldSystem_GetSaveData
bl sub_02024ED8
mov r1, #0x7
bl sub_020254A0
add r4, r0, #0x0
ldrh r1, [r4, #0x2]
mov r0, #0x18
add r2, r1, #0x0
mul r2, r0
ldr r0, _02064A58 ; =UNK_020F7D80
ldr r0, [r0, r2]
cmp r0, #0x0
beq _020649FE
ldrh r0, [r4, #0x0]
cmp r0, #0x1
beq _02064A54
_020649FE:
mov r0, #0xb
mov r1, #0x10
bl Heap_AllocAtEnd
add r2, r0, #0x0
mov r0, #0x0
str r0, [r2, #0x0]
ldrh r1, [r4, #0x2]
mov r0, #0x18
add r3, r1, #0x0
ldr r1, _02064A5C ; =UNK_020F7D84
mul r3, r0
ldr r1, [r1, r3]
str r1, [r2, #0x8]
ldr r1, [r4, #0x8]
str r1, [r2, #0xc]
ldrh r1, [r4, #0x0]
cmp r1, #0x0
ldrh r1, [r4, #0x2]
bne _02064A3E
add r3, r1, #0x0
mul r3, r0
ldr r0, _02064A60 ; =UNK_020F7D74
ldr r1, _02064A64 ; =sub_02064A70
ldr r0, [r0, r3]
str r0, [r2, #0x4]
ldr r0, [r5, #0x10]
bl TaskManager_Call
mov r0, #0x1
strh r0, [r4, #0x0]
pop {r3-r5, pc}
_02064A3E:
add r3, r1, #0x0
mul r3, r0
ldr r0, _02064A68 ; =UNK_020F7D70
ldr r1, _02064A6C ; =sub_02064B70
ldr r0, [r0, r3]
str r0, [r2, #0x4]
ldr r0, [r5, #0x10]
bl TaskManager_Call
mov r0, #0x0
strh r0, [r4, #0x0]
_02064A54:
pop {r3-r5, pc}
nop
_02064A58: .word UNK_020F7D80
_02064A5C: .word UNK_020F7D84
_02064A60: .word UNK_020F7D74
_02064A64: .word sub_02064A70
_02064A68: .word UNK_020F7D70
_02064A6C: .word sub_02064B70
thumb_func_start sub_02064A70
sub_02064A70: ; 0x02064A70
push {r4-r5, lr}
sub sp, #0x1c
add r4, r0, #0x0
bl TaskManager_GetFieldSystem
add r5, r0, #0x0
add r0, r4, #0x0
bl TaskManager_GetEnvironment
add r4, r0, #0x0
ldr r1, [r4, #0x0]
cmp r1, #0x3
bhi _02064B5C
add r1, r1, r1
add r1, pc
ldrh r1, [r1, #0x6]
lsl r1, r1, #0x10
asr r1, r1, #0x10
add pc, r1
_02064A96: ; jump table (using 16-bit offset)
.short _02064A9E - _02064A96 - 2; case 0
.short _02064AB4 - _02064A96 - 2; case 1
.short _02064B2E - _02064A96 - 2; case 2
.short _02064B52 - _02064A96 - 2; case 3
_02064A9E:
ldr r0, [r5, #0x38]
mov r1, #0x0
bl PlayerAvatar_ToggleAutomaticHeightUpdating
ldr r0, [r4, #0xc]
bl sub_02064C64
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
b _02064B5C
_02064AB4:
ldr r0, [r4, #0x8]
cmp r0, #0x0
beq _02064ACA
add r0, r5, #0x0
add r0, #0xa0
ldr r0, [r0, #0x0]
ldr r1, _02064B64 ; =0x00000102
bl ov05_021E7ED8
str r0, [sp, #0xc]
b _02064AEC
_02064ACA:
ldr r0, _02064B68 ; =UNK_020F7D4C
add r1, sp, #0x4
ldr r2, [r0, #0x0]
ldr r0, [r0, #0x4]
str r2, [sp, #0x4]
str r0, [sp, #0x8]
mov r0, #0x0
str r0, [sp, #0x0]
add r0, r5, #0x0
mov r2, #0x2
add r3, sp, #0xc
bl sub_0204AA5C
cmp r0, #0x0
bne _02064AEC
bl GF_AssertFail
_02064AEC:
ldr r1, [sp, #0xc]
add r0, sp, #0x10
bl ov05_021E7EA0
ldr r0, [r4, #0xc]
cmp r0, #0x0
bne _02064AFE
mov r1, #0x1
b _02064B00
_02064AFE:
mov r1, #0x2
_02064B00:
ldr r0, [sp, #0x14]
lsl r1, r1, #0xc
add r1, r0, r1
str r1, [sp, #0x14]
ldr r0, [r4, #0x4]
cmp r1, r0
blt _02064B1C
str r0, [sp, #0x14]
ldr r0, [r4, #0xc]
bl sub_02064C84
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
_02064B1C:
ldr r0, [r5, #0x38]
ldr r1, [sp, #0x14]
bl PlayerAvatar_SetMapObjectYPosition
ldr r0, [sp, #0xc]
add r1, sp, #0x10
bl ov05_021E7EB0
b _02064B5C
_02064B2E:
add r2, r5, #0x0
add r2, #0x9c
ldr r1, [r4, #0x4]
ldr r2, [r2, #0x0]
mov r0, #0x0
bl ov05_021F4594
ldr r0, [r5, #0x38]
mov r1, #0x1
bl PlayerAvatar_ToggleAutomaticHeightUpdatingImmediate
ldr r0, _02064B6C ; =0x0000061A
bl PlaySE
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
b _02064B5C
_02064B52:
bl Heap_Free
add sp, #0x1c
mov r0, #0x1
pop {r4-r5, pc}
_02064B5C:
mov r0, #0x0
add sp, #0x1c
pop {r4-r5, pc}
nop
_02064B64: .word 0x00000102
_02064B68: .word UNK_020F7D4C
_02064B6C: .word 0x0000061A
thumb_func_start sub_02064B70
sub_02064B70: ; 0x02064B70
push {r4-r5, lr}
sub sp, #0x1c
add r4, r0, #0x0
bl TaskManager_GetFieldSystem
add r5, r0, #0x0
add r0, r4, #0x0
bl TaskManager_GetEnvironment
add r4, r0, #0x0
ldr r1, [r4, #0x0]
cmp r1, #0x3
bhi _02064C52
add r1, r1, r1
add r1, pc
ldrh r1, [r1, #0x6]
lsl r1, r1, #0x10
asr r1, r1, #0x10
add pc, r1
_02064B96: ; jump table (using 16-bit offset)
.short _02064B9E - _02064B96 - 2; case 0
.short _02064BB4 - _02064B96 - 2; case 1
.short _02064C24 - _02064B96 - 2; case 2
.short _02064C48 - _02064B96 - 2; case 3
_02064B9E:
ldr r0, [r5, #0x38]
mov r1, #0x0
bl PlayerAvatar_ToggleAutomaticHeightUpdating
ldr r0, [r4, #0xc]
bl sub_02064C64
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
b _02064C52
_02064BB4:
ldr r0, [r4, #0x8]
cmp r0, #0x0
beq _02064BCA
add r0, r5, #0x0
add r0, #0xa0
ldr r0, [r0, #0x0]
ldr r1, _02064C58 ; =0x00000102
bl ov05_021E7ED8
str r0, [sp, #0xc]
b _02064BEC
_02064BCA:
ldr r0, _02064C5C ; =UNK_020F7D4C
add r1, sp, #0x4
ldr r2, [r0, #0x10]
ldr r0, [r0, #0x14]
str r2, [sp, #0x4]
str r0, [sp, #0x8]
mov r0, #0x0
str r0, [sp, #0x0]
add r0, r5, #0x0
mov r2, #0x2
add r3, sp, #0xc
bl sub_0204AA5C
cmp r0, #0x0
bne _02064BEC
bl GF_AssertFail
_02064BEC:
ldr r1, [sp, #0xc]
add r0, sp, #0x10
bl ov05_021E7EA0
mov r0, #0x1
ldr r1, [sp, #0x14]
lsl r0, r0, #0xc
sub r1, r1, r0
str r1, [sp, #0x14]
ldr r0, [r4, #0x4]
cmp r1, r0
bgt _02064C12
str r0, [sp, #0x14]
ldr r0, [r4, #0xc]
bl sub_02064C84
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
_02064C12:
ldr r0, [r5, #0x38]
ldr r1, [sp, #0x14]
bl PlayerAvatar_SetMapObjectYPosition
ldr r0, [sp, #0xc]
add r1, sp, #0x10
bl ov05_021E7EB0
b _02064C52
_02064C24:
add r2, r5, #0x0
add r2, #0x9c
ldr r1, [r4, #0x4]
ldr r2, [r2, #0x0]
mov r0, #0x0
bl ov05_021F4594
ldr r0, [r5, #0x38]
mov r1, #0x1
bl PlayerAvatar_ToggleAutomaticHeightUpdatingImmediate
ldr r0, _02064C60 ; =0x0000061A
bl PlaySE
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
b _02064C52
_02064C48:
bl Heap_Free
add sp, #0x1c
mov r0, #0x1
pop {r4-r5, pc}
_02064C52:
mov r0, #0x0
add sp, #0x1c
pop {r4-r5, pc}
.balign 4
_02064C58: .word 0x00000102
_02064C5C: .word UNK_020F7D4C
_02064C60: .word 0x0000061A
thumb_func_start sub_02064C64
sub_02064C64: ; 0x02064C64
push {r3, lr}
cmp r0, #0x0
bne _02064C72
ldr r0, _02064C7C ; =0x00000611
bl PlaySE
pop {r3, pc}
_02064C72:
ldr r0, _02064C80 ; =0x00000614
bl PlaySE
pop {r3, pc}
nop
_02064C7C: .word 0x00000611
_02064C80: .word 0x00000614
thumb_func_start sub_02064C84
sub_02064C84: ; 0x02064C84
push {r3, lr}
cmp r0, #0x0
bne _02064C94
ldr r0, _02064CA0 ; =0x00000611
mov r1, #0x0
bl sub_020054F0
pop {r3, pc}
_02064C94:
ldr r0, _02064CA4 ; =0x00000614
mov r1, #0x0
bl sub_020054F0
pop {r3, pc}
nop
_02064CA0: .word 0x00000611
_02064CA4: .word 0x00000614