summaryrefslogtreecommitdiff
path: root/arm9/modules/04/asm/mod04_021E05FC.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/modules/04/asm/mod04_021E05FC.s')
-rw-r--r--arm9/modules/04/asm/mod04_021E05FC.s830
1 files changed, 830 insertions, 0 deletions
diff --git a/arm9/modules/04/asm/mod04_021E05FC.s b/arm9/modules/04/asm/mod04_021E05FC.s
new file mode 100644
index 00000000..21395d39
--- /dev/null
+++ b/arm9/modules/04/asm/mod04_021E05FC.s
@@ -0,0 +1,830 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ arm_func_start MOD04_021E05FC
+MOD04_021E05FC: ; 0x021E05FC
+ ldr r0, _021E0624 ; =UNK04_022106C8
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _021E061C
+ ldr r0, [r0, #4]
+ cmp r0, #5
+ moveq r0, #1
+ bxeq lr
+_021E061C:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+_021E0624: .word UNK04_022106C8
+ arm_func_end MOD04_021E05FC
+
+ arm_func_start MOD04_021E0628
+MOD04_021E0628: ; 0x021E0628
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #0x4c
+ mov r4, r1
+ ldr r1, [r4]
+ mov r5, r0
+ cmp r1, #0
+ addne sp, sp, #0x4c
+ ldmneia sp!, {r4, r5, pc}
+ ldr r1, _021E07CC ; =UNK04_022106C8
+ ldr r2, [r1]
+ ldr r1, [r2, #4]
+ cmp r1, #3
+ bne _021E0704
+ ldrsb r1, [r4, #0x8e]
+ cmp r1, #0
+ bne _021E06DC
+ ldr r0, [r2, #0x1c]
+ ldr r1, [r2, #0xc]
+ add r2, sp, #8
+ add r0, r0, #4
+ bl DWCi_Acc_LoginIdToUserName
+ ldr r1, _021E07D0 ; =0x00000705
+ add r2, sp, #8
+ mov r0, r5
+ bl MOD04_021F0B30
+ bl MOD04_021E0DB0
+ cmp r0, #0
+ addne sp, sp, #0x4c
+ ldmneia sp!, {r4, r5, pc}
+ ldr r0, _021E07CC ; =UNK04_022106C8
+ mov r3, #4
+ ldr r1, [r0]
+ ldr r0, _021E07D4 ; =MOD04_021E0628
+ str r3, [r1, #4]
+ mov r2, #0
+ str r0, [sp]
+ str r2, [sp, #4]
+ ldr r1, [r4, #4]
+ mov r0, r5
+ mov r3, r2
+ bl MOD04_021F0B9C
+ bl MOD04_021E0DB0
+ add sp, sp, #0x4c
+ cmp r0, #0
+ ldmia sp!, {r4, r5, pc}
+_021E06DC:
+ bl MOD04_021F0D54
+ ldr r0, _021E07D8 ; =MOD04_021E0C80
+ mov r1, #0
+ bl MOD04_021E0A00
+ ldr r0, _021E07CC ; =UNK04_022106C8
+ mov r1, #1
+ ldr r0, [r0]
+ add sp, sp, #0x4c
+ str r1, [r0, #4]
+ ldmia sp!, {r4, r5, pc}
+_021E0704:
+ cmp r1, #4
+ addne sp, sp, #0x4c
+ ldmneia sp!, {r4, r5, pc}
+ ldr r0, [r2, #0x1c]
+ ldr r1, [r2, #0xc]
+ add r2, sp, #0x1d
+ add r0, r0, #4
+ bl DWCi_Acc_LoginIdToUserName
+ add r1, sp, #0x1d
+ add r0, r4, #0x8e
+ bl strcmp
+ cmp r0, #0
+ bne _021E079C
+ ldr r0, _021E07CC ; =UNK04_022106C8
+ add r2, sp, #0x32
+ ldr r0, [r0]
+ ldr r1, [r0, #0xc]
+ add r0, r0, #0x3c
+ bl DWCi_Acc_LoginIdToUserName
+ ldr r0, _021E07CC ; =UNK04_022106C8
+ ldr r2, [r4, #4]
+ ldr r1, [r0]
+ ldr r0, [r1, #0x1c]
+ add r1, r1, #0x3c
+ bl DWCi_Acc_SetLoginIdToUserData
+ mov r0, r5
+ bl MOD04_021F0D54
+ ldr r0, _021E07CC ; =UNK04_022106C8
+ ldr r1, _021E07DC ; =UNK04_022106C4
+ ldr r4, [r0]
+ ldr r0, _021E07E0 ; =UNK04_022106CC
+ ldr r2, [r1]
+ ldr r3, [r0]
+ add r0, r4, #0x48
+ add r1, r4, #0x148
+ blx r3
+ add sp, sp, #0x4c
+ ldmia sp!, {r4, r5, pc}
+_021E079C:
+ ldr r0, _021E07D4 ; =MOD04_021E0628
+ mov r2, #0
+ str r0, [sp]
+ str r2, [sp, #4]
+ ldr r1, [r4, #4]
+ mov r0, r5
+ mov r3, r2
+ bl MOD04_021F0B9C
+ bl MOD04_021E0DB0
+ cmp r0, #0
+ add sp, sp, #0x4c
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021E07CC: .word UNK04_022106C8
+_021E07D0: .word 0x00000705
+_021E07D4: .word MOD04_021E0628
+_021E07D8: .word MOD04_021E0C80
+_021E07DC: .word UNK04_022106C4
+_021E07E0: .word UNK04_022106CC
+ arm_func_end MOD04_021E0628
+
+ arm_func_start MOD04_021E07E4
+MOD04_021E07E4: ; 0x021E07E4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x3d4
+ bl MOD04_021D988C
+ cmp r0, #0x15
+ bne _021E08BC
+ add r0, sp, #0
+ bl MOD04_021D97F8
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ add r1, sp, #0x4a
+ ldr r0, [r0]
+ add r0, r0, #0x48
+ bl strcpy
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ add r1, sp, #0x100
+ ldr r0, [r0]
+ add r1, r1, #0x77
+ add r0, r0, #0x148
+ bl strcpy
+ bl MOD04_021D991C
+ ldr r1, _021E09DC ; =UNK04_022106C8
+ mov r0, #0
+ ldr r1, [r1]
+ mov r2, r0
+ ldr r1, [r1, #0x24]
+ bl MOD04_021DD904
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ mov r2, #0
+ ldr r1, [r0]
+ str r2, [r1, #0x24]
+ ldr r0, [r0]
+ ldr r0, [r0, #0x1c]
+ bl DWCi_Acc_IsAuthentic
+ cmp r0, #0
+ beq _021E0898
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ ldr r1, _021E09E0 ; =UNK04_022106C4
+ ldr ip, [r0]
+ ldr r0, _021E09E4 ; =UNK04_022106CC
+ ldr r2, [r1]
+ ldr r3, [r0]
+ add r0, ip, #0x48
+ add r1, ip, #0x148
+ blx r3
+ add sp, sp, #0x3d4
+ ldmfd sp!, {pc}
+_021E0898:
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ ldr r2, _021E09E8 ; =MOD04_021E0C98
+ ldr r1, [r0]
+ mov r3, #3
+ add r0, r1, #0x48
+ add r1, r1, #0x148
+ bl MOD04_021E0BE0
+ add sp, sp, #0x3d4
+ ldmfd sp!, {pc}
+_021E08BC:
+ bl MOD04_021D988C
+ cmp r0, #0
+ addeq sp, sp, #0x3d4
+ ldmeqia sp!, {pc}
+ bl OS_GetTick
+ ldr r3, _021E09DC ; =UNK04_022106C8
+ ldr r2, _021E09EC ; =0x000082EA
+ ldr ip, [r3]
+ mov r3, #0
+ ldr lr, [ip, #0x28]
+ ldr ip, [ip, #0x2c]
+ subs lr, r0, lr
+ sbc r0, r1, ip
+ mov r1, r0, lsl #6
+ orr r1, r1, lr, lsr #26
+ mov r0, lr, lsl #6
+ bl _ll_udiv
+ ldr r2, _021E09F0 ; =0x00002710
+ cmp r1, #0
+ cmpeq r0, r2
+ bls _021E0958
+ add r0, sp, #0x1c4
+ bl MOD04_021D97F8
+ bl MOD04_021D991C
+ ldr r1, _021E09DC ; =UNK04_022106C8
+ mov r0, #0
+ ldr r1, [r1]
+ mov r2, r0
+ ldr r1, [r1, #0x24]
+ bl MOD04_021DD904
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ mov r2, #0
+ ldr r1, [r0]
+ mov r0, #2
+ str r2, [r1, #0x24]
+ ldr r1, [sp, #0x1c4]
+ bl MOD04_021E0EAC
+ add sp, sp, #0x3d4
+ ldmfd sp!, {pc}
+_021E0958:
+ bl MOD04_021D991C
+ add r0, sp, #0x388
+ mov r1, #0
+ mov r2, #0x48
+ bl MI_CpuFill8
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ ldr r0, [r0]
+ ldr r0, [r0, #0x10]
+ bl MOD04_021DE89C
+ ldr r1, _021E09DC ; =UNK04_022106C8
+ mov r2, r0, lsl #1
+ ldr r1, [r1]
+ add r2, r2, #2
+ ldr r0, [r1, #0x10]
+ add r1, sp, #0x388
+ bl MI_CpuCopy8
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ ldr r1, _021E09F4 ; =0x00000251
+ ldr r2, [r0]
+ add r0, sp, #0x3bc
+ add r1, r2, r1
+ bl strcpy
+ ldr r2, _021E09F8 ; =MOD04_021DD944
+ ldr r0, _021E09DC ; =UNK04_022106C8
+ str r2, [sp, #0x3c8]
+ ldr r2, _021E09FC ; =MOD04_021DD904
+ ldr r1, [r0]
+ str r2, [sp, #0x3cc]
+ ldr r1, [r1, #0x24]
+ add r0, sp, #0x388
+ bl MOD04_021D9ACC
+ add sp, sp, #0x3d4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021E09DC: .word UNK04_022106C8
+_021E09E0: .word UNK04_022106C4
+_021E09E4: .word UNK04_022106CC
+_021E09E8: .word MOD04_021E0C98
+_021E09EC: .word 0x000082EA
+_021E09F0: .word 0x00002710
+_021E09F4: .word 0x00000251
+_021E09F8: .word MOD04_021DD944
+_021E09FC: .word MOD04_021DD904
+ arm_func_end MOD04_021E07E4
+
+ arm_func_start MOD04_021E0A00
+MOD04_021E0A00: ; 0x021E0A00
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #0x4c
+ mov r5, r0
+ mov r4, r1
+ add r0, sp, #0
+ mov r1, #0
+ mov r2, #0x48
+ bl MI_CpuFill8
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r2, _021E0BBC ; =UNK04_022106CC
+ ldr r1, _021E0BC0 ; =UNK04_022106C4
+ ldr r0, [r0]
+ str r5, [r2]
+ str r4, [r1]
+ ldr r0, [r0, #0x1c]
+ bl DWCi_Acc_IsAuthentic
+ cmp r0, #0
+ beq _021E0A68
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r1, [r0]
+ ldr r0, [r1, #0x1c]
+ add r2, r1, #0x248
+ ldr r1, [r0, #0x24]
+ add r0, r0, #0x10
+ bl DWCi_Acc_LoginIdToUserName
+ b _021E0B1C
+_021E0A68:
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r0, [r0]
+ add r0, r0, #0x3c
+ bl DWCi_Acc_IsValidLoginId
+ cmp r0, #0
+ bne _021E0AD0
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r0, [r0]
+ ldr r0, [r0, #0x1c]
+ add r0, r0, #4
+ bl DWCi_Acc_CheckConsoleUserId
+ cmp r0, #0
+ beq _021E0ABC
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r1, [r0]
+ ldr r0, [r1, #0x1c]
+ add r3, r1, #0x3c
+ add r0, r0, #4
+ ldmia r0, {r0, r1, r2}
+ stmia r3, {r0, r1, r2}
+ b _021E0B04
+_021E0ABC:
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r0, [r0]
+ add r0, r0, #0x3c
+ bl DWCi_Acc_CreateTempLoginId
+ b _021E0B04
+_021E0AD0:
+ bl OS_GetTick
+ ldr r2, _021E0BC4 ; =0x6C078965
+ ldr r3, _021E0BC8 ; =0x5D588B65
+ umull ip, r4, r0, r2
+ mla r4, r0, r3, r4
+ ldr r3, _021E0BB8 ; =UNK04_022106C8
+ ldr r0, _021E0BCC ; =0x00269EC3
+ mla r4, r1, r2, r4
+ adds r0, ip, r0
+ ldr r3, [r3]
+ adc r1, r4, #0
+ add r0, r3, #0x3c
+ bl DWCi_Acc_SetPlayerId
+_021E0B04:
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r2, [r0]
+ ldr r1, [r2, #0xc]
+ add r0, r2, #0x3c
+ add r2, r2, #0x248
+ bl DWCi_Acc_LoginIdToUserName
+_021E0B1C:
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r0, [r0]
+ ldr r0, [r0, #0x10]
+ bl MOD04_021DE89C
+ ldr r1, _021E0BB8 ; =UNK04_022106C8
+ mov r2, r0, lsl #1
+ ldr r1, [r1]
+ add r2, r2, #2
+ ldr r0, [r1, #0x10]
+ add r1, sp, #0
+ bl MI_CpuCopy8
+ ldr r0, _021E0BB8 ; =UNK04_022106C8
+ ldr r1, _021E0BD0 ; =0x00000251
+ ldr r2, [r0]
+ add r0, sp, #0x34
+ add r1, r2, r1
+ bl strcpy
+ ldr r4, _021E0BD4 ; =MOD04_021DD944
+ ldr r3, _021E0BD8 ; =MOD04_021DD904
+ ldr r1, _021E0BDC ; =0x00001C10
+ mov r0, #0
+ mov r2, #4
+ str r4, [sp, #0x40]
+ str r3, [sp, #0x44]
+ bl MOD04_021DD924
+ ldr r1, _021E0BB8 ; =UNK04_022106C8
+ mov r4, r0
+ ldr r0, [r1]
+ str r4, [r0, #0x24]
+ bl OS_GetTick
+ ldr r2, _021E0BB8 ; =UNK04_022106C8
+ ldr r2, [r2]
+ str r0, [r2, #0x28]
+ str r1, [r2, #0x2c]
+ mov r1, r4
+ add r0, sp, #0
+ bl MOD04_021D9ACC
+ add sp, sp, #0x4c
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021E0BB8: .word UNK04_022106C8
+_021E0BBC: .word UNK04_022106CC
+_021E0BC0: .word UNK04_022106C4
+_021E0BC4: .word 0x6C078965
+_021E0BC8: .word 0x5D588B65
+_021E0BCC: .word 0x00269EC3
+_021E0BD0: .word 0x00000251
+_021E0BD4: .word MOD04_021DD944
+_021E0BD8: .word MOD04_021DD904
+_021E0BDC: .word 0x00001C10
+ arm_func_end MOD04_021E0A00
+
+ arm_func_start MOD04_021E0BE0
+MOD04_021E0BE0: ; 0x021E0BE0
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #0x10
+ ldr r4, _021E0C7C ; =UNK04_022106C8
+ mov r6, r1
+ ldr r4, [r4]
+ mov r1, r0
+ add r0, r4, #0x48
+ mov r5, r2
+ mov r4, r3
+ bl strcpy
+ ldr r0, _021E0C7C ; =UNK04_022106C8
+ mov r1, r6
+ ldr r0, [r0]
+ add r0, r0, #0x148
+ bl strcpy
+ ldr r0, _021E0C7C ; =UNK04_022106C8
+ ldr r6, [r0]
+ bl OS_GetTick
+ str r0, [r6, #0x34]
+ str r1, [r6, #0x38]
+ mov r3, #1
+ ldr r0, _021E0C7C ; =UNK04_022106C8
+ str r3, [r6, #0x30]
+ ldr r2, [r0]
+ mov r1, #0
+ str r1, [sp]
+ str r5, [sp, #4]
+ str r1, [sp, #8]
+ ldr r0, [r2]
+ add r1, r2, #0x48
+ add r2, r2, #0x148
+ bl MOD04_021F0D8C
+ bl MOD04_021E0DB0
+ cmp r0, #0
+ ldreq r0, _021E0C7C ; =UNK04_022106C8
+ ldreq r0, [r0]
+ streq r4, [r0, #4]
+ add sp, sp, #0x10
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021E0C7C: .word UNK04_022106C8
+ arm_func_end MOD04_021E0BE0
+
+ arm_func_start MOD04_021E0C80
+MOD04_021E0C80: ; 0x021E0C80
+ ldr ip, _021E0C90 ; =MOD04_021E0BE0
+ ldr r2, _021E0C94 ; =MOD04_021E0C98
+ mov r3, #2
+ bx ip
+ .align 2, 0
+_021E0C90: .word MOD04_021E0BE0
+_021E0C94: .word MOD04_021E0C98
+ arm_func_end MOD04_021E0C80
+
+ arm_func_start MOD04_021E0C98
+MOD04_021E0C98: ; 0x021E0C98
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ldr r3, _021E0DA0 ; =UNK04_022106C8
+ mov r2, #0
+ ldr ip, [r3]
+ mov r4, r1
+ str r2, [ip, #0x30]
+ ldr r1, [r4]
+ cmp r1, #0
+ bne _021E0D90
+ ldr ip, [r3]
+ ldr r1, [ip, #4]
+ cmp r1, #2
+ bne _021E0D5C
+ ldr r1, [ip, #0x1c]
+ ldr r0, [r4, #4]
+ ldr r1, [r1, #0x1c]
+ cmp r1, r0
+ bne _021E0D48
+ ldr r1, _021E0DA4 ; =UNK04_0220D34C
+ mov r3, #5
+ mov r0, #1
+ str r3, [ip, #4]
+ bl MOD04_021E1E30
+ bl MOD04_021E0DB0
+ cmp r0, #0
+ addne sp, sp, #8
+ ldmneia sp!, {r4, pc}
+ ldr r0, _021E0DA0 ; =UNK04_022106C8
+ ldr r1, [r4, #4]
+ ldr r3, [r0]
+ mov r0, #0
+ ldr r2, [r3, #0x18]
+ ldr r3, [r3, #0x14]
+ blx r3
+ bl MOD04_021DF7C4
+ cmp r0, #0
+ addne sp, sp, #8
+ ldmneia sp!, {r4, pc}
+ ldr r0, [r4, #4]
+ bl MOD04_021EA1E0
+ add sp, sp, #8
+ cmp r0, #0
+ ldmia sp!, {r4, pc}
+_021E0D48:
+ ldr r1, _021E0DA8 ; =0xFFFF15A0
+ mov r0, #6
+ bl MOD04_021E0EAC
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+_021E0D5C:
+ cmp r1, #3
+ addne sp, sp, #8
+ ldmneia sp!, {r4, pc}
+ ldr r1, _021E0DAC ; =MOD04_021E0628
+ mov r3, r2
+ str r1, [sp]
+ str r2, [sp, #4]
+ ldr r1, [r4, #4]
+ bl MOD04_021F0B9C
+ bl MOD04_021E0DB0
+ add sp, sp, #8
+ cmp r0, #0
+ ldmia sp!, {r4, pc}
+_021E0D90:
+ mov r0, r1
+ bl MOD04_021E0DB0
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021E0DA0: .word UNK04_022106C8
+_021E0DA4: .word UNK04_0220D34C
+_021E0DA8: .word 0xFFFF15A0
+_021E0DAC: .word MOD04_021E0628
+ arm_func_end MOD04_021E0C98
+
+ arm_func_start MOD04_021E0DB0
+MOD04_021E0DB0: ; 0x021E0DB0
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ cmp r4, #4
+ addls pc, pc, r4, lsl #2
+ b _021E0E0C
+_021E0DCC: ; jump table
+ b _021E0E0C ; case 0
+ b _021E0DE0 ; case 1
+ b _021E0DEC ; case 2
+ b _021E0DF8 ; case 3
+ b _021E0E04 ; case 4
+_021E0DE0:
+ mov r0, #9
+ mvn r2, #0
+ b _021E0E0C
+_021E0DEC:
+ mov r0, #9
+ mvn r2, #1
+ b _021E0E0C
+_021E0DF8:
+ mov r0, #6
+ mvn r2, #9
+ b _021E0E0C
+_021E0E04:
+ mov r0, #6
+ mvn r2, #0x13
+_021E0E0C:
+ ldr r1, _021E0E20 ; =0xFFFF11B8
+ add r1, r2, r1
+ bl MOD04_021E0EAC
+ mov r0, r4
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021E0E20: .word 0xFFFF11B8
+ arm_func_end MOD04_021E0DB0
+
+ arm_func_start MOD04_021E0E24
+MOD04_021E0E24: ; 0x021E0E24
+ ldr r0, _021E0E44 ; =UNK04_022106C8
+ ldr r2, [r0]
+ cmp r2, #0
+ movne r1, #0
+ strne r1, [r2, #4]
+ ldrne r0, [r0]
+ strne r1, [r0, #0x30]
+ bx lr
+ .align 2, 0
+_021E0E44: .word UNK04_022106C8
+ arm_func_end MOD04_021E0E24
+
+ arm_func_start MOD04_021E0E48
+MOD04_021E0E48: ; 0x021E0E48
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021E0EA8 ; =UNK04_022106C8
+ ldr r0, [r0]
+ ldr r0, [r0, #0x24]
+ cmp r0, #0
+ beq _021E0E94
+ bl MOD04_021D9974
+ bl MOD04_021D991C
+ ldr r1, _021E0EA8 ; =UNK04_022106C8
+ mov r0, #0
+ ldr r1, [r1]
+ mov r2, r0
+ ldr r1, [r1, #0x24]
+ bl MOD04_021DD904
+ ldr r0, _021E0EA8 ; =UNK04_022106C8
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0, #0x24]
+_021E0E94:
+ ldr r0, _021E0EA8 ; =UNK04_022106C8
+ mov r1, #0
+ str r1, [r0]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021E0EA8: .word UNK04_022106C8
+ arm_func_end MOD04_021E0E48
+
+ arm_func_start MOD04_021E0EAC
+MOD04_021E0EAC: ; 0x021E0EAC
+ stmdb sp!, {r4, lr}
+ ldr r2, _021E0EFC ; =UNK04_022106C8
+ mov r4, r0
+ ldr r2, [r2]
+ cmp r2, #0
+ ldmeqia sp!, {r4, pc}
+ cmp r4, #0
+ ldmeqia sp!, {r4, pc}
+ bl MOD04_021DD6B0
+ ldr r0, _021E0EFC ; =UNK04_022106C8
+ ldr r0, [r0]
+ ldr r3, [r0, #0x14]
+ cmp r3, #0
+ beq _021E0EF4
+ ldr r2, [r0, #0x18]
+ mov r0, r4
+ mov r1, #0
+ blx r3
+_021E0EF4:
+ bl MOD04_021E0E24
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021E0EFC: .word UNK04_022106C8
+ arm_func_end MOD04_021E0EAC
+
+ arm_func_start MOD04_021E0F00
+MOD04_021E0F00: ; 0x021E0F00
+ ldr r0, _021E0F18 ; =UNK04_022106C8
+ ldr r0, [r0]
+ cmp r0, #0
+ ldrne r0, [r0, #0x1c]
+ moveq r0, #0
+ bx lr
+ .align 2, 0
+_021E0F18: .word UNK04_022106C8
+ arm_func_end MOD04_021E0F00
+
+ arm_func_start MOD04_021E0F1C
+MOD04_021E0F1C: ; 0x021E0F1C
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021E1024 ; =UNK04_022106C8
+ ldr r0, [r0]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, _021E1024 ; =UNK04_022106C8
+ ldr r1, [r0]
+ ldr r0, [r1, #4]
+ cmp r0, #5
+ addls pc, pc, r0, lsl #2
+ b _021E101C
+_021E0F60: ; jump table
+ b _021E101C ; case 0
+ b _021E0F78 ; case 1
+ b _021E0F84 ; case 2
+ b _021E0F84 ; case 3
+ b _021E0F84 ; case 4
+ b _021E101C ; case 5
+_021E0F78:
+ bl MOD04_021E07E4
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+_021E0F84:
+ ldr r0, [r1]
+ cmp r0, #0
+ beq _021E0FA0
+ ldr r1, [r0]
+ cmp r1, #0
+ beq _021E0FA0
+ bl MOD04_021F0F18
+_021E0FA0:
+ ldr r0, _021E1024 ; =UNK04_022106C8
+ ldr r0, [r0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ bl OS_GetTick
+ ldr r3, _021E1024 ; =UNK04_022106C8
+ ldr r2, _021E1028 ; =0x000082EA
+ ldr ip, [r3]
+ mov r3, #0
+ ldr lr, [ip, #0x34]
+ ldr ip, [ip, #0x38]
+ subs lr, r0, lr
+ sbc r0, r1, ip
+ mov r1, r0, lsl #6
+ orr r1, r1, lr, lsr #26
+ mov r0, lr, lsl #6
+ bl _ll_udiv
+ ldr r2, _021E102C ; =0x0000EA60
+ cmp r1, #0
+ cmpeq r0, r2
+ addls sp, sp, #4
+ ldmlsia sp!, {pc}
+ ldr r1, _021E1030 ; =0xFFFF1172
+ mov r0, #6
+ bl MOD04_021E0EAC
+ ldr r0, _021E1024 ; =UNK04_022106C8
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0, #0x30]
+_021E101C:
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021E1024: .word UNK04_022106C8
+_021E1028: .word 0x000082EA
+_021E102C: .word 0x0000EA60
+_021E1030: .word 0xFFFF1172
+ arm_func_end MOD04_021E0F1C
+
+ arm_func_start MOD04_021E1034
+MOD04_021E1034: ; 0x021E1034
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021E106C ; =MOD04_021E0C80
+ mov r1, #0
+ bl MOD04_021E0A00
+ ldr r0, _021E1070 ; =UNK04_022106C8
+ mov r3, #1
+ ldr r2, [r0]
+ mov r1, #0
+ str r3, [r2, #4]
+ ldr r0, [r0]
+ str r1, [r0, #0x30]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021E106C: .word MOD04_021E0C80
+_021E1070: .word UNK04_022106C8
+ arm_func_end MOD04_021E1034
+
+ arm_func_start MOD04_021E1074
+MOD04_021E1074: ; 0x021E1074
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr ip, _021E10F4 ; =UNK04_022106C8
+ mov r6, r1
+ mov r5, r2
+ mov r1, #0
+ mov r2, #0x260
+ mov r4, r3
+ str r0, [ip]
+ bl MI_CpuFill8
+ ldr r0, _021E10F4 ; =UNK04_022106C8
+ mov r2, #0
+ ldr r1, [r0]
+ ldr ip, [sp, #0x10]
+ str r5, [r1]
+ ldr r1, [r0]
+ ldr r5, [sp, #0x14]
+ str r2, [r1, #4]
+ ldr r1, [r0]
+ ldr r3, [sp, #0x18]
+ str r4, [r1, #8]
+ ldr r1, [r0]
+ ldr r2, [sp, #0x1c]
+ str ip, [r1, #0xc]
+ ldr r1, [r0]
+ str r5, [r1, #0x10]
+ ldr r1, [r0]
+ str r3, [r1, #0x14]
+ ldr r1, [r0]
+ str r2, [r1, #0x18]
+ ldr r0, [r0]
+ str r6, [r0, #0x1c]
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021E10F4: .word UNK04_022106C8
+ arm_func_end MOD04_021E1074
+
+ .section .data
+
+ .global UNK_0220D34C
+UNK04_0220D34C: ; 0x0220D34C
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ .section .bss
+
+ .global UNK04_022106C4
+UNK04_022106C4: ; 0x022106C4
+ .space 0x4
+
+ .global UNK04_022106C8
+UNK04_022106C8: ; 0x022106C8
+ .space 0x4
+
+ .global UNK04_022106CC
+UNK04_022106CC: ; 0x022106CC
+ .space 0x4