diff options
Diffstat (limited to 'arm9/modules')
| -rw-r--r-- | arm9/modules/26/asm/module_26.s | 793 | ||||
| -rw-r--r-- | arm9/modules/27/asm/module_27.s | 1453 | ||||
| -rw-r--r-- | arm9/modules/28/asm/module_28.s | 2967 | 
3 files changed, 5213 insertions, 0 deletions
| diff --git a/arm9/modules/26/asm/module_26.s b/arm9/modules/26/asm/module_26.s new file mode 100644 index 00000000..2511101e --- /dev/null +++ b/arm9/modules/26/asm/module_26.s @@ -0,0 +1,793 @@ +	.include "asm/macros.inc" +	.include "global.inc" +	.section .text +	.balign 4, 0 + +	thumb_func_start MOD26_02254840 +MOD26_02254840: ; 0x02254840 +	ldr r3, _02254848 ; =MOD20_02252978 +	ldr r0, _0225484C ; =MOD26_02254854 +	ldr r1, _02254850 ; =MOD26_02254A84 +	bx r3 +	.align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD26_02254854 +_02254850: .word MOD26_02254A84 +	thumb_func_end MOD26_02254840 + +	thumb_func_start MOD26_02254854 +MOD26_02254854: ; 0x02254854 +	push {r3, r4, r5, r6, r7, lr} +	add r6, r1, #0 +	mov r1, #0x9b +	add r5, r0, #0 +	mov r0, #8 +	lsl r1, r1, #2 +	add r7, r2, #0 +	str r3, [sp] +	bl FUN_02016998 +	add r4, r0, #0 +	beq _0225489C +	ldr r3, [sp] +	add r1, r6, #0 +	add r2, r7, #0 +	bl MOD26_022548A8 +	cmp r0, #0 +	beq _02254896 +	ldr r0, _022548A0 ; =MOD26_02254A4C +	add r1, r4, #0 +	mov r2, #1 +	bl FUN_0200CA44 +	cmp r0, #0 +	beq _02254896 +	ldr r0, _022548A4 ; =MOD26_02254A30 +	add r1, r4, #0 +	str r4, [r5] +	bl MOD20_022529B4 +	mov r0, #1 +	pop {r3, r4, r5, r6, r7, pc} +_02254896: +	add r0, r4, #0 +	bl FUN_02016A18 +_0225489C: +	mov r0, #0 +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +_022548A0: .word MOD26_02254A4C +_022548A4: .word MOD26_02254A30 +	thumb_func_end MOD26_02254854 + +	thumb_func_start MOD26_022548A8 +MOD26_022548A8: ; 0x022548A8 +	push {r3, r4, r5, lr} +	add r4, r2, #0 +	mov r2, #0x1f +	add r5, r0, #0 +	lsl r2, r2, #4 +	str r1, [r5, r2] +	add r1, r5, #0 +	add r1, #0xc +	bl MOD26_022548E8 +	mov r0, #0x7b +	lsl r0, r0, #2 +	add r1, r5, #0 +	add r0, r5, r0 +	add r1, #0xc +	add r2, r4, #0 +	bl MOD26_02254BD4 +	cmp r0, #0 +	beq _022548E4 +	mov r0, #0 +	strb r0, [r5] +	strb r0, [r5, #1] +	strb r0, [r5, #2] +	mov r0, #0x19 +	str r0, [r5, #4] +	mov r0, #0x15 +	str r0, [r5, #8] +	mov r0, #1 +	pop {r3, r4, r5, pc} +_022548E4: +	mov r0, #0 +	pop {r3, r4, r5, pc} +	thumb_func_end MOD26_022548A8 + +	thumb_func_start MOD26_022548E8 +MOD26_022548E8: ; 0x022548E8 +	push {r4, r5, r6, lr} +	add r5, r0, #0 +	mov r0, #0x1f +	lsl r0, r0, #4 +	ldr r0, [r5, r0] +	add r4, r1, #0 +	bl MOD20_02252C3C +	add r6, r0, #0 +	bl FUN_0204C0CC +	cmp r0, #0 +	beq _0225490E +	add r0, r5, #0 +	add r1, r4, #0 +	add r2, r6, #0 +	bl MOD26_02254918 +	pop {r4, r5, r6, pc} +_0225490E: +	add r0, r4, #0 +	bl MOD26_022549DC +	pop {r4, r5, r6, pc} +	.align 2, 0 +	thumb_func_end MOD26_022548E8 + +	thumb_func_start MOD26_02254918 +MOD26_02254918: ; 0x02254918 +	push {r3, r4, r5, r6, r7, lr} +	add r4, r1, #0 +	mov r1, #0x7d +	add r5, r0, #0 +	lsl r1, r1, #2 +	add r0, r2, #0 +	add r1, r5, r1 +	bl FUN_0204C0D4 +	mov r3, #0 +	mov r7, #0x7d +	mov ip, r3 +	lsl r7, r7, #2 +	mov r0, #3 +_02254934: +	mov r2, #0 +_02254936: +	asr r1, r3, #1 +	lsr r1, r1, #0x1e +	add r1, r3, r1 +	asr r1, r1, #2 +	add r1, r5, r1 +	add r6, r3, #0 +	lsl r6, r6, #0x1e +	ldrb r1, [r1, r7] +	lsr r6, r6, #0x1d +	add r3, r3, #1 +	asr r1, r6 +	and r1, r0 +	lsl r1, r1, #0x18 +	lsr r1, r1, #0x18 +	add r1, r1, #1 +	strb r1, [r4, r2] +	add r2, r2, #1 +	cmp r2, #0x18 +	blt _02254936 +	mov r1, ip +	add r1, r1, #1 +	add r4, #0x18 +	mov ip, r1 +	cmp r1, #0x14 +	blt _02254934 +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +	thumb_func_end MOD26_02254918 + +	thumb_func_start MOD26_0225496C +MOD26_0225496C: ; 0x0225496C +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #8 +	add r7, r1, #0 +	mov r1, #0x7d +	str r2, [sp] +	lsl r1, r1, #2 +	str r0, [sp, #4] +	add r0, r0, r1 +	mov r1, #0 +	mov r2, #0x78 +	bl MI_CpuFill8 +	mov r5, #0 +	mov ip, r5 +_02254988: +	mov r4, #0 +_0225498A: +	asr r0, r5, #1 +	lsr r0, r0, #0x1e +	add r0, r5, r0 +	asr r1, r0, #2 +	ldr r0, [sp, #4] +	add r6, r5, #0 +	add r3, r0, r1 +	mov r0, #0x7d +	lsl r0, r0, #2 +	ldrb r2, [r3, r0] +	ldrb r0, [r7, r4] +	add r4, r4, #1 +	add r5, r5, #1 +	sub r1, r0, #1 +	mov r0, #3 +	and r0, r1 +	lsl r1, r6, #0x1e +	lsr r1, r1, #0x1d +	lsl r0, r1 +	add r1, r2, #0 +	orr r1, r0 +	mov r0, #0x7d +	lsl r0, r0, #2 +	strb r1, [r3, r0] +	cmp r4, #0x18 +	blt _0225498A +	mov r0, ip +	add r0, r0, #1 +	add r7, #0x18 +	mov ip, r0 +	cmp r0, #0x14 +	blt _02254988 +	mov r2, #0x7d +	ldr r1, [sp, #4] +	lsl r2, r2, #2 +	ldr r0, [sp] +	add r1, r1, r2 +	bl FUN_0204C0E8 +	add sp, #8 +	pop {r3, r4, r5, r6, r7, pc} +	thumb_func_end MOD26_0225496C + +	thumb_func_start MOD26_022549DC +MOD26_022549DC: ; 0x022549DC +	push {r4, r5} +	mov r4, #0 +	ldr r5, _02254A00 ; =0x02254DF0 +	add r2, r4, #0 +_022549E4: +	add r3, r2, #0 +_022549E6: +	ldrb r1, [r5, r3] +	strb r1, [r0, r3] +	add r3, r3, #1 +	cmp r3, #0x18 +	blt _022549E6 +	add r4, r4, #1 +	add r5, #0x18 +	add r0, #0x18 +	cmp r4, #0x14 +	blt _022549E4 +	pop {r4, r5} +	bx lr +	nop +_02254A00: .word 0x02254DF0 +	thumb_func_end MOD26_022549DC + +	thumb_func_start MOD26_02254A04 +MOD26_02254A04: ; 0x02254A04 +	push {r4, lr} +	add r4, r0, #0 +	mov r0, #0x1f +	lsl r0, r0, #4 +	ldr r0, [r4, r0] +	bl MOD20_02252C3C +	add r1, r4, #0 +	add r2, r0, #0 +	add r0, r4, #0 +	add r1, #0xc +	bl MOD26_0225496C +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	bl MOD26_02254C04 +	add r0, r4, #0 +	bl FUN_02016A18 +	pop {r4, pc} +	thumb_func_end MOD26_02254A04 + +	thumb_func_start MOD26_02254A30 +MOD26_02254A30: ; 0x02254A30 +	push {r4, lr} +	add r4, r0, #0 +	mov r0, #0x1f +	lsl r0, r0, #4 +	ldr r0, [r4, r0] +	bl MOD20_02252C3C +	add r2, r0, #0 +	add r0, r4, #0 +	add r4, #0xc +	add r1, r4, #0 +	bl MOD26_0225496C +	pop {r4, pc} +	thumb_func_end MOD26_02254A30 + +	thumb_func_start MOD26_02254A4C +MOD26_02254A4C: ; 0x02254A4C +	push {r3, r4, r5, lr} +	add r4, r1, #0 +	ldrb r1, [r4] +	add r5, r0, #0 +	cmp r1, #3 +	bhs _02254A7C +	lsl r2, r1, #2 +	ldr r1, _02254A80 ; =0x02254DE4 +	add r0, r4, #0 +	ldr r1, [r1, r2] +	blx r1 +	cmp r0, #0 +	beq _02254A7C +	add r0, r4, #0 +	bl MOD26_02254A04 +	add r0, r5, #0 +	bl FUN_0200CAB4 +	mov r0, #0x1f +	lsl r0, r0, #4 +	ldr r0, [r4, r0] +	bl MOD20_022529A0 +_02254A7C: +	pop {r3, r4, r5, pc} +	nop +_02254A80: .word 0x02254DE4 +	thumb_func_end MOD26_02254A4C + +	thumb_func_start MOD26_02254A84 +MOD26_02254A84: ; 0x02254A84 +	mov r1, #1 +	strb r1, [r0, #2] +	bx lr +	.align 2, 0 +	thumb_func_end MOD26_02254A84 + +	thumb_func_start MOD26_02254A8C +MOD26_02254A8C: ; 0x02254A8C +	ldrb r2, [r0, #2] +	cmp r2, #0 +	bne _02254A94 +	b _02254A96 +_02254A94: +	mov r1, #2 +_02254A96: +	strb r1, [r0] +	mov r1, #0 +	strb r1, [r0, #1] +	bx lr +	.align 2, 0 +	thumb_func_end MOD26_02254A8C + +	thumb_func_start MOD26_02254AA0 +MOD26_02254AA0: ; 0x02254AA0 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r0, [r4, #1] +	cmp r0, #0 +	beq _02254AB0 +	cmp r0, #1 +	beq _02254AC4 +	b _02254AE6 +_02254AB0: +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	mov r1, #0 +	bl MOD26_02254C10 +	ldrb r0, [r4, #1] +	add r0, r0, #1 +	strb r0, [r4, #1] +	b _02254AE6 +_02254AC4: +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	mov r1, #0 +	bl MOD26_02254C34 +	cmp r0, #0 +	beq _02254AE6 +	mov r0, #0x1f +	lsl r0, r0, #4 +	ldr r0, [r4, r0] +	bl MOD20_0225298C +	add r0, r4, #0 +	mov r1, #1 +	bl MOD26_02254A8C +_02254AE6: +	mov r0, #0 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD26_02254AA0 + +	thumb_func_start MOD26_02254AEC +MOD26_02254AEC: ; 0x02254AEC +	push {r3, r4, r5, lr} +	sub sp, #8 +	add r4, r0, #0 +	ldrb r1, [r4, #2] +	cmp r1, #0 +	beq _02254B04 +	mov r1, #2 +	bl MOD26_02254A8C +	add sp, #8 +	mov r0, #0 +	pop {r3, r4, r5, pc} +_02254B04: +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	mov r1, #1 +	bl MOD26_02254C34 +	cmp r0, #0 +	beq _02254B90 +	add r0, sp, #4 +	add r1, sp, #0 +	bl MOD20_02252B68 +	cmp r0, #0 +	beq _02254B90 +	ldr r1, [sp, #4] +	cmp r1, #0x10 +	blo _02254B90 +	ldr r0, [sp] +	cmp r0, #0x10 +	blo _02254B90 +	sub r1, #0x10 +	lsr r2, r1, #3 +	sub r0, #0x10 +	lsr r1, r0, #3 +	str r2, [sp, #4] +	str r1, [sp] +	cmp r2, #0x18 +	bhs _02254B90 +	cmp r1, #0x14 +	bhs _02254B90 +	ldr r0, [r4, #4] +	cmp r0, r2 +	bne _02254B54 +	ldr r0, [r4, #8] +	cmp r0, r1 +	bne _02254B54 +	bl FUN_02020AA4 +	cmp r0, #1 +	bne _02254B90 +_02254B54: +	ldr r2, [sp] +	add r0, r4, #0 +	mov r1, #0x18 +	add r3, r2, #0 +	add r0, #0xc +	mul r3, r1 +	add r5, r0, r3 +	ldr r3, [sp, #4] +	ldrb r2, [r5, r3] +	add r2, r2, #1 +	strb r2, [r5, r3] +	ldr r2, [sp] +	mul r1, r2 +	add r2, r0, r1 +	ldr r1, [sp, #4] +	ldrb r0, [r2, r1] +	cmp r0, #4 +	bls _02254B7C +	mov r0, #1 +	strb r0, [r2, r1] +_02254B7C: +	ldr r0, [sp, #4] +	mov r1, #1 +	str r0, [r4, #4] +	ldr r0, [sp] +	str r0, [r4, #8] +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	bl MOD26_02254C10 +_02254B90: +	mov r0, #0 +	add sp, #8 +	pop {r3, r4, r5, pc} +	.align 2, 0 +	thumb_func_end MOD26_02254AEC + +	thumb_func_start MOD26_02254B98 +MOD26_02254B98: ; 0x02254B98 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r0, [r4, #1] +	cmp r0, #0 +	beq _02254BA8 +	cmp r0, #1 +	beq _02254BBC +	b _02254BCE +_02254BA8: +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	mov r1, #2 +	bl MOD26_02254C10 +	ldrb r0, [r4, #1] +	add r0, r0, #1 +	strb r0, [r4, #1] +	b _02254BCE +_02254BBC: +	mov r0, #0x7b +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	bl MOD26_02254C40 +	cmp r0, #0 +	beq _02254BCE +	mov r0, #1 +	pop {r4, pc} +_02254BCE: +	mov r0, #0 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD26_02254B98 + +	thumb_func_start MOD26_02254BD4 +MOD26_02254BD4: ; 0x02254BD4 +	push {r4, r5, r6, lr} +	add r5, r0, #0 +	add r6, r1, #0 +	mov r0, #8 +	mov r1, #0x30 +	bl FUN_02016998 +	add r4, r0, #0 +	beq _02254C00 +	add r0, #8 +	mov r1, #8 +	bl MOD20_022536F4 +	str r6, [r4] +	bl MOD20_02252D34 +	str r0, [r4, #4] +	cmp r0, #0 +	beq _02254C00 +	str r4, [r5] +	mov r0, #1 +	pop {r4, r5, r6, pc} +_02254C00: +	mov r0, #0 +	pop {r4, r5, r6, pc} +	thumb_func_end MOD26_02254BD4 + +	thumb_func_start MOD26_02254C04 +MOD26_02254C04: ; 0x02254C04 +	push {r3, lr} +	cmp r0, #0 +	beq _02254C0E +	bl FUN_02016A18 +_02254C0E: +	pop {r3, pc} +	thumb_func_end MOD26_02254C04 + +	thumb_func_start MOD26_02254C10 +MOD26_02254C10: ; 0x02254C10 +	push {lr} +	sub sp, #0xc +	add r2, r0, #0 +	add r0, #8 +	str r0, [sp] +	mov r0, #2 +	str r0, [sp, #4] +	mov r0, #8 +	str r0, [sp, #8] +	ldr r0, _02254C30 ; =0x02254FF0 +	ldr r3, [r2] +	bl MOD20_022537E0 +	add sp, #0xc +	pop {pc} +	nop +_02254C30: .word 0x02254FF0 +	thumb_func_end MOD26_02254C10 + +	thumb_func_start MOD26_02254C34 +MOD26_02254C34: ; 0x02254C34 +	ldr r3, _02254C3C ; =MOD20_02253794 +	add r0, #8 +	bx r3 +	nop +_02254C3C: .word MOD20_02253794 +	thumb_func_end MOD26_02254C34 + +	thumb_func_start MOD26_02254C40 +MOD26_02254C40: ; 0x02254C40 +	ldr r3, _02254C48 ; =MOD20_022537B8 +	add r0, #8 +	bx r3 +	nop +_02254C48: .word MOD20_022537B8 +	thumb_func_end MOD26_02254C40 + +	thumb_func_start MOD26_02254C4C +MOD26_02254C4C: ; 0x02254C4C +	push {r4, lr} +	add r4, r0, #0 +	bl MOD20_022538A0 +	add r0, #8 +	add r1, r4, #0 +	bl MOD20_02253888 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD26_02254C4C + +	thumb_func_start MOD26_02254C60 +MOD26_02254C60: ; 0x02254C60 +	push {r3, r4, r5, lr} +	add r4, r1, #0 +	add r0, r4, #0 +	bl MOD20_022538A0 +	add r5, r0, #0 +	ldr r0, [r5, #4] +	ldr r2, _02254CB8 ; =0x02254FD4 +	mov r1, #6 +	mov r3, #0 +	bl FUN_02016C18 +	ldr r0, [r5, #4] +	bl MOD26_02254CC4 +	ldr r0, [r5, #4] +	ldr r1, [r5] +	bl MOD26_02254DAC +	mov r0, #0 +	add r1, r0, #0 +	bl MOD20_02252D7C +	ldr r0, [r5, #4] +	mov r1, #6 +	bl FUN_02017CD0 +	ldr r1, _02254CBC ; =0x04001000 +	ldr r0, _02254CC0 ; =0xFFFFE0FF +	ldr r3, [r1] +	ldr r2, [r1] +	str r3, [sp] +	and r0, r2 +	lsl r2, r3, #0x13 +	lsr r3, r2, #0x1b +	mov r2, #4 +	orr r2, r3 +	lsl r2, r2, #8 +	orr r0, r2 +	str r0, [r1] +	add r0, r4, #0 +	bl MOD26_02254C4C +	pop {r3, r4, r5, pc} +	.align 2, 0 +_02254CB8: .word 0x02254FD4 +_02254CBC: .word 0x04001000 +_02254CC0: .word 0xFFFFE0FF +	thumb_func_end MOD26_02254C60 + +	thumb_func_start MOD26_02254CC4 +MOD26_02254CC4: ; 0x02254CC4 +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #0x20 +	str r0, [sp, #4] +	mov r0, #8 +	lsl r1, r0, #6 +	bl FUN_02016998 +	str r0, [sp, #0x1c] +	cmp r0, #0 +	beq _02254D68 +	mov r0, #0 +	str r0, [sp, #0x18] +	str r0, [sp, #0x14] +	str r0, [sp, #0x10] +	str r0, [sp, #0xc] +	str r0, [sp, #8] +	add r7, r0, #0 +	add r6, r0, #0 +	add r4, r0, #0 +	add r5, r0, #0 +_02254CEC: +	ldr r1, [sp, #0xc] +	ldr r0, [sp, #0x10] +	ldr r2, [sp, #0x1c] +	orr r1, r0 +	ldr r0, [sp, #8] +	orr r0, r1 +	orr r0, r7 +	orr r0, r6 +	orr r0, r4 +	add r1, r5, #0 +	orr r1, r0 +	ldr r0, [sp, #0x18] +	orr r0, r1 +	ldr r1, [sp, #0x14] +	add r1, r2, r1 +	mov r2, #0x20 +	bl MIi_CpuClearFast +	ldr r0, [sp, #0x14] +	ldr r1, [sp, #0x10] +	add r0, #0x20 +	str r0, [sp, #0x14] +	mov r0, #1 +	lsl r0, r0, #0x18 +	add r0, r1, r0 +	str r0, [sp, #0x10] +	mov r0, #1 +	ldr r1, [sp, #0xc] +	lsl r0, r0, #0x1c +	add r0, r1, r0 +	str r0, [sp, #0xc] +	mov r0, #1 +	ldr r1, [sp, #8] +	lsl r0, r0, #0x14 +	add r0, r1, r0 +	str r0, [sp, #8] +	mov r0, #1 +	lsl r0, r0, #0x10 +	add r7, r7, r0 +	lsr r0, r0, #4 +	add r6, r6, r0 +	mov r0, #1 +	lsl r0, r0, #8 +	add r4, r4, r0 +	ldr r0, [sp, #0x18] +	add r5, #0x10 +	add r0, r0, #1 +	str r0, [sp, #0x18] +	cmp r0, #0x10 +	blt _02254CEC +	mov r0, #0 +	str r0, [sp] +	mov r3, #2 +	ldr r0, [sp, #4] +	ldr r2, [sp, #0x1c] +	mov r1, #6 +	lsl r3, r3, #8 +	bl FUN_02017E14 +	ldr r0, [sp, #0x1c] +	bl FUN_02016A18 +_02254D68: +	add sp, #0x20 +	pop {r3, r4, r5, r6, r7, pc} +	thumb_func_end MOD26_02254CC4 + +	thumb_func_start MOD26_02254D6C +MOD26_02254D6C: ; 0x02254D6C +	push {r3, r4, r5, lr} +	add r5, r1, #0 +	add r0, r5, #0 +	bl MOD20_022538A0 +	add r4, r0, #0 +	ldr r0, [r4, #4] +	ldr r1, [r4] +	bl MOD26_02254DAC +	ldr r0, [r4, #4] +	mov r1, #6 +	bl FUN_02017CD0 +	add r0, r5, #0 +	bl MOD26_02254C4C +	pop {r3, r4, r5, pc} +	thumb_func_end MOD26_02254D6C + +	thumb_func_start MOD26_02254D90 +MOD26_02254D90: ; 0x02254D90 +	push {r4, lr} +	add r4, r1, #0 +	add r0, r4, #0 +	bl MOD20_022538A0 +	ldr r0, [r0, #4] +	mov r1, #6 +	bl FUN_020178A0 +	add r0, r4, #0 +	bl MOD26_02254C4C +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD26_02254D90 + +	thumb_func_start MOD26_02254DAC +MOD26_02254DAC: ; 0x02254DAC +	push {r3, r4, r5, r6, r7, lr} +	add r4, r1, #0 +	mov r1, #6 +	bl FUN_0201886C +	mov r5, #0 +	ldr r1, _02254DE0 ; =0x02254FD0 +	add r0, #0x84 +	add r2, r5, #0 +_02254DBE: +	add r3, r2, #0 +	add r6, r0, #0 +_02254DC2: +	ldrb r7, [r4, r3] +	add r3, r3, #1 +	add r7, r1, r7 +	sub r7, r7, #1 +	ldrb r7, [r7] +	strh r7, [r6] +	add r6, r6, #2 +	cmp r3, #0x18 +	blt _02254DC2 +	add r5, r5, #1 +	add r0, #0x40 +	add r4, #0x18 +	cmp r5, #0x14 +	blt _02254DBE +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +_02254DE0: .word 0x02254FD0 +	thumb_func_end MOD26_02254DAC + +	.section .data +	; 0x02254DE4 +	.incbin "baserom.nds", 0x289BA4, 0x25C diff --git a/arm9/modules/27/asm/module_27.s b/arm9/modules/27/asm/module_27.s new file mode 100644 index 00000000..b9a2d1ca --- /dev/null +++ b/arm9/modules/27/asm/module_27.s @@ -0,0 +1,1453 @@ +	.include "asm/macros.inc" +	.include "global.inc" +	.section .text +	.balign 4, 0 + +	thumb_func_start MOD27_02254840 +MOD27_02254840: ; 0x02254840 +	ldr r3, _02254848 ; =MOD20_02252978 +	ldr r0, _0225484C ; =MOD27_02254854 +	ldr r1, _02254850 ; =MOD27_0225492C +	bx r3 +	.align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD27_02254854 +_02254850: .word MOD27_0225492C +	thumb_func_end MOD27_02254840 + +	thumb_func_start MOD27_02254854 +MOD27_02254854: ; 0x02254854 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	add r6, r1, #0 +	mov r0, #8 +	mov r1, #0x7c +	add r7, r2, #0 +	str r3, [sp] +	bl FUN_02016998 +	add r4, r0, #0 +	beq _02254892 +	ldr r3, [sp] +	add r1, r6, #0 +	add r2, r7, #0 +	bl MOD27_0225489C +	cmp r0, #0 +	beq _0225488C +	ldr r0, _02254898 ; =MOD27_022548F8 +	add r1, r4, #0 +	mov r2, #1 +	bl FUN_0200CA44 +	cmp r0, #0 +	beq _0225488C +	str r4, [r5] +	mov r0, #1 +	pop {r3, r4, r5, r6, r7, pc} +_0225488C: +	add r0, r4, #0 +	bl FUN_02016A18 +_02254892: +	mov r0, #0 +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02254898: .word MOD27_022548F8 +	thumb_func_end MOD27_02254854 + +	thumb_func_start MOD27_0225489C +MOD27_0225489C: ; 0x0225489C +	push {r3, r4, r5, lr} +	add r5, r0, #0 +	add r4, r1, #0 +	add r0, #0x74 +	add r1, r5, #4 +	bl MOD27_02254AF0 +	cmp r0, #0 +	beq _022548E0 +	mov r0, #0 +	strb r0, [r5] +	strb r0, [r5, #1] +	strb r0, [r5, #2] +	add r0, r4, #0 +	bl MOD20_02252C40 +	bl FUN_0206BB1C +	add r1, r0, #0 +	add r0, r5, #4 +	bl MOD27_02254A48 +	add r0, r5, #0 +	mov r1, #0 +	add r0, #0x68 +	strh r1, [r0] +	add r0, r5, #0 +	add r0, #0x6a +	strh r1, [r0] +	str r1, [r5, #0x6c] +	str r1, [r5, #0x70] +	str r4, [r5, #0x78] +	mov r0, #1 +	pop {r3, r4, r5, pc} +_022548E0: +	mov r0, #0 +	pop {r3, r4, r5, pc} +	thumb_func_end MOD27_0225489C + +	thumb_func_start MOD27_022548E4 +MOD27_022548E4: ; 0x022548E4 +	push {r4, lr} +	add r4, r0, #0 +	ldr r0, [r4, #0x74] +	bl MOD27_02254B88 +	add r0, r4, #0 +	bl FUN_02016A18 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD27_022548E4 + +	thumb_func_start MOD27_022548F8 +MOD27_022548F8: ; 0x022548F8 +	push {r3, r4, r5, lr} +	add r4, r1, #0 +	ldrb r1, [r4] +	add r5, r0, #0 +	cmp r1, #3 +	bhs _02254924 +	lsl r2, r1, #2 +	ldr r1, _02254928 ; =0x0225533C +	add r0, r4, #0 +	ldr r1, [r1, r2] +	blx r1 +	cmp r0, #0 +	beq _02254924 +	add r0, r4, #0 +	bl MOD27_022548E4 +	add r0, r5, #0 +	bl FUN_0200CAB4 +	ldr r0, [r4, #0x78] +	bl MOD20_022529A0 +_02254924: +	pop {r3, r4, r5, pc} +	nop +_02254928: .word 0x0225533C +	thumb_func_end MOD27_022548F8 + +	thumb_func_start MOD27_0225492C +MOD27_0225492C: ; 0x0225492C +	mov r1, #1 +	strb r1, [r0, #2] +	bx lr +	.align 2, 0 +	thumb_func_end MOD27_0225492C + +	thumb_func_start MOD27_02254934 +MOD27_02254934: ; 0x02254934 +	ldrb r2, [r0, #2] +	cmp r2, #0 +	bne _0225493C +	b _0225493E +_0225493C: +	mov r1, #2 +_0225493E: +	strb r1, [r0] +	mov r1, #0 +	strb r1, [r0, #1] +	bx lr +	.align 2, 0 +	thumb_func_end MOD27_02254934 + +	thumb_func_start MOD27_02254948 +MOD27_02254948: ; 0x02254948 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r0, [r4, #1] +	cmp r0, #0 +	beq _02254958 +	cmp r0, #1 +	beq _02254968 +	b _02254982 +_02254958: +	ldr r0, [r4, #0x74] +	mov r1, #0 +	bl MOD27_02254BB8 +	ldrb r0, [r4, #1] +	add r0, r0, #1 +	strb r0, [r4, #1] +	b _02254982 +_02254968: +	ldr r0, [r4, #0x74] +	mov r1, #0 +	bl MOD27_02254BDC +	cmp r0, #0 +	beq _02254982 +	ldr r0, [r4, #0x78] +	bl MOD20_0225298C +	add r0, r4, #0 +	mov r1, #1 +	bl MOD27_02254934 +_02254982: +	mov r0, #0 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD27_02254948 + +	thumb_func_start MOD27_02254988 +MOD27_02254988: ; 0x02254988 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r1, [r4, #2] +	cmp r1, #0 +	beq _0225499C +	mov r1, #2 +	bl MOD27_02254934 +	mov r0, #0 +	pop {r4, pc} +_0225499C: +	ldr r0, [r4, #0x74] +	mov r1, #2 +	bl MOD27_02254BDC +	cmp r0, #0 +	beq _02254A06 +	add r0, r4, #0 +	add r1, r4, #0 +	add r0, #0x6c +	add r1, #0x70 +	bl MOD20_02252B68 +	add r1, r4, #0 +	add r1, #0x68 +	strh r0, [r1] +	add r0, r4, #0 +	add r0, #0x68 +	ldrh r0, [r0] +	cmp r0, #0 +	beq _02254A06 +	bl FUN_02020AA4 +	add r1, r4, #0 +	add r1, #0x6a +	strh r0, [r1] +	add r0, r4, #0 +	add r0, #0x6a +	ldrh r0, [r0] +	cmp r0, #0 +	beq _02254A02 +	ldr r0, [r4, #0x6c] +	ldr r1, [r4, #0x70] +	ldr r2, [r4, #4] +	bl MOD27_022551F4 +	ldr r1, [r4, #4] +	cmp r0, r1 +	blo _02254A02 +	ldr r0, [r4, #0x78] +	bl MOD20_02252C40 +	bl FUN_0206BB1C +	add r1, r0, #0 +	add r0, r4, #4 +	bl MOD27_02254A48 +	ldr r0, [r4, #0x74] +	mov r1, #2 +	bl MOD27_02254BB8 +_02254A02: +	mov r0, #0 +	pop {r4, pc} +_02254A06: +	mov r0, #0 +	str r0, [r4, #0x6c] +	str r0, [r4, #0x70] +	add r4, #0x6a +	strh r0, [r4] +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD27_02254988 + +	thumb_func_start MOD27_02254A14 +MOD27_02254A14: ; 0x02254A14 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r0, [r4, #1] +	cmp r0, #0 +	beq _02254A24 +	cmp r0, #1 +	beq _02254A34 +	b _02254A42 +_02254A24: +	ldr r0, [r4, #0x74] +	mov r1, #1 +	bl MOD27_02254BB8 +	ldrb r0, [r4, #1] +	add r0, r0, #1 +	strb r0, [r4, #1] +	b _02254A42 +_02254A34: +	ldr r0, [r4, #0x74] +	bl MOD27_02254BE8 +	cmp r0, #0 +	beq _02254A42 +	mov r0, #1 +	pop {r4, pc} +_02254A42: +	mov r0, #0 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD27_02254A14 + +	thumb_func_start MOD27_02254A48 +MOD27_02254A48: ; 0x02254A48 +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #8 +	str r0, [sp] +	add r0, r1, #0 +	str r1, [sp, #4] +	bl FUN_0206B9AC +	ldr r1, [sp] +	mov r6, #0 +	str r0, [r1] +	cmp r0, #0 +	ble _02254AEC +	add r5, r1, #0 +_02254A62: +	ldr r0, [sp, #4] +	add r1, r6, #0 +	bl FUN_0206B9B0 +	add r4, r0, #0 +	bl FUN_020669D4 +	add r7, r0, #0 +	add r0, r4, #0 +	bl FUN_0206B688 +	str r0, [r5, #4] +	add r0, r4, #0 +	mov r1, #5 +	mov r2, #0 +	bl FUN_020671BC +	strh r0, [r5, #8] +	add r0, r4, #0 +	mov r1, #0xa2 +	mov r2, #0 +	bl FUN_020671BC +	strh r0, [r5, #0xa] +	add r0, r4, #0 +	mov r1, #0xa3 +	mov r2, #0 +	bl FUN_020671BC +	strh r0, [r5, #0xc] +	add r0, r4, #0 +	mov r1, #6 +	mov r2, #0 +	bl FUN_020671BC +	strh r0, [r5, #0xe] +	add r0, r4, #0 +	mov r1, #0x9f +	mov r2, #0 +	bl FUN_020671BC +	cmp r0, #0 +	beq _02254ABC +	mov r0, #1 +	b _02254ABE +_02254ABC: +	mov r0, #0 +_02254ABE: +	strh r0, [r5, #0x10] +	add r0, r4, #0 +	mov r1, #0x4c +	mov r2, #0 +	bl FUN_020671BC +	strb r0, [r5, #0x12] +	add r0, r4, #0 +	mov r1, #0x70 +	mov r2, #0 +	bl FUN_020671BC +	strb r0, [r5, #0x13] +	add r0, r4, #0 +	add r1, r7, #0 +	bl FUN_02066A20 +	ldr r0, [sp] +	add r6, r6, #1 +	ldr r0, [r0] +	add r5, #0x10 +	cmp r6, r0 +	blt _02254A62 +_02254AEC: +	add sp, #8 +	pop {r3, r4, r5, r6, r7, pc} +	thumb_func_end MOD27_02254A48 + +	thumb_func_start MOD27_02254AF0 +MOD27_02254AF0: ; 0x02254AF0 +	push {r4, r5, r6, r7, lr} +	sub sp, #0xc +	add r4, r1, #0 +	mov r1, #0xe3 +	str r0, [sp, #4] +	mov r0, #8 +	lsl r1, r1, #2 +	bl FUN_02016998 +	str r0, [sp, #8] +	cmp r0, #0 +	beq _02254B82 +	add r0, #0xc +	mov r1, #8 +	bl MOD20_022536F4 +	ldr r0, [sp, #8] +	str r4, [r0] +	bl MOD20_02252D34 +	ldr r1, [sp, #8] +	str r0, [r1, #4] +	bl MOD20_02252D24 +	ldr r1, [sp, #8] +	mov r6, #0 +	str r0, [r1, #8] +	add r0, r1, #0 +	str r6, [r0, #0x38] +	add r0, #0xf4 +	add r4, r1, #0 +	str r6, [r0] +	add r4, #0x3c +	add r5, r1, #0 +	add r7, r6, #0 +_02254B36: +	add r0, r4, #0 +	bl FUN_0201901C +	add r0, r5, #0 +	add r0, #0x9c +	str r7, [r0] +	add r0, r5, #0 +	add r0, #0xb4 +	add r6, r6, #1 +	str r7, [r0] +	add r4, #0x10 +	add r5, r5, #4 +	cmp r6, #6 +	blt _02254B36 +	mov r0, #8 +	str r0, [sp] +	ldr r0, [sp, #8] +	mov r1, #0xc +	add r0, #0xcc +	mov r2, #5 +	mov r3, #6 +	bl MOD20_02253FBC +	mov r0, #8 +	str r0, [sp] +	ldr r0, [sp, #8] +	mov r1, #0xc +	add r0, #0xe0 +	mov r2, #0x6b +	mov r3, #0x6c +	bl MOD20_02253FBC +	ldr r1, [sp, #8] +	ldr r0, [sp, #4] +	add sp, #0xc +	str r1, [r0] +	mov r0, #1 +	pop {r4, r5, r6, r7, pc} +_02254B82: +	mov r0, #0 +	add sp, #0xc +	pop {r4, r5, r6, r7, pc} +	thumb_func_end MOD27_02254AF0 + +	thumb_func_start MOD27_02254B88 +MOD27_02254B88: ; 0x02254B88 +	push {r4, lr} +	add r4, r0, #0 +	beq _02254BB6 +	bl MOD27_02255250 +	add r0, r4, #0 +	add r0, #0xcc +	bl MOD20_02254014 +	add r0, r4, #0 +	add r0, #0xe0 +	bl MOD20_02254014 +	add r0, r4, #0 +	add r0, #0xf4 +	ldr r0, [r0] +	cmp r0, #0 +	beq _02254BB0 +	bl FUN_0200CAB4 +_02254BB0: +	add r0, r4, #0 +	bl FUN_02016A18 +_02254BB6: +	pop {r4, pc} +	thumb_func_end MOD27_02254B88 + +	thumb_func_start MOD27_02254BB8 +MOD27_02254BB8: ; 0x02254BB8 +	push {lr} +	sub sp, #0xc +	add r2, r0, #0 +	add r0, #0xc +	str r0, [sp] +	mov r0, #2 +	str r0, [sp, #4] +	mov r0, #8 +	str r0, [sp, #8] +	ldr r0, _02254BD8 ; =0x02255394 +	ldr r3, [r2] +	bl MOD20_022537E0 +	add sp, #0xc +	pop {pc} +	nop +_02254BD8: .word 0x02255394 +	thumb_func_end MOD27_02254BB8 + +	thumb_func_start MOD27_02254BDC +MOD27_02254BDC: ; 0x02254BDC +	ldr r3, _02254BE4 ; =MOD20_02253794 +	add r0, #0xc +	bx r3 +	nop +_02254BE4: .word MOD20_02253794 +	thumb_func_end MOD27_02254BDC + +	thumb_func_start MOD27_02254BE8 +MOD27_02254BE8: ; 0x02254BE8 +	ldr r3, _02254BF0 ; =MOD20_022537B8 +	add r0, #0xc +	bx r3 +	nop +_02254BF0: .word MOD20_022537B8 +	thumb_func_end MOD27_02254BE8 + +	thumb_func_start MOD27_02254BF4 +MOD27_02254BF4: ; 0x02254BF4 +	push {r4, lr} +	add r4, r0, #0 +	bl MOD20_022538A0 +	add r0, #0xc +	add r1, r4, #0 +	bl MOD20_02253888 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD27_02254BF4 + +	thumb_func_start MOD27_02254C08 +MOD27_02254C08: ; 0x02254C08 +	push {r3, r4, r5, r6, lr} +	sub sp, #0x14 +	add r6, r1, #0 +	add r0, r6, #0 +	bl MOD20_022538A0 +	add r4, r0, #0 +	ldr r0, [r4, #4] +	ldr r2, _02254CBC ; =0x02255378 +	mov r1, #6 +	mov r3, #0 +	bl FUN_02016C18 +	mov r0, #0 +	str r0, [sp] +	str r0, [sp, #4] +	mov r0, #1 +	str r0, [sp, #8] +	mov r0, #8 +	str r0, [sp, #0xc] +	ldr r2, [r4, #4] +	mov r0, #0xc +	mov r1, #0x6a +	mov r3, #6 +	bl FUN_0200687C +	mov r3, #0 +	lsr r5, r0, #5 +	str r3, [sp] +	mov r0, #0x20 +	str r0, [sp, #4] +	mov r0, #0x18 +	str r0, [sp, #8] +	str r3, [sp, #0xc] +	ldr r0, [r4, #4] +	mov r1, #6 +	mov r2, #5 +	bl FUN_02018540 +	mov r0, #0 +	add r1, r0, #0 +	bl MOD20_02252D7C +	str r5, [r4, #0x34] +	ldr r1, [r4] +	add r0, r4, #0 +	add r2, r5, #0 +	bl MOD27_02254CC8 +	ldr r0, [r4, #4] +	mov r1, #6 +	bl FUN_02017CD0 +	mov r0, #0xf +	mov r1, #1 +	bl MOD20_0225396C +	mov r0, #2 +	bl MOD20_022539C4 +	ldr r1, [r4] +	add r0, r4, #0 +	bl MOD27_02254F18 +	ldr r1, [r4] +	add r0, r4, #0 +	bl MOD27_02254FAC +	add r0, r4, #0 +	bl MOD27_022550C8 +	ldr r1, _02254CC0 ; =0x04001000 +	ldr r0, _02254CC4 ; =0xFFFFE0FF +	ldr r3, [r1] +	ldr r2, [r1] +	str r3, [sp, #0x10] +	and r0, r2 +	lsl r2, r3, #0x13 +	lsr r3, r2, #0x1b +	mov r2, #0x14 +	orr r2, r3 +	lsl r2, r2, #8 +	orr r0, r2 +	str r0, [r1] +	add r0, r6, #0 +	bl MOD27_02254BF4 +	add sp, #0x14 +	pop {r3, r4, r5, r6, pc} +	nop +_02254CBC: .word 0x02255378 +_02254CC0: .word 0x04001000 +_02254CC4: .word 0xFFFFE0FF +	thumb_func_end MOD27_02254C08 + +	thumb_func_start MOD27_02254CC8 +MOD27_02254CC8: ; 0x02254CC8 +	push {r4, r5, r6, r7, lr} +	sub sp, #0x24 +	str r0, [sp, #0x14] +	mov r0, #0 +	str r0, [sp, #0x20] +	add r0, r1, #0 +	str r1, [sp, #0x18] +	ldr r1, [r0] +	str r2, [sp, #0x1c] +	cmp r1, #0 +	ble _02254D54 +	ldr r4, [sp, #0x14] +	ldr r7, [sp, #0x20] +	ldr r5, _02254D5C ; =0x02255360 +	ldr r6, [sp, #0x18] +	add r4, #0x3c +_02254CE8: +	add r0, r4, #0 +	bl FUN_0201901C +	ldrh r0, [r5, #2] +	add r1, r4, #0 +	mov r2, #6 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	mov r0, #8 +	str r0, [sp, #4] +	mov r0, #1 +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldr r0, [sp, #0x1c] +	add r0, r0, r7 +	lsl r0, r0, #0x10 +	lsr r0, r0, #0x10 +	str r0, [sp, #0x10] +	ldrh r3, [r5] +	ldr r0, [sp, #0x14] +	lsl r3, r3, #0x18 +	ldr r0, [r0, #4] +	lsr r3, r3, #0x18 +	bl FUN_02019064 +	add r0, r4, #0 +	bl FUN_02019270 +	ldr r1, [sp, #0x14] +	add r0, r4, #0 +	bl MOD27_02254D60 +	ldrh r0, [r6, #0xa] +	ldrh r1, [r6, #0xc] +	bl MOD27_02254EEC +	add r1, r0, #0 +	add r0, r4, #0 +	bl MOD27_02254EAC +	ldr r0, [sp, #0x20] +	add r4, #0x10 +	add r0, r0, #1 +	str r0, [sp, #0x20] +	ldr r0, [sp, #0x18] +	add r7, #8 +	ldr r1, [r0] +	ldr r0, [sp, #0x20] +	add r5, r5, #4 +	add r6, #0x10 +	cmp r0, r1 +	blt _02254CE8 +_02254D54: +	ldr r0, [sp, #0x14] +	str r1, [r0, #0x38] +	add sp, #0x24 +	pop {r4, r5, r6, r7, pc} +	.align 2, 0 +_02254D5C: .word 0x02255360 +	thumb_func_end MOD27_02254CC8 + +	thumb_func_start MOD27_02254D60 +MOD27_02254D60: ; 0x02254D60 +	push {r4, r5, r6, lr} +	sub sp, #0x10 +	add r5, r0, #0 +	ldrb r0, [r5, #6] +	add r4, r1, #0 +	mov r2, #1 +	sub r0, r0, #1 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	str r2, [sp, #4] +	str r2, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r3, [r5, #5] +	ldr r0, [r4, #4] +	mov r1, #6 +	sub r3, r3, #1 +	lsl r3, r3, #0x18 +	lsr r3, r3, #0x18 +	bl FUN_02018540 +	ldrb r0, [r5, #6] +	mov r1, #6 +	mov r2, #2 +	sub r0, r0, #1 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	ldrb r0, [r5, #7] +	str r0, [sp, #4] +	mov r0, #1 +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r3, [r5, #5] +	ldr r0, [r4, #4] +	bl FUN_02018540 +	ldrb r0, [r5, #6] +	ldr r2, _02254E98 ; =0x00000401 +	mov r1, #6 +	sub r0, r0, #1 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	mov r0, #1 +	str r0, [sp, #4] +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r6, [r5, #5] +	ldrb r3, [r5, #7] +	ldr r0, [r4, #4] +	add r3, r6, r3 +	lsl r3, r3, #0x18 +	lsr r3, r3, #0x18 +	bl FUN_02018540 +	ldrb r0, [r5, #6] +	mov r1, #6 +	add r2, r1, #0 +	str r0, [sp] +	mov r0, #1 +	str r0, [sp, #4] +	ldrb r0, [r5, #8] +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r3, [r5, #5] +	ldr r0, [r4, #4] +	sub r3, r3, #1 +	lsl r3, r3, #0x18 +	lsr r3, r3, #0x18 +	bl FUN_02018540 +	ldrb r0, [r5, #6] +	ldr r2, _02254E9C ; =0x00000406 +	mov r1, #6 +	str r0, [sp] +	mov r0, #1 +	str r0, [sp, #4] +	ldrb r0, [r5, #8] +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r6, [r5, #5] +	ldrb r3, [r5, #7] +	ldr r0, [r4, #4] +	add r3, r6, r3 +	lsl r3, r3, #0x18 +	lsr r3, r3, #0x18 +	bl FUN_02018540 +	ldrb r1, [r5, #6] +	ldrb r0, [r5, #8] +	ldr r2, _02254EA0 ; =0x00000801 +	add r0, r1, r0 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	mov r0, #1 +	str r0, [sp, #4] +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r3, [r5, #5] +	ldr r0, [r4, #4] +	mov r1, #6 +	sub r3, r3, #1 +	lsl r3, r3, #0x18 +	lsr r3, r3, #0x18 +	bl FUN_02018540 +	ldrb r1, [r5, #6] +	ldrb r0, [r5, #8] +	ldr r2, _02254EA4 ; =0x00000802 +	add r0, r1, r0 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	ldrb r0, [r5, #7] +	mov r1, #6 +	str r0, [sp, #4] +	mov r0, #1 +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldrb r3, [r5, #5] +	ldr r0, [r4, #4] +	bl FUN_02018540 +	ldrb r1, [r5, #6] +	ldrb r0, [r5, #8] +	ldr r2, _02254EA8 ; =0x00000C01 +	add r0, r1, r0 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp] +	mov r0, #1 +	str r0, [sp, #4] +	str r0, [sp, #8] +	mov r0, #0 +	str r0, [sp, #0xc] +	ldr r0, [r4, #4] +	ldrb r4, [r5, #5] +	ldrb r3, [r5, #7] +	mov r1, #6 +	add r3, r4, r3 +	lsl r3, r3, #0x18 +	lsr r3, r3, #0x18 +	bl FUN_02018540 +	add sp, #0x10 +	pop {r4, r5, r6, pc} +	nop +_02254E98: .word 0x00000401 +_02254E9C: .word 0x00000406 +_02254EA0: .word 0x00000801 +_02254EA4: .word 0x00000802 +_02254EA8: .word 0x00000C01 +	thumb_func_end MOD27_02254D60 + +	thumb_func_start MOD27_02254EAC +MOD27_02254EAC: ; 0x02254EAC +	push {r3, r4, r5, lr} +	sub sp, #8 +	add r4, r1, #0 +	mov r1, #0x40 +	str r1, [sp] +	mov r1, #8 +	mov r2, #0 +	str r1, [sp, #4] +	mov r1, #4 +	add r3, r2, #0 +	add r5, r0, #0 +	bl FUN_020196F4 +	cmp r4, #0 +	beq _02254EE0 +	lsl r0, r4, #0x10 +	lsr r0, r0, #0x10 +	str r0, [sp] +	mov r0, #8 +	mov r2, #0 +	str r0, [sp, #4] +	add r0, r5, #0 +	mov r1, #0xf +	add r3, r2, #0 +	bl FUN_020196F4 +_02254EE0: +	add r0, r5, #0 +	bl FUN_02019548 +	add sp, #8 +	pop {r3, r4, r5, pc} +	.align 2, 0 +	thumb_func_end MOD27_02254EAC + +	thumb_func_start MOD27_02254EEC +MOD27_02254EEC: ; 0x02254EEC +	push {r3, lr} +	cmp r0, #0 +	bne _02254EF6 +	mov r0, #0 +	pop {r3, pc} +_02254EF6: +	cmp r0, r1 +	bne _02254EFE +	mov r0, #0x40 +	pop {r3, pc} +_02254EFE: +	lsl r0, r0, #0xc +	bl _u32_div_f +	lsl r0, r0, #5 +	lsr r0, r0, #0xc +	bne _02254F0E +	mov r0, #1 +	b _02254F14 +_02254F0E: +	cmp r0, #0x20 +	bne _02254F14 +	mov r0, #0x1f +_02254F14: +	lsl r0, r0, #1 +	pop {r3, pc} +	thumb_func_end MOD27_02254EEC + +	thumb_func_start MOD27_02254F18 +MOD27_02254F18: ; 0x02254F18 +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #0x28 +	mov r3, #0 +	str r3, [sp] +	mov r2, #1 +	str r0, [sp, #0xc] +	str r1, [sp, #0x10] +	str r2, [sp, #4] +	mov r0, #8 +	str r0, [sp, #8] +	mov r0, #0xc +	mov r1, #0x6d +	bl FUN_02006A34 +	mov r4, #0 +	add r0, sp, #0x18 +	strb r4, [r0, #0xa] +	mov r1, #2 +	strb r1, [r0, #0xb] +	strb r4, [r0, #0xc] +	strb r4, [r0, #0xd] +	ldr r0, [sp, #0x10] +	ldr r0, [r0] +	cmp r0, #0 +	ble _02254FA2 +	ldr r7, [sp, #0xc] +	ldr r6, [sp, #0x10] +	add r0, r7, #0 +	str r0, [sp, #0x14] +	add r0, #0xe0 +	ldr r5, _02254FA8 ; =0x02255348 +	str r0, [sp, #0x14] +_02254F58: +	ldrh r0, [r6, #0xe] +	cmp r0, #0 +	beq _02254F92 +	bl FUN_0206EA98 +	cmp r0, #0 +	beq _02254F6A +	mov r1, #1 +	b _02254F6C +_02254F6A: +	mov r1, #0 +_02254F6C: +	add r0, sp, #0x18 +	strh r1, [r0, #8] +	ldrh r0, [r5] +	ldr r2, [sp, #0x14] +	add r1, sp, #0x18 +	add r0, #0x1c +	lsl r0, r0, #0xc +	str r0, [sp, #0x18] +	ldrh r0, [r5, #2] +	add r0, #0x15 +	lsl r0, r0, #0xc +	str r0, [sp, #0x1c] +	ldr r0, [sp, #0xc] +	ldr r0, [r0, #8] +	bl MOD20_02253E74 +	add r1, r7, #0 +	add r1, #0xb4 +	str r0, [r1] +_02254F92: +	ldr r0, [sp, #0x10] +	add r4, r4, #1 +	ldr r0, [r0] +	add r6, #0x10 +	add r5, r5, #4 +	add r7, r7, #4 +	cmp r4, r0 +	blt _02254F58 +_02254FA2: +	add sp, #0x28 +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02254FA8: .word 0x02255348 +	thumb_func_end MOD27_02254F18 + +	thumb_func_start MOD27_02254FAC +MOD27_02254FAC: ; 0x02254FAC +	push {r4, r5, r6, r7, lr} +	sub sp, #0x34 +	str r0, [sp, #4] +	str r1, [sp, #8] +	mov r0, #0x13 +	mov r1, #8 +	bl FUN_02006670 +	str r0, [sp, #0x14] +	cmp r0, #0 +	beq _022550C0 +	mov r0, #0 +	add r1, sp, #0x20 +	strh r0, [r1, #0xc] +	str r0, [sp, #0x10] +	strb r0, [r1, #0xe] +	mov r0, #2 +	strb r0, [r1, #0xf] +	mov r7, #1 +	strb r7, [r1, #0x10] +	ldr r0, [sp, #8] +	strb r7, [r1, #0x11] +	ldr r0, [r0] +	cmp r0, #0 +	ble _022550BA +	ldr r5, [sp, #4] +	mov r0, #8 +	mov r1, #0x43 +	str r0, [sp, #0xc] +	lsl r1, r1, #2 +	add r0, r5, #0 +	add r0, r0, r1 +	str r0, [sp, #0x18] +	add r0, r5, #0 +	str r0, [sp, #0x1c] +	add r0, #0xcc +	ldr r4, [sp, #8] +	ldr r6, _022550C4 ; =0x02255348 +	add r7, #0xff +	str r0, [sp, #0x1c] +_02254FFC: +	ldr r0, [sp, #0x18] +	mov r3, #0xa +	str r0, [sp] +	ldr r0, [sp, #0x14] +	ldr r1, [r4, #4] +	mov r2, #0 +	lsl r3, r3, #6 +	bl FUN_02006814 +	ldr r0, [sp, #0x18] +	add r1, sp, #0x20 +	bl FUN_020B0088 +	ldr r0, [sp, #0x20] +	mov r1, #2 +	ldr r0, [r0, #0x14] +	lsl r1, r1, #8 +	bl DC_FlushRange +	ldr r0, [sp, #0x20] +	mov r2, #2 +	ldr r0, [r0, #0x14] +	add r1, r7, #0 +	lsl r2, r2, #8 +	bl GXS_LoadOBJ +	ldrh r0, [r6] +	ldr r2, [sp, #0x1c] +	add r1, sp, #0x24 +	lsl r0, r0, #0xc +	str r0, [sp, #0x24] +	ldrh r0, [r6, #2] +	lsl r0, r0, #0xc +	str r0, [sp, #0x28] +	ldr r0, [sp, #4] +	ldr r0, [r0, #8] +	bl MOD20_02253E74 +	add r1, r5, #0 +	add r1, #0x9c +	str r0, [r1] +	add r0, r5, #0 +	add r0, #0x9c +	ldr r0, [r0] +	ldr r1, [sp, #0xc] +	bl MOD20_02253FA4 +	add r0, r5, #0 +	add r0, #0x9c +	ldr r0, [r0] +	mov r1, #4 +	bl MOD20_02253F28 +	ldrh r0, [r4, #0xa] +	cmp r0, #0 +	beq _02255072 +	ldrh r0, [r4, #0x10] +	cmp r0, #0 +	beq _02255080 +_02255072: +	add r0, r5, #0 +	add r0, #0x9c +	ldr r0, [r0] +	mov r1, #1 +	bl MOD20_02253F9C +	b _02255098 +_02255080: +	ldrh r0, [r4, #8] +	ldrb r1, [r4, #0x13] +	ldrb r2, [r4, #0x12] +	bl FUN_0206B7BC +	add r1, r0, #0 +	add r0, r5, #0 +	add r0, #0x9c +	ldr r0, [r0] +	add r1, r1, #2 +	bl MOD20_02253F9C +_02255098: +	mov r0, #2 +	lsl r0, r0, #8 +	add r7, r7, r0 +	ldr r0, [sp, #0xc] +	add r4, #0x10 +	add r0, #0x10 +	str r0, [sp, #0xc] +	ldr r0, [sp, #0x10] +	add r6, r6, #4 +	add r0, r0, #1 +	str r0, [sp, #0x10] +	ldr r0, [sp, #8] +	add r5, r5, #4 +	ldr r1, [r0] +	ldr r0, [sp, #0x10] +	cmp r0, r1 +	blt _02254FFC +_022550BA: +	ldr r0, [sp, #0x14] +	bl FUN_020066F4 +_022550C0: +	add sp, #0x34 +	pop {r4, r5, r6, r7, pc} +	.align 2, 0 +_022550C4: .word 0x02255348 +	thumb_func_end MOD27_02254FAC + +	thumb_func_start MOD27_022550C8 +MOD27_022550C8: ; 0x022550C8 +	push {r4, lr} +	add r4, r0, #0 +	mov r0, #1 +	mov r1, #0 +	lsl r0, r0, #8 +	strb r1, [r4, r0] +	add r0, r4, #0 +	add r0, #0xf8 +	str r4, [r0] +	add r0, r4, #0 +	ldr r1, [r4] +	add r0, #0xfc +	str r1, [r0] +	add r1, r4, #0 +	ldr r0, _022550F4 ; =MOD27_022550F8 +	add r1, #0xf8 +	mov r2, #1 +	bl FUN_0200CA44 +	add r4, #0xf4 +	str r0, [r4] +	pop {r4, pc} +	.align 2, 0 +_022550F4: .word MOD27_022550F8 +	thumb_func_end MOD27_022550C8 + +	thumb_func_start MOD27_022550F8 +MOD27_022550F8: ; 0x022550F8 +	push {r4, r5, r6, lr} +	add r5, r1, #0 +	ldrb r0, [r5, #8] +	ldr r4, [r5, #4] +	ldr r6, [r5] +	cmp r0, #0 +	beq _0225510C +	cmp r0, #1 +	beq _02255164 +	pop {r4, r5, r6, pc} +_0225510C: +	add r0, r4, #0 +	add r0, #0x66 +	ldrh r0, [r0] +	cmp r0, #0 +	beq _022551EA +	ldr r0, [r4, #0x68] +	ldr r1, [r4, #0x6c] +	ldr r2, [r4] +	bl MOD27_022551F4 +	ldr r1, [r4] +	cmp r0, r1 +	bhs _022551EA +	lsl r2, r0, #4 +	add r1, r4, r2 +	ldrh r3, [r1, #0xa] +	cmp r3, #0 +	beq _022551EA +	ldrb r3, [r1, #0x12] +	cmp r3, #0 +	bne _022551EA +	mov r3, #0 +	strb r3, [r5, #9] +	strb r3, [r5, #0xb] +	strb r0, [r5, #0xa] +	mov r3, #2 +	str r3, [r5, #0x10] +	ldrh r0, [r1, #0x10] +	cmp r0, #0 +	bne _02255150 +	mov r0, #1 +	strb r0, [r5, #0xc] +	mov r0, #8 +	b _02255154 +_02255150: +	strb r3, [r5, #0xc] +	mov r0, #4 +_02255154: +	strb r0, [r5, #0xd] +	mov r0, #1 +	strb r0, [r5, #8] +	add r0, r4, r2 +	ldrh r0, [r0, #8] +	bl MOD20_02252B48 +	pop {r4, r5, r6, pc} +_02255164: +	ldrb r1, [r5, #0xb] +	ldrb r0, [r5, #0xd] +	cmp r1, r0 +	bne _022551A6 +	add r0, r4, #0 +	add r0, #0x64 +	ldrh r0, [r0] +	cmp r0, #0 +	beq _02255186 +	ldr r0, [r4, #0x68] +	ldr r1, [r4, #0x6c] +	ldr r2, [r4] +	bl MOD27_022551F4 +	ldrb r1, [r5, #0xa] +	cmp r1, r0 +	beq _022551A6 +_02255186: +	ldrb r0, [r5, #0xa] +	ldr r1, _022551EC ; =0x02255348 +	ldr r3, _022551F0 ; =0x0225534A +	lsl r2, r0, #2 +	add r0, r6, r2 +	ldrh r1, [r1, r2] +	ldrh r2, [r3, r2] +	add r0, #0x9c +	ldr r0, [r0] +	lsl r1, r1, #0xc +	lsl r2, r2, #0xc +	bl MOD20_02253F64 +	mov r0, #0 +	strb r0, [r5, #8] +	pop {r4, r5, r6, pc} +_022551A6: +	ldrb r0, [r5, #9] +	cmp r0, #0 +	bne _022551E6 +	ldrb r0, [r5, #0xa] +	ldr r1, _022551EC ; =0x02255348 +	ldr r3, _022551F0 ; =0x0225534A +	lsl r2, r0, #2 +	add r0, r6, r2 +	ldrh r1, [r1, r2] +	add r0, #0x9c +	ldrh r2, [r3, r2] +	ldr r4, [r5, #0x10] +	ldr r0, [r0] +	add r2, r4, r2 +	lsl r1, r1, #0xc +	lsl r2, r2, #0xc +	bl MOD20_02253F64 +	ldrb r1, [r5, #0xb] +	ldrb r0, [r5, #0xd] +	cmp r1, r0 +	bhs _022551D6 +	add r0, r1, #1 +	strb r0, [r5, #0xb] +_022551D6: +	mov r0, #0 +	ldr r1, [r5, #0x10] +	mvn r0, r0 +	mul r0, r1 +	str r0, [r5, #0x10] +	ldrb r0, [r5, #0xc] +	strb r0, [r5, #9] +	pop {r4, r5, r6, pc} +_022551E6: +	sub r0, r0, #1 +	strb r0, [r5, #9] +_022551EA: +	pop {r4, r5, r6, pc} +	.align 2, 0 +_022551EC: .word 0x02255348 +_022551F0: .word 0x0225534A +	thumb_func_end MOD27_022550F8 + +	thumb_func_start MOD27_022551F4 +MOD27_022551F4: ; 0x022551F4 +	push {r3, r4, r5, r6, r7, lr} +	mov lr, r0 +	mov ip, r1 +	add r7, r2, #0 +	ldr r6, _02255248 ; =0x00000000 +	beq _02255242 +	ldr r3, _0225524C ; =0x02255348 +_02255202: +	ldrh r1, [r3] +	ldrh r4, [r3, #2] +	mov r5, lr +	add r0, r1, #0 +	sub r0, #0x10 +	add r2, r4, #0 +	add r1, #0x10 +	sub r5, r5, r0 +	sub r0, r1, r0 +	sub r2, #8 +	cmp r5, r0 +	bhs _0225521E +	mov r0, #1 +	b _02255220 +_0225521E: +	mov r0, #0 +_02255220: +	mov r1, ip +	add r4, #0x18 +	sub r1, r1, r2 +	sub r2, r4, r2 +	cmp r1, r2 +	bhs _02255230 +	mov r1, #1 +	b _02255232 +_02255230: +	mov r1, #0 +_02255232: +	tst r0, r1 +	beq _0225523A +	add r0, r6, #0 +	pop {r3, r4, r5, r6, r7, pc} +_0225523A: +	add r6, r6, #1 +	add r3, r3, #4 +	cmp r6, r7 +	blo _02255202 +_02255242: +	add r0, r7, #0 +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02255248: .word 0x00000000 +_0225524C: .word 0x02255348 +	thumb_func_end MOD27_022551F4 + +	thumb_func_start MOD27_02255250 +MOD27_02255250: ; 0x02255250 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	mov r6, #0 +	add r4, r5, #0 +	add r7, r6, #0 +_0225525A: +	add r0, r4, #0 +	add r0, #0x9c +	ldr r1, [r0] +	cmp r1, #0 +	beq _02255270 +	ldr r0, [r5, #8] +	bl MOD20_02253F14 +	add r0, r4, #0 +	add r0, #0x9c +	str r7, [r0] +_02255270: +	add r0, r4, #0 +	add r0, #0xb4 +	ldr r1, [r0] +	cmp r1, #0 +	beq _02255288 +	ldr r0, [r5, #8] +	bl MOD20_02253F14 +	add r1, r4, #0 +	add r1, #0xb4 +	mov r0, #0 +	str r0, [r1] +_02255288: +	add r6, r6, #1 +	add r4, r4, #4 +	cmp r6, #6 +	blt _0225525A +	ldr r0, [r5, #0x38] +	mov r6, #0 +	cmp r0, #0 +	bls _022552AC +	add r4, r5, #0 +	add r4, #0x3c +_0225529C: +	add r0, r4, #0 +	bl FUN_02019178 +	ldr r0, [r5, #0x38] +	add r6, r6, #1 +	add r4, #0x10 +	cmp r6, r0 +	blo _0225529C +_022552AC: +	mov r0, #0 +	str r0, [r5, #0x38] +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +	thumb_func_end MOD27_02255250 + +	thumb_func_start MOD27_022552B4 +MOD27_022552B4: ; 0x022552B4 +	push {r4, lr} +	add r4, r1, #0 +	add r0, r4, #0 +	bl MOD20_022538A0 +	ldr r0, [r0, #4] +	mov r1, #6 +	bl FUN_020178A0 +	add r0, r4, #0 +	bl MOD27_02254BF4 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD27_022552B4 + +	thumb_func_start MOD27_022552D0 +MOD27_022552D0: ; 0x022552D0 +	push {r4, r5, r6, lr} +	sub sp, #0x10 +	add r6, r1, #0 +	add r0, r6, #0 +	bl MOD20_022538A0 +	add r5, r0, #0 +	add r0, r6, #0 +	bl MOD20_022538A4 +	add r4, r0, #0 +	add r0, r5, #0 +	bl MOD27_02255250 +	mov r3, #0 +	str r3, [sp] +	mov r0, #0x20 +	str r0, [sp, #4] +	mov r0, #0x18 +	str r0, [sp, #8] +	str r3, [sp, #0xc] +	ldr r0, [r5, #4] +	mov r1, #6 +	mov r2, #5 +	bl FUN_02018540 +	add r0, r5, #0 +	add r1, r4, #0 +	bl MOD27_02254F18 +	add r0, r5, #0 +	add r1, r4, #0 +	bl MOD27_02254FAC +	ldr r2, [r5, #0x34] +	add r0, r5, #0 +	add r1, r4, #0 +	bl MOD27_02254CC8 +	ldr r0, [r5, #4] +	mov r1, #6 +	bl FUN_02017CD0 +	ldr r0, _02255338 ; =0x00000669 +	bl MOD20_02252B28 +	add r0, r6, #0 +	bl MOD27_02254BF4 +	add sp, #0x10 +	pop {r4, r5, r6, pc} +	nop +_02255338: .word 0x00000669 +	thumb_func_end MOD27_022552D0 + +	.section .data +	; 0x0225533C +	.incbin "baserom.nds", 0x28A8FC, 0xA4 diff --git a/arm9/modules/28/asm/module_28.s b/arm9/modules/28/asm/module_28.s new file mode 100644 index 00000000..0ad10077 --- /dev/null +++ b/arm9/modules/28/asm/module_28.s @@ -0,0 +1,2967 @@ +	.include "asm/macros.inc" +	.include "global.inc" +	.section .text +	.balign 4, 0 + +	thumb_func_start MOD28_02254840 +MOD28_02254840: ; 0x02254840 +	ldr r3, _02254848 ; =0x02252979 +	ldr r0, _0225484C ; =MOD28_02254854 +	ldr r1, _02254850 ; =MOD28_022549F4 +	bx r3 +	.align 2, 0 +_02254848: .word 0x02252979 +_0225484C: .word MOD28_02254854 +_02254850: .word MOD28_022549F4 +	thumb_func_end MOD28_02254840 + +	thumb_func_start MOD28_02254854 +MOD28_02254854: ; 0x02254854 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	add r6, r1, #0 +	mov r0, #8 +	mov r1, #0x64 +	add r7, r2, #0 +	str r3, [sp] +	bl FUN_02016998 +	add r4, r0, #0 +	beq _02254892 +	ldr r3, [sp] +	add r1, r6, #0 +	add r2, r7, #0 +	bl MOD28_0225489C +	cmp r0, #0 +	beq _0225488C +	ldr r0, _02254898 ; =MOD28_022549C0 +	add r1, r4, #0 +	mov r2, #1 +	bl FUN_0200CA44 +	cmp r0, #0 +	beq _0225488C +	str r4, [r5] +	mov r0, #1 +	pop {r3, r4, r5, r6, r7, pc} +_0225488C: +	add r0, r4, #0 +	bl FUN_02016A18 +_02254892: +	mov r0, #0 +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02254898: .word MOD28_022549C0 +	thumb_func_end MOD28_02254854 + +	thumb_func_start MOD28_0225489C +MOD28_0225489C: ; 0x0225489C +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #8 +	add r7, r0, #0 +	add r4, r1, #0 +	add r0, #0x5c +	add r1, r7, #4 +	bl MOD28_02254AF4 +	cmp r0, #0 +	beq _02254986 +	mov r0, #0 +	strb r0, [r7] +	strb r0, [r7, #1] +	strb r0, [r7, #2] +	str r4, [r7, #0x60] +	bl FUN_020225F8 +	bl FUN_0206BB1C +	mov r1, #0 +	str r0, [sp, #4] +	str r1, [sp] +	bl FUN_0206B9AC +	mov r6, #0 +	str r0, [r7, #4] +	cmp r0, #0 +	ble _0225496A +	add r4, r7, #0 +_022548D6: +	ldr r0, [sp, #4] +	add r1, r6, #0 +	bl FUN_0206B9B0 +	mov r1, #0x4c +	mov r2, #0 +	add r5, r0, #0 +	bl FUN_020671BC +	cmp r0, #0 +	bne _02254962 +	add r0, r5, #0 +	mov r1, #5 +	mov r2, #0 +	bl FUN_020671BC +	strh r0, [r4, #0xc] +	add r0, r5, #0 +	mov r1, #0x70 +	mov r2, #0 +	bl FUN_020671BC +	strh r0, [r4, #0x10] +	add r0, r5, #0 +	bl FUN_0206B688 +	str r0, [r4, #8] +	add r0, r5, #0 +	mov r1, #9 +	mov r2, #0 +	bl FUN_020671BC +	bl MOD28_0225498C +	cmp r0, #6 +	bhi _02254944 +	add r1, r0, r0 +	add r1, pc +	ldrh r1, [r1, #6] +	lsl r1, r1, #0x10 +	asr r1, r1, #0x10 +	add pc, r1 +_0225492A: ; jump table +	.short _02254938 - _0225492A - 2 ; case 0 +	.short _02254938 - _0225492A - 2 ; case 1 +	.short _02254938 - _0225492A - 2 ; case 2 +	.short _02254944 - _0225492A - 2 ; case 3 +	.short _0225494E - _0225492A - 2 ; case 4 +	.short _0225494E - _0225492A - 2 ; case 5 +	.short _0225494E - _0225492A - 2 ; case 6 +_02254938: +	mov r1, #1 +	strb r1, [r4, #0x12] +	mov r1, #3 +	sub r0, r1, r0 +	strb r0, [r4, #0x13] +	b _0225495A +_02254944: +	mov r0, #2 +	strb r0, [r4, #0x12] +	mov r0, #0 +	strb r0, [r4, #0x13] +	b _0225495A +_0225494E: +	mov r1, #0 +	strb r1, [r4, #0x12] +	mov r1, #3 +	sub r0, r1, r0 +	neg r0, r0 +	strb r0, [r4, #0x13] +_0225495A: +	ldr r0, [sp] +	add r4, #0xc +	add r0, r0, #1 +	str r0, [sp] +_02254962: +	ldr r0, [r7, #4] +	add r6, r6, #1 +	cmp r6, r0 +	blt _022548D6 +_0225496A: +	ldr r0, [sp] +	mov r1, #0 +	str r0, [r7, #4] +	add r0, r7, #0 +	add r0, #0x50 +	strh r1, [r0] +	add r0, r7, #0 +	add r0, #0x52 +	strh r1, [r0] +	str r1, [r7, #0x54] +	add sp, #8 +	str r1, [r7, #0x58] +	mov r0, #1 +	pop {r3, r4, r5, r6, r7, pc} +_02254986: +	mov r0, #0 +	add sp, #8 +	pop {r3, r4, r5, r6, r7, pc} +	thumb_func_end MOD28_0225489C + +	thumb_func_start MOD28_0225498C +MOD28_0225498C: ; 0x0225498C +	ldr r3, _022549A8 ; =0x02255E78 +	mov r2, #0 +_02254990: +	ldrb r1, [r3] +	cmp r0, r1 +	bhs _0225499A +	add r0, r2, #0 +	bx lr +_0225499A: +	add r2, r2, #1 +	add r3, r3, #1 +	cmp r2, #6 +	blo _02254990 +	mov r0, #6 +	bx lr +	nop +_022549A8: .word 0x02255E78 +	thumb_func_end MOD28_0225498C + +	thumb_func_start MOD28_022549AC +MOD28_022549AC: ; 0x022549AC +	push {r4, lr} +	add r4, r0, #0 +	ldr r0, [r4, #0x5c] +	bl MOD28_02254B70 +	add r0, r4, #0 +	bl FUN_02016A18 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_022549AC + +	thumb_func_start MOD28_022549C0 +MOD28_022549C0: ; 0x022549C0 +	push {r3, r4, r5, lr} +	add r4, r1, #0 +	ldrb r1, [r4] +	add r5, r0, #0 +	cmp r1, #3 +	bhs _022549EC +	lsl r2, r1, #2 +	ldr r1, _022549F0 ; =0x02255E80 +	add r0, r4, #0 +	ldr r1, [r1, r2] +	blx r1 +	cmp r0, #0 +	beq _022549EC +	add r0, r4, #0 +	bl MOD28_022549AC +	add r0, r5, #0 +	bl FUN_0200CAB4 +	ldr r0, [r4, #0x60] +	bl MOD20_022529A0 +_022549EC: +	pop {r3, r4, r5, pc} +	nop +_022549F0: .word 0x02255E80 +	thumb_func_end MOD28_022549C0 + +	thumb_func_start MOD28_022549F4 +MOD28_022549F4: ; 0x022549F4 +	mov r1, #1 +	strb r1, [r0, #2] +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_022549F4 + +	thumb_func_start MOD28_022549FC +MOD28_022549FC: ; 0x022549FC +	ldrb r2, [r0, #2] +	cmp r2, #0 +	bne _02254A04 +	b _02254A06 +_02254A04: +	mov r1, #2 +_02254A06: +	strb r1, [r0] +	mov r1, #0 +	strb r1, [r0, #1] +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_022549FC + +	thumb_func_start MOD28_02254A10 +MOD28_02254A10: ; 0x02254A10 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r0, [r4, #1] +	cmp r0, #0 +	beq _02254A20 +	cmp r0, #1 +	beq _02254A30 +	b _02254A4A +_02254A20: +	ldr r0, [r4, #0x5c] +	mov r1, #0 +	bl MOD28_02254BC8 +	ldrb r0, [r4, #1] +	add r0, r0, #1 +	strb r0, [r4, #1] +	b _02254A4A +_02254A30: +	ldr r0, [r4, #0x5c] +	mov r1, #0 +	bl MOD28_02254BEC +	cmp r0, #0 +	beq _02254A4A +	ldr r0, [r4, #0x60] +	bl MOD20_0225298C +	add r0, r4, #0 +	mov r1, #1 +	bl MOD28_022549FC +_02254A4A: +	mov r0, #0 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_02254A10 + +	thumb_func_start MOD28_02254A50 +MOD28_02254A50: ; 0x02254A50 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r1, [r4, #2] +	cmp r1, #0 +	beq _02254A64 +	mov r1, #2 +	bl MOD28_022549FC +	mov r0, #0 +	pop {r4, pc} +_02254A64: +	add r1, r4, #0 +	add r0, #0x54 +	add r1, #0x58 +	bl MOD20_02252B68 +	add r1, r4, #0 +	add r1, #0x50 +	strh r0, [r1] +	add r0, r4, #0 +	add r0, #0x50 +	ldrh r0, [r0] +	cmp r0, #0 +	beq _02254AB2 +	ldr r0, [r4, #0x54] +	sub r0, #0x10 +	cmp r0, #0xbf +	bhs _02254A8A +	mov r1, #1 +	b _02254A8C +_02254A8A: +	mov r1, #0 +_02254A8C: +	ldr r0, [r4, #0x58] +	sub r0, #0x10 +	cmp r0, #0x9f +	bhs _02254A98 +	mov r0, #1 +	b _02254A9A +_02254A98: +	mov r0, #0 +_02254A9A: +	tst r0, r1 +	beq _02254AAA +	bl FUN_02020AA4 +	add r4, #0x52 +	strh r0, [r4] +	mov r0, #0 +	pop {r4, pc} +_02254AAA: +	add r0, r4, #0 +	mov r1, #0 +	add r0, #0x50 +	strh r1, [r0] +_02254AB2: +	mov r0, #0 +	str r0, [r4, #0x54] +	str r0, [r4, #0x58] +	add r4, #0x52 +	strh r0, [r4] +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_02254A50 + +	thumb_func_start MOD28_02254AC0 +MOD28_02254AC0: ; 0x02254AC0 +	push {r4, lr} +	add r4, r0, #0 +	ldrb r0, [r4, #1] +	cmp r0, #0 +	beq _02254AD0 +	cmp r0, #1 +	beq _02254AE0 +	b _02254AEE +_02254AD0: +	ldr r0, [r4, #0x5c] +	mov r1, #1 +	bl MOD28_02254BC8 +	ldrb r0, [r4, #1] +	add r0, r0, #1 +	strb r0, [r4, #1] +	b _02254AEE +_02254AE0: +	ldr r0, [r4, #0x5c] +	bl MOD28_02254BF8 +	cmp r0, #0 +	beq _02254AEE +	mov r0, #1 +	pop {r4, pc} +_02254AEE: +	mov r0, #0 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_02254AC0 + +	thumb_func_start MOD28_02254AF4 +MOD28_02254AF4: ; 0x02254AF4 +	push {r3, r4, r5, r6, lr} +	sub sp, #4 +	add r6, r1, #0 +	mov r1, #0xa3 +	add r5, r0, #0 +	mov r0, #8 +	lsl r1, r1, #2 +	bl FUN_02016998 +	add r4, r0, #0 +	beq _02254B6A +	add r0, #8 +	mov r1, #8 +	bl MOD20_022536F4 +	str r6, [r4] +	bl MOD20_02252D34 +	str r0, [r4, #4] +	bl MOD20_02252D24 +	str r0, [r4, #0x30] +	add r0, r4, #0 +	mov r3, #0 +	add r0, #0xb0 +	str r3, [r0] +	mov r0, #0x4d +	lsl r0, r0, #2 +	add r6, r4, #0 +	add r2, r3, #0 +	add r1, r0, #4 +_02254B32: +	str r2, [r6, r0] +	str r2, [r6, r1] +	add r3, r3, #1 +	add r6, #0x38 +	cmp r3, #6 +	blt _02254B32 +	mov r0, #8 +	str r0, [sp] +	add r0, r4, #0 +	add r0, #0x34 +	mov r1, #0xc +	mov r2, #5 +	mov r3, #6 +	bl MOD20_02253FBC +	mov r0, #8 +	str r0, [sp] +	add r0, r4, #0 +	add r0, #0x48 +	mov r1, #0xc +	mov r2, #0x24 +	mov r3, #0x25 +	bl MOD20_02253FBC +	add sp, #4 +	str r4, [r5] +	mov r0, #1 +	pop {r3, r4, r5, r6, pc} +_02254B6A: +	mov r0, #0 +	add sp, #4 +	pop {r3, r4, r5, r6, pc} +	thumb_func_end MOD28_02254AF4 + +	thumb_func_start MOD28_02254B70 +MOD28_02254B70: ; 0x02254B70 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	beq _02254BC6 +	mov r7, #0x4d +	mov r6, #0 +	add r4, r5, #0 +	lsl r7, r7, #2 +_02254B7E: +	ldr r1, [r4, r7] +	cmp r1, #0 +	beq _02254B8A +	ldr r0, [r5, #0x30] +	bl MOD20_02253F14 +_02254B8A: +	mov r0, #0x4e +	lsl r0, r0, #2 +	ldr r1, [r4, r0] +	cmp r1, #0 +	beq _02254B9A +	ldr r0, [r5, #0x30] +	bl MOD20_02253F14 +_02254B9A: +	add r6, r6, #1 +	add r4, #0x38 +	cmp r6, #6 +	blt _02254B7E +	add r0, r5, #0 +	add r0, #0x34 +	bl MOD20_02254014 +	add r0, r5, #0 +	add r0, #0x48 +	bl MOD20_02254014 +	add r0, r5, #0 +	add r0, #0xb0 +	ldr r0, [r0] +	cmp r0, #0 +	beq _02254BC0 +	bl FUN_0200CAB4 +_02254BC0: +	add r0, r5, #0 +	bl FUN_02016A18 +_02254BC6: +	pop {r3, r4, r5, r6, r7, pc} +	thumb_func_end MOD28_02254B70 + +	thumb_func_start MOD28_02254BC8 +MOD28_02254BC8: ; 0x02254BC8 +	push {lr} +	sub sp, #0xc +	add r2, r0, #0 +	add r0, #8 +	str r0, [sp] +	mov r0, #2 +	str r0, [sp, #4] +	mov r0, #8 +	str r0, [sp, #8] +	ldr r0, _02254BE8 ; =0x02255EF4 +	ldr r3, [r2] +	bl MOD20_022537E0 +	add sp, #0xc +	pop {pc} +	nop +_02254BE8: .word 0x02255EF4 +	thumb_func_end MOD28_02254BC8 + +	thumb_func_start MOD28_02254BEC +MOD28_02254BEC: ; 0x02254BEC +	ldr r3, _02254BF4 ; =0x02253795 +	add r0, #8 +	bx r3 +	nop +_02254BF4: .word 0x02253795 +	thumb_func_end MOD28_02254BEC + +	thumb_func_start MOD28_02254BF8 +MOD28_02254BF8: ; 0x02254BF8 +	ldr r3, _02254C00 ; =0x022537B9 +	add r0, #8 +	bx r3 +	nop +_02254C00: .word 0x022537B9 +	thumb_func_end MOD28_02254BF8 + +	thumb_func_start MOD28_02254C04 +MOD28_02254C04: ; 0x02254C04 +	push {r4, lr} +	add r4, r0, #0 +	bl MOD20_022538A0 +	add r0, #8 +	add r1, r4, #0 +	bl MOD20_02253888 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_02254C04 + +	thumb_func_start MOD28_02254C18 +MOD28_02254C18: ; 0x02254C18 +	push {r4, r5, lr} +	sub sp, #0x14 +	add r4, r1, #0 +	add r0, r4, #0 +	bl MOD20_022538A0 +	add r5, r0, #0 +	ldr r0, [r5, #4] +	ldr r2, _02254CA8 ; =0x02255ED8 +	mov r1, #6 +	mov r3, #0 +	bl FUN_02016C18 +	mov r0, #0 +	str r0, [sp] +	str r0, [sp, #4] +	mov r0, #1 +	str r0, [sp, #8] +	mov r0, #8 +	str r0, [sp, #0xc] +	ldr r2, [r5, #4] +	mov r0, #0xc +	mov r1, #7 +	mov r3, #6 +	bl FUN_0200687C +	mov r2, #0 +	str r2, [sp] +	mov r0, #0x20 +	str r0, [sp, #4] +	mov r0, #0x18 +	str r0, [sp, #8] +	str r2, [sp, #0xc] +	ldr r0, [r5, #4] +	mov r1, #6 +	add r3, r2, #0 +	bl FUN_02018540 +	mov r0, #0 +	add r1, r0, #0 +	bl MOD20_02252D7C +	ldr r0, [r5, #4] +	mov r1, #6 +	bl FUN_02017CD0 +	ldr r1, [r5] +	add r0, r5, #0 +	bl MOD28_02254CB4 +	ldr r1, [r5] +	add r0, r5, #0 +	bl MOD28_02254E9C +	ldr r1, _02254CAC ; =0x04001000 +	ldr r0, _02254CB0 ; =0xFFFFE0FF +	ldr r3, [r1] +	ldr r2, [r1] +	str r3, [sp, #0x10] +	and r0, r2 +	lsl r2, r3, #0x13 +	lsr r3, r2, #0x1b +	mov r2, #0x14 +	orr r2, r3 +	lsl r2, r2, #8 +	orr r0, r2 +	str r0, [r1] +	add r0, r4, #0 +	bl MOD28_02254C04 +	add sp, #0x14 +	pop {r4, r5, pc} +	.align 2, 0 +_02254CA8: .word 0x02255ED8 +_02254CAC: .word 0x04001000 +_02254CB0: .word 0xFFFFE0FF +	thumb_func_end MOD28_02254C18 + +	thumb_func_start MOD28_02254CB4 +MOD28_02254CB4: ; 0x02254CB4 +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #0x40 +	str r0, [sp, #0xc] +	mov r0, #1 +	str r1, [sp, #0x10] +	bl MOD20_022539C4 +	mov r0, #0 +	str r0, [sp] +	mov r2, #1 +	str r2, [sp, #4] +	mov r0, #8 +	str r0, [sp, #8] +	mov r0, #0xc +	mov r1, #0x23 +	lsl r3, r0, #9 +	bl FUN_02006A34 +	mov r0, #0x13 +	mov r1, #8 +	bl FUN_02006670 +	str r0, [sp, #0x1c] +	cmp r0, #0 +	bne _02254CE8 +	b _02254E46 +_02254CE8: +	mov r0, #0 +	str r0, [sp, #0x18] +	add r1, r0, #0 +	add r0, sp, #0x2c +	strh r1, [r0, #0xc] +	ldr r1, [sp, #0x18] +	strb r1, [r0, #0xe] +	mov r1, #2 +	strb r1, [r0, #0xf] +	mov r1, #1 +	strb r1, [r0, #0x11] +	ldr r0, [sp, #0x10] +	ldr r0, [r0] +	cmp r0, #0 +	bgt _02254D08 +	b _02254E40 +_02254D08: +	ldr r0, [sp, #0x18] +	ldr r5, [sp, #0xc] +	str r0, [sp, #0x14] +	add r7, r0, #0 +	add r0, r5, #0 +	str r0, [sp, #0x24] +	add r0, #0x34 +	str r0, [sp, #0x24] +	add r0, r5, #0 +	str r0, [sp, #0x28] +	add r0, #0x48 +	ldr r4, [sp, #0x10] +	ldr r6, _02254E4C ; =0x02255EC0 +	str r0, [sp, #0x28] +_02254D24: +	ldr r0, [sp, #0x1c] +	ldr r1, [r4, #4] +	mov r2, #8 +	bl FUN_02006704 +	add r1, sp, #0x2c +	str r0, [sp, #0x20] +	bl FUN_020B0088 +	ldr r0, [sp, #0x2c] +	mov r1, #1 +	ldr r0, [r0, #0x14] +	lsl r1, r1, #0xa +	bl DC_FlushRange +	ldr r0, [sp, #0x2c] +	mov r2, #1 +	ldr r0, [r0, #0x14] +	ldr r1, [sp, #0x14] +	lsl r2, r2, #0xa +	bl GXS_LoadOBJ +	ldr r0, [sp, #0x20] +	bl FUN_02016A18 +	ldrh r0, [r6] +	mov r1, #1 +	ldr r2, [sp, #0x24] +	lsl r0, r0, #0xc +	str r0, [sp, #0x30] +	ldrh r0, [r6, #2] +	lsl r0, r0, #0xc +	str r0, [sp, #0x34] +	add r0, sp, #0x2c +	strb r1, [r0, #0x10] +	ldr r0, [sp, #0xc] +	add r1, sp, #0x30 +	ldr r0, [r0, #0x30] +	bl MOD20_02253E74 +	mov r1, #0x4d +	lsl r1, r1, #2 +	str r0, [r5, r1] +	add r0, r1, #0 +	ldr r0, [r5, r0] +	add r1, r7, #0 +	bl MOD20_02253FA4 +	ldrh r0, [r4, #8] +	ldrh r1, [r4, #0xc] +	mov r2, #0 +	bl FUN_0206B7BC +	add r1, r0, #0 +	mov r0, #0x4d +	lsl r0, r0, #2 +	ldr r0, [r5, r0] +	add r1, r1, #1 +	bl MOD20_02253F9C +	mov r1, #0 +	add r0, sp, #0x2c +	strb r1, [r0, #0x10] +	ldr r0, [sp, #0xc] +	ldr r2, [sp, #0x28] +	ldr r0, [r0, #0x30] +	add r1, sp, #0x30 +	bl MOD20_02253E74 +	mov r1, #0x4e +	lsl r1, r1, #2 +	str r0, [r5, r1] +	add r0, r1, #0 +	ldr r0, [r5, r0] +	cmp r0, #0 +	beq _02254DDC +	mov r1, #1 +	bl MOD20_02253F78 +	mov r0, #0x4e +	lsl r0, r0, #2 +	ldr r0, [r5, r0] +	mov r1, #0xc0 +	bl MOD20_02253FA4 +	mov r0, #0x4e +	lsl r0, r0, #2 +	ldr r0, [r5, r0] +	mov r1, #0 +	bl MOD20_02253F9C +	b _02254DE0 +_02254DDC: +	bl ErrorHandling +_02254DE0: +	ldrh r0, [r4, #8] +	mov r1, #0x1c +	bl FUN_02068678 +	mov r1, #0x59 +	lsl r1, r1, #2 +	strb r0, [r5, r1] +	ldr r0, _02254E50 ; =0x00000165 +	mov r1, #0 +	strb r1, [r5, r0] +	add r0, r0, #1 +	strb r1, [r5, r0] +	mov r1, #0x52 +	ldr r0, [sp, #0x34] +	ldr r2, [sp, #0x30] +	lsl r1, r1, #2 +	str r2, [r5, r1] +	add r1, r1, #4 +	str r0, [r5, r1] +	mov r0, #0x15 +	mov r1, #0 +	lsl r0, r0, #4 +	str r1, [r5, r0] +	add r0, r0, #4 +	str r1, [r5, r0] +	mov r0, #0x56 +	lsl r0, r0, #2 +	str r1, [r5, r0] +	add r0, r0, #4 +	str r1, [r5, r0] +	mov r0, #1 +	ldr r1, [sp, #0x14] +	lsl r0, r0, #0xa +	add r0, r1, r0 +	str r0, [sp, #0x14] +	ldr r0, [sp, #0x18] +	add r4, #0xc +	add r0, r0, #1 +	str r0, [sp, #0x18] +	ldr r0, [sp, #0x10] +	add r6, r6, #4 +	ldr r1, [r0] +	ldr r0, [sp, #0x18] +	add r5, #0x38 +	add r7, #0x20 +	cmp r0, r1 +	bge _02254E40 +	b _02254D24 +_02254E40: +	ldr r0, [sp, #0x1c] +	bl FUN_020066F4 +_02254E46: +	add sp, #0x40 +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02254E4C: .word 0x02255EC0 +_02254E50: .word 0x00000165 +	thumb_func_end MOD28_02254CB4 + +	thumb_func_start MOD28_02254E54 +MOD28_02254E54: ; 0x02254E54 +	push {r3, r4, r5, lr} +	add r5, r0, #0 +	bl FUN_0201BA60 +	mov r1, #0x3f +	and r0, r1 +	sub r0, #0x20 +	lsl r4, r0, #0xc +	bl FUN_0201BA60 +	mov r1, #0x3f +	and r0, r1 +	sub r0, #0x20 +	lsl r0, r0, #0xc +	str r4, [r5] +	str r0, [r5, #4] +	mov r0, #0 +	str r0, [r5, #8] +	add r0, r5, #0 +	add r1, r5, #0 +	bl VEC_Normalize +	ldr r1, [r5] +	asr r0, r1, #3 +	lsr r0, r0, #0x1c +	add r0, r1, r0 +	asr r0, r0, #4 +	str r0, [r5] +	ldr r1, [r5, #4] +	asr r0, r1, #3 +	lsr r0, r0, #0x1c +	add r0, r1, r0 +	asr r0, r0, #4 +	str r0, [r5, #4] +	pop {r3, r4, r5, pc} +	.align 2, 0 +	thumb_func_end MOD28_02254E54 + +	thumb_func_start MOD28_02254E9C +MOD28_02254E9C: ; 0x02254E9C +	push {r3, r4, r5, r6, r7, lr} +	add r7, r1, #0 +	str r0, [sp] +	ldr r0, [r7] +	mov r6, #0 +	cmp r0, #0 +	ble _02254EF8 +	mov r1, #0x4f +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r4, r0, r1 +	add r5, r0, #0 +_02254EB4: +	add r0, r4, #0 +	bl MOD28_02254E54 +	mov r0, #0x59 +	lsl r0, r0, #2 +	ldrb r0, [r5, r0] +	cmp r0, #0 +	beq _02254ED2 +	mov r0, #0x4d +	lsl r0, r0, #2 +	ldr r0, [r5, r0] +	mov r1, #6 +	bl MOD20_02253F28 +	b _02254EEC +_02254ED2: +	mov r0, #0x4f +	lsl r0, r0, #2 +	ldr r0, [r5, r0] +	cmp r0, #0 +	ble _02254EE0 +	mov r1, #7 +	b _02254EE2 +_02254EE0: +	mov r1, #6 +_02254EE2: +	mov r0, #0x4d +	lsl r0, r0, #2 +	ldr r0, [r5, r0] +	bl MOD20_02253F28 +_02254EEC: +	ldr r0, [r7] +	add r6, r6, #1 +	add r4, #0x38 +	add r5, #0x38 +	cmp r6, r0 +	blt _02254EB4 +_02254EF8: +	ldr r0, [sp] +	bl MOD28_02254F34 +	ldr r0, _02254F14 ; =MOD28_02254F84 +	ldr r1, [sp] +	mov r2, #1 +	bl FUN_0200CA44 +	ldr r1, [sp] +	add r1, #0xb0 +	str r1, [sp] +	str r0, [r1] +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02254F14: .word MOD28_02254F84 +	thumb_func_end MOD28_02254E9C + +	thumb_func_start MOD28_02254F18 +MOD28_02254F18: ; 0x02254F18 +	push {r4, lr} +	add r4, r1, #0 +	add r0, r4, #0 +	bl MOD20_022538A0 +	ldr r0, [r0, #4] +	mov r1, #6 +	bl FUN_020178A0 +	add r0, r4, #0 +	bl MOD28_02254C04 +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_02254F18 + +	thumb_func_start MOD28_02254F34 +MOD28_02254F34: ; 0x02254F34 +	push {r3, r4, r5, r6} +	add r1, r0, #0 +	mov r5, #0 +	add r1, #0xe4 +	str r5, [r1] +	ldr r1, [r0] +	ldr r3, [r1] +	cmp r3, #0 +	ble _02254F60 +	mov r1, #0x16 +	lsl r1, r1, #4 +	add r6, r0, #0 +	add r4, r5, #0 +	add r2, r1, #3 +_02254F50: +	strb r4, [r6, r1] +	strb r4, [r6, r2] +	ldr r3, [r0] +	add r5, r5, #1 +	ldr r3, [r3] +	add r6, #0x38 +	cmp r5, r3 +	blt _02254F50 +_02254F60: +	add r1, r0, #0 +	add r1, #0xec +	str r3, [r1] +	add r1, r0, #0 +	add r1, #0xec +	ldr r1, [r1] +	add r0, #0xf0 +	str r1, [r0] +	pop {r3, r4, r5, r6} +	bx lr +	thumb_func_end MOD28_02254F34 + +	thumb_func_start MOD28_02254F74 +MOD28_02254F74: ; 0x02254F74 +	add r2, r0, #0 +	add r2, #0xe4 +	str r1, [r2] +	mov r1, #0 +	add r0, #0xe8 +	str r1, [r0] +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_02254F74 + +	thumb_func_start MOD28_02254F84 +MOD28_02254F84: ; 0x02254F84 +	push {r3, r4, r5, lr} +	add r5, r1, #0 +	ldr r4, [r5] +	add r0, r4, #0 +	add r0, #0x4c +	ldrh r0, [r0] +	cmp r0, #0 +	beq _02254FFC +	mov r0, #0xa1 +	ldr r1, [r4, #0x50] +	lsl r0, r0, #2 +	str r1, [r5, r0] +	ldr r1, [r4, #0x54] +	add r0, r0, #4 +	sub r1, #8 +	str r1, [r5, r0] +	add r0, r5, #0 +	bl MOD28_02255040 +	add r1, r5, #0 +	add r1, #0xec +	str r0, [r1] +	add r0, r5, #0 +	add r0, #0xec +	ldr r1, [r0] +	ldr r0, [r4] +	cmp r1, r0 +	bhs _02254FC0 +	mov r1, #1 +	b _02254FC2 +_02254FC0: +	mov r1, #0 +_02254FC2: +	add r0, r5, #0 +	add r0, #0xf8 +	str r1, [r0] +	add r0, r5, #0 +	add r0, #0xf8 +	ldr r0, [r0] +	cmp r0, #0 +	beq _02254FEE +	add r0, r5, #0 +	add r0, #0xec +	ldr r1, [r0] +	add r0, r5, #0 +	add r0, #0xf0 +	ldr r0, [r0] +	cmp r1, r0 +	beq _02254FEE +	mov r0, #0xc +	mul r0, r1 +	add r0, r4, r0 +	ldrh r0, [r0, #8] +	bl MOD20_02252B48 +_02254FEE: +	add r0, r5, #0 +	add r0, #0xec +	ldr r1, [r0] +	add r0, r5, #0 +	add r0, #0xf0 +	str r1, [r0] +	b _0225500C +_02254FFC: +	add r0, r5, #0 +	mov r1, #0 +	add r0, #0xf8 +	str r1, [r0] +	add r0, r5, #0 +	ldr r1, [r4] +	add r0, #0xf0 +	str r1, [r0] +_0225500C: +	add r2, r5, #0 +	add r2, #0xe4 +	ldr r2, [r2] +	add r0, r5, #0 +	lsl r3, r2, #2 +	ldr r2, _0225503C ; =0x02255E94 +	add r1, r4, #0 +	ldr r2, [r2, r3] +	blx r2 +	add r0, r5, #0 +	add r1, r4, #0 +	bl MOD28_022551C4 +	add r0, r5, #0 +	add r0, #0xe4 +	ldr r0, [r0] +	cmp r0, #4 +	beq _02255038 +	add r0, r5, #0 +	add r1, r4, #0 +	bl MOD28_02255920 +_02255038: +	pop {r3, r4, r5, pc} +	nop +_0225503C: .word 0x02255E94 +	thumb_func_end MOD28_02254F84 + +	thumb_func_start MOD28_02255040 +MOD28_02255040: ; 0x02255040 +	push {r4, r5, r6, r7} +	add r5, r0, #0 +	ldr r0, [r5] +	mov r1, #0 +	ldr r4, [r0] +	cmp r4, #0 +	ble _0225508C +	mov r0, #0xa1 +	lsl r0, r0, #2 +	ldr r2, [r5, r0] +	add r0, r0, #4 +	ldr r3, [r5, r0] +_02255058: +	mov r0, #0x52 +	lsl r0, r0, #2 +	mov r6, #0x53 +	ldr r0, [r5, r0] +	lsl r6, r6, #2 +	ldr r6, [r5, r6] +	asr r0, r0, #0xc +	asr r6, r6, #0xc +	sub r0, r2, r0 +	sub r7, r3, r6 +	add r6, r0, #0 +	mul r6, r0 +	add r0, r7, #0 +	mul r0, r7 +	add r6, r6, r0 +	mov r0, #1 +	lsl r0, r0, #8 +	cmp r6, r0 +	bge _02255084 +	add r0, r1, #0 +	pop {r4, r5, r6, r7} +	bx lr +_02255084: +	add r1, r1, #1 +	add r5, #0x38 +	cmp r1, r4 +	blt _02255058 +_0225508C: +	add r0, r4, #0 +	pop {r4, r5, r6, r7} +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_02255040 + +	thumb_func_start MOD28_02255094 +MOD28_02255094: ; 0x02255094 +	push {r4, r5} +	lsl r4, r0, #0xc +	ldr r0, [r3] +	sub r0, r4, r0 +	lsl r4, r1, #0xc +	ldr r1, [r3, #4] +	sub r5, r4, r1 +	asr r1, r0, #0xc +	add r4, r0, #0 +	mul r4, r1 +	add r1, r2, #0 +	mul r1, r2 +	asr r0, r5, #0xc +	add r3, r5, #0 +	mul r3, r0 +	lsl r2, r1, #0xc +	add r1, r4, r3 +	mov r0, #0 +	cmp r2, r1 +	ble _022550BE +	mov r0, #1 +_022550BE: +	pop {r4, r5} +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_02255094 + +	thumb_func_start MOD28_022550C4 +MOD28_022550C4: ; 0x022550C4 +	push {r3, lr} +	add r1, #0x4e +	ldrh r1, [r1] +	cmp r1, #0 +	beq _022550E0 +	add r1, r0, #0 +	add r1, #0xf8 +	ldr r2, [r1] +	add r1, r0, #0 +	add r1, #0xfc +	str r2, [r1] +	mov r1, #1 +	bl MOD28_02254F74 +_022550E0: +	pop {r3, pc} +	.align 2, 0 +	thumb_func_end MOD28_022550C4 + +	thumb_func_start MOD28_022550E4 +MOD28_022550E4: ; 0x022550E4 +	push {r3, lr} +	add r1, #0x4c +	ldrh r1, [r1] +	cmp r1, #0 +	beq _0225510E +	add r1, r0, #0 +	add r1, #0xe8 +	ldr r1, [r1] +	add r2, r1, #1 +	add r1, r0, #0 +	add r1, #0xe8 +	str r2, [r1] +	add r1, r0, #0 +	add r1, #0xe8 +	ldr r1, [r1] +	cmp r1, #6 +	bls _02255126 +	mov r1, #2 +	bl MOD28_02254F74 +	pop {r3, pc} +_0225510E: +	add r1, r0, #0 +	add r1, #0xfc +	ldr r1, [r1] +	cmp r1, #0 +	beq _02255120 +	mov r1, #0 +	bl MOD28_02254F74 +	pop {r3, pc} +_02255120: +	mov r1, #3 +	bl MOD28_02254F74 +_02255126: +	pop {r3, pc} +	thumb_func_end MOD28_022550E4 + +	thumb_func_start MOD28_02255128 +MOD28_02255128: ; 0x02255128 +	push {r3, lr} +	add r1, #0x4c +	ldrh r1, [r1] +	cmp r1, #0 +	bne _02255138 +	mov r1, #0 +	bl MOD28_02254F74 +_02255138: +	pop {r3, pc} +	.align 2, 0 +	thumb_func_end MOD28_02255128 + +	thumb_func_start MOD28_0225513C +MOD28_0225513C: ; 0x0225513C +	push {r3, lr} +	add r1, #0x4e +	ldrh r1, [r1] +	cmp r1, #0 +	bne _02255166 +	add r1, r0, #0 +	add r1, #0xe8 +	ldr r1, [r1] +	add r2, r1, #1 +	add r1, r0, #0 +	add r1, #0xe8 +	str r2, [r1] +	add r1, r0, #0 +	add r1, #0xe8 +	ldr r1, [r1] +	cmp r1, #6 +	bls _02255184 +	mov r1, #0 +	bl MOD28_02254F74 +	pop {r3, pc} +_02255166: +	add r1, r0, #0 +	add r1, #0xf8 +	ldr r1, [r1] +	cmp r1, #0 +	beq _0225517E +	add r2, r0, #0 +	mov r1, #1 +	add r2, #0xfc +	str r1, [r2] +	bl MOD28_02254F74 +	pop {r3, pc} +_0225517E: +	mov r1, #4 +	bl MOD28_02254F74 +_02255184: +	pop {r3, pc} +	.align 2, 0 +	thumb_func_end MOD28_0225513C + +	thumb_func_start MOD28_02255188 +MOD28_02255188: ; 0x02255188 +	push {r4, lr} +	add r4, r0, #0 +	add r1, r4, #0 +	add r1, #0xe8 +	ldr r1, [r1] +	cmp r1, #0 +	bne _022551A8 +	bl MOD28_02255288 +	add r0, r4, #0 +	add r0, #0xe8 +	ldr r0, [r0] +	add r4, #0xe8 +	add r0, r0, #1 +	str r0, [r4] +	pop {r4, pc} +_022551A8: +	bl MOD28_022552C0 +	cmp r0, #0 +	beq _022551B8 +	add r0, r4, #0 +	mov r1, #0 +	bl MOD28_02254F74 +_022551B8: +	pop {r4, pc} +	.align 2, 0 +	thumb_func_end MOD28_02255188 + +	thumb_func_start MOD28_022551BC +MOD28_022551BC: ; 0x022551BC +	push {r0, r1, r2, r3} +	add sp, #0x10 +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_022551BC + +	thumb_func_start MOD28_022551C4 +MOD28_022551C4: ; 0x022551C4 +	push {r3, r4, r5, r6, r7, lr} +	add r7, r1, #0 +	str r0, [sp] +	ldr r0, [r7] +	mov r4, #0 +	cmp r0, #0 +	ble _02255212 +	ldr r5, [sp] +_022551D4: +	ldr r0, _0225521C ; =0x00000163 +	ldrb r0, [r5, r0] +	cmp r0, #0 +	beq _022551F4 +	ldr r0, _0225521C ; =0x00000163 +	ldr r2, _0225521C ; =0x00000163 +	ldrb r0, [r5, r0] +	sub r1, r0, #1 +	ldr r0, _0225521C ; =0x00000163 +	strb r1, [r5, r0] +	ldrb r2, [r5, r2] +	ldr r0, _02255220 ; =0x02255F20 +	add r1, r4, #0 +	bl MOD28_022551BC +	b _02255208 +_022551F4: +	mov r3, #0x16 +	lsl r3, r3, #4 +	ldrb r3, [r5, r3] +	ldr r0, [sp] +	add r1, r7, #0 +	lsl r6, r3, #2 +	ldr r3, _02255224 ; =0x02255EA8 +	add r2, r4, #0 +	ldr r3, [r3, r6] +	blx r3 +_02255208: +	ldr r0, [r7] +	add r4, r4, #1 +	add r5, #0x38 +	cmp r4, r0 +	blt _022551D4 +_02255212: +	ldr r0, _02255228 ; =0x02255F34 +	bl MOD28_022551BC +	pop {r3, r4, r5, r6, r7, pc} +	nop +_0225521C: .word 0x00000163 +_02255220: .word 0x02255F20 +_02255224: .word 0x02255EA8 +_02255228: .word 0x02255F34 +	thumb_func_end MOD28_022551C4 + +	thumb_func_start MOD28_0225522C +MOD28_0225522C: ; 0x0225522C +	push {r3, r4, r5, r6, r7, lr} +	add r6, r1, #0 +	add r7, r2, #0 +	mov r2, #0x38 +	add r4, r6, #0 +	mul r4, r2 +	add r5, r0, #0 +	mov r2, #0x16 +	add r3, r5, r4 +	lsl r2, r2, #4 +	ldrb r2, [r3, r2] +	cmp r2, #3 +	bne _0225524A +	bl MOD28_02255344 +_0225524A: +	mov r0, #0x16 +	lsl r0, r0, #4 +	add r2, r5, r0 +	mov r3, #0x16 +	lsl r3, r3, #4 +	strb r7, [r2, r4] +	mov r1, #0 +	add r0, r5, r4 +	add r3, #8 +	str r1, [r0, r3] +	mov r3, #0x16 +	lsl r3, r3, #4 +	sub r3, #0xc +	str r1, [r0, r3] +	mov r3, #0x16 +	lsl r3, r3, #4 +	sub r3, #8 +	str r1, [r0, r3] +	mov r3, #0x16 +	lsl r3, r3, #4 +	sub r3, r3, #4 +	str r1, [r0, r3] +	ldrb r0, [r2, r4] +	cmp r0, #3 +	bne _02255284 +	add r0, r5, #0 +	add r1, r6, #0 +	bl MOD28_022552D4 +_02255284: +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +	thumb_func_end MOD28_0225522C + +	thumb_func_start MOD28_02255288 +MOD28_02255288: ; 0x02255288 +	push {r3, r4, r5, r6, r7, lr} +	add r6, r0, #0 +	ldr r0, [r6] +	mov r4, #0 +	ldr r1, [r0] +	cmp r1, #0 +	ble _022552B4 +	add r5, r6, #0 +	add r7, r4, #0 +_0225529A: +	add r0, r6, #0 +	add r1, r4, #0 +	mov r2, #5 +	bl MOD28_0225522C +	ldr r0, _022552BC ; =0x00000163 +	add r4, r4, #1 +	strb r7, [r5, r0] +	ldr r0, [r6] +	add r5, #0x38 +	ldr r1, [r0] +	cmp r4, r1 +	blt _0225529A +_022552B4: +	mov r0, #1 +	lsl r0, r0, #8 +	str r1, [r6, r0] +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +_022552BC: .word 0x00000163 +	thumb_func_end MOD28_02255288 + +	thumb_func_start MOD28_022552C0 +MOD28_022552C0: ; 0x022552C0 +	mov r1, #1 +	lsl r1, r1, #8 +	ldr r0, [r0, r1] +	cmp r0, #0 +	bne _022552CE +	mov r0, #1 +	bx lr +_022552CE: +	mov r0, #0 +	bx lr +	.align 2, 0 +	thumb_func_end MOD28_022552C0 + +	thumb_func_start MOD28_022552D4 +MOD28_022552D4: ; 0x022552D4 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	mov r0, #0xc +	add r7, r1, #0 +	mul r7, r0 +	ldr r0, [r5] +	add r0, r0, r7 +	ldrb r0, [r0, #0xe] +	cmp r0, #0 +	bne _02255314 +	mov r0, #0x4e +	lsl r0, r0, #2 +	add r4, r5, r0 +	mov r0, #0x38 +	add r6, r1, #0 +	mul r6, r0 +	ldr r0, [r5, #0x30] +	ldr r1, [r4, r6] +	mov r2, #0 +	bl MOD20_02253F80 +	ldr r1, [r5] +	ldr r0, [r4, r6] +	add r1, r1, r7 +	ldrb r1, [r1, #0xf] +	sub r1, r1, #1 +	bl MOD20_02253F28 +	ldr r0, [r4, r6] +	mov r1, #0 +	bl MOD20_02253F78 +_02255314: +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +	thumb_func_end MOD28_022552D4 + +	thumb_func_start MOD28_02255318 +MOD28_02255318: ; 0x02255318 +	push {r3, r4, r5, lr} +	mov r2, #0x4e +	lsl r2, r2, #2 +	add r4, r0, r2 +	mov r2, #0x38 +	add r5, r1, #0 +	mul r5, r2 +	ldr r0, [r0, #0x30] +	ldr r1, [r4, r5] +	mov r2, #2 +	bl MOD20_02253F80 +	ldr r0, [r4, r5] +	mov r1, #3 +	bl MOD20_02253F28 +	ldr r0, [r4, r5] +	mov r1, #0 +	bl MOD20_02253F78 +	pop {r3, r4, r5, pc} +	.align 2, 0 +	thumb_func_end MOD28_02255318 + +	thumb_func_start MOD28_02255344 +MOD28_02255344: ; 0x02255344 +	mov r2, #0x38 +	mul r2, r1 +	add r1, r0, r2 +	mov r0, #0x4e +	lsl r0, r0, #2 +	ldr r0, [r1, r0] +	ldr r3, _02255358 ; =0x02253F79 +	mov r1, #1 +	bx r3 +	nop +_02255358: .word 0x02253F79 +	thumb_func_end MOD28_02255344 + +	thumb_func_start MOD28_0225535C +MOD28_0225535C: ; 0x0225535C +	push {r3, r4, r5, r6, lr} +	sub sp, #0xc +	add r6, r2, #0 +	add r5, r0, #0 +	add r0, r6, #0 +	add r4, r1, #0 +	bl VEC_Mag +	cmp r0, r5 +	ble _0225539A +	add r1, r0, #0 +	mul r1, r4 +	add r0, r1, #0 +	mov r1, #0x64 +	bl _u32_div_f +	add r4, r0, #0 +	add r0, r6, #0 +	add r1, sp, #0 +	bl VEC_Normalize +	mov r0, #0 +	str r0, [r6] +	str r0, [r6, #4] +	str r0, [r6, #8] +	add r0, r4, #0 +	add r1, sp, #0 +	add r2, r6, #0 +	add r3, r6, #0 +	bl VEC_MultAdd +_0225539A: +	add sp, #0xc +	pop {r3, r4, r5, r6, pc} +	.align 2, 0 +	thumb_func_end MOD28_0225535C + +	thumb_func_start MOD28_022553A0 +MOD28_022553A0: ; 0x022553A0 +	ldr r1, [r0] +	cmp r1, #0 +	bne _022553B0 +	ldr r0, [r0, #4] +	cmp r0, #0 +	bne _022553B0 +	mov r0, #1 +	bx lr +_022553B0: +	mov r0, #0 +	bx lr +	thumb_func_end MOD28_022553A0 + +	thumb_func_start MOD28_022553B4 +MOD28_022553B4: ; 0x022553B4 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	add r4, r2, #0 +	add r6, r1, #0 +	ldr r0, _02255498 ; =0x02255F44 +	add r1, r4, #0 +	bl MOD28_022551BC +	add r0, r6, #0 +	add r0, #0x4c +	ldrh r0, [r0] +	cmp r0, #0 +	bne _022553E6 +	mov r1, #0x60 +	add r2, r1, #0 +	add r2, #0xdc +	add r3, r5, r2 +	mov r2, #0x38 +	mov r0, #3 +	mul r2, r4 +	lsl r0, r0, #8 +	add r2, r3, r2 +	bl MOD28_0225535C +	pop {r3, r4, r5, r6, r7, pc} +_022553E6: +	add r0, r5, #0 +	add r0, #0xf8 +	ldr r0, [r0] +	cmp r0, #0 +	bne _02255448 +	mov r1, #0xa1 +	mov r3, #0x52 +	lsl r1, r1, #2 +	lsl r3, r3, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	add r7, r5, r3 +	mov r3, #0x38 +	mul r3, r4 +	ldr r1, [r5, r1] +	mov r2, #0x30 +	add r3, r7, r3 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _02255494 +	mov r0, #0xc +	mul r0, r4 +	add r0, r6, r0 +	ldrb r0, [r0, #0xe] +	cmp r0, #1 +	beq _02255432 +	add r0, r5, #0 +	add r1, r4, #0 +	mov r2, #1 +	bl MOD28_0225522C +	add r0, r5, #0 +	add r1, r6, #0 +	add r2, r4, #0 +	bl MOD28_0225549C +	pop {r3, r4, r5, r6, r7, pc} +_02255432: +	add r0, r5, #0 +	add r1, r4, #0 +	mov r2, #2 +	bl MOD28_0225522C +	add r0, r5, #0 +	add r1, r6, #0 +	add r2, r4, #0 +	bl MOD28_022555B4 +	pop {r3, r4, r5, r6, r7, pc} +_02255448: +	add r0, r5, #0 +	add r0, #0xec +	ldr r0, [r0] +	cmp r0, r4 +	bne _02255494 +	mov r1, #0xa1 +	mov r3, #0x52 +	lsl r1, r1, #2 +	lsl r3, r3, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	add r7, r5, r3 +	mov r3, #0x38 +	mul r3, r4 +	ldr r1, [r5, r1] +	mov r2, #8 +	add r3, r7, r3 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _02255494 +	mov r0, #0xc +	mul r0, r4 +	add r0, r6, r0 +	ldrb r0, [r0, #0xe] +	cmp r0, #1 +	beq _0225548A +	add r0, r5, #0 +	add r1, r4, #0 +	mov r2, #3 +	bl MOD28_0225522C +	pop {r3, r4, r5, r6, r7, pc} +_0225548A: +	add r0, r5, #0 +	add r1, r4, #0 +	mov r2, #4 +	bl MOD28_0225522C +_02255494: +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02255498: .word 0x02255F44 +	thumb_func_end MOD28_022553B4 + +	thumb_func_start MOD28_0225549C +MOD28_0225549C: ; 0x0225549C +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #0x10 +	add r5, r0, #0 +	add r4, r2, #0 +	add r6, r1, #0 +	ldr r0, _022555AC ; =0x02255F58 +	add r1, r4, #0 +	bl MOD28_022551BC +	add r0, r6, #0 +	add r0, #0x4c +	ldrh r0, [r0] +	cmp r0, #0 +	beq _0225559C +	mov r0, #0x52 +	lsl r0, r0, #2 +	add r7, r5, r0 +	mov r0, #0x38 +	mul r0, r4 +	mov r1, #0xa1 +	str r0, [sp] +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	ldr r3, [sp] +	ldr r1, [r5, r1] +	mov r2, #0x40 +	add r3, r7, r3 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _0225559C +	add r0, r5, #0 +	add r0, #0xf8 +	ldr r0, [r0] +	cmp r0, #0 +	beq _022554F0 +	add r0, r5, #0 +	add r0, #0xec +	ldr r0, [r0] +	cmp r0, r4 +	bne _022555A6 +_022554F0: +	mov r1, #0xa1 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	ldr r3, [sp] +	ldr r1, [r5, r1] +	mov r2, #8 +	add r3, r7, r3 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _02255516 +	add r0, r5, #0 +	add r1, r4, #0 +	mov r2, #3 +	bl MOD28_0225522C +	add sp, #0x10 +	pop {r3, r4, r5, r6, r7, pc} +_02255516: +	mov r1, #0xa2 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	sub r1, r1, #4 +	ldr r1, [r5, r1] +	lsl r0, r0, #0xc +	lsl r1, r1, #0xc +	str r1, [sp, #4] +	str r0, [sp, #8] +	mov r0, #0 +	ldr r1, [sp] +	str r0, [sp, #0xc] +	add r0, sp, #4 +	add r1, r7, r1 +	add r2, r0, #0 +	bl VEC_Subtract +	add r0, sp, #4 +	add r1, r0, #0 +	bl VEC_Normalize +	mov r0, #0xc +	add r7, r4, #0 +	mul r7, r0 +	add r6, #0xf +	ldrb r2, [r6, r7] +	ldr r0, _022555B0 ; =0x02255E90 +	ldr r1, [sp, #4] +	ldrb r0, [r0, r2] +	mul r0, r1 +	mov r1, #0x64 +	bl _s32_div_f +	str r0, [sp, #4] +	ldrb r2, [r6, r7] +	ldr r0, _022555B0 ; =0x02255E90 +	ldr r1, [sp, #8] +	ldrb r0, [r0, r2] +	mul r0, r1 +	mov r1, #0x64 +	bl _s32_div_f +	ldr r2, [sp, #4] +	str r0, [sp, #8] +	asr r1, r2, #3 +	lsr r1, r1, #0x1c +	add r1, r2, r1 +	asr r1, r1, #4 +	str r1, [sp, #4] +	asr r1, r0, #3 +	lsr r1, r1, #0x1c +	add r1, r0, r1 +	asr r0, r1, #4 +	str r0, [sp, #8] +	mov r0, #0x38 +	mul r0, r4 +	add r1, r5, r0 +	mov r0, #0x4f +	add r3, sp, #4 +	lsl r0, r0, #2 +	add r2, r1, r0 +	ldmia r3!, {r0, r1} +	stmia r2!, {r0, r1} +	ldr r0, [r3] +	add sp, #0x10 +	str r0, [r2] +	pop {r3, r4, r5, r6, r7, pc} +_0225559C: +	add r0, r5, #0 +	add r1, r4, #0 +	mov r2, #0 +	bl MOD28_0225522C +_022555A6: +	add sp, #0x10 +	pop {r3, r4, r5, r6, r7, pc} +	nop +_022555AC: .word 0x02255F58 +_022555B0: .word 0x02255E90 +	thumb_func_end MOD28_0225549C + +	thumb_func_start MOD28_022555B4 +MOD28_022555B4: ; 0x022555B4 +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #0x10 +	add r5, r0, #0 +	add r6, r2, #0 +	add r4, r1, #0 +	ldr r0, _02255688 ; =0x02255F6C +	add r1, r6, #0 +	bl MOD28_022551BC +	add r0, r4, #0 +	add r0, #0x4c +	ldrh r0, [r0] +	cmp r0, #0 +	beq _0225567A +	mov r0, #0x52 +	lsl r0, r0, #2 +	add r7, r5, r0 +	mov r0, #0x38 +	mul r0, r6 +	mov r1, #0xa1 +	str r0, [sp] +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	ldr r3, [sp] +	ldr r1, [r5, r1] +	mov r2, #0x40 +	add r3, r7, r3 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _0225567A +	mov r1, #0xa2 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	sub r1, r1, #4 +	ldr r1, [r5, r1] +	lsl r0, r0, #0xc +	str r0, [sp, #8] +	mov r0, #0 +	lsl r1, r1, #0xc +	str r0, [sp, #0xc] +	ldr r0, [sp] +	str r1, [sp, #4] +	add r1, sp, #4 +	add r0, r7, r0 +	add r2, r1, #0 +	bl VEC_Subtract +	add r0, sp, #4 +	add r1, r0, #0 +	bl VEC_Normalize +	mov r0, #0xc +	add r7, r6, #0 +	mul r7, r0 +	add r4, #0xf +	ldrb r2, [r4, r7] +	ldr r0, _0225568C ; =0x02255E8C +	ldr r1, [sp, #4] +	ldrb r0, [r0, r2] +	mul r0, r1 +	mov r1, #0x64 +	bl _s32_div_f +	str r0, [sp, #4] +	ldrb r2, [r4, r7] +	ldr r0, _0225568C ; =0x02255E8C +	ldr r1, [sp, #8] +	ldrb r0, [r0, r2] +	mul r0, r1 +	mov r1, #0x64 +	bl _s32_div_f +	ldr r2, [sp, #4] +	str r0, [sp, #8] +	asr r1, r2, #3 +	lsr r1, r1, #0x1c +	add r1, r2, r1 +	asr r1, r1, #4 +	str r1, [sp, #4] +	asr r1, r0, #3 +	lsr r1, r1, #0x1c +	add r1, r0, r1 +	asr r0, r1, #4 +	str r0, [sp, #8] +	mov r0, #0x38 +	mul r0, r6 +	add r1, r5, r0 +	mov r0, #0x4f +	add r3, sp, #4 +	lsl r0, r0, #2 +	add r2, r1, r0 +	ldmia r3!, {r0, r1} +	stmia r2!, {r0, r1} +	ldr r0, [r3] +	add sp, #0x10 +	str r0, [r2] +	pop {r3, r4, r5, r6, r7, pc} +_0225567A: +	add r0, r5, #0 +	add r1, r6, #0 +	mov r2, #0 +	bl MOD28_0225522C +	add sp, #0x10 +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +_02255688: .word 0x02255F6C +_0225568C: .word 0x02255E8C +	thumb_func_end MOD28_022555B4 + +	thumb_func_start MOD28_02255690 +MOD28_02255690: ; 0x02255690 +	push {r4, r5, r6, r7, lr} +	sub sp, #0xc +	add r5, r0, #0 +	add r7, r2, #0 +	add r4, r1, #0 +	ldr r0, _02255764 ; =0x02255F80 +	add r1, r7, #0 +	bl MOD28_022551BC +	add r4, #0x4c +	ldrh r0, [r4] +	cmp r0, #0 +	beq _02255756 +	mov r1, #0xa2 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r4, r7, #0 +	lsl r2, r0, #0xc +	sub r0, r1, #4 +	ldr r0, [r5, r0] +	lsl r0, r0, #0xc +	str r0, [sp] +	mov r0, #0 +	str r0, [sp, #8] +	mov r0, #0x38 +	mul r4, r0 +	mov r0, #0x52 +	lsl r0, r0, #2 +	add r6, r5, r0 +	str r2, [sp, #4] +	sub r0, r1, #4 +	ldr r0, [r5, r0] +	ldr r1, [r5, r1] +	mov r2, #8 +	add r3, r6, r4 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _02255732 +	add r0, sp, #0 +	add r1, r6, r4 +	add r2, r0, #0 +	bl VEC_Subtract +	add r0, sp, #0 +	bl VEC_Mag +	mov r1, #6 +	lsl r1, r1, #8 +	cmp r0, r1 +	ble _02255704 +	add r0, sp, #0 +	add r1, r0, #0 +	bl VEC_Normalize +	mov r0, #0 +	str r0, [sp] +	str r0, [sp, #4] +_02255704: +	ldr r1, [sp] +	add r3, sp, #0 +	asr r0, r1, #3 +	lsr r0, r0, #0x1c +	add r0, r1, r0 +	asr r0, r0, #4 +	ldr r1, [sp, #4] +	str r0, [sp] +	asr r0, r1, #3 +	lsr r0, r0, #0x1c +	add r0, r1, r0 +	asr r0, r0, #4 +	str r0, [sp, #4] +	mov r0, #0x4f +	add r1, r5, r4 +	lsl r0, r0, #2 +	add r2, r1, r0 +	ldmia r3!, {r0, r1} +	stmia r2!, {r0, r1} +	ldr r0, [r3] +	add sp, #0xc +	str r0, [r2] +	pop {r4, r5, r6, r7, pc} +_02255732: +	mov r1, #0xa1 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	ldr r1, [r5, r1] +	mov r2, #0x40 +	add r3, r6, r4 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _02255756 +	add r0, r5, #0 +	add r1, r7, #0 +	mov r2, #1 +	bl MOD28_0225522C +	add sp, #0xc +	pop {r4, r5, r6, r7, pc} +_02255756: +	add r0, r5, #0 +	add r1, r7, #0 +	mov r2, #0 +	bl MOD28_0225522C +	add sp, #0xc +	pop {r4, r5, r6, r7, pc} +	.align 2, 0 +_02255764: .word 0x02255F80 +	thumb_func_end MOD28_02255690 + +	thumb_func_start MOD28_02255768 +MOD28_02255768: ; 0x02255768 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r0, #0 +	add r7, r2, #0 +	add r4, r1, #0 +	ldr r0, _02255808 ; =0x02255F94 +	add r1, r7, #0 +	bl MOD28_022551BC +	add r4, #0x4c +	ldrh r0, [r4] +	cmp r0, #0 +	beq _022557D8 +	mov r0, #0x38 +	add r4, r7, #0 +	mul r4, r0 +	mov r0, #0x52 +	mov r1, #0xa1 +	lsl r0, r0, #2 +	add r6, r5, r0 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	ldr r1, [r5, r1] +	mov r2, #8 +	add r3, r6, r4 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _022557B6 +	mov r1, #0x4f +	lsl r1, r1, #2 +	mov r3, #0 +	add r2, r5, r4 +	str r3, [r2, r1] +	add r0, r1, #4 +	str r3, [r2, r0] +	add r1, #8 +	str r3, [r2, r1] +	pop {r3, r4, r5, r6, r7, pc} +_022557B6: +	mov r1, #0xa1 +	lsl r1, r1, #2 +	ldr r0, [r5, r1] +	add r1, r1, #4 +	ldr r1, [r5, r1] +	mov r2, #0x40 +	add r3, r6, r4 +	bl MOD28_02255094 +	cmp r0, #0 +	beq _022557FA +	add r0, r5, #0 +	add r1, r7, #0 +	mov r2, #2 +	bl MOD28_0225522C +	pop {r3, r4, r5, r6, r7, pc} +_022557D8: +	mov r0, #0x38 +	add r4, r7, #0 +	mul r4, r0 +	mov r0, #0x4f +	lsl r0, r0, #2 +	add r0, r5, r0 +	add r0, r0, r4 +	bl MOD28_022553A0 +	cmp r0, #0 +	beq _022557FA +	mov r0, #0x4f +	lsl r0, r0, #2 +	add r0, r5, r0 +	add r0, r0, r4 +	bl MOD28_02254E54 +_022557FA: +	add r0, r5, #0 +	add r1, r7, #0 +	mov r2, #0 +	bl MOD28_0225522C +	pop {r3, r4, r5, r6, r7, pc} +	nop +_02255808: .word 0x02255F94 +	thumb_func_end MOD28_02255768 + +	thumb_func_start MOD28_0225580C +MOD28_0225580C: ; 0x0225580C +	push {r4, r5, r6, lr} +	add r5, r0, #0 +	mov r0, #0x4d +	lsl r0, r0, #2 +	add r1, r5, r0 +	add r6, r2, #0 +	mov r0, #0x38 +	mul r0, r6 +	add r4, r1, r0 +	ldr r0, _02255918 ; =0x02255FA8 +	add r1, r6, #0 +	bl MOD28_022551BC +	add r0, r4, #0 +	add r0, #0x34 +	ldrb r0, [r0] +	cmp r0, #0 +	beq _02255836 +	cmp r0, #1 +	beq _0225585A +	pop {r4, r5, r6, pc} +_02255836: +	mov r0, #0 +	str r0, [r4, #8] +	str r0, [r4, #0xc] +	str r0, [r4, #0x10] +	add r0, r5, #0 +	add r1, r6, #0 +	bl MOD28_02255318 +	ldr r0, _0225591C ; =0x00000669 +	bl MOD20_02252B28 +	add r0, r4, #0 +	add r0, #0x34 +	ldrb r0, [r0] +	add r1, r0, #1 +	add r0, r4, #0 +	add r0, #0x34 +	strb r1, [r0] +_0225585A: +	add r0, r4, #0 +	add r0, #0x35 +	ldrb r1, [r0] +	add r0, r4, #0 +	add r0, #0x35 +	add r1, #8 +	strb r1, [r0] +	add r0, r4, #0 +	add r0, #0x36 +	ldrb r0, [r0] +	cmp r0, #0 +	bne _0225588C +	add r0, r4, #0 +	add r0, #0x35 +	ldrb r0, [r0] +	cmp r0, #0x8c +	bls _0225588C +	add r0, r5, #0 +	add r1, r6, #0 +	bl MOD28_02255344 +	add r0, r4, #0 +	mov r1, #1 +	add r0, #0x36 +	strb r1, [r0] +_0225588C: +	add r0, r4, #0 +	add r0, #0x35 +	ldrb r0, [r0] +	cmp r0, #0xb4 +	bls _022558A6 +	add r0, r4, #0 +	mov r1, #0xb4 +	add r0, #0x35 +	strb r1, [r0] +	add r0, r4, #0 +	mov r1, #2 +	add r0, #0x36 +	strb r1, [r0] +_022558A6: +	add r0, r4, #0 +	add r0, #0x35 +	ldrb r0, [r0] +	bl FUN_0201B93C +	mov r1, #0x13 +	mvn r1, r1 +	mul r1, r0 +	mov r0, #0 +	str r0, [r4, #0x20] +	str r1, [r4, #0x24] +	str r0, [r4, #0x28] +	add r0, r4, #0 +	add r1, r4, #0 +	add r2, r5, #0 +	add r0, #0x14 +	add r1, #0x20 +	add r2, #0xa4 +	bl VEC_Add +	add r1, r5, #0 +	add r2, r5, #0 +	add r1, #0xa4 +	add r2, #0xa8 +	ldr r0, [r4] +	ldr r1, [r1] +	ldr r2, [r2] +	bl MOD20_02253F64 +	mov r2, #2 +	ldr r3, [r4, #0x18] +	lsl r2, r2, #0xe +	ldr r0, [r4, #4] +	ldr r1, [r4, #0x14] +	add r2, r3, r2 +	bl MOD20_02253F64 +	add r0, r4, #0 +	add r0, #0x36 +	ldrb r0, [r0] +	cmp r0, #2 +	bne _02255916 +	add r4, #8 +	add r0, r4, #0 +	bl MOD28_02254E54 +	add r0, r5, #0 +	add r1, r6, #0 +	mov r2, #0 +	bl MOD28_0225522C +	mov r0, #1 +	lsl r0, r0, #8 +	ldr r1, [r5, r0] +	sub r1, r1, #1 +	str r1, [r5, r0] +_02255916: +	pop {r4, r5, r6, pc} +	.align 2, 0 +_02255918: .word 0x02255FA8 +_0225591C: .word 0x00000669 +	thumb_func_end MOD28_0225580C + +	thumb_func_start MOD28_02255920 +MOD28_02255920: ; 0x02255920 +	push {r4, r5, r6, r7, lr} +	sub sp, #0x74 +	str r0, [sp] +	mov r0, #1 +	lsl r0, r0, #0x10 +	str r1, [sp, #4] +	str r0, [sp, #0x34] +_0225592E: +	mov r0, #0 +	str r0, [sp, #0x28] +	str r0, [sp, #0x24] +	ldr r0, [sp, #4] +	ldr r4, [sp, #0x34] +	ldr r0, [r0] +	str r0, [sp, #0x10] +	cmp r0, #0 +	ble _02255974 +	mov r1, #0x52 +	ldr r5, [sp] +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r7, r0, r1 +	sub r1, #0xc +	add r5, #0x5c +	add r6, r0, r1 +_02255950: +	ldr r0, [sp, #0x34] +	add r1, r6, #0 +	add r2, r7, #0 +	add r3, r5, #0 +	bl VEC_MultAdd +	ldr r0, [sp, #0x24] +	add r5, #0xc +	add r0, r0, #1 +	str r0, [sp, #0x24] +	ldr r0, [sp, #4] +	ldr r1, [sp, #0x24] +	ldr r0, [r0] +	add r7, #0x38 +	add r6, #0x38 +	str r0, [sp, #0x10] +	cmp r1, r0 +	blt _02255950 +_02255974: +	ldr r0, [sp, #0x10] +	mov r5, #0 +	cmp r0, #0 +	ble _02255A3E +	ldr r0, [sp] +	str r0, [sp, #0x14] +	add r6, r0, #0 +_02255982: +	ldr r0, [sp, #0x14] +	ldr r7, [r0, #0x5c] +	ldr r0, _02255CB8 ; =0xFFFF6000 +	cmp r7, r0 +	bge _022559AE +	mov r0, #0x4f +	lsl r0, r0, #2 +	ldr r1, [r6, r0] +	cmp r1, #0 +	beq _022559AE +	mov r0, #0xa +	lsl r0, r0, #0xc +	add r0, r7, r0 +	bl _s32_div_f +	sub r1, r4, r0 +	cmp r1, r4 +	bge _022559AE +	mov r0, #2 +	str r0, [sp, #0x28] +	str r5, [sp, #0x30] +	add r4, r1, #0 +_022559AE: +	mov r0, #0xd9 +	lsl r0, r0, #0xc +	cmp r7, r0 +	ble _022559D8 +	mov r0, #0x4f +	lsl r0, r0, #2 +	ldr r1, [r6, r0] +	cmp r1, #0 +	beq _022559D8 +	mov r0, #0xd9 +	lsl r0, r0, #0xc +	sub r0, r7, r0 +	bl _s32_div_f +	sub r1, r4, r0 +	cmp r1, r4 +	bge _022559D8 +	mov r0, #3 +	str r0, [sp, #0x28] +	str r5, [sp, #0x30] +	add r4, r1, #0 +_022559D8: +	ldr r0, [sp, #0x14] +	ldr r7, [r0, #0x60] +	ldr r0, _02255CBC ; =0xFFFEA000 +	cmp r7, r0 +	bge _02255A04 +	mov r0, #5 +	lsl r0, r0, #6 +	ldr r1, [r6, r0] +	cmp r1, #0 +	beq _02255A04 +	mov r0, #0x16 +	lsl r0, r0, #0xc +	add r0, r7, r0 +	bl _s32_div_f +	sub r1, r4, r0 +	cmp r1, r4 +	bge _02255A04 +	mov r0, #4 +	str r0, [sp, #0x28] +	str r5, [sp, #0x30] +	add r4, r1, #0 +_02255A04: +	mov r0, #0xb7 +	lsl r0, r0, #0xc +	cmp r7, r0 +	ble _02255A2E +	mov r0, #5 +	lsl r0, r0, #6 +	ldr r1, [r6, r0] +	cmp r1, #0 +	beq _02255A2E +	mov r0, #0xb7 +	lsl r0, r0, #0xc +	sub r0, r7, r0 +	bl _s32_div_f +	sub r1, r4, r0 +	cmp r1, r4 +	bge _02255A2E +	mov r0, #5 +	str r0, [sp, #0x28] +	str r5, [sp, #0x30] +	add r4, r1, #0 +_02255A2E: +	ldr r0, [sp, #0x14] +	add r5, r5, #1 +	add r0, #0xc +	str r0, [sp, #0x14] +	ldr r0, [sp, #0x10] +	add r6, #0x38 +	cmp r5, r0 +	blt _02255982 +_02255A3E: +	mov r0, #0 +	str r0, [sp, #0x20] +	ldr r0, [sp, #0x10] +	cmp r0, #0 +	ble _02255AEE +	ldr r0, [sp] +	mov r1, #0x4f +	str r0, [sp, #0x1c] +	add r0, #0x5c +	str r0, [sp, #0x1c] +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r0, r0, r1 +	str r0, [sp, #0x18] +	ldr r0, [sp, #0x1c] +	str r0, [sp, #0x38] +	ldr r0, [sp, #0x18] +	str r0, [sp, #0x3c] +_02255A62: +	ldr r0, [sp, #0x20] +	mov r5, #0 +	cmp r0, #0 +	ble _02255AD0 +	ldr r7, [sp, #0x38] +	ldr r6, [sp, #0x3c] +_02255A6E: +	ldr r1, [sp, #0x1c] +	add r0, r7, #0 +	add r2, sp, #0x68 +	bl VEC_Subtract +	add r0, sp, #0x68 +	bl VEC_Mag +	mov r1, #2 +	lsl r1, r1, #0x10 +	str r0, [sp, #0x40] +	cmp r0, r1 +	bge _02255AC4 +	add r0, sp, #0x68 +	add r1, sp, #0x5c +	bl VEC_Normalize +	ldr r1, [sp, #0x18] +	add r0, r6, #0 +	add r2, sp, #0x50 +	bl VEC_Subtract +	add r0, sp, #0x50 +	add r1, sp, #0x5c +	bl VEC_DotProduct +	add r2, r0, #0 +	mov r1, #2 +	ldr r0, [sp, #0x40] +	lsl r1, r1, #0x10 +	sub r0, r1, r0 +	neg r1, r2 +	bl _s32_div_f +	sub r0, r4, r0 +	cmp r0, r4 +	bge _02255AC4 +	mov r1, #1 +	str r1, [sp, #0x28] +	ldr r1, [sp, #0x20] +	str r5, [sp, #0x30] +	str r1, [sp, #0x2c] +	add r4, r0, #0 +_02255AC4: +	ldr r0, [sp, #0x20] +	add r5, r5, #1 +	add r7, #0xc +	add r6, #0x38 +	cmp r5, r0 +	blt _02255A6E +_02255AD0: +	ldr r0, [sp, #0x1c] +	add r0, #0xc +	str r0, [sp, #0x1c] +	ldr r0, [sp, #0x18] +	add r0, #0x38 +	str r0, [sp, #0x18] +	ldr r0, [sp, #0x20] +	add r0, r0, #1 +	str r0, [sp, #0x20] +	ldr r0, [sp, #4] +	ldr r1, [sp, #0x20] +	ldr r0, [r0] +	str r0, [sp, #0x10] +	cmp r1, r0 +	blt _02255A62 +_02255AEE: +	cmp r4, #0 +	bgt _02255AF4 +	b _02255DC8 +_02255AF4: +	mov r0, #0 +	str r0, [sp, #8] +	ldr r0, [sp, #0x10] +	cmp r0, #0 +	ble _02255B2E +	mov r1, #0x52 +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r7, r0, r1 +	sub r1, #0xc +	add r6, r7, #0 +	add r5, r0, r1 +_02255B0C: +	add r0, r4, #0 +	add r1, r5, #0 +	add r2, r6, #0 +	add r3, r7, #0 +	bl VEC_MultAdd +	ldr r0, [sp, #8] +	add r7, #0x38 +	add r0, r0, #1 +	str r0, [sp, #8] +	ldr r0, [sp, #4] +	add r6, #0x38 +	ldr r1, [r0] +	ldr r0, [sp, #8] +	add r5, #0x38 +	cmp r0, r1 +	blt _02255B0C +_02255B2E: +	ldr r0, [sp, #0x28] +	cmp r0, #5 +	bls _02255B36 +	b _02255DBA +_02255B36: +	add r0, r0, r0 +	add r0, pc +	ldrh r0, [r0, #6] +	lsl r0, r0, #0x10 +	asr r0, r0, #0x10 +	add pc, r0 +_02255B42: ; jump table +	.short _02255DBA - _02255B42 - 2 ; case 0 +	.short _02255B4E - _02255B42 - 2 ; case 1 +	.short _02255D7C - _02255B42 - 2 ; case 2 +	.short _02255D7C - _02255B42 - 2 ; case 3 +	.short _02255D9C - _02255B42 - 2 ; case 4 +	.short _02255D9C - _02255B42 - 2 ; case 5 +_02255B4E: +	ldr r1, [sp, #0x30] +	mov r0, #0x38 +	add r6, r1, #0 +	ldr r1, [sp] +	mul r6, r0 +	add r1, r1, r6 +	str r1, [sp, #0xc] +	mov r1, #0x16 +	ldr r2, [sp, #0xc] +	lsl r1, r1, #4 +	ldrb r2, [r2, r1] +	cmp r2, #3 +	bne _02255C1C +	ldr r2, [sp, #0x2c] +	sub r1, #0x24 +	add r7, r2, #0 +	mul r7, r0 +	ldr r0, [sp] +	add r0, r0, r1 +	add r5, r0, r7 +	ldr r0, [r0, r7] +	cmp r0, #0 +	bne _02255B82 +	ldr r0, [r5, #4] +	cmp r0, #0 +	beq _02255B8E +_02255B82: +	ldr r0, [sp] +	ldr r1, _02255CC0 ; =0x00000166 +	add r0, r0, r7 +	ldrb r1, [r0, r1] +	cmp r1, #0 +	beq _02255C02 +_02255B8E: +	mov r1, #0x52 +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r1, r0, r1 +	add r0, r1, r7 +	add r1, r1, r6 +	add r2, sp, #0x68 +	bl VEC_Subtract +	add r0, sp, #0x68 +	add r1, sp, #0x5c +	bl VEC_Normalize +	ldr r0, [sp, #0x5c] +	ldr r2, _02255CC4 ; =0x0000019A +	asr r1, r0, #0x1f +	mov r3, #0 +	bl _ll_mul +	add r2, r0, #0 +	mov r0, #2 +	mov r3, #0 +	lsl r0, r0, #0xa +	add r0, r2, r0 +	adc r1, r3 +	lsl r1, r1, #0x14 +	lsr r0, r0, #0xc +	orr r0, r1 +	str r0, [r5] +	ldr r0, [sp, #0x60] +	ldr r2, _02255CC4 ; =0x0000019A +	asr r1, r0, #0x1f +	bl _ll_mul +	add r2, r0, #0 +	mov r0, #2 +	mov r3, #0 +	lsl r0, r0, #0xa +	add r0, r2, r0 +	adc r1, r3 +	lsl r1, r1, #0x14 +	lsr r0, r0, #0xc +	orr r0, r1 +	str r0, [r5, #4] +	ldr r0, [sp] +	ldr r1, _02255CC0 ; =0x00000166 +	add r0, r0, r7 +	mov r2, #1 +	strb r2, [r0, r1] +	ldr r1, [sp, #0x30] +	cmp r1, #1 +	bne _02255BFC +	ldr r1, [sp, #0x2c] +	cmp r1, #2 +	beq _02255C14 +_02255BFC: +	ldr r1, [sp, #0x2c] +	cmp r1, #1 +	b _02255C14 +_02255C02: +	ldr r2, [r5] +	mov r1, #0 +	mvn r1, r1 +	add r3, r2, #0 +	mul r3, r1 +	str r3, [r5] +	ldr r2, [r5, #4] +	mul r1, r2 +	str r1, [r5, #4] +_02255C14: +	ldr r1, _02255CC8 ; =0x00000163 +	mov r2, #0x14 +	strb r2, [r0, r1] +	b _02255DBA +_02255C1C: +	ldr r2, [sp, #0x2c] +	add r7, r2, #0 +	mul r7, r0 +	ldr r0, [sp] +	add r0, r0, r7 +	ldrb r0, [r0, r1] +	cmp r0, #3 +	bne _02255CE8 +	ldr r0, [sp] +	sub r1, #0x24 +	add r0, r0, r1 +	add r5, r0, r6 +	ldr r0, [r0, r6] +	cmp r0, #0 +	bne _02255C40 +	ldr r0, [r5, #4] +	cmp r0, #0 +	beq _02255C4A +_02255C40: +	ldr r1, _02255CC0 ; =0x00000166 +	ldr r0, [sp, #0xc] +	ldrb r0, [r0, r1] +	cmp r0, #0 +	beq _02255CCC +_02255C4A: +	mov r1, #0x52 +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r1, r0, r1 +	add r0, r1, r6 +	add r1, r1, r7 +	add r2, sp, #0x68 +	bl VEC_Subtract +	add r0, sp, #0x68 +	add r1, sp, #0x5c +	bl VEC_Normalize +	ldr r0, [sp, #0x5c] +	ldr r2, _02255CC4 ; =0x0000019A +	asr r1, r0, #0x1f +	mov r3, #0 +	bl _ll_mul +	mov r2, #2 +	mov r3, #0 +	lsl r2, r2, #0xa +	add r2, r0, r2 +	adc r1, r3 +	lsl r0, r1, #0x14 +	lsr r1, r2, #0xc +	orr r1, r0 +	str r1, [r5] +	ldr r0, [sp, #0x60] +	ldr r2, _02255CC4 ; =0x0000019A +	asr r1, r0, #0x1f +	bl _ll_mul +	mov r2, #2 +	mov r3, #0 +	lsl r2, r2, #0xa +	add r2, r0, r2 +	adc r1, r3 +	lsl r0, r1, #0x14 +	lsr r1, r2, #0xc +	orr r1, r0 +	str r1, [r5, #4] +	ldr r1, _02255CC0 ; =0x00000166 +	ldr r0, [sp, #0xc] +	mov r2, #1 +	strb r2, [r0, r1] +	ldr r0, [sp, #0x30] +	cmp r0, #1 +	bne _02255CB2 +	ldr r0, [sp, #0x2c] +	cmp r0, #2 +	beq _02255CDE +_02255CB2: +	ldr r0, [sp, #0x2c] +	cmp r0, #1 +	b _02255CDE +	.align 2, 0 +_02255CB8: .word 0xFFFF6000 +_02255CBC: .word 0xFFFEA000 +_02255CC0: .word 0x00000166 +_02255CC4: .word 0x0000019A +_02255CC8: .word 0x00000163 +_02255CCC: +	ldr r1, [r5] +	mov r0, #0 +	mvn r0, r0 +	add r2, r1, #0 +	mul r2, r0 +	str r2, [r5] +	ldr r1, [r5, #4] +	mul r0, r1 +	str r0, [r5, #4] +_02255CDE: +	ldr r1, _02255E74 ; =0x00000163 +	ldr r0, [sp, #0xc] +	mov r2, #0x14 +	strb r2, [r0, r1] +	b _02255DBA +_02255CE8: +	ldr r0, [sp] +	sub r1, #0x18 +	add r1, r0, r1 +	add r0, r1, r6 +	add r1, r1, r7 +	add r2, sp, #0x68 +	bl VEC_Subtract +	add r0, sp, #0x68 +	bl VEC_Mag +	add r0, sp, #0x68 +	add r1, sp, #0x5c +	bl VEC_Normalize +	mov r1, #0x4f +	ldr r0, [sp] +	lsl r1, r1, #2 +	add r0, r0, r1 +	str r0, [sp, #0x4c] +	ldr r1, [sp, #0x4c] +	add r0, r0, r6 +	add r1, r1, r7 +	add r2, sp, #0x50 +	bl VEC_Subtract +	add r0, sp, #0x50 +	add r1, sp, #0x5c +	bl VEC_DotProduct +	mov r5, #0x4f +	ldr r2, [sp, #0x4c] +	str r0, [sp, #0x44] +	ldr r3, [sp] +	lsl r5, r5, #2 +	add r3, r3, r5 +	neg r0, r0 +	add r1, sp, #0x5c +	add r2, r2, r6 +	add r3, r3, r6 +	bl VEC_MultAdd +	ldr r3, [sp] +	ldr r2, [sp, #0x4c] +	add r3, r3, r5 +	ldr r0, [sp, #0x44] +	add r1, sp, #0x5c +	add r2, r2, r7 +	add r3, r3, r7 +	bl VEC_MultAdd +	ldr r0, [sp] +	add r1, r5, #0 +	ldr r3, [sp] +	add r1, #0x27 +	add r0, r0, r6 +	mov r2, #0x14 +	strb r2, [r0, r1] +	add r3, r3, r7 +	strb r2, [r3, r1] +	mov r2, #0 +	add r5, r1, #3 +	strb r2, [r0, r5] +	add r0, r5, #0 +	strb r2, [r3, r0] +	ldr r0, [sp, #0x30] +	cmp r0, #1 +	bne _02255D76 +	ldr r0, [sp, #0x2c] +	cmp r0, #2 +	beq _02255DBA +_02255D76: +	ldr r0, [sp, #0x2c] +	cmp r0, #1 +	b _02255DBA +_02255D7C: +	ldr r0, [sp, #0x30] +	mov r1, #0x38 +	add r2, r0, #0 +	mul r2, r1 +	ldr r0, [sp] +	sub r1, #0x39 +	add r0, r0, r2 +	mov r2, #0x4f +	lsl r2, r2, #2 +	ldr r3, [r0, r2] +	mul r1, r3 +	str r1, [r0, r2] +	mov r1, #0 +	add r2, #0x2a +	strb r1, [r0, r2] +	b _02255DBA +_02255D9C: +	ldr r0, [sp, #0x30] +	mov r1, #0x38 +	add r2, r0, #0 +	mul r2, r1 +	ldr r0, [sp] +	sub r1, #0x39 +	add r0, r0, r2 +	mov r2, #5 +	lsl r2, r2, #6 +	ldr r3, [r0, r2] +	mul r1, r3 +	str r1, [r0, r2] +	mov r1, #0 +	add r2, #0x26 +	strb r1, [r0, r2] +_02255DBA: +	ldr r0, [sp, #0x34] +	sub r0, r0, r4 +	str r0, [sp, #0x34] +	ldr r0, [sp, #0x28] +	cmp r0, #0 +	beq _02255DC8 +	b _0225592E +_02255DC8: +	ldr r0, [sp, #4] +	mov r5, #0 +	ldr r0, [r0] +	cmp r0, #0 +	ble _02255E6E +	ldr r4, [sp] +	mov r1, #0x55 +	add r0, r4, #0 +	lsl r1, r1, #2 +	add r7, r0, r1 +	sub r1, #0xc +	add r6, r0, r1 +	str r0, [sp, #0x48] +	add r0, #0xa4 +	str r0, [sp, #0x48] +_02255DE6: +	mov r0, #0x16 +	lsl r0, r0, #4 +	ldrb r0, [r4, r0] +	cmp r0, #3 +	bhs _02255E22 +	mov r0, #0x59 +	lsl r0, r0, #2 +	ldrb r0, [r4, r0] +	cmp r0, #0 +	beq _02255E08 +	mov r0, #0x4d +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	mov r1, #6 +	bl MOD20_02253F28 +	b _02255E22 +_02255E08: +	mov r0, #0x4f +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	cmp r0, #0 +	ble _02255E16 +	mov r1, #7 +	b _02255E18 +_02255E16: +	mov r1, #6 +_02255E18: +	mov r0, #0x4d +	lsl r0, r0, #2 +	ldr r0, [r4, r0] +	bl MOD20_02253F28 +_02255E22: +	ldr r2, [sp, #0x48] +	add r0, r6, #0 +	add r1, r7, #0 +	bl VEC_Add +	ldr r1, [sp] +	ldr r2, [sp] +	mov r0, #0x4d +	lsl r0, r0, #2 +	add r1, #0xa4 +	add r2, #0xa8 +	ldr r0, [r4, r0] +	ldr r1, [r1] +	ldr r2, [r2] +	bl MOD20_02253F64 +	mov r2, #0x53 +	mov r0, #0x4e +	mov r1, #0x52 +	lsl r2, r2, #2 +	lsl r0, r0, #2 +	lsl r1, r1, #2 +	ldr r3, [r4, r2] +	mov r2, #2 +	lsl r2, r2, #0xe +	ldr r0, [r4, r0] +	ldr r1, [r4, r1] +	add r2, r3, r2 +	bl MOD20_02253F64 +	ldr r0, [sp, #4] +	add r5, r5, #1 +	ldr r0, [r0] +	add r4, #0x38 +	add r7, #0x38 +	add r6, #0x38 +	cmp r5, r0 +	blt _02255DE6 +_02255E6E: +	add sp, #0x74 +	pop {r4, r5, r6, r7, pc} +	nop +_02255E74: .word 0x00000163 +	thumb_func_end MOD28_02255920 +	; 0x02255E78 +	.incbin "baserom.nds", 0x28C038, 0x148 | 
